From c7bf0da4e67a98ed4d8f094838438124f25495f5 Mon Sep 17 00:00:00 2001 From: grayTerminal-sh Date: Sat, 18 Jul 2026 19:18:51 +0200 Subject: [PATCH] feat: persist evidence records --- Makefile | 18 +- database/schema_v2.sql | 105 ++ include/dao/evidence_dao.h | 142 +++ include/database/database.h | 20 + include/database/schema.h | 23 + include/database/statement.h | 17 - labfy-investigation | Bin 349304 -> 372864 bytes src/core/investigation_session.c | 27 + src/dao/evidence_dao.c | 1482 +++++++++++++++++++++++ src/database/database.c | 387 +++++- src/database/schema.c | 118 +- tests/test_database | Bin 41112 -> 58728 bytes tests/test_database.c | 878 +++++++++++++- tests/test_error | Bin 32688 -> 37248 bytes tests/test_evidence_dao | Bin 0 -> 83832 bytes tests/test_evidence_dao.c | 1773 ++++++++++++++++++++++++++++ tests/test_evidence_record | Bin 41184 -> 41184 bytes tests/test_evidence_record.c | 1 - tests/test_investigation_dao | Bin 42288 -> 46840 bytes tests/test_investigation_project | Bin 51616 -> 60272 bytes tests/test_investigation_session | Bin 56880 -> 57336 bytes tests/test_investigation_session.c | 2 +- tests/test_statement | Bin 37456 -> 42008 bytes tests/test_transaction | Bin 32760 -> 33216 bytes 24 files changed, 4940 insertions(+), 53 deletions(-) create mode 100644 database/schema_v2.sql create mode 100644 include/dao/evidence_dao.h create mode 100644 src/dao/evidence_dao.c create mode 100755 tests/test_evidence_dao create mode 100644 tests/test_evidence_dao.c diff --git a/Makefile b/Makefile index a8e0ce1..809146d 100644 --- a/Makefile +++ b/Makefile @@ -43,6 +43,7 @@ TEST_INVESTIGATION_RECORD = tests/test_investigation_record TEST_EVIDENCE_RECORD := tests/test_evidence_record TEST_EVIDENCE_RECORD := tests/test_evidence_record TEST_INVESTIGATION_DAO := tests/test_investigation_dao +TEST_EVIDENCE_DAO := tests/test_evidence_dao TEST_INVESTIGATION_SESSION := tests/test_investigation_session TEST_BACKGROUND_TASK := tests/test_background_task TEST_TASK_MANAGER := tests/test_task_manager @@ -90,7 +91,8 @@ $(TEST_DATABASE): \ src/database/database.c \ src/database/transaction.c \ src/database/statement.c \ - src/database/schema.c + src/database/schema.c \ + src/database/error.c $(CC) $(TEST_CFLAGS) $^ -o $@ $(TEST_LDFLAGS) -lsqlite3 $(TEST_STATEMENT): \ @@ -140,6 +142,17 @@ $(TEST_INVESTIGATION_DAO): \ src/database/error.c $(CC) $(TEST_CFLAGS) $^ -o $@ $(TEST_LDFLAGS) -lsqlite3 +$(TEST_EVIDENCE_DAO): \ + tests/test_evidence_dao.c \ + src/dao/evidence_dao.c \ + src/models/evidence_record.c \ + src/database/database.c \ + src/database/schema.c \ + src/database/statement.c \ + src/database/transaction.c \ + src/database/error.c + $(CC) $(TEST_CFLAGS) $^ -o $@ $(TEST_LDFLAGS) -lsqlite3 + $(TEST_INVESTIGATION_SESSION): \ tests/test_investigation_session.c \ src/core/investigation_session.c \ @@ -211,6 +224,7 @@ test: \ $(TEST_INVESTIGATION_RECORD) \ $(TEST_EVIDENCE_RECORD) \ $(TEST_INVESTIGATION_DAO) \ + $(TEST_EVIDENCE_DAO) \ $(TEST_INVESTIGATION_SESSION) \ $(TEST_BACKGROUND_TASK) \ $(TEST_TASK_MANAGER) \ @@ -231,6 +245,7 @@ test: \ @$(TEST_INVESTIGATION_RECORD) @$(TEST_EVIDENCE_RECORD) @$(TEST_INVESTIGATION_DAO) + @$(TEST_EVIDENCE_DAO) @$(TEST_INVESTIGATION_SESSION) @$(TEST_BACKGROUND_TASK) @$(TEST_TASK_MANAGER) @@ -260,6 +275,7 @@ clean: $(TEST_INVESTIGATION_RECORD) \ $(TEST_EVIDENCE_RECORD) \ $(TEST_INVESTIGATION_DAO) \ + $(TEST_EVIDENCE_DAO) \ $(TEST_INVESTIGATION_SESSION) \ $(TEST_BACKGROUND_TASK) \ $(TEST_TASK_MANAGER) \ diff --git a/database/schema_v2.sql b/database/schema_v2.sql new file mode 100644 index 0000000..f579833 --- /dev/null +++ b/database/schema_v2.sql @@ -0,0 +1,105 @@ +/****************************************************************************** + * Labfy Investigation + * + * Migration du schéma SQLite V1 vers V2 + ******************************************************************************/ + +/* + * Nom du fichier tel qu’il existait avant son import. + * + * La colonne name existante conserve le nom interne utilisé dans + * l’arborescence de l’enquête. + */ +ALTER TABLE preuves +ADD COLUMN original_name TEXT; + +/* + * Date déclarée de collecte de la preuve. + * + * Elle est distincte de : + * + * - file_created_at : date technique connue du fichier ; + * - imported_at : date d’import dans l’enquête. + */ +ALTER TABLE preuves +ADD COLUMN collected_at TEXT; + +/* + * Description textuelle initiale de la provenance. + * + * Une future évolution pourra relier une preuve à la table sources + * avec un identifiant métier. + */ +ALTER TABLE preuves +ADD COLUMN source TEXT; + +/* + * Correspondance avec EvidenceIntegrityStatus : + * + * 0 = UNKNOWN + * 1 = VALID + * 2 = MISSING + * 3 = MODIFIED + * 4 = ERROR + */ +ALTER TABLE preuves +ADD COLUMN integrity_status INTEGER NOT NULL DEFAULT 0 +CHECK ( + integrity_status BETWEEN 0 AND 4 +); + +/* + * Les éventuelles preuves V1 utilisent leur ancien nom visible comme + * nom original afin de rester lisibles après migration. + */ +UPDATE preuves +SET original_name = name +WHERE original_name IS NULL + OR length(trim(original_name)) = 0; + +CREATE INDEX idx_preuves_imported_at +ON preuves(imported_at); + +/* + * SQLite ne permet pas d’ajouter directement une contrainte NOT NULL + * à une colonne ajoutée lorsque des lignes peuvent déjà exister. + * + * Ces triggers renforcent donc les insertions et modifications V2. + */ +CREATE TRIGGER preuves_v2_validate_insert +BEFORE INSERT ON preuves +FOR EACH ROW +WHEN + NEW.original_name IS NULL + OR length(trim(NEW.original_name)) = 0 + OR NEW.size_bytes IS NULL + OR NEW.size_bytes < 0 + OR NEW.sha256 IS NULL + OR length(NEW.sha256) != 64 + OR NEW.sha256 != lower(NEW.sha256) + OR NEW.integrity_status NOT BETWEEN 0 AND 4 +BEGIN + SELECT RAISE( + ABORT, + 'La preuve ne respecte pas les contraintes du schéma V2.' + ); +END; + +CREATE TRIGGER preuves_v2_validate_update +BEFORE UPDATE ON preuves +FOR EACH ROW +WHEN + NEW.original_name IS NULL + OR length(trim(NEW.original_name)) = 0 + OR NEW.size_bytes IS NULL + OR NEW.size_bytes < 0 + OR NEW.sha256 IS NULL + OR length(NEW.sha256) != 64 + OR NEW.sha256 != lower(NEW.sha256) + OR NEW.integrity_status NOT BETWEEN 0 AND 4 +BEGIN + SELECT RAISE( + ABORT, + 'La preuve ne respecte pas les contraintes du schéma V2.' + ); +END; diff --git a/include/dao/evidence_dao.h b/include/dao/evidence_dao.h new file mode 100644 index 0000000..6e8ac78 --- /dev/null +++ b/include/dao/evidence_dao.h @@ -0,0 +1,142 @@ +/****************************************************************************** + * @file evidence_dao.h + * @brief Persistance des preuves numériques dans SQLite. + ******************************************************************************/ + +#ifndef LABFY_INVESTIGATION_EVIDENCE_DAO_H +#define LABFY_INVESTIGATION_EVIDENCE_DAO_H + +#include "database/database.h" +#include "models/evidence_record.h" + +#include + +/** + * @brief Catégories d’erreurs du DAO des preuves. + */ +typedef enum +{ + EVIDENCE_DAO_ERROR_INVALID_ARGUMENT, + EVIDENCE_DAO_ERROR_MEMORY, + EVIDENCE_DAO_ERROR_PREPARE, + EVIDENCE_DAO_ERROR_BIND, + EVIDENCE_DAO_ERROR_EXECUTE, + EVIDENCE_DAO_ERROR_CONSTRAINT, + EVIDENCE_DAO_ERROR_READ, + EVIDENCE_DAO_ERROR_MODEL, + EVIDENCE_DAO_ERROR_SCHEMA, + EVIDENCE_DAO_ERROR_RANGE +} EvidenceDaoError; + +/** + * @brief Domaine d’erreurs du DAO des preuves. + */ +#define EVIDENCE_DAO_ERROR \ + evidence_dao_error_quark() + +/** + * @brief Retourne le domaine d’erreurs du DAO des preuves. + */ +GQuark evidence_dao_error_quark(void); + +/** + * @brief DAO opaque donnant accès aux preuves persistées. + * + * L’objet emprunte la connexion Database reçue lors de sa création. + */ +typedef struct EvidenceDao EvidenceDao; + +/** + * @brief Crée un DAO utilisant une connexion Database existante. + * + * La connexion est empruntée et doit rester valide pendant toute la durée + * de vie du DAO. + * + * @param database Connexion ouverte. + * @param error Adresse recevant une éventuelle erreur. + * + * @return Nouveau DAO, ou NULL en cas d’échec. + */ +EvidenceDao *evidence_dao_new( + Database *database, + GError **error +); + +/** + * @brief Libère le DAO. + * + * La connexion Database empruntée n’est pas fermée. + * Cette fonction accepte NULL. + * + * @param evidence_dao DAO à libérer. + */ +void evidence_dao_free( + EvidenceDao *evidence_dao +); + +/** + * @brief Insère une nouvelle preuve. + * + * Aucun enregistrement existant n’est remplacé ou modifié. + * + * @param evidence_dao DAO valide. + * @param evidence_record Preuve empruntée. + * @param error Adresse recevant une éventuelle erreur. + * + * @return TRUE si l’insertion réussit, sinon FALSE. + */ +gboolean evidence_dao_insert( + EvidenceDao *evidence_dao, + const EvidenceRecord *evidence_record, + GError **error +); + +/** + * @brief Recherche une preuve par son identifiant. + * + * Une preuve absente retourne NULL sans produire d’erreur. + * + * @param evidence_dao DAO valide. + * @param identifier Identifiant UUID recherché. + * @param error Adresse recevant une éventuelle erreur. + * + * @return Nouveau modèle possédé par l’appelant, ou NULL. + */ +EvidenceRecord *evidence_dao_find_by_identifier( + EvidenceDao *evidence_dao, + const char *identifier, + GError **error +); + +/** + * @brief Charge toutes les preuves dans un ordre déterministe. + * + * Le tableau retourné utilise evidence_record_free() comme fonction + * de destruction. + * + * @param evidence_dao DAO valide. + * @param error Adresse recevant une éventuelle erreur. + * + * @return Nouveau GPtrArray, ou NULL en cas d’échec. + */ +GPtrArray *evidence_dao_list_all( + EvidenceDao *evidence_dao, + GError **error +); + +/** + * @brief Compte les preuves persistées. + * + * @param evidence_dao DAO valide. + * @param out_count Destination du nombre de preuves. + * @param error Adresse recevant une éventuelle erreur. + * + * @return TRUE si le comptage réussit, sinon FALSE. + */ +gboolean evidence_dao_count( + EvidenceDao *evidence_dao, + guint64 *out_count, + GError **error +); + +#endif diff --git a/include/database/database.h b/include/database/database.h index d80e87c..221aab6 100644 --- a/include/database/database.h +++ b/include/database/database.h @@ -42,6 +42,26 @@ void database_close( Database *database ); +/** + * @brief Met à jour une base ouverte vers la dernière version du schéma. + * + * La fonction : + * + * - lit metadata.schema_version ; + * - applique chaque migration manquante dans une transaction ; + * - met à jour la version uniquement après une migration réussie ; + * - ne modifie rien lorsque la base est déjà à jour. + * + * La fonction refuse une migration lorsqu’une transaction est déjà active. + * + * @param database Connexion Database ouverte. + * + * @return true si la base est à jour, sinon false. + */ +bool database_migrate_to_latest( + Database *database +); + /** * @brief Initialise la base SQLite d'une nouvelle enquête. * diff --git a/include/database/schema.h b/include/database/schema.h index 276765d..5f8998a 100644 --- a/include/database/schema.h +++ b/include/database/schema.h @@ -31,4 +31,27 @@ bool schema_install_v1( Database *database ); +/** + * @brief Installe les modifications du schéma SQLite V2. + * + * La connexion doit être valide et une transaction doit déjà être active. + * + * Cette fonction : + * + * - étend la table preuves ; + * - conserve les éventuelles lignes V1 ; + * - ajoute les contraintes nécessaires aux nouvelles preuves ; + * - ajoute les index V2. + * + * Elle ne modifie pas elle-même la version enregistrée dans metadata. + * Elle ne réalise ni COMMIT ni ROLLBACK. + * + * @param database Connexion Database ouverte. + * + * @return true si la migration V2 a été appliquée, sinon false. + */ +bool schema_install_v2( + Database *database +); + #endif diff --git a/include/database/statement.h b/include/database/statement.h index 6ed5ae0..e8e4024 100644 --- a/include/database/statement.h +++ b/include/database/statement.h @@ -186,23 +186,6 @@ bool database_statement_bind_null( int index ); -/** - * @brief Lie une chaîne de caractères à un paramètre SQL. - * - * Les indices des paramètres SQLite commencent à 1. - * - * @param statement Requête préparée. - * @param index Indice du paramètre SQL. - * @param value Chaîne de caractères à lier. - * - * @return true en cas de succès, sinon false. - */ -bool database_statement_bind_text( - DatabaseStatement *statement, - int index, - const char *value -); - /** * @brief Finalise une requête préparée et libère ses ressources. * diff --git a/labfy-investigation b/labfy-investigation index ec5ef1dda6aaf1b50de0fb5d38a99ed8bffca4d8..18572e4c80b2622294186859be683791f366987b 100755 GIT binary patch delta 147685 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 +#include +#include + +/** + * @brief Représentation privée du DAO des preuves. + * + * La connexion Database est empruntée. + */ +struct EvidenceDao +{ + Database *database; +}; + +/** + * @brief Requête d’insertion d’une preuve. + * + * updated_at reçoit initialement la même date que imported_at. + * + * Les colonnes historiques non représentées par EvidenceRecord utilisent + * leurs valeurs par défaut ou SQL NULL. + */ +static const char *const evidence_dao_insert_sql = + "INSERT INTO preuves" + "(" + " id," + " original_name," + " name," + " relative_path," + " type_id," + " size_bytes," + " sha256," + " description," + " imported_at," + " updated_at," + " source," + " collected_at," + " integrity_status" + ")" + "VALUES" + "(" + " ?," + " ?," + " ?," + " ?," + " (" + " SELECT id " + " FROM types_preuve " + " WHERE code = ?" + " )," + " ?," + " ?," + " ?," + " ?," + " ?," + " ?," + " ?," + " ?" + ");"; + +/** + * @brief Requête de recherche d’une preuve par son identifiant. + */ +static const char *const evidence_dao_find_by_identifier_sql = + "SELECT " + " preuves.id," + " preuves.original_name," + " preuves.name," + " preuves.relative_path," + " types_preuve.code," + " preuves.size_bytes," + " preuves.sha256," + " preuves.imported_at," + " preuves.collected_at," + " preuves.source," + " preuves.description," + " preuves.integrity_status " + "FROM preuves " + "LEFT JOIN types_preuve " + "ON types_preuve.id = preuves.type_id " + "WHERE preuves.id = ?;"; + +/** + * @brief Requête de détection d’un identifiant existant. + */ +static const char *const evidence_dao_identifier_exists_sql = + "SELECT 1 " + "FROM preuves " + "WHERE id = ? " + "LIMIT 1;"; + +/** + * @brief Requête de détection d’un chemin existant. + */ +static const char *const evidence_dao_relative_path_exists_sql = + "SELECT 1 " + "FROM preuves " + "WHERE relative_path = ? " + "LIMIT 1;"; + +/** + * @brief Requête de détection d’un type de preuve. + */ +static const char *const evidence_dao_type_exists_sql = + "SELECT 1 " + "FROM types_preuve " + "WHERE code = ? " + "LIMIT 1;"; + + /** + * @brief Requête de comptage des preuves. + */ +static const char *const evidence_dao_count_sql = + "SELECT COUNT(*) " + "FROM preuves;"; + + /** + * @brief Requête de chargement de toutes les preuves. + */ +static const char *const evidence_dao_list_all_sql = + "SELECT " + " preuves.id," + " preuves.original_name," + " preuves.name," + " preuves.relative_path," + " types_preuve.code," + " preuves.size_bytes," + " preuves.sha256," + " preuves.imported_at," + " preuves.collected_at," + " preuves.source," + " preuves.description," + " preuves.integrity_status " + "FROM preuves " + "LEFT JOIN types_preuve " + "ON types_preuve.id = preuves.type_id " + "ORDER BY " + " preuves.imported_at ASC," + " preuves.id ASC;"; + +/** + * @brief Enregistre une erreur littérale. + */ +static void evidence_dao_set_error_literal( + GError **error, + EvidenceDaoError error_code, + const char *error_message +) +{ + if (error == NULL) + { + return; + } + + g_set_error_literal( + error, + EVIDENCE_DAO_ERROR, + error_code, + error_message + ); +} + +/** + * @brief Transforme la dernière erreur Database en GError du DAO. + */ +static void evidence_dao_set_database_error( + EvidenceDao *evidence_dao, + GError **error, + EvidenceDaoError error_code, + const char *context +) +{ + const char *database_error_message = NULL; + + if (error == NULL) + { + return; + } + + if (evidence_dao != NULL && + evidence_dao->database != NULL) + { + database_error_message = + database_error_get_message( + evidence_dao->database + ); + } + + if (database_error_message != NULL && + database_error_message[0] != '\0') + { + g_set_error( + error, + EVIDENCE_DAO_ERROR, + error_code, + "%s : %s", + context, + database_error_message + ); + + return; + } + + g_set_error_literal( + error, + EVIDENCE_DAO_ERROR, + error_code, + context + ); +} + +/** + * @brief Exécute une requête SELECT d’existence. + */ +static gboolean evidence_dao_value_exists( + EvidenceDao *evidence_dao, + const char *sql, + const char *value, + gboolean *out_exists, + GError **error +) +{ + DatabaseStatement *statement = NULL; + + DatabaseStatementStepResult step_result = + DATABASE_STATEMENT_STEP_ERROR; + + gboolean success = FALSE; + + if (evidence_dao == NULL || + evidence_dao->database == NULL || + sql == NULL || + value == NULL || + out_exists == NULL) + { + evidence_dao_set_error_literal( + error, + EVIDENCE_DAO_ERROR_INVALID_ARGUMENT, + "Les paramètres de la recherche d’existence sont invalides." + ); + + return FALSE; + } + + *out_exists = FALSE; + + statement = + database_statement_prepare( + evidence_dao->database, + sql + ); + + if (statement == NULL) + { + evidence_dao_set_database_error( + evidence_dao, + error, + EVIDENCE_DAO_ERROR_PREPARE, + "Impossible de préparer la recherche d’existence" + ); + + goto cleanup; + } + + if (!database_statement_bind_text( + statement, + 1, + value + )) + { + evidence_dao_set_database_error( + evidence_dao, + error, + EVIDENCE_DAO_ERROR_BIND, + "Impossible de lier la valeur recherchée" + ); + + goto cleanup; + } + + step_result = + database_statement_step( + statement + ); + + if (step_result == DATABASE_STATEMENT_STEP_ERROR) + { + evidence_dao_set_database_error( + evidence_dao, + error, + EVIDENCE_DAO_ERROR_EXECUTE, + "Impossible d’exécuter la recherche d’existence" + ); + + goto cleanup; + } + + *out_exists = + step_result == DATABASE_STATEMENT_STEP_ROW; + + success = TRUE; + +cleanup: + + database_statement_finalize( + statement + ); + + return success; +} + +/** + * @brief Lie un texte facultatif ou SQL NULL. + */ +static gboolean evidence_dao_bind_optional_text( + DatabaseStatement *statement, + int parameter_index, + const char *value +) +{ + if (value == NULL) + { + return database_statement_bind_null( + statement, + parameter_index + ); + } + + return database_statement_bind_text( + statement, + parameter_index, + value + ); +} + +/** + * @brief Convertit une erreur d’insertion SQLite en erreur DAO. + */ +static void evidence_dao_set_insert_error( + EvidenceDao *evidence_dao, + GError **error +) +{ + const char *database_error_message = NULL; + + if (evidence_dao != NULL && + evidence_dao->database != NULL) + { + database_error_message = + database_error_get_message( + evidence_dao->database + ); + } + + if (database_error_message != NULL && + strstr( + database_error_message, + "preuves.id" + ) != NULL) + { + evidence_dao_set_error_literal( + error, + EVIDENCE_DAO_ERROR_CONSTRAINT, + "Une preuve possède déjà cet identifiant." + ); + + return; + } + + if (database_error_message != NULL && + strstr( + database_error_message, + "preuves.relative_path" + ) != NULL) + { + evidence_dao_set_error_literal( + error, + EVIDENCE_DAO_ERROR_CONSTRAINT, + "Une preuve utilise déjà ce chemin relatif." + ); + + return; + } + + if (database_error_message != NULL && + ( + strstr( + database_error_message, + "constraint" + ) != NULL || + strstr( + database_error_message, + "CONSTRAINT" + ) != NULL + )) + { + evidence_dao_set_database_error( + evidence_dao, + error, + EVIDENCE_DAO_ERROR_CONSTRAINT, + "La preuve viole une contrainte SQLite" + ); + + return; + } + + evidence_dao_set_database_error( + evidence_dao, + error, + EVIDENCE_DAO_ERROR_EXECUTE, + "Impossible d’insérer la preuve" + ); +} + +/** + * @brief Construit un EvidenceRecord depuis la ligne SQLite courante. + */ +static EvidenceRecord *evidence_dao_read_current_record( + EvidenceDao *evidence_dao, + DatabaseStatement *statement, + GError **error +) +{ + EvidenceRecord *evidence_record = NULL; + + char *identifier = NULL; + char *original_name = NULL; + char *internal_name = NULL; + char *relative_path = NULL; + char *type_identifier = NULL; + char *sha256 = NULL; + char *imported_at = NULL; + char *collected_at = NULL; + char *source = NULL; + char *description = NULL; + + int64_t size_bytes = -1; + int64_t integrity_status_value = -1; + + GError *model_error = NULL; + + if (evidence_dao == NULL || + evidence_dao->database == NULL || + statement == NULL) + { + evidence_dao_set_error_literal( + error, + EVIDENCE_DAO_ERROR_INVALID_ARGUMENT, + "Impossible de lire une preuve avec des paramètres invalides." + ); + + return NULL; + } + + if (!database_statement_column_text( + statement, + 0, + &identifier + ) || + !database_statement_column_text( + statement, + 1, + &original_name + ) || + !database_statement_column_text( + statement, + 2, + &internal_name + ) || + !database_statement_column_text( + statement, + 3, + &relative_path + ) || + !database_statement_column_text( + statement, + 4, + &type_identifier + ) || + !database_statement_column_int64( + statement, + 5, + &size_bytes + ) || + !database_statement_column_text( + statement, + 6, + &sha256 + ) || + !database_statement_column_text( + statement, + 7, + &imported_at + ) || + !database_statement_column_text( + statement, + 8, + &collected_at + ) || + !database_statement_column_text( + statement, + 9, + &source + ) || + !database_statement_column_text( + statement, + 10, + &description + ) || + !database_statement_column_int64( + statement, + 11, + &integrity_status_value + )) + { + evidence_dao_set_error_literal( + error, + EVIDENCE_DAO_ERROR_READ, + "Impossible de lire les colonnes de la preuve." + ); + + goto cleanup; + } + + if (size_bytes < 0) + { + evidence_dao_set_error_literal( + error, + EVIDENCE_DAO_ERROR_RANGE, + "La preuve persistée possède une taille négative." + ); + + goto cleanup; + } + + if (integrity_status_value < + EVIDENCE_INTEGRITY_STATUS_UNKNOWN || + integrity_status_value > + EVIDENCE_INTEGRITY_STATUS_ERROR) + { + evidence_dao_set_error_literal( + error, + EVIDENCE_DAO_ERROR_MODEL, + "La preuve persistée possède un état d’intégrité invalide." + ); + + goto cleanup; + } + + evidence_record = + evidence_record_new( + identifier, + original_name, + internal_name, + relative_path, + type_identifier, + (guint64) size_bytes, + sha256, + imported_at, + collected_at, + source, + description, + (EvidenceIntegrityStatus) integrity_status_value, + &model_error + ); + + if (evidence_record == NULL) + { + if (model_error != NULL) + { + g_set_error( + error, + EVIDENCE_DAO_ERROR, + EVIDENCE_DAO_ERROR_MODEL, + "La preuve persistée est invalide : %s", + model_error->message + ); + } + else + { + evidence_dao_set_error_literal( + error, + EVIDENCE_DAO_ERROR_MODEL, + "La preuve persistée ne peut pas être reconstruite." + ); + } + } + +cleanup: + + g_clear_error( + &model_error + ); + + g_free( + description + ); + + g_free( + source + ); + + g_free( + collected_at + ); + + g_free( + imported_at + ); + + g_free( + sha256 + ); + + g_free( + type_identifier + ); + + g_free( + relative_path + ); + + g_free( + internal_name + ); + + g_free( + original_name + ); + + g_free( + identifier + ); + + return evidence_record; +} + +/** + * @brief Libère un EvidenceRecord contenu dans un GPtrArray. + */ +static void evidence_dao_record_destroy( + gpointer data +) +{ + evidence_record_free( + data + ); +} + +GQuark evidence_dao_error_quark(void) +{ + return g_quark_from_static_string( + "evidence-dao-error-quark" + ); +} + +EvidenceDao *evidence_dao_new( + Database *database, + GError **error +) +{ + EvidenceDao *evidence_dao = NULL; + + g_return_val_if_fail( + error == NULL || *error == NULL, + NULL + ); + + if (database == NULL) + { + evidence_dao_set_error_literal( + error, + EVIDENCE_DAO_ERROR_INVALID_ARGUMENT, + "La connexion Database est absente." + ); + + return NULL; + } + + evidence_dao = + g_try_new0( + EvidenceDao, + 1 + ); + + if (evidence_dao == NULL) + { + evidence_dao_set_error_literal( + error, + EVIDENCE_DAO_ERROR_MEMORY, + "Impossible d’allouer le DAO des preuves." + ); + + return NULL; + } + + evidence_dao->database = database; + + return evidence_dao; +} + +void evidence_dao_free( + EvidenceDao *evidence_dao +) +{ + if (evidence_dao == NULL) + { + return; + } + + evidence_dao->database = NULL; + + g_free( + evidence_dao + ); +} + +gboolean evidence_dao_insert( + EvidenceDao *evidence_dao, + const EvidenceRecord *evidence_record, + GError **error +) +{ + DatabaseStatement *statement = NULL; + + const char *identifier = NULL; + const char *original_name = NULL; + const char *internal_name = NULL; + const char *relative_path = NULL; + const char *type_identifier = NULL; + const char *sha256 = NULL; + const char *imported_at = NULL; + const char *collected_at = NULL; + const char *source = NULL; + const char *description = NULL; + + guint64 size_bytes = 0; + + EvidenceIntegrityStatus integrity_status = + EVIDENCE_INTEGRITY_STATUS_UNKNOWN; + + gboolean value_exists = FALSE; + gboolean success = FALSE; + + g_return_val_if_fail( + error == NULL || *error == NULL, + FALSE + ); + + if (evidence_dao == NULL || + evidence_dao->database == NULL || + evidence_record == NULL) + { + evidence_dao_set_error_literal( + error, + EVIDENCE_DAO_ERROR_INVALID_ARGUMENT, + "Le DAO ou la preuve est absent." + ); + + return FALSE; + } + + identifier = + evidence_record_get_identifier( + evidence_record + ); + + original_name = + evidence_record_get_original_name( + evidence_record + ); + + internal_name = + evidence_record_get_internal_name( + evidence_record + ); + + relative_path = + evidence_record_get_relative_path( + evidence_record + ); + + type_identifier = + evidence_record_get_type_identifier( + evidence_record + ); + + size_bytes = + evidence_record_get_size_bytes( + evidence_record + ); + + sha256 = + evidence_record_get_sha256( + evidence_record + ); + + imported_at = + evidence_record_get_imported_at( + evidence_record + ); + + collected_at = + evidence_record_get_collected_at( + evidence_record + ); + + source = + evidence_record_get_source( + evidence_record + ); + + description = + evidence_record_get_description( + evidence_record + ); + + integrity_status = + evidence_record_get_integrity_status( + evidence_record + ); + + if (identifier == NULL || + original_name == NULL || + internal_name == NULL || + relative_path == NULL || + type_identifier == NULL || + sha256 == NULL || + imported_at == NULL) + { + evidence_dao_set_error_literal( + error, + EVIDENCE_DAO_ERROR_INVALID_ARGUMENT, + "La preuve contient une valeur obligatoire absente." + ); + + return FALSE; + } + + /* + * SQLite stocke les INTEGER dans un entier signé sur 64 bits. + */ + if (size_bytes > (guint64) G_MAXINT64) + { + evidence_dao_set_error_literal( + error, + EVIDENCE_DAO_ERROR_RANGE, + "La taille de la preuve dépasse la capacité de SQLite." + ); + + return FALSE; + } + + if (!evidence_dao_value_exists( + evidence_dao, + evidence_dao_identifier_exists_sql, + identifier, + &value_exists, + error + )) + { + return FALSE; + } + + if (value_exists) + { + evidence_dao_set_error_literal( + error, + EVIDENCE_DAO_ERROR_CONSTRAINT, + "Une preuve possède déjà cet identifiant." + ); + + return FALSE; + } + + if (!evidence_dao_value_exists( + evidence_dao, + evidence_dao_relative_path_exists_sql, + relative_path, + &value_exists, + error + )) + { + return FALSE; + } + + if (value_exists) + { + evidence_dao_set_error_literal( + error, + EVIDENCE_DAO_ERROR_CONSTRAINT, + "Une preuve utilise déjà ce chemin relatif." + ); + + return FALSE; + } + + if (!evidence_dao_value_exists( + evidence_dao, + evidence_dao_type_exists_sql, + type_identifier, + &value_exists, + error + )) + { + return FALSE; + } + + if (!value_exists) + { + evidence_dao_set_error_literal( + error, + EVIDENCE_DAO_ERROR_CONSTRAINT, + "Le type de preuve n’existe pas dans le catalogue SQLite." + ); + + return FALSE; + } + + statement = + database_statement_prepare( + evidence_dao->database, + evidence_dao_insert_sql + ); + + if (statement == NULL) + { + evidence_dao_set_database_error( + evidence_dao, + error, + EVIDENCE_DAO_ERROR_PREPARE, + "Impossible de préparer l’insertion de la preuve" + ); + + goto cleanup; + } + + if (!database_statement_bind_text( + statement, + 1, + identifier + ) || + !database_statement_bind_text( + statement, + 2, + original_name + ) || + !database_statement_bind_text( + statement, + 3, + internal_name + ) || + !database_statement_bind_text( + statement, + 4, + relative_path + ) || + !database_statement_bind_text( + statement, + 5, + type_identifier + ) || + !database_statement_bind_int64( + statement, + 6, + (int64_t) size_bytes + ) || + !database_statement_bind_text( + statement, + 7, + sha256 + ) || + !evidence_dao_bind_optional_text( + statement, + 8, + description + ) || + !database_statement_bind_text( + statement, + 9, + imported_at + ) || + !database_statement_bind_text( + statement, + 10, + imported_at + ) || + !evidence_dao_bind_optional_text( + statement, + 11, + source + ) || + !evidence_dao_bind_optional_text( + statement, + 12, + collected_at + ) || + !database_statement_bind_int64( + statement, + 13, + (int64_t) integrity_status + )) + { + evidence_dao_set_database_error( + evidence_dao, + error, + EVIDENCE_DAO_ERROR_BIND, + "Impossible de lier les données de la preuve" + ); + + goto cleanup; + } + + if (database_statement_step( + statement + ) != DATABASE_STATEMENT_STEP_DONE) + { + evidence_dao_set_insert_error( + evidence_dao, + error + ); + + goto cleanup; + } + + success = TRUE; + +cleanup: + + database_statement_finalize( + statement + ); + + return success; +} + +EvidenceRecord *evidence_dao_find_by_identifier( + EvidenceDao *evidence_dao, + const char *identifier, + GError **error +) +{ + DatabaseStatement *statement = NULL; + EvidenceRecord *evidence_record = NULL; + + DatabaseStatementStepResult step_result = + DATABASE_STATEMENT_STEP_ERROR; + + g_return_val_if_fail( + error == NULL || *error == NULL, + NULL + ); + + if (evidence_dao == NULL || + evidence_dao->database == NULL || + identifier == NULL || + !g_uuid_string_is_valid(identifier)) + { + evidence_dao_set_error_literal( + error, + EVIDENCE_DAO_ERROR_INVALID_ARGUMENT, + "L’identifiant de preuve est invalide." + ); + + return NULL; + } + + statement = + database_statement_prepare( + evidence_dao->database, + evidence_dao_find_by_identifier_sql + ); + + if (statement == NULL) + { + evidence_dao_set_database_error( + evidence_dao, + error, + EVIDENCE_DAO_ERROR_PREPARE, + "Impossible de préparer la recherche de la preuve" + ); + + goto cleanup; + } + + if (!database_statement_bind_text( + statement, + 1, + identifier + )) + { + evidence_dao_set_database_error( + evidence_dao, + error, + EVIDENCE_DAO_ERROR_BIND, + "Impossible de lier l’identifiant de la preuve" + ); + + goto cleanup; + } + + step_result = + database_statement_step( + statement + ); + + if (step_result == DATABASE_STATEMENT_STEP_ERROR) + { + evidence_dao_set_database_error( + evidence_dao, + error, + EVIDENCE_DAO_ERROR_EXECUTE, + "Impossible d’exécuter la recherche de la preuve" + ); + + goto cleanup; + } + + /* + * Une preuve absente n’est pas une erreur. + */ + if (step_result == DATABASE_STATEMENT_STEP_DONE) + { + goto cleanup; + } + + evidence_record = + evidence_dao_read_current_record( + evidence_dao, + statement, + error + ); + + if (evidence_record == NULL) + { + goto cleanup; + } + + /* + * L’identifiant est une clé primaire, mais on vérifie tout de même + * que la requête ne fournit aucune seconde ligne. + */ + step_result = + database_statement_step( + statement + ); + + if (step_result != DATABASE_STATEMENT_STEP_DONE) + { + if (step_result == DATABASE_STATEMENT_STEP_ROW) + { + evidence_dao_set_error_literal( + error, + EVIDENCE_DAO_ERROR_SCHEMA, + "Plusieurs preuves possèdent le même identifiant." + ); + } + else + { + evidence_dao_set_database_error( + evidence_dao, + error, + EVIDENCE_DAO_ERROR_EXECUTE, + "Impossible de terminer la lecture de la preuve" + ); + } + + evidence_record_free( + evidence_record + ); + + evidence_record = NULL; + } + +cleanup: + + database_statement_finalize( + statement + ); + + return evidence_record; +} + +gboolean evidence_dao_count( + EvidenceDao *evidence_dao, + guint64 *out_count, + GError **error +) +{ + DatabaseStatement *statement = NULL; + + DatabaseStatementStepResult step_result = + DATABASE_STATEMENT_STEP_ERROR; + + int64_t count_value = -1; + + gboolean success = FALSE; + + g_return_val_if_fail( + error == NULL || *error == NULL, + FALSE + ); + + if (evidence_dao == NULL || + evidence_dao->database == NULL || + out_count == NULL) + { + evidence_dao_set_error_literal( + error, + EVIDENCE_DAO_ERROR_INVALID_ARGUMENT, + "Les paramètres du comptage des preuves sont invalides." + ); + + return FALSE; + } + + /* + * Une erreur ne doit jamais laisser une ancienne valeur dans + * la destination fournie par l’appelant. + */ + *out_count = 0; + + statement = + database_statement_prepare( + evidence_dao->database, + evidence_dao_count_sql + ); + + if (statement == NULL) + { + evidence_dao_set_database_error( + evidence_dao, + error, + EVIDENCE_DAO_ERROR_PREPARE, + "Impossible de préparer le comptage des preuves" + ); + + goto cleanup; + } + + step_result = + database_statement_step( + statement + ); + + if (step_result == DATABASE_STATEMENT_STEP_ERROR) + { + evidence_dao_set_database_error( + evidence_dao, + error, + EVIDENCE_DAO_ERROR_EXECUTE, + "Impossible d’exécuter le comptage des preuves" + ); + + goto cleanup; + } + + /* + * COUNT(*) doit toujours produire exactement une ligne. + */ + if (step_result != DATABASE_STATEMENT_STEP_ROW) + { + evidence_dao_set_error_literal( + error, + EVIDENCE_DAO_ERROR_READ, + "Le comptage des preuves n’a retourné aucune ligne." + ); + + goto cleanup; + } + + if (!database_statement_column_int64( + statement, + 0, + &count_value + )) + { + evidence_dao_set_error_literal( + error, + EVIDENCE_DAO_ERROR_READ, + "Impossible de lire le nombre de preuves." + ); + + goto cleanup; + } + + if (count_value < 0) + { + evidence_dao_set_error_literal( + error, + EVIDENCE_DAO_ERROR_RANGE, + "Le nombre de preuves retourné par SQLite est invalide." + ); + + goto cleanup; + } + + step_result = + database_statement_step( + statement + ); + + if (step_result != DATABASE_STATEMENT_STEP_DONE) + { + if (step_result == DATABASE_STATEMENT_STEP_ROW) + { + evidence_dao_set_error_literal( + error, + EVIDENCE_DAO_ERROR_SCHEMA, + "Le comptage des preuves a retourné plusieurs lignes." + ); + } + else + { + evidence_dao_set_database_error( + evidence_dao, + error, + EVIDENCE_DAO_ERROR_EXECUTE, + "Impossible de terminer le comptage des preuves" + ); + } + + goto cleanup; + } + + *out_count = + (guint64) count_value; + + success = TRUE; + +cleanup: + + database_statement_finalize( + statement + ); + + return success; +} + +GPtrArray *evidence_dao_list_all( + EvidenceDao *evidence_dao, + GError **error +) +{ + DatabaseStatement *statement = NULL; + + GPtrArray *evidence_records = NULL; + EvidenceRecord *evidence_record = NULL; + + DatabaseStatementStepResult step_result = + DATABASE_STATEMENT_STEP_ERROR; + + g_return_val_if_fail( + error == NULL || *error == NULL, + NULL + ); + + if (evidence_dao == NULL || + evidence_dao->database == NULL) + { + evidence_dao_set_error_literal( + error, + EVIDENCE_DAO_ERROR_INVALID_ARGUMENT, + "Le DAO des preuves est invalide." + ); + + return NULL; + } + + evidence_records = + g_ptr_array_new_with_free_func( + evidence_dao_record_destroy + ); + + if (evidence_records == NULL) + { + evidence_dao_set_error_literal( + error, + EVIDENCE_DAO_ERROR_MEMORY, + "Impossible d’allouer la liste des preuves." + ); + + return NULL; + } + + statement = + database_statement_prepare( + evidence_dao->database, + evidence_dao_list_all_sql + ); + + if (statement == NULL) + { + evidence_dao_set_database_error( + evidence_dao, + error, + EVIDENCE_DAO_ERROR_PREPARE, + "Impossible de préparer le chargement des preuves" + ); + + goto error; + } + + while (true) + { + step_result = + database_statement_step( + statement + ); + + if (step_result == DATABASE_STATEMENT_STEP_DONE) + { + break; + } + + if (step_result == DATABASE_STATEMENT_STEP_ERROR) + { + evidence_dao_set_database_error( + evidence_dao, + error, + EVIDENCE_DAO_ERROR_EXECUTE, + "Impossible d’exécuter le chargement des preuves" + ); + + goto error; + } + + evidence_record = + evidence_dao_read_current_record( + evidence_dao, + statement, + error + ); + + if (evidence_record == NULL) + { + goto error; + } + + g_ptr_array_add( + evidence_records, + evidence_record + ); + + /* + * Le tableau devient propriétaire du modèle. + */ + evidence_record = NULL; + } + + database_statement_finalize( + statement + ); + + return evidence_records; + +error: + + evidence_record_free( + evidence_record + ); + + database_statement_finalize( + statement + ); + + g_ptr_array_unref( + evidence_records + ); + + return NULL; +} diff --git a/src/database/database.c b/src/database/database.c index c0179e7..6ed7217 100644 --- a/src/database/database.c +++ b/src/database/database.c @@ -16,7 +16,12 @@ /** * @brief Version actuelle du schéma SQLite. */ -#define DATABASE_SCHEMA_VERSION "1" +#define DATABASE_SCHEMA_VERSION_CURRENT 2 + +/** + * @brief Version actuelle sous forme textuelle pour metadata. + */ +#define DATABASE_SCHEMA_VERSION_CURRENT_TEXT "2" /** * @brief Nom de l'application enregistré dans les métadonnées. @@ -225,7 +230,7 @@ static bool database_insert_all_metadata( database_insert_metadata( statement, "schema_version", - DATABASE_SCHEMA_VERSION + DATABASE_SCHEMA_VERSION_CURRENT_TEXT ) && database_insert_metadata( statement, @@ -366,6 +371,22 @@ bool database_get_transaction_active( return database->transaction_active; } +/** + * @brief Requête de lecture de la version du schéma. + */ +static const char *const database_select_schema_version_sql = + "SELECT value " + "FROM metadata " + "WHERE key = ?;"; + +/** + * @brief Requête de mise à jour de la version du schéma. + */ +static const char *const database_update_schema_version_sql = + "UPDATE metadata " + "SET value = ? " + "WHERE key = ?;"; + void database_set_transaction_active( Database *database, bool transaction_active @@ -379,6 +400,274 @@ void database_set_transaction_active( database->transaction_active = transaction_active; } +/** + * @brief Lit et valide la version enregistrée dans metadata. + */ +static bool database_read_schema_version( + Database *database, + int *out_schema_version +) +{ + DatabaseStatement *statement = NULL; + DatabaseStatementStepResult step_result; + + char *version_text = NULL; + char *end_pointer = NULL; + + gint64 parsed_version = 0; + + bool success = false; + + if (database == NULL || + out_schema_version == NULL) + { + return false; + } + + *out_schema_version = 0; + + statement = + database_statement_prepare( + database, + database_select_schema_version_sql + ); + + if (statement == NULL) + { + return false; + } + + if (!database_statement_bind_text( + statement, + 1, + "schema_version" + )) + { + goto cleanup; + } + + step_result = + database_statement_step( + statement + ); + + if (step_result == DATABASE_STATEMENT_STEP_ERROR) + { + goto cleanup; + } + + if (step_result == DATABASE_STATEMENT_STEP_DONE) + { + database_set_error( + database, + DATABASE_ERROR_INVALID_STATE, + "La version du schéma est absente des métadonnées." + ); + + goto cleanup; + } + + if (!database_statement_column_text( + statement, + 0, + &version_text + ) || + version_text == NULL || + version_text[0] == '\0') + { + database_set_error( + database, + DATABASE_ERROR_INVALID_STATE, + "La version du schéma est invalide." + ); + + goto cleanup; + } + + parsed_version = + g_ascii_strtoll( + version_text, + &end_pointer, + 10 + ); + + if (end_pointer == version_text || + end_pointer == NULL || + end_pointer[0] != '\0' || + parsed_version < 1 || + parsed_version > G_MAXINT) + { + database_set_error( + database, + DATABASE_ERROR_INVALID_STATE, + "La version du schéma n’est pas un entier valide." + ); + + goto cleanup; + } + + /* + * La clé metadata est primaire, mais on vérifie malgré tout + * que la requête ne retourne aucune seconde ligne. + */ + step_result = + database_statement_step( + statement + ); + + if (step_result != DATABASE_STATEMENT_STEP_DONE) + { + if (step_result == DATABASE_STATEMENT_STEP_ROW) + { + database_set_error( + database, + DATABASE_ERROR_INVALID_STATE, + "Plusieurs versions du schéma sont enregistrées." + ); + } + + goto cleanup; + } + + *out_schema_version = + (int) parsed_version; + + database_clear_error_internal( + database + ); + + success = true; + +cleanup: + + g_free( + version_text + ); + + database_statement_finalize( + statement + ); + + return success; +} + +/** + * @brief Met à jour la version enregistrée dans metadata. + */ +static bool database_update_schema_version( + Database *database, + const char *version_text +) +{ + DatabaseStatement *statement = NULL; + bool success = false; + + if (database == NULL || + version_text == NULL || + version_text[0] == '\0') + { + return false; + } + + statement = + database_statement_prepare( + database, + database_update_schema_version_sql + ); + + if (statement == NULL) + { + return false; + } + + success = + database_statement_bind_text( + statement, + 1, + version_text + ) && + database_statement_bind_text( + statement, + 2, + "schema_version" + ) && + database_statement_step( + statement + ) == DATABASE_STATEMENT_STEP_DONE; + + database_statement_finalize( + statement + ); + + return success; +} + +/** + * @brief Applique atomiquement la migration du schéma V1 vers V2. + */ +static bool database_migrate_v1_to_v2( + Database *database +) +{ + bool transaction_started = false; + + if (database == NULL) + { + return false; + } + + if (!database_transaction_begin( + database + )) + { + return false; + } + + transaction_started = true; + + if (!schema_install_v2( + database + )) + { + goto rollback; + } + + if (!database_update_schema_version( + database, + "2" + )) + { + goto rollback; + } + + if (!database_transaction_commit( + database + )) + { + goto rollback; + } + + transaction_started = false; + + return true; + +rollback: + + if (transaction_started) + { + if (!database_transaction_rollback( + database + )) + { + g_warning( + "Impossible d’annuler la migration SQLite V1 vers V2." + ); + } + } + + return false; +} + Database *database_open( const char *database_path ) @@ -445,6 +734,89 @@ Database *database_open( return database; } +bool database_migrate_to_latest( + Database *database +) +{ + int schema_version = 0; + + if (database == NULL) + { + return false; + } + + if (database_get_transaction_active( + database + )) + { + database_set_error( + database, + DATABASE_ERROR_INVALID_STATE, + "La migration est impossible pendant une transaction active." + ); + + return false; + } + + if (!database_read_schema_version( + database, + &schema_version + )) + { + return false; + } + + if (schema_version > + DATABASE_SCHEMA_VERSION_CURRENT) + { + database_set_error( + database, + DATABASE_ERROR_INVALID_STATE, + "La base utilise une version de schéma plus récente " + "que cette version de Labfy Investigation." + ); + + return false; + } + + while (schema_version < + DATABASE_SCHEMA_VERSION_CURRENT) + { + switch (schema_version) + { + case 1: + if (!database_migrate_v1_to_v2( + database + )) + { + return false; + } + + schema_version = 2; + break; + + default: + database_set_error( + database, + DATABASE_ERROR_INVALID_STATE, + "La version du schéma ne possède aucune " + "migration prise en charge." + ); + + return false; + } + } + + database->schema_version = + schema_version; + + database_clear_error_internal( + database + ); + + return true; +} + bool database_initialize( const char *database_path, const char *investigation_name, @@ -514,6 +886,17 @@ bool database_initialize( goto rollback; } + /* + * Une nouvelle base reçoit immédiatement toutes les versions du schéma + * dans la transaction initiale. + */ + if (!schema_install_v2( + database + )) + { + goto rollback; + } + if (!database_insert_all_metadata( database, created_at, diff --git a/src/database/schema.c b/src/database/schema.c index 79c5e8f..77b2e20 100644 --- a/src/database/schema.c +++ b/src/database/schema.c @@ -1,6 +1,6 @@ /****************************************************************************** * @file schema.c - * @brief Installation du schéma SQLite de Labfy Investigation. + * @brief Installation des versions du schéma SQLite. ******************************************************************************/ #include "database/schema.h" @@ -11,22 +11,34 @@ #include /** - * @brief Charge le schéma SQL V1 depuis le fichier du projet. + * @brief Charge un fichier SQL du projet. * - * @param database Connexion utilisée pour enregistrer une éventuelle erreur. + * @param database Connexion recevant les erreurs. + * @param schema_path Chemin du fichier SQL. + * @param schema_name Nom utilisé dans les diagnostics. * - * @return Une nouvelle chaîne terminée par zéro, à libérer avec g_free(), - * ou NULL en cas d'échec. + * @return Nouvelle chaîne SQL, ou NULL. */ -static char *schema_load_v1_sql( - Database *database +static char *schema_load_sql( + Database *database, + const char *schema_path, + const char *schema_name ) { char *schema_sql = NULL; GError *error = NULL; + if (database == NULL || + schema_path == NULL || + schema_path[0] == '\0' || + schema_name == NULL || + schema_name[0] == '\0') + { + return NULL; + } + if (!g_file_get_contents( - "database/schema_v1.sql", + schema_path, &schema_sql, NULL, &error @@ -37,17 +49,21 @@ static char *schema_load_v1_sql( DATABASE_ERROR_INVALID_STATE, error != NULL ? error->message - : "Impossible de charger le schéma SQLite V1." + : "Impossible de charger le schéma SQLite." ); g_warning( - "Impossible de charger database/schema_v1.sql : %s", + "Impossible de charger %s depuis '%s' : %s", + schema_name, + schema_path, error != NULL ? error->message : "erreur inconnue" ); - g_clear_error(&error); + g_clear_error( + &error + ); return NULL; } @@ -55,11 +71,19 @@ static char *schema_load_v1_sql( return schema_sql; } -bool schema_install_v1( - Database *database +/** + * @brief Exécute le contenu d’un fichier de schéma SQL. + * + * La transaction reste sous la responsabilité du code appelant. + */ +static bool schema_execute_file( + Database *database, + const char *schema_path, + const char *schema_name ) { sqlite3 *database_handle = NULL; + char *schema_sql = NULL; char *error_message = NULL; @@ -70,9 +94,10 @@ bool schema_install_v1( return false; } - database_handle = database_get_handle( - database - ); + database_handle = + database_get_handle( + database + ); if (database_handle == NULL) { @@ -85,24 +110,30 @@ bool schema_install_v1( return false; } - schema_sql = schema_load_v1_sql( - database - ); + schema_sql = + schema_load_sql( + database, + schema_path, + schema_name + ); if (schema_sql == NULL) { return false; } - result = sqlite3_exec( - database_handle, - schema_sql, - NULL, - NULL, - &error_message - ); + result = + sqlite3_exec( + database_handle, + schema_sql, + NULL, + NULL, + &error_message + ); - g_free(schema_sql); + g_free( + schema_sql + ); if (result != SQLITE_OK) { @@ -115,18 +146,23 @@ bool schema_install_v1( ); g_warning( - "Impossible d'installer le schéma SQLite V1 : %s", + "Impossible d’installer %s : %s", + schema_name, error_message != NULL ? error_message : sqlite3_errmsg(database_handle) ); - sqlite3_free(error_message); + sqlite3_free( + error_message + ); return false; } - sqlite3_free(error_message); + sqlite3_free( + error_message + ); database_clear_error_internal( database @@ -134,3 +170,25 @@ bool schema_install_v1( return true; } + +bool schema_install_v1( + Database *database +) +{ + return schema_execute_file( + database, + "database/schema_v1.sql", + "le schéma SQLite V1" + ); +} + +bool schema_install_v2( + Database *database +) +{ + return schema_execute_file( + database, + "database/schema_v2.sql", + "la migration SQLite V2" + ); +} diff --git a/tests/test_database b/tests/test_database index 2a1ae2522c4f231ed1559cc6b60d12d90f28ed9f..a93ca32ca819d41983e216a0f7bb3be11ced9c05 100755 GIT binary patch literal 58728 zcmeHw3wTu3)%FP(LFMKpN)>fPk)RMlAc&$Rh=WPxCO5Bj2+1UjB$GH71S=K=EitC0 z)>^!l`dNz=mHH_~sx*ovShWVFib`whbyBFtTaA`F|GO^xTqbi6zkbj2|NrykJdizm zt@WCtp4~Lu#UG5ME(G# z3BN=VaOEoP=}mhpoyde+r~J%xkjk0VSV$@1{H}3_3CEJOfXJ&d5fpD3WWa*-m{o46$}BIiUg%v?l@DlY%A56WqVj)I-VDW^ zd7miEOm|QN<1(o!Z?@uQX#FzNn*?T=)YR{M;HVw;_tNIGW@>qU?Y>Ie&!lQLx4{u8 zjGFJ+Xb+Pm{dpE&3Ik@vh%@ys7?J9Egxf15wDCNh8Qn2|M=BWfbiv))?CL4W%k9@rk{dZ85O%M4y z8+{#ekNlNB^2hneH~7eZ+sDpQ&;$6N zc~ydttzPw@2Qr0`ztyMQ*L~=p!~Vfp^xOzqwsN2K(KFS@4`Cnqy*~5;ANp-R_Vn

