From 0ba4ef11dbfdc1b130fcaf9964b09e3eb579f071 Mon Sep 17 00:00:00 2001 From: Sebastiaan de Schaetzen Date: Sun, 1 Mar 2026 13:22:26 +0100 Subject: [PATCH] Add spring backend --- .../.gradle/8.14.2/fileChanges/last-build.bin | Bin 0 -> 1 bytes .../.gradle/8.14.2/fileHashes/fileHashes.lock | Bin 0 -> 17 bytes backend-spring/.gradle/8.14.2/gc.properties | 0 .../.gradle/8.14/fileChanges/last-build.bin | Bin 0 -> 1 bytes .../.gradle/8.14/fileHashes/fileHashes.lock | Bin 0 -> 17 bytes backend-spring/.gradle/8.14/gc.properties | 0 .../.gradle/9.3.1/checksums/checksums.lock | Bin 0 -> 17 bytes .../.gradle/9.3.1/checksums/md5-checksums.bin | Bin 0 -> 22547 bytes .../9.3.1/checksums/sha1-checksums.bin | Bin 0 -> 26975 bytes .../executionHistory/executionHistory.bin | Bin 0 -> 385892 bytes .../executionHistory/executionHistory.lock | Bin 0 -> 17 bytes .../.gradle/9.3.1/fileChanges/last-build.bin | Bin 0 -> 1 bytes .../.gradle/9.3.1/fileHashes/fileHashes.bin | Bin 0 -> 25897 bytes .../.gradle/9.3.1/fileHashes/fileHashes.lock | Bin 0 -> 17 bytes .../9.3.1/fileHashes/resourceHashesCache.bin | Bin 0 -> 21285 bytes backend-spring/.gradle/9.3.1/gc.properties | 0 .../buildOutputCleanup.lock | Bin 0 -> 17 bytes .../buildOutputCleanup/cache.properties | 2 + .../buildOutputCleanup/outputFiles.bin | Bin 0 -> 19217 bytes backend-spring/.gradle/file-system.probe | Bin 0 -> 8 bytes backend-spring/.gradle/vcs-1/gc.properties | 0 backend-spring/Dockerfile | 17 + backend-spring/build.gradle.kts | 37 + .../AllowancePlannerApplication.class | Bin 0 -> 797 bytes .../controller/ApiController$1.class | Bin 0 -> 1197 bytes .../controller/ApiController.class | Bin 0 -> 15933 bytes .../controller/WebController.class | Bin 0 -> 8108 bytes .../dto/AddAllowanceAmountRequest.class | Bin 0 -> 1722 bytes .../allowanceplanner/dto/AllowanceDto.class | Bin 0 -> 2454 bytes .../dto/BulkUpdateAllowanceRequest.class | Bin 0 -> 1676 bytes .../dto/CreateAllowanceRequest.class | Bin 0 -> 1963 bytes .../dto/CreateTaskRequest.class | Bin 0 -> 2055 bytes .../allowanceplanner/dto/ErrorResponse.class | Bin 0 -> 1493 bytes .../allowanceplanner/dto/HistoryDto.class | Bin 0 -> 1836 bytes .../allowanceplanner/dto/IdResponse.class | Bin 0 -> 1438 bytes .../dto/MessageResponse.class | Bin 0 -> 1507 bytes .../dto/PostHistoryRequest.class | Bin 0 -> 1686 bytes .../allowanceplanner/dto/TaskDto.class | Bin 0 -> 2364 bytes .../dto/TransferRequest.class | Bin 0 -> 1733 bytes .../dto/UpdateAllowanceRequest.class | Bin 0 -> 1963 bytes .../allowanceplanner/dto/UserDto.class | Bin 0 -> 1586 bytes .../dto/UserWithAllowanceDto.class | Bin 0 -> 1807 bytes .../allowanceplanner/entity/Allowance.class | Bin 0 -> 2344 bytes .../allowanceplanner/entity/History.class | Bin 0 -> 1840 bytes .../allowanceplanner/entity/Task.class | Bin 0 -> 2343 bytes .../allowanceplanner/entity/User.class | Bin 0 -> 1627 bytes .../repository/AllowanceRepository.class | Bin 0 -> 1336 bytes .../repository/HistoryRepository.class | Bin 0 -> 644 bytes .../repository/TaskRepository.class | Bin 0 -> 765 bytes .../repository/UserRepository.class | Bin 0 -> 683 bytes .../service/AllowanceService.class | Bin 0 -> 12272 bytes .../service/TaskService.class | Bin 0 -> 7002 bytes ...ransferService$TransferResult$Status.class | Bin 0 -> 1687 bytes .../TransferService$TransferResult.class | Bin 0 -> 2694 bytes .../service/TransferService.class | Bin 0 -> 3062 bytes .../service/UserService.class | Bin 0 -> 3369 bytes .../allowanceplanner/util/ColourUtil.class | Bin 0 -> 1376 bytes .../seeseepuff/allowanceplanner/ApiTest.class | Bin 0 -> 28309 bytes .../allowanceplanner/ColourUtilTest.class | Bin 0 -> 1111 bytes .../reports/problems/problems-report.html | 659 +++++++++ .../addAllowanceIdZero().html | 116 ++ .../addAllowanceSimple().html | 116 ++ .../addAllowanceWithSpillage().html | 116 ++ .../completeAllowance().html | 116 ++ ...completeAllowanceInvalidAllowanceId().html | 116 ++ .../completeAllowanceInvalidUserId().html | 116 ++ .../completeTask().html | 116 ++ .../completeTaskAllowanceWeightsSumTo0().html | 116 ++ .../completeTaskInvalidId().html | 116 ++ .../completeTaskWithNoWeights().html | 116 ++ .../createTask().html | 116 ++ .../createTaskInvalidAssignedUser().html | 116 ++ .../createTaskInvalidRequestBody().html | 116 ++ .../createTaskNoName().html | 116 ++ .../createUserAllowance().html | 116 ++ .../createUserAllowanceBadId().html | 116 ++ .../createUserAllowanceInvalidInput().html | 117 ++ .../createUserAllowanceNoUser().html | 116 ++ .../deleteTask().html | 116 ++ .../deleteTaskNotFound().html | 116 ++ .../deleteUserAllowance().html | 116 ++ .../deleteUserAllowanceInvalidId().html | 116 ++ .../deleteUserAllowanceNotFound().html | 134 ++ .../deleteUserRestAllowance().html | 116 ++ .../getHistory().html | 116 ++ .../getTask().html | 116 ++ .../getTaskBadId().html | 116 ++ .../getTaskInvalidId().html | 116 ++ .../getTaskWhenNoTasks().html | 116 ++ .../getTasksWhenTasks().html | 116 ++ .../getUser().html | 116 ++ .../getUserAllowance().html | 116 ++ .../getUserAllowanceBadId().html | 116 ++ .../getUserAllowanceById().html | 116 ++ .../getUserAllowanceNoUser().html | 116 ++ ...UserAllowanceWhenNoAllowancePresent().html | 116 ++ .../getUserBadId().html | 116 ++ ...etUserByAllowanceByIdBadAllowanceId().html | 116 ++ .../getUserByAllowanceByIdBadUserId().html | 116 ++ ...getUserByAllowanceByIdInvalidUserId().html | 116 ++ ...etUserByAllowanceIdInvalidAllowance().html | 116 ++ .../getUserUnknown().html | 116 ++ .../getUsers().html | 116 ++ .../index.html | 818 +++++++++++ .../postHistory().html | 116 ++ .../postHistoryInvalidDescription().html | 116 ++ .../postHistoryInvalidUserId().html | 116 ++ .../putAllowanceById().html | 116 ++ .../putBulkAllowance().html | 116 ++ .../putTaskInvalidTaskId().html | 116 ++ .../putTaskModifiesTask().html | 116 ++ .../subtractAllowanceIdZero().html | 116 ++ .../subtractAllowanceSimple().html | 116 ++ .../transferCapsAtTarget().html | 116 ++ .../transferDifferentUsersFails().html | 116 ++ .../transferInsufficientFunds().html | 116 ++ .../transferNotFound().html | 116 ++ .../transferSuccessful().html | 116 ++ .../index.html | 144 ++ .../reports/tests/test/css/base-style.css | 175 +++ .../build/reports/tests/test/css/style.css | 154 ++ .../build/reports/tests/test/index.html | 127 ++ .../build/reports/tests/test/js/report.js | 228 +++ .../resources/main/application.properties | 12 + .../main/db/migration/V1__initial.sql | 42 + .../build/resources/main/templates/index.html | 122 ++ ...be.seeseepuff.allowanceplanner.ApiTest.xml | 715 ++++++++++ ...eepuff.allowanceplanner.ColourUtilTest.xml | 10 + .../test/binary/output-events.bin | Bin 0 -> 136341 bytes .../test/binary/results-generic.bin | Bin 0 -> 6035 bytes .../AllowanceRepository.class.uniqueId4 | Bin 0 -> 1324 bytes .../AllowanceService.class.uniqueId2 | Bin 0 -> 12260 bytes .../stash-dir/ApiController$1.class.uniqueId8 | Bin 0 -> 1197 bytes .../stash-dir/ApiController.class.uniqueId6 | Bin 0 -> 15933 bytes .../stash-dir/TaskService.class.uniqueId0 | Bin 0 -> 7002 bytes ...vice$TransferResult$Status.class.uniqueId3 | Bin 0 -> 1687 bytes ...sferService$TransferResult.class.uniqueId5 | Bin 0 -> 2694 bytes .../stash-dir/TransferService.class.uniqueId1 | Bin 0 -> 3062 bytes .../stash-dir/WebController.class.uniqueId7 | Bin 0 -> 8108 bytes .../compileJava/previous-compilation-data.bin | Bin 0 -> 42423 bytes .../previous-compilation-data.bin | Bin 0 -> 127948 bytes .../gradle/wrapper/gradle-wrapper.jar | Bin 0 -> 46175 bytes .../gradle/wrapper/gradle-wrapper.properties | 7 + backend-spring/gradlew | 248 ++++ backend-spring/gradlew.bat | 93 ++ backend-spring/settings.gradle.kts | 1 + .../AllowancePlannerApplication.java | 13 + .../controller/ApiController.java | 506 +++++++ .../controller/WebController.java | 173 +++ .../dto/AddAllowanceAmountRequest.java | 5 + .../allowanceplanner/dto/AllowanceDto.java | 8 + .../dto/BulkUpdateAllowanceRequest.java | 5 + .../dto/CreateAllowanceRequest.java | 5 + .../dto/CreateTaskRequest.java | 11 + .../allowanceplanner/dto/ErrorResponse.java | 5 + .../allowanceplanner/dto/HistoryDto.java | 7 + .../allowanceplanner/dto/IdResponse.java | 5 + .../allowanceplanner/dto/MessageResponse.java | 5 + .../dto/PostHistoryRequest.java | 5 + .../allowanceplanner/dto/TaskDto.java | 8 + .../allowanceplanner/dto/TransferRequest.java | 5 + .../dto/UpdateAllowanceRequest.java | 5 + .../allowanceplanner/dto/UserDto.java | 5 + .../dto/UserWithAllowanceDto.java | 5 + .../allowanceplanner/entity/Allowance.java | 99 ++ .../allowanceplanner/entity/History.java | 73 + .../allowanceplanner/entity/Task.java | 97 ++ .../allowanceplanner/entity/User.java | 61 + .../repository/AllowanceRepository.java | 27 + .../repository/HistoryRepository.java | 13 + .../repository/TaskRepository.java | 16 + .../repository/UserRepository.java | 13 + .../service/AllowanceService.java | 298 ++++ .../allowanceplanner/service/TaskService.java | 132 ++ .../service/TransferService.java | 102 ++ .../allowanceplanner/service/UserService.java | 42 + .../allowanceplanner/util/ColourUtil.java | 42 + .../src/main/resources/application.properties | 12 + .../resources/db/migration/V1__initial.sql | 42 + .../src/main/resources/templates/index.html | 122 ++ .../seeseepuff/allowanceplanner/ApiTest.java | 1242 +++++++++++++++++ .../allowanceplanner/ColourUtilTest.java | 33 + 182 files changed, 13489 insertions(+) create mode 100644 backend-spring/.gradle/8.14.2/fileChanges/last-build.bin create mode 100644 backend-spring/.gradle/8.14.2/fileHashes/fileHashes.lock create mode 100644 backend-spring/.gradle/8.14.2/gc.properties create mode 100644 backend-spring/.gradle/8.14/fileChanges/last-build.bin create mode 100644 backend-spring/.gradle/8.14/fileHashes/fileHashes.lock create mode 100644 backend-spring/.gradle/8.14/gc.properties create mode 100644 backend-spring/.gradle/9.3.1/checksums/checksums.lock create mode 100644 backend-spring/.gradle/9.3.1/checksums/md5-checksums.bin create mode 100644 backend-spring/.gradle/9.3.1/checksums/sha1-checksums.bin create mode 100644 backend-spring/.gradle/9.3.1/executionHistory/executionHistory.bin create mode 100644 backend-spring/.gradle/9.3.1/executionHistory/executionHistory.lock create mode 100644 backend-spring/.gradle/9.3.1/fileChanges/last-build.bin create mode 100644 backend-spring/.gradle/9.3.1/fileHashes/fileHashes.bin create mode 100644 backend-spring/.gradle/9.3.1/fileHashes/fileHashes.lock create mode 100644 backend-spring/.gradle/9.3.1/fileHashes/resourceHashesCache.bin create mode 100644 backend-spring/.gradle/9.3.1/gc.properties create mode 100644 backend-spring/.gradle/buildOutputCleanup/buildOutputCleanup.lock create mode 100644 backend-spring/.gradle/buildOutputCleanup/cache.properties create mode 100644 backend-spring/.gradle/buildOutputCleanup/outputFiles.bin create mode 100644 backend-spring/.gradle/file-system.probe create mode 100644 backend-spring/.gradle/vcs-1/gc.properties create mode 100644 backend-spring/Dockerfile create mode 100644 backend-spring/build.gradle.kts create mode 100644 backend-spring/build/classes/java/main/be/seeseepuff/allowanceplanner/AllowancePlannerApplication.class create mode 100644 backend-spring/build/classes/java/main/be/seeseepuff/allowanceplanner/controller/ApiController$1.class create mode 100644 backend-spring/build/classes/java/main/be/seeseepuff/allowanceplanner/controller/ApiController.class create mode 100644 backend-spring/build/classes/java/main/be/seeseepuff/allowanceplanner/controller/WebController.class create mode 100644 backend-spring/build/classes/java/main/be/seeseepuff/allowanceplanner/dto/AddAllowanceAmountRequest.class create mode 100644 backend-spring/build/classes/java/main/be/seeseepuff/allowanceplanner/dto/AllowanceDto.class create mode 100644 backend-spring/build/classes/java/main/be/seeseepuff/allowanceplanner/dto/BulkUpdateAllowanceRequest.class create mode 100644 backend-spring/build/classes/java/main/be/seeseepuff/allowanceplanner/dto/CreateAllowanceRequest.class create mode 100644 backend-spring/build/classes/java/main/be/seeseepuff/allowanceplanner/dto/CreateTaskRequest.class create mode 100644 backend-spring/build/classes/java/main/be/seeseepuff/allowanceplanner/dto/ErrorResponse.class create mode 100644 backend-spring/build/classes/java/main/be/seeseepuff/allowanceplanner/dto/HistoryDto.class create mode 100644 backend-spring/build/classes/java/main/be/seeseepuff/allowanceplanner/dto/IdResponse.class create mode 100644 backend-spring/build/classes/java/main/be/seeseepuff/allowanceplanner/dto/MessageResponse.class create mode 100644 backend-spring/build/classes/java/main/be/seeseepuff/allowanceplanner/dto/PostHistoryRequest.class create mode 100644 backend-spring/build/classes/java/main/be/seeseepuff/allowanceplanner/dto/TaskDto.class create mode 100644 backend-spring/build/classes/java/main/be/seeseepuff/allowanceplanner/dto/TransferRequest.class create mode 100644 backend-spring/build/classes/java/main/be/seeseepuff/allowanceplanner/dto/UpdateAllowanceRequest.class create mode 100644 backend-spring/build/classes/java/main/be/seeseepuff/allowanceplanner/dto/UserDto.class create mode 100644 backend-spring/build/classes/java/main/be/seeseepuff/allowanceplanner/dto/UserWithAllowanceDto.class create mode 100644 backend-spring/build/classes/java/main/be/seeseepuff/allowanceplanner/entity/Allowance.class create mode 100644 backend-spring/build/classes/java/main/be/seeseepuff/allowanceplanner/entity/History.class create mode 100644 backend-spring/build/classes/java/main/be/seeseepuff/allowanceplanner/entity/Task.class create mode 100644 backend-spring/build/classes/java/main/be/seeseepuff/allowanceplanner/entity/User.class create mode 100644 backend-spring/build/classes/java/main/be/seeseepuff/allowanceplanner/repository/AllowanceRepository.class create mode 100644 backend-spring/build/classes/java/main/be/seeseepuff/allowanceplanner/repository/HistoryRepository.class create mode 100644 backend-spring/build/classes/java/main/be/seeseepuff/allowanceplanner/repository/TaskRepository.class create mode 100644 backend-spring/build/classes/java/main/be/seeseepuff/allowanceplanner/repository/UserRepository.class create mode 100644 backend-spring/build/classes/java/main/be/seeseepuff/allowanceplanner/service/AllowanceService.class create mode 100644 backend-spring/build/classes/java/main/be/seeseepuff/allowanceplanner/service/TaskService.class create mode 100644 backend-spring/build/classes/java/main/be/seeseepuff/allowanceplanner/service/TransferService$TransferResult$Status.class create mode 100644 backend-spring/build/classes/java/main/be/seeseepuff/allowanceplanner/service/TransferService$TransferResult.class create mode 100644 backend-spring/build/classes/java/main/be/seeseepuff/allowanceplanner/service/TransferService.class create mode 100644 backend-spring/build/classes/java/main/be/seeseepuff/allowanceplanner/service/UserService.class create mode 100644 backend-spring/build/classes/java/main/be/seeseepuff/allowanceplanner/util/ColourUtil.class create mode 100644 backend-spring/build/classes/java/test/be/seeseepuff/allowanceplanner/ApiTest.class create mode 100644 backend-spring/build/classes/java/test/be/seeseepuff/allowanceplanner/ColourUtilTest.class create mode 100644 backend-spring/build/reports/problems/problems-report.html create mode 100644 backend-spring/build/reports/tests/test/be.seeseepuff.allowanceplanner.ApiTest/addAllowanceIdZero().html create mode 100644 backend-spring/build/reports/tests/test/be.seeseepuff.allowanceplanner.ApiTest/addAllowanceSimple().html create mode 100644 backend-spring/build/reports/tests/test/be.seeseepuff.allowanceplanner.ApiTest/addAllowanceWithSpillage().html create mode 100644 backend-spring/build/reports/tests/test/be.seeseepuff.allowanceplanner.ApiTest/completeAllowance().html create mode 100644 backend-spring/build/reports/tests/test/be.seeseepuff.allowanceplanner.ApiTest/completeAllowanceInvalidAllowanceId().html create mode 100644 backend-spring/build/reports/tests/test/be.seeseepuff.allowanceplanner.ApiTest/completeAllowanceInvalidUserId().html create mode 100644 backend-spring/build/reports/tests/test/be.seeseepuff.allowanceplanner.ApiTest/completeTask().html create mode 100644 backend-spring/build/reports/tests/test/be.seeseepuff.allowanceplanner.ApiTest/completeTaskAllowanceWeightsSumTo0().html create mode 100644 backend-spring/build/reports/tests/test/be.seeseepuff.allowanceplanner.ApiTest/completeTaskInvalidId().html create mode 100644 backend-spring/build/reports/tests/test/be.seeseepuff.allowanceplanner.ApiTest/completeTaskWithNoWeights().html create mode 100644 backend-spring/build/reports/tests/test/be.seeseepuff.allowanceplanner.ApiTest/createTask().html create mode 100644 backend-spring/build/reports/tests/test/be.seeseepuff.allowanceplanner.ApiTest/createTaskInvalidAssignedUser().html create mode 100644 backend-spring/build/reports/tests/test/be.seeseepuff.allowanceplanner.ApiTest/createTaskInvalidRequestBody().html create mode 100644 backend-spring/build/reports/tests/test/be.seeseepuff.allowanceplanner.ApiTest/createTaskNoName().html create mode 100644 backend-spring/build/reports/tests/test/be.seeseepuff.allowanceplanner.ApiTest/createUserAllowance().html create mode 100644 backend-spring/build/reports/tests/test/be.seeseepuff.allowanceplanner.ApiTest/createUserAllowanceBadId().html create mode 100644 backend-spring/build/reports/tests/test/be.seeseepuff.allowanceplanner.ApiTest/createUserAllowanceInvalidInput().html create mode 100644 backend-spring/build/reports/tests/test/be.seeseepuff.allowanceplanner.ApiTest/createUserAllowanceNoUser().html create mode 100644 backend-spring/build/reports/tests/test/be.seeseepuff.allowanceplanner.ApiTest/deleteTask().html create mode 100644 backend-spring/build/reports/tests/test/be.seeseepuff.allowanceplanner.ApiTest/deleteTaskNotFound().html create mode 100644 backend-spring/build/reports/tests/test/be.seeseepuff.allowanceplanner.ApiTest/deleteUserAllowance().html create mode 100644 backend-spring/build/reports/tests/test/be.seeseepuff.allowanceplanner.ApiTest/deleteUserAllowanceInvalidId().html create mode 100644 backend-spring/build/reports/tests/test/be.seeseepuff.allowanceplanner.ApiTest/deleteUserAllowanceNotFound().html create mode 100644 backend-spring/build/reports/tests/test/be.seeseepuff.allowanceplanner.ApiTest/deleteUserRestAllowance().html create mode 100644 backend-spring/build/reports/tests/test/be.seeseepuff.allowanceplanner.ApiTest/getHistory().html create mode 100644 backend-spring/build/reports/tests/test/be.seeseepuff.allowanceplanner.ApiTest/getTask().html create mode 100644 backend-spring/build/reports/tests/test/be.seeseepuff.allowanceplanner.ApiTest/getTaskBadId().html create mode 100644 backend-spring/build/reports/tests/test/be.seeseepuff.allowanceplanner.ApiTest/getTaskInvalidId().html create mode 100644 backend-spring/build/reports/tests/test/be.seeseepuff.allowanceplanner.ApiTest/getTaskWhenNoTasks().html create mode 100644 backend-spring/build/reports/tests/test/be.seeseepuff.allowanceplanner.ApiTest/getTasksWhenTasks().html create mode 100644 backend-spring/build/reports/tests/test/be.seeseepuff.allowanceplanner.ApiTest/getUser().html create mode 100644 backend-spring/build/reports/tests/test/be.seeseepuff.allowanceplanner.ApiTest/getUserAllowance().html create mode 100644 backend-spring/build/reports/tests/test/be.seeseepuff.allowanceplanner.ApiTest/getUserAllowanceBadId().html create mode 100644 backend-spring/build/reports/tests/test/be.seeseepuff.allowanceplanner.ApiTest/getUserAllowanceById().html create mode 100644 backend-spring/build/reports/tests/test/be.seeseepuff.allowanceplanner.ApiTest/getUserAllowanceNoUser().html create mode 100644 backend-spring/build/reports/tests/test/be.seeseepuff.allowanceplanner.ApiTest/getUserAllowanceWhenNoAllowancePresent().html create mode 100644 backend-spring/build/reports/tests/test/be.seeseepuff.allowanceplanner.ApiTest/getUserBadId().html create mode 100644 backend-spring/build/reports/tests/test/be.seeseepuff.allowanceplanner.ApiTest/getUserByAllowanceByIdBadAllowanceId().html create mode 100644 backend-spring/build/reports/tests/test/be.seeseepuff.allowanceplanner.ApiTest/getUserByAllowanceByIdBadUserId().html create mode 100644 backend-spring/build/reports/tests/test/be.seeseepuff.allowanceplanner.ApiTest/getUserByAllowanceByIdInvalidUserId().html create mode 100644 backend-spring/build/reports/tests/test/be.seeseepuff.allowanceplanner.ApiTest/getUserByAllowanceIdInvalidAllowance().html create mode 100644 backend-spring/build/reports/tests/test/be.seeseepuff.allowanceplanner.ApiTest/getUserUnknown().html create mode 100644 backend-spring/build/reports/tests/test/be.seeseepuff.allowanceplanner.ApiTest/getUsers().html create mode 100644 backend-spring/build/reports/tests/test/be.seeseepuff.allowanceplanner.ApiTest/index.html create mode 100644 backend-spring/build/reports/tests/test/be.seeseepuff.allowanceplanner.ApiTest/postHistory().html create mode 100644 backend-spring/build/reports/tests/test/be.seeseepuff.allowanceplanner.ApiTest/postHistoryInvalidDescription().html create mode 100644 backend-spring/build/reports/tests/test/be.seeseepuff.allowanceplanner.ApiTest/postHistoryInvalidUserId().html create mode 100644 backend-spring/build/reports/tests/test/be.seeseepuff.allowanceplanner.ApiTest/putAllowanceById().html create mode 100644 backend-spring/build/reports/tests/test/be.seeseepuff.allowanceplanner.ApiTest/putBulkAllowance().html create mode 100644 backend-spring/build/reports/tests/test/be.seeseepuff.allowanceplanner.ApiTest/putTaskInvalidTaskId().html create mode 100644 backend-spring/build/reports/tests/test/be.seeseepuff.allowanceplanner.ApiTest/putTaskModifiesTask().html create mode 100644 backend-spring/build/reports/tests/test/be.seeseepuff.allowanceplanner.ApiTest/subtractAllowanceIdZero().html create mode 100644 backend-spring/build/reports/tests/test/be.seeseepuff.allowanceplanner.ApiTest/subtractAllowanceSimple().html create mode 100644 backend-spring/build/reports/tests/test/be.seeseepuff.allowanceplanner.ApiTest/transferCapsAtTarget().html create mode 100644 backend-spring/build/reports/tests/test/be.seeseepuff.allowanceplanner.ApiTest/transferDifferentUsersFails().html create mode 100644 backend-spring/build/reports/tests/test/be.seeseepuff.allowanceplanner.ApiTest/transferInsufficientFunds().html create mode 100644 backend-spring/build/reports/tests/test/be.seeseepuff.allowanceplanner.ApiTest/transferNotFound().html create mode 100644 backend-spring/build/reports/tests/test/be.seeseepuff.allowanceplanner.ApiTest/transferSuccessful().html create mode 100644 backend-spring/build/reports/tests/test/be.seeseepuff.allowanceplanner.ColourUtilTest/index.html create mode 100644 backend-spring/build/reports/tests/test/css/base-style.css create mode 100644 backend-spring/build/reports/tests/test/css/style.css create mode 100644 backend-spring/build/reports/tests/test/index.html create mode 100644 backend-spring/build/reports/tests/test/js/report.js create mode 100644 backend-spring/build/resources/main/application.properties create mode 100644 backend-spring/build/resources/main/db/migration/V1__initial.sql create mode 100644 backend-spring/build/resources/main/templates/index.html create mode 100644 backend-spring/build/test-results/test/TEST-be.seeseepuff.allowanceplanner.ApiTest.xml create mode 100644 backend-spring/build/test-results/test/TEST-be.seeseepuff.allowanceplanner.ColourUtilTest.xml create mode 100644 backend-spring/build/test-results/test/binary/output-events.bin create mode 100644 backend-spring/build/test-results/test/binary/results-generic.bin create mode 100644 backend-spring/build/tmp/compileJava/compileTransaction/stash-dir/AllowanceRepository.class.uniqueId4 create mode 100644 backend-spring/build/tmp/compileJava/compileTransaction/stash-dir/AllowanceService.class.uniqueId2 create mode 100644 backend-spring/build/tmp/compileJava/compileTransaction/stash-dir/ApiController$1.class.uniqueId8 create mode 100644 backend-spring/build/tmp/compileJava/compileTransaction/stash-dir/ApiController.class.uniqueId6 create mode 100644 backend-spring/build/tmp/compileJava/compileTransaction/stash-dir/TaskService.class.uniqueId0 create mode 100644 backend-spring/build/tmp/compileJava/compileTransaction/stash-dir/TransferService$TransferResult$Status.class.uniqueId3 create mode 100644 backend-spring/build/tmp/compileJava/compileTransaction/stash-dir/TransferService$TransferResult.class.uniqueId5 create mode 100644 backend-spring/build/tmp/compileJava/compileTransaction/stash-dir/TransferService.class.uniqueId1 create mode 100644 backend-spring/build/tmp/compileJava/compileTransaction/stash-dir/WebController.class.uniqueId7 create mode 100644 backend-spring/build/tmp/compileJava/previous-compilation-data.bin create mode 100644 backend-spring/build/tmp/compileTestJava/previous-compilation-data.bin create mode 100644 backend-spring/gradle/wrapper/gradle-wrapper.jar create mode 100644 backend-spring/gradle/wrapper/gradle-wrapper.properties create mode 100755 backend-spring/gradlew create mode 100644 backend-spring/gradlew.bat create mode 100644 backend-spring/settings.gradle.kts create mode 100644 backend-spring/src/main/java/be/seeseepuff/allowanceplanner/AllowancePlannerApplication.java create mode 100644 backend-spring/src/main/java/be/seeseepuff/allowanceplanner/controller/ApiController.java create mode 100644 backend-spring/src/main/java/be/seeseepuff/allowanceplanner/controller/WebController.java create mode 100644 backend-spring/src/main/java/be/seeseepuff/allowanceplanner/dto/AddAllowanceAmountRequest.java create mode 100644 backend-spring/src/main/java/be/seeseepuff/allowanceplanner/dto/AllowanceDto.java create mode 100644 backend-spring/src/main/java/be/seeseepuff/allowanceplanner/dto/BulkUpdateAllowanceRequest.java create mode 100644 backend-spring/src/main/java/be/seeseepuff/allowanceplanner/dto/CreateAllowanceRequest.java create mode 100644 backend-spring/src/main/java/be/seeseepuff/allowanceplanner/dto/CreateTaskRequest.java create mode 100644 backend-spring/src/main/java/be/seeseepuff/allowanceplanner/dto/ErrorResponse.java create mode 100644 backend-spring/src/main/java/be/seeseepuff/allowanceplanner/dto/HistoryDto.java create mode 100644 backend-spring/src/main/java/be/seeseepuff/allowanceplanner/dto/IdResponse.java create mode 100644 backend-spring/src/main/java/be/seeseepuff/allowanceplanner/dto/MessageResponse.java create mode 100644 backend-spring/src/main/java/be/seeseepuff/allowanceplanner/dto/PostHistoryRequest.java create mode 100644 backend-spring/src/main/java/be/seeseepuff/allowanceplanner/dto/TaskDto.java create mode 100644 backend-spring/src/main/java/be/seeseepuff/allowanceplanner/dto/TransferRequest.java create mode 100644 backend-spring/src/main/java/be/seeseepuff/allowanceplanner/dto/UpdateAllowanceRequest.java create mode 100644 backend-spring/src/main/java/be/seeseepuff/allowanceplanner/dto/UserDto.java create mode 100644 backend-spring/src/main/java/be/seeseepuff/allowanceplanner/dto/UserWithAllowanceDto.java create mode 100644 backend-spring/src/main/java/be/seeseepuff/allowanceplanner/entity/Allowance.java create mode 100644 backend-spring/src/main/java/be/seeseepuff/allowanceplanner/entity/History.java create mode 100644 backend-spring/src/main/java/be/seeseepuff/allowanceplanner/entity/Task.java create mode 100644 backend-spring/src/main/java/be/seeseepuff/allowanceplanner/entity/User.java create mode 100644 backend-spring/src/main/java/be/seeseepuff/allowanceplanner/repository/AllowanceRepository.java create mode 100644 backend-spring/src/main/java/be/seeseepuff/allowanceplanner/repository/HistoryRepository.java create mode 100644 backend-spring/src/main/java/be/seeseepuff/allowanceplanner/repository/TaskRepository.java create mode 100644 backend-spring/src/main/java/be/seeseepuff/allowanceplanner/repository/UserRepository.java create mode 100644 backend-spring/src/main/java/be/seeseepuff/allowanceplanner/service/AllowanceService.java create mode 100644 backend-spring/src/main/java/be/seeseepuff/allowanceplanner/service/TaskService.java create mode 100644 backend-spring/src/main/java/be/seeseepuff/allowanceplanner/service/TransferService.java create mode 100644 backend-spring/src/main/java/be/seeseepuff/allowanceplanner/service/UserService.java create mode 100644 backend-spring/src/main/java/be/seeseepuff/allowanceplanner/util/ColourUtil.java create mode 100644 backend-spring/src/main/resources/application.properties create mode 100644 backend-spring/src/main/resources/db/migration/V1__initial.sql create mode 100644 backend-spring/src/main/resources/templates/index.html create mode 100644 backend-spring/src/test/java/be/seeseepuff/allowanceplanner/ApiTest.java create mode 100644 backend-spring/src/test/java/be/seeseepuff/allowanceplanner/ColourUtilTest.java diff --git a/backend-spring/.gradle/8.14.2/fileChanges/last-build.bin b/backend-spring/.gradle/8.14.2/fileChanges/last-build.bin new file mode 100644 index 0000000000000000000000000000000000000000..f76dd238ade08917e6712764a16a22005a50573d GIT binary patch literal 1 IcmZPo000310RR91 literal 0 HcmV?d00001 diff --git a/backend-spring/.gradle/8.14.2/fileHashes/fileHashes.lock b/backend-spring/.gradle/8.14.2/fileHashes/fileHashes.lock new file mode 100644 index 0000000000000000000000000000000000000000..b7b63d0382e4613ccb8448a8374acf5de61dd558 GIT binary patch literal 17 TcmZQRbk|?>wBNi<3{U_7I0gi8 literal 0 HcmV?d00001 diff --git a/backend-spring/.gradle/8.14.2/gc.properties b/backend-spring/.gradle/8.14.2/gc.properties new file mode 100644 index 0000000..e69de29 diff --git a/backend-spring/.gradle/8.14/fileChanges/last-build.bin b/backend-spring/.gradle/8.14/fileChanges/last-build.bin new file mode 100644 index 0000000000000000000000000000000000000000..f76dd238ade08917e6712764a16a22005a50573d GIT binary patch literal 1 IcmZPo000310RR91 literal 0 HcmV?d00001 diff --git a/backend-spring/.gradle/8.14/fileHashes/fileHashes.lock b/backend-spring/.gradle/8.14/fileHashes/fileHashes.lock new file mode 100644 index 0000000000000000000000000000000000000000..efbed8a2310256f4f0264cfda43f59901a2c1e35 GIT binary patch literal 17 ScmZR+B*WmO+`LJE0SW*iD*~JV literal 0 HcmV?d00001 diff --git a/backend-spring/.gradle/8.14/gc.properties b/backend-spring/.gradle/8.14/gc.properties new file mode 100644 index 0000000..e69de29 diff --git a/backend-spring/.gradle/9.3.1/checksums/checksums.lock b/backend-spring/.gradle/9.3.1/checksums/checksums.lock new file mode 100644 index 0000000000000000000000000000000000000000..6feb0c0db549c3ce8a576c1d85372078dccb3968 GIT binary patch literal 17 VcmZSf>0RT6y1gro6 literal 0 HcmV?d00001 diff --git a/backend-spring/.gradle/9.3.1/checksums/md5-checksums.bin b/backend-spring/.gradle/9.3.1/checksums/md5-checksums.bin new file mode 100644 index 0000000000000000000000000000000000000000..abc5d6a9cc5af58e8bf54a240d23485e513465e8 GIT binary patch literal 22547 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 E2e}Ij0{{R3 literal 0 HcmV?d00001 diff --git a/backend-spring/.gradle/9.3.1/checksums/sha1-checksums.bin b/backend-spring/.gradle/9.3.1/checksums/sha1-checksums.bin new file mode 100644 index 0000000000000000000000000000000000000000..d2df6fd1a9fefa3f017c70b67b0cc0f7e313e21b GIT binary patch literal 26975 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 PxdpNK@DiCA8*Kd#vHQ)7 literal 0 HcmV?d00001 diff --git a/backend-spring/.gradle/9.3.1/executionHistory/executionHistory.bin b/backend-spring/.gradle/9.3.1/executionHistory/executionHistory.bin new file mode 100644 index 0000000000000000000000000000000000000000..da83d8d222bc98f06c59e62004179c143eb82543 GIT binary patch literal 385892 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 literal 0 HcmV?d00001 diff --git a/backend-spring/.gradle/9.3.1/fileHashes/fileHashes.lock b/backend-spring/.gradle/9.3.1/fileHashes/fileHashes.lock new file mode 100644 index 0000000000000000000000000000000000000000..1d78bd6d0c7c0efdfe1667a186fb7c094e6f195f GIT binary patch literal 17 VcmZQxBP(6KZqtEx3}C>l4gfSs1e*W= literal 0 HcmV?d00001 diff --git a/backend-spring/.gradle/9.3.1/fileHashes/resourceHashesCache.bin b/backend-spring/.gradle/9.3.1/fileHashes/resourceHashesCache.bin new file mode 100644 index 0000000000000000000000000000000000000000..f96e22e4fa303df7c42e6a433a7aa570dbfcf062 GIT binary patch literal 21285 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 literal 0 HcmV?d00001 diff --git a/backend-spring/.gradle/9.3.1/gc.properties b/backend-spring/.gradle/9.3.1/gc.properties new file mode 100644 index 0000000..e69de29 diff --git a/backend-spring/.gradle/buildOutputCleanup/buildOutputCleanup.lock b/backend-spring/.gradle/buildOutputCleanup/buildOutputCleanup.lock new file mode 100644 index 0000000000000000000000000000000000000000..1369599f9ef8820899a517fdb2cc6b1e6ec44362 GIT binary patch literal 17 VcmZQh*ibp)8T%h21~6dk1OPR>1i}CS literal 0 HcmV?d00001 diff --git a/backend-spring/.gradle/buildOutputCleanup/cache.properties b/backend-spring/.gradle/buildOutputCleanup/cache.properties new file mode 100644 index 0000000..3dc08d3 --- /dev/null +++ b/backend-spring/.gradle/buildOutputCleanup/cache.properties @@ -0,0 +1,2 @@ +#Sat Feb 28 18:28:04 CET 2026 +gradle.version=9.3.1 diff --git a/backend-spring/.gradle/buildOutputCleanup/outputFiles.bin b/backend-spring/.gradle/buildOutputCleanup/outputFiles.bin new file mode 100644 index 0000000000000000000000000000000000000000..b2c62698515f3971ad247c5a2020e7416adb5d4e GIT binary patch literal 19217 zcmeI&Ye-XJ9LMovmZ3&UXxIxiD{m>97DS1b6}in?c|!@qY)wM6GE-Bs5?Ue{CCe;L z%R)&@OiDDZoGyzbscD3lLNUX{!b>d55Su;Ee-e8mgL+ZF17|yY&i{E1=lgcsCJ1)c z)BF%-58K>%iC8pa2S>01BW03ZMWApa2S>01BW03ZMWApa2S>01Eso1tN4WV!>X< z&U4<(g;km$tXZVHa8pQcJswY+-^^}{!sz#d(vEVaTZVdwxww)1Mn?5$c!$>^?h3u< zjw zOSq?zt55ph9*dJHm`j57UTZIlnD80q^IGy&vo_yNrslzXzK*;{7Fv2t(csEl>_PrE zD*9ln1Sc|@|sr##i^1>6sl zM{R5#F#8bc$6WNDJi2p-(;KUouer;~V-hEAMy{rYbJvjXS6$N__lh6j-b5~+E|ynD zjy+*6c}^ZzAas3QpZSz~FZsb0_JQYen)>-ZIppyV1JoBs9GsYoW66_-8#VQVC6;`? ziacZYm7fCV%&Qf?rhvXhO3O*`OmE~+}Svp%bObRJeO65Gr!~~;G84& literal 0 HcmV?d00001 diff --git a/backend-spring/.gradle/file-system.probe b/backend-spring/.gradle/file-system.probe new file mode 100644 index 0000000000000000000000000000000000000000..cce3f30b7a9b6cffa5f88263ee536c8347ebcf0e GIT binary patch literal 8 PcmZQzV4SnmyR;nu2mk_# literal 0 HcmV?d00001 diff --git a/backend-spring/.gradle/vcs-1/gc.properties b/backend-spring/.gradle/vcs-1/gc.properties new file mode 100644 index 0000000..e69de29 diff --git a/backend-spring/Dockerfile b/backend-spring/Dockerfile new file mode 100644 index 0000000..c040705 --- /dev/null +++ b/backend-spring/Dockerfile @@ -0,0 +1,17 @@ +FROM eclipse-temurin:25-jdk-alpine AS build + +WORKDIR /app +COPY gradle ./gradle +COPY gradlew build.gradle.kts settings.gradle.kts ./ +RUN ./gradlew dependencies --no-daemon + +COPY src ./src +RUN ./gradlew bootJar --no-daemon -x test + +FROM eclipse-temurin:25-jre-alpine + +WORKDIR /app +COPY --from=build /app/build/libs/*.jar app.jar + +EXPOSE 8080 +CMD ["java", "-jar", "app.jar"] diff --git a/backend-spring/build.gradle.kts b/backend-spring/build.gradle.kts new file mode 100644 index 0000000..069add2 --- /dev/null +++ b/backend-spring/build.gradle.kts @@ -0,0 +1,37 @@ +plugins { + java + id("org.springframework.boot") version "4.0.3" + id("io.spring.dependency-management") version "1.1.7" +} + +group = "be.seeseepuff" +version = "0.0.1-SNAPSHOT" + +java { + toolchain { + languageVersion = JavaLanguageVersion.of(25) + } +} + +repositories { + mavenCentral() +} + +dependencies { + implementation("org.springframework.boot:spring-boot-starter-web") + implementation("org.springframework.boot:spring-boot-starter-data-jpa") + implementation("org.springframework.boot:spring-boot-starter-thymeleaf") + implementation("org.springframework.boot:spring-boot-starter-flyway") + implementation("org.flywaydb:flyway-database-postgresql") + runtimeOnly("org.postgresql:postgresql") + + testImplementation("org.springframework.boot:spring-boot-starter-test") + testImplementation("org.springframework.boot:spring-boot-testcontainers") + testImplementation("org.testcontainers:testcontainers-junit-jupiter:2.0.3") + testImplementation("org.testcontainers:testcontainers-postgresql:2.0.3") + testImplementation("io.rest-assured:rest-assured:6.0.0") +} + +tasks.withType { + useJUnitPlatform() +} diff --git a/backend-spring/build/classes/java/main/be/seeseepuff/allowanceplanner/AllowancePlannerApplication.class b/backend-spring/build/classes/java/main/be/seeseepuff/allowanceplanner/AllowancePlannerApplication.class new file mode 100644 index 0000000000000000000000000000000000000000..ce9cb4118d5c2f78563a2fad953a6426fdd29295 GIT binary patch literal 797 zcmbVKO>fgc5Ph2_b($JlQYe%U32tc)?5zhW_~ z@B{c!h*`I&K13X_)-&2SJ8yR1%&*@+egb%fCj)e_7NHxXhjoGNb9JF)p-e8{rRS7+ zf%QXev_BG98|}{{^aWm|Br76bWxZHPRTTD8nT$%#Gvws)U*O~lI4;XVXUc191{h#7 zLLB23ZVQa9%VkwMZSsXvOS-h~vrMh^a@K&YOs?;0Ban`gn>$VmRaKKuEo9~c*5G?BYZf}Mok|O8m0&o8Cj#B6JtcvyL>qcrFH>?K!dZb~Vl!3DmD6E=4R-yR zt^^K~|JNndTq@1)+a0ZX&Ya`QWFMVR~chWwd5JyAhLPmT``X0~=2z1HF0Pyf-A z=Rr?_z4x{8dP#F#>7a`-);B$4uA`N5HjPrXx2$WUCtbJgC3mo;>jcjb@tlRP0}&>T z?H2DOd%?ap{s!^232(CvVQ|VFw(->g46(zz4cx^&CJD(04H?iMM&s|;_;`~ah8oyp ehPcJi$1d(O{(%1;3(c;By~aMoBle-}W8e?`LDxk9 literal 0 HcmV?d00001 diff --git a/backend-spring/build/classes/java/main/be/seeseepuff/allowanceplanner/controller/ApiController$1.class b/backend-spring/build/classes/java/main/be/seeseepuff/allowanceplanner/controller/ApiController$1.class new file mode 100644 index 0000000000000000000000000000000000000000..03ceaddb22cf41bb6814737c92f1ff64a152633c GIT binary patch literal 1197 zcmb_b>rN9v6#j;mE-ecbL@9VfU9t5-g+z(b7_n?4v6sLW_`we{-A?J^xYO*Vyn(Oc zZ#6N-7#_gK@d1oy7o@>IHH6LVob#QT`DVVEbAJB*egwe8at1?4Xh`Z9Mv9@*6h&VM zYTdBiE^;Z=A$M)jmE3iOM`K>ku|=`rao2AP&pO7&U%V;&PzHt-@F4UVQavt1LC!|L zuzR80&(jz|T0=(1D0GHr0}gI0H}I5{q+zw|lunVc#IR#nhfZL3s=RA7h0)h<{HveF zV*RIj2k0N#T~E^mkL#E~mO-<&N+r{>7-|=L8PO|F>9~Yx+C+IR$K{eCkuR)kxWX`Z zz3PbFj+fIh8y#=-_3GN*rn#|YT8$`vRmZg`p03p!d*%98 zZB4@shHRg$-aHU?z%cT{mX7NLFXK(O8ImQ{5)2a+#}&2keN%W1-jo!XswkVwZSFY{ zJ_(LdzS!^R`cH7iQlV#yvJ>SZO#3CM3 QDh`pi^lFxL(3c(g0~iHSO8@`> literal 0 HcmV?d00001 diff --git a/backend-spring/build/classes/java/main/be/seeseepuff/allowanceplanner/controller/ApiController.class b/backend-spring/build/classes/java/main/be/seeseepuff/allowanceplanner/controller/ApiController.class new file mode 100644 index 0000000000000000000000000000000000000000..562948871a9bbb7947c3168a46eefa47631ec967 GIT binary patch literal 15933 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 O$v!@>{gz0rs{UUKj!xqM literal 0 HcmV?d00001 diff --git a/backend-spring/build/classes/java/main/be/seeseepuff/allowanceplanner/controller/WebController.class b/backend-spring/build/classes/java/main/be/seeseepuff/allowanceplanner/controller/WebController.class new file mode 100644 index 0000000000000000000000000000000000000000..82acdc71255ebe7540f2bbde1b32da7c770467de GIT binary patch literal 8108 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 literal 0 HcmV?d00001 diff --git a/backend-spring/build/classes/java/main/be/seeseepuff/allowanceplanner/dto/AddAllowanceAmountRequest.class b/backend-spring/build/classes/java/main/be/seeseepuff/allowanceplanner/dto/AddAllowanceAmountRequest.class new file mode 100644 index 0000000000000000000000000000000000000000..e71efc539d42a96d069b06e6fb10627e851a1271 GIT binary patch literal 1722 zcmbtUZBG+H5Pr6A*OtRV1r$+01!;?L;=8tDkZL3;YJl)TKW*EE9$ath-4)}1GEowV z2_O6c{wU*Y?+QnFiAj^Y%BwM!p|397nq#&+Q`!vK%5hHXo@3hE#VqBX z)o~d^3`tM=T86b;rI&n)`LiR9=(vKb6sf`8#{s}|AAR%DG^o7^$gK2XNI zhDkXt_EuvWu~p$UWc>qocvE=7AdFL(s&KCUD&N z+7jj9_DCn}vTSkJ4J!hSPp3h`(NA28qY~>Y>Uwt|g{z^+Fn!GV0uCBpP%|zzrDphq zu|RJ^gziZMS@qngORpXXk_j++uWr!EIPF#uMT}&o@C&Rka{#R{cYywVQbjNkn1hTa zX+24jOmP#pNUD{BW}TG+kK#71QxQ_DLtv2JnJF?*krqfQQ>}1Fdi*yHnQ#+HG$2}_e OGt#9g$a9pih|z!UXOYSP literal 0 HcmV?d00001 diff --git a/backend-spring/build/classes/java/main/be/seeseepuff/allowanceplanner/dto/AllowanceDto.class b/backend-spring/build/classes/java/main/be/seeseepuff/allowanceplanner/dto/AllowanceDto.class new file mode 100644 index 0000000000000000000000000000000000000000..f1544e7c90f92a4d2966fb700b9179b68ca625b5 GIT binary patch literal 2454 zcmbVO?NZxT5Iq;LWvD3F2?U2GX;YxKp{TTJ`XQQz;82`89|cO9^p~(NAP|x($)tUU zK1yfW%+%8ve)IwQP@SGD$+0pJ26x6+d$qb}_w3%?9sl$1$=?9(lnkhz>sSlNr6JW=X*2sZFkR9rwTeQ;WBB2 zmcJ)Mf~!hBspE=L=UTqE=gS~a%A$^|(b*T$-rEnA>Kz@|l#^`3bG)`+VAMBsyo>h; z4ZYZp!2MFa&q&PjX}Zez`#NSYOXK@iu)pdx8Q87=VZ5eneW0U+GP%p2+LjXtto3gx z#q#mafoz0k`MJP+sh0YXWV>3eo>rE(c|ma;V|Ck=kJ?8&(%-UnoaoBDhUIKqzOCL9 zzSrD_({4&rAaiUvZ92N$7jUL$AiGk3y7Fw3bMtpGHa+{6}X6l}I*lwArJ4-4rrAdHWzqDjk1`XeC zg`S^=tU6W@q!o#cA5R-edw;E8U)6(NQ)4PJDFY4Pv03}M-R>o6;O#8*gXAS77p#FD zHrvbeIhoV&gTVFkkFrYQG-HX=Z-7%Ii-H=~+!fTkjU*>(BsoGO$*CDhj!McAuxe2u zdY*5;VvrhOuJRW|Wx4~cve3b3rQAWjGL`9IqB5m*FjXlIcQE~uCkL>=XO>pf^Fuz@ zq47C~MHrN7rx>a4a}g)Sb56~9`cgZ^D--P$vly$m4dWwfi&?@!AP4~ugJU0@^FW@X zeTjw@aV3=tt#X3vz#rVEnPnnoF$*nWmgn&P_zd_>;I|9GOZX&7+cKpJD_5C6VMK4h zPsV3nB_@Yk_>=@xm>E_hgSOm7@iRHt2ef`3~t-{hhUrUV zxnb{qsGHmuFI&fJ;&VfIK10MJ0#;I}{W{VZAi4u#ZP)0G6*E*~M#m)#F(iDs?z@(= z&9I&=cST#smD?%<(1M~G(Qz49h^ofD+KMymuLlx3CMo7}b3K6FO?nng7&b=g%K zo>k%3r1_q^d{6koCD5Vl8O?5vQi)+Wd$tTFRi*7a3KcffiVUfB*>J1kwWSnIoIhT( z3W1v58svdxDSgj(c|EApOTb`AT4o^_xio`D|Gsn_4^w!A#~PmKc#3Dl(k{krIKH(f zjG(9xiC`)%aE8N9U6!*icZCrIzTu8(3va3{VTUJ7-1t%#Md4LltL{s; zGiAl*p4aIJF+QCJ>16+B{7+h|m(+u8LJChqfnmC>`2r0Z78u4a4y8K?1Y?dKdW0TC z1R3=KQSV#5da`lQ_~JU9jMHuvJ&2M`=YN9b$Bv-ovq$JVBv%9zVK^vglGc-CDHJzw zldM`PXx3aQ@Ca_vIvF9iIs^vklQKmCifN9l3f1z*Ytqz?mM z|0{hAw?m!tWK};B`I%#ko|iuo#GD9B;104>fRYtsv;l2;Piit~rzFMlKcHPyQ7lAc z)Ri2isD2p4)k^OBMvn8k(MpaY-;A2UU9$ZYA6#s3t@oNfh6i+=3C!X?HT*gGQbh6s I^H{{_U#Eh9%K!iX literal 0 HcmV?d00001 diff --git a/backend-spring/build/classes/java/main/be/seeseepuff/allowanceplanner/dto/CreateAllowanceRequest.class b/backend-spring/build/classes/java/main/be/seeseepuff/allowanceplanner/dto/CreateAllowanceRequest.class new file mode 100644 index 0000000000000000000000000000000000000000..7ba8457a4b8e1e66c6055ea376583762e724d86d GIT binary patch literal 1963 zcmbtUYj4v?6g|_XaT?rh6H1p7-peC#0aKm}?v_UbyOp|t0QCcWnj}MGaP6$^fcQ^H zfV9<0{jfiPAB8w$yRA_|RZ%I7rc{xTlJX1 zSE1dB1A8e{GFJDtmY%AA`YMVA3cg%d0@alr$Y*ir`fH8``NhN}ridQPa7}T$Xli%W z#KFYebJ_Ben+w{~Ta}@!=b5t*cU{)(?Blel!oOAA4LVO`NQuNMWWwqC zkV{B3xh!xfPbWuH1mEi`TS~&30_A7aOItm3HJjRSonF%Fu!*wRFQ!tfwMcDci~{*fxz+IxAJaM!kA|>7~umdpsKqQ zM^)WJ63eEMSau595(L}bZ`^%`vvrKZpsiW|L0EGeFs%9pCalAS4OFbz;s&Nab9n@3 z`Cnux7;ujN*O-K1IFCB59%)#;UQ2*=F*V(EC%a} z=4o{r!`j5Jz$Xp|(NiQNL$9zE%?$~!0U!1hehL?|^H`wOrI)O^O`P~q{7kxMn|uiu zaftG-mw^V>d!$Sw_Lr(Lwq=Y+`K%Pkf}~N2jq9d~j%RWpBYV zL(87tOW6fnPU@S-71|@b`BaLj5K|eZBD~7=Drw!OCQ8)O4cx@)8=SmFNWlK5H|e!!4$_?BSE6c5ps1J82S^V0t%9i8YRU{CCD8G)*|;MPmF2=y{L zy3xaszSiA1=jV+g~9Q00Dg-mMVlCl^I1NQXCc+{7(P4P}zsKEt~Ux>Mr)SlSTfAfNlp zP|Pawn1>>XbFWAmIaWlmS#Fie98vBpT8{Wo-zo`jg;VilLESR9SGi}&b1X~*Rf`x+ zU#tSuy6;6$bt|8^N6i%ok9_rHPbo~;$OVR8m8_Bk<{s_1`0BW~I2qE93ew03Lu%Qr zdu8#;l8pOKyn+eY`&7xsGwYgj-M|k#UW<76Njze>CSOWEdIVTfRBYkj zF1qe!y_P>&a77Xuu6(PB1>u)Hs}{JPYBFyV6;%*7&6kr-RP-ay?4T@qL5`ZxrSLT@ zGK?H@K7)gX*9=2vt5SU;!kDDN)I={Zfs7n|w9CjT6|OXe!j(o0tw}JNrMF3YgibcC zEwm0Azrc*qJ!r<*9y*NiJ*16+#2$Kg>9z@X=)aXLLE3lee=4#<7CAbReTXXW2SZ#L z%b=WpXbyK0I{}0C=>(~Qlt9;@xkn;W9VO>7ph;S#8_n3qW#9*GPonFQN{pVSDK>VB z`BmWixy)~3JWj_9tupkaF}jcI|FiFlbPmWTF#(eTkn~y@9YBZn14{BL%$)HP+F68J zVvmfnbB|19K2+n5^BH%CNjz?xKA&;_sbTk?$2fue6mSzBPRW(ZH8j)sMKntTz|7#BubZU6wu3HMKbm>ER|~KEmJL@j$X8J1^tBH z;$dq+Hi^&dMbMWu)j=CWxJnHYAKTmu8D3rhD#i0{eM>Z=YWY3GKq=)H_f$i|!t zHP;t!+B>47j??h;O{bGVX9L6Jy++nNz4iBeV0r*0`fKSE)LIK=R4_xHJb4~r7Edw!2Z1tSI{*Lx literal 0 HcmV?d00001 diff --git a/backend-spring/build/classes/java/main/be/seeseepuff/allowanceplanner/dto/HistoryDto.class b/backend-spring/build/classes/java/main/be/seeseepuff/allowanceplanner/dto/HistoryDto.class new file mode 100644 index 0000000000000000000000000000000000000000..d768a121d149c763493e9e78144ccf27761e4cd4 GIT binary patch literal 1836 zcmb7E*-qO)6g@){9D>sFo6 z$#gy8>{L9#(AU*qU=;~=K}7~xy79~wcRi!kW*DgYQAmllY?ILTbg7$HF@Qma{swpJ zj@kB1VKd|dZ9nD}&oS){Jx{p}tGI|u3`tJ}QigJ&daii&;>pmLRb0VUf^Hgavn(2% zVeZ_}%QDDO6=S$gHRfMBhUGF;&WjU?@Lg?_*FC-Xk)c?qoKVAvZdj<|8bdtDAX7DM z{0-V??89%fl<*tRl@q%p>e!NUeyDQ|GTunOWwLlQWWP)PMuFXBULau+AJ|uS)ykeL*%=wfY6qFf8PgkYx1PNo7hCmNJn;7zP{?INjr-#4N zWS~_6qd|6qv~JSrGifGh9V-0-D^2b}DNXMoT^fn+A-78xJ-9{RUNQnHj?=eVRFf#=*=jN{P!`0i34K<$!!l8g!X g60l{C&RK$eOwCW?9vyIF9r6=y+T1xX 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 H0JHxCeBYz# literal 0 HcmV?d00001 diff --git a/backend-spring/build/classes/java/main/be/seeseepuff/allowanceplanner/dto/UserDto.class b/backend-spring/build/classes/java/main/be/seeseepuff/allowanceplanner/dto/UserDto.class new file mode 100644 index 0000000000000000000000000000000000000000..9db7396445c12d771643d9eb36c9b41c75fe3808 GIT binary patch literal 1586 zcmb7ET~8B16g{)F-L@F zZzYfnnoVe|tRVUg%8i;izjQ`+2Ee7?vXMPG;Crtd!A}h_g6*Gko9-mqqYRX zBZQ&CDMf70LYZN>5aSw4f>F2QJ&m3ivTL&C)x;}X5jUdAm{ZNCGIj=T;DwZdA9%bO z((%)nW61vvz`#R1VwgCdBCq8J_O7tP$Po@hrrLpK*pHL9 z-95P@tkCc^ck7Purz%qJw3?+@j!{2in#gheYg4QUzvkJ^KzebPWrzEIToGY>Itdbw z{?F_l)z2uawQ55OU&m91>EoQc0c=**cv!OXD(=;rJJ`u0hsVIndInM{&A8Jgl6uG5X2+R&^mDR2!pNX}@a zR*%3SE&mk7Q<3KBRHnLlNP2uH@ni%eG>IY%(vDA`;yw&~JCpkuZc-2xeSuC@kF+^+ zh|&M~kAyZy38rxi1tOr*N;0~DF1<&bEV`+blI9QS-54b!L`GHV)FbZP*R2{I=LCur nOM{6SI{Qfq8ymKDwyk4S<^;9=HZ0u1W71`b;S-eb45NPmY?E8F literal 0 HcmV?d00001 diff --git a/backend-spring/build/classes/java/main/be/seeseepuff/allowanceplanner/dto/UserWithAllowanceDto.class b/backend-spring/build/classes/java/main/be/seeseepuff/allowanceplanner/dto/UserWithAllowanceDto.class new file mode 100644 index 0000000000000000000000000000000000000000..5858fa3716a6886ef05b0b270b5a5a239dafe596 GIT binary patch literal 1807 zcmbtU>rN9<5dKbYTguj6C?KNX1+-m|6>o^G7oZxO6f}aEsDHNYfi9HYy1T{rP9{ns zG2w>~;6oYbbhqsqpfQ-VJLk-qnQvy!cjnjcqn`ktp%_B|K?xxlVMG{`JKDacHZ)^f zea)+;Rbz-0bVGL@GX%4_%>hI)AR#7W5HiC;g{wB_^lP@Zwp6XrFh6NVl{YDZ!7a7s znCcswTW@uzzSKD^IwnIvr_ih<;+>O`K$0P3XnUL?UGC+u?pV69oflSV8AHf040J)r zznG>fMr4fQJVVqmU3-SrZ263t<#Wg31;_;%3Q9?_Te%gPR~I{Dl?hS6-vci?rinA@agyEP=ry2004dlhbNXq860{bp5b zY-*M+_MS52)OE^l@yuN%X039kZq{CD7TvPLEee;(p3v+z&q@r#SzqS9k{FT4PZ95^ z?N(%nt(z^Y%Af0^ma&t#Hz(*tP4DnKxonz_?O0mV&CrhG4ns<>Knc zpGrjVAcjRel#rKEz$1pq9&4?Z;plr@byM@A5_2mZAcg~fb-J-{?sC;Ne4!b&2Dhim zrn%c{=6y}@uFt3O95+5Ud6C;yOK&=+<#$k)JtESJQaZinQy zgr^MCy_);fAYqwdqQ5EKhg&e_>8%IoaRiYTGlo`aF&^5I1^`J3jE2<}vbsvU4`dl8 znNfa#DdUHbl-WbXmE0jx2c!?+8hs<=BVta`S3!ur8BF6kNwE?*;ylwv66hH*Y{>ow zt>Zy503CspK#HbKmdpkCJW1gwDMuIvzR~hHo*P^8@KQ8KawoWt0bl;feUb`rOD~WV z$wrl#BV0Pof5f%vmK((kW+?$tTA0xWv>EK?q|#256jr`N>X%X2i^!-moqqV8MJQuYh}kdgt@krid!Vbb-9Fb>Ee=Qo=%b!c7aF|#ckZhJ>17* N(#A;p1WQ=K*dL6eiwXb$ literal 0 HcmV?d00001 diff --git a/backend-spring/build/classes/java/main/be/seeseepuff/allowanceplanner/entity/Allowance.class b/backend-spring/build/classes/java/main/be/seeseepuff/allowanceplanner/entity/Allowance.class new file mode 100644 index 0000000000000000000000000000000000000000..5901401ce4f240a761a5bdf08e80b953b5c510e3 GIT binary patch literal 2344 zcmb7^{cqDo7{|ZYytQedl(wNzSYf=SVPM$U29$M_rhrQu5M*JSCLt#|QZv`7Y-gzd z)240GqDlKc8(Nm1^emwWDW&x`;0_piSJY~pzl6UY>hEg^@zz=^lk zPnO|WZr6C$dMn$3K>oh%+QFJYrn1tU!X%~&D3&mdl7P{YhA$<5`~5d>49jtP?<}`1 z_Zh*Jo*~`94i1dRe7B*;f$in2bR~Bfl{3<;T%4q>YcQ^yL^qPDfRghF5qLT z+dZe(_XOrfBARX>yV6?~IQ^o}2kgnF?b|I!uDfn8umZd1`T~nQ@uTGhma#8A-}VE^ zR~cr9$1bIs9!qA#3S_5gIekgDNk33>_uvC3cwggSU!O2*oArj-_)g$#>Kz+Br@!Yi zc0uLtwaV$F+jks`^cfZ$OyNea!xYYJ+petl_gd0xD62|puWdO^%d?dnDYL<@&Bxx_ z{-1>=LXIUc3Ba~7Dfyw4t(YrK_SudMc6*)YmdAnyOrXFN{lC!_=bqm2zCe9lmwmpn zGE%0f@O&$sLx+XRQMLAc&^TM+1+gYu*-}nLIz5b=v&fi3K^=b;^$%ZD3y;T| zY^4_8!Sw5HT6hoiu%FbkVxRITYwV&qUNS~oKC)F&jt@uYhHCk7b>Gx;#-uN$wuLSx zt;OMh`t1Knjy_P}KPQl#agow2rAu5dQ@$c`6%{HtjgeWcE7X*IRB`Qle4_R^6OQ5tiCbI+KE-EI6oad><*I++*w5UA0n{bH`H{o9;o;l(oL&lHjjOsSUtJpDSn~SI zguS98ltZs50{x?mf5Edk&LS6qFH@OjlT6iAraS3Ovq>g{OgG0cg=LPI<}}k?+#{KK z>S&(kf1_eFPq$Nb%3R0o?emZ+c8YxG)GM5G}B`|88RKt-Ey*@en@39 tu{C6h=Z^ifoMf`d)EdL2J|qGW(*>Q1r}}?efBt58!4Bm*o%oG=_8&f+Zqfh% literal 0 HcmV?d00001 diff --git a/backend-spring/build/classes/java/main/be/seeseepuff/allowanceplanner/entity/History.class b/backend-spring/build/classes/java/main/be/seeseepuff/allowanceplanner/entity/History.class new file mode 100644 index 0000000000000000000000000000000000000000..a7ae711315a5a3d8a0515be9db0b5feb9d4a88b7 GIT binary patch literal 1840 zcmb7E>rN9v6h6}{mxUJO4vHvhTZC0XMY$*fLJ6Xg+C=}DX*-m~?QXL>)$mT5XaX_u zhY#RG8Nbp)hMAt#A>c^vL$uZr%^v$V$>;(if|>bRAIcMG=mxqDNT%5 z?3yLj)rdx;G{&gAB;2B7RHb2CjQV%aAFwYS!zwQ^8hs5Pgv=YRQ82}tW!aJ|dzaA& z96oSIa=j`X7dQpr>)8_ArUO-50uSR-l=9rH37B=bQpsgJ@1GvXmpiU{9@&k}y<9f; zmeE9Dj&<9tRV>7gSiB+_#T7^I6?Yw0%``b45k~n42J3bS28mt65_`2uK{z?3RYcfD zZsxgTD7k(ak%tD}tndC;*?=Qj7BY+UXn`yw*OwxxY&wsgc_HMXU3$eGfR$ho6@>j8 zudX=5x^dQUpF1xu!tF59V9<0KN$sepD#V&sZ9hcg+>85-=8_Mj(m_SsG zRHCkZyXF+db3@Ul)mwE=wNbnBYoL|vW4K82fWE?uYTcXR`1Oh;YY?P<|*z5>G$tiXsMg|fzYW4#GU z$Ih@vGvA4Q!y!bsuqriCoKjd72!%II8SIQ^=r-1i&L8+hFpWvyN%V!?Z|`&Uk7x;|UFaZQ-Q#%>)vxLVf}x4B*p0&}uW; literal 0 HcmV?d00001 diff --git a/backend-spring/build/classes/java/main/be/seeseepuff/allowanceplanner/entity/Task.class b/backend-spring/build/classes/java/main/be/seeseepuff/allowanceplanner/entity/Task.class new file mode 100644 index 0000000000000000000000000000000000000000..39d4e839204ac4cabf62f709ffe7c3662a276cd6 GIT binary patch literal 2343 zcma)+>uwuG6vxjvzQoBE=hCDN3F(Cbj@xFTTv|wINzZVa+EYUAzVo#lI*Sps4 zn38t_38X|weBc3iD8&D)*Ox3~ft1Yn%$&<_&t?Al`;R|~Xon7_C_@tk%3748yr7xa z@<(ZV(r?+%j$W&V7L?y~eOKQXG*Mow7ip4;1)8#Gnk+$;BV|WQ;jhzu^~#o>7rd2z zLv`T6SD~$Z?dlV|CZjikGHz3laM;B=7L{m5P}Y}iC1|cX411_U*KcjG)|^H2bP)uh zdMiUV-s9s%i!RY+L6b6y+?KC!F+bwK@wIBHF!u1SMavv#GHM*FX4g|}|DHvwbVX3H z5wts=((GVn#6dMk;$O4qIx7}@^^<|G=ZJ&MnUC)zXoN0d$P7bsB z*u~f0s{a4dBYduYR;Hd33U zJD>m;J%xqxzwg;=5iXu5jf1dzIDt+7BwOBNrD-T_4cchoT�K?{aMt;NxReWkv$ z!=%xAMnlO$pzUG5&7F%Bcbp&#VMcW3N8`jQ9At_!)9=SA&cZ-A47y=M?YdmMBG249 zkJY%=*okKowOKZHPF!xToQ9)_u3>O8=$rypj6OQ(eMqyAZeafa@`s8(qB0IJ*~#@Z z_BH%hUeHZkV3^Gp7-u-i@T|r=#xveAeJO)dM7IzCSd_c$U*Il>M!_cNF5NRQUHBE3qfBKZ)0gxWw9Yf#JfjO~rrTgzAH&ou zTf$U|nKo#1z?8u+PVyUB)QG#@iP zpl=3D{lcHpLOM^IMy4%#Xv)(F2zjS#@a2VnRbm#kIc1ON;5qH zQ*{gz56*yTIcD0ST|=H$(o6?NrpNTHDNieDrtiR1AH&2$JYZUlnH(e2)il!!Bh#Ll n>1vwkC76B~!_<3FlGrN9v6vxl@YN1f>P`L@BY!_q&6)zxOD4G&PBeh1qP1~U?Zg-o#NO&iWn%J25 z!3Xf6jQ`nP3Y2ZMX=i%QoXc;{IrIC^&tF8eMUT2DLeV6}(iEqJM16 za7*QeqdCXw8=G5*c*M2Z0YXc85vDIq{WKs^vdmyz;m~gj{ZN{QX+)xkR)wk{RAXt% z(q)Na2CKtvVCNKf&#^S4wkA>bwTonRUeau>tn(*^VLHswOv9FF3=SWdWkl?$!+v z+i-QAfjKHFj9YG+RopVOqZxeHt(Un~6sO|eW`*e`W@$nWlriT(!xa~I{=XH-8Lx4t zfcm1j1xU6p#pFV+glTxeoddJ_idiVPgNmU^u;2BHKP2bE%AZ6C-(Xn2crK!*5aMkx z0Z5yN20ka6n4A|zT`+ojG7qrYh6+|KRZQOY%=S#zs_0m!2Pr7=60wShwnVP{l3+#+C0h_z8dfAR-^p*cs<|%XxtoVI^obu#0*ml<_7Fo+9{FngsWh z7h%M=3L?NhsNN0u#w7@XX^8}j2z!=k^eYr+nPx+oZqhQW&ND4EX|$bb9!zovCck9? zQ`Tczp<6Ach*uI(r_`4=ro~XE+jOVJ6!n^tQ0CFEcBW-8t#n}WrzK$O@t9WWZU|H6 xa~soYDAPT?;XHp}2LyEQu-im&j0 zeDDMOD9dKS0E%VQs-4>1?&&^fPIu4OZ=b&afDMnbkYcdiLMuX~CyYBCOZa{;5UP!# zFO))UX$*r%nm`Y&$`7A&Zp*?lgVmlm6Bh0FtVXMcZIguzgXe+vtSHn{c^xhKI0*Dd z%N0ggy->`ieI1HvLI#D7RPOHZI6_@>8`?#^JFK~tsLf!#SS!^Nu-Hi7s>{ff3H|_0 zH*gQd2*sd|7-ZrknnA89Jta)6k-`42(J$+NI6W#O&CJQmI|R5kW=N!zJElpji?um! zjnK$I37@v7q|4yVZ~XtpAm0vRWfEPc6w)Jz8mZ)>PdY5}o-lYeEAOc^-NR9NH=Od}D`bFz}6r&!J9_cgT$5aomY1i%Q zJ1+RX(>UPg-9?7eSGHqwu{kay-{vnSUzN9eWF90``3~RW4QJ1G`0jgN6q`n94-J1x zJ6eL;v5h5OX;vBJqqskROd`Ha?Xbt-!-Pe(QK{R_s$FazA5g9_MCl3ND*XpN2A{_L zIx`&Q3kxbsP7kPc1N5$m5_x?kb)fjr5UWy>oTnrTp`z0xHfU+QgEHjQ}-&l*C0=MMv+rD znb+aQBJ)kcSz3Stw-QVSw<)R+!3L$c19#^+{j}#EWg64G4-XQ$50f+*O2GlX13}Pz ACIA2c literal 0 HcmV?d00001 diff --git a/backend-spring/build/classes/java/main/be/seeseepuff/allowanceplanner/repository/HistoryRepository.class b/backend-spring/build/classes/java/main/be/seeseepuff/allowanceplanner/repository/HistoryRepository.class new file mode 100644 index 0000000000000000000000000000000000000000..dd269c181222336934bc2a3c1eb4ab538d1a560b GIT binary patch literal 644 zcmbVKT}s115T32JvGuPi2;M*u+$WzRf~AU)NTo&Jx5*@KO?SiY#*#yLAs;+|hZ3hL zw1ofo(L6To(ZMUaD%zF(rHuj zTWP1hKaY5@&Y(RKuYyx{%6r2RM$Ur{x1lNk?*j!*da=$>`_Af_-5jb+d%s&WR+ zflQTfg+T`0)#{7z7xAc^baUbUCBePT7%b`a!+&Z0EBF#_pd6-XDn6}&E=+_sG9!(L zD=Rvi&Wpy{FG$K5pQM$;46l^ZPB^I*P3!bW{+33G+Lbx-#eRI+EQ2+&I(;EV+xK7t gYS5%tok5G-CRq)(C~0=vhMg+13vKcZD%}J425aul3IG5A literal 0 HcmV?d00001 diff --git a/backend-spring/build/classes/java/main/be/seeseepuff/allowanceplanner/repository/TaskRepository.class b/backend-spring/build/classes/java/main/be/seeseepuff/allowanceplanner/repository/TaskRepository.class new file mode 100644 index 0000000000000000000000000000000000000000..79bdd74be694329f29ec38e6adca62dd9f1b3bd3 GIT binary patch literal 765 zcmbVKTS`MQ5S>)pTA#IAL|0G|%$Fcs5vwRv>Vqo&r@hl_+B6ACuBBUWNq)Eh7bQ-6 zK`RwRAz|i_d7hlN_m@`yIEQKxatsdJ$UPz*n|8ZgC}oC1chD-KH9GFl8ZU!!BYrP@ zzx4@=Fwdae6HkIuXu@yWJ?w-c6c`*BmvC>L)JfNg0S=Ap^H>DIdsa+WytLx0AcJaG z>iBeYW(HPaz_{VBQ>7SGYP-!zqcljxo6?7fLFrB=T7=XggOiznqvkJrp$;-+J4MG- zZYS&Ai0e9@8DOi{n4aLq25GcVlvcjN@Mz*&G2Szv^9*t_W^n#<#-GP}&K93yIBNcj z-9L4nYTD2N6Lb@f7Vk{zI(Q)!alY|g4*TN|VzAvxiP!-?NH5z8>sp&2#%vKWdp}O@ zi8VA~WRZVqAtDtqn4_B~t>#E+MOYwI8Y5UFyadbStq{&LSS6D^tx;0um0^7nT!9U; J1xnro_y87?@vr~@ literal 0 HcmV?d00001 diff --git a/backend-spring/build/classes/java/main/be/seeseepuff/allowanceplanner/repository/UserRepository.class b/backend-spring/build/classes/java/main/be/seeseepuff/allowanceplanner/repository/UserRepository.class new file mode 100644 index 0000000000000000000000000000000000000000..b10dfecd5c4811349a25f4ef7af51cd2453ee61b GIT binary patch literal 683 zcma))%T6OP5Jk%wlECnOY-Z#SAlb5PU)?&c>&L%;9snSOtuhoC>~~Q(L>gH>7zmlB=1%G!W~tN~t+1FG zr@XNfap}-@UbkhKW3V=ow^EQa5$)~>d%g@M27AUP!ev(JWMJhO?~J_>ed(nbW%9k_ zStj2M$<5{CQ{|?`>SL2@&tR_7te(+L3;odaf6J+zN9!1ra>8l$8T{&yQjPISIn_fUS#FwqguqJ0*)g8WDqEIT>t!O6Mp8G=7qycndI~=o$Q=S)>of=zEl59tyBP jyCM~%WpOqcERks0!3wEY>8Jo}us&NiW|9(JZvy-S&!p40 literal 0 HcmV?d00001 diff --git a/backend-spring/build/classes/java/main/be/seeseepuff/allowanceplanner/service/AllowanceService.class b/backend-spring/build/classes/java/main/be/seeseepuff/allowanceplanner/service/AllowanceService.class new file mode 100644 index 0000000000000000000000000000000000000000..40de9fc7721cb683f03c0881c728fd5a7a9736d1 GIT binary patch literal 12272 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 vd|@b1?hgCfpHw)L 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 Uo64s_7{`fLc^3GD|0!(z4SG~D-2eap literal 0 HcmV?d00001 diff --git a/backend-spring/build/classes/java/test/be/seeseepuff/allowanceplanner/ApiTest.class b/backend-spring/build/classes/java/test/be/seeseepuff/allowanceplanner/ApiTest.class new file mode 100644 index 0000000000000000000000000000000000000000..69fab2a6c473f64e37a2fceb9be4d87c8d41f840 GIT binary patch literal 28309 zcmdUY34Bvk_WwEey*8nQEh#9QR6r~R8wvxM z)4%L^n208eyYonp;v&^UIh4!P_4vTDfIkw5F80r=J3dsOWXc^Ej)s#Hn3Tf7^W5ZS z>Yiwdhog&&gMnlq5o?auhl-oykq(qc9bM${P$%llG^j4*PlQ7FUsH2KgFg_7#Fhu5 z^`RyV9u39)>*G-5_9zSy5cbA2qD4201y;kSLAt@o@sV#Xx% zerXy(!2pKs91oq)9FB)(#-cNuBN5P6I3ttK(!tqHUWllN zhxViW!TjP7Xq{8I4-^_BYcw@9N9&W}SkzzB+|(2ahvKCjsTcKjQ6CTWr307_lM>M7 z+Yk>lhL*?TOErmTatN(R`YTpO1C8PO+3{FYD4tw7C$u=6NXA!!#6U2}G~CWxO;ReV zRA;Rf0;Ez4n0h%VH4%zqu8^0QdbnwTW2dG-A^{?UUKkQO4PxqJjMNZWxjeA4xIPjJ zL=Opu6M?!&2;CGalrkO6)UU8@(MXFL;-R5*2$R|ri$eii)q(sp#6`nEOgQF;*}w)9 z&GAssKL_8-_3v&Pjz|1~rm*Zj(nE*RC|FuuAQ74!NG@UW+O%y5DGxml^UxR?3!8`0 zHG~&44FQQ6)9APCv%whA8J0MX#=B^OhYqJQrUK{ZrX^xg{Q;)D<82oMTb(NPNNER} zNRwPt;i1V?$#i(e98F-(F9(&@0-F5tQOU7BFQ>gGio}o2e*aVbEGpO1{Go=z{F&&&CAVVxRQ!#Z> zokgBagnB1n#2yX@J^ASfX-spN_U5TPs`b!Zng_+`?gKN|AVLz!-qRYyPjw!uCty>~;_$Lilcb7;`hbRxa{$=z<{En= zkg|amyJ(4r!g8>Z3|+K80w7`el2Fu5OCer=Gtey|$83~v1gd5`Am`CGoX`Vewh_cb ziKbXI5t5LgeVNrHnMjnns3{u;vU+!<7{xu5Ai$fN1bs}SvgKnvHZKqf%fJgT&7N-= z5GzA0Z9UkLnrVfHR?>;UA^>T!IWZ{~gpNlSR%KajTLYOKyXhpr?7-qg_{31*;5<5o zPIb{~9y*=QFhjGJTU14pp~ay%%xYO6(j1!AfB++>Ohsj*2W;>xTJ54W9y*)WBK45Q zyCl$94{DPB>Oiu73AD&0!uTk%E6~!G(-W|zW?Ju|bLdv>7-ZAKojY zXhUCaIv>(Hdf38Z8D(9xAua#XNs#zFZP+;kh0N58BK1P_t(+yT=t$V#P&Zn_grDrF

PjlsK%_3Sazd|OxF(@Z`~bavT13xBZ-(SGlF zDK`)t4tAgy=tUR3)G3wyR|f#T zA_inR+3qj~EZD5!H*T?~w4gx~)!!x3{DWzV110++4H>mQ^w2+L)IwsMfSG>GL{b=^ zN=bYsL+qZgm`QAI*#%{qKjoI?>we`WmA>)NxAYy;evN^pAs7sT^!%`vQzB+WlR)0? z>ELZRm?ZND5B*D$nHvm6LP?;_PcoN)9|acU;%BTD43{p@I|K_7&Gq%T-+-0cN;myt zxj;$E$o<3ISPD@0EY$Ezh+%RFlq#IVo9`P>~K1@`3X7V)MTXuQ9XrDcH)A|LPP;r+QM6oK_*JRleO{x&j>$$BSy z#!=dldvhNb_x11r+^>zK!{J$Jvf3JKj9o^C$=E}y(PR%QhOZ*A-~&C}pRpu$hoeb@ zXA~%^yr^S*lUuexw_Z0Fq6b1`cyTl&L7Iy^JVc7CL)4U&o3Xs~S{g0D64L0M$9@kF z;}TR5^oSxmNv(qg7<`qRN63gORe^}ghXRyS!Sq=fs2pw@X>sXnGPnyjUj(k zR09$%PA->dV(8p{vouFnDG52waUKqE9awJ+N1GEhA;h2{aHvP&G^a=96G0D$)}&9d>Wt5)H5UN z(IGm5`kc&+t87?f!x~+h0oFi zEFnloInTO<6fphP1=cP5i0J0#3t=**pJmoy%^arOsxth6NB8cZB3dzVaNx-|!!?!b1Y*&3GmI&3xP*5mD=Igv-$Ss>$ zt3B#wnQ}|hGe>vxJ(g1sPbm#hTc%OvC6^>>E3ni88x$)Vo3yacE#ORVFR@y^KCE68a_L7ZmMrMA1j$s+bXU*;A$E`kgQ&$f)b`&&mS=*0 z%4di91HoYKE~8g&*#Tzvzk%(_c&xF&Qk$ER=Xz>m_LdJ3JW%)!CfxiHLPP@|aPud~ z&XX}WBUeRqiU*>J1{o;7K)zRNT-j1VH-7~vlo7PVKJqt4<8XT;GF4AFn!v6@xIT=v zjr4*aJp3>I5w^Es(}`G&exTmW~crjIf4CSaes2;WV z6pkyJfMlxY9GE`Ri+SNh7!`{0C~_~Yyoks=)M?P;o3YX5KfbvsoWuqdNYb~UFw|JB zd*-%GT`ZQ=_hy!d>af`rUxvqK#Oec)8twaRY+2yp!<-*Roi*WaK=zG#h97%k266uK z=45O+cB_JTRMpFIU1ne_Ot0P7$~0W=U&v|Z1>#|OZ8V~KD9d1lGxluj4deS@sn{lf zoM-FXNnyDSH(sw(WU?z24s66?zx7?H(!ogm+;MA9%2{xGG!jg>I+R=z3(gM6jWDPL zq&ds7t?_EK4NCBulL#f}q9)K^Q%Ab4WdVF*r~#$*$$|PM=ANG8J8AT&PTC#X3V;rjq(!U3VdgFgu`bx&5TL% z01}xujLCd@HYht;698%~+>itr8Dm->bKHIo&l^jcswkEfSYbN!Felg7@@WGju%ue& zKz25=dZ+GKtutfEO1W5v0vzs|q~La*PKONq2zW{Sk-X*U59zJm)J1C8uBqo{#&m$} zn`$y9Fc*Wmu=`})H#RCJY87NJbRj3y^(w!?e7YHp3E672Nt@9rld6{AZ2U;8kxiy7 zA#8bB9SdTAB$Uvf%Qsq$=d>ZfwH8W@dIvNl1B-EGbd-EZ@$}8URgqc~LVO^?8Yj0- za}B_S9+1+OWpJ!O1Dq2H2A)Y%`NWlSs)0uH#FdtAtAeI@&BYYcfb4Ga`3$=IIroCB zOwJspljER=ZF=|^1ZXwrgnG=pPZx1+vmvWaHOWBzQl#t#%=WbRldG(mvH4oD7~1Y{ zzh{ka+^%VEtc?wW&)Pc~3`$9LGuy2Pk)md`Wk_T|YaOgX$aqjzmzm%jjPfJSr5&x?;bCQ5DDwu}VjdX~DYsx$#J* z2#u5zPn;~DIK?AQl}~gud|Kv>xOcj|cZNrtY2Gta$1b^IH3}YLjYljM5w}?DSQ=)x zSdXZzuQhRTF32`6QVTnAJ{Au8I)}~jlv`|YtO~R3v5Op+M=X~|ZgGjVK1PEHY#{ow zJaM_W!X-9(#FgTAz=+f?XE?enwlw6Qq1hp18Zh!f2n88W>grkhQowjfSHaXkG#Cjb z2F{4ZmNqvTCw(-7HKc7@L!><@cYN&K_xz?lW!ujhYgmmCW8_JYNewdVQixWVPuy;u4!trO8s4lQFu)7R0Z% zyCP%LEtd+gq86wtsMJe%X%w;W;Y!dJ6p3)4kc5ysQbKeWJ@7Xd_xHnJlBdJ)-E7-m zYr_E=TU$@GmE#`{IHI)|zWK50#(o*)6m28E2VaEfjZfUhXK&F5pB}w~=qqHg!!7!W z0#dYx&jyLIUv-h!buV>T&_Z42@1X8P+o`8QMc#g?#sjU!{;9@+R^vfC=wRa_MMMwK zNmPsh{ZvH5aEz%0N1BG)h^iI`ivFN^0Q%*yz$6y?7#mjyffJ$8x)P`DB(46U`>E(Y zD)yG#M%2t|wAI-+ynyoZ{zW#UN{1i2VP#+>1joRK}5Xl(oLSsQ$ zDeaHH2hao>1p11p%toDG7nw!UAdRGhEt2ju#8=-!f$b!7iQ|=rNNlHwLc1uoolao< zZSF=-Zl~o!e)X=(X`z!_=uExeI#p{t&wD`&U6|H%X?jx@8&e>SsW7D~>Os@!K$;HY znSld!)i`lAlj>-ejg9&YHVQR123u_0Wv~&l*tonsHa2>Hm&wE?)q%5XI=9eu_MTac z)Pj+@U}PQ`nGZ&egbyr$CXS+7oCFKfF*Zg*j*Jvpj5HV~QfM)9vm+yXiKY)5Exj-X zQ2@`^ftGsE5(F(F*mQ$!{zAw3hqN*Ot0~;BPO(uu$5CR3 zm=tq2c%yXcZAGegOFrG5Pxo%6`{(Zk{Z9ULsdtOr=A_@XVDJo6l+8OZp+ob|OtY1J zANKBQp~qV2_qt5syEd_m0pt6lHt}AWxI~%vZ zjrpH(p1&32z6SGOi}|m^{MTdt8!-Qk?an{UoS%EaRAf-ynr15F{zFrFu6Ks1OHKdw z_LF5Pw?Ptjz*08DQtpJMY=NcR1xvY`X3;$Wo_pb1_rX%`r<>>j{CBG+sUErnbW6bq zw~CUqltD-K;ik;!Lc_hLLrVA3pSIJhg1j5OTfA>{^Q{Hr-nY8uY5c#lo&F{e^<@k* z%<6;m7?y2TIubmH$#zmcJ%srAFyi|oh^)J)f*wU!dd#NY>5k?-!XoukgVgouq<+*U zsRq1dl4@9>eI$e77W%}-Y1@ydGKUGs6^Nb$txti|r@`qn;PhE=`W!fY9-O`i2Y(4M z>t(3!6>6eafsU^M4qk`*|Jf#m^^Q^)X-Q$96lVBgD^f_Yp)2eiO!h9=_zT$hE7*7s zY`hOP{suPwZX?xMVTW3zer5RMI^7>X&!;Z|-IhQ0-a%gz=?L+Cx+&Sh&yU`J+mU*2 zfIl;E*<5TaT!ZK%e0~BK`;-dkGb*IdX#{j%K~ zzie){&T_L=j&3%}5=AyN?{;LITY<*ifW}`y?XT1W!SF!FS$`HbRX9WQXlwpcjkrJF z0>fXO=hyQdK%9@+$B6Q&Jk%z>1E5)A7b)z<+fN-pR33=xNPhOvIPPR4Y`mj6A7&AD znnBnElQ19WI8&xe#-z;ECS`c^HTrSMQ@I_1hV`^ln1a1>3oobbwQ~ za)IR@)`)E^6|yYclw$84jMb4oTkFqnatdvdMZ0h{iFeHBgR-+AA0OPpgDswD01 zkB351SlK{S=%|xwiy{_(dnhrR`Na_ui3{)w-+|Pf`{RYK0W=g0kK}{sa2`Zed@vo! zg%sl=+RQ_7p!yJcn2YHT?57ub7`@FU^bHTkvBweImq&6DPOJ^%!?=vc@Ejh?$KrHa z1CPT=r|~$HG=bOh;VG|Y)9Yj0ON@00uBE04(be!;nUEY?)HS%3i!IgKwd0I@7R=eZ zW+*Z{-pb>vgu`$yuEZ;0Q)nSiP0>xq8ffLB`Hpmtv*?}=x@FEi*fb{}57)JvL2Wh( zT3LgusgP&dd~L9!uZ_1RJlmMC+-5+F#o96*D=L4dS z#5->b@Xp#%HUi5X37lXNxCLM!B?7-sGx3oom9X$`%7>YmQmf>q!|W)#zuD|ut4Hu6 z@NgXLJb*!Ff2apA6Du?jmR0GxXVjCYpM?Ma>_*iQQdZLXF>7`n(mzMgpN_tj= z(j^@Mm5tPmqtu6EP=6C3_XH~CIF)n4M&U$93d<}C9Rh-ZtQqES%Mn(!u^QDw)d~cJ zl?VtYA|R|nKsX6+S)L3z+E=2^0ioQY>{TOFovC}X<)W6P+8{6!sO1{sJSU(%tQDXg zn+CM0jI9{w;EB(K%df`i$Tf(>XXC}%wJ?=+fW!4PozJ1;_*@)=J`Zmtoo`dbnU0E> zXtDb~*p=Y5rVa3Fo#Wp+v}AI8F*v>y9A8E~`EukQS0Dgvq|tmO&E(&~DXyXwyopxx z)f&h8s%VYQF`uJ3`Va;9VG8pj zcr9@koyw2mU9!jUs@CIpLFx&c1?{vf=mAFysx&2u+KnDUC#NhZO_CW{J6Th0rueeW zN{A^Di`+-vh|LPqq9v)JFb}g8n~fC4YcZm><%5 z{s^x*eoPzr6S|#0rLFuK^3c!eDgJ`~#9z@%{58G9-{57bZ|O_^j&}3++=+ikX^%TQ zYHzBkJ(LSI?NMbb+N;Ts*<45MW!sq^(|-onyTSD@;QCh@ifAxW;5B?9@LL*6ib|?< zq_WDQa*g2(aNtZE%kTqd>uM#t6K={C9jJ@Q!!BA!8ib>y#iA395uHI}7aM(Lj`U44 z=@W5CQNs1DEj&M;7jET6Gt6)G)!8&_e$kL2S!c?PB&9XKSn?kXV)@1Kdpn5c7nUct z9>Z7VYWZxc0-#}TB%h-h?xM9f`S|!OfR5*L(y8+@A1}%3yrPxd=R_Yj*gM<2^CA>R z345h^qC4edkF=NAp9YAYu+v`Hr|V5}{Zk|Q(gJL3E)xA{2{txYViR$-=uhWiPw@&d zkggU7q0Bsp?i2^p!=jL$#?t>KQAF>EAt-qk(+9#&UyEV%lPKXFF`T=K5nL!na+x@k z=ZaC>C`R)c;xN8ajNx0vSk3OReJbrqw>zXMSBvRl25>f?FA>%FCafJpy&yZ&v_-xZ zyC-lo9+)a(`}m}-e2Q)Ln5vt#t~}=;n!WAuhV!<^TaMcvK0d=?-^0gefy6Wo!D)2# zZGU^oX?w=0=I-M)nX{yl!g+E_T9i{aF$s210UMZ1LqsKw5>u#LOvQ?~ik6CLbcUD? zozI}VMKwJnX3;J&o1PIz(92>Dy(?%VFx>8hbK08l{JokmiV0)wPKauOev|;~#12{_{EL$p+7r1A*nQZq2{?(3k}g`N z0$;eOMXJ`^F0s|QGZQ>pc+lL%)^#89;|+Ef1SWgm$mh$m(bxM{K5xu!*1Y&4`w%vq zor&L@!W%5`uVu8KSdLh`f+mQSR4q=VxndO^Cr-jX_$d??r_u^>8l5Iir*p&^beT94 zxOx^nDpq5cV-0;N&ZgaBt)>ZmQTB`JSM-^qU)7pAQI3XAfU2UgsB6exP1~3CcUnN+ z=*1qAEFnOLJ#`&=KT1=fSFhH$roJN8$G=1H%I8gTZ(6^kd-M4k`&Km;Ki8Qx+1Ar% z!w$H$@~sIPdx5YHVceUwfv?5z>+|`>e7?DbjZ+E6>64xLyg9qs$JmbtlWEJF zrok}23&WJaHK{ipyd0SHR>q!sM@{3&ke7R$NVYiRuFSha{VjDj#TKF$w zJO3nh2$y&WuO2;uw~Tg)0`aIQ6px7!;&CxSJRuf{--`y^kBC2Nu7&giiE+J{i}Ey* z3DIacnG3!2lJz|B1uWi;SC;rEs>?`6=9^9@j?#gUcl;NfPP!h@XYYK@RQvzTs~ile zb+5{@E|Yv8|F_*Fl_Y6PS@A3^_<30Hi?HCAV8Jg_M7)B-XRo3v_8P4huj9>KH!PsL!Ko*<~iaMK306n4dOFCL43|9i7)s< z@g=PIE8Z@?P60jdFl~_UbF7^lY1$l08(Q$?DgUq8oB`~gciu->_wHLZyvL9zWB$(0 znTVV+06k0o0S53R4B%%Nz-}18FED^#X*ojcsdx`_y&`CXl0%ymH$ACzq-PWly{2@c zca_fckaV>93 z%OSLOR0tlnceW*?C*m+JDF>2E=}$eBgQ$-(2)1xAO;8G{N*PQ?C`ELPGKA`sVwiIY zou>?^E0hs*tum7CP!6U0lu`7sGMb)N#?p7ncrH-Ncz{yQeq|z$Rwg0KtKe#7GA~go z`DA4ZU#d*y+m$LPbDGW6TMScwnm%_-T#q&_&&kwxIogG(flO1M1@>mQYwE|eHQ{4> zHQ`)LIIrCa7n&2I?1{4=C|XpS2-!s*^pO`&W(*BLmzARbgr)l4&ZXds@og&l5-P1!)3l?$mwxrlZt z7b7rVg1~$!eWhH+xyt42Q?9U~Q@*7~mm@j_Oznw_5ErHIK51z0OS|uC7iperTP#b- z>`UHmqQL*!EcU`px8(Di*-qUGT3{8O+1a)%Za=90Ru-of$CXX6xT~p`at#$I*V0hs zI-00lPu0o|G*`Kij#F-;2IUr5+pV-rxsA?NZl}wXJLqa?p5xlhm?D8 zto>ekLAj6KQtn6Ge1P4`R>aM1e5lgGvz6_f=s_qdz#ekwD-dQf|3EF(75n;H{`8?oUW zyT-=-ma)NxCi(m>>YD$fD8qlv0EoTPert*JyBUKzMj5R!-bzS9BK>+RA!!X>vLNL{ zn94^mm5*U6pTJZ;MM(M#A?b63q%UA5Um=S0K|86f$}{}g(Q*l0DEuyc~A+%c^$~o#G+*K{+-m0HRsl#}>TEg|}a9*K~;MM9#8$=n$zA_*x zWLgpq0qKjEKGKrj$8yw4fc|b=*b^WbVGhs|ADnCXU>|bXlx6)>9>4bS$8up{2Cf!L zJ0ksQTOkW>@BPuopQm}ZncB9WEu*TRbV3)Ws(!|jL@kAW$5Ai!a4JyCs7NiRQgtFt zQzy|JwSpF^lc`>vN@2B%;_5UySH-TYI)koNtLYAPCbg)u==bUo^rSk6URG=9Ewz?D zQ0D?K=5c3rK6HAdEm7!WVL}%xQ4o%aLW8B#>kXZ{9dt@rNv$b-Epq&Cb!r8TJ<*@@ zLKFJS%xp84Au5)X>aoyY0Q#$g{_3H>AoLf4{u-da#n9jJ(BD$%F9Q8xDXB)GzZmq_ zME9t1x?fGuBWjZVs5a9}>N0v?T~0r#E7+y3wCT=m>W=JH@+r{&~gOLu-VeVz!y@qC~*V26T zI;vBzrzZ6VI$71<{M4!vcwt!oWr9w0g2jE%k^8X4y|Gpx`Kq%GbM;gDK;3T2KXu&I zms@)PyV>PA?U+;O0#nWWrlw8LvzX^}d0( zO0M(1wLdc6>(ZhfNvM`O90imrrCL~r8X+xRCK zzfEkg{}IY6@;&%)nljVbNAaYmEA61cZzzKoAcGengO{jKeVIn9uh8M@t3aREfIhDS zef~^K)E6}Cl&`sfP)i13O9o*}24PDEVO<9D3A}SK3Y$sN0J`U7N&`2kYo7e^BI9>R z`kGbAPW(UC@wq5opZR881K1rPG>1wQ_Do51cltT5Ln^0o?( z_Sxk=>L9ZceH8t7L<*=ARy029kFx0i>PH2niYWRBoc)o%nbHm4n()L4ArTh|9A_cX zjOJSEh`oG8EECJ|Pycq3_3bq4+gbQ_6&^oZ`&_4eo}+!9r+r?aeO{=2UM#N1$i2YG ZL~(<-sjR2CS==ga$KN}|o#HO)`G21Uys-cP literal 0 HcmV?d00001 diff --git a/backend-spring/build/classes/java/test/be/seeseepuff/allowanceplanner/ColourUtilTest.class b/backend-spring/build/classes/java/test/be/seeseepuff/allowanceplanner/ColourUtilTest.class new file mode 100644 index 0000000000000000000000000000000000000000..8ff7d57755c11b97bc1a30fbc6c1f5be577be0e4 GIT binary patch literal 1111 zcmb7@U2hUW6o%j7YjN4yy0j{_wJ3f-tKF#8#MGD|)`W!Eq##}oIE5kGS=^nif5)Go zS2kW4ul-TRGeAO`EFo@och1*7Gw;dSKYxGz0&s*!Hd07i$T-L%$FMfy=iKwT8hFRO zk?3oN+$*W1e$9}s*1Bo92i-ibFj$o*PoEt;e_^8l$HIz(t5{{&?+Gswg6?sAdg^iC z5592K7h_^75qhzfzSju+APzr}$*|E6)VT9tY@oH;+mTB^^*0gaAu7#q5 zb!;${gK*%DVmcqa$5PV#5wvLbD!L7wb`tZf*T}kDjQ + + + + + + + + + + + + Gradle Configuration Cache + + + +

+ +
+ Loading... +
+ + + + + + diff --git a/backend-spring/build/reports/tests/test/be.seeseepuff.allowanceplanner.ApiTest/addAllowanceIdZero().html b/backend-spring/build/reports/tests/test/be.seeseepuff.allowanceplanner.ApiTest/addAllowanceIdZero().html new file mode 100644 index 0000000..d4bee3d --- /dev/null +++ b/backend-spring/build/reports/tests/test/be.seeseepuff.allowanceplanner.ApiTest/addAllowanceIdZero().html @@ -0,0 +1,116 @@ + + + + + +Test results - addAllowanceIdZero() + + + + + +
+ +
+ +
+

Gradle Test Run :test

+

addAllowanceIdZero()

+
+ +
+

summary

+
+
+ + + + + +
+
+ + + + + + + +
+
+
1
+

tests

+
+
+
+
0
+

failures

+
+
+
+
0
+

skipped

+
+
+
+
0.086s
+

duration

+
+
+
+
+
+
100%
+

successful

+
+
+
+
+
+
+

standard output

+ +
2026-02-28T18:46:26.434+01:00  INFO 74623 --- [allowance-planner] [    Test worker] o.f.c.i.command.clean.CleanExecutor      : Successfully dropped pre-schema database level objects (execution time 00:00.000s)
+2026-02-28T18:46:26.437+01:00  INFO 74623 --- [allowance-planner] [    Test worker] o.f.c.i.command.clean.CleanExecutor      : Successfully cleaned schema "public" (execution time 00:00.002s)
+2026-02-28T18:46:26.439+01:00  INFO 74623 --- [allowance-planner] [    Test worker] o.f.c.i.command.clean.CleanExecutor      : Successfully cleaned schema "public" (execution time 00:00.002s)
+2026-02-28T18:46:26.439+01:00  INFO 74623 --- [allowance-planner] [    Test worker] o.f.c.i.command.clean.CleanExecutor      : Successfully dropped post-schema database level objects (execution time 00:00.000s)
+2026-02-28T18:46:26.443+01:00  INFO 74623 --- [allowance-planner] [    Test worker] o.f.c.i.s.JdbcTableSchemaHistory         : Schema history table "public"."flyway_schema_history" does not exist yet
+2026-02-28T18:46:26.443+01:00  INFO 74623 --- [allowance-planner] [    Test worker] o.f.core.internal.command.DbValidate     : Successfully validated 1 migration (execution time 00:00.000s)
+2026-02-28T18:46:26.444+01:00  INFO 74623 --- [allowance-planner] [    Test worker] o.f.c.i.s.JdbcTableSchemaHistory         : Creating Schema History table "public"."flyway_schema_history" ...
+2026-02-28T18:46:26.446+01:00  INFO 74623 --- [allowance-planner] [    Test worker] o.f.core.internal.command.DbMigrate      : Current version of schema "public": << Empty Schema >>
+2026-02-28T18:46:26.447+01:00  INFO 74623 --- [allowance-planner] [    Test worker] o.f.core.internal.command.DbMigrate      : Migrating schema "public" to version "1 - initial"
+2026-02-28T18:46:26.454+01:00  INFO 74623 --- [allowance-planner] [    Test worker] o.f.core.internal.command.DbMigrate      : Successfully applied 1 migration to schema "public", now at version v1 (execution time 00:00.005s)
+
+ +
+
+
+
+
+ +
+ + diff --git a/backend-spring/build/reports/tests/test/be.seeseepuff.allowanceplanner.ApiTest/addAllowanceSimple().html b/backend-spring/build/reports/tests/test/be.seeseepuff.allowanceplanner.ApiTest/addAllowanceSimple().html new file mode 100644 index 0000000..be2a85d --- /dev/null +++ b/backend-spring/build/reports/tests/test/be.seeseepuff.allowanceplanner.ApiTest/addAllowanceSimple().html @@ -0,0 +1,116 @@ + + + + + +Test results - addAllowanceSimple() + + + + + +
+ +
+ +
+

Gradle Test Run :test

+

addAllowanceSimple()

+
+ +
+

summary

+
+
+ + + + + +
+
+ + + + + + + +
+
+
1
+

tests

+
+
+
+
0
+

failures

+
+
+
+
0
+

skipped

+
+
+
+
0.089s
+

duration

+
+
+
+
+
+
100%
+

successful

+
+
+
+
+
+
+

standard output

+ +
2026-02-28T18:46:26.834+01:00  INFO 74623 --- [allowance-planner] [    Test worker] o.f.c.i.command.clean.CleanExecutor      : Successfully dropped pre-schema database level objects (execution time 00:00.000s)
+2026-02-28T18:46:26.838+01:00  INFO 74623 --- [allowance-planner] [    Test worker] o.f.c.i.command.clean.CleanExecutor      : Successfully cleaned schema "public" (execution time 00:00.003s)
+2026-02-28T18:46:26.840+01:00  INFO 74623 --- [allowance-planner] [    Test worker] o.f.c.i.command.clean.CleanExecutor      : Successfully cleaned schema "public" (execution time 00:00.001s)
+2026-02-28T18:46:26.840+01:00  INFO 74623 --- [allowance-planner] [    Test worker] o.f.c.i.command.clean.CleanExecutor      : Successfully dropped post-schema database level objects (execution time 00:00.000s)
+2026-02-28T18:46:26.843+01:00  INFO 74623 --- [allowance-planner] [    Test worker] o.f.c.i.s.JdbcTableSchemaHistory         : Schema history table "public"."flyway_schema_history" does not exist yet
+2026-02-28T18:46:26.843+01:00  INFO 74623 --- [allowance-planner] [    Test worker] o.f.core.internal.command.DbValidate     : Successfully validated 1 migration (execution time 00:00.000s)
+2026-02-28T18:46:26.844+01:00  INFO 74623 --- [allowance-planner] [    Test worker] o.f.c.i.s.JdbcTableSchemaHistory         : Creating Schema History table "public"."flyway_schema_history" ...
+2026-02-28T18:46:26.847+01:00  INFO 74623 --- [allowance-planner] [    Test worker] o.f.core.internal.command.DbMigrate      : Current version of schema "public": << Empty Schema >>
+2026-02-28T18:46:26.848+01:00  INFO 74623 --- [allowance-planner] [    Test worker] o.f.core.internal.command.DbMigrate      : Migrating schema "public" to version "1 - initial"
+2026-02-28T18:46:26.854+01:00  INFO 74623 --- [allowance-planner] [    Test worker] o.f.core.internal.command.DbMigrate      : Successfully applied 1 migration to schema "public", now at version v1 (execution time 00:00.004s)
+
+ +
+
+
+
+
+ +
+ + diff --git a/backend-spring/build/reports/tests/test/be.seeseepuff.allowanceplanner.ApiTest/addAllowanceWithSpillage().html b/backend-spring/build/reports/tests/test/be.seeseepuff.allowanceplanner.ApiTest/addAllowanceWithSpillage().html new file mode 100644 index 0000000..2d4033b --- /dev/null +++ b/backend-spring/build/reports/tests/test/be.seeseepuff.allowanceplanner.ApiTest/addAllowanceWithSpillage().html @@ -0,0 +1,116 @@ + + + + + +Test results - addAllowanceWithSpillage() + + + + + +
+ +
+ +
+

Gradle Test Run :test

+

addAllowanceWithSpillage()

+
+ +
+

summary

+
+
+ + + + + +
+
+ + + + + + + +
+
+
1
+

tests

+
+
+
+
0
+

failures

+
+
+
+
0
+

skipped

+
+
+
+
0.183s
+

duration

+
+
+
+
+
+
100%
+

successful

+
+
+
+
+
+
+

standard output

+ +
2026-02-28T18:46:25.890+01:00  INFO 74623 --- [allowance-planner] [    Test worker] o.f.c.i.command.clean.CleanExecutor      : Successfully dropped pre-schema database level objects (execution time 00:00.000s)
+2026-02-28T18:46:25.895+01:00  INFO 74623 --- [allowance-planner] [    Test worker] o.f.c.i.command.clean.CleanExecutor      : Successfully cleaned schema "public" (execution time 00:00.004s)
+2026-02-28T18:46:25.897+01:00  INFO 74623 --- [allowance-planner] [    Test worker] o.f.c.i.command.clean.CleanExecutor      : Successfully cleaned schema "public" (execution time 00:00.001s)
+2026-02-28T18:46:25.897+01:00  INFO 74623 --- [allowance-planner] [    Test worker] o.f.c.i.command.clean.CleanExecutor      : Successfully dropped post-schema database level objects (execution time 00:00.000s)
+2026-02-28T18:46:25.899+01:00  INFO 74623 --- [allowance-planner] [    Test worker] o.f.c.i.s.JdbcTableSchemaHistory         : Schema history table "public"."flyway_schema_history" does not exist yet
+2026-02-28T18:46:25.900+01:00  INFO 74623 --- [allowance-planner] [    Test worker] o.f.core.internal.command.DbValidate     : Successfully validated 1 migration (execution time 00:00.000s)
+2026-02-28T18:46:25.900+01:00  INFO 74623 --- [allowance-planner] [    Test worker] o.f.c.i.s.JdbcTableSchemaHistory         : Creating Schema History table "public"."flyway_schema_history" ...
+2026-02-28T18:46:25.902+01:00  INFO 74623 --- [allowance-planner] [    Test worker] o.f.core.internal.command.DbMigrate      : Current version of schema "public": << Empty Schema >>
+2026-02-28T18:46:25.903+01:00  INFO 74623 --- [allowance-planner] [    Test worker] o.f.core.internal.command.DbMigrate      : Migrating schema "public" to version "1 - initial"
+2026-02-28T18:46:25.908+01:00  INFO 74623 --- [allowance-planner] [    Test worker] o.f.core.internal.command.DbMigrate      : Successfully applied 1 migration to schema "public", now at version v1 (execution time 00:00.003s)
+
+ +
+
+
+
+
+ +
+ + diff --git a/backend-spring/build/reports/tests/test/be.seeseepuff.allowanceplanner.ApiTest/completeAllowance().html b/backend-spring/build/reports/tests/test/be.seeseepuff.allowanceplanner.ApiTest/completeAllowance().html new file mode 100644 index 0000000..5b148bb --- /dev/null +++ b/backend-spring/build/reports/tests/test/be.seeseepuff.allowanceplanner.ApiTest/completeAllowance().html @@ -0,0 +1,116 @@ + + + + + +Test results - completeAllowance() + + + + + +
+ +
+ +
+

Gradle Test Run :test

+

completeAllowance()

+
+ +
+

summary

+
+
+ + + + + +
+
+ + + + + + + +
+
+
1
+

tests

+
+
+
+
0
+

failures

+
+
+
+
0
+

skipped

+
+
+
+
0.152s
+

duration

+
+
+
+
+
+
100%
+

successful

+
+
+
+
+
+
+

standard output

+ +
2026-02-28T18:46:26.074+01:00  INFO 74623 --- [allowance-planner] [    Test worker] o.f.c.i.command.clean.CleanExecutor      : Successfully dropped pre-schema database level objects (execution time 00:00.000s)
+2026-02-28T18:46:26.080+01:00  INFO 74623 --- [allowance-planner] [    Test worker] o.f.c.i.command.clean.CleanExecutor      : Successfully cleaned schema "public" (execution time 00:00.005s)
+2026-02-28T18:46:26.081+01:00  INFO 74623 --- [allowance-planner] [    Test worker] o.f.c.i.command.clean.CleanExecutor      : Successfully cleaned schema "public" (execution time 00:00.001s)
+2026-02-28T18:46:26.082+01:00  INFO 74623 --- [allowance-planner] [    Test worker] o.f.c.i.command.clean.CleanExecutor      : Successfully dropped post-schema database level objects (execution time 00:00.000s)
+2026-02-28T18:46:26.087+01:00  INFO 74623 --- [allowance-planner] [    Test worker] o.f.c.i.s.JdbcTableSchemaHistory         : Schema history table "public"."flyway_schema_history" does not exist yet
+2026-02-28T18:46:26.087+01:00  INFO 74623 --- [allowance-planner] [    Test worker] o.f.core.internal.command.DbValidate     : Successfully validated 1 migration (execution time 00:00.001s)
+2026-02-28T18:46:26.088+01:00  INFO 74623 --- [allowance-planner] [    Test worker] o.f.c.i.s.JdbcTableSchemaHistory         : Creating Schema History table "public"."flyway_schema_history" ...
+2026-02-28T18:46:26.092+01:00  INFO 74623 --- [allowance-planner] [    Test worker] o.f.core.internal.command.DbMigrate      : Current version of schema "public": << Empty Schema >>
+2026-02-28T18:46:26.093+01:00  INFO 74623 --- [allowance-planner] [    Test worker] o.f.core.internal.command.DbMigrate      : Migrating schema "public" to version "1 - initial"
+2026-02-28T18:46:26.097+01:00  INFO 74623 --- [allowance-planner] [    Test worker] o.f.core.internal.command.DbMigrate      : Successfully applied 1 migration to schema "public", now at version v1 (execution time 00:00.003s)
+
+ +
+
+
+
+
+ +
+ + diff --git a/backend-spring/build/reports/tests/test/be.seeseepuff.allowanceplanner.ApiTest/completeAllowanceInvalidAllowanceId().html b/backend-spring/build/reports/tests/test/be.seeseepuff.allowanceplanner.ApiTest/completeAllowanceInvalidAllowanceId().html new file mode 100644 index 0000000..aff0d69 --- /dev/null +++ b/backend-spring/build/reports/tests/test/be.seeseepuff.allowanceplanner.ApiTest/completeAllowanceInvalidAllowanceId().html @@ -0,0 +1,116 @@ + + + + + +Test results - completeAllowanceInvalidAllowanceId() + + + + + +
+ +
+ +
+

Gradle Test Run :test

+

completeAllowanceInvalidAllowanceId()

+
+ +
+

summary

+
+
+ + + + + +
+
+ + + + + + + +
+
+
1
+

tests

+
+
+
+
0
+

failures

+
+
+
+
0
+

skipped

+
+
+
+
0.040s
+

duration

+
+
+
+
+
+
100%
+

successful

+
+
+
+
+
+
+

standard output

+ +
2026-02-28T18:46:24.702+01:00  INFO 74623 --- [allowance-planner] [    Test worker] o.f.c.i.command.clean.CleanExecutor      : Successfully dropped pre-schema database level objects (execution time 00:00.000s)
+2026-02-28T18:46:24.706+01:00  INFO 74623 --- [allowance-planner] [    Test worker] o.f.c.i.command.clean.CleanExecutor      : Successfully cleaned schema "public" (execution time 00:00.004s)
+2026-02-28T18:46:24.708+01:00  INFO 74623 --- [allowance-planner] [    Test worker] o.f.c.i.command.clean.CleanExecutor      : Successfully cleaned schema "public" (execution time 00:00.001s)
+2026-02-28T18:46:24.709+01:00  INFO 74623 --- [allowance-planner] [    Test worker] o.f.c.i.command.clean.CleanExecutor      : Successfully dropped post-schema database level objects (execution time 00:00.000s)
+2026-02-28T18:46:24.713+01:00  INFO 74623 --- [allowance-planner] [    Test worker] o.f.c.i.s.JdbcTableSchemaHistory         : Schema history table "public"."flyway_schema_history" does not exist yet
+2026-02-28T18:46:24.713+01:00  INFO 74623 --- [allowance-planner] [    Test worker] o.f.core.internal.command.DbValidate     : Successfully validated 1 migration (execution time 00:00.000s)
+2026-02-28T18:46:24.714+01:00  INFO 74623 --- [allowance-planner] [    Test worker] o.f.c.i.s.JdbcTableSchemaHistory         : Creating Schema History table "public"."flyway_schema_history" ...
+2026-02-28T18:46:24.717+01:00  INFO 74623 --- [allowance-planner] [    Test worker] o.f.core.internal.command.DbMigrate      : Current version of schema "public": << Empty Schema >>
+2026-02-28T18:46:24.719+01:00  INFO 74623 --- [allowance-planner] [    Test worker] o.f.core.internal.command.DbMigrate      : Migrating schema "public" to version "1 - initial"
+2026-02-28T18:46:24.724+01:00  INFO 74623 --- [allowance-planner] [    Test worker] o.f.core.internal.command.DbMigrate      : Successfully applied 1 migration to schema "public", now at version v1 (execution time 00:00.003s)
+
+ +
+
+
+
+
+ +
+ + diff --git a/backend-spring/build/reports/tests/test/be.seeseepuff.allowanceplanner.ApiTest/completeAllowanceInvalidUserId().html b/backend-spring/build/reports/tests/test/be.seeseepuff.allowanceplanner.ApiTest/completeAllowanceInvalidUserId().html new file mode 100644 index 0000000..42b7b11 --- /dev/null +++ b/backend-spring/build/reports/tests/test/be.seeseepuff.allowanceplanner.ApiTest/completeAllowanceInvalidUserId().html @@ -0,0 +1,116 @@ + + + + + +Test results - completeAllowanceInvalidUserId() + + + + + +
+ +
+ +
+

Gradle Test Run :test

+

completeAllowanceInvalidUserId()

+
+ +
+

summary

+
+
+ + + + + +
+
+ + + + + + + +
+
+
1
+

tests

+
+
+
+
0
+

failures

+
+
+
+
0
+

skipped

+
+
+
+
0.031s
+

duration

+
+
+
+
+
+
100%
+

successful

+
+
+
+
+
+
+

standard output

+ +
2026-02-28T18:46:26.402+01:00  INFO 74623 --- [allowance-planner] [    Test worker] o.f.c.i.command.clean.CleanExecutor      : Successfully dropped pre-schema database level objects (execution time 00:00.000s)
+2026-02-28T18:46:26.407+01:00  INFO 74623 --- [allowance-planner] [    Test worker] o.f.c.i.command.clean.CleanExecutor      : Successfully cleaned schema "public" (execution time 00:00.004s)
+2026-02-28T18:46:26.409+01:00  INFO 74623 --- [allowance-planner] [    Test worker] o.f.c.i.command.clean.CleanExecutor      : Successfully cleaned schema "public" (execution time 00:00.001s)
+2026-02-28T18:46:26.409+01:00  INFO 74623 --- [allowance-planner] [    Test worker] o.f.c.i.command.clean.CleanExecutor      : Successfully dropped post-schema database level objects (execution time 00:00.000s)
+2026-02-28T18:46:26.411+01:00  INFO 74623 --- [allowance-planner] [    Test worker] o.f.c.i.s.JdbcTableSchemaHistory         : Schema history table "public"."flyway_schema_history" does not exist yet
+2026-02-28T18:46:26.412+01:00  INFO 74623 --- [allowance-planner] [    Test worker] o.f.core.internal.command.DbValidate     : Successfully validated 1 migration (execution time 00:00.000s)
+2026-02-28T18:46:26.413+01:00  INFO 74623 --- [allowance-planner] [    Test worker] o.f.c.i.s.JdbcTableSchemaHistory         : Creating Schema History table "public"."flyway_schema_history" ...
+2026-02-28T18:46:26.415+01:00  INFO 74623 --- [allowance-planner] [    Test worker] o.f.core.internal.command.DbMigrate      : Current version of schema "public": << Empty Schema >>
+2026-02-28T18:46:26.416+01:00  INFO 74623 --- [allowance-planner] [    Test worker] o.f.core.internal.command.DbMigrate      : Migrating schema "public" to version "1 - initial"
+2026-02-28T18:46:26.420+01:00  INFO 74623 --- [allowance-planner] [    Test worker] o.f.core.internal.command.DbMigrate      : Successfully applied 1 migration to schema "public", now at version v1 (execution time 00:00.003s)
+
+ +
+
+
+
+
+ +
+ + diff --git a/backend-spring/build/reports/tests/test/be.seeseepuff.allowanceplanner.ApiTest/completeTask().html b/backend-spring/build/reports/tests/test/be.seeseepuff.allowanceplanner.ApiTest/completeTask().html new file mode 100644 index 0000000..5387ba0 --- /dev/null +++ b/backend-spring/build/reports/tests/test/be.seeseepuff.allowanceplanner.ApiTest/completeTask().html @@ -0,0 +1,116 @@ + + + + + +Test results - completeTask() + + + + + +
+ +
+ +
+

Gradle Test Run :test

+

completeTask()

+
+ +
+

summary

+
+
+ + + + + +
+
+ + + + + + + +
+
+
1
+

tests

+
+
+
+
0
+

failures

+
+
+
+
0
+

skipped

+
+
+
+
0.218s
+

duration

+
+
+
+
+
+
100%
+

successful

+
+
+
+
+
+
+

standard output

+ +
2026-02-28T18:46:25.110+01:00  INFO 74623 --- [allowance-planner] [    Test worker] o.f.c.i.command.clean.CleanExecutor      : Successfully dropped pre-schema database level objects (execution time 00:00.000s)
+2026-02-28T18:46:25.115+01:00  INFO 74623 --- [allowance-planner] [    Test worker] o.f.c.i.command.clean.CleanExecutor      : Successfully cleaned schema "public" (execution time 00:00.004s)
+2026-02-28T18:46:25.116+01:00  INFO 74623 --- [allowance-planner] [    Test worker] o.f.c.i.command.clean.CleanExecutor      : Successfully cleaned schema "public" (execution time 00:00.001s)
+2026-02-28T18:46:25.116+01:00  INFO 74623 --- [allowance-planner] [    Test worker] o.f.c.i.command.clean.CleanExecutor      : Successfully dropped post-schema database level objects (execution time 00:00.000s)
+2026-02-28T18:46:25.121+01:00  INFO 74623 --- [allowance-planner] [    Test worker] o.f.c.i.s.JdbcTableSchemaHistory         : Schema history table "public"."flyway_schema_history" does not exist yet
+2026-02-28T18:46:25.121+01:00  INFO 74623 --- [allowance-planner] [    Test worker] o.f.core.internal.command.DbValidate     : Successfully validated 1 migration (execution time 00:00.000s)
+2026-02-28T18:46:25.123+01:00  INFO 74623 --- [allowance-planner] [    Test worker] o.f.c.i.s.JdbcTableSchemaHistory         : Creating Schema History table "public"."flyway_schema_history" ...
+2026-02-28T18:46:25.125+01:00  INFO 74623 --- [allowance-planner] [    Test worker] o.f.core.internal.command.DbMigrate      : Current version of schema "public": << Empty Schema >>
+2026-02-28T18:46:25.126+01:00  INFO 74623 --- [allowance-planner] [    Test worker] o.f.core.internal.command.DbMigrate      : Migrating schema "public" to version "1 - initial"
+2026-02-28T18:46:25.133+01:00  INFO 74623 --- [allowance-planner] [    Test worker] o.f.core.internal.command.DbMigrate      : Successfully applied 1 migration to schema "public", now at version v1 (execution time 00:00.004s)
+
+ +
+
+
+
+
+ +
+ + diff --git a/backend-spring/build/reports/tests/test/be.seeseepuff.allowanceplanner.ApiTest/completeTaskAllowanceWeightsSumTo0().html b/backend-spring/build/reports/tests/test/be.seeseepuff.allowanceplanner.ApiTest/completeTaskAllowanceWeightsSumTo0().html new file mode 100644 index 0000000..7f64358 --- /dev/null +++ b/backend-spring/build/reports/tests/test/be.seeseepuff.allowanceplanner.ApiTest/completeTaskAllowanceWeightsSumTo0().html @@ -0,0 +1,116 @@ + + + + + +Test results - completeTaskAllowanceWeightsSumTo0() + + + + + +
+ +
+ +
+

Gradle Test Run :test

+

completeTaskAllowanceWeightsSumTo0()

+
+ +
+

summary

+
+
+ + + + + +
+
+ + + + + + + +
+
+
1
+

tests

+
+
+
+
0
+

failures

+
+
+
+
0
+

skipped

+
+
+
+
0.172s
+

duration

+
+
+
+
+
+
100%
+

successful

+
+
+
+
+
+
+

standard output

+ +
2026-02-28T18:46:24.528+01:00  INFO 74623 --- [allowance-planner] [    Test worker] o.f.c.i.command.clean.CleanExecutor      : Successfully dropped pre-schema database level objects (execution time 00:00.000s)
+2026-02-28T18:46:24.538+01:00  INFO 74623 --- [allowance-planner] [    Test worker] o.f.c.i.command.clean.CleanExecutor      : Successfully cleaned schema "public" (execution time 00:00.009s)
+2026-02-28T18:46:24.540+01:00  INFO 74623 --- [allowance-planner] [    Test worker] o.f.c.i.command.clean.CleanExecutor      : Successfully cleaned schema "public" (execution time 00:00.001s)
+2026-02-28T18:46:24.541+01:00  INFO 74623 --- [allowance-planner] [    Test worker] o.f.c.i.command.clean.CleanExecutor      : Successfully dropped post-schema database level objects (execution time 00:00.000s)
+2026-02-28T18:46:24.546+01:00  INFO 74623 --- [allowance-planner] [    Test worker] o.f.c.i.s.JdbcTableSchemaHistory         : Schema history table "public"."flyway_schema_history" does not exist yet
+2026-02-28T18:46:24.546+01:00  INFO 74623 --- [allowance-planner] [    Test worker] o.f.core.internal.command.DbValidate     : Successfully validated 1 migration (execution time 00:00.000s)
+2026-02-28T18:46:24.547+01:00  INFO 74623 --- [allowance-planner] [    Test worker] o.f.c.i.s.JdbcTableSchemaHistory         : Creating Schema History table "public"."flyway_schema_history" ...
+2026-02-28T18:46:24.550+01:00  INFO 74623 --- [allowance-planner] [    Test worker] o.f.core.internal.command.DbMigrate      : Current version of schema "public": << Empty Schema >>
+2026-02-28T18:46:24.551+01:00  INFO 74623 --- [allowance-planner] [    Test worker] o.f.core.internal.command.DbMigrate      : Migrating schema "public" to version "1 - initial"
+2026-02-28T18:46:24.556+01:00  INFO 74623 --- [allowance-planner] [    Test worker] o.f.core.internal.command.DbMigrate      : Successfully applied 1 migration to schema "public", now at version v1 (execution time 00:00.003s)
+
+ +
+
+
+
+
+ +
+ + diff --git a/backend-spring/build/reports/tests/test/be.seeseepuff.allowanceplanner.ApiTest/completeTaskInvalidId().html b/backend-spring/build/reports/tests/test/be.seeseepuff.allowanceplanner.ApiTest/completeTaskInvalidId().html new file mode 100644 index 0000000..84be790 --- /dev/null +++ b/backend-spring/build/reports/tests/test/be.seeseepuff.allowanceplanner.ApiTest/completeTaskInvalidId().html @@ -0,0 +1,116 @@ + + + + + +Test results - completeTaskInvalidId() + + + + + +
+ +
+ +
+

Gradle Test Run :test

+

completeTaskInvalidId()

+
+ +
+

summary

+
+
+ + + + + +
+
+ + + + + + + +
+
+
1
+

tests

+
+
+
+
0
+

failures

+
+
+
+
0
+

skipped

+
+
+
+
0.035s
+

duration

+
+
+
+
+
+
100%
+

successful

+
+
+
+
+
+
+

standard output

+ +
2026-02-28T18:46:25.074+01:00  INFO 74623 --- [allowance-planner] [    Test worker] o.f.c.i.command.clean.CleanExecutor      : Successfully dropped pre-schema database level objects (execution time 00:00.000s)
+2026-02-28T18:46:25.077+01:00  INFO 74623 --- [allowance-planner] [    Test worker] o.f.c.i.command.clean.CleanExecutor      : Successfully cleaned schema "public" (execution time 00:00.002s)
+2026-02-28T18:46:25.079+01:00  INFO 74623 --- [allowance-planner] [    Test worker] o.f.c.i.command.clean.CleanExecutor      : Successfully cleaned schema "public" (execution time 00:00.001s)
+2026-02-28T18:46:25.079+01:00  INFO 74623 --- [allowance-planner] [    Test worker] o.f.c.i.command.clean.CleanExecutor      : Successfully dropped post-schema database level objects (execution time 00:00.000s)
+2026-02-28T18:46:25.083+01:00  INFO 74623 --- [allowance-planner] [    Test worker] o.f.c.i.s.JdbcTableSchemaHistory         : Schema history table "public"."flyway_schema_history" does not exist yet
+2026-02-28T18:46:25.083+01:00  INFO 74623 --- [allowance-planner] [    Test worker] o.f.core.internal.command.DbValidate     : Successfully validated 1 migration (execution time 00:00.000s)
+2026-02-28T18:46:25.084+01:00  INFO 74623 --- [allowance-planner] [    Test worker] o.f.c.i.s.JdbcTableSchemaHistory         : Creating Schema History table "public"."flyway_schema_history" ...
+2026-02-28T18:46:25.087+01:00  INFO 74623 --- [allowance-planner] [    Test worker] o.f.core.internal.command.DbMigrate      : Current version of schema "public": << Empty Schema >>
+2026-02-28T18:46:25.087+01:00  INFO 74623 --- [allowance-planner] [    Test worker] o.f.core.internal.command.DbMigrate      : Migrating schema "public" to version "1 - initial"
+2026-02-28T18:46:25.094+01:00  INFO 74623 --- [allowance-planner] [    Test worker] o.f.core.internal.command.DbMigrate      : Successfully applied 1 migration to schema "public", now at version v1 (execution time 00:00.004s)
+
+ +
+
+
+
+
+ +
+ + diff --git a/backend-spring/build/reports/tests/test/be.seeseepuff.allowanceplanner.ApiTest/completeTaskWithNoWeights().html b/backend-spring/build/reports/tests/test/be.seeseepuff.allowanceplanner.ApiTest/completeTaskWithNoWeights().html new file mode 100644 index 0000000..e4e50ed --- /dev/null +++ b/backend-spring/build/reports/tests/test/be.seeseepuff.allowanceplanner.ApiTest/completeTaskWithNoWeights().html @@ -0,0 +1,116 @@ + + + + + +Test results - completeTaskWithNoWeights() + + + + + +
+ +
+ +
+

Gradle Test Run :test

+

completeTaskWithNoWeights()

+
+ +
+

summary

+
+
+ + + + + +
+
+ + + + + + + +
+
+
1
+

tests

+
+
+
+
0
+

failures

+
+
+
+
0
+

skipped

+
+
+
+
0.146s
+

duration

+
+
+
+
+
+
100%
+

successful

+
+
+
+
+
+
+

standard output

+ +
2026-02-28T18:46:24.852+01:00  INFO 74623 --- [allowance-planner] [    Test worker] o.f.c.i.command.clean.CleanExecutor      : Successfully dropped pre-schema database level objects (execution time 00:00.000s)
+2026-02-28T18:46:24.857+01:00  INFO 74623 --- [allowance-planner] [    Test worker] o.f.c.i.command.clean.CleanExecutor      : Successfully cleaned schema "public" (execution time 00:00.004s)
+2026-02-28T18:46:24.859+01:00  INFO 74623 --- [allowance-planner] [    Test worker] o.f.c.i.command.clean.CleanExecutor      : Successfully cleaned schema "public" (execution time 00:00.001s)
+2026-02-28T18:46:24.859+01:00  INFO 74623 --- [allowance-planner] [    Test worker] o.f.c.i.command.clean.CleanExecutor      : Successfully dropped post-schema database level objects (execution time 00:00.000s)
+2026-02-28T18:46:24.864+01:00  INFO 74623 --- [allowance-planner] [    Test worker] o.f.c.i.s.JdbcTableSchemaHistory         : Schema history table "public"."flyway_schema_history" does not exist yet
+2026-02-28T18:46:24.864+01:00  INFO 74623 --- [allowance-planner] [    Test worker] o.f.core.internal.command.DbValidate     : Successfully validated 1 migration (execution time 00:00.001s)
+2026-02-28T18:46:24.866+01:00  INFO 74623 --- [allowance-planner] [    Test worker] o.f.c.i.s.JdbcTableSchemaHistory         : Creating Schema History table "public"."flyway_schema_history" ...
+2026-02-28T18:46:24.869+01:00  INFO 74623 --- [allowance-planner] [    Test worker] o.f.core.internal.command.DbMigrate      : Current version of schema "public": << Empty Schema >>
+2026-02-28T18:46:24.870+01:00  INFO 74623 --- [allowance-planner] [    Test worker] o.f.core.internal.command.DbMigrate      : Migrating schema "public" to version "1 - initial"
+2026-02-28T18:46:24.875+01:00  INFO 74623 --- [allowance-planner] [    Test worker] o.f.core.internal.command.DbMigrate      : Successfully applied 1 migration to schema "public", now at version v1 (execution time 00:00.003s)
+
+ +
+
+
+
+
+ +
+ + diff --git a/backend-spring/build/reports/tests/test/be.seeseepuff.allowanceplanner.ApiTest/createTask().html b/backend-spring/build/reports/tests/test/be.seeseepuff.allowanceplanner.ApiTest/createTask().html new file mode 100644 index 0000000..ce10cb7 --- /dev/null +++ b/backend-spring/build/reports/tests/test/be.seeseepuff.allowanceplanner.ApiTest/createTask().html @@ -0,0 +1,116 @@ + + + + + +Test results - createTask() + + + + + +
+ +
+ +
+

Gradle Test Run :test

+

createTask()

+
+ +
+

summary

+
+
+ + + + + +
+
+ + + + + + + +
+
+
1
+

tests

+
+
+
+
0
+

failures

+
+
+
+
0
+

skipped

+
+
+
+
0.077s
+

duration

+
+
+
+
+
+
100%
+

successful

+
+
+
+
+
+
+

standard output

+ +
2026-02-28T18:46:27.049+01:00  INFO 74623 --- [allowance-planner] [    Test worker] o.f.c.i.command.clean.CleanExecutor      : Successfully dropped pre-schema database level objects (execution time 00:00.000s)
+2026-02-28T18:46:27.055+01:00  INFO 74623 --- [allowance-planner] [    Test worker] o.f.c.i.command.clean.CleanExecutor      : Successfully cleaned schema "public" (execution time 00:00.004s)
+2026-02-28T18:46:27.056+01:00  INFO 74623 --- [allowance-planner] [    Test worker] o.f.c.i.command.clean.CleanExecutor      : Successfully cleaned schema "public" (execution time 00:00.001s)
+2026-02-28T18:46:27.056+01:00  INFO 74623 --- [allowance-planner] [    Test worker] o.f.c.i.command.clean.CleanExecutor      : Successfully dropped post-schema database level objects (execution time 00:00.000s)
+2026-02-28T18:46:27.059+01:00  INFO 74623 --- [allowance-planner] [    Test worker] o.f.c.i.s.JdbcTableSchemaHistory         : Schema history table "public"."flyway_schema_history" does not exist yet
+2026-02-28T18:46:27.059+01:00  INFO 74623 --- [allowance-planner] [    Test worker] o.f.core.internal.command.DbValidate     : Successfully validated 1 migration (execution time 00:00.000s)
+2026-02-28T18:46:27.060+01:00  INFO 74623 --- [allowance-planner] [    Test worker] o.f.c.i.s.JdbcTableSchemaHistory         : Creating Schema History table "public"."flyway_schema_history" ...
+2026-02-28T18:46:27.062+01:00  INFO 74623 --- [allowance-planner] [    Test worker] o.f.core.internal.command.DbMigrate      : Current version of schema "public": << Empty Schema >>
+2026-02-28T18:46:27.063+01:00  INFO 74623 --- [allowance-planner] [    Test worker] o.f.core.internal.command.DbMigrate      : Migrating schema "public" to version "1 - initial"
+2026-02-28T18:46:27.067+01:00  INFO 74623 --- [allowance-planner] [    Test worker] o.f.core.internal.command.DbMigrate      : Successfully applied 1 migration to schema "public", now at version v1 (execution time 00:00.003s)
+
+ +
+
+
+
+
+ +
+ + diff --git a/backend-spring/build/reports/tests/test/be.seeseepuff.allowanceplanner.ApiTest/createTaskInvalidAssignedUser().html b/backend-spring/build/reports/tests/test/be.seeseepuff.allowanceplanner.ApiTest/createTaskInvalidAssignedUser().html new file mode 100644 index 0000000..8973b75 --- /dev/null +++ b/backend-spring/build/reports/tests/test/be.seeseepuff.allowanceplanner.ApiTest/createTaskInvalidAssignedUser().html @@ -0,0 +1,116 @@ + + + + + +Test results - createTaskInvalidAssignedUser() + + + + + +
+ +
+ +
+

Gradle Test Run :test

+

createTaskInvalidAssignedUser()

+
+ +
+

summary

+
+
+ + + + + +
+
+ + + + + + + +
+
+
1
+

tests

+
+
+
+
0
+

failures

+
+
+
+
0
+

skipped

+
+
+
+
0.047s
+

duration

+
+
+
+
+
+
100%
+

successful

+
+
+
+
+
+
+

standard output

+ +
2026-02-28T18:46:24.412+01:00  INFO 74623 --- [allowance-planner] [    Test worker] o.f.c.i.command.clean.CleanExecutor      : Successfully dropped pre-schema database level objects (execution time 00:00.000s)
+2026-02-28T18:46:24.417+01:00  INFO 74623 --- [allowance-planner] [    Test worker] o.f.c.i.command.clean.CleanExecutor      : Successfully cleaned schema "public" (execution time 00:00.005s)
+2026-02-28T18:46:24.420+01:00  INFO 74623 --- [allowance-planner] [    Test worker] o.f.c.i.command.clean.CleanExecutor      : Successfully cleaned schema "public" (execution time 00:00.002s)
+2026-02-28T18:46:24.420+01:00  INFO 74623 --- [allowance-planner] [    Test worker] o.f.c.i.command.clean.CleanExecutor      : Successfully dropped post-schema database level objects (execution time 00:00.000s)
+2026-02-28T18:46:24.425+01:00  INFO 74623 --- [allowance-planner] [    Test worker] o.f.c.i.s.JdbcTableSchemaHistory         : Schema history table "public"."flyway_schema_history" does not exist yet
+2026-02-28T18:46:24.425+01:00  INFO 74623 --- [allowance-planner] [    Test worker] o.f.core.internal.command.DbValidate     : Successfully validated 1 migration (execution time 00:00.001s)
+2026-02-28T18:46:24.426+01:00  INFO 74623 --- [allowance-planner] [    Test worker] o.f.c.i.s.JdbcTableSchemaHistory         : Creating Schema History table "public"."flyway_schema_history" ...
+2026-02-28T18:46:24.430+01:00  INFO 74623 --- [allowance-planner] [    Test worker] o.f.core.internal.command.DbMigrate      : Current version of schema "public": << Empty Schema >>
+2026-02-28T18:46:24.431+01:00  INFO 74623 --- [allowance-planner] [    Test worker] o.f.core.internal.command.DbMigrate      : Migrating schema "public" to version "1 - initial"
+2026-02-28T18:46:24.436+01:00  INFO 74623 --- [allowance-planner] [    Test worker] o.f.core.internal.command.DbMigrate      : Successfully applied 1 migration to schema "public", now at version v1 (execution time 00:00.003s)
+
+ +
+
+
+
+
+ +
+ + diff --git a/backend-spring/build/reports/tests/test/be.seeseepuff.allowanceplanner.ApiTest/createTaskInvalidRequestBody().html b/backend-spring/build/reports/tests/test/be.seeseepuff.allowanceplanner.ApiTest/createTaskInvalidRequestBody().html new file mode 100644 index 0000000..20de5e5 --- /dev/null +++ b/backend-spring/build/reports/tests/test/be.seeseepuff.allowanceplanner.ApiTest/createTaskInvalidRequestBody().html @@ -0,0 +1,116 @@ + + + + + +Test results - createTaskInvalidRequestBody() + + + + + +
+ +
+ +
+

Gradle Test Run :test

+

createTaskInvalidRequestBody()

+
+ +
+

summary

+
+
+ + + + + +
+
+ + + + + + + +
+
+
1
+

tests

+
+
+
+
0
+

failures

+
+
+
+
0
+

skipped

+
+
+
+
0.032s
+

duration

+
+
+
+
+
+
100%
+

successful

+
+
+
+
+
+
+

standard output

+ +
2026-02-28T18:46:27.254+01:00  INFO 74623 --- [allowance-planner] [    Test worker] o.f.c.i.command.clean.CleanExecutor      : Successfully dropped pre-schema database level objects (execution time 00:00.000s)
+2026-02-28T18:46:27.260+01:00  INFO 74623 --- [allowance-planner] [    Test worker] o.f.c.i.command.clean.CleanExecutor      : Successfully cleaned schema "public" (execution time 00:00.005s)
+2026-02-28T18:46:27.261+01:00  INFO 74623 --- [allowance-planner] [    Test worker] o.f.c.i.command.clean.CleanExecutor      : Successfully cleaned schema "public" (execution time 00:00.001s)
+2026-02-28T18:46:27.261+01:00  INFO 74623 --- [allowance-planner] [    Test worker] o.f.c.i.command.clean.CleanExecutor      : Successfully dropped post-schema database level objects (execution time 00:00.000s)
+2026-02-28T18:46:27.264+01:00  INFO 74623 --- [allowance-planner] [    Test worker] o.f.c.i.s.JdbcTableSchemaHistory         : Schema history table "public"."flyway_schema_history" does not exist yet
+2026-02-28T18:46:27.264+01:00  INFO 74623 --- [allowance-planner] [    Test worker] o.f.core.internal.command.DbValidate     : Successfully validated 1 migration (execution time 00:00.000s)
+2026-02-28T18:46:27.265+01:00  INFO 74623 --- [allowance-planner] [    Test worker] o.f.c.i.s.JdbcTableSchemaHistory         : Creating Schema History table "public"."flyway_schema_history" ...
+2026-02-28T18:46:27.268+01:00  INFO 74623 --- [allowance-planner] [    Test worker] o.f.core.internal.command.DbMigrate      : Current version of schema "public": << Empty Schema >>
+2026-02-28T18:46:27.268+01:00  INFO 74623 --- [allowance-planner] [    Test worker] o.f.core.internal.command.DbMigrate      : Migrating schema "public" to version "1 - initial"
+2026-02-28T18:46:27.273+01:00  INFO 74623 --- [allowance-planner] [    Test worker] o.f.core.internal.command.DbMigrate      : Successfully applied 1 migration to schema "public", now at version v1 (execution time 00:00.002s)
+
+ +
+
+
+
+
+ +
+ + diff --git a/backend-spring/build/reports/tests/test/be.seeseepuff.allowanceplanner.ApiTest/createTaskNoName().html b/backend-spring/build/reports/tests/test/be.seeseepuff.allowanceplanner.ApiTest/createTaskNoName().html new file mode 100644 index 0000000..a018696 --- /dev/null +++ b/backend-spring/build/reports/tests/test/be.seeseepuff.allowanceplanner.ApiTest/createTaskNoName().html @@ -0,0 +1,116 @@ + + + + + +Test results - createTaskNoName() + + + + + +
+ +
+ +
+

Gradle Test Run :test

+

createTaskNoName()

+
+ +
+

summary

+
+
+ + + + + +
+
+ + + + + + + +
+
+
1
+

tests

+
+
+
+
0
+

failures

+
+
+
+
0
+

skipped

+
+
+
+
0.044s
+

duration

+
+
+
+
+
+
100%
+

successful

+
+
+
+
+
+
+

standard output

+ +
2026-02-28T18:46:24.139+01:00  INFO 74623 --- [allowance-planner] [    Test worker] o.f.c.i.command.clean.CleanExecutor      : Successfully dropped pre-schema database level objects (execution time 00:00.000s)
+2026-02-28T18:46:24.145+01:00  INFO 74623 --- [allowance-planner] [    Test worker] o.f.c.i.command.clean.CleanExecutor      : Successfully cleaned schema "public" (execution time 00:00.005s)
+2026-02-28T18:46:24.148+01:00  INFO 74623 --- [allowance-planner] [    Test worker] o.f.c.i.command.clean.CleanExecutor      : Successfully cleaned schema "public" (execution time 00:00.003s)
+2026-02-28T18:46:24.149+01:00  INFO 74623 --- [allowance-planner] [    Test worker] o.f.c.i.command.clean.CleanExecutor      : Successfully dropped post-schema database level objects (execution time 00:00.000s)
+2026-02-28T18:46:24.153+01:00  INFO 74623 --- [allowance-planner] [    Test worker] o.f.c.i.s.JdbcTableSchemaHistory         : Schema history table "public"."flyway_schema_history" does not exist yet
+2026-02-28T18:46:24.153+01:00  INFO 74623 --- [allowance-planner] [    Test worker] o.f.core.internal.command.DbValidate     : Successfully validated 1 migration (execution time 00:00.000s)
+2026-02-28T18:46:24.154+01:00  INFO 74623 --- [allowance-planner] [    Test worker] o.f.c.i.s.JdbcTableSchemaHistory         : Creating Schema History table "public"."flyway_schema_history" ...
+2026-02-28T18:46:24.157+01:00  INFO 74623 --- [allowance-planner] [    Test worker] o.f.core.internal.command.DbMigrate      : Current version of schema "public": << Empty Schema >>
+2026-02-28T18:46:24.159+01:00  INFO 74623 --- [allowance-planner] [    Test worker] o.f.core.internal.command.DbMigrate      : Migrating schema "public" to version "1 - initial"
+2026-02-28T18:46:24.164+01:00  INFO 74623 --- [allowance-planner] [    Test worker] o.f.core.internal.command.DbMigrate      : Successfully applied 1 migration to schema "public", now at version v1 (execution time 00:00.004s)
+
+ +
+
+
+
+
+ +
+ + diff --git a/backend-spring/build/reports/tests/test/be.seeseepuff.allowanceplanner.ApiTest/createUserAllowance().html b/backend-spring/build/reports/tests/test/be.seeseepuff.allowanceplanner.ApiTest/createUserAllowance().html new file mode 100644 index 0000000..ee8cb77 --- /dev/null +++ b/backend-spring/build/reports/tests/test/be.seeseepuff.allowanceplanner.ApiTest/createUserAllowance().html @@ -0,0 +1,116 @@ + + + + + +Test results - createUserAllowance() + + + + + +
+ +
+ +
+

Gradle Test Run :test

+

createUserAllowance()

+
+ +
+

summary

+
+
+ + + + + +
+
+ + + + + + + +
+
+
1
+

tests

+
+
+
+
0
+

failures

+
+
+
+
0
+

skipped

+
+
+
+
0.076s
+

duration

+
+
+
+
+
+
100%
+

successful

+
+
+
+
+
+
+

standard output

+ +
2026-02-28T18:46:25.331+01:00  INFO 74623 --- [allowance-planner] [    Test worker] o.f.c.i.command.clean.CleanExecutor      : Successfully dropped pre-schema database level objects (execution time 00:00.000s)
+2026-02-28T18:46:25.334+01:00  INFO 74623 --- [allowance-planner] [    Test worker] o.f.c.i.command.clean.CleanExecutor      : Successfully cleaned schema "public" (execution time 00:00.002s)
+2026-02-28T18:46:25.335+01:00  INFO 74623 --- [allowance-planner] [    Test worker] o.f.c.i.command.clean.CleanExecutor      : Successfully cleaned schema "public" (execution time 00:00.001s)
+2026-02-28T18:46:25.336+01:00  INFO 74623 --- [allowance-planner] [    Test worker] o.f.c.i.command.clean.CleanExecutor      : Successfully dropped post-schema database level objects (execution time 00:00.000s)
+2026-02-28T18:46:25.339+01:00  INFO 74623 --- [allowance-planner] [    Test worker] o.f.c.i.s.JdbcTableSchemaHistory         : Schema history table "public"."flyway_schema_history" does not exist yet
+2026-02-28T18:46:25.340+01:00  INFO 74623 --- [allowance-planner] [    Test worker] o.f.core.internal.command.DbValidate     : Successfully validated 1 migration (execution time 00:00.000s)
+2026-02-28T18:46:25.341+01:00  INFO 74623 --- [allowance-planner] [    Test worker] o.f.c.i.s.JdbcTableSchemaHistory         : Creating Schema History table "public"."flyway_schema_history" ...
+2026-02-28T18:46:25.343+01:00  INFO 74623 --- [allowance-planner] [    Test worker] o.f.core.internal.command.DbMigrate      : Current version of schema "public": << Empty Schema >>
+2026-02-28T18:46:25.344+01:00  INFO 74623 --- [allowance-planner] [    Test worker] o.f.core.internal.command.DbMigrate      : Migrating schema "public" to version "1 - initial"
+2026-02-28T18:46:25.348+01:00  INFO 74623 --- [allowance-planner] [    Test worker] o.f.core.internal.command.DbMigrate      : Successfully applied 1 migration to schema "public", now at version v1 (execution time 00:00.002s)
+
+ +
+
+
+
+
+ +
+ + diff --git a/backend-spring/build/reports/tests/test/be.seeseepuff.allowanceplanner.ApiTest/createUserAllowanceBadId().html b/backend-spring/build/reports/tests/test/be.seeseepuff.allowanceplanner.ApiTest/createUserAllowanceBadId().html new file mode 100644 index 0000000..f4d435f --- /dev/null +++ b/backend-spring/build/reports/tests/test/be.seeseepuff.allowanceplanner.ApiTest/createUserAllowanceBadId().html @@ -0,0 +1,116 @@ + + + + + +Test results - createUserAllowanceBadId() + + + + + +
+ +
+ +
+

Gradle Test Run :test

+

createUserAllowanceBadId()

+
+ +
+

summary

+
+
+ + + + + +
+
+ + + + + + + +
+
+
1
+

tests

+
+
+
+
0
+

failures

+
+
+
+
0
+

skipped

+
+
+
+
0.034s
+

duration

+
+
+
+
+
+
100%
+

successful

+
+
+
+
+
+
+

standard output

+ +
2026-02-28T18:46:26.759+01:00  INFO 74623 --- [allowance-planner] [    Test worker] o.f.c.i.command.clean.CleanExecutor      : Successfully dropped pre-schema database level objects (execution time 00:00.000s)
+2026-02-28T18:46:26.764+01:00  INFO 74623 --- [allowance-planner] [    Test worker] o.f.c.i.command.clean.CleanExecutor      : Successfully cleaned schema "public" (execution time 00:00.005s)
+2026-02-28T18:46:26.766+01:00  INFO 74623 --- [allowance-planner] [    Test worker] o.f.c.i.command.clean.CleanExecutor      : Successfully cleaned schema "public" (execution time 00:00.001s)
+2026-02-28T18:46:26.766+01:00  INFO 74623 --- [allowance-planner] [    Test worker] o.f.c.i.command.clean.CleanExecutor      : Successfully dropped post-schema database level objects (execution time 00:00.000s)
+2026-02-28T18:46:26.768+01:00  INFO 74623 --- [allowance-planner] [    Test worker] o.f.c.i.s.JdbcTableSchemaHistory         : Schema history table "public"."flyway_schema_history" does not exist yet
+2026-02-28T18:46:26.769+01:00  INFO 74623 --- [allowance-planner] [    Test worker] o.f.core.internal.command.DbValidate     : Successfully validated 1 migration (execution time 00:00.000s)
+2026-02-28T18:46:26.769+01:00  INFO 74623 --- [allowance-planner] [    Test worker] o.f.c.i.s.JdbcTableSchemaHistory         : Creating Schema History table "public"."flyway_schema_history" ...
+2026-02-28T18:46:26.771+01:00  INFO 74623 --- [allowance-planner] [    Test worker] o.f.core.internal.command.DbMigrate      : Current version of schema "public": << Empty Schema >>
+2026-02-28T18:46:26.772+01:00  INFO 74623 --- [allowance-planner] [    Test worker] o.f.core.internal.command.DbMigrate      : Migrating schema "public" to version "1 - initial"
+2026-02-28T18:46:26.777+01:00  INFO 74623 --- [allowance-planner] [    Test worker] o.f.core.internal.command.DbMigrate      : Successfully applied 1 migration to schema "public", now at version v1 (execution time 00:00.004s)
+
+ +
+
+
+
+
+ +
+ + diff --git a/backend-spring/build/reports/tests/test/be.seeseepuff.allowanceplanner.ApiTest/createUserAllowanceInvalidInput().html b/backend-spring/build/reports/tests/test/be.seeseepuff.allowanceplanner.ApiTest/createUserAllowanceInvalidInput().html new file mode 100644 index 0000000..8221357 --- /dev/null +++ b/backend-spring/build/reports/tests/test/be.seeseepuff.allowanceplanner.ApiTest/createUserAllowanceInvalidInput().html @@ -0,0 +1,117 @@ + + + + + +Test results - createUserAllowanceInvalidInput() + + + + + +
+ +
+ +
+

Gradle Test Run :test

+

createUserAllowanceInvalidInput()

+
+ +
+

summary

+
+
+ + + + + +
+
+ + + + + + + +
+
+
1
+

tests

+
+
+
+
0
+

failures

+
+
+
+
0
+

skipped

+
+
+
+
0.048s
+

duration

+
+
+
+
+
+
100%
+

successful

+
+
+
+
+
+
+

standard output

+ +
2026-02-28T18:46:25.621+01:00  INFO 74623 --- [allowance-planner] [    Test worker] o.f.c.i.command.clean.CleanExecutor      : Successfully dropped pre-schema database level objects (execution time 00:00.000s)
+2026-02-28T18:46:25.624+01:00  INFO 74623 --- [allowance-planner] [    Test worker] o.f.c.i.command.clean.CleanExecutor      : Successfully cleaned schema "public" (execution time 00:00.002s)
+2026-02-28T18:46:25.625+01:00  INFO 74623 --- [allowance-planner] [    Test worker] o.f.c.i.command.clean.CleanExecutor      : Successfully cleaned schema "public" (execution time 00:00.001s)
+2026-02-28T18:46:25.626+01:00  INFO 74623 --- [allowance-planner] [    Test worker] o.f.c.i.command.clean.CleanExecutor      : Successfully dropped post-schema database level objects (execution time 00:00.000s)
+2026-02-28T18:46:25.629+01:00  INFO 74623 --- [allowance-planner] [    Test worker] o.f.c.i.s.JdbcTableSchemaHistory         : Schema history table "public"."flyway_schema_history" does not exist yet
+2026-02-28T18:46:25.630+01:00  INFO 74623 --- [allowance-planner] [    Test worker] o.f.core.internal.command.DbValidate     : Successfully validated 1 migration (execution time 00:00.000s)
+2026-02-28T18:46:25.630+01:00  INFO 74623 --- [allowance-planner] [    Test worker] o.f.c.i.s.JdbcTableSchemaHistory         : Creating Schema History table "public"."flyway_schema_history" ...
+2026-02-28T18:46:25.633+01:00  INFO 74623 --- [allowance-planner] [    Test worker] o.f.core.internal.command.DbMigrate      : Current version of schema "public": << Empty Schema >>
+2026-02-28T18:46:25.634+01:00  INFO 74623 --- [allowance-planner] [    Test worker] o.f.core.internal.command.DbMigrate      : Migrating schema "public" to version "1 - initial"
+2026-02-28T18:46:25.640+01:00  INFO 74623 --- [allowance-planner] [    Test worker] o.f.core.internal.command.DbMigrate      : Successfully applied 1 migration to schema "public", now at version v1 (execution time 00:00.004s)
+2026-02-28T18:46:25.659+01:00  WARN 74623 --- [allowance-planner] [o-auto-1-exec-3] .w.s.m.s.DefaultHandlerExceptionResolver : Resolved [org.springframework.http.converter.HttpMessageNotReadableException: JSON parse error: Cannot map `null` into type `double` (set DeserializationConfig.DeserializationFeature.FAIL_ON_NULL_FOR_PRIMITIVES to 'false' to allow)]
+
+ +
+
+
+
+
+ +
+ + diff --git a/backend-spring/build/reports/tests/test/be.seeseepuff.allowanceplanner.ApiTest/createUserAllowanceNoUser().html b/backend-spring/build/reports/tests/test/be.seeseepuff.allowanceplanner.ApiTest/createUserAllowanceNoUser().html new file mode 100644 index 0000000..3b56ed1 --- /dev/null +++ b/backend-spring/build/reports/tests/test/be.seeseepuff.allowanceplanner.ApiTest/createUserAllowanceNoUser().html @@ -0,0 +1,116 @@ + + + + + +Test results - createUserAllowanceNoUser() + + + + + +
+ +
+ +
+

Gradle Test Run :test

+

createUserAllowanceNoUser()

+
+ +
+

summary

+
+
+ + + + + +
+
+ + + + + + + +
+
+
1
+

tests

+
+
+
+
0
+

failures

+
+
+
+
0
+

skipped

+
+
+
+
0.040s
+

duration

+
+
+
+
+
+
100%
+

successful

+
+
+
+
+
+
+

standard output

+ +
2026-02-28T18:46:24.184+01:00  INFO 74623 --- [allowance-planner] [    Test worker] o.f.c.i.command.clean.CleanExecutor      : Successfully dropped pre-schema database level objects (execution time 00:00.000s)
+2026-02-28T18:46:24.187+01:00  INFO 74623 --- [allowance-planner] [    Test worker] o.f.c.i.command.clean.CleanExecutor      : Successfully cleaned schema "public" (execution time 00:00.003s)
+2026-02-28T18:46:24.188+01:00  INFO 74623 --- [allowance-planner] [    Test worker] o.f.c.i.command.clean.CleanExecutor      : Successfully cleaned schema "public" (execution time 00:00.000s)
+2026-02-28T18:46:24.188+01:00  INFO 74623 --- [allowance-planner] [    Test worker] o.f.c.i.command.clean.CleanExecutor      : Successfully dropped post-schema database level objects (execution time 00:00.000s)
+2026-02-28T18:46:24.192+01:00  INFO 74623 --- [allowance-planner] [    Test worker] o.f.c.i.s.JdbcTableSchemaHistory         : Schema history table "public"."flyway_schema_history" does not exist yet
+2026-02-28T18:46:24.192+01:00  INFO 74623 --- [allowance-planner] [    Test worker] o.f.core.internal.command.DbValidate     : Successfully validated 1 migration (execution time 00:00.000s)
+2026-02-28T18:46:24.193+01:00  INFO 74623 --- [allowance-planner] [    Test worker] o.f.c.i.s.JdbcTableSchemaHistory         : Creating Schema History table "public"."flyway_schema_history" ...
+2026-02-28T18:46:24.197+01:00  INFO 74623 --- [allowance-planner] [    Test worker] o.f.core.internal.command.DbMigrate      : Current version of schema "public": << Empty Schema >>
+2026-02-28T18:46:24.198+01:00  INFO 74623 --- [allowance-planner] [    Test worker] o.f.core.internal.command.DbMigrate      : Migrating schema "public" to version "1 - initial"
+2026-02-28T18:46:24.203+01:00  INFO 74623 --- [allowance-planner] [    Test worker] o.f.core.internal.command.DbMigrate      : Successfully applied 1 migration to schema "public", now at version v1 (execution time 00:00.003s)
+
+ +
+
+
+
+
+ +
+ + diff --git a/backend-spring/build/reports/tests/test/be.seeseepuff.allowanceplanner.ApiTest/deleteTask().html b/backend-spring/build/reports/tests/test/be.seeseepuff.allowanceplanner.ApiTest/deleteTask().html new file mode 100644 index 0000000..696d76d --- /dev/null +++ b/backend-spring/build/reports/tests/test/be.seeseepuff.allowanceplanner.ApiTest/deleteTask().html @@ -0,0 +1,116 @@ + + + + + +Test results - deleteTask() + + + + + +
+ +
+ +
+

Gradle Test Run :test

+

deleteTask()

+
+ +
+

summary

+
+
+ + + + + +
+
+ + + + + + + +
+
+
1
+

tests

+
+
+
+
0
+

failures

+
+
+
+
0
+

skipped

+
+
+
+
0.092s
+

duration

+
+
+
+
+
+
100%
+

successful

+
+
+
+
+
+
+

standard output

+ +
2026-02-28T18:46:27.323+01:00  INFO 74623 --- [allowance-planner] [    Test worker] o.f.c.i.command.clean.CleanExecutor      : Successfully dropped pre-schema database level objects (execution time 00:00.000s)
+2026-02-28T18:46:27.327+01:00  INFO 74623 --- [allowance-planner] [    Test worker] o.f.c.i.command.clean.CleanExecutor      : Successfully cleaned schema "public" (execution time 00:00.003s)
+2026-02-28T18:46:27.328+01:00  INFO 74623 --- [allowance-planner] [    Test worker] o.f.c.i.command.clean.CleanExecutor      : Successfully cleaned schema "public" (execution time 00:00.001s)
+2026-02-28T18:46:27.328+01:00  INFO 74623 --- [allowance-planner] [    Test worker] o.f.c.i.command.clean.CleanExecutor      : Successfully dropped post-schema database level objects (execution time 00:00.000s)
+2026-02-28T18:46:27.331+01:00  INFO 74623 --- [allowance-planner] [    Test worker] o.f.c.i.s.JdbcTableSchemaHistory         : Schema history table "public"."flyway_schema_history" does not exist yet
+2026-02-28T18:46:27.331+01:00  INFO 74623 --- [allowance-planner] [    Test worker] o.f.core.internal.command.DbValidate     : Successfully validated 1 migration (execution time 00:00.000s)
+2026-02-28T18:46:27.332+01:00  INFO 74623 --- [allowance-planner] [    Test worker] o.f.c.i.s.JdbcTableSchemaHistory         : Creating Schema History table "public"."flyway_schema_history" ...
+2026-02-28T18:46:27.334+01:00  INFO 74623 --- [allowance-planner] [    Test worker] o.f.core.internal.command.DbMigrate      : Current version of schema "public": << Empty Schema >>
+2026-02-28T18:46:27.335+01:00  INFO 74623 --- [allowance-planner] [    Test worker] o.f.core.internal.command.DbMigrate      : Migrating schema "public" to version "1 - initial"
+2026-02-28T18:46:27.340+01:00  INFO 74623 --- [allowance-planner] [    Test worker] o.f.core.internal.command.DbMigrate      : Successfully applied 1 migration to schema "public", now at version v1 (execution time 00:00.003s)
+
+ +
+
+
+
+
+ +
+ + diff --git a/backend-spring/build/reports/tests/test/be.seeseepuff.allowanceplanner.ApiTest/deleteTaskNotFound().html b/backend-spring/build/reports/tests/test/be.seeseepuff.allowanceplanner.ApiTest/deleteTaskNotFound().html new file mode 100644 index 0000000..d52a048 --- /dev/null +++ b/backend-spring/build/reports/tests/test/be.seeseepuff.allowanceplanner.ApiTest/deleteTaskNotFound().html @@ -0,0 +1,116 @@ + + + + + +Test results - deleteTaskNotFound() + + + + + +
+ +
+ +
+

Gradle Test Run :test

+

deleteTaskNotFound()

+
+ +
+

summary

+
+
+ + + + + +
+
+ + + + + + + +
+
+
1
+

tests

+
+
+
+
0
+

failures

+
+
+
+
0
+

skipped

+
+
+
+
0.039s
+

duration

+
+
+
+
+
+
100%
+

successful

+
+
+
+
+
+
+

standard output

+ +
2026-02-28T18:46:24.327+01:00  INFO 74623 --- [allowance-planner] [    Test worker] o.f.c.i.command.clean.CleanExecutor      : Successfully dropped pre-schema database level objects (execution time 00:00.000s)
+2026-02-28T18:46:24.332+01:00  INFO 74623 --- [allowance-planner] [    Test worker] o.f.c.i.command.clean.CleanExecutor      : Successfully cleaned schema "public" (execution time 00:00.004s)
+2026-02-28T18:46:24.333+01:00  INFO 74623 --- [allowance-planner] [    Test worker] o.f.c.i.command.clean.CleanExecutor      : Successfully cleaned schema "public" (execution time 00:00.001s)
+2026-02-28T18:46:24.334+01:00  INFO 74623 --- [allowance-planner] [    Test worker] o.f.c.i.command.clean.CleanExecutor      : Successfully dropped post-schema database level objects (execution time 00:00.000s)
+2026-02-28T18:46:24.337+01:00  INFO 74623 --- [allowance-planner] [    Test worker] o.f.c.i.s.JdbcTableSchemaHistory         : Schema history table "public"."flyway_schema_history" does not exist yet
+2026-02-28T18:46:24.338+01:00  INFO 74623 --- [allowance-planner] [    Test worker] o.f.core.internal.command.DbValidate     : Successfully validated 1 migration (execution time 00:00.001s)
+2026-02-28T18:46:24.340+01:00  INFO 74623 --- [allowance-planner] [    Test worker] o.f.c.i.s.JdbcTableSchemaHistory         : Creating Schema History table "public"."flyway_schema_history" ...
+2026-02-28T18:46:24.343+01:00  INFO 74623 --- [allowance-planner] [    Test worker] o.f.core.internal.command.DbMigrate      : Current version of schema "public": << Empty Schema >>
+2026-02-28T18:46:24.345+01:00  INFO 74623 --- [allowance-planner] [    Test worker] o.f.core.internal.command.DbMigrate      : Migrating schema "public" to version "1 - initial"
+2026-02-28T18:46:24.350+01:00  INFO 74623 --- [allowance-planner] [    Test worker] o.f.core.internal.command.DbMigrate      : Successfully applied 1 migration to schema "public", now at version v1 (execution time 00:00.003s)
+
+ +
+
+
+
+
+ +
+ + diff --git a/backend-spring/build/reports/tests/test/be.seeseepuff.allowanceplanner.ApiTest/deleteUserAllowance().html b/backend-spring/build/reports/tests/test/be.seeseepuff.allowanceplanner.ApiTest/deleteUserAllowance().html new file mode 100644 index 0000000..752631f --- /dev/null +++ b/backend-spring/build/reports/tests/test/be.seeseepuff.allowanceplanner.ApiTest/deleteUserAllowance().html @@ -0,0 +1,116 @@ + + + + + +Test results - deleteUserAllowance() + + + + + +
+ +
+ +
+

Gradle Test Run :test

+

deleteUserAllowance()

+
+ +
+

summary

+
+
+ + + + + +
+
+ + + + + + + +
+
+
1
+

tests

+
+
+
+
0
+

failures

+
+
+
+
0
+

skipped

+
+
+
+
0.067s
+

duration

+
+
+
+
+
+
100%
+

successful

+
+
+
+
+
+
+

standard output

+ +
2026-02-28T18:46:27.695+01:00  INFO 74623 --- [allowance-planner] [    Test worker] o.f.c.i.command.clean.CleanExecutor      : Successfully dropped pre-schema database level objects (execution time 00:00.000s)
+2026-02-28T18:46:27.699+01:00  INFO 74623 --- [allowance-planner] [    Test worker] o.f.c.i.command.clean.CleanExecutor      : Successfully cleaned schema "public" (execution time 00:00.003s)
+2026-02-28T18:46:27.700+01:00  INFO 74623 --- [allowance-planner] [    Test worker] o.f.c.i.command.clean.CleanExecutor      : Successfully cleaned schema "public" (execution time 00:00.001s)
+2026-02-28T18:46:27.701+01:00  INFO 74623 --- [allowance-planner] [    Test worker] o.f.c.i.command.clean.CleanExecutor      : Successfully dropped post-schema database level objects (execution time 00:00.000s)
+2026-02-28T18:46:27.704+01:00  INFO 74623 --- [allowance-planner] [    Test worker] o.f.c.i.s.JdbcTableSchemaHistory         : Schema history table "public"."flyway_schema_history" does not exist yet
+2026-02-28T18:46:27.704+01:00  INFO 74623 --- [allowance-planner] [    Test worker] o.f.core.internal.command.DbValidate     : Successfully validated 1 migration (execution time 00:00.000s)
+2026-02-28T18:46:27.705+01:00  INFO 74623 --- [allowance-planner] [    Test worker] o.f.c.i.s.JdbcTableSchemaHistory         : Creating Schema History table "public"."flyway_schema_history" ...
+2026-02-28T18:46:27.707+01:00  INFO 74623 --- [allowance-planner] [    Test worker] o.f.core.internal.command.DbMigrate      : Current version of schema "public": << Empty Schema >>
+2026-02-28T18:46:27.708+01:00  INFO 74623 --- [allowance-planner] [    Test worker] o.f.core.internal.command.DbMigrate      : Migrating schema "public" to version "1 - initial"
+2026-02-28T18:46:27.713+01:00  INFO 74623 --- [allowance-planner] [    Test worker] o.f.core.internal.command.DbMigrate      : Successfully applied 1 migration to schema "public", now at version v1 (execution time 00:00.003s)
+
+ +
+
+
+
+
+ +
+ + diff --git a/backend-spring/build/reports/tests/test/be.seeseepuff.allowanceplanner.ApiTest/deleteUserAllowanceInvalidId().html b/backend-spring/build/reports/tests/test/be.seeseepuff.allowanceplanner.ApiTest/deleteUserAllowanceInvalidId().html new file mode 100644 index 0000000..b81d659 --- /dev/null +++ b/backend-spring/build/reports/tests/test/be.seeseepuff.allowanceplanner.ApiTest/deleteUserAllowanceInvalidId().html @@ -0,0 +1,116 @@ + + + + + +Test results - deleteUserAllowanceInvalidId() + + + + + +
+ +
+ +
+

Gradle Test Run :test

+

deleteUserAllowanceInvalidId()

+
+ +
+

summary

+
+
+ + + + + +
+
+ + + + + + + +
+
+
1
+

tests

+
+
+
+
0
+

failures

+
+
+
+
0
+

skipped

+
+
+
+
0.042s
+

duration

+
+
+
+
+
+
100%
+

successful

+
+
+
+
+
+
+

standard output

+ +
2026-02-28T18:46:25.780+01:00  INFO 74623 --- [allowance-planner] [    Test worker] o.f.c.i.command.clean.CleanExecutor      : Successfully dropped pre-schema database level objects (execution time 00:00.000s)
+2026-02-28T18:46:25.786+01:00  INFO 74623 --- [allowance-planner] [    Test worker] o.f.c.i.command.clean.CleanExecutor      : Successfully cleaned schema "public" (execution time 00:00.005s)
+2026-02-28T18:46:25.787+01:00  INFO 74623 --- [allowance-planner] [    Test worker] o.f.c.i.command.clean.CleanExecutor      : Successfully cleaned schema "public" (execution time 00:00.001s)
+2026-02-28T18:46:25.787+01:00  INFO 74623 --- [allowance-planner] [    Test worker] o.f.c.i.command.clean.CleanExecutor      : Successfully dropped post-schema database level objects (execution time 00:00.000s)
+2026-02-28T18:46:25.791+01:00  INFO 74623 --- [allowance-planner] [    Test worker] o.f.c.i.s.JdbcTableSchemaHistory         : Schema history table "public"."flyway_schema_history" does not exist yet
+2026-02-28T18:46:25.791+01:00  INFO 74623 --- [allowance-planner] [    Test worker] o.f.core.internal.command.DbValidate     : Successfully validated 1 migration (execution time 00:00.000s)
+2026-02-28T18:46:25.792+01:00  INFO 74623 --- [allowance-planner] [    Test worker] o.f.c.i.s.JdbcTableSchemaHistory         : Creating Schema History table "public"."flyway_schema_history" ...
+2026-02-28T18:46:25.796+01:00  INFO 74623 --- [allowance-planner] [    Test worker] o.f.core.internal.command.DbMigrate      : Current version of schema "public": << Empty Schema >>
+2026-02-28T18:46:25.797+01:00  INFO 74623 --- [allowance-planner] [    Test worker] o.f.core.internal.command.DbMigrate      : Migrating schema "public" to version "1 - initial"
+2026-02-28T18:46:25.802+01:00  INFO 74623 --- [allowance-planner] [    Test worker] o.f.core.internal.command.DbMigrate      : Successfully applied 1 migration to schema "public", now at version v1 (execution time 00:00.003s)
+
+ +
+
+
+
+
+ +
+ + diff --git a/backend-spring/build/reports/tests/test/be.seeseepuff.allowanceplanner.ApiTest/deleteUserAllowanceNotFound().html b/backend-spring/build/reports/tests/test/be.seeseepuff.allowanceplanner.ApiTest/deleteUserAllowanceNotFound().html new file mode 100644 index 0000000..bcab254 --- /dev/null +++ b/backend-spring/build/reports/tests/test/be.seeseepuff.allowanceplanner.ApiTest/deleteUserAllowanceNotFound().html @@ -0,0 +1,134 @@ + + + + + +Test results - deleteUserAllowanceNotFound() + + + + + +
+ +
+ +
+

Gradle Test Run :test

+

deleteUserAllowanceNotFound()

+
+ +
+

summary

+
+
+ + + + + +
+
+ + + + + + + +
+
+
1
+

tests

+
+
+
+
0
+

failures

+
+
+
+
0
+

skipped

+
+
+
+
1.270s
+

duration

+
+
+
+
+
+
100%
+

successful

+
+
+
+
+
+
+

standard output

+ +
2026-02-28T18:46:22.732+01:00  INFO 74623 --- [allowance-planner] [    Test worker] o.f.c.i.command.clean.CleanExecutor      : Successfully dropped pre-schema database level objects (execution time 00:00.000s)
+2026-02-28T18:46:22.742+01:00  INFO 74623 --- [allowance-planner] [    Test worker] o.f.c.i.command.clean.CleanExecutor      : Successfully cleaned schema "public" (execution time 00:00.009s)
+2026-02-28T18:46:22.747+01:00  INFO 74623 --- [allowance-planner] [    Test worker] o.f.c.i.command.clean.CleanExecutor      : Successfully cleaned schema "public" (execution time 00:00.004s)
+2026-02-28T18:46:22.748+01:00  INFO 74623 --- [allowance-planner] [    Test worker] o.f.c.i.command.clean.CleanExecutor      : Successfully dropped post-schema database level objects (execution time 00:00.000s)
+2026-02-28T18:46:22.756+01:00  INFO 74623 --- [allowance-planner] [    Test worker] o.f.c.i.s.JdbcTableSchemaHistory         : Schema history table "public"."flyway_schema_history" does not exist yet
+2026-02-28T18:46:22.757+01:00  INFO 74623 --- [allowance-planner] [    Test worker] o.f.core.internal.command.DbValidate     : Successfully validated 1 migration (execution time 00:00.001s)
+2026-02-28T18:46:22.760+01:00  INFO 74623 --- [allowance-planner] [    Test worker] o.f.c.i.s.JdbcTableSchemaHistory         : Creating Schema History table "public"."flyway_schema_history" ...
+2026-02-28T18:46:22.764+01:00  INFO 74623 --- [allowance-planner] [    Test worker] o.f.core.internal.command.DbMigrate      : Current version of schema "public": << Empty Schema >>
+2026-02-28T18:46:22.767+01:00  INFO 74623 --- [allowance-planner] [    Test worker] o.f.core.internal.command.DbMigrate      : Migrating schema "public" to version "1 - initial"
+2026-02-28T18:46:22.774+01:00  INFO 74623 --- [allowance-planner] [    Test worker] o.f.core.internal.command.DbMigrate      : Successfully applied 1 migration to schema "public", now at version v1 (execution time 00:00.005s)
+2026-02-28T18:46:23.272+01:00  INFO 74623 --- [allowance-planner] [o-auto-1-exec-1] o.a.c.c.C.[Tomcat].[localhost].[/]       : Initializing Spring DispatcherServlet 'dispatcherServlet'
+2026-02-28T18:46:23.273+01:00  INFO 74623 --- [allowance-planner] [o-auto-1-exec-1] o.s.web.servlet.DispatcherServlet        : Initializing Servlet 'dispatcherServlet'
+2026-02-28T18:46:23.274+01:00  INFO 74623 --- [allowance-planner] [o-auto-1-exec-1] o.s.web.servlet.DispatcherServlet        : Completed initialization in 1 ms
+
+ +
+
+
+

error output

+ +
Mockito is currently self-attaching to enable the inline-mock-maker. This will no longer work in future releases of the JDK. Please add Mockito as an agent to your build as described in Mockito's documentation: https://javadoc.io/doc/org.mockito/mockito-core/latest/org.mockito/org/mockito/Mockito.html#0.3
+WARNING: A Java agent has been loaded dynamically (/home/seeseemelk/.gradle/caches/modules-2/files-2.1/net.bytebuddy/byte-buddy-agent/1.17.8/f09415827a71be7ed621c7bd02550678f28bc81c/byte-buddy-agent-1.17.8.jar)
+WARNING: If a serviceability tool is in use, please run with -XX:+EnableDynamicAgentLoading to hide this warning
+WARNING: If a serviceability tool is not in use, please run with -Djdk.instrument.traceUsage for more information
+WARNING: Dynamic loading of agents will be disallowed by default in a future release
+
+ +
+
+
+
+
+ +
+ + diff --git a/backend-spring/build/reports/tests/test/be.seeseepuff.allowanceplanner.ApiTest/deleteUserRestAllowance().html b/backend-spring/build/reports/tests/test/be.seeseepuff.allowanceplanner.ApiTest/deleteUserRestAllowance().html new file mode 100644 index 0000000..6b748f7 --- /dev/null +++ b/backend-spring/build/reports/tests/test/be.seeseepuff.allowanceplanner.ApiTest/deleteUserRestAllowance().html @@ -0,0 +1,116 @@ + + + + + +Test results - deleteUserRestAllowance() + + + + + +
+ +
+ +
+

Gradle Test Run :test

+

deleteUserRestAllowance()

+
+ +
+

summary

+
+
+ + + + + +
+
+ + + + + + + +
+
+
1
+

tests

+
+
+
+
0
+

failures

+
+
+
+
0
+

skipped

+
+
+
+
0.027s
+

duration

+
+
+
+
+
+
100%
+

successful

+
+
+
+
+
+
+

standard output

+ +
2026-02-28T18:46:26.618+01:00  INFO 74623 --- [allowance-planner] [    Test worker] o.f.c.i.command.clean.CleanExecutor      : Successfully dropped pre-schema database level objects (execution time 00:00.000s)
+2026-02-28T18:46:26.622+01:00  INFO 74623 --- [allowance-planner] [    Test worker] o.f.c.i.command.clean.CleanExecutor      : Successfully cleaned schema "public" (execution time 00:00.003s)
+2026-02-28T18:46:26.623+01:00  INFO 74623 --- [allowance-planner] [    Test worker] o.f.c.i.command.clean.CleanExecutor      : Successfully cleaned schema "public" (execution time 00:00.001s)
+2026-02-28T18:46:26.624+01:00  INFO 74623 --- [allowance-planner] [    Test worker] o.f.c.i.command.clean.CleanExecutor      : Successfully dropped post-schema database level objects (execution time 00:00.000s)
+2026-02-28T18:46:26.626+01:00  INFO 74623 --- [allowance-planner] [    Test worker] o.f.c.i.s.JdbcTableSchemaHistory         : Schema history table "public"."flyway_schema_history" does not exist yet
+2026-02-28T18:46:26.626+01:00  INFO 74623 --- [allowance-planner] [    Test worker] o.f.core.internal.command.DbValidate     : Successfully validated 1 migration (execution time 00:00.000s)
+2026-02-28T18:46:26.627+01:00  INFO 74623 --- [allowance-planner] [    Test worker] o.f.c.i.s.JdbcTableSchemaHistory         : Creating Schema History table "public"."flyway_schema_history" ...
+2026-02-28T18:46:26.630+01:00  INFO 74623 --- [allowance-planner] [    Test worker] o.f.core.internal.command.DbMigrate      : Current version of schema "public": << Empty Schema >>
+2026-02-28T18:46:26.630+01:00  INFO 74623 --- [allowance-planner] [    Test worker] o.f.core.internal.command.DbMigrate      : Migrating schema "public" to version "1 - initial"
+2026-02-28T18:46:26.635+01:00  INFO 74623 --- [allowance-planner] [    Test worker] o.f.core.internal.command.DbMigrate      : Successfully applied 1 migration to schema "public", now at version v1 (execution time 00:00.003s)
+
+ +
+
+
+
+
+ +
+ + diff --git a/backend-spring/build/reports/tests/test/be.seeseepuff.allowanceplanner.ApiTest/getHistory().html b/backend-spring/build/reports/tests/test/be.seeseepuff.allowanceplanner.ApiTest/getHistory().html new file mode 100644 index 0000000..e8fa7c5 --- /dev/null +++ b/backend-spring/build/reports/tests/test/be.seeseepuff.allowanceplanner.ApiTest/getHistory().html @@ -0,0 +1,116 @@ + + + + + +Test results - getHistory() + + + + + +
+ +
+ +
+

Gradle Test Run :test

+

getHistory()

+
+ +
+

summary

+
+
+ + + + + +
+
+ + + + + + + +
+
+
1
+

tests

+
+
+
+
0
+

failures

+
+
+
+
0
+

skipped

+
+
+
+
0.073s
+

duration

+
+
+
+
+
+
100%
+

successful

+
+
+
+
+
+
+

standard output

+ +
2026-02-28T18:46:27.575+01:00  INFO 74623 --- [allowance-planner] [    Test worker] o.f.c.i.command.clean.CleanExecutor      : Successfully dropped pre-schema database level objects (execution time 00:00.000s)
+2026-02-28T18:46:27.578+01:00  INFO 74623 --- [allowance-planner] [    Test worker] o.f.c.i.command.clean.CleanExecutor      : Successfully cleaned schema "public" (execution time 00:00.002s)
+2026-02-28T18:46:27.579+01:00  INFO 74623 --- [allowance-planner] [    Test worker] o.f.c.i.command.clean.CleanExecutor      : Successfully cleaned schema "public" (execution time 00:00.000s)
+2026-02-28T18:46:27.579+01:00  INFO 74623 --- [allowance-planner] [    Test worker] o.f.c.i.command.clean.CleanExecutor      : Successfully dropped post-schema database level objects (execution time 00:00.000s)
+2026-02-28T18:46:27.580+01:00  INFO 74623 --- [allowance-planner] [    Test worker] o.f.c.i.s.JdbcTableSchemaHistory         : Schema history table "public"."flyway_schema_history" does not exist yet
+2026-02-28T18:46:27.581+01:00  INFO 74623 --- [allowance-planner] [    Test worker] o.f.core.internal.command.DbValidate     : Successfully validated 1 migration (execution time 00:00.000s)
+2026-02-28T18:46:27.581+01:00  INFO 74623 --- [allowance-planner] [    Test worker] o.f.c.i.s.JdbcTableSchemaHistory         : Creating Schema History table "public"."flyway_schema_history" ...
+2026-02-28T18:46:27.583+01:00  INFO 74623 --- [allowance-planner] [    Test worker] o.f.core.internal.command.DbMigrate      : Current version of schema "public": << Empty Schema >>
+2026-02-28T18:46:27.583+01:00  INFO 74623 --- [allowance-planner] [    Test worker] o.f.core.internal.command.DbMigrate      : Migrating schema "public" to version "1 - initial"
+2026-02-28T18:46:27.586+01:00  INFO 74623 --- [allowance-planner] [    Test worker] o.f.core.internal.command.DbMigrate      : Successfully applied 1 migration to schema "public", now at version v1 (execution time 00:00.002s)
+
+ +
+
+
+
+
+ +
+ + diff --git a/backend-spring/build/reports/tests/test/be.seeseepuff.allowanceplanner.ApiTest/getTask().html b/backend-spring/build/reports/tests/test/be.seeseepuff.allowanceplanner.ApiTest/getTask().html new file mode 100644 index 0000000..d3c483d --- /dev/null +++ b/backend-spring/build/reports/tests/test/be.seeseepuff.allowanceplanner.ApiTest/getTask().html @@ -0,0 +1,116 @@ + + + + + +Test results - getTask() + + + + + +
+ +
+ +
+

Gradle Test Run :test

+

getTask()

+
+ +
+

summary

+
+
+ + + + + +
+
+ + + + + + + +
+
+
1
+

tests

+
+
+
+
0
+

failures

+
+
+
+
0
+

skipped

+
+
+
+
0.067s
+

duration

+
+
+
+
+
+
100%
+

successful

+
+
+
+
+
+
+

standard output

+ +
2026-02-28T18:46:25.504+01:00  INFO 74623 --- [allowance-planner] [    Test worker] o.f.c.i.command.clean.CleanExecutor      : Successfully dropped pre-schema database level objects (execution time 00:00.000s)
+2026-02-28T18:46:25.509+01:00  INFO 74623 --- [allowance-planner] [    Test worker] o.f.c.i.command.clean.CleanExecutor      : Successfully cleaned schema "public" (execution time 00:00.004s)
+2026-02-28T18:46:25.511+01:00  INFO 74623 --- [allowance-planner] [    Test worker] o.f.c.i.command.clean.CleanExecutor      : Successfully cleaned schema "public" (execution time 00:00.001s)
+2026-02-28T18:46:25.511+01:00  INFO 74623 --- [allowance-planner] [    Test worker] o.f.c.i.command.clean.CleanExecutor      : Successfully dropped post-schema database level objects (execution time 00:00.000s)
+2026-02-28T18:46:25.515+01:00  INFO 74623 --- [allowance-planner] [    Test worker] o.f.c.i.s.JdbcTableSchemaHistory         : Schema history table "public"."flyway_schema_history" does not exist yet
+2026-02-28T18:46:25.515+01:00  INFO 74623 --- [allowance-planner] [    Test worker] o.f.core.internal.command.DbValidate     : Successfully validated 1 migration (execution time 00:00.000s)
+2026-02-28T18:46:25.516+01:00  INFO 74623 --- [allowance-planner] [    Test worker] o.f.c.i.s.JdbcTableSchemaHistory         : Creating Schema History table "public"."flyway_schema_history" ...
+2026-02-28T18:46:25.519+01:00  INFO 74623 --- [allowance-planner] [    Test worker] o.f.core.internal.command.DbMigrate      : Current version of schema "public": << Empty Schema >>
+2026-02-28T18:46:25.520+01:00  INFO 74623 --- [allowance-planner] [    Test worker] o.f.core.internal.command.DbMigrate      : Migrating schema "public" to version "1 - initial"
+2026-02-28T18:46:25.524+01:00  INFO 74623 --- [allowance-planner] [    Test worker] o.f.core.internal.command.DbMigrate      : Successfully applied 1 migration to schema "public", now at version v1 (execution time 00:00.003s)
+
+ +
+
+
+
+
+ +
+ + diff --git a/backend-spring/build/reports/tests/test/be.seeseepuff.allowanceplanner.ApiTest/getTaskBadId().html b/backend-spring/build/reports/tests/test/be.seeseepuff.allowanceplanner.ApiTest/getTaskBadId().html new file mode 100644 index 0000000..bf677b3 --- /dev/null +++ b/backend-spring/build/reports/tests/test/be.seeseepuff.allowanceplanner.ApiTest/getTaskBadId().html @@ -0,0 +1,116 @@ + + + + + +Test results - getTaskBadId() + + + + + +
+ +
+ +
+

Gradle Test Run :test

+

getTaskBadId()

+
+ +
+

summary

+
+
+ + + + + +
+
+ + + + + + + +
+
+
1
+

tests

+
+
+
+
0
+

failures

+
+
+
+
0
+

skipped

+
+
+
+
0.053s
+

duration

+
+
+
+
+
+
100%
+

successful

+
+
+
+
+
+
+

standard output

+ +
2026-02-28T18:46:25.727+01:00  INFO 74623 --- [allowance-planner] [    Test worker] o.f.c.i.command.clean.CleanExecutor      : Successfully dropped pre-schema database level objects (execution time 00:00.000s)
+2026-02-28T18:46:25.732+01:00  INFO 74623 --- [allowance-planner] [    Test worker] o.f.c.i.command.clean.CleanExecutor      : Successfully cleaned schema "public" (execution time 00:00.004s)
+2026-02-28T18:46:25.734+01:00  INFO 74623 --- [allowance-planner] [    Test worker] o.f.c.i.command.clean.CleanExecutor      : Successfully cleaned schema "public" (execution time 00:00.001s)
+2026-02-28T18:46:25.734+01:00  INFO 74623 --- [allowance-planner] [    Test worker] o.f.c.i.command.clean.CleanExecutor      : Successfully dropped post-schema database level objects (execution time 00:00.000s)
+2026-02-28T18:46:25.738+01:00  INFO 74623 --- [allowance-planner] [    Test worker] o.f.c.i.s.JdbcTableSchemaHistory         : Schema history table "public"."flyway_schema_history" does not exist yet
+2026-02-28T18:46:25.739+01:00  INFO 74623 --- [allowance-planner] [    Test worker] o.f.core.internal.command.DbValidate     : Successfully validated 1 migration (execution time 00:00.001s)
+2026-02-28T18:46:25.740+01:00  INFO 74623 --- [allowance-planner] [    Test worker] o.f.c.i.s.JdbcTableSchemaHistory         : Creating Schema History table "public"."flyway_schema_history" ...
+2026-02-28T18:46:25.742+01:00  INFO 74623 --- [allowance-planner] [    Test worker] o.f.core.internal.command.DbMigrate      : Current version of schema "public": << Empty Schema >>
+2026-02-28T18:46:25.743+01:00  INFO 74623 --- [allowance-planner] [    Test worker] o.f.core.internal.command.DbMigrate      : Migrating schema "public" to version "1 - initial"
+2026-02-28T18:46:25.749+01:00  INFO 74623 --- [allowance-planner] [    Test worker] o.f.core.internal.command.DbMigrate      : Successfully applied 1 migration to schema "public", now at version v1 (execution time 00:00.004s)
+
+ +
+
+
+
+
+ +
+ + diff --git a/backend-spring/build/reports/tests/test/be.seeseepuff.allowanceplanner.ApiTest/getTaskInvalidId().html b/backend-spring/build/reports/tests/test/be.seeseepuff.allowanceplanner.ApiTest/getTaskInvalidId().html new file mode 100644 index 0000000..91d6db2 --- /dev/null +++ b/backend-spring/build/reports/tests/test/be.seeseepuff.allowanceplanner.ApiTest/getTaskInvalidId().html @@ -0,0 +1,116 @@ + + + + + +Test results - getTaskInvalidId() + + + + + +
+ +
+ +
+

Gradle Test Run :test

+

getTaskInvalidId()

+
+ +
+

summary

+
+
+ + + + + +
+
+ + + + + + + +
+
+
1
+

tests

+
+
+
+
0
+

failures

+
+
+
+
0
+

skipped

+
+
+
+
0.062s
+

duration

+
+
+
+
+
+
100%
+

successful

+
+
+
+
+
+
+

standard output

+ +
2026-02-28T18:46:24.265+01:00  INFO 74623 --- [allowance-planner] [    Test worker] o.f.c.i.command.clean.CleanExecutor      : Successfully dropped pre-schema database level objects (execution time 00:00.000s)
+2026-02-28T18:46:24.269+01:00  INFO 74623 --- [allowance-planner] [    Test worker] o.f.c.i.command.clean.CleanExecutor      : Successfully cleaned schema "public" (execution time 00:00.003s)
+2026-02-28T18:46:24.270+01:00  INFO 74623 --- [allowance-planner] [    Test worker] o.f.c.i.command.clean.CleanExecutor      : Successfully cleaned schema "public" (execution time 00:00.000s)
+2026-02-28T18:46:24.270+01:00  INFO 74623 --- [allowance-planner] [    Test worker] o.f.c.i.command.clean.CleanExecutor      : Successfully dropped post-schema database level objects (execution time 00:00.000s)
+2026-02-28T18:46:24.274+01:00  INFO 74623 --- [allowance-planner] [    Test worker] o.f.c.i.s.JdbcTableSchemaHistory         : Schema history table "public"."flyway_schema_history" does not exist yet
+2026-02-28T18:46:24.275+01:00  INFO 74623 --- [allowance-planner] [    Test worker] o.f.core.internal.command.DbValidate     : Successfully validated 1 migration (execution time 00:00.001s)
+2026-02-28T18:46:24.276+01:00  INFO 74623 --- [allowance-planner] [    Test worker] o.f.c.i.s.JdbcTableSchemaHistory         : Creating Schema History table "public"."flyway_schema_history" ...
+2026-02-28T18:46:24.280+01:00  INFO 74623 --- [allowance-planner] [    Test worker] o.f.core.internal.command.DbMigrate      : Current version of schema "public": << Empty Schema >>
+2026-02-28T18:46:24.281+01:00  INFO 74623 --- [allowance-planner] [    Test worker] o.f.core.internal.command.DbMigrate      : Migrating schema "public" to version "1 - initial"
+2026-02-28T18:46:24.288+01:00  INFO 74623 --- [allowance-planner] [    Test worker] o.f.core.internal.command.DbMigrate      : Successfully applied 1 migration to schema "public", now at version v1 (execution time 00:00.004s)
+
+ +
+
+
+
+
+ +
+ + diff --git a/backend-spring/build/reports/tests/test/be.seeseepuff.allowanceplanner.ApiTest/getTaskWhenNoTasks().html b/backend-spring/build/reports/tests/test/be.seeseepuff.allowanceplanner.ApiTest/getTaskWhenNoTasks().html new file mode 100644 index 0000000..1d12ab9 --- /dev/null +++ b/backend-spring/build/reports/tests/test/be.seeseepuff.allowanceplanner.ApiTest/getTaskWhenNoTasks().html @@ -0,0 +1,116 @@ + + + + + +Test results - getTaskWhenNoTasks() + + + + + +
+ +
+ +
+

Gradle Test Run :test

+

getTaskWhenNoTasks()

+
+ +
+

summary

+
+
+ + + + + +
+
+ + + + + + + +
+
+
1
+

tests

+
+
+
+
0
+

failures

+
+
+
+
0
+

skipped

+
+
+
+
0.034s
+

duration

+
+
+
+
+
+
100%
+

successful

+
+
+
+
+
+
+

standard output

+ +
2026-02-28T18:46:27.287+01:00  INFO 74623 --- [allowance-planner] [    Test worker] o.f.c.i.command.clean.CleanExecutor      : Successfully dropped pre-schema database level objects (execution time 00:00.000s)
+2026-02-28T18:46:27.290+01:00  INFO 74623 --- [allowance-planner] [    Test worker] o.f.c.i.command.clean.CleanExecutor      : Successfully cleaned schema "public" (execution time 00:00.003s)
+2026-02-28T18:46:27.291+01:00  INFO 74623 --- [allowance-planner] [    Test worker] o.f.c.i.command.clean.CleanExecutor      : Successfully cleaned schema "public" (execution time 00:00.001s)
+2026-02-28T18:46:27.292+01:00  INFO 74623 --- [allowance-planner] [    Test worker] o.f.c.i.command.clean.CleanExecutor      : Successfully dropped post-schema database level objects (execution time 00:00.000s)
+2026-02-28T18:46:27.295+01:00  INFO 74623 --- [allowance-planner] [    Test worker] o.f.c.i.s.JdbcTableSchemaHistory         : Schema history table "public"."flyway_schema_history" does not exist yet
+2026-02-28T18:46:27.295+01:00  INFO 74623 --- [allowance-planner] [    Test worker] o.f.core.internal.command.DbValidate     : Successfully validated 1 migration (execution time 00:00.000s)
+2026-02-28T18:46:27.296+01:00  INFO 74623 --- [allowance-planner] [    Test worker] o.f.c.i.s.JdbcTableSchemaHistory         : Creating Schema History table "public"."flyway_schema_history" ...
+2026-02-28T18:46:27.298+01:00  INFO 74623 --- [allowance-planner] [    Test worker] o.f.core.internal.command.DbMigrate      : Current version of schema "public": << Empty Schema >>
+2026-02-28T18:46:27.298+01:00  INFO 74623 --- [allowance-planner] [    Test worker] o.f.core.internal.command.DbMigrate      : Migrating schema "public" to version "1 - initial"
+2026-02-28T18:46:27.302+01:00  INFO 74623 --- [allowance-planner] [    Test worker] o.f.core.internal.command.DbMigrate      : Successfully applied 1 migration to schema "public", now at version v1 (execution time 00:00.002s)
+
+ +
+
+
+
+
+ +
+ + diff --git a/backend-spring/build/reports/tests/test/be.seeseepuff.allowanceplanner.ApiTest/getTasksWhenTasks().html b/backend-spring/build/reports/tests/test/be.seeseepuff.allowanceplanner.ApiTest/getTasksWhenTasks().html new file mode 100644 index 0000000..7b3a656 --- /dev/null +++ b/backend-spring/build/reports/tests/test/be.seeseepuff.allowanceplanner.ApiTest/getTasksWhenTasks().html @@ -0,0 +1,116 @@ + + + + + +Test results - getTasksWhenTasks() + + + + + +
+ +
+ +
+

Gradle Test Run :test

+

getTasksWhenTasks()

+
+ +
+

summary

+
+
+ + + + + +
+
+ + + + + + + +
+
+
1
+

tests

+
+
+
+
0
+

failures

+
+
+
+
0
+

skipped

+
+
+
+
0.054s
+

duration

+
+
+
+
+
+
100%
+

successful

+
+
+
+
+
+
+

standard output

+ +
2026-02-28T18:46:26.995+01:00  INFO 74623 --- [allowance-planner] [    Test worker] o.f.c.i.command.clean.CleanExecutor      : Successfully dropped pre-schema database level objects (execution time 00:00.000s)
+2026-02-28T18:46:26.999+01:00  INFO 74623 --- [allowance-planner] [    Test worker] o.f.c.i.command.clean.CleanExecutor      : Successfully cleaned schema "public" (execution time 00:00.003s)
+2026-02-28T18:46:27.001+01:00  INFO 74623 --- [allowance-planner] [    Test worker] o.f.c.i.command.clean.CleanExecutor      : Successfully cleaned schema "public" (execution time 00:00.001s)
+2026-02-28T18:46:27.001+01:00  INFO 74623 --- [allowance-planner] [    Test worker] o.f.c.i.command.clean.CleanExecutor      : Successfully dropped post-schema database level objects (execution time 00:00.000s)
+2026-02-28T18:46:27.005+01:00  INFO 74623 --- [allowance-planner] [    Test worker] o.f.c.i.s.JdbcTableSchemaHistory         : Schema history table "public"."flyway_schema_history" does not exist yet
+2026-02-28T18:46:27.005+01:00  INFO 74623 --- [allowance-planner] [    Test worker] o.f.core.internal.command.DbValidate     : Successfully validated 1 migration (execution time 00:00.000s)
+2026-02-28T18:46:27.007+01:00  INFO 74623 --- [allowance-planner] [    Test worker] o.f.c.i.s.JdbcTableSchemaHistory         : Creating Schema History table "public"."flyway_schema_history" ...
+2026-02-28T18:46:27.009+01:00  INFO 74623 --- [allowance-planner] [    Test worker] o.f.core.internal.command.DbMigrate      : Current version of schema "public": << Empty Schema >>
+2026-02-28T18:46:27.010+01:00  INFO 74623 --- [allowance-planner] [    Test worker] o.f.core.internal.command.DbMigrate      : Migrating schema "public" to version "1 - initial"
+2026-02-28T18:46:27.016+01:00  INFO 74623 --- [allowance-planner] [    Test worker] o.f.core.internal.command.DbMigrate      : Successfully applied 1 migration to schema "public", now at version v1 (execution time 00:00.002s)
+
+ +
+
+
+
+
+ +
+ + diff --git a/backend-spring/build/reports/tests/test/be.seeseepuff.allowanceplanner.ApiTest/getUser().html b/backend-spring/build/reports/tests/test/be.seeseepuff.allowanceplanner.ApiTest/getUser().html new file mode 100644 index 0000000..7093f97 --- /dev/null +++ b/backend-spring/build/reports/tests/test/be.seeseepuff.allowanceplanner.ApiTest/getUser().html @@ -0,0 +1,116 @@ + + + + + +Test results - getUser() + + + + + +
+ +
+ +
+

Gradle Test Run :test

+

getUser()

+
+ +
+

summary

+
+
+ + + + + +
+
+ + + + + + + +
+
+
1
+

tests

+
+
+
+
0
+

failures

+
+
+
+
0
+

skipped

+
+
+
+
0.048s
+

duration

+
+
+
+
+
+
100%
+

successful

+
+
+
+
+
+
+

standard output

+ +
2026-02-28T18:46:25.572+01:00  INFO 74623 --- [allowance-planner] [    Test worker] o.f.c.i.command.clean.CleanExecutor      : Successfully dropped pre-schema database level objects (execution time 00:00.000s)
+2026-02-28T18:46:25.577+01:00  INFO 74623 --- [allowance-planner] [    Test worker] o.f.c.i.command.clean.CleanExecutor      : Successfully cleaned schema "public" (execution time 00:00.005s)
+2026-02-28T18:46:25.578+01:00  INFO 74623 --- [allowance-planner] [    Test worker] o.f.c.i.command.clean.CleanExecutor      : Successfully cleaned schema "public" (execution time 00:00.000s)
+2026-02-28T18:46:25.578+01:00  INFO 74623 --- [allowance-planner] [    Test worker] o.f.c.i.command.clean.CleanExecutor      : Successfully dropped post-schema database level objects (execution time 00:00.000s)
+2026-02-28T18:46:25.581+01:00  INFO 74623 --- [allowance-planner] [    Test worker] o.f.c.i.s.JdbcTableSchemaHistory         : Schema history table "public"."flyway_schema_history" does not exist yet
+2026-02-28T18:46:25.581+01:00  INFO 74623 --- [allowance-planner] [    Test worker] o.f.core.internal.command.DbValidate     : Successfully validated 1 migration (execution time 00:00.000s)
+2026-02-28T18:46:25.582+01:00  INFO 74623 --- [allowance-planner] [    Test worker] o.f.c.i.s.JdbcTableSchemaHistory         : Creating Schema History table "public"."flyway_schema_history" ...
+2026-02-28T18:46:25.586+01:00  INFO 74623 --- [allowance-planner] [    Test worker] o.f.core.internal.command.DbMigrate      : Current version of schema "public": << Empty Schema >>
+2026-02-28T18:46:25.587+01:00  INFO 74623 --- [allowance-planner] [    Test worker] o.f.core.internal.command.DbMigrate      : Migrating schema "public" to version "1 - initial"
+2026-02-28T18:46:25.592+01:00  INFO 74623 --- [allowance-planner] [    Test worker] o.f.core.internal.command.DbMigrate      : Successfully applied 1 migration to schema "public", now at version v1 (execution time 00:00.003s)
+
+ +
+
+
+
+
+ +
+ + diff --git a/backend-spring/build/reports/tests/test/be.seeseepuff.allowanceplanner.ApiTest/getUserAllowance().html b/backend-spring/build/reports/tests/test/be.seeseepuff.allowanceplanner.ApiTest/getUserAllowance().html new file mode 100644 index 0000000..493f555 --- /dev/null +++ b/backend-spring/build/reports/tests/test/be.seeseepuff.allowanceplanner.ApiTest/getUserAllowance().html @@ -0,0 +1,116 @@ + + + + + +Test results - getUserAllowance() + + + + + +
+ +
+ +
+

Gradle Test Run :test

+

getUserAllowance()

+
+ +
+

summary

+
+
+ + + + + +
+
+ + + + + + + +
+
+
1
+

tests

+
+
+
+
0
+

failures

+
+
+
+
0
+

skipped

+
+
+
+
0.071s
+

duration

+
+
+
+
+
+
100%
+

successful

+
+
+
+
+
+
+

standard output

+ +
2026-02-28T18:46:26.923+01:00  INFO 74623 --- [allowance-planner] [    Test worker] o.f.c.i.command.clean.CleanExecutor      : Successfully dropped pre-schema database level objects (execution time 00:00.000s)
+2026-02-28T18:46:26.927+01:00  INFO 74623 --- [allowance-planner] [    Test worker] o.f.c.i.command.clean.CleanExecutor      : Successfully cleaned schema "public" (execution time 00:00.003s)
+2026-02-28T18:46:26.928+01:00  INFO 74623 --- [allowance-planner] [    Test worker] o.f.c.i.command.clean.CleanExecutor      : Successfully cleaned schema "public" (execution time 00:00.001s)
+2026-02-28T18:46:26.928+01:00  INFO 74623 --- [allowance-planner] [    Test worker] o.f.c.i.command.clean.CleanExecutor      : Successfully dropped post-schema database level objects (execution time 00:00.000s)
+2026-02-28T18:46:26.931+01:00  INFO 74623 --- [allowance-planner] [    Test worker] o.f.c.i.s.JdbcTableSchemaHistory         : Schema history table "public"."flyway_schema_history" does not exist yet
+2026-02-28T18:46:26.932+01:00  INFO 74623 --- [allowance-planner] [    Test worker] o.f.core.internal.command.DbValidate     : Successfully validated 1 migration (execution time 00:00.000s)
+2026-02-28T18:46:26.933+01:00  INFO 74623 --- [allowance-planner] [    Test worker] o.f.c.i.s.JdbcTableSchemaHistory         : Creating Schema History table "public"."flyway_schema_history" ...
+2026-02-28T18:46:26.936+01:00  INFO 74623 --- [allowance-planner] [    Test worker] o.f.core.internal.command.DbMigrate      : Current version of schema "public": << Empty Schema >>
+2026-02-28T18:46:26.937+01:00  INFO 74623 --- [allowance-planner] [    Test worker] o.f.core.internal.command.DbMigrate      : Migrating schema "public" to version "1 - initial"
+2026-02-28T18:46:26.941+01:00  INFO 74623 --- [allowance-planner] [    Test worker] o.f.core.internal.command.DbMigrate      : Successfully applied 1 migration to schema "public", now at version v1 (execution time 00:00.003s)
+
+ +
+
+
+
+
+ +
+ + diff --git a/backend-spring/build/reports/tests/test/be.seeseepuff.allowanceplanner.ApiTest/getUserAllowanceBadId().html b/backend-spring/build/reports/tests/test/be.seeseepuff.allowanceplanner.ApiTest/getUserAllowanceBadId().html new file mode 100644 index 0000000..f77c6b3 --- /dev/null +++ b/backend-spring/build/reports/tests/test/be.seeseepuff.allowanceplanner.ApiTest/getUserAllowanceBadId().html @@ -0,0 +1,116 @@ + + + + + +Test results - getUserAllowanceBadId() + + + + + +
+ +
+ +
+

Gradle Test Run :test

+

getUserAllowanceBadId()

+
+ +
+

summary

+
+
+ + + + + +
+
+ + + + + + + +
+
+
1
+

tests

+
+
+
+
0
+

failures

+
+
+
+
0
+

skipped

+
+
+
+
0.031s
+

duration

+
+
+
+
+
+
100%
+

successful

+
+
+
+
+
+
+

standard output

+ +
2026-02-28T18:46:27.546+01:00  INFO 74623 --- [allowance-planner] [    Test worker] o.f.c.i.command.clean.CleanExecutor      : Successfully dropped pre-schema database level objects (execution time 00:00.000s)
+2026-02-28T18:46:27.549+01:00  INFO 74623 --- [allowance-planner] [    Test worker] o.f.c.i.command.clean.CleanExecutor      : Successfully cleaned schema "public" (execution time 00:00.002s)
+2026-02-28T18:46:27.550+01:00  INFO 74623 --- [allowance-planner] [    Test worker] o.f.c.i.command.clean.CleanExecutor      : Successfully cleaned schema "public" (execution time 00:00.001s)
+2026-02-28T18:46:27.550+01:00  INFO 74623 --- [allowance-planner] [    Test worker] o.f.c.i.command.clean.CleanExecutor      : Successfully dropped post-schema database level objects (execution time 00:00.000s)
+2026-02-28T18:46:27.553+01:00  INFO 74623 --- [allowance-planner] [    Test worker] o.f.c.i.s.JdbcTableSchemaHistory         : Schema history table "public"."flyway_schema_history" does not exist yet
+2026-02-28T18:46:27.553+01:00  INFO 74623 --- [allowance-planner] [    Test worker] o.f.core.internal.command.DbValidate     : Successfully validated 1 migration (execution time 00:00.000s)
+2026-02-28T18:46:27.553+01:00  INFO 74623 --- [allowance-planner] [    Test worker] o.f.c.i.s.JdbcTableSchemaHistory         : Creating Schema History table "public"."flyway_schema_history" ...
+2026-02-28T18:46:27.555+01:00  INFO 74623 --- [allowance-planner] [    Test worker] o.f.core.internal.command.DbMigrate      : Current version of schema "public": << Empty Schema >>
+2026-02-28T18:46:27.556+01:00  INFO 74623 --- [allowance-planner] [    Test worker] o.f.core.internal.command.DbMigrate      : Migrating schema "public" to version "1 - initial"
+2026-02-28T18:46:27.563+01:00  INFO 74623 --- [allowance-planner] [    Test worker] o.f.core.internal.command.DbMigrate      : Successfully applied 1 migration to schema "public", now at version v1 (execution time 00:00.003s)
+
+ +
+
+
+
+
+ +
+ + diff --git a/backend-spring/build/reports/tests/test/be.seeseepuff.allowanceplanner.ApiTest/getUserAllowanceById().html b/backend-spring/build/reports/tests/test/be.seeseepuff.allowanceplanner.ApiTest/getUserAllowanceById().html new file mode 100644 index 0000000..60602a3 --- /dev/null +++ b/backend-spring/build/reports/tests/test/be.seeseepuff.allowanceplanner.ApiTest/getUserAllowanceById().html @@ -0,0 +1,116 @@ + + + + + +Test results - getUserAllowanceById() + + + + + +
+ +
+ +
+

Gradle Test Run :test

+

getUserAllowanceById()

+
+ +
+

summary

+
+
+ + + + + +
+
+ + + + + + + +
+
+
1
+

tests

+
+
+
+
0
+

failures

+
+
+
+
0
+

skipped

+
+
+
+
0.110s
+

duration

+
+
+
+
+
+
100%
+

successful

+
+
+
+
+
+
+

standard output

+ +
2026-02-28T18:46:24.741+01:00  INFO 74623 --- [allowance-planner] [    Test worker] o.f.c.i.command.clean.CleanExecutor      : Successfully dropped pre-schema database level objects (execution time 00:00.000s)
+2026-02-28T18:46:24.745+01:00  INFO 74623 --- [allowance-planner] [    Test worker] o.f.c.i.command.clean.CleanExecutor      : Successfully cleaned schema "public" (execution time 00:00.004s)
+2026-02-28T18:46:24.747+01:00  INFO 74623 --- [allowance-planner] [    Test worker] o.f.c.i.command.clean.CleanExecutor      : Successfully cleaned schema "public" (execution time 00:00.001s)
+2026-02-28T18:46:24.747+01:00  INFO 74623 --- [allowance-planner] [    Test worker] o.f.c.i.command.clean.CleanExecutor      : Successfully dropped post-schema database level objects (execution time 00:00.000s)
+2026-02-28T18:46:24.751+01:00  INFO 74623 --- [allowance-planner] [    Test worker] o.f.c.i.s.JdbcTableSchemaHistory         : Schema history table "public"."flyway_schema_history" does not exist yet
+2026-02-28T18:46:24.751+01:00  INFO 74623 --- [allowance-planner] [    Test worker] o.f.core.internal.command.DbValidate     : Successfully validated 1 migration (execution time 00:00.001s)
+2026-02-28T18:46:24.752+01:00  INFO 74623 --- [allowance-planner] [    Test worker] o.f.c.i.s.JdbcTableSchemaHistory         : Creating Schema History table "public"."flyway_schema_history" ...
+2026-02-28T18:46:24.755+01:00  INFO 74623 --- [allowance-planner] [    Test worker] o.f.core.internal.command.DbMigrate      : Current version of schema "public": << Empty Schema >>
+2026-02-28T18:46:24.756+01:00  INFO 74623 --- [allowance-planner] [    Test worker] o.f.core.internal.command.DbMigrate      : Migrating schema "public" to version "1 - initial"
+2026-02-28T18:46:24.761+01:00  INFO 74623 --- [allowance-planner] [    Test worker] o.f.core.internal.command.DbMigrate      : Successfully applied 1 migration to schema "public", now at version v1 (execution time 00:00.003s)
+
+ +
+
+
+
+
+ +
+ + diff --git a/backend-spring/build/reports/tests/test/be.seeseepuff.allowanceplanner.ApiTest/getUserAllowanceNoUser().html b/backend-spring/build/reports/tests/test/be.seeseepuff.allowanceplanner.ApiTest/getUserAllowanceNoUser().html new file mode 100644 index 0000000..2513657 --- /dev/null +++ b/backend-spring/build/reports/tests/test/be.seeseepuff.allowanceplanner.ApiTest/getUserAllowanceNoUser().html @@ -0,0 +1,116 @@ + + + + + +Test results - getUserAllowanceNoUser() + + + + + +
+ +
+ +
+

Gradle Test Run :test

+

getUserAllowanceNoUser()

+
+ +
+

summary

+
+
+ + + + + +
+
+ + + + + + + +
+
+
1
+

tests

+
+
+
+
0
+

failures

+
+
+
+
0
+

skipped

+
+
+
+
0.035s
+

duration

+
+
+
+
+
+
100%
+

successful

+
+
+
+
+
+
+

standard output

+ +
2026-02-28T18:46:25.823+01:00  INFO 74623 --- [allowance-planner] [    Test worker] o.f.c.i.command.clean.CleanExecutor      : Successfully dropped pre-schema database level objects (execution time 00:00.000s)
+2026-02-28T18:46:25.828+01:00  INFO 74623 --- [allowance-planner] [    Test worker] o.f.c.i.command.clean.CleanExecutor      : Successfully cleaned schema "public" (execution time 00:00.004s)
+2026-02-28T18:46:25.829+01:00  INFO 74623 --- [allowance-planner] [    Test worker] o.f.c.i.command.clean.CleanExecutor      : Successfully cleaned schema "public" (execution time 00:00.001s)
+2026-02-28T18:46:25.829+01:00  INFO 74623 --- [allowance-planner] [    Test worker] o.f.c.i.command.clean.CleanExecutor      : Successfully dropped post-schema database level objects (execution time 00:00.000s)
+2026-02-28T18:46:25.832+01:00  INFO 74623 --- [allowance-planner] [    Test worker] o.f.c.i.s.JdbcTableSchemaHistory         : Schema history table "public"."flyway_schema_history" does not exist yet
+2026-02-28T18:46:25.832+01:00  INFO 74623 --- [allowance-planner] [    Test worker] o.f.core.internal.command.DbValidate     : Successfully validated 1 migration (execution time 00:00.000s)
+2026-02-28T18:46:25.833+01:00  INFO 74623 --- [allowance-planner] [    Test worker] o.f.c.i.s.JdbcTableSchemaHistory         : Creating Schema History table "public"."flyway_schema_history" ...
+2026-02-28T18:46:25.835+01:00  INFO 74623 --- [allowance-planner] [    Test worker] o.f.core.internal.command.DbMigrate      : Current version of schema "public": << Empty Schema >>
+2026-02-28T18:46:25.836+01:00  INFO 74623 --- [allowance-planner] [    Test worker] o.f.core.internal.command.DbMigrate      : Migrating schema "public" to version "1 - initial"
+2026-02-28T18:46:25.843+01:00  INFO 74623 --- [allowance-planner] [    Test worker] o.f.core.internal.command.DbMigrate      : Successfully applied 1 migration to schema "public", now at version v1 (execution time 00:00.005s)
+
+ +
+
+
+
+
+ +
+ + diff --git a/backend-spring/build/reports/tests/test/be.seeseepuff.allowanceplanner.ApiTest/getUserAllowanceWhenNoAllowancePresent().html b/backend-spring/build/reports/tests/test/be.seeseepuff.allowanceplanner.ApiTest/getUserAllowanceWhenNoAllowancePresent().html new file mode 100644 index 0000000..64714eb --- /dev/null +++ b/backend-spring/build/reports/tests/test/be.seeseepuff.allowanceplanner.ApiTest/getUserAllowanceWhenNoAllowancePresent().html @@ -0,0 +1,116 @@ + + + + + +Test results - getUserAllowanceWhenNoAllowancePresent() + + + + + +
+ +
+ +
+

Gradle Test Run :test

+

getUserAllowanceWhenNoAllowancePresent()

+
+ +
+

summary

+
+
+ + + + + +
+
+ + + + + + + +
+
+
1
+

tests

+
+
+
+
0
+

failures

+
+
+
+
0
+

skipped

+
+
+
+
0.065s
+

duration

+
+
+
+
+
+
100%
+

successful

+
+
+
+
+
+
+

standard output

+ +
2026-02-28T18:46:24.458+01:00  INFO 74623 --- [allowance-planner] [    Test worker] o.f.c.i.command.clean.CleanExecutor      : Successfully dropped pre-schema database level objects (execution time 00:00.000s)
+2026-02-28T18:46:24.464+01:00  INFO 74623 --- [allowance-planner] [    Test worker] o.f.c.i.command.clean.CleanExecutor      : Successfully cleaned schema "public" (execution time 00:00.005s)
+2026-02-28T18:46:24.466+01:00  INFO 74623 --- [allowance-planner] [    Test worker] o.f.c.i.command.clean.CleanExecutor      : Successfully cleaned schema "public" (execution time 00:00.001s)
+2026-02-28T18:46:24.466+01:00  INFO 74623 --- [allowance-planner] [    Test worker] o.f.c.i.command.clean.CleanExecutor      : Successfully dropped post-schema database level objects (execution time 00:00.000s)
+2026-02-28T18:46:24.471+01:00  INFO 74623 --- [allowance-planner] [    Test worker] o.f.c.i.s.JdbcTableSchemaHistory         : Schema history table "public"."flyway_schema_history" does not exist yet
+2026-02-28T18:46:24.471+01:00  INFO 74623 --- [allowance-planner] [    Test worker] o.f.core.internal.command.DbValidate     : Successfully validated 1 migration (execution time 00:00.000s)
+2026-02-28T18:46:24.472+01:00  INFO 74623 --- [allowance-planner] [    Test worker] o.f.c.i.s.JdbcTableSchemaHistory         : Creating Schema History table "public"."flyway_schema_history" ...
+2026-02-28T18:46:24.476+01:00  INFO 74623 --- [allowance-planner] [    Test worker] o.f.core.internal.command.DbMigrate      : Current version of schema "public": << Empty Schema >>
+2026-02-28T18:46:24.477+01:00  INFO 74623 --- [allowance-planner] [    Test worker] o.f.core.internal.command.DbMigrate      : Migrating schema "public" to version "1 - initial"
+2026-02-28T18:46:24.482+01:00  INFO 74623 --- [allowance-planner] [    Test worker] o.f.core.internal.command.DbMigrate      : Successfully applied 1 migration to schema "public", now at version v1 (execution time 00:00.003s)
+
+ +
+
+
+
+
+ +
+ + diff --git a/backend-spring/build/reports/tests/test/be.seeseepuff.allowanceplanner.ApiTest/getUserBadId().html b/backend-spring/build/reports/tests/test/be.seeseepuff.allowanceplanner.ApiTest/getUserBadId().html new file mode 100644 index 0000000..364d75f --- /dev/null +++ b/backend-spring/build/reports/tests/test/be.seeseepuff.allowanceplanner.ApiTest/getUserBadId().html @@ -0,0 +1,116 @@ + + + + + +Test results - getUserBadId() + + + + + +
+ +
+ +
+

Gradle Test Run :test

+

getUserBadId()

+
+ +
+

summary

+
+
+ + + + + +
+
+ + + + + + + +
+
+
1
+

tests

+
+
+
+
0
+

failures

+
+
+
+
0
+

skipped

+
+
+
+
0.031s
+

duration

+
+
+
+
+
+
100%
+

successful

+
+
+
+
+
+
+

standard output

+ +
2026-02-28T18:46:25.858+01:00  INFO 74623 --- [allowance-planner] [    Test worker] o.f.c.i.command.clean.CleanExecutor      : Successfully dropped pre-schema database level objects (execution time 00:00.000s)
+2026-02-28T18:46:25.862+01:00  INFO 74623 --- [allowance-planner] [    Test worker] o.f.c.i.command.clean.CleanExecutor      : Successfully cleaned schema "public" (execution time 00:00.004s)
+2026-02-28T18:46:25.864+01:00  INFO 74623 --- [allowance-planner] [    Test worker] o.f.c.i.command.clean.CleanExecutor      : Successfully cleaned schema "public" (execution time 00:00.001s)
+2026-02-28T18:46:25.864+01:00  INFO 74623 --- [allowance-planner] [    Test worker] o.f.c.i.command.clean.CleanExecutor      : Successfully dropped post-schema database level objects (execution time 00:00.000s)
+2026-02-28T18:46:25.867+01:00  INFO 74623 --- [allowance-planner] [    Test worker] o.f.c.i.s.JdbcTableSchemaHistory         : Schema history table "public"."flyway_schema_history" does not exist yet
+2026-02-28T18:46:25.867+01:00  INFO 74623 --- [allowance-planner] [    Test worker] o.f.core.internal.command.DbValidate     : Successfully validated 1 migration (execution time 00:00.000s)
+2026-02-28T18:46:25.868+01:00  INFO 74623 --- [allowance-planner] [    Test worker] o.f.c.i.s.JdbcTableSchemaHistory         : Creating Schema History table "public"."flyway_schema_history" ...
+2026-02-28T18:46:25.870+01:00  INFO 74623 --- [allowance-planner] [    Test worker] o.f.core.internal.command.DbMigrate      : Current version of schema "public": << Empty Schema >>
+2026-02-28T18:46:25.871+01:00  INFO 74623 --- [allowance-planner] [    Test worker] o.f.core.internal.command.DbMigrate      : Migrating schema "public" to version "1 - initial"
+2026-02-28T18:46:25.878+01:00  INFO 74623 --- [allowance-planner] [    Test worker] o.f.core.internal.command.DbMigrate      : Successfully applied 1 migration to schema "public", now at version v1 (execution time 00:00.005s)
+
+ +
+
+
+
+
+ +
+ + diff --git a/backend-spring/build/reports/tests/test/be.seeseepuff.allowanceplanner.ApiTest/getUserByAllowanceByIdBadAllowanceId().html b/backend-spring/build/reports/tests/test/be.seeseepuff.allowanceplanner.ApiTest/getUserByAllowanceByIdBadAllowanceId().html new file mode 100644 index 0000000..9df3563 --- /dev/null +++ b/backend-spring/build/reports/tests/test/be.seeseepuff.allowanceplanner.ApiTest/getUserByAllowanceByIdBadAllowanceId().html @@ -0,0 +1,116 @@ + + + + + +Test results - getUserByAllowanceByIdBadAllowanceId() + + + + + +
+ +
+ +
+

Gradle Test Run :test

+

getUserByAllowanceByIdBadAllowanceId()

+
+ +
+

summary

+
+
+ + + + + +
+
+ + + + + + + +
+
+
1
+

tests

+
+
+
+
0
+

failures

+
+
+
+
0
+

skipped

+
+
+
+
0.068s
+

duration

+
+
+
+
+
+
100%
+

successful

+
+
+
+
+
+
+

standard output

+ +
2026-02-28T18:46:23.710+01:00  INFO 74623 --- [allowance-planner] [    Test worker] o.f.c.i.command.clean.CleanExecutor      : Successfully dropped pre-schema database level objects (execution time 00:00.000s)
+2026-02-28T18:46:23.717+01:00  INFO 74623 --- [allowance-planner] [    Test worker] o.f.c.i.command.clean.CleanExecutor      : Successfully cleaned schema "public" (execution time 00:00.006s)
+2026-02-28T18:46:23.723+01:00  INFO 74623 --- [allowance-planner] [    Test worker] o.f.c.i.command.clean.CleanExecutor      : Successfully cleaned schema "public" (execution time 00:00.005s)
+2026-02-28T18:46:23.723+01:00  INFO 74623 --- [allowance-planner] [    Test worker] o.f.c.i.command.clean.CleanExecutor      : Successfully dropped post-schema database level objects (execution time 00:00.000s)
+2026-02-28T18:46:23.728+01:00  INFO 74623 --- [allowance-planner] [    Test worker] o.f.c.i.s.JdbcTableSchemaHistory         : Schema history table "public"."flyway_schema_history" does not exist yet
+2026-02-28T18:46:23.729+01:00  INFO 74623 --- [allowance-planner] [    Test worker] o.f.core.internal.command.DbValidate     : Successfully validated 1 migration (execution time 00:00.001s)
+2026-02-28T18:46:23.731+01:00  INFO 74623 --- [allowance-planner] [    Test worker] o.f.c.i.s.JdbcTableSchemaHistory         : Creating Schema History table "public"."flyway_schema_history" ...
+2026-02-28T18:46:23.737+01:00  INFO 74623 --- [allowance-planner] [    Test worker] o.f.core.internal.command.DbMigrate      : Current version of schema "public": << Empty Schema >>
+2026-02-28T18:46:23.740+01:00  INFO 74623 --- [allowance-planner] [    Test worker] o.f.core.internal.command.DbMigrate      : Migrating schema "public" to version "1 - initial"
+2026-02-28T18:46:23.749+01:00  INFO 74623 --- [allowance-planner] [    Test worker] o.f.core.internal.command.DbMigrate      : Successfully applied 1 migration to schema "public", now at version v1 (execution time 00:00.006s)
+
+ +
+
+
+
+
+ +
+ + diff --git a/backend-spring/build/reports/tests/test/be.seeseepuff.allowanceplanner.ApiTest/getUserByAllowanceByIdBadUserId().html b/backend-spring/build/reports/tests/test/be.seeseepuff.allowanceplanner.ApiTest/getUserByAllowanceByIdBadUserId().html new file mode 100644 index 0000000..c238e4c --- /dev/null +++ b/backend-spring/build/reports/tests/test/be.seeseepuff.allowanceplanner.ApiTest/getUserByAllowanceByIdBadUserId().html @@ -0,0 +1,116 @@ + + + + + +Test results - getUserByAllowanceByIdBadUserId() + + + + + +
+ +
+ +
+

Gradle Test Run :test

+

getUserByAllowanceByIdBadUserId()

+
+ +
+

summary

+
+
+ + + + + +
+
+ + + + + + + +
+
+
1
+

tests

+
+
+
+
0
+

failures

+
+
+
+
0
+

skipped

+
+
+
+
0.040s
+

duration

+
+
+
+
+
+
100%
+

successful

+
+
+
+
+
+
+

standard output

+ +
2026-02-28T18:46:24.225+01:00  INFO 74623 --- [allowance-planner] [    Test worker] o.f.c.i.command.clean.CleanExecutor      : Successfully dropped pre-schema database level objects (execution time 00:00.000s)
+2026-02-28T18:46:24.231+01:00  INFO 74623 --- [allowance-planner] [    Test worker] o.f.c.i.command.clean.CleanExecutor      : Successfully cleaned schema "public" (execution time 00:00.005s)
+2026-02-28T18:46:24.232+01:00  INFO 74623 --- [allowance-planner] [    Test worker] o.f.c.i.command.clean.CleanExecutor      : Successfully cleaned schema "public" (execution time 00:00.001s)
+2026-02-28T18:46:24.233+01:00  INFO 74623 --- [allowance-planner] [    Test worker] o.f.c.i.command.clean.CleanExecutor      : Successfully dropped post-schema database level objects (execution time 00:00.000s)
+2026-02-28T18:46:24.237+01:00  INFO 74623 --- [allowance-planner] [    Test worker] o.f.c.i.s.JdbcTableSchemaHistory         : Schema history table "public"."flyway_schema_history" does not exist yet
+2026-02-28T18:46:24.237+01:00  INFO 74623 --- [allowance-planner] [    Test worker] o.f.core.internal.command.DbValidate     : Successfully validated 1 migration (execution time 00:00.001s)
+2026-02-28T18:46:24.239+01:00  INFO 74623 --- [allowance-planner] [    Test worker] o.f.c.i.s.JdbcTableSchemaHistory         : Creating Schema History table "public"."flyway_schema_history" ...
+2026-02-28T18:46:24.243+01:00  INFO 74623 --- [allowance-planner] [    Test worker] o.f.core.internal.command.DbMigrate      : Current version of schema "public": << Empty Schema >>
+2026-02-28T18:46:24.244+01:00  INFO 74623 --- [allowance-planner] [    Test worker] o.f.core.internal.command.DbMigrate      : Migrating schema "public" to version "1 - initial"
+2026-02-28T18:46:24.250+01:00  INFO 74623 --- [allowance-planner] [    Test worker] o.f.core.internal.command.DbMigrate      : Successfully applied 1 migration to schema "public", now at version v1 (execution time 00:00.004s)
+
+ +
+
+
+
+
+ +
+ + diff --git a/backend-spring/build/reports/tests/test/be.seeseepuff.allowanceplanner.ApiTest/getUserByAllowanceByIdInvalidUserId().html b/backend-spring/build/reports/tests/test/be.seeseepuff.allowanceplanner.ApiTest/getUserByAllowanceByIdInvalidUserId().html new file mode 100644 index 0000000..2603a65 --- /dev/null +++ b/backend-spring/build/reports/tests/test/be.seeseepuff.allowanceplanner.ApiTest/getUserByAllowanceByIdInvalidUserId().html @@ -0,0 +1,116 @@ + + + + + +Test results - getUserByAllowanceByIdInvalidUserId() + + + + + +
+ +
+ +
+

Gradle Test Run :test

+

getUserByAllowanceByIdInvalidUserId()

+
+ +
+

summary

+
+
+ + + + + +
+
+ + + + + + + +
+
+
1
+

tests

+
+
+
+
0
+

failures

+
+
+
+
0
+

skipped

+
+
+
+
0.033s
+

duration

+
+
+
+
+
+
100%
+

successful

+
+
+
+
+
+
+

standard output

+ +
2026-02-28T18:46:24.999+01:00  INFO 74623 --- [allowance-planner] [    Test worker] o.f.c.i.command.clean.CleanExecutor      : Successfully dropped pre-schema database level objects (execution time 00:00.000s)
+2026-02-28T18:46:25.003+01:00  INFO 74623 --- [allowance-planner] [    Test worker] o.f.c.i.command.clean.CleanExecutor      : Successfully cleaned schema "public" (execution time 00:00.003s)
+2026-02-28T18:46:25.004+01:00  INFO 74623 --- [allowance-planner] [    Test worker] o.f.c.i.command.clean.CleanExecutor      : Successfully cleaned schema "public" (execution time 00:00.001s)
+2026-02-28T18:46:25.004+01:00  INFO 74623 --- [allowance-planner] [    Test worker] o.f.c.i.command.clean.CleanExecutor      : Successfully dropped post-schema database level objects (execution time 00:00.000s)
+2026-02-28T18:46:25.009+01:00  INFO 74623 --- [allowance-planner] [    Test worker] o.f.c.i.s.JdbcTableSchemaHistory         : Schema history table "public"."flyway_schema_history" does not exist yet
+2026-02-28T18:46:25.009+01:00  INFO 74623 --- [allowance-planner] [    Test worker] o.f.core.internal.command.DbValidate     : Successfully validated 1 migration (execution time 00:00.001s)
+2026-02-28T18:46:25.010+01:00  INFO 74623 --- [allowance-planner] [    Test worker] o.f.c.i.s.JdbcTableSchemaHistory         : Creating Schema History table "public"."flyway_schema_history" ...
+2026-02-28T18:46:25.013+01:00  INFO 74623 --- [allowance-planner] [    Test worker] o.f.core.internal.command.DbMigrate      : Current version of schema "public": << Empty Schema >>
+2026-02-28T18:46:25.014+01:00  INFO 74623 --- [allowance-planner] [    Test worker] o.f.core.internal.command.DbMigrate      : Migrating schema "public" to version "1 - initial"
+2026-02-28T18:46:25.019+01:00  INFO 74623 --- [allowance-planner] [    Test worker] o.f.core.internal.command.DbMigrate      : Successfully applied 1 migration to schema "public", now at version v1 (execution time 00:00.003s)
+
+ +
+
+
+
+
+ +
+ + diff --git a/backend-spring/build/reports/tests/test/be.seeseepuff.allowanceplanner.ApiTest/getUserByAllowanceIdInvalidAllowance().html b/backend-spring/build/reports/tests/test/be.seeseepuff.allowanceplanner.ApiTest/getUserByAllowanceIdInvalidAllowance().html new file mode 100644 index 0000000..fefc27b --- /dev/null +++ b/backend-spring/build/reports/tests/test/be.seeseepuff.allowanceplanner.ApiTest/getUserByAllowanceIdInvalidAllowance().html @@ -0,0 +1,116 @@ + + + + + +Test results - getUserByAllowanceIdInvalidAllowance() + + + + + +
+ +
+ +
+

Gradle Test Run :test

+

getUserByAllowanceIdInvalidAllowance()

+
+ +
+

summary

+
+
+ + + + + +
+
+ + + + + + + +
+
+
1
+

tests

+
+
+
+
0
+

failures

+
+
+
+
0
+

skipped

+
+
+
+
0.039s
+

duration

+
+
+
+
+
+
100%
+

successful

+
+
+
+
+
+
+

standard output

+ +
2026-02-28T18:46:26.794+01:00  INFO 74623 --- [allowance-planner] [    Test worker] o.f.c.i.command.clean.CleanExecutor      : Successfully dropped pre-schema database level objects (execution time 00:00.000s)
+2026-02-28T18:46:26.799+01:00  INFO 74623 --- [allowance-planner] [    Test worker] o.f.c.i.command.clean.CleanExecutor      : Successfully cleaned schema "public" (execution time 00:00.004s)
+2026-02-28T18:46:26.801+01:00  INFO 74623 --- [allowance-planner] [    Test worker] o.f.c.i.command.clean.CleanExecutor      : Successfully cleaned schema "public" (execution time 00:00.002s)
+2026-02-28T18:46:26.801+01:00  INFO 74623 --- [allowance-planner] [    Test worker] o.f.c.i.command.clean.CleanExecutor      : Successfully dropped post-schema database level objects (execution time 00:00.000s)
+2026-02-28T18:46:26.806+01:00  INFO 74623 --- [allowance-planner] [    Test worker] o.f.c.i.s.JdbcTableSchemaHistory         : Schema history table "public"."flyway_schema_history" does not exist yet
+2026-02-28T18:46:26.807+01:00  INFO 74623 --- [allowance-planner] [    Test worker] o.f.core.internal.command.DbValidate     : Successfully validated 1 migration (execution time 00:00.000s)
+2026-02-28T18:46:26.807+01:00  INFO 74623 --- [allowance-planner] [    Test worker] o.f.c.i.s.JdbcTableSchemaHistory         : Creating Schema History table "public"."flyway_schema_history" ...
+2026-02-28T18:46:26.810+01:00  INFO 74623 --- [allowance-planner] [    Test worker] o.f.core.internal.command.DbMigrate      : Current version of schema "public": << Empty Schema >>
+2026-02-28T18:46:26.811+01:00  INFO 74623 --- [allowance-planner] [    Test worker] o.f.core.internal.command.DbMigrate      : Migrating schema "public" to version "1 - initial"
+2026-02-28T18:46:26.819+01:00  INFO 74623 --- [allowance-planner] [    Test worker] o.f.core.internal.command.DbMigrate      : Successfully applied 1 migration to schema "public", now at version v1 (execution time 00:00.005s)
+
+ +
+
+
+
+
+ +
+ + diff --git a/backend-spring/build/reports/tests/test/be.seeseepuff.allowanceplanner.ApiTest/getUserUnknown().html b/backend-spring/build/reports/tests/test/be.seeseepuff.allowanceplanner.ApiTest/getUserUnknown().html new file mode 100644 index 0000000..8f9b43a --- /dev/null +++ b/backend-spring/build/reports/tests/test/be.seeseepuff.allowanceplanner.ApiTest/getUserUnknown().html @@ -0,0 +1,116 @@ + + + + + +Test results - getUserUnknown() + + + + + +
+ +
+ +
+

Gradle Test Run :test

+

getUserUnknown()

+
+ +
+

summary

+
+
+ + + + + +
+
+ + + + + + + +
+
+
1
+

tests

+
+
+
+
0
+

failures

+
+
+
+
0
+

skipped

+
+
+
+
0.045s
+

duration

+
+
+
+
+
+
100%
+

successful

+
+
+
+
+
+
+

standard output

+ +
2026-02-28T18:46:24.368+01:00  INFO 74623 --- [allowance-planner] [    Test worker] o.f.c.i.command.clean.CleanExecutor      : Successfully dropped pre-schema database level objects (execution time 00:00.000s)
+2026-02-28T18:46:24.373+01:00  INFO 74623 --- [allowance-planner] [    Test worker] o.f.c.i.command.clean.CleanExecutor      : Successfully cleaned schema "public" (execution time 00:00.004s)
+2026-02-28T18:46:24.375+01:00  INFO 74623 --- [allowance-planner] [    Test worker] o.f.c.i.command.clean.CleanExecutor      : Successfully cleaned schema "public" (execution time 00:00.001s)
+2026-02-28T18:46:24.375+01:00  INFO 74623 --- [allowance-planner] [    Test worker] o.f.c.i.command.clean.CleanExecutor      : Successfully dropped post-schema database level objects (execution time 00:00.000s)
+2026-02-28T18:46:24.379+01:00  INFO 74623 --- [allowance-planner] [    Test worker] o.f.c.i.s.JdbcTableSchemaHistory         : Schema history table "public"."flyway_schema_history" does not exist yet
+2026-02-28T18:46:24.379+01:00  INFO 74623 --- [allowance-planner] [    Test worker] o.f.core.internal.command.DbValidate     : Successfully validated 1 migration (execution time 00:00.000s)
+2026-02-28T18:46:24.380+01:00  INFO 74623 --- [allowance-planner] [    Test worker] o.f.c.i.s.JdbcTableSchemaHistory         : Creating Schema History table "public"."flyway_schema_history" ...
+2026-02-28T18:46:24.384+01:00  INFO 74623 --- [allowance-planner] [    Test worker] o.f.core.internal.command.DbMigrate      : Current version of schema "public": << Empty Schema >>
+2026-02-28T18:46:24.386+01:00  INFO 74623 --- [allowance-planner] [    Test worker] o.f.core.internal.command.DbMigrate      : Migrating schema "public" to version "1 - initial"
+2026-02-28T18:46:24.394+01:00  INFO 74623 --- [allowance-planner] [    Test worker] o.f.core.internal.command.DbMigrate      : Successfully applied 1 migration to schema "public", now at version v1 (execution time 00:00.005s)
+
+ +
+
+
+
+
+ +
+ + diff --git a/backend-spring/build/reports/tests/test/be.seeseepuff.allowanceplanner.ApiTest/getUsers().html b/backend-spring/build/reports/tests/test/be.seeseepuff.allowanceplanner.ApiTest/getUsers().html new file mode 100644 index 0000000..5a65aea --- /dev/null +++ b/backend-spring/build/reports/tests/test/be.seeseepuff.allowanceplanner.ApiTest/getUsers().html @@ -0,0 +1,116 @@ + + + + + +Test results - getUsers() + + + + + +
+ +
+ +
+

Gradle Test Run :test

+

getUsers()

+
+ +
+

summary

+
+
+ + + + + +
+
+ + + + + + + +
+
+
1
+

tests

+
+
+
+
0
+

failures

+
+
+
+
0
+

skipped

+
+
+
+
0.044s
+

duration

+
+
+
+
+
+
100%
+

successful

+
+
+
+
+
+
+

standard output

+ +
2026-02-28T18:46:27.649+01:00  INFO 74623 --- [allowance-planner] [    Test worker] o.f.c.i.command.clean.CleanExecutor      : Successfully dropped pre-schema database level objects (execution time 00:00.000s)
+2026-02-28T18:46:27.652+01:00  INFO 74623 --- [allowance-planner] [    Test worker] o.f.c.i.command.clean.CleanExecutor      : Successfully cleaned schema "public" (execution time 00:00.002s)
+2026-02-28T18:46:27.653+01:00  INFO 74623 --- [allowance-planner] [    Test worker] o.f.c.i.command.clean.CleanExecutor      : Successfully cleaned schema "public" (execution time 00:00.000s)
+2026-02-28T18:46:27.653+01:00  INFO 74623 --- [allowance-planner] [    Test worker] o.f.c.i.command.clean.CleanExecutor      : Successfully dropped post-schema database level objects (execution time 00:00.000s)
+2026-02-28T18:46:27.655+01:00  INFO 74623 --- [allowance-planner] [    Test worker] o.f.c.i.s.JdbcTableSchemaHistory         : Schema history table "public"."flyway_schema_history" does not exist yet
+2026-02-28T18:46:27.655+01:00  INFO 74623 --- [allowance-planner] [    Test worker] o.f.core.internal.command.DbValidate     : Successfully validated 1 migration (execution time 00:00.000s)
+2026-02-28T18:46:27.656+01:00  INFO 74623 --- [allowance-planner] [    Test worker] o.f.c.i.s.JdbcTableSchemaHistory         : Creating Schema History table "public"."flyway_schema_history" ...
+2026-02-28T18:46:27.659+01:00  INFO 74623 --- [allowance-planner] [    Test worker] o.f.core.internal.command.DbMigrate      : Current version of schema "public": << Empty Schema >>
+2026-02-28T18:46:27.659+01:00  INFO 74623 --- [allowance-planner] [    Test worker] o.f.core.internal.command.DbMigrate      : Migrating schema "public" to version "1 - initial"
+2026-02-28T18:46:27.667+01:00  INFO 74623 --- [allowance-planner] [    Test worker] o.f.core.internal.command.DbMigrate      : Successfully applied 1 migration to schema "public", now at version v1 (execution time 00:00.005s)
+
+ +
+
+
+
+
+ +
+ + diff --git a/backend-spring/build/reports/tests/test/be.seeseepuff.allowanceplanner.ApiTest/index.html b/backend-spring/build/reports/tests/test/be.seeseepuff.allowanceplanner.ApiTest/index.html new file mode 100644 index 0000000..74c5879 --- /dev/null +++ b/backend-spring/build/reports/tests/test/be.seeseepuff.allowanceplanner.ApiTest/index.html @@ -0,0 +1,818 @@ + + + + + +Test results - be.seeseepuff.allowanceplanner.ApiTest + + + + + +
+ +
+ +
+

Gradle Test Run :test

+

ApiTest

+
+ +
+

summary

+
+
+ + + + + +
+
+ + + + + + + +
+
+
57
+

tests

+
+
+
+
0
+

failures

+
+
+
+
0
+

skipped

+
+
+
+
11.775s
+

duration

+
+
+
+
+
+
100%
+

successful

+
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
ChildTestsFailuresSkippedDurationSuccess rate
+addAllowanceIdZero() +1000.086s100%
+addAllowanceSimple() +1000.089s100%
+addAllowanceWithSpillage() +1000.183s100%
+completeAllowance() +1000.152s100%
+completeAllowanceInvalidAllowanceId() +1000.040s100%
+completeAllowanceInvalidUserId() +1000.031s100%
+completeTask() +1000.218s100%
+completeTaskAllowanceWeightsSumTo0() +1000.172s100%
+completeTaskInvalidId() +1000.035s100%
+completeTaskWithNoWeights() +1000.146s100%
+createTask() +1000.077s100%
+createTaskInvalidAssignedUser() +1000.047s100%
+createTaskInvalidRequestBody() +1000.032s100%
+createTaskNoName() +1000.044s100%
+createUserAllowance() +1000.076s100%
+createUserAllowanceBadId() +1000.034s100%
+createUserAllowanceInvalidInput() +1000.048s100%
+createUserAllowanceNoUser() +1000.040s100%
+deleteTask() +1000.092s100%
+deleteTaskNotFound() +1000.039s100%
+deleteUserAllowance() +1000.067s100%
+deleteUserAllowanceInvalidId() +1000.042s100%
+deleteUserAllowanceNotFound() +1001.270s100%
+deleteUserRestAllowance() +1000.027s100%
+getHistory() +1000.073s100%
+getTask() +1000.067s100%
+getTaskBadId() +1000.053s100%
+getTaskInvalidId() +1000.062s100%
+getTasksWhenTasks() +1000.054s100%
+getTaskWhenNoTasks() +1000.034s100%
+getUser() +1000.048s100%
+getUserAllowance() +1000.071s100%
+getUserAllowanceBadId() +1000.031s100%
+getUserAllowanceById() +1000.110s100%
+getUserAllowanceNoUser() +1000.035s100%
+getUserAllowanceWhenNoAllowancePresent() +1000.065s100%
+getUserBadId() +1000.031s100%
+getUserByAllowanceByIdBadAllowanceId() +1000.068s100%
+getUserByAllowanceByIdBadUserId() +1000.040s100%
+getUserByAllowanceByIdInvalidUserId() +1000.033s100%
+getUserByAllowanceIdInvalidAllowance() +1000.039s100%
+getUsers() +1000.044s100%
+getUserUnknown() +1000.045s100%
+postHistory() +1000.066s100%
+postHistoryInvalidDescription() +1000.107s100%
+postHistoryInvalidUserId() +1000.038s100%
+putAllowanceById() +1000.060s100%
+putBulkAllowance() +1000.253s100%
+putTaskInvalidTaskId() +1000.056s100%
+putTaskModifiesTask() +1000.066s100%
+subtractAllowanceIdZero() +1000.109s100%
+subtractAllowanceSimple() +1000.112s100%
+transferCapsAtTarget() +1000.098s100%
+transferDifferentUsersFails() +1000.089s100%
+transferInsufficientFunds() +1000.066s100%
+transferNotFound() +1000.042s100%
+transferSuccessful() +1000.097s100%
+
+
+
+

standard output

+ +
18:46:16.404 [Test worker] INFO org.springframework.test.context.support.AnnotationConfigContextLoaderUtils -- Could not detect default configuration classes for test class [be.seeseepuff.allowanceplanner.ApiTest]: ApiTest does not declare any static, non-private, non-final, nested classes annotated with @Configuration.
+18:46:16.488 [Test worker] INFO org.springframework.boot.test.context.SpringBootTestContextBootstrapper -- Found @SpringBootConfiguration be.seeseepuff.allowanceplanner.AllowancePlannerApplication for test class be.seeseepuff.allowanceplanner.ApiTest
+18:46:16.554 [Test worker] INFO org.testcontainers.images.PullPolicy -- Image pull policy will be performed by: DefaultPullPolicy()
+18:46:16.555 [Test worker] INFO org.testcontainers.utility.ImageNameSubstitutor -- Image name substitution will be performed by: DefaultImageNameSubstitutor (composite of 'ConfigurationFileImageNameSubstitutor' and 'PrefixingImageNameSubstitutor')
+18:46:16.561 [Test worker] INFO org.testcontainers.DockerClientFactory -- Testcontainers version: 2.0.3
+18:46:16.636 [Test worker] INFO org.testcontainers.dockerclient.DockerClientProviderStrategy -- Loaded org.testcontainers.dockerclient.UnixSocketClientProviderStrategy from ~/.testcontainers.properties, will try it first
+18:46:16.899 [Test worker] INFO org.testcontainers.dockerclient.DockerClientProviderStrategy -- Found Docker environment with local Unix socket (unix:///var/run/docker.sock)
+18:46:16.900 [Test worker] INFO org.testcontainers.DockerClientFactory -- Docker host IP address is localhost
+18:46:16.913 [Test worker] INFO org.testcontainers.DockerClientFactory -- Connected to docker: 
+  Server Version: 29.2.1
+  API Version: 1.53
+  Operating System: CachyOS
+  Total Memory: 31926 MB
+18:46:16.971 [Test worker] INFO tc.testcontainers/ryuk:0.13.0 -- Creating container for image: testcontainers/ryuk:0.13.0
+18:46:16.975 [Test worker] INFO org.testcontainers.utility.RegistryAuthLocator -- Failure when attempting to lookup auth config. Please ignore if you don't have images in an authenticated registry. Details: (dockerImageName: testcontainers/ryuk:0.13.0, configFile: /home/seeseemelk/.docker/config.json, configEnv: DOCKER_AUTH_CONFIG). Falling back to docker-java default behaviour. Exception message: Status 404: No config supplied. Checked in order: /home/seeseemelk/.docker/config.json (file not found), DOCKER_AUTH_CONFIG (not set)
+18:46:17.088 [Test worker] INFO tc.testcontainers/ryuk:0.13.0 -- Container testcontainers/ryuk:0.13.0 is starting: 8ab3179a5823876acfce29a7fb3eb9a455b539b939655ec13321dd46ccd1b71c
+18:46:17.277 [Test worker] INFO tc.testcontainers/ryuk:0.13.0 -- Container testcontainers/ryuk:0.13.0 started in PT0.305288262S
+18:46:17.280 [Test worker] INFO org.testcontainers.utility.RyukResourceReaper -- Ryuk started - will monitor and terminate Testcontainers containers on JVM exit
+18:46:17.281 [Test worker] INFO org.testcontainers.DockerClientFactory -- Checking the system...
+18:46:17.281 [Test worker] INFO org.testcontainers.DockerClientFactory -- ✔︎ Docker server version should be at least 1.6.0
+18:46:17.281 [Test worker] INFO tc.postgres:17 -- Creating container for image: postgres:17
+18:46:17.343 [Test worker] INFO tc.postgres:17 -- Container postgres:17 is starting: 5c4b27126282e2b3ddb940c86861e9b08b80d75f1f67f3b061bbec42709d2346
+18:46:19.249 [Test worker] INFO tc.postgres:17 -- Container postgres:17 started in PT1.967966594S
+18:46:19.250 [Test worker] INFO tc.postgres:17 -- Container is started (JDBC URL: jdbc:postgresql://localhost:32809/allowance_planner_test?loggerLevel=OFF)
+
+  .   ____          _            __ _ _
+ /\\ / ___'_ __ _ _(_)_ __  __ _ \ \ \ \
+( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \
+ \\/  ___)| |_)| | | | | || (_| |  ) ) ) )
+  '  |____| .__|_| |_|_| |_\__, | / / / /
+ =========|_|==============|___/=/_/_/_/
+
+ :: Spring Boot ::                (v4.0.3)
+
+2026-02-28T18:46:19.430+01:00  INFO 74623 --- [allowance-planner] [    Test worker] be.seeseepuff.allowanceplanner.ApiTest   : Starting ApiTest using Java 25.0.2 with PID 74623 (started by seeseemelk in /home/seeseemelk/dev/allowance_planner_2000/backend-spring)
+2026-02-28T18:46:19.431+01:00  INFO 74623 --- [allowance-planner] [    Test worker] be.seeseepuff.allowanceplanner.ApiTest   : No active profile set, falling back to 1 default profile: "default"
+2026-02-28T18:46:19.896+01:00  INFO 74623 --- [allowance-planner] [    Test worker] .s.d.r.c.RepositoryConfigurationDelegate : Bootstrapping Spring Data JPA repositories in DEFAULT mode.
+2026-02-28T18:46:19.929+01:00  INFO 74623 --- [allowance-planner] [    Test worker] .s.d.r.c.RepositoryConfigurationDelegate : Finished Spring Data repository scanning in 28 ms. Found 4 JPA repository interfaces.
+2026-02-28T18:46:20.226+01:00  INFO 74623 --- [allowance-planner] [    Test worker] o.s.boot.tomcat.TomcatWebServer          : Tomcat initialized with port 0 (http)
+2026-02-28T18:46:20.237+01:00  INFO 74623 --- [allowance-planner] [    Test worker] o.apache.catalina.core.StandardService   : Starting service [Tomcat]
+2026-02-28T18:46:20.238+01:00  INFO 74623 --- [allowance-planner] [    Test worker] o.apache.catalina.core.StandardEngine    : Starting Servlet engine: [Apache Tomcat/11.0.18]
+2026-02-28T18:46:20.267+01:00  INFO 74623 --- [allowance-planner] [    Test worker] b.w.c.s.WebApplicationContextInitializer : Root WebApplicationContext: initialization completed in 724 ms
+2026-02-28T18:46:20.510+01:00  INFO 74623 --- [allowance-planner] [    Test worker] com.zaxxer.hikari.HikariDataSource       : HikariPool-1 - Starting...
+2026-02-28T18:46:20.601+01:00  INFO 74623 --- [allowance-planner] [    Test worker] com.zaxxer.hikari.pool.HikariPool        : HikariPool-1 - Added connection org.postgresql.jdbc.PgConnection@610d0067
+2026-02-28T18:46:20.602+01:00  INFO 74623 --- [allowance-planner] [    Test worker] com.zaxxer.hikari.HikariDataSource       : HikariPool-1 - Start completed.
+2026-02-28T18:46:20.620+01:00  INFO 74623 --- [allowance-planner] [    Test worker] org.flywaydb.core.FlywayExecutor         : Database: jdbc:postgresql://localhost:32809/allowance_planner_test?loggerLevel=OFF (PostgreSQL 17.9)
+2026-02-28T18:46:20.642+01:00  INFO 74623 --- [allowance-planner] [    Test worker] o.f.c.i.s.JdbcTableSchemaHistory         : Schema history table "public"."flyway_schema_history" does not exist yet
+2026-02-28T18:46:20.644+01:00  INFO 74623 --- [allowance-planner] [    Test worker] o.f.core.internal.command.DbValidate     : Successfully validated 1 migration (execution time 00:00.009s)
+2026-02-28T18:46:20.660+01:00  INFO 74623 --- [allowance-planner] [    Test worker] o.f.c.i.s.JdbcTableSchemaHistory         : Creating Schema History table "public"."flyway_schema_history" ...
+2026-02-28T18:46:20.694+01:00  INFO 74623 --- [allowance-planner] [    Test worker] o.f.core.internal.command.DbMigrate      : Current version of schema "public": << Empty Schema >>
+2026-02-28T18:46:20.703+01:00  INFO 74623 --- [allowance-planner] [    Test worker] o.f.core.internal.command.DbMigrate      : Migrating schema "public" to version "1 - initial"
+2026-02-28T18:46:20.718+01:00  INFO 74623 --- [allowance-planner] [    Test worker] o.f.core.internal.command.DbMigrate      : Successfully applied 1 migration to schema "public", now at version v1 (execution time 00:00.007s)
+2026-02-28T18:46:20.799+01:00  INFO 74623 --- [allowance-planner] [    Test worker] org.hibernate.orm.jpa                    : HHH008540: Processing PersistenceUnitInfo [name: default]
+2026-02-28T18:46:20.827+01:00  INFO 74623 --- [allowance-planner] [    Test worker] org.hibernate.orm.core                   : HHH000001: Hibernate ORM core version 7.2.4.Final
+2026-02-28T18:46:21.053+01:00  INFO 74623 --- [allowance-planner] [    Test worker] o.s.o.j.p.SpringPersistenceUnitInfo      : No LoadTimeWeaver setup: ignoring JPA class transformer
+2026-02-28T18:46:21.098+01:00  INFO 74623 --- [allowance-planner] [    Test worker] org.hibernate.orm.connections.pooling    : HHH10001005: Database info:
+	Database JDBC URL [jdbc:postgresql://localhost:32809/allowance_planner_test?loggerLevel=OFF]
+	Database driver: PostgreSQL JDBC Driver
+	Database dialect: PostgreSQLDialect
+	Database version: 17.9
+	Default catalog/schema: allowance_planner_test/public
+	Autocommit mode: undefined/unknown
+	Isolation level: READ_COMMITTED [default READ_COMMITTED]
+	JDBC fetch size: none
+	Pool: DataSourceConnectionProvider
+	Minimum pool size: undefined/unknown
+	Maximum pool size: undefined/unknown
+2026-02-28T18:46:21.551+01:00  INFO 74623 --- [allowance-planner] [    Test worker] org.hibernate.orm.core                   : HHH000489: No JTA platform available (set 'hibernate.transaction.jta.platform' to enable JTA platform integration)
+2026-02-28T18:46:21.572+01:00  INFO 74623 --- [allowance-planner] [    Test worker] j.LocalContainerEntityManagerFactoryBean : Initialized JPA EntityManagerFactory for persistence unit 'default'
+2026-02-28T18:46:21.622+01:00  INFO 74623 --- [allowance-planner] [    Test worker] o.s.d.j.r.query.QueryEnhancerFactories   : Hibernate is in classpath; If applicable, HQL parser will be used.
+2026-02-28T18:46:22.181+01:00  INFO 74623 --- [allowance-planner] [    Test worker] o.s.b.w.a.WelcomePageHandlerMapping      : Adding welcome page template: index
+2026-02-28T18:46:22.422+01:00  INFO 74623 --- [allowance-planner] [    Test worker] o.s.boot.tomcat.TomcatWebServer          : Tomcat started on port 43703 (http) with context path '/'
+2026-02-28T18:46:22.427+01:00  INFO 74623 --- [allowance-planner] [    Test worker] be.seeseepuff.allowanceplanner.ApiTest   : Started ApiTest in 3.154 seconds (process running for 6.592)
+
+ +
+
+
+
+
+ +
+ + diff --git a/backend-spring/build/reports/tests/test/be.seeseepuff.allowanceplanner.ApiTest/postHistory().html b/backend-spring/build/reports/tests/test/be.seeseepuff.allowanceplanner.ApiTest/postHistory().html new file mode 100644 index 0000000..d7c9e6e --- /dev/null +++ b/backend-spring/build/reports/tests/test/be.seeseepuff.allowanceplanner.ApiTest/postHistory().html @@ -0,0 +1,116 @@ + + + + + +Test results - postHistory() + + + + + +
+ +
+ +
+

Gradle Test Run :test

+

postHistory()

+
+ +
+

summary

+
+
+ + + + + +
+
+ + + + + + + +
+
+
1
+

tests

+
+
+
+
0
+

failures

+
+
+
+
0
+

skipped

+
+
+
+
0.066s
+

duration

+
+
+
+
+
+
100%
+

successful

+
+
+
+
+
+
+

standard output

+ +
2026-02-28T18:46:27.189+01:00  INFO 74623 --- [allowance-planner] [    Test worker] o.f.c.i.command.clean.CleanExecutor      : Successfully dropped pre-schema database level objects (execution time 00:00.000s)
+2026-02-28T18:46:27.193+01:00  INFO 74623 --- [allowance-planner] [    Test worker] o.f.c.i.command.clean.CleanExecutor      : Successfully cleaned schema "public" (execution time 00:00.003s)
+2026-02-28T18:46:27.194+01:00  INFO 74623 --- [allowance-planner] [    Test worker] o.f.c.i.command.clean.CleanExecutor      : Successfully cleaned schema "public" (execution time 00:00.001s)
+2026-02-28T18:46:27.194+01:00  INFO 74623 --- [allowance-planner] [    Test worker] o.f.c.i.command.clean.CleanExecutor      : Successfully dropped post-schema database level objects (execution time 00:00.000s)
+2026-02-28T18:46:27.198+01:00  INFO 74623 --- [allowance-planner] [    Test worker] o.f.c.i.s.JdbcTableSchemaHistory         : Schema history table "public"."flyway_schema_history" does not exist yet
+2026-02-28T18:46:27.198+01:00  INFO 74623 --- [allowance-planner] [    Test worker] o.f.core.internal.command.DbValidate     : Successfully validated 1 migration (execution time 00:00.000s)
+2026-02-28T18:46:27.199+01:00  INFO 74623 --- [allowance-planner] [    Test worker] o.f.c.i.s.JdbcTableSchemaHistory         : Creating Schema History table "public"."flyway_schema_history" ...
+2026-02-28T18:46:27.202+01:00  INFO 74623 --- [allowance-planner] [    Test worker] o.f.core.internal.command.DbMigrate      : Current version of schema "public": << Empty Schema >>
+2026-02-28T18:46:27.202+01:00  INFO 74623 --- [allowance-planner] [    Test worker] o.f.core.internal.command.DbMigrate      : Migrating schema "public" to version "1 - initial"
+2026-02-28T18:46:27.208+01:00  INFO 74623 --- [allowance-planner] [    Test worker] o.f.core.internal.command.DbMigrate      : Successfully applied 1 migration to schema "public", now at version v1 (execution time 00:00.003s)
+
+ +
+
+
+
+
+ +
+ + diff --git a/backend-spring/build/reports/tests/test/be.seeseepuff.allowanceplanner.ApiTest/postHistoryInvalidDescription().html b/backend-spring/build/reports/tests/test/be.seeseepuff.allowanceplanner.ApiTest/postHistoryInvalidDescription().html new file mode 100644 index 0000000..d07cc3b --- /dev/null +++ b/backend-spring/build/reports/tests/test/be.seeseepuff.allowanceplanner.ApiTest/postHistoryInvalidDescription().html @@ -0,0 +1,116 @@ + + + + + +Test results - postHistoryInvalidDescription() + + + + + +
+ +
+ +
+

Gradle Test Run :test

+

postHistoryInvalidDescription()

+
+ +
+

summary

+
+
+ + + + + +
+
+ + + + + + + +
+
+
1
+

tests

+
+
+
+
0
+

failures

+
+
+
+
0
+

skipped

+
+
+
+
0.107s
+

duration

+
+
+
+
+
+
100%
+

successful

+
+
+
+
+
+
+

standard output

+ +
2026-02-28T18:46:23.780+01:00  INFO 74623 --- [allowance-planner] [    Test worker] o.f.c.i.command.clean.CleanExecutor      : Successfully dropped pre-schema database level objects (execution time 00:00.000s)
+2026-02-28T18:46:23.789+01:00  INFO 74623 --- [allowance-planner] [    Test worker] o.f.c.i.command.clean.CleanExecutor      : Successfully cleaned schema "public" (execution time 00:00.008s)
+2026-02-28T18:46:23.793+01:00  INFO 74623 --- [allowance-planner] [    Test worker] o.f.c.i.command.clean.CleanExecutor      : Successfully cleaned schema "public" (execution time 00:00.003s)
+2026-02-28T18:46:23.793+01:00  INFO 74623 --- [allowance-planner] [    Test worker] o.f.c.i.command.clean.CleanExecutor      : Successfully dropped post-schema database level objects (execution time 00:00.000s)
+2026-02-28T18:46:23.798+01:00  INFO 74623 --- [allowance-planner] [    Test worker] o.f.c.i.s.JdbcTableSchemaHistory         : Schema history table "public"."flyway_schema_history" does not exist yet
+2026-02-28T18:46:23.799+01:00  INFO 74623 --- [allowance-planner] [    Test worker] o.f.core.internal.command.DbValidate     : Successfully validated 1 migration (execution time 00:00.000s)
+2026-02-28T18:46:23.800+01:00  INFO 74623 --- [allowance-planner] [    Test worker] o.f.c.i.s.JdbcTableSchemaHistory         : Creating Schema History table "public"."flyway_schema_history" ...
+2026-02-28T18:46:23.805+01:00  INFO 74623 --- [allowance-planner] [    Test worker] o.f.core.internal.command.DbMigrate      : Current version of schema "public": << Empty Schema >>
+2026-02-28T18:46:23.806+01:00  INFO 74623 --- [allowance-planner] [    Test worker] o.f.core.internal.command.DbMigrate      : Migrating schema "public" to version "1 - initial"
+2026-02-28T18:46:23.814+01:00  INFO 74623 --- [allowance-planner] [    Test worker] o.f.core.internal.command.DbMigrate      : Successfully applied 1 migration to schema "public", now at version v1 (execution time 00:00.005s)
+
+ +
+
+
+
+
+ +
+ + diff --git a/backend-spring/build/reports/tests/test/be.seeseepuff.allowanceplanner.ApiTest/postHistoryInvalidUserId().html b/backend-spring/build/reports/tests/test/be.seeseepuff.allowanceplanner.ApiTest/postHistoryInvalidUserId().html new file mode 100644 index 0000000..d712b11 --- /dev/null +++ b/backend-spring/build/reports/tests/test/be.seeseepuff.allowanceplanner.ApiTest/postHistoryInvalidUserId().html @@ -0,0 +1,116 @@ + + + + + +Test results - postHistoryInvalidUserId() + + + + + +
+ +
+ +
+

Gradle Test Run :test

+

postHistoryInvalidUserId()

+
+ +
+

summary

+
+
+ + + + + +
+
+ + + + + + + +
+
+
1
+

tests

+
+
+
+
0
+

failures

+
+
+
+
0
+

skipped

+
+
+
+
0.038s
+

duration

+
+
+
+
+
+
100%
+

successful

+
+
+
+
+
+
+

standard output

+ +
2026-02-28T18:46:27.415+01:00  INFO 74623 --- [allowance-planner] [    Test worker] o.f.c.i.command.clean.CleanExecutor      : Successfully dropped pre-schema database level objects (execution time 00:00.000s)
+2026-02-28T18:46:27.418+01:00  INFO 74623 --- [allowance-planner] [    Test worker] o.f.c.i.command.clean.CleanExecutor      : Successfully cleaned schema "public" (execution time 00:00.003s)
+2026-02-28T18:46:27.419+01:00  INFO 74623 --- [allowance-planner] [    Test worker] o.f.c.i.command.clean.CleanExecutor      : Successfully cleaned schema "public" (execution time 00:00.000s)
+2026-02-28T18:46:27.419+01:00  INFO 74623 --- [allowance-planner] [    Test worker] o.f.c.i.command.clean.CleanExecutor      : Successfully dropped post-schema database level objects (execution time 00:00.000s)
+2026-02-28T18:46:27.423+01:00  INFO 74623 --- [allowance-planner] [    Test worker] o.f.c.i.s.JdbcTableSchemaHistory         : Schema history table "public"."flyway_schema_history" does not exist yet
+2026-02-28T18:46:27.424+01:00  INFO 74623 --- [allowance-planner] [    Test worker] o.f.core.internal.command.DbValidate     : Successfully validated 1 migration (execution time 00:00.001s)
+2026-02-28T18:46:27.424+01:00  INFO 74623 --- [allowance-planner] [    Test worker] o.f.c.i.s.JdbcTableSchemaHistory         : Creating Schema History table "public"."flyway_schema_history" ...
+2026-02-28T18:46:27.428+01:00  INFO 74623 --- [allowance-planner] [    Test worker] o.f.core.internal.command.DbMigrate      : Current version of schema "public": << Empty Schema >>
+2026-02-28T18:46:27.429+01:00  INFO 74623 --- [allowance-planner] [    Test worker] o.f.core.internal.command.DbMigrate      : Migrating schema "public" to version "1 - initial"
+2026-02-28T18:46:27.438+01:00  INFO 74623 --- [allowance-planner] [    Test worker] o.f.core.internal.command.DbMigrate      : Successfully applied 1 migration to schema "public", now at version v1 (execution time 00:00.004s)
+
+ +
+
+
+
+
+ +
+ + diff --git a/backend-spring/build/reports/tests/test/be.seeseepuff.allowanceplanner.ApiTest/putAllowanceById().html b/backend-spring/build/reports/tests/test/be.seeseepuff.allowanceplanner.ApiTest/putAllowanceById().html new file mode 100644 index 0000000..0156251 --- /dev/null +++ b/backend-spring/build/reports/tests/test/be.seeseepuff.allowanceplanner.ApiTest/putAllowanceById().html @@ -0,0 +1,116 @@ + + + + + +Test results - putAllowanceById() + + + + + +
+ +
+ +
+

Gradle Test Run :test

+

putAllowanceById()

+
+ +
+

summary

+
+
+ + + + + +
+
+ + + + + + + +
+
+
1
+

tests

+
+
+
+
0
+

failures

+
+
+
+
0
+

skipped

+
+
+
+
0.060s
+

duration

+
+
+
+
+
+
100%
+

successful

+
+
+
+
+
+
+

standard output

+ +
2026-02-28T18:46:27.126+01:00  INFO 74623 --- [allowance-planner] [    Test worker] o.f.c.i.command.clean.CleanExecutor      : Successfully dropped pre-schema database level objects (execution time 00:00.000s)
+2026-02-28T18:46:27.130+01:00  INFO 74623 --- [allowance-planner] [    Test worker] o.f.c.i.command.clean.CleanExecutor      : Successfully cleaned schema "public" (execution time 00:00.003s)
+2026-02-28T18:46:27.132+01:00  INFO 74623 --- [allowance-planner] [    Test worker] o.f.c.i.command.clean.CleanExecutor      : Successfully cleaned schema "public" (execution time 00:00.001s)
+2026-02-28T18:46:27.132+01:00  INFO 74623 --- [allowance-planner] [    Test worker] o.f.c.i.command.clean.CleanExecutor      : Successfully dropped post-schema database level objects (execution time 00:00.000s)
+2026-02-28T18:46:27.134+01:00  INFO 74623 --- [allowance-planner] [    Test worker] o.f.c.i.s.JdbcTableSchemaHistory         : Schema history table "public"."flyway_schema_history" does not exist yet
+2026-02-28T18:46:27.134+01:00  INFO 74623 --- [allowance-planner] [    Test worker] o.f.core.internal.command.DbValidate     : Successfully validated 1 migration (execution time 00:00.000s)
+2026-02-28T18:46:27.135+01:00  INFO 74623 --- [allowance-planner] [    Test worker] o.f.c.i.s.JdbcTableSchemaHistory         : Creating Schema History table "public"."flyway_schema_history" ...
+2026-02-28T18:46:27.138+01:00  INFO 74623 --- [allowance-planner] [    Test worker] o.f.core.internal.command.DbMigrate      : Current version of schema "public": << Empty Schema >>
+2026-02-28T18:46:27.139+01:00  INFO 74623 --- [allowance-planner] [    Test worker] o.f.core.internal.command.DbMigrate      : Migrating schema "public" to version "1 - initial"
+2026-02-28T18:46:27.142+01:00  INFO 74623 --- [allowance-planner] [    Test worker] o.f.core.internal.command.DbMigrate      : Successfully applied 1 migration to schema "public", now at version v1 (execution time 00:00.002s)
+
+ +
+
+
+
+
+ +
+ + diff --git a/backend-spring/build/reports/tests/test/be.seeseepuff.allowanceplanner.ApiTest/putBulkAllowance().html b/backend-spring/build/reports/tests/test/be.seeseepuff.allowanceplanner.ApiTest/putBulkAllowance().html new file mode 100644 index 0000000..012d643 --- /dev/null +++ b/backend-spring/build/reports/tests/test/be.seeseepuff.allowanceplanner.ApiTest/putBulkAllowance().html @@ -0,0 +1,116 @@ + + + + + +Test results - putBulkAllowance() + + + + + +
+ +
+ +
+

Gradle Test Run :test

+

putBulkAllowance()

+
+ +
+

summary

+
+
+ + + + + +
+
+ + + + + + + +
+
+
1
+

tests

+
+
+
+
0
+

failures

+
+
+
+
0
+

skipped

+
+
+
+
0.253s
+

duration

+
+
+
+
+
+
100%
+

successful

+
+
+
+
+
+
+

standard output

+ +
2026-02-28T18:46:23.885+01:00  INFO 74623 --- [allowance-planner] [    Test worker] o.f.c.i.command.clean.CleanExecutor      : Successfully dropped pre-schema database level objects (execution time 00:00.000s)
+2026-02-28T18:46:23.892+01:00  INFO 74623 --- [allowance-planner] [    Test worker] o.f.c.i.command.clean.CleanExecutor      : Successfully cleaned schema "public" (execution time 00:00.006s)
+2026-02-28T18:46:23.895+01:00  INFO 74623 --- [allowance-planner] [    Test worker] o.f.c.i.command.clean.CleanExecutor      : Successfully cleaned schema "public" (execution time 00:00.002s)
+2026-02-28T18:46:23.895+01:00  INFO 74623 --- [allowance-planner] [    Test worker] o.f.c.i.command.clean.CleanExecutor      : Successfully dropped post-schema database level objects (execution time 00:00.000s)
+2026-02-28T18:46:23.900+01:00  INFO 74623 --- [allowance-planner] [    Test worker] o.f.c.i.s.JdbcTableSchemaHistory         : Schema history table "public"."flyway_schema_history" does not exist yet
+2026-02-28T18:46:23.900+01:00  INFO 74623 --- [allowance-planner] [    Test worker] o.f.core.internal.command.DbValidate     : Successfully validated 1 migration (execution time 00:00.001s)
+2026-02-28T18:46:23.903+01:00  INFO 74623 --- [allowance-planner] [    Test worker] o.f.c.i.s.JdbcTableSchemaHistory         : Creating Schema History table "public"."flyway_schema_history" ...
+2026-02-28T18:46:23.907+01:00  INFO 74623 --- [allowance-planner] [    Test worker] o.f.core.internal.command.DbMigrate      : Current version of schema "public": << Empty Schema >>
+2026-02-28T18:46:23.910+01:00  INFO 74623 --- [allowance-planner] [    Test worker] o.f.core.internal.command.DbMigrate      : Migrating schema "public" to version "1 - initial"
+2026-02-28T18:46:23.915+01:00  INFO 74623 --- [allowance-planner] [    Test worker] o.f.core.internal.command.DbMigrate      : Successfully applied 1 migration to schema "public", now at version v1 (execution time 00:00.004s)
+
+ +
+
+
+
+
+ +
+ + diff --git a/backend-spring/build/reports/tests/test/be.seeseepuff.allowanceplanner.ApiTest/putTaskInvalidTaskId().html b/backend-spring/build/reports/tests/test/be.seeseepuff.allowanceplanner.ApiTest/putTaskInvalidTaskId().html new file mode 100644 index 0000000..ef3345b --- /dev/null +++ b/backend-spring/build/reports/tests/test/be.seeseepuff.allowanceplanner.ApiTest/putTaskInvalidTaskId().html @@ -0,0 +1,116 @@ + + + + + +Test results - putTaskInvalidTaskId() + + + + + +
+ +
+ +
+

Gradle Test Run :test

+

putTaskInvalidTaskId()

+
+ +
+

summary

+
+
+ + + + + +
+
+ + + + + + + +
+
+
1
+

tests

+
+
+
+
0
+

failures

+
+
+
+
0
+

skipped

+
+
+
+
0.056s
+

duration

+
+
+
+
+
+
100%
+

successful

+
+
+
+
+
+
+

standard output

+ +
2026-02-28T18:46:25.671+01:00  INFO 74623 --- [allowance-planner] [    Test worker] o.f.c.i.command.clean.CleanExecutor      : Successfully dropped pre-schema database level objects (execution time 00:00.000s)
+2026-02-28T18:46:25.676+01:00  INFO 74623 --- [allowance-planner] [    Test worker] o.f.c.i.command.clean.CleanExecutor      : Successfully cleaned schema "public" (execution time 00:00.004s)
+2026-02-28T18:46:25.678+01:00  INFO 74623 --- [allowance-planner] [    Test worker] o.f.c.i.command.clean.CleanExecutor      : Successfully cleaned schema "public" (execution time 00:00.001s)
+2026-02-28T18:46:25.678+01:00  INFO 74623 --- [allowance-planner] [    Test worker] o.f.c.i.command.clean.CleanExecutor      : Successfully dropped post-schema database level objects (execution time 00:00.000s)
+2026-02-28T18:46:25.683+01:00  INFO 74623 --- [allowance-planner] [    Test worker] o.f.c.i.s.JdbcTableSchemaHistory         : Schema history table "public"."flyway_schema_history" does not exist yet
+2026-02-28T18:46:25.684+01:00  INFO 74623 --- [allowance-planner] [    Test worker] o.f.core.internal.command.DbValidate     : Successfully validated 1 migration (execution time 00:00.001s)
+2026-02-28T18:46:25.685+01:00  INFO 74623 --- [allowance-planner] [    Test worker] o.f.c.i.s.JdbcTableSchemaHistory         : Creating Schema History table "public"."flyway_schema_history" ...
+2026-02-28T18:46:25.689+01:00  INFO 74623 --- [allowance-planner] [    Test worker] o.f.core.internal.command.DbMigrate      : Current version of schema "public": << Empty Schema >>
+2026-02-28T18:46:25.690+01:00  INFO 74623 --- [allowance-planner] [    Test worker] o.f.core.internal.command.DbMigrate      : Migrating schema "public" to version "1 - initial"
+2026-02-28T18:46:25.694+01:00  INFO 74623 --- [allowance-planner] [    Test worker] o.f.core.internal.command.DbMigrate      : Successfully applied 1 migration to schema "public", now at version v1 (execution time 00:00.003s)
+
+ +
+
+
+
+
+ +
+ + diff --git a/backend-spring/build/reports/tests/test/be.seeseepuff.allowanceplanner.ApiTest/putTaskModifiesTask().html b/backend-spring/build/reports/tests/test/be.seeseepuff.allowanceplanner.ApiTest/putTaskModifiesTask().html new file mode 100644 index 0000000..8df776d --- /dev/null +++ b/backend-spring/build/reports/tests/test/be.seeseepuff.allowanceplanner.ApiTest/putTaskModifiesTask().html @@ -0,0 +1,116 @@ + + + + + +Test results - putTaskModifiesTask() + + + + + +
+ +
+ +
+

Gradle Test Run :test

+

putTaskModifiesTask()

+
+ +
+

summary

+
+
+ + + + + +
+
+ + + + + + + +
+
+
1
+

tests

+
+
+
+
0
+

failures

+
+
+
+
0
+

skipped

+
+
+
+
0.066s
+

duration

+
+
+
+
+
+
100%
+

successful

+
+
+
+
+
+
+

standard output

+ +
2026-02-28T18:46:27.763+01:00  INFO 74623 --- [allowance-planner] [    Test worker] o.f.c.i.command.clean.CleanExecutor      : Successfully dropped pre-schema database level objects (execution time 00:00.000s)
+2026-02-28T18:46:27.766+01:00  INFO 74623 --- [allowance-planner] [    Test worker] o.f.c.i.command.clean.CleanExecutor      : Successfully cleaned schema "public" (execution time 00:00.003s)
+2026-02-28T18:46:27.768+01:00  INFO 74623 --- [allowance-planner] [    Test worker] o.f.c.i.command.clean.CleanExecutor      : Successfully cleaned schema "public" (execution time 00:00.001s)
+2026-02-28T18:46:27.768+01:00  INFO 74623 --- [allowance-planner] [    Test worker] o.f.c.i.command.clean.CleanExecutor      : Successfully dropped post-schema database level objects (execution time 00:00.000s)
+2026-02-28T18:46:27.770+01:00  INFO 74623 --- [allowance-planner] [    Test worker] o.f.c.i.s.JdbcTableSchemaHistory         : Schema history table "public"."flyway_schema_history" does not exist yet
+2026-02-28T18:46:27.770+01:00  INFO 74623 --- [allowance-planner] [    Test worker] o.f.core.internal.command.DbValidate     : Successfully validated 1 migration (execution time 00:00.000s)
+2026-02-28T18:46:27.771+01:00  INFO 74623 --- [allowance-planner] [    Test worker] o.f.c.i.s.JdbcTableSchemaHistory         : Creating Schema History table "public"."flyway_schema_history" ...
+2026-02-28T18:46:27.774+01:00  INFO 74623 --- [allowance-planner] [    Test worker] o.f.core.internal.command.DbMigrate      : Current version of schema "public": << Empty Schema >>
+2026-02-28T18:46:27.774+01:00  INFO 74623 --- [allowance-planner] [    Test worker] o.f.core.internal.command.DbMigrate      : Migrating schema "public" to version "1 - initial"
+2026-02-28T18:46:27.779+01:00  INFO 74623 --- [allowance-planner] [    Test worker] o.f.core.internal.command.DbMigrate      : Successfully applied 1 migration to schema "public", now at version v1 (execution time 00:00.003s)
+
+ +
+
+
+
+
+ +
+ + diff --git a/backend-spring/build/reports/tests/test/be.seeseepuff.allowanceplanner.ApiTest/subtractAllowanceIdZero().html b/backend-spring/build/reports/tests/test/be.seeseepuff.allowanceplanner.ApiTest/subtractAllowanceIdZero().html new file mode 100644 index 0000000..33dd512 --- /dev/null +++ b/backend-spring/build/reports/tests/test/be.seeseepuff.allowanceplanner.ApiTest/subtractAllowanceIdZero().html @@ -0,0 +1,116 @@ + + + + + +Test results - subtractAllowanceIdZero() + + + + + +
+ +
+ +
+

Gradle Test Run :test

+

subtractAllowanceIdZero()

+
+ +
+

summary

+
+
+ + + + + +
+
+ + + + + + + +
+
+
1
+

tests

+
+
+
+
0
+

failures

+
+
+
+
0
+

skipped

+
+
+
+
0.109s
+

duration

+
+
+
+
+
+
100%
+

successful

+
+
+
+
+
+
+

standard output

+ +
2026-02-28T18:46:26.292+01:00  INFO 74623 --- [allowance-planner] [    Test worker] o.f.c.i.command.clean.CleanExecutor      : Successfully dropped pre-schema database level objects (execution time 00:00.000s)
+2026-02-28T18:46:26.295+01:00  INFO 74623 --- [allowance-planner] [    Test worker] o.f.c.i.command.clean.CleanExecutor      : Successfully cleaned schema "public" (execution time 00:00.002s)
+2026-02-28T18:46:26.296+01:00  INFO 74623 --- [allowance-planner] [    Test worker] o.f.c.i.command.clean.CleanExecutor      : Successfully cleaned schema "public" (execution time 00:00.001s)
+2026-02-28T18:46:26.296+01:00  INFO 74623 --- [allowance-planner] [    Test worker] o.f.c.i.command.clean.CleanExecutor      : Successfully dropped post-schema database level objects (execution time 00:00.000s)
+2026-02-28T18:46:26.298+01:00  INFO 74623 --- [allowance-planner] [    Test worker] o.f.c.i.s.JdbcTableSchemaHistory         : Schema history table "public"."flyway_schema_history" does not exist yet
+2026-02-28T18:46:26.299+01:00  INFO 74623 --- [allowance-planner] [    Test worker] o.f.core.internal.command.DbValidate     : Successfully validated 1 migration (execution time 00:00.000s)
+2026-02-28T18:46:26.300+01:00  INFO 74623 --- [allowance-planner] [    Test worker] o.f.c.i.s.JdbcTableSchemaHistory         : Creating Schema History table "public"."flyway_schema_history" ...
+2026-02-28T18:46:26.302+01:00  INFO 74623 --- [allowance-planner] [    Test worker] o.f.core.internal.command.DbMigrate      : Current version of schema "public": << Empty Schema >>
+2026-02-28T18:46:26.303+01:00  INFO 74623 --- [allowance-planner] [    Test worker] o.f.core.internal.command.DbMigrate      : Migrating schema "public" to version "1 - initial"
+2026-02-28T18:46:26.310+01:00  INFO 74623 --- [allowance-planner] [    Test worker] o.f.core.internal.command.DbMigrate      : Successfully applied 1 migration to schema "public", now at version v1 (execution time 00:00.004s)
+
+ +
+
+
+
+
+ +
+ + diff --git a/backend-spring/build/reports/tests/test/be.seeseepuff.allowanceplanner.ApiTest/subtractAllowanceSimple().html b/backend-spring/build/reports/tests/test/be.seeseepuff.allowanceplanner.ApiTest/subtractAllowanceSimple().html new file mode 100644 index 0000000..80e9dd8 --- /dev/null +++ b/backend-spring/build/reports/tests/test/be.seeseepuff.allowanceplanner.ApiTest/subtractAllowanceSimple().html @@ -0,0 +1,116 @@ + + + + + +Test results - subtractAllowanceSimple() + + + + + +
+ +
+ +
+

Gradle Test Run :test

+

subtractAllowanceSimple()

+
+ +
+

summary

+
+
+ + + + + +
+
+ + + + + + + +
+
+
1
+

tests

+
+
+
+
0
+

failures

+
+
+
+
0
+

skipped

+
+
+
+
0.112s
+

duration

+
+
+
+
+
+
100%
+

successful

+
+
+
+
+
+
+

standard output

+ +
2026-02-28T18:46:26.645+01:00  INFO 74623 --- [allowance-planner] [    Test worker] o.f.c.i.command.clean.CleanExecutor      : Successfully dropped pre-schema database level objects (execution time 00:00.000s)
+2026-02-28T18:46:26.651+01:00  INFO 74623 --- [allowance-planner] [    Test worker] o.f.c.i.command.clean.CleanExecutor      : Successfully cleaned schema "public" (execution time 00:00.005s)
+2026-02-28T18:46:26.653+01:00  INFO 74623 --- [allowance-planner] [    Test worker] o.f.c.i.command.clean.CleanExecutor      : Successfully cleaned schema "public" (execution time 00:00.001s)
+2026-02-28T18:46:26.653+01:00  INFO 74623 --- [allowance-planner] [    Test worker] o.f.c.i.command.clean.CleanExecutor      : Successfully dropped post-schema database level objects (execution time 00:00.000s)
+2026-02-28T18:46:26.656+01:00  INFO 74623 --- [allowance-planner] [    Test worker] o.f.c.i.s.JdbcTableSchemaHistory         : Schema history table "public"."flyway_schema_history" does not exist yet
+2026-02-28T18:46:26.656+01:00  INFO 74623 --- [allowance-planner] [    Test worker] o.f.core.internal.command.DbValidate     : Successfully validated 1 migration (execution time 00:00.000s)
+2026-02-28T18:46:26.657+01:00  INFO 74623 --- [allowance-planner] [    Test worker] o.f.c.i.s.JdbcTableSchemaHistory         : Creating Schema History table "public"."flyway_schema_history" ...
+2026-02-28T18:46:26.659+01:00  INFO 74623 --- [allowance-planner] [    Test worker] o.f.core.internal.command.DbMigrate      : Current version of schema "public": << Empty Schema >>
+2026-02-28T18:46:26.660+01:00  INFO 74623 --- [allowance-planner] [    Test worker] o.f.core.internal.command.DbMigrate      : Migrating schema "public" to version "1 - initial"
+2026-02-28T18:46:26.664+01:00  INFO 74623 --- [allowance-planner] [    Test worker] o.f.core.internal.command.DbMigrate      : Successfully applied 1 migration to schema "public", now at version v1 (execution time 00:00.003s)
+
+ +
+
+
+
+
+ +
+ + diff --git a/backend-spring/build/reports/tests/test/be.seeseepuff.allowanceplanner.ApiTest/transferCapsAtTarget().html b/backend-spring/build/reports/tests/test/be.seeseepuff.allowanceplanner.ApiTest/transferCapsAtTarget().html new file mode 100644 index 0000000..ee41722 --- /dev/null +++ b/backend-spring/build/reports/tests/test/be.seeseepuff.allowanceplanner.ApiTest/transferCapsAtTarget().html @@ -0,0 +1,116 @@ + + + + + +Test results - transferCapsAtTarget() + + + + + +
+ +
+ +
+

Gradle Test Run :test

+

transferCapsAtTarget()

+
+ +
+

summary

+
+
+ + + + + +
+
+ + + + + + + +
+
+
1
+

tests

+
+
+
+
0
+

failures

+
+
+
+
0
+

skipped

+
+
+
+
0.098s
+

duration

+
+
+
+
+
+
100%
+

successful

+
+
+
+
+
+
+

standard output

+ +
2026-02-28T18:46:25.405+01:00  INFO 74623 --- [allowance-planner] [    Test worker] o.f.c.i.command.clean.CleanExecutor      : Successfully dropped pre-schema database level objects (execution time 00:00.000s)
+2026-02-28T18:46:25.409+01:00  INFO 74623 --- [allowance-planner] [    Test worker] o.f.c.i.command.clean.CleanExecutor      : Successfully cleaned schema "public" (execution time 00:00.003s)
+2026-02-28T18:46:25.410+01:00  INFO 74623 --- [allowance-planner] [    Test worker] o.f.c.i.command.clean.CleanExecutor      : Successfully cleaned schema "public" (execution time 00:00.001s)
+2026-02-28T18:46:25.410+01:00  INFO 74623 --- [allowance-planner] [    Test worker] o.f.c.i.command.clean.CleanExecutor      : Successfully dropped post-schema database level objects (execution time 00:00.000s)
+2026-02-28T18:46:25.414+01:00  INFO 74623 --- [allowance-planner] [    Test worker] o.f.c.i.s.JdbcTableSchemaHistory         : Schema history table "public"."flyway_schema_history" does not exist yet
+2026-02-28T18:46:25.414+01:00  INFO 74623 --- [allowance-planner] [    Test worker] o.f.core.internal.command.DbValidate     : Successfully validated 1 migration (execution time 00:00.000s)
+2026-02-28T18:46:25.415+01:00  INFO 74623 --- [allowance-planner] [    Test worker] o.f.c.i.s.JdbcTableSchemaHistory         : Creating Schema History table "public"."flyway_schema_history" ...
+2026-02-28T18:46:25.417+01:00  INFO 74623 --- [allowance-planner] [    Test worker] o.f.core.internal.command.DbMigrate      : Current version of schema "public": << Empty Schema >>
+2026-02-28T18:46:25.418+01:00  INFO 74623 --- [allowance-planner] [    Test worker] o.f.core.internal.command.DbMigrate      : Migrating schema "public" to version "1 - initial"
+2026-02-28T18:46:25.422+01:00  INFO 74623 --- [allowance-planner] [    Test worker] o.f.core.internal.command.DbMigrate      : Successfully applied 1 migration to schema "public", now at version v1 (execution time 00:00.002s)
+
+ +
+
+
+
+
+ +
+ + diff --git a/backend-spring/build/reports/tests/test/be.seeseepuff.allowanceplanner.ApiTest/transferDifferentUsersFails().html b/backend-spring/build/reports/tests/test/be.seeseepuff.allowanceplanner.ApiTest/transferDifferentUsersFails().html new file mode 100644 index 0000000..febc42f --- /dev/null +++ b/backend-spring/build/reports/tests/test/be.seeseepuff.allowanceplanner.ApiTest/transferDifferentUsersFails().html @@ -0,0 +1,116 @@ + + + + + +Test results - transferDifferentUsersFails() + + + + + +
+ +
+ +
+

Gradle Test Run :test

+

transferDifferentUsersFails()

+
+ +
+

summary

+
+
+ + + + + +
+
+ + + + + + + +
+
+
1
+

tests

+
+
+
+
0
+

failures

+
+
+
+
0
+

skipped

+
+
+
+
0.089s
+

duration

+
+
+
+
+
+
100%
+

successful

+
+
+
+
+
+
+

standard output

+ +
2026-02-28T18:46:27.452+01:00  INFO 74623 --- [allowance-planner] [    Test worker] o.f.c.i.command.clean.CleanExecutor      : Successfully dropped pre-schema database level objects (execution time 00:00.000s)
+2026-02-28T18:46:27.455+01:00  INFO 74623 --- [allowance-planner] [    Test worker] o.f.c.i.command.clean.CleanExecutor      : Successfully cleaned schema "public" (execution time 00:00.002s)
+2026-02-28T18:46:27.456+01:00  INFO 74623 --- [allowance-planner] [    Test worker] o.f.c.i.command.clean.CleanExecutor      : Successfully cleaned schema "public" (execution time 00:00.000s)
+2026-02-28T18:46:27.456+01:00  INFO 74623 --- [allowance-planner] [    Test worker] o.f.c.i.command.clean.CleanExecutor      : Successfully dropped post-schema database level objects (execution time 00:00.000s)
+2026-02-28T18:46:27.460+01:00  INFO 74623 --- [allowance-planner] [    Test worker] o.f.c.i.s.JdbcTableSchemaHistory         : Schema history table "public"."flyway_schema_history" does not exist yet
+2026-02-28T18:46:27.460+01:00  INFO 74623 --- [allowance-planner] [    Test worker] o.f.core.internal.command.DbValidate     : Successfully validated 1 migration (execution time 00:00.000s)
+2026-02-28T18:46:27.461+01:00  INFO 74623 --- [allowance-planner] [    Test worker] o.f.c.i.s.JdbcTableSchemaHistory         : Creating Schema History table "public"."flyway_schema_history" ...
+2026-02-28T18:46:27.463+01:00  INFO 74623 --- [allowance-planner] [    Test worker] o.f.core.internal.command.DbMigrate      : Current version of schema "public": << Empty Schema >>
+2026-02-28T18:46:27.464+01:00  INFO 74623 --- [allowance-planner] [    Test worker] o.f.core.internal.command.DbMigrate      : Migrating schema "public" to version "1 - initial"
+2026-02-28T18:46:27.468+01:00  INFO 74623 --- [allowance-planner] [    Test worker] o.f.core.internal.command.DbMigrate      : Successfully applied 1 migration to schema "public", now at version v1 (execution time 00:00.002s)
+
+ +
+
+
+
+
+ +
+ + diff --git a/backend-spring/build/reports/tests/test/be.seeseepuff.allowanceplanner.ApiTest/transferInsufficientFunds().html b/backend-spring/build/reports/tests/test/be.seeseepuff.allowanceplanner.ApiTest/transferInsufficientFunds().html new file mode 100644 index 0000000..5bb39e2 --- /dev/null +++ b/backend-spring/build/reports/tests/test/be.seeseepuff.allowanceplanner.ApiTest/transferInsufficientFunds().html @@ -0,0 +1,116 @@ + + + + + +Test results - transferInsufficientFunds() + + + + + +
+ +
+ +
+

Gradle Test Run :test

+

transferInsufficientFunds()

+
+ +
+

summary

+
+
+ + + + + +
+
+ + + + + + + +
+
+
1
+

tests

+
+
+
+
0
+

failures

+
+
+
+
0
+

skipped

+
+
+
+
0.066s
+

duration

+
+
+
+
+
+
100%
+

successful

+
+
+
+
+
+
+

standard output

+ +
2026-02-28T18:46:26.226+01:00  INFO 74623 --- [allowance-planner] [    Test worker] o.f.c.i.command.clean.CleanExecutor      : Successfully dropped pre-schema database level objects (execution time 00:00.000s)
+2026-02-28T18:46:26.229+01:00  INFO 74623 --- [allowance-planner] [    Test worker] o.f.c.i.command.clean.CleanExecutor      : Successfully cleaned schema "public" (execution time 00:00.002s)
+2026-02-28T18:46:26.230+01:00  INFO 74623 --- [allowance-planner] [    Test worker] o.f.c.i.command.clean.CleanExecutor      : Successfully cleaned schema "public" (execution time 00:00.000s)
+2026-02-28T18:46:26.230+01:00  INFO 74623 --- [allowance-planner] [    Test worker] o.f.c.i.command.clean.CleanExecutor      : Successfully dropped post-schema database level objects (execution time 00:00.000s)
+2026-02-28T18:46:26.234+01:00  INFO 74623 --- [allowance-planner] [    Test worker] o.f.c.i.s.JdbcTableSchemaHistory         : Schema history table "public"."flyway_schema_history" does not exist yet
+2026-02-28T18:46:26.234+01:00  INFO 74623 --- [allowance-planner] [    Test worker] o.f.core.internal.command.DbValidate     : Successfully validated 1 migration (execution time 00:00.001s)
+2026-02-28T18:46:26.235+01:00  INFO 74623 --- [allowance-planner] [    Test worker] o.f.c.i.s.JdbcTableSchemaHistory         : Creating Schema History table "public"."flyway_schema_history" ...
+2026-02-28T18:46:26.237+01:00  INFO 74623 --- [allowance-planner] [    Test worker] o.f.core.internal.command.DbMigrate      : Current version of schema "public": << Empty Schema >>
+2026-02-28T18:46:26.238+01:00  INFO 74623 --- [allowance-planner] [    Test worker] o.f.core.internal.command.DbMigrate      : Migrating schema "public" to version "1 - initial"
+2026-02-28T18:46:26.243+01:00  INFO 74623 --- [allowance-planner] [    Test worker] o.f.core.internal.command.DbMigrate      : Successfully applied 1 migration to schema "public", now at version v1 (execution time 00:00.003s)
+
+ +
+
+
+
+
+ +
+ + diff --git a/backend-spring/build/reports/tests/test/be.seeseepuff.allowanceplanner.ApiTest/transferNotFound().html b/backend-spring/build/reports/tests/test/be.seeseepuff.allowanceplanner.ApiTest/transferNotFound().html new file mode 100644 index 0000000..803d3c6 --- /dev/null +++ b/backend-spring/build/reports/tests/test/be.seeseepuff.allowanceplanner.ApiTest/transferNotFound().html @@ -0,0 +1,116 @@ + + + + + +Test results - transferNotFound() + + + + + +
+ +
+ +
+

Gradle Test Run :test

+

transferNotFound()

+
+ +
+

summary

+
+
+ + + + + +
+
+ + + + + + + +
+
+
1
+

tests

+
+
+
+
0
+

failures

+
+
+
+
0
+

skipped

+
+
+
+
0.042s
+

duration

+
+
+
+
+
+
100%
+

successful

+
+
+
+
+
+
+

standard output

+ +
2026-02-28T18:46:25.034+01:00  INFO 74623 --- [allowance-planner] [    Test worker] o.f.c.i.command.clean.CleanExecutor      : Successfully dropped pre-schema database level objects (execution time 00:00.000s)
+2026-02-28T18:46:25.039+01:00  INFO 74623 --- [allowance-planner] [    Test worker] o.f.c.i.command.clean.CleanExecutor      : Successfully cleaned schema "public" (execution time 00:00.004s)
+2026-02-28T18:46:25.041+01:00  INFO 74623 --- [allowance-planner] [    Test worker] o.f.c.i.command.clean.CleanExecutor      : Successfully cleaned schema "public" (execution time 00:00.001s)
+2026-02-28T18:46:25.041+01:00  INFO 74623 --- [allowance-planner] [    Test worker] o.f.c.i.command.clean.CleanExecutor      : Successfully dropped post-schema database level objects (execution time 00:00.000s)
+2026-02-28T18:46:25.044+01:00  INFO 74623 --- [allowance-planner] [    Test worker] o.f.c.i.s.JdbcTableSchemaHistory         : Schema history table "public"."flyway_schema_history" does not exist yet
+2026-02-28T18:46:25.045+01:00  INFO 74623 --- [allowance-planner] [    Test worker] o.f.core.internal.command.DbValidate     : Successfully validated 1 migration (execution time 00:00.000s)
+2026-02-28T18:46:25.046+01:00  INFO 74623 --- [allowance-planner] [    Test worker] o.f.c.i.s.JdbcTableSchemaHistory         : Creating Schema History table "public"."flyway_schema_history" ...
+2026-02-28T18:46:25.048+01:00  INFO 74623 --- [allowance-planner] [    Test worker] o.f.core.internal.command.DbMigrate      : Current version of schema "public": << Empty Schema >>
+2026-02-28T18:46:25.049+01:00  INFO 74623 --- [allowance-planner] [    Test worker] o.f.core.internal.command.DbMigrate      : Migrating schema "public" to version "1 - initial"
+2026-02-28T18:46:25.054+01:00  INFO 74623 --- [allowance-planner] [    Test worker] o.f.core.internal.command.DbMigrate      : Successfully applied 1 migration to schema "public", now at version v1 (execution time 00:00.003s)
+
+ +
+
+
+
+
+ +
+ + diff --git a/backend-spring/build/reports/tests/test/be.seeseepuff.allowanceplanner.ApiTest/transferSuccessful().html b/backend-spring/build/reports/tests/test/be.seeseepuff.allowanceplanner.ApiTest/transferSuccessful().html new file mode 100644 index 0000000..2db1e26 --- /dev/null +++ b/backend-spring/build/reports/tests/test/be.seeseepuff.allowanceplanner.ApiTest/transferSuccessful().html @@ -0,0 +1,116 @@ + + + + + +Test results - transferSuccessful() + + + + + +
+ +
+ +
+

Gradle Test Run :test

+

transferSuccessful()

+
+ +
+

summary

+
+
+ + + + + +
+
+ + + + + + + +
+
+
1
+

tests

+
+
+
+
0
+

failures

+
+
+
+
0
+

skipped

+
+
+
+
0.097s
+

duration

+
+
+
+
+
+
100%
+

successful

+
+
+
+
+
+
+

standard output

+ +
2026-02-28T18:46:26.520+01:00  INFO 74623 --- [allowance-planner] [    Test worker] o.f.c.i.command.clean.CleanExecutor      : Successfully dropped pre-schema database level objects (execution time 00:00.000s)
+2026-02-28T18:46:26.524+01:00  INFO 74623 --- [allowance-planner] [    Test worker] o.f.c.i.command.clean.CleanExecutor      : Successfully cleaned schema "public" (execution time 00:00.003s)
+2026-02-28T18:46:26.526+01:00  INFO 74623 --- [allowance-planner] [    Test worker] o.f.c.i.command.clean.CleanExecutor      : Successfully cleaned schema "public" (execution time 00:00.001s)
+2026-02-28T18:46:26.526+01:00  INFO 74623 --- [allowance-planner] [    Test worker] o.f.c.i.command.clean.CleanExecutor      : Successfully dropped post-schema database level objects (execution time 00:00.000s)
+2026-02-28T18:46:26.532+01:00  INFO 74623 --- [allowance-planner] [    Test worker] o.f.c.i.s.JdbcTableSchemaHistory         : Schema history table "public"."flyway_schema_history" does not exist yet
+2026-02-28T18:46:26.532+01:00  INFO 74623 --- [allowance-planner] [    Test worker] o.f.core.internal.command.DbValidate     : Successfully validated 1 migration (execution time 00:00.000s)
+2026-02-28T18:46:26.533+01:00  INFO 74623 --- [allowance-planner] [    Test worker] o.f.c.i.s.JdbcTableSchemaHistory         : Creating Schema History table "public"."flyway_schema_history" ...
+2026-02-28T18:46:26.536+01:00  INFO 74623 --- [allowance-planner] [    Test worker] o.f.core.internal.command.DbMigrate      : Current version of schema "public": << Empty Schema >>
+2026-02-28T18:46:26.537+01:00  INFO 74623 --- [allowance-planner] [    Test worker] o.f.core.internal.command.DbMigrate      : Migrating schema "public" to version "1 - initial"
+2026-02-28T18:46:26.541+01:00  INFO 74623 --- [allowance-planner] [    Test worker] o.f.core.internal.command.DbMigrate      : Successfully applied 1 migration to schema "public", now at version v1 (execution time 00:00.003s)
+
+ +
+
+
+
+
+ +
+ + diff --git a/backend-spring/build/reports/tests/test/be.seeseepuff.allowanceplanner.ColourUtilTest/index.html b/backend-spring/build/reports/tests/test/be.seeseepuff.allowanceplanner.ColourUtilTest/index.html new file mode 100644 index 0000000..6716d5d --- /dev/null +++ b/backend-spring/build/reports/tests/test/be.seeseepuff.allowanceplanner.ColourUtilTest/index.html @@ -0,0 +1,144 @@ + + + + + +Test results - be.seeseepuff.allowanceplanner.ColourUtilTest + + + + + +
+ +
+ +
+

Gradle Test Run :test

+

ColourUtilTest

+
+ +
+

summary

+
+
+ + + + + +
+
+ + + + + + + +
+
+
4
+

tests

+
+
+
+
0
+

failures

+
+
+
+
0
+

skipped

+
+
+
+
0.002s
+

duration

+
+
+
+
+
+
100%
+

successful

+
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
ChildTestsFailuresSkippedDurationSuccess rate
convertStringToColourWithoutSign()1000s100%
convertStringToColourWithoutSignThreeDigits()1000.002s100%
convertStringToColourWithSign()1000s100%
convertStringToColourWithSignThreeDigits()1000s100%
+
+
+
+
+
+ +
+ + diff --git a/backend-spring/build/reports/tests/test/css/base-style.css b/backend-spring/build/reports/tests/test/css/base-style.css new file mode 100644 index 0000000..d05f23d --- /dev/null +++ b/backend-spring/build/reports/tests/test/css/base-style.css @@ -0,0 +1,175 @@ + +body { + margin: 0; + padding: 0; + font-family: sans-serif; + font-size: 12pt; +} + +body, a, a:visited { + color: #303030; +} + +#content { + padding: 30px 50px; +} + +#content h1 { + font-size: 160%; + margin-bottom: 10px; +} + +#footer { + margin-top: 100px; + font-size: 80%; + white-space: nowrap; +} + +#footer, #footer a { + color: #a0a0a0; +} + +#line-wrapping-toggle { + vertical-align: middle; +} + +#label-for-line-wrapping-toggle { + vertical-align: middle; +} + +ul { + margin-left: 0; +} + +h1, h2, h3 { + white-space: nowrap; +} + +h2 { + font-size: 120%; +} + +.tab-container .tab-container { + margin-left: 8px; +} + +ul.tabLinks { + padding: 0; + margin-bottom: 0; + overflow: auto; + min-width: 800px; + width: auto; + border-bottom: solid 1px #aaa; +} + +ul.tabLinks li { + float: left; + height: 100%; + list-style: none; + padding: 5px 10px; + border-radius: 7px 7px 0 0; + border: solid 1px transparent; + border-bottom: none; + margin-right: 6px; + background-color: #f0f0f0; + cursor: pointer; +} + +ul.tabLinks li.deselected > a { + color: #6d6d6d; +} + +ul.tabLinks li:hover { + background-color: #fafafa; +} + +ul.tabLinks li.selected { + background-color: #c5f0f5; + border-color: #aaa; +} + +ul.tabLinks a { + font-size: 120%; + display: block; + outline: none; + text-decoration: none; + margin: 0; + padding: 0; +} + +ul.tabLinks li h2 { + margin: 0; + padding: 0; +} + +div.tab { +} + +div.selected { + display: block; +} + +div.deselected { + display: none; +} + +div.tab table { + min-width: 350px; + width: auto; + border-collapse: collapse; +} + +div.tab th, div.tab table { + border-bottom: solid 1px #d0d0d0; +} + +div.tab th { + text-align: left; + white-space: nowrap; + padding-left: 6em; +} + +div.tab th:first-child { + padding-left: 0; +} + +div.tab td { + white-space: nowrap; + padding-left: 6em; + padding-top: 5px; + padding-bottom: 5px; +} + +div.tab td:first-child { + padding-left: 0; +} + +div.tab td.numeric, div.tab th.numeric { + text-align: right; +} + +span.code { + display: inline-block; + margin-top: 0; + margin-bottom: 1em; +} + +span.code pre { + font-size: 11pt; + padding: 10px; + margin: 0; + background-color: #f7f7f7; + border: solid 1px #d0d0d0; + min-width: 700px; + width: auto; +} + +span.wrapped pre { + word-wrap: break-word; + white-space: pre-wrap; + word-break: break-all; +} + +label.hidden { + display: none; +} diff --git a/backend-spring/build/reports/tests/test/css/style.css b/backend-spring/build/reports/tests/test/css/style.css new file mode 100644 index 0000000..0ac18dc --- /dev/null +++ b/backend-spring/build/reports/tests/test/css/style.css @@ -0,0 +1,154 @@ +.summary { + margin-top: 30px; + margin-bottom: 40px; +} + +.summary table { + border-collapse: collapse; +} + +.summary td { + vertical-align: top; +} + +div.tab table.test-results td { + padding-left: 1em; +} + +div.tab table.test-results th { + padding-top: 0.5em; + padding-left: 1em; +} + +.breadcrumbs, .breadcrumbs a { + color: #606060; +} + +.infoBox { + width: 110px; + padding-top: 15px; + padding-bottom: 15px; + text-align: center; +} + +.infoBox p { + margin: 0; +} + +.counter, .percent { + font-size: 120%; + font-weight: bold; + margin-bottom: 8px; +} + +.duration { + width: 125px; +} + +.successRate, .summaryGroup { + border: solid 2px #d0d0d0; + -moz-border-radius: 10px; + border-radius: 10px; +} + +.successRate { + width: 140px; + margin-left: 35px; +} + +.successRate .percent { + font-size: 180%; +} + +.success, .success a { + color: #008000; +} + +div.success, .successRate.success { + background-color: #bbd9bb; + border-color: #008000; +} + +.failures, .failures a { + color: #b60808; +} + +.skipped, .skipped a { + color: #c09853; +} + +div.failures, .successRate.failures { + background-color: #ecdada; + border-color: #b60808; +} + +ul.linkList { + padding-left: 0; +} + +ul.linkList li { + list-style: none; + margin-bottom: 5px; +} + +div.metadata td:first-child { + padding-left: 5px; +} + +div.metadata td { + padding-left: 5px; +} + +.metadata tr.odd { + background-color: #f7f7f7; + border: solid 1px #d0d0d0; +} + +.metadata tr.even { + border: solid 1px #d0d0d0; +} + +.metadata th, .metadata td { + padding: 5px; + text-align: left; +} + +.metadata a { + color: blue; +} + +.metadata .unrenderable { + color: darkred; +} + +.code { + position: relative; +} + +.clipboard-copy-btn { + position: absolute; + top: 8px; + right: 8px; + padding: 4px 8px; + font-size: 0.9em; + cursor: pointer; +} + +.successGroup::before { + content: "\23FA"; + margin-right: 8px; + color: #008000; + display: inline-block; +} +.failureGroup::before { + content: "\2297"; + margin-right: 8px; + color: #b60808; + display: inline-block; +} +.skippedGroup::before { + content: "\2296"; + margin-right: 8px; + color: #c09853; + display: inline-block; +} diff --git a/backend-spring/build/reports/tests/test/index.html b/backend-spring/build/reports/tests/test/index.html new file mode 100644 index 0000000..56c5682 --- /dev/null +++ b/backend-spring/build/reports/tests/test/index.html @@ -0,0 +1,127 @@ + + + + + +Test results - All Results + + + + + +
+

All Results

+
+ +
+

Gradle Test Run :test

+

Gradle Test Run :test

+
+ +
+

summary

+
+
+ + + + + +
+
+ + + + + + + +
+
+
61
+

tests

+
+
+
+
0
+

failures

+
+
+
+
0
+

skipped

+
+
+
+
12.303s
+

duration

+
+
+
+
+
+
100%
+

successful

+
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
ChildNameTestsFailuresSkippedDurationSuccess rate
+ApiTest +be.seeseepuff.allowanceplanner.ApiTest570011.775s100%
+ColourUtilTest +be.seeseepuff.allowanceplanner.ColourUtilTest4000.002s100%
+
+
+
+
+
+ +
+ + diff --git a/backend-spring/build/reports/tests/test/js/report.js b/backend-spring/build/reports/tests/test/js/report.js new file mode 100644 index 0000000..3c37c39 --- /dev/null +++ b/backend-spring/build/reports/tests/test/js/report.js @@ -0,0 +1,228 @@ +(function (window, document) { + "use strict"; + + function changeElementClass(element, classValue) { + if (element.getAttribute("className")) { + element.setAttribute("className", classValue); + } else { + element.setAttribute("class", classValue); + } + } + + function getClassAttribute(element) { + if (element.getAttribute("className")) { + return element.getAttribute("className"); + } else { + return element.getAttribute("class"); + } + } + + function addClass(element, classValue) { + changeElementClass(element, getClassAttribute(element) + " " + classValue); + } + + function removeClass(element, classValue) { + changeElementClass(element, getClassAttribute(element).replace(classValue, "")); + } + + function getCheckBox() { + return document.getElementById("line-wrapping-toggle"); + } + + function getLabelForCheckBox() { + return document.getElementById("label-for-line-wrapping-toggle"); + } + + function findCodeBlocks() { + const codeBlocks = []; + const tabContainers = getTabContainers(); + for (let i = 0; i < tabContainers.length; i++) { + const spans = tabContainers[i].getElementsByTagName("span"); + for (let i = 0; i < spans.length; ++i) { + if (spans[i].className.indexOf("code") >= 0) { + codeBlocks.push(spans[i]); + } + } + } + return codeBlocks; + } + + function forAllCodeBlocks(operation) { + const codeBlocks = findCodeBlocks(); + + for (let i = 0; i < codeBlocks.length; ++i) { + operation(codeBlocks[i], "wrapped"); + } + } + + function toggleLineWrapping() { + const checkBox = getCheckBox(); + + if (checkBox.checked) { + forAllCodeBlocks(addClass); + } else { + forAllCodeBlocks(removeClass); + } + } + + function initClipboardCopyButton() { + document.querySelectorAll(".clipboard-copy-btn").forEach((button) => { + const copyElementId = button.getAttribute("data-copy-element-id"); + const elementWithCodeToSelect = document.getElementById(copyElementId); + + button.addEventListener("click", () => { + const text = elementWithCodeToSelect.innerText.trim(); + navigator.clipboard + .writeText(text) + .then(() => { + button.textContent = "Copied!"; + setTimeout(() => { + button.textContent = "Copy"; + }, 1500); + }) + .catch((err) => { + alert("Failed to copy to the clipboard: '" + err.message + "'. Check JavaScript console for more details.") + console.warn("Failed to copy to the clipboard", err); + }); + }); + }); + } + + function initControls() { + if (findCodeBlocks().length > 0) { + const checkBox = getCheckBox(); + const label = getLabelForCheckBox(); + + checkBox.onclick = toggleLineWrapping; + checkBox.checked = false; + + removeClass(label, "hidden"); + } + + initClipboardCopyButton() + } + + class TabManager { + baseId; + tabs; + titles; + headers; + + constructor(baseId, tabs, titles, headers) { + this.baseId = baseId; + this.tabs = tabs; + this.titles = titles; + this.headers = headers; + this.init(); + } + + init() { + for (let i = 0; i < this.headers.length; i++) { + const header = this.headers[i]; + header.onclick = () => { + this.select(i); + return false; + }; + } + } + + select(i) { + this.deselectAll(); + + changeElementClass(this.tabs[i], "tab selected"); + changeElementClass(this.headers[i], "selected"); + } + + deselectAll() { + for (let i = 0; i < this.tabs.length; i++) { + changeElementClass(this.tabs[i], "tab deselected"); + changeElementClass(this.headers[i], "deselected"); + } + } + } + + function getTabContainers() { + const tabContainers = Array.from(document.getElementsByClassName("tab-container")); + + // Used by existing TabbedPageRenderer users, which have not adjusted to use TabsRenderer yet. + const legacyContainer = document.getElementById("tabs"); + if (legacyContainer) { + tabContainers.push(legacyContainer); + } + + return tabContainers; + } + + function initTabs() { + let tabGroups = 0; + + function createTab(num, container) { + const tabElems = findTabs(container); + const tabManager = new TabManager("tabs" + num, tabElems, findTitles(tabElems), findHeaders(container)); + tabManager.select(0); + } + + const tabContainers = getTabContainers(); + + for (let i = 0; i < tabContainers.length; i++) { + createTab(tabGroups, tabContainers[i]); + tabGroups++; + } + + return true; + } + + function findTabs(container) { + return findChildElements(container, "DIV", "tab"); + } + + function findHeaders(container) { + const owner = findChildElements(container, "UL", "tabLinks"); + return findChildElements(owner[0], "LI", null); + } + + function findTitles(tabs) { + const titles = []; + + for (let i = 0; i < tabs.length; i++) { + const tab = tabs[i]; + const header = findChildElements(tab, "H2", null)[0]; + + header.parentNode.removeChild(header); + + if (header.innerText) { + titles.push(header.innerText); + } else { + titles.push(header.textContent); + } + } + + return titles; + } + + function findChildElements(container, name, targetClass) { + const elements = []; + const children = container.childNodes; + + for (let i = 0; i < children.length; i++) { + const child = children.item(i); + + if (child.nodeType === 1 && child.nodeName === name) { + if (targetClass && child.className.indexOf(targetClass) < 0) { + continue; + } + + elements.push(child); + } + } + + return elements; + } + + // Entry point. + + window.onload = function() { + initTabs(); + initControls(); + }; +} (window, window.document)); diff --git a/backend-spring/build/resources/main/application.properties b/backend-spring/build/resources/main/application.properties new file mode 100644 index 0000000..35e78e6 --- /dev/null +++ b/backend-spring/build/resources/main/application.properties @@ -0,0 +1,12 @@ +spring.application.name=allowance-planner + +spring.datasource.url=jdbc:postgresql://localhost:5432/allowance_planner +spring.datasource.username=postgres +spring.datasource.password=postgres + +spring.jpa.hibernate.ddl-auto=validate +spring.jpa.open-in-view=false + +spring.flyway.enabled=true + +server.port=8080 diff --git a/backend-spring/build/resources/main/db/migration/V1__initial.sql b/backend-spring/build/resources/main/db/migration/V1__initial.sql new file mode 100644 index 0000000..c956d03 --- /dev/null +++ b/backend-spring/build/resources/main/db/migration/V1__initial.sql @@ -0,0 +1,42 @@ +CREATE TABLE users +( + id SERIAL PRIMARY KEY, + name TEXT NOT NULL, + weight DOUBLE PRECISION NOT NULL DEFAULT 10.0, + balance BIGINT NOT NULL DEFAULT 0 +); + +CREATE TABLE history +( + id SERIAL PRIMARY KEY, + user_id INTEGER NOT NULL, + timestamp BIGINT NOT NULL, + amount BIGINT NOT NULL, + description TEXT +); + +CREATE TABLE allowances +( + id SERIAL PRIMARY KEY, + user_id INTEGER NOT NULL, + name TEXT NOT NULL, + target BIGINT NOT NULL, + balance BIGINT NOT NULL DEFAULT 0, + weight DOUBLE PRECISION NOT NULL, + colour INTEGER +); + +CREATE TABLE tasks +( + id SERIAL PRIMARY KEY, + name TEXT NOT NULL, + reward BIGINT NOT NULL, + assigned INTEGER, + schedule TEXT, + completed BIGINT, + next_run BIGINT +); + +INSERT INTO users (name) +VALUES ('Seeseemelk'), + ('Huffle'); diff --git a/backend-spring/build/resources/main/templates/index.html b/backend-spring/build/resources/main/templates/index.html new file mode 100644 index 0000000..a199188 --- /dev/null +++ b/backend-spring/build/resources/main/templates/index.html @@ -0,0 +1,122 @@ + + + + Allowance Planner 2000 + + + +

Allowance Planner 2000

+ +
+

Error

+

+
+ +
+

Users

+ + + + + +
+

Allowances

+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameProgressTargetWeightActions
Total + + () + + Mark as completed +
+
+ +

Tasks

+
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
NameAssignedRewardScheduleActions
+ None + + + Mark as completed +
+
+ +

History

+ + + + + + + + + + + + + +
TimestampAllowance
+
+
+ + diff --git a/backend-spring/build/test-results/test/TEST-be.seeseepuff.allowanceplanner.ApiTest.xml b/backend-spring/build/test-results/test/TEST-be.seeseepuff.allowanceplanner.ApiTest.xml new file mode 100644 index 0000000..f70ae6f --- /dev/null +++ b/backend-spring/build/test-results/test/TEST-be.seeseepuff.allowanceplanner.ApiTest.xml @@ -0,0 +1,715 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + > +2026-02-28T18:46:20.703+01:00 INFO 74623 --- [allowance-planner] [ Test worker] o.f.core.internal.command.DbMigrate : Migrating schema "public" to version "1 - initial" +2026-02-28T18:46:20.718+01:00 INFO 74623 --- [allowance-planner] [ Test worker] o.f.core.internal.command.DbMigrate : Successfully applied 1 migration to schema "public", now at version v1 (execution time 00:00.007s) +2026-02-28T18:46:20.799+01:00 INFO 74623 --- [allowance-planner] [ Test worker] org.hibernate.orm.jpa : HHH008540: Processing PersistenceUnitInfo [name: default] +2026-02-28T18:46:20.827+01:00 INFO 74623 --- [allowance-planner] [ Test worker] org.hibernate.orm.core : HHH000001: Hibernate ORM core version 7.2.4.Final +2026-02-28T18:46:21.053+01:00 INFO 74623 --- [allowance-planner] [ Test worker] o.s.o.j.p.SpringPersistenceUnitInfo : No LoadTimeWeaver setup: ignoring JPA class transformer +2026-02-28T18:46:21.098+01:00 INFO 74623 --- [allowance-planner] [ Test worker] org.hibernate.orm.connections.pooling : HHH10001005: Database info: + Database JDBC URL [jdbc:postgresql://localhost:32809/allowance_planner_test?loggerLevel=OFF] + Database driver: PostgreSQL JDBC Driver + Database dialect: PostgreSQLDialect + Database version: 17.9 + Default catalog/schema: allowance_planner_test/public + Autocommit mode: undefined/unknown + Isolation level: READ_COMMITTED [default READ_COMMITTED] + JDBC fetch size: none + Pool: DataSourceConnectionProvider + Minimum pool size: undefined/unknown + Maximum pool size: undefined/unknown +2026-02-28T18:46:21.551+01:00 INFO 74623 --- [allowance-planner] [ Test worker] org.hibernate.orm.core : HHH000489: No JTA platform available (set 'hibernate.transaction.jta.platform' to enable JTA platform integration) +2026-02-28T18:46:21.572+01:00 INFO 74623 --- [allowance-planner] [ Test worker] j.LocalContainerEntityManagerFactoryBean : Initialized JPA EntityManagerFactory for persistence unit 'default' +2026-02-28T18:46:21.622+01:00 INFO 74623 --- [allowance-planner] [ Test worker] o.s.d.j.r.query.QueryEnhancerFactories : Hibernate is in classpath; If applicable, HQL parser will be used. +2026-02-28T18:46:22.181+01:00 INFO 74623 --- [allowance-planner] [ Test worker] o.s.b.w.a.WelcomePageHandlerMapping : Adding welcome page template: index +2026-02-28T18:46:22.422+01:00 INFO 74623 --- [allowance-planner] [ Test worker] o.s.boot.tomcat.TomcatWebServer : Tomcat started on port 43703 (http) with context path '/' +2026-02-28T18:46:22.427+01:00 INFO 74623 --- [allowance-planner] [ Test worker] be.seeseepuff.allowanceplanner.ApiTest : Started ApiTest in 3.154 seconds (process running for 6.592) +2026-02-28T18:46:22.732+01:00 INFO 74623 --- [allowance-planner] [ Test worker] o.f.c.i.command.clean.CleanExecutor : Successfully dropped pre-schema database level objects (execution time 00:00.000s) +2026-02-28T18:46:22.742+01:00 INFO 74623 --- [allowance-planner] [ Test worker] o.f.c.i.command.clean.CleanExecutor : Successfully cleaned schema "public" (execution time 00:00.009s) +2026-02-28T18:46:22.747+01:00 INFO 74623 --- [allowance-planner] [ Test worker] o.f.c.i.command.clean.CleanExecutor : Successfully cleaned schema "public" (execution time 00:00.004s) +2026-02-28T18:46:22.748+01:00 INFO 74623 --- [allowance-planner] [ Test worker] o.f.c.i.command.clean.CleanExecutor : Successfully dropped post-schema database level objects (execution time 00:00.000s) +2026-02-28T18:46:22.756+01:00 INFO 74623 --- [allowance-planner] [ Test worker] o.f.c.i.s.JdbcTableSchemaHistory : Schema history table "public"."flyway_schema_history" does not exist yet +2026-02-28T18:46:22.757+01:00 INFO 74623 --- [allowance-planner] [ Test worker] o.f.core.internal.command.DbValidate : Successfully validated 1 migration (execution time 00:00.001s) +2026-02-28T18:46:22.760+01:00 INFO 74623 --- [allowance-planner] [ Test worker] o.f.c.i.s.JdbcTableSchemaHistory : Creating Schema History table "public"."flyway_schema_history" ... +2026-02-28T18:46:22.764+01:00 INFO 74623 --- [allowance-planner] [ Test worker] o.f.core.internal.command.DbMigrate : Current version of schema "public": << Empty Schema >> +2026-02-28T18:46:22.767+01:00 INFO 74623 --- [allowance-planner] [ Test worker] o.f.core.internal.command.DbMigrate : Migrating schema "public" to version "1 - initial" +2026-02-28T18:46:22.774+01:00 INFO 74623 --- [allowance-planner] [ Test worker] o.f.core.internal.command.DbMigrate : Successfully applied 1 migration to schema "public", now at version v1 (execution time 00:00.005s) +2026-02-28T18:46:23.272+01:00 INFO 74623 --- [allowance-planner] [o-auto-1-exec-1] o.a.c.c.C.[Tomcat].[localhost].[/] : Initializing Spring DispatcherServlet 'dispatcherServlet' +2026-02-28T18:46:23.273+01:00 INFO 74623 --- [allowance-planner] [o-auto-1-exec-1] o.s.web.servlet.DispatcherServlet : Initializing Servlet 'dispatcherServlet' +2026-02-28T18:46:23.274+01:00 INFO 74623 --- [allowance-planner] [o-auto-1-exec-1] o.s.web.servlet.DispatcherServlet : Completed initialization in 1 ms +2026-02-28T18:46:23.710+01:00 INFO 74623 --- [allowance-planner] [ Test worker] o.f.c.i.command.clean.CleanExecutor : Successfully dropped pre-schema database level objects (execution time 00:00.000s) +2026-02-28T18:46:23.717+01:00 INFO 74623 --- [allowance-planner] [ Test worker] o.f.c.i.command.clean.CleanExecutor : Successfully cleaned schema "public" (execution time 00:00.006s) +2026-02-28T18:46:23.723+01:00 INFO 74623 --- [allowance-planner] [ Test worker] o.f.c.i.command.clean.CleanExecutor : Successfully cleaned schema "public" (execution time 00:00.005s) +2026-02-28T18:46:23.723+01:00 INFO 74623 --- [allowance-planner] [ Test worker] o.f.c.i.command.clean.CleanExecutor : Successfully dropped post-schema database level objects (execution time 00:00.000s) +2026-02-28T18:46:23.728+01:00 INFO 74623 --- [allowance-planner] [ Test worker] o.f.c.i.s.JdbcTableSchemaHistory : Schema history table "public"."flyway_schema_history" does not exist yet +2026-02-28T18:46:23.729+01:00 INFO 74623 --- [allowance-planner] [ Test worker] o.f.core.internal.command.DbValidate : Successfully validated 1 migration (execution time 00:00.001s) +2026-02-28T18:46:23.731+01:00 INFO 74623 --- [allowance-planner] [ Test worker] o.f.c.i.s.JdbcTableSchemaHistory : Creating Schema History table "public"."flyway_schema_history" ... +2026-02-28T18:46:23.737+01:00 INFO 74623 --- [allowance-planner] [ Test worker] o.f.core.internal.command.DbMigrate : Current version of schema "public": << Empty Schema >> +2026-02-28T18:46:23.740+01:00 INFO 74623 --- [allowance-planner] [ Test worker] o.f.core.internal.command.DbMigrate : Migrating schema "public" to version "1 - initial" +2026-02-28T18:46:23.749+01:00 INFO 74623 --- [allowance-planner] [ Test worker] o.f.core.internal.command.DbMigrate : Successfully applied 1 migration to schema "public", now at version v1 (execution time 00:00.006s) +2026-02-28T18:46:23.780+01:00 INFO 74623 --- [allowance-planner] [ Test worker] o.f.c.i.command.clean.CleanExecutor : Successfully dropped pre-schema database level objects (execution time 00:00.000s) +2026-02-28T18:46:23.789+01:00 INFO 74623 --- [allowance-planner] [ Test worker] o.f.c.i.command.clean.CleanExecutor : Successfully cleaned schema "public" (execution time 00:00.008s) +2026-02-28T18:46:23.793+01:00 INFO 74623 --- [allowance-planner] [ Test worker] o.f.c.i.command.clean.CleanExecutor : Successfully cleaned schema "public" (execution time 00:00.003s) +2026-02-28T18:46:23.793+01:00 INFO 74623 --- [allowance-planner] [ Test worker] o.f.c.i.command.clean.CleanExecutor : Successfully dropped post-schema database level objects (execution time 00:00.000s) +2026-02-28T18:46:23.798+01:00 INFO 74623 --- [allowance-planner] [ Test worker] o.f.c.i.s.JdbcTableSchemaHistory : Schema history table "public"."flyway_schema_history" does not exist yet +2026-02-28T18:46:23.799+01:00 INFO 74623 --- [allowance-planner] [ Test worker] o.f.core.internal.command.DbValidate : Successfully validated 1 migration (execution time 00:00.000s) +2026-02-28T18:46:23.800+01:00 INFO 74623 --- [allowance-planner] [ Test worker] o.f.c.i.s.JdbcTableSchemaHistory : Creating Schema History table "public"."flyway_schema_history" ... +2026-02-28T18:46:23.805+01:00 INFO 74623 --- [allowance-planner] [ Test worker] o.f.core.internal.command.DbMigrate : Current version of schema "public": << Empty Schema >> +2026-02-28T18:46:23.806+01:00 INFO 74623 --- [allowance-planner] [ Test worker] o.f.core.internal.command.DbMigrate : Migrating schema "public" to version "1 - initial" +2026-02-28T18:46:23.814+01:00 INFO 74623 --- [allowance-planner] [ Test worker] o.f.core.internal.command.DbMigrate : Successfully applied 1 migration to schema "public", now at version v1 (execution time 00:00.005s) +2026-02-28T18:46:23.885+01:00 INFO 74623 --- [allowance-planner] [ Test worker] o.f.c.i.command.clean.CleanExecutor : Successfully dropped pre-schema database level objects (execution time 00:00.000s) +2026-02-28T18:46:23.892+01:00 INFO 74623 --- [allowance-planner] [ Test worker] o.f.c.i.command.clean.CleanExecutor : Successfully cleaned schema "public" (execution time 00:00.006s) +2026-02-28T18:46:23.895+01:00 INFO 74623 --- [allowance-planner] [ Test worker] o.f.c.i.command.clean.CleanExecutor : Successfully cleaned schema "public" (execution time 00:00.002s) +2026-02-28T18:46:23.895+01:00 INFO 74623 --- [allowance-planner] [ Test worker] o.f.c.i.command.clean.CleanExecutor : Successfully dropped post-schema database level objects (execution time 00:00.000s) +2026-02-28T18:46:23.900+01:00 INFO 74623 --- [allowance-planner] [ Test worker] o.f.c.i.s.JdbcTableSchemaHistory : Schema history table "public"."flyway_schema_history" does not exist yet +2026-02-28T18:46:23.900+01:00 INFO 74623 --- [allowance-planner] [ Test worker] o.f.core.internal.command.DbValidate : Successfully validated 1 migration (execution time 00:00.001s) +2026-02-28T18:46:23.903+01:00 INFO 74623 --- [allowance-planner] [ Test worker] o.f.c.i.s.JdbcTableSchemaHistory : Creating Schema History table "public"."flyway_schema_history" ... +2026-02-28T18:46:23.907+01:00 INFO 74623 --- [allowance-planner] [ Test worker] o.f.core.internal.command.DbMigrate : Current version of schema "public": << Empty Schema >> +2026-02-28T18:46:23.910+01:00 INFO 74623 --- [allowance-planner] [ Test worker] o.f.core.internal.command.DbMigrate : Migrating schema "public" to version "1 - initial" +2026-02-28T18:46:23.915+01:00 INFO 74623 --- [allowance-planner] [ Test worker] o.f.core.internal.command.DbMigrate : Successfully applied 1 migration to schema "public", now at version v1 (execution time 00:00.004s) +2026-02-28T18:46:24.139+01:00 INFO 74623 --- [allowance-planner] [ Test worker] o.f.c.i.command.clean.CleanExecutor : Successfully dropped pre-schema database level objects (execution time 00:00.000s) +2026-02-28T18:46:24.145+01:00 INFO 74623 --- [allowance-planner] [ Test worker] o.f.c.i.command.clean.CleanExecutor : Successfully cleaned schema "public" (execution time 00:00.005s) +2026-02-28T18:46:24.148+01:00 INFO 74623 --- [allowance-planner] [ Test worker] o.f.c.i.command.clean.CleanExecutor : Successfully cleaned schema "public" (execution time 00:00.003s) +2026-02-28T18:46:24.149+01:00 INFO 74623 --- [allowance-planner] [ Test worker] o.f.c.i.command.clean.CleanExecutor : Successfully dropped post-schema database level objects (execution time 00:00.000s) +2026-02-28T18:46:24.153+01:00 INFO 74623 --- [allowance-planner] [ Test worker] o.f.c.i.s.JdbcTableSchemaHistory : Schema history table "public"."flyway_schema_history" does not exist yet +2026-02-28T18:46:24.153+01:00 INFO 74623 --- [allowance-planner] [ Test worker] o.f.core.internal.command.DbValidate : Successfully validated 1 migration (execution time 00:00.000s) +2026-02-28T18:46:24.154+01:00 INFO 74623 --- [allowance-planner] [ Test worker] o.f.c.i.s.JdbcTableSchemaHistory : Creating Schema History table "public"."flyway_schema_history" ... +2026-02-28T18:46:24.157+01:00 INFO 74623 --- [allowance-planner] [ Test worker] o.f.core.internal.command.DbMigrate : Current version of schema "public": << Empty Schema >> +2026-02-28T18:46:24.159+01:00 INFO 74623 --- [allowance-planner] [ Test worker] o.f.core.internal.command.DbMigrate : Migrating schema "public" to version "1 - initial" +2026-02-28T18:46:24.164+01:00 INFO 74623 --- [allowance-planner] [ Test worker] o.f.core.internal.command.DbMigrate : Successfully applied 1 migration to schema "public", now at version v1 (execution time 00:00.004s) +2026-02-28T18:46:24.184+01:00 INFO 74623 --- [allowance-planner] [ Test worker] o.f.c.i.command.clean.CleanExecutor : Successfully dropped pre-schema database level objects (execution time 00:00.000s) +2026-02-28T18:46:24.187+01:00 INFO 74623 --- [allowance-planner] [ Test worker] o.f.c.i.command.clean.CleanExecutor : Successfully cleaned schema "public" (execution time 00:00.003s) +2026-02-28T18:46:24.188+01:00 INFO 74623 --- [allowance-planner] [ Test worker] o.f.c.i.command.clean.CleanExecutor : Successfully cleaned schema "public" (execution time 00:00.000s) +2026-02-28T18:46:24.188+01:00 INFO 74623 --- [allowance-planner] [ Test worker] o.f.c.i.command.clean.CleanExecutor : Successfully dropped post-schema database level objects (execution time 00:00.000s) +2026-02-28T18:46:24.192+01:00 INFO 74623 --- [allowance-planner] [ Test worker] o.f.c.i.s.JdbcTableSchemaHistory : Schema history table "public"."flyway_schema_history" does not exist yet +2026-02-28T18:46:24.192+01:00 INFO 74623 --- [allowance-planner] [ Test worker] o.f.core.internal.command.DbValidate : Successfully validated 1 migration (execution time 00:00.000s) +2026-02-28T18:46:24.193+01:00 INFO 74623 --- [allowance-planner] [ Test worker] o.f.c.i.s.JdbcTableSchemaHistory : Creating Schema History table "public"."flyway_schema_history" ... +2026-02-28T18:46:24.197+01:00 INFO 74623 --- [allowance-planner] [ Test worker] o.f.core.internal.command.DbMigrate : Current version of schema "public": << Empty Schema >> +2026-02-28T18:46:24.198+01:00 INFO 74623 --- [allowance-planner] [ Test worker] o.f.core.internal.command.DbMigrate : Migrating schema "public" to version "1 - initial" +2026-02-28T18:46:24.203+01:00 INFO 74623 --- [allowance-planner] [ Test worker] o.f.core.internal.command.DbMigrate : Successfully applied 1 migration to schema "public", now at version v1 (execution time 00:00.003s) +2026-02-28T18:46:24.225+01:00 INFO 74623 --- [allowance-planner] [ Test worker] o.f.c.i.command.clean.CleanExecutor : Successfully dropped pre-schema database level objects (execution time 00:00.000s) +2026-02-28T18:46:24.231+01:00 INFO 74623 --- [allowance-planner] [ Test worker] o.f.c.i.command.clean.CleanExecutor : Successfully cleaned schema "public" (execution time 00:00.005s) +2026-02-28T18:46:24.232+01:00 INFO 74623 --- [allowance-planner] [ Test worker] o.f.c.i.command.clean.CleanExecutor : Successfully cleaned schema "public" (execution time 00:00.001s) +2026-02-28T18:46:24.233+01:00 INFO 74623 --- [allowance-planner] [ Test worker] o.f.c.i.command.clean.CleanExecutor : Successfully dropped post-schema database level objects (execution time 00:00.000s) +2026-02-28T18:46:24.237+01:00 INFO 74623 --- [allowance-planner] [ Test worker] o.f.c.i.s.JdbcTableSchemaHistory : Schema history table "public"."flyway_schema_history" does not exist yet +2026-02-28T18:46:24.237+01:00 INFO 74623 --- [allowance-planner] [ Test worker] o.f.core.internal.command.DbValidate : Successfully validated 1 migration (execution time 00:00.001s) +2026-02-28T18:46:24.239+01:00 INFO 74623 --- [allowance-planner] [ Test worker] o.f.c.i.s.JdbcTableSchemaHistory : Creating Schema History table "public"."flyway_schema_history" ... +2026-02-28T18:46:24.243+01:00 INFO 74623 --- [allowance-planner] [ Test worker] o.f.core.internal.command.DbMigrate : Current version of schema "public": << Empty Schema >> +2026-02-28T18:46:24.244+01:00 INFO 74623 --- [allowance-planner] [ Test worker] o.f.core.internal.command.DbMigrate : Migrating schema "public" to version "1 - initial" +2026-02-28T18:46:24.250+01:00 INFO 74623 --- [allowance-planner] [ Test worker] o.f.core.internal.command.DbMigrate : Successfully applied 1 migration to schema "public", now at version v1 (execution time 00:00.004s) +2026-02-28T18:46:24.265+01:00 INFO 74623 --- [allowance-planner] [ Test worker] o.f.c.i.command.clean.CleanExecutor : Successfully dropped pre-schema database level objects (execution time 00:00.000s) +2026-02-28T18:46:24.269+01:00 INFO 74623 --- [allowance-planner] [ Test worker] o.f.c.i.command.clean.CleanExecutor : Successfully cleaned schema "public" (execution time 00:00.003s) +2026-02-28T18:46:24.270+01:00 INFO 74623 --- [allowance-planner] [ Test worker] o.f.c.i.command.clean.CleanExecutor : Successfully cleaned schema "public" (execution time 00:00.000s) +2026-02-28T18:46:24.270+01:00 INFO 74623 --- [allowance-planner] [ Test worker] o.f.c.i.command.clean.CleanExecutor : Successfully dropped post-schema database level objects (execution time 00:00.000s) +2026-02-28T18:46:24.274+01:00 INFO 74623 --- [allowance-planner] [ Test worker] o.f.c.i.s.JdbcTableSchemaHistory : Schema history table "public"."flyway_schema_history" does not exist yet +2026-02-28T18:46:24.275+01:00 INFO 74623 --- [allowance-planner] [ Test worker] o.f.core.internal.command.DbValidate : Successfully validated 1 migration (execution time 00:00.001s) +2026-02-28T18:46:24.276+01:00 INFO 74623 --- [allowance-planner] [ Test worker] o.f.c.i.s.JdbcTableSchemaHistory : Creating Schema History table "public"."flyway_schema_history" ... +2026-02-28T18:46:24.280+01:00 INFO 74623 --- [allowance-planner] [ Test worker] o.f.core.internal.command.DbMigrate : Current version of schema "public": << Empty Schema >> +2026-02-28T18:46:24.281+01:00 INFO 74623 --- [allowance-planner] [ Test worker] o.f.core.internal.command.DbMigrate : Migrating schema "public" to version "1 - initial" +2026-02-28T18:46:24.288+01:00 INFO 74623 --- [allowance-planner] [ Test worker] o.f.core.internal.command.DbMigrate : Successfully applied 1 migration to schema "public", now at version v1 (execution time 00:00.004s) +2026-02-28T18:46:24.327+01:00 INFO 74623 --- [allowance-planner] [ Test worker] o.f.c.i.command.clean.CleanExecutor : Successfully dropped pre-schema database level objects (execution time 00:00.000s) +2026-02-28T18:46:24.332+01:00 INFO 74623 --- [allowance-planner] [ Test worker] o.f.c.i.command.clean.CleanExecutor : Successfully cleaned schema "public" (execution time 00:00.004s) +2026-02-28T18:46:24.333+01:00 INFO 74623 --- [allowance-planner] [ Test worker] o.f.c.i.command.clean.CleanExecutor : Successfully cleaned schema "public" (execution time 00:00.001s) +2026-02-28T18:46:24.334+01:00 INFO 74623 --- [allowance-planner] [ Test worker] o.f.c.i.command.clean.CleanExecutor : Successfully dropped post-schema database level objects (execution time 00:00.000s) +2026-02-28T18:46:24.337+01:00 INFO 74623 --- [allowance-planner] [ Test worker] o.f.c.i.s.JdbcTableSchemaHistory : Schema history table "public"."flyway_schema_history" does not exist yet +2026-02-28T18:46:24.338+01:00 INFO 74623 --- [allowance-planner] [ Test worker] o.f.core.internal.command.DbValidate : Successfully validated 1 migration (execution time 00:00.001s) +2026-02-28T18:46:24.340+01:00 INFO 74623 --- [allowance-planner] [ Test worker] o.f.c.i.s.JdbcTableSchemaHistory : Creating Schema History table "public"."flyway_schema_history" ... +2026-02-28T18:46:24.343+01:00 INFO 74623 --- [allowance-planner] [ Test worker] o.f.core.internal.command.DbMigrate : Current version of schema "public": << Empty Schema >> +2026-02-28T18:46:24.345+01:00 INFO 74623 --- [allowance-planner] [ Test worker] o.f.core.internal.command.DbMigrate : Migrating schema "public" to version "1 - initial" +2026-02-28T18:46:24.350+01:00 INFO 74623 --- [allowance-planner] [ Test worker] o.f.core.internal.command.DbMigrate : Successfully applied 1 migration to schema "public", now at version v1 (execution time 00:00.003s) +2026-02-28T18:46:24.368+01:00 INFO 74623 --- [allowance-planner] [ Test worker] o.f.c.i.command.clean.CleanExecutor : Successfully dropped pre-schema database level objects (execution time 00:00.000s) +2026-02-28T18:46:24.373+01:00 INFO 74623 --- [allowance-planner] [ Test worker] o.f.c.i.command.clean.CleanExecutor : Successfully cleaned schema "public" (execution time 00:00.004s) +2026-02-28T18:46:24.375+01:00 INFO 74623 --- [allowance-planner] [ Test worker] o.f.c.i.command.clean.CleanExecutor : Successfully cleaned schema "public" (execution time 00:00.001s) +2026-02-28T18:46:24.375+01:00 INFO 74623 --- [allowance-planner] [ Test worker] o.f.c.i.command.clean.CleanExecutor : Successfully dropped post-schema database level objects (execution time 00:00.000s) +2026-02-28T18:46:24.379+01:00 INFO 74623 --- [allowance-planner] [ Test worker] o.f.c.i.s.JdbcTableSchemaHistory : Schema history table "public"."flyway_schema_history" does not exist yet +2026-02-28T18:46:24.379+01:00 INFO 74623 --- [allowance-planner] [ Test worker] o.f.core.internal.command.DbValidate : Successfully validated 1 migration (execution time 00:00.000s) +2026-02-28T18:46:24.380+01:00 INFO 74623 --- [allowance-planner] [ Test worker] o.f.c.i.s.JdbcTableSchemaHistory : Creating Schema History table "public"."flyway_schema_history" ... +2026-02-28T18:46:24.384+01:00 INFO 74623 --- [allowance-planner] [ Test worker] o.f.core.internal.command.DbMigrate : Current version of schema "public": << Empty Schema >> +2026-02-28T18:46:24.386+01:00 INFO 74623 --- [allowance-planner] [ Test worker] o.f.core.internal.command.DbMigrate : Migrating schema "public" to version "1 - initial" +2026-02-28T18:46:24.394+01:00 INFO 74623 --- [allowance-planner] [ Test worker] o.f.core.internal.command.DbMigrate : Successfully applied 1 migration to schema "public", now at version v1 (execution time 00:00.005s) +2026-02-28T18:46:24.412+01:00 INFO 74623 --- [allowance-planner] [ Test worker] o.f.c.i.command.clean.CleanExecutor : Successfully dropped pre-schema database level objects (execution time 00:00.000s) +2026-02-28T18:46:24.417+01:00 INFO 74623 --- [allowance-planner] [ Test worker] o.f.c.i.command.clean.CleanExecutor : Successfully cleaned schema "public" (execution time 00:00.005s) +2026-02-28T18:46:24.420+01:00 INFO 74623 --- [allowance-planner] [ Test worker] o.f.c.i.command.clean.CleanExecutor : Successfully cleaned schema "public" (execution time 00:00.002s) +2026-02-28T18:46:24.420+01:00 INFO 74623 --- [allowance-planner] [ Test worker] o.f.c.i.command.clean.CleanExecutor : Successfully dropped post-schema database level objects (execution time 00:00.000s) +2026-02-28T18:46:24.425+01:00 INFO 74623 --- [allowance-planner] [ Test worker] o.f.c.i.s.JdbcTableSchemaHistory : Schema history table "public"."flyway_schema_history" does not exist yet +2026-02-28T18:46:24.425+01:00 INFO 74623 --- [allowance-planner] [ Test worker] o.f.core.internal.command.DbValidate : Successfully validated 1 migration (execution time 00:00.001s) +2026-02-28T18:46:24.426+01:00 INFO 74623 --- [allowance-planner] [ Test worker] o.f.c.i.s.JdbcTableSchemaHistory : Creating Schema History table "public"."flyway_schema_history" ... +2026-02-28T18:46:24.430+01:00 INFO 74623 --- [allowance-planner] [ Test worker] o.f.core.internal.command.DbMigrate : Current version of schema "public": << Empty Schema >> +2026-02-28T18:46:24.431+01:00 INFO 74623 --- [allowance-planner] [ Test worker] o.f.core.internal.command.DbMigrate : Migrating schema "public" to version "1 - initial" +2026-02-28T18:46:24.436+01:00 INFO 74623 --- [allowance-planner] [ Test worker] o.f.core.internal.command.DbMigrate : Successfully applied 1 migration to schema "public", now at version v1 (execution time 00:00.003s) +2026-02-28T18:46:24.458+01:00 INFO 74623 --- [allowance-planner] [ Test worker] o.f.c.i.command.clean.CleanExecutor : Successfully dropped pre-schema database level objects (execution time 00:00.000s) +2026-02-28T18:46:24.464+01:00 INFO 74623 --- [allowance-planner] [ Test worker] o.f.c.i.command.clean.CleanExecutor : Successfully cleaned schema "public" (execution time 00:00.005s) +2026-02-28T18:46:24.466+01:00 INFO 74623 --- [allowance-planner] [ Test worker] o.f.c.i.command.clean.CleanExecutor : Successfully cleaned schema "public" (execution time 00:00.001s) +2026-02-28T18:46:24.466+01:00 INFO 74623 --- [allowance-planner] [ Test worker] o.f.c.i.command.clean.CleanExecutor : Successfully dropped post-schema database level objects (execution time 00:00.000s) +2026-02-28T18:46:24.471+01:00 INFO 74623 --- [allowance-planner] [ Test worker] o.f.c.i.s.JdbcTableSchemaHistory : Schema history table "public"."flyway_schema_history" does not exist yet +2026-02-28T18:46:24.471+01:00 INFO 74623 --- [allowance-planner] [ Test worker] o.f.core.internal.command.DbValidate : Successfully validated 1 migration (execution time 00:00.000s) +2026-02-28T18:46:24.472+01:00 INFO 74623 --- [allowance-planner] [ Test worker] o.f.c.i.s.JdbcTableSchemaHistory : Creating Schema History table "public"."flyway_schema_history" ... +2026-02-28T18:46:24.476+01:00 INFO 74623 --- [allowance-planner] [ Test worker] o.f.core.internal.command.DbMigrate : Current version of schema "public": << Empty Schema >> +2026-02-28T18:46:24.477+01:00 INFO 74623 --- [allowance-planner] [ Test worker] o.f.core.internal.command.DbMigrate : Migrating schema "public" to version "1 - initial" +2026-02-28T18:46:24.482+01:00 INFO 74623 --- [allowance-planner] [ Test worker] o.f.core.internal.command.DbMigrate : Successfully applied 1 migration to schema "public", now at version v1 (execution time 00:00.003s) +2026-02-28T18:46:24.528+01:00 INFO 74623 --- [allowance-planner] [ Test worker] o.f.c.i.command.clean.CleanExecutor : Successfully dropped pre-schema database level objects (execution time 00:00.000s) +2026-02-28T18:46:24.538+01:00 INFO 74623 --- [allowance-planner] [ Test worker] o.f.c.i.command.clean.CleanExecutor : Successfully cleaned schema "public" (execution time 00:00.009s) +2026-02-28T18:46:24.540+01:00 INFO 74623 --- [allowance-planner] [ Test worker] o.f.c.i.command.clean.CleanExecutor : Successfully cleaned schema "public" (execution time 00:00.001s) +2026-02-28T18:46:24.541+01:00 INFO 74623 --- [allowance-planner] [ Test worker] o.f.c.i.command.clean.CleanExecutor : Successfully dropped post-schema database level objects (execution time 00:00.000s) +2026-02-28T18:46:24.546+01:00 INFO 74623 --- [allowance-planner] [ Test worker] o.f.c.i.s.JdbcTableSchemaHistory : Schema history table "public"."flyway_schema_history" does not exist yet +2026-02-28T18:46:24.546+01:00 INFO 74623 --- [allowance-planner] [ Test worker] o.f.core.internal.command.DbValidate : Successfully validated 1 migration (execution time 00:00.000s) +2026-02-28T18:46:24.547+01:00 INFO 74623 --- [allowance-planner] [ Test worker] o.f.c.i.s.JdbcTableSchemaHistory : Creating Schema History table "public"."flyway_schema_history" ... +2026-02-28T18:46:24.550+01:00 INFO 74623 --- [allowance-planner] [ Test worker] o.f.core.internal.command.DbMigrate : Current version of schema "public": << Empty Schema >> +2026-02-28T18:46:24.551+01:00 INFO 74623 --- [allowance-planner] [ Test worker] o.f.core.internal.command.DbMigrate : Migrating schema "public" to version "1 - initial" +2026-02-28T18:46:24.556+01:00 INFO 74623 --- [allowance-planner] [ Test worker] o.f.core.internal.command.DbMigrate : Successfully applied 1 migration to schema "public", now at version v1 (execution time 00:00.003s) +2026-02-28T18:46:24.702+01:00 INFO 74623 --- [allowance-planner] [ Test worker] o.f.c.i.command.clean.CleanExecutor : Successfully dropped pre-schema database level objects (execution time 00:00.000s) +2026-02-28T18:46:24.706+01:00 INFO 74623 --- [allowance-planner] [ Test worker] o.f.c.i.command.clean.CleanExecutor : Successfully cleaned schema "public" (execution time 00:00.004s) +2026-02-28T18:46:24.708+01:00 INFO 74623 --- [allowance-planner] [ Test worker] o.f.c.i.command.clean.CleanExecutor : Successfully cleaned schema "public" (execution time 00:00.001s) +2026-02-28T18:46:24.709+01:00 INFO 74623 --- [allowance-planner] [ Test worker] o.f.c.i.command.clean.CleanExecutor : Successfully dropped post-schema database level objects (execution time 00:00.000s) +2026-02-28T18:46:24.713+01:00 INFO 74623 --- [allowance-planner] [ Test worker] o.f.c.i.s.JdbcTableSchemaHistory : Schema history table "public"."flyway_schema_history" does not exist yet +2026-02-28T18:46:24.713+01:00 INFO 74623 --- [allowance-planner] [ Test worker] o.f.core.internal.command.DbValidate : Successfully validated 1 migration (execution time 00:00.000s) +2026-02-28T18:46:24.714+01:00 INFO 74623 --- [allowance-planner] [ Test worker] o.f.c.i.s.JdbcTableSchemaHistory : Creating Schema History table "public"."flyway_schema_history" ... +2026-02-28T18:46:24.717+01:00 INFO 74623 --- [allowance-planner] [ Test worker] o.f.core.internal.command.DbMigrate : Current version of schema "public": << Empty Schema >> +2026-02-28T18:46:24.719+01:00 INFO 74623 --- [allowance-planner] [ Test worker] o.f.core.internal.command.DbMigrate : Migrating schema "public" to version "1 - initial" +2026-02-28T18:46:24.724+01:00 INFO 74623 --- [allowance-planner] [ Test worker] o.f.core.internal.command.DbMigrate : Successfully applied 1 migration to schema "public", now at version v1 (execution time 00:00.003s) +2026-02-28T18:46:24.741+01:00 INFO 74623 --- [allowance-planner] [ Test worker] o.f.c.i.command.clean.CleanExecutor : Successfully dropped pre-schema database level objects (execution time 00:00.000s) +2026-02-28T18:46:24.745+01:00 INFO 74623 --- [allowance-planner] [ Test worker] o.f.c.i.command.clean.CleanExecutor : Successfully cleaned schema "public" (execution time 00:00.004s) +2026-02-28T18:46:24.747+01:00 INFO 74623 --- [allowance-planner] [ Test worker] o.f.c.i.command.clean.CleanExecutor : Successfully cleaned schema "public" (execution time 00:00.001s) +2026-02-28T18:46:24.747+01:00 INFO 74623 --- [allowance-planner] [ Test worker] o.f.c.i.command.clean.CleanExecutor : Successfully dropped post-schema database level objects (execution time 00:00.000s) +2026-02-28T18:46:24.751+01:00 INFO 74623 --- [allowance-planner] [ Test worker] o.f.c.i.s.JdbcTableSchemaHistory : Schema history table "public"."flyway_schema_history" does not exist yet +2026-02-28T18:46:24.751+01:00 INFO 74623 --- [allowance-planner] [ Test worker] o.f.core.internal.command.DbValidate : Successfully validated 1 migration (execution time 00:00.001s) +2026-02-28T18:46:24.752+01:00 INFO 74623 --- [allowance-planner] [ Test worker] o.f.c.i.s.JdbcTableSchemaHistory : Creating Schema History table "public"."flyway_schema_history" ... +2026-02-28T18:46:24.755+01:00 INFO 74623 --- [allowance-planner] [ Test worker] o.f.core.internal.command.DbMigrate : Current version of schema "public": << Empty Schema >> +2026-02-28T18:46:24.756+01:00 INFO 74623 --- [allowance-planner] [ Test worker] o.f.core.internal.command.DbMigrate : Migrating schema "public" to version "1 - initial" +2026-02-28T18:46:24.761+01:00 INFO 74623 --- [allowance-planner] [ Test worker] o.f.core.internal.command.DbMigrate : Successfully applied 1 migration to schema "public", now at version v1 (execution time 00:00.003s) +2026-02-28T18:46:24.852+01:00 INFO 74623 --- [allowance-planner] [ Test worker] o.f.c.i.command.clean.CleanExecutor : Successfully dropped pre-schema database level objects (execution time 00:00.000s) +2026-02-28T18:46:24.857+01:00 INFO 74623 --- [allowance-planner] [ Test worker] o.f.c.i.command.clean.CleanExecutor : Successfully cleaned schema "public" (execution time 00:00.004s) +2026-02-28T18:46:24.859+01:00 INFO 74623 --- [allowance-planner] [ Test worker] o.f.c.i.command.clean.CleanExecutor : Successfully cleaned schema "public" (execution time 00:00.001s) +2026-02-28T18:46:24.859+01:00 INFO 74623 --- [allowance-planner] [ Test worker] o.f.c.i.command.clean.CleanExecutor : Successfully dropped post-schema database level objects (execution time 00:00.000s) +2026-02-28T18:46:24.864+01:00 INFO 74623 --- [allowance-planner] [ Test worker] o.f.c.i.s.JdbcTableSchemaHistory : Schema history table "public"."flyway_schema_history" does not exist yet +2026-02-28T18:46:24.864+01:00 INFO 74623 --- [allowance-planner] [ Test worker] o.f.core.internal.command.DbValidate : Successfully validated 1 migration (execution time 00:00.001s) +2026-02-28T18:46:24.866+01:00 INFO 74623 --- [allowance-planner] [ Test worker] o.f.c.i.s.JdbcTableSchemaHistory : Creating Schema History table "public"."flyway_schema_history" ... +2026-02-28T18:46:24.869+01:00 INFO 74623 --- [allowance-planner] [ Test worker] o.f.core.internal.command.DbMigrate : Current version of schema "public": << Empty Schema >> +2026-02-28T18:46:24.870+01:00 INFO 74623 --- [allowance-planner] [ Test worker] o.f.core.internal.command.DbMigrate : Migrating schema "public" to version "1 - initial" +2026-02-28T18:46:24.875+01:00 INFO 74623 --- [allowance-planner] [ Test worker] o.f.core.internal.command.DbMigrate : Successfully applied 1 migration to schema "public", now at version v1 (execution time 00:00.003s) +2026-02-28T18:46:24.999+01:00 INFO 74623 --- [allowance-planner] [ Test worker] o.f.c.i.command.clean.CleanExecutor : Successfully dropped pre-schema database level objects (execution time 00:00.000s) +2026-02-28T18:46:25.003+01:00 INFO 74623 --- [allowance-planner] [ Test worker] o.f.c.i.command.clean.CleanExecutor : Successfully cleaned schema "public" (execution time 00:00.003s) +2026-02-28T18:46:25.004+01:00 INFO 74623 --- [allowance-planner] [ Test worker] o.f.c.i.command.clean.CleanExecutor : Successfully cleaned schema "public" (execution time 00:00.001s) +2026-02-28T18:46:25.004+01:00 INFO 74623 --- [allowance-planner] [ Test worker] o.f.c.i.command.clean.CleanExecutor : Successfully dropped post-schema database level objects (execution time 00:00.000s) +2026-02-28T18:46:25.009+01:00 INFO 74623 --- [allowance-planner] [ Test worker] o.f.c.i.s.JdbcTableSchemaHistory : Schema history table "public"."flyway_schema_history" does not exist yet +2026-02-28T18:46:25.009+01:00 INFO 74623 --- [allowance-planner] [ Test worker] o.f.core.internal.command.DbValidate : Successfully validated 1 migration (execution time 00:00.001s) +2026-02-28T18:46:25.010+01:00 INFO 74623 --- [allowance-planner] [ Test worker] o.f.c.i.s.JdbcTableSchemaHistory : Creating Schema History table "public"."flyway_schema_history" ... +2026-02-28T18:46:25.013+01:00 INFO 74623 --- [allowance-planner] [ Test worker] o.f.core.internal.command.DbMigrate : Current version of schema "public": << Empty Schema >> +2026-02-28T18:46:25.014+01:00 INFO 74623 --- [allowance-planner] [ Test worker] o.f.core.internal.command.DbMigrate : Migrating schema "public" to version "1 - initial" +2026-02-28T18:46:25.019+01:00 INFO 74623 --- [allowance-planner] [ Test worker] o.f.core.internal.command.DbMigrate : Successfully applied 1 migration to schema "public", now at version v1 (execution time 00:00.003s) +2026-02-28T18:46:25.034+01:00 INFO 74623 --- [allowance-planner] [ Test worker] o.f.c.i.command.clean.CleanExecutor : Successfully dropped pre-schema database level objects (execution time 00:00.000s) +2026-02-28T18:46:25.039+01:00 INFO 74623 --- [allowance-planner] [ Test worker] o.f.c.i.command.clean.CleanExecutor : Successfully cleaned schema "public" (execution time 00:00.004s) +2026-02-28T18:46:25.041+01:00 INFO 74623 --- [allowance-planner] [ Test worker] o.f.c.i.command.clean.CleanExecutor : Successfully cleaned schema "public" (execution time 00:00.001s) +2026-02-28T18:46:25.041+01:00 INFO 74623 --- [allowance-planner] [ Test worker] o.f.c.i.command.clean.CleanExecutor : Successfully dropped post-schema database level objects (execution time 00:00.000s) +2026-02-28T18:46:25.044+01:00 INFO 74623 --- [allowance-planner] [ Test worker] o.f.c.i.s.JdbcTableSchemaHistory : Schema history table "public"."flyway_schema_history" does not exist yet +2026-02-28T18:46:25.045+01:00 INFO 74623 --- [allowance-planner] [ Test worker] o.f.core.internal.command.DbValidate : Successfully validated 1 migration (execution time 00:00.000s) +2026-02-28T18:46:25.046+01:00 INFO 74623 --- [allowance-planner] [ Test worker] o.f.c.i.s.JdbcTableSchemaHistory : Creating Schema History table "public"."flyway_schema_history" ... +2026-02-28T18:46:25.048+01:00 INFO 74623 --- [allowance-planner] [ Test worker] o.f.core.internal.command.DbMigrate : Current version of schema "public": << Empty Schema >> +2026-02-28T18:46:25.049+01:00 INFO 74623 --- [allowance-planner] [ Test worker] o.f.core.internal.command.DbMigrate : Migrating schema "public" to version "1 - initial" +2026-02-28T18:46:25.054+01:00 INFO 74623 --- [allowance-planner] [ Test worker] o.f.core.internal.command.DbMigrate : Successfully applied 1 migration to schema "public", now at version v1 (execution time 00:00.003s) +2026-02-28T18:46:25.074+01:00 INFO 74623 --- [allowance-planner] [ Test worker] o.f.c.i.command.clean.CleanExecutor : Successfully dropped pre-schema database level objects (execution time 00:00.000s) +2026-02-28T18:46:25.077+01:00 INFO 74623 --- [allowance-planner] [ Test worker] o.f.c.i.command.clean.CleanExecutor : Successfully cleaned schema "public" (execution time 00:00.002s) +2026-02-28T18:46:25.079+01:00 INFO 74623 --- [allowance-planner] [ Test worker] o.f.c.i.command.clean.CleanExecutor : Successfully cleaned schema "public" (execution time 00:00.001s) +2026-02-28T18:46:25.079+01:00 INFO 74623 --- [allowance-planner] [ Test worker] o.f.c.i.command.clean.CleanExecutor : Successfully dropped post-schema database level objects (execution time 00:00.000s) +2026-02-28T18:46:25.083+01:00 INFO 74623 --- [allowance-planner] [ Test worker] o.f.c.i.s.JdbcTableSchemaHistory : Schema history table "public"."flyway_schema_history" does not exist yet +2026-02-28T18:46:25.083+01:00 INFO 74623 --- [allowance-planner] [ Test worker] o.f.core.internal.command.DbValidate : Successfully validated 1 migration (execution time 00:00.000s) +2026-02-28T18:46:25.084+01:00 INFO 74623 --- [allowance-planner] [ Test worker] o.f.c.i.s.JdbcTableSchemaHistory : Creating Schema History table "public"."flyway_schema_history" ... +2026-02-28T18:46:25.087+01:00 INFO 74623 --- [allowance-planner] [ Test worker] o.f.core.internal.command.DbMigrate : Current version of schema "public": << Empty Schema >> +2026-02-28T18:46:25.087+01:00 INFO 74623 --- [allowance-planner] [ Test worker] o.f.core.internal.command.DbMigrate : Migrating schema "public" to version "1 - initial" +2026-02-28T18:46:25.094+01:00 INFO 74623 --- [allowance-planner] [ Test worker] o.f.core.internal.command.DbMigrate : Successfully applied 1 migration to schema "public", now at version v1 (execution time 00:00.004s) +2026-02-28T18:46:25.110+01:00 INFO 74623 --- [allowance-planner] [ Test worker] o.f.c.i.command.clean.CleanExecutor : Successfully dropped pre-schema database level objects (execution time 00:00.000s) +2026-02-28T18:46:25.115+01:00 INFO 74623 --- [allowance-planner] [ Test worker] o.f.c.i.command.clean.CleanExecutor : Successfully cleaned schema "public" (execution time 00:00.004s) +2026-02-28T18:46:25.116+01:00 INFO 74623 --- [allowance-planner] [ Test worker] o.f.c.i.command.clean.CleanExecutor : Successfully cleaned schema "public" (execution time 00:00.001s) +2026-02-28T18:46:25.116+01:00 INFO 74623 --- [allowance-planner] [ Test worker] o.f.c.i.command.clean.CleanExecutor : Successfully dropped post-schema database level objects (execution time 00:00.000s) +2026-02-28T18:46:25.121+01:00 INFO 74623 --- [allowance-planner] [ Test worker] o.f.c.i.s.JdbcTableSchemaHistory : Schema history table "public"."flyway_schema_history" does not exist yet +2026-02-28T18:46:25.121+01:00 INFO 74623 --- [allowance-planner] [ Test worker] o.f.core.internal.command.DbValidate : Successfully validated 1 migration (execution time 00:00.000s) +2026-02-28T18:46:25.123+01:00 INFO 74623 --- [allowance-planner] [ Test worker] o.f.c.i.s.JdbcTableSchemaHistory : Creating Schema History table "public"."flyway_schema_history" ... +2026-02-28T18:46:25.125+01:00 INFO 74623 --- [allowance-planner] [ Test worker] o.f.core.internal.command.DbMigrate : Current version of schema "public": << Empty Schema >> +2026-02-28T18:46:25.126+01:00 INFO 74623 --- [allowance-planner] [ Test worker] o.f.core.internal.command.DbMigrate : Migrating schema "public" to version "1 - initial" +2026-02-28T18:46:25.133+01:00 INFO 74623 --- [allowance-planner] [ Test worker] o.f.core.internal.command.DbMigrate : Successfully applied 1 migration to schema "public", now at version v1 (execution time 00:00.004s) +2026-02-28T18:46:25.331+01:00 INFO 74623 --- [allowance-planner] [ Test worker] o.f.c.i.command.clean.CleanExecutor : Successfully dropped pre-schema database level objects (execution time 00:00.000s) +2026-02-28T18:46:25.334+01:00 INFO 74623 --- [allowance-planner] [ Test worker] o.f.c.i.command.clean.CleanExecutor : Successfully cleaned schema "public" (execution time 00:00.002s) +2026-02-28T18:46:25.335+01:00 INFO 74623 --- [allowance-planner] [ Test worker] o.f.c.i.command.clean.CleanExecutor : Successfully cleaned schema "public" (execution time 00:00.001s) +2026-02-28T18:46:25.336+01:00 INFO 74623 --- [allowance-planner] [ Test worker] o.f.c.i.command.clean.CleanExecutor : Successfully dropped post-schema database level objects (execution time 00:00.000s) +2026-02-28T18:46:25.339+01:00 INFO 74623 --- [allowance-planner] [ Test worker] o.f.c.i.s.JdbcTableSchemaHistory : Schema history table "public"."flyway_schema_history" does not exist yet +2026-02-28T18:46:25.340+01:00 INFO 74623 --- [allowance-planner] [ Test worker] o.f.core.internal.command.DbValidate : Successfully validated 1 migration (execution time 00:00.000s) +2026-02-28T18:46:25.341+01:00 INFO 74623 --- [allowance-planner] [ Test worker] o.f.c.i.s.JdbcTableSchemaHistory : Creating Schema History table "public"."flyway_schema_history" ... +2026-02-28T18:46:25.343+01:00 INFO 74623 --- [allowance-planner] [ Test worker] o.f.core.internal.command.DbMigrate : Current version of schema "public": << Empty Schema >> +2026-02-28T18:46:25.344+01:00 INFO 74623 --- [allowance-planner] [ Test worker] o.f.core.internal.command.DbMigrate : Migrating schema "public" to version "1 - initial" +2026-02-28T18:46:25.348+01:00 INFO 74623 --- [allowance-planner] [ Test worker] o.f.core.internal.command.DbMigrate : Successfully applied 1 migration to schema "public", now at version v1 (execution time 00:00.002s) +2026-02-28T18:46:25.405+01:00 INFO 74623 --- [allowance-planner] [ Test worker] o.f.c.i.command.clean.CleanExecutor : Successfully dropped pre-schema database level objects (execution time 00:00.000s) +2026-02-28T18:46:25.409+01:00 INFO 74623 --- [allowance-planner] [ Test worker] o.f.c.i.command.clean.CleanExecutor : Successfully cleaned schema "public" (execution time 00:00.003s) +2026-02-28T18:46:25.410+01:00 INFO 74623 --- [allowance-planner] [ Test worker] o.f.c.i.command.clean.CleanExecutor : Successfully cleaned schema "public" (execution time 00:00.001s) +2026-02-28T18:46:25.410+01:00 INFO 74623 --- [allowance-planner] [ Test worker] o.f.c.i.command.clean.CleanExecutor : Successfully dropped post-schema database level objects (execution time 00:00.000s) +2026-02-28T18:46:25.414+01:00 INFO 74623 --- [allowance-planner] [ Test worker] o.f.c.i.s.JdbcTableSchemaHistory : Schema history table "public"."flyway_schema_history" does not exist yet +2026-02-28T18:46:25.414+01:00 INFO 74623 --- [allowance-planner] [ Test worker] o.f.core.internal.command.DbValidate : Successfully validated 1 migration (execution time 00:00.000s) +2026-02-28T18:46:25.415+01:00 INFO 74623 --- [allowance-planner] [ Test worker] o.f.c.i.s.JdbcTableSchemaHistory : Creating Schema History table "public"."flyway_schema_history" ... +2026-02-28T18:46:25.417+01:00 INFO 74623 --- [allowance-planner] [ Test worker] o.f.core.internal.command.DbMigrate : Current version of schema "public": << Empty Schema >> +2026-02-28T18:46:25.418+01:00 INFO 74623 --- [allowance-planner] [ Test worker] o.f.core.internal.command.DbMigrate : Migrating schema "public" to version "1 - initial" +2026-02-28T18:46:25.422+01:00 INFO 74623 --- [allowance-planner] [ Test worker] o.f.core.internal.command.DbMigrate : Successfully applied 1 migration to schema "public", now at version v1 (execution time 00:00.002s) +2026-02-28T18:46:25.504+01:00 INFO 74623 --- [allowance-planner] [ Test worker] o.f.c.i.command.clean.CleanExecutor : Successfully dropped pre-schema database level objects (execution time 00:00.000s) +2026-02-28T18:46:25.509+01:00 INFO 74623 --- [allowance-planner] [ Test worker] o.f.c.i.command.clean.CleanExecutor : Successfully cleaned schema "public" (execution time 00:00.004s) +2026-02-28T18:46:25.511+01:00 INFO 74623 --- [allowance-planner] [ Test worker] o.f.c.i.command.clean.CleanExecutor : Successfully cleaned schema "public" (execution time 00:00.001s) +2026-02-28T18:46:25.511+01:00 INFO 74623 --- [allowance-planner] [ Test worker] o.f.c.i.command.clean.CleanExecutor : Successfully dropped post-schema database level objects (execution time 00:00.000s) +2026-02-28T18:46:25.515+01:00 INFO 74623 --- [allowance-planner] [ Test worker] o.f.c.i.s.JdbcTableSchemaHistory : Schema history table "public"."flyway_schema_history" does not exist yet +2026-02-28T18:46:25.515+01:00 INFO 74623 --- [allowance-planner] [ Test worker] o.f.core.internal.command.DbValidate : Successfully validated 1 migration (execution time 00:00.000s) +2026-02-28T18:46:25.516+01:00 INFO 74623 --- [allowance-planner] [ Test worker] o.f.c.i.s.JdbcTableSchemaHistory : Creating Schema History table "public"."flyway_schema_history" ... +2026-02-28T18:46:25.519+01:00 INFO 74623 --- [allowance-planner] [ Test worker] o.f.core.internal.command.DbMigrate : Current version of schema "public": << Empty Schema >> +2026-02-28T18:46:25.520+01:00 INFO 74623 --- [allowance-planner] [ Test worker] o.f.core.internal.command.DbMigrate : Migrating schema "public" to version "1 - initial" +2026-02-28T18:46:25.524+01:00 INFO 74623 --- [allowance-planner] [ Test worker] o.f.core.internal.command.DbMigrate : Successfully applied 1 migration to schema "public", now at version v1 (execution time 00:00.003s) +2026-02-28T18:46:25.572+01:00 INFO 74623 --- [allowance-planner] [ Test worker] o.f.c.i.command.clean.CleanExecutor : Successfully dropped pre-schema database level objects (execution time 00:00.000s) +2026-02-28T18:46:25.577+01:00 INFO 74623 --- [allowance-planner] [ Test worker] o.f.c.i.command.clean.CleanExecutor : Successfully cleaned schema "public" (execution time 00:00.005s) +2026-02-28T18:46:25.578+01:00 INFO 74623 --- [allowance-planner] [ Test worker] o.f.c.i.command.clean.CleanExecutor : Successfully cleaned schema "public" (execution time 00:00.000s) +2026-02-28T18:46:25.578+01:00 INFO 74623 --- [allowance-planner] [ Test worker] o.f.c.i.command.clean.CleanExecutor : Successfully dropped post-schema database level objects (execution time 00:00.000s) +2026-02-28T18:46:25.581+01:00 INFO 74623 --- [allowance-planner] [ Test worker] o.f.c.i.s.JdbcTableSchemaHistory : Schema history table "public"."flyway_schema_history" does not exist yet +2026-02-28T18:46:25.581+01:00 INFO 74623 --- [allowance-planner] [ Test worker] o.f.core.internal.command.DbValidate : Successfully validated 1 migration (execution time 00:00.000s) +2026-02-28T18:46:25.582+01:00 INFO 74623 --- [allowance-planner] [ Test worker] o.f.c.i.s.JdbcTableSchemaHistory : Creating Schema History table "public"."flyway_schema_history" ... +2026-02-28T18:46:25.586+01:00 INFO 74623 --- [allowance-planner] [ Test worker] o.f.core.internal.command.DbMigrate : Current version of schema "public": << Empty Schema >> +2026-02-28T18:46:25.587+01:00 INFO 74623 --- [allowance-planner] [ Test worker] o.f.core.internal.command.DbMigrate : Migrating schema "public" to version "1 - initial" +2026-02-28T18:46:25.592+01:00 INFO 74623 --- [allowance-planner] [ Test worker] o.f.core.internal.command.DbMigrate : Successfully applied 1 migration to schema "public", now at version v1 (execution time 00:00.003s) +2026-02-28T18:46:25.621+01:00 INFO 74623 --- [allowance-planner] [ Test worker] o.f.c.i.command.clean.CleanExecutor : Successfully dropped pre-schema database level objects (execution time 00:00.000s) +2026-02-28T18:46:25.624+01:00 INFO 74623 --- [allowance-planner] [ Test worker] o.f.c.i.command.clean.CleanExecutor : Successfully cleaned schema "public" (execution time 00:00.002s) +2026-02-28T18:46:25.625+01:00 INFO 74623 --- [allowance-planner] [ Test worker] o.f.c.i.command.clean.CleanExecutor : Successfully cleaned schema "public" (execution time 00:00.001s) +2026-02-28T18:46:25.626+01:00 INFO 74623 --- [allowance-planner] [ Test worker] o.f.c.i.command.clean.CleanExecutor : Successfully dropped post-schema database level objects (execution time 00:00.000s) +2026-02-28T18:46:25.629+01:00 INFO 74623 --- [allowance-planner] [ Test worker] o.f.c.i.s.JdbcTableSchemaHistory : Schema history table "public"."flyway_schema_history" does not exist yet +2026-02-28T18:46:25.630+01:00 INFO 74623 --- [allowance-planner] [ Test worker] o.f.core.internal.command.DbValidate : Successfully validated 1 migration (execution time 00:00.000s) +2026-02-28T18:46:25.630+01:00 INFO 74623 --- [allowance-planner] [ Test worker] o.f.c.i.s.JdbcTableSchemaHistory : Creating Schema History table "public"."flyway_schema_history" ... +2026-02-28T18:46:25.633+01:00 INFO 74623 --- [allowance-planner] [ Test worker] o.f.core.internal.command.DbMigrate : Current version of schema "public": << Empty Schema >> +2026-02-28T18:46:25.634+01:00 INFO 74623 --- [allowance-planner] [ Test worker] o.f.core.internal.command.DbMigrate : Migrating schema "public" to version "1 - initial" +2026-02-28T18:46:25.640+01:00 INFO 74623 --- [allowance-planner] [ Test worker] o.f.core.internal.command.DbMigrate : Successfully applied 1 migration to schema "public", now at version v1 (execution time 00:00.004s) +2026-02-28T18:46:25.659+01:00 WARN 74623 --- [allowance-planner] [o-auto-1-exec-3] .w.s.m.s.DefaultHandlerExceptionResolver : Resolved [org.springframework.http.converter.HttpMessageNotReadableException: JSON parse error: Cannot map `null` into type `double` (set DeserializationConfig.DeserializationFeature.FAIL_ON_NULL_FOR_PRIMITIVES to 'false' to allow)] +2026-02-28T18:46:25.671+01:00 INFO 74623 --- [allowance-planner] [ Test worker] o.f.c.i.command.clean.CleanExecutor : Successfully dropped pre-schema database level objects (execution time 00:00.000s) +2026-02-28T18:46:25.676+01:00 INFO 74623 --- [allowance-planner] [ Test worker] o.f.c.i.command.clean.CleanExecutor : Successfully cleaned schema "public" (execution time 00:00.004s) +2026-02-28T18:46:25.678+01:00 INFO 74623 --- [allowance-planner] [ Test worker] o.f.c.i.command.clean.CleanExecutor : Successfully cleaned schema "public" (execution time 00:00.001s) +2026-02-28T18:46:25.678+01:00 INFO 74623 --- [allowance-planner] [ Test worker] o.f.c.i.command.clean.CleanExecutor : Successfully dropped post-schema database level objects (execution time 00:00.000s) +2026-02-28T18:46:25.683+01:00 INFO 74623 --- [allowance-planner] [ Test worker] o.f.c.i.s.JdbcTableSchemaHistory : Schema history table "public"."flyway_schema_history" does not exist yet +2026-02-28T18:46:25.684+01:00 INFO 74623 --- [allowance-planner] [ Test worker] o.f.core.internal.command.DbValidate : Successfully validated 1 migration (execution time 00:00.001s) +2026-02-28T18:46:25.685+01:00 INFO 74623 --- [allowance-planner] [ Test worker] o.f.c.i.s.JdbcTableSchemaHistory : Creating Schema History table "public"."flyway_schema_history" ... +2026-02-28T18:46:25.689+01:00 INFO 74623 --- [allowance-planner] [ Test worker] o.f.core.internal.command.DbMigrate : Current version of schema "public": << Empty Schema >> +2026-02-28T18:46:25.690+01:00 INFO 74623 --- [allowance-planner] [ Test worker] o.f.core.internal.command.DbMigrate : Migrating schema "public" to version "1 - initial" +2026-02-28T18:46:25.694+01:00 INFO 74623 --- [allowance-planner] [ Test worker] o.f.core.internal.command.DbMigrate : Successfully applied 1 migration to schema "public", now at version v1 (execution time 00:00.003s) +2026-02-28T18:46:25.727+01:00 INFO 74623 --- [allowance-planner] [ Test worker] o.f.c.i.command.clean.CleanExecutor : Successfully dropped pre-schema database level objects (execution time 00:00.000s) +2026-02-28T18:46:25.732+01:00 INFO 74623 --- [allowance-planner] [ Test worker] o.f.c.i.command.clean.CleanExecutor : Successfully cleaned schema "public" (execution time 00:00.004s) +2026-02-28T18:46:25.734+01:00 INFO 74623 --- [allowance-planner] [ Test worker] o.f.c.i.command.clean.CleanExecutor : Successfully cleaned schema "public" (execution time 00:00.001s) +2026-02-28T18:46:25.734+01:00 INFO 74623 --- [allowance-planner] [ Test worker] o.f.c.i.command.clean.CleanExecutor : Successfully dropped post-schema database level objects (execution time 00:00.000s) +2026-02-28T18:46:25.738+01:00 INFO 74623 --- [allowance-planner] [ Test worker] o.f.c.i.s.JdbcTableSchemaHistory : Schema history table "public"."flyway_schema_history" does not exist yet +2026-02-28T18:46:25.739+01:00 INFO 74623 --- [allowance-planner] [ Test worker] o.f.core.internal.command.DbValidate : Successfully validated 1 migration (execution time 00:00.001s) +2026-02-28T18:46:25.740+01:00 INFO 74623 --- [allowance-planner] [ Test worker] o.f.c.i.s.JdbcTableSchemaHistory : Creating Schema History table "public"."flyway_schema_history" ... +2026-02-28T18:46:25.742+01:00 INFO 74623 --- [allowance-planner] [ Test worker] o.f.core.internal.command.DbMigrate : Current version of schema "public": << Empty Schema >> +2026-02-28T18:46:25.743+01:00 INFO 74623 --- [allowance-planner] [ Test worker] o.f.core.internal.command.DbMigrate : Migrating schema "public" to version "1 - initial" +2026-02-28T18:46:25.749+01:00 INFO 74623 --- [allowance-planner] [ Test worker] o.f.core.internal.command.DbMigrate : Successfully applied 1 migration to schema "public", now at version v1 (execution time 00:00.004s) +2026-02-28T18:46:25.780+01:00 INFO 74623 --- [allowance-planner] [ Test worker] o.f.c.i.command.clean.CleanExecutor : Successfully dropped pre-schema database level objects (execution time 00:00.000s) +2026-02-28T18:46:25.786+01:00 INFO 74623 --- [allowance-planner] [ Test worker] o.f.c.i.command.clean.CleanExecutor : Successfully cleaned schema "public" (execution time 00:00.005s) +2026-02-28T18:46:25.787+01:00 INFO 74623 --- [allowance-planner] [ Test worker] o.f.c.i.command.clean.CleanExecutor : Successfully cleaned schema "public" (execution time 00:00.001s) +2026-02-28T18:46:25.787+01:00 INFO 74623 --- [allowance-planner] [ Test worker] o.f.c.i.command.clean.CleanExecutor : Successfully dropped post-schema database level objects (execution time 00:00.000s) +2026-02-28T18:46:25.791+01:00 INFO 74623 --- [allowance-planner] [ Test worker] o.f.c.i.s.JdbcTableSchemaHistory : Schema history table "public"."flyway_schema_history" does not exist yet +2026-02-28T18:46:25.791+01:00 INFO 74623 --- [allowance-planner] [ Test worker] o.f.core.internal.command.DbValidate : Successfully validated 1 migration (execution time 00:00.000s) +2026-02-28T18:46:25.792+01:00 INFO 74623 --- [allowance-planner] [ Test worker] o.f.c.i.s.JdbcTableSchemaHistory : Creating Schema History table "public"."flyway_schema_history" ... +2026-02-28T18:46:25.796+01:00 INFO 74623 --- [allowance-planner] [ Test worker] o.f.core.internal.command.DbMigrate : Current version of schema "public": << Empty Schema >> +2026-02-28T18:46:25.797+01:00 INFO 74623 --- [allowance-planner] [ Test worker] o.f.core.internal.command.DbMigrate : Migrating schema "public" to version "1 - initial" +2026-02-28T18:46:25.802+01:00 INFO 74623 --- [allowance-planner] [ Test worker] o.f.core.internal.command.DbMigrate : Successfully applied 1 migration to schema "public", now at version v1 (execution time 00:00.003s) +2026-02-28T18:46:25.823+01:00 INFO 74623 --- [allowance-planner] [ Test worker] o.f.c.i.command.clean.CleanExecutor : Successfully dropped pre-schema database level objects (execution time 00:00.000s) +2026-02-28T18:46:25.828+01:00 INFO 74623 --- [allowance-planner] [ Test worker] o.f.c.i.command.clean.CleanExecutor : Successfully cleaned schema "public" (execution time 00:00.004s) +2026-02-28T18:46:25.829+01:00 INFO 74623 --- [allowance-planner] [ Test worker] o.f.c.i.command.clean.CleanExecutor : Successfully cleaned schema "public" (execution time 00:00.001s) +2026-02-28T18:46:25.829+01:00 INFO 74623 --- [allowance-planner] [ Test worker] o.f.c.i.command.clean.CleanExecutor : Successfully dropped post-schema database level objects (execution time 00:00.000s) +2026-02-28T18:46:25.832+01:00 INFO 74623 --- [allowance-planner] [ Test worker] o.f.c.i.s.JdbcTableSchemaHistory : Schema history table "public"."flyway_schema_history" does not exist yet +2026-02-28T18:46:25.832+01:00 INFO 74623 --- [allowance-planner] [ Test worker] o.f.core.internal.command.DbValidate : Successfully validated 1 migration (execution time 00:00.000s) +2026-02-28T18:46:25.833+01:00 INFO 74623 --- [allowance-planner] [ Test worker] o.f.c.i.s.JdbcTableSchemaHistory : Creating Schema History table "public"."flyway_schema_history" ... +2026-02-28T18:46:25.835+01:00 INFO 74623 --- [allowance-planner] [ Test worker] o.f.core.internal.command.DbMigrate : Current version of schema "public": << Empty Schema >> +2026-02-28T18:46:25.836+01:00 INFO 74623 --- [allowance-planner] [ Test worker] o.f.core.internal.command.DbMigrate : Migrating schema "public" to version "1 - initial" +2026-02-28T18:46:25.843+01:00 INFO 74623 --- [allowance-planner] [ Test worker] o.f.core.internal.command.DbMigrate : Successfully applied 1 migration to schema "public", now at version v1 (execution time 00:00.005s) +2026-02-28T18:46:25.858+01:00 INFO 74623 --- [allowance-planner] [ Test worker] o.f.c.i.command.clean.CleanExecutor : Successfully dropped pre-schema database level objects (execution time 00:00.000s) +2026-02-28T18:46:25.862+01:00 INFO 74623 --- [allowance-planner] [ Test worker] o.f.c.i.command.clean.CleanExecutor : Successfully cleaned schema "public" (execution time 00:00.004s) +2026-02-28T18:46:25.864+01:00 INFO 74623 --- [allowance-planner] [ Test worker] o.f.c.i.command.clean.CleanExecutor : Successfully cleaned schema "public" (execution time 00:00.001s) +2026-02-28T18:46:25.864+01:00 INFO 74623 --- [allowance-planner] [ Test worker] o.f.c.i.command.clean.CleanExecutor : Successfully dropped post-schema database level objects (execution time 00:00.000s) +2026-02-28T18:46:25.867+01:00 INFO 74623 --- [allowance-planner] [ Test worker] o.f.c.i.s.JdbcTableSchemaHistory : Schema history table "public"."flyway_schema_history" does not exist yet +2026-02-28T18:46:25.867+01:00 INFO 74623 --- [allowance-planner] [ Test worker] o.f.core.internal.command.DbValidate : Successfully validated 1 migration (execution time 00:00.000s) +2026-02-28T18:46:25.868+01:00 INFO 74623 --- [allowance-planner] [ Test worker] o.f.c.i.s.JdbcTableSchemaHistory : Creating Schema History table "public"."flyway_schema_history" ... +2026-02-28T18:46:25.870+01:00 INFO 74623 --- [allowance-planner] [ Test worker] o.f.core.internal.command.DbMigrate : Current version of schema "public": << Empty Schema >> +2026-02-28T18:46:25.871+01:00 INFO 74623 --- [allowance-planner] [ Test worker] o.f.core.internal.command.DbMigrate : Migrating schema "public" to version "1 - initial" +2026-02-28T18:46:25.878+01:00 INFO 74623 --- [allowance-planner] [ Test worker] o.f.core.internal.command.DbMigrate : Successfully applied 1 migration to schema "public", now at version v1 (execution time 00:00.005s) +2026-02-28T18:46:25.890+01:00 INFO 74623 --- [allowance-planner] [ Test worker] o.f.c.i.command.clean.CleanExecutor : Successfully dropped pre-schema database level objects (execution time 00:00.000s) +2026-02-28T18:46:25.895+01:00 INFO 74623 --- [allowance-planner] [ Test worker] o.f.c.i.command.clean.CleanExecutor : Successfully cleaned schema "public" (execution time 00:00.004s) +2026-02-28T18:46:25.897+01:00 INFO 74623 --- [allowance-planner] [ Test worker] o.f.c.i.command.clean.CleanExecutor : Successfully cleaned schema "public" (execution time 00:00.001s) +2026-02-28T18:46:25.897+01:00 INFO 74623 --- [allowance-planner] [ Test worker] o.f.c.i.command.clean.CleanExecutor : Successfully dropped post-schema database level objects (execution time 00:00.000s) +2026-02-28T18:46:25.899+01:00 INFO 74623 --- [allowance-planner] [ Test worker] o.f.c.i.s.JdbcTableSchemaHistory : Schema history table "public"."flyway_schema_history" does not exist yet +2026-02-28T18:46:25.900+01:00 INFO 74623 --- [allowance-planner] [ Test worker] o.f.core.internal.command.DbValidate : Successfully validated 1 migration (execution time 00:00.000s) +2026-02-28T18:46:25.900+01:00 INFO 74623 --- [allowance-planner] [ Test worker] o.f.c.i.s.JdbcTableSchemaHistory : Creating Schema History table "public"."flyway_schema_history" ... +2026-02-28T18:46:25.902+01:00 INFO 74623 --- [allowance-planner] [ Test worker] o.f.core.internal.command.DbMigrate : Current version of schema "public": << Empty Schema >> +2026-02-28T18:46:25.903+01:00 INFO 74623 --- [allowance-planner] [ Test worker] o.f.core.internal.command.DbMigrate : Migrating schema "public" to version "1 - initial" +2026-02-28T18:46:25.908+01:00 INFO 74623 --- [allowance-planner] [ Test worker] o.f.core.internal.command.DbMigrate : Successfully applied 1 migration to schema "public", now at version v1 (execution time 00:00.003s) +2026-02-28T18:46:26.074+01:00 INFO 74623 --- [allowance-planner] [ Test worker] o.f.c.i.command.clean.CleanExecutor : Successfully dropped pre-schema database level objects (execution time 00:00.000s) +2026-02-28T18:46:26.080+01:00 INFO 74623 --- [allowance-planner] [ Test worker] o.f.c.i.command.clean.CleanExecutor : Successfully cleaned schema "public" (execution time 00:00.005s) +2026-02-28T18:46:26.081+01:00 INFO 74623 --- [allowance-planner] [ Test worker] o.f.c.i.command.clean.CleanExecutor : Successfully cleaned schema "public" (execution time 00:00.001s) +2026-02-28T18:46:26.082+01:00 INFO 74623 --- [allowance-planner] [ Test worker] o.f.c.i.command.clean.CleanExecutor : Successfully dropped post-schema database level objects (execution time 00:00.000s) +2026-02-28T18:46:26.087+01:00 INFO 74623 --- [allowance-planner] [ Test worker] o.f.c.i.s.JdbcTableSchemaHistory : Schema history table "public"."flyway_schema_history" does not exist yet +2026-02-28T18:46:26.087+01:00 INFO 74623 --- [allowance-planner] [ Test worker] o.f.core.internal.command.DbValidate : Successfully validated 1 migration (execution time 00:00.001s) +2026-02-28T18:46:26.088+01:00 INFO 74623 --- [allowance-planner] [ Test worker] o.f.c.i.s.JdbcTableSchemaHistory : Creating Schema History table "public"."flyway_schema_history" ... +2026-02-28T18:46:26.092+01:00 INFO 74623 --- [allowance-planner] [ Test worker] o.f.core.internal.command.DbMigrate : Current version of schema "public": << Empty Schema >> +2026-02-28T18:46:26.093+01:00 INFO 74623 --- [allowance-planner] [ Test worker] o.f.core.internal.command.DbMigrate : Migrating schema "public" to version "1 - initial" +2026-02-28T18:46:26.097+01:00 INFO 74623 --- [allowance-planner] [ Test worker] o.f.core.internal.command.DbMigrate : Successfully applied 1 migration to schema "public", now at version v1 (execution time 00:00.003s) +2026-02-28T18:46:26.226+01:00 INFO 74623 --- [allowance-planner] [ Test worker] o.f.c.i.command.clean.CleanExecutor : Successfully dropped pre-schema database level objects (execution time 00:00.000s) +2026-02-28T18:46:26.229+01:00 INFO 74623 --- [allowance-planner] [ Test worker] o.f.c.i.command.clean.CleanExecutor : Successfully cleaned schema "public" (execution time 00:00.002s) +2026-02-28T18:46:26.230+01:00 INFO 74623 --- [allowance-planner] [ Test worker] o.f.c.i.command.clean.CleanExecutor : Successfully cleaned schema "public" (execution time 00:00.000s) +2026-02-28T18:46:26.230+01:00 INFO 74623 --- [allowance-planner] [ Test worker] o.f.c.i.command.clean.CleanExecutor : Successfully dropped post-schema database level objects (execution time 00:00.000s) +2026-02-28T18:46:26.234+01:00 INFO 74623 --- [allowance-planner] [ Test worker] o.f.c.i.s.JdbcTableSchemaHistory : Schema history table "public"."flyway_schema_history" does not exist yet +2026-02-28T18:46:26.234+01:00 INFO 74623 --- [allowance-planner] [ Test worker] o.f.core.internal.command.DbValidate : Successfully validated 1 migration (execution time 00:00.001s) +2026-02-28T18:46:26.235+01:00 INFO 74623 --- [allowance-planner] [ Test worker] o.f.c.i.s.JdbcTableSchemaHistory : Creating Schema History table "public"."flyway_schema_history" ... +2026-02-28T18:46:26.237+01:00 INFO 74623 --- [allowance-planner] [ Test worker] o.f.core.internal.command.DbMigrate : Current version of schema "public": << Empty Schema >> +2026-02-28T18:46:26.238+01:00 INFO 74623 --- [allowance-planner] [ Test worker] o.f.core.internal.command.DbMigrate : Migrating schema "public" to version "1 - initial" +2026-02-28T18:46:26.243+01:00 INFO 74623 --- [allowance-planner] [ Test worker] o.f.core.internal.command.DbMigrate : Successfully applied 1 migration to schema "public", now at version v1 (execution time 00:00.003s) +2026-02-28T18:46:26.292+01:00 INFO 74623 --- [allowance-planner] [ Test worker] o.f.c.i.command.clean.CleanExecutor : Successfully dropped pre-schema database level objects (execution time 00:00.000s) +2026-02-28T18:46:26.295+01:00 INFO 74623 --- [allowance-planner] [ Test worker] o.f.c.i.command.clean.CleanExecutor : Successfully cleaned schema "public" (execution time 00:00.002s) +2026-02-28T18:46:26.296+01:00 INFO 74623 --- [allowance-planner] [ Test worker] o.f.c.i.command.clean.CleanExecutor : Successfully cleaned schema "public" (execution time 00:00.001s) +2026-02-28T18:46:26.296+01:00 INFO 74623 --- [allowance-planner] [ Test worker] o.f.c.i.command.clean.CleanExecutor : Successfully dropped post-schema database level objects (execution time 00:00.000s) +2026-02-28T18:46:26.298+01:00 INFO 74623 --- [allowance-planner] [ Test worker] o.f.c.i.s.JdbcTableSchemaHistory : Schema history table "public"."flyway_schema_history" does not exist yet +2026-02-28T18:46:26.299+01:00 INFO 74623 --- [allowance-planner] [ Test worker] o.f.core.internal.command.DbValidate : Successfully validated 1 migration (execution time 00:00.000s) +2026-02-28T18:46:26.300+01:00 INFO 74623 --- [allowance-planner] [ Test worker] o.f.c.i.s.JdbcTableSchemaHistory : Creating Schema History table "public"."flyway_schema_history" ... +2026-02-28T18:46:26.302+01:00 INFO 74623 --- [allowance-planner] [ Test worker] o.f.core.internal.command.DbMigrate : Current version of schema "public": << Empty Schema >> +2026-02-28T18:46:26.303+01:00 INFO 74623 --- [allowance-planner] [ Test worker] o.f.core.internal.command.DbMigrate : Migrating schema "public" to version "1 - initial" +2026-02-28T18:46:26.310+01:00 INFO 74623 --- [allowance-planner] [ Test worker] o.f.core.internal.command.DbMigrate : Successfully applied 1 migration to schema "public", now at version v1 (execution time 00:00.004s) +2026-02-28T18:46:26.402+01:00 INFO 74623 --- [allowance-planner] [ Test worker] o.f.c.i.command.clean.CleanExecutor : Successfully dropped pre-schema database level objects (execution time 00:00.000s) +2026-02-28T18:46:26.407+01:00 INFO 74623 --- [allowance-planner] [ Test worker] o.f.c.i.command.clean.CleanExecutor : Successfully cleaned schema "public" (execution time 00:00.004s) +2026-02-28T18:46:26.409+01:00 INFO 74623 --- [allowance-planner] [ Test worker] o.f.c.i.command.clean.CleanExecutor : Successfully cleaned schema "public" (execution time 00:00.001s) +2026-02-28T18:46:26.409+01:00 INFO 74623 --- [allowance-planner] [ Test worker] o.f.c.i.command.clean.CleanExecutor : Successfully dropped post-schema database level objects (execution time 00:00.000s) +2026-02-28T18:46:26.411+01:00 INFO 74623 --- [allowance-planner] [ Test worker] o.f.c.i.s.JdbcTableSchemaHistory : Schema history table "public"."flyway_schema_history" does not exist yet +2026-02-28T18:46:26.412+01:00 INFO 74623 --- [allowance-planner] [ Test worker] o.f.core.internal.command.DbValidate : Successfully validated 1 migration (execution time 00:00.000s) +2026-02-28T18:46:26.413+01:00 INFO 74623 --- [allowance-planner] [ Test worker] o.f.c.i.s.JdbcTableSchemaHistory : Creating Schema History table "public"."flyway_schema_history" ... +2026-02-28T18:46:26.415+01:00 INFO 74623 --- [allowance-planner] [ Test worker] o.f.core.internal.command.DbMigrate : Current version of schema "public": << Empty Schema >> +2026-02-28T18:46:26.416+01:00 INFO 74623 --- [allowance-planner] [ Test worker] o.f.core.internal.command.DbMigrate : Migrating schema "public" to version "1 - initial" +2026-02-28T18:46:26.420+01:00 INFO 74623 --- [allowance-planner] [ Test worker] o.f.core.internal.command.DbMigrate : Successfully applied 1 migration to schema "public", now at version v1 (execution time 00:00.003s) +2026-02-28T18:46:26.434+01:00 INFO 74623 --- [allowance-planner] [ Test worker] o.f.c.i.command.clean.CleanExecutor : Successfully dropped pre-schema database level objects (execution time 00:00.000s) +2026-02-28T18:46:26.437+01:00 INFO 74623 --- [allowance-planner] [ Test worker] o.f.c.i.command.clean.CleanExecutor : Successfully cleaned schema "public" (execution time 00:00.002s) +2026-02-28T18:46:26.439+01:00 INFO 74623 --- [allowance-planner] [ Test worker] o.f.c.i.command.clean.CleanExecutor : Successfully cleaned schema "public" (execution time 00:00.002s) +2026-02-28T18:46:26.439+01:00 INFO 74623 --- [allowance-planner] [ Test worker] o.f.c.i.command.clean.CleanExecutor : Successfully dropped post-schema database level objects (execution time 00:00.000s) +2026-02-28T18:46:26.443+01:00 INFO 74623 --- [allowance-planner] [ Test worker] o.f.c.i.s.JdbcTableSchemaHistory : Schema history table "public"."flyway_schema_history" does not exist yet +2026-02-28T18:46:26.443+01:00 INFO 74623 --- [allowance-planner] [ Test worker] o.f.core.internal.command.DbValidate : Successfully validated 1 migration (execution time 00:00.000s) +2026-02-28T18:46:26.444+01:00 INFO 74623 --- [allowance-planner] [ Test worker] o.f.c.i.s.JdbcTableSchemaHistory : Creating Schema History table "public"."flyway_schema_history" ... +2026-02-28T18:46:26.446+01:00 INFO 74623 --- [allowance-planner] [ Test worker] o.f.core.internal.command.DbMigrate : Current version of schema "public": << Empty Schema >> +2026-02-28T18:46:26.447+01:00 INFO 74623 --- [allowance-planner] [ Test worker] o.f.core.internal.command.DbMigrate : Migrating schema "public" to version "1 - initial" +2026-02-28T18:46:26.454+01:00 INFO 74623 --- [allowance-planner] [ Test worker] o.f.core.internal.command.DbMigrate : Successfully applied 1 migration to schema "public", now at version v1 (execution time 00:00.005s) +2026-02-28T18:46:26.520+01:00 INFO 74623 --- [allowance-planner] [ Test worker] o.f.c.i.command.clean.CleanExecutor : Successfully dropped pre-schema database level objects (execution time 00:00.000s) +2026-02-28T18:46:26.524+01:00 INFO 74623 --- [allowance-planner] [ Test worker] o.f.c.i.command.clean.CleanExecutor : Successfully cleaned schema "public" (execution time 00:00.003s) +2026-02-28T18:46:26.526+01:00 INFO 74623 --- [allowance-planner] [ Test worker] o.f.c.i.command.clean.CleanExecutor : Successfully cleaned schema "public" (execution time 00:00.001s) +2026-02-28T18:46:26.526+01:00 INFO 74623 --- [allowance-planner] [ Test worker] o.f.c.i.command.clean.CleanExecutor : Successfully dropped post-schema database level objects (execution time 00:00.000s) +2026-02-28T18:46:26.532+01:00 INFO 74623 --- [allowance-planner] [ Test worker] o.f.c.i.s.JdbcTableSchemaHistory : Schema history table "public"."flyway_schema_history" does not exist yet +2026-02-28T18:46:26.532+01:00 INFO 74623 --- [allowance-planner] [ Test worker] o.f.core.internal.command.DbValidate : Successfully validated 1 migration (execution time 00:00.000s) +2026-02-28T18:46:26.533+01:00 INFO 74623 --- [allowance-planner] [ Test worker] o.f.c.i.s.JdbcTableSchemaHistory : Creating Schema History table "public"."flyway_schema_history" ... +2026-02-28T18:46:26.536+01:00 INFO 74623 --- [allowance-planner] [ Test worker] o.f.core.internal.command.DbMigrate : Current version of schema "public": << Empty Schema >> +2026-02-28T18:46:26.537+01:00 INFO 74623 --- [allowance-planner] [ Test worker] o.f.core.internal.command.DbMigrate : Migrating schema "public" to version "1 - initial" +2026-02-28T18:46:26.541+01:00 INFO 74623 --- [allowance-planner] [ Test worker] o.f.core.internal.command.DbMigrate : Successfully applied 1 migration to schema "public", now at version v1 (execution time 00:00.003s) +2026-02-28T18:46:26.618+01:00 INFO 74623 --- [allowance-planner] [ Test worker] o.f.c.i.command.clean.CleanExecutor : Successfully dropped pre-schema database level objects (execution time 00:00.000s) +2026-02-28T18:46:26.622+01:00 INFO 74623 --- [allowance-planner] [ Test worker] o.f.c.i.command.clean.CleanExecutor : Successfully cleaned schema "public" (execution time 00:00.003s) +2026-02-28T18:46:26.623+01:00 INFO 74623 --- [allowance-planner] [ Test worker] o.f.c.i.command.clean.CleanExecutor : Successfully cleaned schema "public" (execution time 00:00.001s) +2026-02-28T18:46:26.624+01:00 INFO 74623 --- [allowance-planner] [ Test worker] o.f.c.i.command.clean.CleanExecutor : Successfully dropped post-schema database level objects (execution time 00:00.000s) +2026-02-28T18:46:26.626+01:00 INFO 74623 --- [allowance-planner] [ Test worker] o.f.c.i.s.JdbcTableSchemaHistory : Schema history table "public"."flyway_schema_history" does not exist yet +2026-02-28T18:46:26.626+01:00 INFO 74623 --- [allowance-planner] [ Test worker] o.f.core.internal.command.DbValidate : Successfully validated 1 migration (execution time 00:00.000s) +2026-02-28T18:46:26.627+01:00 INFO 74623 --- [allowance-planner] [ Test worker] o.f.c.i.s.JdbcTableSchemaHistory : Creating Schema History table "public"."flyway_schema_history" ... +2026-02-28T18:46:26.630+01:00 INFO 74623 --- [allowance-planner] [ Test worker] o.f.core.internal.command.DbMigrate : Current version of schema "public": << Empty Schema >> +2026-02-28T18:46:26.630+01:00 INFO 74623 --- [allowance-planner] [ Test worker] o.f.core.internal.command.DbMigrate : Migrating schema "public" to version "1 - initial" +2026-02-28T18:46:26.635+01:00 INFO 74623 --- [allowance-planner] [ Test worker] o.f.core.internal.command.DbMigrate : Successfully applied 1 migration to schema "public", now at version v1 (execution time 00:00.003s) +2026-02-28T18:46:26.645+01:00 INFO 74623 --- [allowance-planner] [ Test worker] o.f.c.i.command.clean.CleanExecutor : Successfully dropped pre-schema database level objects (execution time 00:00.000s) +2026-02-28T18:46:26.651+01:00 INFO 74623 --- [allowance-planner] [ Test worker] o.f.c.i.command.clean.CleanExecutor : Successfully cleaned schema "public" (execution time 00:00.005s) +2026-02-28T18:46:26.653+01:00 INFO 74623 --- [allowance-planner] [ Test worker] o.f.c.i.command.clean.CleanExecutor : Successfully cleaned schema "public" (execution time 00:00.001s) +2026-02-28T18:46:26.653+01:00 INFO 74623 --- [allowance-planner] [ Test worker] o.f.c.i.command.clean.CleanExecutor : Successfully dropped post-schema database level objects (execution time 00:00.000s) +2026-02-28T18:46:26.656+01:00 INFO 74623 --- [allowance-planner] [ Test worker] o.f.c.i.s.JdbcTableSchemaHistory : Schema history table "public"."flyway_schema_history" does not exist yet +2026-02-28T18:46:26.656+01:00 INFO 74623 --- [allowance-planner] [ Test worker] o.f.core.internal.command.DbValidate : Successfully validated 1 migration (execution time 00:00.000s) +2026-02-28T18:46:26.657+01:00 INFO 74623 --- [allowance-planner] [ Test worker] o.f.c.i.s.JdbcTableSchemaHistory : Creating Schema History table "public"."flyway_schema_history" ... +2026-02-28T18:46:26.659+01:00 INFO 74623 --- [allowance-planner] [ Test worker] o.f.core.internal.command.DbMigrate : Current version of schema "public": << Empty Schema >> +2026-02-28T18:46:26.660+01:00 INFO 74623 --- [allowance-planner] [ Test worker] o.f.core.internal.command.DbMigrate : Migrating schema "public" to version "1 - initial" +2026-02-28T18:46:26.664+01:00 INFO 74623 --- [allowance-planner] [ Test worker] o.f.core.internal.command.DbMigrate : Successfully applied 1 migration to schema "public", now at version v1 (execution time 00:00.003s) +2026-02-28T18:46:26.759+01:00 INFO 74623 --- [allowance-planner] [ Test worker] o.f.c.i.command.clean.CleanExecutor : Successfully dropped pre-schema database level objects (execution time 00:00.000s) +2026-02-28T18:46:26.764+01:00 INFO 74623 --- [allowance-planner] [ Test worker] o.f.c.i.command.clean.CleanExecutor : Successfully cleaned schema "public" (execution time 00:00.005s) +2026-02-28T18:46:26.766+01:00 INFO 74623 --- [allowance-planner] [ Test worker] o.f.c.i.command.clean.CleanExecutor : Successfully cleaned schema "public" (execution time 00:00.001s) +2026-02-28T18:46:26.766+01:00 INFO 74623 --- [allowance-planner] [ Test worker] o.f.c.i.command.clean.CleanExecutor : Successfully dropped post-schema database level objects (execution time 00:00.000s) +2026-02-28T18:46:26.768+01:00 INFO 74623 --- [allowance-planner] [ Test worker] o.f.c.i.s.JdbcTableSchemaHistory : Schema history table "public"."flyway_schema_history" does not exist yet +2026-02-28T18:46:26.769+01:00 INFO 74623 --- [allowance-planner] [ Test worker] o.f.core.internal.command.DbValidate : Successfully validated 1 migration (execution time 00:00.000s) +2026-02-28T18:46:26.769+01:00 INFO 74623 --- [allowance-planner] [ Test worker] o.f.c.i.s.JdbcTableSchemaHistory : Creating Schema History table "public"."flyway_schema_history" ... +2026-02-28T18:46:26.771+01:00 INFO 74623 --- [allowance-planner] [ Test worker] o.f.core.internal.command.DbMigrate : Current version of schema "public": << Empty Schema >> +2026-02-28T18:46:26.772+01:00 INFO 74623 --- [allowance-planner] [ Test worker] o.f.core.internal.command.DbMigrate : Migrating schema "public" to version "1 - initial" +2026-02-28T18:46:26.777+01:00 INFO 74623 --- [allowance-planner] [ Test worker] o.f.core.internal.command.DbMigrate : Successfully applied 1 migration to schema "public", now at version v1 (execution time 00:00.004s) +2026-02-28T18:46:26.794+01:00 INFO 74623 --- [allowance-planner] [ Test worker] o.f.c.i.command.clean.CleanExecutor : Successfully dropped pre-schema database level objects (execution time 00:00.000s) +2026-02-28T18:46:26.799+01:00 INFO 74623 --- [allowance-planner] [ Test worker] o.f.c.i.command.clean.CleanExecutor : Successfully cleaned schema "public" (execution time 00:00.004s) +2026-02-28T18:46:26.801+01:00 INFO 74623 --- [allowance-planner] [ Test worker] o.f.c.i.command.clean.CleanExecutor : Successfully cleaned schema "public" (execution time 00:00.002s) +2026-02-28T18:46:26.801+01:00 INFO 74623 --- [allowance-planner] [ Test worker] o.f.c.i.command.clean.CleanExecutor : Successfully dropped post-schema database level objects (execution time 00:00.000s) +2026-02-28T18:46:26.806+01:00 INFO 74623 --- [allowance-planner] [ Test worker] o.f.c.i.s.JdbcTableSchemaHistory : Schema history table "public"."flyway_schema_history" does not exist yet +2026-02-28T18:46:26.807+01:00 INFO 74623 --- [allowance-planner] [ Test worker] o.f.core.internal.command.DbValidate : Successfully validated 1 migration (execution time 00:00.000s) +2026-02-28T18:46:26.807+01:00 INFO 74623 --- [allowance-planner] [ Test worker] o.f.c.i.s.JdbcTableSchemaHistory : Creating Schema History table "public"."flyway_schema_history" ... +2026-02-28T18:46:26.810+01:00 INFO 74623 --- [allowance-planner] [ Test worker] o.f.core.internal.command.DbMigrate : Current version of schema "public": << Empty Schema >> +2026-02-28T18:46:26.811+01:00 INFO 74623 --- [allowance-planner] [ Test worker] o.f.core.internal.command.DbMigrate : Migrating schema "public" to version "1 - initial" +2026-02-28T18:46:26.819+01:00 INFO 74623 --- [allowance-planner] [ Test worker] o.f.core.internal.command.DbMigrate : Successfully applied 1 migration to schema "public", now at version v1 (execution time 00:00.005s) +2026-02-28T18:46:26.834+01:00 INFO 74623 --- [allowance-planner] [ Test worker] o.f.c.i.command.clean.CleanExecutor : Successfully dropped pre-schema database level objects (execution time 00:00.000s) +2026-02-28T18:46:26.838+01:00 INFO 74623 --- [allowance-planner] [ Test worker] o.f.c.i.command.clean.CleanExecutor : Successfully cleaned schema "public" (execution time 00:00.003s) +2026-02-28T18:46:26.840+01:00 INFO 74623 --- [allowance-planner] [ Test worker] o.f.c.i.command.clean.CleanExecutor : Successfully cleaned schema "public" (execution time 00:00.001s) +2026-02-28T18:46:26.840+01:00 INFO 74623 --- [allowance-planner] [ Test worker] o.f.c.i.command.clean.CleanExecutor : Successfully dropped post-schema database level objects (execution time 00:00.000s) +2026-02-28T18:46:26.843+01:00 INFO 74623 --- [allowance-planner] [ Test worker] o.f.c.i.s.JdbcTableSchemaHistory : Schema history table "public"."flyway_schema_history" does not exist yet +2026-02-28T18:46:26.843+01:00 INFO 74623 --- [allowance-planner] [ Test worker] o.f.core.internal.command.DbValidate : Successfully validated 1 migration (execution time 00:00.000s) +2026-02-28T18:46:26.844+01:00 INFO 74623 --- [allowance-planner] [ Test worker] o.f.c.i.s.JdbcTableSchemaHistory : Creating Schema History table "public"."flyway_schema_history" ... +2026-02-28T18:46:26.847+01:00 INFO 74623 --- [allowance-planner] [ Test worker] o.f.core.internal.command.DbMigrate : Current version of schema "public": << Empty Schema >> +2026-02-28T18:46:26.848+01:00 INFO 74623 --- [allowance-planner] [ Test worker] o.f.core.internal.command.DbMigrate : Migrating schema "public" to version "1 - initial" +2026-02-28T18:46:26.854+01:00 INFO 74623 --- [allowance-planner] [ Test worker] o.f.core.internal.command.DbMigrate : Successfully applied 1 migration to schema "public", now at version v1 (execution time 00:00.004s) +2026-02-28T18:46:26.923+01:00 INFO 74623 --- [allowance-planner] [ Test worker] o.f.c.i.command.clean.CleanExecutor : Successfully dropped pre-schema database level objects (execution time 00:00.000s) +2026-02-28T18:46:26.927+01:00 INFO 74623 --- [allowance-planner] [ Test worker] o.f.c.i.command.clean.CleanExecutor : Successfully cleaned schema "public" (execution time 00:00.003s) +2026-02-28T18:46:26.928+01:00 INFO 74623 --- [allowance-planner] [ Test worker] o.f.c.i.command.clean.CleanExecutor : Successfully cleaned schema "public" (execution time 00:00.001s) +2026-02-28T18:46:26.928+01:00 INFO 74623 --- [allowance-planner] [ Test worker] o.f.c.i.command.clean.CleanExecutor : Successfully dropped post-schema database level objects (execution time 00:00.000s) +2026-02-28T18:46:26.931+01:00 INFO 74623 --- [allowance-planner] [ Test worker] o.f.c.i.s.JdbcTableSchemaHistory : Schema history table "public"."flyway_schema_history" does not exist yet +2026-02-28T18:46:26.932+01:00 INFO 74623 --- [allowance-planner] [ Test worker] o.f.core.internal.command.DbValidate : Successfully validated 1 migration (execution time 00:00.000s) +2026-02-28T18:46:26.933+01:00 INFO 74623 --- [allowance-planner] [ Test worker] o.f.c.i.s.JdbcTableSchemaHistory : Creating Schema History table "public"."flyway_schema_history" ... +2026-02-28T18:46:26.936+01:00 INFO 74623 --- [allowance-planner] [ Test worker] o.f.core.internal.command.DbMigrate : Current version of schema "public": << Empty Schema >> +2026-02-28T18:46:26.937+01:00 INFO 74623 --- [allowance-planner] [ Test worker] o.f.core.internal.command.DbMigrate : Migrating schema "public" to version "1 - initial" +2026-02-28T18:46:26.941+01:00 INFO 74623 --- [allowance-planner] [ Test worker] o.f.core.internal.command.DbMigrate : Successfully applied 1 migration to schema "public", now at version v1 (execution time 00:00.003s) +2026-02-28T18:46:26.995+01:00 INFO 74623 --- [allowance-planner] [ Test worker] o.f.c.i.command.clean.CleanExecutor : Successfully dropped pre-schema database level objects (execution time 00:00.000s) +2026-02-28T18:46:26.999+01:00 INFO 74623 --- [allowance-planner] [ Test worker] o.f.c.i.command.clean.CleanExecutor : Successfully cleaned schema "public" (execution time 00:00.003s) +2026-02-28T18:46:27.001+01:00 INFO 74623 --- [allowance-planner] [ Test worker] o.f.c.i.command.clean.CleanExecutor : Successfully cleaned schema "public" (execution time 00:00.001s) +2026-02-28T18:46:27.001+01:00 INFO 74623 --- [allowance-planner] [ Test worker] o.f.c.i.command.clean.CleanExecutor : Successfully dropped post-schema database level objects (execution time 00:00.000s) +2026-02-28T18:46:27.005+01:00 INFO 74623 --- [allowance-planner] [ Test worker] o.f.c.i.s.JdbcTableSchemaHistory : Schema history table "public"."flyway_schema_history" does not exist yet +2026-02-28T18:46:27.005+01:00 INFO 74623 --- [allowance-planner] [ Test worker] o.f.core.internal.command.DbValidate : Successfully validated 1 migration (execution time 00:00.000s) +2026-02-28T18:46:27.007+01:00 INFO 74623 --- [allowance-planner] [ Test worker] o.f.c.i.s.JdbcTableSchemaHistory : Creating Schema History table "public"."flyway_schema_history" ... +2026-02-28T18:46:27.009+01:00 INFO 74623 --- [allowance-planner] [ Test worker] o.f.core.internal.command.DbMigrate : Current version of schema "public": << Empty Schema >> +2026-02-28T18:46:27.010+01:00 INFO 74623 --- [allowance-planner] [ Test worker] o.f.core.internal.command.DbMigrate : Migrating schema "public" to version "1 - initial" +2026-02-28T18:46:27.016+01:00 INFO 74623 --- [allowance-planner] [ Test worker] o.f.core.internal.command.DbMigrate : Successfully applied 1 migration to schema "public", now at version v1 (execution time 00:00.002s) +2026-02-28T18:46:27.049+01:00 INFO 74623 --- [allowance-planner] [ Test worker] o.f.c.i.command.clean.CleanExecutor : Successfully dropped pre-schema database level objects (execution time 00:00.000s) +2026-02-28T18:46:27.055+01:00 INFO 74623 --- [allowance-planner] [ Test worker] o.f.c.i.command.clean.CleanExecutor : Successfully cleaned schema "public" (execution time 00:00.004s) +2026-02-28T18:46:27.056+01:00 INFO 74623 --- [allowance-planner] [ Test worker] o.f.c.i.command.clean.CleanExecutor : Successfully cleaned schema "public" (execution time 00:00.001s) +2026-02-28T18:46:27.056+01:00 INFO 74623 --- [allowance-planner] [ Test worker] o.f.c.i.command.clean.CleanExecutor : Successfully dropped post-schema database level objects (execution time 00:00.000s) +2026-02-28T18:46:27.059+01:00 INFO 74623 --- [allowance-planner] [ Test worker] o.f.c.i.s.JdbcTableSchemaHistory : Schema history table "public"."flyway_schema_history" does not exist yet +2026-02-28T18:46:27.059+01:00 INFO 74623 --- [allowance-planner] [ Test worker] o.f.core.internal.command.DbValidate : Successfully validated 1 migration (execution time 00:00.000s) +2026-02-28T18:46:27.060+01:00 INFO 74623 --- [allowance-planner] [ Test worker] o.f.c.i.s.JdbcTableSchemaHistory : Creating Schema History table "public"."flyway_schema_history" ... +2026-02-28T18:46:27.062+01:00 INFO 74623 --- [allowance-planner] [ Test worker] o.f.core.internal.command.DbMigrate : Current version of schema "public": << Empty Schema >> +2026-02-28T18:46:27.063+01:00 INFO 74623 --- [allowance-planner] [ Test worker] o.f.core.internal.command.DbMigrate : Migrating schema "public" to version "1 - initial" +2026-02-28T18:46:27.067+01:00 INFO 74623 --- [allowance-planner] [ Test worker] o.f.core.internal.command.DbMigrate : Successfully applied 1 migration to schema "public", now at version v1 (execution time 00:00.003s) +2026-02-28T18:46:27.126+01:00 INFO 74623 --- [allowance-planner] [ Test worker] o.f.c.i.command.clean.CleanExecutor : Successfully dropped pre-schema database level objects (execution time 00:00.000s) +2026-02-28T18:46:27.130+01:00 INFO 74623 --- [allowance-planner] [ Test worker] o.f.c.i.command.clean.CleanExecutor : Successfully cleaned schema "public" (execution time 00:00.003s) +2026-02-28T18:46:27.132+01:00 INFO 74623 --- [allowance-planner] [ Test worker] o.f.c.i.command.clean.CleanExecutor : Successfully cleaned schema "public" (execution time 00:00.001s) +2026-02-28T18:46:27.132+01:00 INFO 74623 --- [allowance-planner] [ Test worker] o.f.c.i.command.clean.CleanExecutor : Successfully dropped post-schema database level objects (execution time 00:00.000s) +2026-02-28T18:46:27.134+01:00 INFO 74623 --- [allowance-planner] [ Test worker] o.f.c.i.s.JdbcTableSchemaHistory : Schema history table "public"."flyway_schema_history" does not exist yet +2026-02-28T18:46:27.134+01:00 INFO 74623 --- [allowance-planner] [ Test worker] o.f.core.internal.command.DbValidate : Successfully validated 1 migration (execution time 00:00.000s) +2026-02-28T18:46:27.135+01:00 INFO 74623 --- [allowance-planner] [ Test worker] o.f.c.i.s.JdbcTableSchemaHistory : Creating Schema History table "public"."flyway_schema_history" ... +2026-02-28T18:46:27.138+01:00 INFO 74623 --- [allowance-planner] [ Test worker] o.f.core.internal.command.DbMigrate : Current version of schema "public": << Empty Schema >> +2026-02-28T18:46:27.139+01:00 INFO 74623 --- [allowance-planner] [ Test worker] o.f.core.internal.command.DbMigrate : Migrating schema "public" to version "1 - initial" +2026-02-28T18:46:27.142+01:00 INFO 74623 --- [allowance-planner] [ Test worker] o.f.core.internal.command.DbMigrate : Successfully applied 1 migration to schema "public", now at version v1 (execution time 00:00.002s) +2026-02-28T18:46:27.189+01:00 INFO 74623 --- [allowance-planner] [ Test worker] o.f.c.i.command.clean.CleanExecutor : Successfully dropped pre-schema database level objects (execution time 00:00.000s) +2026-02-28T18:46:27.193+01:00 INFO 74623 --- [allowance-planner] [ Test worker] o.f.c.i.command.clean.CleanExecutor : Successfully cleaned schema "public" (execution time 00:00.003s) +2026-02-28T18:46:27.194+01:00 INFO 74623 --- [allowance-planner] [ Test worker] o.f.c.i.command.clean.CleanExecutor : Successfully cleaned schema "public" (execution time 00:00.001s) +2026-02-28T18:46:27.194+01:00 INFO 74623 --- [allowance-planner] [ Test worker] o.f.c.i.command.clean.CleanExecutor : Successfully dropped post-schema database level objects (execution time 00:00.000s) +2026-02-28T18:46:27.198+01:00 INFO 74623 --- [allowance-planner] [ Test worker] o.f.c.i.s.JdbcTableSchemaHistory : Schema history table "public"."flyway_schema_history" does not exist yet +2026-02-28T18:46:27.198+01:00 INFO 74623 --- [allowance-planner] [ Test worker] o.f.core.internal.command.DbValidate : Successfully validated 1 migration (execution time 00:00.000s) +2026-02-28T18:46:27.199+01:00 INFO 74623 --- [allowance-planner] [ Test worker] o.f.c.i.s.JdbcTableSchemaHistory : Creating Schema History table "public"."flyway_schema_history" ... +2026-02-28T18:46:27.202+01:00 INFO 74623 --- [allowance-planner] [ Test worker] o.f.core.internal.command.DbMigrate : Current version of schema "public": << Empty Schema >> +2026-02-28T18:46:27.202+01:00 INFO 74623 --- [allowance-planner] [ Test worker] o.f.core.internal.command.DbMigrate : Migrating schema "public" to version "1 - initial" +2026-02-28T18:46:27.208+01:00 INFO 74623 --- [allowance-planner] [ Test worker] o.f.core.internal.command.DbMigrate : Successfully applied 1 migration to schema "public", now at version v1 (execution time 00:00.003s) +2026-02-28T18:46:27.254+01:00 INFO 74623 --- [allowance-planner] [ Test worker] o.f.c.i.command.clean.CleanExecutor : Successfully dropped pre-schema database level objects (execution time 00:00.000s) +2026-02-28T18:46:27.260+01:00 INFO 74623 --- [allowance-planner] [ Test worker] o.f.c.i.command.clean.CleanExecutor : Successfully cleaned schema "public" (execution time 00:00.005s) +2026-02-28T18:46:27.261+01:00 INFO 74623 --- [allowance-planner] [ Test worker] o.f.c.i.command.clean.CleanExecutor : Successfully cleaned schema "public" (execution time 00:00.001s) +2026-02-28T18:46:27.261+01:00 INFO 74623 --- [allowance-planner] [ Test worker] o.f.c.i.command.clean.CleanExecutor : Successfully dropped post-schema database level objects (execution time 00:00.000s) +2026-02-28T18:46:27.264+01:00 INFO 74623 --- [allowance-planner] [ Test worker] o.f.c.i.s.JdbcTableSchemaHistory : Schema history table "public"."flyway_schema_history" does not exist yet +2026-02-28T18:46:27.264+01:00 INFO 74623 --- [allowance-planner] [ Test worker] o.f.core.internal.command.DbValidate : Successfully validated 1 migration (execution time 00:00.000s) +2026-02-28T18:46:27.265+01:00 INFO 74623 --- [allowance-planner] [ Test worker] o.f.c.i.s.JdbcTableSchemaHistory : Creating Schema History table "public"."flyway_schema_history" ... +2026-02-28T18:46:27.268+01:00 INFO 74623 --- [allowance-planner] [ Test worker] o.f.core.internal.command.DbMigrate : Current version of schema "public": << Empty Schema >> +2026-02-28T18:46:27.268+01:00 INFO 74623 --- [allowance-planner] [ Test worker] o.f.core.internal.command.DbMigrate : Migrating schema "public" to version "1 - initial" +2026-02-28T18:46:27.273+01:00 INFO 74623 --- [allowance-planner] [ Test worker] o.f.core.internal.command.DbMigrate : Successfully applied 1 migration to schema "public", now at version v1 (execution time 00:00.002s) +2026-02-28T18:46:27.287+01:00 INFO 74623 --- [allowance-planner] [ Test worker] o.f.c.i.command.clean.CleanExecutor : Successfully dropped pre-schema database level objects (execution time 00:00.000s) +2026-02-28T18:46:27.290+01:00 INFO 74623 --- [allowance-planner] [ Test worker] o.f.c.i.command.clean.CleanExecutor : Successfully cleaned schema "public" (execution time 00:00.003s) +2026-02-28T18:46:27.291+01:00 INFO 74623 --- [allowance-planner] [ Test worker] o.f.c.i.command.clean.CleanExecutor : Successfully cleaned schema "public" (execution time 00:00.001s) +2026-02-28T18:46:27.292+01:00 INFO 74623 --- [allowance-planner] [ Test worker] o.f.c.i.command.clean.CleanExecutor : Successfully dropped post-schema database level objects (execution time 00:00.000s) +2026-02-28T18:46:27.295+01:00 INFO 74623 --- [allowance-planner] [ Test worker] o.f.c.i.s.JdbcTableSchemaHistory : Schema history table "public"."flyway_schema_history" does not exist yet +2026-02-28T18:46:27.295+01:00 INFO 74623 --- [allowance-planner] [ Test worker] o.f.core.internal.command.DbValidate : Successfully validated 1 migration (execution time 00:00.000s) +2026-02-28T18:46:27.296+01:00 INFO 74623 --- [allowance-planner] [ Test worker] o.f.c.i.s.JdbcTableSchemaHistory : Creating Schema History table "public"."flyway_schema_history" ... +2026-02-28T18:46:27.298+01:00 INFO 74623 --- [allowance-planner] [ Test worker] o.f.core.internal.command.DbMigrate : Current version of schema "public": << Empty Schema >> +2026-02-28T18:46:27.298+01:00 INFO 74623 --- [allowance-planner] [ Test worker] o.f.core.internal.command.DbMigrate : Migrating schema "public" to version "1 - initial" +2026-02-28T18:46:27.302+01:00 INFO 74623 --- [allowance-planner] [ Test worker] o.f.core.internal.command.DbMigrate : Successfully applied 1 migration to schema "public", now at version v1 (execution time 00:00.002s) +2026-02-28T18:46:27.323+01:00 INFO 74623 --- [allowance-planner] [ Test worker] o.f.c.i.command.clean.CleanExecutor : Successfully dropped pre-schema database level objects (execution time 00:00.000s) +2026-02-28T18:46:27.327+01:00 INFO 74623 --- [allowance-planner] [ Test worker] o.f.c.i.command.clean.CleanExecutor : Successfully cleaned schema "public" (execution time 00:00.003s) +2026-02-28T18:46:27.328+01:00 INFO 74623 --- [allowance-planner] [ Test worker] o.f.c.i.command.clean.CleanExecutor : Successfully cleaned schema "public" (execution time 00:00.001s) +2026-02-28T18:46:27.328+01:00 INFO 74623 --- [allowance-planner] [ Test worker] o.f.c.i.command.clean.CleanExecutor : Successfully dropped post-schema database level objects (execution time 00:00.000s) +2026-02-28T18:46:27.331+01:00 INFO 74623 --- [allowance-planner] [ Test worker] o.f.c.i.s.JdbcTableSchemaHistory : Schema history table "public"."flyway_schema_history" does not exist yet +2026-02-28T18:46:27.331+01:00 INFO 74623 --- [allowance-planner] [ Test worker] o.f.core.internal.command.DbValidate : Successfully validated 1 migration (execution time 00:00.000s) +2026-02-28T18:46:27.332+01:00 INFO 74623 --- [allowance-planner] [ Test worker] o.f.c.i.s.JdbcTableSchemaHistory : Creating Schema History table "public"."flyway_schema_history" ... +2026-02-28T18:46:27.334+01:00 INFO 74623 --- [allowance-planner] [ Test worker] o.f.core.internal.command.DbMigrate : Current version of schema "public": << Empty Schema >> +2026-02-28T18:46:27.335+01:00 INFO 74623 --- [allowance-planner] [ Test worker] o.f.core.internal.command.DbMigrate : Migrating schema "public" to version "1 - initial" +2026-02-28T18:46:27.340+01:00 INFO 74623 --- [allowance-planner] [ Test worker] o.f.core.internal.command.DbMigrate : Successfully applied 1 migration to schema "public", now at version v1 (execution time 00:00.003s) +2026-02-28T18:46:27.415+01:00 INFO 74623 --- [allowance-planner] [ Test worker] o.f.c.i.command.clean.CleanExecutor : Successfully dropped pre-schema database level objects (execution time 00:00.000s) +2026-02-28T18:46:27.418+01:00 INFO 74623 --- [allowance-planner] [ Test worker] o.f.c.i.command.clean.CleanExecutor : Successfully cleaned schema "public" (execution time 00:00.003s) +2026-02-28T18:46:27.419+01:00 INFO 74623 --- [allowance-planner] [ Test worker] o.f.c.i.command.clean.CleanExecutor : Successfully cleaned schema "public" (execution time 00:00.000s) +2026-02-28T18:46:27.419+01:00 INFO 74623 --- [allowance-planner] [ Test worker] o.f.c.i.command.clean.CleanExecutor : Successfully dropped post-schema database level objects (execution time 00:00.000s) +2026-02-28T18:46:27.423+01:00 INFO 74623 --- [allowance-planner] [ Test worker] o.f.c.i.s.JdbcTableSchemaHistory : Schema history table "public"."flyway_schema_history" does not exist yet +2026-02-28T18:46:27.424+01:00 INFO 74623 --- [allowance-planner] [ Test worker] o.f.core.internal.command.DbValidate : Successfully validated 1 migration (execution time 00:00.001s) +2026-02-28T18:46:27.424+01:00 INFO 74623 --- [allowance-planner] [ Test worker] o.f.c.i.s.JdbcTableSchemaHistory : Creating Schema History table "public"."flyway_schema_history" ... +2026-02-28T18:46:27.428+01:00 INFO 74623 --- [allowance-planner] [ Test worker] o.f.core.internal.command.DbMigrate : Current version of schema "public": << Empty Schema >> +2026-02-28T18:46:27.429+01:00 INFO 74623 --- [allowance-planner] [ Test worker] o.f.core.internal.command.DbMigrate : Migrating schema "public" to version "1 - initial" +2026-02-28T18:46:27.438+01:00 INFO 74623 --- [allowance-planner] [ Test worker] o.f.core.internal.command.DbMigrate : Successfully applied 1 migration to schema "public", now at version v1 (execution time 00:00.004s) +2026-02-28T18:46:27.452+01:00 INFO 74623 --- [allowance-planner] [ Test worker] o.f.c.i.command.clean.CleanExecutor : Successfully dropped pre-schema database level objects (execution time 00:00.000s) +2026-02-28T18:46:27.455+01:00 INFO 74623 --- [allowance-planner] [ Test worker] o.f.c.i.command.clean.CleanExecutor : Successfully cleaned schema "public" (execution time 00:00.002s) +2026-02-28T18:46:27.456+01:00 INFO 74623 --- [allowance-planner] [ Test worker] o.f.c.i.command.clean.CleanExecutor : Successfully cleaned schema "public" (execution time 00:00.000s) +2026-02-28T18:46:27.456+01:00 INFO 74623 --- [allowance-planner] [ Test worker] o.f.c.i.command.clean.CleanExecutor : Successfully dropped post-schema database level objects (execution time 00:00.000s) +2026-02-28T18:46:27.460+01:00 INFO 74623 --- [allowance-planner] [ Test worker] o.f.c.i.s.JdbcTableSchemaHistory : Schema history table "public"."flyway_schema_history" does not exist yet +2026-02-28T18:46:27.460+01:00 INFO 74623 --- [allowance-planner] [ Test worker] o.f.core.internal.command.DbValidate : Successfully validated 1 migration (execution time 00:00.000s) +2026-02-28T18:46:27.461+01:00 INFO 74623 --- [allowance-planner] [ Test worker] o.f.c.i.s.JdbcTableSchemaHistory : Creating Schema History table "public"."flyway_schema_history" ... +2026-02-28T18:46:27.463+01:00 INFO 74623 --- [allowance-planner] [ Test worker] o.f.core.internal.command.DbMigrate : Current version of schema "public": << Empty Schema >> +2026-02-28T18:46:27.464+01:00 INFO 74623 --- [allowance-planner] [ Test worker] o.f.core.internal.command.DbMigrate : Migrating schema "public" to version "1 - initial" +2026-02-28T18:46:27.468+01:00 INFO 74623 --- [allowance-planner] [ Test worker] o.f.core.internal.command.DbMigrate : Successfully applied 1 migration to schema "public", now at version v1 (execution time 00:00.002s) +2026-02-28T18:46:27.546+01:00 INFO 74623 --- [allowance-planner] [ Test worker] o.f.c.i.command.clean.CleanExecutor : Successfully dropped pre-schema database level objects (execution time 00:00.000s) +2026-02-28T18:46:27.549+01:00 INFO 74623 --- [allowance-planner] [ Test worker] o.f.c.i.command.clean.CleanExecutor : Successfully cleaned schema "public" (execution time 00:00.002s) +2026-02-28T18:46:27.550+01:00 INFO 74623 --- [allowance-planner] [ Test worker] o.f.c.i.command.clean.CleanExecutor : Successfully cleaned schema "public" (execution time 00:00.001s) +2026-02-28T18:46:27.550+01:00 INFO 74623 --- [allowance-planner] [ Test worker] o.f.c.i.command.clean.CleanExecutor : Successfully dropped post-schema database level objects (execution time 00:00.000s) +2026-02-28T18:46:27.553+01:00 INFO 74623 --- [allowance-planner] [ Test worker] o.f.c.i.s.JdbcTableSchemaHistory : Schema history table "public"."flyway_schema_history" does not exist yet +2026-02-28T18:46:27.553+01:00 INFO 74623 --- [allowance-planner] [ Test worker] o.f.core.internal.command.DbValidate : Successfully validated 1 migration (execution time 00:00.000s) +2026-02-28T18:46:27.553+01:00 INFO 74623 --- [allowance-planner] [ Test worker] o.f.c.i.s.JdbcTableSchemaHistory : Creating Schema History table "public"."flyway_schema_history" ... +2026-02-28T18:46:27.555+01:00 INFO 74623 --- [allowance-planner] [ Test worker] o.f.core.internal.command.DbMigrate : Current version of schema "public": << Empty Schema >> +2026-02-28T18:46:27.556+01:00 INFO 74623 --- [allowance-planner] [ Test worker] o.f.core.internal.command.DbMigrate : Migrating schema "public" to version "1 - initial" +2026-02-28T18:46:27.563+01:00 INFO 74623 --- [allowance-planner] [ Test worker] o.f.core.internal.command.DbMigrate : Successfully applied 1 migration to schema "public", now at version v1 (execution time 00:00.003s) +2026-02-28T18:46:27.575+01:00 INFO 74623 --- [allowance-planner] [ Test worker] o.f.c.i.command.clean.CleanExecutor : Successfully dropped pre-schema database level objects (execution time 00:00.000s) +2026-02-28T18:46:27.578+01:00 INFO 74623 --- [allowance-planner] [ Test worker] o.f.c.i.command.clean.CleanExecutor : Successfully cleaned schema "public" (execution time 00:00.002s) +2026-02-28T18:46:27.579+01:00 INFO 74623 --- [allowance-planner] [ Test worker] o.f.c.i.command.clean.CleanExecutor : Successfully cleaned schema "public" (execution time 00:00.000s) +2026-02-28T18:46:27.579+01:00 INFO 74623 --- [allowance-planner] [ Test worker] o.f.c.i.command.clean.CleanExecutor : Successfully dropped post-schema database level objects (execution time 00:00.000s) +2026-02-28T18:46:27.580+01:00 INFO 74623 --- [allowance-planner] [ Test worker] o.f.c.i.s.JdbcTableSchemaHistory : Schema history table "public"."flyway_schema_history" does not exist yet +2026-02-28T18:46:27.581+01:00 INFO 74623 --- [allowance-planner] [ Test worker] o.f.core.internal.command.DbValidate : Successfully validated 1 migration (execution time 00:00.000s) +2026-02-28T18:46:27.581+01:00 INFO 74623 --- [allowance-planner] [ Test worker] o.f.c.i.s.JdbcTableSchemaHistory : Creating Schema History table "public"."flyway_schema_history" ... +2026-02-28T18:46:27.583+01:00 INFO 74623 --- [allowance-planner] [ Test worker] o.f.core.internal.command.DbMigrate : Current version of schema "public": << Empty Schema >> +2026-02-28T18:46:27.583+01:00 INFO 74623 --- [allowance-planner] [ Test worker] o.f.core.internal.command.DbMigrate : Migrating schema "public" to version "1 - initial" +2026-02-28T18:46:27.586+01:00 INFO 74623 --- [allowance-planner] [ Test worker] o.f.core.internal.command.DbMigrate : Successfully applied 1 migration to schema "public", now at version v1 (execution time 00:00.002s) +2026-02-28T18:46:27.649+01:00 INFO 74623 --- [allowance-planner] [ Test worker] o.f.c.i.command.clean.CleanExecutor : Successfully dropped pre-schema database level objects (execution time 00:00.000s) +2026-02-28T18:46:27.652+01:00 INFO 74623 --- [allowance-planner] [ Test worker] o.f.c.i.command.clean.CleanExecutor : Successfully cleaned schema "public" (execution time 00:00.002s) +2026-02-28T18:46:27.653+01:00 INFO 74623 --- [allowance-planner] [ Test worker] o.f.c.i.command.clean.CleanExecutor : Successfully cleaned schema "public" (execution time 00:00.000s) +2026-02-28T18:46:27.653+01:00 INFO 74623 --- [allowance-planner] [ Test worker] o.f.c.i.command.clean.CleanExecutor : Successfully dropped post-schema database level objects (execution time 00:00.000s) +2026-02-28T18:46:27.655+01:00 INFO 74623 --- [allowance-planner] [ Test worker] o.f.c.i.s.JdbcTableSchemaHistory : Schema history table "public"."flyway_schema_history" does not exist yet +2026-02-28T18:46:27.655+01:00 INFO 74623 --- [allowance-planner] [ Test worker] o.f.core.internal.command.DbValidate : Successfully validated 1 migration (execution time 00:00.000s) +2026-02-28T18:46:27.656+01:00 INFO 74623 --- [allowance-planner] [ Test worker] o.f.c.i.s.JdbcTableSchemaHistory : Creating Schema History table "public"."flyway_schema_history" ... +2026-02-28T18:46:27.659+01:00 INFO 74623 --- [allowance-planner] [ Test worker] o.f.core.internal.command.DbMigrate : Current version of schema "public": << Empty Schema >> +2026-02-28T18:46:27.659+01:00 INFO 74623 --- [allowance-planner] [ Test worker] o.f.core.internal.command.DbMigrate : Migrating schema "public" to version "1 - initial" +2026-02-28T18:46:27.667+01:00 INFO 74623 --- [allowance-planner] [ Test worker] o.f.core.internal.command.DbMigrate : Successfully applied 1 migration to schema "public", now at version v1 (execution time 00:00.005s) +2026-02-28T18:46:27.695+01:00 INFO 74623 --- [allowance-planner] [ Test worker] o.f.c.i.command.clean.CleanExecutor : Successfully dropped pre-schema database level objects (execution time 00:00.000s) +2026-02-28T18:46:27.699+01:00 INFO 74623 --- [allowance-planner] [ Test worker] o.f.c.i.command.clean.CleanExecutor : Successfully cleaned schema "public" (execution time 00:00.003s) +2026-02-28T18:46:27.700+01:00 INFO 74623 --- [allowance-planner] [ Test worker] o.f.c.i.command.clean.CleanExecutor : Successfully cleaned schema "public" (execution time 00:00.001s) +2026-02-28T18:46:27.701+01:00 INFO 74623 --- [allowance-planner] [ Test worker] o.f.c.i.command.clean.CleanExecutor : Successfully dropped post-schema database level objects (execution time 00:00.000s) +2026-02-28T18:46:27.704+01:00 INFO 74623 --- [allowance-planner] [ Test worker] o.f.c.i.s.JdbcTableSchemaHistory : Schema history table "public"."flyway_schema_history" does not exist yet +2026-02-28T18:46:27.704+01:00 INFO 74623 --- [allowance-planner] [ Test worker] o.f.core.internal.command.DbValidate : Successfully validated 1 migration (execution time 00:00.000s) +2026-02-28T18:46:27.705+01:00 INFO 74623 --- [allowance-planner] [ Test worker] o.f.c.i.s.JdbcTableSchemaHistory : Creating Schema History table "public"."flyway_schema_history" ... +2026-02-28T18:46:27.707+01:00 INFO 74623 --- [allowance-planner] [ Test worker] o.f.core.internal.command.DbMigrate : Current version of schema "public": << Empty Schema >> +2026-02-28T18:46:27.708+01:00 INFO 74623 --- [allowance-planner] [ Test worker] o.f.core.internal.command.DbMigrate : Migrating schema "public" to version "1 - initial" +2026-02-28T18:46:27.713+01:00 INFO 74623 --- [allowance-planner] [ Test worker] o.f.core.internal.command.DbMigrate : Successfully applied 1 migration to schema "public", now at version v1 (execution time 00:00.003s) +2026-02-28T18:46:27.763+01:00 INFO 74623 --- [allowance-planner] [ Test worker] o.f.c.i.command.clean.CleanExecutor : Successfully dropped pre-schema database level objects (execution time 00:00.000s) +2026-02-28T18:46:27.766+01:00 INFO 74623 --- [allowance-planner] [ Test worker] o.f.c.i.command.clean.CleanExecutor : Successfully cleaned schema "public" (execution time 00:00.003s) +2026-02-28T18:46:27.768+01:00 INFO 74623 --- [allowance-planner] [ Test worker] o.f.c.i.command.clean.CleanExecutor : Successfully cleaned schema "public" (execution time 00:00.001s) +2026-02-28T18:46:27.768+01:00 INFO 74623 --- [allowance-planner] [ Test worker] o.f.c.i.command.clean.CleanExecutor : Successfully dropped post-schema database level objects (execution time 00:00.000s) +2026-02-28T18:46:27.770+01:00 INFO 74623 --- [allowance-planner] [ Test worker] o.f.c.i.s.JdbcTableSchemaHistory : Schema history table "public"."flyway_schema_history" does not exist yet +2026-02-28T18:46:27.770+01:00 INFO 74623 --- [allowance-planner] [ Test worker] o.f.core.internal.command.DbValidate : Successfully validated 1 migration (execution time 00:00.000s) +2026-02-28T18:46:27.771+01:00 INFO 74623 --- [allowance-planner] [ Test worker] o.f.c.i.s.JdbcTableSchemaHistory : Creating Schema History table "public"."flyway_schema_history" ... +2026-02-28T18:46:27.774+01:00 INFO 74623 --- [allowance-planner] [ Test worker] o.f.core.internal.command.DbMigrate : Current version of schema "public": << Empty Schema >> +2026-02-28T18:46:27.774+01:00 INFO 74623 --- [allowance-planner] [ Test worker] o.f.core.internal.command.DbMigrate : Migrating schema "public" to version "1 - initial" +2026-02-28T18:46:27.779+01:00 INFO 74623 --- [allowance-planner] [ Test worker] o.f.core.internal.command.DbMigrate : Successfully applied 1 migration to schema "public", now at version v1 (execution time 00:00.003s) +]]> + + diff --git a/backend-spring/build/test-results/test/TEST-be.seeseepuff.allowanceplanner.ColourUtilTest.xml b/backend-spring/build/test-results/test/TEST-be.seeseepuff.allowanceplanner.ColourUtilTest.xml new file mode 100644 index 0000000..cec448a --- /dev/null +++ b/backend-spring/build/test-results/test/TEST-be.seeseepuff.allowanceplanner.ColourUtilTest.xml @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/backend-spring/build/test-results/test/binary/output-events.bin b/backend-spring/build/test-results/test/binary/output-events.bin new file mode 100644 index 0000000000000000000000000000000000000000..773145cb4d5810e6ce80feb675c5c9df7214377e GIT binary patch literal 136341 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 t7V#|1;ep#jP6l@TcS)?^ZXS6GT=g zQ_0*~L8xI-XF1AHZXs%;0=8hqKDR0By8N$ypsTCN>FrG)a8hx%pAu4ThVL?i$++9J zF8^YO*C4nc=)2wRPiK?4bmpMos?9|NW`fQmGDifosCrXvOhct$>HudSc_(Q83xw|) zHP*vg9 z?Gn^Bv@hB`u18A+W@46w**4~&Ua)fVejIJ8psXvIO0*tqPY4(0mqPm;P zC36RxRBa25MAFD)>oOVV;AZ+aibaa*rGlm+(h|A!2$I@z=`u745XC}VX5(eJToCPc zbFB^m9d}I*Y>HgHhq=RlwATt7E3ryY&R*BK$?hIz3=^d-iX~{#q*^Ul+|XX&#~ry$ zGS%JE*48$@aZzUl*5WD)SKC;JR)ToMIJJwiodg3@Gf`mnR-g?VENrxK4XzceDPsDI z=aRtofS`_6FkBD-&jeQ0A?ns*lZ}^SGjWs5xfzFO<`%oz>sc^Vm&rc_ywRF!WP>@MmfLSsUHAH@>m zRgR(;eHKzS(x8E>CgIoh8Q00VK}ff|w+*`#^j$r*P`|)IuX*3gEn4?SCJI5ZZ7ZfFw>_~ z4ZqXItJUgo%IR~p_uV#LgL?>l_U>TYdBmH+_t|)@(oH1iWXL#CJb(u+yw1k!@rFEG znALlWlj|YqGUi^(Gq+;mw|AJB*EB9p{vW=_|v0*IF?#7(yk+xQ4RN(M`~y>8B(s2}Zl z3=doQ_~g*It3NRT8g)H5qzmy8T@RnM@kymQE1BKU*PlD6GxX_;r)&%6D%#l5dNaz*Kkps(S$z(2KU?ej)m{q_prf{&c)&hfDTh6wly?Hh!d8Ym*^% zQYa<%_3Mj&vhmOPbY9n|Nl=9l{>8?>;@<=p_Bs1qdMWPYu1n^6)L*Jfc1-T&`D=VR zqEkF)`DMto#dAnrh25EdVboEZ`IYqlawGB-~6Z_c47AcX+Apb=kP;w}PRSDqAj45wSuM z{($y`;((=})Ywuh7t%zk>NhXdduauT#*N&mrmNc+?EyEYAZZP2yYR{P{c?!)s?`jV)_66_wWt2qY@Y*fitzL(H!M z3etj1+G(7A5iFUc9Myq9ig1k|=;iWQ>4n=6he=R^YP44l_UApbeoWuh#pW~%NB#_o z$ZuJz7~YX{;`_Ha{l34;cO<)0PHrH>fNUJU*?nn~RF8GHcd}9u(1yD2VL3-A&nk<-INi?16M!V-@R$)NHfo$m{VSH7oeJ(1$F9P z{xzEe_81slvi^#qZpMb}KwToe%Fl2n0y!M^cZ z2Hh~X7tCN%PB|*XNKfJ*R-^nPbv}=Se8e!YuNX5=Q7eiFSDSW?)BgW1Rn4CsPxtlf zF0lYf;W!t5lH4Y8Mv%AOPQA)A&8+I)icQ@t^0s%L-Bb)-qxTaWTgB2ZnA%&A1?wjX z)OF*=`n9paDv!R{L9n)%QtJNmi()2af|Ah`+$?lVud4s&MQr;`LVzPDz$`YDo!h@sQprt-fg^A{RDU%QK{4{P>;CkkNdeE)! zOK05rT#u9Dhg%;X$Ykiu`hDJAi5bJQxs{U{Yt^R| zPN(+|^tX&>_JWpC19vidh21Cr(wp+d#}@AOe97zSuN}N@X`xF#6_roRQ z=8YV1_`SV#$vX$yn0LxM{{P+JuZPzcxGjI!R?sxoB(4(edUw3O*U4txtR*}aoj=Z| zi6UmnX9Tlfyen5HFTA*zmqI1Hp9!H#@3Q$+rT50>FYkHzw~|*OrP7KLS>cLc z>c-=c#>G#;YFzRZrZg^n3e%rtdx^C1vzDhkz%2HhjdEVaPDMR$jW3oBY;E+$%SO3| z-zdq<%R?eQ>CCE4wcar!B-iqJN{Ai6S70L`(vEBSipoei6^^iNu<_HFQg;G1!>B9a zsq)32$HFbAuxQV5Ebdr(3QP8csxF2Wjj}qymr>;Y{=PBNHg!nJeH1jZG zqr7zzH-Ij?ox zDC-(oz;K5P&84^HCW?sA*qixRaYT`nL&Z0^Rb=A;})-^5(Pgm+( zYEXZOh-#vCWAjhFymSa38^YuIR^9&zCR;eLggEme@x(jTK=%CD3zv*_(JCeKX;D3qu=cmL?eF zE(SPB_ua~i@%?P=MHYRy11a3kYuUH*$WFt)onejPLX)2wp+kXN4+U;LAIfj!Ss$yArQr-rT_-F5JnVIowUx-cOf45aiHG)EZ}&a>O>- zFTDo%>A%4$mohVbK9S{3{_!uQU&) z)m>3m8?G&LSMZ~puV&__DH}VDs(%y}jdiu*2Ztn5uyPz`sRA6s6nvEH`NvpbJjOe` zkCPl9C(=H_Rq#m?5D=6xQrMv_)!tqs+naj&&M5aD^6mRffOesNgd92*4 zOrx==&+EPV))Z?mnbi`0JM$;8RS$&KBq%!z)ttIvz}?YOeJ$ znU2}K09UuvdSU{@{W8zYU0S#yxR3L{R_^yGnS#TnU}#-3By)XAZp||?s{zBvtgZ6v zSn0(|$ffMPFi*&=5tNWec71bA242WtM9)Bt#84*}@drM2SRylVrOd)QTBIs_HFRsB za%&K)Ru)bV&>$Pj8RrZ$wT8c5)wQU!(3xW^p%PYA*Lyj~a-+g{#BBQ(v(D%LUs=pV zFk3%NqAGfME`$`i7Ze^wutt45SCWj*6uDpN@~ z)9B1fI&+GdSa*YzBd@1ZP+6i!UH%+<>8=ppRWG5HtmGb13Sm9ST~9%frkXzYFjV(4 zN$)c*USc zrN9v6#j;mE-ecbL@9VfU9t5-g+z(b7_n?4v6sLW_`we{-A?J^xYO*Vyn(Oc zZ#6N-7#_gK@d1oy7o@>IHH6LVob#QT`DVVEbAJB*egwe8at1?4Xh`Z9Mv9@*6h&VM zYTdBiE^;Z=A$M)jmE3iOM`K>ku|=`rao2AP&pO7&U%V;&PzHt-@F4UVQavt1LC!|L zuzR80&(jz|T0=(1D0GHr0}gI0H}I5{q+zw|lunVc#IR#nhfZL3s=RA7h0)h<{HveF zV*RIj2k0N#T~E^mkL#E~mO-<&N+r{>7-|=L8PO|F>9~Yx+C+IR$K{eCkuR)kxWX`Z zz3PbFj+fIh8y#=-_3GN*rn#|YT8$`vRmZg`p03p!d*%98 zZB4@shHRg$-aHU?z%cT{mX7NLFXK(O8ImQ{5)2a+#}&2keN%W1-jo!XswkVwZSFY{ zJ_(LdzS!^R`cH7iQlV#yvJ>SZO#3CM3 QDh`pi^lFxL(3c(g0~iHSO8@`> literal 0 HcmV?d00001 diff --git a/backend-spring/build/tmp/compileJava/compileTransaction/stash-dir/ApiController.class.uniqueId6 b/backend-spring/build/tmp/compileJava/compileTransaction/stash-dir/ApiController.class.uniqueId6 new file mode 100644 index 0000000000000000000000000000000000000000..562948871a9bbb7947c3168a46eefa47631ec967 GIT binary patch literal 15933 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 O$v!@>{gz0rs{UUKj!xqM literal 0 HcmV?d00001 diff --git a/backend-spring/build/tmp/compileJava/compileTransaction/stash-dir/TaskService.class.uniqueId0 b/backend-spring/build/tmp/compileJava/compileTransaction/stash-dir/TaskService.class.uniqueId0 new file mode 100644 index 0000000000000000000000000000000000000000..7b56507f0ceed84ebd508efb42c6df879362e4c1 GIT binary patch literal 7002 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 vd|@b1?hgCfpHw)L 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 literal 0 HcmV?d00001 diff --git a/backend-spring/build/tmp/compileJava/previous-compilation-data.bin b/backend-spring/build/tmp/compileJava/previous-compilation-data.bin new file mode 100644 index 0000000000000000000000000000000000000000..0bb318225354c92ce9805c3ed28efab26f80b333 GIT binary patch literal 42423 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 literal 0 HcmV?d00001 diff --git a/backend-spring/build/tmp/compileTestJava/previous-compilation-data.bin b/backend-spring/build/tmp/compileTestJava/previous-compilation-data.bin new file mode 100644 index 0000000000000000000000000000000000000000..36d5d46c17499f0de5b25173eb18926c138ae1b4 GIT binary patch literal 127948 zcmY&=2UrtZ6KHl*H+3youO0Q;j_ukj1Q3)aLF^?!fG7}50)kz7FBYUJh$2{MDn%5r zgIFmFVnIPcQ3OOlituK`z5jdfetwtT&Dl9Kb7tmDJB!mSv30nZju?oESTrwd8JiZQ zlF8toi>sX-hZZ4qbX4q-I@`!x9Hq|AG9^Jf!ln5t92Krg9?e@VcjVK&WhyoK*1EjT zaGk-uQ9lFR&C)+D7g!2)=pvezi=0p1&7P+ear>eQ+Vh9)EZXBToU|N(2BJY|Fw&xV zE0p#_XudmLo#pDGH2BqNRgLZi@VGzN`DXQo=YsH`FS`?o#ZylX#Prti%hBZSPndMRocij z<5yU&L^?9J9RrZ~%R z`P)ft)C#4C2`vZ~N1>LgglK@gj00smp9d2zGB7PJ*@Lt5Ku0d|fad!!z= z);nlEHo!STO7qn`(G0W}uiT`$u(7nYkeS+P+lw8{<*Rq1UC0qRA!nqZdC3(nv|uHW zDpjdm0omO&9~Y_GK}qx3sZuzrXnuf{o!p*K)4bu{6;?*=;0AouJlsR`b#=0qDcxb= z)UHZr51O}!iwuL+pzXETXSE+4K+Xqg0RY|wV9AI>z#>PvtyC?wc9b2)fFJ!oXx=!2 zS$bk(FARBO$k_*@`8cT6E`%=zoPbq#R(ohh`C%sh7z)6URv<OQ~!)RVI>*E+L$k|P2}H5J<*!QZS1P0FdBc1OWYurg`BKCccd6q+%AK82r>vFzqnB^S}QN|95qNNE#+d z$8<6<^8_ptCQ-^{PA+P>o9qfk^LAA`T!lY?5oud+)vM>DC9dm$%YDF$a^Hn+8{j-yt%f-X~dUMil&ZdKpUu

T*puzhHhZ!CWi7cbPGcT z7`lz2I~cl)p?es*4{&T0P7i<%d%4=d)%qdu)mCA%OQzf@b(0ptn(mb;6}B>$B8pT8 zsjbXb>k(W^UBEubieY{So5wK9#!(K-H_r!qLgB4)d`dA?YO_mfFPkBEwo{O~-)ibw zpW??)|47|yw)LvJwj7DMka^d3Xi7!ns@_puM~ zp1ne0? zm?n__pA<0)N3dAUSSwuj|3Hq?|D6=;H+EvJG~?}$sfHhaVMcA3Njo(w(E-DxE-ql* ze*+|#R0^QTyiHpK_3__EX;uAMJ8z!jy-v)q3ln!^+C7;0AIzv1Lwy)Jj04R|g~H9_ z2u=$GMR8VvU3Vfpaaw?rldDE+yx^C9yDXQf2yggB;phm=Rw#XNFei>+vB}|?hZD!# zU*El|ZIyn7#nd=o+{6#p^T%}qa1@9Gl0h)k7B)&H5sbqYD0L3OX~ERJ9PA9pPAE?E zSJ;Bi0kF!Vy8~(GcdoxYJ?L-yYIHgbmxSY{5xCA#938{aaU7k%Q6vCV1EW+wuqNyz zP79JdtCb2$an(c=0JE`?sZ;9k83C3;xo876iWoc`{fF>+Ko7i(|jBiD%m+8z}8Wgh`W)&Cr+$# zec>6DQ7w*Ys5{}Dgd3d4wUcp!6nyms99_ggB1{N%Ge%s3>19$dy)qScwCYeKJE zF)zh9Bz}5$4VPr$mc3X7mQ68)+TzKmiSDLK^Vo3D-?npRA9K2tgQHv=UB^MU^I#CQ z{mi=o%V_87Y(p6=ka1P+sS&qbjZ<&VP7$mbvE2S9ZuSSu2jKu)0~U?!sATBB+gx6B zW77?viaNgcEnK$%7vIKB?%?PywZ8WNQ5!pZ;y%T17Z3@z2k=Cyl98s3me$sf>=U

SqQApb7IePIqo^tR!bQt--iOjqh<(jiV1Z`iP@(H2{m!@LG^arOZX4 zQEQJ+@Kg>S8{j^C+OoWib-jv?2i?CmO~5)o17~}1lYRm&GL?-|u31d-bMl$s=o3ymhTY)&%!&UcYsGbb;ri)#8@%oY*0~-2 zQrb<{6s+17JJ5i9wqoDD9~+~aI&kzGN1Zt8!qMPvKn$E*HDxZI;5Tp}&Fr1Ga%^L8 zM6!5g-`=yKmOVK7gQGFg82mPWaNknD+Umfk1M`ZX{!^gci=#dq9j2orbmU0~Gu(*% zz;<}iL3&iMe(=WPA)MNavvgv|Z*SOBH`n5YH{INaZsbcxMuZ=o7T~-SG#!}YPX|{O zbe|j(>F2Se?dG-w(Tw+7=8a(m&`}^AEe@j7{3xH%*&bld7&gw zOxF#eTUO#84{%b~zM!TgdgF+{Qbb?3`uvU#rK2!93a6t8IvTg53O`Dxh1fWP^QDwY zZ9&Zd+&{%bo_~sz>_~mH+I_@4*KNn>#>eUC1RX`v!LmkUC+ReQM} zZ^itRHt!cLEo_Qg_*dkZ`ER4?rZIHOSUQTMgDjqcVa~94#A!O1Nq2QKPBLcQpR_#i zY^iP0i@5O~11XI(kk=FX*U*j&;h>bKoXq`T6lqS*`chs-UAvYW4u@$JD3UN5wIus*+!BFBDc%h zcIA&u-BRlMo{p;N=mQ;n1TIaSTLa9XqB}3E&-NgAG6IgWS|zUGIH?u^hfgXgVu%U^W!Hacpj_}`%cYDc*sp#Q{gV6l{nYQgd8 z1jNCRtH`iY!ArM)NS)Ht&uxmW!VJ6U7Tt8K9y<7te}H44!fIJBTqqn}ogls;-8o~g z+-sXype?_Og>*S2_t6axGgcj8h&>s|i-Eiu$cKS^8A!{I0V1XGGIrjioA|>W6$>gA zjzlvaz@P>8>mT41$bel07TqN?YJtDmPTKi}2H*ZBj=4rQs!$lcr+B9tKxV~E2Uu)Yxh2BNE@Fk0g}yOArB$Ih}i`-{9!U+q(L zqtWyjL-#mC`vgNA$*?%d(2rt(LK4vonvYVcP{zP}unQ^Gu?$*>CKPn--%E%pI=QLh zu*;221b3YGD6aL6^eu4=t5Xbv(+r)@SUiK~6Ti+IIc!}Nlb66i zXBa4vfzC2uxlhv1QK(UtEeTLnxyWJtj#zOHg&+1!FG;xQowOwQR$e7dh5LvgDx=8MFzUWK;!0K z21ct~T_{Qb{_$ByGj~jVHXuCo%IW8KBMVa*D2;*A8EEWW6ZrY(o}V}PE^AY!KH9~9 z)1K*_$RM!^ffwV589mV}v}S!;Fr_4eVV21-y}}S*Wtd-M7-ccEvl;7h7~)(8y3PO@ z^Jfrw3|bJlA#yN+u$(u5IM~1m;wIp$lsie49=GVtcs>JmLCWI75K@uTBi_5j8UHS`~Jpse zOgp(FOaS9L?(xT@xRqWFrRU7KQ!ys@DMSAm13ia-^cOIp%-uyvlz_CtU+}Uh+;`ch zh@0xmwJ%IJeQhzQZcQn}u#6!tXK24<=)Ypfq*6{88LA|BWft3tux(6$2ciH}Hy$EhP|rThDAf8}RIw$I+AaoP!mc-ZIcTin#Y0 zZ2~^1DYtIH_=x?84+P=FXMiMAYvPr7#xl}*%|c^_cVjw#a|Xkx$$e}cLtM`ge_ZRxSJN)vUHC?$s8Io3pVJY^D(m1K3+M$I(O1?B0o2u|L#OJwR z+}^3(+Zf_@hE4|q{bry}26Dd3@WF^Hm>c=r;ge78n+2PHUAKRI+GNPIE{1tG!=i_Q z{($5RBYG*~`i*ciot*G6YQe@)82fXA(;BA#B8xtT|Q(Bkca+f~-gQUDmUoq{(gtZ5Qn37`W`URPd~aR02%nz|&IjkCVhjvoE9wWOFvS;`;)_h3QtT2Ff-^PbLN-A_qMT!` zyFG4LJoBzg@iX_yk1sPNsZ8B8rgl2hGJ|QE$&_4S>Re^&USpyxCK#h5I9O{)FJ?1o zp~`9oWc}z-P?J4#zzbugJ z^=-4>w_rTy)~vX#H<SD~_(-v<_e4beCVFo#UEPcfBye^ZTj+7dEb9Qc4Ke#kV> zViW>cr2?{~Dpe6&LYmwfG9u)~paNP~(qhllH1h=ymYtpXh^bf16hCH~K4GG#Fc;$) z6ZRn+;yJJnaB`EqfR*SE$st)%LO}wRr=rX^vKvdZIBUXfdXfWPx3f_x6O}PhITMY0 z$)p8q5*y$Nf~C9605t3T7W?%|a~^iAUu^I9Jb(QwrcnjcvXZI&nklYg8ogmcB>5KB zUg{=$2U9yq?PaRh81bG$!`@zITMg7x4@n(I-qiWm>ul;rY<)j)VaDhWpf*fY!vxz_ z3!HIKJ2_IB`cHs1EWUN4ttq#D=Jk4}_zM$#WrBYMetrW0?pI0}DoM^CQ+J~2Yh2% zrsLl!)K$C42<_#+yF;QLU-cF*_N?miY-CD)FeObO*L0#8*z#}og-VTPR_VZAQ!nOx`0m(GMioQ-Ebjwbd{0kM{K*AA;ZbF41Cixi$=R1rv4wM z_!*-Y-hxDfTI#F@xiftBa#r7rTiq6=$5Sfo7cA^!njdEA9ASw)SrDjtv1tDP?m-0M z4L3>!<@7s}E8b3duD3<*_$(lN;jOd_MLsM8UzWs=W$e$A1h7yb3k9*j{0FnB9K5r0 z2n&o8q$izZL?{dLBGgqFJd=9Jz-bMKM^p+y9YHa}Hf&DjxG zRbv;Cr^n7c$wE;q(5Yw^-CIdE2eDYWHeOmIDwIQ%MM&6%4oGUp1hUXk6QnZXBi~0BxhLS zL>4+rk$w(nu~8^?$z?NCVOKuz-?3uf$pMt*vJ zdfk!(V%;UJ(k{mmTo&1jQ_+*tJ^+$`NQue8z&B(FVBej{D38X$TBTtiHlgEDW>Uo zC3p;#u)o`_yrrL7^;mar?4NTxrx)EVW}(L{^aPM+J_Xd>Xkl_E7e`GPsV-bpT^+##zNx zv#aD}(G=JBEL6=xA6V!k3)QgD*jhjkET5B`O(A{aCs-b*{!BHsAq{x9W~gl6t5?65 z{V1OM=tbyfmVO;eQqPinVWF>-WHbPls@;zLsVm|eR9tsEey3!EN@X=tRsb9YDpQph zv}?KC{`0~W)$)!>mwL|sU`d)-rp+v!78Zn+kPnW=VWWJvRqv*bW%ecB`cYXQ-(9!+ z$wI9x^oxbgGui;E+}Xud-46I#LoHWhrla_EUW1m6o4T>D`~EIHi|`H>`prU}AaFy5 z0{%yh{ckO8ubo?6dH+aM))a9UOWe(p^sp=-$OL#YClJMAI&Ao>w&Z^q`f~NFRB>d0 zO+(eCUY33z3ms;Idv}Bld4zwrL!u2QZ>#bTiuFs`j=VF)op)UVJlV*LjTU>e!H`1u z0JDBJdYRm8emQ7ZL-OppkIT;buq}Mq5F8W7E8$YH=K(Sc89L zLY!bj6~!@t|yzBzWc|g}@ z!hywtQ)`^U{!0IIWM5QWEE~nKf#auOMkugQRSy_-N?796motx3_iXaeC69E5oo1WG zvn9P)0$bxv%WU&;QnEMY!@$_j%iR^VKcc#}zdyr9iEMP1jn1(lNJ;`mLRb%byqj#& zduo$U=;*k-vH0rJ`R|uBuW#d}pJ$_FHcDYbEP9fD0WhRg0>(wAmicT+C4LJK*XX|odF6eOf%W>{?&K*i zeU?L@_nkMdl1S9~+Oy)J?zkf|3RoU3XkEd4XMN*`Jb?i!S;; zVVgf?TRmfIKWB?yuuV$9X=9@@HaNWHAR9_oNE$iGUQ%KLnnVSguR!qnFDrnVRAG_m zWwmRX;6-m$uE`U&*$5%@$X&(Hk~;%ch0*7r1sp?EvybDyMfqB>W+6 z(ILCx`eTD*>_?a4NkeRA{h8Wj|DJ7C&DQ?FHu}i6Ou;>BU@Vj+VIJ~(xN!ZhPvWF| zLlaxldge6LvL&C`+Mn5ab!^>wHbf#&+4_kSUjSj)J0Mx3B##}N|Fv}&r!f7(*o==y zUL}8Jn>MgbJ(=GCs;i?Tn9sSbE8jk``}qEg&N25;eM`shAkCD`4O#Ti^5(RUrEeYU z=k6YN>R2ON@`J70#7523O!si&0p0==fx8H~Wfghq@@em**pJ+;%R`2?)|^ZD$wsYg z^oxzg*3;WSMj$yRr4o4nd2!IMU&d(%8W(UjwQR?=Qrp=E9c-Q7Y}5&cfNnx`0c#!Q zQdKu-JuI3|VRy%|a`8Fcbt~vw7Coc)uqA)kroC+Qc5Io(s9u$f2q!ES9rVi|ofY(Y z$DTg6_%O%l2*`^K(jg7x#-?6G^)b0-(w58dIq7w1-ba>QO7G~O&JO4zng zXQuR;PF&-JfK^^vJ{+A!+?PWOc9TN(rN0nDJ{~==Wg0kBw+@U~I`%>HW3AIT%pSB=s}tWEUw;q zYX1}a0Bw)&L3XR6Ir=diaV!V?*f`F=rool+7*BCP)Ephbqb(bfyzGW`)xh~B`ArtZ zB?YHBD4v57IOq%qDH7o&=zmcvG)c^l;N-(XT^Z$KMoym`yl+hSl!5bv#b-HI=QsvQ z9J9|D?7UQFPLej4*Kjf<;Y%KC$4m0>^XEAznS)X|kno-KkdmS+Uq2)__(xy7(-k7! zIbmYi1rEB%L6Se}B#>mTE{+PRZ8Vk%q&tBI0-UE8 z*`DhUclkQgoMdY)a<^aMpsO5ojf2MOt%09cwGa&%)z2Tza}Ax)7#nYy#WBw2802tF zayh2gIeK{b4!XsGZ5>wq7QFz#L%)WKsK9P>K-AQ4@NV`USi}B$2`T(M zi5qcnfvoxB7QNvscGunINbYeg?{l;ta3l{os1T^ci(t5|!U?P}F@<;p03r8lJB4i7 zu|eO+M{D5V!EYbE=IB>(ByTwAEeDLb9IGHE_^h!?uA!PM9Mcs-T2Ve?$sR0BUTHW6xfgKqfH#Xb$&w3^uOZg z^FMHOK5{H-IO1B4_9u?TXO3PS2h~$-eu)uZI5bb|uK-o%B9$wN2A~^Knot3d*?#4G zgNZdEv5Iu)UVh-&*I`p|y4)r^Z^q;Apimt2gM+l1Kn)?{03nuBZEej!oF_w+&P5kj0t_awmCQBZAG( z{SmKX9&pV z0iC894ZAAvD0N}li0zrll@W=A$yq{jj<8B1(0PK|`q;1+KVXOAWbe5VxyLtH_pA-c z))}&G$l7FB6#`u#&_x2|vxI?*GM+$hSrUhjnTqp+OA1X`~7lBE@63{F!kbO(enr>g#DYk1IOTyw4Qz7 zf&U(zfgTg+2>~0|O}d7& zOOFTqL$BVswD#^;?n<|tI!_7oi~!U89FT#QIi-g!)#OFK)8oTlW2dzipb(nDg_&u9t+~D?)6wse*tmKs$1% zJS=|Kfs_ujiP(s)T_=4i3CU|hQblOLAtY}J@jF8Do2=Q0KsEMKRbBw+kUJ3S1KfJxU>y2y3@A?J;eIt<8 zcTg4&sgq+PtenbO3XLUjLk6yjB3_>;cv8+E8rE{h?cfgrH4zZ1$FPB066}R;)(E$; zILA?)9fd+le#*pJ-M{7|8;R` zBrkv<+suo0xyJfhn{|9U--T!Z6Ws}o#{NG>|bMb1%NT7V;^X;3I34r9?=NSbK6VnM@V z01~*TutmfIP5%xeUnJaaQ7<-1%gg&i&c9R3kK>|KTr~DHOi#5p0+HkMxWT-;lLoJg z9?_`YeDircS0{v>02BR}jUfkktG`a}t~YdTj;#n8T$g-?ixPo%T+pg>Tu8*ZNRzm< zAQz?L-wqf6I;BRdY5tC~!atjRpSl-iN1W%PWG+hKq6=Ke-oa?9;@4m4y9B5}Im@w( zauDz9{r$tbbayQIuzq*q+OW>cT+>u8q%6~*X_)KXsm|XKIGY_8=KnP)gNrh`Ag)(n zPAW?eLrRd<{3^TEXJgz-sylYgX}Zcq*8o!%mC$^7RC__*&Rgd`9CTqB+YKF+#Wl_5 zYUglGa=H4~xh8pB^BY`rlM9LPy9^>9_z&rH@C9yhp=-;%0Pdj>4=svsaLSWgXX)3* z`IyvV#k5&dsJLu>n`>Cbz5{e=(q&}U(!847Mq_T*r@XlMx{-(OQWM?d(mZFA4?jdd z(k6{3+&XRl-gDd?)_pE|z=c+shcE*K6%hXeu0r?v=G-6SV;E;wa(F*4M;3BX5f@rg z9)U1`7f;pIU{t+g8uQo8^O>G&+c$b1n)9ugYyOz4n~ujbpTMF(Q>C=O)ItVIqZa&i zV71C~KzZMgalQCc3KjtPpiPepHRFx5uzWUV&p=-0GcJ101?Ngr4IVi4`_8_Uzz5v( z2X_oze}eIXYf-{QrCjj+>ghxowT3FtQF6er_0B{6{~}k)uVrQ*s}CvXqL*B>_!TvP zYWRYAOg8o_3+9wm+`rqED2y_zWfjnnwTYTmxWX*)-ctpJx3% zVs35rSMqjU9d}hd7k%M^S7AbY1ug3DzW~?dz*^1W^Fv?w;=t@z_u+-T-3}(EnM^yl$_NHWdHAQ#V^WIKxPt@)ZL>EKwsfx_o&s=1~~7Ca$b}FS34JVaM5or>f}NzTod%kUZ8dW+JP6ZTsInjaSLB~ z_PPrZ-o-`TTu27>fY^YS0_9O<|H3UZ7?qH7yV}vq*C|-JDSO)=u4ykG=rGrlhrD=DVfUs^rbsEzytBqHReNQ2wwZLl zh2QY`%YAsrmxug#XzW9}KaUmyt=|6&$YD6CFO{E|FyM69_7A@-=())OJkvm)WfUU_ z079QSC}H?tD~TziSM7TKF!7&{bB-(t=1D?$V33=cP;VMtJ&Ld;Iz4WWx;|!PTH2^k zo_QE=breG#&I2u_x+BQM46prX#>T!03D3A<*J(B^f`^XsAQn5ugOb62)vJH~o#FL) zKV37frEO}PpR?e@$#2Jb;uAch9+qaqd$H!xpwMmGR_^=hnrCZ%`*S{e^Uokk(GqtM3$n}301dY#HXtA|z zw(tX+=bFsZPvKcSV_X0{pk+=5JGIjxhfl-#F_+2s;T=u$j-I;6lU(A#afZX#IgAX5 z89CNy`EG9L<;rV5@zal9=2@lk4AOX#&(JZfNh3&SFUox3K49TUql)PT%p^DOUBpe4_8$$a&ofpp ze0TC14`uP7vXRY$Yyx#yL8|PJ`id1c@yqS)!iwdmmXyRvD{`pS&IL|U&6}{)p^I8< zmW>k3e|OYxf5}Edd7Y=5#{+$xas$Rd9-0dCI=6KX{A1@eXcpWb9ttTg*d`fdxFMe?S%nWEtvFnk4taX&DuI z-u1)si>@{-436COjA!|rXI{W~K}i`j3WJoD0I`s^0+x|`HoLT*oqy|?r(oZ_<_r5e zOL>-MJn<7|B5>Wjbc1+x?!$d&gl|4)SbLh4^CT~MCXM(jcwOoYg=u9CK?W{qO45mp zADTLD=Du-WJrNZ=aV1atHP5JsRRwbAB6T9%Nc4Wm^>D+rcX$78vnzg~Tl9vf|CXoo zjPZg4f|dDOu^A6=)7x-gCp^t8aN9c`de1}EJf!sjmKW+ruz^u}`VqiE9tIX+>i)eS zF#n`=`wfit7WF-eui=SndEzX_Cm@mPowb)a7ct3Q-)6c6+@D(haiyv$anQSKpLvox zp7<%fp5i^64T6Re)0XH}tVC1aAfZzkPl6T>cdpXwc^)r6*P%97p;z9l3 z4Y!R4t|923D=-_zUNH!~;^cqsV|MxN{7-WYy4!iEgNJ_e(6~;DH&O-V-*mIjY>!yI zw{781=ko6pexB^2Oc^{sRTes?VjO#B{E5f&dU_AO>E`M8@J#;jR<~p74h#fwyM1-S zr*-s|3u9L3F=sYs_VQ34$UPr61RsntVPEsfJw0#kwx2s3^TKv+{_i7vJx{*ai?8j? z7yIz_LNQ-H_`TE)u5^QgTE2Yp=+NbNKW@37DmoQ+%r`CA&W~^I&$kNTn|@_v(Yu*} za8402Mr6gM#q+I9m42J&V;4U^%K9C|Hw@;Rgz&XP`6hYnG%k_G4dX-7K+~goZ=+-~)Q^04rY|8;J*Cfhlt<}Z4Hy-_!g)5;?sO_ zJRfqs1l0$27ETnb-ONsEJvbxX@Zqo8+rwHC_~;BDCGz2r!dX5o_`mZA&~$PR$hF=p zcbNlhuk)Teb7aCs-uE+xr+La-I(vkY;>2nUh>tRU3NT(6CzX+n-f4%98mg zg%7du1&Xr@%I7NmThTN7$J>px>71&zx7?{0`Ql4_y(YFN_cD;)pEOdDZ!2e(a<$7=cKiqFH$U3wKuV_qgL zdK;h3H_YLi=koPx8J^thAVo?Am{6y37Aaw-ycnLoH*SF4``N2PW`51%qtyUl_A$T1 z9Q3dD@XXewAy}dnP4Lnuc$m9Q5GG zZ9clgM|b&X+&!3uI#nQ5--jz_&ACMY9D6q2TfE%s?Eaad?_W+%NqE3V5BaDNUbw*b zrhFzdZ~sjPg3oo&QXId3*<@-;5v(2`G)!|g;o#M4f%!JGY*$uy>tru@y{DKDCD>>N zd5QLL^q?1=+h(rX;K>?oMn2{nq~lLO1gVZv9nYkqslG=h4R*^+KPB8q+9Hqn*7ll@ zs`%g-zX6zVI!JR?3Wj0c7pC#oyfhvAE%VBYH}a&neB+0lcNBt<;3iK#ZZF$e)E@ON zYP;K(7y0q;`QmE+st+(9A9Bx;IB}Z=g~O`#HM14r+bjgi@xQ-jPqnGx8`bg+@8IRE zPaysMZ8>tyQ3Ag8unBu!qL%%DweEjPehm7hYTWaD?WPgF zPjq4mhc)pnn)y2E_!aPI$nn92#Rj>F`^)lz#unVU-r7PLnQA6EF=Wz&M=wW=&sa+S zuI@WI+MZl@sDxeqxN@~@w(fqr#kAC)eALQEzxb$)kJ|aDgAb*){zS@eKm&3pb7pOy z(+TQn<3KsX&ve6Dcd4Uv@z{{tOcF|Q!jyqw*dJFK&b9Bp(8YlP97}% zGU}Y(GB2;;UB!~~E2sMkEd2x~{sQd)fq4i$oJRx-Xr3NH0!aEphcQ%8mE`i-H_*Y0 zX^KOGu3T7CIAmF{0EGz9*prkoQEnKcS~dAb`%Jf_3lkqb7#S)MhY9rR+2MlzHal>_ zz@ENMayq)Q)l!h$W)ov~+(Z~5Kt~1Wm;f@bW%T1P)Vlw~0sw4kPFwqQ%Go1=@Mo9L ztymp=LVzL#P^#AiuZ#D#haax==IELhjK8{g#)p#vgD3$sW=0FZC8WCYRWSkxBNR^L zp7A>yM=WH-4!6IzWZS9zy|Drm2RNS+Kuih;>uq5s->*A+`GZXlci&9Db<^6t;EypYiC;!DH?*Lv*SJ#ca7;pgt===L9H80BSmsGLs)?JGEa*8Kc$XBP0&Qw>>>C zK*<6K%{A>#3r5zxniAAkq5CsGbyvsso)m%Pg23{k09_J5jXj1*ctD{;tEAGe`OkMw zOX}54(;6oK4rY_mpqg`Y>J?$*PA@*VL_B%xWdTYRK#LGHVcE+toAsY=eeyauxTd;d z<+L;bN{6#-0+cC0SOAL)-Co4x+}JNo8?i6)%T*xZFH+pY@Ct_jwq<5@7y z1RS6gVB;>Xr1gxkTj`Wy{U`~&S^)>lYz~x zA$>1Gik2-`XS3Ol?lrWh=yd45^_T7aqq=#2mZlDB~CfAOnKsS%o;RWA=2p32z& za$?ZEWpDC@?*x+f0^@kB8bnfI4}qMgpylS(-J?5X3n!GmS-Cs@0|+CiK@H%p(&X4} zR*wqreD(IJv?3R6^qhR7R)FB_M!80OayGtf8(+jcJKf-FxRF-j@y`NOCqVTAa3a3| z0B5}%xP?%vvYv(8RwiONm=l^x3B-4Bx5GkOz`s3$D)JBO*yEt-DQy?_t=;QTz$K3e#hyY7FQMg8+{0VgA2mY4 zTHy?WYBPEMkHPCVOuuwG_P|Tb26W%dR|sDY@DoCe2OTd;=;Bd^nh&jgPBg4fJmHze zX`A6Mgq97!=6baGa{ktw<&xKW*X#3EoedD`1`5qC;6Xz8=m#A7Cd*>>zPs>e(%jL3 zK63pNe>MjT^+JR?DR>1Vlmf4YwnXxHu4CZp9@DT`AL|G^r-ggNga*)*5+Q_^UMj^M z!6l#2h1jDAo&8)0&|~xsI*$qsjtMOygvW&t|440NL`*tXxayvrWR~m6$2s>)wND7m z8}UdX6`pC%a+1xQq0{I8svfcLhKHWE&D2pRg(ymhqJ?N&jF1-O_P+$UMrxCn29{f2 z-ad4yUGUwV4W4Uag?e9Dall|$A#esj^K6d^I(JDMmx~;kKHWDa>7Np!(?Zxu<6+8w z`#pg@em&a5zP__e_ZxEfWWcjy`3XYHGeVRogcOYlaTbQc2~JHxQL?#abUJJD;=rh3 zHv?Jf_veJBNy63jY^nmFCDZ1T{vG0wv>g|P2A71|mxTtYLP?qsGFbPaWDvn3fL$(wVm?pRDK2LU z*S+6y+~;|^5M>BarVs*yD-;EA+!hYzUWH5QGX`^J%>rUP_b-Uj;#$ppbzR(PG2hbR znh<3PA(N`%SdC5SoF($oQ*-~Rk(<58TC;`X9HB`Q`#xk6a<>LOu8P0^^35o`XN@F{ zpDPq!7nEN)eMkb9Sp?2q1YBS1i=@J@&C%o;mB zaG93l2R0#k0MX>r1=2M5FC>4#B>HQ3kCvS<9-oMiNCj9b9Xi+RQdMq?Kia!C_ zm%Bd|(mb639)Ib)My**oTCawld%D?VApe;VJr|go-F2TcPBg(6|(P4;Vlts2bKv246c-!U$k)Iu`} zx#;5T*2uagbw9%S`np+%c6AC(x`g`OLW3S5`XfZW)GK{LS}5eL;rlfIo(I2$+^FQaVxNWoHp z_Jq`oQuY1#Wwg@0J|atBk*S|ZJCsN4@gSvJN^M3wpDo?%P~&l57Ps7AWD+2P(_e{r zAWYj|ogrtQwBvl&`7`~<($?O415M`#iPi;+%tJ&dRD{ArC|rahMDT48t)n7Zgr5)RTH!@FI+*S`G)6jTRHR6J zQluXx(up8$up`;9oecE+)U4(5D?!#984x`sX=Jnr#fTuk6f1%d#F08SS7GdC9yRP_ zYHW;Al_>f2_&AaHlt|LV&@>g#-SeBA@Arq!)O)oLpPexOw8%7G1l7==7?{HOU#jO` zoOVMpKE?V-wb`LV2_nNYqE(3^bXEjMuFr{Rf&ER9@C_Ft33#jNe}|heKKY<(p8Eik z9n$vcXU2q1Zw@&x(oYtdr-;@;&KZbyhLevM0YgVu6{Ka(Ee`XpJy4r=>+7c%yEf+w zFNx4)5!A|3VIAqSEXE@a8Gd3&?#yEX;tJ_xV7E;0$_ zzrjf!XKdBGmV_ofk4j|lYJ`kw0VeIbH zbGIwH8h0n&6&c+VS>6|EKM;u@icAYdmPI1*BM~YVK`45SPCN##!H%M;z_RF1L{M*W zh6ZWq4yQsl;wk({ZGn(bW4T4=1&^9Gc4e<|k7Q4p*E5mXbCJ;t5h@WufL#hQ4n2!d zs~~FFWt4bQ*Q7z$TVA5Y%!`N2PD;~_jQ5^qlB<7bl8VEgY1k4=_aEo-zLbkhUy8uB zhcgT0wnN5hOSjRpwA02lT;4bA-Yb!Qg-D!3uLOV&RN(=d)z<~nCSHE=a>9z=*_Dda zoeN%z#8o1_HzKpQBJ@s#-iwg)N9>*e9Dh$P2>jMXi}DsF3{AW5`zr3~)+vS6qE#P6 zh955(y)4|mmsGUpj5c}m zs4=PD(|1h$R`F+%c^wD=qn@IhIJpObOun@I9q1Rc?vAV|Ajp1peT)^|P!mKm0jJ5E+L ziqH=cY7#*h*bG`Db)|w6XuyTFj!yj3aCBB=h70AR&O78api-~ zjoO*U+gn8FrwDe)R-hD`*q~9}9bUX3E0|YgL2H`6zOj3Q{=)oUVDCT}v34Lwr8$5E zgUn~_?us6_u+$`${-bBmlwlnr)88Vfj&y=1%4AB=_&L*w2U=j|;L;2VNNMFu9KBju*g0Txa_HG_L+buSPM4=>ny(x^Onjrq| z;-pqUdA;lF^Tg+aZ;X0VIdxCNkZ{s0g0y%c`pPL2k(Z0i@={+5zAhMZ2R!HA6-P;Q zjD(LJ?0^?(J6DevM_lEkU;4Af#dG#Q$4T82q;4dseUj9TB6YqnUvQ!UxBk3_iijcM z6EkWVq!&C~=a2Fg%~Z0-D5(jtzufWxJXQzV?O+wCe>YL48f$We{q2Bte- zirs$3oaxbTcRx)^;z^wZ((EAt$2886)JI-GB&deNO6%j+M+%#F8rvCvtNJH=Xd-EK zmNcniN3x*hS1)c_q4;pckCAT~(E+0-c%387&ajezTS_^6WrSQ^IMnbqjX}f?HXAl* zeYNa7oDU=|Qb=@xgmdi*(5vO-fa&f3hpG3D$Ljz8$Fp68bM2|AT_^25xKPT70KR`86~TbEqm{k9TBn$*}L!KT)p1E&+nhtP1oz3=XuV@^D*v^`-6PgM}~a- zb%U|#!h0So9z-c3D}5?nEq2DS@KAWfO8+Q?6OE|liyw(WFi`?Te5QyyiKj`aJ6#~> zL~Ove!L@a<2>KC0KOtxwg070j74dNunyr^FWFK6uEE%8_;&)r;kV!lun}BdWBeL%R z9bYH}bN1x2%kdEVy-KNP6O^lV@TMmsYDtJjtI$JpWKi*xsWeex#GRe@U@1YvBN;(c z5HuA5BOr!94dw`PZHb*vvNx(l)ld&Z{VaOXa=^4z93k7yPgg#tEk3( z(=#7qUyb_n9qRR;eVU1&SqPeq?VZ;=3s^*7x27*_p+HQ67dbsATiR)mgQ(>qYN`Bg zqIoc-x6QFBEl#?a9h_A8V|%9&ZlXKHBOg&KKp-^SBm|iUV}-=;_niLReYjzruZ!qD zfkFf=LeOIDz{KM`G38qJ9dAjkl*L=svXZ>}rCNz4h+HXhvJ879+BBDd);3$M+wuxL3a0 zR)e6m2)M24U~cptXk*A;>>yOTZ>(^#-?e&1P#SH!8Iko#0;%@?+Zi}&5U(I%n-IFg z$*>*);qevb3X=Iuk(rtjf2Zw|?k8+IFMWFb!mj~A8xgb#CSD|8h)LRjS5S}&!Ai)^#0CqWrVIk+kEk_-sRknQOt;)AQpnDkq4Pmz< zQXPo;cSN}pLAwyRq<%n`vAki(_y)8kZ-4*}E{KP^whs@lWS1En(QbY%)E?7~$oC-Z zUO1-+T#&}NK6nZ4M}YO~ne@Zfg#Cb#ebnp-H#b*cmcCIcvm2Xqo*zII1`&-RMEw_n z{s#HN18|{X=%wC2&Jai|AA#iscP5yp6HVRB$u)cuqiqhClANmgMiKN6f{r0z_84>R zwH7apy1it+xIKJ2EJIt{ZR3c-1Oic-NstJTQGunMNAn``&x5t}6z}Kuh}r1}yVYk- zA?P#$QJQzy9%wS(eQL_UTPy0?k&iW(KQ_%E8nXzXzFNf}A_1e@rS+m82z51vQfHQS zO3fkYJSLa8-#)z|{+77EmNtE7%$9^OQs)Aqw1}u(Di&CR{u}E* zmw1C;*4mQ4*t)?tAH47pTZ)PYV{`Ib^Y~_6OT0p_Ajtovthp~+k6TE|tRsdwtlAV| zg$L6fo-eqv`P!zaug1qIMt_Fn=Py{}**18NrY#=yWpK8bKY-=wZ)+FSKKyt`j`Tjy zJ3o9gUf@wXJZg^zWampfH^KSeedU11vcGO&)|QM;S>XJ$>8=#Lh1=fuIICXaQAa!+ zKqq(v0z8;}kMGHt3QS+^F3FoXVMLea%A3T8LYn(uq$M@)HeIc&S^JjC{b;3+I;?w^S2Ym(0( zTb$9K>R0+vRM%=1j8_Z6b3*Z|MZ$0K%j|C4Fx4{)gFhheL~r}ez9{K) zy{1OHT`j`#=sP_69uJY}_0?GTz`@?+v8%Gf@jtJ>d!N;QbSDCje!!!Vc!2o9^#2Ew zGSZL6gRjgKn_8nIrz%6L{NDhkJf+UzQ)3JsKn`%plN19PYvdQMa0d7KgT<2c)VHyp3@-lnddV!3J5#Ury%~!cLetkdHifo zfFiT&VakbV+R@>oU0HYla%ICyF!5Z7GdzdzM!j=ud^xeRYujvaW=m904qhV{uat*p zCy3@l7ym!}^EUuS2;hou3Ass@f0XEqG+f#dUw}soVbAat!91IqJ>=rn{w7ZKKU7n` z+-b7AEg;uos2I;F!K;+w<@?$W3grOyTV8^IJE2;YUpD`og;-<#@CLkFN5^ zPD@i?t?;|q^DCv~KvM<(s24#7c6Dru5RG)fUp1tO42?@P;33;D zKp5%yO@6N}`cmX^C+pdsV;e6u;uV_ka=E;d2so;)@Seo|h+`0cpLz8_!naAd8PAT# zw_r>7KmH{|x1}uiS-(K`{6+isGuIwIZN1Z;6OZ=cLDcs{C+_@@!wxq9Qw%t=L0;r#qvIEs&}F5D)-I1!JbID_@c=l4 zSu4zxQM;0v(|3E=ZohuHkLnN}{e?$YVqqDZb8W^tdo?}G(r99>SAH-2#;XtGZb?#LflWtdW96E!4Tcjtn;MZr(=RI$f@&i_6zhF2ZOD^K9nOZg_DKfuq71q$>a zS_e*BEfd~)NsVNUD~vVTHmW{NQ+W0?UUP(hi4SZ_tp$`tKiHo&J5emZ@&%bPgNKZi zSvcuj(24eKM9L{)Qg|b+ZE9roP7|4meRFuuJYKb1yj~&>OtsOC(w!2E+Z!+4S+Bdv zeAfaVf;KRcY7>R&@2J$CF=h68YTD*}*Xm_>^Eivjq-k?jGK|LA)zuKU_(}NA~^~)BHtO=f+JiOV1pzKNDcoEdR38)VNHV|f` z7Yc!SO}RYLaZz7sl}qH_-I=>1KKT+*KLYxifcg{ARrA6{fRlxus6W?stSEZpZ@+l& zfB^g6t~UfQqv7}DLB$zOT_b@j(FX4LJ0Fw+2#SFOjUa+lFo7LHI1@^cEtT*`-V%WF zS6kP#LIP}Ku!>9W=Um^zOMQH0>n81Pzm*@u2xvF~&`R$Jm@J1>$%hyn2Q*JCPc!O# zQTD;(HMLhL-SfeF0%uVatUXm;K3FCJY08W^bh~k#V5DdebJ1mWt- zS~cJwry(_bs=PdfeG}ZY1n^*h3$SuX51s1f)4W1txVw#4IwTR$WCEH(Kv!byZP4Jk zPZ2bWyH`A~lB;9oDcST?f<_uaDxJW|AaK4A&`bh|)KU>hqR4_BW2Sc(mknD^TOUd7 z%9Q(E^YPfNZ$JVRnl+k3(99($u(ZMmYv!l9J^zi+B0-A+~ zFJ^`HUXl8|D0HgmKyvd(+@%5nSd8%d&X*3$9t}%pEo_&p4wa|z6cX4)1kF00Vge{8 zTwW45qPwiC)~)y`A0JWKdh=D-lc*AcLWDRdJ9^seME}T>@02G};^%GM38e(Ii~w93 z6WHbx=-JCy#-pU;B#6FqEgE$wC!iIuIV)jTL81=kew(LFR87SSiIBGT9g^0#>7C7s zd}^2p2-{Fx85%y&7-0Ega}`0png9ekV?5vtn+$AyP?9~>bVclNtDf>ITnz!OC4hNc z2WJ-3HZg0ztl872CG(3-rSQH&FF#SfdV>5{f>r~8(?~#@V8cSPIpmqUi2&-0a`$)2 zmfKF%VHC**S`*KsW`cSPL7|m!wwu3=0NHQ77%+e5-V7SH_(fH*ySvTg| zdyDiD6#5Cu0|eDUg8UFc{uklYZvr|@Ku2JM;qt|laHG)Ie>4L)Za5egNlH!n@Uf=z z5<7*wX}v^t}o7reEOYN^KV%Gt>1g#N7oF2GfU8_!*74tUU{}RFLH?K*4&hU3izvRY>_AGmW3zI$h_gVDT_i{? z5!inT>aHSQ;_*Tlhu)vKjaM>H*Pdvf|2mm$#<$OssA5IrSOdNpd@?djG)m;8Ay1Xg z)5D8O?~1L7Y#ZXq1_@gtz63@RNqIN{oo(RCcmqhTh z0rTHZ2O<~C#bvmGnP7@v2>JUdK;`e!mE{6Q3oTy}QAZ*m6RI(&v80dGK7)*G`7&{_ z*B6_;Z#ofCXCmrCL|uvKDmNnFs<@oC5s1vG0kB5kzojet_n|T@6Mf+!B&1zpqsJuU<NwI_;w+iz}WNT z@K{sRfsaH0w7~O0wCSk=&9CFVk2>@R6l+aC5z#mzpgl0$XRLX2qSpPu@VVpnOJ9iG z{S{A?O(1H#irWC&lY1)}L!M$|IurL?8^}+O7sURtE!; zZhsVQyWz`I?ZZ<*L<_MA3Bv9do2`~~#glk`G5r?n^hXDDi--!vL=|VD65=vz(^Bko znA|~*>GC`A)XAMN(g=;hpJWV_5!vNLxok16FZn@hU1lPW&x)cWLwlaZ*(_EN;Yxy* z=lkPdSbbrplFy4;^j;h|dJ(y}jh5$e^Vx~LUA9U7>T=9VB3ea6tBGJ%)eu251%IOf z06WaMy*9jCvG{0k{`@K2`3s4ekM`CQ(K=X3gzMZYJd}N~)B83qq-*)~3Qu*vdLsIj z2q4i0==CG`_WP9joJ(^#x31~=BxF=a+`Rww-6y95H*EjWmbPhWpphukL{w}h zqAf(sFM-3A5Nm`Hf@_$2(ZR|B-)}7`!78WSTZyu5M7eK7*=~L(UT4hAb+T=|tQGVA z+3t}k$MU3gyzNBg4kEh~`3^@AOK&tazmv>|{KcV5h6?3Ra4znc zA@>m3y+p;IL?A@#gHx!7v2nL!tPXpe>!iO*C)rx~oI0GhPGh2AH-o4;`NK)%+&1 zhlwhQki0d5jS6^g!A?ZnLOvWh;Of8cVsaM$1H7^QC=sCb&~jvjW~+(cg)i51RGc#< z0`LAIf<^|vhx~jZ5O>HipZ%1z3?Ztx3uY{DZv31Vnmyz7EYSnJOrx z@Af@vPiKBuG!*9f|p!Lr`<^E z?j&Uol8h&b<3*D4Am9pxyh&hM=(h2KmFje1QwQ~aO)cyGndH>cn0-DZ)RzPvLw^D2 zPu%^TipNb7+BBEh4~FiQyW>Zadrgw_CjsFxIH#A{nBNV6{&P_+fX7&QQ#|E-$=cc( zHSO}6JHq%tl2#B&F_@$pLPA4Huo_@jA zfaIhGS_@ycF8whl-@J{d*FBP?7DYN2O#+Pt5OC(mHr^MC!}W&RebL&BjGh(eV@RA> zlGI0%Oe>^q;=1ujt!|ix8+HG$Xvv{Vx|RF4d?KAJ69<5_!RMa8?oR^EuZr94h~Iu< zTO3I-o+O_@I`NqV&|3iBCI}^xfWHUE1BGeyknvlc=3BxN_=VqGw~}9j<4J-pkkAwo zno2@fr@=a5Y-U^@>xe@$t9Ea>6>x1+&5f-UbzbQ(N0>m4N-?sn%YGb8v;VSj?QxG2 z86>SQB(=}Tk+&oyJHqE$s)_EV;17GJ&!~^=$t1~VkwD$chB*c6NLv?Fy>Y$!?5QQZ z);_76n`^qKx8#uIa!H^_1qcU_kcvXXzL#rtJ?mBq)L$hzi{+7I@=2Tm5-=*@HWk8r z>T2J`md51(U3=_Yu9L{q)Z}Q(Qv*dLwPKP&uFww=ut+3b2ai;aJ{sU#Guq%*t{YcE z(kvy(18D|-8MYrxxS(d_aN5gN@5esJKKeS*zjS_|Y&i+7z=p^b(LY-v`yaTdt;jA( zraa0_eqBk@tRksblh`#Rv=(OS3m?!90^uOSR4u+cD-vWYzSdg>`UEFtInm3l2gyf-LaWMEgl4@}{A+Ow0RpGYM@W0YTO*wxc)7%yu6$ zK-z@nSGp(YU(abJskf2jr}@8ePdAoXp@tL*ujE%aDG-J~^f_bMAs4R*Uc|DzC_Jr+D+2zAu05d;Le8PA%B4JeUxVwxK~4e>KAJqbtSiYS<8s_ z%l#yA{tAL#d!22z`dPxp-(S95Nya_%c+yAG>?g_k@eja?1B7nx?m_6fHWc6hy=v=w zzw^;2PFE1G`?vVqcD^}8LVuA^#or`uo*l;Ffsw*+={pMkUNTTD)s-AN&$w_)wWfBM zgpQEVRWC82?7LcIPhXIh*Lizi%SWkllu;7;hXkPCXYl{_YNVM~pJHtisXFoU;fv1V zF_OYK3E;)n7;f#Gs^zd}K?RfS9ps;!FQPUHNfBre;bX*rzt>F#|$~gwB!Bd5|+YHy23DZ0{MHF2eQ# zmTD|Ee+|K{nyhg!-u%Wn@@!bH*Hz~wn0^ufZMm5OvWMJyZWi~}$*DfA@vyMH_nw4w zx(6+|lvwlDAJh9&GQeAANk*;6fWEYbdR(^*F+=E!>_>uV`{3`jY6na2G7K)-kWpJQ z`hpBY=of3?()na=PQ2exTAG81Hab>sq1lny_GI<~A4Ui}t$h2j)UhD%;`fQ4ww*YT z?#&P2_1Dk;3?3IccemuL!wfU=C7I(uKKqI+}o?XgYcOQs* z<}G!{n)A$;%=ROzz9uXBlhHS1P!Em46$POJd7Yce?ew%mm&*2B-s({KxLODap?ZrY z>%U8@{kp-BGL%siKvoPSs|Jy^LP)`6xSI{Q06$F3BjnjrV_P4E30PMp`ZZ0--3uXe zLdi-YfQ5zVlAC7F;&EK+=B7-gq&nW&rMF~G7+ETuEc=eEVIzz|O#x$yR7kMR_@nkfC41`LbVJ@%3 zVM&BWxwkXM7zB;R;h9ycX3zZidvg=_bw2h>B6E_-QYmERRIusz40UOt~hj z%^2--@p=06)1eKLcJSMW5h_`8i&xQ6D0cu9WJYT4Blpo#%+4jtYRXa-ADOxSN^P;W6whfH*( zFeF_c91#DhBfZXlPO_b>+(AD1oh;Q!W_OY0evr{_GI~fE*Fy#qmKz{)z~Oq~W5D@_ z>BkSj^dCJ?WFju}KtjSxv4y93!=9gHw2us-+J5*LWRJm?c+#2w6URPfBwq3 z5E(nRUCpAHtW3|=WQrx1R{Bnp(HZC>|3C9>x0)26`b8vhdRgJPtb5BWS$U4knJ3FF zh%a#GOZ%vm1d>;N_?>Fhii7;mI^%A&gibG#<(J67vEI%HY&d(&hKqiB{HnVVgNVxh zb*TJHMlC78V^M{V%}Kv(vxKO2E&|XmS0adyrOU%DH=``)R}@3GI((=6fihUpa`Ime!mbx z=UZCZl}Xw}o_ze*yx@GkD~01mQ5XRSW}+bC$m6v1^X{`fVdtLDHf?(x?jel)xLRv1 zBYWTcQ~j>@9iQIscc-8p6oC48LaR6av5mlp+h5VP>^mCVeO*sW(~Nam*o&e*Bm&;J ziy;X#70IGve*9Hxld;MvM3V3Li{_!0& zK>-Gs2$&H_?fj4QlYLvwS9Jg1;(YbVcZHF0eIF=jBn4m`T!yuSSt&Kn$i(~gqPfy# zyM7;wqG(1_z|#|m8zdo(G5biV;SNtvb_utU$_wgaC}=DNSkFJgK(N$7=$}y(W8bdS z=NsG(#>+%Kt=0cTQ5xg_E{4cVejUkVc{~WRd3!#mp-w!Gg2q$O1Z-n=bA6hAexKBK zJj*Qj4San3Uih@>C&>A>(g0*n!AQ9p&meRit)`0Ivx6+Kc zaAN(vUVG^%IqN!#Vm(FuD+RD8Lqe834HPVRa0hW#7XI$ISFFN+Zt&UD*?qekDe_Ge zrDh7Gp|`+>G12Er@D6dXP_i@~_v`4Z$t$JNHNHtWG`3Qd+bHZwzHcyR7;IDbqX@DX zarK0n(p=n=p7Gwl+MTNH6!i{@>URpKlLE>-kW1G~KrG8Rj&YXGd*BA8mS1Ue#$)j= zipCF$`Vvn!w1gE-(tU`m8X3Q5D|c#KQCcz_7rLvuhXO_6ERZ#|(%T-|cQ++(p+9aB z7ChEVL4Q)vJ_@?JANB{vWDUMFkR+HgQNDLWLeCrRcpgo;Yt9Q3f&&zEkb(|T(3NQ< zY=%NDmae927QGGjH5=VYE7HFouKI(j>MnODwI9Y!dS zB?pdyp=*!hUStM{WEc?EZ>oq29;KjvuroGB0fw;u#qHt!T`6hH$B%puxi@J-U+MYu z<~RkNpr8l20j2`))A#E0z3b{szyy_{> zV)tAvdUh>=SGse7f-X|fw?r?@Q)6DBIw2$YYj^S3e%#J)0uD`wKa4e}(R#bK>IY1awlSMRoFf%=q5@m8GZjFe|Lj~WJ#GO1u#kj2 zt_$~zUj5{_?83LD(>u17y1O259-cKy6N zRV_;tjAEgvtz}P(t$1X05#ytm<8U5SHBTygfgcLY@FBjhr_TIkta+1hb3q~3=%|_( zRmPjD>_e3u#XIpX5JN-|_uC~p=ohrRwnMPEM@B5%mkN-@K?x*@a(|q%BGN@?+QsD- z%l(ocRqi!a)t{>NhI%T1iUv~A+s(^yX6Ctqpg4rK_w%gSdG3tmQtfDwOI&#nRrL`> z#(P?iZrG=OT(EvH(f>V@Q5j4{L#Tl7cEVzI78;sbN1pVPHQ?r>GN|k?0Rjc9; zqe4K+)a-`A130k`#+}wy$Cr^G#KisFUt6&hPSt!zRp{jz<#`X2iQNTUe+^VTD)DO$ ztUegN;AYNow32pTT|DhSStFF3O+#$ z{Mj?|ozHaG@Lo^V)z{ZZ39X-~vT;3TZ_@@S_5l4*H0+wfiI4^!10>8}6~Z zH-CPnqKR1Z+*8EyJ>aVTv-uXGy9X#4oL!QrvdL65g$k9;PUBKxM?&zAJIE;yAM2&7 zot;F}T?HE_r}1f2Km$V`GG*Sr-$_tyZLAAC{3CtRC!LCBP|+_`^k61TCAZe|?kw0% zSS6KzfKqrV`;N+^B)L3^P9Vj4D%3J=ICU?h&x|mR38h3yMojy?-vkJl|1j zcLi0wk}5yKUquBfaXlSSa-23Z^Cm+(-)p?wzC-K8P<%C&T|-s#;H`x{V2srahWcQU z;t0WEF^SJ+HUWPP3O(FLtf-)N_TuviNYFu+0Cm%S;hz<5Yy!b27wmoepwMdWUltl|4>^Y1*&? ztoo)L%VqPqv$4N2pZ=g~c2m(F=o%Gjswn@275-0H!0mwp5x?S1+={rLF&nRo$gO78 zw7lt~qWx6B2M$n|IT;v1h7o4jaGf%|-;^wte~Rin<-z`bt@)_- zrK9=r7Fx(73Zn43sjXwD!N1ki_wM;tf0Rz(YLX(4o3O`qLwtctO4I- zf=n9sF_dP028CYVqt#wJ(i`t!U+J0H&{S<{9A}9a zG&mO5G4w|EazylUd2(U0mDl3WlNZDmoyCrn%pazlp{^qiKaRQw9Ey(I4con=+r~38ZV-sS>9~-+P5qrE{AXT>(x~* zG}M&_(z6j8u~F#!oXvXeg_p|4UEVQftKDb{?lf5s8oNZOP@FqqAYJZ-IK=gqDgtv)CvTTfZ~T(^N;L2U$XGv58n}HfPu5D4~^|hQ+HdgW`XFtMb#2; zTYKmcscLqI({%l4?AJ5}e;V6a0(eqj+`!d<#ZxuWXHzkg>#CU}yHxsq#+wAtP6pD{ zhxmeMaF6N&d|k&3to%9N+%1GY$?j^)+4LyEgGYjCXb24rrJ-+W08I{q@p7p?!=Vhl z>AgGe;NL*I$@P1Xr4PBJW^Pe<)#XpMQorx>o~AJ*Rw;p47)aoc#xSKNTMLUR-)H?J zXy^wT8VQp_Lsyp)!$qQL%iR8dAV92$4$K+5W8U<#|2`8^#}gmJt8;EKH2GK>yMYid z1bB&~tLhR0iI;|&%)B$++8b>BNJBqiv&~gD^!8dhKlrwCjj+tqB8z;#vN#&skrEH1 z1Rj4(G$O*MG&)1e#{68%RKGjlyrh&sLqF3%uq0xm0mw0Se99Z=SC@bKYW1SSScU)1 zmaj7ch+|CM(|(j?arSEn4vS~I`5tgX%4JB_B8PE*dHNzD^+UufWFG112oex?~mZ$1&e zy(X9B7b+7L)RjpCghLj#j95yYDWX-}``(bT*T#3-kmZfjNB<5JkrM|>Twe+_JWbZ- z>kOVdH=9j6n?qC2rJ;E=G@phR(9l8}fXZI;6u|&>Fl(h4+B4x63j}PLKfkvGqSA2h zY}f*BmhHJgXx`93yo9DviXEyrp@&F~q71onTUV;Z(sq3D8BKB-4K0U(!+-g`gt$iF z-3vm2>ih+RzxXSM8|>^(eIz62IvE~$F|wvtIjN@g%!k)1X=oJ<60hvB5PHg=7`4Es zGN^b^@rD{h`d~E;t)Zc{G;ntZ@tuYTR&+Y3SjC++_7)c0+DF*jQ%6JVY3NtjF%2+P zw*XDa{jSbO)tZv_SB@0BmcwVZDPC@beTuao^I})ap|Gg9o#r&}$372}nrJG`G#P8i z?toh{vvsQ)6u;3l+;Pj>X%HvnRwn`)6wpIP!~r2v zYi42Gk-szZ;PJPr6CZVG9W?fLnqnsnGC{lGD1gJ9%RM)}c-DvfIP$`it6Nr^819Jw zLDTG}DfS8Vz)s*+vBh+QURVVT)@O?RsP*eGHgx)Uadr4b#Ul@Ge$oJ22i@Nn{#wq< zP`+w2e~Fy%{4tq6kOqAHFmP^3_wl@#_h$YBC)k$CZ@2dQ2oBJcgN0yR_7`zVq`$h% zAGIr5PrNW84bspd8U*UNsD8@6X&W(gyLG3C`@ym1#8ba$=x=NRxmrzRYiQ$mq)X`= zJ-$QcPkZ+b)8u|*MQ^T^;}qz$o%T#0!-F#l8%~eVl$Ur$F?qqQ(x8i+YEa>k+B+3; zL5U{!Ncdv*ADY4#4IPKo#JHm;XjrLkET@gD5`8o~t+r-1z1aAGoH0*mRmda_ouZ-B zAYFuO#Aj&BJRxfot3v^7M*kzrgt?HY$*W(Ly2EGoC|}^cVAIF5AcwHSIuBde)Buy% z@KF7gu;{{7ucYJV&vk?^?a5xC$@fDw07NXCcb{#4_LEQfM|VuG*}P|whAz?2RouO! z{+S|hPh&(~_{0N&`M*wie`%;C9YXw8^kq)BAMM-se>Euk*$npDR>$|nhV+^0cby-t z>B=c&Kt9$ipn>g#u0s|9$B!L-AVjmFL%taFCU)j*mf*D#rBvM3>gEKpL z6BiF(^Xv=?Y}5&OVN2({pet7LWiJOcM02Im?1s?kqhdY_mr~ z(iD`VDk?l^CatnY^X;+6eC=!99ZSN0I@2{>=nAfMnJ!W=KNqJrExdBkYq!`-R&9pl zbu_}&jjrrY=XlW7LP-A*o)0z|j%_W!vO?~GAUVoh?6@bL?L}AjrlUS|s9+9PH8+?L z8rGX6ApY8WYejy#%hcQFzI3)9U9nx93n9qeU@_<>bSgSwL5|e9e|H8yr9=T zBYgMxC5{0Yx6@|r-QQ&7c*o_!h#T^K8YdJQTjJEy{psi%I>?4-4E2;)asRPM#is8n z!=JC*_1TF8(9uAcEzuwtv$ig1h49SCo~1Uh~*foBnJGrmKh0Rcj$Fl2^@{c4YeP$>;F}wZpjxahqR6Lx{W$40E zQ4sNgz=+Au6BQ~~cAADg*jez7j=raZJL#1Gwp1STt2f_ObaJ4M93IOHdb}5LkoI%v z3Aad8T5UXkQSXvW1fBhXE?+AYNe5aA10Ak81fET?m-~J+xY3S;Me>f`qFxG$qNCAt zG=`4G(&5hiNC*EQx43s7Up_Vm4gu#!uP3kWUh(FU`jMn^{!esHiBKGU85BALuF9um zecw&{w=StYsC7=Rk2n=imrbB6d?kH`2OzMA1wWGwx7}~UD^chD!};4hBpHcxb`l+c zgWO!>e2JnBBxX2eR_24*sxuPnKl33ISs87=DgE(MJ9b`pti9JanU1E=AsN9ETS1A_ zr2BEx0nQ{#vu|l@MMP8SXc`>?xY*`p9>3aPeSV;tCC#_eZJUl{Ivve`7isgDTi9dq zTqoPd%rDC?r~8Sy-nlPysK5=s=fz+DXgetKeErxBfuEPcy)x-&79HvgU=5yFA<%X$ z&LzKWm#ZB9tdMRt9nGPG6dT8+rs2i-N`kDqZ>*ft$hok%3%T?&d2~f*iF}xCBg_>E zvbO;K{x5Ia1X*LSRii%-Nt!bY6h61_(eFY!r-;s(A?8uQpJ6m=G{KxiD??AK~{O(6eF1s$!VqvR?OI@)(3Wgf6J5T&Idt6qF^ ztC4=)}_NY;M%q=hr#wVJO-%lwUBE?HH&%1IjeLWB_&!&`;bbClqe~DB=LEVkl>1RykZQba(8k zRhdsN8q4B$zG9qpWU%c7`Xn;=5oztZI|YA!rQQneJ)rU)t#V?hIWyE;7>ce8)Qy3% z-5C&6;}+b+eTPCx9t;4RLaxR`_GwbXNw+{OQK1t%cP>a>6wWoc@l@ef978>xp_#zod}crz1}>R* zUI0F8kh#@xg16hrxR5kAe~IU6A_Glg0H_^vP48FBvpjry(>9af$z0*6LFr@$n!*5* z)KtbYo9lPr0sDHbmqnYh&Q)GAPD)m;S4e}+gYB+moMoEow?53x$ zq_P>Dw|qIU8KJ}tH#TL8%Z0rFY&@6+e&A82PvgP;p(%VT3xn_JYUVN2@)?{0hFq?Y zl}I6$!rKzVFub(qe*W=M`e!-I0`o$KW)TC@tv`xDw!+m4QRBVFQFj6jB62$9WW0(Q z8YK))DFZEIKqba<28I#T!DWFt^f@3{x=8j{@9q11nMa>7?o}|*N(LYjtFXRsGl^l? zRWjdSm?UkVf9}p4Y!jG7s~IXa47Rnv1z5oaKPP^vtNX97n;Z-BW@ntOWvJFMPSrD1 zzcSQH8C=;(vExy8QKz*jHn~PQr}d0CFccaY8chs#1!BhoIjzXe>}dXpPo|gsMzo5u z!|pdWGk~_Ug#nCf|3@}vij4PluDJe~^kN|XvyJp+oBgc}w2c7>aXIKADN}Ws+F{Sp zyX(|6{RrL$-xy%-eJ3EJe5-%&3MLh0l&d}Y!k=2%&XDb3s7Hzg2!Pn1A1RZ3rqX*> z;MBWd#e=(=zr%iJpj`~mQ-1s>CAd^C&6uy#O803jsQjdQbW$G!?Pq{J$<6M5ZDEv^c6^um(@!;T_%<(-7+|mm8H)Y<;Xt8` z#7{V~`&0*b@DAndGxI42h8XN$49;(cd>u~}br>WWRx1P!&??`xOM&ZOooc(fHdk%o z+SU<<#wdgRN*E>_SsH74HrxOBY{>HQr1dK$uK!`29An4~@s;AhXHp%$SuS~5@~=L2 z{?PIne*JL7)F1v@v6QCs&)tu>W9tshU=|ETZNBtw3RAveY2CI)Vdxb+(}TVh8; z9Ax?OPt9gzPBYLM7!wb7A~Ky)^vr~o(422v7+;L$^^EGFpZr^xh8MRq! zZM^AU5v1l$75nmR-}iU~KY!soKfn;q64BI})i!D3lI3S};?GC9 zSuz!VVy?sSF_Ee8mlkG8CRZM$B+?F8F;QzKP?g#+0ltNiV#2%Mk2H9n`$B8TUBBkm zil1z@Efej-Zhcvs?lcX>xPGZ_D_Ir8SDx<}$R?-FjON4dy$-G59m=che)@u`XvfsF zX9AA|KxkhwA@>feeF4bPXk$}8=d`VPdb4XUZyx46b6}#cn82=t?d7(_ycD6WX~WS3 z$<=yE<*klPIVYxKFA^XMdG`Fj9oBk07TY4{`{Js2fWdNSChEcjd{7UTlr^_sjKn7v zGqI;2S#))Ewzw-(){V(_XKHvbWjvWs*B027mOJ3Qm_SYSU!eo=RUwy`zgN@}IdpZ) z^N_u_wg=bb5|DFu+`YVaWuQBn9}m}?Z0_=Aa(tNbwabUa;qLuS-?OCYv8m*uo zn?ek-asR;9CemfOQU9@4<>wKEOF>LDmOPuR*eBmVed{~D#zqe~0D%_=#7S5D?$5emMREuCrePC)vGG#{u z21tV>Toe zp2NSr54TnAG*?SwqUlVq;kY7eWwKYkazi zB}~~)3dnrrkQiNY{>|~5J|NrQ*|)7MWdiE2jEMmiAf|#b2bm&;MHZ1MJ{$JZ+)jDU z#CxwOXP!#sufUd&TYnV^q`MXeotS9ZFp)aP>7GAc$z)eCfoFt<-;TTcIhBgGyTd0Bdh`Y z3Q(tUtHtG!zm-|<(HJ?}>q~2zIM&g~<@eX0+nDG#CgczPV8AwCQF3qj>*Z4u zZzbu%1>z#E?M!wDQ{_7osM$t%JE46relS9|YVQyeRom^K!|L0NSTFR=x|rw>5LXB{ zQmAY^T4FN%YNgBKL(e+5n{T^8iZQ{R+Y7_^mtYTH;*t1(3fzr>FVPnTPNmOJwE z-pfmaOxYo(>M!Q0-%QnErrHSe)F>1E!vw#lGR_RU`QeToI%&`vEbW&3rhT*L-O~fh zO8F3(>Ii>Fu^D%*SL|M6!j`B~Uc@)nTV`YQ{PVVZdF53-RX$@(_Bc~!f~io1D4d%gb}O9S4IWX4<9ohXx#5H@#q?b}ZDM1+0xPS<7CT8~w-B_>~T={Wt>w zbIQ))7=7x&{U^pskQ4oW9pVWvQ9X$q?}pmE-cwM zxIbd9EO2`2Jk){e+qhnSB;?RU-JSqX=DfP*_(jtQEjN~&J4?AjAd_!_j8y$H_8qc} z-!*<+<*j$~hn*fQ)RP4%OU+m(sP`7tFW5aipmreBe&^mD+q_t)Hwz3>9~Q<3#LmxcPVK*6%Y+$|ZwF#%_9hbmd_$WM24^|5@-f`T;g`$|#! z1|y9frje(AtamNW6!&LozF{c@uoQcF0$EtOBw%&`BsnO$?|%KUI96Zt)h92&-T!pW z+8~y47X`G^ZO5eBpWCSKG?G`?amF!`70hCXuv9`>3U66*bv$7(osjBd40#kfX8vN$ zJaD|OAKKGtzQ)B@$Yv_hv)RufoW*&^lB*D?7044rYC}h)2QK?Rw>;fr`EfX<@I8wY z!IH1!`v3#IbJy%47_J(%U*!$Y&-tbB?%J<8<3W#Pp;53cSm>$-0d7&#i9KG=BS~?(ud=-YF6>HS>m%* zvhohj#%4SAeqyoXSTgY}S$Evl1lBT}+qZ%FmpXa!cI`w|%mH)f)Xwk=J3q7J6IsC1 z63h>1#skMLuDl=CEu-$Z>5<0+tp`ag3QH=LrLrhG%8N^5acO1mV+krSbMBOb zkB;`f{d;GhYR+?`A*FN{JAOhisuJf-=`^hbUf*>+RR@a0q;OQD`6`<12SK?`GYHJ{k{`6u0b@r3eoFTML* z9y1zPY!{J6*x%ZB|5t%{{jbp;pUuf0DOtnk(;HX5XkwwwETF8Y!7SP^L(xk&z4Y!U z=G{uaYd?3Tg@v}V&^BzoWB6Z?;EC3mN1G?f%eVX0ZMDvwD)0TqQg3I;cd*#g{B}Iw zVXck8JqOB;8WOekw3N}X)5bgU8j-9mukR@B47ae3c^dsGp@gz>-_y$zj1(HqRj~ia2n%jD_~v){VUgwzBDZ^^inm^t!33W~coOj~8CS8?V?P{sIrv3FOl;nLG7+vUTrN3U`TKcvUY{visUgJnDl-eepo{ zdkxxJaF<0gG1jovJY0fE4YSa?7U+j(*YLn%ZfKa_|arII&C+ze@B{S5;F*|9*mbC;10n<62$`KF0Ns+ zG0QzcsUz01erS!OxXuNzEFqDzE&Eo9UTQ=tpq&|%1S>uutgGXcWkjlqO)U6qGQ4_;& z$oPS+$=?EcU&rCmcsxpq!IISX>5)DvRpc1Y4+4QF{Pcqo@ba@_iO|mfS^ut@Uq{{h zX!FDMRPw!V4SB!c;8`=$koeZoc`(d3RkmqyV;Qg4s`YwFcvdoAqjPNv3>YKpd*+t6 zv8c8_^opK6<5XSfuF#Kr82nFD@p@@^S~^~9Wt{^z_Nr6&_N?8IAzY*Taz0UHKxHOLPa8L+7Pf_z+KUw1{e)hG)Oddk`GXrRFeCFxlqHf@`taC@BF-dGcF zk6$@>tz0}S4^MlGXXWEhq~Z#ogD}ZwuhWk&X%L?hz2ehayxM&8zg)VGGt9yh1;)O57+uwTZ5PXiq}fyJ`%`{yj5;&@E%D2yDW0h ze}^pJ!&*FAhX=FHZ!jM)h{3i0sMEzCoC}Zb^RGJ6UFTnZv3>44o?VXzldJ}8p#Z>~ znGGghahTWas{P(NG4`5<)5!s!35|Gm6CQ;5INop9ye=#EJ2>6nLHZ?|=Xq|Z8L!xa zS8K(iZFsaDkD68UcHlwD*Zc;qOSltW8q)d3Cdk9%YGx+xYeIatC!dNR6b$)+N4xN_ zDE@>W{{LxGClt1XY6s4}9ZX^bSk@DccH_|=JbDmIIGj#SZ;%b0lF9gXs_fF(d7WOo zavV4G$o(Tl#1Yq;zdur*H{E3(OzFd`{=#eY<7sh1xE8Ltwa8If%eBQTY=vMKo9B0G zx_t)lpce!;N?t`6s#QlOfH80XLO5h3iAv|js zuQGyXjpETUJUR}4@+9()10PfpD+(Yn$Ifnl#z(DLFDO6pLoTU%0bJUFTLkFx!M(dAwKpOj;ntuuIZ77zABoDD*Hkh_66ba*-R_>CIl#{-wH2s-?qxE_`IcNEz7 zdF`L((LaObMfL=?13|%&z#8F+;&vi%CK;#|Lpn;LW>etHeRRq*t1sN^6KDFJ3F^-Y zEEfXHmB4Z%pzZ{ebs4vW5f;6;k>2O-F6siC96q{7hwZqLp0o~8HEV89y5PTmv+3(= zV>}JA9t2HKf{qsf^(LS%2&lwM!Ya30M%Gs_wz(A$n%4LbKy1y#7J2SEJaHrU4o+C= zZmj-jYn?BF^?mJKgy8<|hxN;Y%L*$zgfNYVCo@Hn59g+J)@pTSc?GW`?qkUs`4L$D z1f`d_@wE`zjF7V}-v2E^_SlH4iyRGd2q1v0EVN(4eZT9Z?4aA{1V(GOSEU?zMPLOI z0>wqar=Jc~D5&;8!c*94^?f`0OU0z4wWvO8BTc!l`49^8|VcP%iO zpcF#T{egb?jlEkY->6ffY%B1Vt19)^baXe1@&%=L)x}7E4_^ zVt(mq|KsNPFVO^r7y>Pp04i1gp^;NGw+js(ZJH8gL~qlLf#txJ0z(J9;z1n| zsn?yj`B+MHXbhiq_@<`(u~Y*46HgYXNWD0fDt1Xk`jODU+uY+D=xGF{HvV+z^=mhb zkTvgHm04HhkCP6uipq))P86_22F9;}c>I_jRE@Rsq{X4adi7FLI0DE+nwt5wxaOe_Q`^Jz~9XxuovQ z>CM`f`(C}S>A6}&(D9Wj#`@?#BrWpqXM@`C0lj{fRa1sS?fkV8g5rAuyOf|+2JMO9 zjvW2MkLa&UDB5}WpNis&O#Id-*~aArw1R*h;wToal2Y1oxKro^dwy{FdPh(|B|+%} z0o*5hM4*OG}}+|JpIslouDh`G48bl$Vx#Y z9L=Aazw}!q;n2|vgQik<(K>?qH-gf40$NW%#r|!Ac?Ge-MwNZKE>|DjIGf4$eCpJk zTLS@YB%s*>d*B9CE!U2|Yed^^2WFU?x5VW&5zuA=goUrL_}*W>bTzM;@R;!!`|R}# zt2J5(Xe$A2BS0;~Lm&e~dpMT-Ira8hN}P*vmp06YI}oZcuW^OG~5)od*k_8aXUe- z_fAd5!S_Ob66CuHsyzg>mjGbn@-?^+A=re|^8#t($y*LTkC|T|-XoCNM?ihChps+o z`fc8IwZ#oP<&77I6VFDhMv`yr-{*LA4^OmHEwfg?}jNiEi$Rt5?iU4uZ5%{;we^jL3 zoO(U?B%C3?=e%wHZvtzYK>I_`{Y%iAA*ebCc=9@M3*lyAz+>VtP@1RB z1nwCTJ4`_~-i`=a-y4wSW5nzDn}7APa(=Th<;c+Kus&fidJ+cDm*8mE<`A+`UztR&!#S} zqei05i+oPuyEmh zU2me+3!?T*BF%@W>PwU#;K$TRL4foKvMagFL-)kOoBAg^rI@yplYT_40jLuo_oW)X z=WgiLz0|aMbJ&7Kj6abTK-7OlWCs#KDW{k}9d-qnZb7PF8Rs?|ufsM8yyyJCsNZBc2Q=Dn<}NFGKd9L?jUy$M>(` zHs^tM-&Dqo_2rl^?a6K)dE9BaQA9MF2#^3y=+K$xo6u$VVdtok9eU3a5>V(MPY^@Dx0U2YEzo;C>}24>t2tf^iqaG;Dd}RViJ*^Ow>prD$Q_x7Ud|Qetwg~YdmSG zzq8N#2{YLKcPddSjR^dnbQlL9rNg239N~LQ`kXJjI~GaUN%PoinL$*`Br0VQbq+v8 z5-f;BI!up8v1{|Tyu2eJ>UQ)|HWAGsqPavg9As!XwsRIAeDF%S`R-BSa!xG=ulD8< zAs-EIb+hW;y%TRmm&?^QL>W5W*!q@;<`Yp;0TD9swjkz(;S1!Fd#Y@TgpzuS{qLO$ z?L-TSitmW0X1I!AfEw9C3dxjb+2UH?@t3%yEdj93b=r_LXpZ#S-Ryh&;(QNJ_PP(0y z=|e<*WwnlMoqOyX6-4byqCym?d3kR_D%VXs>3E@c&3ig>pWjnupASU!Dx&59KSmBf z{75GnG9Pux96j*wQ5)sPz(*qbi3n=X*fgAd|GcA4>i!X{(loE;H#>7a6Cq&@*Gv7O z#k#Ikl?^9WY15L_zYxJg46ff!d)5`b(mkXwC-F>baqF3CqHYb5{T4HELAn!{?pbVc z=x(S>cau3_^WiH|qm~F*5sXBGYr%;jfesg9B%q0i@rxK z>WsPcY3|FGS933XC!+O4w1Ehj=0+mmkpA=aF}G}jUf{@(Vo#nRnEgju=YX3-(ow6u z15>`uMD-S;d@E7A4IY(ycLv^r%Vk zU7dn=H|u^9MsTc0og3D4W^_hnXDrq-HM)uVJw(-BqNcytfBHd)*o4N4areXetG_d< zcuOn}_Yu)wMBoIz!&a=*g_ie|A9BrZ2}##Ke>tkIpQt}T)GFo2^m9&<>fH)1L=6NB zBxJ5HD~}r_>I@OJTevaFgvJ4(bB-2_LgOdrK5SW4G&xMv8X>BT645dEk0(+H_mX!U z<_sp+0mZmS&-v0R+PyPby8=qY9rap;kb5pikZqrBgzmdG*KyI({>1CZ!bFp<>AIc0>d^}&6fm!{zFv# zOVpkr0@Zc_8of~x*~XA~aarauzmMsrfq%y?{g@@n&%uANF3xO16fNKMCC^r@9Jbl? zo=Y)nW}c|GKm_X~)o$_7O`Hk=Z!Q8lRHr^fD2Svq^_1E^6QuNMuQ?d603m6o`eal8{IGm@1y7rO%=6QxLWDV zIAWCb<`)hm)R6>ePtIZ)JhN@zr@5C>wu4OtkvHQ8ok*xN3DR6&u~Ntj5t)Pz*)t!d z=f$ehcdZCKC!sDRfMd9lU^#&#)K!dLa-ug*zvynWq;lD@;k~(vAKXZ&I|=n50ifXJ zIv;F={8fBqnn75Rwzw@P+_Z;2@NCxbL=&|z!e)znH(2H zTICGpgO=7vsgReuz`Bq}`uY9)6cP>v6^J6IcU-=Gi``@Vz0+I3*v=(2n1qIqpiJ}^ z3;(~GZ}{HfEhq5YS0$}wr)*;=Ng<4+=^#+L8hT9aLQGPfd|UATM?w8}c2x(3lho6= z-%29)6Ps^@&a2DVh8z6YZ}ihWg2aj>v7$({Xp&kC32cyyc>>qrig_Hl5zk43?N3cM zDtgO&I(c()LwqcW6-QEzCqWhh!YJ5O54d+2NJ^Zn+F4tqwUhT=NCJtKNK$%6z=n3N zspJ@7^#iT@4_KO>K2Y(7r1gm>iG=xYU*$01kOz0u>I}C^7@t<@KfU~2W=AqfBZYJ_ zm81~NQ^}1v!+lv@x~oAWG*i=m-h8&RtvQW^rjyVN5`?0O`~g@f8svDHNBgW~`qR3q zuxF$b2Qo>lEE4Mk)jkbPgD@9R3a{@*&sE5TFU*_*OSXbuS#tHPGy+9HLun~yT- z>x(SU)uIOexg_;G5}4JtVX^agmgVWWF~41Je&(W;uQrLlC87Bw0MDtz7rkye=hz2t zUc0B=ID9L~A-{m6Q%F*OiF-!^a3(+$ZISXT=4WQYa+h*qGwCf?(z1$33dJN^fixB# zmBr>%yEVn9vDJ5ZhudU-Pb&{OMIej1T#L8R6db3 zDg;LOKVuUY1}21z$ZlL{-)h@$X;C9P4sLx|W%-44qMAgjAYye>QNG<$EQOT?sRvJHAQDj|q-MP}kcRklngv#BCT;XaUu^UP9O(gmELJ@+2+)%poet5_Aq`}sT zef^OR5pzu0W|C4lR`l08DsCS6Q7|E4i@N*8#K5mDB(#-;lG43GF1IKS*$Z?ZRH;E|k=+*kIePkxS*_ZV7*(e@7X_TW%T$ev*I-1=nT76^AZJ zJUdS4biF5ZX?DDuq|ifB3_xDsVcguWIGiE(sZwg`<<=!@v5j-RSU19#{>aV#^T|@F z3fXzhDDArPLLW)BO$=Jq(!Da5b^C?f_fu8-h(frOUnKQ@lAeRW01OsmqkFKGt7TG| zegC*G?QS&{({wtE4w7_+NZP|B2=;NlfQvqGYdLUzRE5tAw&6^W>i+v9B#lv$&KQY3 zPGYqS0J;I@$#c6WS7vQ;2jtq0scn)nH<}=!lO#CTb0GXti^}(XO|`V1h;V-qeX%G$ zMM8g*z(kU>=x^3;6+WKuSt88uHsQoE-~>^~%cLjQ$Xgekf}id3&Nf0VC^PnvpY z1gHN@xWI!KX>SOQkeFC$#|br5IU9}qm?5!eNqTc6RxNRodzuTnTbuX!hg`#ubMhzT zxcd#Q9?z3BzX-z7OU_FF;;F*l-t`^&-#ru}E-a9g7D?b*pRfrkOv(v@=Po?(PFO8& zo^AKV^lY94a=Q?EAl{}rPr2nAz956;&`UBVkOF)3pFM&);BrCijYbKFTCX+Q&$Xco7lWAlS z82&$a5LV#XyG<^5OaA8(=e?rW*NG%3r<2hPGDNm^*rW9Y2b0b>9GKskvw4GouIRQ* zGMYt3RXGGFUY>aU_}0m1b{dF}-`PGSn~dg=ft!#EWAD}#b1Q7EvB`7~n14sI`dZ~7dY+egssud~vVw+z#B z3FPl&w4MyOh7Ka!y`K77b6Mi zUaz%F{B#ppt(i<~A?yB>Y$b!wiYYh;-o#4QpsXf{v^Rg~^!gI4bf}r`HK{qG*G5L$ z;im*zv1nMKQs2Tu>Wg9A0(xc5N59VjNc+I-;j{z@Q$Vlt& zs}AzCk51L$PU)-8`fu$dqd&;tki$8OX1GO=k6wwR_2E9~lfvtuXB&z5lg<2$pC2MT!s9>?QTS&#)YQOFj8T}32x}KvG z{>QXx?}eS!ua3w`p4PIfES@GS{vpf%CDUfesUxH&RN-rn!TBY6>-j@QPO z+XeDp>P=ncA1mNTZWO!nFch5@dS7RD)I?o?LrUCQ-p4 z;nVwc^%Km0*!TP+qf4;F@^QAoJ>irvrD!SCE^DizDe=aYWiq-#282R8R-Jz;*q!Cr z&eN}@go~bg`Q_L%3cGUsQDkIE*CUO4^Hh-1%M*`sRa)#QtbS2gX2)Hm*So#kN7TwO zIKI@pt=pc0I#58_3kzCjWIX@e?nHjkX`kzLa9giAQc#I^tC1yz&xQwoEs90FvMAqI z>i64;qV7y#dy|X#eaOiCuU&2BR>!WM)mdco;4)u6r>MJ7^al9`NDw_Nmrjf63f_#& z%6@-Jffn=9m7?xOp}A9731HZag$4uJT5C3+2o8^F#nr3C%_fc!5KFCuV8hgm$Je_y zrd{CM*6cyit`z|qr}t(Z_vg`iRB74)uc#ktuRJL%FN&Hsh5drU2H`^-?k>WvsfoAU z6-}D_(=qM5RdwS_ih4d!myp(xjhiZW*GI0s<#8|ij!&8oh2=|;_oJ}=DYW-k=F^S{ z>CSC(8Z<$smI{~k(5K9=)W-o7_A3e+NP)8&Fq>af0FeR_pDBmfd@9a0Gv$^`S+eHZ z9qX1fi-IUB-7L2>=65l3;4zd%dU?-BY|we$5PbeC_3>Jr2+20+zAv2AWh)R1mcZ=7SiwPdAMaEKV3lRqW7(= zjV)EYemrxT$*B(NrTcz(^M(SsbGYuj;;8cSwD8H0ln1l-)SL&CC{PEA zU5(reWewq-J^x5G5BC(`T+vUapeYnIm4c>GK&$)z@SHZo?qYdgk{mDTC$@|@`F~7@ zmLtJkpQ$n~341kaW+?E`jZYcdW>7RTDH`^CrR$;hQMP}`QImBJKIwQu-ho_+EQ;O< z*z0gg0$YT4_sV?TI?mP7#0<@*sOL~raw+UQ3i_6U*6?Mm2A!{*)$o$FZ+97HRQU64 z^tpGiMel7xJ_RkHKmrLH&A8GsDILkLhh$eRD*jFonJA>7?W@2^NkMdTE_X`qfbSapG5yLDWjm}6f|M=U(6UTG(j2ZtsMhRbd4pZG)p7#iFs{*S%F%b~OGMu_trJ_iGn3Rt z0rNNblJnZC&b~)hdw90KU-d&cE3ut|c0dn{bW%Vl_dg*L+v_E*FXH0PFAa-powHgW z^Mk_fkcN_{$Dvoj$r<7&M1*^1lV8kLbx|~*^Z%rP#5PC0YCJn)$U^>8NNKVE-;ZVD zTe>OwJrwOQJ{%75voiF{-J^N_Op@I4w8t}M{S+v^z?VKhm9WgC^IMe-Y)zK9fNTIs}tw^)Tgs z>SX{m;i#95JoeZ`>e1|KyB}rML)x%!gu)u7D2{WF!Lny;W$|Br_bwt>yIL{gsTot; zX|NLUGhP{o_rMOAtE0BQw5y)B7PJ}+Nc`SuJ3&!RB)qU3Uu`yc@D^q?`6sIYtdU=b8t-Kk!J z0qfs|sfuTm1z0UoK(h}%I`$FpNGF9xlaD{~ts-6C)s91|dZUg+O#DlI{iv@&F1QZ= zkD|RqQK=JIrhxdNsR?Xb9UJ8wFS@o}aCj#E)mou;+X{vCj0zi;9hGxjg4Vx_1R5_F z80>c6oNeN96Dbou2Hu;Y>xJQ_;`79L9r(XcXam)kl)gj@y?X?>EzOp`xx-m}PF* z0;MTgqPotE&NK2k>XJ^#)o?c|>P|&Hs3_T!3dPN&Y_0gtP z(o3q3<@2R?xvWO|9OdjAMvm;05&U5r{7S$pfXaGBRSBfZzovr9d=M2=Dl#;&@)r+= z=LcjxY%zaQnuo1Ecbk>j%dh9Zv0xHHRrln95|PnVuhbf1e`?vQ49)6;nr@*~b{G|; z!osl^00Ans;` zGTYRCk8kD}%P-V_G1WHLKZh!xOQrcr;h@sB@GO44k?XI-q@QQ=)vaFi=TXtOR7g#8 z1R#|MpO|dpDK2{6$_~HpuUTpND#;K3l_5LlnaS9PW;bI8VH200BsV%k_uQfqRvMMR2YL!s+-&1w6 z`AVrkhQjtvP;f0Gm%&?D8k+-l#TN11-mD#~l$D&LVIOUAAlRgw%C4a5RZ^j(^}l@0 zU5j!(jfejp4N33teT0`T|3K9q*6H)t-v7Q$B4mjYSISY&s6Z-gzI}&XAP_{8ZIPMx0rdRYPfuXX2FK$ZWo^| zlnh0kyY%koZLA6NYAUOSs^rDhA$}J*d-c<*lRo#KG}+a1J?fv{|CNf?Qh`RsIUdf| zWhy_IUA!;&RJY{Ap`-D2RMs~tD2jfEr?j%XeixzbZIP^=-WDbHL&R*W?8OcBRGkW; z3SK1M?owyCa3OzsDC@@KnHu2+s(K?;-iMpRsWUNc*UDW8`jMZH7%cMJoNS_^%~Xiv zTA=yl1qVidi2WOdqJ%^;1;`s5;ABgE0AwO^vP% z!BD}Z?<{RBtdVe$hT8kXO!9o=sg;oE+K0nbzM~=ykb!4;~$3mp?Z? z-M`@AePoP^jziB#a1eMk9pUFhr#)qMzI_~bfIT8ML1j-;6-v1)xk27HH;N?{PxUEY zMV)^gAs`hUxYnsabLuGxEw#P*xf1&9?myc@^6dN7=dAtY z=BY{xRP9DFzqNn{YOk+G@`IcX6}6trJwAO6w@B6cN7V}CU4pfYV`{jJEr}qwixE(} zemowV-75WHePr)k+HbBEs^T*ms|In!0pqptT>Q5yQ&OI5xBO~qw>e*DM`PL3SOL;L zAP9kUyL&~EG^)&f&gLH2Ex9MxfrdKL&Z8j!e}>!VZy3 z^FAfi-ADa4iF+ROrm4T6>6}lXfVm=LAbs}!-k37g!UMX_p`9`>Y1%$CR*-}<7ntF_ zR*M{rDNvn$JeZ^y<9;O7m!{)KQ_B=`A=@J7$_^$^Pnn;o{S@f&M3leUp9U0om?<{F zDK$(R?Ozceiyw!mrQHdjDX$2_7}{oN=NOPn7g*Q9cG?^sFZ_xIXK(EDOJ7e*-s@c{ zF}vD%O};likcPgdp*^c>Fh7itN9WRATx;?w^=>eIoUcU%(X@kUN+C2_6At%vJ?#Cg z+fKM!qr-m&{cjm=-ThZ9l!k`UP}M{X0D(6hUHI$q_fGk>X4zxLS8`U?A^SX=LyCCH z#P1XoKf5Z0IE2%bBWU{Bgcq2H#{J(?KamZ`59HI6wmL*g%0$w%qiD2fnraM9GnS^^ z%j>irD}v+VXb>X9`2+^d4dkXKGwB}>|NGJTa}jS!HMQeuXaWr-^kT18lOA;j=di*h z*jdr`cV}2&B25EAHg4oNU+eJ$nfc~J>&gz(Te|3PXj(}${bU*~g{GAXKgxq810fFx zDZo1ul%6=HBPH}F7OLy>|7xVsw9{!P(zpxoKysiNB|K5SbHgE7c!Sk%{;KH=nsO#h zuUmW(l-7}HiLdK*<^5DU_T^fSF8t%pqM_L|DA?xEAY=q}L5_VZJY*%kp-HzjHe};w zM@81&Rc~`?XdVqpY@8;nJ1~20Nxi+yeVMF)&TGrQrGcJXKD<9i%MG)&_fusu>b$Sa zWZq@eHui0OQ9#ovq$$mjzVQ~|kQu{NOTVTPAO0WQM+LmXrQXrdA{vB0-!SS`Dz)Nj z@WPfqcO>b9Qtpqw7t`c}gc9+HcjG|WNsUE^9k|_cmTqsZE|ZYsnO`=Is-4lR77!1< z?R2%Ugr@nPrdvv5=U`}!B4`PuP3GMm>(eJ6?>TAnIPO;&4K0W9#m(XTZ#!OGa=8P& zzh*L>$4j$zyn=>S(!d?_0}Vp3YnUj{k01&9#^(-ewtIxlKWp%vsiG-bX~dI#X7`bws60mZ08rJDzZPO zl!w`A?W&;x%K9s9l@~{3&<4acAkMHtL=@ChEz5q67)D zj+Yx5l#iV{pmOrH>j0~TrqxPgx6$<5X`mN8%~eF^sC6{#{k-kDjo-1=+_#nPPsq-6 z&{&-`buX@5FoH?jz_>Vc$i5TjwGCf+%zj&jC?dZ+J=JC4V|{0>a+Kg3)5#w&f@o;- znmy2Hs%N#mBRe+EH9ipx&E^)g{z(JB7P#KLcYJx~@7e(;|HZ}Ia&4mBH02(ePA{}L z4KzsqFTt!XbaQ%_)j;NB@=r~-X1UeBXxjZW@Qug8xPDOYZ<>1Z3Sr_x((*=LlkowX zasfYR6kk{L5{>DXH8$b<-J)cj{C1G0G(=NR5E-Vyre2kkiGL1e zuAwK4z(ZjNI>}gJ+0-i~CVk@}HO^|f_eW{kRYW)=?^_{Q&q-7)sqgoFCvc>RISrGegi)y8%z5Vtv+7wfro7R^j@h zEbDvO91T=L=3!!DzM&jl9i-60QdVHG=;)?gE`7CSH$p2EXc_aeqi;^$3Te3~R(zgS zvp_=^Y3M&1h~Ffxam0=rD)W=&KNu778kgEyh}x}FOEkp-$z}Lu4l%(BQ3?}KzGHIo z=l<5yYF{^(ee~RfTsi9GM(~%)pm3xd%Dh7UI#kd((-?_Ffx_D2>tt{?&P-88MD2CNse^Xi4K%+4xo>9WJGb8 zeWpeKQmHu4=&LbjIxIo(q`Xlt*+Hp4nuNyx#h)}?bN4wNb)iGSk^>3gDl%5w@m_OE zQqCp9JAcu{l`ii_XS>r`9(2@`4%$gxbinXJrXIwvjc}m?-gK;DVgyEjvtB`EqFXfV z6S|s&3S=8AUeH-D>0lCc7ovoH=G~TtJ%rEa`(EL1gnEqo(AmCpT{uq&!x3)_*>tf| zXghJ(aHQgl_Q3@|x<(?mKOOQF@GHp4lf9AnAN=YIRIPx~DqF7rI{JzZM=ehLW32F? zP^w!os^H{8O`@3d*+4q_nhr@Y>X{HJ%GyG~`5@Azw1@PfZ8h>ix+!44t>dxM*p zftraGG>4$CHqSYpV}3o+{cpJS={G~^tT4Ks4>zZ#7@FrCm^rf9B`8 zpret{7Gyv$!nbW@Q!Re6zlQOxNGDxjjdMlO(P%nwqhsit5XTbBf;CY57Mjwu9<4Gw zx#q~hDZ**wKL5|6oV(u5ZT4SoNJ;J(iKVN=(OL0yTI$CCI5=;%?s9(c=wEwdW1;1r z*T&Zq=z58CnmaF6ENkOVVDb)XmKA*A@eEy}_PwF&CDFB$>8unwno390=x8TbIvo>H zumssBOLH?LU@ZJ+E5^qwq$6sncvr7ej5`XM`Itdx^{vf>_JG9^*gMu%$YwmPQXK^_eBt1S;d;sQD@qv`&V1)-7u4pr z;_51-1B@MnwA;1M?Q&3&`xu+A`>r*S=>3kaSVTYN%FRic9Cr1}h%7Cu5Al`i{v?t+ z(K~qyi(wBXi|MRpQVIMHMt_A9l-C!FP@;#VV0Geq)4p)W7Oz6P~9f2Qkvp{rHXK|i8gw1e9g`K@-FD)%;|(CYqL?V|nX9Bb%$ zU+D^M{6R=945a_`VwxVG7?Qd;M|H|jXwjRQnyZ7UxgO5I@_MDp=UzPa?=;#ixH(Fc z@{P_;+t??Dqy+Mxo%A@?$UIrgI$pBsz;~Fwbm07Au&s{CukSZ}Shq9KmoNK6Jr}-# zuKrW95nk#4)!~pGs~+!`Cn>1?S(ldMe8%Q=6J52LuICDQx4tz9*NV5|1!nmU!f&Jf zT<2@`Tj0iYl!Og~{l_}5oWs?4*sGSlF5Dd}-$vJJr>k_psH8)A%5@z83M)4v2mXE- z@Vdp1_p5Q{S^s&3{|8;Mi>~mKPV1&?^w2eW>8PV1t`7zmfJQ7w_;GH+c7jNE$mi3= z#%qIOHRoTjPm5&#qNDwEC{l6^*|lVyH6JJMQ&B$dX86M8RptO)X^_quqJtAhi@-7; zEU8bnR3`Rn?M&!wi?`h)xZ>|Bj-ZwCr|<$>dA4lGca_m7x;1di<@}Ih2}v~A%bQnrg3g+x!vSv!TeCpF6{;=DS2q=_ z@Y_{Ch+JHQOr?GM4FhXaFfU?!sXLp&k67(!I+>KzlKFg^4$cg4%f>19<8_|Oj!Kf7 zNJ1yy-2X#I|I*QM0glglA)8;)Wc54UZ^iWRTZzeXGjw#84vLg>FmbN|yzqYz%PlsJ zOXuU?H}N+ns%JTEGM=ZaEYMktum;oBm*})S9#Fa~=2@oyC-x4bwiJkl4Oa`dr&d_r zxpX5g_e=EY6*~Hi0q9LT28a@0yS*PC?E_cyeE0Xi_Y*4XNW;V5lrGk z(cx9R!v3)d(`VAu=T?!buQ@WX;{)LGBZ6wK`E@f6L{!|Xkhs(4#87l*oEqRSB0}mV zR#ot%k!EJt?p5o}H*`yeJ!i1Txgi1V?l9Id722d>*Goy;77*3$!hjqgn0wmbEOs0{ zc_=VE<G3~z`8nKJ z&|my&sW)kj1?dYhvK|a2PsYhWUJhABU7<3xx$9=S4K?1YA#`o77X!HXz`9k6ETV2@ zZ5F?CFJPaE)9V#)23VcFV8A?tAiM$AAhaG}NJQ>wTME z><*qkzM3boWa@)ILotA%@QOhTWN5r*Xaq6PUXo@z-_%@X-)9MK!bkPl}73&Ir#P+7ydr`LVYZ6zGQhJFm=L@YzT6qF?T z!Ne5Vxw~p=>W0+hgXS+rXD&r=j$#q6?tAls!|SuSM$oYS#^1+}}}@!a!3Qs6-mv%lrx^ zlXcJNN+;kZY^#yy%v*Y7SKocl^d*j_GjuW-O5X&>*A^4N%s28Rdr)Wi{J#1PF0m?I znG7_G0qQ;3FoYqgh;8vf4)qE?@3snll6XMMe=D#fhoP0r(0?nzi8O2O-g;X9Z=2G- zqTrMF^(EMO4D>Ans-m1jn2N*k!kCOH^bbs((MoI+@-2U!X^^O~S^o=>{FWb&g?_j8RGIV{o ze!$4LGU{SL0^isSYWI>;**;x|7D}IK=?2^LMl*jhG`krZJq%VaLo0{(9mhEY&e&ND zS>yCLE80!%O%hGFQfvAc=r0CvFZ!Wx|C=cA8jQPO#P%()j4Hj$Uuh} zC}|ja(fX#XDb&vmuX8wEM^}YjD^t9-;n!n*H4D( zOFJeQI+F~IK)z6%EiyE6M18{4$^4jxm&N7dmrJJ@%D))^JFmbv)k9Y0N(U5P)3ko! zf4Q*o7N!}jKMd6XW1z43zwJ}}Ewa%9EAf%^UjXr8H`<>>*Jh99*B#7|+lj<5Z zaIv7D*S7AiTcSEMHJ&qB!9197W<7U`Be}V6+j-CPZjVgj>Rp(qD--p>aY|DMc*#*a z=MZ;C#pytNv90RL&4Y^WPkxrx`Ei5|NFqwV@yBVx#ggv>W(_dJ;To=k-UUQ7u2|EK;}L`F0>l-|_hGWKh^{!uV2()L{Zg^T zPOwXi70r?P0Exn%t#tqjyZ9b@)l|8>U_o zQ#qNb{tL=o9JkqFJ9((vJg~}rhAit3J65Kb?(FR)ytmDP zU&D&wygWtj*N^J0y-wJ4<#E>gmRzP@9#i=(Q?pwf^f)j4p45~jvK9*$&}g8-L#=9Q_`mxBI>@?-y< zc+W&jndl#(7%T~F?%O`Hv;2&>l;HfgtOJ?iWlWuNrgjCB6}~2lyOIfs6j%_gj6T5M zERAn~o)}VA5_M_t?@)$zv(6Ns-_oNhCi;zQeEqzJssEM99^kKMz)ob*xGDArLv^#o*&)gWm!8$NOr<)e(l;jf z@wRghV5WdV`F`I6ca^wrafzA|@o9eeovGo4tB2`n2+(5?dox1L+~o|WRpqQJ`~K|b8O;|ojfi>hW%NX(S}PNb+Tl%Fs5rhli*I{X&NA2m{3`Wr zOthT|SlUVqNFX88Gp+u`wEfc`=RV62`@{|=yOXJyE9fl_0eY}cfn3C@Q)gbOdpo5?F8X`2&pW>pKYqeUVX}IdCvte-1I-3@w@9IB4YA~( z;`f8%1r(Jkwmw7@!roq4HG`Ygj2${?KXtgJm#NXm1T(M^%oZfTd~QbW*|kGiKekHN zhL(x_Vru=NLdwwU%+~`;*^`SRX>PHve_m4RXX*_wX@gAF8p;q8b`&h0#PTP7ZKnn3 zPw7Ly19V?cdrPr~nd&nFP&Ajd_gOHD{r35Le4_WQPYwYiO!g>~l_`WNJR+`*TGcbI z-od*qCKG0hwi%R2Bh0n7i+8+#lF{N5t76J|V#b)Pai-3ss4dj2z3n7|zXqS#Taf>a zF<7sQn_#LB@&caFKjYQ;wI%I4dOJ(LCxr5-O)}9b*l3VZY-VMN9Pw&wmfmh>V#f9O zP43U%Ox84$<{*s`#(kf>*1MKdT^PEt}szz0R{v9tGq76hxl-?WY5MNud$x0XENw+xE$>9X!_E9ikwlZDR`00 zowk!vv6o>v$j}^RKt$C^1_rzttgnz+{4W9aN$FGIf*8KD!nnx6akRMHSw{J}4BO>D z)7bjU;#_t$w;5SEdKIs(y}#ok1OD>xBkg9otGz-mPTL)Q+fgtgCh95!N>6ZoN2e;Q zt2h4)L+8yRt$v%Pn+)nM1DTLOGW;W#`<;^*H$mmV*0mjyRL(HXL zwF!58E*)E&EZJe`DT8{+K%I>fKW*W!-?zVG_wbe*4uz8E51jUv(P;<&Zr~t9Tva*h zR-jWwGtd}xu9~qjjjC$t!fYmrZ8Hn=1VG3F}HEA;ALdxB#^J#ek{b8n& z{xY!4-$f3M_gWwPE^Mf$siK&)SuHF;M*cS)&Ti71_{LALEVbY4Me%%}GiLgw5V?1q zTv>@x+HNZ4IcJxGzP^%C&J+!lfs8Dqy{7CLpOOEMr|*uZ`tAR>h47XcDN1$bbw+zg z9E7YKBW*+}Nk-AMOUNcWGh6n`rc^Scke$6(vVYh6eD3e>kNa`=InH^HYrL-OdcB^* z_?gUVm`j9rLc@hnczKLYI7WAl!@-pg-rsmY{ZMk|?ySm_HQ(-4p4}dSQHsRS8rWJ{ zVO-ij`PkI*_7q#$yy4_rY=cx321H}vxMI}K<(Ax*W=oQPEx8@w4JmtU^$r7KFtDn_ zpw6q8UybQ=31)XDxQV`a{-_}q14|FEo#*6Y{1=qk%=ZE%gRN>M$2g2;JO;AdR#2HX z3zymOS1ER(YE4(4+~&JhIk^wMSg5r3_g&fE1Pn;TfMDMD7$$cHBNtwC zIqm1G^j5<2W85XHo_RgJNf_m1j7ADZD;1-bh5_jqkbwaf)x7FlnHWguGP!GW-;#o| znc)F-XV{Hjm6pxP1i6=4r+!@O)k6F{8(nJ<&*MH?Uz}G~)vzBh03AJQb33lZEjaRs z3bdayYfWd)!hme}P8bLgZ5G)NzrdAiePsBjh;KZI9*bQ(mYR!E$iv9z!!B_cR!TTS&vDx{aj#VtcC>3IKy7tF0PjMjTesd$VH%i=tpQ6ri9~>$y!sr)c zXeAh(PR>D*k8ozdDhEvBTH3;;^(yURardA{z43?X+7VsJgi?%F8Admgr5p~cdsb#P zkmbY1dh%eky1z#7@E-FQyv|=LFgleOS`~&iCB6Y=_2H@O?(YL{pLVu-81yL$EUIx! zRAWF5>_PTgcrP0}V}?Qpe67?zcaGob_I37+$M;m#!N|N}gK0c} zHrR|e-unDn%$!dBmBG4t^;mK7R}AeNMzbCR1Ic%Iz5lDKq)R?TxXR=_Qi_-A;(5|L zoyIew8Ze*{9aCPY)Q!x~6S;YlMTw^SCNp2}_P*YPQE$em=Zl7OL*oIPgv+$HV|H%* ze@}+ii*8qM!RU-ZW-#J?+`c_ol(@NFj~KS4;8M_v0Y5OH4FlRSkoEl&_BkXYq6FDg z=oAfaBKDqswvls{b(N6+!QyS(nO_+7PRG2!j z4+acjAR%@b&JCz(%20_}yEJY1?$7`h7IY*kTo~p*Kknb>HO#%Mq?fW{;_i{z}GOcMr#D3h>7@@ z%h#B!sz)3(1HbAnVl;+1)&&ve#aFDpqpL<0xI!!2rA($J4E-gv3_^ayjvGrfzV!Ay z_V--Ml+$X45aK_3oO*vGcV6Ii?%D9^P20a1u#ABiN_6WfbFq&=m@8b!?_j$eq_~an z5B>pm0!so~w@k|k_WyUHS$4^M;felFa@;D0wuYg%Fz2AS7p=IrMa45c>h##ML-!?4 zbItG~@0D^jjWvf{9eOV4;NEQ~uVcUlj9F}(7$#3M7?I)s;Gq^?*mllor<>#6m|NRE zcs(0@|7;5bG0D(Df=|3~Ap~dQbgE=`H@9PWw9J(B0L{mqH}(q}^*d zmpAa?fHM}jV4*%AV>K%N=c1S%pi+G(wplgs4YQ^zR?!VBQzFhaCXJ9UUh0|o{r+oS z)AS$iIuwT%BEf(Ng#zyk}LCJLP^DLa;~O>Shr ztJwMZb>EuHvDc8HfR*vW(lex6rBEg+OKa#OokroK{WYz(c}*_=^TvWVSWv^t$i`0! z&Mw>(doa>9vi|w;-U-NW(5~k5#lqb4eY7oXkPDqvM<4!uJoAjI{xJJ+K)W9nG^1;H z^m`KXPJ6#YZ|cPLj#bjL{IRqEta>1p?y{|nlab}B*)!&4fNUUlUmL83Tw6y_&DiNsl zcJx&0y|3S-^H`mO;2!PgeX3U)`0G=LQ5P9u}sLKO9enSH^-=EDUy?EDX#e?yEs~pN=bzTjNE$ z9^w40G^|28RyzZ$kcp-FvwVOZa33{awS}7bvJgPOe^C${#%nhmTa|NIYhWug3k$Nb zFjRfyhtKnl(*9eH$N0feb=Pe5%v4nlRy7x^aUz4ecs~;OpmpEcBHlK-aWho=el|T1 ztCNqVzh!q5gU9bm3DwH0c1)r8{quTz6b>XLOCzJrMDDei)t0?|oYv#n36uh?`Z`-7 z`Z)h#K#{O(_nnB#FPY61sFsUQ3%81}8pT+hJ|uu0>Smg(Cz@Qi(-bYmKfM%p{D)x) zmi`f|@lUXe1yYVpS?@_6IcQ+=be?ZvkIzNh%1ijF;$m^;*7aEM9Sd3n8{m`OG=-|e z5L9l0mW@w&&fY)pQGc9=$p2BaB3-W$tKNjwDd*T^g96FBW*z?RO6N*CD`9gcd0;BF zej6ffa$@P~PO@;RsH$D-_dcs;EEJ7|ee9NgC$ISle|mZjd%)7reo70L){0gAfz@qc zF5kge!`zJ?ue;G4EVk$FZn?8oex(ho*pAg2LR$GD_D=NvXzV|dY{m)bb@GqDylPkZf*>%wXch``;5FV#n>h@xl`mn0mJpFKRF!1%Z z4g>I?DE1k`X&sO~YCXM;98E9dkI0F|U5YIn#H#+mY7AjzhOruL!t1E_D5RI*r&D5n&&3(6!Yo#14h!X&v!HrBEAsHr-tL+i--unoOqVkQ-Ve@W zb;~3d;BAedSE?;i^iAOMCuH%cxRSa@)jk#TMJ#;@OCLi1Vqq5kf0hV0^I4E&55pSc zX^ZD(+mz*;-W~B@hW&vGQ&AcZW<1~de%CouC6hl5XK??pDl1s+RV*ywJ98Iphj}UA zZ*f(!<+<;ue#R|_o*pS)!z!+0bw5ivK+(6vmp3m5HGCd8_%Fe~vi7mx29}=463K%k zzbZUG`d$_PdOpRk-q0j&6HDL1>Nw&qykmC4LH9XRYX`LM5yuS6U(2t3_C|)^ez1R1 z;&si%v^UN;nhTCzy4@AW^y)TL_kbt>Hyo5$y=M$FmJC`6VsPnqzGTYeP5$G}g>Mrz z+;QqJaWX&lqdd^>JPWG|ihC38%F=yFKPJ>);eZDYN~WN3HdpZQ`)5C!-)joSX2+Xy zth~n2JaM#j4pbuIQancs_QXirOv%mjg*6g8ym0E?IMqT-ITr3E?|9aJ$(x&qawEmk zuiRRcc!Q()z(?FR!2z9ocvCj_iw3>%mjCo%=V@>Co4z>UhlA035zT}z#@e=d4Qf0OOvVCmN`W|?G)@Kv)}VPKqeaWD=xSHi zuqx)^au81E6^Ax*4rh6>aQ1O0*8ua7OwMnPV4O|}PWvqmgyKLYTZ1@P6%q#9%=8w- zB*A^qDu<+f{Y~R~)zLG7eS&$K;W)(z9LK*l7>Um2$Vdj>Lf| z9NfjEpu3p%Tw>;n0Ip?B1`}7$ zA=dXOaWcrcBX=wY*P?fr+*1^Pyx+(_7DtQ2sY630D0Jwi()g-bdy;Sp$v91SR@5{G`M$Wa(=%Y}<#n1=+BP3)-W1%qRGexWPAeH2rG&F5up*L{ z6FuuB1G|o0!4CS-ojvI|-2~AURz!_*T_Nb2oz?ka>$^eC#e@u;VyXyKWwv?1Hsofg zF!#uSt8;tOVr(W3e87P$v`g2yv*A;rYzQ=eYPcK_c(RuFz-MX-$DnOOT@Fqs7e{O2 z&%;5+gsG7w#JlP^dVA{IK1)@sojG$d)qXf12MTcDWE+}kEXf<={3mn2e)Op6U|J%} zdLd5vp9I`X>``wPUj0!zCFmk(tUY@tBLTX378q_j?;q~s7@%j^BuI%Y!U1oz5*#SV z$FK6v$%#G zz(U~3Ezj|`o?xa@9IXsTD~D4A2lWdoaZFw&|Gy+_!&S_dbO1?-b1G5lxH@!J;N-bo zFZyk(aLUy$Iol^PKpk54#|i^6*Uj2&|fIH6I0 zPi*A0hk1ya2R|b8eBid}>CKOUCSp(D?0c>J83*ccKq?9?;~5#d&a=sNSmw&d{WYM> z&VRwFe8oYBZbxPqiYPwZZ%?|O`8z+eNM>mjj47YTDh^goCx;jLzS1g8l$|2 zul>4ynI_$YQ)tHNPD{7IFvZX_fkn_(bXGAOf2p{&x5Q~!xmjg|TZ2LyzUS;IB>ZforFn|=4r-Se*< zvUTro=)h?dLw5wkv(qE)sn49CY|*z$e(UEO%E(~MC9Yqh+`C&>OLUeOCO&ndGpP#) z6E&815suec9a^aePl|*%M{bYlIPe<>x^WJ8>&rZC(0;*z!#vM%cPI0^k{%rB z#leIjS z_#IS!xLzZC{bF~BbV2GxJkOlYFiv*_C;yA3X`2J`SI_Uf+|VuKk^19hvR$=*M{!^b z?ZR=`dp4-%3+lebVc=oYaK%}~!Ec4-)8-lO2^^TjLCIN$1bbSjOvrF0}1qa9^?pHWiRHoRLKUrBWI(X+Cu^&)e1UFA4d5 zjC?wA7DwM?jz5Ux_B*R9ZjXu)=0E$~!z$tZ9F8`R)9#aAfRFT_WzjiHy*sfLwSULbWl6px%!rF@9|F?guZSs@OcACav^ z!N%aR8P(*IC41`6gbBpLN5ey`E5n21uu@ExI=%VyQJlQ=_dk_Ka4FNy-ULDB;)BRyo|$}pi_YL&$OJ4RV~Ufu1rqX6udzPC#+?)wEs*x6c=Yw zpOj+rw^ytq6;DsY)7sh6;pY@BthmEY>n(H7F6~o8>t3$gp>k6) zMSR<_FV?@^`q>^duVmt(3MlN3@#C8Kb?dRlLV+me){#)&4|rM@o|d|=S^(Bi99~{6 zyghe#xoL&7d_$WeN0KiGQf`~9>{_qGgD>c8OG2d&EE1gz zUI$MZnBI%IWOdCd?kis58(ujW$=L~~o5zLX&IzkpE1c;_%|7JX>3Y1@cf3Xue*+#` z+1`S@3DZ`7pSNVCr!WFqk0gB~KVUs~P^*h@C{m{bPwT|fy6`X? z_Zw};`&Q_-KQZ@_#?hl^k^SWvoBLWe^Skk&2M-w&PAI%d@X5*d-?sF{q7JpnUpi%9 z)QhL};pO}Bv}suIdWd*cN%(EtNfp~(6gD3qX{bAZ2ZMMJfH1TUbmv;!Ffo1G$2Zp9 zf@OLy{K2b#;~j!8Yi{gGS5l|zonM&Dl#<2B->p=+RQ`a{Lx{y3~? zrokz?-fd(APmdIX?PB3{cyIM%8->QlRiQi26?%`tx7iPCGK<}h_Uaw1i4a(dne0Ur}jwHm5VY9 znCq90j!fem$b^9s)sO%U#kf9my^)y)>i1v64yr5VeE{e_>SOUB*Lc0PFkqXs*KMDp@@8 zT~nTm;1l;F&2fGI@L&ZlN8GFMmN)-D!ybN7Xu7`dP157sK7H)`7j+jjaG z=p0k`x}Fg*-g{&X4-4dQg}fQ+#VcQ<@Qv^?N}I;J;=hgu3B2$My?!M=dM}bk!|#}` z-WS+kxq+u`;%QrWn9gt{Ko}!qDE$5U$#Btc)X^&>0c^dnDRCkIX992`z#MrRL&0!= zCHdnI*27C5OJY_e$q!Oo2^ww$ovz)ksPrL$ci*&3)4b8moDK8C-9HW83G|l)dYJHE zEIfQ?>ldAMK6~H$Di86cA;M{~DU7s4uAM0U-P*?Xrr|~S2g|`%1Z@w3@@oR{B*4R* z7Xh+aA#2>y#+1v*n*dKj)(}dJG@Aa|yfsh6E?>~#zIv3 zfiVw(yn(j_%}|1-^Ntx|&m9QG>a{Y@7%sW*8TT9K=vmP)0thESIXv{h{vnF(;llOG zlS%3dwN7ILAMc z0b~$BGB;yiG*lq}&Q-5c!v20w1Kz2QJ(B=Fz^k)np_hhLKqG4ueon@A#o*bLX9drKZzC*V7UrH-WhqCb>U(- zaxIJ=!lWr5j!W%oV+8R-hw|Qtq>+IVg7QZK-Q&O7{F3Pf=XBfKvgg8C%X+8EEK3PG zWd!|lf=n3?R|R|zBbdj6*&-ATHom!PQ+nW^lIqp`i428Xl>}N9L34(Uf$KSVO?~X- zh`h&_u$!i0Q@Z2T1no9{ED|5~b#yZ2DR;&3Nc#@)8znUadM!cg6G6TKH_XQ%flYP) zHBp!w7WTdq*1pd<@78Amgs{L?z+-n-^m#b0s{EKk&gUIqsUs+UA<$njenN{?V zX}OkL;K-!O?uJ$Z_(6c%JQRueDf>lWm?Ba;Ci-FZSn~O*HiCXT!Qhq9PuO$}I;81M z2w`z}n!fv7^x0B=qhI&!=@Qew2uePv|8k~sy-r~d|0~`%k*@Wxw>CNmTAc(4Bpv04 zFq`A7Jz6t)%YVGpdlzYc=m)w8;5Pvt7#S#;p#32zPaPOShZIEZ+Cs!qgiP*T4a?FG zf{JFPB74RHhY8vv1cf42^em1yP;c6_TihRAz`CIOtaoyh0KTFH3M<*^uBT^?Db_tn zaqHYXZ$CzWbfaO*2y?5s~P7vsm1o|M~6uh;qwVjFW zH2epgST?4J>B`fmV_!D>@#YrAe5L#E&A`Y-0R6mkaD-SfB-{NWm3Ay1i3xw8CLCfd z7`ZY}fYn;~94k+Mq%gfEIQ{)|V)yms=m!e~?L~tA5U$o->62LM6;?x-&vZsBr9eIAQXPkod`DzP3{{BY*D+I7gfOVL~ZEFOEmJRAs z310}_Oc;qRl^SB|&-}}os3nuBx=sKa1faSJN7y5Clot)ZgD)K!bT>KR*W-1yASp-% zyG78?l7aQ3`9qh^$SuCjke>NceW&z~EHT!_Gx2)XQxF;Y4k8sk}f(Nf^<2|;F~f5mP@eRras+m4q+$mzOkdH<2+D`DADe(EKH1^tqsPvi$U9UWeke$JB42F*hhpSQ7)7o0t4GO2@Z2gt` zwrwyYMbm?vs?L{=RaFq==O#GK&F7ewuG?u*k?9t2anqM5zqS*HT+q8 z50vgfHZRu+WajtHnKih)_+4S29zcYtQTQV=?_N)PQPZ@SLar(KNY#ZvqHYk8Ue4Ce z3N?oNcZ_2nRA92MWcz}9TD2(Fm?fdJr2Of$me4); zAjIoD?zBnlOd?VFJ&~S7gph+8whyRynAs+8>(lYKPCp-<(0#0td@Pv=#?aiSRN8K- zZ$rDy4Eeuqaa=!6NFnN^5@|ySL&iYqH0K+GGrzeUf&wDN$~$;gaEMSQualNCQ^BJj zZU#Hw__L)Eb<>Hu8AN&}QGOGZy4#KzJUNqMWzO@AL@aQjoLt9!ASz@L)qeAvx&-%?C|+!MF=KmOQW3wCZe!Dq9mgnA}yDwlnWt|d2rm_ zhvJfO3c=uhtzg8OuXQ!@_FtWod4_^8o;P0bb( zK@kz+NsHkaM{5=gLZ|IvVUv@U>CD%ea?LJRm;ERqLOLtNN=!U!Zalx$yJsI>@YSyC z+L<4TpcD>8PKJbvqPf6F(pFH2-0h5A3nyp-WkgU;1fk*;L=^i5)omef20p-fV<~zr zr?RTk?sJbcWD1^Kf&c<3X)g%gMKWbkLZC0)#>VB5|&W~{T%RWCX!ZnW9 z=RENAfcsDyA0jUv@-)`3;E2pCZB5Zl<@#zOs3C${B9Q(>gp1uBWAv28)r{TnjMl-9 zHxJfcrN1!$OaygA@P!Dz5`okJ%cuX!_^ssFJg!4shRcVv`MMv*a(^T0))RHV6X^{^ z`CKUd#g)&Fw6F_u_h;E$`{rYQS+nVbSK%&1i4&7H9c@dyay2|OJi~>jkqDZIpqU7& z*cZ1=p=JJnH0C%7qvF=IZO!G`2QDPG5b3Q%ol4G19$3-sBTE+i`y_ZRt!T##a4+W# z!y>p>6VY4IHOwYQuPI%*VI}f|sPao1X43-!O+k zet`6^m^*<1-OrH5$=T0%xquq)l zL@)~H9T5T%KeIBl9I8UdvClLv%n1ki+&#bbFms$pn;`0T^G!1D!!TIP`)QK;Fhw-9 zzl+EGS96`j6j5`UsO`>PAqfvV)Zd{Ge6iP86xjM2z6ADi%n&s-2+464 z2*`|hm~ZPB;ePL{`rKH=*@57ffc6TgwlEKH!d4N;K9>|QrIgVp&HeIt^?;@a(0vWm z{kC}m*!vE!WQsi6M|~E^^kDYP#Ht(R+zm-D0K5UzWvM}9YOQLa=Bx{S$n$e62;1Tv zc>{nCfa;3A@aGnf?-{|bh*y!Qvs>3xm@+(9lKV2{{D6W#&>Dp{IgsN(6s*dZ8a|zZ zm~+1ieR@4A0MG-$xfxCdG{&#sWL=EukQw9}HCgGXD{SIWBM2(C?|? zu^shq8Y{Zo#_dCZ##^8m3iJor*4VvSAWk|*x+8}@*ukzzMvDD0f76XHKu<-^Aiw2` z@`gs%7p3PqgV;p4gTn#cn-d;EU2^@i<+my9e{fA&_GkZ=j}I5J77@530?F-459~j< ztuLN00)R;Pc4AQg3Q$7NW$4BEzs(Mx@SoOEg+Bk$*R7upUcXcw4RqX4`IW==50$+V zYC03^{o2Jv{gvMVFo3q(NI6zg)^uRN|c23{6GhA;!8aKR-ap>|`hYrF?V zdxfoeG!B4x0R0gY0OUQ}*_&IK{}N?&~wSh#imYlYwpu&=B}2<$#?2dmvuBM_C}JHe6GRmdc$9KpKGi zxfFDB5wp`?m`AP261kY}98CBpl@4@$P_3+}=Vr6cY5Vfh4otH?-HnsW01B^!;DWd8 z@}wF6LD|Bx>*dqDyP^G=fIh(sTlSU6sv*n5d5x=&7e5>j9N+r^fNZqJEw1hFS1)0BL><^Qx}x7NiF2Dj{XXl-2k0fg3ph+C0M_@glPEyH1OJF#eTI zaPyB*%tf0Gem+Mzw&EmV;h7!3e^i#;G&B!@d;kgnsNnM2R*jYd8ut4=v+CWE9`NU> zc>%u;z7XgX0fk~fuj9;u2G!aKTT4fl)Z_wRT|mK&Sjmq`C4lx3C^tjt3YZu%wMU&+ zA;LYIXVkMkF z6VM*!l!c5mq>;!uU#%5E?#}%shM!M=zRrv&opYGF_F7}Rw)XUu=mx%=W}sZd1NSwW z`AqstQ7uoI4DUrg)zvuI0%%(tFiqpN!^s0zygaehP;^C#r@68fX#4=$Z9pN9A1*>L z`H0W*xK7(tDBSl9+m&@|{aicH{0Si9dY&1Eea+i8sTt4560M{kWV0*_Y5fAA13-t^ zdh|fUUgzc;W1bSC_UQ0ZAt`mE6X-6&qpzaYrcUseMm0692g|O}Wt?3A{D#9vgrPax zHXv!XS`nKR64=vN_2}_xH&6_L0RypGZ?h0;w|{9-gp&~#daT|9P!s`-W3cvVgQ(Ax zwx8Z}Mrc;A<>b8=IcNF+tZl<5U}8>5wKOSsb82_>gPvc(VU-xfplgivi(_ z=0f4ven1-l^1WgUL^u~6>=rU}3@R%-mHo^P1&%2U0?3|+*Ky2Jp0aPwp4<;>L-BmB#`&!FX3F{ zMC6uI_TH3D@_VhDf8q1++>a?hp9VVbn4`oXR)+s5;eGKAs@2{|(kT(y3vn|*c@}8Q z0j+ts_F)#_sQVAFPW@j|KDmNE7Z+ab;-Yz=tFjS;ECR3uz?MWBdS1|)y|OIK)j#0) zt$O(T!mo1y7=)?p`*s$Sa}9hRvlUO|@Ew1FK3wt%$dU5oT}_=se2AFz1GOWB(q*7i zeh`AGwa2#UTIp{+4v04h^%~$c{0B5vfYvIIiRa@gLP7e^b)VgTQzC#h+Spm#{498F z4L}8FU+83fOLgqb%C*spRnaU-fmJWof$lm#WM+%3pYEFo<(La|$T6_t=Z)L|U=sl8 zZnS@M{z%@>iFH!U$Caw7SF0S|0yIYw&55Mb!u%eGCiBb2{CNND8gpfPYBhgZuGzww z1YAhafrc^GFhoAfyOkQFZ%6W8%RS!ob0q;c5^yI$N82oxI<((=X_@T{<@s2qhxH?6 z-%4)1B6aLef|Xlz-|MLyWPu=o2nBYQs& z5_nC5^=ZZqFfcnjhqZQg&p#^moZOeyVNVk9B0=_=H;KuMpk2q8i5 z;=gD%MB>ttaF^VV?;&YBQ$+242fQU|gp#zwNFba9Hu)k*s4@bSg@<|?He8V;CQs}8 z56#geiK#X0Tea`bMq^Wn1tCB%}(>(?@5D7T`R}>%TtZl}AW{Zj7Hx@5ne6JlxqOAcKrHT&qy)oUtG${1K!dxOX z$vvK={*@PEyNE-VxZGp+y;9)s?F_itqLDxX+2}xiK|Va=NZ`Vpwi05;^s@LQlAsi` zc9JL~n(wXRcMsj3U^259ciO1m>Qo$5!?}C!&g#&Y{;1WvyZvKy=t(4y4Ev6S!9_9a zZ2Hk_+;k$XJY(c#M}k8iC(_KuHSB}j&I0F;ZH7N zznpPf%Oin&5=&THmiL(My;fGt6eCbTq7{-9TbLQ!ZQbKOSXcYptp$qv z!mH>{--}4v#U%Mqd^DRZqH)U7fHpXyDp6%bKWlIGwS=Vqk)&KoQs@_gF&_mGzaami zd{ABB*sIa2dW2heXBi2uCD5nJ-BmVh#qdyzs+!)tyL?yK%i(N8_fuUL=64ehI(k0~ zAA2y|^!#}R2~@&f2hGy(j}Ky#4*9bEojUMwa-Z2%gslqx1$F%+X65}$+fyI?amM81 zRS`9lY7(d+fqI5)xlcAFev1`<=F;*?-dd#owptS1S!j+8`6F6xYXAMO+i9I#lOMVl z&VM2)e|yP(958Y+(15W5Q`kCyp%)U)aH4 zPojS(sW*^h8cDiMB;95by@e#-N>a~d@8xBjZ@DVB!6U?pKNcGur%PX53y=J5wEwD5 zfdKNBdt&m(2k|pzBl8VsF)KPhNc1)mZGts{BZv#RaP#|#5)9=HO{V_!jZrBST>NGBm5LahX6Y3=CcafBTlj!|I`TtRdGe0P&%}dSIT>bP&mWbEM?YRI1bAvwHI@<*+gB;QAZ2FVObkbj}4vtIc>I{b!cv88VG^J+HV~Q4t@c;kdA$O9~?-FbX3eH^Zv%m-a*Fh>YVEv?94=O2r2E z80=+c2vq*}SHgUU7fJwlH6kz7*rfmbW?R-uQ=43ODZ3oz!3 z!rvZjH2JpXJQ;Y;A*#1}?<#wu6vFB$ch*ogO+%+;#>Le7NbVv@Z;7N`$mU5bVMDYF zSgvjFw%Y6c;8aO%@4K6SNvg{vh%o;L@5R8RjqO9CWP$&LyNL1Thv%Bn8p56{B-$zr zpXg%fx({6p>xCy%9aE6dlkD~{-qsgIt&@}|1>s=6G?)DG=8Xw%o%PztP{7Q+L4x=n z_>k$D^B2qx>p1+HC@!>nG*8(i>28tavw2Xs)`!Do8*>FC`ze<^KfX6quXH3UIFWUn z$=WVtnGqqb6p28-R0*WHr{=WRu1oHn<;P13uN%j?l7Sl;n$V!Bqr)!jPh*+#T>g9w zEjKalaCRqymtCpP!&J&^G6dd31n5neY&W_G zud>vmGWE0-!MFx1nkgIIuJa@VFEYemd6SvkZra_mf?r8?Z!q1SvL6-`v|Kx#kP~mn zz=sT`#3oTJ;>YbA^5@4FCNuMYrtgp4f5MjxJ%QopB<7lFIs;nD$%AmqBC@Oa>=M&|_8=f&I&6v4D+Yz59Lgc>6mcWbl>@&*-6K zCRdBckKi|6&JN1=i__xn#%{b$c`+EKew2~^pCH-);3w=z8PeYNe14$-wwiGf1&>rVpZe_mQuz| zJ*e`ENtZ!(Z@tY|nj982%HQ&&V2hPMkm>DQaM1`Ht|&Up|KZ8gupNcFcJZCgBGatf2ec_Ga8?_T7Q@I63n$O(}VY5;#cE zQR=Uzt7PaDmp%Rd-b*5ZpZbvuO3AQ_97lwIjE$N-xvRKp_i+90+A*5VW*HeY3c}Ct zrz+`)*xNWI)JmyX1h|QnlXWL}9S{>irDvx_4rH~dZMfUKtx1ZLLdG-9_Vj+bd%7_1 z^1b^tH8(5Bppp!#$gn7~&k@}$X5cmN{%IC^7GKYvHF;x*?>!mm#&xFLk9Wvz-H@oS z5!`jY8V)!zs3n7>Z3&!*;BQU_OmtWXH8fpqIwR9uF<$?PtmMN3Rh%5##tkdiQl~KO zkvU-rDGxrA>3;zvZq)|X78O7&q zh<%)?`P)L)ZY9h7ARBz%16gBjaJHb*VKDq7J+KV9ZO$e}hag?= zSC^3H!s$affB0H+hRO61veI`*35RQ}Fx- zoh?r>ufs7C=Un0zU?-8m8nOgm0J<&yhuc6>J}&M5WSO2)b8?+cKveB7nYK)(|06@& z*cCEL4}w;{IWUA_TXKTTrj8pARU3W|lQrAE3a6$@4Wa_lotXR`#b5v+5Gjc0`UXu9+cW#HI><8XYFM8L>%Dy6SO+VTgag@j& zns`m|c*(9^G~Ept7SJ@?;^x&ikNC`0Xx28^G4;`eO|s@72Aq=pAv$tWGQD9}n zoKuH}N0_zj8oo?=_PbGN?iAWf3iLvFMS-?bl^b3Wz`-d|XWPty)Enpk1WZYnCiBj~7MB zn?ftx?!o0Oi99-bsZWpZT2SgT~rNr83I~QgnkT+UCAI4oFE2WuNubpINgxwu~;>e2!p> zRtQDEiGON4#4*0g4yLV%-ukd1#5Z~7)9t0V6o{mUPw3v--GOXbeE8e=`<3Mp%F|E^ zG++pW_k`zVR2138v%) zu?Px?q<|<2T&nw^2y3(;()UuXGvW(4sMAyF|Fx^*MKlGxqd=}GV~igsu$yr{*9n?^ z>(NZWnfcKv|AyR5|Bb z`laVTY-+bdYaWePP=Xo>UL$q#&b5e2e}_0@t5|__ib4S&jCN6$DIx|J%AZJgw$9gT z(fl(g3i*6+?gqQ=L99-R8yedCnV%q1<}xYZ0|kl*WWlF4w}i&Irm$gisyQp4e_ufK zj;RV2y|yQ2QxtP3+PM^kIgbD8WUM93T+jNy@=X?7?)5)1^eK-*o0g8>iKu6ZoY7=D zo@u+1B)%@fA(9W@4qlIWT^DD4*Vp36fQn$WoB7uQ3QXm~&j+*)*WJ)D_Wd^8n6Z&D zT3blbD55CnM?;4VB>L=YQdNuQ(UxmGV#$VfJjE1x2}S)o>qq#Y_wQT5iZG09E1ZO7 zOmd2BdDuNLL9LxCrD&E>Xyp_gcXm{R0bXX?2^KqQZ0T$mPov#y&&b#c3aF%jQ)tPS zJu30;)RViWyPrME`*nJ;wu%CkQmZLU-v5c}nxnDN23aUIXJ&J*P+424^U42wdRGkv zq@s)Zl|w#}_z#a9?A0RYV#+U#)>6P56dR437nkgIJhU@&r%Awk=Rc!QaIjK99sCvc z3k9W$qG%L0*;`%VE36rjq;r8g%A#CA1GoP!u~T z+MN_A#2?4pNko3o-g7A%SRdsIU@pAvwbh%j8%f8{$g)Q4J5)p;KY#d?X3b|2dAv5GE=@^6anD0m~%4JVGBC8L^z*qwZSGOK0X!s8>pQTSDmOAm$C zOQH2q&bKi4!oW(L786BNVv4jKYgs+&6}u zL>+H4)wcM%Xy#K8s1qQkI7R{Ea2Rc$pg>6zn21A>w4`<9fypP+nKqdwz#;|i9~jIwL%nx_s_fD)`YU(?U>e_IiK6+JqTtNVkZqAnJiRZssjlQp{mzn0 zHbS?SDN6q+nhk6f+aR>?*YGbV(^3h7Mdd(|W}{&L3I(jf_MpJyLl{Ioz;_aOyLqM< zmq0i+zqYSQb|+hs1fn;8^S9wK+U-xgPgP&up!2O$Xk8*@tjIr+@Mk{qHxF7paI1Wg zxS1JU9qGzM<^&B&jbl$%Y_OWuE<~pa{sGtfh2^OR6++q+X$Us82mQDFt6Ukr7}MB<;wvr>Iyhj*S52tJh3(&Iseg7ff~oTs+J zoztF`K0sKdd=J~1yryb=5%Q!$$uZm8_ix%D?~_f{dt{l8;Ee@*d8g#|dQnvt_Cce> zMVGRD^|&3Zb-sF$JYkcxOP^{jOpS7ZxM4gm!6@fKq@VWs@=jo$qg^9%igUZ`{TOhwXKfs0YdYGU@9$ys`!>l zYhk_=N`(`~%nW|(W7U$8D|WTp;FDz5+K7Yb5xOLmlVSNT~dez)`2wN`KwuV6(Ri#!G0!@+?+fuJM^2CkY(NTbA2q;!>Q8xDWW!4NHokgp>#_!tHx4xTMl$ z7lIgwN~oAfNjCxl(p?7K4I|9H=N&f%O{cJI#4&dz-2JKy+x zq`>(b$L_X@-Fy)2Kg(`kx=}q^sX(a$9j2f-ci4*&K?s5#HTUBZy1Tp6^B&#y)Qdb_ zqX2s&0YIki{AHi2q@IR|*+sUDO)t8z16GpXl0HhAY?WU-WeQHH#n&ppbqc`57lWk7 z_GlXjraKm!&V5}BIBeW3^<4q3R{++QA7CU}yug58m_0c2eb_TQUGnsEw=?sv5*rj$ z*C3!!cYnTQ#*t8~H6%8z8+CD}xKTl|Nx`UD0pN}m&=%4zvO`iM_Ez1mx)r1PZ-$Dq z6H;0fv|V|?ny*EDb@SM%q%`ZzZ2vqf<=3qWifsx8?FxXL8pNZ68%_7VxW)5Gjgz}7 zLE`JAVh0d7$l9$e$B->jowM>YE7(zTBDAhkK{cHTj9+-I)uoN8G&ihBYkDtK?{=30 zJdIczwjxl4H>xW+Ez^#pw(62xyA>!s3I?H4$WDU>{V66SeI5U-hW$Y1?*fBf1xlZS ze!qfxBo02sNCY;DX;L8=}=cK$xpl2rBl_T8w{#@8GN6;y^4K*nJSg6H+hOj`A> z;WOXjOIFdHcH#=d3YsGd8l#{h345yjy!eK<7wnz{cPVEGJ<#~|TpSY&L3-Cb%7XP5?} z?w*wm0Brz@9>^XGz46#7Z&Ky19(~&an&e9LOF?%=L3fevuh^~_bmS(vE5G$Qt$owL z`_tm+_p=I=IYh?JE1(>o-(CP;7|^&thbuQG6DxWDtTD3rwrB1U+HZUwe;cgPt4}3ktiip`g5}puMG_TgI|QlTGtm0ilV!{Rp_u!2a@= zRM^9gYi3nFBQ#|^Vv*Sgp>*kbSD(rboAS?9H_mfy$NW)%w-taf9GQLZlv7XB4s#i1 zuIr{u6EoL#6jc3X!Kg&_3&^~S4@MuDw>F-hn0)nD!C+T`vZp|?N5k*X@MnMl%T&!? zD*@1IL?=F7jDK!h_f_DP-^L{Bn*&9bXxQ|qlP zeRt~G+nc#k!G35>f3(3b+A$_yE~tWH)!QNP{Cm%I>4O1i!$7oh5L)E}T6{p9 zDU@~vL?g@wUF_?>(R#|K@XmpTR^QxUG#r8kT$V_$n_4qal^oycttxyH_~LDhYbe_A zBU(F!4Z$QX68?VMlYLn=46PcDHi$rLenJ~Wq7Bw~fvEMR2eVZ_OJ*(X zBG3Cv^juZ}MZIsM&~P*w7KxJp54ai7zjj!UG=dFwJeR<^akH8c5;{B=Lv!(#FmuB0 z^vpthatvC3R|fdi&3&Q^@2|ISo%(ZyqiK{gKNfu<4y_iCRs_(j|1j0jwie2yl8TCP z%jlvd@+_2qHb_LnNobgoj7GUz{7;q{QwkaZRI}PA(ts|;2d@+_<^9-hYcCrN;}B0p zYh-bOMeZ~E-h1caqAi7=z4r3=jb+o&8tG__47AQNJp!TtGFaYS;1OGqFYUecjEr^<)T&c z(8fTilm&9^wR8G~)%8`byE~r+hmQVI&PN+9%JhmtzMj=x@vonZ&c(jF-jyHS9>fow zOPyZ%NtF6ge%gJf?W40q0a~jN4d8u>z|^>FcKZR?`2iU(d{ox?we%{tP-hE5${HsZ5aFBtX=ygkSnuYg1?o)}-pMU zP{**%Rb>A@UWL}`sfkS|k(B=AO!b0L)0$9XeDJO2t#LZ{ zCE*&u?`XIl4X7hp5mdweGdx17qFM{7{zKSRkFePvXgC8gSS$VDQ|+@Vwz1_TL^m5U z6*Qpr8_|YMXvHapf7r?cvj<)h&B6sfn`W$DdY!b_j8w7U^0TN1uR5JdRIeJhqTx0)yvVXo*7N&}!``y-h==!)x@V<>SJT?ja1~-VYP+Q6dvH>OVa+iv zL1p9MNFu<<*k07p3pp>E8rS6>-^k9?frdNL@VPED$`@oDJ~p$mu`@Hhhit3C{eiDm zHPBh{96y+xV;N7M67EJD_n=jK(b}Ut&-R_(sw!nf#`hrc>`>2d{o1&>KD1^(5KU-+ zU>;0^;AqH+)(D(ycqDLZaMzqk(CPXhT5AZc=_5Lf{%6`WGxZmRE|hZm>R3#+@JEeg zpL3KB7(v6MXu$N-k1XK4yO_9=W{Jux1KWOU(VUbqG(3(58y!T+KKbk2Bl`@wv=jve z=|rQow?EPF1R5Us=klHMVP~bLBw;5`r1uSP4qlo>>rSCnodFvm#B->KTE%~KW9s$O zNOObbu4y#<3k}auZ5;uXS|6s`y>TSzX2a!=4~Ld`S7y+vvuLe3w9Y&l*mW1ccmYtC zCjS|AwN_LV`sSmqyb`Z3d~zS=T13O25S{A4NXiZK5^|>td*2@$>Ba*~Xm}aC70o{X zANPCL)881|p0Ye=Xs^i`*Iq$W!lj==X_>i4oR~#A0&!bOz6H$wt7v!)4V1Kf=U>P1 zmm*8?D~yiM(sd%wjfAhGwKmYon`nbAw4p1N-ETC&y}x7j2gsRwx6Ca;fUu=G*ndja zhc2{As}x6LonqWl7}>YcN;_!EU$o&aS~)=Q9W$^L0_3Gl6U(mj4_6{yVIQMr!*0Lc zL+jgPwBBJ99WVxt7;#^~2g?uyR-<-iXz*qFRdYTUP6bWBpF#sYqE49e-GU(7qrJ&3 zME);7z0*L)3QOOcC(an%VCl{ikY7-zxGcYBf2Vqw0nMbFLamlL!q|9y`hHbDSFz zU46FZwB(La^1x_#V)VT*Mw_(%)cEam_n>XD;2pAFY6S6jpjMg;v@Z8q_Sub-R`RU3 zti{fw>%1|r6GDAXchw0mQE=YT#K1IoIift)2czqY(aEPNr+1=hVb!fbsg$Hwo< zT}j0L^1}eteuozd*dAr3tC+UqW{aopxUc8!kI@K)E9Ig7`~j6co`GXa^~<@!(m445 z3>=7oGY;&daOA%@SK@G+m{4(K)iHSPWtG!W=-^qsLyBS0HZ7ASZ&SJyAqWG1z`(&6 z;6{q%4#A*2z-&Yygur(MO~vzhT|1!ilv;+TzV*UHn_?&i{)hpAmdJvft{i?yoA#-* zjjVUEoB3a_Fbuql_zFX>)EhkGm2qHR;ngP}F_sR;z!Atj`}oBQaxOtf{(P3)K;2bb zSYp}!gn=V5z_SvCK{=W1D>mjrJx>-+yPZ04V07{khPWM#(T%|<#$t49n7&Ybr2?5( zfnru4az*}rN)-<+@^!hRRV)ahk6l-F!CsU%694vPuRrrc9EK8)(MiA1BbFBPfO0?>sY94?M@r5dzt(M@1KX!S!M-@Y&wOVqDyt6 z93i8H{&=FaMLtH$kqS^zJg>f0C2$x|N91RwiJFkrEWoHw(>ifO-P9)&&%Y=QaQq=3 z;H!Nxw-BRRgi$KSsJqaVU_ktvnH2(Sh#)ubZ_!;tUoeEH3gsNAVq$yCa<{e=qg;m3 zT^FsT8$1l*>AHWP9uM$8S!q@2I`%=c9HUf$5pRc>3R$3gn^r`t&!56$e?@hO0F>^9*&>n$AwNwHFMY`~6sa;=0*UOcCBIE!tD zP4--G3q~uS##a(5t##dd4t>s$TsYD;mfcm_iZMu+U#5k?R`ZIQaBzp#0ejbMn;&bw zOwjicu^}~MvstX0=Ud4=Ov~!3JdZtW?(&Lkcw6k`uXZp&koA2S%b^ow zy?n`fWwHB=(!t~ojBzJMKaaKx18h+HVSvD%8JBZ9vG4EOIG_8i{IL`ARoxiF9x&io zN*L^**T?oEJXdZe?ml?FrC4PBwHE`gBLeBYM#(iU8WS7wo^94HN+MSuMyVg8F@Vt? z#EAbq%+y1*g}4n=;(FPtM)O|3lG7e(r$J8+f$4(*Ij+-epo;5!P8Zpq=C8`%XRT?c zpDG-|XpLf&#xRs|jQFrD)2QrEFu@<$+y!fclCke@NptB;+8Rgj!!?%j2@E`m0jur+ z@{R+V*6N-m7w6&@Plmrp9M7M^z|$Du+S-o^3ex%FtS0V74m`AQWzV$f@h^F!Ef_nQ7t@kF3uG6EC!wfU;a3v+Rx6+>fDl|?VB=Uz54jgUH5s6{sP8u zMg&1jbxgP_`o-Sd?L`d{?H>lUE@I#%47`kiSHR1$uVRq=W-u9^npM!Qfp@UnHz~2o z-_$VXuBhu~t5@Oe60L=~TwH0L!Rx>m-PzZmUZjNu+e#~us6!-C|=NIt;r?!f}I;6oWU z;p(2_YKL6RTFMed%p9LNND7nru-M{e4i*^EMRB^4}ZFSGm$f(l%x=t zqdp~mpTiFe`(uGYJpc=WjP6-K06z(5=#`}G0RrtAPLbqe@w3wzLSa4`AM$58KYEsvexeR;*9U6AhMjh(oO!|Vm3(3>}X33nt? z3h9}O3#@iAdy!bU4~ZE3bm9(`vDj<$d(xtyTV8ol6c&!g0>5Pp=sd9e+B`C`y#s#s zH^0T#QqYv{>2=fGT()<^u~>~btbRP!C;wg4IsN z8m3_t?XfM4`(sDH{(h-+tZ@cbH4_W;Z@|}pM4cAjYsqtx(~msz zI{$uzkLB)Xto|3Q?xeUAJ%9l)$q|dNAN^a=5Pl)@r?o--S1jcl7J%oh(f*->0!Q&3 z$(iLCf}RN=IIkJ<_y??q6Xnee^pAtD1||nuha0$2=Lj-Qu|U2|;!j*Hmakqoy2mZlxbdS9 zODV#tv{4mfQ7#}|-v-I@c@ZpELI2`zZ}`2~QYW$$x&&)biZv|5!sS@NXE?^jw80CU zU-`C9g`>G==I?wVa;tsnwXMJ^S7HIwT`W}<7Wi(hK<+6BkXVbo<$_A@D$_Xe_Ogp) zEvgy|*ML9PS}eja2(~mJj=~JQ+8w!rqvluNG>J)=#6^5Wf|0`R{yP8VY@)ywE#**;?(FJjEZl+x2txad zAnqfkJXw>O>m;x8)!}EMH(NpfF@Uw}%W#g-*Ee(~Rj8bK@%qa~ZCITMDxhC*42T-l zH+rv=dyIAY3`+#svAV^K?yQiNPRdcH*&C{}O6I+XK{xh74;H|$BkajlY(O@o<%T-GoTNJYwCAVM>!*R&d$BruY~`X5 zdOY&ldi6tD_Oph#oS>G`7+L6~pq6Oe*vA;lO}c@dkm&b)ShybxkYBvyz`G`#HF{I~ z@z+(fx>@YqP)Cg%TBy?>PIBqJc(KK-%h8+o-gE#<8N{kZa1UWoj?Zj{!M8!MH*AnR zCFsUSj-M*ddNym1cE^?jNckgJ<58^Y7*=tV=Rb_*tBVECu#H#U=T7FM9_Jr18OOpu zvG4>Io&*DzC!V2@8X3HSnKW0DOj!L+7$o}|1w3$HmWG&*b3fSLLV}6b#*ZH-Iy_Dc`!w(M!E{VhMYpm>n2#$5u77)PsjA53-x|JiYi!co_?? z0O7{BKTcNl!gY=2S5ySPoV8;5)bM*1tGI@xtYcL-u$qoCA>7*xB{Z90YFgRcy91K0 ztRd_e(Tqmb_v8lILPJFp<+X(cOE>76Hw=U$PGNHu9}7#3LRtw?zp?NiEU+Z*V^aID zhY#yc7@LjuF7MR2b{@lPYTh^{ADpT$&cF|681mmn z6tyVk4E^!v2=T75Hc$KQ;*ZlzX9sD=TjFV2#@1yOoRVcUwXK?x0XUUF9AHw7Vg?Vi z5~sC&VJy!l`K@J}&)Us52nTkT0ITf#6X#YJjc_5j=p`iD>hAsl2M6Qe5FAJ;k7M2+ zYnP3mzm4WTSNOihG@SFe?@B1n;3G~u33-!tR;UO#OwnOF}C22XVD`Z-2t6mI;9!_klMjA~@2*PJXP+bG~(PjV%%f zN8te6PBadTwtrd@;#m)3KP?o=pjI{d>}g24jks+LXd7ZmIeQxWJlD^97ss{mJvs76 zM=VYw4hIyo{dsp&U+S6nqdWBy$9BwpuSlfD<8%{n;tTW$HJa?tZz<1)RonT4PAcEy z?{ZDVsU+c4lW{63IHOb?oQ8wvXgnF2(s3w9D~k;9DJ^e5GBq>(&h54J37WW+bhST*G zccg|&28~i=Z&R4AzdmlfZY*P+h11Q(DNfV%u>+a<;ke=aRms*Rta^)8$nmbl9Gq@0 z4zM2QA&oEvDwpXgsDmKzy-F}%J(NFudeYl+ya)%lTER}|Nkf3XMuv7mJpM)8 zb1RY5VjNt8gFQw60iEdQK)paR36Q2J|2T0b>fd?F7SF#6b9Dym0Ij&eK1_WNUGnbvXDt4)9ELF*DWU z_8EpPpeJ1O_uLXLcW2reoYAR?9R7iW8*sn^gG@Y!5wX`D7v;}PIjLus$Zn1|;&hsD z#-KO(!E$%+TF03yK?Vc<8ddF5IVnrcxC<>f-Bz4Z8_qbMXa<?W^mfGIO8xH0H{L^rLQCx z3@rFT@rRbL2VRw??G%9~c$xg-MI|o9e0|kQxI!B?httTT0c;JClE;=JZogn7F361w zRIePF$H5CYco7F;KfW_B;ZW{Cfd-7h|7=)Mbd8bg{q5;Mm*G z5H4>!IOLPOX>($|%K4E3xA`g#UPGkQeq#0UMTT~5{d7i;mFKlTFxo%YaTofl(QDFFU(YKqu-ydw@G^<#E{5|#F zL%3>a^Vi5@+V#uJ4Hmy~ntyQm*(U(y5w>p`%ONIF%ioZWHY( zAe(o!QY)MqROSPi=}vckek}4AXSj<~*~4k{P>)KFNrUu{4W{>J@7)};xwg#VVBB17 zkEhtv0oL_j8P|yyEL%}WDc78jK2QsLhc^y~0E;l%=>NZ&&JIgvdHuj&N{JnV=E zNjc+46gksJ_57F%l?lxZxN_qcKc70`Db9EU7rbU0)q6acS+}14vyEg^bM4+WQP(Zd z!=2}dkZp9u!)|zxK)DaZwlSaq2~3J)cvpO6D|);7!5t5K;6W&S8}ft#Lnm@19d*Ug zV*3jLCZ&#^c-RXM7L8D{Y=V6oVY3pq zA0{zC2Ajsmyz2)J4<-5aCyhdu0-7K2>cM#95WIMS42WR&VTEp`9n}6K`f2IH-5%xis<1daL-de1emL|#%W|1w70RXZ{)Kg?2YD$TDR@dcV!N7}8Ow3eaJn35vHihHGeABSZ=8nL zO~-33aRNSJ07kJoa-uu%8#eR=@48p)nqqbaUbg}3F96ZC60erl;O^cwm=7PdK1G*_ zv=6lI^n44MH}yAN-ff#1--`VH&v?oZ7g%6kY2CNES^0%r$5_o#)u`i9ra!mEs7vhgUFdp38?tbiFxs_XUEcjFZ8U-zzP zdPfGn&A}Vz;z43)2@TlZHb-zesfkB;^M&5YL@O40<>BFcJlJm_R*~bfH{L#JDw}_; zyLaigp&V@i9>fI|NJ1XxsX??fw6{1gZc2aM&9syaI$x>MXE@@Z#=B4`^iqI)zYwoc zcL1pV`CCr6dvq#?Ua}c>dtA7rTZD&;!7N}a!K2<=JTk}JR{+oX&9M==#eLN@%@TK% z@pkWADPFq_uThRyo`yT9k+gNl`$@?a`ga;xKD-z8;yB({EC49WBTGY&h=$06au)3R zQE7YyUb_+x2#yO8nngORoA|cA@|)FqlBf)JPW380$OS>(sCo25R!Z8M{7W|n+e<0E z)p)}i{J90{c$QkwVUHdFZT-c`JSIN8u~pHz$W+8q4r>Uv{gMG{(%QJjse8Cb_$Q3&fSgXw^WKS z8Cr^a-++f3K@Zb~AzRm>QF|Ze`$n<~SK3p&8ycTC;VI2{^*q`ZJc#?SZbiBXp!eH8 zhDIMm=cbuB50zxmi|OgyI@5-ywBsoqc-2n4Viz97v~}Zw&GE6_B>P7;Bo0(Ewtn;+6lh09=L0PlUhL*EOjub}OG3U1Q+R`ZA)v$s_$P3lm1B4OtCuarOq?v4#>2nxARu&K z+qh*I-*YH+I>~aIXPY)ir^r?^EJz^6N(wITVEk#1>Mpx)> z%GvXju%9@Uxdk4MeCcGw-@Cc?#_aG4%A7l>Pc)}T;Qk-HDxjTWhK!dsr+@h8NA-1f ze0&x15WS73G#&sW4gaUL+M+b;Y@>fSmHqW;#U0QKAm$uWnSY7jp`wsJ>~KnO^?bSf z7Z2~^L3HUJSO!4ykl90Ek3iJZ((*Gthb4IISfa8HokGzolqNjJnqS!v+ z-~lnMcqfALyby3GDl$f~(gokUEaRjz|KZ&IGbQv;6TXc)v(P($;cP-lV6m^RGeNh2 z0RY5OTwkx>u#6KPJ5g^!>qvjyg#f=Nz%{h{)H{6!J4Da$tFx~bTne(|I@MeWN^S&= z572%TmUZaW+)ub0at2q6Klu3yZ@Uv<4+4mO@FW22HL&hk+ygB%3cbM}D0=6~&(KO2 zDGARdFM^ggLEVR-ILfgfaVQEY{TBS=V|2^?O%6}by#o)~d-ILcTIPxy^m~H{`X2}y$!uYC zz*d=8CdD-M#rDOH-I}@EhNeWSJmg@U9jJ1Nt3D$=sHFQQ!Ac*$%13+UmN3+5ldfvc2>*Vn4wQHFV(g<)m0ZurWK>*=PAm-O&ms^YN>tJU z&Oq90le7Z3WRn`7LV}7XU%mu1THDOv^cP;q3U{y7u^Cb>BB&G-bTfJLSU_9Yq`rkI zJ1vivuTQy8u`T~7A?TM9bjt|(6+*kT3#?%5EObiJ&QF9DnH-`_(Y$)gQci#?2q1hh z6_La_uOlwR1Pz-pT=-*jNLZ%5k^ol`;05M=%bNTc#lzjcc)U&a=%&w$Dz|EahNpNi z7WzI=km`4*UZ82ZIIrb*C~XZv*M$MtCE!bk%4SZgc|sxfTdlOYnY9FiI)dtV!nrV} zF-||`aZad!~Khu>8#xE zfp!AiK>&zKonW{=1X6Ba$Zb`2p|_c)26^-*JrDG$N_P?9ZUXSr?nf?U-lWNrP+h(l z^7L}3r20Z}4?&}sV9-Z6wj?=f}%G)W$P73>fJ9wxy4BKwg`3bBnuAMuLYmRBR@b4t^6MhKKq0%eS# zI!;jS!iOCFr!j1bp1~LhC)@f)HOLi}Ilul%fF}q5T+0)&myoHdD@!Ggc%N5K6!<#C zJU&T)ClQ-g3uF0*`{vUuJ5Knj#^zrvQv`z!4nSXcv&hJ%=sO+J{qwWCC5NvWO%n`$ z5h#r`)zrWyg!wabd&7V1g+x2o$rnl21ZTkK69kp*EIrYA8MRDgyz`m#M!t)0mY`B1 z2jC6Sbe49XA3`xYiY}jBrWmN_2>Q|Zau(>Z@-_FB1~#kXcIJ((F#+&A;rs%@(2>y& z2ub#HmXPs~-ft$>2*KcpIhsX+@)AKeLbzNw7bF(UnQV5(t1o^gM_a$F_6c4lz+s40 zTjtmW*OZ~Ce*44m$CKEf39Jw_R)JLFVCrLmel;7V7=AX3c7MfQVtCtGXpKM#U|r9(N*B+t;m^@%ka4NU#O4uSHQK=C+;sDgjv zx1K)zEWwt4?s6%M4*YqS0PhiCdm?ar#`0Gpcv%?#q=k=3YwCkLk3+_)W&++3DGo#} zMCz%tsO{e)tcY-pGHrQ)1NrKF8gvUeqOc!0vcF!biXiF-%Y$!u##j4b zp3tDxvHXd*!HYC{pNPhboM4L>AsDt|e8t`0wA5E0buvdelBgL))Q%>C-Q7QS#>mdt zUlDi!V;)%KmM6D=b z(fWx4@~e}|p~u=dr@E8hSyt(xaC#yUY-+(f#PB!d@%Fs$e84s{+JTb2kwk=Rk$2wh z6{UOW;wxX^V4Hc5`LAX&QNNV-n;2v{Uz}rSKlk?GgtCkgi@8n;(I}M&rxD?FBJ9eQ zK}5L&=4Bf@Bpoq;gDHpuI{(A`RN-RUdX3M6El9dTIg_aWnP~Wh2tv}o5>Z|Vhz3|k ztw8jNDH53Amiz9#SwI6>Nw_wIz;Jo-8DK5W zd{K7}Q6rbAkw?_=-{)2XVZkqhysyPgvGNH(?qkMli4OThK$rktNtIluHu3VTkJXUo z=L-+*nG1-NLL#MzXxNGGrb4Rbyxi8wPC09mesKFni{efG5=rP-$ca0S25$szY{fpL zM&12bOw=kN>Xs6fzWj$x=YFuU?3t*7)}%F)@1<9>ie*HQtpXlKSM)0X>7SOTsnM6q zTza`thb#v}8dMQ=qo}IEEI?=|z}FgG);}D` z8pEnMXhCMs>-Vi8YSj{zTtPk@*q~hSz94;h)rs-!>Ytx-H>Qm0i12qJ;FF0I1JCuH z*9giSNxl5wvoc0hUPQT`sQZJc(Lglr7n)W8zH@JlV=0vMU&eEcR<$z@x}O?}FbUko zV--)WR=+qU|Mp1Z(H|pJO+>hv2$T11dxpuJzZz9z_0uJbG9?>QXIh9FtwiNEqP~wn zJ8?gi+{O&qn?qMhjlxr#2l5s_8~M=a*0ppH^*f2`T|~t>_HH0GOaN~p;>-4<1%MoR z8zluYDLm$vv#H|RlzGH^h;T0v05a{{!xX*iZmwi=b3BhHhQ2W2-036g_7gQSsb^R~ ztl&%OpV-XP!$y|Xrv0{`(q0dMIZOl)iyO$4Ot;El<$L#c<;t7VJCiSuh7A!7hl%Gl zsF3tJj;Ra@PV|ZI3sY(KJ%T^f)>xoL&8`}njmu(+v03F%x{1UHkXA&H47G0vy?C=0 z_gy#)W-p0wdj5d->=@B_oT&Pfs69dTUp&CN`6W+g$JxZ<50CVh@N?631jswlz-;4+ zYREVD=3v>+id+*!!$fvFXmY-t;iHl^GxaeSSG`B5z)7OY6j93!J3|eK(Uy*a=VXuLwycBB3e+TFzW0bPK0P}yR6?mJt;d8SpO@*2@_ov1v(vBTRSBlmV$Cj=?M8j>O_B62S0EPBYd9ME9W0v=B+^Kc06d6p^by7ouh#jYAM;N!n00%u)g^0f>B;j-Fp)3N&*-_`vQKMtou0E>7rgonZ(YV zTt}N5N!OjE>p{{O;P)i`15UTRZMF~hc5t&;Zs^+?=-Y;Lm{w}rMK2O1{y1>emUXqE z)1H1l@+b2o-)nzVu{Q~XxcGpZ|C=dL5S`X=VKB7S-@9hWDljnSOM?AKARK!P38?yO z;_=;;^GM$$zC9crE8*f#q6Cn{^BI^%4nWB_hq)^~!+mwP-Y*#i-E$2j>A&X%>Oqiz z`fZABBKyLd)J%A~Q$C2K{DGvuM2MvV+R!kX>&%ai-={r-FLw<7?2HX2X@-!*LrEHt zCy8l725S6}U?OXpK~rg2;M3rBO70^G3^34;GrhNlbR+1cWtDQaOCp_T!bm#dB&`UN z+IN~yB!rsMAhe7uNwb!1MJ8qKueFmzwGCoPDsd#rN8TxD8iJBiJlL)r zIkbHK@zaI$-hjAx65#X!t+JNVkXFq)$H{8U!lbvMq}_1>@}N39eZs&Xe=(qok&~%1 zBY^}LAum8Z8^TSn%w{2^P6*&Bnx%;(IEe(1?H3S9{^*3sZ#Lm9sqfrsS#mZ>e#s=` z1ZrSz^`XSKX`VuP=!!ThJ=@suOCiCjBp`^qvo@t`9{! z%e;G4Yykfm*Ko+)&*GSH4vCUWg7Ziq*k^~CDW3$8Tfq3Vus}pI#Bf94V5ibcOM8&1#~+-l~W} zDM`PKWH`WK*9`zD+!ExT3m)QPDXH{w^gQ^poMafyQOX55^v`;PJKTKbQgce_@X#N= z3X)1CN$I;#l_1!x8pl1=rT!RS*YS27wqLyORz)(dCaKntfQ0^+F>%nK`Qh3ElW50I3e7)$a6k=%VN39~!m9jQu*{@`t`_v1K2rN&R^ge{VoU8S`#KWk zJ4w8rWb}ii+d$Hort_k8q-J5-6ao=*0}`*^KaKp;yIECr=CMR0$+(H6*vHVr2yEz! zL^nIkvpWBCcY2?cAC<6R`xZj$CSTrJWA=ASK+`2!Ls^}cS=z3H12 zc8|Oil#$v?((fZ_^pms(NCqHAfT4lCksa*r6}yhS>S4QALgG30oGG8LX^^BpL;~=r z!z2)HYlh?+f#{FCg*~aD-K`hv)#uyqIUF4yA;F_SavmB3PrLKT>LKDVz>abqZL7{| z!3K4`k9)i{I!=Orl7Oph28ji3gK3ibFOrcL&kUGUmH_VvVMQos zo@Ri$ae0ZCOu6{=ZrLb`_MCe^OH!O8=~nT?@l^9b6EqTvfq6o1Z;tRcH81+`&XeE; zFxmf^%v7J-$-D?nQ?Fq7Q*75>6~9P=mk=?qOacUBR<|sz9|O4zTEmdgyP@lI;PtJ} zd8w>VQVuI5cohg8uKk3%C&#n#iytzny3IPY#9!EQ6tO{WT|61qz*j@7IlfaB%>)3g^O_I_UNqkfkv4t7d8O&H-?&=Hn zG@f=eLn-|x0X_zBk7;e9t#X(1YP{Z1SkZ+BhCd`qAk8-TSdSh8BnE3pbTjPW8;`wu zlMp!9-JI*~4oUwnNn@9!wMP<<#WDT&)ydkJXa%=7n)5c>Z|?ogK59?aSfB=~bkkD) zvowOKiSDtlVK>K4=D#CrJCL=#g~}Lb86dar<%y*vyo1wI(Z&x2KNnd$N)%+28}zjX;9GGv#vB$gAgi9O7Os zE^b-lMuy$Vz(Vgq25d1_kF2e&fn5)YB>d!fv8={h`1~ujyvU4~d_10H{YDwEowAS3 zKiqPZo-g$3s>-Y8rCu+xiZ_|!Lxz3HfU@iz15+Ix(6B7=E%_3XQb7_%mcQcky0yzm}iTbY@o4kUww zR&bt;?(WjjA7*ZkiR?e#{mxSeBEuiZKrP$%<9rzUT1yowpZw6I^57ZCAAf_%a0nR= z6scqdcaC$3&WA9lx$Iuc{q|b#_K#39fXf5tWmenYi0~WKS-F_!*yId7_(;~>Jq}de zvZ=V4vXaO5m1ArcW7S@_gpq-G4<{p#(*SzGgfU(E+QLI2(T+#bWlS%GBgi1J33ww* z=`MJ$;i^;UHQ%|fs_|NWB7xGiP3mVvyGk!;s0bUwdYY!ulrnyeE;7I!28HOLP7RbNftR#Lb%7?w$Gl{tlvCF?F60OmQI+9i{d zsoDo;R39q`_bs@^kqzR>lvVs?;H9|zmTt37cwn&0%r{~soLMS?3@3uVJ+!Ym(cDtU zN=foXXyCrFF@@bHCz0U{B!Fq@tkHmJZ^t89xziGz^M^%~$&?hb{gP*;Y zKfyEqjckxbzK~5;Zlvj^`ojgxR)u1gqPOl12a7cdPK9pxpU43niEKUuRt|-;KXGvA zIi~3p@`k%JmrQBl0U$s{iW5gn<7Kown$cWE&8{Ew$cB*sTmQ)IaV<5OsAdtC6QgNQ zO#Jf6>IGyx3(<_c#lTa=RFzlcfetM@xY(Zd4D9rrTz zRoWSw%E&6^WUUgAXa*M2hyGVmo}M%9R(+9OA>nPHS3!m=k!gr%8s2|tI(HQ`>BjGx z9huJwWvL=lhWPtX+Lq?Nd@4S&S2F$iUy^V^kbxl$wCs(|wbn}~z3)sjZ*SV!nzVERp@Dp^KAqCxdj)k`*ca(N zBLY^}yU3Jovi<^f4;e`%1c63c&R(4I-l6ZQt%r`Qxin0MN5Eth-rpUO3j|7Q7Hd^Yhj$mgm5+k z*hma@=W{_(V${J-k--P%Y)?z#LhB>>$ur z+QbH{+T0R0axyYf^(_4Tn z?teYL=>L9833wXyhU6?ass$WT%8v%JG*Lwf{goNv{>klzj$x_CY;XpgD8-Es+VI`- zL;QR2SCJw4nd5)xd+7?9<__%;+zxsWtGP1e%4OT6-^0NNeI=%uw(*5x-U@*V9~A5f zje_5Z1wfx+|gMu!+{p<;_`?3C`;T+ELK~lXk8)6fzk%vCxKZ)jY{FW<`N*6$N zg0?Vx16=Gb)H71w1t&;@)Tlvlj{g6B4mAPJFn&DzlXD2lm(DtpNx#beQ5rQ1&QdM# zqgIh}jT+@d1Iii(lqV<|>m~l;riCYu_2G&bI;lae0W|;TUJeBnQP**~NTDK;qils% z7?lBzXuMg9iD~SpTyRX=#W9EbEs@8LsssN~ZStUgAZIJZ3dGaoHbhXp;6LhoF&Ao7 zKXN^l3iS&qD-}?yprn~U=y#-#5A_E*2fAbL|K3OsT5xNU1j-vJLG=Mh8AOW;M@ld< z6KGN2{=dWek(D`o3(Tv#W-y@FMD#xR-lP9Dz!JgTbRVgDpifl0(rs8&3@s|>|ECrZ zjsu|b&Efs9oc~qPXHXGM4(*6!@i9~h(xhz|)d)&*f%r6`fp1!T`&cfzi*HZ-ox~5C z@S{y!+qe;~4B^QW(Fdl92^>wr9(09t>6n^B+cGBLnm(Cpz%9O~Pr+>AWZpaJ)YbHbm0oP`=21!Jh;W)KIJ73UwI4ixag2j=-BtNu3TDT5!IZ-rlHVkXBnIUY@m&((QqFu1Bvdt0!*_aAGg2-Ip$0(7 zTF5geZjb+ZyyJu`vpaLMKsSFJdkJ5SFlqu^rLpJC#MKI-7LYsQai~8?3Hoyvl+-11 zEvzVK25<(VeS$dZX^$n?HMiiBUl#wE+d{Am${S%a*R?96j&_nqbI~M-?G=j~|;BMwKE*>)eIXs2b!bQlae-ssTAFgqs;q zJ>ZCLj3q@TN+gH2?FecJ{7>H{S-|NpJacGEa!>#@4$g3Tv-NQY!yTfom>z+ZBQZ?= zn14^ILpPv(oy`JY!Eiw8$YGB=mM)(m--=m5qc)IhD-tkj2f4HezWo?$ zsX_^LDK%;joI(1|fe~EsW{W$vg07UwkOvhygELe`Afz6Y)TJVSi6|fBD1pbH5fuuK zXez}zFksBaf@7vw$pFzH{t@O$;URJWf3OS?N!iG+#}55wM^%6$s%l15JyJF>qB@bX zixJfeN}7JL24Qbe)G#=v9u@_&V+6VS|5WzoPgP}Gy69lH^nKs=8`!Yv*}#q$H(uPo z;6~gRFK*;dr>gRvd(Nw>tatL%dsTIR5mFEo5kc(11_VWLsj^DM{CE!xJ?weX^K!y?!V&Lli8Vft zeA{hSl1o#rr<{r&OnsU9HeheyPW^71R_6id*^sgH{EUO4hYi;=E*Q4P zKM$2G8~l&mp1q#Uj;mUWG_&W zqs44L$ojg>I%Tcnyt|aMKFdaq+DPNCm(4%_0m;k%`UitqLx6xFZ1LZ$n8(pqIpk3k zm6sy59OrYAoCPYLyDhs(GbrnknBt)JjJ)_Z_ZJ>#ohMwRjqUJTT?HzSrL0F+Tgedn z3~K7tGRoQmM!9EhWg}03nt`AbF*7l@eap3j8hL82NtXp1Y54X1a!i%GP@b)Mk>u;j1#-}ri=}J_7xOXCR(6829r74Sc$M7Z zRuom3R_k~svC;!Cb1`bHM&slN+m>d|nxqz#W3O*(cyHj4O?l`*P?K?wW+bH`X%)-< z%dpeFvP?N((oZh1??qd=3{=(Vdwf6mcEw2-xes*GNBj^hL&Q=~nIc|umpR)_F9Zwd zs@Ri+=YE6h%az#E0rHu{ZP-e_9bZnnJlitUpzkTuUGHl_4>X@srsJ2wr@dO-YEmmb zDjipiQh;`jC5A$~CdZ1*k%ZjXGShi|oBMQpqp`(pI;he^3em!6BxWR})^R#~Dg2)6 zcH3(~Q>ubQj#KAU>5*?YX;?Mhi@l!OWPi%k?@y?l^boM{T47CF|W@ z)n0GC+GDS2@5UYVTZ@)1aII=xca#BZy~^%%3^e{#Th$RxW_W4VvLY=iyzFi?5gbtL1d zqnu#vSWHE*)PPbgg`dHqi^<)Dl7?^iQaG35+bPlpj@33R=>sZvn&#XwF>iuaFZx~y zKB=xu`6*L|*o*SVg2N}n2ak_V@_@Z6+~pw<&!93%9)nV?gmox(cw+^hWj$uVQ=pPP zhf`#Qyo*lqlDN-D{)ny@^oxPA28K;*_()2>=d$s9Y(IoozGIT@fQAq_a*6p4QV6tZ zax62wk1X>oRZn}>C052A$&h{ED|0PMWB+z})smu4RTW#=(z$({C-vZ@A zT3ht3;MC@^*);@3!rSOlj;pa_GRgL`dt~F3CBaL zyk(g!AqcGlRjZMFbT}hrIpSP0AHEFp*zMFp`<(Pq7s&z7D%Vl+fvWS`r@AR^wL%I| zQs#%``(n!)okEKVnuR? zr(8zKYR*q?0M$)crt1=0wDssO{f?>Fh1WvtYn&|i*fkLt_l(Dy|xD=zDAD6`#$qYfEY6JDtn zRJ&99y{g>mj1RmX=?^59sc&e;?V3}vygU8(dXG4Drd&zclewr~k2{o^9XaaMo01o~ zE%He4JEtDw!_dLRcZQkJn&2MIVrYxqO6WDaL(apQckM>(3R0hY&l|JDmQ_`;g<-Fa zXHzdZbjMzg9EjXvDzd+6TNcoyedqqkSZTVHbkn}Y<3n&($kTvvk2i`lF2`f`>2kyG zCau`Nv_I=IW@?SO=dzfz$5Za%aVcKMzVMLy{0;CvKPG;3k*CDvM0vp$o#9x0UXxQ` zk`LrO_J5<394AcVLc6=k+ie>|^X)za;kV2K&nn+Zb~tVNx7*9EhZ5y55w}tfw8)l6 zNgZ?QGD;OG^P#1VtxD769C1BJE)vlTlJoCL8Grs~WSlVk`JeykPw-U00rgMc2pTQy z+@h6spzBcLsP9zVOW%&@Erzbti&5KBPMhXb&jPXo=k@D8H)3u&ANH0m_ULhv0b)U@ zl;h;0o(|3RxM{oJ;i9LEfUkUHJzzDTE@NzSOef>yRi^Lv>T{Dvzg( zY}b_95h|ZuHobZjx}x)P;(1ruP3ms&Wk)FnrD}68a=)d!A1sGavO3}_RY31m>qV!U zKuQk_x-$2Q$hPPrAB)`3soh8}^q}m}<5Lpy*nTFdAq5A*(;RhM3Xb>ZI1Y|w=YftV z+)pP@#c`P!^xKw_tL;vD>e%bU!J(Eln_59H#XzYf$E#@-5E zjjT5A@XpmW21qB)8SYeLw7RSZw*_`6-lnX?m3ntapVZd`z~d2v9_9aYHxr5kDK0)u@w{0F^m5T}e2*9%StSd9-}&8eoD3|Fyb+Jn(#)4ui$JG}G)}*oz#D#Dz6-j^_(@;9bpK_PC?6qnwYd}q@_goM)A7>NarpRY-f?8b`-8vL2G2NOD&$lU)ag@?Zz1JNc zrp;RVx?enO0+#N1?sI}SwZ2=Jvs)(4Ymr~-aR`wBLvlztxX;tkbhf!8e#&dC% zqo5T7>5~p}oUNd9IK$d6TD%M7UG$I^;&7B)BEsHrnQh*xdOh)$b%R!M=i;sT<_?d;!X3!i}nu zdr(7kJL86+66w}k)FnA-(_UtM=qt3N;`#%7ngxo_f7%P?DPK-gd(vur;>&Zk6~B=&mA^yY7N23_3>Rdv3n6OJk# zhczbb@Yo35YF}VAm9{gqKWr%MzVbo%WslJ~%&-++rpHy@6R-Kn8qi}f?Rv6h^Jp}F z-7*&Zzit`#gU2GNrZ8_4>+FZK(grchOR~K%d-)Uhh07j=od5ND`qv+R`1>FKT}c1C zKfn_mPBh>AJlimYV%_>psO$!1br*Ai9P^CYLr%M1_5rPH{YpX}dCeq^E4ww^2xLEN z|0v}E<-ZN2{7*Rs%JNt%L1`+itD>u1YjkhjdVHjsbw%DV4%CqPlsFeF^`NXO9p!@8 zre{bqOpVSTtS%}~L=3AwM6_$NqO$d^{(S*UY0ZvfP92&SQ{4@bX2tv-w>K@eCf7R{UBzarr-Cn`f}u$_wj^r(_q|=fNZCeuKDq@j2?=5p9+(# z@GkHsz6Gj}`W1P%r5s6uz4!xL6xv;jmn?6zSWS?hfZ82So!!tBb}SS+3OtWsOhG? z)M1HL9o;rD5p+`TG<^!~3mrCmClwq6+gLRa=0#|v>q$-f6nRS{>mU=I zC*lsz!3W{j)8^aN@HZ-pE9k1K$>{Xn;go~zpF=M?L9poMkaH?IYWMrz1K%oq%pXYp z@tc36-{-e-lf`-APk;Ppe5~P5fB47W=!ph#QS+(xI~nKop(42t42x+FznV4_c+~M? z#FdD>PKOd-1vPk|3?BDx4R)^Zc@{h5(w2V8cUZU6W;Je?%_&2@e}3k^%p#i()8~La zf%^itd*T63bHpW+%mNb&Gi&3-%@xk1~L9z-|zeMno5?g&^+7>fGfcfqSx-{-Mi_bmQ)#9UaV+tKtB zG0o|#@hcIz-dQkW;5u0HTm9uZue_*}kHD|%>pFQ@3x4wDT_K|rP}QUw2oqmcrX zlw&qS8BmXuutiq593qzaN(J$Rubd)oB*t0&z4F8M+dv*BODoX2 z)}_a(J(xP}HrSI-?u}Ld!j%*3D0Op`=2hdi>KX12nMC( zz@=dy@ko*!Btn^W6sQ>Xhkc}yoRfZ13)EzJ9ZugBIURP<;{p=f_-*=@8aChMEbnAd zjn(!%?_^OSO~k@jX(P7#Nf!~1@ETCDW|-5+b#fq2-XLdZQfHFf1f{(nHkq6gdLf-I z0aea&i>>f;4FaLZSx%hSZ%dIea$&j{2U_H?$uI5Zh$XSIKs*v4Hy{Nm4m%wUlp6|Z z`So&VSz^BNkAm_RiE4lRc6oZm>zJkNV>AGd#6!{g4m=q5esTW&u=xkKhC!6)wRHB7 ze1E)h`5|QyJG>vJji;`}yz}b_ksaV#osW_tpyGylSGXJ`2Ugm0;{9kjV#ai-B;HU< z70@DMHe)Y#Zgn}5xo%Sv(B+%uwJUNmo)e?mcsTvBeU9fNFIW$2*$<0nJ^QV>Vv#sU z4t!=V0M)mGYlCxj&Hhk`wUUo_tCP4bQo4Yewd5R|y-}|s`u(ASx(1GNEyjFsxDHxT zsh_o%K7XnGy+@A^ogiTR$G`r{=dz!}8)N`rJ?T4RoXy;)w`gI{MaYoao)mP%r;7-STbveKi>)Z!)&cs(pIkI8!yJMMQVP-e)(ru>w+5+MsfE&YAy$VC+m z)U->i!`yrURP6KL6(=vr>Gzj+K!^mev6|o>^9XXMHMNK*^&N_C%}i3K0!pL}v{Cnl zjwB2x+|ohR`6&PovpQ)`vu60HGP|A?g2N4a5756gagXL{`kI0P?j`;<4DEXlCV-xuEN=mI?LHRON`(?Oed7f6xoO zTyubQY`*IibhV+LcRj&!7kfe)0~XSx3w%4C_;+|0JM#R`UGHpQXA*Y3tNb7OV;@Fe zc4^Vxh`*ci+~;#*gI!6+?dXo6_4sZN=|u}gR~$BtK2TOTBHse4EY@P|i^C{=-OESW z)@(4j3(C6AcOa$4ZYb=i$16Xx6UGy8)h86yiVn|HnRq@kC|gaW$WtIh#`8W<4SC!O z-_XLi|BQ9mx>ksv4Dy+X7r2$`;sJ{hk#~T59?c5pmhG;fAPi9^&1z}-*@Uh!cpOEa+HV{ zxPsX1FFmktDQ+9OoTLUEc*%7r)@`V!?1JS8oL@T1*0EfwyPR-eSI7la3vwh1kp146L7#`tyTb8Xm$Du7l!u62?lJ}?oaU2No!_Wx+Viv3)+jlN8r!9?!r0EF z+Th7}yw-5PxD895oJP&hJ~DMES$4%nP|Dr9rD*I|ZJ=#h;@53*74%A_IcGLA$5T4k zm*>$liST&pM2RZuE}&vD5PJWspfrtcH_gKFGd&C**Vtnzd?aBS&sq9W^6d4!8Alhk zir|C#$>avr3&*3ubY-iD7i~dOlWH~iepq41OQdyzH|+p=n8srIJ$nP6hA*XMMN|a$ zCLGk)1vRLSdEHVSF*Yl!oQA!&s+){$>h{DgBgY!l%p}r@ry%KW&c|;zNdYA zeJ>{Sx`(5tusJ-&`r2BI?EhOB_UO=4^24mJ!R=!M6QCa{IYayK*`I(db*mUsIND64li@{YJSN2j0y-(Jt_ z&azINnbQcU$jWASc)8I-=lNvWc=Hd zYGbK4j~5h`VC5_0c+)T`0~KdoprJlW4i4HUh%kenWQ|#jsv!r}`&T(a!W#rnQ>uQbox;XH>5Hv>h^_H{8UT=NMp%Tt^Da<1=hqPd zS-TfPtcu=E*Zg2$zRwm|9j1v8D`$xJTxFIx5+hH6*n#^Zo(Apko{K3^o(y`JF{+S7 z@YVOjw%bf5Ur65-C9hHbS*=n4GlN7-oV8&P(gD zhCA>A>0A%9F=z?2L!sTx^pS+(ppqzhzzumUh0~?D(gP;qWz;KN($Jx z*hO{{p@G>Aw9nR0cv4S4@iztrJTH8UpWp`4cV_5 zZm53>kQ3zMxOf_@eO@zs7hFF*+g>Y@PE6$v7D~o8+?ot#7-SL==o7J{B?XZ`5v~j)ef5&;BLu2@v zm_w%8%<0gswEYf`+z+H(aUFAbmO5c5S3fk!B1gmNc7=$my#jvKJG~(flE6BC#joBv z_vr?2_D%YPT19~g9%vhEhaWRL4DG(m-W$_*NPtd&4&U zJ|E^_Phy}wDFdbH4x@lUs~*<9qu?k{C!BJJXYDCos>@m~u>A(k5z;~q9%~yB|K<_u zn{FEpyGjQ+2q)+!!n$*fh%k_TplW+cujhn2{uJCmr6p6~;c%)dnv+9DwKV zt>B8N#(?+Hxw`cPx*_fGejYVOp=<=LHS^&XPuu12+o>`R4t#Ojz2!bA>i#R=H#gs=mee&vdxFm`{m zyyPWkb+SstgZV)0vXeESZHZwzek6e*HB=pZ31ZkljiTEVdd949P^VoF+eMScDIy{zYglt8{A!TYle4InMshY{;q1^% z4y2A&;z){g0Dl=iu#UYE;xmswaGmdDD_H${ffmbrA32wkO zRs`C0hwZkV(x=>K^~0^j*n|KJCuUfdf(7UCN^-gWu|QI!hx* zdF&|XfR;$&i{#+9X(OlAr7ch{{d?UgT}>c?cCZa}zn6j5AFQ&XmeOeH?a=fEw3y@y z+ixU{Lnlw_a}sp=eV~33gFBH1(ft;9nlo~J`w?ci`x;K zUY15M2zU1}4%U_UKH74!!g4bKj&drlJLzJSJOmy3$@96*snFq&4#z?N6P{<19_sQV z@1);J>5i&1RTxG!QyF7ni{V-Rz(R?uBQ4;$Y-^z0C7^ zn8f*bIEv!vI)gxGx7jnpD-Obg2=Ss)vLk_=@Dc&q>@#%h8F^<3$T9nuYy)5YTv6q= zCA}{Nb0&}Np#z`O;9p#DnAL3YlLGLxB{4PHd$F~S2Ld}hq0A_Z-1M#O!Z2>FE-l_~ z-MTduk)_@jBFB}`ipHPRPlx4)98NDWdyHjg!sfi2w^5D&VIn+&N{J(pQVz6R3a8&K zcX0*=(#C4m2OMRabN*66ghX0J#QFFX5mWO_ae)yX|BfZZ5`~BY-{_x{Jd?O1s zuqTWb7l3M-B-$dzBH&$g&)J5fPs-Ks@gww~1J_$ADivmJw%j7bQEMl3T;MAr5MWY-sdCWUE@nVHNp3 ziH<49|MJ&A|JFh4J}+UADFT+jBK!vm1I|KAVEE1;5H%}w!Qpu5o}e4*H&L*{esua| zSToFO@=_l<{}gaFve)l{b9K^_*gkveHXxF%pd&oUE<`iLvnc9)Bo_IX;Ne(A|6U$F zx$K%_mR|F!aFksIdR8E!w%t2dQ4?4gYtf9GX8}BvoBY;oEE)_()zVK<-m~Xeq~z%E zTt8TGamb1?FAlljC~gJgytiN_mwx>$e&2olcRgda>oz@;&rn*bwHZYi5bgqxbr;~P zD7Bj`=r7+WfNiN#!ZN}~ONn^H_7U$U$zh;nr948;J`XuY#5;Q&h*KlIQg9MHK`!*8 zHAI+9&H$BPLa`c1Z}?BRV8<%MPpbX5V%rnJHFmj?N8s+aBxPKL7|M$opk^If;(8jCXHtg^ljg}75GXWD^GrCAKhzv@STcE8*5@e9P zHNDx0GE5$Jf*OT%{Qvu*{sYI*5e%fJ3{;-prmKMkl>_6gn<8RX|4#r;BTrDY_yf(d zf`(L}awNuVqFP|B*;cp6TB^oq8hr-0a@HK-F0;b+JJZj*wmZoya+lI@Zh6D@<9_mv z2s!XQYi`XSic^`2QfZ&vN?LcONn zv>03$^v-{~%`q=20!L92HRK_spscpU$zGtc-@hsn%h(+4=a6Xku~lo#HoY7Gr9GT} zA@Y$I&0;i)$zj%-pLzu;vscs-L_7Ve^+|^=-zT~%*Zt82$^*(HkZ>!a?zo-|%1L<~ zHD!C-Fc(DWcF~PeFoOq91eU^KnDK9GcDExN0}gvwJlJ=5&m=uGJwp^6>2fGt-mpCaKi?9cDWwkMSbq&gsdZ;C z3hw43YjO1zC??IeCMdx-z|-u~b1E-|wdwF2w?uO+JJ||UwE4n2As3WQp?R|#Nw^U| z?RCmjmk0@RJ6pEm;6=O}EXBm06e%TQ6FETqP7VRg9=_ZszwD4@;3?XoOG2cIjj)*1 zk~0#6RpA^t#X7kF{5I_V6!j3*A##yz%?^VtpwyNWCroc5ZR}eSDeXk~D0Z-ZDh~ce z5s#8E6D~(@`uFX|5K10y;9Y%E)zzI@&SYx8D>st23z@{rek?jui#a|j=b{$Cn={`$i| z;H$C*Cer^q14NM@p_%#q+t7w3jHE2k?bcx}Sl;{%t?))(M$0QAjE--Bijoj4d+$N1 zXfEtbg6eFIrDa`DL~{V#4L`GV3hwmPaK4pwl#pgcvSWa4I3E&6B4j%e54nIi6(@zn zQa>pMs`hxb>-QR~y`+TPLOUrXo_3YJK+AkOL{3YXRPfMq&z1TtInG*hbXFxOkFT!M zuR`f8-JiVAQ1iuE`h`b9A`?lR(Uqp*EE^{$VmAE)pX3ef^OG7NRBh`vO&K)-Wu`9Q z!%(r6xlhLT2i7K68w(QQZ~)Kj2HkWJLR!!87OSFR->lpGCC{<*4fS`@3_|(Jy)N-k zw6uce`Ld0b2Mw_2x03^(lPv7(*A~KEp9QXTwM&$ z1dekdQAU7TJoAwD494fzIpL@}#yZ5Vk8l2;oj_L=f6NglD5svFM})_6zT$Z`QEyzfHVx5<~n_S5ft9SG zY?*VPS%W*+8Vj69^eIqTVrX+;3zK!+r9C|i=X^hTzw|w-*LYPP7dg@35eWDq$)Z%u^RO@I?ol=fNi*+6Llx0J)ZH*n>(-7HHf}V=%$ewiB z3re%B+p6rayB2&+3k%@>*iFAdWf;WjI378+FU@4!NK9=s4?_@oDo~@PHxRX5jM;*g za2+~iYuvO~VcIFvCs*p*V7#y57)ADS7O4K}6H|Z%7iG(1ZZcCayht0VJk36=-k>PC zTp{8o=q4iI@hb77i(CgPX5wpMYzOrvoVLO4OE~Q)YxCWQlH?vJRiVQ@S3W)&M@iX$ z6dEt!JPMlGCmxYEm9mm}&L~gF`%dP_q5%dW63@uGnkI`x>=Unnl>0nn1C**Q{%-O_ z{D&af5(oa7M8p#2fKt9eKmi_jK4{e)*AHQDeQUktGdyfJ>HfMK16Z{<$sP{BW zQr$MZPixcd36T$6VBg0`?dET(0Rz#jc@}6(wbZm1(_c_A#gIGr3ZLUesko6gwuQsX z6`+a{f}hEtwGo0gMjcP`mM<@uZ^?ILA(Ll0@F^@N8=0Qu;D;7 zg!d8F!K^t-JZ&X+iEy1L#_86aRH`w^EOSnRZ`bC&&%hi4gI=78v)T>+Zavc<=?r5e~+oxZRY>QximAN2B zBcDx#BJc%z*-abX*=%TY^K5hQpzm2XoW}n1_MYoedN0b)NL>cCg z%?Wac2&MWM(4w!HAoWH8-Pt548%vDjfsF!10ree~cO~BQYKAf~eU(LVSLCy12UVxGF`&@nut$%NWjmny4k@f2VN7W2DgNw_ zwrK0kVe8Z2t0<+J1)mwV8gpAPUXOhg`!@MnMw@+h3E@tc0JUU1-lPc~Zx+pLlq zTdS?)4QkXmp*`v*l{t;#>gEUkfFU>;K5;18AHD?PucQ2J?zb%oXbC-KF%b%(5+ZtL z(ckQmSGQ);OUe^|Yb&Bn;otu7FaLscKmX%TNQ?Mw#-9@jn|>ZuxUj_zeVVs`z4r_h zASzCx8rr)XSU+a7EnXVG)Suh@MfPLMSLCE%Pip2M9Z+`@5rkQRAHZfTX0JVycETzD z%W5yxsQ>EkaSgP3I-WxCNCIYgFUp#=m|EMiuw`RG+6)9&a2ze}@-!MV;)5<&521^p z^E}MQLmcB5PWQtoD@G77AY-5?J`G_JbR7vPcIA?{<~gO}8E(?>7>PA%qc;+{$i47r zf)A%WU|$O7GReLpb}~&4U;a4|@EzHqW-?=QQoW~a@*zeRfXYXqxmxIG7dQU|U+@YG z4tcS%$^oITK8;h$*QxsnJZrv1bhY0fz36r%9O~S4aP1#Q(Ho8#YU!R&hkg1e!f>#` zaSW1^2*AWE04kTlYwYoW3(13Od=K%DvX@YnAqR*^AAJZ2llUoLIh^=gg(7F@AAk7a zkAMHY;rqY*<%hrg(_eo0$L|e48&kdw2s(zblxLI7UOzP)A96x1&}kt3T1L6o-Jo;E zF*iE)^H}jHmhb&&z&1=$v@r(_(SyXSlCA?s!JMmd7L;8se9hY;@E##Qt|j5kTo63T zE}+i2&{*l5gQPaoA%~Jzd@n{VMZJw`O?ecWr>Sx;jd>Oz%^b^oPpzPker5*AXrvvq z)j*JRvDTcZypJ3NNDq>;sD`)t5II;?M~Snm|CbZ=d8!C3P-6Y- zMRYxKLR_`!_LTc<3wM-UwdFc=9bNG^75)!y@6)Gen^#vQkLmrj8q$FD!RB;!cNK0{v0L{ypYfWZ>R z-jjlqHYtVn4R)_WnYHyo^nyPH{oBzGqZ!~{9CRbT%ycziDiyi;;NW8kc3+Q|4cxa? zMY7~3;lICXnl{Mxq)o4h1?)VlD@RH!Q081JO#C5*DDlVK^9A>Q!Gpw)NaPGu6oeye zy^<7?c}OmaI3opREy~K{AuY+z^->So`9x-Az=ZCV+b5Sghiu(v!x^tW zpOTc1fT(CbmcDb*R(Qo{3u9@P!iX|Goaqz27b#>yfdP-gG{U)L*aW&$C_vOT`k$v8`yl*8Q)C_x9 zY0hYxG9w7TnvBZ!zhztOKVUl(b=P*p_JIF<)THe~)Uxd<{}tO) zDW_9%?3z;EM_uvXYnL5eZa1E?Gy1OodAr$^-O=+Yiz$6}Q~o)rN242~i&E$PkESl# zolO1g-yi+l?tJR1T|vP1fV)_rvpaq->1$8l*Js0Sq=CYke}8R^U;3Yes5Y!Om9qq!;!S(X{8Q_98Luu zaj0;37*plYme!tD>o65F9djYD$Dup$j>FBgafc@kQx2;!cha`%@1>2UjRZal+~+u( zmapHfUrw73EOUGxSgJn|bl&lJP-W0H#{tKBeV(zvIOTXgsMy#XbUo;1&`IN6{ZP7JI@&_W1kw&IM>FWiEVQ3alRM)&Nvl36gv?6-uNW=v+;iH3+Jr#$FV=9uR6aB z{^-0CoaK_6z7o6FhdY}rpw-tlDOLR!*S(tXG6Nv zZ-n%P+zJ^CS#Vi&nGETO+v&Q`^^j|K+=r04^xn8nA?qRcBbVY^#b z=y^kjp}_4~MyH|9t;uaLw9BpEZA<1o!?w)P(EEm4ZWEzJnfF6)yFD?yaI4OIV`$8L z8k!w{!F@-3tNVx0wb0`Dz415QkHweA=Z0+$dy+YqSrWFAxt#ebbJ6{|`-S)y?)j#! z_{;IdrtbJXrgisH(>~Mnumh&PuyWH8(-x1LVO6Gqu#={-_`C6qrYesn(Y$h2sZd@MI+8HtF4(3A_rtxpMW z(g#AvTy{A=aw&G~iRjg*%k%O{j$hpCMR9|L5cdeQn>HBo^&WR zKxpz_bQ-ILql1Gq%!<|}sUmS|5u$ETzP+X3NOXFqs%|?PCTv53m^C=PHLl=1v zgRT;xYd*{E0sqr=l)t8G?+0y8!TZIJXb@%mAN(&6GJTgl@vJ9^aH*dpUPzZYA`G|- zK(omG3WO82U)}nO6f0{)IGk+|i+p5j3I>7V z4;lJN-HwFoLM|vZvu^J2HakUZLs?abkojv->(P>j668*5+^C9y&TTt;_Ig4JgZXH) z>f~MMY}Krk-NZ{tQVjg6vV$wnW`{e*VX)h`L*i4ec}}>%NwShW2rXxTmOZBR=G1lB<13)@V8O;VnG{Q7kL+iODFpyI^+sD zcbt(%x*L?X(~HrA2mNbY53 zGXYh0GDT_|=fE?z8grCoAQDwl9)1!-FF`oryk#r%IpHH)K|%Ei_%)C0XVBJEg`YC5 z8tL&_W`cq(I~6VA-jzq3%a8)%44hMmt*)|%2*K|F5od)~m`0I>uGaBl$WHi)rf&L2 zuE9WGZsV@^*Bg;D93JmW0}&dwvq0rpmt2oZy)=<#7z$RC7SQmAkVkXVSl?wm*UL&q2J^Y&8LuJQ3bw=ZG+}o(C#kWXu?)DQ(jevxS4e zx_pU)EGt&Sq>~&>vCHHPCgObDMQVpP4pUb_DWApuC#(c)btqksPiwOa-XObn>tzD? zt>eXgaFDB_Ge{ngDv8C*{1DWaVB~jxGKCWLT~Eoi>_JfJETClF>Ged%1In18%JG1* zB1%T7CoI;D1jBH@gcgbkeE3A(vMm!rR>7aKExOW+sYm5KxQ zpL`(^FZD_7|I%#&N*nV>t-i$kf1`EZ!y#Zc+DmMO$0raD=l5;o5IOK7K0?kw(6UjE zk%Nt)f}D%C7i^^(l;0bx{y;idmm27-&=xcn@gn1#lO;{`z0i3zQ$;g93DQJE%6K1r z2n#ZT$7|46Q)pKjbUpQ=U5gtm;HNo0euFw9B7z%;_%|DYuzGAkQp2-xw0NRyS?-%i z(fTK?p#IODHkTc1oQGVx+;`)H8udP>d>eds`3?KO^zRJp40;!IEqEljAbd9bVnk0w zRb*e}8Jpd@Ytd`b#W5$W_Qn?LnCI$9(rQve>S%Ctz*2g7Mt#O&W`*gRY00!zc}<&R z(_weSW!Yu7Yl+()e6*v;d)nuq-%-DQ{|f=FuFJZ;QRkvt_3iqS*!I}FaR&{}hN}3D zgwdoP>$a4k8+`P-&iHKNmdIKXp-+yJUAI(M_T-2lpp zD(9PiGRziuocDk#i=c`fYl`*V*d?Vo0QJxZ%z)$i#>(P9-yg`YQdu&~(086OD*OSN z7e}@u1VqIU%zS?FZI&Zh!jwqe55$VF0Lp62O&&r-w0Pnzl9TNt%WN|cgqZ#p+N% zq~upPV6iI)Z8f5kquB5_>A_IRt_WnT0V;Z&kfWm>l*hTauUQtRT=`|Pt?Dj(E~w6< zUcD#4k`>{M$NjJa)^JfihxX>sfH6-T9WHRZ`(bhssIwU2TEnaDx-#3{zZ&7jJT2dy zqxsEZdZXd3E{F!VkC>?zbDPD?b}pUfwJ*lC=FR_mZM>Zmh{gaaH^R-kWe0g!m3qjt zBw3PcPEV0coqb!qWNjxGe||6!d{@l8>xy9^S<2Y{J1HleHp&s8d26jpgdXoW zxzD4d5{TG!oTg5Z1MvgdLN_~&>p4h=-CHj?$3gJ#HUZ&TPv0triA(Djeh0#L6z!4N zi`vPVaFZ(;a`D&8$S*?C@j;DWd{*O|m82UZd^NgUBfVgJo17gZedcRH{SQ=_o%2S> z!8$Nu;fy)RLs0*%BF(aFt_Np%J&Ea1%*Bi<`U58w`=ck)3Y1(%-==*|%SYx61|d~? z^+oXWensl1NQizmaUSRXMW@2pZq0>AOJ@H|@Ep77QJUW4!_c+Ex*A=D^-R(#q>=@g zXpwlr`*QMuD5OY7Skn!^F~6LYW{-xHd!YmV^nodJuZkYYoXu>D?vAF}m%A_gVLjeQ zkH<5?nRyp}^B?4*{8gyV-~RA--+#O8KIS8UfB$t(-%U!0w+wfF`~Vdkc1 zV=;%przQ3fa}hg3M8xMlA{=H85%GzLBSa)GI7X~>kqV&J5(;fue{kv=Nx;nw)6jVe zwLygrtu8;OzNazLlKB35^4G-oH33Y0pO^APYe|1!jl(HFQpDuP(Q*s;?dMmzy>OW>FQoPu-2Cvv9CkHCMu5sf zye^2K93u~|JmbKhKYBGuF4nJEw#@OQ-<8aRRul#!Q^F!^;b(OTLY$&JqzxH*$e9k2 zkDI@#Pw1+tNPFbfp%~Akx!;ZWKA1Ke`1N}e+iiznqTAwD@5L`p3>bP+ zzNQa+xihpH_e{G7_XsvB*?d)&r&;qV2_>Q^hzpk48_m?K8FFedS{QZBYI^LK7 literal 0 HcmV?d00001 diff --git a/backend-spring/gradle/wrapper/gradle-wrapper.jar b/backend-spring/gradle/wrapper/gradle-wrapper.jar new file mode 100644 index 0000000000000000000000000000000000000000..61285a659d17295f1de7c53e24fdf13ad755c379 GIT binary patch literal 46175 zcma&NWmKG9wk?cn;qLD4?(Xgo+}#P9AcecTOK=k0-KB7X7w!%r36RU%ea89j>2v%2 zy2jY`r|L&NwdbC5&AHZASAvGYhCo0-fPjFYcwhhD3mpOxLPbVff<-}9mQ7hfN=8*n zMn@YK0`jk~Y#ADPZt&s;&o%Vh+1OqX$SQPQUbO~kT2|`trE{h9WQ$5t)0<0SGK(9o zy!{fv+oYdReexE`UMYzV3-kOr>x=rJ7+6+0b5EnF$IG$Dt(hUAKx2>*-_*>j|Id49Q3}YN>5=$q?@D;}*%{N1&Ngq- zT;Qj#_R=+0ba4EqMNa487mOM?^?N!cyt;9!ID^&OIS$OX?qC^kSGrHw@&-mB@~L!$ zQMIB|qD849?j6c_o6Y9s2-@J%jl@tu1+mdGN~J$RK!v{juhQkNSMup%E!|Iwjp}G} z6l3PDwQp#b$A`v-92bY=W{dghjg1@gO53Q}P!4oN?n)(dY4}3I1erK<3&=O2;)*)+_&gzJwCFLYl&;nZCm zs21P5net@>H0V>H2FQ%TUoZBiSRH2w*u~K%d6Y|Fc_eO}lhQ1A!Z|)oX3+mS``s4O zQE>^#ibNrUi4P;{KRbbTOVweOhejS2x&Oab?s zB}^!pSukn*hb<|^*8b+28w~Kqr z5YDH20(#-gOLJR&1Q4qEEb{G)%nsAqPsEfj9FgZ% z5k%IHRQk6Xh}==R`LYmK?%(0w9zI}hkkj|3qvo$_FzU9$%Zf>(S>m|JTn!rYUwC)S z^+V+Gh@*U(Za&jUW#Wh#;1*R2he9SI68(&DeI%UQ&0gyQ73g7)Xts{uPx^&U`MALc)G9+Y<9KIjR1lICfNnw_Ju8 z-O7hoBM!+}IMUYZr29cN{aHL&dmr!ayq7;r?`7M3z+L@~Fx4o}lk{l?0w3=rqRxpv z0Tp-ETUvB<*2vTh_dr%}Lfx)%pxlb$ch}yCCUz6k4)hyMJ_Lq$SS(Rd8aWG-K{8TD zDUtTM2SQ|y5F;}M&9eL-xGpj#vTy0*Egq$K1aZnGq3I^$31WARgcJUb0T*QaRo~*Q*;H_Jc_7LeyDXHPh?}Ick1s{(QZWni3%OL|i zJ7foQ%gLbU+dOZP7Z^96OoW5YbS=0%+#j3#o3bYsnB}Ztbu_KuFcBz9M~>z z{s?I|KWR0CJT6eqNlIj57Jq@-><8 zV&>W=5}GL`X|of9PiXwZaoKWOehcgaB1!y0@zY^+$YFgk3UB@$4#qATzJk?b^M#iL zKe}&w?|SGj<-3Z>pDd^+G3w_>76zq%EZGhqzOYx6YQgnb;vA^%6(Sx4?gytM=^m`C z@c+mG0LSQOqF$oK!j8-B4hG`=`%8Hp#$+IvanscDc42T#q4=v2YuoSZd{VS%kBNtx zLd6U%s>y+0*0?dDt&wJ`=F&iRWyJS1Y>kZds97Z^J?Kmeu!Fh-L+F9?o#ZILhhvI& zyE^o10y()W>x@1skNd<(ehL$G%S9yZ>AxGNktZ_$h9RD?hd_YxvNIeb?3~*XE*54b z;}9`U&d_XFzBbijUqrX}i?s24Ox?EOfTz$aTz;dtw~F)!(XK9voHS_ii|YmI?eRrX z%Gr=T-7Qx7eB&|iMk+jCw4x6X6Hae`0esw}b;uVy6ljeACOq{ZM6e`2k%XdE* zcZotR`H{lmO?;6sfMz|Xv|aJ!F2{Ucp1Y5HM68;}hw4h%ntF`pl0QNFk@W?2S67+W zF1AU5YS7<_7H6+NrwMJ)&D8^-Sgj_rttU*gt3dvWH^sG8W6BbhtT{Lm3VV5cSo;$3 zNuSXq<>-4y>$9__aC`0aka&~k=}#N;Co3O<6()7bWgAZuB~%E!lv`DCbEMM)G$IQ< z*b89{3RV{((?H&X1kBl8+K_XHL`Hc=25|M6Djk8YZUc&s3Ki&|KcOb&!$LVf5~6*K z>pgW7g-7ASM5ZZ5?Ah_e13r7Z98K>?leVWPNQs_MXx_&Ftg92|SR`xrt$4|%fVGS- zTNZt(a#pl7RaYzzJlX1vk0kt*Vpxw_{M%KG%Q}`scIVU

pVX@HRij*jw$g4?}Pn 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 literal 0 HcmV?d00001 diff --git a/backend-spring/gradle/wrapper/gradle-wrapper.properties b/backend-spring/gradle/wrapper/gradle-wrapper.properties new file mode 100644 index 0000000..37f78a6 --- /dev/null +++ b/backend-spring/gradle/wrapper/gradle-wrapper.properties @@ -0,0 +1,7 @@ +distributionBase=GRADLE_USER_HOME +distributionPath=wrapper/dists +distributionUrl=https\://services.gradle.org/distributions/gradle-9.3.1-bin.zip +networkTimeout=10000 +validateDistributionUrl=true +zipStoreBase=GRADLE_USER_HOME +zipStorePath=wrapper/dists diff --git a/backend-spring/gradlew b/backend-spring/gradlew new file mode 100755 index 0000000..adff685 --- /dev/null +++ b/backend-spring/gradlew @@ -0,0 +1,248 @@ +#!/bin/sh + +# +# Copyright © 2015 the original 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. +# +# SPDX-License-Identifier: Apache-2.0 +# + +############################################################################## +# +# Gradle start up script for POSIX generated by Gradle. +# +# Important for running: +# +# (1) You need a POSIX-compliant shell to run this script. If your /bin/sh is +# noncompliant, but you have some other compliant shell such as ksh or +# bash, then to run this script, type that shell name before the whole +# command line, like: +# +# ksh Gradle +# +# Busybox and similar reduced shells will NOT work, because this script +# requires all of these POSIX shell features: +# * functions; +# * expansions «$var», «${var}», «${var:-default}», «${var+SET}», +# «${var#prefix}», «${var%suffix}», and «$( cmd )»; +# * compound commands having a testable exit status, especially «case»; +# * various built-in commands including «command», «set», and «ulimit». +# +# Important for patching: +# +# (2) This script targets any POSIX shell, so it avoids extensions provided +# by Bash, Ksh, etc; in particular arrays are avoided. +# +# The "traditional" practice of packing multiple parameters into a +# space-separated string is a well documented source of bugs and security +# problems, so this is (mostly) avoided, by progressively accumulating +# options in "$@", and eventually passing that to Java. +# +# Where the inherited environment variables (DEFAULT_JVM_OPTS, JAVA_OPTS, +# and GRADLE_OPTS) rely on word-splitting, this is performed explicitly; +# see the in-line comments for details. +# +# There are tweaks for specific operating systems such as AIX, CygWin, +# Darwin, MinGW, and NonStop. +# +# (3) This script is generated from the Groovy template +# https://github.com/gradle/gradle/blob/HEAD/platforms/jvm/plugins-application/src/main/resources/org/gradle/api/internal/plugins/unixStartScript.txt +# within the Gradle project. +# +# You can find Gradle at https://github.com/gradle/gradle/. +# +############################################################################## + +# Attempt to set APP_HOME + +# Resolve links: $0 may be a link +app_path=$0 + +# Need this for daisy-chained symlinks. +while + APP_HOME=${app_path%"${app_path##*/}"} # leaves a trailing /; empty if no leading path + [ -h "$app_path" ] +do + ls=$( ls -ld "$app_path" ) + link=${ls#*' -> '} + case $link in #( + /*) app_path=$link ;; #( + *) app_path=$APP_HOME$link ;; + esac +done + +# This is normally unused +# shellcheck disable=SC2034 +APP_BASE_NAME=${0##*/} +# Discard cd standard output in case $CDPATH is set (https://github.com/gradle/gradle/issues/25036) +APP_HOME=$( cd -P "${APP_HOME:-./}" > /dev/null && printf '%s\n' "$PWD" ) || exit + +# Use the maximum available, or set MAX_FD != -1 to use that value. +MAX_FD=maximum + +warn () { + echo "$*" +} >&2 + +die () { + echo + echo "$*" + echo + exit 1 +} >&2 + +# OS specific support (must be 'true' or 'false'). +cygwin=false +msys=false +darwin=false +nonstop=false +case "$( uname )" in #( + CYGWIN* ) cygwin=true ;; #( + Darwin* ) darwin=true ;; #( + MSYS* | MINGW* ) msys=true ;; #( + NONSTOP* ) nonstop=true ;; +esac + + + +# Determine the Java command to use to start the JVM. +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 + if [ ! -x "$JAVACMD" ] ; then + die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME + +Please set the JAVA_HOME variable in your environment to match the +location of your Java installation." + fi +else + JAVACMD=java + if ! command -v java >/dev/null 2>&1 + then + die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. + +Please set the JAVA_HOME variable in your environment to match the +location of your Java installation." + fi +fi + +# Increase the maximum file descriptors if we can. +if ! "$cygwin" && ! "$darwin" && ! "$nonstop" ; then + case $MAX_FD in #( + max*) + # In POSIX sh, ulimit -H is undefined. That's why the result is checked to see if it worked. + # shellcheck disable=SC2039,SC3045 + MAX_FD=$( ulimit -H -n ) || + warn "Could not query maximum file descriptor limit" + esac + case $MAX_FD in #( + '' | soft) :;; #( + *) + # In POSIX sh, ulimit -n is undefined. That's why the result is checked to see if it worked. + # shellcheck disable=SC2039,SC3045 + ulimit -n "$MAX_FD" || + warn "Could not set maximum file descriptor limit to $MAX_FD" + esac +fi + +# Collect all arguments for the java command, stacking in reverse order: +# * args from the command line +# * the main class name +# * -classpath +# * -D...appname settings +# * --module-path (only if needed) +# * DEFAULT_JVM_OPTS, JAVA_OPTS, and GRADLE_OPTS environment variables. + +# For Cygwin or MSYS, switch paths to Windows format before running java +if "$cygwin" || "$msys" ; then + APP_HOME=$( cygpath --path --mixed "$APP_HOME" ) + + JAVACMD=$( cygpath --unix "$JAVACMD" ) + + # Now convert the arguments - kludge to limit ourselves to /bin/sh + for arg do + if + case $arg in #( + -*) false ;; # don't mess with options #( + /?*) t=${arg#/} t=/${t%%/*} # looks like a POSIX filepath + [ -e "$t" ] ;; #( + *) false ;; + esac + then + arg=$( cygpath --path --ignore --mixed "$arg" ) + fi + # Roll the args list around exactly as many times as the number of + # args, so each arg winds up back in the position where it started, but + # possibly modified. + # + # NB: a `for` loop captures its iteration list before it begins, so + # changing the positional parameters here affects neither the number of + # iterations, nor the values presented in `arg`. + shift # remove old arg + set -- "$@" "$arg" # push replacement arg + done +fi + + +# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. +DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"' + +# Collect all arguments for the java command: +# * DEFAULT_JVM_OPTS, JAVA_OPTS, and optsEnvironmentVar are not allowed to contain shell fragments, +# and any embedded shellness will be escaped. +# * For example: A user cannot expect ${Hostname} to be expanded, as it is an environment variable and will be +# treated as '${Hostname}' itself on the command line. + +set -- \ + "-Dorg.gradle.appname=$APP_BASE_NAME" \ + -jar "$APP_HOME/gradle/wrapper/gradle-wrapper.jar" \ + "$@" + +# Stop when "xargs" is not available. +if ! command -v xargs >/dev/null 2>&1 +then + die "xargs is not available" +fi + +# Use "xargs" to parse quoted args. +# +# With -n1 it outputs one arg per line, with the quotes and backslashes removed. +# +# In Bash we could simply go: +# +# readarray ARGS < <( xargs -n1 <<<"$var" ) && +# set -- "${ARGS[@]}" "$@" +# +# but POSIX shell has neither arrays nor command substitution, so instead we +# post-process each arg (as a line of input to sed) to backslash-escape any +# character that might be a shell metacharacter, then use eval to reverse +# that process (while maintaining the separation between arguments), and wrap +# the whole thing up as a single "set" statement. +# +# This will of course break if any of these variables contains a newline or +# an unmatched quote. +# + +eval "set -- $( + printf '%s\n' "$DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS" | + xargs -n1 | + sed ' s~[^-[:alnum:]+,./:=@_]~\\&~g; ' | + tr '\n' ' ' + )" '"$@"' + +exec "$JAVACMD" "$@" diff --git a/backend-spring/gradlew.bat b/backend-spring/gradlew.bat new file mode 100644 index 0000000..e509b2d --- /dev/null +++ b/backend-spring/gradlew.bat @@ -0,0 +1,93 @@ +@rem +@rem Copyright 2015 the original author or authors. +@rem +@rem Licensed under the Apache License, Version 2.0 (the "License"); +@rem you may not use this file except in compliance with the License. +@rem 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, software +@rem distributed under the License is distributed on an "AS IS" BASIS, +@rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +@rem See the License for the specific language governing permissions and +@rem limitations under the License. +@rem +@rem SPDX-License-Identifier: Apache-2.0 +@rem + +@if "%DEBUG%"=="" @echo off +@rem ########################################################################## +@rem +@rem Gradle startup script for Windows +@rem +@rem ########################################################################## + +@rem Set local scope for the variables with windows NT shell +if "%OS%"=="Windows_NT" setlocal + +set DIRNAME=%~dp0 +if "%DIRNAME%"=="" set DIRNAME=. +@rem This is normally unused +set APP_BASE_NAME=%~n0 +set APP_HOME=%DIRNAME% + +@rem Resolve any "." and ".." in APP_HOME to make it shorter. +for %%i in ("%APP_HOME%") do set APP_HOME=%%~fi + +@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. +set DEFAULT_JVM_OPTS="-Xmx64m" "-Xms64m" + +@rem Find java.exe +if defined JAVA_HOME goto findJavaFromJavaHome + +set JAVA_EXE=java.exe +%JAVA_EXE% -version >NUL 2>&1 +if %ERRORLEVEL% equ 0 goto execute + +echo. 1>&2 +echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. 1>&2 +echo. 1>&2 +echo Please set the JAVA_HOME variable in your environment to match the 1>&2 +echo location of your Java installation. 1>&2 + +goto fail + +:findJavaFromJavaHome +set JAVA_HOME=%JAVA_HOME:"=% +set JAVA_EXE=%JAVA_HOME%/bin/java.exe + +if exist "%JAVA_EXE%" goto execute + +echo. 1>&2 +echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% 1>&2 +echo. 1>&2 +echo Please set the JAVA_HOME variable in your environment to match the 1>&2 +echo location of your Java installation. 1>&2 + +goto fail + +:execute +@rem Setup the command line + + + +@rem Execute Gradle +"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -jar "%APP_HOME%\gradle\wrapper\gradle-wrapper.jar" %* + +:end +@rem End local scope for the variables with windows NT shell +if %ERRORLEVEL% equ 0 goto mainEnd + +:fail +rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of +rem the _cmd.exe /c_ return code! +set EXIT_CODE=%ERRORLEVEL% +if %EXIT_CODE% equ 0 set EXIT_CODE=1 +if not ""=="%GRADLE_EXIT_CONSOLE%" exit %EXIT_CODE% +exit /b %EXIT_CODE% + +:mainEnd +if "%OS%"=="Windows_NT" endlocal + +:omega diff --git a/backend-spring/settings.gradle.kts b/backend-spring/settings.gradle.kts new file mode 100644 index 0000000..61d5455 --- /dev/null +++ b/backend-spring/settings.gradle.kts @@ -0,0 +1 @@ +rootProject.name = "allowance-planner" diff --git a/backend-spring/src/main/java/be/seeseepuff/allowanceplanner/AllowancePlannerApplication.java b/backend-spring/src/main/java/be/seeseepuff/allowanceplanner/AllowancePlannerApplication.java new file mode 100644 index 0000000..dbc9452 --- /dev/null +++ b/backend-spring/src/main/java/be/seeseepuff/allowanceplanner/AllowancePlannerApplication.java @@ -0,0 +1,13 @@ +package be.seeseepuff.allowanceplanner; + +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.SpringBootApplication; + +@SpringBootApplication +public class AllowancePlannerApplication +{ + public static void main(String[] args) + { + SpringApplication.run(AllowancePlannerApplication.class, args); + } +} diff --git a/backend-spring/src/main/java/be/seeseepuff/allowanceplanner/controller/ApiController.java b/backend-spring/src/main/java/be/seeseepuff/allowanceplanner/controller/ApiController.java new file mode 100644 index 0000000..72dcb63 --- /dev/null +++ b/backend-spring/src/main/java/be/seeseepuff/allowanceplanner/controller/ApiController.java @@ -0,0 +1,506 @@ +package be.seeseepuff.allowanceplanner.controller; + +import be.seeseepuff.allowanceplanner.dto.*; +import be.seeseepuff.allowanceplanner.service.AllowanceService; +import be.seeseepuff.allowanceplanner.service.TaskService; +import be.seeseepuff.allowanceplanner.service.TransferService; +import be.seeseepuff.allowanceplanner.service.UserService; +import org.springframework.http.HttpStatus; +import org.springframework.http.ResponseEntity; +import org.springframework.web.bind.annotation.*; + +import java.util.List; +import java.util.Optional; + +@RestController +@RequestMapping("/api") +@CrossOrigin(origins = "*") +public class ApiController +{ + private final UserService userService; + private final AllowanceService allowanceService; + private final TaskService taskService; + private final TransferService transferService; + + public ApiController(UserService userService, + AllowanceService allowanceService, + TaskService taskService, + TransferService transferService) + { + this.userService = userService; + this.allowanceService = allowanceService; + this.taskService = taskService; + this.transferService = transferService; + } + + // ---- Users ---- + + @GetMapping("/users") + public List getUsers() + { + return userService.getUsers(); + } + + @GetMapping("/user/{userId}") + public ResponseEntity getUser(@PathVariable String userId) + { + int id; + try + { + id = Integer.parseInt(userId); + } + catch (NumberFormatException e) + { + return ResponseEntity.badRequest().body(new ErrorResponse("Invalid user ID")); + } + + Optional user = userService.getUser(id); + if (user.isEmpty()) + { + return ResponseEntity.status(HttpStatus.NOT_FOUND).body(new ErrorResponse("User not found")); + } + return ResponseEntity.ok(user.get()); + } + + // ---- History ---- + + @PostMapping("/user/{userId}/history") + public ResponseEntity postHistory(@PathVariable String userId, @RequestBody PostHistoryRequest request) + { + int id; + try + { + id = Integer.parseInt(userId); + } + catch (NumberFormatException e) + { + return ResponseEntity.badRequest().body(new ErrorResponse("Invalid user ID")); + } + + if (request.description() == null || request.description().isEmpty()) + { + return ResponseEntity.badRequest().body(new ErrorResponse("Description cannot be empty")); + } + + if (!userService.userExists(id)) + { + return ResponseEntity.status(HttpStatus.NOT_FOUND).body(new ErrorResponse("User not found")); + } + + allowanceService.addHistory(id, request); + return ResponseEntity.ok(new MessageResponse("History updated successfully")); + } + + @GetMapping("/user/{userId}/history") + public ResponseEntity getHistory(@PathVariable String userId) + { + int id; + try + { + id = Integer.parseInt(userId); + } + catch (NumberFormatException e) + { + return ResponseEntity.badRequest().body(new ErrorResponse("Invalid user ID")); + } + + List history = allowanceService.getHistory(id); + return ResponseEntity.ok(history); + } + + // ---- Allowances ---- + + @GetMapping("/user/{userId}/allowance") + public ResponseEntity getUserAllowance(@PathVariable String userId) + { + int id; + try + { + id = Integer.parseInt(userId); + } + catch (NumberFormatException e) + { + return ResponseEntity.badRequest().body(new ErrorResponse("Invalid user ID")); + } + + if (!userService.userExists(id)) + { + return ResponseEntity.status(HttpStatus.NOT_FOUND).body(new ErrorResponse("User not found")); + } + + return ResponseEntity.ok(allowanceService.getUserAllowances(id)); + } + + @PostMapping("/user/{userId}/allowance") + public ResponseEntity createUserAllowance(@PathVariable String userId, + @RequestBody CreateAllowanceRequest request) + { + int id; + try + { + id = Integer.parseInt(userId); + } + catch (NumberFormatException e) + { + return ResponseEntity.badRequest().body(new ErrorResponse("Invalid user ID")); + } + + if (request.name() == null || request.name().isEmpty()) + { + return ResponseEntity.badRequest().body(new ErrorResponse("Allowance name cannot be empty")); + } + + if (!userService.userExists(id)) + { + return ResponseEntity.status(HttpStatus.NOT_FOUND).body(new ErrorResponse("User not found")); + } + + int allowanceId = allowanceService.createAllowance(id, request); + return ResponseEntity.status(HttpStatus.CREATED).body(new IdResponse(allowanceId)); + } + + @PutMapping("/user/{userId}/allowance") + public ResponseEntity bulkPutUserAllowance(@PathVariable String userId, + @RequestBody List requests) + { + int id; + try + { + id = Integer.parseInt(userId); + } + catch (NumberFormatException e) + { + return ResponseEntity.badRequest().body(new ErrorResponse("Invalid user ID")); + } + + if (!userService.userExists(id)) + { + return ResponseEntity.status(HttpStatus.NOT_FOUND).body(new ErrorResponse("User not found")); + } + + allowanceService.bulkUpdateAllowance(id, requests); + return ResponseEntity.ok(new MessageResponse("Allowance updated successfully")); + } + + @GetMapping("/user/{userId}/allowance/{allowanceId}") + public ResponseEntity getUserAllowanceById(@PathVariable String userId, @PathVariable String allowanceId) + { + int uid; + try + { + uid = Integer.parseInt(userId); + } + catch (NumberFormatException e) + { + return ResponseEntity.badRequest().body(new ErrorResponse("Invalid user ID")); + } + + int aid; + try + { + aid = Integer.parseInt(allowanceId); + } + catch (NumberFormatException e) + { + return ResponseEntity.badRequest().body(new ErrorResponse("Invalid allowance ID")); + } + + if (!userService.userExists(uid)) + { + return ResponseEntity.status(HttpStatus.NOT_FOUND).body(new ErrorResponse("User not found")); + } + + Optional allowance = allowanceService.getUserAllowanceById(uid, aid); + if (allowance.isEmpty()) + { + return ResponseEntity.status(HttpStatus.NOT_FOUND).body(new ErrorResponse("Allowance not found")); + } + return ResponseEntity.ok(allowance.get()); + } + + @DeleteMapping("/user/{userId}/allowance/{allowanceId}") + public ResponseEntity deleteUserAllowance(@PathVariable String userId, @PathVariable String allowanceId) + { + int uid; + try + { + uid = Integer.parseInt(userId); + } + catch (NumberFormatException e) + { + return ResponseEntity.badRequest().body(new ErrorResponse("Invalid user ID")); + } + + int aid; + try + { + aid = Integer.parseInt(allowanceId); + } + catch (NumberFormatException e) + { + return ResponseEntity.badRequest().body(new ErrorResponse("Invalid allowance ID")); + } + + if (aid == 0) + { + return ResponseEntity.badRequest().body(new ErrorResponse("Allowance id zero cannot be deleted")); + } + + if (!userService.userExists(uid)) + { + return ResponseEntity.status(HttpStatus.NOT_FOUND).body(new ErrorResponse("User not found")); + } + + boolean deleted = allowanceService.deleteAllowance(uid, aid); + if (!deleted) + { + return ResponseEntity.status(HttpStatus.NOT_FOUND).body(new ErrorResponse("History not found")); + } + return ResponseEntity.ok(new MessageResponse("History deleted successfully")); + } + + @PutMapping("/user/{userId}/allowance/{allowanceId}") + public ResponseEntity putUserAllowance(@PathVariable String userId, @PathVariable String allowanceId, + @RequestBody UpdateAllowanceRequest request) + { + int uid; + try + { + uid = Integer.parseInt(userId); + } + catch (NumberFormatException e) + { + return ResponseEntity.badRequest().body(new ErrorResponse("Invalid user ID")); + } + + int aid; + try + { + aid = Integer.parseInt(allowanceId); + } + catch (NumberFormatException e) + { + return ResponseEntity.badRequest().body(new ErrorResponse("Invalid allowance ID")); + } + + if (!userService.userExists(uid)) + { + return ResponseEntity.status(HttpStatus.NOT_FOUND).body(new ErrorResponse("User not found")); + } + + boolean updated = allowanceService.updateAllowance(uid, aid, request); + if (!updated) + { + return ResponseEntity.status(HttpStatus.NOT_FOUND).body(new ErrorResponse("Allowance not found")); + } + return ResponseEntity.ok(new MessageResponse("Allowance updated successfully")); + } + + @PostMapping("/user/{userId}/allowance/{allowanceId}/complete") + public ResponseEntity completeAllowance(@PathVariable String userId, @PathVariable String allowanceId) + { + int uid; + try + { + uid = Integer.parseInt(userId); + } + catch (NumberFormatException e) + { + return ResponseEntity.badRequest().body(new ErrorResponse("Invalid user ID")); + } + + int aid; + try + { + aid = Integer.parseInt(allowanceId); + } + catch (NumberFormatException e) + { + return ResponseEntity.badRequest().body(new ErrorResponse("Invalid allowance ID")); + } + + if (!userService.userExists(uid)) + { + return ResponseEntity.status(HttpStatus.NOT_FOUND).body(new ErrorResponse("User not found")); + } + + boolean completed = allowanceService.completeAllowance(uid, aid); + if (!completed) + { + return ResponseEntity.status(HttpStatus.NOT_FOUND).body(new ErrorResponse("Allowance not found")); + } + return ResponseEntity.ok(new MessageResponse("Allowance completed successfully")); + } + + @PostMapping("/user/{userId}/allowance/{allowanceId}/add") + public ResponseEntity addToAllowance(@PathVariable String userId, @PathVariable String allowanceId, + @RequestBody AddAllowanceAmountRequest request) + { + int uid; + try + { + uid = Integer.parseInt(userId); + } + catch (NumberFormatException e) + { + return ResponseEntity.badRequest().body(new ErrorResponse("Invalid user ID")); + } + + int aid; + try + { + aid = Integer.parseInt(allowanceId); + } + catch (NumberFormatException e) + { + return ResponseEntity.badRequest().body(new ErrorResponse("Invalid allowance ID")); + } + + if (!userService.userExists(uid)) + { + return ResponseEntity.status(HttpStatus.NOT_FOUND).body(new ErrorResponse("User not found")); + } + + boolean result = allowanceService.addAllowanceAmount(uid, aid, request); + if (!result) + { + return ResponseEntity.status(HttpStatus.NOT_FOUND).body(new ErrorResponse("Allowance not found")); + } + return ResponseEntity.ok(new MessageResponse("Allowance completed successfully")); + } + + // ---- Tasks ---- + + @PostMapping("/tasks") + public ResponseEntity createTask(@RequestBody CreateTaskRequest request) + { + if (request.name() == null || request.name().isEmpty()) + { + return ResponseEntity.badRequest().body(new ErrorResponse("Task name cannot be empty")); + } + + if (request.schedule() != null) + { + return ResponseEntity.badRequest().body(new ErrorResponse("Schedules are not yet supported")); + } + + if (request.assigned() != null) + { + if (!userService.userExists(request.assigned())) + { + return ResponseEntity.status(HttpStatus.NOT_FOUND).body(new ErrorResponse("User not found")); + } + } + + int taskId = taskService.createTask(request); + return ResponseEntity.status(HttpStatus.CREATED).body(new IdResponse(taskId)); + } + + @GetMapping("/tasks") + public List getTasks() + { + return taskService.getTasks(); + } + + @GetMapping("/task/{taskId}") + public ResponseEntity getTask(@PathVariable String taskId) + { + int id; + try + { + id = Integer.parseInt(taskId); + } + catch (NumberFormatException e) + { + return ResponseEntity.badRequest().body(new ErrorResponse("Invalid task ID")); + } + + Optional task = taskService.getTask(id); + if (task.isEmpty()) + { + return ResponseEntity.status(HttpStatus.NOT_FOUND).body(new ErrorResponse("Task not found")); + } + return ResponseEntity.ok(task.get()); + } + + @PutMapping("/task/{taskId}") + public ResponseEntity putTask(@PathVariable String taskId, @RequestBody CreateTaskRequest request) + { + int id; + try + { + id = Integer.parseInt(taskId); + } + catch (NumberFormatException e) + { + return ResponseEntity.badRequest().body(new ErrorResponse("Invalid task ID")); + } + + Optional existing = taskService.getTask(id); + if (existing.isEmpty()) + { + return ResponseEntity.status(HttpStatus.NOT_FOUND).body(new ErrorResponse("Task not found")); + } + + taskService.updateTask(id, request); + return ResponseEntity.ok(new MessageResponse("Task updated successfully")); + } + + @DeleteMapping("/task/{taskId}") + public ResponseEntity deleteTask(@PathVariable String taskId) + { + int id; + try + { + id = Integer.parseInt(taskId); + } + catch (NumberFormatException e) + { + return ResponseEntity.badRequest().body(new ErrorResponse("Invalid task ID")); + } + + if (!taskService.hasTask(id)) + { + return ResponseEntity.status(HttpStatus.NOT_FOUND).body(new ErrorResponse("Task not found")); + } + + taskService.deleteTask(id); + return ResponseEntity.ok(new MessageResponse("Task deleted successfully")); + } + + @PostMapping("/task/{taskId}/complete") + public ResponseEntity completeTask(@PathVariable String taskId) + { + int id; + try + { + id = Integer.parseInt(taskId); + } + catch (NumberFormatException e) + { + return ResponseEntity.badRequest().body(new ErrorResponse("Invalid task ID")); + } + + boolean completed = taskService.completeTask(id); + if (!completed) + { + return ResponseEntity.status(HttpStatus.NOT_FOUND).body(new ErrorResponse("Task not found")); + } + return ResponseEntity.ok(new MessageResponse("Task completed successfully")); + } + + // ---- Transfer ---- + + @PostMapping("/transfer") + public ResponseEntity transfer(@RequestBody TransferRequest request) + { + TransferService.TransferResult result = transferService.transfer(request); + return switch (result.status()) + { + case SUCCESS -> ResponseEntity.ok(new MessageResponse(result.message())); + case BAD_REQUEST -> ResponseEntity.badRequest().body(new ErrorResponse(result.message())); + case NOT_FOUND -> + ResponseEntity.status(HttpStatus.NOT_FOUND).body(new ErrorResponse(result.message())); + }; + } +} diff --git a/backend-spring/src/main/java/be/seeseepuff/allowanceplanner/controller/WebController.java b/backend-spring/src/main/java/be/seeseepuff/allowanceplanner/controller/WebController.java new file mode 100644 index 0000000..d290984 --- /dev/null +++ b/backend-spring/src/main/java/be/seeseepuff/allowanceplanner/controller/WebController.java @@ -0,0 +1,173 @@ +package be.seeseepuff.allowanceplanner.controller; + +import be.seeseepuff.allowanceplanner.dto.*; +import be.seeseepuff.allowanceplanner.service.AllowanceService; +import be.seeseepuff.allowanceplanner.service.TaskService; +import be.seeseepuff.allowanceplanner.service.UserService; +import jakarta.servlet.http.Cookie; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; +import org.springframework.stereotype.Controller; +import org.springframework.ui.Model; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestParam; + +import java.util.Arrays; +import java.util.List; + +@Controller +public class WebController +{ + private final UserService userService; + private final AllowanceService allowanceService; + private final TaskService taskService; + + public WebController(UserService userService, AllowanceService allowanceService, TaskService taskService) + { + this.userService = userService; + this.allowanceService = allowanceService; + this.taskService = taskService; + } + + @GetMapping("/") + public String index(HttpServletRequest request, HttpServletResponse response, Model model) + { + Integer currentUser = getCurrentUser(request, response); + if (currentUser == null) + { + model.addAttribute("users", userService.getUsers()); + return "index"; + } + return renderWithUser(model, currentUser); + } + + @GetMapping("/login") + public String login(@RequestParam(required = false) String user, HttpServletResponse response) + { + if (user != null && !user.isEmpty()) + { + Cookie cookie = new Cookie("user", user); + cookie.setMaxAge(3600); + cookie.setHttpOnly(true); + response.addCookie(cookie); + } + return "redirect:/"; + } + + @PostMapping("/createTask") + public String createTask(@RequestParam String name, @RequestParam double reward, + @RequestParam(required = false) String schedule, + HttpServletRequest request, HttpServletResponse response, Model model) + { + Integer currentUser = getCurrentUser(request, response); + if (currentUser == null) + { + return "redirect:/"; + } + + if (name.isEmpty() || reward <= 0) + { + model.addAttribute("error", "Invalid input"); + return "index"; + } + + CreateTaskRequest taskRequest = new CreateTaskRequest(name, reward, null, + (schedule != null && !schedule.isEmpty()) ? schedule : null); + taskService.createTask(taskRequest); + return "redirect:/"; + } + + @GetMapping("/completeTask") + public String completeTask(@RequestParam("task") int taskId) + { + taskService.completeTask(taskId); + return "redirect:/"; + } + + @PostMapping("/createAllowance") + public String createAllowance(@RequestParam String name, @RequestParam double target, + @RequestParam double weight, + HttpServletRequest request, HttpServletResponse response, Model model) + { + Integer currentUser = getCurrentUser(request, response); + if (currentUser == null) + { + return "redirect:/"; + } + + if (name.isEmpty() || target <= 0 || weight <= 0) + { + model.addAttribute("error", "Invalid input"); + return "index"; + } + + allowanceService.createAllowance(currentUser, new CreateAllowanceRequest(name, target, weight, "")); + return "redirect:/"; + } + + @GetMapping("/completeAllowance") + public String completeAllowance(@RequestParam("allowance") int allowanceId, + HttpServletRequest request, HttpServletResponse response) + { + Integer currentUser = getCurrentUser(request, response); + if (currentUser == null) + { + return "redirect:/"; + } + allowanceService.completeAllowance(currentUser, allowanceId); + return "redirect:/"; + } + + private Integer getCurrentUser(HttpServletRequest request, HttpServletResponse response) + { + Cookie[] cookies = request.getCookies(); + if (cookies == null) + { + return null; + } + String userStr = Arrays.stream(cookies) + .filter(c -> "user".equals(c.getName())) + .map(Cookie::getValue) + .findFirst() + .orElse(null); + if (userStr == null) + { + return null; + } + try + { + int userId = Integer.parseInt(userStr); + if (!userService.userExists(userId)) + { + unsetUserCookie(response); + return null; + } + return userId; + } + catch (NumberFormatException e) + { + unsetUserCookie(response); + return null; + } + } + + private void unsetUserCookie(HttpServletResponse response) + { + Cookie cookie = new Cookie("user", ""); + cookie.setMaxAge(0); + cookie.setPath("/"); + cookie.setHttpOnly(true); + response.addCookie(cookie); + } + + private String renderWithUser(Model model, int currentUser) + { + model.addAttribute("users", userService.getUsers()); + model.addAttribute("currentUser", currentUser); + model.addAttribute("allowances", allowanceService.getUserAllowances(currentUser)); + model.addAttribute("tasks", taskService.getTasks()); + model.addAttribute("history", allowanceService.getHistory(currentUser)); + return "index"; + } +} diff --git a/backend-spring/src/main/java/be/seeseepuff/allowanceplanner/dto/AddAllowanceAmountRequest.java b/backend-spring/src/main/java/be/seeseepuff/allowanceplanner/dto/AddAllowanceAmountRequest.java new file mode 100644 index 0000000..f1c467d --- /dev/null +++ b/backend-spring/src/main/java/be/seeseepuff/allowanceplanner/dto/AddAllowanceAmountRequest.java @@ -0,0 +1,5 @@ +package be.seeseepuff.allowanceplanner.dto; + +public record AddAllowanceAmountRequest(double amount, String description) +{ +} diff --git a/backend-spring/src/main/java/be/seeseepuff/allowanceplanner/dto/AllowanceDto.java b/backend-spring/src/main/java/be/seeseepuff/allowanceplanner/dto/AllowanceDto.java new file mode 100644 index 0000000..fc7b2e7 --- /dev/null +++ b/backend-spring/src/main/java/be/seeseepuff/allowanceplanner/dto/AllowanceDto.java @@ -0,0 +1,8 @@ +package be.seeseepuff.allowanceplanner.dto; + +import com.fasterxml.jackson.annotation.JsonInclude; + +@JsonInclude(JsonInclude.Include.ALWAYS) +public record AllowanceDto(int id, String name, double target, double progress, double weight, String colour) +{ +} diff --git a/backend-spring/src/main/java/be/seeseepuff/allowanceplanner/dto/BulkUpdateAllowanceRequest.java b/backend-spring/src/main/java/be/seeseepuff/allowanceplanner/dto/BulkUpdateAllowanceRequest.java new file mode 100644 index 0000000..124a08c --- /dev/null +++ b/backend-spring/src/main/java/be/seeseepuff/allowanceplanner/dto/BulkUpdateAllowanceRequest.java @@ -0,0 +1,5 @@ +package be.seeseepuff.allowanceplanner.dto; + +public record BulkUpdateAllowanceRequest(int id, double weight) +{ +} diff --git a/backend-spring/src/main/java/be/seeseepuff/allowanceplanner/dto/CreateAllowanceRequest.java b/backend-spring/src/main/java/be/seeseepuff/allowanceplanner/dto/CreateAllowanceRequest.java new file mode 100644 index 0000000..ac4e8aa --- /dev/null +++ b/backend-spring/src/main/java/be/seeseepuff/allowanceplanner/dto/CreateAllowanceRequest.java @@ -0,0 +1,5 @@ +package be.seeseepuff.allowanceplanner.dto; + +public record CreateAllowanceRequest(String name, double target, double weight, String colour) +{ +} diff --git a/backend-spring/src/main/java/be/seeseepuff/allowanceplanner/dto/CreateTaskRequest.java b/backend-spring/src/main/java/be/seeseepuff/allowanceplanner/dto/CreateTaskRequest.java new file mode 100644 index 0000000..e430354 --- /dev/null +++ b/backend-spring/src/main/java/be/seeseepuff/allowanceplanner/dto/CreateTaskRequest.java @@ -0,0 +1,11 @@ +package be.seeseepuff.allowanceplanner.dto; + +import com.fasterxml.jackson.annotation.JsonProperty; + +public record CreateTaskRequest( + String name, + Double reward, + Integer assigned, + String schedule) +{ +} diff --git a/backend-spring/src/main/java/be/seeseepuff/allowanceplanner/dto/ErrorResponse.java b/backend-spring/src/main/java/be/seeseepuff/allowanceplanner/dto/ErrorResponse.java new file mode 100644 index 0000000..c5763de --- /dev/null +++ b/backend-spring/src/main/java/be/seeseepuff/allowanceplanner/dto/ErrorResponse.java @@ -0,0 +1,5 @@ +package be.seeseepuff.allowanceplanner.dto; + +public record ErrorResponse(String error) +{ +} diff --git a/backend-spring/src/main/java/be/seeseepuff/allowanceplanner/dto/HistoryDto.java b/backend-spring/src/main/java/be/seeseepuff/allowanceplanner/dto/HistoryDto.java new file mode 100644 index 0000000..7e404bd --- /dev/null +++ b/backend-spring/src/main/java/be/seeseepuff/allowanceplanner/dto/HistoryDto.java @@ -0,0 +1,7 @@ +package be.seeseepuff.allowanceplanner.dto; + +import java.time.Instant; + +public record HistoryDto(double allowance, Instant timestamp, String description) +{ +} diff --git a/backend-spring/src/main/java/be/seeseepuff/allowanceplanner/dto/IdResponse.java b/backend-spring/src/main/java/be/seeseepuff/allowanceplanner/dto/IdResponse.java new file mode 100644 index 0000000..54b2bea --- /dev/null +++ b/backend-spring/src/main/java/be/seeseepuff/allowanceplanner/dto/IdResponse.java @@ -0,0 +1,5 @@ +package be.seeseepuff.allowanceplanner.dto; + +public record IdResponse(int id) +{ +} diff --git a/backend-spring/src/main/java/be/seeseepuff/allowanceplanner/dto/MessageResponse.java b/backend-spring/src/main/java/be/seeseepuff/allowanceplanner/dto/MessageResponse.java new file mode 100644 index 0000000..2fef1f9 --- /dev/null +++ b/backend-spring/src/main/java/be/seeseepuff/allowanceplanner/dto/MessageResponse.java @@ -0,0 +1,5 @@ +package be.seeseepuff.allowanceplanner.dto; + +public record MessageResponse(String message) +{ +} diff --git a/backend-spring/src/main/java/be/seeseepuff/allowanceplanner/dto/PostHistoryRequest.java b/backend-spring/src/main/java/be/seeseepuff/allowanceplanner/dto/PostHistoryRequest.java new file mode 100644 index 0000000..abff1a5 --- /dev/null +++ b/backend-spring/src/main/java/be/seeseepuff/allowanceplanner/dto/PostHistoryRequest.java @@ -0,0 +1,5 @@ +package be.seeseepuff.allowanceplanner.dto; + +public record PostHistoryRequest(double allowance, String description) +{ +} diff --git a/backend-spring/src/main/java/be/seeseepuff/allowanceplanner/dto/TaskDto.java b/backend-spring/src/main/java/be/seeseepuff/allowanceplanner/dto/TaskDto.java new file mode 100644 index 0000000..168f10c --- /dev/null +++ b/backend-spring/src/main/java/be/seeseepuff/allowanceplanner/dto/TaskDto.java @@ -0,0 +1,8 @@ +package be.seeseepuff.allowanceplanner.dto; + +import com.fasterxml.jackson.annotation.JsonInclude; + +@JsonInclude(JsonInclude.Include.ALWAYS) +public record TaskDto(int id, String name, double reward, Integer assigned, String schedule) +{ +} diff --git a/backend-spring/src/main/java/be/seeseepuff/allowanceplanner/dto/TransferRequest.java b/backend-spring/src/main/java/be/seeseepuff/allowanceplanner/dto/TransferRequest.java new file mode 100644 index 0000000..f631e40 --- /dev/null +++ b/backend-spring/src/main/java/be/seeseepuff/allowanceplanner/dto/TransferRequest.java @@ -0,0 +1,5 @@ +package be.seeseepuff.allowanceplanner.dto; + +public record TransferRequest(int from, int to, double amount) +{ +} diff --git a/backend-spring/src/main/java/be/seeseepuff/allowanceplanner/dto/UpdateAllowanceRequest.java b/backend-spring/src/main/java/be/seeseepuff/allowanceplanner/dto/UpdateAllowanceRequest.java new file mode 100644 index 0000000..7b1cca8 --- /dev/null +++ b/backend-spring/src/main/java/be/seeseepuff/allowanceplanner/dto/UpdateAllowanceRequest.java @@ -0,0 +1,5 @@ +package be.seeseepuff.allowanceplanner.dto; + +public record UpdateAllowanceRequest(String name, double target, double weight, String colour) +{ +} diff --git a/backend-spring/src/main/java/be/seeseepuff/allowanceplanner/dto/UserDto.java b/backend-spring/src/main/java/be/seeseepuff/allowanceplanner/dto/UserDto.java new file mode 100644 index 0000000..18a0823 --- /dev/null +++ b/backend-spring/src/main/java/be/seeseepuff/allowanceplanner/dto/UserDto.java @@ -0,0 +1,5 @@ +package be.seeseepuff.allowanceplanner.dto; + +public record UserDto(int id, String name) +{ +} diff --git a/backend-spring/src/main/java/be/seeseepuff/allowanceplanner/dto/UserWithAllowanceDto.java b/backend-spring/src/main/java/be/seeseepuff/allowanceplanner/dto/UserWithAllowanceDto.java new file mode 100644 index 0000000..553ddc0 --- /dev/null +++ b/backend-spring/src/main/java/be/seeseepuff/allowanceplanner/dto/UserWithAllowanceDto.java @@ -0,0 +1,5 @@ +package be.seeseepuff.allowanceplanner.dto; + +public record UserWithAllowanceDto(int id, String name, double allowance) +{ +} diff --git a/backend-spring/src/main/java/be/seeseepuff/allowanceplanner/entity/Allowance.java b/backend-spring/src/main/java/be/seeseepuff/allowanceplanner/entity/Allowance.java new file mode 100644 index 0000000..f562b25 --- /dev/null +++ b/backend-spring/src/main/java/be/seeseepuff/allowanceplanner/entity/Allowance.java @@ -0,0 +1,99 @@ +package be.seeseepuff.allowanceplanner.entity; + +import jakarta.persistence.*; + +@Entity +@Table(name = "allowances") +public class Allowance +{ + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + private int id; + + @Column(name = "user_id", nullable = false) + private int userId; + + @Column(nullable = false) + private String name; + + @Column(nullable = false) + private long target; + + @Column(nullable = false) + private long balance = 0; + + @Column(nullable = false) + private double weight; + + private Integer colour; + + public int getId() + { + return id; + } + + public void setId(int id) + { + this.id = id; + } + + public int getUserId() + { + return userId; + } + + public void setUserId(int userId) + { + this.userId = userId; + } + + public String getName() + { + return name; + } + + public void setName(String name) + { + this.name = name; + } + + public long getTarget() + { + return target; + } + + public void setTarget(long target) + { + this.target = target; + } + + public long getBalance() + { + return balance; + } + + public void setBalance(long balance) + { + this.balance = balance; + } + + public double getWeight() + { + return weight; + } + + public void setWeight(double weight) + { + this.weight = weight; + } + + public Integer getColour() + { + return colour; + } + + public void setColour(Integer colour) + { + this.colour = colour; + } +} diff --git a/backend-spring/src/main/java/be/seeseepuff/allowanceplanner/entity/History.java b/backend-spring/src/main/java/be/seeseepuff/allowanceplanner/entity/History.java new file mode 100644 index 0000000..520422b --- /dev/null +++ b/backend-spring/src/main/java/be/seeseepuff/allowanceplanner/entity/History.java @@ -0,0 +1,73 @@ +package be.seeseepuff.allowanceplanner.entity; + +import jakarta.persistence.*; + +@Entity +@Table(name = "history") +public class History +{ + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + private int id; + + @Column(name = "user_id", nullable = false) + private int userId; + + @Column(nullable = false) + private long timestamp; + + @Column(nullable = false) + private long amount; + + private String description; + + public int getId() + { + return id; + } + + public void setId(int id) + { + this.id = id; + } + + public int getUserId() + { + return userId; + } + + public void setUserId(int userId) + { + this.userId = userId; + } + + public long getTimestamp() + { + return timestamp; + } + + public void setTimestamp(long timestamp) + { + this.timestamp = timestamp; + } + + public long getAmount() + { + return amount; + } + + public void setAmount(long amount) + { + this.amount = amount; + } + + public String getDescription() + { + return description; + } + + public void setDescription(String description) + { + this.description = description; + } +} diff --git a/backend-spring/src/main/java/be/seeseepuff/allowanceplanner/entity/Task.java b/backend-spring/src/main/java/be/seeseepuff/allowanceplanner/entity/Task.java new file mode 100644 index 0000000..474c98e --- /dev/null +++ b/backend-spring/src/main/java/be/seeseepuff/allowanceplanner/entity/Task.java @@ -0,0 +1,97 @@ +package be.seeseepuff.allowanceplanner.entity; + +import jakarta.persistence.*; + +@Entity +@Table(name = "tasks") +public class Task +{ + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + private int id; + + @Column(nullable = false) + private String name; + + @Column(nullable = false) + private long reward; + + private Integer assigned; + + private String schedule; + + private Long completed; + + @Column(name = "next_run") + private Long nextRun; + + public int getId() + { + return id; + } + + public void setId(int id) + { + this.id = id; + } + + public String getName() + { + return name; + } + + public void setName(String name) + { + this.name = name; + } + + public long getReward() + { + return reward; + } + + public void setReward(long reward) + { + this.reward = reward; + } + + public Integer getAssigned() + { + return assigned; + } + + public void setAssigned(Integer assigned) + { + this.assigned = assigned; + } + + public String getSchedule() + { + return schedule; + } + + public void setSchedule(String schedule) + { + this.schedule = schedule; + } + + public Long getCompleted() + { + return completed; + } + + public void setCompleted(Long completed) + { + this.completed = completed; + } + + public Long getNextRun() + { + return nextRun; + } + + public void setNextRun(Long nextRun) + { + this.nextRun = nextRun; + } +} diff --git a/backend-spring/src/main/java/be/seeseepuff/allowanceplanner/entity/User.java b/backend-spring/src/main/java/be/seeseepuff/allowanceplanner/entity/User.java new file mode 100644 index 0000000..5b1b501 --- /dev/null +++ b/backend-spring/src/main/java/be/seeseepuff/allowanceplanner/entity/User.java @@ -0,0 +1,61 @@ +package be.seeseepuff.allowanceplanner.entity; + +import jakarta.persistence.*; + +@Entity +@Table(name = "users") +public class User +{ + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + private int id; + + @Column(nullable = false) + private String name; + + @Column(nullable = false) + private double weight = 10.0; + + @Column(nullable = false) + private long balance = 0; + + public int getId() + { + return id; + } + + public void setId(int id) + { + this.id = id; + } + + public String getName() + { + return name; + } + + public void setName(String name) + { + this.name = name; + } + + public double getWeight() + { + return weight; + } + + public void setWeight(double weight) + { + this.weight = weight; + } + + public long getBalance() + { + return balance; + } + + public void setBalance(long balance) + { + this.balance = balance; + } +} diff --git a/backend-spring/src/main/java/be/seeseepuff/allowanceplanner/repository/AllowanceRepository.java b/backend-spring/src/main/java/be/seeseepuff/allowanceplanner/repository/AllowanceRepository.java new file mode 100644 index 0000000..ba79bfb --- /dev/null +++ b/backend-spring/src/main/java/be/seeseepuff/allowanceplanner/repository/AllowanceRepository.java @@ -0,0 +1,27 @@ +package be.seeseepuff.allowanceplanner.repository; + +import be.seeseepuff.allowanceplanner.entity.Allowance; +import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.data.jpa.repository.Query; +import org.springframework.stereotype.Repository; + +import java.util.List; +import java.util.Optional; + +@Repository +public interface AllowanceRepository extends JpaRepository +{ + List findByUserIdOrderByIdAsc(int userId); + + Optional findByIdAndUserId(int id, int userId); + + int countByIdAndUserId(int id, int userId); + + void deleteByIdAndUserId(int id, int userId); + + @Query("SELECT a FROM Allowance a WHERE a.userId = :userId AND a.weight > 0 ORDER BY (a.target - a.balance) ASC") + List findByUserIdWithPositiveWeightOrderByRemainingAsc(int userId); + + @Query("SELECT COALESCE(SUM(a.weight), 0) FROM Allowance a WHERE a.userId = :userId AND a.weight > 0") + double sumPositiveWeights(int userId); +} diff --git a/backend-spring/src/main/java/be/seeseepuff/allowanceplanner/repository/HistoryRepository.java b/backend-spring/src/main/java/be/seeseepuff/allowanceplanner/repository/HistoryRepository.java new file mode 100644 index 0000000..67030fe --- /dev/null +++ b/backend-spring/src/main/java/be/seeseepuff/allowanceplanner/repository/HistoryRepository.java @@ -0,0 +1,13 @@ +package be.seeseepuff.allowanceplanner.repository; + +import be.seeseepuff.allowanceplanner.entity.History; +import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.stereotype.Repository; + +import java.util.List; + +@Repository +public interface HistoryRepository extends JpaRepository +{ + List findByUserIdOrderByIdDesc(int userId); +} diff --git a/backend-spring/src/main/java/be/seeseepuff/allowanceplanner/repository/TaskRepository.java b/backend-spring/src/main/java/be/seeseepuff/allowanceplanner/repository/TaskRepository.java new file mode 100644 index 0000000..7e6fac0 --- /dev/null +++ b/backend-spring/src/main/java/be/seeseepuff/allowanceplanner/repository/TaskRepository.java @@ -0,0 +1,16 @@ +package be.seeseepuff.allowanceplanner.repository; + +import be.seeseepuff.allowanceplanner.entity.Task; +import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.stereotype.Repository; + +import java.util.List; +import java.util.Optional; + +@Repository +public interface TaskRepository extends JpaRepository +{ + List findByCompletedIsNull(); + + Optional findByIdAndCompletedIsNull(int id); +} diff --git a/backend-spring/src/main/java/be/seeseepuff/allowanceplanner/repository/UserRepository.java b/backend-spring/src/main/java/be/seeseepuff/allowanceplanner/repository/UserRepository.java new file mode 100644 index 0000000..edf7723 --- /dev/null +++ b/backend-spring/src/main/java/be/seeseepuff/allowanceplanner/repository/UserRepository.java @@ -0,0 +1,13 @@ +package be.seeseepuff.allowanceplanner.repository; + +import be.seeseepuff.allowanceplanner.entity.User; +import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.data.jpa.repository.Query; +import org.springframework.stereotype.Repository; + +@Repository +public interface UserRepository extends JpaRepository +{ + @Query("SELECT COALESCE(SUM(h.amount), 0) FROM History h WHERE h.userId = :userId") + long sumHistoryAmount(int userId); +} diff --git a/backend-spring/src/main/java/be/seeseepuff/allowanceplanner/service/AllowanceService.java b/backend-spring/src/main/java/be/seeseepuff/allowanceplanner/service/AllowanceService.java new file mode 100644 index 0000000..0b3d6a7 --- /dev/null +++ b/backend-spring/src/main/java/be/seeseepuff/allowanceplanner/service/AllowanceService.java @@ -0,0 +1,298 @@ +package be.seeseepuff.allowanceplanner.service; + +import be.seeseepuff.allowanceplanner.dto.*; +import be.seeseepuff.allowanceplanner.entity.Allowance; +import be.seeseepuff.allowanceplanner.entity.History; +import be.seeseepuff.allowanceplanner.entity.User; +import be.seeseepuff.allowanceplanner.repository.AllowanceRepository; +import be.seeseepuff.allowanceplanner.repository.HistoryRepository; +import be.seeseepuff.allowanceplanner.repository.UserRepository; +import be.seeseepuff.allowanceplanner.util.ColourUtil; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import java.time.Instant; +import java.util.ArrayList; +import java.util.List; +import java.util.Optional; + +@Service +public class AllowanceService +{ + private final AllowanceRepository allowanceRepository; + private final UserRepository userRepository; + private final HistoryRepository historyRepository; + + public AllowanceService(AllowanceRepository allowanceRepository, + UserRepository userRepository, + HistoryRepository historyRepository) + { + this.allowanceRepository = allowanceRepository; + this.userRepository = userRepository; + this.historyRepository = historyRepository; + } + + public List getUserAllowances(int userId) + { + User user = userRepository.findById(userId).orElseThrow(); + List result = new ArrayList<>(); + + // Add the "rest" allowance (id=0) + result.add(new AllowanceDto(0, "", 0, user.getBalance() / 100.0, user.getWeight(), "")); + + // Add named allowances + for (Allowance a : allowanceRepository.findByUserIdOrderByIdAsc(userId)) + { + result.add(toDto(a)); + } + return result; + } + + public Optional getUserAllowanceById(int userId, int allowanceId) + { + if (allowanceId == 0) + { + return userRepository.findById(userId) + .map(u -> new AllowanceDto(0, "", 0, u.getBalance() / 100.0, u.getWeight(), "")); + } + return allowanceRepository.findByIdAndUserId(allowanceId, userId) + .map(this::toDto); + } + + @Transactional + public int createAllowance(int userId, CreateAllowanceRequest request) + { + int colour = ColourUtil.convertStringToColour(request.colour()); + Allowance allowance = new Allowance(); + allowance.setUserId(userId); + allowance.setName(request.name()); + allowance.setTarget(Math.round(request.target() * 100.0)); + allowance.setWeight(request.weight()); + allowance.setColour(colour); + allowance = allowanceRepository.save(allowance); + return allowance.getId(); + } + + @Transactional + public boolean deleteAllowance(int userId, int allowanceId) + { + int count = allowanceRepository.countByIdAndUserId(allowanceId, userId); + if (count == 0) + { + return false; + } + allowanceRepository.deleteByIdAndUserId(allowanceId, userId); + return true; + } + + @Transactional + public boolean updateAllowance(int userId, int allowanceId, UpdateAllowanceRequest request) + { + if (allowanceId == 0) + { + User user = userRepository.findById(userId).orElseThrow(); + user.setWeight(request.weight()); + userRepository.save(user); + return true; + } + + Optional opt = allowanceRepository.findByIdAndUserId(allowanceId, userId); + if (opt.isEmpty()) + { + return false; + } + + int colour = ColourUtil.convertStringToColour(request.colour()); + Allowance allowance = opt.get(); + allowance.setName(request.name()); + allowance.setTarget(Math.round(request.target() * 100.0)); + allowance.setWeight(request.weight()); + allowance.setColour(colour); + allowanceRepository.save(allowance); + return true; + } + + @Transactional + public void bulkUpdateAllowance(int userId, List requests) + { + for (BulkUpdateAllowanceRequest req : requests) + { + if (req.id() == 0) + { + User user = userRepository.findById(userId).orElseThrow(); + user.setWeight(req.weight()); + userRepository.save(user); + } + else + { + allowanceRepository.findByIdAndUserId(req.id(), userId).ifPresent(a -> + { + a.setWeight(req.weight()); + allowanceRepository.save(a); + }); + } + } + } + + @Transactional + public boolean completeAllowance(int userId, int allowanceId) + { + Optional opt = allowanceRepository.findByIdAndUserId(allowanceId, userId); + if (opt.isEmpty()) + { + return false; + } + + Allowance allowance = opt.get(); + long cost = allowance.getBalance(); + String allowanceName = allowance.getName(); + + // Delete the allowance + allowanceRepository.delete(allowance); + + // Add a history entry + History history = new History(); + history.setUserId(userId); + history.setTimestamp(Instant.now().getEpochSecond()); + history.setAmount(-cost); + history.setDescription("Allowance completed: " + allowanceName); + historyRepository.save(history); + + return true; + } + + @Transactional + public boolean addAllowanceAmount(int userId, int allowanceId, AddAllowanceAmountRequest request) + { + long remainingAmount = Math.round(request.amount() * 100); + + // Insert history entry + History history = new History(); + history.setUserId(userId); + history.setTimestamp(Instant.now().getEpochSecond()); + history.setAmount(remainingAmount); + history.setDescription(request.description()); + historyRepository.save(history); + + if (allowanceId == 0) + { + if (remainingAmount < 0) + { + User user = userRepository.findById(userId).orElseThrow(); + if (remainingAmount > user.getBalance()) + { + throw new IllegalArgumentException("cannot remove more than the current balance: " + user.getBalance()); + } + } + User user = userRepository.findById(userId).orElseThrow(); + user.setBalance(user.getBalance() + remainingAmount); + userRepository.save(user); + } + else if (remainingAmount < 0) + { + Allowance allowance = allowanceRepository.findByIdAndUserId(allowanceId, userId).orElse(null); + if (allowance == null) + { + return false; + } + if (remainingAmount > allowance.getBalance()) + { + throw new IllegalArgumentException("cannot remove more than the current allowance balance: " + allowance.getBalance()); + } + allowance.setBalance(allowance.getBalance() + remainingAmount); + allowanceRepository.save(allowance); + } + else + { + Allowance allowance = allowanceRepository.findByIdAndUserId(allowanceId, userId).orElse(null); + if (allowance == null) + { + return false; + } + + long toAdd = remainingAmount; + if (allowance.getBalance() + toAdd > allowance.getTarget()) + { + toAdd = allowance.getTarget() - allowance.getBalance(); + } + remainingAmount -= toAdd; + + if (toAdd > 0) + { + allowance.setBalance(allowance.getBalance() + toAdd); + allowanceRepository.save(allowance); + } + + if (remainingAmount > 0) + { + addDistributedReward(userId, (int) remainingAmount); + } + } + return true; + } + + public void addDistributedReward(int userId, int reward) + { + User user = userRepository.findById(userId).orElseThrow(); + double userWeight = user.getWeight(); + + double sumOfWeights = allowanceRepository.sumPositiveWeights(userId) + userWeight; + + int remainingReward = reward; + + if (sumOfWeights > 0) + { + List allowances = allowanceRepository.findByUserIdWithPositiveWeightOrderByRemainingAsc(userId); + for (Allowance allowance : allowances) + { + int amount = (int) ((allowance.getWeight() / sumOfWeights) * remainingReward); + if (allowance.getBalance() + amount > allowance.getTarget()) + { + amount = (int) (allowance.getTarget() - allowance.getBalance()); + } + sumOfWeights -= allowance.getWeight(); + allowance.setBalance(allowance.getBalance() + amount); + allowanceRepository.save(allowance); + remainingReward -= amount; + } + } + + // Add remaining to user's balance + user = userRepository.findById(userId).orElseThrow(); + user.setBalance(user.getBalance() + remainingReward); + userRepository.save(user); + } + + public List getHistory(int userId) + { + return historyRepository.findByUserIdOrderByIdDesc(userId).stream() + .map(h -> new HistoryDto( + h.getAmount() / 100.0, + Instant.ofEpochSecond(h.getTimestamp()), + h.getDescription())) + .toList(); + } + + @Transactional + public void addHistory(int userId, PostHistoryRequest request) + { + long amount = Math.round(request.allowance() * 100.0); + History history = new History(); + history.setUserId(userId); + history.setTimestamp(Instant.now().getEpochSecond()); + history.setAmount(amount); + history.setDescription(request.description()); + historyRepository.save(history); + } + + private AllowanceDto toDto(Allowance a) + { + return new AllowanceDto( + a.getId(), + a.getName(), + a.getTarget() / 100.0, + a.getBalance() / 100.0, + a.getWeight(), + ColourUtil.convertColourToString(a.getColour())); + } +} diff --git a/backend-spring/src/main/java/be/seeseepuff/allowanceplanner/service/TaskService.java b/backend-spring/src/main/java/be/seeseepuff/allowanceplanner/service/TaskService.java new file mode 100644 index 0000000..47dd254 --- /dev/null +++ b/backend-spring/src/main/java/be/seeseepuff/allowanceplanner/service/TaskService.java @@ -0,0 +1,132 @@ +package be.seeseepuff.allowanceplanner.service; + +import be.seeseepuff.allowanceplanner.dto.*; +import be.seeseepuff.allowanceplanner.entity.History; +import be.seeseepuff.allowanceplanner.entity.Task; +import be.seeseepuff.allowanceplanner.entity.User; +import be.seeseepuff.allowanceplanner.repository.HistoryRepository; +import be.seeseepuff.allowanceplanner.repository.TaskRepository; +import be.seeseepuff.allowanceplanner.repository.UserRepository; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import java.time.Instant; +import java.util.List; +import java.util.Optional; + +@Service +public class TaskService +{ + private final TaskRepository taskRepository; + private final UserRepository userRepository; + private final HistoryRepository historyRepository; + private final AllowanceService allowanceService; + + public TaskService(TaskRepository taskRepository, + UserRepository userRepository, + HistoryRepository historyRepository, + AllowanceService allowanceService) + { + this.taskRepository = taskRepository; + this.userRepository = userRepository; + this.historyRepository = historyRepository; + this.allowanceService = allowanceService; + } + + @Transactional + public int createTask(CreateTaskRequest request) + { + Task task = new Task(); + task.setName(request.name()); + task.setReward(Math.round((request.reward() != null ? request.reward() : 0.0) * 100.0)); + task.setAssigned(request.assigned()); + task = taskRepository.save(task); + return task.getId(); + } + + public List getTasks() + { + return taskRepository.findByCompletedIsNull().stream() + .map(this::toDto) + .toList(); + } + + public Optional getTask(int taskId) + { + return taskRepository.findByIdAndCompletedIsNull(taskId) + .map(this::toDto); + } + + @Transactional + public boolean updateTask(int taskId, CreateTaskRequest request) + { + Optional opt = taskRepository.findByIdAndCompletedIsNull(taskId); + if (opt.isEmpty()) + { + return false; + } + Task task = opt.get(); + task.setName(request.name()); + task.setReward(Math.round((request.reward() != null ? request.reward() : 0.0) * 100.0)); + task.setAssigned(request.assigned()); + taskRepository.save(task); + return true; + } + + public boolean hasTask(int taskId) + { + return taskRepository.existsById(taskId); + } + + @Transactional + public void deleteTask(int taskId) + { + taskRepository.deleteById(taskId); + } + + @Transactional + public boolean completeTask(int taskId) + { + Optional opt = taskRepository.findById(taskId); + if (opt.isEmpty()) + { + return false; + } + + Task task = opt.get(); + long reward = task.getReward(); + String rewardName = task.getName(); + + // Give reward to all users + List users = userRepository.findAll(); + for (User user : users) + { + // Add history entry + History history = new History(); + history.setUserId(user.getId()); + history.setTimestamp(Instant.now().getEpochSecond()); + history.setAmount(reward); + history.setDescription("Task completed: " + rewardName); + historyRepository.save(history); + + // Distribute reward + allowanceService.addDistributedReward(user.getId(), (int) reward); + } + + // Mark task as completed + task.setCompleted(Instant.now().getEpochSecond()); + taskRepository.save(task); + + return true; + } + + private TaskDto toDto(Task t) + { + return new TaskDto( + t.getId(), + t.getName(), + t.getReward() / 100.0, + t.getAssigned(), + t.getSchedule()); + } +} diff --git a/backend-spring/src/main/java/be/seeseepuff/allowanceplanner/service/TransferService.java b/backend-spring/src/main/java/be/seeseepuff/allowanceplanner/service/TransferService.java new file mode 100644 index 0000000..7b81ba0 --- /dev/null +++ b/backend-spring/src/main/java/be/seeseepuff/allowanceplanner/service/TransferService.java @@ -0,0 +1,102 @@ +package be.seeseepuff.allowanceplanner.service; + +import be.seeseepuff.allowanceplanner.dto.TransferRequest; +import be.seeseepuff.allowanceplanner.entity.Allowance; +import be.seeseepuff.allowanceplanner.repository.AllowanceRepository; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import java.util.Optional; + +@Service +public class TransferService +{ + private final AllowanceRepository allowanceRepository; + + public TransferService(AllowanceRepository allowanceRepository) + { + this.allowanceRepository = allowanceRepository; + } + + @Transactional + public TransferResult transfer(TransferRequest request) + { + if (request.from() == request.to()) + { + return TransferResult.success(); + } + + int amountCents = (int) Math.round(request.amount() * 100.0); + if (amountCents <= 0) + { + return TransferResult.badRequest("amount must be positive"); + } + + Optional fromOpt = allowanceRepository.findById(request.from()); + if (fromOpt.isEmpty()) + { + return TransferResult.notFound(); + } + + Optional toOpt = allowanceRepository.findById(request.to()); + if (toOpt.isEmpty()) + { + return TransferResult.notFound(); + } + + Allowance from = fromOpt.get(); + Allowance to = toOpt.get(); + + if (from.getUserId() != to.getUserId()) + { + return TransferResult.badRequest("Allowances do not belong to the same user"); + } + + long remainingTo = to.getTarget() - to.getBalance(); + if (remainingTo <= 0) + { + return TransferResult.badRequest("target already reached"); + } + + int transfer = amountCents; + if (transfer > remainingTo) + { + transfer = (int) remainingTo; + } + + if (from.getBalance() < transfer) + { + return TransferResult.badRequest("Insufficient funds in source allowance"); + } + + from.setBalance(from.getBalance() - transfer); + to.setBalance(to.getBalance() + transfer); + allowanceRepository.save(from); + allowanceRepository.save(to); + + return TransferResult.success(); + } + + public record TransferResult(Status status, String message) + { + public enum Status + { + SUCCESS, BAD_REQUEST, NOT_FOUND + } + + public static TransferResult success() + { + return new TransferResult(Status.SUCCESS, "Transfer successful"); + } + + public static TransferResult badRequest(String message) + { + return new TransferResult(Status.BAD_REQUEST, message); + } + + public static TransferResult notFound() + { + return new TransferResult(Status.NOT_FOUND, "Allowance not found"); + } + } +} diff --git a/backend-spring/src/main/java/be/seeseepuff/allowanceplanner/service/UserService.java b/backend-spring/src/main/java/be/seeseepuff/allowanceplanner/service/UserService.java new file mode 100644 index 0000000..ccc74cd --- /dev/null +++ b/backend-spring/src/main/java/be/seeseepuff/allowanceplanner/service/UserService.java @@ -0,0 +1,42 @@ +package be.seeseepuff.allowanceplanner.service; + +import be.seeseepuff.allowanceplanner.dto.*; +import be.seeseepuff.allowanceplanner.entity.User; +import be.seeseepuff.allowanceplanner.repository.UserRepository; +import org.springframework.stereotype.Service; + +import java.util.List; +import java.util.Optional; + +@Service +public class UserService +{ + private final UserRepository userRepository; + + public UserService(UserRepository userRepository) + { + this.userRepository = userRepository; + } + + public List getUsers() + { + return userRepository.findAll().stream() + .map(u -> new UserDto(u.getId(), u.getName())) + .toList(); + } + + public Optional getUser(int userId) + { + return userRepository.findById(userId) + .map(u -> + { + long totalAmount = userRepository.sumHistoryAmount(userId); + return new UserWithAllowanceDto(u.getId(), u.getName(), totalAmount / 100.0); + }); + } + + public boolean userExists(int userId) + { + return userRepository.existsById(userId); + } +} diff --git a/backend-spring/src/main/java/be/seeseepuff/allowanceplanner/util/ColourUtil.java b/backend-spring/src/main/java/be/seeseepuff/allowanceplanner/util/ColourUtil.java new file mode 100644 index 0000000..6fda514 --- /dev/null +++ b/backend-spring/src/main/java/be/seeseepuff/allowanceplanner/util/ColourUtil.java @@ -0,0 +1,42 @@ +package be.seeseepuff.allowanceplanner.util; + +public class ColourUtil +{ + private ColourUtil() + { + } + + public static int convertStringToColour(String colourStr) + { + if (colourStr == null || colourStr.isEmpty()) + { + return 0xFF0000; // Default colour + } + if (colourStr.charAt(0) == '#') + { + colourStr = colourStr.substring(1); + } + if (colourStr.length() != 6 && colourStr.length() != 3) + { + throw new IllegalArgumentException("colour must be a valid hex string"); + } + int colour = Integer.parseInt(colourStr, 16); + if (colourStr.length() == 3) + { + int r = (colour & 0xF00) >> 8; + int g = (colour & 0x0F0) >> 4; + int b = (colour & 0x00F); + colour = (r << 20) | (g << 12) | (b << 4); + } + return colour; + } + + public static String convertColourToString(Integer colour) + { + if (colour == null) + { + return ""; + } + return String.format("#%06X", colour); + } +} diff --git a/backend-spring/src/main/resources/application.properties b/backend-spring/src/main/resources/application.properties new file mode 100644 index 0000000..35e78e6 --- /dev/null +++ b/backend-spring/src/main/resources/application.properties @@ -0,0 +1,12 @@ +spring.application.name=allowance-planner + +spring.datasource.url=jdbc:postgresql://localhost:5432/allowance_planner +spring.datasource.username=postgres +spring.datasource.password=postgres + +spring.jpa.hibernate.ddl-auto=validate +spring.jpa.open-in-view=false + +spring.flyway.enabled=true + +server.port=8080 diff --git a/backend-spring/src/main/resources/db/migration/V1__initial.sql b/backend-spring/src/main/resources/db/migration/V1__initial.sql new file mode 100644 index 0000000..c956d03 --- /dev/null +++ b/backend-spring/src/main/resources/db/migration/V1__initial.sql @@ -0,0 +1,42 @@ +CREATE TABLE users +( + id SERIAL PRIMARY KEY, + name TEXT NOT NULL, + weight DOUBLE PRECISION NOT NULL DEFAULT 10.0, + balance BIGINT NOT NULL DEFAULT 0 +); + +CREATE TABLE history +( + id SERIAL PRIMARY KEY, + user_id INTEGER NOT NULL, + timestamp BIGINT NOT NULL, + amount BIGINT NOT NULL, + description TEXT +); + +CREATE TABLE allowances +( + id SERIAL PRIMARY KEY, + user_id INTEGER NOT NULL, + name TEXT NOT NULL, + target BIGINT NOT NULL, + balance BIGINT NOT NULL DEFAULT 0, + weight DOUBLE PRECISION NOT NULL, + colour INTEGER +); + +CREATE TABLE tasks +( + id SERIAL PRIMARY KEY, + name TEXT NOT NULL, + reward BIGINT NOT NULL, + assigned INTEGER, + schedule TEXT, + completed BIGINT, + next_run BIGINT +); + +INSERT INTO users (name) +VALUES ('Seeseemelk'), + ('Huffle'); diff --git a/backend-spring/src/main/resources/templates/index.html b/backend-spring/src/main/resources/templates/index.html new file mode 100644 index 0000000..a199188 --- /dev/null +++ b/backend-spring/src/main/resources/templates/index.html @@ -0,0 +1,122 @@ + + + + Allowance Planner 2000 + + + +

Allowance Planner 2000

+ +
+

Error

+

+
+ +
+

Users

+ + + + + +
+

Allowances

+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameProgressTargetWeightActions
Total + + () + + Mark as completed +
+
+ +

Tasks

+
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
NameAssignedRewardScheduleActions
+ None + + + Mark as completed +
+
+ +

History

+ + + + + + + + + + + + + +
TimestampAllowance
+
+
+ + diff --git a/backend-spring/src/test/java/be/seeseepuff/allowanceplanner/ApiTest.java b/backend-spring/src/test/java/be/seeseepuff/allowanceplanner/ApiTest.java new file mode 100644 index 0000000..1433976 --- /dev/null +++ b/backend-spring/src/test/java/be/seeseepuff/allowanceplanner/ApiTest.java @@ -0,0 +1,1242 @@ +package be.seeseepuff.allowanceplanner; + +import io.restassured.RestAssured; +import io.restassured.http.ContentType; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; +import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.boot.test.web.server.LocalServerPort; +import org.springframework.test.context.DynamicPropertyRegistry; +import org.springframework.test.context.DynamicPropertySource; +import org.testcontainers.containers.PostgreSQLContainer; +import org.testcontainers.junit.jupiter.Container; +import org.testcontainers.junit.jupiter.Testcontainers; + +import org.flywaydb.core.Flyway; +import org.springframework.beans.factory.annotation.Autowired; + +import java.time.Instant; +import java.util.List; +import java.util.Map; + +import static io.restassured.RestAssured.given; +import static org.hamcrest.Matchers.*; + +@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT) +@Testcontainers +class ApiTest +{ + private static final String TEST_HISTORY_NAME = "Test History"; + + @Container + static PostgreSQLContainer postgres = new PostgreSQLContainer<>("postgres:17") + .withDatabaseName("allowance_planner_test") + .withUsername("test") + .withPassword("test"); + + @LocalServerPort + int port; + + @Autowired + Flyway flyway; + + @DynamicPropertySource + static void configureProperties(DynamicPropertyRegistry registry) + { + registry.add("spring.datasource.url", postgres::getJdbcUrl); + registry.add("spring.datasource.username", postgres::getUsername); + registry.add("spring.datasource.password", postgres::getPassword); + registry.add("spring.flyway.clean-disabled", () -> "false"); + } + + @BeforeEach + void setUp() + { + RestAssured.port = port; + RestAssured.basePath = "/api"; + RestAssured.config = RestAssured.config() + .jsonConfig(io.restassured.config.JsonConfig.jsonConfig() + .numberReturnType(io.restassured.path.json.config.JsonPathConfig.NumberReturnType.DOUBLE)); + + // Clean and re-migrate the database before each test + flyway.clean(); + flyway.migrate(); + } + + // ---- User Tests ---- + + @Test + void getUsers() + { + given() + .when() + .get("/users") + .then() + .statusCode(200) + .body("$.size()", is(2)) + .body("[0].name", isA(String.class)) + .body("[1].name", isA(String.class)); + } + + @Test + void getUser() + { + given() + .when() + .get("/user/1") + .then() + .statusCode(200) + .body("name", is("Seeseemelk")) + .body("id", is(1)) + .body("allowance", is(0.0d)); + } + + @Test + void getUserUnknown() + { + given() + .when() + .get("/user/999") + .then() + .statusCode(404); + } + + @Test + void getUserBadId() + { + given() + .when() + .get("/user/bad-id") + .then() + .statusCode(400); + } + + // ---- Allowance Tests ---- + + @Test + void getUserAllowanceWhenNoAllowancePresent() + { + given() + .when() + .get("/user/1/allowance") + .then() + .statusCode(200) + .body("$.size()", is(1)) + .body("[0].id", is(0)); + } + + @Test + void getUserAllowance() + { + createAllowance(1, TEST_HISTORY_NAME, 5000, 10); + + given() + .when() + .get("/user/1/allowance") + .then() + .statusCode(200) + .body("$.size()", is(2)) + .body("[1].name", is(TEST_HISTORY_NAME)) + .body("[1].target", is(5000.0d)) + .body("[1].weight", is(10.0d)) + .body("[1].progress", is(0.0d)) + .body("[1]", not(hasKey("user_id"))); + } + + @Test + void getUserAllowanceNoUser() + { + given() + .when() + .get("/user/999/allowance") + .then() + .statusCode(404); + } + + @Test + void getUserAllowanceBadId() + { + given() + .when() + .get("/user/bad-id/allowance") + .then() + .statusCode(400); + } + + @Test + void createUserAllowance() + { + int allowanceId = createAllowance(1, TEST_HISTORY_NAME, 5000, 10); + + given() + .when() + .get("/user/1/allowance") + .then() + .statusCode(200) + .body("$.size()", is(2)) + .body("[1].id", is(allowanceId)) + .body("[1].name", is(TEST_HISTORY_NAME)) + .body("[1].target", is(5000.0d)) + .body("[1].weight", is(10.0d)) + .body("[1].progress", is(0.0d)); + } + + @Test + void createUserAllowanceNoUser() + { + given() + .contentType(ContentType.JSON) + .body(Map.of("name", TEST_HISTORY_NAME, "target", 5000, "weight", 10)) + .when() + .post("/user/999/allowance") + .then() + .statusCode(404); + } + + @Test + void createUserAllowanceInvalidInput() + { + // Empty name + given() + .contentType(ContentType.JSON) + .body(Map.of("name", "", "target", 5000, "weight", 10)) + .when() + .post("/user/1/allowance") + .then() + .statusCode(400); + + // Missing name + given() + .contentType(ContentType.JSON) + .body(Map.of("target", 5000)) + .when() + .post("/user/1/allowance") + .then() + .statusCode(400); + } + + @Test + void createUserAllowanceBadId() + { + given() + .contentType(ContentType.JSON) + .body(Map.of("name", TEST_HISTORY_NAME, "target", 5000, "weight", 10)) + .when() + .post("/user/bad-id/allowance") + .then() + .statusCode(400); + } + + @Test + void deleteUserAllowance() + { + int allowanceId = createAllowance(1, TEST_HISTORY_NAME, 1000, 5); + + given() + .when() + .delete("/user/1/allowance/" + allowanceId) + .then() + .statusCode(200) + .body("message", is("History deleted successfully")); + + given() + .when() + .get("/user/1/allowance") + .then() + .statusCode(200) + .body("$.size()", is(1)); + } + + @Test + void deleteUserRestAllowance() + { + given() + .when() + .delete("/user/1/allowance/0") + .then() + .statusCode(400); + } + + @Test + void deleteUserAllowanceNotFound() + { + given() + .when() + .delete("/user/1/allowance/999") + .then() + .statusCode(404) + .body("error", is("History not found")); + } + + @Test + void deleteUserAllowanceInvalidId() + { + given() + .when() + .delete("/user/1/allowance/invalid-id") + .then() + .statusCode(400) + .body("error", is("Invalid allowance ID")); + } + + // ---- Task Tests ---- + + @Test + void createTask() + { + // Without assigned user + int taskId = given() + .contentType(ContentType.JSON) + .body(Map.of("name", "Test Task", "reward", 100)) + .when() + .post("/tasks") + .then() + .statusCode(201) + .body("id", notNullValue()) + .extract().path("id"); + + given().when().get("/tasks").then().statusCode(200).body("$.size()", is(1)); + + given() + .when() + .get("/task/" + taskId) + .then() + .statusCode(200) + .body("id", is(taskId)) + .body("name", is("Test Task")) + .body("reward", is(100.0d)) + .body("assigned", nullValue()); + + // With assigned user + given() + .contentType(ContentType.JSON) + .body(Map.of("name", "Test Task Assigned", "reward", 200, "assigned", 1)) + .when() + .post("/tasks") + .then() + .statusCode(201) + .body("id", notNullValue()); + } + + @Test + void deleteTask() + { + int taskId = createTestTask(100); + + given().when().delete("/task/" + taskId).then().statusCode(200); + given().when().get("/task/" + taskId).then().statusCode(404); + } + + @Test + void deleteTaskNotFound() + { + given().when().delete("/task/1").then().statusCode(404); + } + + @Test + void createTaskNoName() + { + given() + .contentType(ContentType.JSON) + .body(Map.of("reward", 100)) + .when() + .post("/tasks") + .then() + .statusCode(400); + } + + @Test + void createTaskInvalidAssignedUser() + { + given() + .contentType(ContentType.JSON) + .body(Map.of("name", "Test Task Invalid User", "reward", 100, "assigned", 999)) + .when() + .post("/tasks") + .then() + .statusCode(404) + .body("error", is("User not found")); + } + + @Test + void createTaskInvalidRequestBody() + { + given() + .contentType(ContentType.JSON) + .body(Map.of("reward", 5000)) + .when() + .post("/tasks") + .then() + .statusCode(400); + } + + @Test + void getTaskWhenNoTasks() + { + given() + .when() + .get("/tasks") + .then() + .statusCode(200) + .body("$.size()", is(0)); + } + + @Test + void getTasksWhenTasks() + { + createTestTask(100); + + given() + .when() + .get("/tasks") + .then() + .statusCode(200) + .body("$.size()", is(1)) + .body("[0].name", is("Test Task")) + .body("[0].reward", is(100.0d)) + .body("[0].assigned", nullValue()); + } + + @Test + void getTask() + { + int taskId = createTestTask(100); + + given() + .when() + .get("/task/" + taskId) + .then() + .statusCode(200) + .body("id", is(taskId)) + .body("name", is("Test Task")) + .body("reward", is(100.0d)) + .body("assigned", nullValue()); + } + + @Test + void getTaskInvalidId() + { + createTestTask(100); + // Task ID won't be found since we use auto-increment and there's only one + given().when().get("/task/99999").then().statusCode(404); + } + + @Test + void getTaskBadId() + { + createTestTask(100); + given().when().get("/task/invalid").then().statusCode(400); + } + + @Test + void putTaskModifiesTask() + { + int taskId = createTestTask(100); + + given() + .contentType(ContentType.JSON) + .body(Map.of("name", "Updated Task", "reward", 100)) + .when() + .put("/task/" + taskId) + .then() + .statusCode(200); + + given() + .when() + .get("/task/" + taskId) + .then() + .statusCode(200) + .body("id", is(taskId)) + .body("name", is("Updated Task")) + .body("reward", is(100.0d)); + } + + @Test + void putTaskInvalidTaskId() + { + createTestTask(100); + + given() + .contentType(ContentType.JSON) + .body(Map.of("name", "Updated Task")) + .when() + .put("/task/999") + .then() + .statusCode(404); + } + + // ---- History Tests ---- + + @Test + void postHistory() + { + given() + .contentType(ContentType.JSON) + .body(Map.of("allowance", 100, "description", "Add a 100")) + .when() + .post("/user/1/history") + .then() + .statusCode(200); + + given() + .contentType(ContentType.JSON) + .body(Map.of("allowance", 20, "description", "Lolol")) + .when() + .post("/user/1/history") + .then() + .statusCode(200); + + given() + .contentType(ContentType.JSON) + .body(Map.of("allowance", -10, "description", "Subtracting")) + .when() + .post("/user/1/history") + .then() + .statusCode(200); + + given() + .when() + .get("/user/1") + .then() + .statusCode(200) + .body("allowance", is(110.0d)); + } + + @Test + void postHistoryInvalidUserId() + { + given() + .contentType(ContentType.JSON) + .body(Map.of("allowance", 100, "description", "Good")) + .when() + .post("/user/999/history") + .then() + .statusCode(404); + } + + @Test + void postHistoryInvalidDescription() + { + given() + .contentType(ContentType.JSON) + .body(Map.of("allowance", 100)) + .when() + .post("/user/1/history") + .then() + .statusCode(400); + } + + @Test + void getHistory() + { + Instant before = Instant.now().minusSeconds(2); + Instant after = Instant.now().plusSeconds(2); + + given() + .contentType(ContentType.JSON) + .body(Map.of("allowance", 100, "description", "Add 100")) + .when() + .post("/user/1/history") + .then() + .statusCode(200); + given() + .contentType(ContentType.JSON) + .body(Map.of("allowance", 20, "description", "Add 20")) + .when() + .post("/user/1/history") + .then() + .statusCode(200); + given() + .contentType(ContentType.JSON) + .body(Map.of("allowance", -10, "description", "Subtract 10")) + .when() + .post("/user/1/history") + .then() + .statusCode(200); + + // History is returned newest first (by ID desc) + given() + .when() + .get("/user/1/history") + .then() + .statusCode(200) + .body("$.size()", is(3)) + .body("[0].allowance", is(-10.0d)) + .body("[0].description", is("Subtract 10")) + .body("[1].allowance", is(20.0d)) + .body("[1].description", is("Add 20")) + .body("[2].allowance", is(100.0d)) + .body("[2].description", is("Add 100")); + } + + // ---- Allowance By ID Tests ---- + + @Test + void getUserAllowanceById() + { + int allowanceId = createAllowanceWithColour(1, TEST_HISTORY_NAME, 5000, 10, "#FF5733"); + + given() + .when() + .get("/user/1/allowance/" + allowanceId) + .then() + .statusCode(200) + .body("id", is(allowanceId)) + .body("name", is(TEST_HISTORY_NAME)) + .body("target", is(5000.0d)) + .body("weight", is(10.0d)) + .body("progress", is(0.0d)) + .body("colour", is("#FF5733")); + + given() + .when() + .get("/user/1/allowance") + .then() + .statusCode(200) + .body("$.size()", is(2)) + .body("[1].id", is(allowanceId)) + .body("[1].colour", is("#FF5733")); + } + + @Test + void getUserByAllowanceIdInvalidAllowance() + { + given().when().get("/user/1/allowance/9999").then().statusCode(404); + } + + @Test + void getUserByAllowanceByIdInvalidUserId() + { + given().when().get("/user/999/allowance/1").then().statusCode(404); + } + + @Test + void getUserByAllowanceByIdBadUserId() + { + given().when().get("/user/bad/allowance/1").then().statusCode(400); + } + + @Test + void getUserByAllowanceByIdBadAllowanceId() + { + given().when().get("/user/1/allowance/bad").then().statusCode(400); + } + + @Test + void putAllowanceById() + { + int allowanceId = createAllowanceWithColour(1, TEST_HISTORY_NAME, 5000, 10, "#FF5733"); + + given() + .contentType(ContentType.JSON) + .body(Map.of("name", "Updated Allowance", "target", 6000, "weight", 15, "colour", "#3357FF")) + .when() + .put("/user/1/allowance/" + allowanceId) + .then() + .statusCode(200); + + given() + .when() + .get("/user/1/allowance/" + allowanceId) + .then() + .statusCode(200) + .body("id", is(allowanceId)) + .body("name", is("Updated Allowance")) + .body("target", is(6000.0d)) + .body("weight", is(15.0d)) + .body("colour", is("#3357FF")); + } + + // ---- Complete Task Tests ---- + + @Test + void completeTask() + { + int taskId = createTestTask(101); + + given().when().get("/tasks").then().statusCode(200).body("$.size()", is(1)); + + // Update rest allowance weight + given() + .contentType(ContentType.JSON) + .body(Map.of("name", "", "target", 0, "weight", 25, "colour", "")) + .when() + .put("/user/1/allowance/0") + .then() + .statusCode(200); + + // Create two allowance goals + createAllowance(1, "Test Allowance 1", 100, 50); + createAllowance(1, "Test Allowance 1", 10, 25); + + // Complete the task + given().when().post("/task/" + taskId + "/complete").then().statusCode(200); + + // Verify task is completed + given().when().get("/task/" + taskId).then().statusCode(404); + + // Verify allowances for user 1 + given() + .when() + .get("/user/1/allowance") + .then() + .statusCode(200) + .body("$.size()", is(3)) + .body("[0].id", is(0)) + .body("[0].progress", closeTo(30.34, 0.01)) + .body("[1].progress", closeTo(60.66, 0.01)) + .body("[2].progress", closeTo(10.0, 0.01)); + + // Verify allowances for user 2 + given() + .when() + .get("/user/2/allowance") + .then() + .statusCode(200) + .body("$.size()", is(1)) + .body("[0].id", is(0)) + .body("[0].progress", closeTo(101.0, 0.01)); + + // Verify history for both users + for (int userId = 1; userId <= 2; userId++) + { + given() + .when() + .get("/user/" + userId + "/history") + .then() + .statusCode(200) + .body("$.size()", is(1)) + .body("[0].allowance", closeTo(101.0, 0.01)); + } + } + + @Test + void completeTaskWithNoWeights() + { + int taskId = createTestTask(101); + + given().when().get("/tasks").then().statusCode(200).body("$.size()", is(1)); + + // Ensure main allowance has no weight + given() + .contentType(ContentType.JSON) + .body(Map.of("name", "", "target", 0, "weight", 0, "colour", "")) + .when() + .put("/user/1/allowance/0") + .then() + .statusCode(200); + + // Complete the task + given().when().post("/task/" + taskId + "/complete").then().statusCode(200); + + // Verify task is completed + given().when().get("/task/" + taskId).then().statusCode(404); + + // Verify allowances for user 1 + given() + .when() + .get("/user/1/allowance") + .then() + .statusCode(200) + .body("$.size()", is(1)) + .body("[0].id", is(0)) + .body("[0].progress", closeTo(101.0, 0.01)); + + // Verify allowances for user 2 + given() + .when() + .get("/user/2/allowance") + .then() + .statusCode(200) + .body("$.size()", is(1)) + .body("[0].id", is(0)) + .body("[0].progress", closeTo(101.0, 0.01)); + } + + @Test + void completeTaskAllowanceWeightsSumTo0() + { + int taskId = createTestTask(101); + + given().when().get("/tasks").then().statusCode(200).body("$.size()", is(1)); + + // Update rest allowance to 0 weight + given() + .contentType(ContentType.JSON) + .body(Map.of("name", "", "target", 0, "weight", 0, "colour", "")) + .when() + .put("/user/1/allowance/0") + .then() + .statusCode(200); + + // Create allowance with 0 weight + createAllowance(1, "Test Allowance 1", 1000, 0); + + // Complete the task + given().when().post("/task/" + taskId + "/complete").then().statusCode(200); + + // Verify allowances for user 1 + given() + .when() + .get("/user/1/allowance") + .then() + .statusCode(200) + .body("$.size()", is(2)) + .body("[0].id", is(0)) + .body("[0].progress", closeTo(101.0, 0.01)) + .body("[1].progress", closeTo(0.0, 0.01)); + } + + @Test + void completeTaskInvalidId() + { + given().when().post("/task/999/complete").then().statusCode(404); + } + + // ---- Complete Allowance Tests ---- + + @Test + void completeAllowance() + { + createTestTask(100); + createAllowance(1, "Test Allowance 1", 100, 50); + + // Update base allowance to 0 weight + given() + .contentType(ContentType.JSON) + .body(Map.of("name", "", "target", 0, "weight", 0, "colour", "")) + .when() + .put("/user/1/allowance/0") + .then() + .statusCode(200); + + // Complete the task + given().when().post("/task/1/complete").then().statusCode(200); + + // Get the allowance ID (first named allowance) + int allowanceId = given() + .when() + .get("/user/1/allowance") + .then() + .statusCode(200) + .extract() + .path("[1].id"); + + // Complete allowance + given().when().post("/user/1/allowance/" + allowanceId + "/complete").then().statusCode(200); + + // Verify allowance no longer exists + given().when().get("/user/1/allowance/" + allowanceId).then().statusCode(404); + + // Verify history (newest first) + given() + .when() + .get("/user/1/history") + .then() + .statusCode(200) + .body("$.size()", is(2)) + .body("[0].allowance", closeTo(-100.0, 0.01)) + .body("[0].description", is("Allowance completed: Test Allowance 1")) + .body("[1].allowance", closeTo(100.0, 0.01)) + .body("[1].description", is("Task completed: Test Task")); + } + + @Test + void completeAllowanceInvalidUserId() + { + given().when().post("/user/999/allowance/1/complete").then().statusCode(404); + } + + @Test + void completeAllowanceInvalidAllowanceId() + { + given().when().post("/user/1/allowance/999/complete").then().statusCode(404); + } + + // ---- Bulk Update Tests ---- + + @Test + void putBulkAllowance() + { + int id1 = createAllowance(1, "Test Allowance 1", 1000, 1); + int id2 = createAllowance(1, "Test Allowance 2", 1000, 2); + + given() + .contentType(ContentType.JSON) + .body(List.of( + Map.of("id", id1, "weight", 5), + Map.of("id", 0, "weight", 99), + Map.of("id", id2, "weight", 10))) + .when() + .put("/user/1/allowance") + .then() + .statusCode(200); + + given() + .when() + .get("/user/1/allowance") + .then() + .statusCode(200) + .body("$.size()", is(3)) + .body("[0].id", is(0)) + .body("[0].weight", closeTo(99.0, 0.01)) + .body("[1].id", is(id1)) + .body("[1].weight", closeTo(5.0, 0.01)) + .body("[2].id", is(id2)) + .body("[2].weight", closeTo(10.0, 0.01)); + } + + // ---- Add Allowance Amount Tests ---- + + @Test + void addAllowanceSimple() + { + int allowanceId = createAllowance(1, "Test Allowance 1", 1000, 1); + + given() + .contentType(ContentType.JSON) + .body(Map.of("amount", 10, "description", "Added to allowance 1")) + .when() + .post("/user/1/allowance/" + allowanceId + "/add") + .then() + .statusCode(200); + + given() + .when() + .get("/user/1/allowance") + .then() + .statusCode(200) + .body("[1].id", is(allowanceId)) + .body("[1].progress", closeTo(10.0, 0.01)); + + given() + .when() + .get("/user/1/history") + .then() + .statusCode(200) + .body("$.size()", is(1)) + .body("[0].allowance", closeTo(10.0, 0.01)) + .body("[0].description", is("Added to allowance 1")); + } + + @Test + void addAllowanceWithSpillage() + { + int id1 = createAllowance(1, "Test Allowance 1", 5, 1); + int id2 = createAllowance(1, "Test Allowance 2", 5, 1); + given() + .contentType(ContentType.JSON) + .body(Map.of("name", "", "target", 0, "weight", 1, "colour", "")) + .when() + .put("/user/1/allowance/0") + .then() + .statusCode(200); + + given() + .contentType(ContentType.JSON) + .body(Map.of("amount", 10, "description", "Added to allowance 1")) + .when() + .post("/user/1/allowance/" + id1 + "/add") + .then() + .statusCode(200); + + given() + .when() + .get("/user/1/allowance") + .then() + .statusCode(200) + .body("[1].id", is(id1)) + .body("[1].progress", closeTo(5.0, 0.01)) + .body("[2].id", is(id2)) + .body("[2].progress", closeTo(2.5, 0.01)) + .body("[0].id", is(0)) + .body("[0].progress", closeTo(2.5, 0.01)); + + given() + .when() + .get("/user/1/history") + .then() + .statusCode(200) + .body("$.size()", is(1)) + .body("[0].allowance", closeTo(10.0, 0.01)) + .body("[0].description", is("Added to allowance 1")); + } + + @Test + void addAllowanceIdZero() + { + createAllowance(1, "Test Allowance 1", 1000, 1); + + given() + .contentType(ContentType.JSON) + .body(Map.of("amount", 10, "description", "Added to allowance 1")) + .when() + .post("/user/1/allowance/0/add") + .then() + .statusCode(200); + + given() + .when() + .get("/user/1/allowance") + .then() + .statusCode(200) + .body("[0].id", is(0)) + .body("[0].progress", closeTo(10.0, 0.01)); + + given() + .when() + .get("/user/1/history") + .then() + .statusCode(200) + .body("$.size()", is(1)) + .body("[0].allowance", closeTo(10.0, 0.01)) + .body("[0].description", is("Added to allowance 1")); + } + + @Test + void subtractAllowanceSimple() + { + int allowanceId = createAllowance(1, "Test Allowance 1", 1000, 1); + + given() + .contentType(ContentType.JSON) + .body(Map.of("amount", 10, "description", "Added to allowance 1")) + .when() + .post("/user/1/allowance/" + allowanceId + "/add") + .then() + .statusCode(200); + + given() + .contentType(ContentType.JSON) + .body(Map.of("amount", -2.5, "description", "Added to allowance 1")) + .when() + .post("/user/1/allowance/" + allowanceId + "/add") + .then() + .statusCode(200); + + given() + .when() + .get("/user/1/allowance") + .then() + .statusCode(200) + .body("[1].id", is(allowanceId)) + .body("[1].progress", closeTo(7.5, 0.01)); + + given() + .when() + .get("/user/1/history") + .then() + .statusCode(200) + .body("$.size()", is(2)) + .body("[0].allowance", closeTo(-2.5, 0.01)) + .body("[0].description", is("Added to allowance 1")) + .body("[1].allowance", closeTo(10.0, 0.01)) + .body("[1].description", is("Added to allowance 1")); + } + + @Test + void subtractAllowanceIdZero() + { + createAllowance(1, "Test Allowance 1", 1000, 1); + + given() + .contentType(ContentType.JSON) + .body(Map.of("amount", 10, "description", "Added to allowance 1")) + .when() + .post("/user/1/allowance/0/add") + .then() + .statusCode(200); + + given() + .contentType(ContentType.JSON) + .body(Map.of("amount", -2.5, "description", "Added to allowance 1")) + .when() + .post("/user/1/allowance/0/add") + .then() + .statusCode(200); + + given() + .when() + .get("/user/1/allowance") + .then() + .statusCode(200) + .body("[0].id", is(0)) + .body("[0].progress", closeTo(7.5, 0.01)); + + given() + .when() + .get("/user/1/history") + .then() + .statusCode(200) + .body("$.size()", is(2)) + .body("[0].allowance", closeTo(-2.5, 0.01)) + .body("[0].description", is("Added to allowance 1")) + .body("[1].allowance", closeTo(10.0, 0.01)) + .body("[1].description", is("Added to allowance 1")); + } + + // ---- Transfer Tests ---- + + @Test + void transferSuccessful() + { + int id1 = createAllowance(1, "From Allowance", 100, 1); + int id2 = createAllowance(1, "To Allowance", 100, 1); + + // Add 30 to allowance 1 + given() + .contentType(ContentType.JSON) + .body(Map.of("amount", 30, "description", "funds")) + .when() + .post("/user/1/allowance/" + id1 + "/add") + .then() + .statusCode(200); + + // Transfer 10 from 1 to 2 + given() + .contentType(ContentType.JSON) + .body(Map.of("from", id1, "to", id2, "amount", 10)) + .when() + .post("/transfer") + .then() + .statusCode(200) + .body("message", is("Transfer successful")); + + given() + .when() + .get("/user/1/allowance") + .then() + .statusCode(200) + .body("[1].progress", closeTo(20.0, 0.01)) + .body("[2].progress", closeTo(10.0, 0.01)); + } + + @Test + void transferCapsAtTarget() + { + int id1 = createAllowance(1, "From Allowance", 100, 1); + int id2 = createAllowance(1, "To Allowance", 5, 1); + + // Add 10 to allowance 1 + given() + .contentType(ContentType.JSON) + .body(Map.of("amount", 10, "description", "funds")) + .when() + .post("/user/1/allowance/" + id1 + "/add") + .then() + .statusCode(200); + + // Transfer 10, but to only needs 5 + given() + .contentType(ContentType.JSON) + .body(Map.of("from", id1, "to", id2, "amount", 10)) + .when() + .post("/transfer") + .then() + .statusCode(200); + + given() + .when() + .get("/user/1/allowance") + .then() + .statusCode(200) + .body("[1].progress", closeTo(5.0, 0.01)) + .body("[2].progress", closeTo(5.0, 0.01)); + } + + @Test + void transferDifferentUsersFails() + { + int id1 = createAllowance(1, "User1 Allowance", 100, 1); + + // Create allowance for user 2 + int id2 = createAllowance(2, "User2 Allowance", 100, 1); + + // Add to user1 allowance + given() + .contentType(ContentType.JSON) + .body(Map.of("amount", 10, "description", "funds")) + .when() + .post("/user/1/allowance/" + id1 + "/add") + .then() + .statusCode(200); + + // Transfer between different users + given() + .contentType(ContentType.JSON) + .body(Map.of("from", id1, "to", id2, "amount", 5)) + .when() + .post("/transfer") + .then() + .statusCode(400); + } + + @Test + void transferInsufficientFunds() + { + int id1 = createAllowance(1, "From Allowance", 100, 1); + int id2 = createAllowance(1, "To Allowance", 100, 1); + + given() + .contentType(ContentType.JSON) + .body(Map.of("from", id1, "to", id2, "amount", 10)) + .when() + .post("/transfer") + .then() + .statusCode(400) + .body("error", containsStringIgnoringCase("insufficient")); + } + + @Test + void transferNotFound() + { + given() + .contentType(ContentType.JSON) + .body(Map.of("from", 999, "to", 1000, "amount", 1)) + .when() + .post("/transfer") + .then() + .statusCode(404); + } + + // ---- Helpers ---- + + private int createTestTask(int reward) + { + return given() + .contentType(ContentType.JSON) + .body(Map.of("name", "Test Task", "reward", reward)) + .when() + .post("/tasks") + .then() + .statusCode(201) + .extract() + .path("id"); + } + + private int createAllowance(int userId, String name, double target, double weight) + { + return given() + .contentType(ContentType.JSON) + .body(Map.of("name", name, "target", target, "weight", weight)) + .when() + .post("/user/" + userId + "/allowance") + .then() + .statusCode(201) + .extract() + .path("id"); + } + + private int createAllowanceWithColour(int userId, String name, double target, double weight, String colour) + { + return given() + .contentType(ContentType.JSON) + .body(Map.of("name", name, "target", target, "weight", weight, "colour", colour)) + .when() + .post("/user/" + userId + "/allowance") + .then() + .statusCode(201) + .extract() + .path("id"); + } +} diff --git a/backend-spring/src/test/java/be/seeseepuff/allowanceplanner/ColourUtilTest.java b/backend-spring/src/test/java/be/seeseepuff/allowanceplanner/ColourUtilTest.java new file mode 100644 index 0000000..2e7766a --- /dev/null +++ b/backend-spring/src/test/java/be/seeseepuff/allowanceplanner/ColourUtilTest.java @@ -0,0 +1,33 @@ +package be.seeseepuff.allowanceplanner; + +import be.seeseepuff.allowanceplanner.util.ColourUtil; +import org.junit.jupiter.api.Test; + +import static org.junit.jupiter.api.Assertions.assertEquals; + +class ColourUtilTest +{ + @Test + void convertStringToColourWithSign() + { + assertEquals(0x123456, ColourUtil.convertStringToColour("#123456")); + } + + @Test + void convertStringToColourWithoutSign() + { + assertEquals(0x123456, ColourUtil.convertStringToColour("123456")); + } + + @Test + void convertStringToColourWithSignThreeDigits() + { + assertEquals(0xA0B0C0, ColourUtil.convertStringToColour("#ABC")); + } + + @Test + void convertStringToColourWithoutSignThreeDigits() + { + assertEquals(0xA0B0C0, ColourUtil.convertStringToColour("ABC")); + } +}