From 6f8e7864c3c108fde2220817ce45375f0a7fdbed Mon Sep 17 00:00:00 2001
From: "mathieu.schiess@edu.ge.ch" <mathieu.schiess@posteo.ch>
Date: Thu, 23 Jan 2025 23:10:30 +0100
Subject: [PATCH] =?UTF-8?q?Premi=C3=A8re=20version=20utilisable=20du=20NB?=
 =?UTF-8?q?=20variables2?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 Notebooks/05b_Les_variables2.ipynb |  72 +----------------------------
 Notebooks/imgs_chap1/div_eucl.png  | Bin 0 -> 9324 bytes
 2 files changed, 1 insertion(+), 71 deletions(-)
 create mode 100644 Notebooks/imgs_chap1/div_eucl.png

diff --git a/Notebooks/05b_Les_variables2.ipynb b/Notebooks/05b_Les_variables2.ipynb
index f9579cb..1cd9925 100644
--- a/Notebooks/05b_Les_variables2.ipynb
+++ b/Notebooks/05b_Les_variables2.ipynb
@@ -1,71 +1 @@
-{
- "cells": [
-  {
-   "cell_type": "markdown",
-   "metadata": {},
-   "source": "# 5. Les variables 2 (entrée-sortie, type)\n"
-  },
-  {
-   "cell_type": "markdown",
-   "metadata": {},
-   "source": "## Types de Données\nPython est un langage à typage dynamique, ce qui signifie que vous n'avez pas besoin de spécifier le type de données d'une variable lorsque vous la créez.\n\n### Principaux types de données en Python\n- `int` : pour les entiers\n- `float` : pour les nombres à virgule flottante\n- `str` : pour les chaînes de caractères\n- `bool` : pour les valeurs booléennes (True ou False)\n\n```python\n# Exemple de différents types de données\nentier = 10\nchaine = \"Bonjour\"\nflottant = 12.85\nbooleen = True\n"
-  },
-  {
-   "cell_type": "markdown",
-   "metadata": {},
-   "source": "<h3 style=\"color:chocolate;background-color:papayawhip;\" > <i class=\"fa fa-question\" aria-hidden=\"true\"> </i> &nbsp; Quizz </h3> \n\n\nQue stocke la variable `pi` dans le code suivant ?\n\n```python\npi = 3.14159\n\n```\n\n<ol style=\"list-style-type: upper-alpha\">\n  <li>Une chaîne de caractères</li>\n  <li>Un entier</li>\n  <li>Un nombre à virgule flottante</li>\n  <li>Une valeur booléenne</li>\n</ol>\n"
-  },
-  {
-   "cell_type": "raw",
-   "metadata": {},
-   "source": "Ma réponse: "
-  },
-  {
-   "cell_type": "markdown",
-   "metadata": {},
-   "source": "<details>\n<summary style=\"border-left:3px solid #3c763d; border-radius:2pt; width:100%; color:#3c763d; padding:6px; background-color: #dff0d8\"> \nSolution\n</summary>  \n\n<div style=\"border-left:3px solid #3c763d; border-radius:2pt; color:#3c763d; padding:6px; background-color: #eff0e8\">\nC. Un nombre à virgule flottante\n</div>\n</details>"
-  },
-  {
-   "cell_type": "markdown",
-   "metadata": {},
-   "source": "<h3 style=\"color:chocolate;background-color:papayawhip;\" > <i class=\"fa fa-question\" aria-hidden=\"true\"> </i> &nbsp; Question </h3> \n\nIndiquez le type des variables (entier, flottant ou chaîne de caractères) permettant de stocker sur votre smartphone les informations suivantes :\n\n- le nom d’un contact\n- le numéro de téléphone d’un contact\n- un SMS\n- le prix d'un croissant\n- le code de votre partage de connexion Wi-Fi\n- le pourcentage _affiché_ de batterie restante\n- ma note à la dernière épreuves de Mathématiques\n\n\n    \n</div>"
-  },
-  {
-   "cell_type": "raw",
-   "metadata": {},
-   "source": "Mes réponses :\n\n- le nom d’un contact : \n- le numéro de téléphone d’un contact : \n- un SMS :\n- le prix d'un croissant : \n- le code de votre partage de connexion Wi-Fi : \n- le pourcentage affiché de batterie restante :\n- ma note à la dernière épreuves de Mathématiques : "
-  },
-  {
-   "cell_type": "markdown",
-   "metadata": {},
-   "source": "<details>\n<summary style=\"border-left:3px solid #3c763d; border-radius:2pt; width:100%; color:#3c763d; padding:6px; background-color: #dff0d8\"> \nSolutions\n</summary>  \n\n<div style=\"border-left:3px solid #3c763d; border-radius:2pt; color:#3c763d; padding:6px; background-color: #eff0e8\">\n- le nom d’un contact : Une chaîne de caractères\n    \n- le numéro de téléphone d’un contact : Une entier\n    \n- un SMS : Une chaîne de caractères\n    \n- le prix d'un croissant : Un nombre à virgule flottante\n    \n- le code de votre partage de connexion Wi-Fi :  Une chaîne de caractères\n    \n- le pourcentage affiché de batterie restante : Une entier\n    \n- ma note à la dernière épreuves de Mathématiques : Un nombre à virgule flottante\n    \n</div>\n</details>"
-  },
-  {
-   "cell_type": "code",
-   "execution_count": null,
-   "metadata": {
-    "trusted": false
-   },
-   "outputs": [],
-   "source": ""
-  },
-  {
-   "cell_type": "code",
-   "execution_count": null,
-   "metadata": {
-    "trusted": false
-   },
-   "outputs": [],
-   "source": ""
-  }
- ],
- "metadata": {
-  "kernelspec": {
-   "display_name": "Python 3",
-   "language": "python",
-   "name": "python3"
-  }
- },
- "nbformat": 4,
- "nbformat_minor": 2
-}
+{"cells":[{"metadata":{},"cell_type":"markdown","source":"# 5. Les variables 2 (entrée-sortie, type)\n"},{"metadata":{},"cell_type":"markdown","source":"## Types de Données\nPython est un langage à typage dynamique, ce qui signifie que vous n'avez pas besoin de spécifier le type de données d'une variable lorsque vous la créez.\n\n### Principaux types de données en Python\n- `int` : pour les nombres entiers\n- `float` : pour les nombres à virgule flottante\n- `str` : pour les chaînes de caractères\n- `bool` : pour les valeurs booléennes (True ou False)\n\n```python\n# Exemple de différents types de données\nentier = 10\nchaine = \"Bonjour\"\nflottant = 12.85\nbooleen = True\n"},{"metadata":{},"cell_type":"markdown","source":"<h3 style=\"color:chocolate;background-color:papayawhip;\" > <i class=\"fa fa-question\" aria-hidden=\"true\"> </i> &nbsp; Quizz </h3> \n\n\nQue stocke la variable `pi` dans le code suivant ?\n\n```python\npi = 3.14159\n\n```\n\n<ol style=\"list-style-type: upper-alpha\">\n  <li>Une chaîne de caractères</li>\n  <li>Un entier</li>\n  <li>Un nombre à virgule flottante</li>\n  <li>Une valeur booléenne</li>\n</ol>\n"},{"metadata":{},"cell_type":"raw","source":"Ma réponse: "},{"metadata":{},"cell_type":"markdown","source":"<details>\n<summary style=\"border-left:3px solid #3c763d; border-radius:2pt; width:100%; color:#3c763d; padding:6px; background-color: #dff0d8\"> \nSolution\n</summary>  \n\n<div style=\"border-left:3px solid #3c763d; border-radius:2pt; color:#3c763d; padding:6px; background-color: #eff0e8\">\nC. Un nombre à virgule flottante\n</div>\n</details>"},{"metadata":{},"cell_type":"markdown","source":"<h3 style=\"color:chocolate;background-color:papayawhip;\" > <i class=\"fa fa-question\" aria-hidden=\"true\"> </i> &nbsp; Question </h3> \n\n \n```\nEn informatique, `int` est l'abréviation pour\n\nA) international\nB) entier\nC) interne\nD) intelligent\n```\n    \n</div>"},{"metadata":{},"cell_type":"raw","source":"Ma réponse: "},{"metadata":{},"cell_type":"markdown","source":"<details>\n<summary style=\"border-left:3px solid #3c763d; border-radius:2pt; width:100%; color:#3c763d; padding:6px; background-color: #dff0d8\"> \nSolution\n</summary>  \n\n<div style=\"border-left:3px solid #3c763d; border-radius:2pt; color:#3c763d; padding:6px; background-color: #eff0e8\">\nB) entier\n</div>\n</details>"},{"metadata":{},"cell_type":"markdown","source":"<h3 style=\"color:chocolate;background-color:papayawhip;\" > <i class=\"fa fa-question\" aria-hidden=\"true\"> </i> &nbsp; Question </h3> \n\nIndiquez le type des variables (entier, flottant ou chaîne de caractères) permettant de stocker sur votre smartphone les informations suivantes :\n\n- le nom d’un contact\n- le numéro de téléphone d’un contact\n- un SMS\n- le prix d'un croissant\n- le code de votre partage de connexion Wi-Fi\n- le pourcentage _affiché_ de batterie restante\n- ma note à la dernière épreuves de Mathématiques\n\n\n    \n</div>"},{"metadata":{},"cell_type":"raw","source":"Mes réponses :\n\n- le nom d’un contact : \n- le numéro de téléphone d’un contact : \n- un SMS :\n- le prix d'un croissant : \n- le code de votre partage de connexion Wi-Fi : \n- le pourcentage affiché de batterie restante :\n- ma note à la dernière épreuves de Mathématiques : "},{"metadata":{},"cell_type":"markdown","source":"<details>\n<summary style=\"border-left:3px solid #3c763d; border-radius:2pt; width:100%; color:#3c763d; padding:6px; background-color: #dff0d8\"> \nSolutions\n</summary>  \n\n<div style=\"border-left:3px solid #3c763d; border-radius:2pt; color:#3c763d; padding:6px; background-color: #eff0e8\">\n- le nom d’un contact : Une chaîne de caractères\n    \n- le numéro de téléphone d’un contact : Une entier\n    \n- un SMS : Une chaîne de caractères\n    \n- le prix d'un croissant : Un nombre à virgule flottante\n    \n- le code de votre partage de connexion Wi-Fi :  Une chaîne de caractères\n    \n- le pourcentage affiché de batterie restante : Une entier\n    \n- ma note à la dernière épreuves de Mathématiques : Un nombre à virgule flottante\n    \n</div>\n</details>"},{"metadata":{"trusted":false},"cell_type":"markdown","source":"## Demander à l'utilisateur d'entrer une valeur :  `input` \n\nLa fonction `input('question')` permet de demander une entrée (input) à l'utilisateur.\nL'utilisateur voit le texte `question` affiché à la console et doit répondre à cette question. Il termine son entrée avec la touche Enter.\n\nLa réponse de l'utilisateur est ensuite mémorisée dans une variable que nous appelons `x` dans cet exemple.\nEnsuite, nous pouvons utiliser cette variable `x` dans la suite du programme, par exemple comme argument dans une fonction `print()`.\n"},{"metadata":{"trusted":true},"cell_type":"code","source":"x = input('Entrez votre nom: ')\nprint('Bonjour', x)","execution_count":null,"outputs":[]},{"metadata":{},"cell_type":"markdown","source":"<h3 style=\"color:teal;background-color:azure;\" > <i class=\"fa fa-pencil\" aria-hidden=\"true\"> </i> &nbsp; Exercice 1 </h3>\n\nAjoutez une troisième question et utilisez la réponse dans un `print()`.\n\n"},{"metadata":{"trusted":true},"cell_type":"code","source":"nom = input('Entrez votre nom: ')\nprint('Bonjour', nom)\n\nage = input('Entrez votre âge: ')\nprint('Très bien', nom, 'vous avez', age, 'ans')\n","execution_count":null,"outputs":[]},{"metadata":{},"cell_type":"markdown","source":"<h3 style=\"color:teal;background-color:azure;\" > <i class=\"fa fa-pencil\" aria-hidden=\"true\"> </i> &nbsp; Exercice 2 </h3>\n\nEcrire un code qui demande à l’utilisateur son prénom dans une première question puis qui demande dans une deuxième question son nom de famille et qui écrit ensuite:<br>\n\t\n    `\"Bienvenu Prénom Nom\"`\n"},{"metadata":{"trusted":true},"cell_type":"code","source":"","execution_count":null,"outputs":[]},{"metadata":{},"cell_type":"markdown","source":"## Demander un nombre\n\nLa fonction `input()` permet d'obtenir une entrée de l'utilisateur. Mais attention !\nLa valeur retournée est une chaine de caractères (de type string `str`). Nous pouvons le prouver avec la fonction `type()`.\n"},{"metadata":{"trusted":true},"cell_type":"code","source":"x = input('Entrez un nombre: ')\nprint(type(x))","execution_count":null,"outputs":[]},{"metadata":{},"cell_type":"markdown","source":"<div class=\"alert alert-block alert-info\">\n<b>&#9889; A retenir : </b> <br>\nUne variable entrée au clavier par un <i>input</i> est toujours du type <i>str</i> c'est à dire considéré comme une chaine de caractères.\n</ul>\n</div>"},{"metadata":{},"cell_type":"markdown","source":"Pour pouvoir utiliser cette valeur dans un calcul, nous devons la transformer en nombre. Pour convertir une chaine de caractères en un nombre à virgule flottante nous utilisons la fonction de conversion `float()`.\n"},{"metadata":{"trusted":true},"cell_type":"code","source":"x = '1.5'\nprint(type(x))          # la variable x contient une chaîne\nprint(type(float(x)))   # la fonction float(x) renvoie un nombre","execution_count":null,"outputs":[]},{"metadata":{},"cell_type":"markdown","source":"### Exemple\n\nOn souhaite avoir un programme qui permet de calculer la moyenne de deux nombres qui sont fournis par l'utilisateur. Tester la proposition de programme suivante:"},{"metadata":{"trusted":true},"cell_type":"code","source":"#Demande à l'utilisateur deux nombres puis calcule et affiche leur somme\nnombre1 = input(\"Taper un premier nombre : \")\nnombre2 = input(\"Taper un deuxième nombre : \")\nmoyenne = (nombre1 + nombre2)/2\nprint(\"La somme de ces deux nombres est \",moyenne)","execution_count":null,"outputs":[]},{"metadata":{},"cell_type":"markdown","source":"On comprend le problème : pour python `nombre1` et `nombre2` sont en fait des chaines de caractères par conséquent, calculer leur moyenne n'a pas de sens ! \n\nPour résoudre ce problème nous devons convertir `nombre1` et `nombre2` en nombre à virgule, cela se fait grâce à l'instruction `float`. Voici le programme corrigé :\n"},{"metadata":{"trusted":true},"cell_type":"code","source":"#Demande à l'utilisateur deux nombres puis calcule et affiche leur somme\nnombre1 = float(input(\"Taper un premier nombre : \")) #float() permet de convertir la valeur entrée en flottant\nnombre2 = float(input(\"Taper un deuxième nombre : \")) \nmoyenne = (nombre1 + nombre2)/2\nprint(\"La moyenne de ces deux nombres est \",moyenne)","execution_count":null,"outputs":[]},{"metadata":{},"cell_type":"markdown","source":"<h3 style=\"color:teal;background-color:azure;\" > <i class=\"fa fa-pencil\" aria-hidden=\"true\"> </i> &nbsp; Exercice 3</h3>Complétez le programme pour afficher la surface du cercle.\n\n"},{"metadata":{"trusted":true},"cell_type":"code","source":"print('Circle')\nr = float(input('Entrez le rayon: '))\npi = 3.14\nprint()\nprint('rayon =', r)\nprint('diamètre =', 2 * r)\nprint('circonférence =', pi * 2 * r)\nprint('surface =', ...)","execution_count":null,"outputs":[]},{"metadata":{},"cell_type":"markdown","source":"Nous pouvons également créer des programmes où nous demandons plusieurs valeurs à l'utilisateur. Cette fois, nous permettons seulement l'utilisation de nombres entiers, et donc transformons la chaine obtenue avec `int()` en nombre entier.\n\n<h3 style=\"color:teal;background-color:azure;\" > <i class=\"fa fa-pencil\" aria-hidden=\"true\"> </i> &nbsp; Exercice 4 </h3>Complétez le programme pour afficher le périmètre et la diagonale.\n\n"},{"metadata":{"trusted":true},"cell_type":"code","source":"print('Rectangle')\na = float(input('Entrez la largeur: '))\nb = float(input('Entrez la longueur: '))\n\nprint('surface =', a * b)\nprint('périmètre =', ...)\nprint('diagonale =', ...)","execution_count":null,"outputs":[]},{"metadata":{},"cell_type":"markdown","source":"<h3 style=\"color:teal;background-color:azure;\" > <i class=\"fa fa-pencil\" aria-hidden=\"true\"> </i> &nbsp; Exercice 5 </h3>\n\nChacun des programmes suivants devrait demander à l’utilisateur deux nombres, et écrire le produit de ces deux nombres mais il contient au moins une erreur. Corrigez chacun des programmes puis testez les\n\n**Programme A** "},{"metadata":{"trusted":true},"cell_type":"code","source":"int(input(\"premier nombre: \"))\nint(input(\"deuxième nombre: \"))\nprint(premier*deuxième)\n","execution_count":null,"outputs":[]},{"metadata":{},"cell_type":"markdown","source":"**Programme B**"},{"metadata":{"trusted":true},"cell_type":"code","source":"x=input(\"premier nombre: \")\ny=input(\"deuxième nombre: \")\nx*y","execution_count":null,"outputs":[]},{"metadata":{},"cell_type":"markdown","source":"**Programme C**"},{"metadata":{"trusted":true},"cell_type":"code","source":"x=int(\"premier nombre : \")\ny=int(\"deuxième nombre: \")\nz=x*y\nprint(“z”)","execution_count":null,"outputs":[]},{"metadata":{},"cell_type":"markdown","source":"<h3 style=\"color:teal;background-color:azure;\" > <i class=\"fa fa-pencil\" aria-hidden=\"true\"> </i> &nbsp; Exercice 6 </h3>\n\nComplétez le programme Python ci-dessous qui calcule la surface d'un rectangle après avoir demandé sa largeur et sa longueur.\n\n"},{"metadata":{"trusted":true},"cell_type":"code","source":"# Programme pour calculer la surface d'un rectangle à partir de sa longueur et de sa largeur\nlongueur = _____(input(\"Entrer la longueur du rectangle : \")) #longueur doit être un flottant utiliser la conversion !\nlargeur = _____(_____(\"Entrer la largeur du rectangle : \"))\nsurface = _______*_________\n_____(\"La surface du rectangle est :\",___________)","execution_count":null,"outputs":[]},{"metadata":{},"cell_type":"markdown","source":"<h3 style=\"color:teal;background-color:azure;\" > <i class=\"fa fa-pencil\" aria-hidden=\"true\"> </i> &nbsp; Exercice 7 </h3>\n\nChacun des programmes devrait demander à l’utilisateur deux nombres n, et écrire les n premiers multiples de 100. Corriger les erreurs de chaque programme afin qu’il fonctionne.\n\n\n**Programme A** "},{"metadata":{"trusted":true},"cell_type":"code","source":"n = int(input(“Nombre de multiples: ”))\nfor _ in range(n):\n    print(x)\n    x+100\n","execution_count":null,"outputs":[]},{"metadata":{},"cell_type":"markdown","source":"**Programme B**"},{"metadata":{"trusted":true},"cell_type":"code","source":"x = int(input(“Nombre de multiples: “))\nn = 100\nfor _ in range(x):\n    print(x)\n    x = x+100","execution_count":null,"outputs":[]},{"metadata":{},"cell_type":"markdown","source":"**Programme C**"},{"metadata":{"trusted":true},"cell_type":"code","source":"x = int(input(“Nombre de multiples: “))\nn = 100\nfor _ in range(x):\n      print(n)\nn = n+n","execution_count":null,"outputs":[]},{"metadata":{},"cell_type":"markdown","source":"**Programme D**"},{"metadata":{"trusted":true},"cell_type":"code","source":"x = int(input(“Nombre de multiples:”))\nfor _ in range(x):\n    n = 100\n    print(n)\n    n = n+100","execution_count":null,"outputs":[]},{"metadata":{},"cell_type":"markdown","source":"**Programme E**"},{"metadata":{"trusted":true},"cell_type":"code","source":"x=int(input(“Nombre de multiples:”))\nn = 100\nfor _ in range (x):\n    n = n + 100\n    print(n)\n","execution_count":null,"outputs":[]},{"metadata":{},"cell_type":"markdown","source":"<h3 style=\"color:teal;background-color:azure;\" > <i class=\"fa fa-pencil\" aria-hidden=\"true\"> </i> &nbsp; Exercice 8 </h3>\n\nCpméàtez le programme Python qui demande à l’utilisateur un mot, et un nombre n et qui écrit n fois de suite le mot donné par l’utilisateur."},{"metadata":{"trusted":true},"cell_type":"code","source":"n = input(...)\nmot = input(...)\nfor #à compléter\n    #à compléter","execution_count":null,"outputs":[]},{"metadata":{},"cell_type":"markdown","source":"<h3 style=\"color:teal;background-color:azure;\" > <i class=\"fa fa-pencil\" aria-hidden=\"true\"> </i> &nbsp; Exercice 9 </h3>\n\nOn considère le programme suivant:\n\n```python\n\nfrom turtle import *\n\nn = 10\nangle = int(360 / n)\n\nfor k in range(n):\n    forward(100)\n    right(angle)\n    \ndone()\n```\n\n1. Tester le programme ci-dessus, puis modifiez le en définissant une fonction `polygone(lg, n)` qui permet de tracer des polygones avec `n` côtés et de longueur `lg`. Le programme doit produire la même figure mais en utilisant la fonction  `polygone(lg, n)`."},{"metadata":{"trusted":true},"cell_type":"code","source":"from turtle import *\n\nn = 10\nangle = int(360 / n)\n\nfor k in range(n):\n    forward(100)\n    right(angle)\n\ndone()","execution_count":null,"outputs":[]},{"metadata":{},"cell_type":"markdown","source":"2. Modifiez le programme précédant afin d’obtenir un programme qui demande à l’utilisateur⋅trice la taille et le nombre de côtés du polygone puis trace ce polygone.\n\nExemple d’exécution du programme: \n\n```\nQuel est la nombre de côtés de votre polygone : 8\nQuel est la taille de votre polygone : 100\n```\nqui devrait générer un hexagone de côté 100:"},{"metadata":{"trusted":true},"cell_type":"code","source":"# votre programme complet...\n","execution_count":null,"outputs":[]},{"metadata":{},"cell_type":"markdown","source":"<h3 style=\"color:teal;background-color:azure;\" > <i class=\"fa fa-pencil\" aria-hidden=\"true\"> </i> &nbsp; Exercice 10 </h3>\n\nCompléter le programme pour avoir un programme qui demande un nombre à l’utilisateur et qui dessine un carré ayant cette longueur comme côté.\n\n"},{"metadata":{"trusted":true},"cell_type":"code","source":"from turtle import *\n\nn = 10\nangle = int(360 / n)\n\nfor k in range(n):\n    forward(100)\n    right(angle)\n\ndone()","execution_count":null,"outputs":[]},{"metadata":{},"cell_type":"markdown","source":"# 🟥  Fin\n\n<div class=\"alert alert-danger\" style=\"border-left:5px solid #a94442;border-radius: 5px;\">\n    \n- **Ne pas Oublier de sauvegarder son travail.**\n    \n- **Pour effectuer** une sauvegarde personnelle du document obtenu :\n   - utilisez le menu `Fichier / Enregistrer sous…`.\n   - nomez le fichier `variables1.ipynb`\n   - choisissez de sauver votre fichier dans `Documents/1IN/Programmation/Les_variables`.\n\n    </div>\n\n---\n\n#### Remarque générale\n\nCe document c'est inspiré des notebook trouvé sur\n- Les ressources pédagogiques du catalogue modulo https://modulo-info.ch/. \n- Les ressources pédagogiques du [Lycée Mounier](https://info-mounier.fr/snt/python/) \n\nLe notebook est sous license Creative Commons [BY-NC-SA](https://creativecommons.org/licenses/?lang=fr)\n![Licence Creative Commons](https://i.creativecommons.org/l/by-nc-sa/4.0/88x31.png)"},{"metadata":{"trusted":true},"cell_type":"code","source":"","execution_count":null,"outputs":[]}],"metadata":{"kernelspec":{"display_name":"Python 3","language":"python","name":"python3"}},"nbformat":4,"nbformat_minor":2}
\ No newline at end of file
diff --git a/Notebooks/imgs_chap1/div_eucl.png b/Notebooks/imgs_chap1/div_eucl.png
new file mode 100644
index 0000000000000000000000000000000000000000..84087f0cf22ff8cb1925a206aca3c37cfbdd1666
GIT binary patch
literal 9324
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
KpUXO@geCxI+Xa;X

literal 0
HcmV?d00001

-- 
GitLab