(apKhhQ0<9zN1*mM^mLr<_0s)YxBbI~B z-w_-Cf~xcP;1Kc6@wOn4?b+1c@$=0GvNArh==AQ z|IPq;9tomi2z!3%VZ>C0$lok8#7o&{DQA6=;36f66od5HI^`l1E1RF;-pe&#o<^b8 zii%<2EpN%Z-8~T1z<&R_@liO^jN59&I07QmhJpL|7kRNg)QL7b?V%kAPjxM#*JW3! zfQ72|>?7FEFgZCxlVk_3d11;nGf8g64F)wy&Sb%bkHblA#3BjzV64tKJJ_q8gNe75 z7NWcqLD~)M+GIOvZ0xWD(uylMhvVu#_{Ur2?0yqTd-V=X9(Pfr)a65PtEZFs5tx{9 zAkFz7J&M^9WAdf!9(6;9E<8R*@)DLrQ(LFJi!0i^Yo8?Z;W7rb9gP;Tqq-?<8TA#Q zl&9LW^U06g8G%lI5lp6&OE{6Wj<^N2V$b3p0=!t{x$Oho!s^HREyeoZe%5xIwH#Uz z*H{GvW`28JtK;Ju>N*~NG}zSeY?8cg-2qxE^wy#sBdKbP<$jk9N#e0`YK{DnB!{75Bp+OO^OY#Ot_*D>wCUpt>bU02E3$g)h55AUz;kx4zN07DsX=lTkse0d z09VtlBetICf*TZ?UZ$Z%rW<$SCJ(!<>o>|hN*vj&CG$$9YTXlkILK=o&;aAkHHM$N zrtW?2J(-9PKy~cs!{Gty)b8Qx!s1h?;7%5EupBTQu$XUDRrR!lUV)j<<0=n%wEvRo z6XQm;KcVK^zfnUdj{a@`eP9}-=H@}fz{RF0z=$M~HbSM`cojec!M zes@j5K7tu2nBc@+??c3P*Nalty=S{?0^j}8?i!fSUC%=W8`^EVtBuU}xr_4zg`0ks z)~69jb6d_;nj#=o9SQ9?Q_4t3>KM7OS!Kj*pl&e0aW+uB?ax)s{-t~ zmZec{uNXp&%Ci>2;N%GU1K9a8kwg&(VDp3McQD}-%%30Y!cFfJR__L&4a?V@=PbDl%n98$-@2oG~Zlrtv0TDq5S4aA(h-SJkg#)RII0ztFz<^Uld{r~SU7&(!kc+@twjKX-yNts&NsNUoY@4Dq|) zpzYp@EWz8LjpMcH6CAiNmPu0k<8@mejFCy2=##5WG&IE1mY~D&fVVvH;$eh4A>~o2 zW6@tzPmIhQKgm=QZNwXzQc1pgl6cc~3EoxobbZ-+%2n?<&X_ORfZTjJ43K`x%^!4V zzWNm(52er5CyurlbJuI^G@Pc{{35WtgIgE#Jn0*5q51RY&5u;h#lWeYr3Rm)1RG+h zRCHO)M3WDDe))w&7oLQ15YP?kBPIJ?VOvNaz?66#`slbe!DpbJ>JOgyK=}a&jn{q&&0W zYjf~oH@dep<>1Zh+U2o^XkUt&x+H~JG3M4Gj2pH*h^|UBHX;G42+l7j!4Xq| zo|~`nFKh0gI+~&>H`C~%o_I|1xX4x4XHs!EJ*CY{+4k{(is7Yx`gMS$F^b}=p(&9{ z#ql!%ZXGJ&tPR!mQMVz!EXiG=`*G1E*6l8u3{!2naf!@|WSoU)3E++^O^s8%UOj)t znN>4f{CGetzN|3<->2aGd2^?u`>hJ7X>rdGysBRpMFz+;#_XxsrIpJH&re)eCLOPj zqfX*A9TPJh(*(D;XmBle&1G2V)W*{2B#SjiAfkPF`XT0$yS6+~7jvVTTB_7@Q&W-* zi8Z>l%cIFFK(m#z+sgu_Nq#?I_DWWOXl!>RTzE$F<^|bUcWzu7!VXF=}EBcc4#Q0JIb$p?IS^;^@pmCbR_4y;w);}(`5}6@`pGzU% z8Z~xz1nfb##v9}5I2O=YVdR(cw_{vv>C$K|_XxVubP0{Ayec>z8yfJ-DJot8tW`q4 z@FhR|%j3}Bep|igf`x$`Ok*3@4wr1X$E4#kLT6Uabt|i?LbEC{m#Ud{hRTk%QkA}4 zNUE?-mN_%$RaI5iki_Tm%dAx9%%3-B&KWaio;}?uIBdXl`mL}jkRAUF-o(K9@-2OR z9e~l_^!1g{4*hTY`pN;{0;~qywY9IW32@jpTv-E7e73J|1K{P)Lk=+YVqaem;Jtt) zxT!thCCCH*9k3ek*By`teC}n)1Ah8@$OA6MMo$Oe<$yha-vKPa*48G#a=>EjELH=) z1=s|*5gV@S0V}chyaDhkZ0mOb-h^98J%D3z2d)Ggm@@&(0c!!P0iOqK0xZCt(e;35 z;_mhaz~k^JLkHkFfIWcM0+!%GuIbq4DF?g~8*tTt58>gZCcu~R(A0WB2b<>`0DlVD z0eBwnVe|mL16YCwcL!hxq8xA|U^U=)?8`I(ZpNO`dcXyEYJ3CWyMP^l3EZ9T0c-{= z!Jg%R1C|562w2T~n2v*8cs>fQnC}#^ySgSF>5gPkJRto zod|f+(|vsv=o@Ev$?V}H&nn*U@*!)S(+{0~%n4(UBtDY80DqO6`})35h#A96ZYZ2N zY*68ys6o-M0(u+hZ~5pu4E=84n-N3wWSx;8FsOhSNdJ@gOCz?%_~@eyeFx|n#G31) zA7>8xShg`bR`C9~lm9Oxe*x$(f=;hldi^uf*mo7^ z&tpz_)F=P2k-r=Ci!fItee?!He-iW!px^1!f1A<21N37sx6oY~Q-9%&Mt(2ocY%JZ zkA9P(kHXwjj3=zu`RHp6{S?qI2OW>mdHNSJS>->_FZ&$&RiIxAdcOF&8}t>RA7<-U z>4`9W{N>LBiUv5n_~kJ5ds|}#Uk-Td<9Lt<2Tfe`f{reiV?5*W5$CZ@iheZC>7Zeb zh#WEyXXH|6K*=Cyz{o;pfBM<70Yml!g1GY2)bE{9-Eb}c?r7l}rww7IWEd9s%FyO3 z6EE3IbRORw! zY1qe7*7fRk{Qrjf_v3^0PNm5k$83R%1TGc0Lf{Pozb){G0yhfWD)2Rd?+E-z;2=D* zL&re^j}|yp;B0}51TGc0Lf{Pozb){G0yhfWD)2Rd?+E-z;GhGfet|~|oGNg(z(oQT zx8vyFNj-Ds%xUg;tZ*i{lcttUDx2g^E}uNLeCp&Wnlm?~xESdCy)Q_mI4eLBs93Bh zt}x(5x19WRO;(7}yFOsw7{Rv%@U-Va{5sE|$j4duU*H_(jK55kb=)pu{0K9y71eQ8 zyd{KY=0DKUc|!9)fRkM9{T1+}=Ui$aj_)hr&~t?a&Tyw^mO|)e{4a{c-z)rY z3I9KYza-@6r#%AQnjw^+~N%(bsyjl25MFH>GfS-Q?46Ma1Jr^tHzfx{$M9KkL-tu&Bdx;LEv!ch7I;bY|8tr`^4=Rx|CUGpK8Vkf9OLmIj$2EyoF1D8f11Skrc)K;&BA{! z@RDkM%F=oCT%QMjhv>gT`i1vgq46=nFAK!U3xeb&>&JbFF@zQkG|>K5;d1#7PST*~;NPC|l0w>OlB z|2*M8;RL0*qCmmR1)rXv%6tz4r!9H(+?faepy+w{Xr<>{qW_n9_@4)!+FO2^;@AH> z^6>vJ^Y@Rpzvkf|jO)N$ejCR4q0SFZQZ?#$K3?$E;!mCTW(xi$!5<}t)(ZYoS*P*6 zJ<#YE&<`lYKe_(W?P?VM^Cdo)Yr=xsWO`Crg1+{#Bpyjem*EMzG(U&B09fzKFp+cv zzO<5PjM0}u>JpJ<^@%0X`bb?mkxWIRnUxM6cxMk3YoLp3$$MrJRZJF}*8-rPt8 zUlNf=DXm94bMZ|Peb%GOu&KYk6BVEJfP#M1GZ*&>{kiq?TsgH**4E~I@H1B}lls?U zKMtBpq})991W%fWg5?2N{ZwOw9-0ag{ZCc;IM`@lisU8wjPgX~fnR(rh`&#SXU7_vJZdUdkFV22^fO}W0aL$G>KWG0 zWx+GW_+pX&AywnEobsLp>S;85gJ)7CorvH|JW3C}E}<0GCrCMZLCV^5^Z_OBl?uBH z?Z6an^~g4uFtYK8B#rAxWcK_SRiQ{|?ks#IDiXm4M*wa@aXRs(U+PGSvv+^ zsYgJiyw4WN$B&eI3fO@R+;(WjCs^tXxV zGeqc|TwkHe^WiPuHAYs$S#Ou%|C;$piYvKK`ndX(Vwd-r7VR zjaLj%e8(xMh`$-;A??^QX-p#1bcOe=Ecrkgo*d>+jhV_-7n-8yaO>+?pZ8s|NaZ}d zB!sVhMKUS=oS65SvK&fv6!2%gSZ&VFm|@DoBl7C|R>o;QS>4l?m8Lq|Gdy`>Oxa(@ z%GuTC(^*=xRL7t4GO9iI$QQf3{_uL6deOssA}ZD+k(#QRGS)r4Is{;9T`Cb-j%Nmu zR6M$QA*-LA>;c~=$#|$3Q7^hA3cUccKjx;t7WXfF^UW5QPs^EF?LLsVFAPnlLwvf; z_a(YWWJxL|eIES&nd!0}u4biNSDD-&r$td%fZL%@Dnr(rAIL_Q%^$r0>TW z2}%&uihiHa!=kFrD6zio7KxE8dO7d`H`73TVoiO1&(z_WtiBpZhV#eu3|)>NM+jj*wd1G|hCtDq&=cV)5VvOHa0 z2U%T$p}c5y%8YsRs6D=!w@Oem&ZwM7Yid@l7PJnl*5{<2Y(Y(IceEj13&Rtz1OLj{ zEM)>B)hVO6#>A=@@Bcoe{S#a&V-Hdt>#&bVhlXQS(frr@6&gX;8+3`K<$ogb8tVIl znqMx*bkU)0v5#<%Ov}@LC>V!7DX@awW~uj|wDx_o0mUhi9KI7~AN4BCH-$Qv^&gi&BG zw)*VDwF@}E6MxixEwA_EHKb?M?IT$K10dS+8>$tzhEJM~QFz^dTIVA;*=@yN@cY(}4&Y>O!V@d}v#T3*B90eSsgMONg?Nx5}sISuK@1nv6ueV~z1C8X`t zDzuy~)BPO6>GtdU(&I%w$WL|I$B{q~uG~iAT+0XZkCwNg9(%Tma8#ArhAK$6JL#5{ twnxt&*!DBFD^B%)NTY%`V!zEkbiEq4KTdSpHICq|D^=;(fIy(={6D%MEl>ae delta 10169 zcmaJ{3tUun_P_T6@(|?BFbu>DD4-|<8u(V+!ba2LzM0*&gcy4J~yPO)4ukY3Kj_J?@QAJS-zw!l9dhg#j%@gtb2U*^Y3qeLHXB!;G7Y` zf0;_J_{~xek?L<(zeH=Ipn!NP_V-t9m$g8 zue`bONsPb0(jj><<>g@tWIE+@RYG~NqG-w)J;8E<1c`hr`O)HL!&UqqIYk@2`Js^Q zDi8`!Q*(dQp!oa5lWtCbZo5bD+1w1EuuzjZQZRUX$P108@j&Ce&@L}Djh2Ppul8#> z9U7>rQFJlPq{dLd0J~~x$sMp*Rnw_t&O2{J6lqi(Wh=ZJtKjmYtnlP@+?=Cf{4?_u z#nBM3iILI0m9dWcfGh|(*0)s#ySu`ZYnb3(Ng-d(<#QL%dr^t%cjSt?Zpa|8l&TT4 z9kt{CeJ5@mb*C%C9QEV-f$xrO1ItzFcDwfl^ig(nes=3nh}0Lj9Ce>L>e^kGO-!Sp z*HK&Dt5gkgG{oMW15QKk`%JDO-~=^ATbzMOic;IFRWdwR;7;YeAW?bWpE1Ss$=MEOVjino6 z1}3~4k5$~po!!py-0n>7?C)u9jAc|>qQ}`vfxjj26O6#w8>F+}U-3Bmsg*v78L_xP zcyw5%XD$XF>FGgwdPI6+gvDH8@g`~Uc4={?u-L=Gzt_V2Po1|)6|a$+DwL)Pr4wY0OHWveoXgyV z2)Mt1-=vbbxZFL=7#|)!`V~KU67Yscb5|Dkwhc8NQ=pk%iOU$eLGbDXZv_% zSI2R?u+(2zdX`G!ElK+^q_sV&9Dx)e@o_p2rIMb3#6U#qkvPxib?zU8#6s$bx7^Zx zoso;T1iVPV;oOyu9q&qKU;4r0>?SCA%vKA%ETNZ96U>%doSxa{5b%G~xL?1LW-%sT`=Rp4Ke&0?`l0PZ`@*9fU_ zA$6YST5RDr3*P4gxkrbn!D4atN4b*o#Vp|M0-ni&MYZauGTQFyzU*stQl#G*39W!oa>%=3qd$3@1q%2=p?r6-q3eD8!=(t&KwKc{-M8nR&{`^Zk6q z<=!SFQl#C%((dMOJ!u-ww*oP0n}k-X&}yYANfs?Ggcc=P)x4HRlEPFiEQ6lB?kUY3 zM)qXe&7EN~Ta|%-XEU;UhQ6=O!C8UrhLS&8=ih@f3D2*NBT4>P+v*|CdRZtG7KHk0KgffoYb&vAc= zKh~d`Y^JCxfyWD<+Fe%$(5r(|wAN_4Xd9z;Qbx)~dMj1&JlXQ^HUTt z5^xW!dX}e&Y&gYH<{Y*Lk^X4CtK0l2Ib$%b8l3M8Hc*-9t(Y&aU$YI+C>j!3&yb!A z91+`X_`2^{9_kBlF2ET_D7kPba4F&IjtdB9n|9Z3eF}uHKLGZ=g0m{L06E)T&mos$ z`IR8ZUPt|O#K15{c6Vs?REwH#+E}A%U4U;V>;SlmhL;NZ&tfEPcCoM!;EK zcX@(cn=X)=IX>cxZaHqe?}GERdzhJ~r3Xd4p#ywCW6qN^b5fA)yvQZZ7?v87$0Q=S zkM;RhmYUz6BX{Pem_|r(0AUH>D;ND~=*-xcU2b<>L0@fkpHexkzMu~(lh0Gwu;kQd zunED}7eS`f?f)5fZ#+-G9yTcE)pJ+(+1~{qDKSXSkVFxy@KK8u)aF%uaOu4lCQ zES^;QEXGF3Sp(7;9M*7muELv4Lq`1;53Ogpn|asOlj_0us+ z_UsfZ=OdTjPt=-~I`pp$YKY|$*CzZ!1dmR5I#bS4qCF|{2C$67b3P8w6q;qD6?V%V zi!ndpD>BjUDr5(iI(WzCVpR%yaBv?A_DcuaU1l7PL~Y6PQmjHLxn|~v(Pg_eu>K4i ziB2lYOinCdxiFUQOQ$jYsyi|1H?oi$vs2=3f&iba2pJ0$dHKjS`wBglJ#cCmgBoHh z*zRy`$jMx>po>NEG3<(^orJ(Rs|_qY$Q@Vc+3_ZA)frluGsD@7q7LNnPDBI4?XGex z9TDJE5g=csB{)iWsw>OP=enX^)Upl5C@6|Wz>K;ASm#DrV7l+=x*Codyw}Tg^KiSi z=QKHonp{)a72Q(_%h|^#YS17%$)BYAgZeJB}HDJ5D~|Zw$pp+ z3qCS7DzLT&Yhg;i#+yzOBcYyzEo0uA7@syHwB1qQPXxBCGvZhH@Ro^3QVB`-9p z2FAUIuegf^GjOGTTxy8@I-X6TYl`-QF1j>wYC`S_=G^7l>dQ*yt?0)k2lb~*q>hdq z`u69TTG($dBaY3u$6Q$T^Y&Ulrzb|;lCbUg&)X~F_OgP#>|I3Hu-EVB?S(^$Lw>oLs*i5bW7(FmHReRwWJvVlow*DA(jvW^9*)ask>N(%IMja*dxYB9g z;vFT+yRmxSyrd6suvgu91v{7T+CQ%=>N8{2CE7o3ur}Z*eLF5E?#fXp$fB=Tz~D$DT40B`9+pW=*J#nZu{2a}jn55ltk*X)g zYsDAosfiidLlBR}ddCQAnsP6lC^S)cVMdJgH#u2K+4ALORm-jA6{Yu7R8*Bw|3V7{;;6DP zKP|nyVnt=i(xqj~txL&zL`$}7vDY#n1Av_er@Ql=jDbF%lwc$1i&<7p<3H1FGr&9JQ41m!F+64MJXd9>-v0^J45-tteyj&23L3n!O+Pzz>7F=zv5 z4QM)6RukyoLEAv5;fUP@`U$8K2**IJpg|b@e9#e~#cCjJFG@?w_?O$AhEY&%3}oA; zG7z8Z@#)&_c4yPYqEzQeNNi=$qyZ5RYd3`T(>8|&Vzb76tE|SS7~^)*2k$iSE#TWQ zp8YYNhQ41vl?gEYR(wJ+&Nd%B(ZD+uj8hn!06qd1L!b`^!Z0xkG2osK3N*cgMCgsg zMCtRve=zWIz@tBOyYX(!qhHSb=MLVfVw`LcSl}(7%{3xi4FjdX+1n4p0qvZDZvme3 zk=y;g58iIzt-y~14+Ayy{ep}DJDmUyVrq}@5y&zG`j`Ps^*ekz_>Iv)A|j8+62Kwf z)4}Z=<`IqqZemNs8^6PYJMWYNsonzfJOZnMC%^#tIQW?1;1=KwSbIPD;JpUk3VaEc z9NXHB3}}sd08ajs23woI6hR*hoB(e1HsBROBGxj)@AAgAQoRFZ9Pl)(^*kR3bEJb9 z|2rWt4n^RKkAd$E1FM0X4!hm^eGKe1BHRLe7mCL}eDF67ycPHy?5z1d_*j9Xf29)w zzeQEC`v?p%4DSWnYfRtCXK5z{S|G68M_`%J zK_Bn{l+(>V9Xw%lkce{XM44q@uM7vY-x>PjfcF6Zy$}94aO9t700Ik9pEvjj)EWj> z1AiYl&f1<1W^NYB$m#lrG(WCPwsM&O2UUG^xRES~k;a4`^ zcCm|n&)MRdpP>e`M|Q=Ntz^D-coscW zlBL$r>m{Zsf5qz>?~83>ni8t$aqCziZdAphSnm@YJ<#89eyp;AA{Us&7G`uuRjir)OyE>mXmfl29FN_FIK@L?VPI;QX zE;X6!@U@*?3j|S?0%eYNlWn2Nd<1V9*v0n?(9IJ46U_knhLvI1!KK%qO7t|XT^K#g zU-{ZCa8JvMBeVX;48h|y47cGlqs(r$pl~oWEKi_(`QUaGP?MU^T5};}RQ9{`EFojG zR8nFpn*$Wq6#d@;I(j$PGAk}VggRGI)^ff{X-;*x z>?WO-`YyIUaq)@|8oKVG+MHk{eNYS;y@?;HU8a zg*?io|G--3U!?S6UR)K0@57KjDEYIl%IYb}Kb<42^IZ?OSHO?d5{%LzP(=wuU1Q!1 zPZJz|lEG~P_>do>=>Lw;71E``A94kU?`pWcfz%}?bvA3w3#7~$Y1Ar}ALcSo^Y&HV zzRTL2!%}{f98|uOLFcmMZ;(OC94LWgyW3=rK?#oVs)n)?HWWa|0%d{CPZ4~pgzsQz z&b<<~4ioHrS(F+iKX;(u^MfC5o0*pSS8jQilzCoS=7&efe86S!nrW#?J;Npc3rRK| z^m;99qNQfYB(c_+ij9H!xoNmS^#Lo8{CwGqzA$c+e5d56N}~@*{vEPJ%Q>#BVSEkS z690;1c%ZBk@_tIc^p+o&seT#w##^?mB&$>rH}jX?Q?hXW%AENt?pvzhi*aSyva*Uw zz@**~OQ-L9onBvFL^GF1w+vj7uC~mrd?A4T_rNK&jZQvjkJ^TjW0y{`rKYUPGPXy3 zn=GP|RrZh`xoKh#-MlIE_jTCC*)H2H9%t!TR12LATY6 z4Av)%m7b}Yh<}S6shJp?Um~

