diff --git a/2A/S3/quali_dev/tp8/.gradle/8.0/checksums/checksums.lock b/2A/S3/quali_dev/tp8/.gradle/8.0/checksums/checksums.lock
new file mode 100644
index 0000000000000000000000000000000000000000..3c8f1f6a0f167a23dd8d26dd39431e9559a4ef9b
Binary files /dev/null and b/2A/S3/quali_dev/tp8/.gradle/8.0/checksums/checksums.lock differ
diff --git a/2A/S3/quali_dev/tp8/.gradle/8.0/checksums/md5-checksums.bin b/2A/S3/quali_dev/tp8/.gradle/8.0/checksums/md5-checksums.bin
new file mode 100644
index 0000000000000000000000000000000000000000..898e32a0e10119111e8873114d281d88a9c8c262
Binary files /dev/null and b/2A/S3/quali_dev/tp8/.gradle/8.0/checksums/md5-checksums.bin differ
diff --git a/2A/S3/quali_dev/tp8/.gradle/8.0/checksums/sha1-checksums.bin b/2A/S3/quali_dev/tp8/.gradle/8.0/checksums/sha1-checksums.bin
new file mode 100644
index 0000000000000000000000000000000000000000..8b4ed0e8f2072f005b6900c242c6f7e116801861
Binary files /dev/null and b/2A/S3/quali_dev/tp8/.gradle/8.0/checksums/sha1-checksums.bin differ
diff --git a/2A/S3/quali_dev/tp8/.gradle/8.0/dependencies-accessors/dependencies-accessors.lock b/2A/S3/quali_dev/tp8/.gradle/8.0/dependencies-accessors/dependencies-accessors.lock
new file mode 100644
index 0000000000000000000000000000000000000000..2c45f71bd02faae11b290a06b197f2f817c28b01
Binary files /dev/null and b/2A/S3/quali_dev/tp8/.gradle/8.0/dependencies-accessors/dependencies-accessors.lock differ
diff --git a/2A/S3/quali_dev/tp8/.gradle/8.0/dependencies-accessors/gc.properties b/2A/S3/quali_dev/tp8/.gradle/8.0/dependencies-accessors/gc.properties
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/2A/S3/quali_dev/tp8/.gradle/8.0/executionHistory/executionHistory.bin b/2A/S3/quali_dev/tp8/.gradle/8.0/executionHistory/executionHistory.bin
new file mode 100644
index 0000000000000000000000000000000000000000..dad2897c389249a69626c3ea460d749ce2c19c54
Binary files /dev/null and b/2A/S3/quali_dev/tp8/.gradle/8.0/executionHistory/executionHistory.bin differ
diff --git a/2A/S3/quali_dev/tp8/.gradle/8.0/executionHistory/executionHistory.lock b/2A/S3/quali_dev/tp8/.gradle/8.0/executionHistory/executionHistory.lock
new file mode 100644
index 0000000000000000000000000000000000000000..bb34f360a215e1167e177cfef79c5886879374b1
Binary files /dev/null and b/2A/S3/quali_dev/tp8/.gradle/8.0/executionHistory/executionHistory.lock differ
diff --git a/2A/S3/quali_dev/tp8/.gradle/8.0/fileChanges/last-build.bin b/2A/S3/quali_dev/tp8/.gradle/8.0/fileChanges/last-build.bin
new file mode 100644
index 0000000000000000000000000000000000000000..f76dd238ade08917e6712764a16a22005a50573d
Binary files /dev/null and b/2A/S3/quali_dev/tp8/.gradle/8.0/fileChanges/last-build.bin differ
diff --git a/2A/S3/quali_dev/tp8/.gradle/8.0/fileHashes/fileHashes.bin b/2A/S3/quali_dev/tp8/.gradle/8.0/fileHashes/fileHashes.bin
new file mode 100644
index 0000000000000000000000000000000000000000..e48658595cdfc1a3ff7bce734d83c9bb4909b479
Binary files /dev/null and b/2A/S3/quali_dev/tp8/.gradle/8.0/fileHashes/fileHashes.bin differ
diff --git a/2A/S3/quali_dev/tp8/.gradle/8.0/fileHashes/fileHashes.lock b/2A/S3/quali_dev/tp8/.gradle/8.0/fileHashes/fileHashes.lock
new file mode 100644
index 0000000000000000000000000000000000000000..c3397022f14d4c5b945d22eb278bb35aee2b6f56
Binary files /dev/null and b/2A/S3/quali_dev/tp8/.gradle/8.0/fileHashes/fileHashes.lock differ
diff --git a/2A/S3/quali_dev/tp8/.gradle/8.0/fileHashes/resourceHashesCache.bin b/2A/S3/quali_dev/tp8/.gradle/8.0/fileHashes/resourceHashesCache.bin
new file mode 100644
index 0000000000000000000000000000000000000000..62f401a161815c8adaee9c8007240b6eb62c7aec
Binary files /dev/null and b/2A/S3/quali_dev/tp8/.gradle/8.0/fileHashes/resourceHashesCache.bin differ
diff --git a/2A/S3/quali_dev/tp8/.gradle/8.0/gc.properties b/2A/S3/quali_dev/tp8/.gradle/8.0/gc.properties
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/2A/S3/quali_dev/tp8/.gradle/buildOutputCleanup/buildOutputCleanup.lock b/2A/S3/quali_dev/tp8/.gradle/buildOutputCleanup/buildOutputCleanup.lock
new file mode 100644
index 0000000000000000000000000000000000000000..e287b0e2cab0ed42eea0531c940a455c79429e41
Binary files /dev/null and b/2A/S3/quali_dev/tp8/.gradle/buildOutputCleanup/buildOutputCleanup.lock differ
diff --git a/2A/S3/quali_dev/tp8/.gradle/buildOutputCleanup/cache.properties b/2A/S3/quali_dev/tp8/.gradle/buildOutputCleanup/cache.properties
new file mode 100644
index 0000000000000000000000000000000000000000..c14f18ff74e7152b2866f8312f12b034290a2a40
--- /dev/null
+++ b/2A/S3/quali_dev/tp8/.gradle/buildOutputCleanup/cache.properties
@@ -0,0 +1,2 @@
+#Thu Nov 09 08:12:41 CET 2023
+gradle.version=8.0
diff --git a/2A/S3/quali_dev/tp8/.gradle/buildOutputCleanup/outputFiles.bin b/2A/S3/quali_dev/tp8/.gradle/buildOutputCleanup/outputFiles.bin
new file mode 100644
index 0000000000000000000000000000000000000000..7617123540f403469eb2b029d6eed5f054e06a85
Binary files /dev/null and b/2A/S3/quali_dev/tp8/.gradle/buildOutputCleanup/outputFiles.bin differ
diff --git a/2A/S3/quali_dev/tp8/.gradle/vcs-1/gc.properties b/2A/S3/quali_dev/tp8/.gradle/vcs-1/gc.properties
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/2A/S3/quali_dev/tp8/.idea/.gitignore b/2A/S3/quali_dev/tp8/.idea/.gitignore
new file mode 100644
index 0000000000000000000000000000000000000000..26d33521af10bcc7fd8cea344038eaaeb78d0ef5
--- /dev/null
+++ b/2A/S3/quali_dev/tp8/.idea/.gitignore
@@ -0,0 +1,3 @@
+# Default ignored files
+/shelf/
+/workspace.xml
diff --git a/2A/S3/quali_dev/tp8/.idea/.name b/2A/S3/quali_dev/tp8/.idea/.name
new file mode 100644
index 0000000000000000000000000000000000000000..801e9b4a4c6c26f0241a9ec8495a67291d269748
--- /dev/null
+++ b/2A/S3/quali_dev/tp8/.idea/.name
@@ -0,0 +1 @@
+tp8-main
\ No newline at end of file
diff --git a/2A/S3/quali_dev/tp8/.idea/codeStyles/Project.xml b/2A/S3/quali_dev/tp8/.idea/codeStyles/Project.xml
new file mode 100644
index 0000000000000000000000000000000000000000..1bec35e570deb55a46c8665aebf9019302f5495f
--- /dev/null
+++ b/2A/S3/quali_dev/tp8/.idea/codeStyles/Project.xml
@@ -0,0 +1,10 @@
+<component name="ProjectCodeStyleConfiguration">
+  <code_scheme name="Project" version="173">
+    <JetCodeStyleSettings>
+      <option name="CODE_STYLE_DEFAULTS" value="KOTLIN_OFFICIAL" />
+    </JetCodeStyleSettings>
+    <codeStyleSettings language="kotlin">
+      <option name="CODE_STYLE_DEFAULTS" value="KOTLIN_OFFICIAL" />
+    </codeStyleSettings>
+  </code_scheme>
+</component>
\ No newline at end of file
diff --git a/2A/S3/quali_dev/tp8/.idea/codeStyles/codeStyleConfig.xml b/2A/S3/quali_dev/tp8/.idea/codeStyles/codeStyleConfig.xml
new file mode 100644
index 0000000000000000000000000000000000000000..79ee123c2b23e069e35ed634d687e17f731cc702
--- /dev/null
+++ b/2A/S3/quali_dev/tp8/.idea/codeStyles/codeStyleConfig.xml
@@ -0,0 +1,5 @@
+<component name="ProjectCodeStyleConfiguration">
+  <state>
+    <option name="USE_PER_PROJECT_SETTINGS" value="true" />
+  </state>
+</component>
\ No newline at end of file
diff --git a/2A/S3/quali_dev/tp8/.idea/compiler.xml b/2A/S3/quali_dev/tp8/.idea/compiler.xml
new file mode 100644
index 0000000000000000000000000000000000000000..b589d56e9f285d8cfdc6c270853a5d439021a278
--- /dev/null
+++ b/2A/S3/quali_dev/tp8/.idea/compiler.xml
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project version="4">
+  <component name="CompilerConfiguration">
+    <bytecodeTargetLevel target="17" />
+  </component>
+</project>
\ No newline at end of file
diff --git a/2A/S3/quali_dev/tp8/.idea/gradle.xml b/2A/S3/quali_dev/tp8/.idea/gradle.xml
new file mode 100644
index 0000000000000000000000000000000000000000..de4bd2acf308449f8fad951f3fc200fac342574f
--- /dev/null
+++ b/2A/S3/quali_dev/tp8/.idea/gradle.xml
@@ -0,0 +1,16 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project version="4">
+  <component name="GradleSettings">
+    <option name="linkedExternalProjectsSettings">
+      <GradleProjectSettings>
+        <option name="externalProjectPath" value="$PROJECT_DIR$" />
+        <option name="gradleJvm" value="#JAVA_HOME" />
+        <option name="modules">
+          <set>
+            <option value="/var/home/E224359T/reseau/Perso/Téléchargements/Gitlab/travail/2A/S3/quali_dev/tp8" />
+          </set>
+        </option>
+      </GradleProjectSettings>
+    </option>
+  </component>
+</project>
\ No newline at end of file
diff --git a/2A/S3/quali_dev/tp8/.idea/jarRepositories.xml b/2A/S3/quali_dev/tp8/.idea/jarRepositories.xml
new file mode 100644
index 0000000000000000000000000000000000000000..fdc392fe877c32ab51d532fa67f65ff2e75e9061
--- /dev/null
+++ b/2A/S3/quali_dev/tp8/.idea/jarRepositories.xml
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project version="4">
+  <component name="RemoteRepositoriesConfiguration">
+    <remote-repository>
+      <option name="id" value="central" />
+      <option name="name" value="Maven Central repository" />
+      <option name="url" value="https://repo1.maven.org/maven2" />
+    </remote-repository>
+    <remote-repository>
+      <option name="id" value="jboss.community" />
+      <option name="name" value="JBoss Community repository" />
+      <option name="url" value="https://repository.jboss.org/nexus/content/repositories/public/" />
+    </remote-repository>
+    <remote-repository>
+      <option name="id" value="MavenRepo" />
+      <option name="name" value="MavenRepo" />
+      <option name="url" value="https://repo.maven.apache.org/maven2/" />
+    </remote-repository>
+  </component>
+</project>
\ No newline at end of file
diff --git a/2A/S3/quali_dev/tp8/.idea/kotlinc.xml b/2A/S3/quali_dev/tp8/.idea/kotlinc.xml
new file mode 100644
index 0000000000000000000000000000000000000000..fdf8d994a6599dd8b64a341af14c598069a10022
--- /dev/null
+++ b/2A/S3/quali_dev/tp8/.idea/kotlinc.xml
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project version="4">
+  <component name="KotlinJpsPluginSettings">
+    <option name="version" value="1.9.0" />
+  </component>
+</project>
\ No newline at end of file
diff --git a/2A/S3/quali_dev/tp8/.idea/misc.xml b/2A/S3/quali_dev/tp8/.idea/misc.xml
new file mode 100644
index 0000000000000000000000000000000000000000..49504efe3418dd3941f2fe28e1d2a070c7367046
--- /dev/null
+++ b/2A/S3/quali_dev/tp8/.idea/misc.xml
@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project version="4">
+  <component name="ExternalStorageConfigurationManager" enabled="true" />
+  <component name="ProjectRootManager" version="2" languageLevel="JDK_17" default="true" project-jdk-name="17" project-jdk-type="JavaSDK" />
+</project>
\ No newline at end of file
diff --git a/2A/S3/quali_dev/tp8/.idea/vcs.xml b/2A/S3/quali_dev/tp8/.idea/vcs.xml
new file mode 100644
index 0000000000000000000000000000000000000000..4fce1d86b49521afe1cee4ed1c13b6396ebbc6f3
--- /dev/null
+++ b/2A/S3/quali_dev/tp8/.idea/vcs.xml
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project version="4">
+  <component name="VcsDirectoryMappings">
+    <mapping directory="$PROJECT_DIR$/../../../.." vcs="Git" />
+  </component>
+</project>
\ No newline at end of file
diff --git a/2A/S3/quali_dev/tp8/README.md b/2A/S3/quali_dev/tp8/README.md
new file mode 100644
index 0000000000000000000000000000000000000000..982330565cb2973b99e878a6e191d4842a269399
--- /dev/null
+++ b/2A/S3/quali_dev/tp8/README.md
@@ -0,0 +1,196 @@
+# TP n°8 + SAE
+
+__Ne cloner par tout de suite ce sujet de TP__
+
+
+## Exercice n°1 : tutoriel Ktor
+
+[Ktor](https://ktor.io/) est une bibliothèque Kotlin permettant facilement décrire un client 
+et/ou un serveur HTTP : _L'idée d'un client HTTP (=firefox par exemple) c'est 
+d'aller consommer des données sur internet_. Ktor va nous permettre de transformer
+simplement un programme Kotlin en un client HTTP.
+
+
+1. Commencez par suivre le tutoriel [https://ktor.io/docs/getting-started-ktor-client.html](https://ktor.io/docs/getting-started-ktor-client.html)
+
+**ATTENTION ** sur les postes de l'IUT, en cas de difficulté, choisissez le client HTTP Apache, 
+plutôt que le client HTTP CIO indiqué dans le tutoriel :
+
+    implementation("io.ktor:ktor-client-core:$ktor_version")
+    implementation("io.ktor:ktor-client-apache:$ktor_version")
+
+Puis initialisez un client ainsi (avec configuration du proxy)
+
+    val client = HttpClient(Apache){
+        engine {
+            customizeClient {
+                setProxy(HttpHost("srv-proxy-etu-2.iut-nantes.univ-nantes.prive", 3128))
+            }
+        }
+    }
+
+Pensez également à ajouter les `import` corrects :
+
+    import org.apache.http.HttpHost
+    import io.ktor.client.engine.apache.*
+
+**Comme indiquer dans le tutoriel, une fonction annotée `suspend` est une fonction lancée dans une sorte de thread parallèle 
+(en Kotlin, ca s'appelle une coroutine). On doit donc attendre qu'elle termine pour obtenir un résultat.**
+
+2. Ajoutez la ligne de code suivante : `println(response.body<String>())`
+
+3. Remplacez l'URL utilisée par celle, vers le webservice suivant :
+[http://jsonplaceholder.typicode.com/todos/3](http://jsonplaceholder.typicode.com/todos/3)
+
+4. Créez une data class `Todo` :
+
+        data class Todo(
+            val userId: Int,
+            val id: Int,
+            val title: String,
+            val completed: Boolean
+        )
+
+puis utilisez la dé-sérialisation (voir TP n°3) pour instancier un objet `Todo`
+à partir du résultat de la requête précédente ; **ATTENTION, il faut ajouter
+à `build.gradle.kts` les informations suivantes**
+
+    plugins {
+        kotlin("plugin.serialization") version "1.6.10"
+    }
+
+et 
+
+    dependencies {
+        implementation("org.jetbrains.kotlinx:kotlinx-serialization-json:1.4.1")
+    }
+
+5. Modifiez votre code pour 
+récupérer d'un seul coup une liste complète des `Post`s, en accédant au webservice suivant :
+[http://jsonplaceholder.typicode.com/todos/]( http://jsonplaceholder.typicode.com/todos/) 
+
+
+## Exercice n°2 : Ktor + DAO + ...
+
+__Vous pouvez maintenant cloner le sujet de TP dans un nouveau projet IntelliJ__
+
+L'objectif de l'exercice n°2 consiste à implémenter le DAO `FakeStoreDAO` qui interagira 
+avec le webservice FakeStore API. Pour cela, nous allons utiliser le client Ktor dans le DAO.
+
+La documentation de FakeStore API est disponible
+[ici](https://fakestoreapi.com/docs).
+
+##### Question 1 : Configuration.
+
+Modifiez correctement le fichier `build.gradle.kts`.
+
+##### Question 2 : data class `data.product`.
+
+On s'intéressera uniquement aux champs suivants : `id`, `title`, `price`, `description` et `category` ;
+regardez dans un navigateur le résultat d'une requête vers l'API 
+pour vous faire une idée du JSON : [https://fakestoreapi.com/products/3](https://fakestoreapi.com/products/3) 
+
+Un cas de tests est donné dans `testexo2.TestProduct`.
+
+##### Question 3 : DAO `FakeStoreDAO`.
+
+Implémentez les premières méthodes de `FakeStoreDAO`. 
+
+Des cas de tests sont donnés dans `testexo2.TestFareStoreDAO_product`. 
+
+**Notez la présence du bloc `runBlocking { ... }` contenant un ou des 
+appels à des méthodes annotées `suspend` : cela permet d'attendre que la méthode `supsend` termine.**
+
+
+##### Question 4 : Extensions `ProductsExt.kt`.
+
+Implémentez les méthodes d'extension demandées dans `ProductsExt.kt`.
+
+Concernant `List<Product>.totalPriceTaxesIncluded()` ; implémentez (et utilisez)  `Product.taxes()` pour ajouter le pourcentage de taxes
+correspondant à chaque catégorie :
+   - "electronics" : 21.6 %
+   - "jewelery" : 33 %
+   - "men's clothing" ou "women's clothing" : 10 %
+
+Concernant `List<Product>.totalCost()`, vous utiliserez 
+une sorte de __template method__ : "_le cout total d'une commande est égal au cout total des
+différents produits taxes incluses - une réduction appliquée sur le cout total hors taxe ;
+la réduction est de 5% pour 5 produits ou plus et de 10% pour 20 produits ou plus_".
+
+Des cas de tests sont donnés dans `testexo2.TestProductsExt`.
+
+##### Question 5 : Stratégies de tri + filtrages. 
+
+Complétez la classe `data.product` : fonction `compareTo()` et comparateur `COMPARATOR_CATEGORY_THEN_TITLE_THEN_ID`.
+
+Implémentez les différentes stratégies de tri + filtrages présentent dans le package `sortstrategies.*`
+
+Des cas de tests sont donnés dans `testexo2.TestSortStrategies`.
+
+##### Question 6 : Data class `data.User`
+
+On s'intéressera uniquement aux champs : `id`, `firstname`, `lastname`, `email`, 
+`street`, `number`, `zipcode` et `city`
+
+Pourquoi y a-t-il 3 **data class** `User`, `Name` et `Address` à compléter ? Regardez dans un navigateur le résultat d'une requête vers l'API 
+pour vous faire une idée du JSON : [https://fakestoreapi.com/users/5](https://fakestoreapi.com/users/5)
+
+##### Question 7 : Fin DAO `FakeStoreDAO`.
+
+Implémentez les dernières méthodes de `FakeStoreDAO`.
+
+##### Question 8 : Cas de tests `TestFakeStoreDAO_users`
+
+En vous inspirant des cas de tests donnés dans `testexo2.TestFareStoreDAO_product`, donnez des
+cas de tests dans pour tester les méthodes implémentées précédemment concernant les `User`.
+
+## Exercice 3 : Ktor et Tests d'API
+
+Le client Koltin/Ktor peut être utilisé pour écrire des cas de tests junit en Kotlin, 
+permettant de tester une API / un webservice quelconque. 
+
+Les intérêts sont nombreux :
+- utiliser un framework de test Junit que vous connaissez
+- exécuter et reproduire des scénarios de tests de manière automatisée,
+- bénéficier de la dé-sérialisation JSON/kotlin pour "analyser" à moindre effort les JSON renvoyés par une API considérée.
+
+#### Exemple :
+
+**Scénario de tests** : _un appel à l'API http://jsonplaceholder.typicode.com/todos/3 
+renvoie un JSON contenant bien les informations suivantes (id=3, userId=1, completed=false)_
+
+**Code Ktor+JUnit** :
+
+    @Test
+    fun testTodo3() {
+        runBlocking {
+            // On réalise l'appel à l'API
+            val response = client.get("http://jsonplaceholder.typicode.com/todos/3")
+            // On analyse le JSON récupéré
+            val todo = Json { ignoreUnknownKeys = true }.decodeFromString<Todo>(response.body<String>())
+            // On teste si les données récupérées sont OK
+            assertAll(
+                { assertEquals(3, todo.id) },
+                { assertEquals(1, todo.userId) },
+                { assertFalse( todo.completed)}
+            )
+        }
+    }
+
+Il faut bien entendu ajouter une (data) class `Todo`.
+
+Implémentez les scénarios de tests suivants :
+
+1. Un appel à l'API https://jsonplaceholder.typicode.com/comments renvoie bien 500 "commentaires"
+
+2. Un appel à l'API https://jsonplaceholder.typicode.com/photos renvoie bien 5000 "photos"
+
+3. Un appel à l'API https://jsonplaceholder.typicode.com/comments/42 renvoie bien un "commentaire" correspondant au post d'id 9 et
+qui pour email d'auteur Shemar@ewell.name
+
+4. Un appel à l'API https://www.googleapis.com/youtube/v3/channels?part=contentDetails renvoie un JSON contenant un code d'erreur 403, avec comme message "The request is missing a valid API key."
+
+5. Un appel à l'API https://opentdb.com/api.php?amount=10&category=15&difficulty=hard&type=boolean renvoie bien une liste de questions
+   1. il y a 10 questions 
+   2. toutes les questions sont "Entertainment: Video Games"
+   3. concernant la 9ième question, la réponse correcte est "True"
diff --git a/2A/S3/quali_dev/tp8/build.gradle.kts b/2A/S3/quali_dev/tp8/build.gradle.kts
new file mode 100755
index 0000000000000000000000000000000000000000..7220a5d15f3728f7e8e25838472aa137c1314009
--- /dev/null
+++ b/2A/S3/quali_dev/tp8/build.gradle.kts
@@ -0,0 +1,36 @@
+import org.jetbrains.kotlin.gradle.tasks.KotlinCompile
+
+plugins {
+    kotlin("jvm") version "1.9.0"
+    kotlin("plugin.serialization") version "1.6.10"
+    application
+
+}
+
+group = "lanoix-a"
+version = "1.0-SNAPSHOT"
+val ktor_version: String by project
+
+repositories {
+    mavenCentral()
+}
+
+dependencies {
+    testImplementation("org.junit.jupiter:junit-jupiter:5.6.0")
+    testImplementation("org.junit.jupiter:junit-jupiter-params:5.6.0")
+    implementation("io.ktor:ktor-client-core:$ktor_version")
+    implementation("io.ktor:ktor-client-apache:$ktor_version")
+    implementation("org.jetbrains.kotlinx:kotlinx-serialization-json:1.4.1")
+}
+
+tasks.test {
+    useJUnitPlatform()
+}
+
+tasks.withType<KotlinCompile> {
+    kotlinOptions.jvmTarget = "17"
+}
+
+application {
+    mainClass.set("MainKt")
+}
\ No newline at end of file
diff --git a/2A/S3/quali_dev/tp8/build/classes/kotlin/main/META-INF/tp8-main.kotlin_module b/2A/S3/quali_dev/tp8/build/classes/kotlin/main/META-INF/tp8-main.kotlin_module
new file mode 100644
index 0000000000000000000000000000000000000000..c35cb6f85830f22fcc67a09776fe9b9cec9f50e6
Binary files /dev/null and b/2A/S3/quali_dev/tp8/build/classes/kotlin/main/META-INF/tp8-main.kotlin_module differ
diff --git a/2A/S3/quali_dev/tp8/build/classes/kotlin/main/MainKt$main$1.class b/2A/S3/quali_dev/tp8/build/classes/kotlin/main/MainKt$main$1.class
new file mode 100644
index 0000000000000000000000000000000000000000..43d247e7bcc970b2d1dbdca6b166fd823a473d8d
Binary files /dev/null and b/2A/S3/quali_dev/tp8/build/classes/kotlin/main/MainKt$main$1.class differ
diff --git a/2A/S3/quali_dev/tp8/build/classes/kotlin/main/MainKt$main$2.class b/2A/S3/quali_dev/tp8/build/classes/kotlin/main/MainKt$main$2.class
new file mode 100644
index 0000000000000000000000000000000000000000..b54cdb4e870657e745a6d305627632586cc461a9
Binary files /dev/null and b/2A/S3/quali_dev/tp8/build/classes/kotlin/main/MainKt$main$2.class differ
diff --git a/2A/S3/quali_dev/tp8/build/classes/kotlin/main/MainKt$main$client$1$1$1.class b/2A/S3/quali_dev/tp8/build/classes/kotlin/main/MainKt$main$client$1$1$1.class
new file mode 100644
index 0000000000000000000000000000000000000000..7746edc2803bfe59de76bb9185e244d4d2f4be44
Binary files /dev/null and b/2A/S3/quali_dev/tp8/build/classes/kotlin/main/MainKt$main$client$1$1$1.class differ
diff --git a/2A/S3/quali_dev/tp8/build/classes/kotlin/main/MainKt$main$client$1$1.class b/2A/S3/quali_dev/tp8/build/classes/kotlin/main/MainKt$main$client$1$1.class
new file mode 100644
index 0000000000000000000000000000000000000000..89ae432009184baf64ad152febcd74fadca5b831
Binary files /dev/null and b/2A/S3/quali_dev/tp8/build/classes/kotlin/main/MainKt$main$client$1$1.class differ
diff --git a/2A/S3/quali_dev/tp8/build/classes/kotlin/main/MainKt$main$client$1.class b/2A/S3/quali_dev/tp8/build/classes/kotlin/main/MainKt$main$client$1.class
new file mode 100644
index 0000000000000000000000000000000000000000..f0a87e6337ccb6cc7d9c4870355b467506573f6a
Binary files /dev/null and b/2A/S3/quali_dev/tp8/build/classes/kotlin/main/MainKt$main$client$1.class differ
diff --git a/2A/S3/quali_dev/tp8/build/classes/kotlin/main/MainKt.class b/2A/S3/quali_dev/tp8/build/classes/kotlin/main/MainKt.class
new file mode 100644
index 0000000000000000000000000000000000000000..3b2417fc3e8e79ff4cfc8f1af36cbecf7e5f83d9
Binary files /dev/null and b/2A/S3/quali_dev/tp8/build/classes/kotlin/main/MainKt.class differ
diff --git a/2A/S3/quali_dev/tp8/build/classes/kotlin/main/exo2/FakeStoreDAO$getCategories$1.class b/2A/S3/quali_dev/tp8/build/classes/kotlin/main/exo2/FakeStoreDAO$getCategories$1.class
new file mode 100644
index 0000000000000000000000000000000000000000..0193093d3409764fba1f2b5a888f57a25a6ac624
Binary files /dev/null and b/2A/S3/quali_dev/tp8/build/classes/kotlin/main/exo2/FakeStoreDAO$getCategories$1.class differ
diff --git a/2A/S3/quali_dev/tp8/build/classes/kotlin/main/exo2/FakeStoreDAO$getProduct$1.class b/2A/S3/quali_dev/tp8/build/classes/kotlin/main/exo2/FakeStoreDAO$getProduct$1.class
new file mode 100644
index 0000000000000000000000000000000000000000..3f5dc9a6690616c9d75792774aadcd75149c4a31
Binary files /dev/null and b/2A/S3/quali_dev/tp8/build/classes/kotlin/main/exo2/FakeStoreDAO$getProduct$1.class differ
diff --git a/2A/S3/quali_dev/tp8/build/classes/kotlin/main/exo2/FakeStoreDAO$getProducts$1.class b/2A/S3/quali_dev/tp8/build/classes/kotlin/main/exo2/FakeStoreDAO$getProducts$1.class
new file mode 100644
index 0000000000000000000000000000000000000000..ee0b56c26b9b4e67d76a4f19b367ecdd583b3af0
Binary files /dev/null and b/2A/S3/quali_dev/tp8/build/classes/kotlin/main/exo2/FakeStoreDAO$getProducts$1.class differ
diff --git a/2A/S3/quali_dev/tp8/build/classes/kotlin/main/exo2/FakeStoreDAO$getProducts$client$1$1$1.class b/2A/S3/quali_dev/tp8/build/classes/kotlin/main/exo2/FakeStoreDAO$getProducts$client$1$1$1.class
new file mode 100644
index 0000000000000000000000000000000000000000..3fd3204349225df794522db1ae465d96da5d1f93
Binary files /dev/null and b/2A/S3/quali_dev/tp8/build/classes/kotlin/main/exo2/FakeStoreDAO$getProducts$client$1$1$1.class differ
diff --git a/2A/S3/quali_dev/tp8/build/classes/kotlin/main/exo2/FakeStoreDAO$getProducts$client$1$1.class b/2A/S3/quali_dev/tp8/build/classes/kotlin/main/exo2/FakeStoreDAO$getProducts$client$1$1.class
new file mode 100644
index 0000000000000000000000000000000000000000..790c9ea9f69dd34840f931baa801d67b5bd425bb
Binary files /dev/null and b/2A/S3/quali_dev/tp8/build/classes/kotlin/main/exo2/FakeStoreDAO$getProducts$client$1$1.class differ
diff --git a/2A/S3/quali_dev/tp8/build/classes/kotlin/main/exo2/FakeStoreDAO$getProducts$client$1.class b/2A/S3/quali_dev/tp8/build/classes/kotlin/main/exo2/FakeStoreDAO$getProducts$client$1.class
new file mode 100644
index 0000000000000000000000000000000000000000..0c52f0b6bc5c461ec878b0864d3f407f7a75ee53
Binary files /dev/null and b/2A/S3/quali_dev/tp8/build/classes/kotlin/main/exo2/FakeStoreDAO$getProducts$client$1.class differ
diff --git a/2A/S3/quali_dev/tp8/build/classes/kotlin/main/exo2/FakeStoreDAO$getProducts$objs$1.class b/2A/S3/quali_dev/tp8/build/classes/kotlin/main/exo2/FakeStoreDAO$getProducts$objs$1.class
new file mode 100644
index 0000000000000000000000000000000000000000..2acbc8a6f5c021e40571d6813de3ce0dfabd9f03
Binary files /dev/null and b/2A/S3/quali_dev/tp8/build/classes/kotlin/main/exo2/FakeStoreDAO$getProducts$objs$1.class differ
diff --git a/2A/S3/quali_dev/tp8/build/classes/kotlin/main/exo2/FakeStoreDAO$getProductsByCategory$1.class b/2A/S3/quali_dev/tp8/build/classes/kotlin/main/exo2/FakeStoreDAO$getProductsByCategory$1.class
new file mode 100644
index 0000000000000000000000000000000000000000..91c6d42da3eda3067bec26fa7eccf52dc424809d
Binary files /dev/null and b/2A/S3/quali_dev/tp8/build/classes/kotlin/main/exo2/FakeStoreDAO$getProductsByCategory$1.class differ
diff --git a/2A/S3/quali_dev/tp8/build/classes/kotlin/main/exo2/FakeStoreDAO$getUser$1.class b/2A/S3/quali_dev/tp8/build/classes/kotlin/main/exo2/FakeStoreDAO$getUser$1.class
new file mode 100644
index 0000000000000000000000000000000000000000..1a27ef93838d40b24bc55f16da49f0a70bed2ba2
Binary files /dev/null and b/2A/S3/quali_dev/tp8/build/classes/kotlin/main/exo2/FakeStoreDAO$getUser$1.class differ
diff --git a/2A/S3/quali_dev/tp8/build/classes/kotlin/main/exo2/FakeStoreDAO$getUsers$1.class b/2A/S3/quali_dev/tp8/build/classes/kotlin/main/exo2/FakeStoreDAO$getUsers$1.class
new file mode 100644
index 0000000000000000000000000000000000000000..880a103600b199133fc53a6a8777c9c8bd93f945
Binary files /dev/null and b/2A/S3/quali_dev/tp8/build/classes/kotlin/main/exo2/FakeStoreDAO$getUsers$1.class differ
diff --git a/2A/S3/quali_dev/tp8/build/classes/kotlin/main/exo2/FakeStoreDAO$getUsers$client$1$1$1.class b/2A/S3/quali_dev/tp8/build/classes/kotlin/main/exo2/FakeStoreDAO$getUsers$client$1$1$1.class
new file mode 100644
index 0000000000000000000000000000000000000000..7438eec838059dd9fe8dbc981f8246afb9812db2
Binary files /dev/null and b/2A/S3/quali_dev/tp8/build/classes/kotlin/main/exo2/FakeStoreDAO$getUsers$client$1$1$1.class differ
diff --git a/2A/S3/quali_dev/tp8/build/classes/kotlin/main/exo2/FakeStoreDAO$getUsers$client$1$1.class b/2A/S3/quali_dev/tp8/build/classes/kotlin/main/exo2/FakeStoreDAO$getUsers$client$1$1.class
new file mode 100644
index 0000000000000000000000000000000000000000..1560d76595a693f0892051b47903718d6d9a7dfe
Binary files /dev/null and b/2A/S3/quali_dev/tp8/build/classes/kotlin/main/exo2/FakeStoreDAO$getUsers$client$1$1.class differ
diff --git a/2A/S3/quali_dev/tp8/build/classes/kotlin/main/exo2/FakeStoreDAO$getUsers$client$1.class b/2A/S3/quali_dev/tp8/build/classes/kotlin/main/exo2/FakeStoreDAO$getUsers$client$1.class
new file mode 100644
index 0000000000000000000000000000000000000000..0d3f9363abad09b0d0f56beb07f21022288ede0f
Binary files /dev/null and b/2A/S3/quali_dev/tp8/build/classes/kotlin/main/exo2/FakeStoreDAO$getUsers$client$1.class differ
diff --git a/2A/S3/quali_dev/tp8/build/classes/kotlin/main/exo2/FakeStoreDAO$getUsers$objs$1.class b/2A/S3/quali_dev/tp8/build/classes/kotlin/main/exo2/FakeStoreDAO$getUsers$objs$1.class
new file mode 100644
index 0000000000000000000000000000000000000000..32086be09bb266548fe9d4ebcea215b8cbd196fb
Binary files /dev/null and b/2A/S3/quali_dev/tp8/build/classes/kotlin/main/exo2/FakeStoreDAO$getUsers$objs$1.class differ
diff --git a/2A/S3/quali_dev/tp8/build/classes/kotlin/main/exo2/FakeStoreDAO.class b/2A/S3/quali_dev/tp8/build/classes/kotlin/main/exo2/FakeStoreDAO.class
new file mode 100644
index 0000000000000000000000000000000000000000..f12137a3ae50d7726f3359e45308afd5d93cca40
Binary files /dev/null and b/2A/S3/quali_dev/tp8/build/classes/kotlin/main/exo2/FakeStoreDAO.class differ
diff --git a/2A/S3/quali_dev/tp8/build/classes/kotlin/main/exo2/FakeStoreException.class b/2A/S3/quali_dev/tp8/build/classes/kotlin/main/exo2/FakeStoreException.class
new file mode 100644
index 0000000000000000000000000000000000000000..cc158db01abca0097d6344a75a8624ba98ad1b01
Binary files /dev/null and b/2A/S3/quali_dev/tp8/build/classes/kotlin/main/exo2/FakeStoreException.class differ
diff --git a/2A/S3/quali_dev/tp8/build/classes/kotlin/main/exo2/FakeStoreI.class b/2A/S3/quali_dev/tp8/build/classes/kotlin/main/exo2/FakeStoreI.class
new file mode 100644
index 0000000000000000000000000000000000000000..788d3352e078fa8ec6e0b0d18f69dcf6d7f10487
Binary files /dev/null and b/2A/S3/quali_dev/tp8/build/classes/kotlin/main/exo2/FakeStoreI.class differ
diff --git a/2A/S3/quali_dev/tp8/build/classes/kotlin/main/exo2/ProductsExtKt.class b/2A/S3/quali_dev/tp8/build/classes/kotlin/main/exo2/ProductsExtKt.class
new file mode 100644
index 0000000000000000000000000000000000000000..ef99ffcab6e890d2f3366dad2dec50b974de57ea
Binary files /dev/null and b/2A/S3/quali_dev/tp8/build/classes/kotlin/main/exo2/ProductsExtKt.class differ
diff --git a/2A/S3/quali_dev/tp8/build/classes/kotlin/main/exo2/data/Address$$serializer.class b/2A/S3/quali_dev/tp8/build/classes/kotlin/main/exo2/data/Address$$serializer.class
new file mode 100644
index 0000000000000000000000000000000000000000..ac80d2364c28357eb490585b69ff00fe29f8f37b
Binary files /dev/null and b/2A/S3/quali_dev/tp8/build/classes/kotlin/main/exo2/data/Address$$serializer.class differ
diff --git a/2A/S3/quali_dev/tp8/build/classes/kotlin/main/exo2/data/Address$Companion.class b/2A/S3/quali_dev/tp8/build/classes/kotlin/main/exo2/data/Address$Companion.class
new file mode 100644
index 0000000000000000000000000000000000000000..e36f8a73729372de37908dbf19d0e3239f576486
Binary files /dev/null and b/2A/S3/quali_dev/tp8/build/classes/kotlin/main/exo2/data/Address$Companion.class differ
diff --git a/2A/S3/quali_dev/tp8/build/classes/kotlin/main/exo2/data/Address.class b/2A/S3/quali_dev/tp8/build/classes/kotlin/main/exo2/data/Address.class
new file mode 100644
index 0000000000000000000000000000000000000000..0b0987eac3cc20ab4af05038b929be301e709e64
Binary files /dev/null and b/2A/S3/quali_dev/tp8/build/classes/kotlin/main/exo2/data/Address.class differ
diff --git a/2A/S3/quali_dev/tp8/build/classes/kotlin/main/exo2/data/Name$$serializer.class b/2A/S3/quali_dev/tp8/build/classes/kotlin/main/exo2/data/Name$$serializer.class
new file mode 100644
index 0000000000000000000000000000000000000000..0fe273b20b8fa470a2bc9f6f8b68d5499a60fc3d
Binary files /dev/null and b/2A/S3/quali_dev/tp8/build/classes/kotlin/main/exo2/data/Name$$serializer.class differ
diff --git a/2A/S3/quali_dev/tp8/build/classes/kotlin/main/exo2/data/Name$Companion.class b/2A/S3/quali_dev/tp8/build/classes/kotlin/main/exo2/data/Name$Companion.class
new file mode 100644
index 0000000000000000000000000000000000000000..b5bf60c0e2fdbcbbbf6fe16a27989dc3de02a2b3
Binary files /dev/null and b/2A/S3/quali_dev/tp8/build/classes/kotlin/main/exo2/data/Name$Companion.class differ
diff --git a/2A/S3/quali_dev/tp8/build/classes/kotlin/main/exo2/data/Name.class b/2A/S3/quali_dev/tp8/build/classes/kotlin/main/exo2/data/Name.class
new file mode 100644
index 0000000000000000000000000000000000000000..28d40d9d7d05297910b44b8132c279ae90a04c06
Binary files /dev/null and b/2A/S3/quali_dev/tp8/build/classes/kotlin/main/exo2/data/Name.class differ
diff --git a/2A/S3/quali_dev/tp8/build/classes/kotlin/main/exo2/data/Product$$serializer.class b/2A/S3/quali_dev/tp8/build/classes/kotlin/main/exo2/data/Product$$serializer.class
new file mode 100644
index 0000000000000000000000000000000000000000..919fb87bd41c4be15741bcc4447d8a8b629e0fe6
Binary files /dev/null and b/2A/S3/quali_dev/tp8/build/classes/kotlin/main/exo2/data/Product$$serializer.class differ
diff --git a/2A/S3/quali_dev/tp8/build/classes/kotlin/main/exo2/data/Product$Companion$COMPARATOR_CATEGORY_THEN_TITLE_THEN_ID$1.class b/2A/S3/quali_dev/tp8/build/classes/kotlin/main/exo2/data/Product$Companion$COMPARATOR_CATEGORY_THEN_TITLE_THEN_ID$1.class
new file mode 100644
index 0000000000000000000000000000000000000000..389c42286efba441ab0c274ea53122a0ab9ca85f
Binary files /dev/null and b/2A/S3/quali_dev/tp8/build/classes/kotlin/main/exo2/data/Product$Companion$COMPARATOR_CATEGORY_THEN_TITLE_THEN_ID$1.class differ
diff --git a/2A/S3/quali_dev/tp8/build/classes/kotlin/main/exo2/data/Product$Companion.class b/2A/S3/quali_dev/tp8/build/classes/kotlin/main/exo2/data/Product$Companion.class
new file mode 100644
index 0000000000000000000000000000000000000000..721b15df567dedf8f9399303e91ad129f4421ac8
Binary files /dev/null and b/2A/S3/quali_dev/tp8/build/classes/kotlin/main/exo2/data/Product$Companion.class differ
diff --git a/2A/S3/quali_dev/tp8/build/classes/kotlin/main/exo2/data/Product.class b/2A/S3/quali_dev/tp8/build/classes/kotlin/main/exo2/data/Product.class
new file mode 100644
index 0000000000000000000000000000000000000000..73454a00d328dfa3c3008670af18bcfad5560934
Binary files /dev/null and b/2A/S3/quali_dev/tp8/build/classes/kotlin/main/exo2/data/Product.class differ
diff --git a/2A/S3/quali_dev/tp8/build/classes/kotlin/main/exo2/data/Todo$$serializer.class b/2A/S3/quali_dev/tp8/build/classes/kotlin/main/exo2/data/Todo$$serializer.class
new file mode 100644
index 0000000000000000000000000000000000000000..ea5ab3f71402551d645999d49a047d6d7d9fa657
Binary files /dev/null and b/2A/S3/quali_dev/tp8/build/classes/kotlin/main/exo2/data/Todo$$serializer.class differ
diff --git a/2A/S3/quali_dev/tp8/build/classes/kotlin/main/exo2/data/Todo$Companion.class b/2A/S3/quali_dev/tp8/build/classes/kotlin/main/exo2/data/Todo$Companion.class
new file mode 100644
index 0000000000000000000000000000000000000000..28f2e118c4e058dbb792c675a6eafa665bbd1285
Binary files /dev/null and b/2A/S3/quali_dev/tp8/build/classes/kotlin/main/exo2/data/Todo$Companion.class differ
diff --git a/2A/S3/quali_dev/tp8/build/classes/kotlin/main/exo2/data/Todo.class b/2A/S3/quali_dev/tp8/build/classes/kotlin/main/exo2/data/Todo.class
new file mode 100644
index 0000000000000000000000000000000000000000..5030a49258b04eba1f30dd4662582458655c71b1
Binary files /dev/null and b/2A/S3/quali_dev/tp8/build/classes/kotlin/main/exo2/data/Todo.class differ
diff --git a/2A/S3/quali_dev/tp8/build/classes/kotlin/main/exo2/data/User$$serializer.class b/2A/S3/quali_dev/tp8/build/classes/kotlin/main/exo2/data/User$$serializer.class
new file mode 100644
index 0000000000000000000000000000000000000000..94feae7d94b0feb19eb5a3b06ce88c94a9e0d27a
Binary files /dev/null and b/2A/S3/quali_dev/tp8/build/classes/kotlin/main/exo2/data/User$$serializer.class differ
diff --git a/2A/S3/quali_dev/tp8/build/classes/kotlin/main/exo2/data/User$Companion.class b/2A/S3/quali_dev/tp8/build/classes/kotlin/main/exo2/data/User$Companion.class
new file mode 100644
index 0000000000000000000000000000000000000000..d7ccbabc4228586b02e320abb51568ee326c1a73
Binary files /dev/null and b/2A/S3/quali_dev/tp8/build/classes/kotlin/main/exo2/data/User$Companion.class differ
diff --git a/2A/S3/quali_dev/tp8/build/classes/kotlin/main/exo2/data/User.class b/2A/S3/quali_dev/tp8/build/classes/kotlin/main/exo2/data/User.class
new file mode 100644
index 0000000000000000000000000000000000000000..49f07fa198be13bce273413640aa3a14aedc87a0
Binary files /dev/null and b/2A/S3/quali_dev/tp8/build/classes/kotlin/main/exo2/data/User.class differ
diff --git a/2A/S3/quali_dev/tp8/build/classes/kotlin/main/exo2/sortstrategies/ByCategoryTitleId.class b/2A/S3/quali_dev/tp8/build/classes/kotlin/main/exo2/sortstrategies/ByCategoryTitleId.class
new file mode 100644
index 0000000000000000000000000000000000000000..f25ef64efef3373849939826c25a42b87eef5cbb
Binary files /dev/null and b/2A/S3/quali_dev/tp8/build/classes/kotlin/main/exo2/sortstrategies/ByCategoryTitleId.class differ
diff --git a/2A/S3/quali_dev/tp8/build/classes/kotlin/main/exo2/sortstrategies/CategoryContainsByCategoryTitleId.class b/2A/S3/quali_dev/tp8/build/classes/kotlin/main/exo2/sortstrategies/CategoryContainsByCategoryTitleId.class
new file mode 100644
index 0000000000000000000000000000000000000000..880f969593495d802b0352bab32354ce0dd45d65
Binary files /dev/null and b/2A/S3/quali_dev/tp8/build/classes/kotlin/main/exo2/sortstrategies/CategoryContainsByCategoryTitleId.class differ
diff --git a/2A/S3/quali_dev/tp8/build/classes/kotlin/main/exo2/sortstrategies/PriceLessThanByPrice$sortAndFilter$$inlined$sortedBy$1.class b/2A/S3/quali_dev/tp8/build/classes/kotlin/main/exo2/sortstrategies/PriceLessThanByPrice$sortAndFilter$$inlined$sortedBy$1.class
new file mode 100644
index 0000000000000000000000000000000000000000..b0a32fadcbac4a0c12c0beeb8b94cc33c98f06a9
Binary files /dev/null and b/2A/S3/quali_dev/tp8/build/classes/kotlin/main/exo2/sortstrategies/PriceLessThanByPrice$sortAndFilter$$inlined$sortedBy$1.class differ
diff --git a/2A/S3/quali_dev/tp8/build/classes/kotlin/main/exo2/sortstrategies/PriceLessThanByPrice.class b/2A/S3/quali_dev/tp8/build/classes/kotlin/main/exo2/sortstrategies/PriceLessThanByPrice.class
new file mode 100644
index 0000000000000000000000000000000000000000..9fd3e9d8f924c018d5dd40aae82de45e4ec60f1a
Binary files /dev/null and b/2A/S3/quali_dev/tp8/build/classes/kotlin/main/exo2/sortstrategies/PriceLessThanByPrice.class differ
diff --git a/2A/S3/quali_dev/tp8/build/classes/kotlin/main/exo2/sortstrategies/SortAndFilter.class b/2A/S3/quali_dev/tp8/build/classes/kotlin/main/exo2/sortstrategies/SortAndFilter.class
new file mode 100644
index 0000000000000000000000000000000000000000..3058eacc0fc1aedadbe0c7b4ae97392c991ce373
Binary files /dev/null and b/2A/S3/quali_dev/tp8/build/classes/kotlin/main/exo2/sortstrategies/SortAndFilter.class differ
diff --git a/2A/S3/quali_dev/tp8/build/classes/kotlin/test/META-INF/tp8-main_test.kotlin_module b/2A/S3/quali_dev/tp8/build/classes/kotlin/test/META-INF/tp8-main_test.kotlin_module
new file mode 100644
index 0000000000000000000000000000000000000000..1e9f2ca4d180a083a06174d407c30581ce729120
Binary files /dev/null and b/2A/S3/quali_dev/tp8/build/classes/kotlin/test/META-INF/tp8-main_test.kotlin_module differ
diff --git a/2A/S3/quali_dev/tp8/build/classes/kotlin/test/exercice3/Comment$$serializer.class b/2A/S3/quali_dev/tp8/build/classes/kotlin/test/exercice3/Comment$$serializer.class
new file mode 100644
index 0000000000000000000000000000000000000000..af898a071d6bc5e9cd66e43f33f8f2b0f0f830d6
Binary files /dev/null and b/2A/S3/quali_dev/tp8/build/classes/kotlin/test/exercice3/Comment$$serializer.class differ
diff --git a/2A/S3/quali_dev/tp8/build/classes/kotlin/test/exercice3/Comment$Companion.class b/2A/S3/quali_dev/tp8/build/classes/kotlin/test/exercice3/Comment$Companion.class
new file mode 100644
index 0000000000000000000000000000000000000000..a59417f79718c0340b347bb120b7da19aa5aadd2
Binary files /dev/null and b/2A/S3/quali_dev/tp8/build/classes/kotlin/test/exercice3/Comment$Companion.class differ
diff --git a/2A/S3/quali_dev/tp8/build/classes/kotlin/test/exercice3/Comment.class b/2A/S3/quali_dev/tp8/build/classes/kotlin/test/exercice3/Comment.class
new file mode 100644
index 0000000000000000000000000000000000000000..776711f19a0427252fc86adeacff1f8e6bbdca65
Binary files /dev/null and b/2A/S3/quali_dev/tp8/build/classes/kotlin/test/exercice3/Comment.class differ
diff --git a/2A/S3/quali_dev/tp8/build/classes/kotlin/test/exercice3/Element$$serializer.class b/2A/S3/quali_dev/tp8/build/classes/kotlin/test/exercice3/Element$$serializer.class
new file mode 100644
index 0000000000000000000000000000000000000000..64827efe1a340208c2fb5730da6a9d610b98e7a5
Binary files /dev/null and b/2A/S3/quali_dev/tp8/build/classes/kotlin/test/exercice3/Element$$serializer.class differ
diff --git a/2A/S3/quali_dev/tp8/build/classes/kotlin/test/exercice3/Element$Companion.class b/2A/S3/quali_dev/tp8/build/classes/kotlin/test/exercice3/Element$Companion.class
new file mode 100644
index 0000000000000000000000000000000000000000..ba8252cc614467856b8c17d23afdf85186da432b
Binary files /dev/null and b/2A/S3/quali_dev/tp8/build/classes/kotlin/test/exercice3/Element$Companion.class differ
diff --git a/2A/S3/quali_dev/tp8/build/classes/kotlin/test/exercice3/Element.class b/2A/S3/quali_dev/tp8/build/classes/kotlin/test/exercice3/Element.class
new file mode 100644
index 0000000000000000000000000000000000000000..04b79189d2b2f63d7b21217b9536e7d3e1ff06a3
Binary files /dev/null and b/2A/S3/quali_dev/tp8/build/classes/kotlin/test/exercice3/Element.class differ
diff --git a/2A/S3/quali_dev/tp8/build/classes/kotlin/test/exercice3/Error$$serializer.class b/2A/S3/quali_dev/tp8/build/classes/kotlin/test/exercice3/Error$$serializer.class
new file mode 100644
index 0000000000000000000000000000000000000000..b32e130866e40bbcaf8eeb803b56aca9fcb92e85
Binary files /dev/null and b/2A/S3/quali_dev/tp8/build/classes/kotlin/test/exercice3/Error$$serializer.class differ
diff --git a/2A/S3/quali_dev/tp8/build/classes/kotlin/test/exercice3/Error$Companion.class b/2A/S3/quali_dev/tp8/build/classes/kotlin/test/exercice3/Error$Companion.class
new file mode 100644
index 0000000000000000000000000000000000000000..f040262dd4570e317b3c37dfcc5a958cb13993fc
Binary files /dev/null and b/2A/S3/quali_dev/tp8/build/classes/kotlin/test/exercice3/Error$Companion.class differ
diff --git a/2A/S3/quali_dev/tp8/build/classes/kotlin/test/exercice3/Error.class b/2A/S3/quali_dev/tp8/build/classes/kotlin/test/exercice3/Error.class
new file mode 100644
index 0000000000000000000000000000000000000000..a098ac525d42ef2a31f62a645b2aa0f96ebeeff2
Binary files /dev/null and b/2A/S3/quali_dev/tp8/build/classes/kotlin/test/exercice3/Error.class differ
diff --git a/2A/S3/quali_dev/tp8/build/classes/kotlin/test/exercice3/Photo$$serializer.class b/2A/S3/quali_dev/tp8/build/classes/kotlin/test/exercice3/Photo$$serializer.class
new file mode 100644
index 0000000000000000000000000000000000000000..83149f72ec4d959bc33782789d68dc83016a47a8
Binary files /dev/null and b/2A/S3/quali_dev/tp8/build/classes/kotlin/test/exercice3/Photo$$serializer.class differ
diff --git a/2A/S3/quali_dev/tp8/build/classes/kotlin/test/exercice3/Photo$Companion.class b/2A/S3/quali_dev/tp8/build/classes/kotlin/test/exercice3/Photo$Companion.class
new file mode 100644
index 0000000000000000000000000000000000000000..5c4428b421b3fcb3c9af752814a480560e98c95f
Binary files /dev/null and b/2A/S3/quali_dev/tp8/build/classes/kotlin/test/exercice3/Photo$Companion.class differ
diff --git a/2A/S3/quali_dev/tp8/build/classes/kotlin/test/exercice3/Photo.class b/2A/S3/quali_dev/tp8/build/classes/kotlin/test/exercice3/Photo.class
new file mode 100644
index 0000000000000000000000000000000000000000..73686826ee8584fe5d3b9cdb2ab9fe0a586f963c
Binary files /dev/null and b/2A/S3/quali_dev/tp8/build/classes/kotlin/test/exercice3/Photo.class differ
diff --git a/2A/S3/quali_dev/tp8/build/classes/kotlin/test/exercice3/Reponse$$serializer.class b/2A/S3/quali_dev/tp8/build/classes/kotlin/test/exercice3/Reponse$$serializer.class
new file mode 100644
index 0000000000000000000000000000000000000000..50ab0fd52ae3b71d10347eb8c5f33c4b654990af
Binary files /dev/null and b/2A/S3/quali_dev/tp8/build/classes/kotlin/test/exercice3/Reponse$$serializer.class differ
diff --git a/2A/S3/quali_dev/tp8/build/classes/kotlin/test/exercice3/Reponse$Companion.class b/2A/S3/quali_dev/tp8/build/classes/kotlin/test/exercice3/Reponse$Companion.class
new file mode 100644
index 0000000000000000000000000000000000000000..f13906a14ac39758fbd2cd5060d80aea3f4f0bd0
Binary files /dev/null and b/2A/S3/quali_dev/tp8/build/classes/kotlin/test/exercice3/Reponse$Companion.class differ
diff --git a/2A/S3/quali_dev/tp8/build/classes/kotlin/test/exercice3/Reponse.class b/2A/S3/quali_dev/tp8/build/classes/kotlin/test/exercice3/Reponse.class
new file mode 100644
index 0000000000000000000000000000000000000000..02e49d5318beb0023b3ae442dd0c8631e1a0c851
Binary files /dev/null and b/2A/S3/quali_dev/tp8/build/classes/kotlin/test/exercice3/Reponse.class differ
diff --git a/2A/S3/quali_dev/tp8/build/classes/kotlin/test/exercice3/Results$$serializer.class b/2A/S3/quali_dev/tp8/build/classes/kotlin/test/exercice3/Results$$serializer.class
new file mode 100644
index 0000000000000000000000000000000000000000..b211188e59e93ba0b258e9f0392371c673138ea3
Binary files /dev/null and b/2A/S3/quali_dev/tp8/build/classes/kotlin/test/exercice3/Results$$serializer.class differ
diff --git a/2A/S3/quali_dev/tp8/build/classes/kotlin/test/exercice3/Results$Companion.class b/2A/S3/quali_dev/tp8/build/classes/kotlin/test/exercice3/Results$Companion.class
new file mode 100644
index 0000000000000000000000000000000000000000..999dc7e7540e3ef56304110552d17163c0d8f4cd
Binary files /dev/null and b/2A/S3/quali_dev/tp8/build/classes/kotlin/test/exercice3/Results$Companion.class differ
diff --git a/2A/S3/quali_dev/tp8/build/classes/kotlin/test/exercice3/Results.class b/2A/S3/quali_dev/tp8/build/classes/kotlin/test/exercice3/Results.class
new file mode 100644
index 0000000000000000000000000000000000000000..2470b4dea64e699821c07ea18e0c6c266041470f
Binary files /dev/null and b/2A/S3/quali_dev/tp8/build/classes/kotlin/test/exercice3/Results.class differ
diff --git a/2A/S3/quali_dev/tp8/build/classes/kotlin/test/exercice3/TestExemple$reinit$1$1$1.class b/2A/S3/quali_dev/tp8/build/classes/kotlin/test/exercice3/TestExemple$reinit$1$1$1.class
new file mode 100644
index 0000000000000000000000000000000000000000..fbcc9859002ef2a2c2c6841f19039bd5782033d6
Binary files /dev/null and b/2A/S3/quali_dev/tp8/build/classes/kotlin/test/exercice3/TestExemple$reinit$1$1$1.class differ
diff --git a/2A/S3/quali_dev/tp8/build/classes/kotlin/test/exercice3/TestExemple$reinit$1$1.class b/2A/S3/quali_dev/tp8/build/classes/kotlin/test/exercice3/TestExemple$reinit$1$1.class
new file mode 100644
index 0000000000000000000000000000000000000000..bdc115af628d122bfbf6e726f8da54efff1d50d9
Binary files /dev/null and b/2A/S3/quali_dev/tp8/build/classes/kotlin/test/exercice3/TestExemple$reinit$1$1.class differ
diff --git a/2A/S3/quali_dev/tp8/build/classes/kotlin/test/exercice3/TestExemple$reinit$1.class b/2A/S3/quali_dev/tp8/build/classes/kotlin/test/exercice3/TestExemple$reinit$1.class
new file mode 100644
index 0000000000000000000000000000000000000000..b50a7f86ec4cd609f37e34f0ce62ccf20370cb97
Binary files /dev/null and b/2A/S3/quali_dev/tp8/build/classes/kotlin/test/exercice3/TestExemple$reinit$1.class differ
diff --git a/2A/S3/quali_dev/tp8/build/classes/kotlin/test/exercice3/TestExemple$testAPI1$1$1.class b/2A/S3/quali_dev/tp8/build/classes/kotlin/test/exercice3/TestExemple$testAPI1$1$1.class
new file mode 100644
index 0000000000000000000000000000000000000000..a2e7be060b8680d86f09839cce41403de12d1c7c
Binary files /dev/null and b/2A/S3/quali_dev/tp8/build/classes/kotlin/test/exercice3/TestExemple$testAPI1$1$1.class differ
diff --git a/2A/S3/quali_dev/tp8/build/classes/kotlin/test/exercice3/TestExemple$testAPI1$1$comments$1.class b/2A/S3/quali_dev/tp8/build/classes/kotlin/test/exercice3/TestExemple$testAPI1$1$comments$1.class
new file mode 100644
index 0000000000000000000000000000000000000000..805c5df52247281731759943492a65502fa96a47
Binary files /dev/null and b/2A/S3/quali_dev/tp8/build/classes/kotlin/test/exercice3/TestExemple$testAPI1$1$comments$1.class differ
diff --git a/2A/S3/quali_dev/tp8/build/classes/kotlin/test/exercice3/TestExemple$testAPI1$1.class b/2A/S3/quali_dev/tp8/build/classes/kotlin/test/exercice3/TestExemple$testAPI1$1.class
new file mode 100644
index 0000000000000000000000000000000000000000..bf79c82407eead61dde66f87baf50f7e9194835a
Binary files /dev/null and b/2A/S3/quali_dev/tp8/build/classes/kotlin/test/exercice3/TestExemple$testAPI1$1.class differ
diff --git a/2A/S3/quali_dev/tp8/build/classes/kotlin/test/exercice3/TestExemple$testAPI2$1$1.class b/2A/S3/quali_dev/tp8/build/classes/kotlin/test/exercice3/TestExemple$testAPI2$1$1.class
new file mode 100644
index 0000000000000000000000000000000000000000..45411b569c574ed04fa468cb7199da1936841b78
Binary files /dev/null and b/2A/S3/quali_dev/tp8/build/classes/kotlin/test/exercice3/TestExemple$testAPI2$1$1.class differ
diff --git a/2A/S3/quali_dev/tp8/build/classes/kotlin/test/exercice3/TestExemple$testAPI2$1$photos$1.class b/2A/S3/quali_dev/tp8/build/classes/kotlin/test/exercice3/TestExemple$testAPI2$1$photos$1.class
new file mode 100644
index 0000000000000000000000000000000000000000..ad0c076d6213943f88304dc26d6b222471a343c4
Binary files /dev/null and b/2A/S3/quali_dev/tp8/build/classes/kotlin/test/exercice3/TestExemple$testAPI2$1$photos$1.class differ
diff --git a/2A/S3/quali_dev/tp8/build/classes/kotlin/test/exercice3/TestExemple$testAPI2$1.class b/2A/S3/quali_dev/tp8/build/classes/kotlin/test/exercice3/TestExemple$testAPI2$1.class
new file mode 100644
index 0000000000000000000000000000000000000000..c8f215f86261432e04ca7e51e4b2087156a715c4
Binary files /dev/null and b/2A/S3/quali_dev/tp8/build/classes/kotlin/test/exercice3/TestExemple$testAPI2$1.class differ
diff --git a/2A/S3/quali_dev/tp8/build/classes/kotlin/test/exercice3/TestExemple$testAPI3$1$1.class b/2A/S3/quali_dev/tp8/build/classes/kotlin/test/exercice3/TestExemple$testAPI3$1$1.class
new file mode 100644
index 0000000000000000000000000000000000000000..8b0ad56c8955466d88fc9f8cb3199577fb2d5965
Binary files /dev/null and b/2A/S3/quali_dev/tp8/build/classes/kotlin/test/exercice3/TestExemple$testAPI3$1$1.class differ
diff --git a/2A/S3/quali_dev/tp8/build/classes/kotlin/test/exercice3/TestExemple$testAPI3$1$2.class b/2A/S3/quali_dev/tp8/build/classes/kotlin/test/exercice3/TestExemple$testAPI3$1$2.class
new file mode 100644
index 0000000000000000000000000000000000000000..ae15a76be63a402af21607f15e105d9df3d5bdc7
Binary files /dev/null and b/2A/S3/quali_dev/tp8/build/classes/kotlin/test/exercice3/TestExemple$testAPI3$1$2.class differ
diff --git a/2A/S3/quali_dev/tp8/build/classes/kotlin/test/exercice3/TestExemple$testAPI3$1$comment$1.class b/2A/S3/quali_dev/tp8/build/classes/kotlin/test/exercice3/TestExemple$testAPI3$1$comment$1.class
new file mode 100644
index 0000000000000000000000000000000000000000..864d212fb3de1234a9ab500aaba2f2a6185a83ba
Binary files /dev/null and b/2A/S3/quali_dev/tp8/build/classes/kotlin/test/exercice3/TestExemple$testAPI3$1$comment$1.class differ
diff --git a/2A/S3/quali_dev/tp8/build/classes/kotlin/test/exercice3/TestExemple$testAPI3$1.class b/2A/S3/quali_dev/tp8/build/classes/kotlin/test/exercice3/TestExemple$testAPI3$1.class
new file mode 100644
index 0000000000000000000000000000000000000000..f8581ca174926eb919d7914456196c4e833eec7a
Binary files /dev/null and b/2A/S3/quali_dev/tp8/build/classes/kotlin/test/exercice3/TestExemple$testAPI3$1.class differ
diff --git a/2A/S3/quali_dev/tp8/build/classes/kotlin/test/exercice3/TestExemple$testAPI4$1$1.class b/2A/S3/quali_dev/tp8/build/classes/kotlin/test/exercice3/TestExemple$testAPI4$1$1.class
new file mode 100644
index 0000000000000000000000000000000000000000..b925abbdcdbf50d4e61e192d33401c9089538f7d
Binary files /dev/null and b/2A/S3/quali_dev/tp8/build/classes/kotlin/test/exercice3/TestExemple$testAPI4$1$1.class differ
diff --git a/2A/S3/quali_dev/tp8/build/classes/kotlin/test/exercice3/TestExemple$testAPI4$1$2.class b/2A/S3/quali_dev/tp8/build/classes/kotlin/test/exercice3/TestExemple$testAPI4$1$2.class
new file mode 100644
index 0000000000000000000000000000000000000000..8cf3b12ccd01e87963dde341f2e9f50b4923d8c9
Binary files /dev/null and b/2A/S3/quali_dev/tp8/build/classes/kotlin/test/exercice3/TestExemple$testAPI4$1$2.class differ
diff --git a/2A/S3/quali_dev/tp8/build/classes/kotlin/test/exercice3/TestExemple$testAPI4$1$reponse$1.class b/2A/S3/quali_dev/tp8/build/classes/kotlin/test/exercice3/TestExemple$testAPI4$1$reponse$1.class
new file mode 100644
index 0000000000000000000000000000000000000000..9e0fdc86737a769647629dc4c6557e83fd16fa83
Binary files /dev/null and b/2A/S3/quali_dev/tp8/build/classes/kotlin/test/exercice3/TestExemple$testAPI4$1$reponse$1.class differ
diff --git a/2A/S3/quali_dev/tp8/build/classes/kotlin/test/exercice3/TestExemple$testAPI4$1.class b/2A/S3/quali_dev/tp8/build/classes/kotlin/test/exercice3/TestExemple$testAPI4$1.class
new file mode 100644
index 0000000000000000000000000000000000000000..417c3528e1dc0279dab3b0f2167682e578d082ab
Binary files /dev/null and b/2A/S3/quali_dev/tp8/build/classes/kotlin/test/exercice3/TestExemple$testAPI4$1.class differ
diff --git a/2A/S3/quali_dev/tp8/build/classes/kotlin/test/exercice3/TestExemple$testAPI5$1$1.class b/2A/S3/quali_dev/tp8/build/classes/kotlin/test/exercice3/TestExemple$testAPI5$1$1.class
new file mode 100644
index 0000000000000000000000000000000000000000..bb1b616db56d95b9ea0b06991032758dbe7682c0
Binary files /dev/null and b/2A/S3/quali_dev/tp8/build/classes/kotlin/test/exercice3/TestExemple$testAPI5$1$1.class differ
diff --git a/2A/S3/quali_dev/tp8/build/classes/kotlin/test/exercice3/TestExemple$testAPI5$1$2.class b/2A/S3/quali_dev/tp8/build/classes/kotlin/test/exercice3/TestExemple$testAPI5$1$2.class
new file mode 100644
index 0000000000000000000000000000000000000000..038a0314a845b4cd1f02e09da721f5fcd4d35c49
Binary files /dev/null and b/2A/S3/quali_dev/tp8/build/classes/kotlin/test/exercice3/TestExemple$testAPI5$1$2.class differ
diff --git a/2A/S3/quali_dev/tp8/build/classes/kotlin/test/exercice3/TestExemple$testAPI5$1$3.class b/2A/S3/quali_dev/tp8/build/classes/kotlin/test/exercice3/TestExemple$testAPI5$1$3.class
new file mode 100644
index 0000000000000000000000000000000000000000..7d9b21a83ece3cd7d5e54d77cc68db301cf34a49
Binary files /dev/null and b/2A/S3/quali_dev/tp8/build/classes/kotlin/test/exercice3/TestExemple$testAPI5$1$3.class differ
diff --git a/2A/S3/quali_dev/tp8/build/classes/kotlin/test/exercice3/TestExemple$testAPI5$1$4.class b/2A/S3/quali_dev/tp8/build/classes/kotlin/test/exercice3/TestExemple$testAPI5$1$4.class
new file mode 100644
index 0000000000000000000000000000000000000000..fda8638234569c31c457de88f365f7c8a84a27e8
Binary files /dev/null and b/2A/S3/quali_dev/tp8/build/classes/kotlin/test/exercice3/TestExemple$testAPI5$1$4.class differ
diff --git a/2A/S3/quali_dev/tp8/build/classes/kotlin/test/exercice3/TestExemple$testAPI5$1$results$1.class b/2A/S3/quali_dev/tp8/build/classes/kotlin/test/exercice3/TestExemple$testAPI5$1$results$1.class
new file mode 100644
index 0000000000000000000000000000000000000000..0f18b69fd76206bc58951db784415bcb3735f6f1
Binary files /dev/null and b/2A/S3/quali_dev/tp8/build/classes/kotlin/test/exercice3/TestExemple$testAPI5$1$results$1.class differ
diff --git a/2A/S3/quali_dev/tp8/build/classes/kotlin/test/exercice3/TestExemple$testAPI5$1.class b/2A/S3/quali_dev/tp8/build/classes/kotlin/test/exercice3/TestExemple$testAPI5$1.class
new file mode 100644
index 0000000000000000000000000000000000000000..ffa6f36674f768bc18f2d2a35e35143e3c3650d5
Binary files /dev/null and b/2A/S3/quali_dev/tp8/build/classes/kotlin/test/exercice3/TestExemple$testAPI5$1.class differ
diff --git a/2A/S3/quali_dev/tp8/build/classes/kotlin/test/exercice3/TestExemple$testTodo3$1$1.class b/2A/S3/quali_dev/tp8/build/classes/kotlin/test/exercice3/TestExemple$testTodo3$1$1.class
new file mode 100644
index 0000000000000000000000000000000000000000..50b05f454fbab3d67186e2d6038c5dba05a1c8c6
Binary files /dev/null and b/2A/S3/quali_dev/tp8/build/classes/kotlin/test/exercice3/TestExemple$testTodo3$1$1.class differ
diff --git a/2A/S3/quali_dev/tp8/build/classes/kotlin/test/exercice3/TestExemple$testTodo3$1$2.class b/2A/S3/quali_dev/tp8/build/classes/kotlin/test/exercice3/TestExemple$testTodo3$1$2.class
new file mode 100644
index 0000000000000000000000000000000000000000..1bb32c1575ba4ef2488f169145d6fe6938c44e5f
Binary files /dev/null and b/2A/S3/quali_dev/tp8/build/classes/kotlin/test/exercice3/TestExemple$testTodo3$1$2.class differ
diff --git a/2A/S3/quali_dev/tp8/build/classes/kotlin/test/exercice3/TestExemple$testTodo3$1$3.class b/2A/S3/quali_dev/tp8/build/classes/kotlin/test/exercice3/TestExemple$testTodo3$1$3.class
new file mode 100644
index 0000000000000000000000000000000000000000..3eeecafc4b9dd657b0761f294dd112cb1a27e73a
Binary files /dev/null and b/2A/S3/quali_dev/tp8/build/classes/kotlin/test/exercice3/TestExemple$testTodo3$1$3.class differ
diff --git a/2A/S3/quali_dev/tp8/build/classes/kotlin/test/exercice3/TestExemple$testTodo3$1$todo$1.class b/2A/S3/quali_dev/tp8/build/classes/kotlin/test/exercice3/TestExemple$testTodo3$1$todo$1.class
new file mode 100644
index 0000000000000000000000000000000000000000..d0ad560c70c0bcfb8275d5ee5c2fcdd4193a4e40
Binary files /dev/null and b/2A/S3/quali_dev/tp8/build/classes/kotlin/test/exercice3/TestExemple$testTodo3$1$todo$1.class differ
diff --git a/2A/S3/quali_dev/tp8/build/classes/kotlin/test/exercice3/TestExemple$testTodo3$1.class b/2A/S3/quali_dev/tp8/build/classes/kotlin/test/exercice3/TestExemple$testTodo3$1.class
new file mode 100644
index 0000000000000000000000000000000000000000..e0dc4db690ab0ea4636566e2b42c45380ed49127
Binary files /dev/null and b/2A/S3/quali_dev/tp8/build/classes/kotlin/test/exercice3/TestExemple$testTodo3$1.class differ
diff --git a/2A/S3/quali_dev/tp8/build/classes/kotlin/test/exercice3/TestExemple.class b/2A/S3/quali_dev/tp8/build/classes/kotlin/test/exercice3/TestExemple.class
new file mode 100644
index 0000000000000000000000000000000000000000..0a4fb1dde8f647c88cf4e9ec872a355ed5a4b075
Binary files /dev/null and b/2A/S3/quali_dev/tp8/build/classes/kotlin/test/exercice3/TestExemple.class differ
diff --git a/2A/S3/quali_dev/tp8/build/classes/kotlin/test/exercice3/Todo$$serializer.class b/2A/S3/quali_dev/tp8/build/classes/kotlin/test/exercice3/Todo$$serializer.class
new file mode 100644
index 0000000000000000000000000000000000000000..846c03e3e7e23b00d308b780ee26e4d31eb3e625
Binary files /dev/null and b/2A/S3/quali_dev/tp8/build/classes/kotlin/test/exercice3/Todo$$serializer.class differ
diff --git a/2A/S3/quali_dev/tp8/build/classes/kotlin/test/exercice3/Todo$Companion.class b/2A/S3/quali_dev/tp8/build/classes/kotlin/test/exercice3/Todo$Companion.class
new file mode 100644
index 0000000000000000000000000000000000000000..cd06ad0bda1db263d74a0a30961e3b2c66d28c6d
Binary files /dev/null and b/2A/S3/quali_dev/tp8/build/classes/kotlin/test/exercice3/Todo$Companion.class differ
diff --git a/2A/S3/quali_dev/tp8/build/classes/kotlin/test/exercice3/Todo.class b/2A/S3/quali_dev/tp8/build/classes/kotlin/test/exercice3/Todo.class
new file mode 100644
index 0000000000000000000000000000000000000000..33b7cb70f80be67f652894cadb8d49e5a8c08604
Binary files /dev/null and b/2A/S3/quali_dev/tp8/build/classes/kotlin/test/exercice3/Todo.class differ
diff --git a/2A/S3/quali_dev/tp8/build/classes/kotlin/test/testexo2/TestFakeStoreDAO_products$inlined$sam$i$org_junit_jupiter_api_function_Executable$0.class b/2A/S3/quali_dev/tp8/build/classes/kotlin/test/testexo2/TestFakeStoreDAO_products$inlined$sam$i$org_junit_jupiter_api_function_Executable$0.class
new file mode 100644
index 0000000000000000000000000000000000000000..12deaeec146be6396ae3c783dc182761cda2eab0
Binary files /dev/null and b/2A/S3/quali_dev/tp8/build/classes/kotlin/test/testexo2/TestFakeStoreDAO_products$inlined$sam$i$org_junit_jupiter_api_function_Executable$0.class differ
diff --git a/2A/S3/quali_dev/tp8/build/classes/kotlin/test/testexo2/TestFakeStoreDAO_products$tesBadCategory$1$1.class b/2A/S3/quali_dev/tp8/build/classes/kotlin/test/testexo2/TestFakeStoreDAO_products$tesBadCategory$1$1.class
new file mode 100644
index 0000000000000000000000000000000000000000..e7fad6583c405eb250933d6265161bf9158a67d2
Binary files /dev/null and b/2A/S3/quali_dev/tp8/build/classes/kotlin/test/testexo2/TestFakeStoreDAO_products$tesBadCategory$1$1.class differ
diff --git a/2A/S3/quali_dev/tp8/build/classes/kotlin/test/testexo2/TestFakeStoreDAO_products$tesBadCategory$1.class b/2A/S3/quali_dev/tp8/build/classes/kotlin/test/testexo2/TestFakeStoreDAO_products$tesBadCategory$1.class
new file mode 100644
index 0000000000000000000000000000000000000000..a629b8652cd74c7d43c21dddae959ed9420ff832
Binary files /dev/null and b/2A/S3/quali_dev/tp8/build/classes/kotlin/test/testexo2/TestFakeStoreDAO_products$tesBadCategory$1.class differ
diff --git a/2A/S3/quali_dev/tp8/build/classes/kotlin/test/testexo2/TestFakeStoreDAO_products$tesBadCategoryAzerty$1$1.class b/2A/S3/quali_dev/tp8/build/classes/kotlin/test/testexo2/TestFakeStoreDAO_products$tesBadCategoryAzerty$1$1.class
new file mode 100644
index 0000000000000000000000000000000000000000..37186290d702ed9027de7ceff605e758f9870755
Binary files /dev/null and b/2A/S3/quali_dev/tp8/build/classes/kotlin/test/testexo2/TestFakeStoreDAO_products$tesBadCategoryAzerty$1$1.class differ
diff --git a/2A/S3/quali_dev/tp8/build/classes/kotlin/test/testexo2/TestFakeStoreDAO_products$tesBadCategoryAzerty$1.class b/2A/S3/quali_dev/tp8/build/classes/kotlin/test/testexo2/TestFakeStoreDAO_products$tesBadCategoryAzerty$1.class
new file mode 100644
index 0000000000000000000000000000000000000000..e03d3cc59ce4422845569dd9eeddd3cace3598c7
Binary files /dev/null and b/2A/S3/quali_dev/tp8/build/classes/kotlin/test/testexo2/TestFakeStoreDAO_products$tesBadCategoryAzerty$1.class differ
diff --git a/2A/S3/quali_dev/tp8/build/classes/kotlin/test/testexo2/TestFakeStoreDAO_products$testAllProducts$1.class b/2A/S3/quali_dev/tp8/build/classes/kotlin/test/testexo2/TestFakeStoreDAO_products$testAllProducts$1.class
new file mode 100644
index 0000000000000000000000000000000000000000..4ae42520402aee3a373ea5a59017ea2142d2bd0f
Binary files /dev/null and b/2A/S3/quali_dev/tp8/build/classes/kotlin/test/testexo2/TestFakeStoreDAO_products$testAllProducts$1.class differ
diff --git a/2A/S3/quali_dev/tp8/build/classes/kotlin/test/testexo2/TestFakeStoreDAO_products$testCategories$1.class b/2A/S3/quali_dev/tp8/build/classes/kotlin/test/testexo2/TestFakeStoreDAO_products$testCategories$1.class
new file mode 100644
index 0000000000000000000000000000000000000000..0912e676e816cc2440af8ee6bd130b3aa2376e69
Binary files /dev/null and b/2A/S3/quali_dev/tp8/build/classes/kotlin/test/testexo2/TestFakeStoreDAO_products$testCategories$1.class differ
diff --git a/2A/S3/quali_dev/tp8/build/classes/kotlin/test/testexo2/TestFakeStoreDAO_products$testCategoryOk$1.class b/2A/S3/quali_dev/tp8/build/classes/kotlin/test/testexo2/TestFakeStoreDAO_products$testCategoryOk$1.class
new file mode 100644
index 0000000000000000000000000000000000000000..2e7cdeb27542912c5dc2aa104600beeaf28a6553
Binary files /dev/null and b/2A/S3/quali_dev/tp8/build/classes/kotlin/test/testexo2/TestFakeStoreDAO_products$testCategoryOk$1.class differ
diff --git a/2A/S3/quali_dev/tp8/build/classes/kotlin/test/testexo2/TestFakeStoreDAO_products$testProduct1ok$1.class b/2A/S3/quali_dev/tp8/build/classes/kotlin/test/testexo2/TestFakeStoreDAO_products$testProduct1ok$1.class
new file mode 100644
index 0000000000000000000000000000000000000000..7db6fdc01d4c12152427d202eedb59388d7800ae
Binary files /dev/null and b/2A/S3/quali_dev/tp8/build/classes/kotlin/test/testexo2/TestFakeStoreDAO_products$testProduct1ok$1.class differ
diff --git a/2A/S3/quali_dev/tp8/build/classes/kotlin/test/testexo2/TestFakeStoreDAO_products$testProductBadId$1$1.class b/2A/S3/quali_dev/tp8/build/classes/kotlin/test/testexo2/TestFakeStoreDAO_products$testProductBadId$1$1.class
new file mode 100644
index 0000000000000000000000000000000000000000..8a55491905efd144ff77caefa4b10d9e865ba70a
Binary files /dev/null and b/2A/S3/quali_dev/tp8/build/classes/kotlin/test/testexo2/TestFakeStoreDAO_products$testProductBadId$1$1.class differ
diff --git a/2A/S3/quali_dev/tp8/build/classes/kotlin/test/testexo2/TestFakeStoreDAO_products$testProductBadId$1.class b/2A/S3/quali_dev/tp8/build/classes/kotlin/test/testexo2/TestFakeStoreDAO_products$testProductBadId$1.class
new file mode 100644
index 0000000000000000000000000000000000000000..efead772881587caa44c40a04d2a72e96827cf16
Binary files /dev/null and b/2A/S3/quali_dev/tp8/build/classes/kotlin/test/testexo2/TestFakeStoreDAO_products$testProductBadId$1.class differ
diff --git a/2A/S3/quali_dev/tp8/build/classes/kotlin/test/testexo2/TestFakeStoreDAO_products$testProductIdOK$1.class b/2A/S3/quali_dev/tp8/build/classes/kotlin/test/testexo2/TestFakeStoreDAO_products$testProductIdOK$1.class
new file mode 100644
index 0000000000000000000000000000000000000000..6b18863c8f5ac2a3bb3c5bb74086025142eecc52
Binary files /dev/null and b/2A/S3/quali_dev/tp8/build/classes/kotlin/test/testexo2/TestFakeStoreDAO_products$testProductIdOK$1.class differ
diff --git a/2A/S3/quali_dev/tp8/build/classes/kotlin/test/testexo2/TestFakeStoreDAO_products.class b/2A/S3/quali_dev/tp8/build/classes/kotlin/test/testexo2/TestFakeStoreDAO_products.class
new file mode 100644
index 0000000000000000000000000000000000000000..9e742674cb5dc4f28a3ee9641bcac1ba34888741
Binary files /dev/null and b/2A/S3/quali_dev/tp8/build/classes/kotlin/test/testexo2/TestFakeStoreDAO_products.class differ
diff --git a/2A/S3/quali_dev/tp8/build/classes/kotlin/test/testexo2/TestFakeStoreDAO_users$inlined$sam$i$org_junit_jupiter_api_function_Executable$0.class b/2A/S3/quali_dev/tp8/build/classes/kotlin/test/testexo2/TestFakeStoreDAO_users$inlined$sam$i$org_junit_jupiter_api_function_Executable$0.class
new file mode 100644
index 0000000000000000000000000000000000000000..16a4ae44f09f96897133b56ecb4cdea6bf3b9a06
Binary files /dev/null and b/2A/S3/quali_dev/tp8/build/classes/kotlin/test/testexo2/TestFakeStoreDAO_users$inlined$sam$i$org_junit_jupiter_api_function_Executable$0.class differ
diff --git a/2A/S3/quali_dev/tp8/build/classes/kotlin/test/testexo2/TestFakeStoreDAO_users$testAllProducts$1.class b/2A/S3/quali_dev/tp8/build/classes/kotlin/test/testexo2/TestFakeStoreDAO_users$testAllProducts$1.class
new file mode 100644
index 0000000000000000000000000000000000000000..c6420ec22f02763c6e0564bdaac31952b9dca2b3
Binary files /dev/null and b/2A/S3/quali_dev/tp8/build/classes/kotlin/test/testexo2/TestFakeStoreDAO_users$testAllProducts$1.class differ
diff --git a/2A/S3/quali_dev/tp8/build/classes/kotlin/test/testexo2/TestFakeStoreDAO_users$testProduct1ok$1.class b/2A/S3/quali_dev/tp8/build/classes/kotlin/test/testexo2/TestFakeStoreDAO_users$testProduct1ok$1.class
new file mode 100644
index 0000000000000000000000000000000000000000..e04b3449a134a3d118cb881975da248458c1d531
Binary files /dev/null and b/2A/S3/quali_dev/tp8/build/classes/kotlin/test/testexo2/TestFakeStoreDAO_users$testProduct1ok$1.class differ
diff --git a/2A/S3/quali_dev/tp8/build/classes/kotlin/test/testexo2/TestFakeStoreDAO_users$testProductBadId$1$1.class b/2A/S3/quali_dev/tp8/build/classes/kotlin/test/testexo2/TestFakeStoreDAO_users$testProductBadId$1$1.class
new file mode 100644
index 0000000000000000000000000000000000000000..1d521c38d985b3cd0580cf97cc09b3929da27270
Binary files /dev/null and b/2A/S3/quali_dev/tp8/build/classes/kotlin/test/testexo2/TestFakeStoreDAO_users$testProductBadId$1$1.class differ
diff --git a/2A/S3/quali_dev/tp8/build/classes/kotlin/test/testexo2/TestFakeStoreDAO_users$testProductBadId$1.class b/2A/S3/quali_dev/tp8/build/classes/kotlin/test/testexo2/TestFakeStoreDAO_users$testProductBadId$1.class
new file mode 100644
index 0000000000000000000000000000000000000000..9c7b816eddb3341e8ad16d449145792b36b4b014
Binary files /dev/null and b/2A/S3/quali_dev/tp8/build/classes/kotlin/test/testexo2/TestFakeStoreDAO_users$testProductBadId$1.class differ
diff --git a/2A/S3/quali_dev/tp8/build/classes/kotlin/test/testexo2/TestFakeStoreDAO_users.class b/2A/S3/quali_dev/tp8/build/classes/kotlin/test/testexo2/TestFakeStoreDAO_users.class
new file mode 100644
index 0000000000000000000000000000000000000000..9b0f19c9551f6fe56f42c56ea9e0aba3591fc6f9
Binary files /dev/null and b/2A/S3/quali_dev/tp8/build/classes/kotlin/test/testexo2/TestFakeStoreDAO_users.class differ
diff --git a/2A/S3/quali_dev/tp8/build/classes/kotlin/test/testexo2/TestProduct$testProduct$1.class b/2A/S3/quali_dev/tp8/build/classes/kotlin/test/testexo2/TestProduct$testProduct$1.class
new file mode 100644
index 0000000000000000000000000000000000000000..58e07d68f6d5fd870768f6ff3c2566eb1df7802e
Binary files /dev/null and b/2A/S3/quali_dev/tp8/build/classes/kotlin/test/testexo2/TestProduct$testProduct$1.class differ
diff --git a/2A/S3/quali_dev/tp8/build/classes/kotlin/test/testexo2/TestProduct$testProduct$2.class b/2A/S3/quali_dev/tp8/build/classes/kotlin/test/testexo2/TestProduct$testProduct$2.class
new file mode 100644
index 0000000000000000000000000000000000000000..dc9526f5ea7cdee67bfbed599362f9a02b473b8b
Binary files /dev/null and b/2A/S3/quali_dev/tp8/build/classes/kotlin/test/testexo2/TestProduct$testProduct$2.class differ
diff --git a/2A/S3/quali_dev/tp8/build/classes/kotlin/test/testexo2/TestProduct$testProduct$3.class b/2A/S3/quali_dev/tp8/build/classes/kotlin/test/testexo2/TestProduct$testProduct$3.class
new file mode 100644
index 0000000000000000000000000000000000000000..71c6f570f28188ee20b09c5c3d17f3fe56807208
Binary files /dev/null and b/2A/S3/quali_dev/tp8/build/classes/kotlin/test/testexo2/TestProduct$testProduct$3.class differ
diff --git a/2A/S3/quali_dev/tp8/build/classes/kotlin/test/testexo2/TestProduct$testProduct$4.class b/2A/S3/quali_dev/tp8/build/classes/kotlin/test/testexo2/TestProduct$testProduct$4.class
new file mode 100644
index 0000000000000000000000000000000000000000..1bce6a6ebd8b69538c20e395e122061d54022a8f
Binary files /dev/null and b/2A/S3/quali_dev/tp8/build/classes/kotlin/test/testexo2/TestProduct$testProduct$4.class differ
diff --git a/2A/S3/quali_dev/tp8/build/classes/kotlin/test/testexo2/TestProduct$testProduct$5.class b/2A/S3/quali_dev/tp8/build/classes/kotlin/test/testexo2/TestProduct$testProduct$5.class
new file mode 100644
index 0000000000000000000000000000000000000000..3f76dc1663731d038905542ad1133c0aeb8f8498
Binary files /dev/null and b/2A/S3/quali_dev/tp8/build/classes/kotlin/test/testexo2/TestProduct$testProduct$5.class differ
diff --git a/2A/S3/quali_dev/tp8/build/classes/kotlin/test/testexo2/TestProduct.class b/2A/S3/quali_dev/tp8/build/classes/kotlin/test/testexo2/TestProduct.class
new file mode 100644
index 0000000000000000000000000000000000000000..49dd619f1bf6542cdcb0ab0d86e142b3f922081d
Binary files /dev/null and b/2A/S3/quali_dev/tp8/build/classes/kotlin/test/testexo2/TestProduct.class differ
diff --git a/2A/S3/quali_dev/tp8/build/classes/kotlin/test/testexo2/TestProductsExt$init$1.class b/2A/S3/quali_dev/tp8/build/classes/kotlin/test/testexo2/TestProductsExt$init$1.class
new file mode 100644
index 0000000000000000000000000000000000000000..a8bf668b78f973276618e7e3b27e8ef8efb0885d
Binary files /dev/null and b/2A/S3/quali_dev/tp8/build/classes/kotlin/test/testexo2/TestProductsExt$init$1.class differ
diff --git a/2A/S3/quali_dev/tp8/build/classes/kotlin/test/testexo2/TestProductsExt$testTotalCost2$1.class b/2A/S3/quali_dev/tp8/build/classes/kotlin/test/testexo2/TestProductsExt$testTotalCost2$1.class
new file mode 100644
index 0000000000000000000000000000000000000000..65431121e893c59f97816ca8644f7476899f1730
Binary files /dev/null and b/2A/S3/quali_dev/tp8/build/classes/kotlin/test/testexo2/TestProductsExt$testTotalCost2$1.class differ
diff --git a/2A/S3/quali_dev/tp8/build/classes/kotlin/test/testexo2/TestProductsExt$testTotalCost3$1.class b/2A/S3/quali_dev/tp8/build/classes/kotlin/test/testexo2/TestProductsExt$testTotalCost3$1.class
new file mode 100644
index 0000000000000000000000000000000000000000..02544569e6cb42eec8e09ac44dd37160a96d8799
Binary files /dev/null and b/2A/S3/quali_dev/tp8/build/classes/kotlin/test/testexo2/TestProductsExt$testTotalCost3$1.class differ
diff --git a/2A/S3/quali_dev/tp8/build/classes/kotlin/test/testexo2/TestProductsExt.class b/2A/S3/quali_dev/tp8/build/classes/kotlin/test/testexo2/TestProductsExt.class
new file mode 100644
index 0000000000000000000000000000000000000000..2465872c3266c689c4b8fea3d55f8cd00f9b2219
Binary files /dev/null and b/2A/S3/quali_dev/tp8/build/classes/kotlin/test/testexo2/TestProductsExt.class differ
diff --git a/2A/S3/quali_dev/tp8/build/classes/kotlin/test/testexo2/TestSortStrategies$init$1.class b/2A/S3/quali_dev/tp8/build/classes/kotlin/test/testexo2/TestSortStrategies$init$1.class
new file mode 100644
index 0000000000000000000000000000000000000000..35592d5e5a90f8cbca40d130a625946283624e48
Binary files /dev/null and b/2A/S3/quali_dev/tp8/build/classes/kotlin/test/testexo2/TestSortStrategies$init$1.class differ
diff --git a/2A/S3/quali_dev/tp8/build/classes/kotlin/test/testexo2/TestSortStrategies.class b/2A/S3/quali_dev/tp8/build/classes/kotlin/test/testexo2/TestSortStrategies.class
new file mode 100644
index 0000000000000000000000000000000000000000..dba99ac7c69238d0a91f32b63f78c6daf5350c2e
Binary files /dev/null and b/2A/S3/quali_dev/tp8/build/classes/kotlin/test/testexo2/TestSortStrategies.class differ
diff --git a/2A/S3/quali_dev/tp8/build/kotlin/compileKotlin/cacheable/caches-jvm/inputs/source-to-output.tab b/2A/S3/quali_dev/tp8/build/kotlin/compileKotlin/cacheable/caches-jvm/inputs/source-to-output.tab
new file mode 100644
index 0000000000000000000000000000000000000000..7d024984f1844360a841f104a620ddd793d88c6c
Binary files /dev/null and b/2A/S3/quali_dev/tp8/build/kotlin/compileKotlin/cacheable/caches-jvm/inputs/source-to-output.tab differ
diff --git a/2A/S3/quali_dev/tp8/build/kotlin/compileKotlin/cacheable/caches-jvm/inputs/source-to-output.tab.keystream b/2A/S3/quali_dev/tp8/build/kotlin/compileKotlin/cacheable/caches-jvm/inputs/source-to-output.tab.keystream
new file mode 100644
index 0000000000000000000000000000000000000000..e60e56467ef807bbcc0fdc22c604927ff8d0afcb
Binary files /dev/null and b/2A/S3/quali_dev/tp8/build/kotlin/compileKotlin/cacheable/caches-jvm/inputs/source-to-output.tab.keystream differ
diff --git a/2A/S3/quali_dev/tp8/build/kotlin/compileKotlin/cacheable/caches-jvm/inputs/source-to-output.tab.keystream.len b/2A/S3/quali_dev/tp8/build/kotlin/compileKotlin/cacheable/caches-jvm/inputs/source-to-output.tab.keystream.len
new file mode 100644
index 0000000000000000000000000000000000000000..66196bd1a94d98ce5049541110971fd8167299b3
Binary files /dev/null and b/2A/S3/quali_dev/tp8/build/kotlin/compileKotlin/cacheable/caches-jvm/inputs/source-to-output.tab.keystream.len differ
diff --git a/2A/S3/quali_dev/tp8/build/kotlin/compileKotlin/cacheable/caches-jvm/inputs/source-to-output.tab.len b/2A/S3/quali_dev/tp8/build/kotlin/compileKotlin/cacheable/caches-jvm/inputs/source-to-output.tab.len
new file mode 100644
index 0000000000000000000000000000000000000000..003bc0ebfc327ee4e08df4a177e7f368d2dea681
Binary files /dev/null and b/2A/S3/quali_dev/tp8/build/kotlin/compileKotlin/cacheable/caches-jvm/inputs/source-to-output.tab.len differ
diff --git a/2A/S3/quali_dev/tp8/build/kotlin/compileKotlin/cacheable/caches-jvm/inputs/source-to-output.tab.values.at b/2A/S3/quali_dev/tp8/build/kotlin/compileKotlin/cacheable/caches-jvm/inputs/source-to-output.tab.values.at
new file mode 100644
index 0000000000000000000000000000000000000000..f879ec560e05ce085fed00719fc66005e8112003
Binary files /dev/null and b/2A/S3/quali_dev/tp8/build/kotlin/compileKotlin/cacheable/caches-jvm/inputs/source-to-output.tab.values.at differ
diff --git a/2A/S3/quali_dev/tp8/build/kotlin/compileKotlin/cacheable/caches-jvm/inputs/source-to-output.tab_i b/2A/S3/quali_dev/tp8/build/kotlin/compileKotlin/cacheable/caches-jvm/inputs/source-to-output.tab_i
new file mode 100644
index 0000000000000000000000000000000000000000..20bba4ecf3dd41052a5f05498240282c9e31a917
Binary files /dev/null and b/2A/S3/quali_dev/tp8/build/kotlin/compileKotlin/cacheable/caches-jvm/inputs/source-to-output.tab_i differ
diff --git a/2A/S3/quali_dev/tp8/build/kotlin/compileKotlin/cacheable/caches-jvm/inputs/source-to-output.tab_i.len b/2A/S3/quali_dev/tp8/build/kotlin/compileKotlin/cacheable/caches-jvm/inputs/source-to-output.tab_i.len
new file mode 100644
index 0000000000000000000000000000000000000000..131e265740f37d77b7c4a3676d2a7704ca3e4a29
Binary files /dev/null and b/2A/S3/quali_dev/tp8/build/kotlin/compileKotlin/cacheable/caches-jvm/inputs/source-to-output.tab_i.len differ
diff --git a/2A/S3/quali_dev/tp8/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/class-attributes.tab b/2A/S3/quali_dev/tp8/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/class-attributes.tab
new file mode 100644
index 0000000000000000000000000000000000000000..8725bc60a2c749e8c29a27325572166e26f81df3
Binary files /dev/null and b/2A/S3/quali_dev/tp8/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/class-attributes.tab differ
diff --git a/2A/S3/quali_dev/tp8/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/class-attributes.tab.keystream b/2A/S3/quali_dev/tp8/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/class-attributes.tab.keystream
new file mode 100644
index 0000000000000000000000000000000000000000..46980365d5446310932372e752b7ef93be3fd69e
Binary files /dev/null and b/2A/S3/quali_dev/tp8/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/class-attributes.tab.keystream differ
diff --git a/2A/S3/quali_dev/tp8/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/class-attributes.tab.keystream.len b/2A/S3/quali_dev/tp8/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/class-attributes.tab.keystream.len
new file mode 100644
index 0000000000000000000000000000000000000000..c37b2e3cb56cab3caa283bb92cd1182ac7af3432
Binary files /dev/null and b/2A/S3/quali_dev/tp8/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/class-attributes.tab.keystream.len differ
diff --git a/2A/S3/quali_dev/tp8/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/class-attributes.tab.len b/2A/S3/quali_dev/tp8/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/class-attributes.tab.len
new file mode 100644
index 0000000000000000000000000000000000000000..b31f54b014fe45d457f74660f6d0f066c3ec5354
Binary files /dev/null and b/2A/S3/quali_dev/tp8/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/class-attributes.tab.len differ
diff --git a/2A/S3/quali_dev/tp8/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/class-attributes.tab.values.at b/2A/S3/quali_dev/tp8/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/class-attributes.tab.values.at
new file mode 100644
index 0000000000000000000000000000000000000000..2661249ff376575ede95d121dda0e6cc0595255c
Binary files /dev/null and b/2A/S3/quali_dev/tp8/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/class-attributes.tab.values.at differ
diff --git a/2A/S3/quali_dev/tp8/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/class-attributes.tab_i b/2A/S3/quali_dev/tp8/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/class-attributes.tab_i
new file mode 100644
index 0000000000000000000000000000000000000000..565faaeb674ead98bcdfd00bfb1b731cacb8d35e
Binary files /dev/null and b/2A/S3/quali_dev/tp8/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/class-attributes.tab_i differ
diff --git a/2A/S3/quali_dev/tp8/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/class-attributes.tab_i.len b/2A/S3/quali_dev/tp8/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/class-attributes.tab_i.len
new file mode 100644
index 0000000000000000000000000000000000000000..131e265740f37d77b7c4a3676d2a7704ca3e4a29
Binary files /dev/null and b/2A/S3/quali_dev/tp8/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/class-attributes.tab_i.len differ
diff --git a/2A/S3/quali_dev/tp8/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/class-fq-name-to-source.tab b/2A/S3/quali_dev/tp8/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/class-fq-name-to-source.tab
new file mode 100644
index 0000000000000000000000000000000000000000..7f7c504386bf4b1f172750fc22ba7556f677726d
Binary files /dev/null and b/2A/S3/quali_dev/tp8/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/class-fq-name-to-source.tab differ
diff --git a/2A/S3/quali_dev/tp8/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/class-fq-name-to-source.tab.keystream b/2A/S3/quali_dev/tp8/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/class-fq-name-to-source.tab.keystream
new file mode 100644
index 0000000000000000000000000000000000000000..46980365d5446310932372e752b7ef93be3fd69e
Binary files /dev/null and b/2A/S3/quali_dev/tp8/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/class-fq-name-to-source.tab.keystream differ
diff --git a/2A/S3/quali_dev/tp8/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/class-fq-name-to-source.tab.keystream.len b/2A/S3/quali_dev/tp8/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/class-fq-name-to-source.tab.keystream.len
new file mode 100644
index 0000000000000000000000000000000000000000..c37b2e3cb56cab3caa283bb92cd1182ac7af3432
Binary files /dev/null and b/2A/S3/quali_dev/tp8/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/class-fq-name-to-source.tab.keystream.len differ
diff --git a/2A/S3/quali_dev/tp8/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/class-fq-name-to-source.tab.len b/2A/S3/quali_dev/tp8/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/class-fq-name-to-source.tab.len
new file mode 100644
index 0000000000000000000000000000000000000000..b31f54b014fe45d457f74660f6d0f066c3ec5354
Binary files /dev/null and b/2A/S3/quali_dev/tp8/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/class-fq-name-to-source.tab.len differ
diff --git a/2A/S3/quali_dev/tp8/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/class-fq-name-to-source.tab.values.at b/2A/S3/quali_dev/tp8/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/class-fq-name-to-source.tab.values.at
new file mode 100644
index 0000000000000000000000000000000000000000..c05d483f7de6b95965164b105f02256fbe588ff1
Binary files /dev/null and b/2A/S3/quali_dev/tp8/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/class-fq-name-to-source.tab.values.at differ
diff --git a/2A/S3/quali_dev/tp8/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/class-fq-name-to-source.tab_i b/2A/S3/quali_dev/tp8/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/class-fq-name-to-source.tab_i
new file mode 100644
index 0000000000000000000000000000000000000000..565faaeb674ead98bcdfd00bfb1b731cacb8d35e
Binary files /dev/null and b/2A/S3/quali_dev/tp8/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/class-fq-name-to-source.tab_i differ
diff --git a/2A/S3/quali_dev/tp8/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/class-fq-name-to-source.tab_i.len b/2A/S3/quali_dev/tp8/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/class-fq-name-to-source.tab_i.len
new file mode 100644
index 0000000000000000000000000000000000000000..131e265740f37d77b7c4a3676d2a7704ca3e4a29
Binary files /dev/null and b/2A/S3/quali_dev/tp8/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/class-fq-name-to-source.tab_i.len differ
diff --git a/2A/S3/quali_dev/tp8/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/internal-name-to-source.tab b/2A/S3/quali_dev/tp8/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/internal-name-to-source.tab
new file mode 100644
index 0000000000000000000000000000000000000000..b90d964c544d0ef55549c2f55b1433d81691deb7
Binary files /dev/null and b/2A/S3/quali_dev/tp8/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/internal-name-to-source.tab differ
diff --git a/2A/S3/quali_dev/tp8/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/internal-name-to-source.tab.keystream b/2A/S3/quali_dev/tp8/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/internal-name-to-source.tab.keystream
new file mode 100644
index 0000000000000000000000000000000000000000..4b930e8a9dc7ada9633e357980f25503564e8b82
Binary files /dev/null and b/2A/S3/quali_dev/tp8/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/internal-name-to-source.tab.keystream differ
diff --git a/2A/S3/quali_dev/tp8/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/internal-name-to-source.tab.keystream.len b/2A/S3/quali_dev/tp8/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/internal-name-to-source.tab.keystream.len
new file mode 100644
index 0000000000000000000000000000000000000000..7f6207a53968c9d9baa3c6f3a108a32cdcd9a2f1
Binary files /dev/null and b/2A/S3/quali_dev/tp8/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/internal-name-to-source.tab.keystream.len differ
diff --git a/2A/S3/quali_dev/tp8/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/internal-name-to-source.tab.len b/2A/S3/quali_dev/tp8/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/internal-name-to-source.tab.len
new file mode 100644
index 0000000000000000000000000000000000000000..60e54ab58ab96334e515dfd664c43bb1110e4745
Binary files /dev/null and b/2A/S3/quali_dev/tp8/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/internal-name-to-source.tab.len differ
diff --git a/2A/S3/quali_dev/tp8/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/internal-name-to-source.tab.values.at b/2A/S3/quali_dev/tp8/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/internal-name-to-source.tab.values.at
new file mode 100644
index 0000000000000000000000000000000000000000..0fc6112ce01a410ceed11284000c61cdbfe9b253
Binary files /dev/null and b/2A/S3/quali_dev/tp8/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/internal-name-to-source.tab.values.at differ
diff --git a/2A/S3/quali_dev/tp8/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/internal-name-to-source.tab_i b/2A/S3/quali_dev/tp8/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/internal-name-to-source.tab_i
new file mode 100644
index 0000000000000000000000000000000000000000..860be6672ade4ca51097e6a609b516aa94f7e017
Binary files /dev/null and b/2A/S3/quali_dev/tp8/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/internal-name-to-source.tab_i differ
diff --git a/2A/S3/quali_dev/tp8/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/internal-name-to-source.tab_i.len b/2A/S3/quali_dev/tp8/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/internal-name-to-source.tab_i.len
new file mode 100644
index 0000000000000000000000000000000000000000..131e265740f37d77b7c4a3676d2a7704ca3e4a29
Binary files /dev/null and b/2A/S3/quali_dev/tp8/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/internal-name-to-source.tab_i.len differ
diff --git a/2A/S3/quali_dev/tp8/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/package-parts.tab b/2A/S3/quali_dev/tp8/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/package-parts.tab
new file mode 100644
index 0000000000000000000000000000000000000000..6d2d4837f99f162785d966df358753e643f20210
Binary files /dev/null and b/2A/S3/quali_dev/tp8/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/package-parts.tab differ
diff --git a/2A/S3/quali_dev/tp8/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/package-parts.tab.keystream b/2A/S3/quali_dev/tp8/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/package-parts.tab.keystream
new file mode 100644
index 0000000000000000000000000000000000000000..937be5eb67c71b626286f6f27d534f396803de79
Binary files /dev/null and b/2A/S3/quali_dev/tp8/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/package-parts.tab.keystream differ
diff --git a/2A/S3/quali_dev/tp8/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/package-parts.tab.keystream.len b/2A/S3/quali_dev/tp8/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/package-parts.tab.keystream.len
new file mode 100644
index 0000000000000000000000000000000000000000..6cf2665c8e7f13a33f86e50c5ed79156ac1ebbb4
Binary files /dev/null and b/2A/S3/quali_dev/tp8/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/package-parts.tab.keystream.len differ
diff --git a/2A/S3/quali_dev/tp8/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/package-parts.tab.len b/2A/S3/quali_dev/tp8/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/package-parts.tab.len
new file mode 100644
index 0000000000000000000000000000000000000000..01bdaa1da7d937c7e7d98e54ba912f88ab95c7f2
Binary files /dev/null and b/2A/S3/quali_dev/tp8/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/package-parts.tab.len differ
diff --git a/2A/S3/quali_dev/tp8/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/package-parts.tab.values.at b/2A/S3/quali_dev/tp8/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/package-parts.tab.values.at
new file mode 100644
index 0000000000000000000000000000000000000000..ebec237e1ed49b33c9038f3c92a944b7523e9663
Binary files /dev/null and b/2A/S3/quali_dev/tp8/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/package-parts.tab.values.at differ
diff --git a/2A/S3/quali_dev/tp8/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/package-parts.tab_i b/2A/S3/quali_dev/tp8/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/package-parts.tab_i
new file mode 100644
index 0000000000000000000000000000000000000000..010e874094d6e5e38e6bdb595a2a6f26c4e515be
Binary files /dev/null and b/2A/S3/quali_dev/tp8/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/package-parts.tab_i differ
diff --git a/2A/S3/quali_dev/tp8/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/package-parts.tab_i.len b/2A/S3/quali_dev/tp8/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/package-parts.tab_i.len
new file mode 100644
index 0000000000000000000000000000000000000000..131e265740f37d77b7c4a3676d2a7704ca3e4a29
Binary files /dev/null and b/2A/S3/quali_dev/tp8/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/package-parts.tab_i.len differ
diff --git a/2A/S3/quali_dev/tp8/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/proto.tab b/2A/S3/quali_dev/tp8/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/proto.tab
new file mode 100644
index 0000000000000000000000000000000000000000..605f298e3a8949faee5054f89c8d690e75a0f612
Binary files /dev/null and b/2A/S3/quali_dev/tp8/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/proto.tab differ
diff --git a/2A/S3/quali_dev/tp8/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/proto.tab.keystream b/2A/S3/quali_dev/tp8/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/proto.tab.keystream
new file mode 100644
index 0000000000000000000000000000000000000000..03200658da428fba43bbb92d61094ca73664ac73
Binary files /dev/null and b/2A/S3/quali_dev/tp8/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/proto.tab.keystream differ
diff --git a/2A/S3/quali_dev/tp8/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/proto.tab.keystream.len b/2A/S3/quali_dev/tp8/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/proto.tab.keystream.len
new file mode 100644
index 0000000000000000000000000000000000000000..936108e900accbe7f0662ebb061cd9822c65b71f
Binary files /dev/null and b/2A/S3/quali_dev/tp8/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/proto.tab.keystream.len differ
diff --git a/2A/S3/quali_dev/tp8/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/proto.tab.len b/2A/S3/quali_dev/tp8/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/proto.tab.len
new file mode 100644
index 0000000000000000000000000000000000000000..42df8b93f29a8c8b6c75bd279770190db7c41baf
Binary files /dev/null and b/2A/S3/quali_dev/tp8/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/proto.tab.len differ
diff --git a/2A/S3/quali_dev/tp8/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/proto.tab.values b/2A/S3/quali_dev/tp8/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/proto.tab.values
new file mode 100644
index 0000000000000000000000000000000000000000..ce968f056601e16b7dd941d259ba81b6c84cba24
Binary files /dev/null and b/2A/S3/quali_dev/tp8/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/proto.tab.values differ
diff --git a/2A/S3/quali_dev/tp8/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/proto.tab.values.at b/2A/S3/quali_dev/tp8/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/proto.tab.values.at
new file mode 100644
index 0000000000000000000000000000000000000000..1e791f9a50fc2a1f378a089e67f61875aed83e58
Binary files /dev/null and b/2A/S3/quali_dev/tp8/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/proto.tab.values.at differ
diff --git a/2A/S3/quali_dev/tp8/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/proto.tab.values.s b/2A/S3/quali_dev/tp8/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/proto.tab.values.s
new file mode 100644
index 0000000000000000000000000000000000000000..24506aa821ac09d3808900868ed3190c97058fc7
--- /dev/null
+++ b/2A/S3/quali_dev/tp8/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/proto.tab.values.s
@@ -0,0 +1 @@
+�9�9�<
\ No newline at end of file
diff --git a/2A/S3/quali_dev/tp8/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/proto.tab_i b/2A/S3/quali_dev/tp8/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/proto.tab_i
new file mode 100644
index 0000000000000000000000000000000000000000..1ebacbfd0a2b77bd490df70c92dafd14afa49ede
Binary files /dev/null and b/2A/S3/quali_dev/tp8/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/proto.tab_i differ
diff --git a/2A/S3/quali_dev/tp8/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/proto.tab_i.len b/2A/S3/quali_dev/tp8/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/proto.tab_i.len
new file mode 100644
index 0000000000000000000000000000000000000000..131e265740f37d77b7c4a3676d2a7704ca3e4a29
Binary files /dev/null and b/2A/S3/quali_dev/tp8/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/proto.tab_i.len differ
diff --git a/2A/S3/quali_dev/tp8/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/source-to-classes.tab b/2A/S3/quali_dev/tp8/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/source-to-classes.tab
new file mode 100644
index 0000000000000000000000000000000000000000..a4d960f3fcad2f7fb3046132be5c56fe0f3ce45c
Binary files /dev/null and b/2A/S3/quali_dev/tp8/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/source-to-classes.tab differ
diff --git a/2A/S3/quali_dev/tp8/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/source-to-classes.tab.keystream b/2A/S3/quali_dev/tp8/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/source-to-classes.tab.keystream
new file mode 100644
index 0000000000000000000000000000000000000000..0cd1de1912141a7ec8142592efd01282f350be78
Binary files /dev/null and b/2A/S3/quali_dev/tp8/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/source-to-classes.tab.keystream differ
diff --git a/2A/S3/quali_dev/tp8/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/source-to-classes.tab.keystream.len b/2A/S3/quali_dev/tp8/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/source-to-classes.tab.keystream.len
new file mode 100644
index 0000000000000000000000000000000000000000..66196bd1a94d98ce5049541110971fd8167299b3
Binary files /dev/null and b/2A/S3/quali_dev/tp8/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/source-to-classes.tab.keystream.len differ
diff --git a/2A/S3/quali_dev/tp8/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/source-to-classes.tab.len b/2A/S3/quali_dev/tp8/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/source-to-classes.tab.len
new file mode 100644
index 0000000000000000000000000000000000000000..003bc0ebfc327ee4e08df4a177e7f368d2dea681
Binary files /dev/null and b/2A/S3/quali_dev/tp8/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/source-to-classes.tab.len differ
diff --git a/2A/S3/quali_dev/tp8/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/source-to-classes.tab.values.at b/2A/S3/quali_dev/tp8/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/source-to-classes.tab.values.at
new file mode 100644
index 0000000000000000000000000000000000000000..5007e5e6272dbf824bc6b15c33b4125a830aba80
Binary files /dev/null and b/2A/S3/quali_dev/tp8/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/source-to-classes.tab.values.at differ
diff --git a/2A/S3/quali_dev/tp8/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/source-to-classes.tab_i b/2A/S3/quali_dev/tp8/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/source-to-classes.tab_i
new file mode 100644
index 0000000000000000000000000000000000000000..431ecb9e867b081beaeefd27bb64e80b821601bd
Binary files /dev/null and b/2A/S3/quali_dev/tp8/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/source-to-classes.tab_i differ
diff --git a/2A/S3/quali_dev/tp8/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/source-to-classes.tab_i.len b/2A/S3/quali_dev/tp8/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/source-to-classes.tab_i.len
new file mode 100644
index 0000000000000000000000000000000000000000..131e265740f37d77b7c4a3676d2a7704ca3e4a29
Binary files /dev/null and b/2A/S3/quali_dev/tp8/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/source-to-classes.tab_i.len differ
diff --git a/2A/S3/quali_dev/tp8/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/subtypes.tab b/2A/S3/quali_dev/tp8/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/subtypes.tab
new file mode 100644
index 0000000000000000000000000000000000000000..96660c0d82b355b9db80da259f873d55e4034f29
Binary files /dev/null and b/2A/S3/quali_dev/tp8/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/subtypes.tab differ
diff --git a/2A/S3/quali_dev/tp8/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/subtypes.tab.keystream b/2A/S3/quali_dev/tp8/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/subtypes.tab.keystream
new file mode 100644
index 0000000000000000000000000000000000000000..e868f0bce0908e4bbb31f239a2df3e279eefbc8d
Binary files /dev/null and b/2A/S3/quali_dev/tp8/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/subtypes.tab.keystream differ
diff --git a/2A/S3/quali_dev/tp8/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/subtypes.tab.keystream.len b/2A/S3/quali_dev/tp8/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/subtypes.tab.keystream.len
new file mode 100644
index 0000000000000000000000000000000000000000..98b33a3c74a4abed7f5bf2db37d8819f5575371b
Binary files /dev/null and b/2A/S3/quali_dev/tp8/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/subtypes.tab.keystream.len differ
diff --git a/2A/S3/quali_dev/tp8/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/subtypes.tab.len b/2A/S3/quali_dev/tp8/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/subtypes.tab.len
new file mode 100644
index 0000000000000000000000000000000000000000..9e27f732fe29db9f82162c1114700ef23f6ac174
Binary files /dev/null and b/2A/S3/quali_dev/tp8/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/subtypes.tab.len differ
diff --git a/2A/S3/quali_dev/tp8/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/subtypes.tab.values.at b/2A/S3/quali_dev/tp8/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/subtypes.tab.values.at
new file mode 100644
index 0000000000000000000000000000000000000000..2e9f1256f754c0d35c69c03a207fa87e8052f3a1
Binary files /dev/null and b/2A/S3/quali_dev/tp8/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/subtypes.tab.values.at differ
diff --git a/2A/S3/quali_dev/tp8/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/subtypes.tab_i b/2A/S3/quali_dev/tp8/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/subtypes.tab_i
new file mode 100644
index 0000000000000000000000000000000000000000..3687e7a2755efd3dc6e290f21df50f23a0b91951
Binary files /dev/null and b/2A/S3/quali_dev/tp8/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/subtypes.tab_i differ
diff --git a/2A/S3/quali_dev/tp8/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/subtypes.tab_i.len b/2A/S3/quali_dev/tp8/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/subtypes.tab_i.len
new file mode 100644
index 0000000000000000000000000000000000000000..131e265740f37d77b7c4a3676d2a7704ca3e4a29
Binary files /dev/null and b/2A/S3/quali_dev/tp8/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/subtypes.tab_i.len differ
diff --git a/2A/S3/quali_dev/tp8/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/supertypes.tab b/2A/S3/quali_dev/tp8/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/supertypes.tab
new file mode 100644
index 0000000000000000000000000000000000000000..56953a9175c4beed52fff9ebaa359066d8055769
Binary files /dev/null and b/2A/S3/quali_dev/tp8/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/supertypes.tab differ
diff --git a/2A/S3/quali_dev/tp8/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/supertypes.tab.keystream b/2A/S3/quali_dev/tp8/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/supertypes.tab.keystream
new file mode 100644
index 0000000000000000000000000000000000000000..0f1567e66878df790b386199c5586b9c18ee1580
Binary files /dev/null and b/2A/S3/quali_dev/tp8/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/supertypes.tab.keystream differ
diff --git a/2A/S3/quali_dev/tp8/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/supertypes.tab.keystream.len b/2A/S3/quali_dev/tp8/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/supertypes.tab.keystream.len
new file mode 100644
index 0000000000000000000000000000000000000000..b740c760e764af0c25fac27bcc18e9115c44052c
Binary files /dev/null and b/2A/S3/quali_dev/tp8/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/supertypes.tab.keystream.len differ
diff --git a/2A/S3/quali_dev/tp8/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/supertypes.tab.len b/2A/S3/quali_dev/tp8/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/supertypes.tab.len
new file mode 100644
index 0000000000000000000000000000000000000000..a5413564614472ae2e55bb44e79510947726def0
Binary files /dev/null and b/2A/S3/quali_dev/tp8/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/supertypes.tab.len differ
diff --git a/2A/S3/quali_dev/tp8/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/supertypes.tab.values.at b/2A/S3/quali_dev/tp8/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/supertypes.tab.values.at
new file mode 100644
index 0000000000000000000000000000000000000000..5eea09e3e14d2559b46337a0256291861065950a
Binary files /dev/null and b/2A/S3/quali_dev/tp8/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/supertypes.tab.values.at differ
diff --git a/2A/S3/quali_dev/tp8/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/supertypes.tab_i b/2A/S3/quali_dev/tp8/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/supertypes.tab_i
new file mode 100644
index 0000000000000000000000000000000000000000..f9e2a7fffc395182035c7019c7117aacf27c68bc
Binary files /dev/null and b/2A/S3/quali_dev/tp8/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/supertypes.tab_i differ
diff --git a/2A/S3/quali_dev/tp8/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/supertypes.tab_i.len b/2A/S3/quali_dev/tp8/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/supertypes.tab_i.len
new file mode 100644
index 0000000000000000000000000000000000000000..131e265740f37d77b7c4a3676d2a7704ca3e4a29
Binary files /dev/null and b/2A/S3/quali_dev/tp8/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/supertypes.tab_i.len differ
diff --git a/2A/S3/quali_dev/tp8/build/kotlin/compileKotlin/cacheable/caches-jvm/lookups/counters.tab b/2A/S3/quali_dev/tp8/build/kotlin/compileKotlin/cacheable/caches-jvm/lookups/counters.tab
new file mode 100644
index 0000000000000000000000000000000000000000..6581efe09ca47a9a8b04e336089754ae0d48f2a9
--- /dev/null
+++ b/2A/S3/quali_dev/tp8/build/kotlin/compileKotlin/cacheable/caches-jvm/lookups/counters.tab
@@ -0,0 +1,2 @@
+73
+0
\ No newline at end of file
diff --git a/2A/S3/quali_dev/tp8/build/kotlin/compileKotlin/cacheable/caches-jvm/lookups/file-to-id.tab b/2A/S3/quali_dev/tp8/build/kotlin/compileKotlin/cacheable/caches-jvm/lookups/file-to-id.tab
new file mode 100644
index 0000000000000000000000000000000000000000..0aa7166e2d73ce0b685652eaf1494b50b30ebae1
Binary files /dev/null and b/2A/S3/quali_dev/tp8/build/kotlin/compileKotlin/cacheable/caches-jvm/lookups/file-to-id.tab differ
diff --git a/2A/S3/quali_dev/tp8/build/kotlin/compileKotlin/cacheable/caches-jvm/lookups/file-to-id.tab.keystream b/2A/S3/quali_dev/tp8/build/kotlin/compileKotlin/cacheable/caches-jvm/lookups/file-to-id.tab.keystream
new file mode 100644
index 0000000000000000000000000000000000000000..0cd1de1912141a7ec8142592efd01282f350be78
Binary files /dev/null and b/2A/S3/quali_dev/tp8/build/kotlin/compileKotlin/cacheable/caches-jvm/lookups/file-to-id.tab.keystream differ
diff --git a/2A/S3/quali_dev/tp8/build/kotlin/compileKotlin/cacheable/caches-jvm/lookups/file-to-id.tab.keystream.len b/2A/S3/quali_dev/tp8/build/kotlin/compileKotlin/cacheable/caches-jvm/lookups/file-to-id.tab.keystream.len
new file mode 100644
index 0000000000000000000000000000000000000000..66196bd1a94d98ce5049541110971fd8167299b3
Binary files /dev/null and b/2A/S3/quali_dev/tp8/build/kotlin/compileKotlin/cacheable/caches-jvm/lookups/file-to-id.tab.keystream.len differ
diff --git a/2A/S3/quali_dev/tp8/build/kotlin/compileKotlin/cacheable/caches-jvm/lookups/file-to-id.tab.len b/2A/S3/quali_dev/tp8/build/kotlin/compileKotlin/cacheable/caches-jvm/lookups/file-to-id.tab.len
new file mode 100644
index 0000000000000000000000000000000000000000..003bc0ebfc327ee4e08df4a177e7f368d2dea681
Binary files /dev/null and b/2A/S3/quali_dev/tp8/build/kotlin/compileKotlin/cacheable/caches-jvm/lookups/file-to-id.tab.len differ
diff --git a/2A/S3/quali_dev/tp8/build/kotlin/compileKotlin/cacheable/caches-jvm/lookups/file-to-id.tab.values.at b/2A/S3/quali_dev/tp8/build/kotlin/compileKotlin/cacheable/caches-jvm/lookups/file-to-id.tab.values.at
new file mode 100644
index 0000000000000000000000000000000000000000..1a7d9f9471963106f5c779b6b5239bba3daa31a4
Binary files /dev/null and b/2A/S3/quali_dev/tp8/build/kotlin/compileKotlin/cacheable/caches-jvm/lookups/file-to-id.tab.values.at differ
diff --git a/2A/S3/quali_dev/tp8/build/kotlin/compileKotlin/cacheable/caches-jvm/lookups/file-to-id.tab_i b/2A/S3/quali_dev/tp8/build/kotlin/compileKotlin/cacheable/caches-jvm/lookups/file-to-id.tab_i
new file mode 100644
index 0000000000000000000000000000000000000000..431ecb9e867b081beaeefd27bb64e80b821601bd
Binary files /dev/null and b/2A/S3/quali_dev/tp8/build/kotlin/compileKotlin/cacheable/caches-jvm/lookups/file-to-id.tab_i differ
diff --git a/2A/S3/quali_dev/tp8/build/kotlin/compileKotlin/cacheable/caches-jvm/lookups/file-to-id.tab_i.len b/2A/S3/quali_dev/tp8/build/kotlin/compileKotlin/cacheable/caches-jvm/lookups/file-to-id.tab_i.len
new file mode 100644
index 0000000000000000000000000000000000000000..131e265740f37d77b7c4a3676d2a7704ca3e4a29
Binary files /dev/null and b/2A/S3/quali_dev/tp8/build/kotlin/compileKotlin/cacheable/caches-jvm/lookups/file-to-id.tab_i.len differ
diff --git a/2A/S3/quali_dev/tp8/build/kotlin/compileKotlin/cacheable/caches-jvm/lookups/id-to-file.tab b/2A/S3/quali_dev/tp8/build/kotlin/compileKotlin/cacheable/caches-jvm/lookups/id-to-file.tab
new file mode 100644
index 0000000000000000000000000000000000000000..9c5916851c4922953b50b03e307438b959086638
Binary files /dev/null and b/2A/S3/quali_dev/tp8/build/kotlin/compileKotlin/cacheable/caches-jvm/lookups/id-to-file.tab differ
diff --git a/2A/S3/quali_dev/tp8/build/kotlin/compileKotlin/cacheable/caches-jvm/lookups/id-to-file.tab.keystream b/2A/S3/quali_dev/tp8/build/kotlin/compileKotlin/cacheable/caches-jvm/lookups/id-to-file.tab.keystream
new file mode 100644
index 0000000000000000000000000000000000000000..ce7188da39549309681eedb2dc965f1da0dfbdb7
Binary files /dev/null and b/2A/S3/quali_dev/tp8/build/kotlin/compileKotlin/cacheable/caches-jvm/lookups/id-to-file.tab.keystream differ
diff --git a/2A/S3/quali_dev/tp8/build/kotlin/compileKotlin/cacheable/caches-jvm/lookups/id-to-file.tab.keystream.len b/2A/S3/quali_dev/tp8/build/kotlin/compileKotlin/cacheable/caches-jvm/lookups/id-to-file.tab.keystream.len
new file mode 100644
index 0000000000000000000000000000000000000000..37934e8b875bb9b7452d1c5da923bac660c11d29
Binary files /dev/null and b/2A/S3/quali_dev/tp8/build/kotlin/compileKotlin/cacheable/caches-jvm/lookups/id-to-file.tab.keystream.len differ
diff --git a/2A/S3/quali_dev/tp8/build/kotlin/compileKotlin/cacheable/caches-jvm/lookups/id-to-file.tab.len b/2A/S3/quali_dev/tp8/build/kotlin/compileKotlin/cacheable/caches-jvm/lookups/id-to-file.tab.len
new file mode 100644
index 0000000000000000000000000000000000000000..6b9041b389271c0a666463266857524efecc943e
Binary files /dev/null and b/2A/S3/quali_dev/tp8/build/kotlin/compileKotlin/cacheable/caches-jvm/lookups/id-to-file.tab.len differ
diff --git a/2A/S3/quali_dev/tp8/build/kotlin/compileKotlin/cacheable/caches-jvm/lookups/id-to-file.tab.values.at b/2A/S3/quali_dev/tp8/build/kotlin/compileKotlin/cacheable/caches-jvm/lookups/id-to-file.tab.values.at
new file mode 100644
index 0000000000000000000000000000000000000000..a0a1d790a8aab607a8a2b6ba165647d84e90af57
Binary files /dev/null and b/2A/S3/quali_dev/tp8/build/kotlin/compileKotlin/cacheable/caches-jvm/lookups/id-to-file.tab.values.at differ
diff --git a/2A/S3/quali_dev/tp8/build/kotlin/compileKotlin/cacheable/caches-jvm/lookups/id-to-file.tab_i b/2A/S3/quali_dev/tp8/build/kotlin/compileKotlin/cacheable/caches-jvm/lookups/id-to-file.tab_i
new file mode 100644
index 0000000000000000000000000000000000000000..108d0fb8a292e2a6660f7a64d9e6a4d9ab81f91e
Binary files /dev/null and b/2A/S3/quali_dev/tp8/build/kotlin/compileKotlin/cacheable/caches-jvm/lookups/id-to-file.tab_i differ
diff --git a/2A/S3/quali_dev/tp8/build/kotlin/compileKotlin/cacheable/caches-jvm/lookups/id-to-file.tab_i.len b/2A/S3/quali_dev/tp8/build/kotlin/compileKotlin/cacheable/caches-jvm/lookups/id-to-file.tab_i.len
new file mode 100644
index 0000000000000000000000000000000000000000..131e265740f37d77b7c4a3676d2a7704ca3e4a29
Binary files /dev/null and b/2A/S3/quali_dev/tp8/build/kotlin/compileKotlin/cacheable/caches-jvm/lookups/id-to-file.tab_i.len differ
diff --git a/2A/S3/quali_dev/tp8/build/kotlin/compileKotlin/cacheable/caches-jvm/lookups/lookups.tab b/2A/S3/quali_dev/tp8/build/kotlin/compileKotlin/cacheable/caches-jvm/lookups/lookups.tab
new file mode 100644
index 0000000000000000000000000000000000000000..1e2f6f0ab4ea7a35fca59062e42e80cb9f0951e8
Binary files /dev/null and b/2A/S3/quali_dev/tp8/build/kotlin/compileKotlin/cacheable/caches-jvm/lookups/lookups.tab differ
diff --git a/2A/S3/quali_dev/tp8/build/kotlin/compileKotlin/cacheable/caches-jvm/lookups/lookups.tab.keystream b/2A/S3/quali_dev/tp8/build/kotlin/compileKotlin/cacheable/caches-jvm/lookups/lookups.tab.keystream
new file mode 100644
index 0000000000000000000000000000000000000000..1a6fa482491d14a1bc0a965c99a07a8c29499898
Binary files /dev/null and b/2A/S3/quali_dev/tp8/build/kotlin/compileKotlin/cacheable/caches-jvm/lookups/lookups.tab.keystream differ
diff --git a/2A/S3/quali_dev/tp8/build/kotlin/compileKotlin/cacheable/caches-jvm/lookups/lookups.tab.keystream.len b/2A/S3/quali_dev/tp8/build/kotlin/compileKotlin/cacheable/caches-jvm/lookups/lookups.tab.keystream.len
new file mode 100644
index 0000000000000000000000000000000000000000..ad009805732caee3ac7f5e5a76ef4330faffc89d
Binary files /dev/null and b/2A/S3/quali_dev/tp8/build/kotlin/compileKotlin/cacheable/caches-jvm/lookups/lookups.tab.keystream.len differ
diff --git a/2A/S3/quali_dev/tp8/build/kotlin/compileKotlin/cacheable/caches-jvm/lookups/lookups.tab.len b/2A/S3/quali_dev/tp8/build/kotlin/compileKotlin/cacheable/caches-jvm/lookups/lookups.tab.len
new file mode 100644
index 0000000000000000000000000000000000000000..3f4cd9bf7e76f6c5771bf8efcab1ef9b77e1349b
Binary files /dev/null and b/2A/S3/quali_dev/tp8/build/kotlin/compileKotlin/cacheable/caches-jvm/lookups/lookups.tab.len differ
diff --git a/2A/S3/quali_dev/tp8/build/kotlin/compileKotlin/cacheable/caches-jvm/lookups/lookups.tab.values b/2A/S3/quali_dev/tp8/build/kotlin/compileKotlin/cacheable/caches-jvm/lookups/lookups.tab.values
new file mode 100644
index 0000000000000000000000000000000000000000..cbda2cd5c5b590d7b23eb73523390780458f6bc4
Binary files /dev/null and b/2A/S3/quali_dev/tp8/build/kotlin/compileKotlin/cacheable/caches-jvm/lookups/lookups.tab.values differ
diff --git a/2A/S3/quali_dev/tp8/build/kotlin/compileKotlin/cacheable/caches-jvm/lookups/lookups.tab.values.at b/2A/S3/quali_dev/tp8/build/kotlin/compileKotlin/cacheable/caches-jvm/lookups/lookups.tab.values.at
new file mode 100644
index 0000000000000000000000000000000000000000..59704140fae27337a5c41223a9c3e6beb4466937
Binary files /dev/null and b/2A/S3/quali_dev/tp8/build/kotlin/compileKotlin/cacheable/caches-jvm/lookups/lookups.tab.values.at differ
diff --git a/2A/S3/quali_dev/tp8/build/kotlin/compileKotlin/cacheable/caches-jvm/lookups/lookups.tab.values.s b/2A/S3/quali_dev/tp8/build/kotlin/compileKotlin/cacheable/caches-jvm/lookups/lookups.tab.values.s
new file mode 100644
index 0000000000000000000000000000000000000000..8b063697922b527f161c1c9d309f3daea4d11644
--- /dev/null
+++ b/2A/S3/quali_dev/tp8/build/kotlin/compileKotlin/cacheable/caches-jvm/lookups/lookups.tab.values.s
@@ -0,0 +1 @@
+�_�a�b�b�_�\�\�\�Z�d�a�g�a�b�`�\�^�Z�Z�Z�f�n�q�r�r�t�q�x�x�z�|
\ No newline at end of file
diff --git a/2A/S3/quali_dev/tp8/build/kotlin/compileKotlin/cacheable/caches-jvm/lookups/lookups.tab_i b/2A/S3/quali_dev/tp8/build/kotlin/compileKotlin/cacheable/caches-jvm/lookups/lookups.tab_i
new file mode 100644
index 0000000000000000000000000000000000000000..49901582a63ad15efc91bd49f64998ce1581b2df
Binary files /dev/null and b/2A/S3/quali_dev/tp8/build/kotlin/compileKotlin/cacheable/caches-jvm/lookups/lookups.tab_i differ
diff --git a/2A/S3/quali_dev/tp8/build/kotlin/compileKotlin/cacheable/caches-jvm/lookups/lookups.tab_i.len b/2A/S3/quali_dev/tp8/build/kotlin/compileKotlin/cacheable/caches-jvm/lookups/lookups.tab_i.len
new file mode 100644
index 0000000000000000000000000000000000000000..131e265740f37d77b7c4a3676d2a7704ca3e4a29
Binary files /dev/null and b/2A/S3/quali_dev/tp8/build/kotlin/compileKotlin/cacheable/caches-jvm/lookups/lookups.tab_i.len differ
diff --git a/2A/S3/quali_dev/tp8/build/kotlin/compileKotlin/cacheable/last-build.bin b/2A/S3/quali_dev/tp8/build/kotlin/compileKotlin/cacheable/last-build.bin
new file mode 100644
index 0000000000000000000000000000000000000000..6e5c9c283773a361abe1ac9a3782e8c5747b4226
Binary files /dev/null and b/2A/S3/quali_dev/tp8/build/kotlin/compileKotlin/cacheable/last-build.bin differ
diff --git a/2A/S3/quali_dev/tp8/build/kotlin/compileKotlin/classpath-snapshot/shrunk-classpath-snapshot.bin b/2A/S3/quali_dev/tp8/build/kotlin/compileKotlin/classpath-snapshot/shrunk-classpath-snapshot.bin
new file mode 100644
index 0000000000000000000000000000000000000000..47e7f5a825ff1bf0a5a78503d8f17aefe34c10fb
Binary files /dev/null and b/2A/S3/quali_dev/tp8/build/kotlin/compileKotlin/classpath-snapshot/shrunk-classpath-snapshot.bin differ
diff --git a/2A/S3/quali_dev/tp8/build/kotlin/compileKotlin/local-state/build-history.bin b/2A/S3/quali_dev/tp8/build/kotlin/compileKotlin/local-state/build-history.bin
new file mode 100644
index 0000000000000000000000000000000000000000..b781fcd73c85305fe07648d00d4c72e29ebd3de5
Binary files /dev/null and b/2A/S3/quali_dev/tp8/build/kotlin/compileKotlin/local-state/build-history.bin differ
diff --git a/2A/S3/quali_dev/tp8/build/kotlin/compileTestKotlin/cacheable/caches-jvm/inputs/source-to-output.tab b/2A/S3/quali_dev/tp8/build/kotlin/compileTestKotlin/cacheable/caches-jvm/inputs/source-to-output.tab
new file mode 100644
index 0000000000000000000000000000000000000000..1715aa3a16ca5f5b01e0b5638d147792dddc89dc
Binary files /dev/null and b/2A/S3/quali_dev/tp8/build/kotlin/compileTestKotlin/cacheable/caches-jvm/inputs/source-to-output.tab differ
diff --git a/2A/S3/quali_dev/tp8/build/kotlin/compileTestKotlin/cacheable/caches-jvm/inputs/source-to-output.tab.keystream b/2A/S3/quali_dev/tp8/build/kotlin/compileTestKotlin/cacheable/caches-jvm/inputs/source-to-output.tab.keystream
new file mode 100644
index 0000000000000000000000000000000000000000..b0823208b326d544a906784476869531ad376c57
Binary files /dev/null and b/2A/S3/quali_dev/tp8/build/kotlin/compileTestKotlin/cacheable/caches-jvm/inputs/source-to-output.tab.keystream differ
diff --git a/2A/S3/quali_dev/tp8/build/kotlin/compileTestKotlin/cacheable/caches-jvm/inputs/source-to-output.tab.keystream.len b/2A/S3/quali_dev/tp8/build/kotlin/compileTestKotlin/cacheable/caches-jvm/inputs/source-to-output.tab.keystream.len
new file mode 100644
index 0000000000000000000000000000000000000000..8d7049ba83151a48ba0d33b00190c73eebb3104b
Binary files /dev/null and b/2A/S3/quali_dev/tp8/build/kotlin/compileTestKotlin/cacheable/caches-jvm/inputs/source-to-output.tab.keystream.len differ
diff --git a/2A/S3/quali_dev/tp8/build/kotlin/compileTestKotlin/cacheable/caches-jvm/inputs/source-to-output.tab.len b/2A/S3/quali_dev/tp8/build/kotlin/compileTestKotlin/cacheable/caches-jvm/inputs/source-to-output.tab.len
new file mode 100644
index 0000000000000000000000000000000000000000..9e27f732fe29db9f82162c1114700ef23f6ac174
Binary files /dev/null and b/2A/S3/quali_dev/tp8/build/kotlin/compileTestKotlin/cacheable/caches-jvm/inputs/source-to-output.tab.len differ
diff --git a/2A/S3/quali_dev/tp8/build/kotlin/compileTestKotlin/cacheable/caches-jvm/inputs/source-to-output.tab.values b/2A/S3/quali_dev/tp8/build/kotlin/compileTestKotlin/cacheable/caches-jvm/inputs/source-to-output.tab.values
new file mode 100644
index 0000000000000000000000000000000000000000..440515993971ea44f01fc976b032451e5cd23c94
Binary files /dev/null and b/2A/S3/quali_dev/tp8/build/kotlin/compileTestKotlin/cacheable/caches-jvm/inputs/source-to-output.tab.values differ
diff --git a/2A/S3/quali_dev/tp8/build/kotlin/compileTestKotlin/cacheable/caches-jvm/inputs/source-to-output.tab.values.at b/2A/S3/quali_dev/tp8/build/kotlin/compileTestKotlin/cacheable/caches-jvm/inputs/source-to-output.tab.values.at
new file mode 100644
index 0000000000000000000000000000000000000000..0122e37326faed3edc4153bbd692dd60bf3f0a3f
Binary files /dev/null and b/2A/S3/quali_dev/tp8/build/kotlin/compileTestKotlin/cacheable/caches-jvm/inputs/source-to-output.tab.values.at differ
diff --git a/2A/S3/quali_dev/tp8/build/kotlin/compileTestKotlin/cacheable/caches-jvm/inputs/source-to-output.tab.values.s b/2A/S3/quali_dev/tp8/build/kotlin/compileTestKotlin/cacheable/caches-jvm/inputs/source-to-output.tab.values.s
new file mode 100644
index 0000000000000000000000000000000000000000..70f83d029067dbd575e5f6a1064a53add0ce7498
--- /dev/null
+++ b/2A/S3/quali_dev/tp8/build/kotlin/compileTestKotlin/cacheable/caches-jvm/inputs/source-to-output.tab.values.s
@@ -0,0 +1 @@
+�����������
\ No newline at end of file
diff --git a/2A/S3/quali_dev/tp8/build/kotlin/compileTestKotlin/cacheable/caches-jvm/inputs/source-to-output.tab_i b/2A/S3/quali_dev/tp8/build/kotlin/compileTestKotlin/cacheable/caches-jvm/inputs/source-to-output.tab_i
new file mode 100644
index 0000000000000000000000000000000000000000..b59e82c3d88bc678cd37672807f303b38dfbe489
Binary files /dev/null and b/2A/S3/quali_dev/tp8/build/kotlin/compileTestKotlin/cacheable/caches-jvm/inputs/source-to-output.tab_i differ
diff --git a/2A/S3/quali_dev/tp8/build/kotlin/compileTestKotlin/cacheable/caches-jvm/inputs/source-to-output.tab_i.len b/2A/S3/quali_dev/tp8/build/kotlin/compileTestKotlin/cacheable/caches-jvm/inputs/source-to-output.tab_i.len
new file mode 100644
index 0000000000000000000000000000000000000000..131e265740f37d77b7c4a3676d2a7704ca3e4a29
Binary files /dev/null and b/2A/S3/quali_dev/tp8/build/kotlin/compileTestKotlin/cacheable/caches-jvm/inputs/source-to-output.tab_i.len differ
diff --git a/2A/S3/quali_dev/tp8/build/kotlin/compileTestKotlin/cacheable/caches-jvm/jvm/kotlin/class-attributes.tab b/2A/S3/quali_dev/tp8/build/kotlin/compileTestKotlin/cacheable/caches-jvm/jvm/kotlin/class-attributes.tab
new file mode 100644
index 0000000000000000000000000000000000000000..6ba2cb07a84187ebad9186940ba1a77137d77d0f
Binary files /dev/null and b/2A/S3/quali_dev/tp8/build/kotlin/compileTestKotlin/cacheable/caches-jvm/jvm/kotlin/class-attributes.tab differ
diff --git a/2A/S3/quali_dev/tp8/build/kotlin/compileTestKotlin/cacheable/caches-jvm/jvm/kotlin/class-attributes.tab.keystream b/2A/S3/quali_dev/tp8/build/kotlin/compileTestKotlin/cacheable/caches-jvm/jvm/kotlin/class-attributes.tab.keystream
new file mode 100644
index 0000000000000000000000000000000000000000..60b955aff239a51b263271bb62a6360d872f9806
Binary files /dev/null and b/2A/S3/quali_dev/tp8/build/kotlin/compileTestKotlin/cacheable/caches-jvm/jvm/kotlin/class-attributes.tab.keystream differ
diff --git a/2A/S3/quali_dev/tp8/build/kotlin/compileTestKotlin/cacheable/caches-jvm/jvm/kotlin/class-attributes.tab.keystream.len b/2A/S3/quali_dev/tp8/build/kotlin/compileTestKotlin/cacheable/caches-jvm/jvm/kotlin/class-attributes.tab.keystream.len
new file mode 100644
index 0000000000000000000000000000000000000000..38ea6f580bb25dee4722cd6fadd958c2db73cbf1
Binary files /dev/null and b/2A/S3/quali_dev/tp8/build/kotlin/compileTestKotlin/cacheable/caches-jvm/jvm/kotlin/class-attributes.tab.keystream.len differ
diff --git a/2A/S3/quali_dev/tp8/build/kotlin/compileTestKotlin/cacheable/caches-jvm/jvm/kotlin/class-attributes.tab.len b/2A/S3/quali_dev/tp8/build/kotlin/compileTestKotlin/cacheable/caches-jvm/jvm/kotlin/class-attributes.tab.len
new file mode 100644
index 0000000000000000000000000000000000000000..b797c4d2ee86fd517925c6dfd186e4c359366499
Binary files /dev/null and b/2A/S3/quali_dev/tp8/build/kotlin/compileTestKotlin/cacheable/caches-jvm/jvm/kotlin/class-attributes.tab.len differ
diff --git a/2A/S3/quali_dev/tp8/build/kotlin/compileTestKotlin/cacheable/caches-jvm/jvm/kotlin/class-attributes.tab.values.at b/2A/S3/quali_dev/tp8/build/kotlin/compileTestKotlin/cacheable/caches-jvm/jvm/kotlin/class-attributes.tab.values.at
new file mode 100644
index 0000000000000000000000000000000000000000..21cefa3239868a8c6a0d753955bc7e45ed18e591
Binary files /dev/null and b/2A/S3/quali_dev/tp8/build/kotlin/compileTestKotlin/cacheable/caches-jvm/jvm/kotlin/class-attributes.tab.values.at differ
diff --git a/2A/S3/quali_dev/tp8/build/kotlin/compileTestKotlin/cacheable/caches-jvm/jvm/kotlin/class-attributes.tab_i b/2A/S3/quali_dev/tp8/build/kotlin/compileTestKotlin/cacheable/caches-jvm/jvm/kotlin/class-attributes.tab_i
new file mode 100644
index 0000000000000000000000000000000000000000..d3701a3f9494785b25f879774eb73792f44d3ced
Binary files /dev/null and b/2A/S3/quali_dev/tp8/build/kotlin/compileTestKotlin/cacheable/caches-jvm/jvm/kotlin/class-attributes.tab_i differ
diff --git a/2A/S3/quali_dev/tp8/build/kotlin/compileTestKotlin/cacheable/caches-jvm/jvm/kotlin/class-attributes.tab_i.len b/2A/S3/quali_dev/tp8/build/kotlin/compileTestKotlin/cacheable/caches-jvm/jvm/kotlin/class-attributes.tab_i.len
new file mode 100644
index 0000000000000000000000000000000000000000..131e265740f37d77b7c4a3676d2a7704ca3e4a29
Binary files /dev/null and b/2A/S3/quali_dev/tp8/build/kotlin/compileTestKotlin/cacheable/caches-jvm/jvm/kotlin/class-attributes.tab_i.len differ
diff --git a/2A/S3/quali_dev/tp8/build/kotlin/compileTestKotlin/cacheable/caches-jvm/jvm/kotlin/class-fq-name-to-source.tab b/2A/S3/quali_dev/tp8/build/kotlin/compileTestKotlin/cacheable/caches-jvm/jvm/kotlin/class-fq-name-to-source.tab
new file mode 100644
index 0000000000000000000000000000000000000000..3e56d1fb3f52f841261c10f76854bee25ba22599
Binary files /dev/null and b/2A/S3/quali_dev/tp8/build/kotlin/compileTestKotlin/cacheable/caches-jvm/jvm/kotlin/class-fq-name-to-source.tab differ
diff --git a/2A/S3/quali_dev/tp8/build/kotlin/compileTestKotlin/cacheable/caches-jvm/jvm/kotlin/class-fq-name-to-source.tab.keystream b/2A/S3/quali_dev/tp8/build/kotlin/compileTestKotlin/cacheable/caches-jvm/jvm/kotlin/class-fq-name-to-source.tab.keystream
new file mode 100644
index 0000000000000000000000000000000000000000..60b955aff239a51b263271bb62a6360d872f9806
Binary files /dev/null and b/2A/S3/quali_dev/tp8/build/kotlin/compileTestKotlin/cacheable/caches-jvm/jvm/kotlin/class-fq-name-to-source.tab.keystream differ
diff --git a/2A/S3/quali_dev/tp8/build/kotlin/compileTestKotlin/cacheable/caches-jvm/jvm/kotlin/class-fq-name-to-source.tab.keystream.len b/2A/S3/quali_dev/tp8/build/kotlin/compileTestKotlin/cacheable/caches-jvm/jvm/kotlin/class-fq-name-to-source.tab.keystream.len
new file mode 100644
index 0000000000000000000000000000000000000000..38ea6f580bb25dee4722cd6fadd958c2db73cbf1
Binary files /dev/null and b/2A/S3/quali_dev/tp8/build/kotlin/compileTestKotlin/cacheable/caches-jvm/jvm/kotlin/class-fq-name-to-source.tab.keystream.len differ
diff --git a/2A/S3/quali_dev/tp8/build/kotlin/compileTestKotlin/cacheable/caches-jvm/jvm/kotlin/class-fq-name-to-source.tab.len b/2A/S3/quali_dev/tp8/build/kotlin/compileTestKotlin/cacheable/caches-jvm/jvm/kotlin/class-fq-name-to-source.tab.len
new file mode 100644
index 0000000000000000000000000000000000000000..b797c4d2ee86fd517925c6dfd186e4c359366499
Binary files /dev/null and b/2A/S3/quali_dev/tp8/build/kotlin/compileTestKotlin/cacheable/caches-jvm/jvm/kotlin/class-fq-name-to-source.tab.len differ
diff --git a/2A/S3/quali_dev/tp8/build/kotlin/compileTestKotlin/cacheable/caches-jvm/jvm/kotlin/class-fq-name-to-source.tab.values.at b/2A/S3/quali_dev/tp8/build/kotlin/compileTestKotlin/cacheable/caches-jvm/jvm/kotlin/class-fq-name-to-source.tab.values.at
new file mode 100644
index 0000000000000000000000000000000000000000..4288ad15360d122591762df94b5186fbeeb73da6
Binary files /dev/null and b/2A/S3/quali_dev/tp8/build/kotlin/compileTestKotlin/cacheable/caches-jvm/jvm/kotlin/class-fq-name-to-source.tab.values.at differ
diff --git a/2A/S3/quali_dev/tp8/build/kotlin/compileTestKotlin/cacheable/caches-jvm/jvm/kotlin/class-fq-name-to-source.tab_i b/2A/S3/quali_dev/tp8/build/kotlin/compileTestKotlin/cacheable/caches-jvm/jvm/kotlin/class-fq-name-to-source.tab_i
new file mode 100644
index 0000000000000000000000000000000000000000..d3701a3f9494785b25f879774eb73792f44d3ced
Binary files /dev/null and b/2A/S3/quali_dev/tp8/build/kotlin/compileTestKotlin/cacheable/caches-jvm/jvm/kotlin/class-fq-name-to-source.tab_i differ
diff --git a/2A/S3/quali_dev/tp8/build/kotlin/compileTestKotlin/cacheable/caches-jvm/jvm/kotlin/class-fq-name-to-source.tab_i.len b/2A/S3/quali_dev/tp8/build/kotlin/compileTestKotlin/cacheable/caches-jvm/jvm/kotlin/class-fq-name-to-source.tab_i.len
new file mode 100644
index 0000000000000000000000000000000000000000..131e265740f37d77b7c4a3676d2a7704ca3e4a29
Binary files /dev/null and b/2A/S3/quali_dev/tp8/build/kotlin/compileTestKotlin/cacheable/caches-jvm/jvm/kotlin/class-fq-name-to-source.tab_i.len differ
diff --git a/2A/S3/quali_dev/tp8/build/kotlin/compileTestKotlin/cacheable/caches-jvm/jvm/kotlin/internal-name-to-source.tab b/2A/S3/quali_dev/tp8/build/kotlin/compileTestKotlin/cacheable/caches-jvm/jvm/kotlin/internal-name-to-source.tab
new file mode 100644
index 0000000000000000000000000000000000000000..4f8f55756252dc6946bf90c1c3692b6639f772d6
Binary files /dev/null and b/2A/S3/quali_dev/tp8/build/kotlin/compileTestKotlin/cacheable/caches-jvm/jvm/kotlin/internal-name-to-source.tab differ
diff --git a/2A/S3/quali_dev/tp8/build/kotlin/compileTestKotlin/cacheable/caches-jvm/jvm/kotlin/internal-name-to-source.tab.keystream b/2A/S3/quali_dev/tp8/build/kotlin/compileTestKotlin/cacheable/caches-jvm/jvm/kotlin/internal-name-to-source.tab.keystream
new file mode 100644
index 0000000000000000000000000000000000000000..4e69a80626ca8034f9423dc6c60bc21c63e6f058
Binary files /dev/null and b/2A/S3/quali_dev/tp8/build/kotlin/compileTestKotlin/cacheable/caches-jvm/jvm/kotlin/internal-name-to-source.tab.keystream differ
diff --git a/2A/S3/quali_dev/tp8/build/kotlin/compileTestKotlin/cacheable/caches-jvm/jvm/kotlin/internal-name-to-source.tab.keystream.len b/2A/S3/quali_dev/tp8/build/kotlin/compileTestKotlin/cacheable/caches-jvm/jvm/kotlin/internal-name-to-source.tab.keystream.len
new file mode 100644
index 0000000000000000000000000000000000000000..ece2881a4a77e043160e8757cd6daf23d81dab77
Binary files /dev/null and b/2A/S3/quali_dev/tp8/build/kotlin/compileTestKotlin/cacheable/caches-jvm/jvm/kotlin/internal-name-to-source.tab.keystream.len differ
diff --git a/2A/S3/quali_dev/tp8/build/kotlin/compileTestKotlin/cacheable/caches-jvm/jvm/kotlin/internal-name-to-source.tab.len b/2A/S3/quali_dev/tp8/build/kotlin/compileTestKotlin/cacheable/caches-jvm/jvm/kotlin/internal-name-to-source.tab.len
new file mode 100644
index 0000000000000000000000000000000000000000..199a5a0aa0a49eefc9286e60888a7e6405a3d3ed
Binary files /dev/null and b/2A/S3/quali_dev/tp8/build/kotlin/compileTestKotlin/cacheable/caches-jvm/jvm/kotlin/internal-name-to-source.tab.len differ
diff --git a/2A/S3/quali_dev/tp8/build/kotlin/compileTestKotlin/cacheable/caches-jvm/jvm/kotlin/internal-name-to-source.tab.values b/2A/S3/quali_dev/tp8/build/kotlin/compileTestKotlin/cacheable/caches-jvm/jvm/kotlin/internal-name-to-source.tab.values
new file mode 100644
index 0000000000000000000000000000000000000000..0c17feee58f28d502c44fe4cc96e236fe5e25003
Binary files /dev/null and b/2A/S3/quali_dev/tp8/build/kotlin/compileTestKotlin/cacheable/caches-jvm/jvm/kotlin/internal-name-to-source.tab.values differ
diff --git a/2A/S3/quali_dev/tp8/build/kotlin/compileTestKotlin/cacheable/caches-jvm/jvm/kotlin/internal-name-to-source.tab.values.at b/2A/S3/quali_dev/tp8/build/kotlin/compileTestKotlin/cacheable/caches-jvm/jvm/kotlin/internal-name-to-source.tab.values.at
new file mode 100644
index 0000000000000000000000000000000000000000..b9cef7e83b8d38e9edd739b2313c4ee31f5f85bd
Binary files /dev/null and b/2A/S3/quali_dev/tp8/build/kotlin/compileTestKotlin/cacheable/caches-jvm/jvm/kotlin/internal-name-to-source.tab.values.at differ
diff --git a/2A/S3/quali_dev/tp8/build/kotlin/compileTestKotlin/cacheable/caches-jvm/jvm/kotlin/internal-name-to-source.tab.values.s b/2A/S3/quali_dev/tp8/build/kotlin/compileTestKotlin/cacheable/caches-jvm/jvm/kotlin/internal-name-to-source.tab.values.s
new file mode 100644
index 0000000000000000000000000000000000000000..e0ae83519d22e7e57cd7736df5269710c3c15e34
--- /dev/null
+++ b/2A/S3/quali_dev/tp8/build/kotlin/compileTestKotlin/cacheable/caches-jvm/jvm/kotlin/internal-name-to-source.tab.values.s
@@ -0,0 +1 @@
+�������
\ No newline at end of file
diff --git a/2A/S3/quali_dev/tp8/build/kotlin/compileTestKotlin/cacheable/caches-jvm/jvm/kotlin/internal-name-to-source.tab_i b/2A/S3/quali_dev/tp8/build/kotlin/compileTestKotlin/cacheable/caches-jvm/jvm/kotlin/internal-name-to-source.tab_i
new file mode 100644
index 0000000000000000000000000000000000000000..937da0614e99b0e89fbdac65f7554702481754bc
Binary files /dev/null and b/2A/S3/quali_dev/tp8/build/kotlin/compileTestKotlin/cacheable/caches-jvm/jvm/kotlin/internal-name-to-source.tab_i differ
diff --git a/2A/S3/quali_dev/tp8/build/kotlin/compileTestKotlin/cacheable/caches-jvm/jvm/kotlin/internal-name-to-source.tab_i.len b/2A/S3/quali_dev/tp8/build/kotlin/compileTestKotlin/cacheable/caches-jvm/jvm/kotlin/internal-name-to-source.tab_i.len
new file mode 100644
index 0000000000000000000000000000000000000000..131e265740f37d77b7c4a3676d2a7704ca3e4a29
Binary files /dev/null and b/2A/S3/quali_dev/tp8/build/kotlin/compileTestKotlin/cacheable/caches-jvm/jvm/kotlin/internal-name-to-source.tab_i.len differ
diff --git a/2A/S3/quali_dev/tp8/build/kotlin/compileTestKotlin/cacheable/caches-jvm/jvm/kotlin/proto.tab b/2A/S3/quali_dev/tp8/build/kotlin/compileTestKotlin/cacheable/caches-jvm/jvm/kotlin/proto.tab
new file mode 100644
index 0000000000000000000000000000000000000000..8d69eb6b22c4306e2d9773513264b1e1cfcb0e20
Binary files /dev/null and b/2A/S3/quali_dev/tp8/build/kotlin/compileTestKotlin/cacheable/caches-jvm/jvm/kotlin/proto.tab differ
diff --git a/2A/S3/quali_dev/tp8/build/kotlin/compileTestKotlin/cacheable/caches-jvm/jvm/kotlin/proto.tab.keystream b/2A/S3/quali_dev/tp8/build/kotlin/compileTestKotlin/cacheable/caches-jvm/jvm/kotlin/proto.tab.keystream
new file mode 100644
index 0000000000000000000000000000000000000000..1e9fa412a7060051024ef9f6580353d1faaeb0d0
Binary files /dev/null and b/2A/S3/quali_dev/tp8/build/kotlin/compileTestKotlin/cacheable/caches-jvm/jvm/kotlin/proto.tab.keystream differ
diff --git a/2A/S3/quali_dev/tp8/build/kotlin/compileTestKotlin/cacheable/caches-jvm/jvm/kotlin/proto.tab.keystream.len b/2A/S3/quali_dev/tp8/build/kotlin/compileTestKotlin/cacheable/caches-jvm/jvm/kotlin/proto.tab.keystream.len
new file mode 100644
index 0000000000000000000000000000000000000000..d9cd00c240771887b710ee1426b3d76b2108083f
Binary files /dev/null and b/2A/S3/quali_dev/tp8/build/kotlin/compileTestKotlin/cacheable/caches-jvm/jvm/kotlin/proto.tab.keystream.len differ
diff --git a/2A/S3/quali_dev/tp8/build/kotlin/compileTestKotlin/cacheable/caches-jvm/jvm/kotlin/proto.tab.len b/2A/S3/quali_dev/tp8/build/kotlin/compileTestKotlin/cacheable/caches-jvm/jvm/kotlin/proto.tab.len
new file mode 100644
index 0000000000000000000000000000000000000000..1b7c1f8b1c5305091abf1576128bd7f449f9f1fd
Binary files /dev/null and b/2A/S3/quali_dev/tp8/build/kotlin/compileTestKotlin/cacheable/caches-jvm/jvm/kotlin/proto.tab.len differ
diff --git a/2A/S3/quali_dev/tp8/build/kotlin/compileTestKotlin/cacheable/caches-jvm/jvm/kotlin/proto.tab.values b/2A/S3/quali_dev/tp8/build/kotlin/compileTestKotlin/cacheable/caches-jvm/jvm/kotlin/proto.tab.values
new file mode 100644
index 0000000000000000000000000000000000000000..fc082c81969c70a339c2390d1eb037532e2d5efd
Binary files /dev/null and b/2A/S3/quali_dev/tp8/build/kotlin/compileTestKotlin/cacheable/caches-jvm/jvm/kotlin/proto.tab.values differ
diff --git a/2A/S3/quali_dev/tp8/build/kotlin/compileTestKotlin/cacheable/caches-jvm/jvm/kotlin/proto.tab.values.at b/2A/S3/quali_dev/tp8/build/kotlin/compileTestKotlin/cacheable/caches-jvm/jvm/kotlin/proto.tab.values.at
new file mode 100644
index 0000000000000000000000000000000000000000..88194829993771ef7bf0343252b2c940e200cca1
Binary files /dev/null and b/2A/S3/quali_dev/tp8/build/kotlin/compileTestKotlin/cacheable/caches-jvm/jvm/kotlin/proto.tab.values.at differ
diff --git a/2A/S3/quali_dev/tp8/build/kotlin/compileTestKotlin/cacheable/caches-jvm/jvm/kotlin/proto.tab.values.s b/2A/S3/quali_dev/tp8/build/kotlin/compileTestKotlin/cacheable/caches-jvm/jvm/kotlin/proto.tab.values.s
new file mode 100644
index 0000000000000000000000000000000000000000..3a4037e01df61267269161acc05efdab018b6434
--- /dev/null
+++ b/2A/S3/quali_dev/tp8/build/kotlin/compileTestKotlin/cacheable/caches-jvm/jvm/kotlin/proto.tab.values.s
@@ -0,0 +1 @@
+�4�5�5�6�6�;�;�;�;�;�;�@�@�@�@�A�E�?�?
\ No newline at end of file
diff --git a/2A/S3/quali_dev/tp8/build/kotlin/compileTestKotlin/cacheable/caches-jvm/jvm/kotlin/proto.tab_i b/2A/S3/quali_dev/tp8/build/kotlin/compileTestKotlin/cacheable/caches-jvm/jvm/kotlin/proto.tab_i
new file mode 100644
index 0000000000000000000000000000000000000000..3fd5403427f068f56cac12d4cdd5f7c68a2ed22b
Binary files /dev/null and b/2A/S3/quali_dev/tp8/build/kotlin/compileTestKotlin/cacheable/caches-jvm/jvm/kotlin/proto.tab_i differ
diff --git a/2A/S3/quali_dev/tp8/build/kotlin/compileTestKotlin/cacheable/caches-jvm/jvm/kotlin/proto.tab_i.len b/2A/S3/quali_dev/tp8/build/kotlin/compileTestKotlin/cacheable/caches-jvm/jvm/kotlin/proto.tab_i.len
new file mode 100644
index 0000000000000000000000000000000000000000..131e265740f37d77b7c4a3676d2a7704ca3e4a29
Binary files /dev/null and b/2A/S3/quali_dev/tp8/build/kotlin/compileTestKotlin/cacheable/caches-jvm/jvm/kotlin/proto.tab_i.len differ
diff --git a/2A/S3/quali_dev/tp8/build/kotlin/compileTestKotlin/cacheable/caches-jvm/jvm/kotlin/source-to-classes.tab b/2A/S3/quali_dev/tp8/build/kotlin/compileTestKotlin/cacheable/caches-jvm/jvm/kotlin/source-to-classes.tab
new file mode 100644
index 0000000000000000000000000000000000000000..ce69569ef79435a10c7b22dc0932d783388ecbcb
Binary files /dev/null and b/2A/S3/quali_dev/tp8/build/kotlin/compileTestKotlin/cacheable/caches-jvm/jvm/kotlin/source-to-classes.tab differ
diff --git a/2A/S3/quali_dev/tp8/build/kotlin/compileTestKotlin/cacheable/caches-jvm/jvm/kotlin/source-to-classes.tab.keystream b/2A/S3/quali_dev/tp8/build/kotlin/compileTestKotlin/cacheable/caches-jvm/jvm/kotlin/source-to-classes.tab.keystream
new file mode 100644
index 0000000000000000000000000000000000000000..c728f56d46f11f49de25968df3092f2cb0807184
Binary files /dev/null and b/2A/S3/quali_dev/tp8/build/kotlin/compileTestKotlin/cacheable/caches-jvm/jvm/kotlin/source-to-classes.tab.keystream differ
diff --git a/2A/S3/quali_dev/tp8/build/kotlin/compileTestKotlin/cacheable/caches-jvm/jvm/kotlin/source-to-classes.tab.keystream.len b/2A/S3/quali_dev/tp8/build/kotlin/compileTestKotlin/cacheable/caches-jvm/jvm/kotlin/source-to-classes.tab.keystream.len
new file mode 100644
index 0000000000000000000000000000000000000000..8d7049ba83151a48ba0d33b00190c73eebb3104b
Binary files /dev/null and b/2A/S3/quali_dev/tp8/build/kotlin/compileTestKotlin/cacheable/caches-jvm/jvm/kotlin/source-to-classes.tab.keystream.len differ
diff --git a/2A/S3/quali_dev/tp8/build/kotlin/compileTestKotlin/cacheable/caches-jvm/jvm/kotlin/source-to-classes.tab.len b/2A/S3/quali_dev/tp8/build/kotlin/compileTestKotlin/cacheable/caches-jvm/jvm/kotlin/source-to-classes.tab.len
new file mode 100644
index 0000000000000000000000000000000000000000..9e27f732fe29db9f82162c1114700ef23f6ac174
Binary files /dev/null and b/2A/S3/quali_dev/tp8/build/kotlin/compileTestKotlin/cacheable/caches-jvm/jvm/kotlin/source-to-classes.tab.len differ
diff --git a/2A/S3/quali_dev/tp8/build/kotlin/compileTestKotlin/cacheable/caches-jvm/jvm/kotlin/source-to-classes.tab.values.at b/2A/S3/quali_dev/tp8/build/kotlin/compileTestKotlin/cacheable/caches-jvm/jvm/kotlin/source-to-classes.tab.values.at
new file mode 100644
index 0000000000000000000000000000000000000000..367f692b0d5da43f47e06a2c993df778430d176c
Binary files /dev/null and b/2A/S3/quali_dev/tp8/build/kotlin/compileTestKotlin/cacheable/caches-jvm/jvm/kotlin/source-to-classes.tab.values.at differ
diff --git a/2A/S3/quali_dev/tp8/build/kotlin/compileTestKotlin/cacheable/caches-jvm/jvm/kotlin/source-to-classes.tab_i b/2A/S3/quali_dev/tp8/build/kotlin/compileTestKotlin/cacheable/caches-jvm/jvm/kotlin/source-to-classes.tab_i
new file mode 100644
index 0000000000000000000000000000000000000000..47eb3a2e41467b1ba411e5040d3b86767c7cf514
Binary files /dev/null and b/2A/S3/quali_dev/tp8/build/kotlin/compileTestKotlin/cacheable/caches-jvm/jvm/kotlin/source-to-classes.tab_i differ
diff --git a/2A/S3/quali_dev/tp8/build/kotlin/compileTestKotlin/cacheable/caches-jvm/jvm/kotlin/source-to-classes.tab_i.len b/2A/S3/quali_dev/tp8/build/kotlin/compileTestKotlin/cacheable/caches-jvm/jvm/kotlin/source-to-classes.tab_i.len
new file mode 100644
index 0000000000000000000000000000000000000000..131e265740f37d77b7c4a3676d2a7704ca3e4a29
Binary files /dev/null and b/2A/S3/quali_dev/tp8/build/kotlin/compileTestKotlin/cacheable/caches-jvm/jvm/kotlin/source-to-classes.tab_i.len differ
diff --git a/2A/S3/quali_dev/tp8/build/kotlin/compileTestKotlin/cacheable/caches-jvm/jvm/kotlin/subtypes.tab b/2A/S3/quali_dev/tp8/build/kotlin/compileTestKotlin/cacheable/caches-jvm/jvm/kotlin/subtypes.tab
new file mode 100644
index 0000000000000000000000000000000000000000..1aea1ddff70a60a993a2e09f33e4f043919a7bb8
Binary files /dev/null and b/2A/S3/quali_dev/tp8/build/kotlin/compileTestKotlin/cacheable/caches-jvm/jvm/kotlin/subtypes.tab differ
diff --git a/2A/S3/quali_dev/tp8/build/kotlin/compileTestKotlin/cacheable/caches-jvm/jvm/kotlin/subtypes.tab.keystream b/2A/S3/quali_dev/tp8/build/kotlin/compileTestKotlin/cacheable/caches-jvm/jvm/kotlin/subtypes.tab.keystream
new file mode 100644
index 0000000000000000000000000000000000000000..9e2c165a0c9cc8f19517eed8dcc4324c0db6b5d4
Binary files /dev/null and b/2A/S3/quali_dev/tp8/build/kotlin/compileTestKotlin/cacheable/caches-jvm/jvm/kotlin/subtypes.tab.keystream differ
diff --git a/2A/S3/quali_dev/tp8/build/kotlin/compileTestKotlin/cacheable/caches-jvm/jvm/kotlin/subtypes.tab.keystream.len b/2A/S3/quali_dev/tp8/build/kotlin/compileTestKotlin/cacheable/caches-jvm/jvm/kotlin/subtypes.tab.keystream.len
new file mode 100644
index 0000000000000000000000000000000000000000..3d52cad622663e3861b0472ac5ed22310d39a33a
Binary files /dev/null and b/2A/S3/quali_dev/tp8/build/kotlin/compileTestKotlin/cacheable/caches-jvm/jvm/kotlin/subtypes.tab.keystream.len differ
diff --git a/2A/S3/quali_dev/tp8/build/kotlin/compileTestKotlin/cacheable/caches-jvm/jvm/kotlin/subtypes.tab.len b/2A/S3/quali_dev/tp8/build/kotlin/compileTestKotlin/cacheable/caches-jvm/jvm/kotlin/subtypes.tab.len
new file mode 100644
index 0000000000000000000000000000000000000000..2a17e6e5bd9e7704741c2a3ae485eb2d2e302b87
Binary files /dev/null and b/2A/S3/quali_dev/tp8/build/kotlin/compileTestKotlin/cacheable/caches-jvm/jvm/kotlin/subtypes.tab.len differ
diff --git a/2A/S3/quali_dev/tp8/build/kotlin/compileTestKotlin/cacheable/caches-jvm/jvm/kotlin/subtypes.tab.values.at b/2A/S3/quali_dev/tp8/build/kotlin/compileTestKotlin/cacheable/caches-jvm/jvm/kotlin/subtypes.tab.values.at
new file mode 100644
index 0000000000000000000000000000000000000000..4406a8cc5a54db2c1d9430745581bd5c8ceaac45
Binary files /dev/null and b/2A/S3/quali_dev/tp8/build/kotlin/compileTestKotlin/cacheable/caches-jvm/jvm/kotlin/subtypes.tab.values.at differ
diff --git a/2A/S3/quali_dev/tp8/build/kotlin/compileTestKotlin/cacheable/caches-jvm/jvm/kotlin/subtypes.tab_i b/2A/S3/quali_dev/tp8/build/kotlin/compileTestKotlin/cacheable/caches-jvm/jvm/kotlin/subtypes.tab_i
new file mode 100644
index 0000000000000000000000000000000000000000..d659b65bd37557f12b074a4b136df0ac590133c1
Binary files /dev/null and b/2A/S3/quali_dev/tp8/build/kotlin/compileTestKotlin/cacheable/caches-jvm/jvm/kotlin/subtypes.tab_i differ
diff --git a/2A/S3/quali_dev/tp8/build/kotlin/compileTestKotlin/cacheable/caches-jvm/jvm/kotlin/subtypes.tab_i.len b/2A/S3/quali_dev/tp8/build/kotlin/compileTestKotlin/cacheable/caches-jvm/jvm/kotlin/subtypes.tab_i.len
new file mode 100644
index 0000000000000000000000000000000000000000..131e265740f37d77b7c4a3676d2a7704ca3e4a29
Binary files /dev/null and b/2A/S3/quali_dev/tp8/build/kotlin/compileTestKotlin/cacheable/caches-jvm/jvm/kotlin/subtypes.tab_i.len differ
diff --git a/2A/S3/quali_dev/tp8/build/kotlin/compileTestKotlin/cacheable/caches-jvm/jvm/kotlin/supertypes.tab b/2A/S3/quali_dev/tp8/build/kotlin/compileTestKotlin/cacheable/caches-jvm/jvm/kotlin/supertypes.tab
new file mode 100644
index 0000000000000000000000000000000000000000..74bd0765ca6a077814b6a3f0cb98d6543051a8f7
Binary files /dev/null and b/2A/S3/quali_dev/tp8/build/kotlin/compileTestKotlin/cacheable/caches-jvm/jvm/kotlin/supertypes.tab differ
diff --git a/2A/S3/quali_dev/tp8/build/kotlin/compileTestKotlin/cacheable/caches-jvm/jvm/kotlin/supertypes.tab.keystream b/2A/S3/quali_dev/tp8/build/kotlin/compileTestKotlin/cacheable/caches-jvm/jvm/kotlin/supertypes.tab.keystream
new file mode 100644
index 0000000000000000000000000000000000000000..ec3d3a1e94be03a0ca7988d8df01c649d9c99f59
Binary files /dev/null and b/2A/S3/quali_dev/tp8/build/kotlin/compileTestKotlin/cacheable/caches-jvm/jvm/kotlin/supertypes.tab.keystream differ
diff --git a/2A/S3/quali_dev/tp8/build/kotlin/compileTestKotlin/cacheable/caches-jvm/jvm/kotlin/supertypes.tab.keystream.len b/2A/S3/quali_dev/tp8/build/kotlin/compileTestKotlin/cacheable/caches-jvm/jvm/kotlin/supertypes.tab.keystream.len
new file mode 100644
index 0000000000000000000000000000000000000000..ea86de33a6281636ab664c6ce8eaac1218fe11ca
Binary files /dev/null and b/2A/S3/quali_dev/tp8/build/kotlin/compileTestKotlin/cacheable/caches-jvm/jvm/kotlin/supertypes.tab.keystream.len differ
diff --git a/2A/S3/quali_dev/tp8/build/kotlin/compileTestKotlin/cacheable/caches-jvm/jvm/kotlin/supertypes.tab.len b/2A/S3/quali_dev/tp8/build/kotlin/compileTestKotlin/cacheable/caches-jvm/jvm/kotlin/supertypes.tab.len
new file mode 100644
index 0000000000000000000000000000000000000000..eb0b8a069dd4fe98c3148ae79618cb3e6ef0b6db
Binary files /dev/null and b/2A/S3/quali_dev/tp8/build/kotlin/compileTestKotlin/cacheable/caches-jvm/jvm/kotlin/supertypes.tab.len differ
diff --git a/2A/S3/quali_dev/tp8/build/kotlin/compileTestKotlin/cacheable/caches-jvm/jvm/kotlin/supertypes.tab.values.at b/2A/S3/quali_dev/tp8/build/kotlin/compileTestKotlin/cacheable/caches-jvm/jvm/kotlin/supertypes.tab.values.at
new file mode 100644
index 0000000000000000000000000000000000000000..d26b83337b67edf187e9708807ed3c5fa52e8626
Binary files /dev/null and b/2A/S3/quali_dev/tp8/build/kotlin/compileTestKotlin/cacheable/caches-jvm/jvm/kotlin/supertypes.tab.values.at differ
diff --git a/2A/S3/quali_dev/tp8/build/kotlin/compileTestKotlin/cacheable/caches-jvm/jvm/kotlin/supertypes.tab_i b/2A/S3/quali_dev/tp8/build/kotlin/compileTestKotlin/cacheable/caches-jvm/jvm/kotlin/supertypes.tab_i
new file mode 100644
index 0000000000000000000000000000000000000000..8edfc1a3c49dec51c4845be732916a2a5322e2a7
Binary files /dev/null and b/2A/S3/quali_dev/tp8/build/kotlin/compileTestKotlin/cacheable/caches-jvm/jvm/kotlin/supertypes.tab_i differ
diff --git a/2A/S3/quali_dev/tp8/build/kotlin/compileTestKotlin/cacheable/caches-jvm/jvm/kotlin/supertypes.tab_i.len b/2A/S3/quali_dev/tp8/build/kotlin/compileTestKotlin/cacheable/caches-jvm/jvm/kotlin/supertypes.tab_i.len
new file mode 100644
index 0000000000000000000000000000000000000000..131e265740f37d77b7c4a3676d2a7704ca3e4a29
Binary files /dev/null and b/2A/S3/quali_dev/tp8/build/kotlin/compileTestKotlin/cacheable/caches-jvm/jvm/kotlin/supertypes.tab_i.len differ
diff --git a/2A/S3/quali_dev/tp8/build/kotlin/compileTestKotlin/cacheable/caches-jvm/lookups/counters.tab b/2A/S3/quali_dev/tp8/build/kotlin/compileTestKotlin/cacheable/caches-jvm/lookups/counters.tab
new file mode 100644
index 0000000000000000000000000000000000000000..703ad20ce5db5c1d8a339aee3e948c81fe2669c3
--- /dev/null
+++ b/2A/S3/quali_dev/tp8/build/kotlin/compileTestKotlin/cacheable/caches-jvm/lookups/counters.tab
@@ -0,0 +1,2 @@
+29
+0
\ No newline at end of file
diff --git a/2A/S3/quali_dev/tp8/build/kotlin/compileTestKotlin/cacheable/caches-jvm/lookups/file-to-id.tab b/2A/S3/quali_dev/tp8/build/kotlin/compileTestKotlin/cacheable/caches-jvm/lookups/file-to-id.tab
new file mode 100644
index 0000000000000000000000000000000000000000..4bb157779d9036289f79a4569a13e65e85fab799
Binary files /dev/null and b/2A/S3/quali_dev/tp8/build/kotlin/compileTestKotlin/cacheable/caches-jvm/lookups/file-to-id.tab differ
diff --git a/2A/S3/quali_dev/tp8/build/kotlin/compileTestKotlin/cacheable/caches-jvm/lookups/file-to-id.tab.keystream b/2A/S3/quali_dev/tp8/build/kotlin/compileTestKotlin/cacheable/caches-jvm/lookups/file-to-id.tab.keystream
new file mode 100644
index 0000000000000000000000000000000000000000..c728f56d46f11f49de25968df3092f2cb0807184
Binary files /dev/null and b/2A/S3/quali_dev/tp8/build/kotlin/compileTestKotlin/cacheable/caches-jvm/lookups/file-to-id.tab.keystream differ
diff --git a/2A/S3/quali_dev/tp8/build/kotlin/compileTestKotlin/cacheable/caches-jvm/lookups/file-to-id.tab.keystream.len b/2A/S3/quali_dev/tp8/build/kotlin/compileTestKotlin/cacheable/caches-jvm/lookups/file-to-id.tab.keystream.len
new file mode 100644
index 0000000000000000000000000000000000000000..8d7049ba83151a48ba0d33b00190c73eebb3104b
Binary files /dev/null and b/2A/S3/quali_dev/tp8/build/kotlin/compileTestKotlin/cacheable/caches-jvm/lookups/file-to-id.tab.keystream.len differ
diff --git a/2A/S3/quali_dev/tp8/build/kotlin/compileTestKotlin/cacheable/caches-jvm/lookups/file-to-id.tab.len b/2A/S3/quali_dev/tp8/build/kotlin/compileTestKotlin/cacheable/caches-jvm/lookups/file-to-id.tab.len
new file mode 100644
index 0000000000000000000000000000000000000000..9e27f732fe29db9f82162c1114700ef23f6ac174
Binary files /dev/null and b/2A/S3/quali_dev/tp8/build/kotlin/compileTestKotlin/cacheable/caches-jvm/lookups/file-to-id.tab.len differ
diff --git a/2A/S3/quali_dev/tp8/build/kotlin/compileTestKotlin/cacheable/caches-jvm/lookups/file-to-id.tab.values.at b/2A/S3/quali_dev/tp8/build/kotlin/compileTestKotlin/cacheable/caches-jvm/lookups/file-to-id.tab.values.at
new file mode 100644
index 0000000000000000000000000000000000000000..b70d3efee12084fd42af2cdd129e7b6d68b143fc
Binary files /dev/null and b/2A/S3/quali_dev/tp8/build/kotlin/compileTestKotlin/cacheable/caches-jvm/lookups/file-to-id.tab.values.at differ
diff --git a/2A/S3/quali_dev/tp8/build/kotlin/compileTestKotlin/cacheable/caches-jvm/lookups/file-to-id.tab_i b/2A/S3/quali_dev/tp8/build/kotlin/compileTestKotlin/cacheable/caches-jvm/lookups/file-to-id.tab_i
new file mode 100644
index 0000000000000000000000000000000000000000..47eb3a2e41467b1ba411e5040d3b86767c7cf514
Binary files /dev/null and b/2A/S3/quali_dev/tp8/build/kotlin/compileTestKotlin/cacheable/caches-jvm/lookups/file-to-id.tab_i differ
diff --git a/2A/S3/quali_dev/tp8/build/kotlin/compileTestKotlin/cacheable/caches-jvm/lookups/file-to-id.tab_i.len b/2A/S3/quali_dev/tp8/build/kotlin/compileTestKotlin/cacheable/caches-jvm/lookups/file-to-id.tab_i.len
new file mode 100644
index 0000000000000000000000000000000000000000..131e265740f37d77b7c4a3676d2a7704ca3e4a29
Binary files /dev/null and b/2A/S3/quali_dev/tp8/build/kotlin/compileTestKotlin/cacheable/caches-jvm/lookups/file-to-id.tab_i.len differ
diff --git a/2A/S3/quali_dev/tp8/build/kotlin/compileTestKotlin/cacheable/caches-jvm/lookups/id-to-file.tab b/2A/S3/quali_dev/tp8/build/kotlin/compileTestKotlin/cacheable/caches-jvm/lookups/id-to-file.tab
new file mode 100644
index 0000000000000000000000000000000000000000..58ee014fb028d9c60438a576adf91903bdf3ba3f
Binary files /dev/null and b/2A/S3/quali_dev/tp8/build/kotlin/compileTestKotlin/cacheable/caches-jvm/lookups/id-to-file.tab differ
diff --git a/2A/S3/quali_dev/tp8/build/kotlin/compileTestKotlin/cacheable/caches-jvm/lookups/id-to-file.tab.keystream b/2A/S3/quali_dev/tp8/build/kotlin/compileTestKotlin/cacheable/caches-jvm/lookups/id-to-file.tab.keystream
new file mode 100644
index 0000000000000000000000000000000000000000..fa194bad6a1704f37d4e03b34074b45705957f94
Binary files /dev/null and b/2A/S3/quali_dev/tp8/build/kotlin/compileTestKotlin/cacheable/caches-jvm/lookups/id-to-file.tab.keystream differ
diff --git a/2A/S3/quali_dev/tp8/build/kotlin/compileTestKotlin/cacheable/caches-jvm/lookups/id-to-file.tab.keystream.len b/2A/S3/quali_dev/tp8/build/kotlin/compileTestKotlin/cacheable/caches-jvm/lookups/id-to-file.tab.keystream.len
new file mode 100644
index 0000000000000000000000000000000000000000..a930d6b3c49e3ed8f18f22ab58f3c09f10908093
Binary files /dev/null and b/2A/S3/quali_dev/tp8/build/kotlin/compileTestKotlin/cacheable/caches-jvm/lookups/id-to-file.tab.keystream.len differ
diff --git a/2A/S3/quali_dev/tp8/build/kotlin/compileTestKotlin/cacheable/caches-jvm/lookups/id-to-file.tab.len b/2A/S3/quali_dev/tp8/build/kotlin/compileTestKotlin/cacheable/caches-jvm/lookups/id-to-file.tab.len
new file mode 100644
index 0000000000000000000000000000000000000000..fa432244558c364281f5897ea3a81444683a68a6
Binary files /dev/null and b/2A/S3/quali_dev/tp8/build/kotlin/compileTestKotlin/cacheable/caches-jvm/lookups/id-to-file.tab.len differ
diff --git a/2A/S3/quali_dev/tp8/build/kotlin/compileTestKotlin/cacheable/caches-jvm/lookups/id-to-file.tab.values.at b/2A/S3/quali_dev/tp8/build/kotlin/compileTestKotlin/cacheable/caches-jvm/lookups/id-to-file.tab.values.at
new file mode 100644
index 0000000000000000000000000000000000000000..32dcbce1f3696fdf5e0bfe55d9cd248926773e76
Binary files /dev/null and b/2A/S3/quali_dev/tp8/build/kotlin/compileTestKotlin/cacheable/caches-jvm/lookups/id-to-file.tab.values.at differ
diff --git a/2A/S3/quali_dev/tp8/build/kotlin/compileTestKotlin/cacheable/caches-jvm/lookups/id-to-file.tab_i b/2A/S3/quali_dev/tp8/build/kotlin/compileTestKotlin/cacheable/caches-jvm/lookups/id-to-file.tab_i
new file mode 100644
index 0000000000000000000000000000000000000000..20619a701c97c00cd10c94d600d7fb319989d481
Binary files /dev/null and b/2A/S3/quali_dev/tp8/build/kotlin/compileTestKotlin/cacheable/caches-jvm/lookups/id-to-file.tab_i differ
diff --git a/2A/S3/quali_dev/tp8/build/kotlin/compileTestKotlin/cacheable/caches-jvm/lookups/id-to-file.tab_i.len b/2A/S3/quali_dev/tp8/build/kotlin/compileTestKotlin/cacheable/caches-jvm/lookups/id-to-file.tab_i.len
new file mode 100644
index 0000000000000000000000000000000000000000..131e265740f37d77b7c4a3676d2a7704ca3e4a29
Binary files /dev/null and b/2A/S3/quali_dev/tp8/build/kotlin/compileTestKotlin/cacheable/caches-jvm/lookups/id-to-file.tab_i.len differ
diff --git a/2A/S3/quali_dev/tp8/build/kotlin/compileTestKotlin/cacheable/caches-jvm/lookups/lookups.tab b/2A/S3/quali_dev/tp8/build/kotlin/compileTestKotlin/cacheable/caches-jvm/lookups/lookups.tab
new file mode 100644
index 0000000000000000000000000000000000000000..5cc962bb7ad36c35ddcd90c40591855deb27ef0e
Binary files /dev/null and b/2A/S3/quali_dev/tp8/build/kotlin/compileTestKotlin/cacheable/caches-jvm/lookups/lookups.tab differ
diff --git a/2A/S3/quali_dev/tp8/build/kotlin/compileTestKotlin/cacheable/caches-jvm/lookups/lookups.tab.keystream b/2A/S3/quali_dev/tp8/build/kotlin/compileTestKotlin/cacheable/caches-jvm/lookups/lookups.tab.keystream
new file mode 100644
index 0000000000000000000000000000000000000000..5b6f06df5fdf90b81276cfc3d6dad2862fcdc943
Binary files /dev/null and b/2A/S3/quali_dev/tp8/build/kotlin/compileTestKotlin/cacheable/caches-jvm/lookups/lookups.tab.keystream differ
diff --git a/2A/S3/quali_dev/tp8/build/kotlin/compileTestKotlin/cacheable/caches-jvm/lookups/lookups.tab.keystream.len b/2A/S3/quali_dev/tp8/build/kotlin/compileTestKotlin/cacheable/caches-jvm/lookups/lookups.tab.keystream.len
new file mode 100644
index 0000000000000000000000000000000000000000..9cd1b649ec921b3cbf79e5a628818d1784ce52eb
Binary files /dev/null and b/2A/S3/quali_dev/tp8/build/kotlin/compileTestKotlin/cacheable/caches-jvm/lookups/lookups.tab.keystream.len differ
diff --git a/2A/S3/quali_dev/tp8/build/kotlin/compileTestKotlin/cacheable/caches-jvm/lookups/lookups.tab.len b/2A/S3/quali_dev/tp8/build/kotlin/compileTestKotlin/cacheable/caches-jvm/lookups/lookups.tab.len
new file mode 100644
index 0000000000000000000000000000000000000000..c45b33fb3318e5729d90e2c3c38d4380c9ef58f5
Binary files /dev/null and b/2A/S3/quali_dev/tp8/build/kotlin/compileTestKotlin/cacheable/caches-jvm/lookups/lookups.tab.len differ
diff --git a/2A/S3/quali_dev/tp8/build/kotlin/compileTestKotlin/cacheable/caches-jvm/lookups/lookups.tab.values b/2A/S3/quali_dev/tp8/build/kotlin/compileTestKotlin/cacheable/caches-jvm/lookups/lookups.tab.values
new file mode 100644
index 0000000000000000000000000000000000000000..6084e2747916b495f03bbbf70042cd258a1a91e4
Binary files /dev/null and b/2A/S3/quali_dev/tp8/build/kotlin/compileTestKotlin/cacheable/caches-jvm/lookups/lookups.tab.values differ
diff --git a/2A/S3/quali_dev/tp8/build/kotlin/compileTestKotlin/cacheable/caches-jvm/lookups/lookups.tab.values.at b/2A/S3/quali_dev/tp8/build/kotlin/compileTestKotlin/cacheable/caches-jvm/lookups/lookups.tab.values.at
new file mode 100644
index 0000000000000000000000000000000000000000..ca1e1ef9a9d1bf2cbe6e7a5227920f369052fa8e
Binary files /dev/null and b/2A/S3/quali_dev/tp8/build/kotlin/compileTestKotlin/cacheable/caches-jvm/lookups/lookups.tab.values.at differ
diff --git a/2A/S3/quali_dev/tp8/build/kotlin/compileTestKotlin/cacheable/caches-jvm/lookups/lookups.tab.values.s b/2A/S3/quali_dev/tp8/build/kotlin/compileTestKotlin/cacheable/caches-jvm/lookups/lookups.tab.values.s
new file mode 100644
index 0000000000000000000000000000000000000000..fe5c8e260517adf3b52dabf699a33102c1b12cd1
--- /dev/null
+++ b/2A/S3/quali_dev/tp8/build/kotlin/compileTestKotlin/cacheable/caches-jvm/lookups/lookups.tab.values.s
@@ -0,0 +1 @@
+�j�t�p�e�b�b�b�V�O�P�O�O�C�;�=�=�;�6�(
\ No newline at end of file
diff --git a/2A/S3/quali_dev/tp8/build/kotlin/compileTestKotlin/cacheable/caches-jvm/lookups/lookups.tab_i b/2A/S3/quali_dev/tp8/build/kotlin/compileTestKotlin/cacheable/caches-jvm/lookups/lookups.tab_i
new file mode 100644
index 0000000000000000000000000000000000000000..f3f43b267b2cf2813ec9e3927b788d1c9c99bb76
Binary files /dev/null and b/2A/S3/quali_dev/tp8/build/kotlin/compileTestKotlin/cacheable/caches-jvm/lookups/lookups.tab_i differ
diff --git a/2A/S3/quali_dev/tp8/build/kotlin/compileTestKotlin/cacheable/caches-jvm/lookups/lookups.tab_i.len b/2A/S3/quali_dev/tp8/build/kotlin/compileTestKotlin/cacheable/caches-jvm/lookups/lookups.tab_i.len
new file mode 100644
index 0000000000000000000000000000000000000000..131e265740f37d77b7c4a3676d2a7704ca3e4a29
Binary files /dev/null and b/2A/S3/quali_dev/tp8/build/kotlin/compileTestKotlin/cacheable/caches-jvm/lookups/lookups.tab_i.len differ
diff --git a/2A/S3/quali_dev/tp8/build/kotlin/compileTestKotlin/cacheable/last-build.bin b/2A/S3/quali_dev/tp8/build/kotlin/compileTestKotlin/cacheable/last-build.bin
new file mode 100644
index 0000000000000000000000000000000000000000..8f5278192e15ad02c6aa4c7e107c8ca29dfe5d69
Binary files /dev/null and b/2A/S3/quali_dev/tp8/build/kotlin/compileTestKotlin/cacheable/last-build.bin differ
diff --git a/2A/S3/quali_dev/tp8/build/kotlin/compileTestKotlin/classpath-snapshot/shrunk-classpath-snapshot.bin b/2A/S3/quali_dev/tp8/build/kotlin/compileTestKotlin/classpath-snapshot/shrunk-classpath-snapshot.bin
new file mode 100644
index 0000000000000000000000000000000000000000..682c6846a0f0215a48d1e7aea38659586e671006
Binary files /dev/null and b/2A/S3/quali_dev/tp8/build/kotlin/compileTestKotlin/classpath-snapshot/shrunk-classpath-snapshot.bin differ
diff --git a/2A/S3/quali_dev/tp8/build/kotlin/compileTestKotlin/local-state/build-history.bin b/2A/S3/quali_dev/tp8/build/kotlin/compileTestKotlin/local-state/build-history.bin
new file mode 100644
index 0000000000000000000000000000000000000000..3b2184f1a347c874bd597a66bca9208eea901b11
Binary files /dev/null and b/2A/S3/quali_dev/tp8/build/kotlin/compileTestKotlin/local-state/build-history.bin differ
diff --git a/2A/S3/quali_dev/tp8/build/reports/tests/test/classes/exercice3.TestExemple.html b/2A/S3/quali_dev/tp8/build/reports/tests/test/classes/exercice3.TestExemple.html
new file mode 100644
index 0000000000000000000000000000000000000000..33df49abae1b367c9ea832ef07ffab16d121e6c0
--- /dev/null
+++ b/2A/S3/quali_dev/tp8/build/reports/tests/test/classes/exercice3.TestExemple.html
@@ -0,0 +1,158 @@
+<!DOCTYPE html>
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
+<meta http-equiv="x-ua-compatible" content="IE=edge"/>
+<title>Test results - TestExemple</title>
+<link href="../css/base-style.css" rel="stylesheet" type="text/css"/>
+<link href="../css/style.css" rel="stylesheet" type="text/css"/>
+<script src="../js/report.js" type="text/javascript"></script>
+</head>
+<body>
+<div id="content">
+<h1>TestExemple</h1>
+<div class="breadcrumbs">
+<a href="../index.html">all</a> &gt; 
+<a href="../packages/exercice3.html">exercice3</a> &gt; TestExemple</div>
+<div id="summary">
+<table>
+<tr>
+<td>
+<div class="summaryGroup">
+<table>
+<tr>
+<td>
+<div class="infoBox" id="tests">
+<div class="counter">6</div>
+<p>tests</p>
+</div>
+</td>
+<td>
+<div class="infoBox" id="failures">
+<div class="counter">0</div>
+<p>failures</p>
+</div>
+</td>
+<td>
+<div class="infoBox" id="ignored">
+<div class="counter">0</div>
+<p>ignored</p>
+</div>
+</td>
+<td>
+<div class="infoBox" id="duration">
+<div class="counter">1.896s</div>
+<p>duration</p>
+</div>
+</td>
+</tr>
+</table>
+</div>
+</td>
+<td>
+<div class="infoBox success" id="successRate">
+<div class="percent">100%</div>
+<p>successful</p>
+</div>
+</td>
+</tr>
+</table>
+</div>
+<div id="tabs">
+<ul class="tabLinks">
+<li>
+<a href="#tab0">Tests</a>
+</li>
+<li>
+<a href="#tab1">Standard output</a>
+</li>
+<li>
+<a href="#tab2">Standard error</a>
+</li>
+</ul>
+<div id="tab0" class="tab">
+<h2>Tests</h2>
+<table>
+<thead>
+<tr>
+<th>Test</th>
+<th>Duration</th>
+<th>Result</th>
+</tr>
+</thead>
+<tr>
+<td class="success">testAPI1()</td>
+<td class="success">0.224s</td>
+<td class="success">passed</td>
+</tr>
+<tr>
+<td class="success">testAPI2()</td>
+<td class="success">0.242s</td>
+<td class="success">passed</td>
+</tr>
+<tr>
+<td class="success">testAPI3()</td>
+<td class="success">0.395s</td>
+<td class="success">passed</td>
+</tr>
+<tr>
+<td class="success">testAPI4()</td>
+<td class="success">0.162s</td>
+<td class="success">passed</td>
+</tr>
+<tr>
+<td class="success">testAPI5()</td>
+<td class="success">0.503s</td>
+<td class="success">passed</td>
+</tr>
+<tr>
+<td class="success">testTodo3()</td>
+<td class="success">0.370s</td>
+<td class="success">passed</td>
+</tr>
+</table>
+</div>
+<div id="tab1" class="tab">
+<h2>Standard output</h2>
+<span class="code">
+<pre>{
+  &quot;error&quot;: {
+    &quot;code&quot;: 403,
+    &quot;message&quot;: &quot;The request is missing a valid API key.&quot;,
+    &quot;errors&quot;: [
+      {
+        &quot;message&quot;: &quot;The request is missing a valid API key.&quot;,
+        &quot;domain&quot;: &quot;global&quot;,
+        &quot;reason&quot;: &quot;forbidden&quot;
+      }
+    ],
+    &quot;status&quot;: &quot;PERMISSION_DENIED&quot;
+  }
+}
+
+a
+</pre>
+</span>
+</div>
+<div id="tab2" class="tab">
+<h2>Standard error</h2>
+<span class="code">
+<pre>SLF4J: Failed to load class &quot;org.slf4j.impl.StaticLoggerBinder&quot;.
+SLF4J: Defaulting to no-operation (NOP) logger implementation
+SLF4J: See http://www.slf4j.org/codes.html#StaticLoggerBinder for further details.
+</pre>
+</span>
+</div>
+</div>
+<div id="footer">
+<p>
+<div>
+<label class="hidden" id="label-for-line-wrapping-toggle" for="line-wrapping-toggle">Wrap lines
+<input id="line-wrapping-toggle" type="checkbox" autocomplete="off"/>
+</label>
+</div>Generated by 
+<a href="http://www.gradle.org">Gradle 8.0</a> at 9 nov. 2023, 11:56:11</p>
+</div>
+</div>
+</body>
+</html>
diff --git a/2A/S3/quali_dev/tp8/build/reports/tests/test/css/base-style.css b/2A/S3/quali_dev/tp8/build/reports/tests/test/css/base-style.css
new file mode 100644
index 0000000000000000000000000000000000000000..4afa73e3ddcf5e21bdd0a22ac575dc99b2e3d826
--- /dev/null
+++ b/2A/S3/quali_dev/tp8/build/reports/tests/test/css/base-style.css
@@ -0,0 +1,179 @@
+
+body {
+    margin: 0;
+    padding: 0;
+    font-family: sans-serif;
+    font-size: 12pt;
+}
+
+body, a, a:visited {
+    color: #303030;
+}
+
+#content {
+    padding-left: 50px;
+    padding-right: 50px;
+    padding-top: 30px;
+    padding-bottom: 30px;
+}
+
+#content h1 {
+    font-size: 160%;
+    margin-bottom: 10px;
+}
+
+#footer {
+    margin-top: 100px;
+    font-size: 80%;
+    white-space: nowrap;
+}
+
+#footer, #footer a {
+    color: #a0a0a0;
+}
+
+#line-wrapping-toggle {
+    vertical-align: middle;
+}
+
+#label-for-line-wrapping-toggle {
+    vertical-align: middle;
+}
+
+ul {
+    margin-left: 0;
+}
+
+h1, h2, h3 {
+    white-space: nowrap;
+}
+
+h2 {
+    font-size: 120%;
+}
+
+ul.tabLinks {
+    padding-left: 0;
+    padding-top: 10px;
+    padding-bottom: 10px;
+    overflow: auto;
+    min-width: 800px;
+    width: auto !important;
+    width: 800px;
+}
+
+ul.tabLinks li {
+    float: left;
+    height: 100%;
+    list-style: none;
+    padding-left: 10px;
+    padding-right: 10px;
+    padding-top: 5px;
+    padding-bottom: 5px;
+    margin-bottom: 0;
+    -moz-border-radius: 7px;
+    border-radius: 7px;
+    margin-right: 25px;
+    border: solid 1px #d4d4d4;
+    background-color: #f0f0f0;
+}
+
+ul.tabLinks li:hover {
+    background-color: #fafafa;
+}
+
+ul.tabLinks li.selected {
+    background-color: #c5f0f5;
+    border-color: #c5f0f5;
+}
+
+ul.tabLinks a {
+    font-size: 120%;
+    display: block;
+    outline: none;
+    text-decoration: none;
+    margin: 0;
+    padding: 0;
+}
+
+ul.tabLinks li h2 {
+    margin: 0;
+    padding: 0;
+}
+
+div.tab {
+}
+
+div.selected {
+    display: block;
+}
+
+div.deselected {
+    display: none;
+}
+
+div.tab table {
+    min-width: 350px;
+    width: auto !important;
+    width: 350px;
+    border-collapse: collapse;
+}
+
+div.tab th, div.tab table {
+    border-bottom: solid #d0d0d0 1px;
+}
+
+div.tab th {
+    text-align: left;
+    white-space: nowrap;
+    padding-left: 6em;
+}
+
+div.tab th:first-child {
+    padding-left: 0;
+}
+
+div.tab td {
+    white-space: nowrap;
+    padding-left: 6em;
+    padding-top: 5px;
+    padding-bottom: 5px;
+}
+
+div.tab td:first-child {
+    padding-left: 0;
+}
+
+div.tab td.numeric, div.tab th.numeric {
+    text-align: right;
+}
+
+span.code {
+    display: inline-block;
+    margin-top: 0em;
+    margin-bottom: 1em;
+}
+
+span.code pre {
+    font-size: 11pt;
+    padding-top: 10px;
+    padding-bottom: 10px;
+    padding-left: 10px;
+    padding-right: 10px;
+    margin: 0;
+    background-color: #f7f7f7;
+    border: solid 1px #d0d0d0;
+    min-width: 700px;
+    width: auto !important;
+    width: 700px;
+}
+
+span.wrapped pre {
+    word-wrap: break-word;
+    white-space: pre-wrap;
+    word-break: break-all;
+}
+
+label.hidden {
+    display: none;
+}
\ No newline at end of file
diff --git a/2A/S3/quali_dev/tp8/build/reports/tests/test/css/style.css b/2A/S3/quali_dev/tp8/build/reports/tests/test/css/style.css
new file mode 100644
index 0000000000000000000000000000000000000000..3dc4913e7a077a1f1f3810b1f20cc9275fb236bf
--- /dev/null
+++ b/2A/S3/quali_dev/tp8/build/reports/tests/test/css/style.css
@@ -0,0 +1,84 @@
+
+#summary {
+    margin-top: 30px;
+    margin-bottom: 40px;
+}
+
+#summary table {
+    border-collapse: collapse;
+}
+
+#summary td {
+    vertical-align: top;
+}
+
+.breadcrumbs, .breadcrumbs a {
+    color: #606060;
+}
+
+.infoBox {
+    width: 110px;
+    padding-top: 15px;
+    padding-bottom: 15px;
+    text-align: center;
+}
+
+.infoBox p {
+    margin: 0;
+}
+
+.counter, .percent {
+    font-size: 120%;
+    font-weight: bold;
+    margin-bottom: 8px;
+}
+
+#duration {
+    width: 125px;
+}
+
+#successRate, .summaryGroup {
+    border: solid 2px #d0d0d0;
+    -moz-border-radius: 10px;
+    border-radius: 10px;
+}
+
+#successRate {
+    width: 140px;
+    margin-left: 35px;
+}
+
+#successRate .percent {
+    font-size: 180%;
+}
+
+.success, .success a {
+    color: #008000;
+}
+
+div.success, #successRate.success {
+    background-color: #bbd9bb;
+    border-color: #008000;
+}
+
+.failures, .failures a {
+    color: #b60808;
+}
+
+.skipped, .skipped a {
+    color: #c09853;
+}
+
+div.failures, #successRate.failures {
+    background-color: #ecdada;
+    border-color: #b60808;
+}
+
+ul.linkList {
+    padding-left: 0;
+}
+
+ul.linkList li {
+    list-style: none;
+    margin-bottom: 5px;
+}
diff --git a/2A/S3/quali_dev/tp8/build/reports/tests/test/index.html b/2A/S3/quali_dev/tp8/build/reports/tests/test/index.html
new file mode 100644
index 0000000000000000000000000000000000000000..f789e86104b176cedb54b06ec9f5d34d1f6d9fe3
--- /dev/null
+++ b/2A/S3/quali_dev/tp8/build/reports/tests/test/index.html
@@ -0,0 +1,133 @@
+<!DOCTYPE html>
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
+<meta http-equiv="x-ua-compatible" content="IE=edge"/>
+<title>Test results - Test Summary</title>
+<link href="css/base-style.css" rel="stylesheet" type="text/css"/>
+<link href="css/style.css" rel="stylesheet" type="text/css"/>
+<script src="js/report.js" type="text/javascript"></script>
+</head>
+<body>
+<div id="content">
+<h1>Test Summary</h1>
+<div id="summary">
+<table>
+<tr>
+<td>
+<div class="summaryGroup">
+<table>
+<tr>
+<td>
+<div class="infoBox" id="tests">
+<div class="counter">6</div>
+<p>tests</p>
+</div>
+</td>
+<td>
+<div class="infoBox" id="failures">
+<div class="counter">0</div>
+<p>failures</p>
+</div>
+</td>
+<td>
+<div class="infoBox" id="ignored">
+<div class="counter">0</div>
+<p>ignored</p>
+</div>
+</td>
+<td>
+<div class="infoBox" id="duration">
+<div class="counter">1.896s</div>
+<p>duration</p>
+</div>
+</td>
+</tr>
+</table>
+</div>
+</td>
+<td>
+<div class="infoBox success" id="successRate">
+<div class="percent">100%</div>
+<p>successful</p>
+</div>
+</td>
+</tr>
+</table>
+</div>
+<div id="tabs">
+<ul class="tabLinks">
+<li>
+<a href="#tab0">Packages</a>
+</li>
+<li>
+<a href="#tab1">Classes</a>
+</li>
+</ul>
+<div id="tab0" class="tab">
+<h2>Packages</h2>
+<table>
+<thead>
+<tr>
+<th>Package</th>
+<th>Tests</th>
+<th>Failures</th>
+<th>Ignored</th>
+<th>Duration</th>
+<th>Success rate</th>
+</tr>
+</thead>
+<tbody>
+<tr>
+<td class="success">
+<a href="packages/exercice3.html">exercice3</a>
+</td>
+<td>6</td>
+<td>0</td>
+<td>0</td>
+<td>1.896s</td>
+<td class="success">100%</td>
+</tr>
+</tbody>
+</table>
+</div>
+<div id="tab1" class="tab">
+<h2>Classes</h2>
+<table>
+<thead>
+<tr>
+<th>Class</th>
+<th>Tests</th>
+<th>Failures</th>
+<th>Ignored</th>
+<th>Duration</th>
+<th>Success rate</th>
+</tr>
+</thead>
+<tbody>
+<tr>
+<td class="success">
+<a href="classes/exercice3.TestExemple.html">exercice3.TestExemple</a>
+</td>
+<td>6</td>
+<td>0</td>
+<td>0</td>
+<td>1.896s</td>
+<td class="success">100%</td>
+</tr>
+</tbody>
+</table>
+</div>
+</div>
+<div id="footer">
+<p>
+<div>
+<label class="hidden" id="label-for-line-wrapping-toggle" for="line-wrapping-toggle">Wrap lines
+<input id="line-wrapping-toggle" type="checkbox" autocomplete="off"/>
+</label>
+</div>Generated by 
+<a href="http://www.gradle.org">Gradle 8.0</a> at 9 nov. 2023, 11:56:11</p>
+</div>
+</div>
+</body>
+</html>
diff --git a/2A/S3/quali_dev/tp8/build/reports/tests/test/js/report.js b/2A/S3/quali_dev/tp8/build/reports/tests/test/js/report.js
new file mode 100644
index 0000000000000000000000000000000000000000..83bab4a19f36a6f460c6747ad6b7252f63a1fad3
--- /dev/null
+++ b/2A/S3/quali_dev/tp8/build/reports/tests/test/js/report.js
@@ -0,0 +1,194 @@
+(function (window, document) {
+    "use strict";
+
+    var tabs = {};
+
+    function changeElementClass(element, classValue) {
+        if (element.getAttribute("className")) {
+            element.setAttribute("className", classValue);
+        } else {
+            element.setAttribute("class", classValue);
+        }
+    }
+
+    function getClassAttribute(element) {
+        if (element.getAttribute("className")) {
+            return element.getAttribute("className");
+        } else {
+            return element.getAttribute("class");
+        }
+    }
+
+    function addClass(element, classValue) {
+        changeElementClass(element, getClassAttribute(element) + " " + classValue);
+    }
+
+    function removeClass(element, classValue) {
+        changeElementClass(element, getClassAttribute(element).replace(classValue, ""));
+    }
+
+    function initTabs() {
+        var container = document.getElementById("tabs");
+
+        tabs.tabs = findTabs(container);
+        tabs.titles = findTitles(tabs.tabs);
+        tabs.headers = findHeaders(container);
+        tabs.select = select;
+        tabs.deselectAll = deselectAll;
+        tabs.select(0);
+
+        return true;
+    }
+
+    function getCheckBox() {
+        return document.getElementById("line-wrapping-toggle");
+    }
+
+    function getLabelForCheckBox() {
+        return document.getElementById("label-for-line-wrapping-toggle");
+    }
+
+    function findCodeBlocks() {
+        var spans = document.getElementById("tabs").getElementsByTagName("span");
+        var codeBlocks = [];
+        for (var i = 0; i < spans.length; ++i) {
+            if (spans[i].className.indexOf("code") >= 0) {
+                codeBlocks.push(spans[i]);
+            }
+        }
+        return codeBlocks;
+    }
+
+    function forAllCodeBlocks(operation) {
+        var codeBlocks = findCodeBlocks();
+
+        for (var i = 0; i < codeBlocks.length; ++i) {
+            operation(codeBlocks[i], "wrapped");
+        }
+    }
+
+    function toggleLineWrapping() {
+        var checkBox = getCheckBox();
+
+        if (checkBox.checked) {
+            forAllCodeBlocks(addClass);
+        } else {
+            forAllCodeBlocks(removeClass);
+        }
+    }
+
+    function initControls() {
+        if (findCodeBlocks().length > 0) {
+            var checkBox = getCheckBox();
+            var label = getLabelForCheckBox();
+
+            checkBox.onclick = toggleLineWrapping;
+            checkBox.checked = false;
+
+            removeClass(label, "hidden");
+         }
+    }
+
+    function switchTab() {
+        var id = this.id.substr(1);
+
+        for (var i = 0; i < tabs.tabs.length; i++) {
+            if (tabs.tabs[i].id === id) {
+                tabs.select(i);
+                break;
+            }
+        }
+
+        return false;
+    }
+
+    function select(i) {
+        this.deselectAll();
+
+        changeElementClass(this.tabs[i], "tab selected");
+        changeElementClass(this.headers[i], "selected");
+
+        while (this.headers[i].firstChild) {
+            this.headers[i].removeChild(this.headers[i].firstChild);
+        }
+
+        var h2 = document.createElement("H2");
+
+        h2.appendChild(document.createTextNode(this.titles[i]));
+        this.headers[i].appendChild(h2);
+    }
+
+    function deselectAll() {
+        for (var i = 0; i < this.tabs.length; i++) {
+            changeElementClass(this.tabs[i], "tab deselected");
+            changeElementClass(this.headers[i], "deselected");
+
+            while (this.headers[i].firstChild) {
+                this.headers[i].removeChild(this.headers[i].firstChild);
+            }
+
+            var a = document.createElement("A");
+
+            a.setAttribute("id", "ltab" + i);
+            a.setAttribute("href", "#tab" + i);
+            a.onclick = switchTab;
+            a.appendChild(document.createTextNode(this.titles[i]));
+
+            this.headers[i].appendChild(a);
+        }
+    }
+
+    function findTabs(container) {
+        return findChildElements(container, "DIV", "tab");
+    }
+
+    function findHeaders(container) {
+        var owner = findChildElements(container, "UL", "tabLinks");
+        return findChildElements(owner[0], "LI", null);
+    }
+
+    function findTitles(tabs) {
+        var titles = [];
+
+        for (var i = 0; i < tabs.length; i++) {
+            var tab = tabs[i];
+            var header = findChildElements(tab, "H2", null)[0];
+
+            header.parentNode.removeChild(header);
+
+            if (header.innerText) {
+                titles.push(header.innerText);
+            } else {
+                titles.push(header.textContent);
+            }
+        }
+
+        return titles;
+    }
+
+    function findChildElements(container, name, targetClass) {
+        var elements = [];
+        var children = container.childNodes;
+
+        for (var i = 0; i < children.length; i++) {
+            var child = children.item(i);
+
+            if (child.nodeType === 1 && child.nodeName === name) {
+                if (targetClass && child.className.indexOf(targetClass) < 0) {
+                    continue;
+                }
+
+                elements.push(child);
+            }
+        }
+
+        return elements;
+    }
+
+    // Entry point.
+
+    window.onload = function() {
+        initTabs();
+        initControls();
+    };
+} (window, window.document));
\ No newline at end of file
diff --git a/2A/S3/quali_dev/tp8/build/reports/tests/test/packages/exercice3.html b/2A/S3/quali_dev/tp8/build/reports/tests/test/packages/exercice3.html
new file mode 100644
index 0000000000000000000000000000000000000000..dee6971fb61bdee31b52ce8d87f1f3122fc4c95c
--- /dev/null
+++ b/2A/S3/quali_dev/tp8/build/reports/tests/test/packages/exercice3.html
@@ -0,0 +1,103 @@
+<!DOCTYPE html>
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
+<meta http-equiv="x-ua-compatible" content="IE=edge"/>
+<title>Test results - Package exercice3</title>
+<link href="../css/base-style.css" rel="stylesheet" type="text/css"/>
+<link href="../css/style.css" rel="stylesheet" type="text/css"/>
+<script src="../js/report.js" type="text/javascript"></script>
+</head>
+<body>
+<div id="content">
+<h1>Package exercice3</h1>
+<div class="breadcrumbs">
+<a href="../index.html">all</a> &gt; exercice3</div>
+<div id="summary">
+<table>
+<tr>
+<td>
+<div class="summaryGroup">
+<table>
+<tr>
+<td>
+<div class="infoBox" id="tests">
+<div class="counter">6</div>
+<p>tests</p>
+</div>
+</td>
+<td>
+<div class="infoBox" id="failures">
+<div class="counter">0</div>
+<p>failures</p>
+</div>
+</td>
+<td>
+<div class="infoBox" id="ignored">
+<div class="counter">0</div>
+<p>ignored</p>
+</div>
+</td>
+<td>
+<div class="infoBox" id="duration">
+<div class="counter">1.896s</div>
+<p>duration</p>
+</div>
+</td>
+</tr>
+</table>
+</div>
+</td>
+<td>
+<div class="infoBox success" id="successRate">
+<div class="percent">100%</div>
+<p>successful</p>
+</div>
+</td>
+</tr>
+</table>
+</div>
+<div id="tabs">
+<ul class="tabLinks">
+<li>
+<a href="#tab0">Classes</a>
+</li>
+</ul>
+<div id="tab0" class="tab">
+<h2>Classes</h2>
+<table>
+<thread>
+<tr>
+<th>Class</th>
+<th>Tests</th>
+<th>Failures</th>
+<th>Ignored</th>
+<th>Duration</th>
+<th>Success rate</th>
+</tr>
+</thread>
+<tr>
+<td class="success">
+<a href="../classes/exercice3.TestExemple.html">TestExemple</a>
+</td>
+<td>6</td>
+<td>0</td>
+<td>0</td>
+<td>1.896s</td>
+<td class="success">100%</td>
+</tr>
+</table>
+</div>
+</div>
+<div id="footer">
+<p>
+<div>
+<label class="hidden" id="label-for-line-wrapping-toggle" for="line-wrapping-toggle">Wrap lines
+<input id="line-wrapping-toggle" type="checkbox" autocomplete="off"/>
+</label>
+</div>Generated by 
+<a href="http://www.gradle.org">Gradle 8.0</a> at 9 nov. 2023, 11:56:11</p>
+</div>
+</div>
+</body>
+</html>
diff --git a/2A/S3/quali_dev/tp8/build/test-results/test/TEST-exercice3.TestExemple.xml b/2A/S3/quali_dev/tp8/build/test-results/test/TEST-exercice3.TestExemple.xml
new file mode 100644
index 0000000000000000000000000000000000000000..fba8990ce23a2c6f8e7702775128f9899266fd61
--- /dev/null
+++ b/2A/S3/quali_dev/tp8/build/test-results/test/TEST-exercice3.TestExemple.xml
@@ -0,0 +1,31 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<testsuite name="exercice3.TestExemple" tests="6" skipped="0" failures="0" errors="0" timestamp="2023-11-09T10:56:09" hostname="u-inf-j-c005-23" time="1.901">
+  <properties/>
+  <testcase name="testTodo3()" classname="exercice3.TestExemple" time="0.37"/>
+  <testcase name="testAPI1()" classname="exercice3.TestExemple" time="0.224"/>
+  <testcase name="testAPI2()" classname="exercice3.TestExemple" time="0.242"/>
+  <testcase name="testAPI3()" classname="exercice3.TestExemple" time="0.395"/>
+  <testcase name="testAPI4()" classname="exercice3.TestExemple" time="0.162"/>
+  <testcase name="testAPI5()" classname="exercice3.TestExemple" time="0.503"/>
+  <system-out><![CDATA[{
+  "error": {
+    "code": 403,
+    "message": "The request is missing a valid API key.",
+    "errors": [
+      {
+        "message": "The request is missing a valid API key.",
+        "domain": "global",
+        "reason": "forbidden"
+      }
+    ],
+    "status": "PERMISSION_DENIED"
+  }
+}
+
+a
+]]></system-out>
+  <system-err><![CDATA[SLF4J: Failed to load class "org.slf4j.impl.StaticLoggerBinder".
+SLF4J: Defaulting to no-operation (NOP) logger implementation
+SLF4J: See http://www.slf4j.org/codes.html#StaticLoggerBinder for further details.
+]]></system-err>
+</testsuite>
diff --git a/2A/S3/quali_dev/tp8/build/test-results/test/binary/output.bin b/2A/S3/quali_dev/tp8/build/test-results/test/binary/output.bin
new file mode 100644
index 0000000000000000000000000000000000000000..65b56d25ae7783c2af99063a3d795f56020445d5
Binary files /dev/null and b/2A/S3/quali_dev/tp8/build/test-results/test/binary/output.bin differ
diff --git a/2A/S3/quali_dev/tp8/build/test-results/test/binary/output.bin.idx b/2A/S3/quali_dev/tp8/build/test-results/test/binary/output.bin.idx
new file mode 100644
index 0000000000000000000000000000000000000000..946fd619e081717fde655d20def5b0b9140b413c
Binary files /dev/null and b/2A/S3/quali_dev/tp8/build/test-results/test/binary/output.bin.idx differ
diff --git a/2A/S3/quali_dev/tp8/build/test-results/test/binary/results.bin b/2A/S3/quali_dev/tp8/build/test-results/test/binary/results.bin
new file mode 100644
index 0000000000000000000000000000000000000000..cacb28de7bad8eeb8c3087c36b011a41d7e550f3
Binary files /dev/null and b/2A/S3/quali_dev/tp8/build/test-results/test/binary/results.bin differ
diff --git a/2A/S3/quali_dev/tp8/gradle.properties b/2A/S3/quali_dev/tp8/gradle.properties
new file mode 100755
index 0000000000000000000000000000000000000000..2fdb517a0885bd53e3636105132d0693f60be323
--- /dev/null
+++ b/2A/S3/quali_dev/tp8/gradle.properties
@@ -0,0 +1,2 @@
+kotlin.code.style=official
+ktor_version=2.3.5
\ No newline at end of file
diff --git a/2A/S3/quali_dev/tp8/gradle/wrapper/gradle-wrapper.jar b/2A/S3/quali_dev/tp8/gradle/wrapper/gradle-wrapper.jar
new file mode 100644
index 0000000000000000000000000000000000000000..ccebba7710deaf9f98673a68957ea02138b60d0a
Binary files /dev/null and b/2A/S3/quali_dev/tp8/gradle/wrapper/gradle-wrapper.jar differ
diff --git a/2A/S3/quali_dev/tp8/gradle/wrapper/gradle-wrapper.properties b/2A/S3/quali_dev/tp8/gradle/wrapper/gradle-wrapper.properties
new file mode 100644
index 0000000000000000000000000000000000000000..42defcc94b345ce2f6cd2ce570b102db6e4b097e
--- /dev/null
+++ b/2A/S3/quali_dev/tp8/gradle/wrapper/gradle-wrapper.properties
@@ -0,0 +1,6 @@
+distributionBase=GRADLE_USER_HOME
+distributionPath=wrapper/dists
+distributionUrl=https\://services.gradle.org/distributions/gradle-8.0-bin.zip
+networkTimeout=10000
+zipStoreBase=GRADLE_USER_HOME
+zipStorePath=wrapper/dists
diff --git a/2A/S3/quali_dev/tp8/gradlew b/2A/S3/quali_dev/tp8/gradlew
new file mode 100755
index 0000000000000000000000000000000000000000..79a61d421cc4e272926b1d590728d0bbfc224b0d
--- /dev/null
+++ b/2A/S3/quali_dev/tp8/gradlew
@@ -0,0 +1,244 @@
+#!/bin/sh
+
+#
+# Copyright © 2015-2021 the original authors.
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#      https://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+
+##############################################################################
+#
+#   Gradle start up script for POSIX generated by Gradle.
+#
+#   Important for running:
+#
+#   (1) You need a POSIX-compliant shell to run this script. If your /bin/sh is
+#       noncompliant, but you have some other compliant shell such as ksh or
+#       bash, then to run this script, type that shell name before the whole
+#       command line, like:
+#
+#           ksh Gradle
+#
+#       Busybox and similar reduced shells will NOT work, because this script
+#       requires all of these POSIX shell features:
+#         * functions;
+#         * expansions «$var», «${var}», «${var:-default}», «${var+SET}»,
+#           «${var#prefix}», «${var%suffix}», and «$( cmd )»;
+#         * compound commands having a testable exit status, especially «case»;
+#         * various built-in commands including «command», «set», and «ulimit».
+#
+#   Important for patching:
+#
+#   (2) This script targets any POSIX shell, so it avoids extensions provided
+#       by Bash, Ksh, etc; in particular arrays are avoided.
+#
+#       The "traditional" practice of packing multiple parameters into a
+#       space-separated string is a well documented source of bugs and security
+#       problems, so this is (mostly) avoided, by progressively accumulating
+#       options in "$@", and eventually passing that to Java.
+#
+#       Where the inherited environment variables (DEFAULT_JVM_OPTS, JAVA_OPTS,
+#       and GRADLE_OPTS) rely on word-splitting, this is performed explicitly;
+#       see the in-line comments for details.
+#
+#       There are tweaks for specific operating systems such as AIX, CygWin,
+#       Darwin, MinGW, and NonStop.
+#
+#   (3) This script is generated from the Groovy template
+#       https://github.com/gradle/gradle/blob/HEAD/subprojects/plugins/src/main/resources/org/gradle/api/internal/plugins/unixStartScript.txt
+#       within the Gradle project.
+#
+#       You can find Gradle at https://github.com/gradle/gradle/.
+#
+##############################################################################
+
+# Attempt to set APP_HOME
+
+# Resolve links: $0 may be a link
+app_path=$0
+
+# Need this for daisy-chained symlinks.
+while
+    APP_HOME=${app_path%"${app_path##*/}"}  # leaves a trailing /; empty if no leading path
+    [ -h "$app_path" ]
+do
+    ls=$( ls -ld "$app_path" )
+    link=${ls#*' -> '}
+    case $link in             #(
+      /*)   app_path=$link ;; #(
+      *)    app_path=$APP_HOME$link ;;
+    esac
+done
+
+# This is normally unused
+# shellcheck disable=SC2034
+APP_BASE_NAME=${0##*/}
+APP_HOME=$( cd "${APP_HOME:-./}" && pwd -P ) || exit
+
+# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
+DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"'
+
+# Use the maximum available, or set MAX_FD != -1 to use that value.
+MAX_FD=maximum
+
+warn () {
+    echo "$*"
+} >&2
+
+die () {
+    echo
+    echo "$*"
+    echo
+    exit 1
+} >&2
+
+# OS specific support (must be 'true' or 'false').
+cygwin=false
+msys=false
+darwin=false
+nonstop=false
+case "$( uname )" in                #(
+  CYGWIN* )         cygwin=true  ;; #(
+  Darwin* )         darwin=true  ;; #(
+  MSYS* | MINGW* )  msys=true    ;; #(
+  NONSTOP* )        nonstop=true ;;
+esac
+
+CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar
+
+
+# Determine the Java command to use to start the JVM.
+if [ -n "$JAVA_HOME" ] ; then
+    if [ -x "$JAVA_HOME/jre/sh/java" ] ; then
+        # IBM's JDK on AIX uses strange locations for the executables
+        JAVACMD=$JAVA_HOME/jre/sh/java
+    else
+        JAVACMD=$JAVA_HOME/bin/java
+    fi
+    if [ ! -x "$JAVACMD" ] ; then
+        die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME
+
+Please set the JAVA_HOME variable in your environment to match the
+location of your Java installation."
+    fi
+else
+    JAVACMD=java
+    which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
+
+Please set the JAVA_HOME variable in your environment to match the
+location of your Java installation."
+fi
+
+# Increase the maximum file descriptors if we can.
+if ! "$cygwin" && ! "$darwin" && ! "$nonstop" ; then
+    case $MAX_FD in #(
+      max*)
+        # In POSIX sh, ulimit -H is undefined. That's why the result is checked to see if it worked.
+        # shellcheck disable=SC3045
+        MAX_FD=$( ulimit -H -n ) ||
+            warn "Could not query maximum file descriptor limit"
+    esac
+    case $MAX_FD in  #(
+      '' | soft) :;; #(
+      *)
+        # In POSIX sh, ulimit -n is undefined. That's why the result is checked to see if it worked.
+        # shellcheck disable=SC3045
+        ulimit -n "$MAX_FD" ||
+            warn "Could not set maximum file descriptor limit to $MAX_FD"
+    esac
+fi
+
+# Collect all arguments for the java command, stacking in reverse order:
+#   * args from the command line
+#   * the main class name
+#   * -classpath
+#   * -D...appname settings
+#   * --module-path (only if needed)
+#   * DEFAULT_JVM_OPTS, JAVA_OPTS, and GRADLE_OPTS environment variables.
+
+# For Cygwin or MSYS, switch paths to Windows format before running java
+if "$cygwin" || "$msys" ; then
+    APP_HOME=$( cygpath --path --mixed "$APP_HOME" )
+    CLASSPATH=$( cygpath --path --mixed "$CLASSPATH" )
+
+    JAVACMD=$( cygpath --unix "$JAVACMD" )
+
+    # Now convert the arguments - kludge to limit ourselves to /bin/sh
+    for arg do
+        if
+            case $arg in                                #(
+              -*)   false ;;                            # don't mess with options #(
+              /?*)  t=${arg#/} t=/${t%%/*}              # looks like a POSIX filepath
+                    [ -e "$t" ] ;;                      #(
+              *)    false ;;
+            esac
+        then
+            arg=$( cygpath --path --ignore --mixed "$arg" )
+        fi
+        # Roll the args list around exactly as many times as the number of
+        # args, so each arg winds up back in the position where it started, but
+        # possibly modified.
+        #
+        # NB: a `for` loop captures its iteration list before it begins, so
+        # changing the positional parameters here affects neither the number of
+        # iterations, nor the values presented in `arg`.
+        shift                   # remove old arg
+        set -- "$@" "$arg"      # push replacement arg
+    done
+fi
+
+# Collect all arguments for the java command;
+#   * $DEFAULT_JVM_OPTS, $JAVA_OPTS, and $GRADLE_OPTS can contain fragments of
+#     shell script including quotes and variable substitutions, so put them in
+#     double quotes to make sure that they get re-expanded; and
+#   * put everything else in single quotes, so that it's not re-expanded.
+
+set -- \
+        "-Dorg.gradle.appname=$APP_BASE_NAME" \
+        -classpath "$CLASSPATH" \
+        org.gradle.wrapper.GradleWrapperMain \
+        "$@"
+
+# Stop when "xargs" is not available.
+if ! command -v xargs >/dev/null 2>&1
+then
+    die "xargs is not available"
+fi
+
+# Use "xargs" to parse quoted args.
+#
+# With -n1 it outputs one arg per line, with the quotes and backslashes removed.
+#
+# In Bash we could simply go:
+#
+#   readarray ARGS < <( xargs -n1 <<<"$var" ) &&
+#   set -- "${ARGS[@]}" "$@"
+#
+# but POSIX shell has neither arrays nor command substitution, so instead we
+# post-process each arg (as a line of input to sed) to backslash-escape any
+# character that might be a shell metacharacter, then use eval to reverse
+# that process (while maintaining the separation between arguments), and wrap
+# the whole thing up as a single "set" statement.
+#
+# This will of course break if any of these variables contains a newline or
+# an unmatched quote.
+#
+
+eval "set -- $(
+        printf '%s\n' "$DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS" |
+        xargs -n1 |
+        sed ' s~[^-[:alnum:]+,./:=@_]~\\&~g; ' |
+        tr '\n' ' '
+    )" '"$@"'
+
+exec "$JAVACMD" "$@"
diff --git a/2A/S3/quali_dev/tp8/gradlew.bat b/2A/S3/quali_dev/tp8/gradlew.bat
new file mode 100755
index 0000000000000000000000000000000000000000..6689b85beecde676054c39c2408085f41e6be6dc
--- /dev/null
+++ b/2A/S3/quali_dev/tp8/gradlew.bat
@@ -0,0 +1,92 @@
+@rem
+@rem Copyright 2015 the original author or authors.
+@rem
+@rem Licensed under the Apache License, Version 2.0 (the "License");
+@rem you may not use this file except in compliance with the License.
+@rem You may obtain a copy of the License at
+@rem
+@rem      https://www.apache.org/licenses/LICENSE-2.0
+@rem
+@rem Unless required by applicable law or agreed to in writing, software
+@rem distributed under the License is distributed on an "AS IS" BASIS,
+@rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+@rem See the License for the specific language governing permissions and
+@rem limitations under the License.
+@rem
+
+@if "%DEBUG%"=="" @echo off
+@rem ##########################################################################
+@rem
+@rem  Gradle startup script for Windows
+@rem
+@rem ##########################################################################
+
+@rem Set local scope for the variables with windows NT shell
+if "%OS%"=="Windows_NT" setlocal
+
+set DIRNAME=%~dp0
+if "%DIRNAME%"=="" set DIRNAME=.
+@rem This is normally unused
+set APP_BASE_NAME=%~n0
+set APP_HOME=%DIRNAME%
+
+@rem Resolve any "." and ".." in APP_HOME to make it shorter.
+for %%i in ("%APP_HOME%") do set APP_HOME=%%~fi
+
+@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
+set DEFAULT_JVM_OPTS="-Xmx64m" "-Xms64m"
+
+@rem Find java.exe
+if defined JAVA_HOME goto findJavaFromJavaHome
+
+set JAVA_EXE=java.exe
+%JAVA_EXE% -version >NUL 2>&1
+if %ERRORLEVEL% equ 0 goto execute
+
+echo.
+echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
+echo.
+echo Please set the JAVA_HOME variable in your environment to match the
+echo location of your Java installation.
+
+goto fail
+
+:findJavaFromJavaHome
+set JAVA_HOME=%JAVA_HOME:"=%
+set JAVA_EXE=%JAVA_HOME%/bin/java.exe
+
+if exist "%JAVA_EXE%" goto execute
+
+echo.
+echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME%
+echo.
+echo Please set the JAVA_HOME variable in your environment to match the
+echo location of your Java installation.
+
+goto fail
+
+:execute
+@rem Setup the command line
+
+set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar
+
+
+@rem Execute Gradle
+"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %*
+
+:end
+@rem End local scope for the variables with windows NT shell
+if %ERRORLEVEL% equ 0 goto mainEnd
+
+:fail
+rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of
+rem the _cmd.exe /c_ return code!
+set EXIT_CODE=%ERRORLEVEL%
+if %EXIT_CODE% equ 0 set EXIT_CODE=1
+if not ""=="%GRADLE_EXIT_CONSOLE%" exit %EXIT_CODE%
+exit /b %EXIT_CODE%
+
+:mainEnd
+if "%OS%"=="Windows_NT" endlocal
+
+:omega
diff --git a/2A/S3/quali_dev/tp8/settings.gradle.kts b/2A/S3/quali_dev/tp8/settings.gradle.kts
new file mode 100755
index 0000000000000000000000000000000000000000..517a7d7c03aea54db9343827693c9ef94478cfd6
--- /dev/null
+++ b/2A/S3/quali_dev/tp8/settings.gradle.kts
@@ -0,0 +1,3 @@
+
+rootProject.name = "tp8-main"
+
diff --git a/2A/S3/quali_dev/tp8/src/main/kotlin/Main.kt b/2A/S3/quali_dev/tp8/src/main/kotlin/Main.kt
new file mode 100644
index 0000000000000000000000000000000000000000..3c88340a921fdb802778edb735faadf411a8e548
--- /dev/null
+++ b/2A/S3/quali_dev/tp8/src/main/kotlin/Main.kt
@@ -0,0 +1,27 @@
+import exo2.data.Todo
+import io.ktor.client.*
+import io.ktor.client.call.*
+import org.apache.http.HttpHost
+import io.ktor.client.engine.apache.*
+import io.ktor.client.request.*
+import io.ktor.client.statement.*
+import kotlinx.serialization.decodeFromString
+import kotlinx.serialization.json.Json
+
+
+suspend fun main() {
+    val client = HttpClient(Apache){
+        engine {
+            customizeClient {
+                setProxy(HttpHost("srv-proxy-etu-2.iut-nantes.univ-nantes.prive", 3128))
+            }
+        }
+    }
+    val response: HttpResponse = client.get("http://jsonplaceholder.typicode.com/todos")
+
+    val objs : MutableList<Todo> = Json.decodeFromString<MutableList<Todo>>(response.body())
+    println(response.status)
+    println(objs)
+
+    client.close()
+}
\ No newline at end of file
diff --git a/2A/S3/quali_dev/tp8/src/main/kotlin/exo2/FakeStoreDAO.kt b/2A/S3/quali_dev/tp8/src/main/kotlin/exo2/FakeStoreDAO.kt
new file mode 100644
index 0000000000000000000000000000000000000000..e1b8b40df3e3bf43f63a1798fab59c17587ee631
--- /dev/null
+++ b/2A/S3/quali_dev/tp8/src/main/kotlin/exo2/FakeStoreDAO.kt
@@ -0,0 +1,110 @@
+package exo2
+
+import exo2.data.Product
+import exo2.data.Todo
+import exo2.data.User
+import io.ktor.client.*
+import io.ktor.client.call.*
+import io.ktor.client.engine.apache.*
+import io.ktor.client.request.*
+import io.ktor.client.statement.*
+import kotlinx.serialization.decodeFromString
+import kotlinx.serialization.json.Json
+import org.apache.http.HttpHost
+
+class FakeStoreDAO : FakeStoreI {
+
+    // use https://fakestoreapi.com/docs
+
+    //val client = HttpClient(CIO)
+   /* suspend fun init() : (client : HttpClient, response : HttpResponse){
+
+        return client,response
+    }*/
+
+    override suspend fun getProducts() : List<Product> {
+        try {
+            val client = HttpClient(Apache) {
+                engine {
+                    customizeClient {
+                        setProxy(HttpHost("srv-proxy-etu-2.iut-nantes.univ-nantes.prive", 3128))
+                    }
+                }
+            }
+            val response: HttpResponse = client.get("https://fakestoreapi.com/products")
+            val objs: MutableList<Product> =
+                Json { ignoreUnknownKeys = true }.decodeFromString<MutableList<Product>>(response.body())
+            print(objs)
+            client.close()
+            return objs
+        }
+        catch(e : Exception){
+            throw FakeStoreException()
+        }
+    }
+
+    override suspend fun getProduct(id : Int) : Product {
+            var products = getProducts()
+            for (prod in products){
+                if (prod.id == id)
+                    return prod
+            }
+            throw FakeStoreException()
+    }
+
+    override suspend fun getCategories() : List<String> {
+        var products = getProducts()
+        var categories = mutableListOf<String>()
+        for (prod in products){
+            if (prod.category !in categories)
+                categories.add(prod.category)
+        }
+        categories.sort()
+        return categories
+    }
+
+    override suspend fun getProductsByCategory(category : String) : List<Product> {
+        var products = getProducts().filter { it.category == category }
+        if (products.isEmpty())
+            throw FakeStoreException()
+        return products
+    }
+
+    /************************* PARTIE 2
+
+        à implémenter dans un 2nd temps
+
+     **************************************/
+
+    override suspend fun getUsers() : List<User> {
+        try {
+            val client = HttpClient(Apache) {
+                engine {
+                    customizeClient {
+                        setProxy(HttpHost("srv-proxy-etu-2.iut-nantes.univ-nantes.prive", 3128))
+                    }
+                }
+            }
+            val response: HttpResponse = client.get("https://fakestoreapi.com/users")
+            val objs: MutableList<User> =
+                Json { ignoreUnknownKeys = true }.decodeFromString<MutableList<User>>(response.body())
+            print(objs)
+            client.close()
+            return objs
+        }
+        catch(e : Exception){
+            throw FakeStoreException()
+        }
+    }
+
+    override suspend fun getUser(id : Int) : User {
+        var users = getUsers()
+        for (user in users){
+            if (user.id == id)
+                return user
+        }
+        throw FakeStoreException()
+    }
+
+
+}
diff --git a/2A/S3/quali_dev/tp8/src/main/kotlin/exo2/FakeStoreException.kt b/2A/S3/quali_dev/tp8/src/main/kotlin/exo2/FakeStoreException.kt
new file mode 100644
index 0000000000000000000000000000000000000000..98d87a006f8cb7deff7a61bb9e7c6f2ba1304a5f
--- /dev/null
+++ b/2A/S3/quali_dev/tp8/src/main/kotlin/exo2/FakeStoreException.kt
@@ -0,0 +1,3 @@
+package exo2
+
+class FakeStoreException(msg : String = "") : Exception(msg)
\ No newline at end of file
diff --git a/2A/S3/quali_dev/tp8/src/main/kotlin/exo2/FakeStoreI.kt b/2A/S3/quali_dev/tp8/src/main/kotlin/exo2/FakeStoreI.kt
new file mode 100644
index 0000000000000000000000000000000000000000..8d7dbad0c64ab6818c499af001cd65e4e05d7c74
--- /dev/null
+++ b/2A/S3/quali_dev/tp8/src/main/kotlin/exo2/FakeStoreI.kt
@@ -0,0 +1,58 @@
+package exo2
+
+import exo2.data.Product
+import exo2.data.User
+
+interface FakeStoreI {
+
+    /**
+     * Donne tous les produits
+     * @return une liste de produits
+     */
+    suspend fun getProducts() : List<Product>
+
+    /**
+     * Donne le produit identifié par 'id'
+     * @param id  l'identifiant du produit
+     * @return le produit identifié par 'id'
+     * @throws FakeStoreException s'il n'y a pas de produit identifié par 'id'
+     */
+    suspend fun getProduct(id : Int) : Product
+
+    /**
+     * Donne les différentes catégories de produits possible
+     * @return une liste de chaine de caractères correspondant aux catégories
+     */
+    suspend fun getCategories() : List<String>
+
+    /**
+     * Donne la liste des produits de catégorie 'category'
+     * @param category la catégorie considérée
+     * @return une liste de produits
+     * @throws FakeStoreException si "category' ne correspond à rien
+     */
+    suspend fun getProductsByCategory(category : String) : List<Product>
+
+
+    /************************* PARTIE 2
+
+    à implémenter dans un 2nd temps
+
+     **************************************/
+
+
+    /**
+     * Donne tous les utilisateurs
+     * @return une liste d'utilisateurs
+     */
+    suspend fun getUsers() : List<User>
+
+
+    /**
+     * Donne l'utilisteur identifié par 'id'
+     * @param id l'identifiant de l'utilisateur recherché
+     * @return l'utilisateur identifié par 'id"
+     * @throws FakeStoreException s'il n'y pas d'utilisateurs identifiés par 'id'
+     */
+    suspend fun getUser(id : Int) : User
+}
diff --git a/2A/S3/quali_dev/tp8/src/main/kotlin/exo2/ProductsExt.kt b/2A/S3/quali_dev/tp8/src/main/kotlin/exo2/ProductsExt.kt
new file mode 100644
index 0000000000000000000000000000000000000000..7485979070af3d515c18aebe50a73ddd1ded0fea
--- /dev/null
+++ b/2A/S3/quali_dev/tp8/src/main/kotlin/exo2/ProductsExt.kt
@@ -0,0 +1,73 @@
+package exo2
+
+import exo2.data.Product
+
+/**
+ * Donne l'id du produit contenant 'searchTitle' dans son titre
+ * @param searchTitle la partie du titre recherchée
+ * @return l'id du produit recherché ; -1 si aucun produit ne correspond
+ */
+fun List<Product>.getproductId(searchTitle : String) : Int {
+    for (el in this){
+        if(searchTitle in el.title ){
+            return el.id
+        }
+    }
+    return -1
+}
+
+/**
+ * Donne le prix total des produits de la liste, sans prendre en compte les taxes
+ * @return le prix total des produits
+ */
+fun List<Product>.totalPriceWithoutTaxes() : Double {
+    var price = 0.0
+    for (el in this){
+        price +=el.price
+    }
+    return price
+}
+
+/**
+ * Donne le prix total des produits, taxes incluses
+ * @return le prix total des produits, taxes incluses
+ */
+fun List<Product>.totalPriceTaxesIncluded() : Double {
+    var price = 0.0
+    for (el in this){
+        price +=el.price*el.taxes()
+    }
+    return price
+}
+
+/**
+ * Donne la réduction à appliquer en fonction du nombre de produits :
+la réduction est de 5% pour 5 produits ou plus et de 10% pour 20 produits ou plus
+ * @return le pourcentage de réduction
+ */
+private fun List<Product>.discount() : Double {
+    if(this.size>=5){
+        if(this.size>=20){
+            return 0.10
+        }
+        else{
+            return 0.05
+        }
+    }
+    return 0.0
+}
+
+/**
+ * Donne le cout total d'une commande
+ * cad  le cout total des produits taxes incluses - une réduction appliquée sur le cout total hors taxe
+ */
+
+fun List<Product>.totalCost() : Double {
+    var TTCprice = this.totalPriceTaxesIncluded()
+    var HTprice = this.totalPriceWithoutTaxes()
+    return TTCprice - HTprice*this.discount()
+}
+
+
+
+
diff --git a/2A/S3/quali_dev/tp8/src/main/kotlin/exo2/data/Address.kt b/2A/S3/quali_dev/tp8/src/main/kotlin/exo2/data/Address.kt
new file mode 100644
index 0000000000000000000000000000000000000000..29c9bced4e294e4717bb59787eb9c7a2eb64566c
--- /dev/null
+++ b/2A/S3/quali_dev/tp8/src/main/kotlin/exo2/data/Address.kt
@@ -0,0 +1,11 @@
+package exo2.data
+
+import kotlinx.serialization.Serializable
+
+@Serializable
+data class Address (
+    val street: String,
+    val number: Int,
+    val zipcode: String,
+    val city: String
+)
\ No newline at end of file
diff --git a/2A/S3/quali_dev/tp8/src/main/kotlin/exo2/data/Name.kt b/2A/S3/quali_dev/tp8/src/main/kotlin/exo2/data/Name.kt
new file mode 100644
index 0000000000000000000000000000000000000000..8b5481fa368664b9916d578b60e8a4e6d379a895
--- /dev/null
+++ b/2A/S3/quali_dev/tp8/src/main/kotlin/exo2/data/Name.kt
@@ -0,0 +1,9 @@
+package exo2.data
+
+import kotlinx.serialization.Serializable
+
+@Serializable
+data class Name(
+    val firstname: String,
+    val lastname: String
+)
\ No newline at end of file
diff --git a/2A/S3/quali_dev/tp8/src/main/kotlin/exo2/data/Product.kt b/2A/S3/quali_dev/tp8/src/main/kotlin/exo2/data/Product.kt
new file mode 100644
index 0000000000000000000000000000000000000000..3ba412241065fae5e62b0afbb67f64ca8bbd6525
--- /dev/null
+++ b/2A/S3/quali_dev/tp8/src/main/kotlin/exo2/data/Product.kt
@@ -0,0 +1,71 @@
+package exo2.data
+
+import exo2.FakeStoreException
+import kotlinx.serialization.Serializable
+
+
+@Serializable
+data class Product (
+    val id : Int,
+    val title : String,
+    val price : Double,
+    val description : String,
+    val category : String
+)  : Comparable<Product> {
+
+
+    /**
+     * @return le pourcentage de taxes correspondant au produit
+     */
+    fun taxes() : Double {
+        when(category){
+            ("electronics")->return 1.216
+            ("jewelery")->return 1.33
+            ("men's clothing")->return 1.10
+            ("women's clothing")->return 1.10
+        }
+        throw FakeStoreException()
+    }
+
+    /**
+     * Critère de comparaison par défaut : le prix du produit
+     * @param other le produit auquel est comparé le produit courant
+     * @return un entier négatif si le produit courant est plus petit que l'autre produit,
+     *          un entier positif si le produit courant est plus grand que l'autre produit,
+     *          0 si le produit courant est égal à l'autre produit
+     */
+    override fun compareTo(other: Product): Int {
+        if(this.price==other.price)
+            return 0
+        else if (this.price>other.price)
+            return 1
+        else
+            return -1
+    }
+
+    companion object {
+
+        val COMPARATOR_CATEGORY_THEN_TITLE_THEN_ID = object : Comparator<Product> {
+
+            /**
+             * Définition d'un autre critère de tri : par ordre alphabétique des catégories,
+             *      puis par ordre alphabétique des titres, puis par ordre des ids
+             * @param o1 le premier produit considéré
+             * @param o2 le 2nd produit considéré
+             * @return un entier <0, >0 ou =0 en fonction de si o1 est >, < ou =  à o2
+             */
+            override fun compare(o1: Product, o2: Product): Int {
+                if (o1 == o2) {
+                    return 0
+                } else if ((o1.category > o2.category) || (o1.category == o2.category && o1.title > o2.title) || (o1.category == o2.category && o1.title == o2.title && o1.id > o2.id)) {
+                    return 1
+                } else {
+                    return -1
+                }
+            }
+        }
+
+    }
+
+}
+
diff --git a/2A/S3/quali_dev/tp8/src/main/kotlin/exo2/data/Todo.kt b/2A/S3/quali_dev/tp8/src/main/kotlin/exo2/data/Todo.kt
new file mode 100644
index 0000000000000000000000000000000000000000..4e0c81ab6c4aee9b549d9fc0646dd9f7ae266794
--- /dev/null
+++ b/2A/S3/quali_dev/tp8/src/main/kotlin/exo2/data/Todo.kt
@@ -0,0 +1,11 @@
+package exo2.data
+
+import kotlinx.serialization.Serializable
+
+@Serializable
+data class Todo(
+    val userId: Int,
+    val id: Int,
+    val title: String,
+    val completed: Boolean
+)
\ No newline at end of file
diff --git a/2A/S3/quali_dev/tp8/src/main/kotlin/exo2/data/User.kt b/2A/S3/quali_dev/tp8/src/main/kotlin/exo2/data/User.kt
new file mode 100644
index 0000000000000000000000000000000000000000..91e93624f143fea15457b2bafac695aa1865d08e
--- /dev/null
+++ b/2A/S3/quali_dev/tp8/src/main/kotlin/exo2/data/User.kt
@@ -0,0 +1,11 @@
+package exo2.data
+
+import kotlinx.serialization.Serializable
+
+@Serializable
+data class User(
+    val address : Address,
+    val id: Int,
+    val email: String,
+    val name : Name
+)
\ No newline at end of file
diff --git a/2A/S3/quali_dev/tp8/src/main/kotlin/exo2/sortstrategies/ByCategoryTitleId.kt b/2A/S3/quali_dev/tp8/src/main/kotlin/exo2/sortstrategies/ByCategoryTitleId.kt
new file mode 100644
index 0000000000000000000000000000000000000000..4cd7d3bb14dfc8e95ba151826aa8bc2fe7179788
--- /dev/null
+++ b/2A/S3/quali_dev/tp8/src/main/kotlin/exo2/sortstrategies/ByCategoryTitleId.kt
@@ -0,0 +1,15 @@
+package exo2.sortstrategies
+
+import exo2.data.Product
+
+open class ByCategoryTitleId :  SortAndFilter {
+
+    /**
+     * Donne toute la liste de produits, triée par catégorie, titre et id
+     * @param products une liste de produits
+     * @return une liste de produits triée
+     */
+    override fun sortAndFilter(products : List<Product>): List<Product> {
+       return products.sortedWith(Product.COMPARATOR_CATEGORY_THEN_TITLE_THEN_ID)
+    }
+}
diff --git a/2A/S3/quali_dev/tp8/src/main/kotlin/exo2/sortstrategies/CategoryContainsByCategoryTitleId.kt b/2A/S3/quali_dev/tp8/src/main/kotlin/exo2/sortstrategies/CategoryContainsByCategoryTitleId.kt
new file mode 100644
index 0000000000000000000000000000000000000000..b1e78dded7d08c47ccbaf39a7f06376a31836d04
--- /dev/null
+++ b/2A/S3/quali_dev/tp8/src/main/kotlin/exo2/sortstrategies/CategoryContainsByCategoryTitleId.kt
@@ -0,0 +1,16 @@
+package exo2.sortstrategies
+
+import exo2.data.Product
+
+class CategoryContainsByCategoryTitleId(val keyword : String) : ByCategoryTitleId() {
+
+    /**
+     * Donne uniquement les produits de liste dont la catégorie contient 'keyword', triée par catégorie, titre et id
+     * @param products une liste de produits
+     * @return une liste de produits triée et filtrée
+     */
+    override fun sortAndFilter(products : List<Product>): List<Product> {
+       return super.sortAndFilter(products).filter { it.category == keyword }
+    }
+
+}
\ No newline at end of file
diff --git a/2A/S3/quali_dev/tp8/src/main/kotlin/exo2/sortstrategies/PriceLessThanByPrice.kt b/2A/S3/quali_dev/tp8/src/main/kotlin/exo2/sortstrategies/PriceLessThanByPrice.kt
new file mode 100644
index 0000000000000000000000000000000000000000..cdadee6b98fdefa227895837a0eaf26858023baa
--- /dev/null
+++ b/2A/S3/quali_dev/tp8/src/main/kotlin/exo2/sortstrategies/PriceLessThanByPrice.kt
@@ -0,0 +1,15 @@
+package exo2.sortstrategies
+
+import exo2.data.Product
+
+class PriceLessThanByPrice(val limitingPrice : Double) : SortAndFilter {
+
+    /**
+     * Donne uniquement les produits de la liste ayant un prix < à 'limitingPrice', triés par prix
+     * @param products une liste de produits
+     * @return une liste de produits filtrée et triée
+     */
+    override fun sortAndFilter(products : List<Product>): List<Product> {
+        return products.filter { it.price<limitingPrice}.sortedBy { it.price }
+    }
+}
diff --git a/2A/S3/quali_dev/tp8/src/main/kotlin/exo2/sortstrategies/SortAndFilter.kt b/2A/S3/quali_dev/tp8/src/main/kotlin/exo2/sortstrategies/SortAndFilter.kt
new file mode 100644
index 0000000000000000000000000000000000000000..ef39ba835fb5bde9cf38b709c49e5e61c7c4de78
--- /dev/null
+++ b/2A/S3/quali_dev/tp8/src/main/kotlin/exo2/sortstrategies/SortAndFilter.kt
@@ -0,0 +1,13 @@
+package exo2.sortstrategies
+
+import exo2.data.Product
+
+interface SortAndFilter {
+
+        /**
+         * applique des critères de tri et de filtre sur la liste de produits
+         * @param products une liste de produits
+         * @return une liste de produits filtrée et triée
+         */
+        fun sortAndFilter(products : List<Product>) : List<Product>
+}
\ No newline at end of file
diff --git a/2A/S3/quali_dev/tp8/src/test/kotlin/exercice3/TestExemple.kt b/2A/S3/quali_dev/tp8/src/test/kotlin/exercice3/TestExemple.kt
new file mode 100644
index 0000000000000000000000000000000000000000..997207086013a69cf54e548686e9839b0cd601b6
--- /dev/null
+++ b/2A/S3/quali_dev/tp8/src/test/kotlin/exercice3/TestExemple.kt
@@ -0,0 +1,170 @@
+package exercice3
+
+import io.ktor.client.*
+import io.ktor.client.call.*
+import io.ktor.client.engine.apache.*
+import io.ktor.client.request.*
+import kotlinx.coroutines.runBlocking
+import kotlinx.serialization.Serializable
+import kotlinx.serialization.decodeFromString
+import kotlinx.serialization.json.Json
+import org.apache.http.HttpHost
+import org.junit.jupiter.api.Assertions.assertEquals
+import org.junit.jupiter.api.Assertions.assertFalse
+import org.junit.jupiter.api.BeforeEach
+import org.junit.jupiter.api.Test
+import org.junit.jupiter.api.assertAll
+
+
+@Serializable
+data class Todo(
+    val userId : Int,
+    val id : Int,
+    val title : String,
+    val completed : Boolean)
+
+@Serializable
+data class Comment(
+    val postId : Int,
+    val id : Int,
+    val name : String,
+    val email : String,
+    val body : String)
+
+@Serializable
+data class Photo(
+    val albumId : Int,
+    val id : Int,
+    val title : String,
+    val url : String,
+    val thumbnailUrl : String)
+//errors
+@Serializable
+data class Error(
+    val code : Int,
+    val message: String)
+
+@Serializable
+data class Reponse(
+    val error : Error)
+
+//questions
+@Serializable
+data class Results(
+    val results : List<Element>)
+
+@Serializable
+data class Element(
+    val category : String,
+    val question: String,
+    val correct_answer: String)
+
+class TestExemple {
+
+    lateinit var client : HttpClient
+    @BeforeEach
+    fun reinit() {
+        client = HttpClient(Apache) {
+            engine {
+                customizeClient {
+                    setProxy(HttpHost("srv-proxy-etu-2.iut-nantes.univ-nantes.prive", 3128))
+                }
+            }
+        }
+    }
+
+    @Test
+    fun testTodo3() {
+        runBlocking {
+            // On réalise l'appel à l'API
+            val response = client.get("http://jsonplaceholder.typicode.com/todos/3")
+            // On analyse le JSON récupéré
+            val todo = Json { ignoreUnknownKeys = true }.decodeFromString<Todo>(response.body<String>())
+            // On teste si les données récupérées sont OK
+            assertAll(
+                { assertEquals(3, todo.id) },
+                { assertEquals(1, todo.userId) },
+                { assertFalse( todo.completed)}
+            )
+        }
+    }
+
+    @Test
+    fun testAPI1() {
+        runBlocking {
+            // On réalise l'appel à l'API
+            val response = client.get("https://jsonplaceholder.typicode.com/comments")
+            // On analyse le JSON récupéré
+            val comments = Json { ignoreUnknownKeys = true }.decodeFromString<List<Comment>>(response.body<String>())
+            // On teste si les données récupérées sont OK
+            assertAll(
+                { assertEquals(500, comments.size) }
+            )
+        }
+    }
+
+    @Test
+    fun testAPI2() {
+        runBlocking {
+            // On réalise l'appel à l'API
+            val response = client.get("https://jsonplaceholder.typicode.com/photos")
+            // On analyse le JSON récupéré
+            val photos = Json { ignoreUnknownKeys = true }.decodeFromString<List<Photo>>(response.body<String>())
+            // On teste si les données récupérées sont OK
+            assertAll(
+                { assertEquals(5000, photos.size) }
+            )
+        }
+    }
+
+    @Test
+    fun testAPI3() {
+        runBlocking {
+            // On réalise l'appel à l'API
+            val response = client.get("https://jsonplaceholder.typicode.com/comments/42")
+            // On analyse le JSON récupéré
+            val comment= Json { ignoreUnknownKeys = true }.decodeFromString<Comment>(response.body<String>())
+            // On teste si les données récupérées sont OK
+            assertAll(
+                { assertEquals(9, comment.postId) },
+                { assertEquals("Shemar@ewell.name", comment.email) },
+            )
+        }
+    }
+
+    @Test
+    fun testAPI4() {
+        runBlocking {
+            // On réalise l'appel à l'API
+            val response = client.get("https://www.googleapis.com/youtube/v3/channels?part=contentDetails" )
+            println(response.body<String>())
+            // On analyse le JSON récupéré
+            val reponse= Json { ignoreUnknownKeys = true }.decodeFromString<Reponse>(response.body<String>())
+            print("a")
+            // On teste si les données récupérées sont OK
+            assertAll(
+                { assertEquals(403, reponse.error.code) },
+                { assertEquals("The request is missing a valid API key.",  reponse.error.message) },
+            )
+        }
+    }
+
+    @Test
+    fun testAPI5() {
+        runBlocking {
+            // On réalise l'appel à l'API
+            val response = client.get("https://opentdb.com/api.php?amount=10&category=15&difficulty=hard&type=boolean")
+            // On analyse le JSON récupéré
+            val results= Json { ignoreUnknownKeys = true }.decodeFromString<Results>(response.body())
+            println()
+            // On teste si les données récupérées sont OK
+            assertAll(
+                { assertEquals(10, results.results.size) },
+                { for (el in results.results) { assertEquals("Entertainment: Video Games", el.category) }},
+                { assertEquals(10, results.results.filter { it.category == "Entertainment: Video Games" }.size )},
+                { assertEquals("True", results.results[9].correct_answer) },
+            )
+        }
+    }
+}
+
diff --git a/2A/S3/quali_dev/tp8/src/test/kotlin/testexo2/TestFakeStoreDAO_products.kt b/2A/S3/quali_dev/tp8/src/test/kotlin/testexo2/TestFakeStoreDAO_products.kt
new file mode 100644
index 0000000000000000000000000000000000000000..bdc18b002c3f31f076cf4e1cceab40f5b4cd4980
--- /dev/null
+++ b/2A/S3/quali_dev/tp8/src/test/kotlin/testexo2/TestFakeStoreDAO_products.kt
@@ -0,0 +1,121 @@
+package testexo2
+
+import exo2.FakeStoreDAO
+import exo2.FakeStoreException
+import exo2.FakeStoreI
+import exo2.data.Product
+import kotlinx.coroutines.runBlocking
+import org.junit.jupiter.api.Assertions.*
+import org.junit.jupiter.api.BeforeEach
+import org.junit.jupiter.api.Test
+import org.junit.jupiter.api.assertThrows
+import org.junit.jupiter.params.ParameterizedTest
+import org.junit.jupiter.params.provider.CsvSource
+
+class TestFakeStoreDAO_products {
+
+    lateinit var dao : FakeStoreI
+
+    @BeforeEach
+    fun init() {
+        dao = FakeStoreDAO()
+    }
+
+    @Test
+    fun testAllProducts() {
+        lateinit var products : List<Product>
+        runBlocking {
+            products = dao.getProducts()
+        }
+        assertEquals(20, products.size)
+    }
+
+    @Test
+    fun testProduct1ok() {
+        val product1 = Product(1,
+            "Fjallraven - Foldsack No. 1 Backpack, Fits 15 Laptops",
+            109.95,
+            "Your perfect pack for everyday use and walks in the forest. Stash your laptop (up to 15 inches) in the padded sleeve, your everyday",
+            "men's clothing")
+        runBlocking {
+            assertEquals(product1, dao.getProduct(1))
+        }
+    }
+
+    @ParameterizedTest(name = "product {0} : ok")
+    @CsvSource(
+        "1, 110, Fjallraven, padded sleeve",
+        "4, 16, Casual Slim Fit, body builds vary by person",
+        "5, 695, Women's Legends Naga, mythical water dragon",
+        "19, 8, Short Sleeve Moisture, cationic polyester interlock"
+    )
+    fun testProductIdOK(id : Int, price : Double, title : String, desc: String) {
+        lateinit var product : Product
+        runBlocking {
+            product = dao.getProduct(id)
+        }
+        assertAll(
+            { assertEquals(id, product.id) },
+            { assertEquals(price, product.price, 0.1) },
+            { assertTrue(product.title.contains(title)) },
+            { assertTrue(product.description.contains(desc)) },
+        )
+    }
+
+    @ParameterizedTest(name = "product {0} : ko")
+    @CsvSource(
+        "0","-1","21","22","42","99","100","666"
+    )
+    fun testProductBadId(badId : Int) {
+        assertThrows<FakeStoreException> {
+            runBlocking {
+                dao.getProduct(badId)
+            }
+        }
+    }
+
+    @Test
+    fun testCategories() {
+        val categories = listOf("electronics", "jewelery", "men's clothing", "women's clothing")
+        runBlocking {
+            assertIterableEquals(categories,dao.getCategories())
+        }
+    }
+
+
+    @ParameterizedTest(name = "category {0} : ok")
+    @CsvSource(
+        "electronics, 6", "jewelery, 4", "men's clothing, 4", "women's clothing, 6"
+    )
+    fun testCategoryOk(category : String, size : Int) {
+        lateinit var products : List<Product>
+        runBlocking {
+            products = dao.getProductsByCategory(category)
+        }
+        assertAll(
+            { assertEquals(size, products.size) }
+        )
+    }
+
+    @Test
+    fun tesBadCategoryAzerty() {
+        assertThrows<FakeStoreException> {
+            runBlocking {
+                dao.getProductsByCategory("azerty")
+            }
+        }
+    }
+
+    @ParameterizedTest(name = "category {0} : ko")
+    @CsvSource(
+        "azerty", "electronic", "jeweleri", "men'sclothing", "Women's clothing"
+    )
+    fun tesBadCategory(badCategory : String) {
+        assertThrows<FakeStoreException> {
+            runBlocking {
+                dao.getProductsByCategory(badCategory)
+            }
+        }
+    }
+
+}
\ No newline at end of file
diff --git a/2A/S3/quali_dev/tp8/src/test/kotlin/testexo2/TestFakeStoreDAO_users.kt b/2A/S3/quali_dev/tp8/src/test/kotlin/testexo2/TestFakeStoreDAO_users.kt
new file mode 100644
index 0000000000000000000000000000000000000000..3c2133ad500f44ffdddd926497f54b07cab6d0bb
--- /dev/null
+++ b/2A/S3/quali_dev/tp8/src/test/kotlin/testexo2/TestFakeStoreDAO_users.kt
@@ -0,0 +1,63 @@
+package testexo2
+
+import exo2.*
+import exo2.data.Address
+import exo2.data.Name
+import exo2.data.Product
+import exo2.data.User
+import kotlinx.coroutines.runBlocking
+import org.junit.jupiter.api.Assertions
+import org.junit.jupiter.api.BeforeEach
+import org.junit.jupiter.api.Test
+import org.junit.jupiter.api.assertThrows
+import org.junit.jupiter.params.ParameterizedTest
+import org.junit.jupiter.params.provider.CsvSource
+
+
+class TestFakeStoreDAO_users {
+
+    lateinit var dao : FakeStoreI
+
+    @BeforeEach
+    fun init() {
+        dao = FakeStoreDAO()
+    }
+
+
+    @Test
+    fun testAllProducts() {
+        lateinit var products : List<User>
+        runBlocking {
+            products = dao.getUsers()
+        }
+        Assertions.assertEquals(10, products.size)
+    }
+
+    @Test
+    fun testProduct1ok() {
+        val product1 = User(
+            Address("adams St", 245, "80796-1234","san Antonio"),
+            5,
+            "derek@gmail.com",
+            Name("derek","powell")
+        )
+        runBlocking {
+            Assertions.assertEquals(product1, dao.getUser(5))
+        }
+    }
+
+
+    @ParameterizedTest(name = "user {0} : ko")
+    @CsvSource(
+        "0","-1","21","22","42","99","100","666"
+    )
+    fun testProductBadId(badId : Int) {
+        assertThrows<FakeStoreException> {
+            runBlocking {
+                dao.getUser(badId)
+            }
+        }
+    }
+
+
+}
\ No newline at end of file
diff --git a/2A/S3/quali_dev/tp8/src/test/kotlin/testexo2/TestProduct.kt b/2A/S3/quali_dev/tp8/src/test/kotlin/testexo2/TestProduct.kt
new file mode 100644
index 0000000000000000000000000000000000000000..87ea510aa8a75851846cbd6e58f3d75fd1d75e02
--- /dev/null
+++ b/2A/S3/quali_dev/tp8/src/test/kotlin/testexo2/TestProduct.kt
@@ -0,0 +1,25 @@
+package testexo2
+
+import exo2.data.Product
+import org.junit.jupiter.api.Test
+import org.junit.jupiter.api.Assertions.*
+import org.junit.jupiter.api.assertAll
+
+class TestProduct {
+
+    @Test
+    fun testProduct() {
+        val product = Product(42,
+            "Test product",
+            10.0,
+            "Test product des.",
+            "men's clothing")
+        assertAll(
+            { assertEquals("Test product", product.title) },
+            { assertEquals(42, product.id) },
+            { assertEquals("Test product des.", product.description) },
+            { assertEquals(10.0, product.price) },
+            { assertEquals("men's clothing", product.category) }
+        )
+    }
+}
\ No newline at end of file
diff --git a/2A/S3/quali_dev/tp8/src/test/kotlin/testexo2/TestProductsExt.kt b/2A/S3/quali_dev/tp8/src/test/kotlin/testexo2/TestProductsExt.kt
new file mode 100644
index 0000000000000000000000000000000000000000..a43b0bc69fdd5d5db0f4cf8f7d9f6b8300be3e7d
--- /dev/null
+++ b/2A/S3/quali_dev/tp8/src/test/kotlin/testexo2/TestProductsExt.kt
@@ -0,0 +1,149 @@
+package testexo2
+
+import exo2.*
+import exo2.data.Product
+import kotlinx.coroutines.runBlocking
+import org.junit.jupiter.api.Assertions.*
+import org.junit.jupiter.api.BeforeEach
+import org.junit.jupiter.api.Test
+import org.junit.jupiter.params.ParameterizedTest
+import org.junit.jupiter.params.provider.CsvSource
+
+class TestProductsExt {
+
+    lateinit var dao : FakeStoreI
+    lateinit var products : List<Product>
+    lateinit var product : Product
+
+    @BeforeEach
+    fun init() {
+        dao = FakeStoreDAO()
+        runBlocking {
+            products = dao.getProducts()
+        }
+    }
+
+    @Test
+    fun testProductIdKo() {
+        assertEquals(-1, products.getproductId("xxxxxx"))
+    }
+
+    @ParameterizedTest(name = "product {0} : ok")
+    @CsvSource(
+        "1, Fjallraven",
+        "4, Casual Slim Fit",
+        "5, Women's Legends Naga",
+        "19, Short Sleeve Moisture"
+    )
+    fun testProductIdOK(id : Int, title : String) {
+        assertEquals(id, products.getproductId(title))
+    }
+
+    @Test
+    fun testTotalPricesWithoutTaxes0() {
+        product = Product(666,
+            "Test product",
+            10.0,
+            "Test product des.",
+            "men's clothing")
+        assertEquals(10.0, listOf(product).totalPriceWithoutTaxes(),0.01)
+    }
+
+    @Test
+    fun testTotalPricesWithoutTaxes() {
+        assertEquals(3240.92, products.totalPriceWithoutTaxes(),0.01)
+    }
+
+
+    @Test
+    fun testTotalPricesTaxesIncluded0() {
+        product = Product(666,
+            "Test product",
+            10.0,
+            "Test product des.",
+            "men's clothing")
+        assertEquals(11.0, listOf(product).totalPriceTaxesIncluded(),0.01)
+    }
+
+    @Test
+    fun testTotalPricesTaxesIncluded1() {
+        product = Product(666,
+            "Test product",
+            10.0,
+            "Test product des.",
+            "women's clothing")
+        assertEquals(11.0, listOf(product).totalPriceTaxesIncluded(),0.01)
+    }
+
+    @Test
+    fun testTotalPricesTaxesIncluded2() {
+        product = Product(666,
+            "Test product",
+            10.0,
+            "Test product des.",
+            "jewelery")
+        assertEquals(13.30, listOf(product).totalPriceTaxesIncluded(),0.01)
+    }
+
+    @Test
+    fun testTotalPricesTaxesIncluded3() {
+        product = Product(666,
+            "Test product",
+            10.0,
+            "Test product des.",
+            "electronics")
+        assertEquals(12.16, listOf(product).totalPriceTaxesIncluded(),0.01)
+    }
+
+    @Test
+    fun testTotalPricesTaxesIncluded() {
+        assertEquals(3999.75, products.totalPriceTaxesIncluded(),0.01)
+    }
+
+    @Test
+    fun testTotalCost0() {
+        product = Product(666,
+            "Test product",
+            10.0,
+            "Test product des.",
+            "men's clothing")
+        assertEquals(11.0, listOf(product).totalCost(),0.01)
+    }
+
+    @Test
+    fun testTotalCost00() {
+        product = Product(666,
+            "Test product",
+            10.0,
+            "Test product des.",
+            "men's clothing")
+        assertEquals(listOf(product).totalPriceTaxesIncluded(), listOf(product).totalCost(),0.01)
+    }
+
+    @Test
+    fun testTotalCost() {
+        assertTrue(products.size >= 20)
+        assertEquals(3999.75 - 3240.92 * 0.10, products.totalCost(),0.01)
+    }
+
+    @Test
+    fun testTotalCost2() {
+        runBlocking {
+            products = dao.getProductsByCategory("jewelery")
+        }
+        assertTrue(products.size < 5)
+        assertEquals(1175.70, products.totalCost(),0.01)
+    }
+
+    @Test
+    fun testTotalCost3() {
+        runBlocking {
+            products = dao.getProductsByCategory("electronics")
+        }
+        assertTrue(products.size >= 5)
+        assertEquals(2425.91 - 1994.99 * 0.05, products.totalCost(),0.01)
+    }
+
+
+
+}
\ No newline at end of file
diff --git a/2A/S3/quali_dev/tp8/src/test/kotlin/testexo2/TestSortStrategies.kt b/2A/S3/quali_dev/tp8/src/test/kotlin/testexo2/TestSortStrategies.kt
new file mode 100644
index 0000000000000000000000000000000000000000..57350cf9cfd92a682578f15b8a6b05fc62982972
--- /dev/null
+++ b/2A/S3/quali_dev/tp8/src/test/kotlin/testexo2/TestSortStrategies.kt
@@ -0,0 +1,146 @@
+package testexo2
+
+import exo2.FakeStoreDAO
+import exo2.FakeStoreI
+import exo2.data.Product
+import exo2.sortstrategies.ByCategoryTitleId
+import exo2.sortstrategies.CategoryContainsByCategoryTitleId
+import exo2.sortstrategies.PriceLessThanByPrice
+import exo2.sortstrategies.SortAndFilter
+import kotlinx.coroutines.runBlocking
+import org.junit.jupiter.api.Assertions
+import org.junit.jupiter.api.Assertions.assertTrue
+import org.junit.jupiter.api.BeforeEach
+import org.junit.jupiter.api.Test
+
+class TestSortStrategies {
+
+    lateinit var dao : FakeStoreI
+    lateinit var products : List<Product>
+    lateinit var sortStrategy : SortAndFilter
+
+    @BeforeEach
+    fun init() {
+        dao = FakeStoreDAO()
+        runBlocking {
+            products = dao.getProducts()
+        }
+    }
+
+    @Test
+    fun testProductsSorted_useComparable() {
+        val expected_ids = listOf(19,18,7,8,20,4,2,16,17,3,15,9,10,11,1,12,6,13,5,14)
+        val expected_prices = listOf(7.95,9.85,9.99,10.99,12.99,15.99,22.3,29.95,39.99,
+            55.99,56.99,64.0,109.0,109.0,109.95,114.0,168.0,
+            599.0,695.0,999.99)
+
+        products = products.sorted()
+
+        for(i in 0.. products.size-1) {
+            Assertions.assertAll(
+                { Assertions.assertEquals(expected_ids[i], products[i].id) },
+                { Assertions.assertEquals(expected_prices[i], products[i].price) }
+            )
+        }
+    }
+
+    @Test
+    fun testProductsSortedByComparator() {
+        val expected_ids = listOf(13,14,10,11,9,12,5,8,6,7,1,2,4,3,15,20,16,18,19,17)
+
+        products = products.sortedWith(Product.COMPARATOR_CATEGORY_THEN_TITLE_THEN_ID)
+
+        for(i in 0.. products.size-1) {
+            Assertions.assertAll(
+                { Assertions.assertEquals(expected_ids[i], products[i].id) },
+            )
+        }
+    }
+
+    @Test
+    fun testStrategyPriceLessThan1000() {
+        val expected_ids = listOf(19,18,7,8,20,4,2,16,17,3,15,9,10,11,1,12,6,13,5,14)
+
+        sortStrategy = PriceLessThanByPrice( 1_000.0)
+        products = sortStrategy.sortAndFilter(products)
+
+        for(i in 0.. products.size-1) {
+            Assertions.assertEquals(expected_ids[i], products[i].id)
+        }
+    }
+
+    @Test
+    fun testStrategyPriceLessThan40() {
+        val expected_ids = listOf(19,18,7,8,20,4,2,16,17)
+
+        sortStrategy = PriceLessThanByPrice(40.0)
+        products = sortStrategy.sortAndFilter(products)
+
+        for(i in 0.. products.size-1) {
+            Assertions.assertEquals(expected_ids[i], products[i].id)
+        }
+    }
+
+    @Test
+    fun testSTRATEGYPriceLessThan10() {
+        val expected_ids = listOf(19,18,7)
+
+        sortStrategy = PriceLessThanByPrice(10.0)
+        products = sortStrategy.sortAndFilter(products)
+
+        for(i in 0.. products.size-1) {
+            Assertions.assertEquals(expected_ids[i], products[i].id)
+        }
+    }
+
+    @Test
+    fun testSTRATEGYPriceLessThan7() {
+        sortStrategy = PriceLessThanByPrice(7.0)
+        products = sortStrategy.sortAndFilter(products)
+        assertTrue(products.isEmpty())
+    }
+
+    @Test
+    fun testStrategyByCategoryTitleId() {
+        val expected_ids = listOf(13,14,10,11,9,12,5,8,6,7,1,2,4,3,15,20,16,18,19,17)
+
+        sortStrategy = ByCategoryTitleId()
+        products = sortStrategy.sortAndFilter(products)
+
+        for(i in 0.. products.size-1) {
+            Assertions.assertEquals(expected_ids[i], products[i].id)
+        }
+    }
+
+    @Test
+    fun testStrategyCategoryContainsByCategoryTitleIdKO() {
+        sortStrategy = CategoryContainsByCategoryTitleId("xxx")
+        products = sortStrategy.sortAndFilter(products)
+        assertTrue(products.isEmpty())
+    }
+
+    @Test
+    fun testStrategyCaTegoryContainsByJeweleryCategoryTitleId() {
+        val expected_ids = listOf(5,8,6,7)
+
+        sortStrategy = CategoryContainsByCategoryTitleId("jewelery")
+        products = sortStrategy.sortAndFilter(products)
+
+        for(i in 0.. products.size-1) {
+            Assertions.assertEquals(expected_ids[i], products[i].id)
+        }
+    }
+
+    @Test
+    fun testStrategyCaTegoryContainsByClothingCategoryTitleId() {
+        val expected_ids = listOf(1,2,4,3,15,20,16,18,19,17)
+
+        sortStrategy = CategoryContainsByCategoryTitleId("clothing")
+        products = sortStrategy.sortAndFilter(products)
+
+        for(i in 0.. products.size-1) {
+            Assertions.assertEquals(expected_ids[i], products[i].id)
+        }
+    }
+
+}
\ No newline at end of file