z!ANqQqdM)>%ABYa0&2QyC^8fI$^En@TcKOi%=A(bL5B)YO?LXHwWR5p8Rs4^T2S4ZNBaBTL}Ni}uR@a*#WHKe6v;MO`!zjwa%u)znoRP9hv99m!;*lIj3M4 z2Fk5rG8J_-$=YZr5>1R9V@uT4hohlIMRqQtvb7OpRk zg{i*vNwi;xLb76EsA9pwP*r(^0<}CI4!ORSOsDZ*y>2#h@yf*S_~9&zHa{I;fjQp200Hwo681O(5JE1xl_u{ zo)ju77(K@R=zJmY>N;@JF=}W7oYRxB)jvPc@NSV`ok3rz^aUB?n8`Q4C^%ZX^^%YLcbkiTxQpKEqUX8jJ6&{ILz%11MIUL1 zNX@uPd!r&3-D;H#*@7Y7zIwapPRpTvTy%9kV+OkDW=&3vfQ!!iGA$wBMR%{i3te>6 zW&|1MqNCyMtHeb=*rr-msf&Jyi$23e@8hCh=%V*^(dW77{ao|~E_#0#z1~G1;G!>f z(GPXem$~Tf^}$LPo%RdnTIHf2X^2QyyXZ%`=xbc`Z@K7eUG$?}^z|7u~(V zXm-($b;)mY(T{V{TV3?yUG$wUdcZ|*bJ0(5(Niw^U>Ci^Mc1y*+)fw$B$vFU{gmQ= zh>PCaML*d^AK;?Xp2J)NUG#iIL>h3>hq>taF8V1hdZCMcs*66(MIY{>m$>L7T=Y^G zy}(7E;i4D1=oh-^qg?dvkKG>V_CU7>x;@bCfo>0Ud!X9`-5%)nK(`0FJ@EgR2R`Y4 z+?S=x_w+7p%>B*7I3BsaIng8CTDtt1-dngL>Eb_voF4K#{`Nn<1fM9sfOzd~XsJ)rJCq+l`8Ljy@vIDZ)B>FB1tp7RG&o{sj~=W)IV<>?5g zeFo>hdKi`Aw9kqnGw(&ObtVI&x`W&-q_do{n1D*KqzG%F_`` z`zp@gPI)?7Xag9)Wib@nXH z*;=~&tHcpdFh>>iPPbL{KmHsCPxdW4>mLt7WpebK(&c9rLDDL1csJ3vwDGJBpr`W! zAf+nM7F%N2ReF5X~WWOr47mE%F@OIhL9Ue8-ksq znoC=PJCU)FwrQH8v?a*js3={&beokNQreVv$07(d6~A){CApta(y)CKwQp%dOKR!f zbQ-eFB3mc28%1`f%2L~t?D-_yG-qdNW3sulF}Q8wMk=T|^VIh9<_Zv|-y za;73jEAlo)ZbqIflKPU&4Yr};ZBp??qTu%zlLfgatAaCB{z6gE222MG?x3okM6`xr z3OZ7vqeygoPjq}p30za6I*xFezY(9^Zt6^M#U~1~R*?uYw)S3iiu@HK|AorWRr!NSzG)6TnQW!zFKcLh z94u=S{UO&5gFr)Y&+?^vti(C&@9UfU|FpUPhUVpMIV+kI2NG>}AHtIOci6LiD}K#J z-p-{xUE1&>M`!A4a9I<@5*?A!)xd*6W3$@%UzFSRNk4(=qwxA#fUkyOuBAB^~mwF?PVK7qA0*s-9IUT`%RfnGU&Lr0*B$ zjg-L3AFK4)Tq@eJ39;F9Rz#J73$d-Km*GL}*b78Yx#+oA1%IM?zWiL>j`5iq=?sw` zEz(!2^qngGyhx{vjeSHqSEMgc>AO_=Zjo+-TK09rE98}JJn+mxkHQ!rq{n0|BEd6Q z2Mhk(p$_6;VQPaz{TYuGOpOz@rJ0Aq<(=uoz|xkdIYV7n3Yh_qaomE?l8XJ4>kSK9 zQj74}-A-e#;C32`K7&BLgc5lEbFI}jNOuX&o=|QF=Qkb>a;3n{=+r3i1xiq0E~1vq zyMRo!hlAJZNvQZ{k-bxgs{>W`RFb9c-Bi4qSm>o)CyH0lE~bl9o8KTRCy2_0TKr+E za_494sSeZT7mD>63LRHuNu@fb?*hmS@gdqQM zKG~ByL6Mg!@&-lPp_vPU3C+_5`iMa9ppg}In5WS5T!ns!&u(+mHB?&hVnNqaF7k$5{ z1djfR>RU_t8t1Hr&htd)n$iYRm%4g{Wfo~a5f#r*Cr!DgWim43`fH|2fE^8wGvAIO4cB^vWBhq}|DzV1+;cBs!2 zwW;ru%w)ekC2L$##MGv~YaHgi4)Z}lE_aweaF{<6W|hOd++p6tRJOW@H1}F~kP3Xn z;iM!C*DI&h;rvNB8nBcG`GPGMti;*&O@kEsqc|?%Azr!^=iWFdYIZ=@-1i6NgEAYRRu{Um2I6Xx|yW#p(XWE%C`>d6>zr!fY6d^_6Mw0 zK&=6Q(31L*KVXdl&NKiJT2hz!0}yoFuMRN)5L!|r`~htWcpZM>N`ugn+WWq5rBe#H z-vB^pNj(QZmsQ)X5YbgzQ(m1c-jlp`-uio5NTm)RVp+>Oa9YE$TV27iJMUZ$zKe8` zO^+l|315&&O?mmOrf-30t6?FYd|Pk;>F7E}bR8kOrmC)URo8=}YnLpT!{FLW++`j$ zJLa=VFHB~W=Bk?Ms-{ZR{FK%7Z4+%rIVO$q=vpbdt`%J~Ro4Zo>uA>1cdjUT35jcg zm-;(SVx7u;TQr>}nr5h`kZNjuj~#WsSd}XZucbs*cXxYqeO%5p+#Tc^o};>|Ro4pW zTJ>EyK5WXXAZ}A%UGmqnEc^aEkIFYi8|o2IRr ze%%^pbk#@r>G4p6U~hSHq{*6XlKC-#w2fwgB-J#x!Q z4%MYctH?PM-)8^+jFdWStUDZd$7O^ojtD%aUjNM0U*NCO=FM69T+EAWQ}exbq- zQFtjA4Ua;T93e?7%1$2mjW-I701>H-a>?;~m->0C9Cq@vk-)!>*n2B+f0r155h(DlBJsL6q z5L!~#`U7?4?n0fd&+@%{j~oa6p^1K>9J;7#93!`%$H!vMtp z0CZUmtc1w_qh~mO;Bx{#!zm)?c+PN^(dm6t@w4BiB=<8KWf7}qY6Q(E-?+|j__ktG z@f{-l<^+*GOQpwl1<~VQ1p4=1xSDL92hDAG?* z0_pFo^kgI5l=t!^VsTd~lQuR7H#uxJb4Ch>W;Hs}Im+SW3CA4VOm#T_qKIn1C@Yvo zhx0e#(9loXo^?1a!ZAlWM{)GC1rG|x9NgUHaDF13Hr4it!&xF6I-dDZ;(D#tbOY+I zK{5V9@@Mgi@s#9FrP&OQ+Nq8@b{BPvyyI!L?o6>)I`F-G=?iF6K&=6Qfc?Ke zz-~_i00H}de*h+U?#PE200`Ls`vXkCy^d;f9YDbT|5e{QG;0a>8vqE{|N8?rDqyhz zfB^sd156J**8o6hNk#ktYqf+U4FCk3*ZBk1DBxZAg)0q0ORASYV6_4sH2@G=Qm?#{ zWtsB}h?r&0p8Bra+qKv<(e`$|ro1skzFG6%blbaHacd}T3Eq-}1l!&<7*7l6FuZ}6 zHJ4D`8gOvFeCb+Q5WGgq^`_#Fiz&%H&P-hz^^K?+_b=@u4~Xs8z8Kjk`T7uG8w9SNu>HSH@ zy+{j+j>|;HY&{HEuR1WPorcG6(n zRQ%CscEIfl+Nhu#U7+6`K_c!Z;2?t;i3}&K5S@34&Sxos6P{I_V@0Rk1an2YPNc6< z=|8G;ZzGNUJxyLZut_MpJ#CPn7WSc z+%)Cxpbia7AB7&CQuR!}VQDA6&f9_SXwg@UJFUba2;ok-huDh+cb~>*0L;)EwaPdS zjFcc!9z^a&8s4>p<$DUvH^I8DWjbg+c7JI&(F;oPec*$+?Dm^!rry_=cq>sK^VOgW zU^;!_Y9C+Xy`CDXDeqsj*=cxc^8l#l8%bPR>Q&!4n^oL;B zE4Bb?o8i-b;z6of%C6easA`S${p4V${q>h^hwH4IP#-5CLdVLTo6Vx-mzg5x6Pw!h zgrflN>|vm%8~V6`8A^{goaZt*(sFiPsO3_Kk2b`|POLsUVY9V0_&I&S8!b=uYO}b> z@O5u(vgfH@O?hw23<5Mq^Vmbl@K77pjtjlqsBnjXyA#|Cy2;EZ}DE0dqI3VMKsm~%c~Ib*=?9CNdB zpO3_(;3V3D?bNhQQ?BdQ;LFrMwn?kw9-+4SI~Y1pRC5anQy1x=^@sCqox}SfYd`9t zpoa;BJ69r_vImNvW9iTL-TGh8Un1r8N=xcE3=aCpNB1L1;vi+kvnLk$^pjbQw4fL-jG5(gdsy z(HQu#gv&>?gK*ZR?;Ju7HY2L`g9r+5gOD?$Eb7Z+#Ta1P&_#|z=WlPgm0^^ye9*a0+bmBOyf*#^c*wdNw{+nn;o&xMn&18+dmYO;6eUL;2jZQ0R9GJrX4Xmbr6_(L9^4q*1NkXb3!XZQe}ncYYiP#aqqO1UOxNAZaxzB$8IuaTaX01}stk=>w^3`# znEsE?v?UXVGatp=V?&N2($=hy6W!&_KhS+=GVMbkA8HHvKwGiW^KiuLFT<0;%S z2b)U7g6*;rxD3M-o`1t57?`fiwB?zSw+7!wXMB$|VQDb66-5BUOR(2JF_x8o1}tvqPfxWTW;f zV?^>ubx6+c3s>zvc$GabEL-}%JSWHv@K+;k8^G?GIQk_C` zz_J+u%(QA$=3Of_qtneAa(Oo`g7R#iJ=gl4^)JXh|Imr47No z%a`u85>pz3dqMh~UHOy<@kpOI*kpG1!u)hI-R*D6`#F-bhHY7*sTj8VR1xLc4KWP` zc^jf;^FD#S)i-%=Ac*+>aRxBU^M-Ax>F)kq5deAs;Px6t90JPskzq3~wFGH_OsfcI zFL@TZm(Bxt+SNyYX*7RKPDgjz>)~VnZRWs(q)AX@OR5zE7{@Mui-Caa3=k6!H`6;9 zm}DAgB}x_y&}+*0HhG?m+=oGnjqnfv zWkM#K7G>IWoX4i6UYp{G4Z(VBLdhHffB(p_>DQ#^Yiz19HvJet$EL$FZMyMGI2#O&0Tbt4g)B-8qS+|zZ_}7r!p=+>C zm`_Is+=kiOuBT}S*$X84(rYfRp|eB&!Y{QDFRZV^y;8dwkHeZwn(-NN4}>tmU`f}Q z+~Ix%luT?!1#~aaf5kFeo}1?G4_qyuILtV5Dm*{~>F$2AJs6>R@Yx(p>UIO%jI(E2 zmNf=aOv2)VbaDC7JJW7mpJZZhF43uTcBIU1glbbaB;tr@LIW32SR{)dm-?an24I(f+u> z-%X`>Kq!lwKL4%PO|NP`o14x=>5iM0!mzAvIs%^V8dWco>0RBlKR)`xRae@Yy8lXa-O6ppR3^V=ss{SEjZy7%9)g#Lgp)K0aFl|5Jh6G3xWq;M3XkPv z@#KRj!yRxV3r+~KLGlq~r zb}NS&D{+4BY1{w6*kAs4c4L1)4}F=#Hr)46W5>FTJz9)?fWO(&#idt+D{+}&EcI8j zA#?97=yg!GW6doV_3t#B1t(p{{>47y9cyv##^5{SgL|)5IoaK!ZD{+&%Z|rTzvZ2| z{cqtpbL9Z9p@^0}OqQecRzOwBu?;$-OYCu5If< zVyn61u*m4L1y=sX)hK2OJH3n836F4_BBV+ya1uaa#=a;6UC!Syanr7qdmg&DdT*Z% z)k(EOd-3fO?g;y6uc)z!X5W|CoKBY;I!${`Hga|qb6J=+kvZnJo}7ZZ8+8r&fmb0t zyzMyvv85a1OS$6GP5I2dllv^}xtY=MN=r#^ZnEraA>*}AAkLdT5ODsz-n-c=p~a3l zamqNXLqvHGp!mGuBw42(3;Se$hgp~qJEknGB2{C<&dn}03vGyx)ta8}k-JOSCVhNpO| zp6zh-2jto&Sv4+v*bD#%pcvTiy-BbRj z7#2|&RJEl3fQNQ4g6WIIXj%T7(ZaQ-u-CAd;W4V6-(u1@XCs`{EDHE^?I>*SXqG_( z;h_L6gnsD>twSf4jbBjeQ6Fg=-*rnQ;eW!eWa&PY_Xsd!rvH7A^&tu24Ya`fmp-aiNHWH6_& zWzrsy#8WM)Fbd|5nAylJ@PysS(m9**;wTk2sIR4j2Pby*$Jn!W5lx8b3a@BOS5cjw z?!vMwLy2~S;b(JFw|tKntxA?c30Ri>u2B2! zplGx1tJ?$J9_aQ!w+FgC(CvY44|IE=+XLMm`2WTOIj-N|%w{zG)NFht{iUCdEuUW= z4;NHe=40T5vjWrROqoKzg=&As@46;y5`nYM3d}lxO4;mSX!?2h8B_cyZY_Sv)?aGo z^b0KdZPpA4{@q!dhH@?`{4QmOURpTR3dUmLWQ@uQRE7g&W#Ej!kodv2fuZ{H!~z>_ z%x0=vk710AS1btEmWLLNDnLo(k1W5%n;#gQU4HQJz{#or=;7=cknsDhb+N!OOH#N+ zJSHW%9d~x{+_GtbvZ+&p=afyHO^+~RpE_+;aOUhl*|gcy1GV8qIhC9rz_l>EWH_bx zf!}0!*xZRz<^*R^K7XjGLpTC)p9E%Bd_j3p@mT&?OTW)dqMWM?$17rydU6ZrE9z<~Sj!_Z;lpF$>bh9OR?I)p z?0ASlk=pvYn0Soy$$B&vJCL)~1(I?8h~Jc67_QVt<7y2p(rW~zBgW95arB3><`QQP zEss`2!qI3rR8d}^NXEhi_0ei&6^;tc5NCy^$0F7AGr{5bNPj^7tl*U3q}hQ;Wnl8m z=~Dybka$S^E$wzeX>evRP*I2Og+2!_g~QSKg1UsZ{ivdGT%)0dql!k4DIR;;xYNt$ zS5$_pzG+@75UDM%4v%yyB((`t#J1eO<^FJ>d{MX}P!kRy#JAjETOOD@sz89$rPz?J zAF_w8Se-Shg;icbVI|r}AtWbFpE|W{_IL|pAby*h;?EvdsGq7MCrzI-ZFc@C!^EBF z-1u2-{5ClKw0J;VNiHT=vYw%ViPO#ru(GoP6DaNlf?wjUGrypnZ;zeB1BJtASRG|4 zw~G}%cGSnpt1+sH>5*tvUH*h&YL2^Xsz;Xc18xHXYC#Q+93#v)ID&@W5f}1>L7X~5 zd2C4tKRJ%ypstH8v0W96UXctZ!Zf|^E}Iez%?{3*9V(j@ni)KI&XkEWF;bg>*76K!mX1Rf1_JI{ z90k-CHK-+bbSqw$j8%kz!*~&kB$m)GdZX9d?ZTtA1cxa^8v^6G^e~x#bnxamfU2VL z^|g5S08ilk#W`cyP%d+SaUKuJknhHGc=6EU5e!TzLuU$%8gJ~2)zu|ruHKihQy<4% zai))UyZ+8tynpg$K>RwrlP1oZoo{#giL(N;gBQ-$-tWPV*I(DhZ^`2q+w;A1^zgvo zqQTs;3auC#ZBhsQen8XJg+RZCQ9^lKQ%k6yxpo< z`=}!KQJ!P}a7+PaIpV>24Ro40vr1X*bHs=HsL$>PtS&OjO-3r!tm;rKTwAv&obMU5 zY@5NZ#ju#4Wz13;ujWXlwH_nk!W=&5)WZSh*aihf`-wv%XDR}cST(?nm|L2 zGJ!HOQCmM!o7D`;fGkS=IyshTy?&4TCX+nkzegFhR7uY-qPOGgs`(9#8QK zfL=Azt=g=cIV5yPZ9zr13hXJKK+oibS(gef8nBIFKFn@GDq zC(=R&2;;K!KjY9?c|{}|9uW^$)I}?uHOef_?<)@d3RbKg>fR#A2WI`akNG6af&tq_ z**XUv>^$Nb-4XM@sT(%<#;+8%GrNCw$(ITd+O`n@sdhg(j|vx z)58nn&@pZ?Tc153qj3>>S={ffk0Y<4VP@BEQ< znno8K*{hx{KXk zJRZ*MVy>QO`oG&_`w+MFiwFEAjo!=}`6Imj*TK0LY<9P_&e5AsxWALAOU7{s97h+$ zy{SMPYcskFf^j-tU=hu}Q-!T~d1Z+9ML4ph1)P<^4=)Z^Br$eZC0ar_8*v$>T0iC{w-rew5k#1oHVN z9G}S!3+OGl{0YMY6U?g1dmqcQ7s`G&%N&F9QpVY>an?Dla^E>Zak#Slg$>T_Q5?4O zol%@ZdPkJ3=Z&t7qvaTZQ*HNNjy8+dkc&nPsU0z-a`uqYGlon(W5}$F)xkPWvTtM^ zZ+lJdgUER|-}4~IoEeykg7z)Wz^veGxwVP?$pp_4xj?3r2Nua0d7v_B-w#6P50uZ3 zBcQ^#Asi3XZn+<~OzWai+&seIfXg4J0Uc&BAGzpT%Wk7G>dWJSWHf+sBDk?5gOA{5 z)Fk5(+>?$Q^Wtv%c&rLXW8rFaecaPhqhMDV?wQ~O2lti&l_;b<8co(fbxnD|UfIxX zZfeK5qgZ!fZV`%fgg0f zRimZ68d4vQR+eLMO-6BVJysr#(><}eXh3d_*?!`(l8H!71Z9$}-7wCLx_Y=JfC^V| z)8HOZpdy?=U0kA5y55UM5!u@dg^-n7*5bBgd9s2Eb!t%`BSXT`K*fUcShcq2mIgY* zptdkQo4zps_u8H+u=44ad?bpq2kgb8Nj}7M`!^h@3dd^ED)q5Ctkd}G3~mkLYlM+Nkud$=u{zDK6GXvsy&$4FF^tNSf0;>`_ zlagfyf)C$1LDSbn$|LC0fy$v64QPR((dKO@#2F0}=-ND4vNn+p45`$1`Ud65s3T$H ziHEG^=on=R+Rt*re0Gj9y#C5k4?f5?+BxpCxZXda-TJ-pY^!lMM}|FUKC`63!iriX zJIY&+q2a2k@(ON|xT{GpQuBzARfXG53|>64aFb#><*y>ZN({~g^erFyN|KHtd`3;< zL3aEQDziQriMz&XlGgF#8;%E6(Jo_f3r{Jmfbx6yQK94klbPv+) zNc-R=biME@gW*Vj@g(p_i||5@8l+p1-h^}-UhJ_BX)nC!<$0v%;&ncIkS@Y&g!N}+GG1YJ6VgYJu0#4FUOM+Y((9fD9_gn@`{4P$Gw>e8 z;Yg2v0eGa}L0W?}iS#CHSEbN4f*)9;8Qb^r3C9nrY=M9*}cPpI*IJp*@K{ z2>+X}N~cdInR9v#pyVX{$87;?=auPnE85TMH(+wVf#2zW$d$d9Srd*Pf6C~S27}7j zOOY=5UOGLL z{{+a>5oh#Epbq~io4*U>^ALY`c=)&4{Jr3BMO$UFSEdK>?VKg8xg0sb4mN~g!U%a3#MT>dWbKLLNfo8RNRwtaiSFJ7BYf8gP_+kEnC&-)QC z9)63>KNI|i!S4$_j{UuD|6B_Goxe_}M|=1MHvekEqhDX*(LdMLe<%2V2mg3C|6*oy z{hk279sGcse~H82rTi1!{L38vUhww-KL@E}{|q}m24Q?T0prR`ZhVgyZ2Rb!o?Zt3 z&mMlO&8J^BT8YOC>36jq{XcZ-5B|R}9{Ks_PVoETL1FswUb1-hvYX)q7 zk5zX0yTD%rzMud0f}aFG;KsZBM?c0w`~_})j|yA=nczPOKD`9dF2Cm}yMC8~|1zGB zzum+Csm;F{{HYjc>6J@1zQ;|r{yV|n4E`-1{*P?_6W|x&y$~xs{N*-(7x=e>|G208 zNA2?Wfu2FDG9x|wQ*8d3;LpdnKh(n?Z1XP#KZ5zd4}UfIi!nbu z=&^sTZU3F%=VIRQ<39oZ&EVhU!T-R(>QC))Zi1^+_c&_4+CYa95-xb@5ML=?W>`fJbJo>r%Yu4F+S&yU2Q znh85jP^_)HgdbBwsX55OmKnbmW^fmToaruLy0RP^k9 z2nZzQ&$IAWP$?TtYn?l7j@4tC)l4+TaGK-ELz^d0vScsG6P_-j(f{tN+XLMm==MOj z2f97b?SXC&bbFxN1Kl3z_CU7>{5{ZiqVQH}ntzw%=V^N3-I8CasoAIXr41!6lRq{i zKPn@Cc1C`t=KF{m%L>Q`{4xk%!xNHzOY`;gfuKE^O8L zqJ1@81N%v8=xyofZjR!#5Ibc3c_HGM_X_cZ;drU#y2@pYu8Cu=%Z z)5)67)wD{}MVj8A>8+aHr|AYww`%%|rtfL`PfZUTtmSKZvZiA-ovi6xO{+9rr0ETs z-m2++nr_f^tER7L`ktmzs%0(ME}zbwH0g{$K2B1G1xAf67*#MTK+hl-jx8!SlG)Q7 zkPomvN@sE@UURI&t-yNW1XSQ~q}k-@?6-&2#|oUNf|`(vzgZm8(tdrkN_LFEH? z2>k>}tT`%w{3${hr1o5?^7B;QghP|cj~_1bd@l+g*Q@**l{d|>Rpnp7y?DC#-W1Xg zRK88+^O*~up?tFcCcX)T`=OAds}OXmZ{SYJYw^}(m7jiw(D~jKK1Nl3p2{2jD^&g- zmFIg|kiSpm*QoqpQD@OT8M5d05+U%tEqr`KCR@qE?)2~wg5X9|Jujp5^uRDQHN z?0J=6t8}>uXjyzO47@)my^kEBT6~WO^tY8hfjSPZOC+&!FrVdEM_Q{g>^w>7t25~5 zf=+hsRXuzU3%V+me*Q(GnD1TT<5TMA6E7C}pCz%DLq3~7f2?{Ysblya4lob-$ZztY zZ&5vk^->_;E5OH>mA>c-q4PZge0<+W&xbzrFF?=1iFN72qR0I=TfKVm0;Ruo=6!BS ztaCumvA$)mGYq$o=|@?a^JxG97QpIgo{on`{&dJ6W-_jHD%1N|k3@txRQu`WKJr(n z{0Frn&-ZZfah1{=FBQ6ps|S4aJg)MW#6_O(wcz7(KJxVYM~5M<=4-h(35;)UWUJRn z@B_(r3>HBhcCCI`_+^tnj_G}@*De=%zBh)CV?hrH$@4epqi3!Uz1D}m$cMhdhkmyY z{UIOv79aYbiQc2HW!BrKa&NGFAL}`77c(FI(??IwUgGDfd7{CLpC>7OfUf6{(E?6a zdXKOWRx14hrQeVd4-uxTkSkf_LtmzP`j(3@-vh?SA1QtL0->AseGv43kUW2%1^rOW zQ`RyeqdW7pll5rEmAs?+58+j~W&OAE4&eUi64Z~!fj%HhKRp%nZ1Gv*L!ZU;KGt6< zMDdSRe-v~LeNW*HK6+OB(C_!5Kgsky){WYZd@ma%?Ns`2GUBI0>Ah>joCnpagRpQs zw8zm_ea3i|2RilN?I98TsmkZ8yjjO8*(z4~&FcS{GR|kZk#f=sA9}qHeX;7lexB$E zsH!`C3ytdr4)FJmU}QZtmL0}Gy2Q1OjjXSati1Juufi<;b;22 z%53p=zUqHm=kb8*y23~P1|Rxus%KKQC@9hSWrNZ;e^==IT@rl!qmQ1~eCR3F)2Zu+ zpQ!$S`pEaf#y(qpj{%+hvns!!;X`lqp|AC! zKg9Gt)?*p{u2t!`Yx|mUn||drn}0e~{xy|9QR_RPkHp~v=L zvMy9zQ#T)vw^riyPVrEAaxvb6R9jzz2Z1UJ3bRXus_&>a2hkzpeo%_OD{V_~gUB=M=KW@F_u6u*$rR%#PzJu_ZQIa==_%jgYWyY> z6`=%Pe~532*Va4Sc$i*e7V09pgtPr#5vRnOx_H>sQorzzsCW4Gs{{8@7~UMk zR>5I-Y+*D;(0Dij8_VMrkqEtBDuFjmWW(cChV^h)buAu}L>2HfYsjikCgLUMPANNk zQmCk)sG!&}r6yb+V;|rd+&I)jab>a|A1au`FGGPg9U`mBBQ;s|)ZtMydVJGZs~+Pw zd)h?D)jZQU#yhWELD0wXf=L@fG2+P4OIbvgUd@7DEU$2I1e8gpJ4AP!+5?uxpxru- z=^O;?h$wl&4jIg?XjMDwLmW*B_YZFXo!D}?LRSeJN;UOy*%V~US)NBw5{ZI%s*U`YP0s4eQ z1T3$N*M%0~c|Q2s;hXWuu9IyiJA}KmsS5WTeZPdG!U;MJPABf*5}GM!tPUmd&}bD} zm7cn#UPNzy!}Eldb+sTmV$txGp=jNeA&l`JI-dNjEl)V5x|@ccQ;fKH;xQQxC|dCV z{Z)vlP-uQUuAva3v|?eXV!^_Yr_+vcilB3%ZU1OH@>@XkEd!o-$l_zir8d)9 z>ez~5KK$d(*2b$HvuG%RYvv~-HI- z11Y(NhgjP)R22G{VLL z?qLPAvjDG-U0x7gpnHi0mB5-D4CNh$RbZP(&++1Y3`>+W@$9k@v;kt(viq=DwfRiy z$rhBvc9+*iDqwgW?7*J_HcL!ESFsB8Ez)ME^&h2lj)$Wzobk)G688=0GU-W@wf~xP zGee-;N3=yZczSk@E|U(Dto>KF^LBnLKK&E-vJHNl;!SGGH|3grxlvGp57^4u<(vEe zCf%k$95=I_20svax=Qh%iZtb$?-Q8Re1Cvs>B_W!255Az-r&vsd6QN#itc^LW#mjs z$0c;{-{jX|KTVfOOE`z;Gmui*#(pJRHTXcf4ZcnBCNXo3yVH)YSOVkZ)GJ@xQf9Ihu|?S@W6%yjkmZ&&Ox7*(kHsOPN{Ag3W zNlT2NrkUlxkb$?qZ?Ikf0mYdlv;J>@fm40%!z5$w_t!s3IVWBv=j4qY?}O1F|8>~0 zzhAI;Kk=UcOa3=_b6) zKKOtEYC2fUFU+7DeCGHAalYKC>3eP!tF-)j3NBp7;s06qZ|pbYCyw)N+wsx4TIJ*E dIvyK_Dc9r=#RpS&L!grihx242vkKhJO&dbfDnA5he>7GlD z$n{Gq#o2H%bubPMb$yj0*Lt0zXTw_*+R#w9?_$VNKYYoF8moj{7ZcBKZl}RddSaaj(YF*(Q}@Uo@0IN zB;C2{eZ)uq-9GyN>4UHJ!4L7#ztV@l*vHPZfTuQOAC*AlYS$9rP5fmaH~ZB4oDaSo z_K(a~f-()CT=hQTqi33r9~SxWzvY8J(Ffn;W6yg&_)~rK-0j2vun&HtPrDL6_&0s< z7yID<>|^JzeeBuogWv0;f2|LGfKR=@@!{|AsrL;Zyise_#KU33vTEyNQ7e%Q#*>x> zY$6#Cr5bQjT^A0tQ9JV_YW6;i$EIqFs)M6JbYVO(Y6auM68`uGFgmomZczwK>pX4R)bg zRavzX&asi<6=7H76o;oB)pfCiQ>Exgu555{s1q)>H3|#t%0^YkQZ8geJlqhBhpD{{ zDfFL3Az8i5s$ROxstHEwfCwfMVFam^aP6&@u&ob9qDDMiA6riGT)iTQc+k#C#;Xxz zV6KhC#!oCRp{sKVmt$4egsYQY9QZs4=^tCDn$D&e7tAT2G1Hn@eC8zk)H$12EK^sE zJau5m@}Z#=ZQzHexrakjXL=r$hndNlV9@iN$8Nh5)1!XIG{FsxLr`O?08*=c40PcgU&CiEyts^IhPm*%FNk2e z@O)n*HH>lLscwCgxbWIXL_5ocM~B%*sSAI&jWvui7ybwre!dGo$c4Ymg&*v~FLB|A zxbRC|_yQNc!G$k$;a9lua_h&`Mi>5Q7ynupzQ~1N=fWT3!f$Zlhq>?@UHGrK@S9xt z<6QX7F8uK>{1z8p-|G^&)rCL7#lO>qKhcHXKh=dVbm2$4@WWjAF)qC6!jE;~$GGsPx$q?}{OKy&mZGK(7aSJ<#icUJvwopw|Pv9_aNzuLu5* zd*JTKomqg19Pth zMlRn@Wm-n)Y~b>@sZ2{)olCgMZ5*dsL<+r_K^C|BcGD)YNHm`E@GO5>sa(m;Xp*T3YHfxcoaR z(~?qW*C*8e=csH_xr58kP??sHI`?pSE0t;KsI!&Jk5ZYIj5;@S`2i}^Qc>qdF8_$i zv_#aoj>~sZnU;n+8@YTtm1#++vw_RsrZO!BbuQuZH>pfZK%MhZrg)z4c6rm@tIL{R zFI#hkDrlVj)Bk^q)2>!9mKY1j9v7eSTb(KB+&iQ3eclRyJ+flan)8tSnNQr`hnU0!* z5wje5vafO4Uuo4kb>^b7HPaS=({_zJMy0dBJZm0j=iv> z)TnXFq_49Uyo;a%1G%)UY4y&src`UFthwJPa#LATpnF1VSzDkT1p}}{V47fCU>}X$ zvNfxB8mUobEkz$+fKtoke&-U%Kbk<(-mTQ1Wle4AmP45gcv}_ki;A~>D)V*|05A15 z@dk;vWl?)sbE>thIk0p377&;N=4Oba00Gt%*tcf&J|jtW-=OrZRr($ied9&nk)*FV z(2kB_OD|U3S19hggu7U{|MIbLqn=+uQq>dUdX80+rjm?{4S|-1C4uSmHqTp=dU#b*zK&A@@cTrO(DIIC(NGlz;D;;+$9R;G}e9>`= z7(uc-aqf20WlA!rBwGl;?K4I4Z~x+kr^}ibb%)AMAId?H%ukPm6LxKvFeyQpv?EOR z^bC_O=s{S}19=LIc4h5QRp;AiBU*fj0P0*QbuOnm*R0;7c+&x5n*6llEf@P}=K{6n zLgH;%)CGfSwznw5Wos9PrLuG8uuIoFm{f%Ym! zKHB*!C3%=gB4M*9N=4ERv=_TGnKj*c9HT#0qN|i>SVS8{G~ZR}{Wy1<8&Q%olw_0u zx+*D>&!diYa5}|?N)U*R{;*re#lF7`#T^sw^}_uqakmVvA#`(K!&Wk-tm(HHEVJFt+5MEBfwXxwdo_*S=^2bbeLo+^E#0H{n8bV=L#dPiBzp#0!z0xyO=_w_EXn9QZ+)H|z18eojs!-f-;E^+${2>8w|EF-rGYwa<4b zzg3i-Lb=+ZJfK>j9{-n;b^akudyb#l?8N_?}3U*U-VK#8BF#D6H_pNja? zA8_ApDR^8*V@&Z6RQ&e|KRv&ue!NZbw>tdiEB^K~*}PkXpLP=ye~|cFiq4@R!R24f z`!$S~))`9t`${}6;(bMYBv*&=(;V0%vNt%g&*DM}&s?QsdC(#d`-$uu?^DwjQApq_ z$5ArVkzK1~Pg1hiNWJ+Y`vA)Zx}0WSrug5*1OdIE?W7%3)XeLgx^SiEx?X|l(#GLR z_CJ-ZinG024-?t*lq>~khsfUT$ab8^ZCt5juMj(r5ZOM;&b4I2&F^^!^?ge6d?mSz z0K8Kuk~_hT8aI;UDyO=yDWSua&~T~lC=vRu652pQ*P?1^-?>WYr3qweet!`B5<@80HQ4&@E6!D0)Z2#F3v`IUiCO@Nw)A{|fwTy` zjb?JAfoMyQfIyGA(jUPhbETG|pHtAa(R-aqre~5`5Fhq?V!(s~LQa(zc12Xy%b#?a{?I2`!VCDqT&YYm(@C_Z`+XOey&x zz&5gn)J*ZH*-6vxmdPh6HMfhJb4ASqO3hxr2n-&sv@K*NHtBDJ-OXF2biIU|G&Ju! zqHC7ux|($jzFl2VhJfmtR;4$3G)+{Rnw6$oMAID6G*nsDqO6*(6h1|Or)cR)kFGap zy4*7Pe5I>VbXAJ3oo}OCuTr-{Ek!>dYRlkv)YafY=H-Uwc~t&hseEf3H}ok{StTk{ zE|qKETGDd{-O63j7WlF=W6un`E$|@fgSCMz2pS1Gni=1T>M=KM#oSbG%|puEY0BJM zas;jbH;K7B-U5F!v`7}8qPPnb_afn@z2g);8;HAQ@Ek%n2U=ZSxP@Ak9!7oBge$zg zi0}qo2U;fo20LvK6(dF8cSK(q*S@F~I*%kj^5lSB{vE8-$+-EkQn5;@_=I~JQ+rX7 z&n6X3QhhhwtECKDoB_z!&6de$Dn;X@<9;ZLo;*lxOVPA)=M&T#d!qa(C{2L}*Q|a} zO_YyP1|7t%BDCpPQU{N27ClMQ(;V2WC&~xtD$_FgDaE~;0Jt9!?%A5VrRZ)Ng(|(B zt^7z+&&}vx9)XH7LQ!byNtAD~LpdepD@un@?r>X` zCRiuJtr8L^s|Fmx${Lz`Z;5Kaerdo>eJLJellDlo6qH8aC#h(dhQ(Ll3iw6v?c#~ zo_x2ZkA^g-OS$kgt?tJ98{EH$)&#qaEjK3PP76$lZt#P6Q#X2x*T* z{uYFQAvLUdtK>_p@+AjADHiY!=ej#@haO&~Yfe!jgHz@ekBH5+j zpvAX>J8*N@x~2njpJac+vGce;50JN8iXNa5-}LmhLTKUH64#bKmEuWOO0R=r)&3(j zs+LgHvg|d@xzMWDt==-x+ANQaVCYZazATqI%A53-ug^UaAA}(T)YOZrEV# z2z*2)f;>o0d5Lk zgdf7HJUTE0T_Y63I4{F3ieV-^)PZaGab9XvQAdH=4(b3em7Y;S`2gztEK9!TVZ$4d*HtXH}=^%1L} zCtgHc^wHY+g$MKWj9jNJSsiviiQpXBt}>qV=oLr{+i)2)ena^oebwvkRtnD)kWdx! z5Iibg{mFk5<1;9tmGj9=z$qP)_sa%F$~ zK!$u+i^_DatWs6+<3*L=nwe)iX+69-@D})gMy=rCGx-Bt+sm6;F_9>1dM`U|{+;<$ zKiz_eQ=N)fqsCA!*v~Tq?$=ISj(Ad>JeujK=5kx)SVHY6EhIN}wNW&&$GSX25dOop zpb2r@7DzLPvw+Vrwj=N+a?~48La|;!0|7FeQx3Chmp=Ic`XoIM4{V*76bjv=q$hLt zNY*O2@k3<~w6&#QQ9|lTTEUHfRwN|Lw)ABfL)^xKn|1*WdnlS$?w-oZud4h~p% zu-`g_bmQtbjpQuN{HkV7jsyzHvFH+>uJ^bc9*fqKx`T&1sM;mO z4p6rGidW&}+yV$-7Wn8jcSMhc0P^n}cITH+{%uMfkZVyF_dQ>S8dRX^BP zCnf2&z#(QKpB3E5i=EsmP6AjfpcZlx*tVY%#i2E;4;jfh&4EJ*y1UtxPb(%)P|3q} z;otyFFsJa1ZP84C@}`|RCRe*i!{>LzduWiiBTQKH8G-}FH&3_)fow~^`6sWSYe^L& zjzjK75-Q+^K;Ur*xV=UZ*G}oC=R%5#KFL6Bfdd#0@|ark$21xsG?nG6#U6FF7>U7l zIo*U~+}U%!6F$+Yo7dwxTeYQ&Xx?sLC`oX>7Sz}719+6qxwdl;)!srAMV=;i^_V8# zgO)V~4y;*y06l*jaZ_*ioGPcCE6Nk(_T~z-{~4J^yqJ!o#?P0$fh1dscG9hD&q?;v zte0{g8VR%1)q<`;jOs%u_GZ?`fld(YT;PlwJ%>m^0VkS|ao2;1%LrJooGbv^p6xvP zv9516$kz#3Vqw6i`qCtm3QCX8)O@>o3d(hy2S2cppJC7nZO}CkRF^!m>9}m0PW0Gx zlGmmLVnfM#Y~o=I|DEBo=>gJ1j{6Lo>aO331; z*U)&6O~>T&a+El5w5)NF{MON^h$ddoWKX=76OSvUx)NNMbk>j2 zBxg*&^s?^P89U9IES0Qh>!m1YAfAQx&mqUDe#WYhxgzSxAIP#TLQx^-*!wW z^%dPT;Lp=Wb>0C9Y>x}4=pvv;!U!T$#yq&vg`G*yZhMZ;i&2N$lM|$@CEWq{p4x0c zj||R13v$dZsv*s7u?L|^w+-4|ZGjJHgd!th`HF7*F=bM>+j4!SX@tU|nJ@39xcFer z>JN-0EiQt~8gFMy;1%$xe*@;v9igw^h)fJ|@m^L`c{{3`T8I9^GQejzMKndVO?35L zj%Fe3U2f>s{e=aKEFav@w$n{yo?ekYsRz?6Y6#Cl`gr@Z5V0j8yO1WQP;rHJKw&P!^@ zA1zP;-&}#_sT9)>S`o?KZP<7J)^#^k3TN;9yr#>J{k8x-e5Jr~*0bp?bf{z})q52^ z6m3FeG zzn`*yF@-+rJ$gOR>w#Vm^m?Gz1HB&T^+2x&dOh%e)B}00H-6?akzQq+ID`Jvt7(H( z!9=*Y+R&%wNz=@^i{{LscdgpzcyDZ~E@@7iW-h#VPI+a(ns|aRKi7hJ zmm2i$*DMZxudR)P1$gr=y@l6CDXSL-<^*O|nltAunp-*Mw6W&w1@kIQ^*U9&`%_ZzBgqKAk#~$~BT00eInpgOa-5mVBs}fnL*8XfE$E@=0&8~poPbps zSXgP5FSHf}E?6{Y`T}#TQ6EkQsZJvjT@JxWZ7>;$MOmNp172&K3ad`g%;NuL;g#h6 zMD@~eeb8DSjwc{Gnq2>-^5%flLF$=FO=Qm)F@gyJHW_hFem>juBc)Xe; zA#Y2(Z%@}RN*|Lgq|;b#`}vjM?w~sZZ-75Ty4BE-JLV+28ScbNdD_XRNTnm)8b%@& z>La)OND`5Ha!I?j>Fa>f=%X)(0Q8EPZlbpBOX*>Ab7?V*FQ><8GMPqh`gi3=QbX7z zba1 z;ytTeUE;$O5nAF4UH7#hjLR|pv_s>;>PR#^J`u)83_@W&9IS;>{;W8(t;w2jh^!sz z-YUoka$WnZ>q(9YL-|~DjEN(A+Axlhu8YNJg>kZ+AiQ~l(%9&+Q;qoxre9Do-NYm> zTpN!hSK{se;p$~mjY;-(LEC~4J>csB7|fIOHAlHe=N;&9&4jWqAa;M4c7BvRohA3# z7ZNQUTV~tmn675surRjFZQ?AMw43Lc$yh33)`b&@3C!uu1U_A1^5-YQ32YOVgJ||l zA1OYFFIZr_VbaatWzcLk^zzFm6Vxm{yaJ!>NZ6dYPrUL@?o}Vgur0|g46Ls_I)py0 zfyq`JcMF*R=eERGUJ?z-bE5IFz*k<6Y>_LUyD+ez(k!1_InUHVWsbpQcpUXXDm>P_ zWcr*%fraLn^T(OzBQ|r$d18#m11``s0%-QhC$9Jb+8G5*bY=l#Rb8wC)#1qTA2tNy z@o*|mw{iIT2qI`y0<$~slrHBy&NUzn$A}ygGGo-`<44tx9~G(`Rd&v(igQLSyh67d zcTvdnxZ5*BqhqP%@krdP3z~HQX^tM17_F?40gSJJ;6} z!VI^1s*$_LSQPD9acKMf*KFTtk}1nk{fxi`$fxBM6@gjh(<=ii)TXDZQ(2;l--M*f z67gbV=DZ5r&yd7t@(1C~x-j?`%$qZ3#`KvNO+}cP@$lDD+aEw6k+s=v{kQx2|Gy?;cz^?T#l?m>5VWZ8r6)0YT*n}>QNx0JUXqr){d!D{Xibfw)T3CRdK zRp=Sc89Lofp!uU$Z`iC}8jRPft_I)s`|E?c<(Et-Hn7}7=~L1RPvf%MqvdngCZWO! z=HD70kto)#>M#;17JC?ItIs>W@6^liydT@#jo}YwGPmG-_rsY?67au%k;yy;_|_wt z%s#+@k7Y8nlWWpbnaoh^H2Y{vm4Gw;3vz%Bfa?K&2lyCZ>kh~R-qHqn z!0+#bJbr()dl%#ZM?VL7z}bLFz#72yfK7mp0S?FG_I-d~!S;y{03QY%iX9v;08RpY z8?X{^5q4rE0h_U7W~wkz@NvL>fEQv<)dzsT100HtIL+AmHwo~0Y?Z78{1Na4+WW)AM(cVr(_!Sq!?7jDjE zhI{D8+Vp!sAM|J@Gwv|A{OH59{F6Wr`*kL>9ril{-VJ}*^uF)sYx&{OyW^QmhEtoiKf>ZHe=g|zK(F%XzslCX81!SdXEN`2=$$rw z73c>*-|eBd+4OrrU-xV#GZ@gZZ=l`2CxKs$_&w7@FShCXNgi>1rAPlIw*Et)KMy*# z;W+xQU^2Il`sF#$O*j2YhkmZmPj=I=O^Y+osG=~`dN)F-{%%v|0>Y`2>N;t{Z^ZP59o7|H`aRSYi#sLj?xEM)^x?=0hd}?>L;r_OKNs{@@H2{?p8B_Q{Uk!i>#z3B?`w4P zcXN?$?e80x;C$9kGkj2D#ZSEL@Jv=G)C!23!TO#9al>kFF)X8 zn7|@|8VH+_zExqw4Mvv`^n7c82+%mE<1%Te#`7ECf!B6-F&E}j0(JfPZ6CKsvtq9- zm&b@BkwLhu{oW!2z*)K8v_3!u>VM@ zU*M?%rwE)a@DhPF0+$QCS>T-l?-TgAz#RfrEr>Uslpu%CoOzBp2AO=UIblligyIS2 z#FB|qN~TPltT}VTJfQm-?`E>86rXv<(Z;~z>WqXBdA)7-5Ojrx;?Q2@Dx@FiJz zy7wTw&PQ76LY(9o#~VweU1T2}m*6kYC^B?DU?l#n#vkd?`Ay@SaFU0+ADv$`eiKe| z*-u-uNzX2^b95gi@d`kmF~lgWQ)Ql`;`D9&5r5Yxg&!{b1u&TS>D~Ht=@VycEZx#Ml;UA~e89x>NkMSBDI{01*@CD&F>KScl z{eKbuxo0Xo-#g(nAMIfKg9|q> z<1pm&THgN#RKC{CRZFB1IR3lx5>D2n*#S?+^x6g`*ER0{Z> z9jCVn{zbY#;L!c@5b!2ry#ICqe{2*iOY$coBA3Ym<@b~-RpJMzV<7MeDUVA`I z?SikItE#2EPsh8!AKB+P`?{>K7{9`Qg2cleLMR-d`1Slm^Pd1bjl07oAI61nHsdvy z126KyU*>~fBKr4=J*KF-(TD#|AN&D&r_VH2+a23ztRUE6+O3>D+Q&Jx0?lTmMT22<>B-PK6)PZ!9OK> zTEtFXGlZV!efanL;Jbh)|18x5LYZZJ=)*q{6V_aQJ05r%r+PjqYK)OS{Ac^%FY&=I zX8a%{Pp&(9ynJ2or;8tSp1j>h&wmL2HNtafuvR9upq!>YlvGb%lE0n6QUkMRc ziFX-!SUvk3umjvv?zvCIvgR)cR90SY&0aKjW@Y)jxt3KtIZG(lW|3TSld|OW6Ts`j z*_%XiNuTL2onwngE)5g?HDqlP$t69(Us~@>fbV;HtHizK3lBS!mfkjE(Su0+#1K8j zM9*7rwrE6lwb<TN+k+hYIUCXD&-Aus+VkUcw}|6 zTvpm`aQlI;DCno^6+!YX|8T_9QML4Y6&Sq?JN+;mwO-9@BXs=YXEeDQhJ8}lVUd%h z0@AY3LK%p*rHEA3rLZuRh*?Xqj|x6@=z7H4w%hh_!+AhzlR3U+|GA^Wi5g^_M6lKs zIA}VhN6JN3DjE;hp!aBtD8)LW-oievP^=zEhb|bqEv7s!AlJe=UO5%diP`ndKQrlf12P>r{KRY-dR4@Mcxnn(FD~91eB- zXA_+ZtgRU14bE^E>l3w(Sv0!Qu&Pv~E`%?V_q5_GO# zL^%zl0L|fds@LG_s>ABai%xDbiW4jAu`L!b8CP(rK8wb%jjT4BDrWbMkA#e3&S?z> zW0wXKOO4{t$|y7_h>l>2{CLV!ut1B4>w+X8XAN~p(umM2=5bO?^FYvI?B3$=QknTJ z4MA3yU?|TAjbht8+69Su$Vx#?pHV)ZrmL)4%@qw+tA0i&3P2SP;8i~pDKc*x^c4r_(#Sc~;6Iy5{*7483e9YP~$K2Nt`TK++i*HAzA z()@C}ri%tXB4OY?YcVaqQ{*+&^15E!K6#E(l;{zXmQRbkhK(YKWx$h& zmeW?7nBJms7s^z>me=dx8ZIWH>&UKu6KHPvB`L+M;bICL*P;7QqaMY{2d?;Q zm34a!8#JT9Z27IgyYt6<>QEdSmU7AYmo5JSNN#!kyiP;Y5#_V&_Wuc3tdjB=CIw_mSwEfM)_ez1Fvkw6fx#Dg^qEuWo#w7eVYvFBFN_zfuy yQt(88aro2r=<5fTt8Cj9r~0qs@J(WH9lBnPIua+k?HWh0_Is*ydX_*|(fA)CdR4~& diff --git a/tests/test_database.c b/tests/test_database.c index 1741900..edaa7f8 100644 --- a/tests/test_database.c +++ b/tests/test_database.c @@ -4,6 +4,7 @@ ******************************************************************************/ #include "database/database.h" +#include "database/error.h" #include #include @@ -69,6 +70,183 @@ static char *test_database_read_single_text( return result_text; } +/** + * @brief Exécute une ou plusieurs instructions SQL de test. + */ +static void test_database_execute_sql( + sqlite3 *database, + const char *sql +) +{ + char *error_message = NULL; + int result = SQLITE_ERROR; + + assert(database != NULL); + assert(sql != NULL); + assert(sql[0] != '\0'); + + result = sqlite3_exec( + database, + sql, + NULL, + NULL, + &error_message + ); + + if (result != SQLITE_OK) + { + fprintf( + stderr, + "Erreur SQL de test : %s\n", + error_message != NULL + ? error_message + : sqlite3_errmsg(database) + ); + } + + assert(result == SQLITE_OK); + + sqlite3_free( + error_message + ); +} + +/** + * @brief Crée une base V1 contenant une ancienne preuve. + * + * La base est construite directement avec schema_v1.sql afin de tester + * le véritable chemin de migration, sans passer par database_initialize() + * qui crée désormais directement une base V2. + */ +static void test_database_create_v1_database( + const char *database_path +) +{ + sqlite3 *database = NULL; + + char *schema_sql = NULL; + + GError *error = NULL; + + int result = SQLITE_ERROR; + + assert(database_path != NULL); + assert(database_path[0] != '\0'); + + result = sqlite3_open_v2( + database_path, + &database, + SQLITE_OPEN_READWRITE | + SQLITE_OPEN_CREATE, + NULL + ); + + assert(result == SQLITE_OK); + assert(database != NULL); + + assert( + g_file_get_contents( + "database/schema_v1.sql", + &schema_sql, + NULL, + &error + ) + ); + + assert(error == NULL); + assert(schema_sql != NULL); + + test_database_execute_sql( + database, + "BEGIN IMMEDIATE;" + ); + + test_database_execute_sql( + database, + schema_sql + ); + + test_database_execute_sql( + database, + "INSERT INTO metadata" + "(" + " key," + " value" + ")" + "VALUES" + " ('schema_version', '1')," + " ('application', 'Labfy Investigation')," + " ('created_at', '2026-07-18T10:00:00Z')," + " (" + " 'investigation_uuid'," + " '11111111-1111-4111-8111-111111111111'" + " );" + ); + + /* + * Cette ligne utilise uniquement les colonnes du schéma V1. + * + * La migration devra conserver la ligne et copier name dans + * original_name. + */ + test_database_execute_sql( + database, + "INSERT INTO preuves" + "(" + " id," + " name," + " relative_path," + " type_id," + " size_bytes," + " sha256," + " mime_type," + " description," + " commentaire," + " categorie_id," + " file_created_at," + " imported_at," + " updated_at," + " status," + " locked" + ")" + "VALUES" + "(" + " '22222222-2222-4222-8222-222222222222'," + " 'ancienne_capture.png'," + " '01_Preuves_Originales/ancienne_capture.png'," + " (SELECT id FROM types_preuve " + " WHERE code = 'screenshot')," + " 128," + " '0123456789abcdef0123456789abcdef" + "0123456789abcdef0123456789abcdef'," + " 'image/png'," + " 'Preuve créée avec le schéma V1.'," + " NULL," + " NULL," + " NULL," + " '2026-07-18T10:00:00Z'," + " '2026-07-18T10:00:00Z'," + " 'active'," + " 1" + ");" + ); + + test_database_execute_sql( + database, + "COMMIT;" + ); + + g_free( + schema_sql + ); + + result = sqlite3_close( + database + ); + + assert(result == SQLITE_OK); +} + /** * @brief Vérifie qu'une table existe. */ @@ -116,6 +294,75 @@ static void test_database_assert_table_exists( assert(result == SQLITE_OK); } +/** + * @brief Vérifie qu’une colonne existe dans une table. + */ +static void test_database_assert_column_exists( + sqlite3 *database, + const char *table_name, + const char *column_name +) +{ + sqlite3_stmt *statement = NULL; + int result = SQLITE_ERROR; + + assert(database != NULL); + assert(table_name != NULL); + assert(column_name != NULL); + + result = sqlite3_prepare_v2( + database, + "SELECT COUNT(*) " + "FROM pragma_table_info(?) " + "WHERE name = ?;", + -1, + &statement, + NULL + ); + + assert(result == SQLITE_OK); + assert(statement != NULL); + + result = sqlite3_bind_text( + statement, + 1, + table_name, + -1, + SQLITE_TRANSIENT + ); + + assert(result == SQLITE_OK); + + result = sqlite3_bind_text( + statement, + 2, + column_name, + -1, + SQLITE_TRANSIENT + ); + + assert(result == SQLITE_OK); + + result = sqlite3_step( + statement + ); + + assert(result == SQLITE_ROW); + + assert( + sqlite3_column_int( + statement, + 0 + ) == 1 + ); + + result = sqlite3_finalize( + statement + ); + + assert(result == SQLITE_OK); +} + /** * @brief Vérifie l'initialisation complète d'une base. */ @@ -189,6 +436,34 @@ static void test_database_initialize_valid_database(void) database, "investigation" ); + test_database_assert_table_exists( + database, + "preuves" + ); + + test_database_assert_column_exists( + database, + "preuves", + "original_name" + ); + + test_database_assert_column_exists( + database, + "preuves", + "collected_at" + ); + + test_database_assert_column_exists( + database, + "preuves", + "source" + ); + + test_database_assert_column_exists( + database, + "preuves", + "integrity_status" + ); schema_version = test_database_read_single_text( database, @@ -250,7 +525,7 @@ static void test_database_initialize_valid_database(void) "FROM investigation;" ); - assert(strcmp(schema_version, "1") == 0); + assert(strcmp(schema_version, "2") == 0); assert(strcmp(application_name, "Labfy Investigation") == 0); assert(created_at[0] != '\0'); @@ -519,10 +794,611 @@ static void test_database_initialize_rollback(void) g_free(temporary_directory); } +/** + * @brief Vérifie la migration V1 vers V2 et sa répétition sans effet. + */ +static void test_database_migrate_v1_to_v2(void) +{ + char *temporary_directory = NULL; + char *database_path = NULL; + + char *schema_version = NULL; + char *original_name = NULL; + char *internal_name = NULL; + char *relative_path = NULL; + char *integrity_status = NULL; + char *evidence_count = NULL; + char *v2_column_count = NULL; + char *migration_index_count = NULL; + char *migration_trigger_count = NULL; + + Database *database_context = NULL; + sqlite3 *database = NULL; + + GError *error = NULL; + + int result = SQLITE_ERROR; + + temporary_directory = + g_dir_make_tmp( + "labfy-database-migration-test-XXXXXX", + &error + ); + + assert(temporary_directory != NULL); + assert(error == NULL); + + database_path = + g_build_filename( + temporary_directory, + "Enquete.sqlite", + NULL + ); + + assert(database_path != NULL); + + test_database_create_v1_database( + database_path + ); + + database_context = + database_open( + database_path + ); + + assert(database_context != NULL); + + /* + * Premier appel : migration réelle de V1 vers V2. + */ + assert( + database_migrate_to_latest( + database_context + ) + ); + + assert( + database_error_get_code( + database_context + ) == DATABASE_ERROR_NONE + ); + + /* + * Second appel : la base est déjà en V2. + * + * Aucun ALTER TABLE, index ou trigger ne doit être rejoué. + */ + assert( + database_migrate_to_latest( + database_context + ) + ); + + assert( + database_error_get_code( + database_context + ) == DATABASE_ERROR_NONE + ); + + database_close( + database_context + ); + + result = sqlite3_open_v2( + database_path, + &database, + SQLITE_OPEN_READONLY, + NULL + ); + + assert(result == SQLITE_OK); + assert(database != NULL); + + schema_version = + test_database_read_single_text( + database, + "SELECT value " + "FROM metadata " + "WHERE key = 'schema_version';" + ); + + evidence_count = + test_database_read_single_text( + database, + "SELECT CAST(COUNT(*) AS TEXT) " + "FROM preuves;" + ); + + internal_name = + test_database_read_single_text( + database, + "SELECT name " + "FROM preuves " + "WHERE id = " + "'22222222-2222-4222-8222-222222222222';" + ); + + original_name = + test_database_read_single_text( + database, + "SELECT original_name " + "FROM preuves " + "WHERE id = " + "'22222222-2222-4222-8222-222222222222';" + ); + + relative_path = + test_database_read_single_text( + database, + "SELECT relative_path " + "FROM preuves " + "WHERE id = " + "'22222222-2222-4222-8222-222222222222';" + ); + + integrity_status = + test_database_read_single_text( + database, + "SELECT CAST(integrity_status AS TEXT) " + "FROM preuves " + "WHERE id = " + "'22222222-2222-4222-8222-222222222222';" + ); + + v2_column_count = + test_database_read_single_text( + database, + "SELECT CAST(COUNT(*) AS TEXT) " + "FROM pragma_table_info('preuves') " + "WHERE name IN" + "(" + " 'original_name'," + " 'collected_at'," + " 'source'," + " 'integrity_status'" + ");" + ); + + migration_index_count = + test_database_read_single_text( + database, + "SELECT CAST(COUNT(*) AS TEXT) " + "FROM sqlite_master " + "WHERE type = 'index' " + "AND name = 'idx_preuves_imported_at';" + ); + + migration_trigger_count = + test_database_read_single_text( + database, + "SELECT CAST(COUNT(*) AS TEXT) " + "FROM sqlite_master " + "WHERE type = 'trigger' " + "AND name IN" + "(" + " 'preuves_v2_validate_insert'," + " 'preuves_v2_validate_update'" + ");" + ); + + assert( + strcmp( + schema_version, + "2" + ) == 0 + ); + + /* + * La ligne V1 doit être conservée. + */ + assert( + strcmp( + evidence_count, + "1" + ) == 0 + ); + + assert( + strcmp( + internal_name, + "ancienne_capture.png" + ) == 0 + ); + + /* + * Le backfill V2 doit recopier name dans original_name. + */ + assert( + strcmp( + original_name, + "ancienne_capture.png" + ) == 0 + ); + + assert( + strcmp( + relative_path, + "01_Preuves_Originales/ancienne_capture.png" + ) == 0 + ); + + /* + * Une ancienne preuve n’ayant jamais été contrôlée reçoit UNKNOWN. + */ + assert( + strcmp( + integrity_status, + "0" + ) == 0 + ); + + /* + * Les quatre colonnes ne doivent exister qu’une fois chacune. + */ + assert( + strcmp( + v2_column_count, + "4" + ) == 0 + ); + + assert( + strcmp( + migration_index_count, + "1" + ) == 0 + ); + + assert( + strcmp( + migration_trigger_count, + "2" + ) == 0 + ); + + result = sqlite3_close( + database + ); + + assert(result == SQLITE_OK); + + assert( + g_remove( + database_path + ) == 0 + ); + + assert( + g_rmdir( + temporary_directory + ) == 0 + ); + + g_free( + migration_trigger_count + ); + + g_free( + migration_index_count + ); + + g_free( + v2_column_count + ); + + g_free( + evidence_count + ); + + g_free( + integrity_status + ); + + g_free( + relative_path + ); + + g_free( + internal_name + ); + + g_free( + original_name + ); + + g_free( + schema_version + ); + + g_free( + database_path + ); + + g_free( + temporary_directory + ); +} + +/** + * @brief Vérifie qu’une migration V2 échouée est entièrement annulée. + */ +static void test_database_migration_rollback(void) +{ + char *temporary_directory = NULL; + char *database_path = NULL; + + char *schema_version = NULL; + char *original_name_column_count = NULL; + char *collected_at_column_count = NULL; + char *source_column_count = NULL; + char *integrity_status_column_count = NULL; + char *evidence_count = NULL; + char *integrity_result = NULL; + + Database *database_context = NULL; + sqlite3 *database = NULL; + + GError *error = NULL; + + int result = SQLITE_ERROR; + + temporary_directory = + g_dir_make_tmp( + "labfy-database-migration-rollback-test-XXXXXX", + &error + ); + + assert(temporary_directory != NULL); + assert(error == NULL); + + database_path = + g_build_filename( + temporary_directory, + "Enquete.sqlite", + NULL + ); + + assert(database_path != NULL); + + test_database_create_v1_database( + database_path + ); + + result = sqlite3_open_v2( + database_path, + &database, + SQLITE_OPEN_READWRITE, + NULL + ); + + assert(result == SQLITE_OK); + assert(database != NULL); + + /* + * La migration V2 essaiera de créer un index portant ce nom. + * Le conflit doit provoquer un échec après les ALTER TABLE. + */ + test_database_execute_sql( + database, + "CREATE INDEX idx_preuves_imported_at " + "ON preuves(name);" + ); + + result = sqlite3_close( + database + ); + + assert(result == SQLITE_OK); + + database = NULL; + + database_context = + database_open( + database_path + ); + + assert(database_context != NULL); + + assert( + !database_migrate_to_latest( + database_context + ) + ); + + assert( + database_error_get_code( + database_context + ) != DATABASE_ERROR_NONE + ); + + database_close( + database_context + ); + + result = sqlite3_open_v2( + database_path, + &database, + SQLITE_OPEN_READONLY, + NULL + ); + + assert(result == SQLITE_OK); + assert(database != NULL); + + schema_version = + test_database_read_single_text( + database, + "SELECT value " + "FROM metadata " + "WHERE key = 'schema_version';" + ); + + original_name_column_count = + test_database_read_single_text( + database, + "SELECT CAST(COUNT(*) AS TEXT) " + "FROM pragma_table_info('preuves') " + "WHERE name = 'original_name';" + ); + + collected_at_column_count = + test_database_read_single_text( + database, + "SELECT CAST(COUNT(*) AS TEXT) " + "FROM pragma_table_info('preuves') " + "WHERE name = 'collected_at';" + ); + + source_column_count = + test_database_read_single_text( + database, + "SELECT CAST(COUNT(*) AS TEXT) " + "FROM pragma_table_info('preuves') " + "WHERE name = 'source';" + ); + + integrity_status_column_count = + test_database_read_single_text( + database, + "SELECT CAST(COUNT(*) AS TEXT) " + "FROM pragma_table_info('preuves') " + "WHERE name = 'integrity_status';" + ); + + evidence_count = + test_database_read_single_text( + database, + "SELECT CAST(COUNT(*) AS TEXT) " + "FROM preuves;" + ); + + integrity_result = + test_database_read_single_text( + database, + "PRAGMA integrity_check;" + ); + + /* + * La version ne doit pas avancer lorsque le SQL V2 échoue. + */ + assert( + strcmp( + schema_version, + "1" + ) == 0 + ); + + /* + * Les ALTER TABLE précédant l’erreur doivent avoir été annulés. + */ + assert( + strcmp( + original_name_column_count, + "0" + ) == 0 + ); + + assert( + strcmp( + collected_at_column_count, + "0" + ) == 0 + ); + + assert( + strcmp( + source_column_count, + "0" + ) == 0 + ); + + assert( + strcmp( + integrity_status_column_count, + "0" + ) == 0 + ); + + /* + * La preuve V1 doit rester intacte. + */ + assert( + strcmp( + evidence_count, + "1" + ) == 0 + ); + + assert( + strcmp( + integrity_result, + "ok" + ) == 0 + ); + + result = sqlite3_close( + database + ); + + assert(result == SQLITE_OK); + + assert( + g_remove( + database_path + ) == 0 + ); + + assert( + g_rmdir( + temporary_directory + ) == 0 + ); + + g_free( + integrity_result + ); + + g_free( + evidence_count + ); + + g_free( + integrity_status_column_count + ); + + g_free( + source_column_count + ); + + g_free( + collected_at_column_count + ); + + g_free( + original_name_column_count + ); + + g_free( + schema_version + ); + + g_free( + database_path + ); + + g_free( + temporary_directory + ); +} + int main(void) { test_database_initialize_valid_database(); test_database_initialize_rollback(); + + test_database_migrate_v1_to_v2(); + test_database_migration_rollback(); + test_database_initialize_invalid_parameters(); test_database_initialize_missing_parent(); diff --git a/tests/test_error b/tests/test_error index 1185635c8f2fac9033677f79bb831ba8d661b8b9..674f2f54c405007dc4286d60b1516c7be5dac0c0 100755 GIT binary patch literal 37248 zcmeHw3v^V~)&ET(5EV#Jg9wP1mjo*@L4prN!((uw1R@Z8VaFjEU~H0!^FU}pqd_H& z(_*XsTWjm%Yb!pBFRJ*8U`cGX4Qd5jT2nsMiJ(U1)09%?`|W-9x%bY^4BB?BZ>|4Y z+_jQ@&wibK_Sxrg&pmU`^`1Giv$L`cef2TUGbnY{u?kZrgvMsM0Vp%hGV<`>G)^}9 zA>Eg8ie9DwsOs|eNrkzBCp5`DB6K$#A$%HY3ki~3rmHniQ8YC2Rhr~-=vLBhIBl}x z(@@i`{3;dQaKYRY6<$N99Qmf9PSG3Iq{3&U+^qt&TsGK9?p~3*SL8G_i2;{}+MnbT z`dcUZ+;A)j;nI+J=^{vf8d>2EG>f!5NI;`ePewpfhz0{wEVm8;o@yLv-?}E8i zM)pOIZr?OJ^y-a2d$9bJ0j?%Ao(n4EWPB;NQ%EKQ9wLgPmUBP5im98X(e@w*h$5&5ZO#8S?#p27D9zGdhi) z>oV|XXYl8+4E&F0z<(EcrYqOm8Sr~E;P1|W|5XP3{0#Pw%YYw}0e^pnay_3R-*YnP zxh4a?BZD4enQv)05CHH;s)IpaBpQx}YHJOjZ&_Wa9!Y;V>hpmNLQSjzH`TQPf7llY zheKh7t|z>&d|`#JCJ+uR3r3=W@WP6jwW0dJLjRIl(p~4TtqoNd`|1^62Cf=^G~kN{ z>jJ)5eK@cbayDjZC|u`{0!7yPBEfG5YA6w`4fvJ?qQ2@-eKb%XjR030T896zSg?j{ z4%RR8h5hw4p*kRKb@hR3ef6PheX(e@5xJ%|7!8~u1zQrVuYpj+LKDIl4Xli&V(Me? zk``qb>O^&@Hda^f3)V-cOtv^e4S{;!ib+;F9Eb#LjZ1^|{#umDB6Fsx8sPD|$TEuq zUT&}wlI4QI+BXke3BR6DJiF z)5uh8P&%~a>Ogfg6$g9@Lfmf&Rny%RX$H!Y2g3-i7bHMDhQ~h0niK;msQq)cNXk>-7pxa~^f_RAd(Jk3}1wbOw=K_dY>9e5h6t*cSp^#?%LXXz{0N=D>6@Xq=g>cH!| zBLUNa=XpONaTPW)Fi1cB>8rR=-4Ravh%je0(tpK^3bwAYMs-X4M_X9K@H+6vIPjGY z`~V03QU@LZWnEV}@PjO@VJvsxUPL}=_=;XN9@IUY5GTc#mInla0 zleorhp>!6dJ2<_W($sXjS~>j$rK!nwZRGSrl^Szl%}qztC7<` zpftIutAW$sr8G6suB$kGBc-Wnc2#ov+mxmz*;U5rFr}#}b`^8_YDy2Fw8`lul%}TF zmCxzRDNRkT%i#2UO6O6!`w$T0E~GRyv93-|&!99lt*#DEpF?TtGP_ziJ&DrP#JV7yx4O|9!HPG?h^npjsQrw`O4 zO--w-jMJY{nwnHsF{eMIG&Q9zlheB?O--mPpVNP$G&P+rgVS$Nnwm^k_dlupzooQE z=}t~>q4X$9cW`<$rKxFjwIWUNRq|1J^Y(9gn|FJg_Hg-+HFwajpuxqz}Y>~0)*yBFi~h8mF&zrxsmv`3IxBO`AaV+FyWB5 zx!e2l$LD)r?&;&r+UDJUD0(~;yjQCfUM?L+Ou*A)fPd=G(rRDxLU;!jIk-@Z&za*f8J- z68dyH3sozjCJ~}YAjbbbXbXLCI&dQOoRXTTq~an)^-WTbI;1`yVHoRQ-6{n!QIG_< z48U%Ix?nq|D(OcMwkTKv1xu)c)v4TGB8GU*@0f4sE`mF#CC3nbfpi<0fh+hnY5@$Wc?vdq~j{4ksOFLC5`FXhFBZA+Bm zUaDo5QgEkIu!%tP_RStqFvOu?7%32`K}zZ>CDkfY7m8Hp0oyUB40l#0MWwqEk7en$ z#0Th`EcbKacAgJRyz~HEhr;!fT&|E@zD>Er3mORBf?89RSce|Naw%8G50sXtl$N=o zWr=8+tZapNTVmuyyAl^Gsq2(fkx12u)SP5>l zq=ijyOWc2&RV9BrkIGxxM+uD~fGTMap(cmWEfCUG^01P6{VWpBnJ7{*k*ZKq+?21w zIIgq3ixk62Wf)RWNJm@qtDG08oPEryyUwAWI_KVI<{3jZ&K z{{iBU7yOjahznW+b$RfgOpRi0`^)Jsa}aV4~! z03zy15h_u+uGF~#&AI;hB&Tn`qjc0M9aWO?bHe-47q)MAOd#K8apUtSsWX+-B_c&r zJgU84D=BV#3Cu=y?R+}K8I|cejlbaen>0L;Pf+@7ZgPE8j=v#>c+Pg_+rIg2$8jvBRUJ`YWkli}fFh)GaCb>gb3dUugjSlz97OvOcFlGW|@%y^c&L zAyethw^O$iFa4nsdXfMvJs?8IrQ``DsBMYl2xn}3Uun2lX*gT5&4z)*yL~@7HdyN^L%>ghNWWO>7+{!k>I@m+&1tJ?YxKR!N<$q`D-_LXmn_ zN%g#_o%&9SQ_oSt2PbhM*GiVfBD~s>WWeMAv$4+Afqz*^Ll zi<@s$Y3Zl5oGLD>5-m5A7P0va@>WkacQfZHsg4pdA*WrM%_SmL>5#f%6tNVz>^QTR z9s4M#;-%LqjrU7wmWjqgpK@t-sM6RS^@gEVQ+!w{n5GoGASMMx!3(573UZXAATcG? zUr8mU`mPbFTO3l)m|T#tsSd3l0&GfuI7VrF8gpN`<{eUuu)k3>ma2jbau?*?6Rd*l zrpSwzMwNp7V$xbsu)o_bNZD|!u|2AU&R0UZ9Jh+lOG=1`sRyxYVYL?}b(E5NmH=$M zO{AI~QgKM7_SoEi#7keNM~-;TGa`GJ$W|y>$4GpP%Il|!|7XJg6X8F}QLMR`V<2R1 zCl)(&`xdYTj?jIUoER^?NNEg-#s@^>?>=Eiahab+)019ltr8ldgr*QckslPHJCzW3 zox4x8yUw{vs*|SV@tlOTlE*~qDo0iq+F6~bgdSExzaxOGo)n>PII>!d`GzWLTOyEW zbq$Go5iN-tw59}gmx*l{8WNXaew5&cnt09wY)D(;o{y8sXQ)@ZQa!~ruffDKhEi0~ zw6VvC9s})C7yX%W@0seUiwNE7@kR(E`Js*_5-Eh7XJEO`p=n>Sw|UJ@ zqZ`LZNvnS1X!GnNerVfiMEe7D7_p-{@2(#ZK3>)BZHaXt|DEN{9nS(~Y^HzIdCfz4 znmzlP*6cH)mym^+bm!gCnzyO7sS|V0Xg|X39YC_gUPi8r7hK0p<>eRiq2(n~#knQs zI~?6lJ8JJ>Rtw?JKZ5Vr(w3^88t*rb=dwg|5}U#6cq;DY(?QCER5UyUOVR!xm7s-+ z=CMc8?BfwhG--~CkE38oFpD1j-o=2B!g4W@sc=`IXP|CZM9 zT4W_>KBNd2g3!(cT5To5ZHiE05opX}stbpR z?ikid(Qjfrq|Se*>f=e-#cpLkBV}8tSR@dy=-hlXB~(iuo{&0MalF%e_7+SHTRfel zc?8`k&4b~!ZsWS6y*I4E7@xfUx?#v_kUOh0kk#JHA;kq=cC0RNcGN^+vts8#Xs}!8 zP(KKbg;00%7W{8*&c}Z^zAf<#)Ssp-mncmO z?CxUZ0CKSIQKcOOk$ESW>=9)no(9lYOomr}ibXW0>F(loMYG!YFtquvYU6({aJ6wR z(Kb&~jR|^mdqTwmJLV}Gmw1$s0^I>3B&e%phC;lHVTRaLn7N;p&g^n-MOUqeqcs11 ztuQv2GFCm(OsT)dHAy3i{!FR9(i;0lVmemBGpjA`asP7EA`bypHK{3!tca$}PaG{l zN^?2d(2F#yc?ma0;-mK@+9{Z|JEl-O;~+wXp?WCtCNm?2Bc@-K)J0(~P?n2E0XL)% zLNIa=p8dWAArNhemOWyA*B{vHn9d<9HBah?4GP5bC3y5aX^F~;*C*BFriFRNkk+GH zJo~`kANPnQwB^#t2%GZeR?JAf&7ZklcQW%)3EC2WMAyP@+>3FB3PU~D2nsr7^+%YL zsyH}~=@7Z!5;=iT+sg9EP2Fu}7;V^N-By*D)N)*1ahqp9^Eu~LydopD{|VMs5&WZJ z$72#zcK?S~z}9xre@rs>BWHvoJNWMqObOZB!PDZ|kJfQr5Zdl_Yx}9zwzrPivSMSD zy0*kyc%`9qNh7@oW>XW~dona_a%);(X&R$6UH4dvvaPw2`eSY}*%;WbwD4WF}@GK)6}4%16e?ZXIOv2nna2ho<rehHz;F z^mLX8|2I?A(44pS7%S-85#w^Yy@1}Qw-sbth>KOK*+h$S> z^I%o-gBA+0P=&@+LD3GUu*I`V+uO6$pm7F1@LX-(AfQ6?30(fJvyWC5}AAPU4* z3bHM6p|Y~a+g4_B(?AYwWkc!KHnV9T_dso)gUmuc%UfHZLL8;y-V`B8B{Zlv%z@Ho z&%vfO2aV{Q7SBPTo?utLteCi`j~=ZPd;4R2D!}?YLTNNWd2_qBxmPr8Bn@9(5hv;* z!WgQZw#2f(9#$|{eA5Y|tr`TfEm7nWbWDlR=(yS+CZRko2n7E57o@DpRnuq$lKK>Ko5YCqZKe&kUn9HNt$F#@=={SCnq29d*I$1MwJ&>gk|m6RsW@QUkNF z7;w|Q#6#mz>dF9l9vwtkE_?oi@x)XCL$}BX@rT5#>dp7z1$QVxbTQ~YF6I z*Iv5u@)L4r92vvFnedbvFZ;q4*q=IYtO2XlZYvSv2#8oK8tyY+<;6BnC(3NJd3GT@ z)w776h^$rt3sne5T71=ga*PJai@7kKc59H_hPTXWketbaRnNdlt*{mfxWhf+5bKb& zHmQ{ph&N6XQJ#vR+jXtl{CF3&ja|-2cElB&!*R8MB8ir6*jvB&Gdk@xyU^%%5YWk_3(sM$@$!o#S4x@u2{1eMSy!@cJ*ifOv8G-VjY{x z+U8^}hE~-8U2piE^I9Dr*HhJT^P|S5njeS8U)4*%oz@fR!8?^)Niz)e((%ig7jKQO(@AVi6{T$j3ttNT+7mQiQGKJl6_kRLAN(fQ)l!paMX0R zhx&jdF5+)M9mupdZ|yoI(nEwZsdAcW^1ahqBzZ@@PiFcFLXYQMNjA{jx7TCC7~*ks z#%V%$J&I(9@a~;DNQNV0bUv70^OGn5dRml?&{jB_=<9m5=U>=5__v$mF`*X zPX9X&cQ#u5tf&TypjOSJ$L7FoOZ*-pG=11RNIh6QCTVRBrUO<5T*~jrE4o`eZ^6tt zFcbY~??Lcks9=-#s`Uvq-hM&_p;Gr>IgPvSfr!&x*GoE`yC(2EdhM>8U|d>vt+t}h>8@5X zKgC_#Pf)n&?P-SzwU4dBWN_7Zr>hz!y`EQr&c^ zq|>=68@Xd3kf?fbbOtw7K}GMV`Z1Z_+f84`M}K#el^*IHffR%h))>14FKm=|+ME(- zo7t9QYGNnqq5HCH9`}eSVFrC55D9}^hkJnKhmry|_mg;!kho)u5`XcD?WT4~$)u!PtuQ z#{T*(+t{Dr9>(r7)4KEpP}3Sq?NvX@IiE^scdO-CexHVyGveR5770!|4x0H1Wsk8k zx5cw(s^{Qp;Zx7Ws2h54|?{*$D*X8$a6xtTMvSp;Q*J#q3CX>e3DKKb^ zqE^7SDmY;1)$H5urZtwK-K#}Py+u>SwQPOp4YpOkt5~56Z84N@cSMl(&AeW0Z-5N} zh>-GD^8`aCrUzJ@9ihi>L?)WJc+VA8sTI{jr9*w?P$9V?9HzeNwM{fsSEE>%S~=X% zqw8z7=Cg|UOSYXJKeO};LA8GBtkjFCAUq4nPOZ;;#Fji#FNW$KJ*A-4dX<1ZXRtKV zZDqMss0?!OG(|`d2 z&y21~>pR#f1dHuS>lga1Zr4#HL*a&kJeaa%OB2ryEvP50FIa*dlzW_B%JQVMyVt|b z^C(%fXAf0V-dbL}r{>uEi6dc83?J;EdQeZF`dQ^7nooVDWQZi=1zxhZcXxaP>qYJ; zWGT#2{Rpl3GHNuT*qg4Wk}eRe9^8%v9pBVTb0vNstBqJ+JsB2!fvqxxwuZG9dRtCm zv3EAe2ZSuK&>xSDYWYl>%xIQnTVU%Y(5v$}fjm!y!x*$uGateVq|!?^-Q~9FOUx#0 zo9;`sDT0TlG&WHY$bVaDaZ}3Oq;~=w#->`$e07RVQ`|OHTQ;2olc%NH^e&blQf#7e z-rkmWI#j3gjhOjUsCHQ>l>40&8ufabWBc)(fvB!Zv{dY;T+|%)6}))WD|PhS1?m?> z$r>mD$@;yJ^$Q_#*^%pr2ab5)hzE{%;D`r~c;JW!j(FgR2ab5){|66brF>r!ytum%yuPDBf2;&zQk2l1a5~n5FF+w|ksA25Df_pbJf0h=o|dTdm_og=N1q+cI)unI2LQkb{mes<`=PvNfUq}v{=QhJEWE&=!h=wZ90<-XZnRf)mbV>2!AER?PROlEJ9Iet@0VAjM;lxgdOb$%1>HT_E> z7>omE4T8CD>w~DOP<{Q@2LmdOGs~fLJf3m5!!7Cb*Y9rpG3C+VkDzs%$R`-kE71K?83^5Q~R_}xFBXIt_xl^f} zb_P_mplt{~Jy_#MKM<=Am{EKTG2*YL$TbP92v~mNykgN{Z4gs3;5++w1@ z)m$~`QqAf>6qV#)O%sU7B11g{Omf%O4K)GNAFHNJ?NT&^$&f(3S-spJUM6;KZAREv zQ(c7dnaU;j&>#YY+-rHN$S9Mh8|>1xbT< zv<6jKz2huck3PGWA`Pm!gXm?Vxv0b%{Z7}NM@bPrn`of$w%aAsMU#4SPhxI16n2IK z*Tl9ygvy76v&FKF|4uo^(^o=csyz9iZh>rJf>A-Y7!9`*q&t@MZebz3(? z@x4vdjp`X92s%_1N?jZD2hoK@=x7$Vvfw>hpxa{3qYQN4}S zWNLZRK`9iiJl>b&%csyEj7;SaM^=u zmAMF-`eCF}%P~H%bg93ZYXntkRSC7Jj2Ux0*45!luqs{woLynBCiZW|Z%X-{>TMTP zx%yzrxMu5vS8u)7>W*i4E-0UCmRD4GW|di}PWA(`9&n0Og-fF^zpmjJvGFc)vC8@56o@Z47* z4_N*i$OEq426@08fExh60Bi>w(gu0JvjKDQZvA_&LLTs{-$EX+^mmX4Y<~^%fd6WzBD)>%zW@_}TL5!&3}ZK7A>f6y6#=jjTO{bqf!nZSWF6qc*y*zY@NK|$z%1-f zN&s%gX0P0ShH(IU;|c*M(AHDHN^I$*FAdVR+;xDb{RQ%X?*O&~2CyeP0eB1Z)%Lkl}UtiFd3Eu!*2e=e3Xg2_U4A>5six=Aoz|nxY*fdcASjd|v3?@gJ1aON%4}<=33cbss)3*4s z)@1Uv6ndLQzZ>*@pbrGJ^6!&tmmm0d&_>Qkp%+>7T_le-b47~&MV9`9ppQpe!uKp} z{g*SD{XYVJJq2{rNx#CTpDXk+PWm@(`eM*0K)wplw!hM2Qrc>VGztuut?xbf|Tl((?{Q%_Ycbr!KeM+qIJr8<5`l{I} z^ywCT7wA)dpG>}&LhrQb2SNV_Hr?PiWVZgLoV}`lw2OY|>oU>L1${8+&!*^q%F@3W z^oP(#mZi|ATJ+VR{}z4c=_&M6E&AP{zk@z?dMURO z2Ft$(L0^r&ITL*Z`s}07XWyD4e~Tr5F6c4PPfD?GsAb<`(8K8KpG=W|%#vRXdJeXg zhg0Zv7X5C}F9DrCT4UG$9hUy*LEnxsgtmKG^z2(L`CXvTz}Rwo3jO;Q{UGR@KwpRty|Fus}AESrQ zBLTa0ZcH)m_dSs0iv}k8<-blBqdnut+Qxu~6#W$3(?!i3-%8Kzi#u|u(I>y3(PwD3 zF_=ED-Y54MAc!k7O?{W0@`mfw`6!J>E5b<0Fw9CxLt9Fkc*$PMgU(l>i*WRJ(sY&uT>}(Q zogwZAO1gNKy1_?%_|oTB@E8FM&AsX3F$qwgV?pz6x-|WN4kbgBrsqGpsK2JG70*F* z(O5zkJr~kN;|E>zjRU%lQNS1~ut1;&!e%6{R~RXl;T3{@u9EC{JR;7OQgDsGR5H?b zo8suBBqN>wKa#3EKr<`0GIRNciabU-PV0K=mh=`W*xx0s^A+{~=Rlty=gxQv4T`vC z3tS{{slXKiZx(o`z+Vd7BygL+w*|g0@C$+c@UNEs zi8-lw(v;#UlS(ybdPs56*Z4H)rc#_`p%c*O=9$8PFH@xDr)QmPwBGeD`$h@A)rF_E z0^-;G43d0Zi2qr}aHCMlMfTA}-A|TLV6|&T;@=wlkshnx5<)Xz7FH{CKOtyi18&ll z_i5ls&t+6VT)Z{`_ObG-1WXYZ-t`guht&W2?Ut{;`7KwGHt9Sop6J{!ye1 z*RO>C4*XVwE?(;Zd{y|@yY#;cd^*2<$oxYL_xV8m(eY&&Lk#!%Kofu`KO{zRw#E_# zjEev~f36XJ z?@&+xd73;ug&C_F#A!!13X9hjHfzQGdOa5}D z$N4{(z9ReHSC_!Aj_g5e$)zQ6!&Vw4|xgXUClH27Uz3=^g> zet_}m*@}IhYi#UmtDt>;}#qCpq zr;o|gb*lo#+Zps6KzT{eRZ=(!Ut>=O{{5nV=v1Yc*FbPP023Wk@^XUVz^C)uX&LY{ zGvMcBz+avLAI*SYn*smh4ETo$pFPmf^Fv*>$C-bC(J@nDbU*o820iZx|F?=2Kd;^4 z_JH6EW+}X$Z{|t86p8+Iifl|2{LftVem>)c$pPkMz%LR#$CfB&UhBhcK=505@!2qR z{Wbw_I`rz>dw?HI<4dK&AUybbjP*#u0XB>N3(r?bUZcY8pEBs*4}5-__LzkUWxBW; zk^w(~@dJ#bW~h8`6PsoMKU(gcz?VT!Lk9d>(f_K{3$IN=;XQ)iwUBdtN=?Zg)5IzxpJx|m82ZjHi;^(jshGG_<&Tpq?z@N$Z0mgSF zZcWj1MF#%54EP%};P1+Sf0Xe9jJu@1cr6imzbg0-#h<$0+m%627x4Lx`JR|>{7(k{ zd`wKKKYZ~N#c7H_G2^wg4L!nt+Z7q~+>`--yXg6+jPLx; z0ebGwz`qH2DsQoC{CX|}|L>WE1OI0k@I8zlV9>cBbm@2=hUY-?=RM+2-R~6% z{;z@`qr{B4g5NkwA*35J77#ug|Kxc}*p17C{~?Lb<(jadIvg!23eoAEOM)KV5qT)i%U*tdoWHu-hEd37+B3gSTd9&S;XGzxRH}blH@+ z#T?rn)A1KuTYDV4@ZnoNrB(0m^U=;AYrCuvQ@0MLaPTGsI>A@(==gR3TOg?>u^}X4 zYocRmu}37WdY!k;E%{<+5O&h5?V7!aDMr~;wd0YF_~k=|u|cY?!KOw6wK!7Nr#C{W zU6iRtsg0V4Wx>u)95bA{6VvipT6x<7wdD#2=a%@QAwC~Bl z;G0^6Rm47VSk5h0UYDJ3@S-hh=dRCUj`-LFIFpZhR;Mq!&%Cy>w&kfI!8a*qVbdwc zW%^iQIzd=#RVQOpf%yRG3}4{|@9|&y~ zl73pDc&kG-)N0X8aRjql5f{ovI%7)jz|`?+RfT=bwVW-EO|pDSxRtr8LMv%IoQuW3 zkvQy;;=b~EI6@kJ_QfK661aWBcp9ZT3iw2BKB+wI3FH`^up3+*O>H?XMON3e!%8bV zr)PMaMBF$JwoY5s)~VN8vt-Aoa9gTv_sC(}c752jO|@v_Z4njgKHtKMnbOv6y*dP7 zYE2~MTaN8<=vr*LwNJm7o$P^>)5N){SfX}xNfg=v<~)a8AN2k&9M|p?ms8=bT%C1* zc?W(aWfw+yicVcmIYi#)TY_IMz+K@eya4Dpy4WFm9F1t2t zzga|kytK5yR_D3vNYc^omIQSWR0@m(@(VdM-g-KF9eul{#BngYFF>*=pX=;(tAIEi zeVMN|Dlg3I+?eF)og zm(|CLmc)X!H4}q1MiI+37>r%+k1RKeYF5=lgMv7@o+zqb#t@ zq%Qq@DNwJ+X|lFMr@w<6r@Se08kXsTiGWMJakESQDp{P-kdBgbURqw`Xnoh2zh0-* zaG+)s=(hg{B5#>lDU1T!^HLRh5YL-dHp_9L(?ViF8`lF$LcA! zVPe(q6C3I%Wyh;Z*=b#l4?v(Qk}$X4U#|R`@}EPN{IBKpd$vZAH$ih=I$sM1VX7i6 zuivNKtK}sysQuHW<#ik%1$k%wt=B8QR^C-$7=56MKrQd?f3&<4>bB=p z;g$T?4^Y^V0Q724+oQ)1EZbSOD^B%)C%yQ_buHG{oR`j5;|AkKmtErs&ReHa-*5@I HlE(i6GZ5`& literal 32688 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 M9A~8oq!q3I2K-LdAOHXW diff --git a/tests/test_evidence_dao b/tests/test_evidence_dao new file mode 100755 index 0000000000000000000000000000000000000000..33d02a4105d8408f54126547be4979727b1a2b5a GIT binary patch literal 83832 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 AQUCw| literal 0 HcmV?d00001 diff --git a/tests/test_evidence_dao.c b/tests/test_evidence_dao.c new file mode 100644 index 0000000..98bd754 --- /dev/null +++ b/tests/test_evidence_dao.c @@ -0,0 +1,1773 @@ +/****************************************************************************** + * @file test_evidence_dao.c + * @brief Tests du DAO des preuves numériques. + ******************************************************************************/ + +#include "dao/evidence_dao.h" + +#include "database/database.h" +#include "database/statement.h" +#include "models/evidence_record.h" + +#include +#include + +#include +#include + +/** + * @brief Vérifie le refus d’une connexion absente. + */ +static void test_evidence_dao_new_null_database(void) +{ + EvidenceDao *evidence_dao = NULL; + GError *error = NULL; + + evidence_dao = evidence_dao_new( + NULL, + &error + ); + + assert(evidence_dao == NULL); + assert(error != NULL); + + assert( + error->domain == + EVIDENCE_DAO_ERROR + ); + + assert( + error->code == + (gint) EVIDENCE_DAO_ERROR_INVALID_ARGUMENT + ); + + assert(error->message != NULL); + assert(error->message[0] != '\0'); + + g_clear_error( + &error + ); +} + +/** + * @brief Environnement temporaire d’un test EvidenceDao. + */ +typedef struct +{ + char *temporary_directory; + char *database_path; + + Database *database; + EvidenceDao *evidence_dao; +} TestEvidenceDaoFixture; + +static TestEvidenceDaoFixture test_evidence_dao_fixture_create(void); + +static void test_evidence_dao_fixture_clear( + TestEvidenceDaoFixture *fixture +); + +/** + * @brief Retourne le nombre de preuves présentes dans la base de test. + */ +static int64_t test_evidence_dao_count_rows( + Database *database +) +{ + DatabaseStatement *statement = NULL; + int64_t evidence_count = -1; + + assert(database != NULL); + + statement = + database_statement_prepare( + database, + "SELECT COUNT(*) FROM preuves;" + ); + + assert(statement != NULL); + + assert( + database_statement_step( + statement + ) == DATABASE_STATEMENT_STEP_ROW + ); + + assert( + database_statement_column_int64( + statement, + 0, + &evidence_count + ) + ); + + assert( + database_statement_step( + statement + ) == DATABASE_STATEMENT_STEP_DONE + ); + + database_statement_finalize( + statement + ); + + return evidence_count; +} + +/** + * @brief Vérifie le refus d’un identifiant déjà utilisé. + */ +static void test_evidence_dao_insert_duplicate_identifier(void) +{ + TestEvidenceDaoFixture fixture = + test_evidence_dao_fixture_create(); + + EvidenceRecord *first_record = NULL; + EvidenceRecord *second_record = NULL; + + GError *error = NULL; + + first_record = + evidence_record_new( + "55555555-5555-4555-8555-555555555555", + "capture_1.png", + "capture_001.png", + "01_Preuves_Originales/Captures_Ecran/capture_001.png", + "screenshot", + 100, + "dddddddddddddddddddddddddddddddd" + "dddddddddddddddddddddddddddddddd", + "2026-07-18T18:00:00Z", + NULL, + NULL, + NULL, + EVIDENCE_INTEGRITY_STATUS_UNKNOWN, + &error + ); + + assert(first_record != NULL); + assert(error == NULL); + + second_record = + evidence_record_new( + "55555555-5555-4555-8555-555555555555", + "capture_2.png", + "capture_002.png", + "01_Preuves_Originales/Captures_Ecran/capture_002.png", + "screenshot", + 200, + "eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee" + "eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee", + "2026-07-18T18:05:00Z", + NULL, + NULL, + NULL, + EVIDENCE_INTEGRITY_STATUS_UNKNOWN, + &error + ); + + assert(second_record != NULL); + assert(error == NULL); + + assert( + evidence_dao_insert( + fixture.evidence_dao, + first_record, + &error + ) + ); + + assert(error == NULL); + + assert( + !evidence_dao_insert( + fixture.evidence_dao, + second_record, + &error + ) + ); + + assert(error != NULL); + assert(error->domain == EVIDENCE_DAO_ERROR); + + assert( + error->code == + (gint) EVIDENCE_DAO_ERROR_CONSTRAINT + ); + + assert( + strstr( + error->message, + "identifiant" + ) != NULL + ); + + assert( + test_evidence_dao_count_rows( + fixture.database + ) == 1 + ); + + g_clear_error( + &error + ); + + evidence_record_free( + second_record + ); + + evidence_record_free( + first_record + ); + + test_evidence_dao_fixture_clear( + &fixture + ); +} + +/** + * @brief Vérifie le refus d’un chemin relatif déjà utilisé. + */ +static void test_evidence_dao_insert_duplicate_relative_path(void) +{ + TestEvidenceDaoFixture fixture = + test_evidence_dao_fixture_create(); + + EvidenceRecord *first_record = NULL; + EvidenceRecord *second_record = NULL; + + GError *error = NULL; + + const char *shared_relative_path = + "01_Preuves_Originales/Documents/document_commun.pdf"; + + first_record = + evidence_record_new( + "66666666-6666-4666-8666-666666666666", + "document_1.pdf", + "document_commun.pdf", + shared_relative_path, + "document", + 300, + "ffffffffffffffffffffffffffffffff" + "ffffffffffffffffffffffffffffffff", + "2026-07-18T18:10:00Z", + NULL, + NULL, + NULL, + EVIDENCE_INTEGRITY_STATUS_UNKNOWN, + &error + ); + + assert(first_record != NULL); + assert(error == NULL); + + second_record = + evidence_record_new( + "77777777-7777-4777-8777-777777777777", + "document_2.pdf", + "document_commun.pdf", + shared_relative_path, + "document", + 400, + "11111111111111111111111111111111" + "11111111111111111111111111111111", + "2026-07-18T18:15:00Z", + NULL, + NULL, + NULL, + EVIDENCE_INTEGRITY_STATUS_UNKNOWN, + &error + ); + + assert(second_record != NULL); + assert(error == NULL); + + assert( + evidence_dao_insert( + fixture.evidence_dao, + first_record, + &error + ) + ); + + assert(error == NULL); + + assert( + !evidence_dao_insert( + fixture.evidence_dao, + second_record, + &error + ) + ); + + assert(error != NULL); + assert(error->domain == EVIDENCE_DAO_ERROR); + + assert( + error->code == + (gint) EVIDENCE_DAO_ERROR_CONSTRAINT + ); + + assert( + strstr( + error->message, + "chemin relatif" + ) != NULL + ); + + assert( + test_evidence_dao_count_rows( + fixture.database + ) == 1 + ); + + g_clear_error( + &error + ); + + evidence_record_free( + second_record + ); + + evidence_record_free( + first_record + ); + + test_evidence_dao_fixture_clear( + &fixture + ); +} + +/** + * @brief Vérifie le refus d’un type absent du catalogue SQLite. + */ +static void test_evidence_dao_insert_unknown_type(void) +{ + TestEvidenceDaoFixture fixture = + test_evidence_dao_fixture_create(); + + EvidenceRecord *evidence_record = NULL; + + GError *error = NULL; + + evidence_record = + evidence_record_new( + "88888888-8888-4888-8888-888888888888", + "preuve.bin", + "preuve_001.bin", + "01_Preuves_Originales/Autres/preuve_001.bin", + "type_inconnu", + 500, + "22222222222222222222222222222222" + "22222222222222222222222222222222", + "2026-07-18T18:20:00Z", + NULL, + NULL, + NULL, + EVIDENCE_INTEGRITY_STATUS_UNKNOWN, + &error + ); + + assert(evidence_record != NULL); + assert(error == NULL); + + assert( + !evidence_dao_insert( + fixture.evidence_dao, + evidence_record, + &error + ) + ); + + assert(error != NULL); + assert(error->domain == EVIDENCE_DAO_ERROR); + + assert( + error->code == + (gint) EVIDENCE_DAO_ERROR_CONSTRAINT + ); + + assert( + strstr( + error->message, + "type de preuve" + ) != NULL + ); + + assert( + test_evidence_dao_count_rows( + fixture.database + ) == 0 + ); + + g_clear_error( + &error + ); + + evidence_record_free( + evidence_record + ); + + test_evidence_dao_fixture_clear( + &fixture + ); +} + +/** + * @brief Crée une base V2 temporaire et son DAO. + */ +static TestEvidenceDaoFixture test_evidence_dao_fixture_create(void) +{ + TestEvidenceDaoFixture fixture = {0}; + + GError *error = NULL; + + fixture.temporary_directory = + g_dir_make_tmp( + "labfy-evidence-dao-test-XXXXXX", + &error + ); + + assert(fixture.temporary_directory != NULL); + assert(error == NULL); + + fixture.database_path = + g_build_filename( + fixture.temporary_directory, + "Enquete.sqlite", + NULL + ); + + assert(fixture.database_path != NULL); + + assert( + database_initialize( + fixture.database_path, + "Enquete_EvidenceDao", + fixture.temporary_directory + ) + ); + + fixture.database = + database_open( + fixture.database_path + ); + + assert(fixture.database != NULL); + + fixture.evidence_dao = + evidence_dao_new( + fixture.database, + &error + ); + + assert(fixture.evidence_dao != NULL); + assert(error == NULL); + + return fixture; +} + +/** + * @brief Détruit une fixture et ses fichiers temporaires. + */ +static void test_evidence_dao_fixture_clear( + TestEvidenceDaoFixture *fixture +) +{ + assert(fixture != NULL); + + evidence_dao_free( + fixture->evidence_dao + ); + + database_close( + fixture->database + ); + + assert( + g_remove( + fixture->database_path + ) == 0 + ); + + assert( + g_rmdir( + fixture->temporary_directory + ) == 0 + ); + + g_free( + fixture->database_path + ); + + g_free( + fixture->temporary_directory + ); + + fixture->evidence_dao = NULL; + fixture->database = NULL; + fixture->database_path = NULL; + fixture->temporary_directory = NULL; +} + +/** + * @brief Vérifie la création et la libération d’un DAO valide. + */ +static void test_evidence_dao_new_valid(void) +{ + Database *database = NULL; + EvidenceDao *evidence_dao = NULL; + GError *error = NULL; + + database = database_open( + ":memory:" + ); + + assert(database != NULL); + + evidence_dao = evidence_dao_new( + database, + &error + ); + + assert(evidence_dao != NULL); + assert(error == NULL); + + /* + * La libération du DAO ne doit pas fermer Database. + */ + evidence_dao_free( + evidence_dao + ); + + database_close( + database + ); +} + +/** + * @brief Vérifie que la destruction accepte NULL. + */ +static void test_evidence_dao_free_null(void) +{ + evidence_dao_free( + NULL + ); +} + +/** + * @brief Vérifie l’insertion complète d’une preuve valide. + */ +static void test_evidence_dao_insert_valid_full(void) +{ + TestEvidenceDaoFixture fixture = + test_evidence_dao_fixture_create(); + + EvidenceRecord *evidence_record = NULL; + DatabaseStatement *statement = NULL; + + char *identifier = NULL; + char *original_name = NULL; + char *internal_name = NULL; + char *relative_path = NULL; + char *type_identifier = NULL; + char *sha256 = NULL; + char *imported_at = NULL; + char *collected_at = NULL; + char *source = NULL; + char *description = NULL; + + int64_t size_bytes = -1; + int64_t integrity_status = -1; + + GError *error = NULL; + + evidence_record = + evidence_record_new( + "11111111-1111-4111-8111-111111111111", + "Capture Instagram.png", + "capture_instagram_001.png", + "01_Preuves_Originales/Captures_Ecran/" + "capture_instagram_001.png", + "screenshot", + 4096, + "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" + "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", + "2026-07-18T16:00:00Z", + "2026-07-17T20:30:00Z", + "Compte Instagram communiqué par la victime.", + "Capture originale de la conversation.", + EVIDENCE_INTEGRITY_STATUS_VALID, + &error + ); + + assert(evidence_record != NULL); + assert(error == NULL); + + assert( + evidence_dao_insert( + fixture.evidence_dao, + evidence_record, + &error + ) + ); + + assert(error == NULL); + + statement = + database_statement_prepare( + fixture.database, + "SELECT " + " preuves.id," + " preuves.original_name," + " preuves.name," + " preuves.relative_path," + " types_preuve.code," + " preuves.size_bytes," + " preuves.sha256," + " preuves.imported_at," + " preuves.collected_at," + " preuves.source," + " preuves.description," + " preuves.integrity_status " + "FROM preuves " + "INNER JOIN types_preuve " + "ON types_preuve.id = preuves.type_id " + "WHERE preuves.id = ?;" + ); + + assert(statement != NULL); + + assert( + database_statement_bind_text( + statement, + 1, + "11111111-1111-4111-8111-111111111111" + ) + ); + + assert( + database_statement_step( + statement + ) == DATABASE_STATEMENT_STEP_ROW + ); + + assert( + database_statement_column_text( + statement, + 0, + &identifier + ) + ); + + assert( + database_statement_column_text( + statement, + 1, + &original_name + ) + ); + + assert( + database_statement_column_text( + statement, + 2, + &internal_name + ) + ); + + assert( + database_statement_column_text( + statement, + 3, + &relative_path + ) + ); + + assert( + database_statement_column_text( + statement, + 4, + &type_identifier + ) + ); + + assert( + database_statement_column_int64( + statement, + 5, + &size_bytes + ) + ); + + assert( + database_statement_column_text( + statement, + 6, + &sha256 + ) + ); + + assert( + database_statement_column_text( + statement, + 7, + &imported_at + ) + ); + + assert( + database_statement_column_text( + statement, + 8, + &collected_at + ) + ); + + assert( + database_statement_column_text( + statement, + 9, + &source + ) + ); + + assert( + database_statement_column_text( + statement, + 10, + &description + ) + ); + + assert( + database_statement_column_int64( + statement, + 11, + &integrity_status + ) + ); + + /* + * L’identifiant est unique : aucune seconde ligne ne doit exister. + */ + assert( + database_statement_step( + statement + ) == DATABASE_STATEMENT_STEP_DONE + ); + + assert( + strcmp( + identifier, + "11111111-1111-4111-8111-111111111111" + ) == 0 + ); + + assert( + strcmp( + original_name, + "Capture Instagram.png" + ) == 0 + ); + + assert( + strcmp( + internal_name, + "capture_instagram_001.png" + ) == 0 + ); + + assert( + strcmp( + relative_path, + "01_Preuves_Originales/Captures_Ecran/" + "capture_instagram_001.png" + ) == 0 + ); + + assert( + strcmp( + type_identifier, + "screenshot" + ) == 0 + ); + + assert(size_bytes == 4096); + + assert( + strcmp( + sha256, + "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" + "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" + ) == 0 + ); + + assert( + strcmp( + imported_at, + "2026-07-18T16:00:00Z" + ) == 0 + ); + + assert( + strcmp( + collected_at, + "2026-07-17T20:30:00Z" + ) == 0 + ); + + assert( + strcmp( + source, + "Compte Instagram communiqué par la victime." + ) == 0 + ); + + assert( + strcmp( + description, + "Capture originale de la conversation." + ) == 0 + ); + + assert( + integrity_status == + EVIDENCE_INTEGRITY_STATUS_VALID + ); + + database_statement_finalize( + statement + ); + + g_free(description); + g_free(source); + g_free(collected_at); + g_free(imported_at); + g_free(sha256); + g_free(type_identifier); + g_free(relative_path); + g_free(internal_name); + g_free(original_name); + g_free(identifier); + + evidence_record_free( + evidence_record + ); + + test_evidence_dao_fixture_clear( + &fixture + ); +} + +/** + * @brief Vérifie l’insertion d’une preuve dont les champs facultatifs + * sont absents. + */ +static void test_evidence_dao_insert_optional_null(void) +{ + TestEvidenceDaoFixture fixture = + test_evidence_dao_fixture_create(); + + EvidenceRecord *evidence_record = NULL; + DatabaseStatement *statement = NULL; + + bool collected_at_is_null = false; + bool source_is_null = false; + bool description_is_null = false; + + GError *error = NULL; + + evidence_record = + evidence_record_new( + "22222222-2222-4222-8222-222222222222", + "document.pdf", + "document_001.pdf", + "01_Preuves_Originales/Documents/document_001.pdf", + "document", + 2048, + "bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb" + "bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb", + "2026-07-18T16:30:00Z", + NULL, + NULL, + NULL, + EVIDENCE_INTEGRITY_STATUS_UNKNOWN, + &error + ); + + assert(evidence_record != NULL); + assert(error == NULL); + + assert( + evidence_dao_insert( + fixture.evidence_dao, + evidence_record, + &error + ) + ); + + assert(error == NULL); + + statement = + database_statement_prepare( + fixture.database, + "SELECT " + " collected_at," + " source," + " description " + "FROM preuves " + "WHERE id = ?;" + ); + + assert(statement != NULL); + + assert( + database_statement_bind_text( + statement, + 1, + "22222222-2222-4222-8222-222222222222" + ) + ); + + assert( + database_statement_step( + statement + ) == DATABASE_STATEMENT_STEP_ROW + ); + + assert( + database_statement_column_is_null( + statement, + 0, + &collected_at_is_null + ) + ); + + assert( + database_statement_column_is_null( + statement, + 1, + &source_is_null + ) + ); + + assert( + database_statement_column_is_null( + statement, + 2, + &description_is_null + ) + ); + + assert(collected_at_is_null); + assert(source_is_null); + assert(description_is_null); + + assert( + database_statement_step( + statement + ) == DATABASE_STATEMENT_STEP_DONE + ); + + database_statement_finalize( + statement + ); + + evidence_record_free( + evidence_record + ); + + test_evidence_dao_fixture_clear( + &fixture + ); +} + +/** + * @brief Vérifie que deux preuves distinctes peuvent partager le même hash. + * + * Un même fichier peut être présent à plusieurs emplacements ou provenir + * de plusieurs collectes. Le SHA-256 ne doit donc pas être unique. + */ +static void test_evidence_dao_insert_duplicate_sha256(void) +{ + TestEvidenceDaoFixture fixture = + test_evidence_dao_fixture_create(); + + EvidenceRecord *first_record = NULL; + EvidenceRecord *second_record = NULL; + + DatabaseStatement *statement = NULL; + + int64_t evidence_count = -1; + + GError *error = NULL; + + const char *shared_sha256 = + "cccccccccccccccccccccccccccccccc" + "cccccccccccccccccccccccccccccccc"; + + first_record = + evidence_record_new( + "33333333-3333-4333-8333-333333333333", + "capture_1.png", + "capture_001.png", + "01_Preuves_Originales/Captures_Ecran/capture_001.png", + "screenshot", + 1024, + shared_sha256, + "2026-07-18T17:00:00Z", + NULL, + NULL, + NULL, + EVIDENCE_INTEGRITY_STATUS_UNKNOWN, + &error + ); + + assert(first_record != NULL); + assert(error == NULL); + + second_record = + evidence_record_new( + "44444444-4444-4444-8444-444444444444", + "capture_2.png", + "capture_002.png", + "01_Preuves_Originales/Captures_Ecran/capture_002.png", + "screenshot", + 1024, + shared_sha256, + "2026-07-18T17:05:00Z", + NULL, + NULL, + NULL, + EVIDENCE_INTEGRITY_STATUS_UNKNOWN, + &error + ); + + assert(second_record != NULL); + assert(error == NULL); + + assert( + evidence_dao_insert( + fixture.evidence_dao, + first_record, + &error + ) + ); + + assert(error == NULL); + + assert( + evidence_dao_insert( + fixture.evidence_dao, + second_record, + &error + ) + ); + + assert(error == NULL); + + statement = + database_statement_prepare( + fixture.database, + "SELECT COUNT(*) " + "FROM preuves " + "WHERE sha256 = ?;" + ); + + assert(statement != NULL); + + assert( + database_statement_bind_text( + statement, + 1, + shared_sha256 + ) + ); + + assert( + database_statement_step( + statement + ) == DATABASE_STATEMENT_STEP_ROW + ); + + assert( + database_statement_column_int64( + statement, + 0, + &evidence_count + ) + ); + + assert(evidence_count == 2); + + assert( + database_statement_step( + statement + ) == DATABASE_STATEMENT_STEP_DONE + ); + + database_statement_finalize( + statement + ); + + evidence_record_free( + second_record + ); + + evidence_record_free( + first_record + ); + + test_evidence_dao_fixture_clear( + &fixture + ); +} + +/** + * @brief Vérifie la recherche d’une preuve existante. + */ +static void test_evidence_dao_find_existing(void) +{ + TestEvidenceDaoFixture fixture = + test_evidence_dao_fixture_create(); + + EvidenceRecord *inserted_record = NULL; + EvidenceRecord *loaded_record = NULL; + + GError *error = NULL; + + inserted_record = + evidence_record_new( + "99999999-9999-4999-8999-999999999999", + "conversation.png", + "conversation_001.png", + "01_Preuves_Originales/Captures_Ecran/" + "conversation_001.png", + "screenshot", + 8192, + "33333333333333333333333333333333" + "33333333333333333333333333333333", + "2026-07-18T19:00:00Z", + "2026-07-17T21:00:00Z", + "Conversation Instagram.", + "Capture conservée sans modification.", + EVIDENCE_INTEGRITY_STATUS_VALID, + &error + ); + + assert(inserted_record != NULL); + assert(error == NULL); + + assert( + evidence_dao_insert( + fixture.evidence_dao, + inserted_record, + &error + ) + ); + + assert(error == NULL); + + loaded_record = + evidence_dao_find_by_identifier( + fixture.evidence_dao, + "99999999-9999-4999-8999-999999999999", + &error + ); + + assert(loaded_record != NULL); + assert(error == NULL); + + assert( + strcmp( + evidence_record_get_identifier( + loaded_record + ), + "99999999-9999-4999-8999-999999999999" + ) == 0 + ); + + assert( + strcmp( + evidence_record_get_original_name( + loaded_record + ), + "conversation.png" + ) == 0 + ); + + assert( + strcmp( + evidence_record_get_type_identifier( + loaded_record + ), + "screenshot" + ) == 0 + ); + + assert( + evidence_record_get_size_bytes( + loaded_record + ) == 8192 + ); + + assert( + evidence_record_get_integrity_status( + loaded_record + ) == EVIDENCE_INTEGRITY_STATUS_VALID + ); + + evidence_record_free( + loaded_record + ); + + evidence_record_free( + inserted_record + ); + + test_evidence_dao_fixture_clear( + &fixture + ); +} + +/** + * @brief Vérifie qu’une preuve absente retourne NULL sans erreur. + */ +static void test_evidence_dao_find_missing(void) +{ + TestEvidenceDaoFixture fixture = + test_evidence_dao_fixture_create(); + + EvidenceRecord *evidence_record = NULL; + GError *error = NULL; + + evidence_record = + evidence_dao_find_by_identifier( + fixture.evidence_dao, + "aaaaaaaa-aaaa-4aaa-8aaa-aaaaaaaaaaaa", + &error + ); + + assert(evidence_record == NULL); + assert(error == NULL); + + test_evidence_dao_fixture_clear( + &fixture + ); +} + +/** + * @brief Vérifie le refus d’un identifiant de recherche invalide. + */ +static void test_evidence_dao_find_invalid_identifier(void) +{ + TestEvidenceDaoFixture fixture = + test_evidence_dao_fixture_create(); + + EvidenceRecord *evidence_record = NULL; + GError *error = NULL; + + evidence_record = + evidence_dao_find_by_identifier( + fixture.evidence_dao, + "identifiant-invalide", + &error + ); + + assert(evidence_record == NULL); + assert(error != NULL); + assert(error->domain == EVIDENCE_DAO_ERROR); + + assert( + error->code == + (gint) EVIDENCE_DAO_ERROR_INVALID_ARGUMENT + ); + + g_clear_error( + &error + ); + + test_evidence_dao_fixture_clear( + &fixture + ); +} + +/** + * @brief Vérifie le comptage d’une table de preuves vide. + */ +static void test_evidence_dao_count_empty(void) +{ + TestEvidenceDaoFixture fixture = + test_evidence_dao_fixture_create(); + + guint64 evidence_count = 42; + + GError *error = NULL; + + assert( + evidence_dao_count( + fixture.evidence_dao, + &evidence_count, + &error + ) + ); + + assert(error == NULL); + assert(evidence_count == 0); + + test_evidence_dao_fixture_clear( + &fixture + ); +} + +/** + * @brief Vérifie le comptage de plusieurs preuves. + */ +static void test_evidence_dao_count_records(void) +{ + TestEvidenceDaoFixture fixture = + test_evidence_dao_fixture_create(); + + EvidenceRecord *first_record = NULL; + EvidenceRecord *second_record = NULL; + + guint64 evidence_count = 0; + + GError *error = NULL; + + first_record = + evidence_record_new( + "aaaaaaaa-1111-4111-8111-111111111111", + "preuve_1.png", + "preuve_001.png", + "01_Preuves_Originales/Captures_Ecran/preuve_001.png", + "screenshot", + 1000, + "44444444444444444444444444444444" + "44444444444444444444444444444444", + "2026-07-18T19:30:00Z", + NULL, + NULL, + NULL, + EVIDENCE_INTEGRITY_STATUS_UNKNOWN, + &error + ); + + assert(first_record != NULL); + assert(error == NULL); + + second_record = + evidence_record_new( + "bbbbbbbb-2222-4222-8222-222222222222", + "preuve_2.pdf", + "preuve_002.pdf", + "01_Preuves_Originales/Documents/preuve_002.pdf", + "document", + 2000, + "55555555555555555555555555555555" + "55555555555555555555555555555555", + "2026-07-18T19:35:00Z", + NULL, + NULL, + NULL, + EVIDENCE_INTEGRITY_STATUS_UNKNOWN, + &error + ); + + assert(second_record != NULL); + assert(error == NULL); + + assert( + evidence_dao_insert( + fixture.evidence_dao, + first_record, + &error + ) + ); + + assert(error == NULL); + + assert( + evidence_dao_insert( + fixture.evidence_dao, + second_record, + &error + ) + ); + + assert(error == NULL); + + assert( + evidence_dao_count( + fixture.evidence_dao, + &evidence_count, + &error + ) + ); + + assert(error == NULL); + assert(evidence_count == 2); + + evidence_record_free( + second_record + ); + + evidence_record_free( + first_record + ); + + test_evidence_dao_fixture_clear( + &fixture + ); +} + +/** + * @brief Vérifie le refus des paramètres de comptage invalides. + */ +static void test_evidence_dao_count_invalid_arguments(void) +{ + TestEvidenceDaoFixture fixture = + test_evidence_dao_fixture_create(); + + guint64 evidence_count = 123; + + GError *error = NULL; + + assert( + !evidence_dao_count( + NULL, + &evidence_count, + &error + ) + ); + + assert(error != NULL); + assert(error->domain == EVIDENCE_DAO_ERROR); + + assert( + error->code == + (gint) EVIDENCE_DAO_ERROR_INVALID_ARGUMENT + ); + + /* + * Le DAO absent empêche la fonction d’accéder à la destination. + */ + assert(evidence_count == 123); + + g_clear_error( + &error + ); + + assert( + !evidence_dao_count( + fixture.evidence_dao, + NULL, + &error + ) + ); + + assert(error != NULL); + + assert( + error->code == + (gint) EVIDENCE_DAO_ERROR_INVALID_ARGUMENT + ); + + g_clear_error( + &error + ); + + test_evidence_dao_fixture_clear( + &fixture + ); +} + +/** + * @brief Vérifie le chargement d’une liste vide. + */ +static void test_evidence_dao_list_empty(void) +{ + TestEvidenceDaoFixture fixture = + test_evidence_dao_fixture_create(); + + GPtrArray *evidence_records = NULL; + GError *error = NULL; + + evidence_records = + evidence_dao_list_all( + fixture.evidence_dao, + &error + ); + + assert(evidence_records != NULL); + assert(error == NULL); + assert(evidence_records->len == 0); + + g_ptr_array_unref( + evidence_records + ); + + test_evidence_dao_fixture_clear( + &fixture + ); +} +/** + * @brief Vérifie le chargement de plusieurs preuves dans un ordre stable. + */ +static void test_evidence_dao_list_order(void) +{ + TestEvidenceDaoFixture fixture = + test_evidence_dao_fixture_create(); + + EvidenceRecord *first_inserted_record = NULL; + EvidenceRecord *second_inserted_record = NULL; + EvidenceRecord *third_inserted_record = NULL; + + const EvidenceRecord *first_loaded_record = NULL; + const EvidenceRecord *second_loaded_record = NULL; + const EvidenceRecord *third_loaded_record = NULL; + + GPtrArray *evidence_records = NULL; + GError *error = NULL; + + /* + * Cette preuve est insérée en premier, mais sa date est la plus tardive. + */ + third_inserted_record = + evidence_record_new( + "30000000-0000-4000-8000-000000000003", + "preuve_tardive.pdf", + "preuve_tardive.pdf", + "01_Preuves_Originales/Documents/preuve_tardive.pdf", + "document", + 3000, + "66666666666666666666666666666666" + "66666666666666666666666666666666", + "2026-07-18T21:00:00Z", + NULL, + NULL, + NULL, + EVIDENCE_INTEGRITY_STATUS_UNKNOWN, + &error + ); + + assert(third_inserted_record != NULL); + assert(error == NULL); + + second_inserted_record = + evidence_record_new( + "20000000-0000-4000-8000-000000000002", + "preuve_b.png", + "preuve_b.png", + "01_Preuves_Originales/Captures_Ecran/preuve_b.png", + "screenshot", + 2000, + "77777777777777777777777777777777" + "77777777777777777777777777777777", + "2026-07-18T20:00:00Z", + NULL, + NULL, + NULL, + EVIDENCE_INTEGRITY_STATUS_UNKNOWN, + &error + ); + + assert(second_inserted_record != NULL); + assert(error == NULL); + + first_inserted_record = + evidence_record_new( + "10000000-0000-4000-8000-000000000001", + "preuve_a.png", + "preuve_a.png", + "01_Preuves_Originales/Captures_Ecran/preuve_a.png", + "screenshot", + 1000, + "88888888888888888888888888888888" + "88888888888888888888888888888888", + "2026-07-18T20:00:00Z", + NULL, + NULL, + NULL, + EVIDENCE_INTEGRITY_STATUS_UNKNOWN, + &error + ); + + assert(first_inserted_record != NULL); + assert(error == NULL); + + assert( + evidence_dao_insert( + fixture.evidence_dao, + third_inserted_record, + &error + ) + ); + + assert(error == NULL); + + assert( + evidence_dao_insert( + fixture.evidence_dao, + second_inserted_record, + &error + ) + ); + + assert(error == NULL); + + assert( + evidence_dao_insert( + fixture.evidence_dao, + first_inserted_record, + &error + ) + ); + + assert(error == NULL); + + evidence_records = + evidence_dao_list_all( + fixture.evidence_dao, + &error + ); + + assert(evidence_records != NULL); + assert(error == NULL); + assert(evidence_records->len == 3); + + first_loaded_record = + g_ptr_array_index( + evidence_records, + 0 + ); + + second_loaded_record = + g_ptr_array_index( + evidence_records, + 1 + ); + + third_loaded_record = + g_ptr_array_index( + evidence_records, + 2 + ); + + assert(first_loaded_record != NULL); + assert(second_loaded_record != NULL); + assert(third_loaded_record != NULL); + + /* + * Les deux premières preuves partagent la même date. + * Leur identifiant sert donc de second critère de tri. + */ + assert( + strcmp( + evidence_record_get_identifier( + first_loaded_record + ), + "10000000-0000-4000-8000-000000000001" + ) == 0 + ); + + assert( + strcmp( + evidence_record_get_identifier( + second_loaded_record + ), + "20000000-0000-4000-8000-000000000002" + ) == 0 + ); + + assert( + strcmp( + evidence_record_get_identifier( + third_loaded_record + ), + "30000000-0000-4000-8000-000000000003" + ) == 0 + ); + + /* + * Le tableau libère lui-même les trois modèles chargés. + */ + g_ptr_array_unref( + evidence_records + ); + + evidence_record_free( + first_inserted_record + ); + + evidence_record_free( + second_inserted_record + ); + + evidence_record_free( + third_inserted_record + ); + + test_evidence_dao_fixture_clear( + &fixture + ); +} + +/** + * @brief Vérifie le refus d’un DAO absent. + */ +static void test_evidence_dao_list_invalid_arguments(void) +{ + GPtrArray *evidence_records = NULL; + GError *error = NULL; + + evidence_records = + evidence_dao_list_all( + NULL, + &error + ); + + assert(evidence_records == NULL); + assert(error != NULL); + assert(error->domain == EVIDENCE_DAO_ERROR); + + assert( + error->code == + (gint) EVIDENCE_DAO_ERROR_INVALID_ARGUMENT + ); + + g_clear_error( + &error + ); +} + +int main(void) +{ + test_evidence_dao_new_null_database(); + test_evidence_dao_new_valid(); + test_evidence_dao_free_null(); + test_evidence_dao_insert_valid_full(); + test_evidence_dao_insert_valid_full(); + test_evidence_dao_insert_optional_null(); + test_evidence_dao_insert_duplicate_sha256(); + test_evidence_dao_insert_duplicate_identifier(); + test_evidence_dao_insert_duplicate_relative_path(); + test_evidence_dao_insert_unknown_type(); + test_evidence_dao_find_existing(); + test_evidence_dao_find_missing(); + test_evidence_dao_find_invalid_identifier(); + test_evidence_dao_count_empty(); + test_evidence_dao_count_records(); + test_evidence_dao_count_invalid_arguments(); + test_evidence_dao_list_empty(); + test_evidence_dao_list_order(); + test_evidence_dao_list_invalid_arguments(); + + printf( + "EvidenceDao : tests de construction valides.\n" + ); + + return 0; +} diff --git a/tests/test_evidence_record b/tests/test_evidence_record index f0e69838734eadf5b792d9e52c461c0225bb7cba..9f4a34c3f4cb344fc2515661bef1f47b81584324 100755 GIT binary patch delta 475 zcmWO1Pe>GD9Eb7!&X`0?8Lhj`%hgaiW z@cgA!=MDM1T&-}M)770A@zr+Az#{iM3cuLrbmFgX?8u|2-V6kG>*=Y0^!4s6TbvMo z?zGX!>SM2HSM2sWi>9)Qs6P_j`&ivMjoU-lSxx(zbQJ7j#7BT|EQ-sx_DCqk>yzcMpoROU~CP$s_ul=zHQFFbg ze(G{d_sbW5K6bX8wBzr3WI!FpfJRr1$`K0 zs!-z|bG#bk91thz^=V9V%y$*D4D8le(x~NN zRT9VS-0EIKK5y12+~-0~0^_zi;x+J#jX{Oq90(@x&o*k8kYDd~I2!cAj6>RdyvAtI z#UDp~Xy8sWhBHi>aWr$ov=HUqkR@~H#5glzg6~6Z=%%VWfizQf7OwM&*v~DItPWeq X@M5?FcextQV1{w^39s!_)=2w*xUa2^ diff --git a/tests/test_evidence_record.c b/tests/test_evidence_record.c index 7419802..893e3bd 100644 --- a/tests/test_evidence_record.c +++ b/tests/test_evidence_record.c @@ -6,7 +6,6 @@ #include "models/evidence_record.h" #include -#include #define TEST_EVIDENCE_IDENTIFIER \ "6e62b9af-2046-4efd-b3b9-29869f816951" diff --git a/tests/test_investigation_dao b/tests/test_investigation_dao index 0234ddd470732e3c1dd7ba53ba45d9ccfe826f54..368bb9c3f2a75d50f1fbc1b64e2f55e53f8c1e76 100755 GIT binary patch delta 14300 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 XcYs0dsO;cl9*%87p_58wyF>pEd>zeq diff --git a/tests/test_investigation_project b/tests/test_investigation_project index 3bd6369a2f5df830c034c78550518290ce4c20a8..a5ef20fc71e09c0e9ae806367f8718f7628cc4cf 100755 GIT binary patch literal 60272 zcmeHwdwf*Ywf{*lfM`e*qWB(=r%DKqAZn@M5lkwN2m$dq43h~&l9_ZegTabMK`&_> zMMbK$Dz@JG_M%cmtQy1;sYWs8Q$i;n z--bKNRarxmkK1bydKbL&bcNT@G5~3&)QeRb4T%x+)y6A6Y+P z{K)a+^6Mh`V=OX%BK}C8=$)x!obWaC`gH+#9)Ey?0T=x2M;d*FZVf$!mgzs19E zV?6Yk;(>q61K;S;?u8!oXM50J>49J9A?GR&e1iwR$pimmk9I+xc3fDC{FTvA2%w@W z>JL^&>gYUB7p$uC*Ttf-NOiT;MMHrKe>hM>^|i66KM;)umifb>EB#ki#TK&^e`P!z zwEX@>HIXp51JRh@4{FG%h}YsISRD#P{h??y5+xzgs&EViMG+@xw zRXQ-0k!VdI1{AUS>#D8_QM(J{Rn-;#%Bt#+xPwmpi$XDfFanFhu{sdJXl-aP5RQba zf`MxAn{3sQMbsMn9;pq5sTGnF3)NAJ@px4Q38@M%@<#*Vib#znsB<<*$D+#&Pu2anx+)eLD_ya$DqMjE>MV^W1T?6RIWgfl!a&oo8+9QVsgBo# z{piW@<7^5t$G>!pU5)J8+KfoO>At&OAW{S^7ZCH~;zCH~4l zRW%TSy1Ed?0+(u*PoP#w0~I=7-f-($q^pNn*@Ej| zRh3Qh21q%6eAVH^KS+e>JX+`J>jo>O>*YF2Mji z(uKcI@EtDv6N2w_;hz<}^_TM(zQKjxBKXxV{Ck35=fZaie!UCd{|;qu zvkO03@U1TVEWx+A@P5H}xbQK-Te7dD$77S=b6xoR1@Cj=pB8+93;&|vi(L3u1YhRD zzbW_yF8l|AuXW+?T&w(3@4~kVzQKjx{xe0t%7yO~eDfAnul=CQ>t9rO+C!PBPWk^P z1CIsCKAH{uF*eq+wj22441BABKgq!FGVo^_c&k|zXqzy@!1p%rnFc=Bz|*R%j{(i< zjO55t$_Sr$1S3w;zct22_Lw=M}Yp_%?Goc1Y|i<;@b!uL_9{J*4G6-dSr z>XiSNHLC*Qk5s4pe}1zn5FQDFeJp5Jr-bioV=Zg3fzL7UwFX}2AXHs%;Ey7N91YFt zgyft15~~b+KSjd-R~z{L2L4V1pJ(9L8Texj{6hwQfPr6c;Ey-(n+*I32EN(ApJ?E> z8~BqAe5-*!#lY_}@IC|IX5a@J_@sd!WZ*jt{HX@M)4)sWrfOxJlK+Po^t}!IPy?T9 z;D;Ib0S11!f%h5s5e9y^fj`Z_7Z~`{4g3THe};iCGVmh}e2Ib2H}GW!ew2ZqZ{Q0I z`~m|%+Q2V1@M8>ot$`nF;OhDg!^>z^^v&6Ab*F2L3Dqzs|s)ZQvg= z@aGu#^#=Y22L90LArBn#z#$JD^1#35fv<8-{#0mBd3za`uc9)g zn(akgj#8OY%=Q8cq$)5g^EloGZVaQUxPrc|)q$K{Wy zOqU|$&_0l_|w*U&rNNQkhb__SIbeIh84;Yj5E4ZB(XIuDzDaKczCIaP14Yd_9#Zb!#u< z@>Nu(l&!sp%TX#*s@7h>Xj&ru2m#MOJ01O!C?nfp#urV4^B2X4=9bW0jrlGh`;Z)ip}&s{5Z^XOt)%gFRxY{mJFq4|3o$>!xl*}q!V&+4C*vn?R5A`=NMa@y?Q# zX85_QWJPCJY(PoNOI%=*w~1;YqH*_;nx_KotysR(iuVJijp_$MBI~mI9E}=9jWiY~ zp;Qtcq4`%=?fEC4vup2!#oDzcO>;XdN>1<3-5bkF?nB-0w@T;x(D})d#&{dN(#akm z!EEigE7;oNOWE2OfyN!1*NL?~NfGK6rtPh0k5jZ43+??v`z~uXqYav>P4E)K&CgRu zA?P5iQwe*niW`3I5^nfZ5%#bMODHotU(jK7B)o{IqYk=Gao(mldkE(v!a0XH)AvYc zNh9}2E3D!k0iq@O22@*ZyQ-}F7}*8M6i;me^;qHf0-ie$QMd`ZJx)qdfc`1@b5f)c zvAJUTE@g6ZF`N9(#cc8;OuA$9%Oo9o{JazNO^|}PCo?xI>PHpz9YXy(p{^$CMBYt= zroo~tyBX^R+Ehb{ofT73LQ2XNBIPxaGL)rcPZKGd*+Qe+xc_w^vb@1cUY?RyDDr5G zkqvL}B^&0_P-_#FZigGhqU0h_B?{lUh(OlS!uyW!{+xM>+w3ks4&5YO{)FPZPjU7Z z&JToh0dckzx03d|PeN}uP68KdT()FQml`VD!ZxWk?@XR#01f1gx>CQ>|T&p>0ZY5E9Db7a}=iQ3)7s8oEGb#u#CC)_N)ud4>9yN~^1U_j&~z+N?MyQy+r!EaALPaq=RUj{z%V z;^&H~NijVpOg|K+>B3~k;Hz+vM8X2ad4b}5L^!7k=h4KOegeg+#}nu+uspS--O8bp zb`8X$!wi>e1|V9J3%nWHgkhv+0HP&1%9}yYeEXm^tHf^F5BAmQCt4C!#)BoX9VGTV z@9RF#>-jv%VUfV{o5=eejTSYZzk*J~+-l4M6N21rhtDOD^)3N)+vVcNSH9#>N$T;} zM^V35&eXpXYQIqbf~XT&%T;?Xk_yS@lRzqc_S!;XE4)W>U(RGZHV1_Ja^}uEm(Yo< zdah;1FE>OqDiIee5j+n-UAhD%AD^Jq?XU;MWP^34Vm(E%&X?9B!rJx^(mgMO(5bv9 z)8Ox`_&=P(`f2{9!oQCAnXx4~13f1J{!W0X3m;KTuTr!^-{r!zgqRK-rb(ET3e&%$ z|GLG*TOj#YW8xi}8dOYdBqba%F;yx3^=!6u8|eXct^gA2R)bva1HuZg^esEI_@2v(27^0VVpHjGi~Y`uVqc;1D_9u;*~ z{vFaUvlH3wqgIVp$@Z~wwOKfjjkUpZvr;{EB$?&NWZv}?UE%qv-7@jr7HRiLv|rD%UHbciYTcMSE>-gWP)15*{ZoSb6_Ix{%bN=u z3csc*?)@G5+5)3B0fEw;M=MDyl%&^0(rY4VDoHZz_~deGuyC%TK9|ga9d8NsG2Cw6 zUJAri#7#I3MTxiv6n~!LzgJrOlkmU&H*Sq*`4tEOQ8A*J+GbJPSx*Yn2f}neF&#MK zPDXE}BF^U>qI$vk8w_CvR^{&$L@>y)9J~vX0}cHH1=dhDfz$k_Nqa|N-G3RGS@`8l zwstES4HthU);|5YvqS0>^~;L-38CI2)He`yBJU#_K?p2a9UnZFWSUFSNG0VOC1r(3 z`A(#qtJ>s=pdY4>mFhyOlP}~7OBK^?G7KOzp(yRvHph97{3nI z`xI-lVtrOv^Mv&}X5|U(3$Eh0JBK{&h`WoFl&h4KYh{Y^iIj6liZKzKuBfLgYBm^_ z4ixHaZZrD{YA@Y{_BYkKF`>OjnR23V-}!9*aA|#n$a}t>JjWB-V5;giq5T#DCBkl1 zlAcnMzLN-}7c?ls>PV7dM^I6(RMcTI2X>4T>S9IBk$>C(v%C0mB2hS9@qH>w?|5y$ z;^T&$sB{F(~>3%y5+4*tQKfmIm_hHk-s z6iDpgFX+BPwo#m8WpqzyyBJTqXNkO%*nSSIkI4$h9)eFDd0a_(N~ByY zQo>3~A@@V!>S^Fcls?M_>8ti1Q5QNUNzOYHg%>HAy@(lh1V!fY$_@^dAA(mFyi=7T zgB8;RiR%hs`t&n4o;&B+JTty_Q!bDw{Jexf)=9!wDSVGBKG@%qycqo_@wHJgJ)@X* ziH6m}R8LF?j<2s_L@K`adIzMAua`9go3PEBL3h>dnt^q{0}R~)vH>Lj+khO*V~Ydw z0y5hXkT25mn3lj6eHh$E48Dv5;+ zw~M?4$>T|~CHW*YlwjPZn0}_1ib-cMtr4dAiivyjjDBV?-mLiiif^@~2Wy4Tr}$ud zOY#rsI|;^%6w_&n>3kXhXzUllwEHj6@W8>i7>cKY@e1$g)xmhCW?&P}@@9ald>zqK zGqCQx!O$%jzk+f9+hFXXWJg``y-a31f^jyjk%__{#RRf;5`deY7B{{8F?XaLjDr>R zTT_|(MWNmx)N6?vTffv^Di}B6E~_&bKcMM4QFx1zvPPslCsN8-O7;mJ+ud3gBut;RLA3)9f*_oi8U!KlQKJXJ z7|p;YjPquIsyqlXGz0720}R~;!51*j9t1_*Q-tk2U&$6aQU#S7=!@y@sY5fh%6;F6`yTv|d$w6$T%M_@H!1303iV#0 zUPjc3yfdlecng-Tzq=2~#Fjty^3`pYf6%m;D2ys8SBjMVB4sQ~$<9zx)N3E+ovMBm z2aek|_bYjWl)P7DQ9ir}wcC>X%Li;jtG#bFMhP(P!7NY$J}M%;vhEWBxgy|~Bp{Jj zMS3O*U!Dknq3_IPu2GIvHw1ae9I0d`l*~$zd7Q|csg&Zq(4?9@jHRcQ=Knb{^zQWKnt^*{fj2{|v@lXL0D=8)Zw5GnRoVwL*#`E` zez13&1lmDjPXcN7zmpaY4E_#*Z3NXt@&iYpM!Nkanw}Gd{eDOw>t#s`O2pke-=k>G z`kDp{G+$ycHY&zM!0UE3@Ar zRno1ne^jj-W9}v;@6SIVu~~;p>lGsJUY5s~$5~X>?eh2@2$XQ2tR&s8B)u=;UMZ5w zNs?hle?=Wq)U(JO*bx!xp^BOZY4hQz6YD>qQJ5$krMP;F$LSqw>eP;RxD6gH_aLZ5 zv4<7Yx91RV)~lizy%0`J&kWW`aQ5v z1-**oZ)v#@D+efrOO?VGOGk~^E-1k(iUGYCfr?ziVjuL;i$Nn z!t8}n5Jvs;6Y3v0Mz|)D9Q)?s&F~_6S?UII-C@EQb<}0?V?n8DhMzp)$5>YO%RoyQ zElowe8=EmUJKFb<2>nP3YD$_wFc;5FecYpD#b0}uWV8}SKQ@xHlGa#9+uuNG=scZ} zWW-auw)yU(OBWig9!;p2ANj;Tfw-R@8LRa|a!Gt|tS13zY3FS6B98viLb3g8&Be zAjpI!JZjhjhoKp^ru}a1tY-2%+(7<-v%<;dKZ#=&0h4mfbr=rm9TOqC^g~f=aW!P7 zw73QgD*6V{gGun79^>QQMhz6QY^#0lhm%^0DK0EnpR{7+1U!Bu52HP%Y-%fMq9?+- zKV~!!TG;WT!}ThVwjt;!xaltcfZb!Al|xpR-j9Dso*=Fg>RrfCKfblYOM z7z)7lRyYiauyCBp9L25nNPZbqaD-P-wMx5>za`cH(USZx>NL{2{mo3$AnS>!a?;v2 zxlPGS4<>ZJLn!I1gkHl!p*f9o8Oha3GM*IVr-^onUT-LW(11_Apu5Vq(=$A^J%0uX z_YT|hArw(f^L-0>+@<~Z)b%?5p(~6nZHH0zo5;Gk1~r(C=%N|1%)yj%!|g;*q0Q0Q z{Ze8(=|z_kP8<3v8!jRn$h$kf1(|728QGqGxM_Q`9rond_Rw=Gm}82!(;Tz?6lroJJSRcs|N`b;16#_cZ2fz0Pv$wdsw6>J^9TDL-EcEtQ|uWP}8VZRXHE zjifcrZIys-Qx{>$I$SI8HG6EXR%HD@T@D&`a78``NlK9~pcX5#8&B~Xk@MLOmfUKO zQ#BdU%%expgQ}C0YUz|=b(sIFROxh{4se~FS^o5|>V1rFUY+Mi#_R=XTKG%!YO< zat*Goi8O6jhqm6kO&>M7l9#Ki28 za-PZE$hoL9q3e9(wHmcc9*2|V;^bfS$f4*Y*=T_`OP;{WbbMBzW(^s_NHgK#b;W%WW0iIv~ zBl;+jchM9y*F9yN3qP|AP@VnOJzxAO%os~j&M_H&V3K-Fa2C3uivMQ5f?`p?q%=l~bT zDY_=>I9H7;;isO%d=+m)eC*N_+_vJqlFpG`ZK})gP_)dZuaTaKyh#|KXhzR=wMUWm z(34|TNbgsq9}p?7zZC~ep*tyL`yJtx6UieL&n)CTt7J8Q$Lb_i;* zYn{E(SxYYoL3l6j&fQtu(W{F0HiY(OXy1H!Jl^%%SiINn*dm8B8fUalr_E8Bk5f)L zQ8^_K0O3q7YE>>uy@m0qNqJoA? z=L<*}A+sgv0a2;m63V5XVbS zNO*CDL38{rl{AsCGu*=NC1EcSKQSa`v~9*N3xx4VKDkBuT*dLOlCxgI!`ZT}bt0W8 z$;g3_FI>~7pd1t?WWxhOf4lWqzs{%GYUAqCAkUW&|?|9d#&Dm*lN0_H8TI5N z$-#O?m6241#@j%YT2a;`=fPYt4g%_F1CZ+UQnE(X*<<{8jQN9&@%QpvW1KD8R@|l5 z1icD8rDA~{vw_wndMGO<2Hk;5aL`oC1jCQe0e246e4TdVQg&{|RIP6N4b=2|w7~dL z)UcY7rbz!aEbp>nn9r2x%j~u9WL)_j$vdVmxwncgLxA!UV0V*BStRFnlH|E0}xETOg)Z)`OtnFZ1r;CEBa*DrC6O7e169s!(^){=YxPOulZ zoRwdpVQtGDI-$+E;X|d5Ju!TOX0JSA3`zd%sp9evCLIWB2^kyZfxR*M)}V|82#lYWgfnhj>mK z1Qb1VmwPr$>V8d;fes;wrYJ4s0di3K%D#x94fb-M3=-J}Wl8sdyhyA+)S^=t0C=6R|#uqp0`pURa+x&P3yhy#E16 zzjyyMNjP{%{1$!Y?1;?=X6!A#Sz$5)*^<1@#b~5N7=cwk((~a>oQh!Db?w^x_Bk3G@0*cq#1-ZTj;n9rpH!C9iSe{z`TH1jcdHI2v+Yw(&R5GOxrE@!q6)DP1Bzj<d%e6n*xCIhPh?FX9VqwhcG)l#!VeO{V<9FL!i9E_oPc&P`Cw~` zuS5Y_lKHTW&~`W!QO7mLcS`og*&1fdZhNM>?_^hhmtI@4X&c}g+I7U%6J2nlhL)GL zW8roVMzs3LUfqo^EB7dN%w|pTouz82LBEi!ee6_f;1b0V!*BkPg@#Fdw>L$aXa0GaQM$VNetEX!n%r35ZZ*P3=#p_4e;%2wC-S z`|nHJAhkC4B>!D&IPQ02497i+BvQpctvJdY@R8$Y>{OFu@iX4;D#U{#Y1}m%9;W$J zyK9V;)46K|G)TE?0hCMYu4^HpySti6eTTbvo}h5kx0ntPYG0TpV}Gcdt1?YjH6SZj zuG(nuHO<|r=J|VnF})SrX!@B&P|zUJ>{mmMtitvK16hP(_N%` zcQ<_>AN|v?6-$*l0;fU=dyQSVM|-Emp|d=ZRI^xK(k`Ehi>|96kF^;=))wI z)b7HCFV8!C!9n}3NP2jz>Eu3c<6!2trzkG=tXRHB-P-{%&otkvcY!43?+X^5(vOAa zw0*G$tlw>brir{Cq}Q?rl&Y&;_dEU<$}aOzc1C(-uYiJD*_le&7CgL_#-+`uO{*-8 zSA8jGUX{?NscgscBR9A?BNtCI?J78FW(#`da0D%BK#>IfytDd8d-T-KXP~s)zV`Xff1M^9b$vGHNcN*qg4alAHdk+oguN z1w*qmPr0|?)f()t(mv*n)7hV?M@pKI;HdVdq53VUmJ!qomyM1+(Lp5APD(F?T;0a8 z@Pk)y>Y-b&iTC4u86}r=io12%i)TuDNMkfk78hu+KS~s(TY$M0n%Uo)} zXq~Dx@f8l8j&kc1v~@ZgDi3h#^x;02PPEQ<+IQ+kLA2;$+21g=zgkL~A36?s;E)Fn zdEk%-4td~^2M&4QkOvNV;E)I09>~CND<0@5DDY1X)P<&orbfcy5Pq<;V6?w18j3Fs z)%j;ds}|7@T>_gPJ!(pzHWtUPhx&_y_zhHQCoTJ^DUtBfP_&MJ6cfTc>83`4@f!Yt z*7S0U@l%}D9y*RHTO5f+yej8aRfMQ=jBQEeNzvM@_1Li|feC zWWHH5B~nuhVsv3R7^nhOy2@#RU}#|^vLszyX&66ox+of`F)Qs}@RwGgGoX%HTRM5t zOtV~uj-}Xfv|UygidRI!%W9nH@=$fCc5%c-JSmRf;stx5e|Dg@HWI~;v=)r_7uU<_ znf{p(_Q(YPoJc$xB+|3|C4sud=(y6F+DKhp6@Gx&S1~LSUmC57`i2du8|K4L+*Sm_ zF&`?zp;#=kEU+l#JKHy;jvn8%EC`I%jiUefZCnIPWI;8sx=&V7~75k|sv4AEe#x{DWM| zr}Go_d^#u9jpAYcJ?u@>t~grBa47+aqwpi`qm(lAE8F4NNPAKn8Cx7cF%qg9iFI^j zs2;x=e-OI|{fpu}yC?m8sT8DNad)^WWwoulJ#8wZ@?-TeV`?P{HU-VTee^tH{`R{$ zJct9KM6{QNq4mhoXZVJyDOt_%-#4B_kn~FT{-74V&v;E)s@hK%Pdw^)Rdl#Z&t&sx zP=+|FyvC78z>Mg!j}}#Kc%Z972C&UY6#eR@4=s*oXt7md`*TiV{769`itSrGkAX`rgkUk(DRG7zu#RZvP9ic+R1%b0UqJKM*&Ho4M|?{s?U{4Ii9HLYf| za2Xbb-T4+}q5dnY@UJ3bzAwT`hK2ben2 z3o~c&gT_hvnIyI9$|Q0CyN&ErO&uvOc+KO^{!i!V^z9L!qZ_+*QmJ|IRi?TVmuay` zybhOcbpX+B(F#(cacgzEC8XB9ZmdPfvoAHdaf6q@LH#?QG3U-@&rO56S1fb()t z@xwS;>oD8kN*NPTR5lH?d|mH!0;OY$UnV-@M~0NrL-PwBa}ae1scj#upI!~+`l7<6 zqfLwxC%smTrVpjFvtBEv`^c1}&OPY0CtdBOJRA+xR%73x!oP5t!zh+V!$kD~mL+|~ z-MwwXr08v1WXvm@QuQ*n{NZ?YH5`PinQ#yr7w-KnX~vBoC0UKW)J(ho1m3jxL;GNd z_Q6K|-`NKX`Rd}ewb7~?Y!cAEn962+k}+cFsvR=g40G(Cx%eupf{T#_eILGHbnC;; z#&{2oTW}358GofS=M>K__m$2ppXJkg6~5t1Ld(vec|IN*;hQ&U`rP6*4Ehx>3;Rh&V9W?nwA(-JPJX}-cAzzzqFcrB(q%us>Y2-OygKyx_K{D%(3 zQS6LIX`=>vqP&@Cjj`&2i$gU5KkaX0C)k=!8+E=?b6K;nt65zYmWX8Q$Yhxw@QDS!intFpZGE^V;KSnU3oNX|qJ=QRYFxARVQed5w-?>57GiHc znXf}?y-rUT{wcU!nq~Xuje)8rpWaUf6YV-0qo!>3r1NG>@>NEn zp{hk;KO9*Hzs{O@4!YlHfK01OZBXki>3BHg!<~b0ow^I)Bd|2(CvGbqtE#R-n?!4O z3qbWCGCV?WM zurIhc5M3mCZf!)^2dOWjk?QJ&f#4DZ2)WnxRK7KwMn+W_*Azj7Oq?%KP5*{`m7yq2 zQdqicam@)^91_$BlX0JNBid1#@a(2Nq6THYg-sP2qtd3GOgY=t{6i2;q1t#=ozb_d zJ@|=~MxvMs6k{}~pa!Wa7jedUM>RznMDz5A3D~KkZ{BEoBYPC8c=8xcc?T|%4Y$iI zGjB|H>M=~sibBt5=*RJ`kD&9xVUAeV@!zpySfIK(5?7%^KrB=rlPGig7x6{Y13U^v zM4F=Z4XKcp{)KkbY$HACv?onFGB@dlzGpijzHfv!4l18Fh_!Scr)gZTr>yRgXv!ZJ zs>jR_r+WnOtu4mv4wpXYzN&CltP0(ND#*MxpK`%m*Bnd@S8RRwimmJH>3DMSd8IRbr88y}Pc6k-s#exX zYIZb*s_EMYP8HVCd~3?A88b@DiQ|CuvMS|Uvu918K6%oV^Utv|PUvyY8MtLX6}+_# zU0n-s-m#*qYZcwbUy0{*0sjfO4)B{BySkbI2d?VsY6Cp{=B_Ra4_TkIx~t0v7{9fv zs|fH#zy*K<)^v3>0Df`@_yIq<6a0YDyTK3Gbr1OQSomT0gCFql{{%na{s+Mic;!Rj z2Ydr?9boOl;0L_t5%2@v{wVnI@PGYd;0N^K8SNs#&j1$ymg2$q2Ed+p>0uq<5Wr@@ zV!$@Q2LUa71mO<67vcj9;ANH~z%X9DSpaxH-eYP2+y}T0@C3a6)eLwJU>o4&fEGS_ z^E6&f^a0+0mlBHrFUFgw3jqK2Joo{9czt>u;8?sI-we1Nunq9P0WCc5-wUty`v4<= z^!)#SZUsN!?w7$2*orTMtONWGuo-YDKC;pV_#r-rV;yc;r{IfDKERo;f*&yc8u$Sp zz*p8905A9>_yP9=HUs_?A7^U=e6SV#*mS&j2lxSB11tipd=vbDdjT5&n|6X9kdFQe zSQ%H%wleB-Gfp_NSMSw$ew*+o;&1(RU0p+oW@@io0)z2~*FLS@*FYBf-0GVbgD*4348)UUGZccOmpU0q#S)IYX=tsb`hsDJ+#sK=Ny z>JQWP($b=~Wz zzss&)gZhV1KN5P{@_P)o{kH-2zroz{jf4LmHvdl4H~qS+>r+R4n_a&L^<|io9&-5S zSGIrp1HTJ%(l!VG7Mp(@>aW3E6?Eu#xvgJ0>bGDHd)~pn$>xut{_@AWx=u0cFXn0$ z|ERwV^**!yl2rW$sb6T;XI^H@---JB!2gA#zTK|hgZi2$5TB0v7Q4Pb;^H{G=aTKP zueWXAIMnyVoJ=3#P4!Q{U0+W8PadHEQD2UFPy10n2lYNvKhu7xKh>MM)`~Yw{>(q5?8m$^5o^d>j`~)+ejMt*ME&g!`)^L!kNObS954UG zP+yNVsGmc>zP5gAP`?Cka?>lUw*Hx`?e;gIz76$W{@aQA4^i(k`3?W=k^04EeP+;> z-ydt?Fsy;}X)e3{9;0ph#-V;9*2Za$`blbL{#(sNaikv5a!mpJvzh$6DSKYxgim z{UE!39O|>NrhD<1qy9v!^^cqOWjQ8d$ zH^A0!C+hD*Zt=8({|TFa59-Gt=ZHG$YwY^|Sm#!v{^t()ci8gBp?*Jd6?%iuj*rZn zZ2of8NAUSSTE|oMx7hVD)c*zbs~q(!xSmjSeEdNVEMJ`#hN=a1Exg6YM-l$t6sNB) zbahceLTQXH*J577_wTIF>s39P;e17xhoVde4Li%~(fcr*k%?B1+@4mC0h!iO7DV>w zeFP90IPDEc=g{Ra(uHX0kL1!p?Kc>05l-`w-Uax>P_xdPIoHZ;uqf44?J>-7l%a{E zOtd7Q+9Q5C2uFX1jzbb(N3hO`ViZ1+H?Lt6b|UuX2?ibd@){%3ECJ_gv*pSGhlLnx^y{?JCc5mHn=A z%vEl3mG5_zpLUgBbd_ImmEUxgKX8@rT&r|%6}X)~`Qy>JXDVgA2X?%a>!qIV@6n;_zuw;! zq4IWVpZ3G(p!=3|U@Ml74yl*hl2*RxcZAdr5SS-W17Wk0FDgu?R1BAf`b(Mi5b2=( zK|0onAdO$&SK+nZ9io`1Y3cUA>r(cBno0LdxmNhG^T_t=6u4C2jRMySRMIfcwy3l7rc628Hyk_3BYdOB z=a0@G?Hf}tW_-c;F@>5kJrSOf?dCwQF)=vulbpMkqX+r=)@kB)ix%dn2I^gP5!{9BGclCSd$jc>$BhLvaO zc}?RV!bv*)f5-I4S`9MKbqK?|fF%E6(Vw4b0B$eS=U8p472!z=Sbd=|(f?X*M({HZ zs3VwRaDIOb<6K!3Z?cL=>+mmU`STPG;_{EP)ow+nsl zZ3@r#R&n})&<|3NZ(01z1@QZYzDVeOip}cZL)rUZ6BUA=!NBQ6;K|+vLO(+2=Lr3V zBB4J_!LZP;7J9wzt`z!brz$#rMgyl02z|3lpUp!5#CeLIpV`3ayF%aQqNjV7>EfT( z=M1c#4bLe#9q4a5`a)mo-|I_M`CbLAa|Q1!RS15T1E)&_KSKiN8==2V@KgBf1(x-x z;GY3LojxxCPx{n8uL$+J{h{FNUHA;-1ElBIvlab9kv~H47tT=#er5uvKNNg%xx&9D z^cM>LsJRNk&q&}jCis(SBErG<{sC_j`~?>>+PXvmYd!GnPnVu=3VxLf|BcA$J6{Rl zXB%+Z4|xjN6}(vC-w^p@1Yal(z9snSz^C))T%n&ERD^tQAEzO~-(8{bd`};z%RJ=V z;DNtgXJlkwTskZL8EpS{58EZ}|8mI*HRkQ4F1-{^tA z#RGqj2mTqxXIpE_ls5c~7*5~tp#Rtdzt;nQI1;a;Gy7Wl`b^uLLwH><;E5jiVT{kV z>H~^cuXiPaKPRT}t3+0%;2(9xTfK+;8-%`fmJ+Z{$|djy{61^;@L z5}^D2J;DF;0)?09()tE?pF%nQAIagMOmK`GvKL?rEXF z40xZMo8U^|bJNTxD?Q}j<$-^U@!8ffbxOLVHCBrU{Vw1KnTp8yS0414xX?})Km9!L z!x*1!y)E&;&tjpC$$~GhQ4LZ)LB}P)AC-B6owqA2zKNzNyV2-qj| z&&c?du)~AK!DwuBe#G+o0}HGC_?RKyu#GLm3!&jTz*dCRyP=_|KUU)pR`aI^{rHHA ze^GU0VW8Syfv@z{`SH;gOMhjiBEJB_(oo<#2H`4yAQ}xU^W$x>=rXI4J_q5ih}YCC z1B+3@_XnzC4pRP3f#Zc`{oMol(xCp1i~fE>RjAHl4v#Odp|!Hv#pUG}`KQgDIiDVP8(tn~O9fO1dGuV!Be4`^BmqY|}rT=nAI<5lO zJM)^8h9iv`XJF}C+Z7V!{Hmh*j7xfkV09=Ej@Q}|p*}U@LCc?fG=efcnXQAGIds2c z@at3hW(j?zM!(nZr#FJ#l}_Of3cCgUCg)Z3olN_KHMXQsJ-*sIMdDpf1qj>m%j7`{b;53O@-H3jk45}T^_LvbC8AVygoL9Pq^v#1AL+5bmI->}ZBVmA4K%)X!(OMw2_L4V zrOEG~Hha>HVt?_>seV67*xUCPmk6?C>TJt@-t<|MCr$Uynl=qzZ}68-nv8G5TK=gQ z&73r&bc*{6p7hpq$~Id&|H7(p1%DHVK4lgSh0@UkBh~Smu-_>{y9d6(CvMSwsTQjv z_)MHQMc#Oa7gP009KI=ffW|O0)0cWYhOCMmTO!^X55-^r<}zBu`6G3Kx?ok6AD?}Q z;R6Ix$Kk;12|gWd4qd6foksTiE8}5f(4`!OZ>rX!8y3|>!jKxkNc3B^@mO8a zdDBZLPw|h*ACq5bD?~FylzodY7}cS5=ur``#fhrnPdh@Iti_f1ZnHyK$vyTYq&m?qrh0)5f>z_lc|-;`=r1jw;ZNmu z-!h!6mEho)1)1SpL#k=$(qHus>cGsz7xOecm8g;18$NNwqItRvK_KI)QXF zf&>vC*Hv+1JKe#nyUj4jHrMnqr>YL6m4*IbeSrEDujF49a>R}r1~q{tA>_2RcI%qf zM(9yZpEb0bPFadCZcvhxu1XCzzaJ*c^pxV)@q^&5sEha)<4t}zJyowiB5dn!>%*Sl zIcAZczO0?<2kk2!g7T5al*m-bViBpsXS`EU3s+F)M$3yoj?chU!jbeH9U6}GX)%0c zr6N+pA0u2Gbvx1Kr1>Enxzdl73j8UF_`FL^z?j3#Zo}0=O;rp|z+ehvhK#7s`?%WR z38xMnh%odotgDlN@e>R#@dp<#@jIr5aZanv2Gv&vY-dX61|xCIvamK-Q|o9uO^2lX zZ&#*L1zRxefjF~RQ@1Fk7Ee)&{0rk%)fMRC>X6K~bn2&`!dFwU!r>F{xJIJU#ueu0 zGx0s@n#fXjNTW@jmOMs1Nwz=cbO0LLGD_KOBP7&mjrZf*`>_Ceqq=HgP<00au_|mk zZ|pcI9SnpcVSKTP#-3>nt9V7HbURj!4>rXT}ktQcR$PWhEQl%~6DmY^|P zH(G&6S&OePQ_RMilNuXVe%-Pfd>0%LYb3+P`V3#64dpKi$Md-#N8-a%`MeU;T8v#x z-`3BsSQdr^1rZTkqrY-x7W}A-;xqWfAZNAJF_MS@l8@8;MG>6v$j_&1Xb?rX7xF`k z<*Ipc1%&7lH0En*E8o_Wz7T}uc$uIkO)ectm-^g>TIDSktG!96{7tipX)Iy4-tiuQlKU#$`OIH9dH&HtG2 zYpCyoYkHzJkMStr_m3l*Uq82{p>AKd+uLNuc@h4wC2F^?pX<`F756deAV6(ve*HWG zZRe26x_$ken1=efFp%)!)}L;>&@)(?Uq5%H;nl*Y_1AP7((N~Trc0Ogb6px13BOx^ zL0i>0A=#RLJ@%dG&`>{DrrUShzZA4oH<_4l=;zcl)X%jM&GGni^EUuTKIw@+K739{ z@ns%b4~_c?PE3BEPt|D1-~7RPeZM*7NN@;-s0ld_Y*bjC--|a zziwBT>HdM)zP?YUA+}W=hui+UgV#eX)|EYiUDZ#-aH%Ji*1UpM%g)>#0R(K3yINe!^+{_5BD9-SjSXtfA7r+fL2z zp1(A|30*^sRZDJB8g_~SG>p&3pVmjOKe&Bt>#jJ||F$<2Jf4EfICQ%jbrept?HWh$ P+mBR9-@n#%ZvOuVJ5dLq delta 16626 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 diff --git a/tests/test_investigation_session b/tests/test_investigation_session index 04f8d66714548cb98a4e3052273af85519218148..a1e875f5d2a64d73b1b317eb9d9decb64b1fadef 100755 GIT binary patch delta 17583 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 Yf}NvIazGjALSNtMtb5}sIo}QZf6!3FG5`Po delta 15921 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 b#-ZEQDB91~eb+dGos<}GoRh+kQndaD2tYD} delta 11425 zcmZ`<30zd=+COJ-6p(#!m|+`s1O-t+MG;iMajDdp;ir~2@nRJOk=3>EiQ5pfZOG~q&WxB+ekL7|WK%9m&AKOI{>C?tftNA7OyT9@TsoRrsXKX@ z$jhU=>?uoT+n=`S4eArz>RDbd;L-|K>gU7BSc>roR_Ac;Jzj?J@}36-8A%lzOx-bFXY)`8smn zM)^+iLMBi4RiN{eyq|5F?4>9=r4je+(gug8xK)M)i^@_tXf(be`77M{KG0n{Rv5fN z``Q~4%nQYxW~SZO!c}&$ajB=yJ_e&4?wotVO&UUvLu%lBQCxJBCXvnO?`qp>y>GN? zlrC|trDa079Y`qU_@%31)g^wDR5h6bhm?ODFkVN~gJK4c!JN4DbeezkBCc++<*b~l zC>EQ386&-#N<%G``Y0$_7T1<~IWGD~bKK7*g?NbN&F1BXlcR_6ZJ$<4gT5$_vi7ZtTNU>g?N1j21Ln%I7yKvlA?~ z&_4>nv1P7c3O0Qe*Q>8#v0(ZEzdIaITFuy%Fst~Mapxs6X+aZEngq&DfihU2%$6uo z66J8%J-}4L0LC-BXjpaj8+61NV{Pm$8oOuYux`#hEnpj%f=zGddi6DF683Kl6+K{V zmvj3QIErwtly%W8P+k!z=Ojv|LV+pN~WwE#=n&EOiA+F?4Mc;m7Y*$Kd$8i+5(2+nn z(2IfT8yTsnubCx%E65NqyzA)PUbdJscb-Q47S-}`J3=5V5(ppBt`6aTA9aQrZ??|f zDS~xmS_+4*vu9yMx9*4{0D=TStaPDLw)DzfF}4`n)scI#9L238HApwYaik|B`rl}V zp@TJs2W3C^T7Kw#XI z7;Bg=wGA^C{e+OaTKu&?_fi$wSETj^iM+6h_qDA^TGL*(OtWae-3sGFfw89tgVJB7 zvaoQ!%c;1L0iS5%BWD7W!+2UKqwXVTlmHka0LE~=`kDi>v9EsPPK;!1SHLr4IEq`q zg9VCSpmdQaMQ8Vi=G@+Otfw(t7^$d-9LixGVfnraNs58`qim%k_EtAu=z zjL=C5Yji{1m!f%CXYXg^ea>Z8=<|>eM&0{7Qott3X1QK{%})~cy*s?mo+8!S>KbU~ zC~kfB7busoWWjkKiP9)him2Gs-WrdoQQjmvb0&`|W_~F2$FQtpcHNNrsjO8QqLUpV zlL>q@%((=LQCp7@Cl{;t1mY-xSRoN{65#zlbK608OwlO@CPp0MuuHa%Ly53=;53OI z_-9gXc&PO%Q+MV13YK74x%E3qSnU#4KQe-T7-XxxZu97E5h$)jVzk-0Nc@z`+RL0H z0IIlq^)*HTkZf5tID z$PU(x49S($cO$rwTTjs9NvFHUu9A@3oAufg-NT4ve`1xY?u3+T^H#DC=mdkWw6%u23immK0+7c z8Z$^AC2Yvgu!^+~|Dk`|Jh@`^1mY0y~arc5zHwE3{V%?R8wQzGjv5G4MK%eSa~b z?DDYpyosZ@oytZDlpzA;If+swQNBuS0z z2NYZ8>2yZ)b@a43%73TeeIR(>62YXzWin5Qi-j1Edgd7a!GhOE@V1f~lMwj_3%E06 zoQiE@&fW7~(n9^p#e5TPF_^cRykF5Xm( z)XLQP3h{+b+$k$P5f|-$fuA)pw+Y@-S{`RgSkD{c2i2?B91gj+R0++QLUS~I6_=;> zBcJ#P%Tm{*?%!Udl(P4tp~vz0h=OVv$~*pns7BNF8)nw;1^Jjv)91ozmwV9VSr^gGbYiSZ^A zx+@34ULl??#3$%zqS^mt!Rse@XXsvHeB>rJuAGzcVWFW2jjfcE6dzgKO2b!Ze3s1J z+(HYI5+YMtX?(@^;mr9$V-wW^<4U-DE6apNAEB{<)a3Zcjjc2W35^!EbK3Olsef`p z;nS@&+6j$aLSr3Uu(7_sB*WFq?#ksQ*lD>e@}^D6Q`G!wV@F?A7uSup72;Jv%8R3E{VZ*_Q^9q0I4t>d^4bvkBc(&cj?nuQqBVs<9jHs{sKEBj6IY(M`_bxD zljlahq4=(+-Kj>;H^j|5^nGfiO4Nd~jEtQ!bXj3EwA1)NGh32f5G#FYPp9N?vp>si z=?j+1kqxX(=W{_j|5rL2@_+H;;=vFfHKO1(MAm9f&O_rZVhA+WzJ_>T%Jh*In9Zy~y3))b+WO_s`s&<7?v#z2?g zd09vc$vZ1Nxdbl<#C@F5s@5F|wF5nVT zR!%_CMVSDewCeM8F)JpZi^k+xdGS02_UPxi_PhwlD?JU=+|wsy`vq7Aa1Sc;%*;{U zd0N@yl@LEofQ|^k*zc)F&qqTI-#Z)?1^3G5-&0D5RuCR z;-IBs-`)Vk=rjC8UhVtO)1{sXA*t}8b(?d~K@b_?DKmWoO*j?6th48xLzj$H+{-g= z4-@)pG4nr%JJt1CsEegyegh4UH7D9eHd<^5zb&VUtz1|Lm?M^oFYQ}_u(;NL@yocU zVc9Vq#3R;2NdEr4Vu~EMd;CrhXUBPc$ydG5lO0*O{f5F4pgf>e-_hpm$e?|2!1+=t z53L_W>q+F(JEU+D+pH@K5Q#ebVDA(buG*^PKtCWdaBo8fGl(K|%- zr6s-1?YzEYp+864vJ7;-tEc&M+`Hyo=vj=Y`R5e>MJriHvDcEC5=@TX?K>QRBE};; z*}oUF3{g04AK60YKJi|aOk@jPl*~HV`Ax2fT^cSA2cDRZkqnHn`hunPsHTOUNHOT| zf^~?NcTA>kIhjKp;<2W|`8sHHv(_mu(J4N|MzH5w=d@(exT6_rOH@oVZO`eb>w1PR z4;A5G4z{EEbhC=^0$PNG|VJNYT>xmGTb&)=oA+|=~<@XW~P zGl!|gdkd!Egc;KcrY@0|=63Qec6-kJ5ADnClpfp)W$gVZb$H1koXLhW6A~#Ruanw9 zGx9soxV(PW|A>bYSM*~w{VPMz}Io`4s)0Z|Z1fPgh!CN`o|i9{Wc0`Kq7T#(I21c?G82<2-v0HC7g! zLKsE@7OUR>E_&TzEpisZJ;AnyhM&Go0|pfN-^A0e)0x;?R6QU@S9y{Oo-%J=f=g%2xDKMHU>$M^E)NG?$ zG@rjgX@!xwW6|(Voc5HfbKQhx|9znI{{ohKApcptQJKtU#Vum>AwZ2TbMgZ#fIFfwuOxdoMa)PeV`z`J>ZrVbpD zfBe{k@w^_4m*<8TFYs=gxqpQW&p>-EKGfHesatcLW?NEq7mm@}mU+6H$0%x0ny%Y1 zdU#N@?&~8oZBT+~%u(JnoU=?gAsprpAmvAC^Pt(fYey+zaH=l-D2*5#r#pLu{yw;m zZub%TWN>GLFHHIF%R4#lE8MZ&x4L<7TYdG`X(4St9yZKZ&7k3rPom@}eW~-fZe$rh zy~9&QrA1E`&6=1#Yr-=VONz!lmytGWMltOe-_gVT*9^KazC))$CDW(Pnl<^!;)&*` zCYmQaQ#5nZ#F^$lF^nk6Yo9cE>a5bD;$mpgjG~Zs=4^AqEJdk4Ty)mM%Klx(BdF5! zk;Bn|de1EmM=fZ^R)+(BbShUs&7iMsb2#!qcYN${j0fFP?QoQVKKF^kQ3bks2kbzX z{>$OG2)Z8>f1D}@cflT1Ujuv4i=V_I;Otpz;o^>Z2OWUpT^SQJqEZF=0*;ckpsR2oy$CuK zM{k8@OiGHJzRBT8M3R*Jc5HoD;_<^XoD%jSAnB7yak`G1>FlH^-M-D#4D!$xGCdQe zdw45lgCuRE(ICe@rg-#KpwaB^0L=sW;Q*}$xpaVP z1UU=x;{h5y#gw=Pd43Fe{hjSI{rm!!=mz+<^=MLk+IcE?E>?C!-u)2OOfj`RhwA%> z0A*@>57mv}q8fojqiQNPwe5py;~~l}HWiLVwJp-#0thFp?hZrcurEM<3G#!jn*H3_ z>>9``j?!76?nc$)I5nes4%O1*WGaCNsM?QHHmVUADZ@_CXjJ>4dZnJ`p*j{-uak7P zBwUYL*eR+hG3nQ!8cnN8!rSgfE$v%shUPg`KNZz`s9H`__Eex^{A@o>qfzaH>b3@& zhw4~V^Uu)gsoAmHH#qpkhJ!bL+I<&HJp=Afy<2@}>J2qT`yfI4073iSpmr>jaIpxm zYq^eA&yR}P3UhX8?0xs$*VC2x(Si1Sp@lap{K6CXf@pOq^;(dw*3#q!(Ykv&TDG9C zYN105qGR)Xgc^o4zlOCJ6xrZcqe9-+G&O*FS)&7Yv)u^kCRF4l3tkrgF7nL2G z_+_S!3&-iq#k6c;nsG&t#uhXNM5p*DwN$^*VAQ&;=?q3iRl=2IQeQL}wXZZZ>3nHB zj51y{;Jw127t_^IG#6zcy^nGaok4k?yvozn)6@&)TQnKvep-ccD;+}lGuC zxcIaIeeF;5*Gv7oS=78FF_ta54}v`mzKSnvEK{ieKN2T4;1;X5qJ7@P?$~ves~HtL zmSXoy#cWV9maAlZG}-eQMrOsNge}xKf_g(ghz$TX_{Un;zDVQiHng@$%a?P7NxE$F z5cp>1x4uEc&|i_Y5bC$opnCH%n3plU?9Iy|yd2L;<4i0KK{{VWo0`%sWe$^OEM`*p z#9pMbD_RicUCG~xx8CexPao|1f+N>++wY_fKP5nxCH?+c@_XfQ6GiKfCv971FvcSa zfePM|4HHtHd{n#9$_j%qSH@`H03odwL>b3z=Rz9rfDA8Tw(9?}GIFy-pq|2%J<7A| z5cuL#vLCtjZB|;nFu7R&^YBjwyLQPw#7q9(JkC}&38LhHAE+}a$qOYzl0j1c3%rG7 z*K2|(W2L_Ky_RGvlZC#wQkpMVGii8bwE9oFgb;0zU~^NpX~tS9z1v$r=E?Bvmi#*W z1H~@BO@rb)yyXV<0!RKu>U75oNOqC5y~m{iSk0MNUGDQLlwxcKV=|ZiZj>zuUQg*K@U;|`O8(cfN7|5HD*1uZpEzNrY?S;R$$~La@;5QQ4h270NhV0O(DzW@ z=vp27@;};yivxMu1Vx_Ai>DPmh2!}+c08Z)>QVaE%b%Wktsh+)9$bCoHC3&?@cLXm z{dLU`c=6Ed&GaC4vSXJ{%GtIf*Y5U#?+Vy6-SAg6i1L*pjJ%Y3iQ=`~0v)@V! z%#-`7MlCe=Evsjq+_GuiTLv<$4Rn4QJ6`UTOS)3_+B9!%rLgDI%(aEOgkY*!n--|8 z&Kli7ch{x|op?(4uF)6TQg&5Zpz9k{A)Zdd+XU0{s))e*KXJ|Dk|R|SzOHX!VS_J0 zgUNH9IZ*qKQu~b6lj{#%7ZIrK(MwB28$z-i675^c6;cu)+E|x>k8*FU%k|{P2L)R_ zb86_@2^ymd&3!vPP}@GjW(Ztq{dR=6HiMF9(2ckI>Oi`#?;C27dY-;QAAfQweQELf aRPSL61gGAcYSw3Y$5e>hRF!JhMEyT3c%)wd diff --git a/tests/test_transaction b/tests/test_transaction index 3533f197f356319952e8176b0788354d8f1b182e..d434f54b51ca713e2d253228539f45ce7ec8dec9 100755 GIT binary patch literal 33216 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