Compare commits

..

354 Commits

Author SHA1 Message Date
Emmanuel Garette 3b22741753 Construction de la formation 2022-05-18 09:18:18 +02:00
Laurent Gourvenec 75de93dac7 TC1: ajout d'une slide de présentation de l'exo de modification de config
Ca permet d'atterrir sur la slide sans donner la réponse
2022-05-16 09:11:44 +02:00
Laurent Gourvenec bd432c45a0 TC1: remplace telnet par nc 2022-05-16 09:10:30 +02:00
Laurent Gourvenec da37b7c308 TC1: simplifie l'exo zephir d'ajout d'un serveur 2022-05-16 09:09:58 +02:00
Laurent Gourvenec c38063dded TC1: typo/reformulation 2022-05-16 09:05:25 +02:00
Laurent Gourvenec 6d4e62fc97 TC1: précision sur Apparmor 2022-05-16 09:01:58 +02:00
Laurent Gourvenec 0685edd3f4 TC1: fix exercice chmod 2022-05-16 09:01:36 +02:00
Laurent Gourvenec cd7bf15562 TC1: séparation des comptes annuaires et systèmes 2022-05-16 08:55:58 +02:00
Laurent Gourvenec a8873188c1 TC1: Mise-à-jour des canaux d'information 2022-05-16 08:55:14 +02:00
Laurent Gourvenec b422152614 TC1: précisions sur l'ajout de serveur dans ead 2022-05-16 08:51:33 +02:00
Laurent Gourvenec a5955a7789 TC1: Horus est deprecated à partir de la 2.8 2022-05-16 08:34:52 +02:00
Laurent Gourvenec 6eb5d88d53 TC1: AmonEcole n'est plus deprecated en 2.8 2022-05-16 08:34:21 +02:00
Laurent Gourvenec e19526eabc TC1: complète description du module Amon 2022-05-16 08:34:01 +02:00
Emmanuel Garette 48090f19b2 add images 2022-05-10 16:27:32 +02:00
Laurent Gourvenec 60e1c0d1c7 Espacement de l'adresse en pied de page 2022-05-10 11:06:19 +02:00
Laurent Gourvenec 17e648bb8e Utilisation de python3 pour setup_main_tex_file.py 2022-05-10 10:31:25 +02:00
Emmanuel Garette 840b914e42 mise à jour tronc commun 2022-05-06 12:06:16 +02:00
Emmanuel Garette fcdac6c12c update 2022-05-06 12:06:16 +02:00
Benjamin Bohard b2f942cd43 Ajouter un modèle pour des diapositives de corrigés 2022-03-11 12:38:34 +01:00
Benjamin Bohard 68a3d73368 Print usage when called without options 2022-03-08 16:17:58 +01:00
Benjamin Bohard e769a88532 Ne pas suivre les fichiers de pygmentize 2021-08-02 16:29:59 +02:00
Benjamin Bohard 966de3c5ec Mise à jour du programme 2021-08-02 16:20:34 +02:00
Benjamin Bohard 744a0f2575 Ajout de l’option -l dans la documentation (limitation du nombre de niveaux de titre dans le plan généré) 2021-07-19 12:44:25 +02:00
Benjamin Bohard ea89dd2971 Ajuster le nombre de niveau de titre dans le plan 2021-07-19 12:27:06 +02:00
Benjamin Bohard 7ec35b0b14 Révision du plan des programmes de formation 2021-07-19 12:10:23 +02:00
Benjamin Bohard 0abe05a3e9 Suppression de la table de matière superflue 2021-07-19 11:47:21 +02:00
Benjamin Bohard 771b5e868b Pas d’espacement si un seul logo 2021-07-19 11:38:23 +02:00
Benjamin Bohard 89da104103 Mode verbatim pour le xml 2021-07-19 11:30:05 +02:00
Benjamin Bohard 2a25eea872 Construction de la formation 2021-07-19 10:54:04 +02:00
Benjamin Bohard 2b031286e7 Description sommaire de l’intégration du script setup_main_tex_file.py avec git 2021-02-01 14:19:30 +01:00
Benjamin Bohard 9b9cbf2aae Mise à jour de la documentation de la commande setup_main_tex_file.py 2021-02-01 13:57:52 +01:00
Benjamin Bohard 2d620e845d Mise à jour des coordonnées 2021-02-01 09:58:32 +01:00
Benjamin Bohard 0f63031575 Another command 2021-01-29 17:09:39 +01:00
Benjamin Bohard 14cbf47527 Créer les fragments pour le diaporama 2021-01-29 16:39:04 +01:00
Benjamin Bohard 983a8f3cf6 Le contenu du programme est toujours dérivé du fichier diaporama.tex 2021-01-29 16:26:03 +01:00
Benjamin Bohard 7edb5ee916 Keep slash in branch name 2021-01-29 15:18:33 +01:00
Benjamin Bohard 30a6389514 Unknown reference 2021-01-29 15:02:46 +01:00
Benjamin Bohard 7e0d5c15e5 Refactor merge 2020-09-10 15:26:49 +02:00
Benjamin Bohard 619b74c815 attempt to merge 2020-09-10 14:17:08 +02:00
Benjamin Bohard 231394b1cd Add client-side hook 2020-09-08 09:21:18 +02:00
Benjamin Bohard 70ad496b06 Attempt to rebase 2020-09-07 19:21:23 +02:00
Benjamin Bohard b6a5963a3e comment 2020-09-07 19:03:08 +02:00
Benjamin Bohard 99c62ebfce Prefix branch names 2020-09-07 19:03:01 +02:00
Benjamin Bohard d01c139026 comment 2020-09-07 18:40:21 +02:00
Benjamin Bohard 6345c3d081 Tester le checkout avant le commit 2020-09-07 18:40:07 +02:00
Benjamin Bohard d509550f69 Simplify getting identity 2020-09-07 18:30:56 +02:00
Benjamin Bohard 3c860a893b comment 2020-09-07 18:22:12 +02:00
Benjamin Bohard 8ad3dbba85 comment 2020-09-07 18:18:16 +02:00
Benjamin Bohard 72d42ec54c git integration 2020-09-07 18:18:00 +02:00
Benjamin Bohard 3563d18c0c éléments pour les exercices 2020-09-07 16:43:21 +02:00
Benjamin Bohard 3d9fb7b622 Homogénéisation de la procédure 2020-09-07 16:15:55 +02:00
Benjamin Bohard 95277a2891 Dépendance sur minted pour la classe article et corrections mineures 2020-09-07 09:08:44 +02:00
Benjamin Bohard eb6ee9c947 Output outline in contenu.tex rather than on standard output 2020-09-04 19:41:11 +02:00
Benjamin Bohard c10d63b115 Présentation de la procédure proposée pour la production de supports de formation 2020-09-04 16:23:35 +02:00
Benjamin Bohard 277ec60b8b Agregate sublevel and remove duplicates 2020-09-04 11:15:12 +02:00
Benjamin Bohard 7377037c1a Filter out some slides 2020-09-04 11:01:38 +02:00
Benjamin Bohard bb699bf2ee Print outline from master tex file 2020-09-04 10:35:58 +02:00
Benjamin Bohard 4b691783be Nettoyage des documents maître tronc_commun_*.tex 2020-08-07 11:56:45 +02:00
Benjamin Bohard 30b3986d0e Correction de la formation tronc commun 2 2020-08-07 11:47:02 +02:00
Benjamin Bohard 9a806c1c13 Révision de la formation tronc commun 2 2020-08-07 11:26:43 +02:00
Benjamin Bohard a2db5cca70 Gestion des logos en titre et pied de page 2020-08-07 11:26:43 +02:00
Emmanuel Garette 70f77c883b exemple diagnose affichage de inactif si désactivé 2020-08-07 11:14:23 +02:00
Emmanuel Garette 69b53f235a diagnose 2020-08-07 11:07:07 +02:00
Benjamin Bohard 0c0b9f5d83 Identifier l’ancien répertoire dans lequel les anciens contenus doivent être récupérés 2020-08-07 09:36:45 +02:00
Benjamin Bohard e304fdd10f Rassembler les logos pouvant servir dans les pied de page et pages de titre 2020-08-07 08:59:10 +02:00
Benjamin Bohard 7788840b8d Ajout de variable pour les métadonnées pdf 2020-08-07 08:34:33 +02:00
Benjamin Bohard 4bba6387ca Révision de la formation tronc commun 2 2020-08-06 17:16:10 +02:00
Benjamin Bohard 13a1493753 Découpage de la phase pratique du schedule 2020-08-06 11:27:33 +02:00
Benjamin Bohard 98e661ce00 Corrections de la partie firewall et schedule 2020-08-06 11:19:27 +02:00
Benjamin Bohard b13ec41fc4 Corrections sur la formation Tronc commun 1 2020-08-06 10:53:51 +02:00
Benjamin Bohard d18602db2a Découpage de la phase pratique des quatre phases 2020-08-06 10:29:05 +02:00
Benjamin Bohard d6654ab9b7 Corrections de la première séquence de Tronc commun 1 2020-08-06 10:11:36 +02:00
Benjamin Bohard a2aa06ce9f Ajout du titre de section pour la partie application zéphir 1 2020-08-06 09:07:44 +02:00
Benjamin Bohard ea50dd758c Ajout du panorama des modules pour la formation EOLE tronc commun 2020-08-06 08:33:45 +02:00
Benjamin Bohard 6c05c0bd94 Checkout du répertoire modules_EOLE_Envole avec modifications pour ScribeAD 2020-08-05 17:13:02 +02:00
Benjamin Bohard 93be45617e Révision partielle de formations EOLE 2020-08-05 17:08:33 +02:00
Emmanuel Garette a781e00a5a correction 2020-07-06 16:52:20 +02:00
wpetit b2324e3917 React Native: ajout slides 2020-02-17 13:54:24 +01:00
wpetit 93f78ff5d5 React+Redux: ajout slides Redux Saga 2020-02-17 13:53:20 +01:00
wpetit 4aab1733df Dev: ignorer les fichiers pdfs et zip 2020-02-04 11:20:22 +01:00
wpetit ed1e24330f Dev: ajout plans de formation Logomotion 2020-02-04 11:18:55 +01:00
vfebvre b2b0764be2 désactivation de l'état LB qui fait rebooter la machine non stop 2019-11-05 15:25:43 +01:00
Emmanuel Garette f0de8947a0 mise à jour des formations 2019-10-10 12:28:04 +02:00
Sylvain 912314e24f Mise à jour notes formation NoSQL 2019-10-03 10:50:06 +02:00
Sylvain 8a06e036a1 Merge branch 'master' of ssh://forge.cadoles.com:4242/Cadoles/formations 2019-10-03 10:49:27 +02:00
Sylvain ad6aced650 Ajout documents pour cours NoSQL 2019-09-22 22:14:24 +02:00
Sylvain 0091d980b3 Cours hébergement web 2019-05-20 11:25:26 +02:00
Benjamin Bohard 4dca21830a Programme de formation pour l’ain 2019-05-10 10:49:45 +02:00
Philippe Caseiro 2a39b88df1 Merge branch 'master' of https://forge.cadoles.com/Cadoles/formations 2019-03-25 13:23:10 +01:00
Benjamin Bohard 42e475449d Mise à jour des listes de modules disponibles 2019-03-19 16:01:32 +01:00
Arnaud Fornerot a699b7551d ajout cours agile cesi 2019-03-15 09:35:55 +01:00
wpetit 2a06cee004 CESI: Ajout fiche module Hébergement Web + feuille de notation 2019-02-06 14:13:21 +01:00
wpetit a3bce17093 Ajout ressources formation CESI: Hébergement Web 2019-02-06 14:10:04 +01:00
Philippe Caseiro b48ccf2bb2 Mise à jour du programme amon/sphynx 2019-02-06 11:36:52 +01:00
Emmanuel Garette 18647029a7 ajouter l'option shell-escape à xelatex pour les exercices TC2 2018-12-20 15:24:13 +01:00
wpetit a970852f3b CESI - Exo Microbloggr Solution - Création de statuts fonctionnelle 2018-11-28 16:56:54 +01:00
wpetit eaa659f3c6 CESI - Exo Microbloggr Solution - Authentification fonctionnelle 2018-11-28 14:47:09 +01:00
wpetit 68ccdca3a4 Intro Big Data: mise à jour slides + données d'exemple graphe 2018-09-27 07:23:06 +02:00
wpetit 89ba44063d Architecture N Tiers: ajout QCM 2018-09-27 07:20:36 +02:00
gwen 4c92c99472 some cleaning 2018-09-13 10:09:32 +02:00
wpetit a58dc496c4 CESI: Intro Big Data - ajout exercice bdd clé/valeur et graphe 2018-09-05 21:54:11 +02:00
wpetit 8f84189ed5 CESI: Intro Big Data - ajout tuile + exercice BDD orientée graphe 2018-09-05 07:30:09 +02:00
wpetit a29c349d75 CESI: Intro Big Data, biblio + environnement démo Hadoop 2018-08-24 17:17:35 +02:00
gwen 37fccd7d8c algo et data science 2018-08-24 14:09:25 +02:00
wpetit ff92e072df CESI: Intro Big Data, base bibliographie 2018-08-22 11:26:45 +02:00
gwen 2db270359c python2 -> python subfolder 2018-08-21 10:26:27 +02:00
gwen ee81eaad1b en and fr python3 courses 2018-08-21 10:25:44 +02:00
gwen 8c6997b27d ancien cours python -> python2 2018-08-20 21:02:38 +02:00
gwen 8ab75d1eac algorithmique : api et paramètres 2018-08-20 21:01:58 +02:00
wpetit 9220531442 CESI: DevOps, mise à jour des slides 2018-06-28 06:50:04 +02:00
wpetit 1ead473830 CESI: Métiers DevOps, base slides 2018-06-27 16:09:39 +02:00
wpetit bee347f833 DIIAGE: session 23/03/2018 2018-03-23 11:51:43 +01:00
wpetit 2aea564151 Logomotion: React+Redux, corrections typo 2018-03-22 18:08:34 +01:00
wpetit 1baa61d2e8 Logomotion: Qualification 2018-03-20 14:03:21 +01:00
wpetit 74a2e26f18 Logomotion: React + Redux 2018-03-12 21:20:13 +01:00
wpetit 7c0f21ae7f CESI: Architectures N Tiers, ajout mini projet 'Alfred' 2018-03-05 19:07:27 +01:00
wpetit 5f537a3a77 DIIAGE: ajout derniers cours 2018-03-02 12:03:52 +01:00
wpetit 5255503103 Logomotion: Base des slides pour la formation sur la qualification 2018-02-20 09:03:38 +01:00
wpetit e4cad32252 CESI: Sécurité entreprise, maquette + support OK 2018-02-04 18:27:46 +01:00
wpetit 56066ac24f CESI: Sécurité des entreprises, infrastructure Vagrant avec supervision Prometheus 2018-02-04 15:55:09 +01:00
wpetit 85d1a97452 CESI: présentation + maquette Vagrant Sécurité entreprise 2018-02-01 17:35:41 +01:00
wpetit 482bc0e960 Logomotion: maj formation Sécurité Web 2018-01-25 22:10:30 +01:00
wpetit 0fe8dd7112 Logomotion: Sécurité Web, sécurisation du serveur GNU/Linux 2018-01-23 22:46:57 +01:00
wpetit 171b1e512c Logomotion: sécurité web, ajout exercice métrologie 2018-01-22 22:33:49 +01:00
wpetit 16df9d12da CESI: Architecture N Tiers, exemple microservices 2018-01-22 22:14:30 +01:00
wpetit 7cefd73d13 Logomotion: Sécurité Web 2018-01-22 22:13:04 +01:00
wpetit 03b9ed5f1e DIIAGE: session 19/01/2018 2018-01-19 11:50:12 +01:00
wpetit 0eb9d2e1e1 DIIAGE: Prépa session 19/01/2018 2018-01-17 22:58:53 +01:00
wpetit 608c203acd CESI: architectures n tiers 2018-01-14 21:13:12 +01:00
wpetit 703ca7d4fb CESI: Architecture N tiers 2018-01-13 18:02:29 +01:00
wpetit c8caed6efc CESI: Architecture N tiers, exercice 2018-01-13 16:53:31 +01:00
wpetit e041aa9b9f CESI: Architecture N Tiers 2018-01-13 15:28:05 +01:00
wpetit ea0439f8ab CESI: mise à jour fiche de préparation Architecture N tiers 2018-01-10 22:42:48 +01:00
wpetit f1d44dc9ed Logomotion: mise à jour introduction framework javascript 2018-01-09 22:52:41 +01:00
wpetit 3a14479bc1 Logomotion: tour d'horizon Javascript, base EmberJS 2018-01-08 23:03:36 +01:00
wpetit 6eaec99f06 Logomotion: Introduction Javascript 2018-01-08 17:35:19 +01:00
wpetit 8d4a57ed9b Logomotion: slides Symfony3 seconde journée 2017-12-27 16:12:22 +01:00
wpetit 63cb07d03e Logomotion: suites des slides Symfony3 2017-12-26 17:38:01 +01:00
wpetit cdc80c6a5f CESI: réorganisation de l'arborescence 2017-12-26 10:46:56 +01:00
wpetit fc85a3a7f1 DIIAGE: réorganisation des questions 2017-12-26 10:46:06 +01:00
wpetit 25d1f582a8 DIIAGE: TP sécurité des applicaiton web & métrologie appliquée à la sécurité 2017-12-22 10:16:12 +01:00
wpetit 4d76474d99 Logomotion: Volet sécurité des applications Web, métrologie / prometheus 2017-12-21 16:55:59 +01:00
wpetit 03faa7a663 Diiage: préparation QCM évaluation 22/12/2017 2017-12-20 12:00:44 +01:00
wpetit a130fab2f8 Remise à niveau Symfony3: slides 2017-12-14 22:14:18 +01:00
wpetit ccb80c82e7 Symfony3: slides + revue planning journée 1 2017-12-14 20:05:25 +01:00
wpetit cb42e8734b Remise à niveau Symfony3: slides + planning 2017-12-14 17:32:17 +01:00
wpetit 729f2c318a CESI: Mise à jour slides/planning "Sécurité en entreprise" 2017-12-12 11:35:12 +01:00
wpetit 3050355eb5 CESI: Mise à jour programme formation "Sécurité en entreprise" 2017-12-11 17:17:43 +01:00
wpetit 0ed669f1ae Ajout des fichiers de lock LibreOffice à la liste des ignorés 2017-12-11 15:48:06 +01:00
wpetit 0c3263693a CESII: Mise à jour slides, planning et notes 2017-12-11 15:46:52 +01:00
wpetit f357f5ac72 CESII: Slides formation sécurité entreprise 2017-12-11 14:06:38 +01:00
wpetit ee8cfea049 DIIAGE: mise à jour sujet TP 2017-12-08 12:03:24 +01:00
wpetit 8085490457 DIIAGE: Préparation session 20171208 2017-12-08 11:38:41 +01:00
wpetit e3e4b6291f Ajout rendus TP 2017-12-08 11:37:44 +01:00
wpetit bd7082e887 Préparation cours DIIAGE 08/12/2017 2017-12-06 22:04:40 +01:00
wpetit 00f9d125d1 Création de fiches d'exemple 2017-11-17 12:07:08 +01:00
wpetit f383613cbd Ajout supports formation DIIAGE (DEV & RES 3) 2017-11-16 16:27:53 +01:00
gwen affa70b31c algo avancée 2017-10-24 17:13:41 +02:00
gwen 63c4a7e2fc exercices de programmation raisonnée 2017-10-23 18:05:32 +02:00
gwen 05e68b4d5e algo avancée 2017-10-17 16:23:38 +02:00
gwen 2edd0ea2f1 algo : problèmes NP complets 2017-10-17 14:18:26 +02:00
gwen 9ad29e7541 méthodes de tri rapide en python 2017-10-16 17:16:19 +02:00
gwen 75bb842bb6 support de cours algo avancée - correction unicode 2017-10-16 16:27:16 +02:00
gwen 6a50f7f261 support de cours algo avancée 2017-10-16 15:35:34 +02:00
gwen dd24407b76 contrainte de type par signature 2017-10-12 18:21:33 +02:00
gwen 2214b33090 corrections cours poo 2017-10-05 09:18:23 +02:00
gwen b73e7c85ff premiere version stable du cours de poo 2017-10-02 09:11:10 +02:00
Philippe Caseiro 86e9646de9 Correction du public pour les méthodes AGile 2017-09-29 16:05:30 +02:00
Philippe Caseiro adde21ff9d Merge branch 'master' of https://forge.cadoles.com/Cadoles/formations 2017-09-29 16:02:54 +02:00
Benjamin Bohard 99ff34a750 relecture de qualification 2017-09-29 15:42:15 +02:00
Benjamin Bohard a4f78eb243 relecture des méthodes agiles 2017-09-29 15:38:04 +02:00
Benjamin Bohard 2d247ba285 relecture de la messagerie électronique 2017-09-29 15:33:03 +02:00
Benjamin Bohard 52f602e8bf relecture 2017-09-29 15:27:14 +02:00
Benjamin Bohard 512951e208 relecture 2017-09-29 15:23:47 +02:00
Benjamin Bohard b607c5717a relecture 2017-09-29 15:19:14 +02:00
Benjamin Bohard c92060f849 relecture 2017-09-29 15:12:55 +02:00
Benjamin Bohard b3b2cde6a1 relecture 2017-09-29 15:06:13 +02:00
Philippe Caseiro bfe90bfcac Mise à jour durée 2017-09-29 14:55:42 +02:00
Philippe Caseiro 1b6b43878b Coquillesé 2017-09-29 14:27:49 +02:00
wpetit d499847408 Programme de formation Logomotion - version LaTeX 2017-09-29 14:12:15 +02:00
Philippe Caseiro 5193436497 Retour de inc dans le dépôt 2017-09-29 13:22:52 +02:00
Benjamin Gaudé 354a2bbb40 Merge branch 'master' of https://forge.cadoles.com/Cadoles/formations 2017-09-29 13:20:11 +02:00
Benjamin Gaudé af6e948714 Relecture - Corrections 2017-09-29 13:19:50 +02:00
Philippe Caseiro c88cd4938a Retour du style dans le dépôt 2017-09-29 13:16:31 +02:00
Philippe Caseiro 12b0b87911 Mise à jour du tire de la formation 2017-09-29 12:58:36 +02:00
Philippe Caseiro e8bd5fbff7 Mise à jour du tire de la formation 2017-09-29 12:55:13 +02:00
Philippe Caseiro da9fdc71a2 Mise à jour des plans de formation methodes agiles, qualification et smtp-imap 2017-09-29 12:53:34 +02:00
Philippe Caseiro 78931654ac Now we can build only one program
./programme.sh my_directory
2017-09-29 12:49:00 +02:00
Philippe Caseiro 1eacf73b67 Ajout du programme de qualification 2017-09-29 11:42:47 +02:00
Philippe Caseiro 1a75329228 Merge branch 'master' of https://forge.cadoles.com/Cadoles/formations 2017-09-29 11:09:30 +02:00
Philippe Caseiro 2a02aec42b Ajout du programme de la formation AGILE 2017-09-29 11:09:12 +02:00
Benjamin Gaudé 8515e2c8ef Precisions partie symfony 3 2017-09-29 10:29:41 +02:00
Philippe Caseiro 789ec739ae Ajout du plan de formation pour Logomotion 2017-09-29 09:40:16 +02:00
Philippe Caseiro cfe5783d6d Ajout du programme pour la formation smtp-imap 2017-09-28 14:02:18 +02:00
gwen 1645146d0d modèle objet de python 2017-09-05 09:25:48 +02:00
gwen 2ddd3e2c18 méchanismes objets 2017-09-04 17:33:56 +02:00
gwen 075a54ecf1 debut du cours de poo 2017-09-04 14:54:33 +02:00
gwen a0040a3b00 tronc commun algo/algo approfondie 2017-08-29 15:42:31 +02:00
gwen 898dc77569 tronc commun 2017-08-28 17:52:56 +02:00
gwen 3bf7596972 menage 2017-08-28 17:37:01 +02:00
gwen dc02e78fff mise en place des cours algo + poo 2017-08-28 17:36:36 +02:00
gwen 2843f25795 mise en place des cours poo et algo approfondie 2017-08-21 10:44:20 +02:00
gwen 870a4d7743 alog : rappels de cybernétique 2017-08-21 09:32:10 +02:00
gwen abba666231 notes pour amélioration du cours 2017-06-21 10:53:35 +02:00
gwen 2ecd65ce3d corrections du cours après la présentation 2017-06-21 10:52:29 +02:00
gwen 78cc7f12eb typo 2017-06-09 10:15:08 +02:00
gwen 4c53916b12 exercices de travaux pratiques 2017-06-09 09:59:42 +02:00
gwen 45f3836f87 premiers sujets de tp 2017-05-29 14:29:23 +02:00
gwen 8afd3606f7 logos 2017-05-23 11:16:12 +02:00
gwen 357c2ed0a0 diaporama algorithmique 2017-05-23 09:32:17 +02:00
gwen 1689ac7145 présentation beamer 2017-05-22 17:54:40 +02:00
gwen fc6208b99c template de présentation beamer 2017-05-19 11:17:58 +02:00
gwen 26cc76dcc1 exercices de manipulation des structures de données 2017-05-14 18:17:14 +02:00
gwen 5728bb1834 exercices supplémentaires 2017-05-12 11:55:30 +02:00
gwen 2840b2627b ajout du diaporama 2017-05-09 09:37:09 +02:00
gwen 31835587a6 suprression des warning au build 2017-05-03 09:26:24 +02:00
gwen fd2b6469bf suppression des derniers fixme 2017-05-03 09:21:28 +02:00
gwen ffcd62cd50 cours : premiere version 2017-04-30 08:59:55 +02:00
gwen 670c1fe535 algo programmation structurée 2017-04-30 08:44:43 +02:00
gwen 48524d751a langage de modules 2017-04-29 23:14:45 +02:00
gwen 81545ae4d3 algorithme module python 2017-04-29 20:24:46 +02:00
gwen 63a96dbbc3 exercices (maximum d'une liste) 2017-04-28 11:12:19 +02:00
gwen b0f56186f5 modulatié et programmation raisonnée 2017-04-27 16:40:01 +02:00
gwen b49b0690b9 exercices sur les structures de données de base (2) 2017-04-27 14:46:31 +02:00
gwen c8ab39a19e exercices sur les structures de données de base 2017-04-27 14:15:18 +02:00
gwen 24cd7ca9c3 exos d'algo 2017-04-27 12:05:13 +02:00
gwen 13ca1532ce exercices sur les structures de controle de base 2017-04-27 11:55:24 +02:00
gwen ae3cdd92b3 exercices sur les variables 2017-04-26 11:48:32 +02:00
gwen 1470b93a63 exemples d'algorithmes 2017-04-24 15:53:00 +02:00
Benjamin Bohard b634a10b77 Corrections dans l’exercice ircd 2017-04-21 11:36:32 +02:00
gwen 32376db319 exemples d'algorithmes sur des structures de données simples 2017-04-21 10:50:53 +02:00
gwen 9cdfc16cc5 structures de données (list + dico) 2017-04-20 14:29:38 +02:00
gwen 4e29983800 algorithme vague 2017-04-18 21:53:35 +02:00
gwen cf1b3ac498 portée d'une variable 2017-04-13 17:36:25 +02:00
gwen 8d16681688 structures de données 2017-04-13 17:08:27 +02:00
gwen 12b1a888c6 organisation des exercices 2017-04-13 16:08:30 +02:00
gwen 15fd0fa136 programmation modulaire 2017-04-13 10:50:18 +02:00
gwen eb3daeae4e suppresion des Statex des algo de style impératif 2017-04-12 10:22:44 +02:00
gwen 2786706b0f ajout d'aperçu des types d'algorithmes 2017-04-11 16:40:26 +02:00
gwen 5c9ca22877 utilisation de l'extension ifconfig pour les exercices et les corrections 2017-04-11 14:24:15 +02:00
Emmanuel Garette b37051c78d Merge branch 'master' of ssh://forge.cadoles.com:4242/cadoles/formations 2017-04-11 11:42:53 +02:00
gwen 26c756a914 reorganisation du cours 2017-04-11 11:18:17 +02:00
gwen 9fb80c6b48 reorganisation du cours 2017-04-10 17:47:40 +02:00
gwen 44c153b95c reorganisation (ordonnancement) du cours 2017-04-10 12:36:16 +02:00
gwen 86dec22113 presentation du cours d'algo 2017-04-10 12:25:40 +02:00
gwen 95231a4253 définition des actions d'un programme 2017-04-07 17:22:05 +02:00
gwen 0685998e20 présentation du cours et avant propos 2017-04-07 15:28:36 +02:00
Emmanuel Garette fe81743c51 mise à jour pour PSI + raid logiciel (non inclu) 2017-04-07 13:01:55 +02:00
gwen 936de04ce4 algorithme factorielle 2017-04-06 16:57:22 +02:00
gwen 813a09034a diveres définitions de la programmation 2017-04-06 14:55:36 +02:00
gwen 6de57bca95 définition d'une fonction 2017-04-06 10:36:31 +02:00
gwen 6ccddf4cc5 ajout des principales structures de contrôles 2017-04-05 10:36:41 +02:00
gwen b5a77f5212 instruction de saut conditionnel 2017-04-04 10:50:18 +02:00
gwen 97d5f66bd5 ajout d'un exemple de procedure 2017-04-03 16:47:10 +02:00
gwen f92c758800 Ajout de la notion de fonction 2017-04-03 16:34:36 +02:00
vincent 7e048b9f61 correction orthographique 2017-03-27 14:26:44 +02:00
vincent 777323f940 exo avec roundcube et non thunderbird 2017-03-27 14:09:39 +02:00
vincent a769e6bbd7 ajout script création user 2017-03-27 12:14:16 +02:00
vincent ce101ea602 mise en page 2017-03-27 11:57:27 +02:00
vincent 7cc6c19799 modification exercice et contenu 2017-03-27 11:36:59 +02:00
Emmanuel Garette 7fd17bd06e amelioration création utilisateur Mysql 2017-03-27 11:22:50 +02:00
vincent debf07b509 modification de l'exercice pour l'ajout d'application web 2017-03-27 10:30:27 +02:00
Emmanuel Garette 8bc107fa71 maj log squid/e2guardian 2017-03-23 20:24:35 +01:00
Emmanuel Garette b8a3e05f02 maj formation amon 2017-03-23 17:47:51 +01:00
gwen 047eb2728d réflexions sur l'abstraction algorithmique 2017-03-23 11:23:49 +01:00
gwen 3baed6b4ff définition d'un algorithme 2017-03-22 09:13:07 +01:00
gwen b380a69cfa package algorithm 2017-03-21 11:56:53 +01:00
gwen 44f083eb1d section algorithme 2017-03-21 09:10:34 +01:00
gwen aea8e036a3 ajout des annexses 2017-03-20 10:22:04 +01:00
vincent fb6c63feb4 séparation trouver information serveur/internet + ajout info internet dans les différentes formations 2017-03-20 10:13:43 +01:00
vincent 2eb826537c ajout des coordonnées du forum EOLE 2017-03-20 09:20:49 +01:00
gwen e1743c32da présentation du cours 2017-03-18 16:37:36 +01:00
gwen ba6fc1b406 debut de glossaire 2017-03-18 16:00:24 +01:00
gwen 0d2b2aca4d debut de glossaire 2017-03-18 15:47:40 +01:00
gwen a723cce565 methodes agiles 2017-03-18 07:00:18 +01:00
gwen e9b0afe3ee méthodologies agiles 2017-03-17 11:58:35 +01:00
vincent de765b7431 Merge branch 'master' of ssh://forge.cadoles.com:4242/cadoles/formations 2017-03-17 11:40:30 +01:00
vincent 42223ee6bb modification des besoins pour la prépartion de la formation scribe-horus 2017-03-17 11:39:33 +01:00
gwen a967c1e4c5 définition du cours d'algorithmique 2017-03-17 11:36:03 +01:00
gwen 9cbe2e337a début du cours d'algorithmique pour le CESI 2017-03-17 11:33:14 +01:00
vincent d7a4bcc466 coorection orthographique et ajout changement bacula-bareos 2017-03-17 10:45:39 +01:00
vincent 4d7a2492a7 modification preparation 2017-03-13 16:36:02 +01:00
vincent 421c27e85f mise à jour du contenu 2017-03-13 16:16:58 +01:00
vincent 64e1002f9b modification formation pour scribe 2.6 et W10 2017-03-13 11:44:03 +01:00
vincent ec18bf72dc modification contenu 2017-02-03 13:47:51 +01:00
Emmanuel Garette 1e0822db1c erreur chemin des dicos locals 2017-01-27 17:04:54 +01:00
Emmanuel Garette fceaf18739 mise à jour des excercices tronc-commun-2 2017-01-26 18:06:37 +01:00
Emmanuel Garette 09aa743b31 mise à jour formation tc1 et tc2 2017-01-26 17:36:57 +01:00
Philippe Caseiro c0bb8d8cfe Ajout des nouvelles images 2017-01-23 14:33:30 +01:00
Philippe Caseiro 2f93009cb2 Ajout 2.6.0 2017-01-23 14:33:13 +01:00
vincent 690581f7d6 mise à jour 2017-01-09 15:45:09 +01:00
vincent 21700131a0 ajout restauration complète en 2.6 2016-09-19 10:53:05 +02:00
vincent c4bd4b9183 reformulation et correction orthographique 2016-09-01 15:25:47 +02:00
Emmanuel Garette f642003eaf complement dans l'exemple d'exercice 2016-04-27 11:54:37 +02:00
Emmanuel Garette 73a5e3d14f corrections 2016-04-26 15:33:54 +02:00
Emmanuel Garette f149b43557 ajout d'un exemple d'exercice corrigé 2016-04-21 17:00:48 +02:00
Emmanuel Garette 7987c5bb21 mise à jour de la formation pour 2.6 2016-04-20 10:44:44 +02:00
Philippe Caseiro 0ec050b306 Merge branch 'master' of ssh://forge.cadoles.com:4242/cadoles/formations
* 'master' of ssh://forge.cadoles.com:4242/cadoles/formations:
  modification plan et affichage formation
  ajout formation personnalidée sallanches
2015-11-02 16:32:13 +01:00
Philippe Caseiro ee24393082 Fix title 2015-11-02 16:31:06 +01:00
vfebvre 8749c13f6d modification plan et affichage formation 2015-08-04 11:15:47 +02:00
vfebvre ab17ccefb4 ajout formation personnalidée sallanches 2015-07-28 11:15:56 +02:00
Philippe Caseiro 00bda3b860 Adding new background 2015-06-17 15:16:13 +02:00
Philippe Caseiro 647a8cb2f2 Update de la formation amon sphynx 2015-06-17 15:01:19 +02:00
gwen d3fedded5e ajout de doc sur les méta classes 2015-06-04 10:10:58 +02:00
gwen 5391804ac5 ajout de doc sur les classes et les objets 2015-06-04 09:58:51 +02:00
gwen 1e21dbe0f9 corrections coquilles 2015-05-13 15:37:00 +02:00
gwen 7ad34d4962 paragraphe generique 2015-05-11 09:16:33 +02:00
gwen 47c572334d sphinx et docutils 2015-05-07 09:33:59 +02:00
gwen 239097238e ajout des imports et de sys.modules 2015-05-05 15:00:47 +02:00
gwen f52d023781 ajout des design patterns 2015-05-04 17:38:00 +02:00
gwen 9d1597fc15 ajout des design patterns 2015-05-04 16:29:15 +02:00
gwen 03da3c99a0 ajout de la doc sur les exceptions 2015-05-04 15:38:51 +02:00
gwen 03d5f17f6a config pour la version pdf 2015-05-01 10:32:46 +02:00
gwen da6a42f8bb editeurs python : syntaxe 2015-04-30 16:23:39 +02:00
gwen a3552c18c0 editeurs python 2015-04-30 14:57:46 +02:00
William Petit 30f646581b Exo ngResource 2015-04-10 01:46:41 +02:00
William Petit 1d015b15d5 Ajout exo protractor 2015-04-10 01:01:21 +02:00
William Petit 22eb8175fe Ajout exo Karma 2015-04-10 00:30:02 +02:00
William Petit 24ebf33c75 Ajout exo routage 2015-04-09 23:11:56 +02:00
William Petit e0ad7f004d Corrections slides 2015-04-09 20:36:17 +02:00
William Petit ccfe7374cc Formation Angular: exos supplémentaires 2015-04-09 01:03:35 +02:00
William Petit 11b5d82ce4 (not) vanilla todos 2015-04-09 00:19:37 +02:00
William Petit 16a28eb88b Angular, première partie 2015-04-08 23:22:53 +02:00
William Petit de745ba6df Ajout exo services 2015-04-07 22:38:36 +02:00
William Petit 4df20d8adf Base formation angular+amélioration layout formations JS 2015-04-06 17:50:08 +02:00
wpetit e4811d8040 Suppression node_modules exercices 2015-04-03 10:42:28 +02:00
wpetit bbcccf4586 Nettoyage exemple tests-unitaires 2015-04-03 10:34:09 +02:00
wpetit f4e96ea040 Nettoyage exercices 2015-04-03 10:31:05 +02:00
wpetit c645af4112 Correction exo heritge js 2015-04-02 08:43:33 +02:00
William Petit b00c6dd3f4 Ajout exercices supplémentaires formation JS 2015-04-01 22:05:05 +02:00
wpetit 9a2452b334 Corrections typo + exo VanillaTodos complet 2015-04-01 15:11:13 +02:00
wpetit 16cf72bb59 Ajout exo VanillaTodos 2015-04-01 11:17:02 +02:00
William Petit 5cf0c82685 Ajout slides supplémentaires formation JS 2015-03-31 23:29:23 +02:00
William Petit 006c3f5a42 More Javascript 2015-03-30 14:18:55 +02:00
Benjamin Bohard 67f3024587 Inversion des paramètres pour bacula 2015-03-27 15:28:59 +01:00
Benjamin Bohard 7997272ef5 Ajustement du plan 2015-03-27 10:06:46 +01:00
Benjamin Bohard 4ba2e5768b Mise à jour du plan de formation 2015-03-27 10:06:46 +01:00
wpetit 33d3f5386a Formation JS, ajout slides suppl. 2015-03-26 17:36:34 +01:00
Benjamin Bohard 6b0206f399 Essai de markdown pour documenter la génération des plans de formations 2015-03-26 15:27:11 +01:00
Benjamin Bohard dda69187df Ajout de la durée 2015-03-26 15:19:38 +01:00
wpetit 0672a0bd80 Ajout doc dépendances Latex 2015-03-25 17:27:44 +01:00
wpetit a2650f1ebd Ajout base formation Javascript 2015-03-25 17:27:03 +01:00
Benjamin Bohard 72ba644959 Relecture 2015-03-23 18:07:42 +01:00
Benjamin Bohard 4779875c04 Relecture 2015-03-23 18:06:36 +01:00
Benjamin Bohard 3c15ec7fe1 Relecture 2015-03-23 17:03:36 +01:00
Benjamin Bohard d286f5cc66 Couleur différente pour le sous-titre de diapo 2015-03-23 16:55:26 +01:00
Benjamin Bohard 42199f9c6e Arrangement des diapos trop longues 2015-03-23 16:49:34 +01:00
Benjamin Bohard b3cd20642a Relecture scribe-horus 2015-03-23 11:02:22 +01:00
Benjamin Bohard 5506609770 Relecture scribe-horus 2015-03-23 10:43:35 +01:00
Benjamin Bohard cf58bc6aea Relecture scribe-horus 2015-03-23 09:48:02 +01:00
Benjamin Bohard 838027ac1d Relecture scribe/horus 2015-03-23 09:40:51 +01:00
Emmanuel Garette eaad0c234b ajout EOP 2015-03-16 22:05:17 +01:00
Emmanuel Garette 5c44c012af plus de <fichier>.eol pour instance 2015-03-16 22:03:51 +01:00
vfebvre acd25e74a1 mise à jour schedule 2015-03-12 15:09:27 +01:00
2308 changed files with 122824 additions and 6574 deletions

3
.gitignore vendored
View File

@ -13,3 +13,6 @@
*.run.xml *.run.xml
build-messages-*.txt build-messages-*.txt
plans_de_formation.tar.gz plans_de_formation.tar.gz
.~lock*
*.pygtex
*.pygstyle

View File

@ -2,7 +2,7 @@ SRC := $(wildcard *.tex)
OBJPDF := $(SRC:tex=pdf) OBJPDF := $(SRC:tex=pdf)
RM := rm --force RM := rm --force
TEXPDFPRG := xelatex TEXPDFPRG := xelatex
TEXPDFOPT := -file-line-error TEXPDFOPT := -file-line-error -shell-escape
DATE := `date +'%d%m%Y-%H%M%S'` DATE := `date +'%d%m%Y-%H%M%S'`
BUILDLOG := build-messages-$(DATE).txt BUILDLOG := build-messages-$(DATE).txt
LATEXBUILD := $(TEXPDFPRG) $(TEXPDFOPT) LATEXBUILD := $(TEXPDFPRG) $(TEXPDFOPT)

1
README
View File

@ -1 +0,0 @@
=== Formations ===

271
README.md Normal file
View File

@ -0,0 +1,271 @@
# Formations
## Dépendances
**Paquets** (sur Ubuntu 14.04)
- texlive-xetex
- latex-beamer
- texlive-lang-french
- texlive-latex-extra
** Police**
- Installer la police [CaviarDream](http://www.dafont.com/caviar-dreams.font)
## Générer le PDF de la présentation
```
make <formation>/<point_entrée_latex>.pdf
```
## Générer les plans des formations
Lancer le script programme.sh à la racine du dépôt
L'ensemble des plans est regroupé et compressé sous le nom plans_de_formation.tar.gz
## Ajouter un plan de formation
- créer un répertoire **programme** (l'endroit importe peu mais devrait être sous le répertoire de la formation)
- créer les fichiers au format latex (listes, texte, tableau, etc. Les titres sont dans le fichier programme.tex)
- contenu.tex
- duree.tex
- evaluation.tex
- moyens.tex
- objectifs.tex
- prerequis.tex
- public.tex
- compléter ces fichiers
Penser à générer de nouveau les plans
# Révision du processus de production des supports de formation
## Organisation du dépôt
Le dépôt encourage autant que possible la réutilisation et la mutualisation du contenu.
Les éléments de contenu à inclure sont dans les dossiers _content_ et _slides_ pour les documents de type _article_ et _beamer_ respectivement.
Les figures sont placées à part dans le répertoire _figures_.
Ces éléments de contenu sont inclus dans des fichiers principaux placés dans le répertoire _presentations_.
Le répertoire _templates_ contient des modèles de document au format jinja utilisés par le script _setup_main_tex_file.py_.
## setup_main_tex_file.py
Le script setup_main_tex_file.py permet dorganiser la procédure en proposant :
- la création des fichiers maîtres pour une formation ;
- la création des fichiers de contenu à inclure si nécessaire ;
- la mise à jour du plan de formation en fonction des éléments inclus ;
- la compilation des trois documents (diaporama, support de cours et programme) si lapplication rubber est installée.
Pour chacune de ses sous-étapes, le script propose une sous-commande.
### Démarrer une formation (sous-commande init)
```
./setup_main_tex_file.py init -f beamer -a Cadoles -t "Formation personnalisée Scribe" -c "Conseil départemental" -d modules_EOLE_envole/Conseil_Départemental -i Cadoles -l cc-by-sa -n CD_Formation_Scribe
```
Les options obligatoires sont :
- le format (beamer ou article) : -f
- le titre qui apparaîtra sur la page de garde ou la première diapositive : -t
- lemplacement, soit le sous-répertoire du répertoire presentations : -d
- le nom du fichier (sans lextension) qui sera créé à lemplacement indiqué.
Les autres options prendront des valeurs par défaut si elles ne sont pas fournies :
- lauteur est Cadoles par défaut
- linstitut, qui détermine les logos à intégrer, est Cadoles par défaut
- la licence est la Creative Commons CC-BY-SA v2 par défaut
- le client est XXX par défaut
À noter, pour la licence, que seule la CC-BY-SA v2 est disponible dans les contenus à inclure pour linstant.
Lexécution de la commande précédente produit le fichier presentations/modules_EOLE_envole/Conseil_Départemental/diaporama.tex.
### Construire le contenu dune formation
On peut construire une formation en éditant le fichier maître créé précédemment.
Ce fichier présente la configuration du module skb
```
\documentclass{beamer}
\usepackage{skb}
\skbconfig[
root = ../../../,
rep = content,
pub = presentations,
fig = figures,
sli = slides,
acr = database/acr,
bib = database/bib
]{skblocal.tex}
```
Ces variables sont utilisées pour linclusion des éléments de contenu répartis dans les différents sous-dossier du dépôt.
Le corps du document qui est principalement intéressant est minimaliste au départ
```
\begin{document}
\skbinput[from=sli]{style/title}
% Corps de la formation
%\skbinput[from=sli]{}
\skbinput[from=sli]{licences/license-cc-by-sa-2.0}
\end{document}
```
Pour ajouter du contenu, on ajoute principalement des directives skbinput avec loption from=sli (pour les documents de type beamer) et lemplacement du fichier à partir du répertoire slides (puisque from=sli et sli = slides dans la configuration skb)
On peut également structurer la présentation en intercalant des directives section, subsection, etc.
Ces directives section, subsection, ainsi que le contenu inclu permet ensuite de construire le plan.
Les directives skbinput peuvent pointer vers un fichier inexistant dans un premier temps (une tentative de compilation du document dans cet état échouera bien évidemment).
### Consolider le contenu dune formation (sous-commande update)
Par exemple, avec le corps de document suivant
```
\section{Introduction}
\skbinput[from=sli]{modules_EOLE_envole/commun/intro}
\skbinput[from=sli]{modules_EOLE_envole/commun/nouveautes27}
\skbinput[from=sli]{modules_EOLE_envole/commun/panorama-module}
\skbinput[from=sli]{modules_EOLE_envole/scribe/description}
\section{Outils pédagogique Scribe}
\skbinput[from=sli]{modules_EOLE_envole/scribeAD/eop}
\skbinput[from=sli]{modules_EOLE_envole/scribeAD/eop-pratique}
\skbinput[from=sli]{modules_EOLE_envole/scribeAD/veyon}
\skbinput[from=sli]{modules_EOLE_envole/scribeAD/veyon-pratique}
\section{Les quatre phases}
\skbinput[from=sli]{modules_EOLE_envole/commun/quatre_phases}
\skbinput[from=sli]{modules_EOLE_envole/eolebase/virtualbox}
\skbinput[from=sli]{modules_EOLE_envole/commun/quatre_phases-pratique}
\skbinput[from=sli]{modules_EOLE_envole/commun/configuration-pratique}
\skbinput[from=sli]{modules_EOLE_envole/commun/02-gen_config}
\skbinput[from=sli]{modules_EOLE_envole/commun/instance-pratique}
\skbinput[from=sli]{modules_EOLE_envole/commun/du-contenu-inexistant}
```
La plupart du contenu existe déjà.
Seule la dernière inclusion poserait problème lors de la compilation.
Pour permettre de lancer des compilations sans attendre que tout le contenu soit prêt, le script propose une sous commande qui prépare le terrain en créant les fichiers de contenu manquant.
```
./setup_main_tex_file.py update -d modules_EOLE_envole/Conseil_Départemental
```
Le seul argument de cette sous-commande _update_ permet didentifier le sous-répertoire de _presentations_ contenant le fichier maître _diaporama.tex_.
Cette commande traite toutes les directives skbinput et créer le fichier à inclure sil nexiste pas déjà.
Elle affiche la liste des fichiers créés en retour de commande.
```
$ ./setup_main_tex_file.py update -d modules_EOLE_envole/Conseil_Départemental/
slides/modules_EOLE_envole/commun/du-contenu-inexistant.tex
```
Ce fichier contient du texte permettant de le repérer facilement dans le document généré
```
\begin{frame}
\frametitle{du-contenu-inexistant.tex}
fichier slides/modules\_EOLE\_envole/commun/du-contenu-inexistant.tex à éditer
% contenu (pas trop long) de la diapositive
\end{frame}
```
### Affichage du plan (sous-commande outline)
La sous-commande _outline_ permet de créer un sommaire du diaporama sous la forme de listes imbriquées et de linclure dans le programme.
Il est possible de restreindre le nombre de niveaux de titre utilisé pour le plan avec loption -l.
```
./setup_main_tex_file.py outline -d modules_EOLE_envole/Conseil_Départemental
```
```
Introduction
EOLE
En quatre points
Ce qui caractérise EOLE
Nouveautés 2.7
Modules disponibles en 2.7.0
Modules disponibles à partir de la 2.7.1
Eclair
Zéphir/Sentinelle
Zéphir
Seshat
Thot
Seth
Hapy
Scribe
Outils pédagogique Scribe
EOP
Mise en pratique
Veyon
Les fonctionnalités
Préparation
Mise en pratique
Les quatre phases
La phase d'installation
La phase de configuration
La phase d'instanciation
La phase dinstanciation
les étapes de linstanciation
Les comptes administrateurs locaux
Les mots de passe
La phase d'administration
La phase dadministration
VirtualBox
Configuration de la VM Eolebase
Configuration autonome
Nature dune configuration
Types de variables
Contraintes
Application de configuration du module
Les modes de lapplication de configuration du module
Les informations de debug
sauvegarde et chargement de la configuration
Instance
```
### Génération du document
Comme alternative à la recette Makefile pas encore adaptée pour la compilation de ce nouveau format, on peut utiliser la commande rubber (paquet supplémentaire à installer)
```
rubber --inplace --module=xelatex presentations/modules_EOLE_envole/Conseil_Départemental/CD_Formation_Scribe.tex
```
La sous-commande _compile_ appelle rubber pour compiler les trois documents : diaporama, support et programme.
```
./setup_main_tex_file.py compile -d modules_EOLE_envole/Conseil_Départemental
```
Cette sous-commande nest disponible que si la commande rubber est installé et accessible (test du retour rubber --version).
### Intégration avec git
Le script entreprend des actions complémentaires lorsque il détecte un environnement _git_.
#### Séparation et isolation des formations
La proposition est la suivante : séparer le contenu générique (contenu inclu dans les formations) et les fichiers maîtres spécifiques à des formations.
Une branche (master en loccurence) est utilisée comme pivot et contient les fragments de formations.
Chaque formation spécifique est isolée dans une branche propre.
De fait, le contenu du dossier _presentations_ est commité dans la branche spécifique, tandis que le reste (_content_ et _slides_ notamment) est commité dans _master_. Un hook git local est proposé pour limiter les commits dans les mauvaises branches, basé sur les chemins des fichiers créés ou modifiés.
Le script permet dautomatiser une partie de ce découpage, notamment la création des branches spécifiques et le commit dans les branches appropriées selon les actions entreprises.
#### action dinitialisation
Linitialisation doit être effectué depuis la branche _master_ et exécute les actions suivantes :
- création dune branche nommée daprès le répertoire de destination et suffixée avec _xelatex/_
- création des fichiers propres à la formation (fichiers maîtres pour le diaporama, le support, le programme, etc.)
- commit de ces fichiers dans la branche spécifique.
#### action de mise à jour du programme
Comme tout ce qui implique la mise à jour ou la création de contenu dans le répertoire _presentations_, le produit de la mise à jour du programme est commité dans la branche spécifique.

View File

@ -0,0 +1,216 @@
# Makefile for Sphinx documentation
#
# You can set these variables from the command line.
SPHINXOPTS =
SPHINXBUILD = sphinx-build
PAPER =
BUILDDIR = _build
# User-friendly check for sphinx-build
ifeq ($(shell which $(SPHINXBUILD) >/dev/null 2>&1; echo $$?), 1)
$(error The '$(SPHINXBUILD)' command was not found. Make sure you have Sphinx installed, then set the SPHINXBUILD environment variable to point to the full path of the '$(SPHINXBUILD)' executable. Alternatively you can add the directory with the executable to your PATH. If you don't have Sphinx installed, grab it from http://sphinx-doc.org/)
endif
# Internal variables.
PAPEROPT_a4 = -D latex_paper_size=a4
PAPEROPT_letter = -D latex_paper_size=letter
ALLSPHINXOPTS = -d $(BUILDDIR)/doctrees $(PAPEROPT_$(PAPER)) $(SPHINXOPTS) .
# the i18n builder cannot share the environment and doctrees with the others
I18NSPHINXOPTS = $(PAPEROPT_$(PAPER)) $(SPHINXOPTS) .
.PHONY: help
help:
@echo "Please use \`make <target>' where <target> is one of"
@echo " html to make standalone HTML files"
@echo " dirhtml to make HTML files named index.html in directories"
@echo " singlehtml to make a single large HTML file"
@echo " pickle to make pickle files"
@echo " json to make JSON files"
@echo " htmlhelp to make HTML files and a HTML help project"
@echo " qthelp to make HTML files and a qthelp project"
@echo " applehelp to make an Apple Help Book"
@echo " devhelp to make HTML files and a Devhelp project"
@echo " epub to make an epub"
@echo " latex to make LaTeX files, you can set PAPER=a4 or PAPER=letter"
@echo " latexpdf to make LaTeX files and run them through pdflatex"
@echo " latexpdfja to make LaTeX files and run them through platex/dvipdfmx"
@echo " text to make text files"
@echo " man to make manual pages"
@echo " texinfo to make Texinfo files"
@echo " info to make Texinfo files and run them through makeinfo"
@echo " gettext to make PO message catalogs"
@echo " changes to make an overview of all changed/added/deprecated items"
@echo " xml to make Docutils-native XML files"
@echo " pseudoxml to make pseudoxml-XML files for display purposes"
@echo " linkcheck to check all external links for integrity"
@echo " doctest to run all doctests embedded in the documentation (if enabled)"
@echo " coverage to run coverage check of the documentation (if enabled)"
.PHONY: clean
clean:
rm -rf $(BUILDDIR)/*
.PHONY: html
html:
$(SPHINXBUILD) -b html $(ALLSPHINXOPTS) $(BUILDDIR)/html
@echo
@echo "Build finished. The HTML pages are in $(BUILDDIR)/html."
.PHONY: dirhtml
dirhtml:
$(SPHINXBUILD) -b dirhtml $(ALLSPHINXOPTS) $(BUILDDIR)/dirhtml
@echo
@echo "Build finished. The HTML pages are in $(BUILDDIR)/dirhtml."
.PHONY: singlehtml
singlehtml:
$(SPHINXBUILD) -b singlehtml $(ALLSPHINXOPTS) $(BUILDDIR)/singlehtml
@echo
@echo "Build finished. The HTML page is in $(BUILDDIR)/singlehtml."
.PHONY: pickle
pickle:
$(SPHINXBUILD) -b pickle $(ALLSPHINXOPTS) $(BUILDDIR)/pickle
@echo
@echo "Build finished; now you can process the pickle files."
.PHONY: json
json:
$(SPHINXBUILD) -b json $(ALLSPHINXOPTS) $(BUILDDIR)/json
@echo
@echo "Build finished; now you can process the JSON files."
.PHONY: htmlhelp
htmlhelp:
$(SPHINXBUILD) -b htmlhelp $(ALLSPHINXOPTS) $(BUILDDIR)/htmlhelp
@echo
@echo "Build finished; now you can run HTML Help Workshop with the" \
".hhp project file in $(BUILDDIR)/htmlhelp."
.PHONY: qthelp
qthelp:
$(SPHINXBUILD) -b qthelp $(ALLSPHINXOPTS) $(BUILDDIR)/qthelp
@echo
@echo "Build finished; now you can run "qcollectiongenerator" with the" \
".qhcp project file in $(BUILDDIR)/qthelp, like this:"
@echo "# qcollectiongenerator $(BUILDDIR)/qthelp/Algorithmique.qhcp"
@echo "To view the help file:"
@echo "# assistant -collectionFile $(BUILDDIR)/qthelp/Algorithmique.qhc"
.PHONY: applehelp
applehelp:
$(SPHINXBUILD) -b applehelp $(ALLSPHINXOPTS) $(BUILDDIR)/applehelp
@echo
@echo "Build finished. The help book is in $(BUILDDIR)/applehelp."
@echo "N.B. You won't be able to view it unless you put it in" \
"~/Library/Documentation/Help or install it in your application" \
"bundle."
.PHONY: devhelp
devhelp:
$(SPHINXBUILD) -b devhelp $(ALLSPHINXOPTS) $(BUILDDIR)/devhelp
@echo
@echo "Build finished."
@echo "To view the help file:"
@echo "# mkdir -p $$HOME/.local/share/devhelp/Algorithmique"
@echo "# ln -s $(BUILDDIR)/devhelp $$HOME/.local/share/devhelp/Algorithmique"
@echo "# devhelp"
.PHONY: epub
epub:
$(SPHINXBUILD) -b epub $(ALLSPHINXOPTS) $(BUILDDIR)/epub
@echo
@echo "Build finished. The epub file is in $(BUILDDIR)/epub."
.PHONY: latex
latex:
$(SPHINXBUILD) -b latex $(ALLSPHINXOPTS) $(BUILDDIR)/latex
@echo
@echo "Build finished; the LaTeX files are in $(BUILDDIR)/latex."
@echo "Run \`make' in that directory to run these through (pdf)latex" \
"(use \`make latexpdf' here to do that automatically)."
.PHONY: latexpdf
latexpdf:
$(SPHINXBUILD) -b latex $(ALLSPHINXOPTS) $(BUILDDIR)/latex
@echo "Running LaTeX files through pdflatex..."
$(MAKE) -C $(BUILDDIR)/latex all-pdf
@echo "pdflatex finished; the PDF files are in $(BUILDDIR)/latex."
.PHONY: latexpdfja
latexpdfja:
$(SPHINXBUILD) -b latex $(ALLSPHINXOPTS) $(BUILDDIR)/latex
@echo "Running LaTeX files through platex and dvipdfmx..."
$(MAKE) -C $(BUILDDIR)/latex all-pdf-ja
@echo "pdflatex finished; the PDF files are in $(BUILDDIR)/latex."
.PHONY: text
text:
$(SPHINXBUILD) -b text $(ALLSPHINXOPTS) $(BUILDDIR)/text
@echo
@echo "Build finished. The text files are in $(BUILDDIR)/text."
.PHONY: man
man:
$(SPHINXBUILD) -b man $(ALLSPHINXOPTS) $(BUILDDIR)/man
@echo
@echo "Build finished. The manual pages are in $(BUILDDIR)/man."
.PHONY: texinfo
texinfo:
$(SPHINXBUILD) -b texinfo $(ALLSPHINXOPTS) $(BUILDDIR)/texinfo
@echo
@echo "Build finished. The Texinfo files are in $(BUILDDIR)/texinfo."
@echo "Run \`make' in that directory to run these through makeinfo" \
"(use \`make info' here to do that automatically)."
.PHONY: info
info:
$(SPHINXBUILD) -b texinfo $(ALLSPHINXOPTS) $(BUILDDIR)/texinfo
@echo "Running Texinfo files through makeinfo..."
make -C $(BUILDDIR)/texinfo info
@echo "makeinfo finished; the Info files are in $(BUILDDIR)/texinfo."
.PHONY: gettext
gettext:
$(SPHINXBUILD) -b gettext $(I18NSPHINXOPTS) $(BUILDDIR)/locale
@echo
@echo "Build finished. The message catalogs are in $(BUILDDIR)/locale."
.PHONY: changes
changes:
$(SPHINXBUILD) -b changes $(ALLSPHINXOPTS) $(BUILDDIR)/changes
@echo
@echo "The overview file is in $(BUILDDIR)/changes."
.PHONY: linkcheck
linkcheck:
$(SPHINXBUILD) -b linkcheck $(ALLSPHINXOPTS) $(BUILDDIR)/linkcheck
@echo
@echo "Link check complete; look for any errors in the above output " \
"or in $(BUILDDIR)/linkcheck/output.txt."
.PHONY: doctest
doctest:
$(SPHINXBUILD) -b doctest $(ALLSPHINXOPTS) $(BUILDDIR)/doctest
@echo "Testing of doctests in the sources finished, look at the " \
"results in $(BUILDDIR)/doctest/output.txt."
.PHONY: coverage
coverage:
$(SPHINXBUILD) -b coverage $(ALLSPHINXOPTS) $(BUILDDIR)/coverage
@echo "Testing of coverage in the sources finished, look at the " \
"results in $(BUILDDIR)/coverage/python.txt."
.PHONY: xml
xml:
$(SPHINXBUILD) -b xml $(ALLSPHINXOPTS) $(BUILDDIR)/xml
@echo
@echo "Build finished. The XML files are in $(BUILDDIR)/xml."
.PHONY: pseudoxml
pseudoxml:
$(SPHINXBUILD) -b pseudoxml $(ALLSPHINXOPTS) $(BUILDDIR)/pseudoxml
@echo
@echo "Build finished. The pseudo-XML files are in $(BUILDDIR)/pseudoxml."

Binary file not shown.

After

Width:  |  Height:  |  Size: 12 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 59 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 594 KiB

View File

@ -0,0 +1 @@
.. include:: ../../tronCommun/algo.txt

View File

@ -0,0 +1,83 @@
La planification agile
========================
Le mode itératif
-----------------
- livrer des versions successives et utilisables qui convergent vers
la version finale
- ne pas perdre d'énergie à maintenir des specs détaillées non nécessaires
- de nouvelles orientations fonctionnelles sont possibles, même tard
- les specs détaillées sont écrites "juste à temps"
La planification agile
-----------------------
- chaque livraison est un projet qui est planifié en tant que tel
- utiliser l'expérience acquise pour affiner les estimations
- préservation de l'écologie du projet au quotidien (code, tests...)
La confiance, feedback
-----------------------
- livraisons régulières
- progrès visibles par tous (pas d'effet tunnel)
- pilotage du projet par choix du contenu des livraisons
- investissement du Product Owner
- chercher la collaboration plutôt que la confrontation
L'agilité
----------
- le projet n'est pas joué d'avance
- cultiver la souplesse
- révolution douce
- sortir de la confrontation, jouer le "nous collectif"
mettre tout le monde sur le mme pont et amener tout le monde à bon port
Les outils agiles
------------------
- planification par itérations de 4 semaines
- entrepot de source partagé
- intégration continue
- tests automatisés
- pair programming sur points cruciaux
- sprints
- extranet :
- hitoires utilisateurs
- test cases
- gestion du backolog et des tickets
- suivi de l'avancement
- documentation
Le product owner
-----------------
idéalement,
- connaissance du métier à informatiser
- fibre projet
- dispo à 100%
Les tests
---------
- automatiser
- viser l'exhaustivité
- tester une cible mouvante
- migrer les tests d'une release à l'autre
Questions importantes en environnement agile
----------------------------------------------
- quelle durée d'itération ?
- comment découper en itérations ?
- que faire lorsque le product owner se retrouve sur le chemin critique ?
- la planification est faite en mode "juste à temps" et "juste assez"
- on ne s'échine plus à blâmer, au contraire on cherche à gagner ensemble

View File

@ -0,0 +1,19 @@
Exercices complémentaires
--------------------------
+ **Manipulation de chaînes de caractères**:
(création, accès à un caractère, concaténation), listes (création, ajout
dun élément, suppression dun élément, accès à un élément, extraction dune partie de liste), tableaux à une ou plusieurs dimensions.
+ traitement des chaines de caractères
+ s.replace()
+ s1 + s2
+ un exemple de regexp simple
+ **Fichiers** :
notion de chemin daccès, lecture et écriture de données numériques ou de type chaîne de caractères depuis ou vers un fichier.
On encourage lutilisation de fichiers en tant que supports de données ou de résultats avant divers traitements, par exemple graphiques.
+ **Piles**
Algorithmes de manipulation : fonctions 'push' et 'pop'. On utilise des listes
(ou tableaux à 1 dimension) pour leur implantation.

View File

@ -0,0 +1,10 @@
Annexes
=========
.. toctree::
:maxdepth: 2
exercices
surete
agile
scrum

View File

@ -0,0 +1,176 @@
scrum
=====
.. glossary::
scrum
Scrum est une méthode agile pour la gestion de projets
Le terme Scrum est emprunté au rugby et signifie mêlée.
Ce processus s'articule en effet autour d'une équipe soudée,
qui cherche à atteindre un but, comme c'est le cas en rugby
pour avancer avec le ballon pendant une mêlée.
Scrum définit trois rôles principaux :
- le responsable de produit -- Product Manager,
- le faciliteur -- ScrumMaster
- le développeur
et bien sûr, l'équipe (auto-gérée).
Des intervenants peuvent s'intégrer également au projet
de façon plus ponctuelle.
responsable de produit
Le responsable de produit (Product Manager) est le représentant des
clients et utilisateurs.
C'est lui qui définit l'ordre dans lequel les fonctionnalités
seront développées et qui prend les décisions importantes
concernant l'orientation du projet.
Le terme responsable n'est d'ailleurs pas à prendre au sens hiérarchique
du terme, mais dans le sens de l'orientation.
équipe, développement
outes les décisions sont prises ensemble et personne ne donne d'ordre
à l'équipe sur sa façon de procéder
facilitateur
est chargé de protéger l'équipe de tous les éléments perturbateurs
planification
--------------
Scrum utilise une planification à trois niveaux :
- release/projet
- sprint
- quotidien -- ScrumMeeting
quotidien
Au quotidien, une réunion, le ScrumMeeting (pas plus de 15 min)
permet à l'équipe et au ScrumMaster de faire un point d'avancement sur
les tâches et sur les difficultés rencontrées.
répondre à trois questions :
* Qu'est-ce que j'ai fait hier ?
* Qu'est-ce que je compte faire aujourd'hui ?
* Quelles difficultés est-ce que je rencontre ?
sprint
Scrum est un processus itératif : les itérations sont appelées des sprints
et durent en théorie 30 jours calendaires.
En pratique, les itérations durent généralement entre 2 et 4 semaines.
Chaque sprint possède un but et on lui associe une liste d'items
de fonctionnalités à réaliser.
Ces items sont décomposés par l'équipe en tâches élémentaires
de quelques heures, les items de fonctionnalités de sprint.
Pendant un sprint, les items de fonctionnalités de sprint à réaliser
ne peuvent pas être changés.
Les changements éventuels seront éventuellement réalisés
dans les sprints suivants.
releases
pour améliorer la lisibilité du projet,
on regroupe généralement des itérations en releases.
En effet, comme chaque sprint doit aboutir à la livraison
d'un produit partiel, une release permet de marquer la livraison
d'une version aboutie, susceptible d'être mise en exploitation
gestion des besoins
-------------------
tâches (backlog de sprint)
~~~~~~~~~~~~~~~~~~~~~~~~~~~
Lorsqu'on démarre un sprint, on choisit quels items des fonctionnalités
seront réalisés dans ce sprint.
L'équipe décompose ensuite chaque item en liste de tâches élémentaires
(techniques ou non), chaque tâche étant estimée en heures
et ne devant pas durer plus de 2 jours.
On constitue ainsi le backlog de sprint.
Les items de backlog de produit sont les fonctionnalités qui deviendront
les items du baclog d'un sprint.
Ces fonctionnalités sont estimées en points relatifs, sans unité.
planning poker
façon ludique et efficace de produire des estimations
sur la complexité des fonctionnalités à développer
pour évaluer les scénarios utilisateurs (user stories)
du carnet de produit (product backlog).
à la fin d'un sprint :
- revue de sprint
- rétrospective de sprint
comprendre ce qui n'a pas bien marché dans le sprint,
les erreurs commises et de prendre des décisions pour s'améliorer
mise en oeuvre
--------------
Scrum peut être mis en pratique avec trois fois rien : deux listes suffisent.
La liste des items du backlog de produit et la liste des items du backlog
de sprint. La saisie et la mise à jour des données est simplement
un peu moins agréable.
glossaire
---------
Directeur de produit (Product Owner) (responsable produit)
personne responsable de produire et maintenir à jour le backlog de produit.
C'est lui qui en détermine les priorités et qui prend les décisions
concernant l'orientation du projet.
ScrumMaster (facilitateur)
membre de l'équipe dont l'objectif principal est de la protéger
des perturbation extérieures.
Il est complètement transparent pour la communication entre l'équipe
et les clients et n'a aucun pouvoir hiérarchique sur l'équipe.
C'est en revanche un facilitateur pour les problèmes non techniques
de l'équipe.
Backlog de produit (Product Backlog) (fonctionnalités)
liste des fonctionnalités qui devront être réalisées par le logiciel.
Backlog de sprint (Sprint Backlog) (tâches)
liste des tâches à accomplir pendant un sprint.
Elles correspondent à la réalisation des items de backlog
du produit affectés au sprint.
Mêlée quotidienne (Daily Scrum) (quotidien)
réunion quotidienne de 15 minutes qui a pour but de faire le point
sur ce qui a été fait depuis la dernière mêlée,
ce qui est prévu de faire jusqu'à la prochaine
et quelles sont les embûches rencontrées durant le travail.
Sprint (sprint)
nom d'une itération dans Scrum.
Cette itération dure 30 jours calendaires en théorie,
mais en pratique on utilise plutôt entre 2 et 4 semaines.
Pendant une itération, l'équipe doit développer une liste d'items
du backlog de produit qui a été définie au début de ce sprint.
Graphique d'avancement (Burndown Chart) (avancement)
graphique qui montre la tendance du reste à faire total de jour en jour
(pour les sprints) ou de sprint en sprint (pour les releases).

View File

@ -0,0 +1,93 @@
Outils de sureté d'un programme
--------------------------------------
La preuve de programme
~~~~~~~~~~~~~~~~~~~~~~
Le niveau maximum de sûreté d'exécution d'un programme est la preuve. Qu'est-ce que la preuve
formelle d'un programme ? Selon la définition de Wikipédia, ce sont "des techniques permettant de
raisonner rigoureusement, à l'aide de logique mathématique, sur des programmes informatiques ou
du matériel électroniques, afin de démontrer leur validité par rapport à une certaine
spécification." Bref c'est un raisonnement logique sur un programmme qui permet d'être sûr que le
programme est valide et ne va pas planter.
La preuve de programme est très peu utilisée dans l'industrie, car très coûteuse et très
difficile à mettre en place. Elle quand même utilisée, mais dans des secteurs où le risque doit
absolument être évacué et où il n'y a aucun droit à l'erreur. Par exemple, le secteur médical
(informatique en bloc opératoire), militaire (peu d'informations nous parviennent dans ce
domaine), l'aviation civile (le logiciel Astrée pour Airbus), la fusée Ariane (depuis le bug qui
avait fait crasher Ariane 5 ces questions sont prises très au sérieux), et le milieu bancaire
(surtout le domaine des décisions boursières : un programme chargé de lancer des décisions
d'achat ou de vente à la bourse qui comporte un bug peut en quelque centièmes de secondes faire
perdre des millions, voire des milliards d'euros à une banque. Le programme ne doit tout simplement pas
bugger).
Le model checking
~~~~~~~~~~~~~~~~~~
Le model checking, l'analyse statique et l'interprétation abstraite procèdent d'une méthodologie
moins lourde de validation des programmes. Ces méthodes analysent exhaustivement l'évolution du
système lors de ses exécutions possibles et permetent de dire si globalement, dans un contexte
donné, le programme va fonctionner correctement. Encore très lourdes, ces techniques ne sont
utilisées que dans un contexte industriel de haute sécurité.
Les tests d'acceptation
~~~~~~~~~~~~~~~~~~~~~~~
Il y a plusieurs types de tests
- unitaires
- fonctionnels
- acceptation
Très utilisés dans l'industrie, les tests unitaires et fonctionnels ne testent que certaines
parties du programme et permettent de dire que le programme va marcher grosso-modo à peu près.
Beaucoup moins coûteux à installer, ce sont des éléments cléfs des méthodes agiles.
Les Outils de linting (validation)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
- vérifications syntaxiques
- vérification sémantiques
- vérification sur les imports inutiles ou mal formés (imports croisés
Exemple en python : pylint
La dette technique
~~~~~~~~~~~~~~~~~~
Au bout d'un moment le code devient du code spaghetti et les techniques sont obsolètes.
Les tests permettent de solder la dette technique plus facilement.
**avoir le courage de payer une dette technique, et affronter une dette technique
sinon il peut y avoir un coût à payer qui sera pohibitoire.**
On solde la dette technique parce que à un moment ça va devenir beaucoup trop
cher à payer.
Les méthodologies agiles
~~~~~~~~~~~~~~~~~~~~~~~~
La manière dont le code est produit importe énormément. Par exemple, une
méthodologie ou le **refactoring** (réécriture de code) est permis et même conseillé
a plus de chance de produire du code organisé.
Les méthodologies agiles produisent en général du code mieux organisé. Ce sont les
méthodes de travail les plus en vogue aujourd'hui, elles mettent l'accent sur :
- Du logiciel fonctionnel plutôt que de la documentation exhaustive
- La réponse au changement plutôt que le suivi d'un plan
- Le logiciel fonctionnel est la principale mesure d'avancement
- Une attention continue à l'excellence technique et à une bonne
conception améliore l'agilité
- La simplicité est essentielle (il est facile de faire, il est
difficile de faire simple)
Le principe de base de la méthodologie Scrum par exemple est de focaliser l'équipe de façon
itérative sur un ensemble de fonctionnalités à réaliser, dans des itérations de durée fixe de une
à quatre semaines, appelées **sprints**. Chaque sprint possède un but à atteindre, défini par le
responsable de produit, à partir duquel sont choisies les fonctionnalités à implémenter dans ce
sprint. Un sprint aboutit toujours sur la livraison d'un produit partiel fonctionnel. Pendant ce
temps, le facilitateur a la charge de réduire au maximum les perturbations extérieures et de
résoudre les problèmes non techniques de l'équipe.

View File

@ -0,0 +1,96 @@
Aperçu des algorithmes fondamentaux
===================================
Les algorithmes sont partout. Absolument partout aujourd'hui.
Il n'est pas un domaine de nos activités qui ne soit liés à tel ou tel algorithme.
Quelques grands thèmes: systèmes cryptographiques, géométrie algorithmique, reconnaissance de motifs, mais aussi les problèmes posés par lalgorithmique parallèle, etc...
En mathématiques
-----------------
- l'algèbre (étude des structures de données)
- l'arithmétique modulaire (théorie des nombres)
En mathématiques et plus précisément en théorie algébrique des nombres,
larithmétique modulaire est un ensemble de méthodes permettant la résolution de problèmes
sur les nombres entiers.
Ces méthodes dérivent de létude du reste obtenu par une division euclidienne.
- la géométrie (affine, algébrique, invariants topologiques...)
- les diagrammes (diagrammes de Venn...)
- les colorisation d'une carte
- comportements stochastiques
En informatique
----------------
- les algorithmes sur la manipulation des structures de données
Exemple : les algorithmes de tri, de recherche dans un arbre...
- les parcours de graphes (chemins le plus court, voyageur de commerce...)
- la cryptologie (code gray)
- les stratégies de jeux
Tirés du monde réel
--------------------
- les jeux (casse-tête, dominos, échiquiers...)
- énigmes, logique et paradoxes
- problèmes de raisonnements. Il n'existe pas beaucoup de méthodes
ou de moyens simples pour traiter et résoudre les énoncés de logique de raisonnement.
- La "marche de l'ivrogne" : processus de progression discrète (pas à pas)
dont l'étape suivante est lié à l'état présent et pas du tout à la mémoire du passé proche.
Il revêt seulement un caractère de type probabilité (stochastique) dit markovien.
- algorithmes de colonies de fourmis (chemins optimal pour arriver à la nourriture)
Le voyageur de commerce
~~~~~~~~~~~~~~~~~~~~~~~~
Le problème du voyageur de commerce, consiste en la recherche dun trajet minimal permettant à un
voyageur de visiter n villes. En règle générale on cherche à minimiser le temps de parcours total ou la
distance totale parcourue.
Il suffit de construire tous les chemins possibles et de calculer leurs longueurs.
Avec ``n`` villes il y a ``(n-1)!/2`` chemins possibles.
Avec 36 villes on trouve : 5166573983193072464833325668761600000000,
si le nombre de villes augmente, ça devient vite rédibitoire.
Résolution par
- algorithme de parcours de graphes
- algorithme glouton
- algorithmes génétiques
Les algorithmes génétiques sappuient sur un principe de sélection des individus dune population qui présen-
tent des caractéristiques se rapprochant au mieux de ce que lon recherche; cette population évoluant par
ailleurs selon des critères dévolution génétique à choisir. Dans le contexte du problème du voyageur de
commerce, un individu est une tournée, un chemin et une population un ensemble de tournées. Il sagit
maintenant de dé...nir un critère de sélection ainsi que des règles dévolution de la population.
- approches métaheuristiques (exemples: colonies de fourmis)
Exemple de résolution
.. raw:: latex
\begin{algorithm}
\caption{Algorithme du voyageur de commerce}\label{commerce}
\begin{algorithmic}[1]
\BState \emph{Données} : $L$ \Comment{Liste des villes à parcourir avec les distances entre les villes}
\BState \emph{Données} : $L'$ \Comment{Liste du parcours des villes à effectuer}
\State \emph{début}
\BState ...
\State \emph{fin}
\end{algorithmic}
\end{algorithm}
Algorithmes gloutons
--------------------
Les algorithmes servant à résoudre les problèmes doptimisation parcourent en général une
série détapes, au cours desquelles ils sont confrontés à un ensemble de possibilités. Un
algorithme glouton fait toujours le choix qui semble le meilleur sur le moment, dans lespoir
quil mènera à la solution optimale globalement.

View File

@ -0,0 +1,17 @@
let rec fact = function
|1 -> 1
| n -> n * fact (n-1) ;;
let print_fact n =
Printf.printf "factorielle %i = %i\n" n (fact n)
let main () =
begin
print_fact 5 ;
print_newline () ;
exit 0 ;
end
let _ = main ()

View File

@ -0,0 +1,12 @@
def factorielle(n):
if (n > 1):
r = n*factorielle(n-1)
else:
r = 1
return r
def print_fact(n):
print "factorielle {} = {}\n".format(5, factorielle(5))
if __name__ == '__main__':
print_fact(5)

View File

@ -0,0 +1,99 @@
Notion de complexité d'un algorithme
====================================
Définition
-----------
Lanalyse de la complexité dun algorithme consiste à évaluer les ressources
consommées par lalgorithme lors de lexécution
deux critères dévaluation
- le coût en temps (nombre dopérations)
- le coût en espace, (quantité de mémoire)
principes de base
-----------------
Caractériser la quantité de ressources consommées en fonction de la
taille des données sur lesquelles lalgorithme est appliqué.
Evaluer le coût exact est difficile, on exprimera donc seulement un
ordre de grandeur
On peut approximer la complexité des algorithmes.
C'est utile pour pouvoir comparer des algorithmes.
complexité
estimer la complexité d'un algorithme, c'est estimer le nombre de calculs qu'il utilise.
Si f est la fonction caractérisant exactement le coût dun algorithme et n
la taille des données, on sintéresse à la façon dont augment f(n) lorsque n augmente
on va montrer que f(n) n'augmente pas plus vite quune autre fonction
g(n). Du point de vue mathématique, on dit que la fonction f est dominée
asymptotiquement par la fonction g ce qui se note f = O(g)
- Complexité temporelle : cest le nombre dop«erations effectuées par
une machine qui exécute lalgorithme.
- Complexité spatiale : cest le nombre de positions mémoire utilisées par
une machine qui exécute lalgorithme.
définition mathématique
-----------------------
- si f est la fonction caractérisant exactement le coût dun algorithme
- et n la taille des données
- on s'intéresse à la façon dont croît f(n) lorsque n croît
- on va montrer que f (n) ne croît pas plus vite quune autre fonction g(n)
Du point de vue mathématique, on dit que la fonction f est dominée
asymptotiquement par la fonction g ce qui se note f= O(g)
::
f = O(g) ssi il existe k, il existe n 0 , pour tout n, n > n 0 implique
f(n) inférieur ou egal k.g (n)
exemples
---------
- O(n) : progression linéaire
- O(n^2) : progression quadratique
- O(n^p) : progression polynomiale
- O(p^n ) : progression exponentielle
- O(log(n)): progression logarithmique
Problèmes NP-complets
----------------------
En théorie de la complexité, un problème NP-complet (c'est-à-dire un problème
complet pour la classe NP) est un problème de décision vérifiant les
propriétés suivantes :
- Il est possible de vérifier une solution efficacement (en temps
polynomial) ; la classe des problèmes vérifiant cette propriété est notée
NP ;
- Tous les problèmes de la classe NP se ramènent à celui-ci via une
réduction polynomiale ; cela signifie que le problème est au moins
aussi difficile que tous les autres problèmes de la classe NP.
- Un problème NP-difficile est un problème qui remplit la seconde
condition, et donc peut être dans une classe de problème plus large et
donc plus difficile que la classe NP.
Bien qu'on puisse vérifier rapidement toute solution proposée d'un
problème NP-complet, on ne sait pas en trouver efficacement. C'est le
cas, par exemple, du problème du voyageur de commerce ou de celui du
problème du sac à dos.
Tous les algorithmes connus pour résoudre des problèmes NP-complets
ont un temps d'exécution exponentiel en la taille des données d'entrée
dans le pire cas, et sont donc inexploitables en pratique même pour
des instances de taille modérée.

View File

@ -0,0 +1,370 @@
# -*- coding: utf-8 -*-
#
# Algorithmique documentation build configuration file, created by
# sphinx-quickstart on Thu Mar 16 16:07:00 2017.
#
# This file is execfile()d with the current directory set to its
# containing dir.
#
# Note that not all possible configuration values are present in this
# autogenerated file.
#
# All configuration values have a default; values that are commented out
# serve to show the default.
import sys
import os
# If extensions (or modules to document with autodoc) are in another directory,
# add these directories to sys.path here. If the directory is relative to the
# documentation root, use os.path.abspath to make it absolute, like shown here.
#sys.path.insert(0, os.path.abspath('.'))
# -- General configuration ------------------------------------------------
# If your documentation needs a minimal Sphinx version, state it here.
#needs_sphinx = '1.0'
# Add any Sphinx extension module names here, as strings. They can be
# extensions coming with Sphinx (named 'sphinx.ext.*') or your custom
# ones.
extensions = [
'sphinx.ext.pngmath', 'sphinx.ext.ifconfig',
]
# ajout des cours avec solution des exercices ou non
def setup(app):
app.add_config_value('correction', False, 'env')
app.add_config_value('exercice', False, 'env')
exercice = True
correction = True
# Add any paths that contain templates here, relative to this directory.
templates_path = ['_templates']
# The suffix(es) of source filenames.
# You can specify multiple suffix as a list of string:
# source_suffix = ['.rst', '.md']
source_suffix = '.txt'
# The encoding of source files.
#source_encoding = 'utf-8-sig'
# The master toctree document.
master_doc = 'index'
# General information about the project.
project = u'Algorithmique Approfondie'
copyright = u'2017, Gwen'
author = u'Gwen'
# The version info for the project you're documenting, acts as replacement for
# |version| and |release|, also used in various other places throughout the
# built documents.
#
# The short X.Y version.
version = u'1'
# The full version, including alpha/beta/rc tags.
release = u'1'
# The language for content autogenerated by Sphinx. Refer to documentation
# for a list of supported languages.
#
# This is also used if you do content translation via gettext catalogs.
# Usually you set "language" from the command line for these cases.
language = 'fr'
# There are two options for replacing |today|: either, you set today to some
# non-false value, then it is used:
#today = ''
# Else, today_fmt is used as the format for a strftime call.
today_fmt = '%d/%m/%Y'
# List of patterns, relative to source directory, that match files and
# directories to ignore when looking for source files.
exclude_patterns = ['_build']
# The reST default role (used for this markup: `text`) to use for all
# documents.
default_role = 'literal'
# If true, '()' will be appended to :func: etc. cross-reference text.
#add_function_parentheses = True
# If true, the current module name will be prepended to all description
# unit titles (such as .. function::).
#add_module_names = True
# If true, sectionauthor and moduleauthor directives will be shown in the
# output. They are ignored by default.
#show_authors = False
# The name of the Pygments (syntax highlighting) style to use.
pygments_style = 'sphinx'
# A list of ignored prefixes for module index sorting.
#modindex_common_prefix = []
# If true, keep warnings as "system message" paragraphs in the built documents.
#keep_warnings = False
# If true, `todo` and `todoList` produce output, else they produce nothing.
todo_include_todos = False
# -- Options for HTML output ----------------------------------------------
# The theme to use for HTML and HTML Help pages. See the documentation for
# a list of builtin themes.
html_theme = 'alabaster'
# Theme options are theme-specific and customize the look and feel of a theme
# further. For a list of options available for each theme, see the
# documentation.
#html_theme_options = {}
# Add any paths that contain custom themes here, relative to this directory.
#html_theme_path = []
# The name for this set of Sphinx documents. If None, it defaults to
# "<project> v<release> documentation".
#html_title = None
# A shorter title for the navigation bar. Default is the same as html_title.
#html_short_title = None
# The name of an image file (relative to this directory) to place at the top
# of the sidebar.
#html_logo = None
# The name of an image file (relative to this directory) to use as a favicon of
# the docs. This file should be a Windows icon file (.ico) being 16x16 or 32x32
# pixels large.
#html_favicon = None
# Add any paths that contain custom static files (such as style sheets) here,
# relative to this directory. They are copied after the builtin static files,
# so a file named "default.css" will overwrite the builtin "default.css".
html_static_path = ['_static']
# Add any extra paths that contain custom files (such as robots.txt or
# .htaccess) here, relative to this directory. These files are copied
# directly to the root of the documentation.
#html_extra_path = []
# If not '', a 'Last updated on:' timestamp is inserted at every page bottom,
# using the given strftime format.
#html_last_updated_fmt = '%b %d, %Y'
# If true, SmartyPants will be used to convert quotes and dashes to
# typographically correct entities.
#html_use_smartypants = True
# Custom sidebar templates, maps document names to template names.
#html_sidebars = {}
# Additional templates that should be rendered to pages, maps page names to
# template names.
#html_additional_pages = {}
# If false, no module index is generated.
#html_domain_indices = True
# If false, no index is generated.
#html_use_index = True
# If true, the index is split into individual pages for each letter.
#html_split_index = False
# If true, links to the reST sources are added to the pages.
#html_show_sourcelink = True
# If true, "Created using Sphinx" is shown in the HTML footer. Default is True.
html_show_sphinx = False
# If true, "(C) Copyright ..." is shown in the HTML footer. Default is True.
html_show_copyright = False
# If true, an OpenSearch description file will be output, and all pages will
# contain a <link> tag referring to it. The value of this option must be the
# base URL from which the finished HTML is served.
#html_use_opensearch = ''
# This is the file name suffix for HTML files (e.g. ".xhtml").
#html_file_suffix = None
# Language to be used for generating the HTML full-text search index.
# Sphinx supports the following languages:
# 'da', 'de', 'en', 'es', 'fi', 'fr', 'hu', 'it', 'ja'
# 'nl', 'no', 'pt', 'ro', 'ru', 'sv', 'tr'
#html_search_language = 'en'
# A dictionary with options for the search language support, empty by default.
# Now only 'ja' uses this config value
#html_search_options = {'type': 'default'}
# The name of a javascript file (relative to the configuration directory) that
# implements a search results scorer. If empty, the default will be used.
#html_search_scorer = 'scorer.js'
# Output file base name for HTML help builder.
htmlhelp_basename = 'Algorithmiquedoc'
# -- Options for LaTeX output ---------------------------------------------
latex_elements = {
# The paper size ('letterpaper' or 'a4paper').
'papersize': 'a4paper',
# The font size ('10pt', '11pt' or '12pt').
#'pointsize': '10pt',
# Additional stuff for the LaTeX preamble.
'preamble': """\usepackage{amsmath}
\usepackage{algorithm}
\usepackage[noend]{algpseudocode}
\makeatletter
\def\BState{\State\hskip-\ALG@thistlm}
\makeatother
"""
# Latex figure (float) alignment
#'figure_align': 'htbp',
}
# Grouping the document tree into LaTeX files. List of tuples
# (source start file, target name, title,
# author, documentclass [howto, manual, or own class]).
latex_documents = [
(master_doc, 'AlgorithmiqueApprofondie.tex', u'Cours d\'algorithmique approfondie',
u'INFAL24', 'manual'),
]
# The name of an image file (relative to this directory) to place at the top of
# the title page.
latex_logo = '_static/cesi.jpg'
# For "manual" documents, if this is true, then toplevel headings are parts,
# not chapters.
latex_use_parts = False
# If true, show page references after internal links.
#latex_show_pagerefs = False
# If true, show URL addresses after external links.
#latex_show_urls = False
# Documents to append as an appendix to all manuals.
#latex_appendices = []
# If false, no module index is generated.
#latex_domain_indices = False
# -- Options for manual page output ---------------------------------------
# One entry per manual page. List of tuples
# (source start file, name, description, authors, manual section).
man_pages = [
(master_doc, 'algorithmique', u'Algorithmique Documentation',
[author], 1)
]
# If true, show URL addresses after external links.
#man_show_urls = False
# -- Options for Texinfo output -------------------------------------------
# Grouping the document tree into Texinfo files. List of tuples
# (source start file, target name, title, author,
# dir menu entry, description, category)
texinfo_documents = [
(master_doc, 'Algorithmique', u'Algorithmique Documentation',
author, 'Algorithmique', 'One line description of project.',
'Miscellaneous'),
]
# Documents to append as an appendix to all manuals.
#texinfo_appendices = []
# If false, no module index is generated.
#texinfo_domain_indices = True
# How to display URL addresses: 'footnote', 'no', or 'inline'.
#texinfo_show_urls = 'footnote'
# If true, do not generate a @detailmenu in the "Top" node's menu.
#texinfo_no_detailmenu = False
# -- Options for Epub output ----------------------------------------------
# Bibliographic Dublin Core info.
epub_title = project
epub_author = author
epub_publisher = author
epub_copyright = copyright
# The basename for the epub file. It defaults to the project name.
#epub_basename = project
# The HTML theme for the epub output. Since the default themes are not
# optimized for small screen space, using the same theme for HTML and epub
# output is usually not wise. This defaults to 'epub', a theme designed to save
# visual space.
#epub_theme = 'epub'
# The language of the text. It defaults to the language option
# or 'en' if the language is not set.
#epub_language = ''
# The scheme of the identifier. Typical schemes are ISBN or URL.
#epub_scheme = ''
# The unique identifier of the text. This can be a ISBN number
# or the project homepage.
#epub_identifier = ''
# A unique identification for the text.
#epub_uid = ''
# A tuple containing the cover image and cover page html template filenames.
#epub_cover = ()
# A sequence of (type, uri, title) tuples for the guide element of content.opf.
#epub_guide = ()
# HTML files that should be inserted before the pages created by sphinx.
# The format is a list of tuples containing the path and title.
#epub_pre_files = []
# HTML files that should be inserted after the pages created by sphinx.
# The format is a list of tuples containing the path and title.
#epub_post_files = []
# A list of files that should not be packed into the epub file.
epub_exclude_files = ['search.html']
# The depth of the table of contents in toc.ncx.
#epub_tocdepth = 3
# Allow duplicate toc entries.
#epub_tocdup = True
# Choose between 'default' and 'includehidden'.
#epub_tocscope = 'default'
# Fix unsupported image types using the Pillow.
#epub_fix_images = False
# Scale large images.
#epub_max_image_width = 0
# How to display URL addresses: 'footnote', 'no', or 'inline'.
#epub_show_urls = 'inline'
# If false, no index is generated.
#epub_use_index = True

View File

@ -0,0 +1,309 @@
Les structures de contrôle
==========================
L'instruction de saut
----------------------
.. raw:: latex
\begin{algorithm}
\caption{Exemple de saut conditionnel}\label{saut}
\begin{algorithmic}[1]
\Procedure{Euclide}{} \Comment{c'est l'algorithme d'Euclide}
\State $\textit{stringlen} \gets \text{length of }\textit{string}$
\State $i \gets \textit{patlen}$
\BState \emph{top}:
\If {$i > \textit{stringlen}$} \Return false
\EndIf
\State $j \gets \textit{patlen}$
\BState \emph{loop}: \Comment{C'est le label (l'étiquette)} \label{etiquette}
\If {$\textit{string}(i) = \textit{path}(j)$}
\State $j \gets j-1$.
\State $i \gets i-1$.
\State \textbf{goto} \emph{loop}. \label{goto}
\State \textbf{close};
\EndIf
\State $i \gets
i+\max(\textit{delta}_1(\textit{string}(i)),\textit{delta}_2(j))$.
\State \textbf{goto} \emph{top}. \Comment{C'est l'instruction de saut}
\EndProcedure
\end{algorithmic}
\end{algorithm}
.. raw:: latex
Ligne \ref{etiquette}, le bloc `loop` est aussi un label (une étiquette),
c'est-à-dire une marque posée qu'il est possible de retrouver dans le programme. \\
.. raw:: latex
Ligne \ref{goto}, l'instruction \texttt{goto} (aller à ) est le saut vers le label. \\
Description générique d'une instruction de saut::
Instruction 1
Saut Label1
Instruction 2
...
Label1:
Instruction n
.. important:: les sauts conditionnels sont à éviter, même s'ils sont implémentés
dans le langage cible, car c'est le meilleur moyen d'aboutir à
du **code spaghetti**.
L'instruction de branchement conditionnel
------------------------------------------
On appelle structure conditionnelle les instructions qui permettent de tester si une condition est vraie ou non.
.. raw:: latex
\begin{algorithm}
\caption{Exemple d'instruction de test}
\begin{algorithmic}[1]
\BState \emph{entrée}: $quality\gets 0$ \Comment{C'est cette valeur qui sera testée}
\BState \emph{locale}: $a\gets ""$
\BState \emph{sortie}: $a$ \Comment{La sortie est la valeur de $a$}
\BState \emph{corps}:
\If{$quality\ge 9$}
\State $a\gets perfect$
\ElsIf{$quality\ge 7$}
\State $a\gets good$
\ElsIf{$quality\ge 5$}
\State $a\gets medium$
\ElsIf{$quality\ge 3$}
\State $a\gets bad$
\Else
\State $a\gets unusable$
\EndIf
\end{algorithmic}
\end{algorithm}
.. ifconfig:: exercice
**Exercice** : Compacter l'algorithme suivant en une seule condition de test::
Si il fait trop chaud Alors
Si il ne pleut pas Alors
Ouvrir la fenêtre
Sinon
Fermer la fenêtre
Finsi
Sinon
Fermer la fenêtre
Finsi
.. ifconfig:: correction
**Correction** :
::
Si il fait trop chaud ET il ne pleut pas Alors
Ouvrir la fenêtre
Sinon
Fermer la fenêtre
Finsi
L'instruction switch
--------------------
L'instruction switch permet de faire plusieurs tests de valeurs sur le contenu d'une même variable.
Ce branchement conditionnel simplifie beaucoup le test de plusieurs valeurs d'une variable.
Les instructions d'itérations (boucles)
---------------------------------------
.. important:: Toutes les boucles concernent le paradigme de programmation impératif
et ne sont pas valides dans le paradigme de programmation fonctionnel
(puisque l'ordre d'évaluation importe)
- arrêt conditionnel (break)
- passage d'un pas (continue)
Répéter ... jusqu'à
~~~~~~~~~~~~~~~~~~~
.. raw:: latex
\begin{algorithm}
\caption{Exemple de répéter ... jusqu'à}
\begin{algorithmic}[1]
\BState \emph{locales}: $i \gets 1$ \Comment{déclaration et initialisation de i}
\Repeat \Comment{c'est le label de début du répéter}
\State $i \gets \textit{i+1}$
\Until{i == 100} \Comment{condition de fin de la boucle}
\end{algorithmic}
\end{algorithm}
La boucle **pour** (for)
~~~~~~~~~~~~~~~~~~~~~~~~
.. raw:: latex
\begin{algorithm}
\caption{Exemple de boucle for}
\begin{algorithmic}[1]
\BState \emph{locales}: $sum\gets 0$
\For{$i\gets 1, n$}
\State $sum\gets sum+i$
\EndFor
\end{algorithmic}
\end{algorithm}
.. ifconfig:: exercice
**Exercice** : Ecrire un algorithme qui demande successivement 20 nombres à lutilisateur,
et qui lui dise ensuite quel était le plus grand parmi ces 20 nombres
.. ifconfig:: correction
**Correction** :
::
Variables N, i, PG en Entier
Debut
PG <- 0
Pour i <- 1 à 20
Ecrire "Entrez un nombre : "
Lire N
Si i = 1 ou N > PG Alors
PG <- N
FinSi
Ecrire "Le nombre le plus grand était : ", PG
Fin
.. attention:: ne jamais manipuler le compteur dans une boucle
::
Variable Truc en Entier
Début
Pour Truc <- 1 à 15
Truc <- Truc * 2
Ecrire "Passage numéro : ", Truc
Truc Suivant
Fin
.. important:: Même la boucle for dépend de l'environnement de language,
ça n'est pas un axiome algorithmique, dans un contexte
impératif, la syntaxe sera de la forme::
for i=1 to 50 do
(... bla bla ...)
done
et dans un contexte objet:
for i in myobj:
(... bla bla ...)
La boucle tant que (while)
~~~~~~~~~~~~~~~~~~~~~~~~~~
.. raw:: latex
\begin{algorithm}
\caption{Exemple de boucle while}
\begin{algorithmic}[1]
\BState \emph{locales}: $sum\gets 0$
\State $i\gets 1$
\While{$i\le n$}
\State $sum\gets sum+i$
\State $i\gets i+1$
\EndWhile
\end{algorithmic}
\end{algorithm}
.. ifconfig:: exercice
**Exercice** : Ecrire un algorithme de validation d'une entrée utilisateur
::
"Voulez vous un café ? (O/N)"
.. ifconfig:: correction
**Correction** : deux solutions possibles, une
::
Variable Rep en Caractère
Début
Rep <- ""
Ecrire "Voulez vous un café ? (O/N)"
TantQue Rep <> "O" et Rep <> "N"
Lire Rep
Si Rep <> "O" et Rep <> "N" Alors
Ecrire "Saisie Erronée, Recommencez"
FinSi
FinTantQue
Fin
::
Variable Rep en Caractère
Début
Ecrire "Voulez vous un café ? (O/N)"
Lire Rep
TantQue Rep <> "O" et Rep <> "N"
Ecrire "Vous devez répondre par O ou N. Recommencez"
Lire Rep
FinTantQue
Ecrire "Saisie acceptée"
Fin
.. ifconfig:: exercice
**Exercice** : "C'est plus, C'est moins", c'est-à-dire Ecrire un algorithme qui demande à lutilisateur
un nombre compris entre a et b jusquà ce que la réponse convienne.
.. ifconfig:: correction
**Correction** :
::
Variable N en Entier
Debut
N <- 0
Ecrire "Entrez un nombre entre 10 et 20"
TantQue N < 10 ou N > 20
Lire N
Si N < 10 Alors
Ecrire "Plus grand !"
SinonSi N > 20 Alors
Ecrire "Plus petit !"
FinSi
FinTantQue
Fin
Et les autres boucles : répéter... jusqu'à, etc...
.. raw:: latex
\begin{algorithm}
\caption{Exemple de boucle répéter}
\begin{algorithmic}[1]
\State $sum\gets 0$
\State $i\gets 1$
\Repeat
\State $sum\gets sum+i$
\State $i\gets i+1$
\Until{$i>n$}
\end{algorithmic}
\end{algorithm}

View File

@ -0,0 +1,833 @@
Les structures de données
===========================
.. glossary::
ATD
Abstract Data Type, structure de données abstraites.
La représentation des données est forcément un choix.
Il est impossible de rendre compte globalement d'un élément du réel,
il faut en faire une interprétation abstraite.
**Exemple**:
- Un être humain peut être représenté par les données présentes dans sa
carte d'identité. Mais un être humain n'est pas sa carte d'identité.
- Un être humain peut être représenté par les données présentes dans ses préférences
de surf sur internet. Mais un être humain **n'est pas** l'ensemble de ses logs de surf sur le net.
Les séquences
-------------
Les types séquences (listes)
.. code-block:: ocaml
# 4::1::5::8::1::[];;
- : int list = [4 ;1 ;5 ;8 ;1]
Un ensemble de valeurs portant le même nom de variable et repérées par un nombre, sappelle un tableau, ou encore une liste, ou une variable indicée.
Le nombre qui, au sein dun tableau, sert à repérer chaque valeur sappelle lindice.
Chaque fois que lon doit désigner un élément du tableau, on fait figurer le nom du tableau, suivi de lindice de lélément.
**manipulation** :
- `insert()`
- `append()`
- `remove()`
- `find()`
- `print()`
- ...
.. code-block:: python
zoo = ['bear', 'lion', 'panda', 'zebra']
print(zoo)
# But these list elements are not
biggerZoo = ['bear', 'lion', 'panda', 'zebra', ['chimpanzees', 'gorillas', 'orangutans', 'gibbons']]
print(biggerZoo)
- Lists Versus Tuples : types mutables, immutables
- Lists Versus Sets : non ordonné, collection simple
- Recherche dans une liste, recherche du maximum dans une liste
- Recherche dun mot dans une chaîne de caractères.
Algorithme de la longueur d'une liste
--------------------------------------
.. code-block:: ocaml
# let rec longueur l =
match l with
[] -> 0
| ::s -> 1 + (longueur s);;
Cette fonction est prédéfinie en Ocaml : `List.length`
.. ifconfig:: exercice
**Exercice** : écrire un algorithme qui déclare et
remplisse un tableau de 7 valeurs numériques en les mettant toutes à zéro.
.. ifconfig:: correction
**Correction** :
::
Tableau Truc(6) en Numérique
Variable i en Numérique
Debut
Pour i <- 0 à 6
Truc(i) <- 0
i Suivant
Fin
exemple d'implémentation en python
.. code-block: python
>>> liste = []
>>> for i in range(6):
... liste.append(i)
...
>>> liste
[0, 1, 2, 3, 4, 5]
>>>
.. ifconfig:: exercice
**Exercice** : Calcul du premier élément maximal dans une liste,
proposer une implémentation en python qui renvoie le maximum et
la position du max dans la liste.
.. ifconfig:: correction
**Correction** :
.. code-block: python
def max_list(L) :
k = len(L)
max, x = L[0], 0
i = 1
while i < k :
if max < L[i]:
max = L[i]
x = i
i = i + 1
return max, x
couple = max_list([4,5,6,9,12,5,10,3,18,5,6,7])
print Max de L est , couple[0]
print et se trouve à la position , couple[1]
Exemple de généricité : ce code fonctionne avec une chaîne de caractères.
.. code-block: python
couple = max_list(totovaaumarche)
print Max de L est , couple[0]
print et se trouve à la position , couple[1]
.. glossary::
Matrice
Tableaux de dimension multiple, c'est un tableau de tableau
.. ifconfig:: exercice
**Exercice** : Écrivez un algorithme remplissant un tableau de 6 sur 13, avec des zéros.
.. ifconfig:: correction
**Correction** :
implémentation en python
.. code-block:: python
>>> matrice = []
>>> for i in range(12):
... matrice.append([0 for i in range(5)])
...
>>> from pprint import pprint
>>> pprint(matrice)
[[0, 0, 0, 0, 0],
[0, 0, 0, 0, 0],
[0, 0, 0, 0, 0],
[0, 0, 0, 0, 0],
[0, 0, 0, 0, 0],
[0, 0, 0, 0, 0],
[0, 0, 0, 0, 0],
[0, 0, 0, 0, 0],
[0, 0, 0, 0, 0],
[0, 0, 0, 0, 0],
[0, 0, 0, 0, 0],
[0, 0, 0, 0, 0]]
>>>
Algorithmes de tri
------------------
On désigne par "tri" l'opération consistant à ordonner un ensemble d'éléments en fonction de clés sur lesquelles est définie une relation d'ordre.
Les algorithmes de tri ont une grande importance pratique.
Ils sont fondamentaux dans certains domaines (exemples : map-reduce en database non relationnelle).
L'étude du tri est également intéressante en elle-même, c'est un des domaines de l'algorithmique très étudié et connu.
Tri par insertion
~~~~~~~~~~~~~~~~~~
Cet algorithme de tri suit de manière naturelle la structure récursive des
listes. Soit l une liste à trier :
- si l est vide alors elle est déjà triée
- sinon, l est de la forme x::s et on trie récursivement la suite s et on obtient une liste triée s
on insert x au bon endroit dans s et on obtient une liste triée
Description de l'algorithme
- la fonction inserer permet dinsérer un élément x dans une liste l
- si la liste l est triée alors x est inséré au bon endroit
.. important:: la manière naturelle d'implémenter cet algorithme est ici la récursivité
.. code-block:: ocaml
# let rec inserer x l =
match l with
[] -> [x]
| y::s -> if x<=y then x::l else y::(inserer x s);;
val inserer : a -> a list -> a list
# inserer 5 [3 ;7 ;10];;
- : int list = [3 ; 5 ; 7 ; 10]
Tri rapide
~~~~~~~~~~~~
soit une liste l à trier :
- si l est vide alors elle est triée
- sinon, choisir un élément p de la liste (le premier par exemple)
nommé le **pivot**
- partager l en deux listes g et d contenant les autres éléments de l
qui sont plus petits (resp. plus grands) que la valeur du pivot p
- trier récursivement g et d, on obtient deux listes g et d triées
la fonction suivante permet de partager une liste l en deux sous-listes g et
d contenant les éléments de l plus petits (resp. plus grands) quune valeur
donnée p
.. code-block:: ocaml
:caption: fonction de partage d'une liste
#let rec partage p l =
match l with
[] -> ([] , [])
|x::s -> let g,d = partage p s in
if x<=p then (x::g , d) else (g , x::d) ;;
val partage : a -> a list -> a list * a list = <fun>
# partage 5 [1 ;9 ;7 ;3 ;2 ;4];;
- : int list * int list = ([1 ; 3 ; 2 ; 4], [9 ; 7])
.. code-block:: ocaml
:caption: algorithme de tri rapide
# let rec tri rapide l =
match l with
[] -> []
| p::s -> let g , d = partage p s in
(tri rapide g)@[p]@(tri rapide d) ;;
val tri rapide : a list -> a list = <fun>
# tri rapide [5 ; 1 ; 9 ; 7 ; 3 ; 2 ; 4];;
- : int list = [1 ; 2 ; 3 ; 4 ; 5 ; 7 ; 9]
autre exemple de tri : le tri fusion. Il y en a d'autres.
Le tri en python
----------------
Pour comprendre comment marche le tri en Python, il faut comprendre que presque tout en Python est ordonnable car comparable
.. code-block:: python
>>> 1 > 0 # les nombres sont comparables
True
>>> 1 < 0
False
>>> "a" < "b" # les lettres, par ordre alphabetique
True
>>> True > False # les booléan (!)
True
>>> (1, 2) > (2, 1) # les iterables comparés, élément par élément dans l'ordre
False
>>> (1, 2) > [2, 1] # mais ils doivent être du même type
True
>>> {1:1} < {1:1, 0:0} # les dictionnaires, par nombre d'éléments
True
>>> "a" > 2 # si on mélange des types ça peut vide devenir bizarre
True
>>> 1j > 1 # PRESQUE tout est ordonnable
Traceback (most recent call last):
File "<ipython-input-11-ed3c013d3df8>", line 1, in <module>
1j > 1
TypeError: no ordering relation is defined for complex numbers
Cest ce quon appelle lordre naturel des éléments. Quand il ny a pas dordre naturel évident (et que ce nest pas une opération explicitement interdite comme avec les complexes),
Python va comparer lid (imaginez ladresse en mémoire)
.. code-block:: python
>>> class PersonnageDeLost(object):
... pass
...
>>> mort1 = PersonnageDeLost()
>>> mort2 = PersonnageDeLost()
>>> mort1 < mort2
True
>>> id(mort1) # son id est plus petit, donc il est inférieur
39611408
>>> id(mort2)
41720976
.. code-block:: python
class PersonnageDeCityHunter(object):
def __init__(self, nom, erectopouvoir):
self.nom = nom
self.erectopouvoir = erectopouvoir
def __lt__(self, other):
# on doit retourner un booléan qui confirme ou infirme
# l'opération "lt" ("lower than", c'est à dire "plus petit que")
return self.erectopouvoir < other.erectopouvoir
def __gt__(self, other):
# on doit retourner un booléan qui confirme ou infirme
# l'opération "gt" ("greater than", c'est à dire "plus grand que")
return self.erectopouvoir > other.erectopouvoir
# on peut faire la même chose pour les autres méthodes qui
# concernent les opérateurs <=, >=, == et !=
>>> PersonnageDeCityHunter('Ryo Saeba', 99999) > PersonnageDeCityHunter('Mamouth', 1)
True
>>> PersonnageDeCityHunter('Ryo Saeba', 99999) < PersonnageDeCityHunter('Mamouth', 1)
False
Ordonner une liste
-------------------
Avec `sort()` Les éléments sont triés dans leur ordre naturel automatiquement, du plus petit au plus grand:
.. code-block:: python
>>> l = ['b', 'a', 'c']
>>> l.sort()
>>> l
['a', 'b', 'c']
>>> l = [(2, 1), (1, 2), (7, 8), (2, 2), (2, 0), (2, 3)]
>>> l.sort()
>>> l # ordonne sur le premier élément, puis le second si il y a égalité
[(1, 2), (2, 0), (2, 1), (2, 2), (2, 3), (7, 8)]
>>> persos = [PersonnageDeCityHunter('Ryo Saeba', 99999), PersonnageDeCityHunter('Mamouth', 1), PersonnageDeCityHunter('Kaori', 0)]
>>> persos.sort()
>>> for perso in persos:
... print perso.nom
...
Kaori
Mamouth
Ryo Saeba
et inversement:
.. code-block:: python
>>> l = [1, 7, 3, 8]
>>> l.sort(reverse=True)
>>> l
[8, 7, 3, 1]
`sort()` et `sorted()` acceptent toutes les deux les mêmes arguments. Ce que vous apprenez pour lun vaut pour lautre. La seul différence est que sort() retourne None et modifie sur place, tandis que sorted() retourne une nouvelle liste. sorted() est un peu moins performant.
.. code-block:: python
>>> sorted((1, 7, 3, 8), reverse=True)
[8, 7, 3, 1]
Utilisations de tri personnalisés
----------------------------------
Parfois on a besoin de trier sur quelque chose de plus complexe quune lettre ou un chiffre. Par exemple, vous avez des scores dans un dictionnaires. Un dictionnaire nest pas ordonné. Si vous imprimez un classement, il faut en faire une liste de tuples :
::
>>> sorted(scores.items())
[('Cunegonde', 3), ('Gertrude', 4), ('Robert', 2), ('Roger', 1)]
Cest là quintervient le paramètre key. key est très particulier, cest un paramètre qui attend quon lui passe un callback, donc key attend quon lui passe une fonction.
::
>>> def get_score(nom_et_score):
... return nom_et_score[1] # retourne le 2nd element du tuple
...
>>> sorted(scores.items(), key=get_score) # on passe la fonction a key
[('Roger', 1), ('Robert', 2), ('Cunegonde', 3), ('Gertrude', 4)]
.. ifconfig:: exercice
classer des objets voiture en fonction de la puissance du moteur
autre exemple: ordonner des objets voitures selon leur coût dentretien dabord, et ensuite par coût dachat.
::
class Voiture(object):
def __init__(self, cout_entretien, cout_achat):
self.cout_entretien = cout_entretien
self.cout_achat = cout_achat
def __repr__(self):
return "<Voiture E-{} / A-{}>".format(self.cout_entretien, self.cout_achat)
>>> voitures = [Voiture(10000, 10000), Voiture(50000, 10000), Voiture(10000, 60000)]
>>> voitures
[<Voiture E-10000 / A-10000>, <Voiture E-50000 / A-10000>, <Voiture E-10000 / A-60000>]
>>> def get_entretien_achat(voiture):
... return (voiture.cout_entretien, voiture.cout_achat)
...
>>> sorted(voitures, key=get_entretien_achat)
[<Voiture E-10000 / A-10000>, <Voiture E-10000 / A-60000>, <Voiture E-50000 / A-10000>]
Définition d'un itérateur
~~~~~~~~~~~~~~~~~~~~~~~~~~
.. code-block:: python
>>> l = range(10)
>>> for i in l:
... print l[i]
...
0
...
8
9
>>> l.__iter__()
<listiterator object at 0x7f78bb450410>
Les listes chaînées
~~~~~~~~~~~~~~~~~~~~
.. code-block:: ocaml
typedef struct list{
int elt ;
struct list* suivant ;
} ;
**Outils de manipulation** :
- `next()`
- `pointer()`
- `insert(l, a)`
- `remove(a, n)`
Les piles
----------
**manipulation**
- `insert()` : insérer un élément à la fin de la pile
- `dequeue()` : (remove and return) : retirer un élément du haut de la pile
- FIFO : "first in first out"
Traduction d'une structure de données dans une autre
-----------------------------------------------------
.. code-block:: python
>>> listOfStrings = ['One', 'Two', 'Three']
>>> strOfStrings = ' '.join(listOfStrings)
>>> print(strOfStrings)
One Two Three
>>>
>>> # List Of Integers to a String
... listOfNumbers = [1, 2, 3]
>>> strOfNumbers = ''.join(str(n) for n in listOfNumbers)
>>> print(strOfNumbers)
123
>>>
.. code-block:: python
>>> l = [('host1', '10.1.2.3', '6E:FF:56:A2:AF:18'), ('host3', '10.1.2.5', '6E:FF:56:A2:AF:19')]
>>> result = []
>>> for hostname, ip, macaddress in l:
... result.append(dict(hostname=hostname, ip=ip, macaddress=macaddress))
...
>>> result
[{'hostname': 'host1', 'ip': '10.1.2.3', 'macaddress': '6E:FF:56:A2:AF:18'},
{'hostname': 'host3', 'ip': '10.1.2.5', 'macaddress': '6E:FF:56:A2:AF:19'}]
>>>
.. ifconfig:: exercice
**Exercice** : Proposer un algorithme de traduction de cette structure de donnée
.. code-block:: python
[
{
'address': '192.168.0.0',
'mask': '255.255.255.0',
'dynamicRanges': [
{ 'low': '192.168.0.5', 'high': '192.168.0.12', 'only_unknown': True },
{ 'low': '192.168.0.50', 'high': '192.168.0.55', 'only_unknown': False },
],
},
{
'address': '192.168.0.0',
'mask': '255.255.255.0',
'dynamicRanges': [
{ 'low': '192.168.0.12', 'high': '192.168.0.45', 'only_unknown': True },
{ 'low': '192.168.0.8', 'high': '192.168.0.35', 'only_unknown': False },
],
},
{
'address': '192.168.0.1',
'mask': '255.255.255.0',
'dynamicRanges': [
{ 'low': '192.168.0.5', 'high': '192.168.0.12', 'only_unknown': True },
{ 'low': '192.168.0.50', 'high': '192.168.0.55', 'only_unknown': False },
],
},
]
En cette structure de données :
.. code-block:: python
[
{
address: '192.168.0.0',
mask: '255.255.255.0',
dynamicRanges: [
{ low: '192.168.0.5', high: '192.168.0.12', only_unknown: true },
{ low: '192.168.0.50', high: '192.168.0.55', only_unknown: false },j
], [
{ low: '192.168.0.12', high: '192.168.0.45', only_unknown: true },
{ low: '192.168.0.8', high: '192.168.0.35', only_unknown: false },
],
},
{
'address': '192.168.0.1',
'mask': '255.255.255.0',
'dynamicRanges': [
{ 'low': '192.168.0.5', 'high': '192.168.0.12', 'only_unknown': True },
{ 'low': '192.168.0.50', 'high': '192.168.0.55', 'only_unknown': False },
],
},
]
.. ifconfig:: correction
**Correction** :
.. code-block:: python
>>> from pprint import pprint
pprint(l)
[{'address': '192.168.0.0',
'dynamicRanges': [{'high': '192.168.0.12',
'low': '192.168.0.5',
'only_unknown': True},
{'high': '192.168.0.55',
'low': '192.168.0.50',
'only_unknown': False}],
'mask': '255.255.255.0'},
{'address': '192.168.0.0',
'dynamicRanges': [{'high': '192.168.0.45',
'low': '192.168.0.12',
'only_unknown': True},
{'high': '192.168.0.35',
'low': '192.168.0.8',
'only_unknown': False}],
'mask': '255.255.255.0'}]
>>> newdata = []
>>> for i in l:
... if i['address'] not in [j['address'] for j in newdata]:
... newdata.append(i)
... else:
... for k in newdata:
... if k['address'] == i['address']:
... k['dynamicRanges'].extend(i['dynamicRanges'])
...
>>> pprint(newdata)
[{'address': '192.168.0.0',
'dynamicRanges': [{'high': '192.168.0.12',
'low': '192.168.0.5',
'only_unknown': True},
{'high': '192.168.0.55',
'low': '192.168.0.50',
'only_unknown': False},
{'high': '192.168.0.45',
'low': '192.168.0.12',
'only_unknown': True},
{'high': '192.168.0.35',
'low': '192.168.0.8',
'only_unknown': False}],
'mask': '255.255.255.0'},
{'address': '192.168.10.0',
'dynamicRanges': [{'high': '192.168.0.12',
'low': '192.168.0.5',
'only_unknown': True},
{'high': '192.168.0.55',
'low': '192.168.0.50',
'only_unknown': False}],
'mask': '255.255.255.0'}]
>>>
.. ifconfig:: exercice
**Exercice** : Proposer un algorithme qui permette de récupérer la liste
des adresses IP disponibles
.. code-block:: python
{
"local": {
"leases": [
{
"mac": "02:00:c0:a8:00:66",
"name": "pcxubuntu",
"address": "192.168.0.200"
},
{
"mac": "02:00:c0:a8:00:67",
"name": "pcxubuntu",
"address": "192.168.0.201"
},
{
"mac": "02:00:c0:a8:00:68",
"name": "pcxubuntu",
"address": "192.168.0.202"
}
]
}
}
.. ifconfig:: correction
**Correction** :
.. code-block:: python
>>> l = {
... "local": {
... "leases": [
... {
... "mac": "02:00:c0:a8:00:66",
... "name": "pcxubuntu",
... "address": "192.168.0.200"
... },
... {
... "mac": "02:00:c0:a8:00:67",
... "name": "pcxubuntu",
... "address": "192.168.0.201"
... },
... {
... "mac": "02:00:c0:a8:00:68",
... "name": "pcxubuntu",
... "address": "192.168.0.202"
... }
... ]
... }
... }
>>> leases = l["local"]["leases"]
>>> from pprint import pprint
>>> pprint(leases)
[{'address': '192.168.0.200', 'mac': '02:00:c0:a8:00:66', 'name': 'pcxubuntu'},
{'address': '192.168.0.201', 'mac': '02:00:c0:a8:00:67', 'name': 'pcxubuntu'},
{'address': '192.168.0.202', 'mac': '02:00:c0:a8:00:68', 'name': 'pcxubuntu'}]
>>> addresses = [lease['address'] for lease in leases]
>>> addresses
['192.168.0.200', '192.168.0.201', '192.168.0.202']
>>>
Structures de données complexes
-------------------------------
Les types produits nommés
~~~~~~~~~~~~~~~~~~~~~~~~~~
On les appelle enregistrements, dictionnaires ou tables de hachage.
::
algorithme monAlgorithme
// déclaration d'un enregistrement
enregistrement Personne
chaine nom;
chaine prenom;
entier age;
réel taille;
finenregistrement
...
Personne[50] t;
début
// Initialisation
t[0].nom <- "Duchmol";
t[0].prenom <- "Robert";
t[0].age <- 24;
t[0].taille <- 1.80;
...
fin
.. code-block:: ocaml
# type adresse = { rue : string ; ville : string ; cp : int};;
# type fiche = {
nom : string ;
prenom : string ;
adresse : adresse ;
date naissance : int * int * int ;
tel fixe : string ;
portable : string
};;
# let v1 = { a = 1 ; b = false ; c = 'r'};;
les types sommes
~~~~~~~~~~~~~~~~
appelés aussi type construits, ou types algébriques
.. code-block:: ocaml
# type couleur = Pique | Coeur | Carreau | Trefle;;
# let v = (Pique , Coeur);;
val v : couleur * couleur = (Pique , Coeur)
# let a = Trefle ;;
val a : couleur = Trefle
.. code-block:: ocaml
type nombre =
Ent of int | Reel of float | Cplx of float × float
Ent, Reel, Cplx sont les constructeurs du type.
Les arbres
----------
Structure de données construite sur un type somme récursif.
arbre binaire :
.. code-block:: ocaml
type arbre = Vide | Noeud of int * arbre * arbre
let a =
Noeud(10,
Noeud(2,Noeud(8,Vide,Vide),Vide),
Noeud(5,Noeud(11,Vide,Vide),Noeud(3,Vide,Vide)));;
arbre binaire polymorphe :
.. code-block:: ocaml
type a arbre = Vide | Noeud of a * a arbre * a arbre;;
let b = Noeud(10,Noeud(5,Vide,Vide),Vide);;
let c = Noeud(f,Vide,Noeud(a,Vide,Noeud(g,Vide,Vide)));;
- parcours dun arbre binaire
- itérateurs sur un arbre binaire
- taille d'un arbre
arbre n-aire::
type a arbre = Vide | Noeud of a * a arbre list;;
- transformation d'un arbre en un autre
- arbre ordonné (arbre de recherche)
- équilibrage des arbres de recherche
Un arbre binaire est ordonné (ou de recherche) par rapport à une relation
dordre quelconque si :
- cest larbre vide (Vide)
- cest un arbre non-vide Noeud(x,g,d) et
1. les éléments du sous-arbre gauche g sont inférieurs à la racine x
2. la racine x est inférieure aux éléments du sous-arbre droit d
3. les sous-arbres g et d sont eux-mêmes ordonnés
::
let a1 =
Noeud(5, Noeud(2, Vide, Vide),
Noeud(20, Noeud(10, Noeud(6, Vide, Vide),
Noeud(14,Vide, Vide)),
Noeud(21,Vide,Vide)));;
.. image:: _static/AbreOrdonne.png
Recherche d'un élément dans un arbre ordonné
---------------------------------------------
La structure ordonnée des arbres binaires de recherche permet deffectuer
la recherche dun élément avec une compléxité en moyenne de O(log n)
::
let rec recherche elt abr =
match abr with
| Vide -> false
| Noeud (x,_,_) when x = elt -> true
| Noeud (x,g,_) when elt < x -> recherche elt g
| Noeud (_,_,d) -> recherche elt d
;;
Autres structures de données complexes
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
- graphes
- dates
- le parcours de graphes
- les calculs de dates

View File

@ -0,0 +1,107 @@
.. include:: ../../tronCommun/fonctions.txt
Définitions par filtrage
--------------------------
::
type formule = Vrai | Faux | Conjonction of formule * formule
le fitrage permet un examen par cas sur les valeurs construites::
let rec evalue = function
| Vrai -> true
| Faux -> false
| Conjonction (Faux, _) | Conjonction (_, Faux) -> false
| Conjonction (f1, f2) -> evalue f1 && evalue f2;;
Lorsqu'un argument est passé à un ensemble de clauses :
- la première clause qui filtre l'argument est exécutée, les autres sont
ignorées.
- si aucune clause ne filtre l'argument, une exception est levée.
exemple de définition par cas
::
let points v =
match v with
Pique -> 1
| Trefle -> 2
| Coeur -> 3
| Carreau -> 4;;
# points a ;;
- : int = 2
Définitions récursives
-----------------------
En ocaml, `let rec` définit une variable récursive, ie qui utilise la (les) valeur(s) en cours de définition.
Exemples
--------
::
let rec f (x) = if x <= 1 then 1 else f(x-1) + f(x-2) ;;
let rec g (x) = if x = 0 then 1 else x * g (x-1) ;;
let rec h (x, y) = if x = 0 then 1 else h (x-1, h(x,y)) ;;
let rec m (x) = if x > 100 then x - 10 else m (m (x+11)) ;;
On peut imprimer leur valeurs pour qques valeurs::
begin
for i = 1 to 15 do
printf "%d " (f(i)) done;
printf "\n"
end ;;
f, g sont les fonctions de Fibonacci et factorielles. C'est la même notation que pour les suites récurrentes. Que valent h et m ?
La récursivité est très puissante. Invention de Kleene (1935). Théorie des fonctions récursives, comme moyen général de calcul.
On peut montrer qu'il existe toujours des fonctions récursives partielles (qui ne terminent pas pour tte valeur de leurs arguments), si on veut un modèle général. La sous théorie des fonctions récursives primitives correspond aux programmes sans boucles, sans appels récursifs, et l'instruction for. Ces programmes terminent toujours. (cf Introduction to Metamathematics, S. Kleene; Recursive Functions Theory and Logic, A. Yasuhara).
Church et les autres logiciens des années 30 ont montré que systèmes de Post, les fonctions récursives de Kleene, les machines de Turing, sont tous équivalentes. Il a émis la thèse suivante: tous les modèles de la calculabilité sont équivalents.
Fonctions récursives
---------------------
::
let rec fact n = if n > 1 then n * fact (n -1) else 1;;
dans le prompt::
utop # let rec fact n = if n > 1 then n * fact (n -1) else 1;;
utop # fact 5;;
- : int = 120
et mutuellement récursives::
let rec ping n = if n > 0 then pong (n - 1) else "ping"
and pong n = if n > 0 then ping (n - 1) else "pong";;
# ping 8 ;;
- : bytes = "ping"
# ping 15 ;;
- : bytes = "pong"
types récursif
---------------
::
type 'a liste =
Vide
| Cellule of 'a * 'a liste;;

View File

@ -0,0 +1 @@
.. include:: ../../tronCommun/fondement.txt

View File

@ -0,0 +1,21 @@
Algorithmique Approfondie
=========================
.. toctree::
:maxdepth: 2
presentation
fondement
langage
algo
programme
fonctions
control
donnees
apercu
complexite
modularite
modules
tp
annexes/index

View File

@ -0,0 +1 @@
.. include:: ../../tronCommun/langage.txt

View File

@ -0,0 +1,200 @@
La programmation structurée
=============================
Un langage de programmation doit permettre la programmation structurée.
.. important:: La structuration et l'organisation modulaire sert à maintenir de grands programmes,
Elles sont une nécessité
Structuration d'un programme
-----------------------------
La réalisation d'applications importantes oblige le programmeur ou l'équipe de
développement à se poser des questions d'organisation et de structuration.
Aujourd'hui, on dispose de deux grands modèles d'organisation dont les avantages et les
particularités sont distincts.
L'écriture des vrais programmes consiste à les structurer pour les présenter
comme un assemblage de briques qui s'emboîtent naturellement.
Ce problème se révèle fondamental dès que la taille des programmes devient conséquente.
Si on ne prend pas garde au bon découpage des programmes en modules indépendants,
on se retrouve rapidement débordé par un grand nombre de variables,
et il devient quasiment impossible de réaliser un programme correct.
La programmation raisonnée
---------------------------
Un **programme** est le codage d'un algorithme dans un langage de programmation.
La programmation consiste à modéliser un problème du monde réel sous une forme
symbolique (pour faire résoudre ce problème par un ordinateur).
Certains problèmes sont **indécidables** ou **ouverts**.
On utilise un langage de programmation pour décrire la **solution** du programme.
La sémantique du programme est le sens de chacune des constructions du langage.
**Comment passer de l'énoncé d'un problème à un programme de bonne qualité ?**
spécifier
décrire de manière complète et rigoureuse le problème à résoudre
modéliser
proposer une représentation du réel qui soit accessible au calcul
algorithmique
transcrire
La transcription du modèle algorithmique se fait dans un langage
de programmation cible adapté au problème
valider
La validation du programme est une étape qui permet de s'assurer plus ou
moins fortement que le programme produit les résultats attendus.
La validation va de la série de tests unitaires (validation faible)
à la preuve de programme (validation mathématique forte).
Conception descendante
-----------------------
Une vision **centripète** : du général au particulier.
Il s'agit d'une méthode de résolution d'un problème. On le découpe en tâches
de plus en plus fines, de plus en plus détaillées, qui aboutiront au programme final.
On met des *trous* dans les algorithmes de plus haut niveau,
c'est-à-dire des phrases en langage naturel.
.. ifconfig:: exercice
**Exercice** : **Calculer la date du lendemain**
.. ifconfig:: correction
- l'algorithme de plus bas niveau
::
lendemain jour =
si jour [est le dernier jour du mois] alors
resultat = [calculer le 1er janvier de l'année suivante]
sinon
resultat = lendemain_dansl'année jour
- les algorithmes de plus bas niveau
::
lendemain_dans_l'année jour =
si jour [est le dernier jour du mois] alors
resultat = [calculer le premier jour du mois suivant]
sinon
resultat = jour suivant jour
::
jour_suivant jour =
jour + 1
et ainsi de suite jusqu'à ce que toutes les phrases soient calculables.
Algorithme vague
--------------------
L'algorithme vague, c'est quand on pense l'algorithme en se plaçant du côté de
l'implémentation en premier. On a le nez dans le guidon, la vue d'ensemble est
difficile.
Voici, tiré du monde réel, un exemple d'algorithme vague
("ce que doit faire une fonction"), placé dans un bout de code
(souvent la **docstring** d'une fonction).
.. code-block:: python
def upsert_route(*args, **kwargs):
"""
Create or modify an existant DHCP route
param tuple (id or null, machine name, IP, MAC Adress)
return True or False with error message
"""
# si id présent alors modification sinon ajout
# récupère la liste des réservations en cours
# y cherche la variable sur la base de l'ID
# modifie les valeurs
# applique la nouvelle conf DHCP
return True
Voici un autre bout de code avec l'algorithme en commentaire,
et l'implémentation effective de l'algorithme
.. code-block:: python
def del_route(*args, **kwargs):
"""
Delete an existant DHCP route
param tuple (id, machine name, IP, MAC Adress)
return True or False with error message
"""
# récupère la liste des réservations en cours
# y cherche la variable sur l'id donné en paramètre
# supprime l'entrée avec vérification que les données fournies
# sont bien dans l'enregistrement à supprimer
# applique la nouvelle conf DHCP
route_to_del = (1, "host2","10.1.2.4","6E:FF:56:A2:AF:17")
routes = get_routes()
if route_to_del in routes:
c = creole_loader(load_extra=True, rw=True)
c_id = c.dhcp.dhcp.id_dhcp.id_dhcp.index(route_to_del[0])
if c.dhcp.dhcp.id_dhcp.macaddress[c_id]==route_to_del[2]
and c.dhcp.dhcp.id_dhcp.ip[c_id]==route_to_del[1]:
c.dhcp.dhcp.id_dhcp.id_dhcp.pop(c_id)
config_save_values(c, MODNAME)
return True
return False
Les deux grands paradigmes
---------------------------
La modularité
~~~~~~~~~~~~~~
Les données et les traitements sont regroupés au sein d'une même entité à deux
facettes : d'un côté le code proprement dit, de l'autre son interface. La
communication entre modules s'effectue via leur interface. La description d'un
type peut être masquée en n'apparaissant pas dans l'interface du module. Ces
types de données abstraits facilitent les modifications d'implantation à
l'intérieur d'un module sans affecter les autres modules qui s'en servent. De
plus, les modules peuvent être paramétrés par d'autres modules augmentant
ainsi leur réutilisabilité.
Le paradigme objet
~~~~~~~~~~~~~~~~~~
Les descriptions des traitements et des données sont regroupées dans des
entités appelées **classes**; un objet est une instance (valeur) d'une classe.
La communication entre objets est réalisée par envoi de message, l'objet
receveur détermine à l'exécution (liaison retardée) le traitement
correspondant au message. En cela, la programmation objet est dirigée par
les données. La structuration d'un programme provient des relations entre
classes, en particulier l'héritage permet de définir une classe par extension
d'une autre.
En programmation objet, un **programme** est une collection dobjets qui communiquent
entre eux par **message**, le **résultat** est un message envoyé à un objet particulier
Comparaison entre les deux paradigmes
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Il y a dualité entre ces deux modèles.
- On ne peut pas augmenter les composants d'un type dans un module (pas
d'extensibilité des données), mais on peut ajouter de nouveaux traitements
(extensibilité des traitements) sur ces données.
- En objet, on peut ajouter des sous-classes à une classe (extensibilité des
données) pour traiter des nouveaux cas, mais on ne peut pas ajouter de nouveaux
traitements visibles de la classe ancêtre (pas d'extensibilité des traitements).
**La combinaison des deux paradigmes offre de nouvelles extensibilités pour les
traitements et les données.**

View File

@ -0,0 +1,516 @@
La programmation modulaire
===========================
Il s'agit de décomposer un grand programme en
morceaux (**modules**) connectés entre eux par des **interfaces** bien
définies.
Ces modules doivent être aussi indépendants que possible.
.. glossary::
module
ensemble de ressources liées sémantiquement
interface
mode demploi du module, avec en plus un principe de masquage
des informations (partie publique, partie secrète)
signature
suite de déclarations, types, exceptions, valeurs, modules, etc.
implantation
suite de définitions, qui doit comporter tout ce qui est requis par la
signature
Type abstrait et langage de modules : la programmation modulaire
permet d'aller très loin dans la programmation structurée.
Définir des fonctions dans un fichier séparé
--------------------------------------------
Les fonctions peuvent être définies dans un fichier et le programme dans un
autre fichier séparé. Dans ce cas, pour pouvoir être exécuté directement avec
la commande python `nomfichierprogramme.py`, le fichier du programme doit
importer dabord les fonctions du fichier dans lequel les fonctions sont
définies.
1. Fichier de fonctions
~~~~~~~~~~~~~~~~~~~~~~~~
.. code-block:: python
# Fichier foncmaxliste.py
# Recherche le premier élément maximal dans une liste ou
#dans une chaine de caractères
def max_list(L) :
k = len(L)
max, x = L[0], 0
i = 1
while i < k :
if max < L[i]:
max = L[i]
x = i
i = i + 1
return max, x
2. Fichier de programme
~~~~~~~~~~~~~~~~~~~~~~~~
Pour utilser les fonctions définies dans dautres fichiers, le fichier de
programme doit commencer par les instructions qui importent ces fichiers de
fonctions ou directement les fonctions de ces fichiers. Dans la syntaxe
ci-dessous, on importe une ou toutes les fonctions du fichier `foncmaxlist.py`.
.. code-block:: python
# Fichier progmaxlist.py
from foncmaxliste import max_list
# ou plus simple:
# from foncmaxliste import *
print max_list([4,5,6,9,12,5,10,3,18,5,6,7])
couple = max_list([4,5,6,9,12,5,10,3,18,5,6,7])
print Max de L est , couple[0]
print et se trouve à la position , couple[1]
print max_list(totovaaumarche)
couple = max_list(totovaaumarche)
print Max de L est , couple[0]
print et se trouve à la position , couple[1]
Au lieu dimporter les fonctions, on peut importer le fichier qui définit les
fonctions avec la syntaxe qui suit. Dans ce cas, le fichier de programme sera
changé comme suit :
.. code-block:: python
# Fichier prog2maxlist
import foncmaxliste
print foncmaxliste.max_list([4,5,6,9,12,5,10,3,18,5,6,7])
# la syntaxe indiquant le chemin dacces a la fonction max_list utiliser .
couple = foncmaxliste.max_list([4,5,6,9,12,5,10,3,18,5,6,7])
print Max de L est , couple[0]
print et se trouve à la position , couple[1]
print foncmaxliste.max_list(totovaaumarche)
couple = foncmaxliste.max_list(totovaaumarche)
print Max de L est , couple[0]
print et se trouve à la position , couple[1]
Lexécution directe du premier fichier de programme::
python prog max list.py
Lexécution directe du seconde fichier de programme::
python prog2 max list.py
Définition de l'implémentation d'un module
-------------------------------------------
Tout fichier qui contient au moins une définition dune fonction ou dune
variable est appelé un module (une bibliothèque). Le nom du module est le nom
du fichier enlevé le suffixe `.py`. Ainsi, un fichier de programme qui contient
au moins une définition dune fonction ou un fichier qui ne contient que des
définition de fonctions sont des modules. On peut importer un module ou des
fonctions ou variables dun module dans un programme, comme nous avons vu dans
les exemples ci-dessus.
.. important:: on peut importer un module, ou bien lancer un module en tant que
programme executable
.. code-block:: python
if __name__ == '__main__':
main()
Pour faciliter la programmation, Python définit un certain nombre de **modules internes**,
appelés les builtins (la librairie standard).
Par exemple :
Lors de louverture dune session interactive, on est dans un module interne nommé
main . Toutes les variables définies par affectation au niveau de ce module sont valides
globalement dans la session.
Dautres modules internes sont string, math, random
Dans une session de travail sous linterpréteur Python, la première importation dun mo-
dule qui, à part des fonctions quelle définit, contient des instruction de programme fait
exécuter ces instructions. Dans la même session, les importations suivantes ne font pas
exécuter ces instructions. Pour les exécuter, on utilise la fonction reload(nomdumodule)
(sans sufffixe .py).
Exemples d'interface
--------------------
::
type: son type
arguments
arg1 : description de l'argument 1
arg2 : description de l'argument 2
préconditions:
arg1 > 10
postconditions:
result < 19
raises: TypeError, AssertionError, SystemError...
test: tests nominaux pour chaque cas spécifié
- L'interface racine carrée
::
racine:
type: float -> float
arguments x: float, flottant dont on veut calculer la racine
pré: x >= 0
test: racine 25.0 -> 5.0 ; racine (-25) -> raises TypeError
- L'interface `lendemain`
Il faut définir auparavant un type spécifique appelé `date`
::
lendemain: le lendemain est la date qui désigne
le jour suivant de la date passée en argument
type: date -> date
arguments :
d: date
description: la date dont on veut calculer le lendemain
Le langages des modules
-------------------------
.. code-block:: ocaml
module type PILE = (* signature (interface) du module *)
sig
type a t
val create : unit -> a t
val push : a -> a t -> unit
val pop : a t -> a
end
(* implémentation du module *)
module Pile : PILE = (* le module est restreint
par la signature PILE *)
struct
type a t = a list ref
let create () = ref []
let push x p = p := x::!p
let pop p = match !p with [...]
let rec print p = match p with [...]
end
- `struct .. end` introduit une collection de définitions, valeurs, types ou modules.
C'est une **structure**.
- `module Nom = struct .. end` permet de donner un nom à cette structure et
c'est ça un module. C'est une structure nommée.
- `sig ... end` introduit une signature de module : une interface pour un module.
On restreint souvent une structure par une signature pour "cacher" certaines
définitions. Une signature de module fournit une **interface** entre l'extérieur
et l'intérieur d'un module.
En dehors du module, on accède à ses composants grâce à la notation pointée
.. code-block:: ocaml
let p = Pile.create()
Pile.push 45 p
**Signature inférée** : Lorsque la déclaration d'interface n'existe pas.
Contrainte de type par signature
------------------------------------
.. code-block:: ocaml
module M =
struct
type t = int * int * int
let make d m y = d,m,y
end
module M :
sig type t = int * int * int
val make : a -> b -> c -> a * b * c end
.. ifconfig:: exercice
ici la signature inférée est du type le plus général.
Cela peut poser des difficultés. Lesquelles ?
.. ifconfig:: correction
une incohérence entre type attendu et type obtenu
.. code-block:: ocaml
# let d = M.make 52 24 137 ;;
val d : int * int * int = (52, 24, 137)
.. code-block:: ocaml
module M =
struct
type t = int * int * int ;;
let make d m y = d, m, y ;;
end ;;
let d = M.make 8 5 8 ;;
module type S =
sig
type t ;;
val make : int -> int -> int -> t ;;
end ;;
module MS = (M:S) ;;
MS.make 5 1 2 ;;
autre exemple
.. code-block:: ocaml
module type DATE =
sig
type t = int * int * int
val mmax : int -> int -> int
val make : int -> int -> int -> t
val get_day : t -> int
val get_month : t -> int
val get_year : t -> int
end
on est alors obligé de contrôler la vraissemblance des valeurs dans chaque fonction du module, sinon le contrôle n'est pas maîtrisé...
.. code-block:: ocaml
M.get_month (23,45,67);;
- : int = 45
Le problème vient du fait que limplantation du type Date.t est **publique**.
Le Type abstrait de données permet de masquer limplantation du type.
.. code-block:: ocaml
module type DATE = sig
type t
val mmax : int -> int -> int
val make : int -> int -> int -> t
val get_day : t -> int
val get_month : t -> int
val get_year : t -> int
end
usage::
# module Date = (M:DATE) ;;
module Date : DATE
Le contrôle est maîtrisé::
Date.get_month (23,45,67);;
This expression has type int * int * int but is here used with type Date.t
Si (M:S) alors la structure M est une instance de la signa-
ture S
Type et signature
------------------
::
# module type A = sig
val a: int -> int
end ;;
module type A = sig val a : int -> int end
# module B = struct
let a x = x + 1 ;;
end;;
module B : sig val a : int -> int end
# module C = (B:A) ;;
module C : A
# C.a 2 ;;
- : int = 3
#
Module auquel on impose une signature
-----------------------------------------
::
module type DATE = sig
type t
val make: int -> t
val get_year: t -> int
val get_month: t -> int
end ;;
module MR = struct
type t = int * int
let make x y = (x, y)
let get_month (x, y) = x
let get_year (x, y) = y
end ;;
module date = (MR:DATE) ;;
Structure et signature
-----------------------
Une structure peut avoir plusieurs signatures
.. code-block:: ocaml
# module Cpt =
struct
let x = ref 0
let reset () = x := 0
let next () = incr x; !x
end
.. ifconfig:: exercice
Créer deux modules nayant pas les mêmes droits sans toucher à
limplantation.
.. ifconfig:: correction
une vue administrateur
.. code-block:: ocaml
module type ADM =
sig
val reset : unit -> unit
val next : unit -> int
end
::
module Adm = (Cpt:ADM)
# (* le compteur lui-même est invisible *)
# Adm.x;;
Unbound value Adm.x
une vue utilisateur
.. code-block:: ocaml
module type USR =
sig
val next : unit -> int
end
::
# module Usr = (Cpt:USR)
# Usr.next();;
- : int = 1
# Usr.reset();;
Unbound value Usr.reset
Contrainte partage du code (et du compteur) : impossible de construire deux composants administrateurs et utilisateurs autonomes.
- une unité qui contient les trois modules
- un composant qui publie les deux modules mais pas le module commun (un package)
L'héritage par inclusion
------------------------
.. code-block:: ocaml
# module Cpt2 = struct
include Cpt
let get() = !x
let next() = x := 2 * !x; !x
end ;;
module Cpt2 :
sig
val x : int ref
val reset : unit -> unit
val get : unit -> int
val next : unit -> int
end
Les foncteurs
--------------
Si un langage possède un langage de modules, on peut aller plus loin : on peut
considérer un module comme étant une expression de base du langage.
- La signature d'un module peut être considérée comme le type du module
- La structure du module peut être considéré comme sa valeur
Quel est l'intérêt ? On peut alors définir des **foncteurs**.
foncteur
"fonction" d'une structure vers une autre structure.
On peut ainsi paramétrer un module par un autre module.
.. code-block:: ocaml
module Nom (M1 :S1 ) (M2 :S2 ) (M3 :S3 ) ... =
struct
...
end
On applique un foncteur à des paramètres modules, pour
obtenir un nouveau module :
.. code-block:: ocaml
module M = F (Titi) (Toto)
exemple, le module Set::
module OrderedInt =
struct type t=int let compare = compare end ;;
module OrderedInt : sig type t = int val compare : a -> a -> int end
# module IntSet = Set.Make(OrderedInt)
module IntSet :
sig
type elt = OrderedInt.t
type t = Set.Make(OrderedInt).t
val empty : t
Ou, plus court::
module IntSet = Set.Make(struct type t=int let compare = compare end)
Le parallèle peut se faire entre les classes et les modules.
- module : Encapsulation données/traitements
- classes : différenciation données/traitements et possibilité de création de plusieurs instances
classes et types, inférences de types de classes

View File

@ -0,0 +1,26 @@
Avant propos
============
.. include:: ../../tronCommun/presentation.txt
.. image:: _static/pascal.jpg
Objectifs de ce cours
~~~~~~~~~~~~~~~~~~~~~
Il s'agit de :
- choisir une représentation appropriée des données
- décomposer en sous-problèmes et affinements successifs (programmation dynamique)
- approfondir les connaissances des structures de données et des algorithmes
- les appliquer à la résolution de problèmes
- rappels sur les types abstraits de données
- rappels sur la complexité des algorithmes
- abstractions de données et de contrôle
- utilisation de librairies de bases implémentant quelques algorithmes (tri, itérateur...)
- choix de collections et structures de données adaptée au design d'un programme
- structures de données complexes arbres, tables, graphes

View File

@ -0,0 +1,2 @@
.. include:: ../../tronCommun/programme.txt

View File

@ -0,0 +1,136 @@
Travaux Pratiques
=================
.. ifconfig:: exercice
**travaux pratiques :**
Ecrire un algorithme qui renvoie le résultat dune mini-calculatrice. Cette
méthode aura
comme paramètre deux nombres et une chaîne de caractère qui vaudra « + », « -
», « * »,
« / ».
.. ifconfig:: exercice
**travaux pratiques :**
Ecrire un algorithme qui renvoie si deux mots (chaîne de caractères) passés en
paramètre
sont des anagrammes lun de lautre. (Lettres identiques mais dans un ordre
différent)
.. ifconfig:: exercice
**travaux pratiques :**
ascii art (ligne d'étoiles)
Concevoir un algorithme qui, pour un caractère imprimable et un nombre n
donnés, imprime une barre
horizontale de n de ces caractères.
``****************``
2. Modifier lalgorithme pour limpression dune barre double.
::
****************
****************
3. Modifier lalgorithme pour limpression dune barre dépaisseur quelconque
donnée.
4. (optionnel) Transformer les algorithmes ci-dessus en fonctions.
5. Écrire un programme Java implémentant la dernière version de lalgorithme
(épaisseur quelconque).
3.3
Triangle de nombres
Concevoir un algorithme qui imprime pour n donné::
1
1 2
1 2 3
1 2 3 4
1 2 3 4 5
...........
.............
...............
1 2 3 4 5 6 ... n
.. ifconfig:: exercice
**travaux pratiques :**
code de césar : faire un programme pour chiffrer et déchiffrer par décalage
exemples : Effectue une rotation de x caractères vers la droite::
>>> print(chiffre('bonjour', 3))
erqmrxu
>>> print(chiffre('Bonjour les amis!', 3))
Erqmrxu ohv dplv!
>>> print(chiffre('Erqmrxu ohv dplv!', 23))
Bonjour les amis!
.. ifconfig:: exercice
**travaux pratiques :**
::
écrire “Entrer un numéro de mois”
mois <- lire
selon que mois est
cas 1 : écrire “janvier (31 jours)”
cas 2 : écrire “février (28 ou 29 jours)”
cas 3 : écrire “mars (31 jours)”
cas 4 : écrire “avril (30 jours)”
cas 5 : écrire “mai (31 jours)”
cas 6 : écrire “juin (30 jours)”
cas 7 : écrire “juillet (31 jours)”
cas 8 : écrire “août (31 jours)”
cas 9 : écrire “septembre (30 jours)”
cas 10 : écrire “octobre (31 jours)”
cas 11 : écrire “novembre (30 jours)”
cas 12 : écrire “décembre (31 jours)”
défaut : écrire “numéro invalide”
fselon
.. ifconfig:: exercice
**travaux pratiques :**
tp liste :
recherche par dichotomie d'un élément dans une triée
.. ifconfig:: exercice
**travaux pratiques :**
tp ensembles :
Écrivez une fonction Python `Delta(A,B)` qui renvoie la différence symétrique de deux ensembles A et B::
A delta B := A union B \ A intersection B.
Un ensemble est représenté sous forme de liste et on supposera que chaque valeur contenue dans une liste n'apparaît qu'une fois.
Par exemple si A=[2,1,5,6,9] et B=[7,4,5,2,8], la liste renvoyée est la liste [1,6,9,7,4,8].
.. ifconfig:: exercice
**travaux pratiques :**
tp dictionnaires :
On rappelle qu'un dictionnaire en python est une structure énumérée (comme les listes, tuples, chaînes) dont les clés sont quelconques (dans les autres cas les clefs sont entières). Comme pour une liste, on accède à la valeur associée à une clef c par H[c]. On crée un dictionnaire vide dico avec dico = {}. On crée une nouvelle entrée en écrivant par exemple dico["pseudo"] = "Keyser Söze". On obtient la liste des clés avec list(dico.keys()) et la liste des valeurs avec list(dico.values()). Pour récupérer une valeur à partir de sa clef, il suffit d'écrire dico[clef].
Écrivez une fonction Python Distribution(chaine) qui renvoie un dictionnaire dont les clefs sont les caractères de la chaîne passée en paramètre et la valeur associée à une clef c est le nombre d'occurences de ce caractère dans la chaîne. Par exemple, si chaine="abaccab", alors le dictionnaire renvoyé est {"a":3,"b":2,"c":2}. Écrivez une fonction LettreLaPlusFrequente(chaine) qui renvoie la lettre la plus fréquente dans la chaine.

View File

@ -0,0 +1,47 @@
RST = python tools/rst.py
TEXDOCUMENTS = $(basename $(wildcard *.tex))
RSTDOCUMENTS = $(basename $(wildcard *.txt))
SOURCES = $(addsuffix .tex,$(TEXDOCUMENTS))
DVI = $(addsuffix .dvi,$(TEXDOCUMENTS))
POSTSCRIPT = $(addsuffix .ps,$(TEXDOCUMENTS))
POSTSCRIPT_GZ = $(addsuffix .ps.gz,$(TEXDOCUMENTS))
PDF = $(addsuffix .pdf,$(TEXDOCUMENTS))
RSTSOURCES = $(addsuffix .txt,$(RSTDOCUMENTS))
HTML = $(TEXDOCUMENTS) $(addsuffix .html,$(RSTDOCUMENTS))
all: dvi ps ps.gz html
dvi: $(DVI)
ps: $(POSTSCRIPT)
ps.gz: $(POSTSCRIPT_GZ)
pdf: $(PDF)
html: $(HTML)
${DVI}: %.dvi: %.tex
latex $<
latex $<
${POSTSCRIPT}: %.ps: %.dvi
dvips -o $@ $<
${POSTSCRIPT_GZ}: %.ps.gz: %.ps
gzip -c $< > $@
${PDF}: %.pdf: %.tex
rm -f $*.out $*.log $*.aux
xelatex $<
rm -f $*.out $*.log $*.aux
%: %.tex %.dvi
latex2html -local_icons $<
touch $@
%.html: %.txt
$(RST) $< > $@
clean:
rm -f -- *~ *.log *.aux *.out *.nav *.snm *.toc ${DVI} ${POSTSCRIPT} ${POSTSCRIPT_GZ} ${PDF}
rm -fr ${HTML}

View File

@ -0,0 +1,291 @@
\documentclass[ignorenonframetext]{beamer}
\usepackage{graphicx}
% Internal links only wors with second screen on the right
% \setbeameroption{show notes on second screen}
\usetheme{Madrid}
\usecolortheme{dolphin}
% gets rid of bottom navigation bars
\setbeamertemplate{footline}[frame number]{}
% gets rid of navigation symbols
\setbeamertemplate{navigation symbols}{}
%\usetheme{Warsaw}
%\usepackage[french]{babel}
%\usepackage[utf8,utf8x]{inputenc}
%\usepackage[T1]{fontenc}
% Replace babel
\usepackage{polyglossia}
\setdefaultlanguage{french}
%% Require XeTeX
\usepackage{xltxtra}
\usepackage{fontspec}
\usepackage{xunicode}
\logo{
\hspace{120pt}
\includegraphics[width=2cm]{img/cesi.jpg}~
\hspace{113pt}
\includegraphics[width=1cm]{img/logo-cadoles.png}~
}
%%\setbeamertemplate{background}{\includegraphics[width=128mm]{beamer-skel/img/banner01.png}}
\title[]{Algorithmique Approfondie}
\subtitle{CESI alternance}
\subtitle{INFAL24}
\author[Gwenaël Rémond]{}
%\institute[E.O.L.E]{\includegraphics[width=2cm]{beamer-skel/img/logo-eole.png}}
\institute[Cadoles]{\includegraphics[width=2cm]{img/cesi.jpg}}
%\date{{\small 8 avril 2013}}
\subject{Talks}
\AtBeginSection[] % Add a TOC with current section highlighted
{
\begin{frame}<beamer>
\frametitle{Plan}
\tableofcontents[currentsection]
\end{frame}
}
\usepackage{hyperref}
\usepackage{hyperxmp}
\hypersetup{%
colorlinks=true,linkcolor=blue,urlcolor=blue,pdfpagemode=UseNone,
pdftitle={EAD3},
pdfsubject={Présentation technique d'EWT},
pdfauthor={EOLE},
pdfkeywords={EOLE, J-EOLE, distribution, GNU, Linux, Éducation,
nationale, Ubuntu},
pdflang={fr-FR},
pdfcopyright={Copyright © 2017 Équipe EOLE <eole@ac-dijon.fr>}, % Require XeTeX
pdflicenseurl={http://creativecommons.org/licenses/by-nc-sa/2.0/fr/},
}
\parskip=0.8em
\begin{document}
\frame{\titlepage}
\section{Introduction}
\begin{frame}
\frametitle{Objectifs}
\texttt{
"Il ne suffit pas d'avoir les mains propres, \\
il faut aussi avoir l'esprit pur."\\
}
\emph{Thalès ; VIe s. av. J.-C.}
\begin{itemize}
\item<1-> maîtriser et concevoir un algorithme,
\item<2-> choisir une représentation appropriée des données,
\item<3-> décomposer en sous-problèmes et affinements successifs,
\item<4-> savoir organiser son code et faire des petits programmes en python.
\end{itemize}
\end{frame}
\begin{frame}
\frametitle{L'art de programmer}
\texttt{GEEK SUBLIME (Vikram CHANDRA)
Une vision esthétique, littéraire, mathématique du codage}
\begin{itemize}
\item<1-> Programmer, c'est abstraire, prendre du recul.
\item<2-> Abstraire, par rapport à quoi ? Par rapport à la machine
\item<3-> Les niveaux d'abstraction par rapport à la machine
\end{itemize}
\end{frame}
\begin{frame}
\frametitle{Les langages de programmation}
\begin{itemize}
\item Qu'est-ce qu'un langage de programmation ?
\item Les grands paradigmes de programmation (procédural, objet, fonctionnel, modulaire, générique \dots)
\item L'historique des langages.
\end{itemize}
\end{frame}
\section{Algorithmique}
\begin{frame}
\frametitle{Les algorithmes}
\begin{itemize}
\item définition d'un algorithme
\item implémentation d'un algorithme
\item représentation d'un algorithme dans un langage cible
\end{itemize}
\end{frame}
\section{Algorithmique pour la programmation}
\begin{frame}
\frametitle{Qu'est-ce qu'un programme ?}
\begin{itemize}
\item <1-> Les expressions
\item <2-> Les déclarations
\item <3-> La REPL (Read Eval Print Loop)
\end{itemize}
\end{frame}
\begin{frame}
\frametitle{Approche générale des fonctions}
\begin{itemize}
\item Les procédures
\item La portée d'une variable
\item Les fonctions
\end{itemize}
\end{frame}
\begin{frame}
\frametitle{Les structures de contrôle}
\begin{itemize}
\item Le branchement conditionnel
\item L'itération
\item \dots
\end{itemize}
\end{frame}
\begin{frame}
\frametitle{Les structures de données}
\begin{itemize}
\item Les listes
\item Les dictionnaires
\item Les arbres, les graphes \dots
\end{itemize}
\end{frame}
\begin{frame}
\frametitle{L'état de l'art de l'algorithmique}
\begin{itemize}
\item en mathématiques, quelques grands thèmes
\begin{itemize}
\item géométrie algorithmique
\item algorithmique algébrique
\item arithmétique modulaire
\item \dots
\end{itemize}
\item en informatique
\begin{itemize}
\item en informatique fondamentale
\item en langages de programmation
\item systèmes cryptographiques
\item reconnaissance de motifs
\item mais aussi les problèmes posés par lalgorithmique parallèle \dots
\item
\end{itemize}
\item en sciences physique, en biologie
\item en sciences sociales (réseaux sociaux, auto-organisation\dots)
\end{itemize}
\end{frame}
\section{Complexité d'un algorithme}
\begin{frame}
\frametitle{Complexité d'un algorithme}
\begin{itemize}
\item coût d'un algorithme
\item évaluation du coût
\item définition mathématique
\end{itemize}
\end{frame}
\section{Programmation modulaire}
\begin{frame}
\frametitle{La programmation modulaire}
\begin{itemize}
\item La programmation raisonnée
\item Le paradigme modulaire vs le paradigme objet
\item exemple de programmation modulaire en python
\end{itemize}
\end{frame}
\section{Programmation modulaire avancée}
\begin{frame}
\frametitle{Les modules sont comme les classes}
\begin{itemize}
\item L'encapsulation
\item Le typage et la signature, l'héritage
\item Catégories et foncteurs
\end{itemize}
\end{frame}
% Not present in TOC
\appendix
\begin{frame}[label=thanks]{Remerciements}
Je remercie la communauté du logiciel libre pour tous ces
merveilleux logiciels sans lesquels si peu de choses existeraient.
Cette présentation a été réalisée grâce aux logiciels libres
suivants~:
\begin{itemize}
\item Le système de composition \LaTeX{}
\href{https://fr.wikipedia.org/wiki/TeX_Live}{TeX Live}
\item L'éditeur de texte
\href{http://www.vim.org/}{Vim}
\item L'environnement graphique
\href{http://gnome.org/}{Gnome}
\item Le système d'exploitation
\href{https://debian.org/}{Debian}
\end{itemize}
\begin{center}
% Do not mess with graphics
\hypersetup{hidelinks}
\begin{tabular}{cccccc}
\href{http://www.gnu.org}{\includegraphics[height=1.3cm]{graphics/gnu-head.pdf}} &
\href{http://www.kernel.org}{\includegraphics[height=1.2cm]{graphics/tux.pdf}} &
\href{http://www.debian.org/}{\includegraphics[height=1cm]{graphics/debian.eps}} &
\href{https://fr.wikipedia.org/wiki/TeX_Live}{\includegraphics[height=1cm]{graphics/texlive.pdf}}
\end{tabular}
\end{center}
\end{frame}
\begin{frame}[label=license]{Licence}
Cette présentation est mise à disposition sous licence\\
\href{http://creativecommons.org/licenses/by-sa/4.0}%
{Creative Commons \textsc{by-sa 4.0}}
\begin{columns}[t]
\begin{column}{5.5cm}
\begin{itemize}
\item Attribution
\end{itemize}
\end{column}
\begin{column}{6.5cm}
\begin{itemize}
\item Partage dans les mêmes conditions
\end{itemize}
\end{column}
\end{columns}
Vous pouvez obtenir une copie de la licence
\begin{block}{par Internet}
\href{http://creativecommons.org/licenses/by-nc-sa/4.0}%
{\url{http://creativecommons.org/licenses/by-nc-sa/4.0}}
\end{block}
\begin{block}{par courrier postal}
\begin{quote}
Creative Commons\\
444 Castro Street, Suite 900 Mountain View,\\
California, 94041, USA.
\end{quote}
\end{block}
\end{frame}
\end{document}

View File

@ -0,0 +1,133 @@
%!PS-Adobe-3.0 EPSF-3.0
%%Creator: cairo 1.14.8 (http://cairographics.org)
%%CreationDate: Tue May 16 12:20:58 2017
%%Pages: 1
%%DocumentData: Clean7Bit
%%LanguageLevel: 2
%%BoundingBox: 0 -1 232 85
%%EndComments
%%BeginProlog
save
50 dict begin
/q { gsave } bind def
/Q { grestore } bind def
/cm { 6 array astore concat } bind def
/w { setlinewidth } bind def
/J { setlinecap } bind def
/j { setlinejoin } bind def
/M { setmiterlimit } bind def
/d { setdash } bind def
/m { moveto } bind def
/l { lineto } bind def
/c { curveto } bind def
/h { closepath } bind def
/re { exch dup neg 3 1 roll 5 3 roll moveto 0 rlineto
0 exch rlineto 0 rlineto closepath } bind def
/S { stroke } bind def
/f { fill } bind def
/f* { eofill } bind def
/n { newpath } bind def
/W { clip } bind def
/W* { eoclip } bind def
/BT { } bind def
/ET { } bind def
/pdfmark where { pop globaldict /?pdfmark /exec load put }
{ globaldict begin /?pdfmark /pop load def /pdfmark
/cleartomark load def end } ifelse
/BDC { mark 3 1 roll /BDC pdfmark } bind def
/EMC { mark /EMC pdfmark } bind def
/cairo_store_point { /cairo_point_y exch def /cairo_point_x exch def } def
/Tj { show currentpoint cairo_store_point } bind def
/TJ {
{
dup
type /stringtype eq
{ show } { -0.001 mul 0 cairo_font_matrix dtransform rmoveto } ifelse
} forall
currentpoint cairo_store_point
} bind def
/cairo_selectfont { cairo_font_matrix aload pop pop pop 0 0 6 array astore
cairo_font exch selectfont cairo_point_x cairo_point_y moveto } bind def
/Tf { pop /cairo_font exch def /cairo_font_matrix where
{ pop cairo_selectfont } if } bind def
/Td { matrix translate cairo_font_matrix matrix concatmatrix dup
/cairo_font_matrix exch def dup 4 get exch 5 get cairo_store_point
/cairo_font where { pop cairo_selectfont } if } bind def
/Tm { 2 copy 8 2 roll 6 array astore /cairo_font_matrix exch def
cairo_store_point /cairo_font where { pop cairo_selectfont } if } bind def
/g { setgray } bind def
/rg { setrgbcolor } bind def
/d1 { setcachedevice } bind def
%%EndProlog
%%BeginSetup
%%EndSetup
%%Page: 1 1
%%BeginPageSetup
%%PageBoundingBox: 0 -1 232 85
%%EndPageSetup
q 0 -1 232 86 rectclip q
0.290196 0.247059 0.454902 rg
133.668 16.757 m 133.668 16.757 133.25 1.257 148.941 1.257 c 176.328 1.257
l 170.723 3.749 168.633 5.874 164.891 10.585 c 150.969 10.585 l 147.234
10.585 145.441 13.222 145.441 17.538 c 145.441 17.538 145.492 75.363 145.414
75.445 c 142.301 82.999 133.668 84.519 133.668 84.519 c 133.668 83.995
133.676 39.347 133.668 16.757 c h
133.668 16.757 m f
41.039 38.73 m 41.207 38.808 41.25 38.921 41.457 39.109 c 41.5 40.347 41.375
41.511 41.164 42.823 c 40.625 46.238 40.664 49.726 41.207 53.07 c 41.125
53.214 l 41.043 53.366 40.914 53.405 40.914 53.405 c 40.664 53.48 40.414
53.554 40.121 53.515 c 35.613 53.366 31.141 52.577 26.758 51.265 c 24.457
50.702 22.16 50.14 19.863 49.577 c 17.984 49.015 16.688 48.152 15.812 46.913
c 16.062 46.839 16.145 46.691 16.23 46.538 c 16.48 46.464 l 16.395 46.238
l 15.98 45.863 15.812 45.409 15.895 44.886 c 15.977 44.738 16.105 44.698
16.188 44.55 c 16.523 44.327 16.859 44.101 17.062 43.909 c 17.234 43.988
17.234 43.988 17.355 43.952 c 17.523 44.027 17.816 44.062 18.023 44.249
c 18.316 44.288 18.445 44.249 18.57 44.21 c 24.836 43.464 30.973 41.999
37.027 39.933 c 37.152 39.894 37.281 39.855 37.242 39.749 c 37.324 39.597
37.449 39.558 37.406 39.445 c 37.91 39.296 l 38.91 38.995 39.785 38.734
40.75 38.698 c 40.914 38.769 40.914 38.769 41.039 38.73 c 39.117 40.687
m 38.117 40.988 l 39.078 40.948 l 39.16 40.796 39.117 40.687 39.117 40.687
c f
49.855 72.859 m 49.855 72.859 54.316 79.749 63.262 84.269 c 13.684 84.269
l 0.484 84.269 0.527 73.152 0.527 73.152 c 0.527 17.499 l 0.527 17.499
0.117 1.984 15.809 1.984 c 64.07 1.984 l 58.465 4.472 54.559 8.597 50.816
13.308 c 50.816 13.308 15.844 13.296 15.891 13.308 c 11.449 13.308 12.086
17.542 12.086 17.542 c 12.156 69.034 l 12.156 73.109 15.902 72.859 15.902
72.859 c f
69.723 45.148 m 69.723 45.148 66.891 28.866 79.219 23.05 c 84.949 20.351
89.504 19.945 95.855 22.363 c 99.852 23.882 103.457 27.659 104.977 31.769
c 106.496 35.878 105.191 40.874 101.199 44.757 c 99.793 38.538 98.297 33.53
92.91 30.741 c 89.711 29.116 86.457 29.386 83.211 30.995 c 79.961 32.605
77.473 36.48 76.484 40.363 c 76.484 40.363 74.473 47.585 82.195 59.417
c 75.809 56.718 70.875 52.245 69.723 45.148 c h
69.723 45.148 m f
0.945098 0.792157 0.0745098 rg
110.621 8.773 m 117.836 13.503 123.312 20.792 125.211 30.261 c 125.238
30.429 l 126.707 37.968 125.305 45.933 121.43 52.601 c 117.527 59.308 110.711
64.777 102.098 65.82 c 102.074 65.831 l 96.797 66.464 90.988 64.273 86.93
60.507 c 82.406 55.163 80.273 51.816 80.387 44.03 c 84.254 49.132 94.043
54.202 100.949 53.523 c 105.414 52.984 108.629 50.445 110.898 46.542 c
113.168 42.636 114.066 37.445 113.184 33.058 c 110.383 19.085 94.641 12.073
81.125 15.976 c 62.398 21.382 55.426 40.464 63.086 58.038 c 72.824 73.859
90.422 80.905 113.074 77.519 c 105.887 85.03 93.703 83.984 93.703 83.984
c 82.363 84.874 61.398 78.519 53.613 63.808 c 42.234 42.316 52.059 11.566
78.055 4.062 c 89.188 0.847 101.344 2.695 110.621 8.777 c h
110.621 8.773 m f
0.290196 0.247059 0.454902 rg
194.387 67.495 m 185.594 67.495 178.215 64.179 172.285 57.597 c 166.355
51.011 164.41 42.503 164.41 32.046 c 164.41 20.98 166.184 15.999 171.609
9.894 c 180.992 -1.075 203.68 1.32 210.367 1.402 c 217.055 1.484 219.438
1.644 231.012 0.57 c 228.027 5.839 220.824 9.495 218.348 10.011 c 206.766
12.195 193.328 8.179 181.414 15.484 c 176.691 19.57 175.734 22.14 175.559
29.62 c 223.012 29.62 l 223.012 35.269 l 223.012 45.374 219.598 53.257
214.785 58.945 c 208.164 64.816 201.25 67.409 194.387 67.495 c h
194.184 58.421 m 199.434 58.421 203.531 56.702 206.484 53.245 c 209.438
49.788 211.941 44.956 211.984 38.745 c 175.684 38.745 l 175.715 44.808
177.715 49.339 181.262 52.972 c 184.805 56.601 189.109 58.421 194.184 58.421
c h
194.184 58.421 m f
Q Q
showpage
%%Trailer
end restore
%%EOF

View File

@ -0,0 +1,1277 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
xmlns:osb="http://www.openswatchbook.org/uri/2009/osb"
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:xlink="http://www.w3.org/1999/xlink"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
id="svg3118"
version="1.1"
inkscape:version="0.92.1 r15371"
width="308.26666"
height="113.06667"
xml:space="preserve"
sodipodi:docname="Logo EOLE.svg"><metadata
id="metadata3124"><rdf:RDF><cc:Work
rdf:about=""><dc:format>image/svg+xml</dc:format><dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" /><dc:title /></cc:Work></rdf:RDF></metadata><defs
id="defs3122"><marker
inkscape:stockid="Arrow1Lend"
orient="auto"
refY="0"
refX="0"
id="Arrow1Lend"
style="overflow:visible"><path
id="path4626"
d="M -10.666667,0 -14.933333,4.2666667 0,0 -14.933333,-4.2666667 Z"
style="fill-rule:evenodd;stroke:#000000;stroke-width:0.85333335pt"
inkscape:connector-curvature="0" /></marker><linearGradient
id="linearGradient4664"
osb:paint="solid"><stop
style="stop-color:#ffffff;stop-opacity:1;"
offset="0"
id="stop4666" /></linearGradient><clipPath
clipPathUnits="userSpaceOnUse"
id="clipPath3132"><path
d="M 0,600 H 800 V 0 H 0 Z"
id="path3134"
inkscape:connector-curvature="0" /></clipPath><clipPath
clipPathUnits="userSpaceOnUse"
id="clipPath3248"><path
d="M 205.131,405.857 H 559.926 V 579.858 H 205.131 Z"
id="path3250"
inkscape:connector-curvature="0" /></clipPath><clipPath
clipPathUnits="userSpaceOnUse"
id="clipPath3260"><path
d="M 0,600 H 800 V 0 H 0 Z"
id="path3262"
inkscape:connector-curvature="0" /></clipPath><clipPath
clipPathUnits="userSpaceOnUse"
id="clipPath3288"><path
d="M 205.131,405.857 H 559.926 V 579.858 H 205.131 Z"
id="path3290"
inkscape:connector-curvature="0" /></clipPath><clipPath
clipPathUnits="userSpaceOnUse"
id="clipPath3304"><path
d="M 0,600 H 800 V 0 H 0 Z"
id="path3306"
inkscape:connector-curvature="0" /></clipPath><linearGradient
inkscape:collect="always"
xlink:href="#linearGradient4664"
id="linearGradient4668"
x1="1114.8962"
y1="926.69495"
x2="1341.036"
y2="926.69495"
gradientUnits="userSpaceOnUse" /><linearGradient
inkscape:collect="always"
xlink:href="#linearGradient4664"
id="linearGradient4676"
gradientUnits="userSpaceOnUse"
x1="1114.8962"
y1="926.69495"
x2="1341.036"
y2="926.69495" /><linearGradient
inkscape:collect="always"
xlink:href="#linearGradient4664-9"
id="linearGradient4668-8"
x1="1114.8962"
y1="926.69495"
x2="1341.036"
y2="926.69495"
gradientUnits="userSpaceOnUse" /><linearGradient
id="linearGradient4664-9"
osb:paint="solid"><stop
style="stop-color:#ffffff;stop-opacity:1;"
offset="0"
id="stop4666-6" /></linearGradient><linearGradient
inkscape:collect="always"
xlink:href="#linearGradient4664-9"
id="linearGradient4676-2"
gradientUnits="userSpaceOnUse"
x1="1114.8962"
y1="926.69495"
x2="1341.036"
y2="926.69495" /><linearGradient
id="linearGradient4706"
osb:paint="solid"><stop
style="stop-color:#ffffff;stop-opacity:1;"
offset="0"
id="stop4708" /></linearGradient><linearGradient
id="linearGradient4711"
osb:paint="solid"><stop
style="stop-color:#ffffff;stop-opacity:1;"
offset="0"
id="stop4713" /></linearGradient><linearGradient
id="linearGradient4716"
osb:paint="solid"><stop
style="stop-color:#ffffff;stop-opacity:1;"
offset="0"
id="stop4718" /></linearGradient><linearGradient
id="linearGradient4721"
osb:paint="solid"><stop
style="stop-color:#ffffff;stop-opacity:1;"
offset="0"
id="stop4723" /></linearGradient><linearGradient
id="linearGradient4726"
osb:paint="solid"><stop
style="stop-color:#ffffff;stop-opacity:1;"
offset="0"
id="stop4728" /></linearGradient><linearGradient
id="linearGradient4731"
osb:paint="solid"><stop
style="stop-color:#ffffff;stop-opacity:1;"
offset="0"
id="stop4733" /></linearGradient><linearGradient
id="linearGradient4736"
osb:paint="solid"><stop
style="stop-color:#ffffff;stop-opacity:1;"
offset="0"
id="stop4738" /></linearGradient><linearGradient
id="linearGradient4741"
osb:paint="solid"><stop
style="stop-color:#ffffff;stop-opacity:1;"
offset="0"
id="stop4743" /></linearGradient><linearGradient
id="linearGradient4746"
osb:paint="solid"><stop
style="stop-color:#ffffff;stop-opacity:1;"
offset="0"
id="stop4748" /></linearGradient><linearGradient
id="linearGradient4751"
osb:paint="solid"><stop
style="stop-color:#ffffff;stop-opacity:1;"
offset="0"
id="stop4753" /></linearGradient><linearGradient
inkscape:collect="always"
xlink:href="#linearGradient4664-9"
id="linearGradient4880"
gradientUnits="userSpaceOnUse"
x1="1114.8962"
y1="926.69495"
x2="1341.036"
y2="926.69495" /><linearGradient
inkscape:collect="always"
xlink:href="#linearGradient4664-9"
id="linearGradient4896"
gradientUnits="userSpaceOnUse"
x1="1114.8962"
y1="926.69495"
x2="1341.036"
y2="926.69495" /><linearGradient
inkscape:collect="always"
xlink:href="#linearGradient4664-9-8"
id="linearGradient4896-1"
gradientUnits="userSpaceOnUse"
x1="1114.8962"
y1="926.69495"
x2="1341.036"
y2="926.69495" /><linearGradient
id="linearGradient4664-9-8"
osb:paint="solid"><stop
style="stop-color:#ffffff;stop-opacity:1;"
offset="0"
id="stop4666-6-7" /></linearGradient><linearGradient
inkscape:collect="always"
xlink:href="#linearGradient4664-9-8"
id="linearGradient4880-2"
gradientUnits="userSpaceOnUse"
x1="1114.8962"
y1="926.69495"
x2="1341.036"
y2="926.69495" /><linearGradient
id="linearGradient5022"
osb:paint="solid"><stop
style="stop-color:#ffffff;stop-opacity:1;"
offset="0"
id="stop5024" /></linearGradient><linearGradient
id="linearGradient5027"
osb:paint="solid"><stop
style="stop-color:#ffffff;stop-opacity:1;"
offset="0"
id="stop5029" /></linearGradient><linearGradient
id="linearGradient5032"
osb:paint="solid"><stop
style="stop-color:#ffffff;stop-opacity:1;"
offset="0"
id="stop5034" /></linearGradient><linearGradient
id="linearGradient5037"
osb:paint="solid"><stop
style="stop-color:#ffffff;stop-opacity:1;"
offset="0"
id="stop5039" /></linearGradient><linearGradient
id="linearGradient5042"
osb:paint="solid"><stop
style="stop-color:#ffffff;stop-opacity:1;"
offset="0"
id="stop5044" /></linearGradient><linearGradient
id="linearGradient5047"
osb:paint="solid"><stop
style="stop-color:#ffffff;stop-opacity:1;"
offset="0"
id="stop5049" /></linearGradient><linearGradient
id="linearGradient5052"
osb:paint="solid"><stop
style="stop-color:#ffffff;stop-opacity:1;"
offset="0"
id="stop5054" /></linearGradient><linearGradient
id="linearGradient5057"
osb:paint="solid"><stop
style="stop-color:#ffffff;stop-opacity:1;"
offset="0"
id="stop5059" /></linearGradient><linearGradient
id="linearGradient5062"
osb:paint="solid"><stop
style="stop-color:#ffffff;stop-opacity:1;"
offset="0"
id="stop5064" /></linearGradient><linearGradient
id="linearGradient5067"
osb:paint="solid"><stop
style="stop-color:#ffffff;stop-opacity:1;"
offset="0"
id="stop5069" /></linearGradient><linearGradient
y2="926.69495"
x2="1341.036"
y1="926.69495"
x1="1114.8962"
gradientUnits="userSpaceOnUse"
id="linearGradient5090"
xlink:href="#linearGradient4664-9-8"
inkscape:collect="always" /><linearGradient
inkscape:collect="always"
xlink:href="#linearGradient4664-9-8"
id="linearGradient3289"
gradientUnits="userSpaceOnUse"
x1="1114.8962"
y1="926.69495"
x2="1341.036"
y2="926.69495" /><linearGradient
inkscape:collect="always"
xlink:href="#linearGradient4664-9-8"
id="linearGradient3291"
gradientUnits="userSpaceOnUse"
x1="1114.8962"
y1="926.69495"
x2="1341.036"
y2="926.69495" /><linearGradient
inkscape:collect="always"
xlink:href="#linearGradient4664-9-8"
id="linearGradient3293"
gradientUnits="userSpaceOnUse"
x1="1114.8962"
y1="926.69495"
x2="1341.036"
y2="926.69495" /><linearGradient
inkscape:collect="always"
xlink:href="#linearGradient4664-9-8"
id="linearGradient3309"
gradientUnits="userSpaceOnUse"
x1="1114.8962"
y1="926.69495"
x2="1341.036"
y2="926.69495" /><linearGradient
inkscape:collect="always"
xlink:href="#linearGradient4664-9-8"
id="linearGradient3315"
gradientUnits="userSpaceOnUse"
x1="1114.8962"
y1="926.69495"
x2="1341.036"
y2="926.69495"
gradientTransform="matrix(0.91526376,0,0,0.91526376,-623.31504,-541.38903)" /><linearGradient
inkscape:collect="always"
xlink:href="#linearGradient4664-9-8"
id="linearGradient3318"
gradientUnits="userSpaceOnUse"
x1="1114.8962"
y1="926.69495"
x2="1341.036"
y2="926.69495"
gradientTransform="matrix(0.91526376,0,0,0.91526376,-623.31504,-541.38903)" /><linearGradient
inkscape:collect="always"
xlink:href="#linearGradient4664-9-8"
id="linearGradient3321"
gradientUnits="userSpaceOnUse"
x1="1114.8962"
y1="926.69495"
x2="1341.036"
y2="926.69495"
gradientTransform="matrix(0.91526376,0,0,0.91526376,-623.31504,-541.38903)" /><linearGradient
inkscape:collect="always"
xlink:href="#linearGradient4664-9-8"
id="linearGradient3324"
gradientUnits="userSpaceOnUse"
x1="1114.8962"
y1="926.69495"
x2="1341.036"
y2="926.69495"
gradientTransform="matrix(0.91526376,0,0,0.91526376,-623.31504,-541.38903)" /><linearGradient
inkscape:collect="always"
xlink:href="#linearGradient4664-9-8"
id="linearGradient3327"
gradientUnits="userSpaceOnUse"
x1="1114.8962"
y1="926.69495"
x2="1341.036"
y2="926.69495"
gradientTransform="matrix(0.91526376,0,0,0.91526376,-623.31504,-541.38903)" /><linearGradient
inkscape:collect="always"
xlink:href="#linearGradient4664-9-8"
id="linearGradient3330"
gradientUnits="userSpaceOnUse"
x1="1114.8962"
y1="926.69495"
x2="1341.036"
y2="926.69495"
gradientTransform="matrix(0.91526376,0,0,0.91526376,-623.31504,-541.38903)" /><linearGradient
inkscape:collect="always"
xlink:href="#linearGradient4664-9-8"
id="linearGradient3337"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0.91526376,0,0,0.91526376,-623.31504,-541.38903)"
x1="1114.8962"
y1="926.69495"
x2="1341.036"
y2="926.69495" /><linearGradient
inkscape:collect="always"
xlink:href="#linearGradient4664-9-8"
id="linearGradient3341"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0.91526376,0,0,0.91526376,-623.31504,-541.38903)"
x1="1114.8962"
y1="926.69495"
x2="1341.036"
y2="926.69495" /><linearGradient
inkscape:collect="always"
xlink:href="#linearGradient4664-9-8"
id="linearGradient3345"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0.91526376,0,0,0.91526376,-623.31504,-541.38903)"
x1="1114.8962"
y1="926.69495"
x2="1341.036"
y2="926.69495" /><linearGradient
inkscape:collect="always"
xlink:href="#linearGradient4664-9-8"
id="linearGradient3349"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0.91526376,0,0,0.91526376,-623.31504,-541.38903)"
x1="1114.8962"
y1="926.69495"
x2="1341.036"
y2="926.69495" /><linearGradient
inkscape:collect="always"
xlink:href="#linearGradient4664-9-8"
id="linearGradient3353"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0.91526376,0,0,0.91526376,-623.31504,-541.38903)"
x1="1114.8962"
y1="926.69495"
x2="1341.036"
y2="926.69495" /><linearGradient
inkscape:collect="always"
xlink:href="#linearGradient4664-9-8"
id="linearGradient3357"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0.91526376,0,0,0.91526376,-623.31504,-541.38903)"
x1="1114.8962"
y1="926.69495"
x2="1341.036"
y2="926.69495" /><linearGradient
inkscape:collect="always"
xlink:href="#linearGradient4664-9-8"
id="linearGradient3361"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0.91526376,0,0,0.91526376,-623.31504,-541.38903)"
x1="1114.8962"
y1="926.69495"
x2="1341.036"
y2="926.69495" /><linearGradient
inkscape:collect="always"
xlink:href="#linearGradient4664-9-8"
id="linearGradient3375"
gradientUnits="userSpaceOnUse"
x1="1114.8962"
y1="926.69495"
x2="1341.036"
y2="926.69495" /><linearGradient
inkscape:collect="always"
xlink:href="#linearGradient4664-9-8"
id="linearGradient3377"
gradientUnits="userSpaceOnUse"
x1="1114.8962"
y1="926.69495"
x2="1341.036"
y2="926.69495" /><linearGradient
inkscape:collect="always"
xlink:href="#linearGradient4664-9-8"
id="linearGradient3379"
gradientUnits="userSpaceOnUse"
x1="1114.8962"
y1="926.69495"
x2="1341.036"
y2="926.69495" /><linearGradient
inkscape:collect="always"
xlink:href="#linearGradient4664-9-8"
id="linearGradient3381"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0.91526376,0,0,0.91526376,-623.31504,-541.38903)"
x1="1114.8962"
y1="926.69495"
x2="1341.036"
y2="926.69495" /><linearGradient
inkscape:collect="always"
xlink:href="#linearGradient4664-9-8"
id="linearGradient3383"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0.91526376,0,0,0.91526376,-623.31504,-541.38903)"
x1="1114.8962"
y1="926.69495"
x2="1341.036"
y2="926.69495" /><linearGradient
inkscape:collect="always"
xlink:href="#linearGradient4664-9-8"
id="linearGradient3385"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0.91526376,0,0,0.91526376,-623.31504,-541.38903)"
x1="1114.8962"
y1="926.69495"
x2="1341.036"
y2="926.69495" /><linearGradient
inkscape:collect="always"
xlink:href="#linearGradient4664-9-8"
id="linearGradient3387"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0.91526376,0,0,0.91526376,-623.31504,-541.38903)"
x1="1114.8962"
y1="926.69495"
x2="1341.036"
y2="926.69495" /><linearGradient
inkscape:collect="always"
xlink:href="#linearGradient4664-9-8"
id="linearGradient3389"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0.91526376,0,0,0.91526376,-623.31504,-541.38903)"
x1="1114.8962"
y1="926.69495"
x2="1341.036"
y2="926.69495" /><linearGradient
inkscape:collect="always"
xlink:href="#linearGradient4664-9-8"
id="linearGradient3391"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0.91526376,0,0,0.91526376,-623.31504,-541.38903)"
x1="1114.8962"
y1="926.69495"
x2="1341.036"
y2="926.69495" /><linearGradient
inkscape:collect="always"
xlink:href="#linearGradient4664-9-8"
id="linearGradient3393"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0.91526376,0,0,0.91526376,-623.31504,-541.38903)"
x1="1114.8962"
y1="926.69495"
x2="1341.036"
y2="926.69495" /><linearGradient
inkscape:collect="always"
xlink:href="#linearGradient4664-9-8"
id="linearGradient3396"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0.91526376,0,0,0.91526376,-623.31504,-541.38903)"
x1="1114.8962"
y1="926.69495"
x2="1341.036"
y2="926.69495" /><linearGradient
inkscape:collect="always"
xlink:href="#linearGradient4664-9-8"
id="linearGradient3399"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0.91526376,0,0,0.91526376,-623.31504,-541.38903)"
x1="1114.8962"
y1="926.69495"
x2="1341.036"
y2="926.69495" /><linearGradient
inkscape:collect="always"
xlink:href="#linearGradient4664-9-8"
id="linearGradient3402"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0.91526376,0,0,0.91526376,-623.31504,-541.38903)"
x1="1114.8962"
y1="926.69495"
x2="1341.036"
y2="926.69495" /><linearGradient
inkscape:collect="always"
xlink:href="#linearGradient4664-9-8"
id="linearGradient3405"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0.91526376,0,0,0.91526376,-623.31504,-541.38903)"
x1="1114.8962"
y1="926.69495"
x2="1341.036"
y2="926.69495" /><linearGradient
inkscape:collect="always"
xlink:href="#linearGradient4664-9-8"
id="linearGradient3408"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0.91526376,0,0,0.91526376,-623.31504,-541.38903)"
x1="1114.8962"
y1="926.69495"
x2="1341.036"
y2="926.69495" /><linearGradient
inkscape:collect="always"
xlink:href="#linearGradient4664-9-8"
id="linearGradient3411"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0.91526376,0,0,0.91526376,-623.31504,-541.38903)"
x1="1114.8962"
y1="926.69495"
x2="1341.036"
y2="926.69495" /><linearGradient
inkscape:collect="always"
xlink:href="#linearGradient4664-9-8"
id="linearGradient3414"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0.91526376,0,0,0.91526376,-623.31504,-541.38903)"
x1="1114.8962"
y1="926.69495"
x2="1341.036"
y2="926.69495" /><linearGradient
inkscape:collect="always"
xlink:href="#linearGradient4664-9-8"
id="linearGradient3432"
gradientUnits="userSpaceOnUse"
x1="1114.8962"
y1="926.69495"
x2="1341.036"
y2="926.69495" /><linearGradient
inkscape:collect="always"
xlink:href="#linearGradient4664-9-8"
id="linearGradient3434"
gradientUnits="userSpaceOnUse"
x1="1114.8962"
y1="926.69495"
x2="1341.036"
y2="926.69495" /><linearGradient
inkscape:collect="always"
xlink:href="#linearGradient4664-9-8"
id="linearGradient3436"
gradientUnits="userSpaceOnUse"
x1="1114.8962"
y1="926.69495"
x2="1341.036"
y2="926.69495" /><linearGradient
inkscape:collect="always"
xlink:href="#linearGradient4664-9-8"
id="linearGradient3440"
gradientUnits="userSpaceOnUse"
x1="1114.8962"
y1="926.69495"
x2="1341.036"
y2="926.69495"
gradientTransform="matrix(0.91526376,0,0,0.91526376,-623.43531,-541.69844)" /><linearGradient
inkscape:collect="always"
xlink:href="#linearGradient4664-9-8"
id="linearGradient3445"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0.91526376,0,0,0.91526376,-623.43531,-541.69844)"
x1="1114.8962"
y1="926.69495"
x2="1341.036"
y2="926.69495" /><linearGradient
inkscape:collect="always"
xlink:href="#linearGradient4664-9-5"
id="linearGradient4896-6"
gradientUnits="userSpaceOnUse"
x1="1114.8962"
y1="926.69495"
x2="1341.036"
y2="926.69495" /><linearGradient
id="linearGradient4664-9-5"
osb:paint="solid"><stop
style="stop-color:#ffffff;stop-opacity:1;"
offset="0"
id="stop4666-6-3" /></linearGradient><linearGradient
inkscape:collect="always"
xlink:href="#linearGradient4664-9-5"
id="linearGradient4880-3"
gradientUnits="userSpaceOnUse"
x1="1114.8962"
y1="926.69495"
x2="1341.036"
y2="926.69495" /><linearGradient
id="linearGradient3288"
osb:paint="solid"><stop
style="stop-color:#ffffff;stop-opacity:1;"
offset="0"
id="stop3290" /></linearGradient><linearGradient
id="linearGradient3293-8"
osb:paint="solid"><stop
style="stop-color:#ffffff;stop-opacity:1;"
offset="0"
id="stop3295" /></linearGradient><linearGradient
id="linearGradient3298"
osb:paint="solid"><stop
style="stop-color:#ffffff;stop-opacity:1;"
offset="0"
id="stop3300" /></linearGradient><linearGradient
id="linearGradient3303"
osb:paint="solid"><stop
style="stop-color:#ffffff;stop-opacity:1;"
offset="0"
id="stop3305" /></linearGradient><linearGradient
id="linearGradient3308"
osb:paint="solid"><stop
style="stop-color:#ffffff;stop-opacity:1;"
offset="0"
id="stop3310" /></linearGradient><linearGradient
id="linearGradient3313"
osb:paint="solid"><stop
style="stop-color:#ffffff;stop-opacity:1;"
offset="0"
id="stop3315" /></linearGradient><linearGradient
id="linearGradient3318-7"
osb:paint="solid"><stop
style="stop-color:#ffffff;stop-opacity:1;"
offset="0"
id="stop3320" /></linearGradient><linearGradient
id="linearGradient3323"
osb:paint="solid"><stop
style="stop-color:#ffffff;stop-opacity:1;"
offset="0"
id="stop3325" /></linearGradient><linearGradient
id="linearGradient3328"
osb:paint="solid"><stop
style="stop-color:#ffffff;stop-opacity:1;"
offset="0"
id="stop3330" /></linearGradient><linearGradient
id="linearGradient3333"
osb:paint="solid"><stop
style="stop-color:#ffffff;stop-opacity:1;"
offset="0"
id="stop3335" /></linearGradient><linearGradient
y2="926.69495"
x2="1341.036"
y1="926.69495"
x1="1114.8962"
gradientUnits="userSpaceOnUse"
id="linearGradient3363"
xlink:href="#linearGradient4664-9-5"
inkscape:collect="always" /><marker
style="overflow:visible"
id="Arrow1Lend-7"
refX="0"
refY="0"
orient="auto"
inkscape:stockid="Arrow1Lend"><path
inkscape:connector-curvature="0"
style="fill-rule:evenodd;stroke:#000000;stroke-width:0.85333335pt"
d="M -10.666667,0 -14.933333,4.2666667 0,0 -14.933333,-4.2666667 Z"
id="path4626-5" /></marker><clipPath
id="clipPath3132-0"
clipPathUnits="userSpaceOnUse"><path
inkscape:connector-curvature="0"
id="path3134-4"
d="M 0,600 H 800 V 0 H 0 Z" /></clipPath><clipPath
id="clipPath3248-3"
clipPathUnits="userSpaceOnUse"><path
inkscape:connector-curvature="0"
id="path3250-5"
d="M 205.131,405.857 H 559.926 V 579.858 H 205.131 Z" /></clipPath><clipPath
id="clipPath3260-7"
clipPathUnits="userSpaceOnUse"><path
inkscape:connector-curvature="0"
id="path3262-3"
d="M 0,600 H 800 V 0 H 0 Z" /></clipPath><clipPath
id="clipPath3288-4"
clipPathUnits="userSpaceOnUse"><path
inkscape:connector-curvature="0"
id="path3290-0"
d="M 205.131,405.857 H 559.926 V 579.858 H 205.131 Z" /></clipPath><clipPath
id="clipPath3304-6"
clipPathUnits="userSpaceOnUse"><path
inkscape:connector-curvature="0"
id="path3306-1"
d="M 0,600 H 800 V 0 H 0 Z" /></clipPath><linearGradient
gradientUnits="userSpaceOnUse"
y2="926.69495"
x2="1341.036"
y1="926.69495"
x1="1114.8962"
id="linearGradient4759"
xlink:href="#linearGradient4664"
inkscape:collect="always" /><linearGradient
y2="926.69495"
x2="1341.036"
y1="926.69495"
x1="1114.8962"
gradientUnits="userSpaceOnUse"
id="linearGradient4761"
xlink:href="#linearGradient4664"
inkscape:collect="always" /><linearGradient
y2="926.69495"
x2="1341.036"
y1="926.69495"
x1="1114.8962"
gradientUnits="userSpaceOnUse"
id="linearGradient4763"
xlink:href="#linearGradient4664"
inkscape:collect="always" /><linearGradient
y2="926.69495"
x2="1341.036"
y1="926.69495"
x1="1114.8962"
gradientUnits="userSpaceOnUse"
id="linearGradient4765"
xlink:href="#linearGradient4664"
inkscape:collect="always" /><linearGradient
y2="926.69495"
x2="1341.036"
y1="926.69495"
x1="1114.8962"
gradientUnits="userSpaceOnUse"
id="linearGradient4767"
xlink:href="#linearGradient4664"
inkscape:collect="always" /><linearGradient
y2="926.69495"
x2="1341.036"
y1="926.69495"
x1="1114.8962"
gradientUnits="userSpaceOnUse"
id="linearGradient4769"
xlink:href="#linearGradient4664"
inkscape:collect="always" /><linearGradient
inkscape:collect="always"
xlink:href="#linearGradient4664"
id="linearGradient4771"
gradientUnits="userSpaceOnUse"
x1="1114.8962"
y1="926.69495"
x2="1341.036"
y2="926.69495" /><linearGradient
y2="926.69495"
x2="1341.036"
y1="926.69495"
x1="1114.8962"
gradientUnits="userSpaceOnUse"
id="linearGradient4773"
xlink:href="#linearGradient4664"
inkscape:collect="always" /><linearGradient
y2="926.69495"
x2="1341.036"
y1="926.69495"
x1="1114.8962"
gradientUnits="userSpaceOnUse"
id="linearGradient4775"
xlink:href="#linearGradient4664"
inkscape:collect="always" /><linearGradient
y2="926.69495"
x2="1341.036"
y1="926.69495"
x1="1114.8962"
gradientUnits="userSpaceOnUse"
id="linearGradient4777"
xlink:href="#linearGradient4664"
inkscape:collect="always" /><linearGradient
y2="926.69495"
x2="1341.036"
y1="926.69495"
x1="1114.8962"
gradientUnits="userSpaceOnUse"
id="linearGradient4779"
xlink:href="#linearGradient4664"
inkscape:collect="always" /><linearGradient
gradientTransform="matrix(0.91526376,0,0,0.91526376,-623.31504,-541.38903)"
y2="926.69495"
x2="1341.036"
y1="926.69495"
x1="1114.8962"
gradientUnits="userSpaceOnUse"
id="linearGradient4781"
xlink:href="#linearGradient4664"
inkscape:collect="always" /><linearGradient
gradientTransform="matrix(0.91526376,0,0,0.91526376,-623.31504,-541.38903)"
y2="926.69495"
x2="1341.036"
y1="926.69495"
x1="1114.8962"
gradientUnits="userSpaceOnUse"
id="linearGradient4783"
xlink:href="#linearGradient4664"
inkscape:collect="always" /><linearGradient
gradientTransform="matrix(0.91526376,0,0,0.91526376,-623.31504,-541.38903)"
y2="926.69495"
x2="1341.036"
y1="926.69495"
x1="1114.8962"
gradientUnits="userSpaceOnUse"
id="linearGradient4785"
xlink:href="#linearGradient4664"
inkscape:collect="always" /><linearGradient
gradientTransform="matrix(0.91526376,0,0,0.91526376,-623.31504,-541.38903)"
y2="926.69495"
x2="1341.036"
y1="926.69495"
x1="1114.8962"
gradientUnits="userSpaceOnUse"
id="linearGradient4787"
xlink:href="#linearGradient4664"
inkscape:collect="always" /><linearGradient
gradientTransform="matrix(0.91526376,0,0,0.91526376,-623.31504,-541.38903)"
y2="926.69495"
x2="1341.036"
y1="926.69495"
x1="1114.8962"
gradientUnits="userSpaceOnUse"
id="linearGradient4789"
xlink:href="#linearGradient4664"
inkscape:collect="always" /><linearGradient
gradientTransform="matrix(0.91526376,0,0,0.91526376,-623.31504,-541.38903)"
y2="926.69495"
x2="1341.036"
y1="926.69495"
x1="1114.8962"
gradientUnits="userSpaceOnUse"
id="linearGradient4791"
xlink:href="#linearGradient4664"
inkscape:collect="always" /><linearGradient
y2="926.69495"
x2="1341.036"
y1="926.69495"
x1="1114.8962"
gradientTransform="matrix(0.91526376,0,0,0.91526376,-623.31504,-541.38903)"
gradientUnits="userSpaceOnUse"
id="linearGradient4793"
xlink:href="#linearGradient4664"
inkscape:collect="always" /><linearGradient
y2="926.69495"
x2="1341.036"
y1="926.69495"
x1="1114.8962"
gradientTransform="matrix(0.91526376,0,0,0.91526376,-623.31504,-541.38903)"
gradientUnits="userSpaceOnUse"
id="linearGradient4795"
xlink:href="#linearGradient4664"
inkscape:collect="always" /><linearGradient
y2="926.69495"
x2="1341.036"
y1="926.69495"
x1="1114.8962"
gradientTransform="matrix(0.91526376,0,0,0.91526376,-623.31504,-541.38903)"
gradientUnits="userSpaceOnUse"
id="linearGradient4797"
xlink:href="#linearGradient4664"
inkscape:collect="always" /><linearGradient
y2="926.69495"
x2="1341.036"
y1="926.69495"
x1="1114.8962"
gradientTransform="matrix(0.91526376,0,0,0.91526376,-623.31504,-541.38903)"
gradientUnits="userSpaceOnUse"
id="linearGradient4799"
xlink:href="#linearGradient4664"
inkscape:collect="always" /><linearGradient
y2="926.69495"
x2="1341.036"
y1="926.69495"
x1="1114.8962"
gradientTransform="matrix(0.91526376,0,0,0.91526376,-623.31504,-541.38903)"
gradientUnits="userSpaceOnUse"
id="linearGradient4801"
xlink:href="#linearGradient4664"
inkscape:collect="always" /><linearGradient
y2="926.69495"
x2="1341.036"
y1="926.69495"
x1="1114.8962"
gradientTransform="matrix(0.91526376,0,0,0.91526376,-623.31504,-541.38903)"
gradientUnits="userSpaceOnUse"
id="linearGradient4803"
xlink:href="#linearGradient4664"
inkscape:collect="always" /><linearGradient
y2="926.69495"
x2="1341.036"
y1="926.69495"
x1="1114.8962"
gradientTransform="matrix(0.91526376,0,0,0.91526376,-623.31504,-541.38903)"
gradientUnits="userSpaceOnUse"
id="linearGradient4805"
xlink:href="#linearGradient4664"
inkscape:collect="always" /><linearGradient
y2="926.69495"
x2="1341.036"
y1="926.69495"
x1="1114.8962"
gradientUnits="userSpaceOnUse"
id="linearGradient4807"
xlink:href="#linearGradient4664"
inkscape:collect="always" /><linearGradient
y2="926.69495"
x2="1341.036"
y1="926.69495"
x1="1114.8962"
gradientUnits="userSpaceOnUse"
id="linearGradient4809"
xlink:href="#linearGradient4664"
inkscape:collect="always" /><linearGradient
y2="926.69495"
x2="1341.036"
y1="926.69495"
x1="1114.8962"
gradientUnits="userSpaceOnUse"
id="linearGradient4811"
xlink:href="#linearGradient4664"
inkscape:collect="always" /><linearGradient
y2="926.69495"
x2="1341.036"
y1="926.69495"
x1="1114.8962"
gradientTransform="matrix(0.91526376,0,0,0.91526376,-623.31504,-541.38903)"
gradientUnits="userSpaceOnUse"
id="linearGradient4813"
xlink:href="#linearGradient4664"
inkscape:collect="always" /><linearGradient
y2="926.69495"
x2="1341.036"
y1="926.69495"
x1="1114.8962"
gradientTransform="matrix(0.91526376,0,0,0.91526376,-623.31504,-541.38903)"
gradientUnits="userSpaceOnUse"
id="linearGradient4815"
xlink:href="#linearGradient4664"
inkscape:collect="always" /><linearGradient
y2="926.69495"
x2="1341.036"
y1="926.69495"
x1="1114.8962"
gradientTransform="matrix(0.91526376,0,0,0.91526376,-623.31504,-541.38903)"
gradientUnits="userSpaceOnUse"
id="linearGradient4817"
xlink:href="#linearGradient4664"
inkscape:collect="always" /><linearGradient
y2="926.69495"
x2="1341.036"
y1="926.69495"
x1="1114.8962"
gradientTransform="matrix(0.91526376,0,0,0.91526376,-623.31504,-541.38903)"
gradientUnits="userSpaceOnUse"
id="linearGradient4819"
xlink:href="#linearGradient4664"
inkscape:collect="always" /><linearGradient
y2="926.69495"
x2="1341.036"
y1="926.69495"
x1="1114.8962"
gradientTransform="matrix(0.91526376,0,0,0.91526376,-623.31504,-541.38903)"
gradientUnits="userSpaceOnUse"
id="linearGradient4821"
xlink:href="#linearGradient4664"
inkscape:collect="always" /><linearGradient
y2="926.69495"
x2="1341.036"
y1="926.69495"
x1="1114.8962"
gradientTransform="matrix(0.91526376,0,0,0.91526376,-623.31504,-541.38903)"
gradientUnits="userSpaceOnUse"
id="linearGradient4823"
xlink:href="#linearGradient4664"
inkscape:collect="always" /><linearGradient
y2="926.69495"
x2="1341.036"
y1="926.69495"
x1="1114.8962"
gradientTransform="matrix(0.91526376,0,0,0.91526376,-623.31504,-541.38903)"
gradientUnits="userSpaceOnUse"
id="linearGradient4825"
xlink:href="#linearGradient4664"
inkscape:collect="always" /><linearGradient
y2="926.69495"
x2="1341.036"
y1="926.69495"
x1="1114.8962"
gradientTransform="matrix(0.91526376,0,0,0.91526376,-623.31504,-541.38903)"
gradientUnits="userSpaceOnUse"
id="linearGradient4827"
xlink:href="#linearGradient4664"
inkscape:collect="always" /><linearGradient
y2="926.69495"
x2="1341.036"
y1="926.69495"
x1="1114.8962"
gradientTransform="matrix(0.91526376,0,0,0.91526376,-623.31504,-541.38903)"
gradientUnits="userSpaceOnUse"
id="linearGradient4829"
xlink:href="#linearGradient4664"
inkscape:collect="always" /><linearGradient
y2="926.69495"
x2="1341.036"
y1="926.69495"
x1="1114.8962"
gradientTransform="matrix(0.91526376,0,0,0.91526376,-623.31504,-541.38903)"
gradientUnits="userSpaceOnUse"
id="linearGradient4831"
xlink:href="#linearGradient4664"
inkscape:collect="always" /><linearGradient
y2="926.69495"
x2="1341.036"
y1="926.69495"
x1="1114.8962"
gradientTransform="matrix(0.91526376,0,0,0.91526376,-623.31504,-541.38903)"
gradientUnits="userSpaceOnUse"
id="linearGradient4833"
xlink:href="#linearGradient4664"
inkscape:collect="always" /><linearGradient
y2="926.69495"
x2="1341.036"
y1="926.69495"
x1="1114.8962"
gradientTransform="matrix(0.91526376,0,0,0.91526376,-623.31504,-541.38903)"
gradientUnits="userSpaceOnUse"
id="linearGradient4835"
xlink:href="#linearGradient4664"
inkscape:collect="always" /><linearGradient
y2="926.69495"
x2="1341.036"
y1="926.69495"
x1="1114.8962"
gradientTransform="matrix(0.91526376,0,0,0.91526376,-623.31504,-541.38903)"
gradientUnits="userSpaceOnUse"
id="linearGradient4837"
xlink:href="#linearGradient4664"
inkscape:collect="always" /><linearGradient
y2="926.69495"
x2="1341.036"
y1="926.69495"
x1="1114.8962"
gradientTransform="matrix(0.91526376,0,0,0.91526376,-623.31504,-541.38903)"
gradientUnits="userSpaceOnUse"
id="linearGradient4839"
xlink:href="#linearGradient4664"
inkscape:collect="always" /><linearGradient
y2="926.69495"
x2="1341.036"
y1="926.69495"
x1="1114.8962"
gradientUnits="userSpaceOnUse"
id="linearGradient4841"
xlink:href="#linearGradient4664"
inkscape:collect="always" /><linearGradient
y2="926.69495"
x2="1341.036"
y1="926.69495"
x1="1114.8962"
gradientUnits="userSpaceOnUse"
id="linearGradient4843"
xlink:href="#linearGradient4664"
inkscape:collect="always" /><linearGradient
y2="926.69495"
x2="1341.036"
y1="926.69495"
x1="1114.8962"
gradientUnits="userSpaceOnUse"
id="linearGradient4845"
xlink:href="#linearGradient4664"
inkscape:collect="always" /><linearGradient
gradientTransform="matrix(0.91526376,0,0,0.91526376,-623.43531,-541.69844)"
y2="926.69495"
x2="1341.036"
y1="926.69495"
x1="1114.8962"
gradientUnits="userSpaceOnUse"
id="linearGradient4847"
xlink:href="#linearGradient4664"
inkscape:collect="always" /><linearGradient
y2="926.69495"
x2="1341.036"
y1="926.69495"
x1="1114.8962"
gradientTransform="matrix(0.91526376,0,0,0.91526376,-623.43531,-541.69844)"
gradientUnits="userSpaceOnUse"
id="linearGradient4849"
xlink:href="#linearGradient4664"
inkscape:collect="always" /><linearGradient
y2="926.69495"
x2="1341.036"
y1="926.69495"
x1="1114.8962"
gradientUnits="userSpaceOnUse"
id="linearGradient4851"
xlink:href="#linearGradient4664"
inkscape:collect="always" /><linearGradient
inkscape:collect="always"
xlink:href="#linearGradient4664"
id="linearGradient4853"
gradientUnits="userSpaceOnUse"
x1="1114.8962"
y1="926.69495"
x2="1341.036"
y2="926.69495" /></defs><sodipodi:namedview
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1"
objecttolerance="10"
gridtolerance="10"
guidetolerance="10"
inkscape:pageopacity="0"
inkscape:pageshadow="2"
inkscape:window-width="1678"
inkscape:window-height="1028"
id="namedview3120"
showgrid="false"
inkscape:zoom="2"
inkscape:cx="234.31834"
inkscape:cy="117.22431"
inkscape:window-x="0"
inkscape:window-y="20"
inkscape:window-maximized="1"
inkscape:current-layer="g3126"
inkscape:snap-bbox="false"
inkscape:object-paths="true"
inkscape:snap-global="false" /><g
id="g3126"
inkscape:groupmode="layer"
inkscape:label="logoeole1"
transform="matrix(1.25,0,0,-1.25,0,113.06667)"><g
id="layer1-0"
inkscape:label="bateau"
transform="matrix(0.8,0,0,-0.8,3263.1972,1017.0386)" /><flowRoot
style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:10.23999977px;line-height:0.01%;font-family:COUTURE;-inkscape-font-specification:'COUTURE Bold';letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.85333335px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
id="flowRoot4297-1"
xml:space="preserve"><flowRegion
id="flowRegion4299-9"
style="stroke-width:0.85333335px"><rect
style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:122.87999725px;font-family:COUTURE;-inkscape-font-specification:'COUTURE Bold';stroke-width:0.72817779px"
y="645.2547"
x="5058.6104"
height="354.98666"
width="928.4267"
id="rect4301-6"
transform="scale(1,-1)" /></flowRegion><flowPara
id="flowPara4303-0"
style="font-size:122.87999725px;line-height:1.25;stroke-width:0.85333335px"> </flowPara></flowRoot><flowRoot
style="font-style:normal;font-weight:normal;font-size:10.23999977px;line-height:0.01%;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.85333335"
id="flowRoot3677-9"
xml:space="preserve"><flowRegion
id="flowRegion3679-9"
style="font-family:sans-serif;stroke-width:0.85333335"><rect
y="-627.65375"
x="5665.9272"
height="85.68248"
width="658.91034"
id="rect3681-4"
style="font-family:sans-serif;stroke-width:0.72817779"
transform="scale(1,-1)" /></flowRegion><flowPara
id="flowPara3683-3"
style="font-size:34.13333511px;line-height:1.25;font-family:sans-serif;stroke-width:0.85333335"> </flowPara></flowRoot><flowRoot
style="font-style:normal;font-weight:normal;font-size:12.80000019px;line-height:0.01%;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.06666672px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
id="flowRoot4653-0"
xml:space="preserve"><flowRegion
id="flowRegion4655-9"
style="font-family:sans-serif;stroke-width:1.06666672px"><rect
y="331.22806"
x="4741.1704"
height="300.37335"
width="348.16"
id="rect4657-1"
transform="scale(1,-1)"
style="font-family:sans-serif;stroke-width:1.13777781px" /></flowRegion><flowPara
id="flowPara4659-0"
style="font-size:34.13333511px;line-height:1.25;font-family:sans-serif;stroke-width:1.06666672px"> </flowPara></flowRoot><g
id="g5567"
transform="translate(-81.066665,-29.439999)"><path
sodipodi:nodetypes="csccccccc"
inkscape:connector-curvature="0"
id="path3238-6-5-8-3-3-8-2-2-0-1-4-0-3-3-0-0-1-3-0-9-0-0-8-1-9"
d="m 223.64477,47.315777 c 0,0 -0.44523,-16.533333 16.29322,-16.533333 h 29.21227 c -5.98037,2.657493 -8.20768,4.9232 -12.19893,9.946666 h -14.85334 c -3.98336,0 -5.89333,2.812907 -5.89333,7.417494 0,0 0.0533,61.678716 -0.0299,61.769596 -3.31946,8.0543 -12.53045,9.67808 -12.53024,9.67808 3.2e-4,-0.56032 0.0107,-48.185703 2.2e-4,-72.278503 z"
style="fill:#4a3f74;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1.06666672" /><g
id="g3276-4-2-8-2-4-8-6-2-1"
transform="matrix(-0.24101235,-0.49825763,0.72298939,-0.16609682,125.97693,71.485057)"
style="fill:#4a3f74;fill-opacity:1"><path
d="M 1.7934243,-0.96970754 C 1.5691998,-0.79961828 1.3331053,-0.8164976 0.87787922,-0.65822353 -1.5218484,-1.3975491 -3.7083721,-2.3133919 -6.1451141,-3.4323038 -12.488224,-6.3457762 -19.225905,-8.5326385 -25.903247,-9.9575472 l -0.247882,-0.2029018 c -0.25648,-0.208217 -0.273442,-0.400249 -0.273442,-0.400249 -0.03366,-0.381227 -0.06736,-0.762456 0.138575,-1.126553 2.283231,-5.891302 5.781359,-11.321624 10.249609,-16.300951 2.100325,-2.689577 4.204242,-5.37796 6.306738,-8.069263 1.9162051,-2.131222 4.1509802,-3.29873 6.9218717,-3.669328 0.033842,0.38312 0.2866489,0.589194 0.542211,0.800166 l 0.033341,0.377443 0.4698516,0.0336 c 0.90753081,-0.310177 1.85073987,-0.242743 2.8272897,0.202131 0.2526397,0.204184 0.2699367,0.4 0.5180682,0.60574 0.2831425,0.588942 0.5687898,1.179944 0.8453212,1.575714 -0.2263115,0.172761 -0.2263115,0.172761 -0.2095992,0.361956 -0.2179629,0.175237 -0.4171267,0.536997 -0.8678447,0.693713 -0.2045063,0.36702 -0.1874599,0.559997 -0.1708311,0.748247 -1.33185938,8.799057 -1.22651547,17.893566 0.074677,27.2596895 0.016798,0.1901409 0.033847,0.3831197 0.2594176,0.3992467 0.2552276,0.2071871 0.2721071,0.3982738 0.5082015,0.4151532 l 0.067266,0.7615089 c 0.1344498,1.5220696 0.2521035,2.8540008 -0.1044352,4.15579 -0.2086962,0.1749594 -0.2086962,0.1749594 -0.1917332,0.3669921 m -2.9158252,-3.8077224 -0.1346165,-1.5239637 -0.3531155,1.301094 c 0.256313,0.2063246 0.4877324,0.2228697 0.4877324,0.2228697"
style="fill:#4a3f74;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1.06666672"
id="path3278-9-83-5-1-8-0-7-4-9"
inkscape:connector-curvature="0" /></g><path
inkscape:connector-curvature="0"
id="path4310-6-3-5-4-1-7-1-6-2-5-3-5-0-5-9"
style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:144px;line-height:125%;font-family:COUTURE;-inkscape-font-specification:'COUTURE Bold';letter-spacing:0px;word-spacing:0px;fill:#4a3f74;fill-opacity:1;stroke:none;stroke-width:1.06666672"
d="m 134.24391,107.15482 c 0,0 4.75958,7.35189 14.30219,12.17301 H 95.663964 c -14.080107,0 -14.036267,-11.86123 -14.036267,-11.86123 V 48.10415 c 0,0 -0.435413,-16.550293 16.303147,-16.550293 h 51.477446 c -5.98027,2.6576 -10.14496,7.057813 -14.13611,12.081173 0,0 -37.304323,-0.01067 -37.25547,0 -4.73792,0 -4.057706,4.517867 -4.057706,4.517867 l 0.07467,54.922883 c 0,4.34826 3.99584,4.07904 3.99584,4.07904"
sodipodi:nodetypes="cccccccccccc" /><g
transform="matrix(0.81587728,0,0,-0.81587728,-701.65987,1291.3573)"
id="g3550-3-3-6-3-7-9-3-8-0-2-8-8-4-4"><g
transform="translate(-43.249218,364.84503)"
id="g3586-3-0-0-2-0-8-5-9-6-2-3-7-1-7"><g
transform="matrix(1.0404262,0,0,1.0404262,-71.883772,-41.905465)"
id="g3402-8-5-9-6-1"><path
sodipodi:nodetypes="csssccsccc"
inkscape:connector-curvature="0"
id="path3359-6-74-0-1-9-6-9-6-3-7-6-2-3-6-2-7"
d="m 1120.3633,1119.4763 c 0,0 -3.5568,20.4619 11.9327,27.768 7.2005,3.396 12.9255,3.904 20.905,0.8664 5.0224,-1.9118 9.552,-6.6569 11.4611,-11.8215 1.9093,-5.1645 0.2732,-11.4417 -4.7449,-16.3195 -1.7695,7.8156 -3.6493,14.1069 -10.416,17.611 -4.0225,2.0444 -8.111,1.7045 -12.1907,-0.318 -4.0796,-2.0228 -7.2085,-6.8927 -8.4528,-11.7715 0,0 -2.5254,-9.0737 7.1765,-23.942 -8.0225,3.3894 -14.2234,9.009 -15.6709,17.9271 z"
style="color:#000000;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:normal;font-family:Sans;-inkscape-font-specification:Sans;text-indent:0;text-align:start;text-decoration:none;text-decoration-line:none;letter-spacing:normal;word-spacing:normal;text-transform:none;writing-mode:lr-tb;direction:ltr;baseline-shift:baseline;text-anchor:start;display:inline;overflow:visible;visibility:visible;fill:#4a3f74;fill-opacity:1;stroke:none;stroke-width:23.74341393;marker:none;enable-background:accumulate" /><path
sodipodi:nodetypes="cccscccccssscccsscc"
inkscape:connector-curvature="0"
id="path3359-8-8-4-6-7-8-1-6-3-1-1-8-8-2-0-1-1"
d="m 1171.7557,1165.1847 c 9.0667,-5.9443 15.9456,-15.1034 18.3323,-26.9986 l 0.036,-0.2122 c 1.845,-9.4715 0.083,-19.4824 -4.7861,-27.8592 -4.9017,-8.4311 -13.4688,-15.3007 -24.2922,-16.6144 l -0.031,-0.011 c -6.6322,-0.7981 -13.9274,1.959 -19.0297,6.6892 -5.6838,6.7137 -8.3619,10.9192 -8.2233,20.7045 4.8592,-6.4111 17.1623,-12.7819 25.8393,-11.9272 5.6097,0.6749 9.6503,3.8646 12.5032,8.7716 2.8528,4.907 3.9787,11.4322 2.8727,16.9447 -3.5229,17.5582 -23.303,26.3651 -40.2867,21.4627 -23.5286,-6.7915 -32.2906,-30.7698 -22.6684,-52.8538 12.2398,-19.8825 34.3524,-28.7354 62.8183,-24.4779 -9.0335,-9.4406 -24.345,-8.1228 -24.345,-8.1228 -14.2495,-1.1222 -40.5898,6.8652 -50.3766,25.3512 -14.2965,27.0046 -1.9507,65.6469 30.7149,75.076 13.991,4.0384 29.2641,1.7151 40.9212,-5.9275 z"
style="color:#000000;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:normal;font-family:Sans;-inkscape-font-specification:Sans;text-indent:0;text-align:start;text-decoration:none;text-decoration-line:none;letter-spacing:normal;word-spacing:normal;text-transform:none;writing-mode:lr-tb;direction:ltr;baseline-shift:baseline;text-anchor:start;display:inline;overflow:visible;visibility:visible;fill:#f1ca13;fill-opacity:1;stroke:none;stroke-width:23.74341393;marker:none;enable-background:accumulate" /></g></g></g><g
transform="matrix(0.84351752,-0.54896555,0.51910062,0.8920468,307.56423,30.76431)"
id="g3240-2-1-4-4-7-8-0-7-9-2-5-6-9-2-7-6"><path
sodipodi:nodetypes="ccsczcccccsccscccss"
inkscape:connector-curvature="0"
id="path3242-2-6-6-9-6-6-7-4-5-2-2-3-5-0-0-6"
d="M -51.831427,47.326395 C -59.895364,42.363849 -64.893573,35.32236 -66.817364,26.26606 -68.739856,17.209458 -65.984036,8.7300195 -60.40346,-0.33818968 -54.49654,-9.9366965 -50.210652,-13.255154 -41.97748,-15.484843 -27.515019,-19.70367 -7.9836824,-4.8218392 -1.8943856,-0.97576512 4.1949112,2.8703089 6.2927392,4.3529194 17.480784,9.9551429 11.932455,12.839158 3.3756816,11.947763 0.82595055,10.996623 -10.961104,6.3524792 -21.140137,-4.7136447 -35.966514,-5.1033549 c -6.512982,0.8784234 -8.76316,2.5650242 -12.915824,8.9552297 l 43.5206803,26.7826232 -3.0155866,4.900207 c -5.3936837,8.764517 -12.7311517,13.673383 -20.1799837,15.890713 -9.204896,1.353089 -16.931596,-0.298964 -23.274199,-4.099023 z m 4.660181,-7.983573 c 4.814882,2.963078 9.488296,3.783934 14.043484,2.454391 4.551634,-1.331826 9.427718,-4.109627 12.783662,-9.471337 L -53.638108,11.836745 c -3.208293,5.274169 -3.790195,10.333683 -2.479019,15.483935 1.312201,5.148586 4.29059,9.157276 8.945881,12.022142 z"
style="fill:#4a3f74;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.83779979" /></g></g></g><g
inkscape:groupmode="layer"
id="layer1"
inkscape:label="bateau"
transform="translate(0,-1486.9333)" /><g
inkscape:groupmode="layer"
id="layer2"
inkscape:label="Calque1"
transform="translate(0,-1486.9333)"><flowRoot
xml:space="preserve"
id="flowRoot4297"
style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:12.80000019px;line-height:0.01%;font-family:COUTURE;-inkscape-font-specification:'COUTURE Bold';letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.06666672px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"><flowRegion
id="flowRegion4299"
style="stroke-width:1.06666672px"><rect
id="rect4301"
width="1160.5333"
height="443.73334"
x="2244.2666"
y="2077.8667"
style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:153.6000061px;font-family:COUTURE;-inkscape-font-specification:'COUTURE Bold';stroke-width:1.13777781px" /></flowRegion><flowPara
id="flowPara4303"
style="font-size:153.6000061px;line-height:1.25;stroke-width:1.06666672px"> </flowPara></flowRoot><flowRoot
xml:space="preserve"
id="flowRoot3677"
style="font-style:normal;font-weight:normal;font-size:12.80000019px;line-height:0.01%;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.06666672"><flowRegion
id="flowRegion3679"
style="font-family:sans-serif;stroke-width:1.06666672"><rect
id="rect3681"
width="823.63794"
height="107.1031"
x="3003.4126"
y="486.73111"
style="font-family:sans-serif;stroke-width:1.13777781" /></flowRegion><flowPara
id="flowPara3683"
style="font-size:42.66666794px;line-height:1.25;font-family:sans-serif;stroke-width:1.06666672"> </flowPara></flowRoot><flowRoot
xml:space="preserve"
id="flowRoot4653"
style="font-style:normal;font-weight:normal;font-size:12.80000019px;line-height:0.01%;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.06666672px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"><flowRegion
id="flowRegion4655"
style="font-family:sans-serif;stroke-width:1.06666672px"><rect
id="rect4657"
width="435.20001"
height="375.46667"
x="1847.4667"
y="1685.3334"
style="font-family:sans-serif;stroke-width:1.13777781px" /></flowRegion><flowPara
id="flowPara4659"
style="font-size:42.66666794px;line-height:1.25;font-family:sans-serif;stroke-width:1.06666672px"> </flowPara></flowRoot><g
transform="matrix(3.7418697,0,0,3.7418697,-7508.261,-6259.3333)"
style="font-style:normal;font-weight:normal;font-size:40px;line-height:125%;font-family:Sans;letter-spacing:0px;word-spacing:0px;fill:#4a3f74;fill-opacity:1;stroke:none"
id="flowRoot3442" /></g></svg>

After

Width:  |  Height:  |  Size: 53 KiB

View File

@ -0,0 +1,318 @@
%!PS-Adobe-3.0 EPSF-3.0
%%Creator: cairo 1.14.8 (http://cairographics.org)
%%CreationDate: Tue May 16 12:15:46 2017
%%Pages: 1
%%DocumentData: Clean7Bit
%%LanguageLevel: 2
%%BoundingBox: 0 -1 1660 851
%%EndComments
%%BeginProlog
save
50 dict begin
/q { gsave } bind def
/Q { grestore } bind def
/cm { 6 array astore concat } bind def
/w { setlinewidth } bind def
/J { setlinecap } bind def
/j { setlinejoin } bind def
/M { setmiterlimit } bind def
/d { setdash } bind def
/m { moveto } bind def
/l { lineto } bind def
/c { curveto } bind def
/h { closepath } bind def
/re { exch dup neg 3 1 roll 5 3 roll moveto 0 rlineto
0 exch rlineto 0 rlineto closepath } bind def
/S { stroke } bind def
/f { fill } bind def
/f* { eofill } bind def
/n { newpath } bind def
/W { clip } bind def
/W* { eoclip } bind def
/BT { } bind def
/ET { } bind def
/pdfmark where { pop globaldict /?pdfmark /exec load put }
{ globaldict begin /?pdfmark /pop load def /pdfmark
/cleartomark load def end } ifelse
/BDC { mark 3 1 roll /BDC pdfmark } bind def
/EMC { mark /EMC pdfmark } bind def
/cairo_store_point { /cairo_point_y exch def /cairo_point_x exch def } def
/Tj { show currentpoint cairo_store_point } bind def
/TJ {
{
dup
type /stringtype eq
{ show } { -0.001 mul 0 cairo_font_matrix dtransform rmoveto } ifelse
} forall
currentpoint cairo_store_point
} bind def
/cairo_selectfont { cairo_font_matrix aload pop pop pop 0 0 6 array astore
cairo_font exch selectfont cairo_point_x cairo_point_y moveto } bind def
/Tf { pop /cairo_font exch def /cairo_font_matrix where
{ pop cairo_selectfont } if } bind def
/Td { matrix translate cairo_font_matrix matrix concatmatrix dup
/cairo_font_matrix exch def dup 4 get exch 5 get cairo_store_point
/cairo_font where { pop cairo_selectfont } if } bind def
/Tm { 2 copy 8 2 roll 6 array astore /cairo_font_matrix exch def
cairo_store_point /cairo_font where { pop cairo_selectfont } if } bind def
/g { setgray } bind def
/rg { setrgbcolor } bind def
/d1 { setcachedevice } bind def
%%EndProlog
%%BeginSetup
%%BeginResource: font DejaVuSans-Bold
11 dict begin
/FontType 42 def
/FontName /DejaVuSans-Bold def
/PaintType 0 def
/FontMatrix [ 1 0 0 1 0 0 ] def
/FontBBox [ 0 0 0 0 ] def
/Encoding 256 array def
0 1 255 { Encoding exch /.notdef put } for
Encoding 32 /space put
/CharStrings 2 dict dup begin
/.notdef 0 def
/space 1 def
end readonly def
/sfnts [
<000100000009008000030010637674203eb93108000000e8000002546670676d5b026bf00000
033c000000ac676c7966e2f9cb840000009c0000004c686561640e24be09000003e800000036
686865610eaf07730000042000000024686d74780796006600000444000000086c6f63610000
00980000044c0000000c6d6178700647062d0000045800000020707265707c61a2e700000478
000007a700020066fe96046605a400030007001fbc00040126000000060126b6010805890204
002fc4d4ec310010d4ecd4ec301311211125211121660400fc73031bfce5fe96070ef8f27206
2900000001660133016600bc00e90000013d00a200fa031f00020002006601660002000200ac
015400ec00bc006201660181048501540166016d04a400020166007f04cd0000000201330062
00710000002504a401bc00ba00e500660181018d0548055a0166016d000000000002000200f6
05c301f0053902390058046d043d04b2048104b2016601750466048100b00466043902d1049c
047b04cf047b005801330166014c0166014c000200ac009a014a0123009a029a014401190144
02cd00c100000166013f019a013b05cb05cb00d500d5015000ac00ac0077020a01c701f2012f
015801b2012300f600f6011f012f0135023501ee01e70133009800d10358050a009a008f0112
009800bc00cd00e500e500f2007304000166008f05d5022b05d500c300e100d700e50000006a
01020000001d032d05d505d505f000a8006a00ec00e1010205d506140721046602f800ec0183
02a602f80123010201020112011f031f005e03cd046004c7048900ec01bc00ba01020333031f
03420333035c0112011f05d5019a009a00e106660179046004600460047b000000ec02c302b8
02cd00be00dd00d50000006a025c027b029a00dd01ae01ba01120000008501ae04600762041b
009a069a045800ee009a029a00d102cd019a015005cb05cb008b008b063100f6040600f0034c
016004a800c10000002505c101000121074a06120096014a078300a800000337007b00140000
00c9010005c105c105c105c101000108061d00960427039e00ec0102027d0133009800d10358
017900cd02390362009c009c009c009301b8009300b80073000014000326b707060504030201
002c2010b002254964b040515820c859212d2cb002254964b040515820c859212d2c20100720
b00050b00d7920b8ffff5058041b0559b0051cb0032508b0042523e120b00050b00d7920b8ff
ff5058041b0559b0051cb0032508e12d2c4b505820b80128454459212d2cb002254560442d2c
4b5358b00225b0022545445921212d2c45442d2cb00225b0022549b00525b005254960b02063
68208a108a233a8a10653a2d0001000000025eb8b54203fc5f0f3cf5001f080000000000d3d9
0a2000000000d3d90a20f772fcae0fcd096500010008000000010000000000010000076dfe1d
00001021f772f9320fcd00010000000000000000000000000000000204cd006602c900000000
00000000004c0000004c000100000002034e002b0078000c0002001000400008000005ed0221
0008000441840280012600fe000301250011000301240121003a0005012400fa000301230016
000301220121003a0005012200fe00030121003a0003012000fa0003011f00bb0003011e0064
0003011d00fe0003011c00190003011b001e0003011a00fe0003011900fe0003011800fe0003
011700fe0003011600fe000301150114000e0005011500fe00030114000e0003011300fe0003
011200fe0003010f010e007d0005010f00fe0003010e007d0003010d010c008c0005010d00fe
0003010d00c00004010c010b00590005010c008c0003010c00800004010b010a00260005010b
00590003010b00400004010a00260003010900fe0003010800fe00030107000c000301070080
00040106b2972e054113010600fa0003010500fa0003010400fe0003010300190003010200fa
0003010100fa0003010040ff7d03ff3e03fefe03fcfb2c05fcfe03fb2c03fafe03f9f84705f9
7d03f84703f7fa03f6fe03f5fe03f4fe03f3bb03f2fe03f1fe03f0fe03ef1e03eefe03edec0a
05edfe03ec0a03ec4004ebea0a05eb3203ea0a03e9fa03e8911605e8fe03e7fa03e6fa03e591
1605e5fe03e4fe03e3fe03e2fe03e1fe03e0fe03dffe03defa03dddc1805dd6403dc1803dba0
1e05db6403dad92505dafa03d92503d8d12505d8fa03d7d61405d71603d6d51005d61403d510
03d4d30b05d42003d30b03d2d12505d2fa03d1911605d12503d0940c05d02303cfce1405cf26
03cecd1205ce1403cd1203cc911605cc1d03cb1403cac9bb05cafe03c9c85d05c9bb03c98004
c840ffc72505c85d03c84004c72503c6fe03c56403c4901005c4fe03c31c03c2fe03c1fe03c0
bf3a05c0fa03bfad1b05bf3a03bebd1a05be3203bdbc1105bd1a03bcbb0f05bc1103bbba0c05
bb0f03ba0c03b9911605b9fe03b8fe03b71503b61203b5fe03b4fe03b3fe03b21703b11903b0
1603afad1b05affa03aead1b05aefa03ad911605ad1b03ac911605ac7d03abfe03aa2603a9fe
03a8fe03a7fe03a6fe03a50a03a4fe03a3a20e05a3fe03a20e03a24004a1a01e05a1fa03a091
1605a01e039f9116059ffa039e940c059e1c039dfe039c9bbb059cfe039b9a5d059bbb039b80
049a8f25059a5d039a400499fe0398972e0598fe03972e0396911605961e40ff0395940c0595
2003940c0393911605934b039291160592fe03919010059116039010038f25038efe038dfe03
8cfe038bfe038afe0389fe038887250588fe0387250386fe0385fe0384320383960382fe0381
fe038019037f0a037efe037dfe037cfe037bfa037afa0379fe037776a60577fe0376a6037574
1b0575fa03741b0373fa03727d0371fe03706f2c056f2c036efa036dfa036cfa036bfe036afe
0369fe0368630c0568320367fe0366320365640a0565fe03640a0364400463620a05630c0362
0a0361601505619603600111056015035f0a035efe035dfe035c0111055cfe035b5a1b055bfe
035a0111055a1b0359fe0358fa0357fe035601110540ff56fe0355fe03541e03531403525119
0552fa0351011105511903504f190550fa034f4e11054f19034e11034d1e034c4b14054c1503
4b4a11054b14034a490e054a1103490e0348fa034746140547150346140345fa0344430e0544
0f03430e034241250542fa0341011105412503403f0f0540fe033f3e0e053f0f033e0e033d3c
0d053d16033c0d033b64033afe0339140338fe0337130336351a0536250335341405351a0335
c004340a0d0534140334800433320c05331403334004320c033130a60531fe033001110530a6
032f0c032e13032d2c3a052dfa032c1525052c3a032b64032a640329fe032815032717110527
1e03262003251e0324231105402b241e0323110322000d0522fa03210f032140042014031f0a
031e1e031d1c19051d25031c0f13051c19031cb801004091041b0d031a194b051a7d03190111
05194b0318fe031711031615250516fa031501110515250314640313110312fe031101110511
fe031064030f0e10050f13030fc0040e10030e80040d0111050dfa030c32030b0a0d050b1603
0b80040a0d030a400409fe0308fe0307fe0306050a0506fe03050a0305400404fa0303640302
01110502fe0301000d05011103000d0301b80164858d012b2b2b2b2b2b2b2b2b2b2b2b2b2b2b
2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b
2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b
2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b
2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b
2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b002b2b2b2b2b
2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b
2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b
2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b
2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b
2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b
2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b1d0000>
] def
/f-0-0 currentdict end definefont pop
%%EndResource
%%BeginResource: font DejaVuSans
11 dict begin
/FontType 42 def
/FontName /DejaVuSans def
/PaintType 0 def
/FontMatrix [ 1 0 0 1 0 0 ] def
/FontBBox [ 0 0 0 0 ] def
/Encoding 256 array def
0 1 255 { Encoding exch /.notdef put } for
Encoding 32 /space put
/CharStrings 2 dict dup begin
/.notdef 0 def
/space 1 def
end readonly def
/sfnts [
<0001000000090080000300106376742000691d39000000e0000001fe6670676d7134766a0000
02e0000000ab676c7966f9f1ddd70000009c00000044686561640d13be360000038c00000036
686865610d9f076f000003c400000024686d747807580066000003e8000000086c6f63610000
0088000003f00000000c6d617870046f0671000003fc00000020707265703b07f1000000041c
0000056800020066fe96046605a400030007001a400c04fb0006fb0108057f0204002fc4d4ec
310010d4ecd4ec301311211125211121660400fc73031bfce5fe96070ef8f2720629013500b8
00cb00cb00c100aa009c01a600b800660000007100cb00a002b20085007500b800c301cb0189
022d00cb00a600f000d300aa008700cb03aa0400014a003300cb000000d9050200f4015400b4
009c01390114013907060400044e04b4045204b804e704cd0037047304cd04600473013303a2
055605a60556053903c5021200c9001f00b801df007300ba03e9033303bc0444040e00df03cd
03aa00e503aa0404000000cb008f00a4007b00b80014016f007f027b0252008f00c705cd009a
009a006f00cb00cd019e01d300f000ba018300d5009803040248009e01d500c100cb00f60083
0354027f00000333026600d300c700a400cd008f009a0073040005d5010a00fe022b00a400b4
009c00000062009c0000001d032d05d505d505d505f0007f007b005400a406b80614072301d3
00b800cb00a601c301ec069300a000d3035c037103db0185042304a80448008f013901140139
0360008f05d5019a0614072306660179046004600460047b009c00000277046001aa00e90460
0762007b00c5007f027b000000b4025205cd006600bc00660077061000cd013b01850389008f
007b0000001d00cd074a042f009c009c0000077d006f0000006f0335006a006f007b00ae00b2
002d0396008f027b00f600830354063705f6008f009c04e10266008f018d02f600cd03440029
006604ee00730000140000960000b707060504030201002c2010b002254964b040515820c859
212d2cb002254964b040515820c859212d2c20100720b00050b00d7920b8ffff5058041b0559
b0051cb0032508b0042523e120b00050b00d7920b8ffff5058041b0559b0051cb0032508e12d
2c4b505820b0fd454459212d2cb002254560442d2c4b5358b00225b0022545445921212d2c45
442d2cb00225b0022549b00525b005254960b0206368208a108a233a8a10653a2d0000010000
00025eb862af5a3e5f0f3cf5001f080000000000d3d90a2c00000000d3d90a2cf7d6fc4c0e59
09dc00000008000000010000000000010000076dfe1d00000efef7d6fa510e59000100000000
00000000000000000000000204cd0066028b0000000000000000004400000044000100000002
0354002b0068000c000200100099000800000415021600080004b8028040fffbfe03fa1403f9
2503f83203f79603f60e03f5fe03f4fe03f32503f20e03f19603f02503ef8a4105effe03ee96
03ed9603ecfa03ebfa03eafe03e93a03e84203e7fe03e63203e5e45305e59603e48a4105e453
03e3e22f05e3fa03e22f03e1fe03e0fe03df3203de1403dd9603dcfe03db1203da7d03d9bb03
d8fe03d68a4105d67d03d5d44705d57d03d44703d3d21b05d3fe03d21b03d1fe03d0fe03cffe
03cefe03cd9603cccb1e05ccfe03cb1e03ca3203c9fe03c6851105c61c03c51603c4fe03c3fe
03c2fe03c1fe03c0fe03bffe03befe03bdfe03bcfe03bbfe03ba1103b9862505b9fe03b8b7bb
05b8fe03b7b65d05b7bb03b78004b6b52505b65d40ff03b64004b52503b4fe03b39603b2fe03
b1fe03b0fe03affe03ae6403ad0e03acab2505ac6403abaa1205ab2503aa1203a98a4105a9fa
03a8fe03a7fe03a6fe03a51203a4fe03a3a20e05a33203a20e03a16403a08a4105a096039ffe
039e9d0c059efe039d0c039c9b19059c64039b9a10059b19039a1003990a0398fe0397960d05
97fe03960d03958a410595960394930e05942803930e0392fa039190bb0591fe03908f5d0590
bb039080048f8e25058f5d038f40048e25038dfe038c8b2e058cfe038b2e038a8625058a4103
89880b05891403880b03878625058764038685110586250385110384fe038382110583fe0382
110381fe0380fe037ffe0340ff7e7d7d057efe037d7d037c64037b5415057b25037afe0379fe
03780e03770c03760a0375fe0374fa0373fa0372fa0371fa0370fe036ffe036efe036c21036b
fe036a1142056a530369fe03687d036711420566fe0365fe0364fe0363fe0362fe03613a0360
fa035e0c035dfe035bfe035afe0359580a0559fa03580a035716190557320356fe0355541505
55420354150353011005531803521403514a130551fe03500b034ffe034e4d10054efe034d10
034cfe034b4a13054bfe034a4910054a1303491d0d05491003480d0347fe0346960345960344
fe0343022d0543fa0342bb03414b0340fe033ffe033e3d12053e14033d3c0f053d12033c3b0d
053c40ff0f033b0d033afe0339fe033837140538fa033736100537140336350b05361003350b
03341e03330d0332310b0532fe03310b03302f0b05300d032f0b032e2d09052e10032d09032c
32032b2a25052b64032a2912052a25032912032827250528410327250326250b05260f03250b
0324fe0323fe03220f03210110052112032064031ffa031e1d0d051e64031d0d031c1142051c
fe031bfa031a42031911420519fe031864031716190517fe031601100516190315fe0314fe03
13fe031211420512fe0311022d05114203107d030f64030efe030d0c16050dfe030c0110050c
16030bfe030a100309fe0308022d0508fe030714030664030401100504fe03401503022d0503
fe0302011005022d0301100300fe0301b80164858d012b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b
2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b
2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b
2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b
2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b002b2b
2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b
2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b
2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b
2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b
2b2b2b1d00>
] def
/f-1-0 currentdict end definefont pop
%%EndResource
%%EndSetup
%%Page: 1 1
%%BeginPageSetup
%%PageBoundingBox: 0 -1 1660 851
%%EndPageSetup
q 0 -1 1660 852 rectclip q
0 g
BT
115.200005 0 0 115.200005 1659.494566 0.0000456218 Tm
/f-0-0 1 Tf
( )Tj
ET
0.945098 0.792157 0.0745098 rg
158.102 787.356 m 160.379 829.535 l 190.289 799.809 l h
158.102 787.356 m f
21.06434 w
0 J
0 j
[] 0.0 d
4 M q 0.380357 -1 -0.775998 -0.295156 0 1266.965088 cm
471.528 27.38 m 435.436 6.755 l 471.344 -14.188 l h
471.528 27.38 m S Q
58.695 757.856 m 80.516 721.688 l 39.07 729.465 l h
58.695 757.856 m f
18.464385 w
q -1 0.699805 0.543047 0.775998 0 1266.965088 cm
-278.556 -404.865 m -310.193 -422.942 l -278.719 -441.304 l h
-278.556 -404.865 m S Q
10.25 623.512 m 41.414 613.496 l 14.113 596.141 l h
10.25 623.512 m f
17.112694 w
q -1 -0.121862 -0.110002 0.811158 0 1266.965088 cm
75.757 -781.871 m 46.436 -798.623 l 75.608 -815.637 l h
75.757 -781.871 m S Q
101.438 509.071 m 70.375 498.742 l 82.148 528.875 l h
101.438 509.071 m f
12.576204 w
q 1 0.937579 0.772771 -0.802194 0 1266.965088 cm
-330.318 558.711 m -351.867 546.4 l -330.429 533.894 l h
-330.318 558.711 m S Q
0.290196 0.247059 0.454902 rg
161.094 604.578 m 161.094 604.578 152.773 561.961 192.316 543.309 c 210.699
534.641 225.316 533.344 245.688 541.098 c 258.508 545.977 270.074 558.094
274.949 571.278 c 279.824 584.461 275.645 600.489 262.836 612.942 c 258.316
592.989 253.516 576.926 236.242 567.981 c 225.973 562.762 215.535 563.629
205.117 568.793 c 194.703 573.957 186.715 586.391 183.539 598.844 c 183.539
598.844 177.09 622.012 201.859 659.969 c 182.059 644.739 164.789 627.348
161.094 604.578 c h
161.094 604.578 m f
0.945098 0.792157 0.0745098 rg
293.059 497.508 m 316.207 512.684 333.766 536.067 339.859 566.434 c 339.953
566.977 l 344.664 591.156 340.164 616.715 327.734 638.102 c 315.219 659.625
293.348 677.164 265.715 680.52 c 265.637 680.531 l 248.703 682.571 230.078
675.531 217.055 663.453 c 202.543 646.313 195.703 635.578 196.059 610.594
c 208.465 626.961 239.875 643.227 262.027 641.047 c 276.348 639.321 286.664
631.18 293.949 618.653 c 301.23 606.125 304.105 589.465 301.281 575.391
c 292.289 530.563 241.789 508.082 198.43 520.598 c 138.359 537.934 116.312
599.153 133.5 657.778 c 160.254 711.746 268.816 729.453 286.945 734.754
c 280.277 744.656 213.539 742.957 213.539 742.957 c 180.559 734.364 130.008
728.141 104.754 682.086 c 53.828 589.199 105.188 506.442 188.582 482.371
c 224.301 472.059 263.293 477.992 293.055 497.504 c h
293.059 497.508 m f
0 g
BT
32.000001 0 0 32.000001 1361.895445 368.012451 Tm
/f-1-0 1 Tf
( )Tj
ET
Q Q
showpage
%%Trailer
end restore
%%EOF

View File

@ -0,0 +1,779 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
xmlns:osb="http://www.openswatchbook.org/uri/2009/osb"
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:xlink="http://www.w3.org/1999/xlink"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
id="svg3118"
version="1.1"
inkscape:version="0.92.1 r15371"
width="533.33331"
height="533.33331"
xml:space="preserve"
sodipodi:docname="Logo EOLEienne.svg"><metadata
id="metadata3124"><rdf:RDF><cc:Work
rdf:about=""><dc:format>image/svg+xml</dc:format><dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" /><dc:title /></cc:Work></rdf:RDF></metadata><defs
id="defs3122"><marker
inkscape:stockid="Arrow1Lend"
orient="auto"
refY="0"
refX="0"
id="Arrow1Lend"
style="overflow:visible"><path
id="path4626"
d="M -10.666667,0 -14.933333,4.2666667 0,0 -14.933333,-4.2666667 Z"
style="fill-rule:evenodd;stroke:#000000;stroke-width:0.85333335pt"
inkscape:connector-curvature="0" /></marker><linearGradient
id="linearGradient4664"
osb:paint="solid"><stop
style="stop-color:#ffffff;stop-opacity:1;"
offset="0"
id="stop4666" /></linearGradient><clipPath
clipPathUnits="userSpaceOnUse"
id="clipPath3132"><path
d="M 0,600 H 800 V 0 H 0 Z"
id="path3134"
inkscape:connector-curvature="0" /></clipPath><clipPath
clipPathUnits="userSpaceOnUse"
id="clipPath3248"><path
d="M 205.131,405.857 H 559.926 V 579.858 H 205.131 Z"
id="path3250"
inkscape:connector-curvature="0" /></clipPath><clipPath
clipPathUnits="userSpaceOnUse"
id="clipPath3260"><path
d="M 0,600 H 800 V 0 H 0 Z"
id="path3262"
inkscape:connector-curvature="0" /></clipPath><clipPath
clipPathUnits="userSpaceOnUse"
id="clipPath3288"><path
d="M 205.131,405.857 H 559.926 V 579.858 H 205.131 Z"
id="path3290"
inkscape:connector-curvature="0" /></clipPath><clipPath
clipPathUnits="userSpaceOnUse"
id="clipPath3304"><path
d="M 0,600 H 800 V 0 H 0 Z"
id="path3306"
inkscape:connector-curvature="0" /></clipPath><linearGradient
inkscape:collect="always"
xlink:href="#linearGradient4664-9"
id="linearGradient4668-8"
x1="1114.8962"
y1="926.69495"
x2="1341.036"
y2="926.69495"
gradientUnits="userSpaceOnUse" /><linearGradient
id="linearGradient4664-9"
osb:paint="solid"><stop
style="stop-color:#ffffff;stop-opacity:1;"
offset="0"
id="stop4666-6" /></linearGradient><linearGradient
inkscape:collect="always"
xlink:href="#linearGradient4664-9"
id="linearGradient4676-2"
gradientUnits="userSpaceOnUse"
x1="1114.8962"
y1="926.69495"
x2="1341.036"
y2="926.69495" /><linearGradient
id="linearGradient4706"
osb:paint="solid"><stop
style="stop-color:#ffffff;stop-opacity:1;"
offset="0"
id="stop4708" /></linearGradient><linearGradient
id="linearGradient4711"
osb:paint="solid"><stop
style="stop-color:#ffffff;stop-opacity:1;"
offset="0"
id="stop4713" /></linearGradient><linearGradient
id="linearGradient4716"
osb:paint="solid"><stop
style="stop-color:#ffffff;stop-opacity:1;"
offset="0"
id="stop4718" /></linearGradient><linearGradient
id="linearGradient4721"
osb:paint="solid"><stop
style="stop-color:#ffffff;stop-opacity:1;"
offset="0"
id="stop4723" /></linearGradient><linearGradient
id="linearGradient4726"
osb:paint="solid"><stop
style="stop-color:#ffffff;stop-opacity:1;"
offset="0"
id="stop4728" /></linearGradient><linearGradient
id="linearGradient4731"
osb:paint="solid"><stop
style="stop-color:#ffffff;stop-opacity:1;"
offset="0"
id="stop4733" /></linearGradient><linearGradient
id="linearGradient4736"
osb:paint="solid"><stop
style="stop-color:#ffffff;stop-opacity:1;"
offset="0"
id="stop4738" /></linearGradient><linearGradient
id="linearGradient4741"
osb:paint="solid"><stop
style="stop-color:#ffffff;stop-opacity:1;"
offset="0"
id="stop4743" /></linearGradient><linearGradient
id="linearGradient4746"
osb:paint="solid"><stop
style="stop-color:#ffffff;stop-opacity:1;"
offset="0"
id="stop4748" /></linearGradient><linearGradient
id="linearGradient4751"
osb:paint="solid"><stop
style="stop-color:#ffffff;stop-opacity:1;"
offset="0"
id="stop4753" /></linearGradient><linearGradient
inkscape:collect="always"
xlink:href="#linearGradient4664-9-8"
id="linearGradient4896-1"
gradientUnits="userSpaceOnUse"
x1="1114.8962"
y1="926.69495"
x2="1341.036"
y2="926.69495" /><linearGradient
id="linearGradient4664-9-8"
osb:paint="solid"><stop
style="stop-color:#ffffff;stop-opacity:1;"
offset="0"
id="stop4666-6-7" /></linearGradient><linearGradient
inkscape:collect="always"
xlink:href="#linearGradient4664-9-8"
id="linearGradient4880-2"
gradientUnits="userSpaceOnUse"
x1="1114.8962"
y1="926.69495"
x2="1341.036"
y2="926.69495" /><linearGradient
id="linearGradient5022"
osb:paint="solid"><stop
style="stop-color:#ffffff;stop-opacity:1;"
offset="0"
id="stop5024" /></linearGradient><linearGradient
id="linearGradient5027"
osb:paint="solid"><stop
style="stop-color:#ffffff;stop-opacity:1;"
offset="0"
id="stop5029" /></linearGradient><linearGradient
id="linearGradient5032"
osb:paint="solid"><stop
style="stop-color:#ffffff;stop-opacity:1;"
offset="0"
id="stop5034" /></linearGradient><linearGradient
id="linearGradient5037"
osb:paint="solid"><stop
style="stop-color:#ffffff;stop-opacity:1;"
offset="0"
id="stop5039" /></linearGradient><linearGradient
id="linearGradient5042"
osb:paint="solid"><stop
style="stop-color:#ffffff;stop-opacity:1;"
offset="0"
id="stop5044" /></linearGradient><linearGradient
id="linearGradient5047"
osb:paint="solid"><stop
style="stop-color:#ffffff;stop-opacity:1;"
offset="0"
id="stop5049" /></linearGradient><linearGradient
id="linearGradient5052"
osb:paint="solid"><stop
style="stop-color:#ffffff;stop-opacity:1;"
offset="0"
id="stop5054" /></linearGradient><linearGradient
id="linearGradient5057"
osb:paint="solid"><stop
style="stop-color:#ffffff;stop-opacity:1;"
offset="0"
id="stop5059" /></linearGradient><linearGradient
id="linearGradient5062"
osb:paint="solid"><stop
style="stop-color:#ffffff;stop-opacity:1;"
offset="0"
id="stop5064" /></linearGradient><linearGradient
id="linearGradient5067"
osb:paint="solid"><stop
style="stop-color:#ffffff;stop-opacity:1;"
offset="0"
id="stop5069" /></linearGradient><linearGradient
y2="926.69495"
x2="1341.036"
y1="926.69495"
x1="1114.8962"
gradientUnits="userSpaceOnUse"
id="linearGradient5090"
xlink:href="#linearGradient4664-9-8"
inkscape:collect="always" /><linearGradient
inkscape:collect="always"
xlink:href="#linearGradient4664-9-8"
id="linearGradient3289"
gradientUnits="userSpaceOnUse"
x1="1114.8962"
y1="926.69495"
x2="1341.036"
y2="926.69495" /><linearGradient
inkscape:collect="always"
xlink:href="#linearGradient4664-9-8"
id="linearGradient3291"
gradientUnits="userSpaceOnUse"
x1="1114.8962"
y1="926.69495"
x2="1341.036"
y2="926.69495" /><linearGradient
inkscape:collect="always"
xlink:href="#linearGradient4664-9-8"
id="linearGradient3293"
gradientUnits="userSpaceOnUse"
x1="1114.8962"
y1="926.69495"
x2="1341.036"
y2="926.69495" /><linearGradient
inkscape:collect="always"
xlink:href="#linearGradient4664-9-8"
id="linearGradient3309"
gradientUnits="userSpaceOnUse"
x1="1114.8962"
y1="926.69495"
x2="1341.036"
y2="926.69495" /><linearGradient
inkscape:collect="always"
xlink:href="#linearGradient4664-9-8"
id="linearGradient3315"
gradientUnits="userSpaceOnUse"
x1="1114.8962"
y1="926.69495"
x2="1341.036"
y2="926.69495"
gradientTransform="matrix(0.91526376,0,0,0.91526376,-623.31504,-541.38903)" /><linearGradient
inkscape:collect="always"
xlink:href="#linearGradient4664-9-8"
id="linearGradient3318"
gradientUnits="userSpaceOnUse"
x1="1114.8962"
y1="926.69495"
x2="1341.036"
y2="926.69495"
gradientTransform="matrix(0.91526376,0,0,0.91526376,-623.31504,-541.38903)" /><linearGradient
inkscape:collect="always"
xlink:href="#linearGradient4664-9-8"
id="linearGradient3321"
gradientUnits="userSpaceOnUse"
x1="1114.8962"
y1="926.69495"
x2="1341.036"
y2="926.69495"
gradientTransform="matrix(0.91526376,0,0,0.91526376,-623.31504,-541.38903)" /><linearGradient
inkscape:collect="always"
xlink:href="#linearGradient4664-9-8"
id="linearGradient3324"
gradientUnits="userSpaceOnUse"
x1="1114.8962"
y1="926.69495"
x2="1341.036"
y2="926.69495"
gradientTransform="matrix(0.91526376,0,0,0.91526376,-623.31504,-541.38903)" /><linearGradient
inkscape:collect="always"
xlink:href="#linearGradient4664-9-8"
id="linearGradient3327"
gradientUnits="userSpaceOnUse"
x1="1114.8962"
y1="926.69495"
x2="1341.036"
y2="926.69495"
gradientTransform="matrix(0.91526376,0,0,0.91526376,-623.31504,-541.38903)" /><linearGradient
inkscape:collect="always"
xlink:href="#linearGradient4664-9-8"
id="linearGradient3330"
gradientUnits="userSpaceOnUse"
x1="1114.8962"
y1="926.69495"
x2="1341.036"
y2="926.69495"
gradientTransform="matrix(0.91526376,0,0,0.91526376,-623.31504,-541.38903)" /><linearGradient
inkscape:collect="always"
xlink:href="#linearGradient4664-9-8"
id="linearGradient3337"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0.91526376,0,0,0.91526376,-623.31504,-541.38903)"
x1="1114.8962"
y1="926.69495"
x2="1341.036"
y2="926.69495" /><linearGradient
inkscape:collect="always"
xlink:href="#linearGradient4664-9-8"
id="linearGradient3341"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0.91526376,0,0,0.91526376,-623.31504,-541.38903)"
x1="1114.8962"
y1="926.69495"
x2="1341.036"
y2="926.69495" /><linearGradient
inkscape:collect="always"
xlink:href="#linearGradient4664-9-8"
id="linearGradient3345"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0.91526376,0,0,0.91526376,-623.31504,-541.38903)"
x1="1114.8962"
y1="926.69495"
x2="1341.036"
y2="926.69495" /><linearGradient
inkscape:collect="always"
xlink:href="#linearGradient4664-9-8"
id="linearGradient3349"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0.91526376,0,0,0.91526376,-623.31504,-541.38903)"
x1="1114.8962"
y1="926.69495"
x2="1341.036"
y2="926.69495" /><linearGradient
inkscape:collect="always"
xlink:href="#linearGradient4664-9-8"
id="linearGradient3353"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0.91526376,0,0,0.91526376,-623.31504,-541.38903)"
x1="1114.8962"
y1="926.69495"
x2="1341.036"
y2="926.69495" /><linearGradient
inkscape:collect="always"
xlink:href="#linearGradient4664-9-8"
id="linearGradient3357"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0.91526376,0,0,0.91526376,-623.31504,-541.38903)"
x1="1114.8962"
y1="926.69495"
x2="1341.036"
y2="926.69495" /><linearGradient
inkscape:collect="always"
xlink:href="#linearGradient4664-9-8"
id="linearGradient3361"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0.91526376,0,0,0.91526376,-623.31504,-541.38903)"
x1="1114.8962"
y1="926.69495"
x2="1341.036"
y2="926.69495" /><linearGradient
inkscape:collect="always"
xlink:href="#linearGradient4664-9-8"
id="linearGradient3375"
gradientUnits="userSpaceOnUse"
x1="1114.8962"
y1="926.69495"
x2="1341.036"
y2="926.69495" /><linearGradient
inkscape:collect="always"
xlink:href="#linearGradient4664-9-8"
id="linearGradient3377"
gradientUnits="userSpaceOnUse"
x1="1114.8962"
y1="926.69495"
x2="1341.036"
y2="926.69495" /><linearGradient
inkscape:collect="always"
xlink:href="#linearGradient4664-9-8"
id="linearGradient3379"
gradientUnits="userSpaceOnUse"
x1="1114.8962"
y1="926.69495"
x2="1341.036"
y2="926.69495" /><linearGradient
inkscape:collect="always"
xlink:href="#linearGradient4664-9-8"
id="linearGradient3381"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0.91526376,0,0,0.91526376,-623.31504,-541.38903)"
x1="1114.8962"
y1="926.69495"
x2="1341.036"
y2="926.69495" /><linearGradient
inkscape:collect="always"
xlink:href="#linearGradient4664-9-8"
id="linearGradient3383"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0.91526376,0,0,0.91526376,-623.31504,-541.38903)"
x1="1114.8962"
y1="926.69495"
x2="1341.036"
y2="926.69495" /><linearGradient
inkscape:collect="always"
xlink:href="#linearGradient4664-9-8"
id="linearGradient3385"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0.91526376,0,0,0.91526376,-623.31504,-541.38903)"
x1="1114.8962"
y1="926.69495"
x2="1341.036"
y2="926.69495" /><linearGradient
inkscape:collect="always"
xlink:href="#linearGradient4664-9-8"
id="linearGradient3387"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0.91526376,0,0,0.91526376,-623.31504,-541.38903)"
x1="1114.8962"
y1="926.69495"
x2="1341.036"
y2="926.69495" /><linearGradient
inkscape:collect="always"
xlink:href="#linearGradient4664-9-8"
id="linearGradient3389"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0.91526376,0,0,0.91526376,-623.31504,-541.38903)"
x1="1114.8962"
y1="926.69495"
x2="1341.036"
y2="926.69495" /><linearGradient
inkscape:collect="always"
xlink:href="#linearGradient4664-9-8"
id="linearGradient3391"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0.91526376,0,0,0.91526376,-623.31504,-541.38903)"
x1="1114.8962"
y1="926.69495"
x2="1341.036"
y2="926.69495" /><linearGradient
inkscape:collect="always"
xlink:href="#linearGradient4664-9-8"
id="linearGradient3393"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0.91526376,0,0,0.91526376,-623.31504,-541.38903)"
x1="1114.8962"
y1="926.69495"
x2="1341.036"
y2="926.69495" /><linearGradient
inkscape:collect="always"
xlink:href="#linearGradient4664-9-8"
id="linearGradient3396"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0.91526376,0,0,0.91526376,-623.31504,-541.38903)"
x1="1114.8962"
y1="926.69495"
x2="1341.036"
y2="926.69495" /><linearGradient
inkscape:collect="always"
xlink:href="#linearGradient4664-9-8"
id="linearGradient3399"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0.91526376,0,0,0.91526376,-623.31504,-541.38903)"
x1="1114.8962"
y1="926.69495"
x2="1341.036"
y2="926.69495" /><linearGradient
inkscape:collect="always"
xlink:href="#linearGradient4664-9-8"
id="linearGradient3402"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0.91526376,0,0,0.91526376,-623.31504,-541.38903)"
x1="1114.8962"
y1="926.69495"
x2="1341.036"
y2="926.69495" /><linearGradient
inkscape:collect="always"
xlink:href="#linearGradient4664-9-8"
id="linearGradient3405"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0.91526376,0,0,0.91526376,-623.31504,-541.38903)"
x1="1114.8962"
y1="926.69495"
x2="1341.036"
y2="926.69495" /><linearGradient
inkscape:collect="always"
xlink:href="#linearGradient4664-9-8"
id="linearGradient3408"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0.91526376,0,0,0.91526376,-623.31504,-541.38903)"
x1="1114.8962"
y1="926.69495"
x2="1341.036"
y2="926.69495" /><linearGradient
inkscape:collect="always"
xlink:href="#linearGradient4664-9-8"
id="linearGradient3411"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0.91526376,0,0,0.91526376,-623.31504,-541.38903)"
x1="1114.8962"
y1="926.69495"
x2="1341.036"
y2="926.69495" /><linearGradient
inkscape:collect="always"
xlink:href="#linearGradient4664-9-8"
id="linearGradient3414"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0.91526376,0,0,0.91526376,-623.31504,-541.38903)"
x1="1114.8962"
y1="926.69495"
x2="1341.036"
y2="926.69495" /><linearGradient
inkscape:collect="always"
xlink:href="#linearGradient4664-9-8"
id="linearGradient3432"
gradientUnits="userSpaceOnUse"
x1="1114.8962"
y1="926.69495"
x2="1341.036"
y2="926.69495" /><linearGradient
inkscape:collect="always"
xlink:href="#linearGradient4664-9-8"
id="linearGradient3434"
gradientUnits="userSpaceOnUse"
x1="1114.8962"
y1="926.69495"
x2="1341.036"
y2="926.69495" /><linearGradient
inkscape:collect="always"
xlink:href="#linearGradient4664-9-8"
id="linearGradient3436"
gradientUnits="userSpaceOnUse"
x1="1114.8962"
y1="926.69495"
x2="1341.036"
y2="926.69495" /><linearGradient
inkscape:collect="always"
xlink:href="#linearGradient4664-9-8"
id="linearGradient3440"
gradientUnits="userSpaceOnUse"
x1="1114.8962"
y1="926.69495"
x2="1341.036"
y2="926.69495"
gradientTransform="matrix(0.91526376,0,0,0.91526376,-623.43531,-541.69844)" /><linearGradient
inkscape:collect="always"
xlink:href="#linearGradient4664-9-8"
id="linearGradient3445"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0.91526376,0,0,0.91526376,-623.43531,-541.69844)"
x1="1114.8962"
y1="926.69495"
x2="1341.036"
y2="926.69495" /><linearGradient
inkscape:collect="always"
xlink:href="#linearGradient4664-9-5"
id="linearGradient4896-6"
gradientUnits="userSpaceOnUse"
x1="1114.8962"
y1="926.69495"
x2="1341.036"
y2="926.69495" /><linearGradient
id="linearGradient4664-9-5"
osb:paint="solid"><stop
style="stop-color:#ffffff;stop-opacity:1;"
offset="0"
id="stop4666-6-3" /></linearGradient><linearGradient
id="linearGradient3288"
osb:paint="solid"><stop
style="stop-color:#ffffff;stop-opacity:1;"
offset="0"
id="stop3290" /></linearGradient><linearGradient
id="linearGradient3293-8"
osb:paint="solid"><stop
style="stop-color:#ffffff;stop-opacity:1;"
offset="0"
id="stop3295" /></linearGradient><linearGradient
id="linearGradient3298"
osb:paint="solid"><stop
style="stop-color:#ffffff;stop-opacity:1;"
offset="0"
id="stop3300" /></linearGradient><linearGradient
id="linearGradient3303"
osb:paint="solid"><stop
style="stop-color:#ffffff;stop-opacity:1;"
offset="0"
id="stop3305" /></linearGradient><linearGradient
id="linearGradient3308"
osb:paint="solid"><stop
style="stop-color:#ffffff;stop-opacity:1;"
offset="0"
id="stop3310" /></linearGradient><linearGradient
id="linearGradient3313"
osb:paint="solid"><stop
style="stop-color:#ffffff;stop-opacity:1;"
offset="0"
id="stop3315" /></linearGradient><linearGradient
id="linearGradient3318-7"
osb:paint="solid"><stop
style="stop-color:#ffffff;stop-opacity:1;"
offset="0"
id="stop3320" /></linearGradient><linearGradient
id="linearGradient3323"
osb:paint="solid"><stop
style="stop-color:#ffffff;stop-opacity:1;"
offset="0"
id="stop3325" /></linearGradient><linearGradient
id="linearGradient3328"
osb:paint="solid"><stop
style="stop-color:#ffffff;stop-opacity:1;"
offset="0"
id="stop3330" /></linearGradient><linearGradient
id="linearGradient3333"
osb:paint="solid"><stop
style="stop-color:#ffffff;stop-opacity:1;"
offset="0"
id="stop3335" /></linearGradient></defs><sodipodi:namedview
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1"
objecttolerance="10"
gridtolerance="10"
guidetolerance="10"
inkscape:pageopacity="0"
inkscape:pageshadow="2"
inkscape:window-width="1678"
inkscape:window-height="1028"
id="namedview3120"
showgrid="false"
inkscape:zoom="0.1767767"
inkscape:cx="2217.3454"
inkscape:cy="1337.1815"
inkscape:window-x="0"
inkscape:window-y="20"
inkscape:window-maximized="1"
inkscape:current-layer="g3750-1"
inkscape:snap-bbox="false"
inkscape:object-paths="true"
inkscape:snap-global="false" /><g
id="g3126"
inkscape:groupmode="layer"
inkscape:label="logoeole1"
transform="matrix(1.25,0,0,-1.25,0,533.33333)" /><g
inkscape:groupmode="layer"
id="layer1"
inkscape:label="bateau"
sodipodi:insensitive="true"
transform="translate(0,-1066.6667)" /><g
inkscape:groupmode="layer"
id="layer2"
inkscape:label="Calque1"
transform="translate(0,-1066.6667)"><flowRoot
xml:space="preserve"
id="flowRoot4297"
style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:12.80000019px;line-height:0.01%;font-family:COUTURE;-inkscape-font-specification:'COUTURE Bold';letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.06666672px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"><flowRegion
id="flowRegion4299"
style="stroke-width:1.06666672px"><rect
id="rect4301"
width="1160.5333"
height="443.73334"
x="2244.2666"
y="2077.8667"
style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:153.6000061px;font-family:COUTURE;-inkscape-font-specification:'COUTURE Bold';stroke-width:1.13777781px" /></flowRegion><flowPara
id="flowPara4303"
style="font-size:153.6000061px;line-height:1.25;stroke-width:1.06666672px"> </flowPara></flowRoot><flowRoot
xml:space="preserve"
id="flowRoot3677"
style="font-style:normal;font-weight:normal;font-size:12.80000019px;line-height:0.01%;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.06666672"><flowRegion
id="flowRegion3679"
style="font-family:sans-serif;stroke-width:1.06666672"><rect
id="rect3681"
width="823.63794"
height="107.1031"
x="3003.4126"
y="486.73111"
style="font-family:sans-serif;stroke-width:1.13777781" /></flowRegion><flowPara
id="flowPara3683"
style="font-size:42.66666794px;line-height:1.25;font-family:sans-serif;stroke-width:1.06666672"> </flowPara></flowRoot><g
id="g4708"
transform="translate(-234.66667,-661.33333)"><g
transform="translate(258.11647,292.41513)"
id="g3750-1"><g
transform="matrix(3.4040263,0,0,3.4040263,-5864.8164,-2849.7877)"
id="g4763-8-1-4-8-8-28"><g
id="g4707-6-9-0-7-9-1"><path
sodipodi:type="star"
style="fill:#f1ca13;fill-opacity:1;stroke:#f1ca13;stroke-width:13.69999981;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
id="path3438-4-3-1-5-7-4"
sodipodi:sides="3"
sodipodi:cx="1546.047"
sodipodi:cy="712.37"
sodipodi:r1="15.609281"
sodipodi:r2="7.8046408"
sodipodi:arg1="1.0427219"
sodipodi:arg2="2.0899194"
inkscape:flatsided="true"
inkscape:rounded="-1.800643e-15"
inkscape:randomized="0"
d="m 1553.9121,725.85296 -23.4742,-13.4131 23.3532,-13.62269 z"
transform="matrix(0.22906783,0.6022449,-0.46734074,0.17775615,1770.4985,222.63478)"
inkscape:transform-center-x="-1.8039821"
inkscape:transform-center-y="-1.1274589" /><path
sodipodi:type="star"
style="fill:#f1ca13;fill-opacity:1;stroke:#f1ca13;stroke-width:13.69999981;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
id="path3438-6-6-2-8-8-7-96"
sodipodi:sides="3"
sodipodi:cx="1546.047"
sodipodi:cy="712.37"
sodipodi:r1="15.609281"
sodipodi:r2="7.8046408"
sodipodi:arg1="1.0427219"
sodipodi:arg2="2.0899194"
inkscape:flatsided="true"
inkscape:rounded="-1.800643e-15"
inkscape:randomized="0"
d="m 1553.9121,725.85296 -23.4742,-13.4131 23.3532,-13.62269 z"
transform="matrix(-0.52791029,-0.36943435,0.28668023,-0.40965724,2360.5301,2170.4693)"
inkscape:transform-center-y="-4.59347"
inkscape:transform-center-x="-0.15719734" /><path
sodipodi:type="star"
style="fill:#f1ca13;fill-opacity:1;stroke:#f1ca13;stroke-width:13.69999981;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
id="path3438-6-4-8-6-1-0-7-83"
sodipodi:sides="3"
sodipodi:cx="1546.047"
sodipodi:cy="712.37"
sodipodi:r1="15.609281"
sodipodi:r2="7.8046408"
sodipodi:arg1="1.0427219"
sodipodi:arg2="2.0899194"
inkscape:flatsided="true"
inkscape:rounded="-1.800643e-15"
inkscape:randomized="0"
d="m 1553.9121,725.85296 -23.4742,-13.4131 23.3532,-13.62269 z"
transform="matrix(-0.48926443,0.05962255,-0.05381995,-0.39687094,2528.6554,1547.0921)"
inkscape:transform-center-y="3.4869151"
inkscape:transform-center-x="-4.1484718" /><path
sodipodi:type="star"
style="fill:#f1ca13;fill-opacity:1;stroke:#f1ca13;stroke-width:13.69999981;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
id="path3438-6-4-9-9-7-6-6-9-8"
sodipodi:sides="3"
sodipodi:cx="1546.047"
sodipodi:cy="712.37"
sodipodi:r1="15.609281"
sodipodi:r2="7.8046408"
sodipodi:arg1="1.0427219"
sodipodi:arg2="2.0899194"
inkscape:flatsided="true"
inkscape:rounded="-1.800643e-15"
inkscape:randomized="0"
d="m 1553.9121,725.85296 -23.4742,-13.4131 23.3532,-13.62269 z"
transform="matrix(0.35956287,-0.33711877,0.27785959,0.2884392,1004.6201,1710.9855)"
inkscape:transform-center-x="-4.1631714"
inkscape:transform-center-y="-0.057200996" /></g><g
transform="translate(-19.751502,372.32158)"
id="g3586-1-2-5-3-2-7"><path
style="color:#000000;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:normal;font-family:Sans;-inkscape-font-specification:Sans;text-indent:0;text-align:start;text-decoration:none;text-decoration-line:none;letter-spacing:normal;word-spacing:normal;text-transform:none;writing-mode:lr-tb;direction:ltr;baseline-shift:baseline;text-anchor:start;display:inline;overflow:visible;visibility:visible;fill:#4a3f74;fill-opacity:1;stroke:none;stroke-width:23.74341393;marker:none;enable-background:accumulate"
d="m 1808.1526,986.76492 c 0,0 -3.2597,16.69338 12.2298,23.99948 7.2005,3.3959 12.9255,3.9039 20.905,0.8664 5.0224,-1.9118 9.552,-6.657 11.4611,-11.82157 1.9093,-5.16452 0.2732,-11.4417 -4.7449,-16.31949 -1.7695,7.81561 -3.6493,14.10691 -10.416,17.61096 -4.0225,2.0445 -8.111,1.7046 -12.1907,-0.318 -4.0796,-2.02274 -7.2085,-6.89258 -8.4528,-11.77144 0,0 -2.5254,-9.07376 7.1765,-23.94196 -7.7559,5.9661 -14.5205,12.77754 -15.968,21.69562 z"
id="path3359-6-74-6-4-2-1-8-6"
inkscape:connector-curvature="0"
sodipodi:nodetypes="csssccsccc" /><path
style="color:#000000;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:normal;font-family:Sans;-inkscape-font-specification:Sans;text-indent:0;text-align:start;text-decoration:none;text-decoration-line:none;letter-spacing:normal;word-spacing:normal;text-transform:none;writing-mode:lr-tb;direction:ltr;baseline-shift:baseline;text-anchor:start;display:inline;overflow:visible;visibility:visible;fill:#f1ca13;fill-opacity:1;stroke:none;stroke-width:23.74341393;marker:none;enable-background:accumulate"
d="m 1859.8421,1028.7048 c 9.0667,-5.9443 15.9456,-15.1035 18.3323,-26.9987 l 0.036,-0.2122 c 1.845,-9.47143 0.083,-19.48234 -4.7861,-27.85914 -4.9017,-8.43109 -13.4688,-15.30069 -24.2922,-16.6144 l -0.031,-0.005 c -6.6322,-0.79814 -13.9274,1.95899 -19.0297,6.68912 -5.6838,6.71374 -8.3619,10.91924 -8.2233,20.70452 4.8592,-6.41106 17.1623,-12.78189 25.8393,-11.92722 5.6097,0.67502 9.6503,3.8646 12.5032,8.77162 2.8528,4.90695 3.9787,11.43223 2.8727,16.94471 -3.5229,17.55819 -23.303,26.36509 -40.2867,21.46279 -23.5286,-6.7916 -32.1648,-30.7698 -25.4329,-53.73354 10.4805,-21.139 53.0027,-28.07465 60.1046,-30.15118 -2.6116,-3.87866 -28.7525,-3.21222 -28.7525,-3.21222 -12.9196,3.3663 -32.7194,5.8024 -42.6107,23.84314 -19.9471,36.38183 0.1691,68.7974 32.8347,78.2264 13.991,4.0385 29.2641,1.7152 40.9212,-5.9276 z"
id="path3359-8-8-4-2-1-4-6-6-02"
inkscape:connector-curvature="0"
sodipodi:nodetypes="cccscccccssscccsscc" /></g></g></g></g><flowRoot
xml:space="preserve"
id="flowRoot4653"
style="font-style:normal;font-weight:normal;font-size:12.80000019px;line-height:0.01%;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.06666672px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"><flowRegion
id="flowRegion4655"
style="font-family:sans-serif;stroke-width:1.06666672px"><rect
id="rect4657"
width="435.20001"
height="375.46667"
x="1847.4667"
y="1685.3334"
style="font-family:sans-serif;stroke-width:1.13777781px" /></flowRegion><flowPara
id="flowPara4659"
style="font-size:42.66666794px;line-height:1.25;font-family:sans-serif;stroke-width:1.06666672px"> </flowPara></flowRoot></g></svg>

After

Width:  |  Height:  |  Size: 33 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.3 KiB

View File

@ -0,0 +1,927 @@
%!PS-Adobe-3.0 EPSF-3.0
%%Creator: cairo 1.14.8 (http://cairographics.org)
%%CreationDate: Tue May 16 12:27:36 2017
%%Pages: 1
%%DocumentData: Clean7Bit
%%LanguageLevel: 3
%%BoundingBox: 0 -1 300 165
%%EndComments
%%BeginProlog
save
50 dict begin
/q { gsave } bind def
/Q { grestore } bind def
/cm { 6 array astore concat } bind def
/w { setlinewidth } bind def
/J { setlinecap } bind def
/j { setlinejoin } bind def
/M { setmiterlimit } bind def
/d { setdash } bind def
/m { moveto } bind def
/l { lineto } bind def
/c { curveto } bind def
/h { closepath } bind def
/re { exch dup neg 3 1 roll 5 3 roll moveto 0 rlineto
0 exch rlineto 0 rlineto closepath } bind def
/S { stroke } bind def
/f { fill } bind def
/f* { eofill } bind def
/n { newpath } bind def
/W { clip } bind def
/W* { eoclip } bind def
/BT { } bind def
/ET { } bind def
/pdfmark where { pop globaldict /?pdfmark /exec load put }
{ globaldict begin /?pdfmark /pop load def /pdfmark
/cleartomark load def end } ifelse
/BDC { mark 3 1 roll /BDC pdfmark } bind def
/EMC { mark /EMC pdfmark } bind def
/cairo_store_point { /cairo_point_y exch def /cairo_point_x exch def } def
/Tj { show currentpoint cairo_store_point } bind def
/TJ {
{
dup
type /stringtype eq
{ show } { -0.001 mul 0 cairo_font_matrix dtransform rmoveto } ifelse
} forall
currentpoint cairo_store_point
} bind def
/cairo_selectfont { cairo_font_matrix aload pop pop pop 0 0 6 array astore
cairo_font exch selectfont cairo_point_x cairo_point_y moveto } bind def
/Tf { pop /cairo_font exch def /cairo_font_matrix where
{ pop cairo_selectfont } if } bind def
/Td { matrix translate cairo_font_matrix matrix concatmatrix dup
/cairo_font_matrix exch def dup 4 get exch 5 get cairo_store_point
/cairo_font where { pop cairo_selectfont } if } bind def
/Tm { 2 copy 8 2 roll 6 array astore /cairo_font_matrix exch def
cairo_store_point /cairo_font where { pop cairo_selectfont } if } bind def
/g { setgray } bind def
/rg { setrgbcolor } bind def
/d1 { setcachedevice } bind def
%%EndProlog
%%BeginSetup
%%EndSetup
%%Page: 1 1
%%BeginPageSetup
%%PageBoundingBox: 0 -1 300 165
%%EndPageSetup
q 0 -1 300 166 rectclip q
0.32549 0.286275 0.529412 rg
197.438 160.944 m 171.461 160.944 148.402 148.244 134.059 128.76 c 154.211
128.76 l 165.531 139.28 180.707 145.713 197.438 145.713 c 214.016 145.713
229.07 139.405 240.355 129.057 c 260.641 129.057 l 246.285 148.385 223.293
160.944 197.438 160.944 c h
132.855 37.463 m 147.086 17.01 170.703 3.549 197.438 3.549 c 223.234 3.549
246.145 16.073 260.508 35.323 c 240.219 35.323 l 228.949 25.041 213.953
18.772 197.438 18.772 c 179.809 18.772 163.918 25.92 152.438 37.463 c h
132.855 37.463 m f*
4.26191 w
2 J
0 j
[] 0.0 d
5 M q 1 0 0 -1 0 164.490509 cm
197.438 3.547 m 171.461 3.547 148.402 16.246 134.059 35.73 c 154.211 35.73
l 165.531 25.211 180.707 18.777 197.438 18.777 c 214.016 18.777 229.07
25.086 240.355 35.434 c 260.641 35.434 l 246.285 16.105 223.293 3.547 197.438
3.547 c h
132.855 127.027 m 147.086 147.48 170.703 160.941 197.438 160.941 c 223.234
160.941 246.145 148.418 260.508 129.168 c 240.219 129.168 l 228.949 139.449
213.953 145.719 197.438 145.719 c 179.809 145.719 163.918 138.57 152.438
127.027 c h
132.855 127.027 m S Q
q
0 164.491 300 -165 re W n
% Fallback Image: x=0 y=0 w=300 h=165 res=300ppi size=2580000
[ 0.24 0 0 0.24 0 -0.629491 ] concat
/DeviceRGB setcolorspace
8 dict dup begin
/ImageType 1 def
/Width 1250 def
/Height 688 def
/Interpolate false def
/BitsPerComponent 8 def
/Decode [ 0 1 0 1 0 1 ] def
/DataSource currentfile /ASCII85Decode filter /FlateDecode filter def
/ImageMatrix [ 1 0 0 -1 0 688 ] def
end
image
Gb"-V#C$t`_Z+TWTnl<<&Yt88b,Xs2W2ka,:g=(M65>*n8eDZ2(mhN?N"B_H["+5<Td>p+.A
<))6]`'+5R]f?:_V:#om[bNcc\tLR=!98HgXVBTBGt8j6i'dBC<tac]?jCo@I=Lzzzzzzz!
.]34EcP)sAiqcX3I.W;#64`(!,s5e=ZKP9VjpGjG[U!^D4?SS0)oG'_AsdcRspj>B!VHZ0u
LnW#DWd,0R#dci1=3U^ZdGoX-LFj.hBC\rto0E=uRLJqe*Nd:%%]!1bkYap\`u6@:BmK-Uc
5g>UMEJ*k$.Wb'gn1*Bef>o]]:Gf<3sE'j1,Z"98E%!&0DO@_$gHB)L'Jd6!Aj>dd-Z_$Ql
d+#\((^Rd`c/[fRU`nI`_piL1([`;HJIf)B3o]8[)<\0UO[:\OWQsK50rk*LSHE-6H(]XO9
!:U!!3I)DRYO1(c,'*K$Z_hXXmCRIJh`4t(:28U0V"0sgf<f6I8p&]OrBeM`L_(SS?0&_Pq
bJMD\fp@Ll=0kq!!!!&6;C;Dl'"]N[N1?0Zn$*)jNrGcH?>aIn(XcMmBtP)dsQq(cBtn\H2
-ejdIEsMkN,QH!<<*"5Y>p3hSflS@s5hHL[>Ke]mN)Ki3l?M/+8!@)GsdeGPc7$nF4f8>B`
KSSN1h\h?j5_!!(_jVI]&NHW"r`s,kM$opdIgQ1As^O41hr(fC25`[kI<^ACIfRIp,&e]/a
3!!!!592!Ng4*5X76qkD[jh8;)k1N:RG:Uc1kEcj;q^`)F]/=2%HqJFjlE^Qm!!!#c/gi%@
k`Kr0(@N15CNtoc;jI)4o!!?so'>tn[.0o?O'M\)ab5S"4;\%u!'n8<1F6O,FSrf0c%?8Fj
borfRLUph%NDc/FRI]^HVa4c?iU0,!&!GT;Y&uCZ%2q<ICf#1hY`[?*e+(&$^re]mImKgj;
Vg5cSY\&!!%8Jo^o3eHV]A!D&UbOQtBN@nnmQhJH:lpU>f'L1K:!!z$G*=?SD2;1:qmR5>?
\hkb/8-_Y@)?*Lf5KZ.nB9C#ljr*TE%PGHZe#)BHQ^=D85";1#r@Lhe^MUT1*Nrm_,-TXSQ
`:!!!"\5NV!0iXVLg$/3n@lZD57Lq$9qm6#N'i49#;:Zgg#WBQ4@!!!#/]GoJO2Qf2&k1B)
4/]T=/42duEWO;d$OisIW*PRrY2cp(\!!$-aE`2IcLmUL,6Tc=`.;q-jT;?\jOi%AU=M&>*
NU,@D(]XO9J<p5$ds`IqUmF%`SrNZdaX0cnX&i1uTDJTg!!&P1L%Ep6_fl%SIB`:r64.<m>
ohRAcLRgDP:kZfrGDT8!!&\9okUP$(C]Lr3H^d<Y'L/Lj4S+aT`-*M<po(]WrN,"5f&SRQ*
V\bDRe#eekLD+.<3eCo'dSZE5C]0Z'cK_Wo#N2!!!#c_IE>eULXE.,!3.KX1X&r@PAfc`s%
E.*j[@\0@-Bh4Tk`b!5KRecWln:gP13,3Dk(^+N3Dao:!="p6J>fY,d"9!<<*"YYf"Ep82s
;#PAU)hCiD<i4lBcm_lGohlqY>[R\;JBBQ:DLB.AT!&3^)l,t59S%`Vn??rFk`(ojnoFD@d
4IL.[ot(Y5!!'f%V5It.MqmLOH^=4,6&<E6W*dWc[0JKD\]GHa!!(qFcCML$II`g[\LeFCW
:=Wa5C:C>^9n:J!!&s/Yup]fs#FoB6I/-dCB>[%e&oSSDs625qbC>)+#!Zp!8puDkuhe'mH
`SN](0/mL_HZ;5GtW>Lri36;Z0>o!!!#i^Vk1pB22aU1J\>)NL-RCXQ^ZV?+cm->mgW4!9?
qrNh#\[]%F?OTCTrc+YK#1NCWi+>]qm]U?ZqV!!!"\J&E?g45=J2o$ooI/tG<,6=P,Wo9E;
U!!'fH\N+r)2oP^B@tsR94X'VJ"*t,hgN"PmO0T)m!!$+E1F%6X6qm>M;j8s"$-AP0[e&"i
jaUfPjf!X3!rr<$c7V7CCJ!`MYM+q:^5OEbhrgV=:0\jSS$!(u!!#,X7XEY6d%0f-66)LJm
/rY-h49t%Xniq9!!!!YMp..H'bN00WN:KX:.Tq1kI)&@_fjI.!<<*r^sPpaEN4E:ApigtXm
'PfWilj3!!%PEAS'sS>J."XgBl#hjb/_Bd\U6bb%5p?EcP/e-NF,H!(Y,RZYW`bTUXPDj\'
S[Ldl]4T"8LN+U\f_"TSNf^33oQahHZX<5/8WKG[DODSPRpMGnrbzb]bTjEQF44PV9QR+ZA
Cg5Kl<=n?hJ]#QOi)@#d%@0)H)`XF-F1#a('j,G.,I=nNL5!!!#'h2U`7;^XuAo'fSl\gE)
tP1GU_cBtmq,ro9(eHGpQ!3f49:>UkaR#[cuPV9$C+f<;\Q%+&2:2U+A!!!"#&[O"e].SZW
(XdsJ]B9!ne+^j-W4q*g!!!"&cCDI.CsYN1Me>A4_r<a'o^%trWinPc!!'gJDPgsgR'O/Cj
,qL9b_-N4Vfe2c1BZ7*V.QaA%KQP0!<6K4r3^fuD!/5?PV8:.+UZ\pI=SgAL^O7a!!&\=l'
"\kqLp>)*YUl1,X1)Vcg_$D!!!"tOI;4oHcF(V:&'Mt+YJil%bt*S-DT],DpHSN<dg57!!#
7b'!j+&H`&=8(Z'fVVp..@->d'2X86!'!!%QIn']/o_gN:L?N:a+>TtDA??A1V=nQnF!!!#
p;dQ&,q9n*dRuL:ZmNmOr:cbs#]6_G&m]$Bi!!%)24`f^lIHN"cmLhik1d_Jk4eHsnop#pc
!!)g\DJid*fZpp"7k7s.&jfhai\D--GAD(kT'E?p!!!"(f]eSkhS!PN?ec8\nkJuRS='q<6
1qVp!!!#%-RU9#FRE0N1d_O'4lX>a0I07qA5lq!!!!#W1/@amnV8/APV6SS+o++rH3Tp(Q)
+7k#64`(B4nLI[3?flm2)O^Y@%Y[q**e9'-=S<09?#1!WW5Y_3-G,)"Q]LjU5-V8:eq!^2k
oGqd0='!8M3W<1K;Q^[h%I+f#+86d'Ib=7&q7'a+L:J?qe\OZ)Kk--DRRKTH6VE?Ps],Loj
`!!!!I[O:pt0'rb*Y>,BI7&3JfJA$:B<*pFB!!&Z]G'<;t^ic6.e?;M:Ia7,V-U:ogihA8B
k/Q2H4Or%S!!!!Ye:khV"*t,$?]Gaca91JYB@b$0f2Z0,!<<,X+PSdrl-OI@nl7(]eu"/d#
nTV(UZ]/S;/rV>QN.!cYck.0S>d/GPqP<-+iId,,thLQ<*q]f!!$CCB2;n6U&,8[CJI2%Yp
t15s*!PSA^sjY!!!"dCua4Om@0)4^=ji#8bf6gX%-F/2Qr0AI2rIk!.[)8ZZE%'?_r.48I-
K&R6G>-:/7tWCFT;a!2Nl1SFTUNfuhp4KFhTb#4r8:FRb+N.k:T"!,QarhoX/\-R`>%&jhD
2&XTnXqbO3*^&e97^cE7S?f?od[drod^7HU'&CVjVDW,"c`J"d%!!"Vp,<]hdn8RL484!Te
CI\67-oEkLobA8C!!#(*S[n<>fBLFZO+\)(J;DD)q8@'KYIac7!-kI@J"6$!oN/bE,_Q_a`
N,:(J\<F2?[VqT!:Tt=,@^El.NtSfVKLp]X+&s$qAKbB!.b*7S!+XJ0iIg6OUshn7U-/:`D
H7#(]XO9J)*f?nF<*RI!nNk+j0Cpms-A(l)Lr0!!!!&gA/[&gae3m6LNphc;RN28lC(S"on
WOTX\&9+b\XC%P>_XbG4>Q1]RM@J[9gurmm'!.UNXJr0.[C`dZMcd(@W*@07=))'1ta6KIJ
N)]-cV^+pmEmAbS3Rh"nCMA(pJ"+*fj`*^$<e#/?]?FYG3-PJ,gq7hq39b`)%DbPcX_(?T9
M*[G_mgbo#20euoao3e\q^rmME5@'2_;2aN[qe$.q<jIEPh&PuDHLsFolV/Q!2-!h=T2JXH
].G`+E>AJeRj3DShl0!/..ma))cEf`jH%?KbS\#b2nlSX;nVqG%O5;V$kn9`?jr/NaKD=hn
kJR8`NkJ%M%mTrAQnr5\u?<Mo5c4!!!"BQ(*srEU4%oCHph>C#*=\pKa\T2EEX5h27#UQsK
5p:0l/hbZ9/kg+G6?j2@Q+GATFQD"4[mP?*V8g>f4_SrM77eATHR/stGh(B=HNIaZ\#LCIL
]I+:`W/a]$ena82Kd^U%N@6:6.*(rD<2)i!0/B]itZf7%:hmiBqlkpa2DscCqMXk7CS1m;8
/kAX[<.21V!!)(I=0JFllT%o>HB1$Q\p7!knaiLNZa]:WMA)Q1_M9'0^\"nWj$sd7YMMKZq
M&F2(4OeG]^g\DS0:,hQuV5.MX&Y(!!"-K3HOJk-mm)<H:1cEZjR`=',EWQl^m<)Y?t(*I6
P6*o82)-CcF7]b$+8jZW]<HL1:BGhfP6-qBSk8!<<*Ra-#"1gc`[LZqrmdmBlHRlhg(nl''
^eD*4&)l%\JE0V?G3auOe/h"%;Ra,Po5j1tmQ?EO-d*BC%o1^!dYE-Zs"rj.$Z1!3RA_u]C
EjQG?Gf">.Tp[1UD:ZH54G'EmglE9NpI[e!If/M0C++<.9Zu8-?h]<i8$31'6]BC9Ug3tbK
q7;U=2?3Sp@_h3h4/1_4P1*F'E<V\BXPsco#"3Y%3(`op60t$u9h'!SE^]R<#64b^OuBM)D
;CS_dH/]%fja<pJIB?4Fsb.7:jo(s?5G8"?b:(1R,R!E4i]!9<JWfdb/8/bb'g9c1]RLU(D
F&e(XI]WB+YC@a7"Wsc/3[q/ho#?]CNO`S=JBPZ"HC8DYgM/T^q]0QlGRE>T11PodL(F!8o
Wp"`IGUKHk**Q&"7Y!HV=1`*?&0<deSrG%XQU?8R0/J6p(7cR<73B$],NF.<41!45l[QKaT
6.poh!q6Xikb'.ggg/\#f>Ye:H>/<n!0&B\O^3dqO\ZJ!lPb2PU5(O@l.B3@J!"Y9[B:1`&
L%7)?O\,F^@n-8Hh6Q!9C2/Lg'+4GuHm<M,lM\Ks4,dC6\U(-3?Y,q1!WW5U7o[ugdE@fYe
qe0Wjl%T@b-ill1,H7:T1X(0e=.=k<poofh`8j*_ZCQo+*ftgljCHY%KHKJ2_(ink52=16g
&>]\o^=48He_)Bb2>oo@qPhQ(OA\L5[&`Odhi<qBQ+B!,r:>U.uR(]CH[TYps(Ordb*4EJM
i>5(2@2//F.'0uW>(TuC-q-RuAN@tod%k"o"X!'igt<^^D&UjR#K%&S1-Oi)UaG!s;\BBQ9
YGMqgC1U8sCO8\l]$ToAJT-]iG.,Uj8<<*"qOGUBlB]#Z/=(T<@\p'SU*k(\:[8b[h%:%5U
M`3t7DYgBXGibhX0bV6pMfWq6CFB/_:_8J@3c`jcjm+Xq)^"PE]=&gAc74p?Q'J[ac%5lO"
Xu[4M/Gf]Z@q\F!W[b&7T>t!IM'_(@RMGXRuRsq^&6B:9<(c'j>RD8(BO[_`<iF>,UXKJo4
p<S'`\4J*#?_);oZ"=^'5em997@s_o$Yp,c@\,;imVW^RcoMZYj*5Q(RR,@@9)u"j^$L!!!
1R=Ro.X]LM_^MqfE#7O*Wt>d/S<ERpt*R,"4ED-N%ue7Z5\o:J-!djM9[H2mpFo"@%>2_&0
YOaH*@aD]ji#X7#OKb!N4q=@DRQ+n-VrL#NkKBfcF!!'fp_WG]6^>^>\Vfe2c'?@7H4F:*$
W<)q;Z+.^a5;2SDV#IJ^m`ta`>?%45!!!"BZ#!"=o!K7DPI=hWRPo0YV$kmTT,5;V:7\mOc
7boW#>\KFU+BWT?1iID!!$E4[4D"Aq[k2Iqds>iVld^[,t7Ju!GFKcG\sbdau2s`.=]O&gK
Ck'YNh;Q!!'ek4/1^s)t@\Up$'hDgt^g^2m0'X4sL'&/ghskS@Z/r(N`[MC$"<_F5'RBB*8
27J-fZqS772O4RJSt%LLjRH8@q]klB?[l-bQA1!BC90'*Z]o0WaXX$.O(!!&gb5+1Knl*#J
G<KJF@p1&i4oDMVK")#qb&LXpUpJ_/hLR-s5i\.5o(B=F8Ca>Is5JN_eHqdV&1YaAEoVj+d
-N[\Q_m*kReT[&E2ci:?QhCFrcLViZ!!'h-,i;/iY"PGYePq*ZGFr#n&+[P!jBL"nNqMg$?
25GA^o$;H;m0P(<IGV_!!$+E,<a5^pFK7o67l.i``t.RFU?h8'kaeM4p_3NbKI5n?bO3ia%
=G2F9OK!^C*Y0b>`m*!!!!9P+.[0bM\)s=&9&SS_Hnq>lKM'rDfHkJE(0OjXck8X^0E'b27
^Q0]H!&S'(s?!!'NZ^kn2rf1lK$SrNXL7P@P/:02l5!B%#b:(_CFjmU+hQmq&sWBU(W!!#'
GK^M[NC+<m7cn"ndd6uMT*`2=`r_pMBrMKKE=jRedBUA!/%fcV!:cl-,jai/HN)qP0'bN0G
H$fi3poiJC4Ro<4csj*I[qEO6B;6&C2]YqIj8f5\*[(IGH+k3Z^h'4sPjtgLLbJ6_Q]mTQr
5t4'*>`_c(]Oh=IFnQ#!<*M6-LB/E5l"$OJ7LpKi+$bS`#$d?@.25+H!63&d\U6bV2I93+*
.D^JH&5;bP\'S%-;9#Je0S2s2a;On.B$CTU_P-Y^,!W1`<.fc!(b-]A%8'W>V^s3<0&pIi_
bV4![f$lDPh9\51c-.k.J/38f*XT1g0M.p2UO\0,>7TS<;$)?9b6DJ%ffjm/Xg+"pFiNGB'
)51G)jbK\:9'"Xk*(]71]m[5q\KBf3@!!!A5bo:,WYDDatHj>F5:.eQ8W.Fm)6K5Br"6M(_
;s4$o=E?b#T`tJs"]Rhd"`EU@f6$X)[s$:c$_O!mb[[n[`7q;?o.eDFi;#?L\`GIE!)VYN[
FD?"-RiC1jl?+G$,(AIDkR5UOa-<ZTRJ',hra_ohfP52r\^DG3!0/2![K-@G>Nc)GkOa"cZ
+>=%^7mM`NhURG?[6B@^cd44"!*O=7pP;!!!2A[#(hX=MoNhIM([pnaW3sY>>7T3LOic2pY
I2>Gd?dV>:H"!.Y,Z?0"32/"_3W<ZZ^Jk&99'%Y01CAnHrVV>L[^?PC!J&(O/e!!))$7us0
Ue"jcDb/"S&"n()adZN0<WXgaZE,CYnoCDNTIsK.[&c^"05K97Y!!%P_ge>iRju$<;ROA,H
`6X?>P1*DQ?D*t'S<V5Vmd1VV0+RNU&(QFO!!)(I(<^'66Ph7[mGtU\DDEthmT']+RfT$HD
Jl%j9=FE\;gr`-B,U-DM!H#\!&.]sU0Ypn3Vb3h]*'J!?Vl/Y!Sf4!^o;65n>%Y"ZTNWEl2
qCo!:lCbEJ^feN)[O4a\VFK\L]lq;tY\Fn6d]el+[X5W;JuETCSU-W#k%.WW3%7*2tkQ\p'
U;I"dc&,*ltZ=7&q7;uu4(bHlj)D=VM=rh>Nndc7AWia4+6%kI\\E-W5B?R(=X;80K\2sJa
S+R\`%eOL@);*1N3g,C+Kr6g^G,6!;5(K:D8J>AGB1!3QTq'Ot3B3i'<UABrQYg2Ks8Njh[
Wr)p]Do*;i!<@Y/K_Ppl^F8SI7l;ap,F;tRAue+k!,RdhQH;kHbt@:K,EEj*VtuJV!!&@MO
e1+hT@9%.BC\>lH2*)Km8SKr!D'ItrXs-[^8>X;\p7$4+jg8i^]n;(LFZ`RjF_Phm=/O48_
"%ZJ2qd@`I6EKXRZ`l5)A+C`I'rd!!$,4c-!`Bf.d"C5BNN;iV[iK#8;WU:7k5Fd@%2;RZQ
W(q1:'r!&3\K_PO\87k7r^\9^US>EY,?V>=R$0]2P=W<7GM/&008HJ11nFo5pIl@TBC!*m<
h^5i%!?UpC+oZ:n>o(Y$\ODftKV=3>=jd-le:\RUH5nsA"kR/6@>kttMV;p6B7-NF.WXg<S
]?AC("AXnTIa)m*%/3oC(K:D8J;+MK%Ob\h\9(o"poTJ0Vtr(KE1HF%S]\,uXrb<M$31&Ik
00gJm@0)4^0G[6Lf\LjoUi,o,616g\Fs=r-6nd_Jm:7oeN:ne;um!7I53UbqfMj4q-(a[o2
V:Mg]dm0YkCKbftKIrb@c15GFEP.KeKA+!.b)ZZN!PYWta/[O0>E+T"V0#(]mOucf5hQZjT
]Z3HEpapBfjfWW3%WNi7qmPcmkf2uS%,?+YD]oe?TBhM(RQ^ZuN2r1`8`q0ctal=1)"!1^o
[`+pAsN`3YOERFQ+cVI3Y<.,/U3/a7T)2%d@.).ULB_[0/!!!S9ZZ>p8$rXepERB^a&WrWT
X83Y7E%[QHfo,!2$OPNTCrklVHW;.Q!!&[Z=:Yi('hiF7aNR?o^-`&(zzzzzzzzzzzzzzzz
zzzzz!",`i-SDNWL`s2Qma,+e#7q'dPq+:f2]X6R-13I*>6"X'Vm^Ni$3-.2Li(hVl%nU,L
k=j:itmrPr2uMhbP%kuJ,fQLcpCBj#qZlacr+FA9*G:qE,r<bRF"j*">*V#Zr@#*!%190Pm
K#W9$gII6;%I^!,utc<12*2T`crI-F?_P!!"B:99ff8'hZhNAO9#n!!$tYZrEI?;P=4F<@5
(P!!)H.cH]HR"oJT1iZ>I+RF"j*">*V#Zr@$UEr5Rtqr!);cC[>ii9b,fAK<gR-nHpna2b)
XX&^mgr,SoC[2_:6#`4Cpldi0W5CS"3Y$Du'BMbj:\]Di_eWY#+ZrEI?;P=4F<@5(P!.\6-
0elHfq.-0cKkf2?H1'HJ]5Hrg[;0jGbk^M$T>(*[MsAin(G8t&d/PDLWa.!&gGX!,4DNBEc
CI&3rV#!,5Q5o$qp8705tdIL/JUn);Ir0f"TTqb'bs`K<2ht8Uft0@#mgq3gYBf.)t,FJZr
G(mrUndM%g4KW*jen7cr-P?/QF.);uhFuU,,",fOO[*PH%W`*^>,/ITrVE3WiQc[:lNpTqt
'^>,k80W;loE<ifD#U-shC2O*dob9&ikclO.&V)eodWjQN>181O2$!O?&BW1t3`sW=c/R#N
[7S,%5[VU&-[-?>AV)eodWjQN>181O2$!O?&BW1uncX^X"?G#=IV+ZZ%M7<LF4[!*D]`-O<
\T?T_h6fn5:o6pS*BSG3]4kHKPG"aUMj>h+=t5c0V94IW$32\(0/)ehn`(2n&X+S<p@7\;d
A'4\VG5rts8CZZCHq^_ZXq=GeQDO3/6T8neZ*Q%q.B6\c272"2g+E8SND$V^:a^T#2XiBh1
p:Jd7;fl?Z4rTBrOjZQ>/!TW_@**:kFu_'3Zjc\:fD8#JU01gS/C#lurZE]=X!X.L+e9AP6
oYY.aR=il$[kDJiM";!dc<eZ6r`!%l_mcr-u799ff8'hZhNAO9#n!132a^\uEWEbC#^'e9b
20]:Tg@s6Q05<hBe-<@3MYpE&/QnenMWfs*P>)S[r'3ZlMTV]eaQ3mUE_#Z.\[_d_+[r1"_
2E'.Aq0RI8CM`Y-Vk5"cA4Z7M`?4dYMA@eT@)2p?C!]bK">//-ZrEI?;P=4F<@5(P!,r5SC
T4eR]=[h%djHFf7=OA7Ma\&NZ)u`fCS*_7;Z+WW4*FT%:uPi4X@SHt1M>!tS.%""8^LA;78
&mP/JUn);Ir0f"TXnIi0J[nN>a\Jn)#cYo<)B2C2BV5M\`:kWH\@2fs>>We>`&D5O@Op2LY
FDRE<fRSHLOp>-q7scr-P?/QF.);ugkD8m5u'>;n3=\T4Ojbbn1)p:ueZjn/9?cHFDCkKdd
OA9`BF4n(s6PUNeZlW0Fqcr-D;/_+%3<12*2T`crI-F?_PE!`OJC8"kfE6Xh/16_J&n[X.n
OH:$5*uR:lr&kRl&c["$U.$idpktI'1h`l>U8?"cQ3npOWA:0D!e<p?fM[FOV+W0],fn3E=
0GqS7]TXripPX7FamrPW`<N?GCE0V<ga9L7S@k:ZrChg;Ir0fKbCalRF"h4^a0h9WUB3BAc
KMXT7-FtVk:]8le1X,\)+^re%*JTTCqjK']Y!qEotR`K0OMFfWgl&CPn`&0OTFUS%]gneOe
+cX[PmJ#qZlacr+FA9*G<^T\EB1f<6j]T>k/^Y?nm\*?@:]hRjq[r:.JphU?`9bJOGd"j-*
t7Ri-9YHR^sX+!Z7gX"3l@^4!jq@6]/PG"aUMj>h+=t5c0V94IW$32\E\#"QQq<(cf.,*[^
=gQt0isk$#[;tBO3B9*Cg-NcPV)eodWjQN>181O2$!O?&BW2!i&km5CG:Zn&Ug1HN#)d4a7
"i,Jj^>Gp-UCD5(+iN5ZrAG>99ff8'`_KjrE?5jkF[6)WD^]+95W7]R>F#eGdLEt5teU$/Q
F.)<%(%*PmK#W!*k+]>H4oWs*c3M<%V+MPW_5&S"6*umFjE&I%8ig>3beHf@/0r*4@l*iX@
F3k09C;aiX85MHOVl181O2$!O?&BW2!i'("FPKn''e?b.ghLlRL]gsD<:<u*GqgoFM[:HnT
MC=T?Pmd>9'03Y_r[;+511hb7JGOP%jE)Bme[ri48/bSc#dm68c?[_Ut>Aq2tcWum0GiB%W
g01n!20S?=?+Y:%ge1e,KS5#H1M?FKgUC%T7Wn"GH1AiiT7?k9>.&+Ys8MmiRPYm=B[H>3b
:d5:I.r[]^86^.l1S9S_$;'H044_HD3ZYT;B5GNN>qcipoIW)`nDAZ3<h'8-F?`#5tdIL/J
S7jJcf1k;GrZ+M:u/G6m&[Nr1':I7>hq,G^'oO;FG^Z[u'p.n\l<=Y3+m/9((MPNc1n2Bkc
%n9mc?BpY=QZ%.89"b*Dkumk7kH\MGtr\T?q_q;mq]2/3u].<3^!rqPLk1M5GAoqfQ0Wi5h
-&J="R.TWX<_:QGDl-`mE?:H"#lU\B^RF"j*">*V#Zr@$E#nCXJ_FG\rUq;BUp@bq<f^.tk
ace):pY9foCVp%M=0Ff1l;TKuj:45VV5C/g%i[FnWMc>nD3m[Yn'\%*;GrZ\o.cA@d,06BN
KM!)\=_u8!sT/F#?:S]agY6-`A2f6lk`uQ_5<S!58l@l&/uR(at"g"Q7<PO.[6U&b(Q&f!%
u)B/QL:*h5,IR%NVVh1Fam>Puh:s\LH<.N3d*=(7?1b=A)r-C/qZVe`:rMM'nl#%1P1+8u<
0MDq_R4O$33(r2satCoKpb*3!/OY5C+E'E@gAs)$>jnn$0GAO9%D'!tW+cr'n[,rhcu:7aR
NGMV,gH#nV5M+6Ogk?#04@JR3JLRXd&\$rikXhb#i2('bAP^VSamkphhs8M#sPan,RPa%D%
N>e4p?Q*HYlKm31++<cY'.;85@70/N=e_b8KU)rkBW3b\V#l0?E(in>bBr%[qe)OLAn7k4o
Q1TS&!L26]p^cl@bWJPm+kPq1G`7DCh\r9ma@qig:Jh?^3mJ7mFq9d[0O"JV>C#`fjd3glI
<@jor>PUWE!W2181O2$!O?&BW2!i&ff@uVb`qf]3H-];0SP[e5RZ"EL$(YVk8hjD!__d[A@
JHAVjRCDjPtMkpMt`-7L5ejioaA[,8%BcaK-Sn35C2q=s!2*Up;/LS:QeKU)rkBW3b\V#l0
?E(inF5('m.>.n4RG1qRN/=+kh>FX+N[!6nC>5L<^qmFqd]Y([igY-e"h;$d$04&JLoONao
\ODDlG29S'g!EVE9UK5V=nV1:f,h-"&[YN*cr-P?/QF.);ugkDNbPJ`3d&kVW;#N'6[K@d+
!6\-J\KO,7pEBRp1pWP7Z;<%r]^/=PP71ae,^Q9rpFE999"gd1B)qORh[P\Gh]ZDG']^ed8
FOB98+"c<12*2!Pg!@VPP3A/a_2q@l6`3M2?4rG;m8&J)Z;4hLGS([VacVo%U$9RsObmM>t
QiNu'HUr5]I#et7,#WFE%?5*eXeS52BJ<0Z^qd*Sn![r0j&@EtB'rVH2f<2l%s?1-:GRgh0
\g"E]EXh>C1fU"XAl?IPu1i:sRDV_nM5QAA*pQDh^V-^cWX\+j.#"O.0[F]eRHpU.d`5s.5
mD=PbI=6NZeZ*3Ma(s;0XlKl,ZrEI?;P=4F<@5(P!,r5SBW9apD)8Ii?bUp`_a__lbr'`u*
Dp$E[VWK``JXO7JLUj9h5t\W`^[r[hL"]Sj83MNQ7=r=)fNAtA?)Ar*^4uH@=sBm<1uV^h*
FFL5(3:7[?It#]6<QM*JQn7C=K1:@D[\=kK_mJaMj&RkK]XQW`?*/`JPNQc)R)`ZY*&YA(I
_aF7nhK%i]'Feub[^)Au&ekH8Nu181O2$!O?&BW2!i&ff7r5Pse'h=Z'P_M+2:OrcMJE,`%
D7=N45'fU!`UcY2[bEeDF>LplG^]4;F_0r[\9:[eIL@,I=[@B6uVX@8^Y?j(aGl.-tA*kOY
',MHtj?Z-#md@g'^A%Y]_u7NqoBWTpQ75a%G>.$K2)[ADaKP&Zp$.g-Q)-WCDJlV>&&#aNe
lr@AAg1EY9PCD%JsIl"=t0N^"FIW-8WtLc0$Xj\H61,E7M$m-fk6r-*MGfR$@i'NVnlO'fs
Bl3`uinR;`$Rg".J(EF)l;CpKDYej#pQ[eX'Tg8UJ6njiSI?K^ukVqJ4n'?PN#!n8PF_]mT
X]mYb\iV7(-h8p?GN#7i^PROG1*DADiKhhg(u/QF.)<%(%*PmK#W!*k+]>O(:kP7?Ao`n/i
:@=s5fL?eb_WD]Q&*&q?Vgt&T3BB2!_#4H89H:senJ%k@+rr);8>;^#7FL:HgY?\WdW\J@0
oB&alhamG7pU=T#f3a#5HWYnPou)\#\u0Fu"q@ZF(\G+Nf6"bS4D<(a)tmG>/QF.)<%(%*P
mK#W!*k,H>,iupiWlk]^8"f8@M^Y%Gh>j]^]2%9#iisd[pbGJqtAP\\RW[?7YW\3V:M\K:O
BmD?@'_Jhg9P2dRAN8n%\nZg+f]E&e^r9ZJ0aW+gY@P\$rj?39$_sFm>4!dgHKidN2HL6Nq
X"99ff8'hZhNAO9#n!1.)&9?kT#M2mT;3HF12YIpSmjukbLmej:D',)%%n)Gl)TP^<"9h@q
(rS?%7O$/f#Sut/>\Lgg'G29?=cBp?(L0`ZJGH^_E[;+6t@9BQIq'<'O:Goi1XHm&'H?JUp
^AdtE)l>".-1-%R(F`8Cg9k]SN,1:RW_@**:kFu_'3Zjc\-1WRqX1uam^^Z@9q0_9>8J%j(
).JDj5\Uf;lBKbl\e*-4k'RjT+Y/r@FL]$AW#m]F6:]OH1sgi*j%N<OmdafgJTCpSub(YWD
]QJ1,<\#jl`4^:1Ifn2`FUjD&_.6MoAT.I!P+mHh#&kD'%T!QF_SGIdKFSh7Imc2T$"F3bX
SeB$D7K7^`aX<@5(P-p^Lk#qZkl>_6id[C:u+-Yc=NpP(Jb55OKfRl>3@r<jDok^HP'gMaj
W*QQs$g87R`mEo+FC1ZuhGO3sZHgp7_BU]7Y'c.[a]ldcA^k"D)Db<Y3#RJcuUgh<#<dc4c
DH!H.eK0+n\8es:C`?QX9PCD%JsIl"=t0N^"LTi3e'h6BH<%"HeK1E$gU<9K5f8<c[5VOT:
;>r"eE<HR?@0'De#1s5^S=8XdN1M!.*1PeFbPO'Bl@:5M2AK_HrF4KDNXD;WKYR_e9u^`QS
)Q[*o$t,<12*2T`crI-F?_PE!ZkUlML%bYPi7`Unf9l5pf9m+Sc?Q)`CB:'CP;V\mJ/hZ)(
dAIU2]K\2$3bk007IK+At`eE4Siq=s_uDnT8X@PU`s0r:_\qWb-8K@k@VY1nsX4fU[?B:jT
aoADO"V94IW$70Ab181NGJ4i_h;B%Q4S<fJ<4h$tDGNt2%'br%j$ER@76?aqMNp*Q59l-du
^(fhnjjhm^%2q(M*kY"(*g/1UL/+:#Bl@;Jp._Ek<8DIp2f.-nk1<u7H`=Dgf9U[cX@5dI#
qZlacr+FA9*G<^i:rUAUe$WA6\cS*cA7T1V-^oc?1J^iGOD!h<`Z>+V*0Wk/ToaPAO^$!qe
4ZgV;t:L621!$X]r9#).1+S?Fb*q][tRI'e31EGm19<99ff8'hZhNAO9#n!12X%QMT!!+!!
=[^u4"fNutPg>-VPUjBmK)ltkKllTY$]`0NH$g,(<d:ci@?W0-_1qG=B/p6t^+-%D+/hbjt
*3b7)_BoCE99?XsLetT"`KU)rkBW3b\V#l0?E(ioIF)u-DTRi4q]%h/tnDW*=55!E(VS!0\
9:")aORBSb9l-g.rr1K^\7YX!P>@u]d>*&<`>>qkro9&(b)A"2;KqTdD;K&BM\7=.aLhT*U
8?"cQ3npOWA:0D!e<qJCJ,E(oX3:W'4pdraceX,D9.e^g>c8<?JUh^iL+>MdGE6+&L4YQ0X
7J>G&r"Ws8D\g?dXY/<iqhaepmMW(RagT>O%M+>>0AmD,R0#&Xc_9>-q7scr-P?/QF.);ug
kDVRP&QV+T:==0H8_T(D-k^Nf:CbhR;EC5j,h9R.4"<N;k.TjN<J<I4i^>O'S/6`k^Sc1^t
rT1cqn%ooGu(%&.'r:A5ij3+p]p$:5!pKH;1n])`<Gm19<99ff8'hZhNAO9#n!10A5;P/@-
aThcHUIL5Hh9rQ<8'sd2%j!iNgphY$k&'"i4Y\\=@^2:X2pi)BkP"Ps:ReX5h0Za0qtk/i?
t)e%oCLEPb22K2pS8]bC1qPaLECu,).1+SDV_nS][tRIcTLfXbU['Q>,k80WDJ24.MGu8!4
W0fQ>5%/XD-/^L8HEWi60BieU9Vq?soZ$+==Nrh0VWES!TJ.oS`QB[;+7?hKnA1SRog-DlG
HG1$608[P7#glitj8AO9%D'!tW+cr'n[,rfs=SMtJYmZLoNTrYbfP*0pr&fr*s4c"qH2'aG
8H`4f8$ig"^O5>&dAB>J+QW1kX++C0%GER.eQ>``M:7TZP60Qt+U]"O!ET>'\]E6ZYV94IW
$70Ab181NGJ4jkDQ>5KeQdO4.P$9[34iG$\pM(4J@S>5l8iV>"]]<D"ioT9u]k`e'ig+M^R
@0JS^KY'PBT^LaSI-rK-F?`#5tdIL/JS7jJhsmcF6Ch_cV9cjICeK?`f(e1]9TEuYA+SW@S
?[kcTcR8ZY@l8ah:_dnDM-oH["c).@\AEDlH'W$5KoQnb)R_H%sV!Q7<PO.[6U&b(Q&f!%u
*U>H1N6I!P,DFm[m_EYGQZ\(9D([;+66#;NK[k2k^hhT\VKCUp!:-8[PYHe3q]F6D7>^*tZ
,dn`3Y*i+)Qju1Q4g!EW.6;*"FZrEI?;?=QZ3-e/6e>SN'oZEFLQ]mVCoD#;aWOeA!<NB03
j-\IsKt;EmC6/)_^]3-P>uiI!+[LJ,KE_l(fK?ks/TnjZ!SW0j-rD0K3SEOd3Ybhu9PCD%J
sIl"=t0N^"=J,eUIL6k/N'S1YI8`Sfs>>WN^%7+,i*H^>H1\aG1CG$DJj@^naSO+[6bXe7J
HD\@df=!5Ao6NVR4j/L^<B6"EESV2FD+E99ff8'hZhNAO9#n!12X)/N#.5::Dm$G^.k!G[=
_5Rr?$?49!?c-Zt3mD5gQ!"EWta[CW\Ze#&+AH`^P>/mWSnm]3P*Z>FPZ>&$Z%9$sA%[E!R
lq<'Oi1MrVW;k^&1KU)rkBW3b\V#l0?E:T;E]_q?D\ts#`RPd!^4CcA>h2t.l0f%8PmG#%h
.8ls4<`YO&M.L4.PV-6FHU'MK[k1gmfW`uMrVl]_\hC\J4553QDG!P:55F7Qh+<VD0uAY_3
ZD8&9PCD%JsIl"=t0N^"Qs^&'.6Q)m0dAV;GpDo)E'<)Z!=h[\g("A3n;;bZ*CRF6g`U8bP
:_@FmGndTU>c,UIVH?CM/`mP>e;M(#?R(>.*Xl9:)_#goQf&B?hLQ)&=Z!AEhO=f"V41KpF
2%=t5c0V94IW$32]pq-0ktT=Vd>'L)Nkj,Ap*K4A6&I_Bplg:CdOm2@OjVb`r9*UW0r^G`g
XHhQgR*Di\@]m<pgSFL$YKV+m/OhH,/[F[$9\7!k.B!p-q['V3PGX?V/,tjP/[;(t$YCX$Q
V94IW$70Ab181NGJ4jk\Q7D\+qALe?s7jW!Y$JZ:450N%kML^^>pBF]*BM^.$r^)'h;$em7
k7iSn:hAkN:41BrJb`BjH2sPN#?-sNK,Z!^-$Q'<!V<=8Tb!1T75M8hGpOQ`Msa!XHr^LiN
l9!pM[eAk/NB"2SB`QV5L4E?G(O=\okI[\3*rp9PCD%JsIl"=t0N^"IEf$U'!UNbVM^<6`!
D?B$Qnqrqll=&WL2@PUTBkootT4b*=Jie^I!f=0JbgAr.-Hr;HR'hK:1m-:S\R,?):hj$SP
0q=DosNJsBnQF:MV-6F>%qXs0d]=WtCT/1,?nNAbKjN3Spm[C)*c'gLo^OCTSG..+3\[f8^
^EPVn;FQl%I9c4]O$32=f</DSUSIGOnoRA;40j)!hJqSq2/1M"n])^f5MiMH2hSFl*A(8<Z
rAG>99ff8'`_Kj9=.YA4?VD,?RU$^F-s(6\+]Fb'BO#kb*B;GcQ58tGe8.db*FVpI$"0qk?
Bg]k09A7**IBU[VacV]"2Lu)H!"^`pD6VQgkC>);N-IUOW=C@eTs,!uELj0Q#ONZ"(fa*BL
QOn(nKm2QTr]gASe[rR\g`-$Oa<-5tu-n%</\Y*CVF\n0'NhVR,KV40PjmVfl=2K@_EZ'th
#%d_W?b?Jnu-'#V*+N@WcY]/PfX(Ec9f(m,e+,H9;f@P5pUe)^Q+Z!cVS1nBgYJ:(jY@#$[
/R$Z*=nDV3#hQ7ehgR5d2Hm+SBW4g[Q7<PO.KHs]=)"X#LCP?+XUI*$D91GqN>st,L(.jH6
ocP>jb4LW0R`EXf;r+2M'HN*A&jTmqWO[afXnauePZQj-9,C6jiWjpdu1;cQ7<PO.[6U&b(
Q&f!%u*A>&&A0qHImOjabKMZXuoN^1MWTe>XW\MHI9[8sLmj%N?3#BB82PP$WJ!-(BpOX<g
N*)#mRA.BIBc2fIQ#p!m+a0X8ff0AG_[ej`;t#qZlacr+FA9*G<^i'K"q3-44U[;+7Y=r&S
gXD%4-KK=;CB[sOTqs6*`_ld=ZqN48hZ.&^/k3hYTnCt7GoCr"2^%%>DXDOq'6:/PqcTZ.5
M+'j%g#M2E78&mP/JUn);Ir0f"TXnI=tTEN>JIIkrqYaEe.eo^W?QDmg[jUS)gQhQ*W>j-1
H=r[%3'3BB#f@0@q0B4ECmKKc+<qURW`.-9E"2-=_I2a?3^Z=Rf:/B5tdIL/JUn);Ir0f"T
XnIE\6sf>7XO*jHEA5Y6f@;ekJh3Pan3k6,j:6:f*8DOcLMEB&ji52@Bm#PMC@")`MZ9>e.
0=p?iFF>,m[SSF#M)BtoMtl-m].Qdd-]W_@**:kFu_'3Zjc\-,lLWBs?TcJZNkc2%U6)!@f
hI`fgU11b>R=0=CT:"&7hBWFTt92"mMp+BCIQmmB1&*"1U[?E+BY&rsYakiZh[CN+@(5q:`
hgRBV,U7(Br:mbcBW3b\V*YJlW_@**!8nJp[&)Up)]L<Yp6+g9@DdhsJ(XG<R56Eu[*UF1i
r?];o;2tLa2Q$*C"()U4#L`!m^_Kr/mN)XMdW%1]6Ac$l)47=Waa3+[;56g^L)#9=0Grtf<
=(AO$.+7grbj11M"Q<;dM_)d8FOB98+"c<12*2!Pg"kFA';aa,V13St<oZ(UpC\PUKD'D;2
MMr\i4T#7hmRm^qr1Pq2UE$&E%=1O+:p]]_sCpQBQ@GCT5/2o#Clq_`0?jQ5Kk[F_8e03sV
[4j'*EDtDiA-G!aD\okth=L;a=;Gr[71DF,;jN*I+lI<(aDPB#'o[6B>IJ).G\T>/#Rql*4
<12*2T`crI-F?_PE!aY.ak&B&pA7%o'2o>M%dquSUIK5:^#8_LT,51KcC?mQ4DVqpU&aW=^
HXD+Y\2:R*ZcBk^AG(s-DJ(0D;*L(nc/CENsQIHZu=k$Dh%YRp8rk;HKqI?5Q"?b^WDZe7n
#kCV59S8!W1!`bn]jBp%<1W\8dc`<OAB$;lj(UEH"/=kTb(pJ,]9,d*U-La,W0QI@iK=+t+
k<CY,_m^]&PI11`:S-n=gmDnX]3F6?Dq7R]d9?Fb*qhK(K)Q7<PO.[6U&b(Q&f!)Ot)4oO<
TKBq*j>I%d2=BO5(V+\cl+$+Kl,9oSKeElV_`JXs2*8%T1O4`Reldq&ELl[Tm8kN"STG\DS
AS!/5,`"SreQ(t,peUG+7un]+s5UM&f::pR_)H8e&8.H!fVVB4`$D+QUZ:@ncC[=nR[U7&C
(Ed,PmK#W9$gII6;%I^!,utc<12*2T`crI-F?_P!!"B:99ff8'hZhNAO9#n!!$tYZrEI?;P
=4F<@5(P!!!!H7n]*R/JUn);Ir0f"TSOAEjSf6cr-P?/QF.);ucmu-V$gp#qZlacr+FA9*G
:qE,r<bRF"j*">*V#Zr@#*!%190PmK#W9$gII6;%I^!,utc<12*2T`crI-F?_P!!"B:99ff
8'hZhNAO9#n!!$tYZrEI?;P=4F<@5(P!!!!H7n]*R/JUn);Ir0f"TSOAEjSf6cr-P?/QF.)
;ucmu-V$gp#qZlacr+FA9*G:qE,r<bRF"j*">*V#Zr@#*!%190PmK#W9$gII6;%I^!,utc<
12*2T`crI-F?_P!!"B:99ff8'hZhNAO9#n!!$tYZrEI?;P=4F<@5(P!!!!H7n]*R/JUn);I
r0f"TSOAEjSf6cr-P?/QF.);ucmu-V$gp#qZlacr+FA9*G:qE,r<bRF"j*">*V#Zr@#*!%1
90PmK#W9$gII6;%I^!,utc<12*2T`crI-F?_P!!"B:99ff8'hZhNAO9#n!!$tYZrEI?;P=4
F<@5(P!!!!H7n]*R/JUn);Ir0f"TSOAEjSf6cr-P?/QF.);ucmu-V$gp#qZlacr+FA9*G:q
E,r<bRF"j*">*V#Zr@#*!%190PmK#W9$gII6;%I^!,utc<12*2T`crI-F?_P!!"B:99ff8'
hZhNAO9#n!!$tYZrEI?;P=4F<@5(P!!!!H7n]*R/JUn);Ir0f"TSOAEjSf6cr-P?/QF.);u
cmu-V$gp#qZlacr+FA9*G;3Fm7>NjQ'k%ZN/nhZrEI?;P=4F<@5(P!,t@E)&_nWqsGDA]TJ
GCUj=Wnm#IA]'3ZlMTV]eaQ3mUEa'u;qkg6$M/N%=p4EKYDl59W,03YALBW4g[Q7<PO.KHu
K@Ddg7]$%G+5'uYK1"DHh?q7S'RF"j*">*V#Zr@$E/W1Du/mPo*U&V0@q==FVm8H/*!;8`P
PmK#W9$gII6;%I^(\5TgIm!SkUP0bb9URZj[V\r+5lc'o99ff8'hZhNAO9#n!*=1>r;"L#.
mL84hH$pmaiMOoe^FY/5$Fs[BW4g[Q7<PO.KHu3['[2!hKVD_U>GV8cTeJ%.0/te;Ir0fKb
CalRF"h4_"h+aQ8WU6:f2cFMj>h+=t5c0V94IWMYo%h4oNa$6[SOn=gr9SA7VM2cY_FFM>q
nmjN6cTCt5ioN#FZpTPd3kp%;<J9`XlR99ff8'hZhNAO9$Y5'-8R`MH4op?U>6If9,h4S+N
OP2>$N]mBA:%3%4lhnT2C"Ug>45H]>#^k7>qL:Xq+Bq3E,ruF=Q]]s24YTm>O9PCD%JsIl"
=t9)uoB4FqQnY4?]mBE;Tu4AI'e4=hcsb4i3B(j2:q]63Ir4)W]m0),g(ebYUe.Sa$,F8gW
A:0D64$hq9PCDEFaNiKC#?XQd@s'H/uSFo;5-J%Q7\l+U/^S$$G'06:6dJ>?K59B;PZj&E3
KGAZ$Q*.0k84Fl-^k=3niG[")pJ.W_@**:kFu_'3Zkj='T"ckF[6A@QD-ZHgeYg""9j88kM
_Cg9n==C.LmOl.\p+9O,&Eh>$O#]6<Qkh?&a&rqP:g?+G!Pl!":`Mj>h+=t5c0V94IW$<NI
`T&-YX5BD=(WaYJZaf>(P"\rB1hA9OHTlF6O.opK.OsQuD[r1$5g2@4".\Hnr<@5(P-p^Lk
#qZlE-S@#Hq\Mr'gV%sClCCCqo>;)'BUk:*M\hG1Lp4pChgG#imC*0L'i9LJ.MGu8Pb=kqK
U)ts&f)6`Z=HO*4/e1+?@#39:8>U]N/Z7G-cK:tmFnskg,(ArE)*c>RF"j*">*V#ZrFPs=g
M_N]=XQd61k[+2GEdmUVP!rc0aB$qZBX87j!/$_hJWogGCJsE)*c>RF"j*">*V#ZrFOBIt)
t87n23bfO@06K'HW3!TiM-GL$Ru\od0W4*K8!UU4"93RL`96;*"FZrEI?;W/6T6:0``Wk5l
iM%V,9qN8@3l`/fa'PP>!_08(-:o6pS?+Y:5H],71^cBe?AO9%D'!tW+cr/j#eui:o_sMh?
+nb?o(ccWtqXs/MT0Ag8RsSe`o^qdN7urQ-IDUXD?[r#sN>aYq2@+O$KlYA&/UQQ@8'7)I[
t"F,#AfEd$90D:W_@**:kFu_'3ZlUgk?+PSppNMX8;)\r6PDeS2p2\N>omHEoP#oET>(;rU
56Nq_tsX)IL4+fm^O;(pnGOf#*7R4(_^(<5:NA;Ir0fKbCalRF"jjbUaN&_hJV[pXAEXX8i
1rmkS)]Fk,*qpNA3-d\M_&3s)o!=t8I#BW3b\V*YJlW_@**E+Un<bV3@#^\dH2N/S0D[[W_
S3bHSQ<oYTYBW6N'U8?"cQ3npOWA:0D_J(;D-^QJnhFKkRGB]ZBHa`58!r2jK'lZpT<12*2
T`crI-F?`3XT8M.(oaH&MA04#BT_T%)O6ncIc/"mLkpk[TV0Dj-Vp0fBuZ)L9:%9e]6A0c8
rD?5=Y,kSf<1Z.I6&Mp6-L]'->))FFW35TfX#5:OX!BEdaDY1ccO:cO,k)EX^Ah,.On'g_p
P5L1G^i3R_0*tm&ZSuY$JZXc>MCF:&M>bVqR!`,;1_=jN3U$euY8sCY"_!;Z["%VG3Nq()F
>ga,UND/ss@5-Z>te=]pLj+'uBlfl+Y(2IXIUWDf^PGEDU'qtBDM:/4hIX5!*6ZY.UAdn.3
g`EBQ^djB'(mG>N\r:@I?kJTYc27IpCA7WWu`emi6p?^Jl6lJ:=r9_sIq=<Y,IlH]R-lUC$
3?p-X@dE%+M'FFW^0nd/X]r8l=39<g^5$r;Knb>.H[C8@p"(d"[f#3M:[6H/oBE0F[Vjp4H
hZr\"q;4.f]LGJ*C$faTr#nbQ3npOWA:0D_Dto8HM,ZU+#VJE7u\F`HEoTM$<A^#qXj%Dg2
!l,/mMLg?XA3WjdnV^Y$/6umQ2'9K4n\Cr:*9rE:Df%K>"q155aoflIDpO.oo@@V(Q,h]SD
8tGeqAacH'%(gpeNYT3]'PIH?_q*dF#`2`J4gPq+e1g2tQ+0uo=s\)71V3,p-)4T*f<Ihe/
]fW\f/RPhLF8L,W`Z!p/l-[gAi7+]N*cF2Wc*_*N.l-lOhCY%j/-_A\PWgK]^Vl)M=f<8O?
A\5N*<P4:VX<c]#j5]0Lq;mqR557D'^kng5hEg-47n,u%muWD#N[UJb5s]_0GD[1iY5P)O2
qJEj][4B@qga1sEAlNbD@[su%8fd;[7._A[3+WZrnj_UX#=nQ>dW+rHhWt/Y#A4rk005<g7
S)ZA"J/GkqBdG6F>@?Ua/mIq`qc:mHW,r9=]*)Zk(jG*e4+XO$EVgi4smo=0?X1Oae3OW_@
**:kFu_'3ZlUP?<qc=ZlWB+9,/#;_=`@N>OD0\`]P?^)X^Y<"H5<^3&V&=YgYjbl\1\L_[3
t-]=8TSO[YQ7P&+>KA3nUirccUQ'Jb%nRAcWe6TZC1M4=HogG,\V-\V#04):>k0U#%+44lH
PURi`Z\%Ct?[_UtmbPM:-YA%a:trEqXa9XCn`Rk:j_k=(gJVlBGOA_j-Bjpg]4fTdpYL8Cg
+A2r1N_j-.p&lE^)DLWHLL4X^OO+R$16HS'.m>W]i4.GWW(1)mfWk#Mg('VoX(/PHa[kM^/
d+s]2bk1WF*DhU9<34J_8W-YJ:(JABC!8D-+BkU=/J_A*3VU>Zepi=K>ISgKob!8sLn!jd0
=lgU>AF\J[e.PmK#W9$gII6;*"Gb08'dnr6VRnhKo44ibaea:O8?Z(@(\%R'C(,JAHu[d&u
9%ho]l<46UGR@-02e##hQ',0hN-oj;5q!d7n4uqgJFm@HgL"b[[4am2!M_DeXedgQ3If9+?
;,NL36UQ6K]SD8tbRBCD.FPP8:RU+@3_rCS]mB?E0>/X;h(iQa9URY)jqiWuVb`ZZ>E4IN*
AA`a`9+UE]6a.M3"rCl]8d+G<ifD<C9"ZT3-XdqgU:t,Is%edr+sE6*A:a3.0"%<IoFjt=&
8gl\AQqM=+43$U8?"cQ3npOWA:0D_?heu[`lfRiQ!$i<'A\8'1JcfN>cC\LFQ9%Y[kigRJH
XQpm<q,q`Xc9PO$i([ob1j]e-*rb*ZX<r7c/)fs\4WNZ9cb%M'dbcL'>n1]7uDiWU;\DO`/
H6E"(qC.q<[D)60dQC<u"o&Z3FR^Mem%3!msi8[+U#+7?.LM>8:O]e=-^16-=Ka)HYB>b#s
Hsl=EJqJ[tHgEIc[U-+A\VGTL_]WrM1B"Bpeui:/1F:f&;Ir0fKbCalRF"jjKY4t1F;G609
9usNGF*,(HLtnHcNN)l1o%d5qrZu#fJY%f[a[XQ9''8q]k-W!@[BN!ZXIM6h,8/)'u7b!C0
FeEZY%J+SRI?f-,RR;D4$:QQ?qoM1"1Uk?EID=KS0II?4@.H<2!pKRV(BM7pI@Q]tM[]hQU
G+N)(QX41fRscK7ke>Z$-*Jo#d"Q7lVE^b<[M&6C7.s'ieM>,k80WDJ24.MGu8S5!$bQBAr
VmaS5"lC$MP@^5Rie&U8*d+t-IBk#i1BC4MQmA+^[_D^1EehJbad&kXFcC-W6L;S"l)`MZI
s8MohQsm7/`Ki)[B'juq[a]a&p6k\K^q3UK>4pCE;qAZ$NbPIZX]i-nMpKY;2a@)q"4QGAI
J\2?'1bnpDqqk-kn>IelY6tN*,P!M,#5%+*dP]rajdCpe(U4WJsIl"=t5c0V94IW$>6\^gG
U;BK[#uFX.JRhHM6]>qJtd@/R,ZjiCe>Hg/<X&SpJQ5cY>MBV&$YMEh5:4VR;3>DIQUaVi#
ei=JGic`ue>V8RY8OO,oY*;R<gc[;0"DrCVjQ<'g.<R9PH'MJC%GVKA(Q<Qa6t3-'(]Rl>8
'q?647>-t5.Qi4"eXI!:CfcDs>o('*Z-qU,/b(Q&f-"s85Tr#WZN#=E@GEG_)>WLtmrnqYR
a,d^MEp.rS#7e+aDQ__lL$md/>ICetCoN,+rC1qod\YM9OkW8MC!iZ/]k@,W$SR;gCj]9`>
3_qWQ`=&dB)8Cnnb(L@>BPlEfi!MA1M0`H]fX0Ce>cM!HVCD1P9pLsd&gM2HVE@8'e31mHM
+;Sq#gg'fP)7f-;Cf50M/"8b(Q&f-"s85Tr#WZ(g1XRqQ&t<fsu1%BIe70&`(@Lc-=tg_7F
_]/RH*"<F=F#E(_d)lRUCmUK3sAs'b<PC_SI)Zr3_m0>@4U_++ghn^C8u)5!1WQ7>Lm[5U$
njH2rIe>Q6PC/s*Qr8(/\IB:!pO+U[%dn`3!P*0:%H?U3RFI*HT=__IK$Pk:tC05JlXB;a%
316n^&\>fnB?89>1]E^^cTLem_hJW>aBcE$mG,7YVl+0["q=mep!niR@DM#0P=_LFb(Q&f-
"s85Tr#WZ<3KV6G>Vf?%:JQH,9rsqc'ej'6\PmaY#hg`kg?.A/R#MugU8+aFt?q1<3-1+Zt
N=26j\Ku<3BKZWlNTP[T"t3Z.f6AUQ<.bk*mM]LA:ZCc^H`WpYUI-Z=M(Q8X'#Ckp,dmY$/
5Jp$:3_+<Y(N_M-1"0+SBs)E)D6rVH2Hp\LRNLDo&Q,:up^Cn!>"]Y2"tT$E]X,:kB^c'gM
!R6>idA2-"r0<Z0uGepD.XAc#lG':;oVi@(A_':QJo-6bc4F[5'h&cm8FQnsUmH^sjDI`lI
DiK5m;b9Uk$k+sPPaJ$Zm@HD;*BnjQS@8]@0jVD7D;u_>eSV:ph`Dp/pn?n2iX^sV[^\ATG
PA+;X$T->`!P"o;^\V0`]R\H"G:d-j1p3J<o"lhFMj\5HVU+m2*=!Kldi1bp?^JFH*_a6MD
onVmbR3[Xa>7RMiE_HSNpXnU;<>_55F9'ic6<)fA.O'\T[A/\1AKp\?_TngV/+5FJgDX89Z
KP#5n2LD`(!W:J]l]HabsYT7?k9SaX%FT5q`"DBF\#.MGu8Pb=kqKU)tCP+.qVA@Z:==7,@
sf@SWqi_$:a]63F_k006KN?]4qU(81/DPHkCT:p-qmEq\amN<)R&QV&.7MJ!M5JOO;cTZ/1
nUDGSp"@MA^MJ:1F^(kJ-Q=$q*"M")dh)2jp`tQJ%3+Sm.GbH,9&I:,o3m9-V>g,OdiX);E
S[>&qsHOu'@Uft2Vc_QgXW?+`Bho-L%=?Kc^m:(UL5Dr-hloV96VB7pYUHZ3&fZZqYg0GlO
G*Ke%0\f%,M6DWjDZ->JGplqqqEkAE6(d*cSc5k>'hf;c6N3qn6:IG0`>GS<69ZjK@k/![t
3-g7Qu&Y[Bc-EohCuC>HJ/mZ_f(>`BXZNZL?`43el+D)d"Bph-4Ip76Ea1&b,6U8?"cQ3np
OWA:0D_Ps%hIG2bW-R0j'oh>DOb*=KR9:+5#F30Rk=05Y;AAF0D2]DJtg`qkBP*hVME0@**
<8k]J$^E2Ad[cjUZh*>(1\g:9T76W.G<j">LORK_WOI^6rJuI+_oN7YGiFQqf<,u2<h'T0"
,_.H1,@;!B\U"7f.F"31kQkrFaQh>EbFa*?@#1J*/oh7HLtn,d2FiT?uU"\[+*iNEcO3am&
3!)_5\$-04)<DaI$P^QF5\+cUL)A&/,`;k2rPSoqFm5cC[>Ya;/8q@s*]EOWm4Nrqbq=h-1
=-C$YL,#P$076T4k8.;5\9Tqt'^>,k80WGj=k[VX>sDE[U81TIAK^BP2iX?0jq68M_&DVMC
(6h00TFbfAA^V@Scc"a5-h)[g4/(3$UHd2?2k2k\Bq&NC9=I?o*c#'GhBDC;,hs&FjO>W)a
XC&`Vp/$GN(LFRgSaf9@6q$66cerkc*8FGq>e-U+2;=!'.pfl5dJ0*dIf$88bA6V94\T[kJ
).^%ll0lUTfo(,n*b165`<VPlDq,R%TpGmq7*poj7BX8Vl-H\":S>\gU:tRVYcL=;56Tp&#
0$.L_iHsVq%H:b(Q&f-"s85Tr#W*)#:jq-oJ$&q-RUUC#ms-e##jGG3#<h+PgHpgG8OcAJ8
:Jd%EZ,mEn<*Yj1a5U4MUtm(`T!DhFgQhGXBbeHLmo@\[u*b!quUZ$Z4_h4a]=m;))7Fam3
=W)4caj#FQFlJD6Tc-=M5^Z5u);cB<<rd!m>%Ghf?gm7f'Z0t>oD;3Y"BH&mJe/cfih*!e[
g8[^_Q]R<%gF0i7nk3bRmGG[np6ahjeK3]&B:m`LnJ>P[dFLH]M3]V)=t5c0V94IW$E#Xlc
5bY/=2Tb%<DW5$N7=nPhKd.rB-<'Rq;?l9F9eEsDk<*=b\a=KIVlQAq/YKtAnPcBhHm'RRl
1I@ZU[Y'/mc2(jL^UFG$Oc#I:^Tf[GaTYnaZ/'^ZL"3Z,_fNJCD=d<V-I^bo&(apR!p[U@t
fuI.;oQED1;MK'mK-??tWIK0tJZX$)\$Gjo*VB5$)H5Q@gup#<rK)ujfm*LAEdf"SUqiPL;
P>e-R`K(]Z#%)*OJ%4tR,ZrAG>99ff8'i&>oZt[+0Y%GqIWLi7%[;4AhGIG,-n$[*&f[s<^
cdoO<dDEt$k-id/2fJ!<iQBkY$0cnPYYL`M#)BK_9,3&2K=+2b3d'_`4\/mc?H%d:[0Nu%_
(g02pu@FC8)CL\L[H:FCoIXL*70+*Xa4s1*QcFF,tjQR(q+PNd^cp!]&VG<V>g>WYM*Kt]=
V]fB'PD?QBnD]O+hKMda5-UV#?qcq&eu1FRIr;[ZP\?G^+JC`fJ`P=&8_6D19^66F9^[cr-
P?/QF.)<&bU;:QRF4EB(SQcHb"SDj'X.ofsUJpn@EV@Z?hJSut/8\Lgg+qsCl##OKm8McBl
Uqtk.>=K5=LK1"=qV2?M#H^Eb?Sp3U!6bb?11"miX2W(*;`/##Z,>Xab8Tt_9[T)(s<k36^
)a9-ugIE?6UcnMCj2Z9IYt%IC[;2-&R"CHUXb`RF4-%,f2VZ6mc0fEF9*ShebaI00%iI,jj
2Z<Bii>tR9#_t!j<SE<181O2$!O?&BW5r#'.-E"?1p*nhH]_1s'sBH4h=Q42f>/0-B*=6Fj
$(&]&T17;S.,>W]ab=VG402E;fY+\pKm9S8;^aqmBD>gY5qVSpU5"eJKGP+@,hEX&lKBoCR
.>o@Ua'GMPP)fi":rBqi9mCX:5:%3.?(HZ14E9s[>_c-4B_>e%$3YhHi?]WGDIDVB`--rE>
.aY/fD6US7/:pt1C,N%""+Peu^p:gllgt/]DeZ*E9XKcVg9$gII6;*"FZrEI?;W1TP:S4f%
[.sFVO&]!I5E'tLq8A+'17Pdnj+cu:G3$`,]&T17;K_GQo>rAP=>f%,j2Z:Lbk(#D)]?f$/
bS&<K=^ZE11c?_#TYsJd/J#<0/&fm-dF[<_*@e[,MbX*fhut-O$%XS>aks/$k1W,I)LgQ\q
AY1V$^5&<7)b1p?^JDK=q3[le6tJDVWm!\Ja#&?U*oaI/`s)2@lCJR]8N\p4HqcD;1rdj*,
`mGhDKQ;Wa^Mb(Q&f-"s85Tr#W*(qG!VjMtrY@cSRinlsMT[u?Hq5F^M-FUusUDng/>J/K4
B\mN=6O,l4TP[.L.?='5kP=`Objr99l?@2&sm2n:d'U&>>-RW[??F+6<h*E%3;Nm9,Zo96M
5()#FnTAbfAu&hgWMSm/Qp2]95^NY(Q>q+mf,eJds'tL\^oBHhp2(OkXKa([B^@=U\&>5%`
$:-SHP^JIJA&s/5XhrN?j#b)n%JII_2_e5"@T9^ZMEY(qsij"XI7W4m'V*+labm<]]ZM3rF
RqMhKuAm\T9(H`_P9sD1r@Zr.]>$_@n=(hd?lt6`jP"KZd!r3UL*W>U7NsAkZU3EWSl;>_&
Zn#qQgY'J(c^<2icLGFAKM_SSXL:.9X'mFehDn5bu9D+\Y5ED&HDr4$]u2/:VPgJdB"0J%/
--*(j]"R=dcJ,]8A^rORD>57-X;PZhqC'T`1W@TRjW(N*l4fCfLA?"(f-5S48+Pai_Vba94
'YAsX=K5H+/n0%*JFHHA-Vp<JgL,R6"bmL-HM=S!Nf.;EEWSl;>_&Zn#qQgY'ULI[V@Fl/(
GF(Gbl8m"C4%qJG6"U="nT@p^6@H1=A->HiIZ$$A]pASgJdAu03>;]@;/5K9-$*;XDn'eW`
@7/ZOmc]_Oi[e8P)Lj*Aj4]Z@!sp.d#mUe07nue,]XU#WFhjnmp\pLk/GcW9W_7#(qL'c'$
fUqtga;aYF>&=)$6efo@(7<1P(5!jGWaJY`E#^f'7sQ3p:mlAKd60M\F=.b+,ZVG3O,Ik0#
?O)sF*7;YG49;PB]._u82PURj4k/E5p=kZa-;Q1$l$@IauX?lWf7R6b3Vdq#U.a+=;Wm[V1
$YkeR=mF(j,DDVX0O]QP$S:TfWHt1qNfFm[YLS3(i?9?fe@0W*q!Pc_aN]q=NHcZJ99g/m.
c:@Z<DHr$^ncdGNMX@]QqbREU^BG:FE>j(7Imq)1)?]=:Tq:)H?jcB2^lKF.oiSpgnop1.W
s./I/3>Ep0!]Z1t<p01fUu;7^H'[AZ&L]jm?cI/Ci>&<k);4V)gUs$+H!@7h3Y!pok;L*%Y
uOX+7[g2mpr(THI)bW+I;VY$Al"&,5\e;f?;(!_\dl==W51/6,GQWPI#Vr^KIuG'<"RAhoJ
\i?D@,?7gXW/5J]hKnTglU:@&V^OKV#5m\l?\T29?2GM+fWS\Y*c^m9U41KM'T($BPJE^19
SXl<k\ssWX/Tq!dn\WOK/_.\R6+DWcKaUO%N#c84?ZE\^"eIl(`_n:s6[%qT?08TdkKcqAU
llPF;$:"$SA8#'(LX4_!_W]o7_<j2Vuqd*!seBL1RU;UldDV&j_n_b[VaO-&KMlDg^#H2Ao
27U/n/U.AsV+_9u0`,_ec)NlJfd@NRR"5?s,/)A1^g,Du,?!$C31,pW`Bsf,$)H>ilfOrUn
e:n)(1T=+u4%apBU6Dul7S-a6QXC.t6`SN9^u;l0tG&fA$M0(h2>eh$W$Tg%'UnB5)eYZ.$
uV1nc9l8RUJPM'TZ5Ok4%DdI/`Zd'6!*BSG?(2:(?\o-=bC'Rb0r5TMCp_E\cD.mVHUe-b\
:AXV=GMbQ5r`l;5.L[k.:11&O$a<SjJY`EHK5p&"CY,`ZXcmL"2E!Ja\$B\p,2oX<-r>HJ#
V8tfD/#CsDk:qFV+R#qm'H0;]bCCHg6=!_K%`Mc=mGkVl]'BZbimfj0==?7[FD<_[o,:)'G
Mgd2F_.b@RTQu(!)t0HX^HYKZ].PY#qr\\eMOP'e32Pp%;=4QVrC2apBU6Dul7S-a6QXC64
RCR@+q8S1o?cE5$J'C=Pqd67XQ:q-3[\YJ5b"_QkpG/6-;!Bc0'[ZuGp8lIF)EZRh;mX]r:
&Q"gk)VKU="Q?r>q@GqY-*^4tMhVS&&nKYG4PI8n]kKZs!SsPe1K\G'-;P]+f!V>L#=7>Xl
If3GFnHOX)baC7m\oc&^1FI<@B&o:cISk6.WilIsPnR7LhuYH0:11':"DQGg)0M%&042FhT
0@6GP.KX]Pq#epDhYbQg9tikD$6.SZaR6JB[K/VI7m4+JWE_O'OS.VM4F.te#6+gi<kVe4f
ZSX=PhJ+gU!iGXJJ+-p5HTW2Jq.nWRIqFf8QU#_A%7hmbPg<'+5U/9\l?*fX5L]O\:D)apB
U6Dul7S-a6QXK$9iOT4O*<IJS&G74qiT:q4.X3HBNHr)q;lP*2!Bq;rXTXc+8^QJ)g"<G$)
^TrpX;DVR4&O&Nf:(c#WXSFY`.eaU8!pF<JBYcohH0?ZG$mSm_$Otg*4NJi_<SNF<",GRbi
QIKVL3d'^5>X82[m8Y`'5p@Ks*$$%M<id_)UU4"!:dNe[a-)"MapBU6Dul7S-a6QXJinP^S
7U7#I/3@/q"X>.o$jX;e-_6Y5;$R^2fIQKDSk5cS_=Q)<G$*I4F6Wj\8d+iS!uYN,=db.rc
ktojc'3b@9TUnCpTXPN)6?Ykg6"qD+bcoCT2uZIelXGOd\.C8uR`?=gM]H(Jq>D_3gT,<GP
DH@\$`3D#*%F+,'NV$Mdc=R,u.^jTLkV\,]0e'3H_<9j4uAaYHC@2`KnWU^mqFcB0?,E-_E
Yool]gl77sLVb`p_gOZ3DX=]]erqT'oEPd>5%g6'DR54"&p$7bkPRhnJalU^4/%)Ksh7<o2
le??mNK9-%C3("AAP4%#BTR0XKNkp'8LTX^K*Mob$Qsqo?3)NAb^/!MBe8_R$9pMD33Z@BJ
Y`E#^f'7sQ3p;!Q?>Mm=LN#`Y9KGoD(8dpJH?!!,9s$B*Z#V_?/;\NKaKA*_,=jqQ@cq\T[
!pKW`1G+Y>&?9GTkiD@IW3kdOJ3!Wr%_l0g_jV;&<EY`quH:;moYkBmrR4*%@RD7RBF.W&*
74=BMM'J?#,!E?]>X]Y_?tfs7G/97j"_#qQg1!L>2_YZ,#!&4[rP7NI+mqssUHSiqG1'M2R
WL+mi>>\T2PgY5XGB3ad-Q7B5L'Sn@J\"&FpEK_Jor)'s9E_:\)H:f\c5*I?i(+ue9oB&Y^
MoFA!pu."lk\-g$-l,ai<.BCIlC/B2o&T?7p6JMu,LgYsZ5NVG=9Vj5A;P9WW`QBAb^*ZrE
WSl;>_&Zn#qQgY/=SP7U5j_$0JbM+EH*^^L%!m3U]-L>042H&Dr6Fh3?TGpA^8C:2f>k,#"
t4a>On,a9e'/C,ht.`hnFNgVP[%T6>`W?j2Sa]N-a<BF'c\:3:#2":Ycu.l'0nl=A7CG$,?
H4)g1VWCtV_"f-21S*2j$?X]dS-,XeI1<$a(H9R)FER8^AI"dUVcYZ/CA=K7n,;LurQOH<;
@=uGRV.#%$@Z]>t[7_sY(E,b<@7>pTjV-G./QBp%S>.8B$C'kOs7-<Xoe7O40q.I\O@Au"t
,7nW%DO+,/E+,%7rTr2nQH?s(FQbtB!=>UFjSJQ8eCms*>,Ba285n$_AQ/54=AbHqV/G/&R
:Yh=?+O!%OXpV>#3O'nMcrBpVG3h[U/\-Y<J9g63HF17k/7P0<&oN+!\V8djTLkV9UQ8)0!
L;t;lNs.lMgbZj_U%f3QNUsjN*H49>K36g'[jC;(%[H\od2R\7S$);Guu?]ij'"?ORO4R[/
?snm/hK8Q9PeNfG[R+oB+uD;2Lq[RU&<J,\KolRSu7q1OES:^\dVZD:C5NeN1@'e*%6\j`=
qe##itNK$qKU[4AXV%WHrY/$OobEmI3(+iG+Vu$/V:G%+db:gWCI/-["!`VU5)X=t\o,=qP
=K7n,;?7SAWH&&5"X_NN&L1D45\[3!YMSQpWriG+fsd-+ODs7"%:XDCT'Bih(5/Uh93$K>n
]1P$mtI5<#RG,$^-,,)`5gP\BS3-nUg(<G/CU5?qXeLki5$rRR[KSK&&MIuY=sKagrbm4M9
7Q]S4[a>n?-'/\od0lET0BkT4M._Z:U6,TqS10VT;ndk007bkKaP6c.ojN)>?Vfg9hG33[A
-rb1Eh(4$#D\CY%jnOX$SaB]>>Hbk;*b$E[OA^3B%;W&d:468i]7FR@d>J\QL(ll#K8LD7J
ujr5Mf&fqjMLkn$0i'?bf]a"ub`;Z`QgU?qRq2*p.>0+a<]2ke&)*.)B"dUVcYZ/CA=K7n,
;LsZ<*ZeX_7Ld@G=B`"CcX*YQXeA+;g=b0HhS#BeQ-!.ombPKVY$<.MR>c8IDVVa0_#eCfl
fQH](G&ZBZZ`;9IQi#GJE<1X6N6oY7un]c$HQnphVR,<Vb^rN(GuA^pE*=bV.Kp//TM>_,E
hIb3b!eUc^l.5AdnPK))uT.W;]t'=g?RMLA+*%af(]!-^fC"6EZR-[r8mh\_5]jeu`.8Fd]
$irqJi[@>&(,L9X]XZ=HO9cl'TF+Vd1jrd;bH*W>m0s7Y2cZ[MXE5[\Z/o!2iMZL86s##hE
p4ad%/^V>81D3FpUW:ATLCBk7bOEUFmicLo<L$;fVA7T6Ho&\R!hJ^1-[VF>BEX@6gCTaJ/
,\$DdNusuSF(U=G/Q1HJS2G)JE"+@6Au1Y<:EJMbY-+pg*^.[4$O>*/:J]=(gUBtK33dJ``
i4m5e?3)HEOWm)`/ru8A"&mV]=YZgcXm#^.WKHJSN:m+m`Y(6s":`_3P\PS"I9D)!)&Rj==
Q"QaJas,-B!2SbhU)7@o*N.48%pkn'Iaqa,V/Z2/;d>GMe8R3"[--3tR_#6D6`".TNKJZ!t
\"q=9C@Ck2Wk`;XNCiPUGF7>jd:1OoE%5Q:Ff]mB?T[r+p!K:GKns".*B6tUrKrV,3-4Vh\
US.Sb!\T6fQC##R[Rt_@k<iJuNm)a@!5WhngMh_c_P-?IBI6#ct(<LaAeseO4<i8\5Z8]k`
aR&B7I[OU?Q:`::/n*?Doda%B<6^jhM2er[fs3nr#%Z<tL!9=Y?+Y7p/g*8=S=BZoC*;,3K
aJR[eud]t$`!uI%?d_HHbc5;a7p'7]#PQ,<C>8\c^m9N:T?oT7sfK*r;?04eG@;O_/t>E!g
Y;`YZ/CA=K7n,;Lp/SHhONDG>JDt^ns<f)]p1%l`\&AVk3J@bCBHb;:OHTV5heOFmI!>Q`t
Dc5#JLh98;QUgpA=Q,uG2.=K#$RPEShr/Uiu)N>mf0'q2@+K!i"oE]Y^5eZ)WE(-jKJ`^`X
3o'G$cQ6"uKkkN\hP:M[7G_ZbLL(>@iCXt$u4$*ZP#P,pr5EKA<@).<Tc's2_e\;IO/F,n/
99g/m.c:@Z<DHr$5V$*NF=H6g1rb+:"\+fC8n:7frQ^rq@WrhD<E6VPkp!RBWVlA65=VU@q
Xs/`$ZgB1;mqFU7un!q0eP)]7>hr(DDWU!*[5>3+g"j]9MA-4"q?gO:]H'8R2O3/eSEa;;5
o)Q*&qnfAV]pBdmrdtIer:V;9)3kYZ*W6V#i9b;WS%I$8f]ggUBVb^SV^(o?TOKr`n"Eo&n
>KqXeJ.q[Jjk*fV'qqY^/qfZp?\N/;,*)k!p+#G"Ir@Udf`9bja\S:oCOP!.L0F__.>qGjJ
XR&*5%QC@__VB^+>.^u&LLO]@&Q_fE_99uMU5Uq[-/Rk\InV7-#Eqo-4Z,]B^YZ*W6V#i9b
;WS%I$FE5u:f+cImF32+Un^81$B2a7]Qis5V-d2[(+jjk_?FX8%@4",N>jgB0O\Zb(+rk53
(p8.,Y[f&Gl%%]qrCURg:)"HZ;DgG*BSFDC85-)e5ndOZIIqg'0E7jq-1=GAZW`$ff<Wh-'
d]O^H],\:S0hMr@EB#?G.U(+IU#CjTLkV\,]0e'3Ha2*(`^nldi0_*i/'D,V=<4jE^Xr/Rs
&L+X)e[e$/Gm:Hus(C(Q]2#!I;)Ll.'&gWdr%HhOPn8[R,Y1rP>X\o^MO-6c<O/6S-UUBZ@
ehVMR%drBJOAD[LCZIIqg9E.\R1*q'tB;LtVFXh_I[r1#2=j0DT%3%4$(3'3HEL!u(K$5Sj
,Qg])'3HaB!\@>H@&ZDd":#0m))EUXhRokK7e5`g5A\uVf<8P>Wf7Fnh;-mcf&2W]Y$ANYR
$6X.0EGR\b!M+>qbKlOKS>*lj[ia"6U?2!nOL]$H$OZaAK:&Dod#$4IU;P_HVt\@E[5uLR^
:KX4?YimIJVRDdSa$FdF$A&[\Lk@\Nk]Ie0eJ_baG7$G#N,*Wg26$aHQal.OVH"^]di?SA8
$RV?mY>,\*NGV+N0u%O#`B[VacY)`P&R>EBa%rr0@7[`!55f.^aV&32tKV?0Cb$ZXAm#7`S
+ekGkb^'Y`$:S0gVc<3Hp`JYPML(.XbAQ5%]KiTMDSs5P^aN-r:-HVZd]6sGFe##k:o]_Rl
9qORqp5_H;:h3W=b*FXVcThGcP%BVVC@[]MMmmW^?F+6<q>6-kH?(O":kOgiO,],.3=4g!O
R<'TB_C/kF&YeLhnHcJ>>,:4-dS;CPAr#k21VOG#qQg1!L>2_YZ.7taEWXP?2j]d0554qV*
[B&X]r8/Rl1ET#:idnnRr.4#F;4\;Q3^!g4BJ97*Y6GN4Z]K)aRN->Uc\h=0Gp:2b74^0d?
c)$kR<?W%gq,<(fqCkQ_V>&-o1@]fPhBOPt3FeudQ-?QTjl+gtb+q"XBSMi5cNJ,Un5%>u#
UDIHs.J,]B;kKagX<2uaEJ:KY$k1$A/LTq7D1UHrNl]Y3Ec'pYUP*4mBRN0e%oB+T(=&818
X=;>Qo]ah;p$1*%mbK*H$F-)W]QpjQBt7j#)@8Q1[r.aUZd-kA&t7&Ng%1O_>oGkP["O:l.
TWWAY"Dbsf<DJ53AlJEL6>c&V5:#AVoO]0.:R145(!"iP:'.\LPI['OkdaoD>ZWuq2\F3j,
aqXHhZsh4I!/oj9&&?'3HaB!\@>H@&ZD(q"jjTfs>>6PUSbAoOu[Ka`lWjQZ8Of2fE"HUs5
Af-SdQ.r-0u+4EKYD^V@P;Kl,YWp$]ZqDV)$30dBRuTgFG?(+`RnABCiOWtHKtQ;*+P@\57
Wl!V!M<'Ga,FQ15q"Uc*uf[u9oH,kpc]63Gj^OL`;>?`I&VfV%H.JWnA=Q8B$n(bI[G4!ui
'./f\Empm[M6-[NKpjl7P5gl=3TRps1M.'C,uQ48=]5(jq=u$nG`ZV!Y[PG*%MP[RfW\eB(
+hRhkWjN7e>Q6)NfI2D>Z"=Z;^%`Qp?^HY99t\=P0K-Veui:?AT.MEo?X4ep?gW/mbN6<Ue
/M,DVr1QjlJdl`Q-#3f</DtprH&+gMahaB[EDmjiV,c<N9#Tr+GTXOM*Srlr\9PSN:nNgoh
DF+>GUubKF]"qXp%":[Zc6(V'Y"Y?sNUn<$p!\Qojl,q!cV.<PFYC&'WJ97+R2%HJFiVQ8C
VB5cA&R=g-EW8HL_"-tDaYZ/CA=K7n,;F)(LN,M'M6=dgg#tuEIQ3mW=2c3FLkK]X)\$riT
[VjWq<NTH48sLlkp']+Bq=Bq$;1eR`UIL7>p?fJ:n`%HA&,Z1unLj`hJ>LBp//<+)Q7=8d;
uhH?J>E;IF9sKu:11&O$a<SjJY`DJoE6][!2)tmWH&&5"^HSSapBU6!2(]IW;lp(!_\dl==
W51/6,GQW;lo]!D<RrkRq!tSA8#'(LX4_!_W[skQt?@!'lmd;WS%I$Fg(/PnR7L!'j>q;?6
d/"I:MbYZ/CA=K7n,;?6cD!gX/ncm>nq3J"".0#1BH"I9ApckEW_!.Z\QV90)q'lX2>.OVH
"!.^YkV#gX=#qT(O@&\YaYZ*W6V#gYh"=t8fTM&[lEWSl;>_&Zn#qQekTI4-H!!$:+99g/m
.c:@Z<DHr$!!#._9*G=Z&m20(^et1L@&\/J9*G=Z$!8YW5aT8ajTLkV\,]0e'3H^a5Yo0n!
<B\6Q7=8d<58Z>Wgpk&!<@G_f@RLD+@CkliE[Z.!/LiF.OVH"^]di?SA8#'z9H707SA8#'(
LX4_!_W[s!!!!QEF>bd!_W]%J>LBp//8-b!!'gQJYgKq//<+)Q7=8d;ucmu!!!Z;Q7=8d<5
8Z>Wgpk&!<<*"!)+A7Wgpk&!>f.CEWSl;z0QCL"EWSl;>_&Zn#qQek!!!#7`.=c-#qQg1!L
>2_YZ(T&!!!!4#F6heYZ/CA=K7n,;?6at!!#\4=K7n,;?7SAWH&&5"TSN&!&/D#WH&&5"^H
SSapBU6z^r1f#apBU6Dul7S-a6PMz'*jgQ-a6Rc"^%dp^et15!!!!m**B52^et1L@&\/J9*
G:q!!"]m@&\/J9*JRNV90)q'`\46!5QO(V90)q'lX2>.OVH"z!##U'.OVH"^]di?SA8#'z9
H707SA8#'(LX4_!_W[s!!!!QEF>bd!_W]%J>LBp//8-b!!'gQJYgKq//<+)Q7=8d;ucmu!!
!Z;Q7=8d<58Z>Wgpk&!<<*"!)+A7Wgpk&!>f.CEWSl;z0QCL"EWSl;>_&Zn#qQek!!!#7`.
=c-#qQg1!L>2_YZ(T&!!!!4#F6heYZ/CA=K7n,;?6at!!#\4=K7n,;?7SAWH&&5"TSN&!&/
D#WH&&5"^HSSapBU6!!$!8f@Tchl-kZQNl-S\Z`p[l>n0\nW2M+?:X?.I[n`JT[:@7;#7hm
:>nPF&YZ*W6V#i9b;WS%I$31'`&/#UrjiS;S(RMo:rjtmo2C2"^ba+!%^\sIBJNtsLio2"B
HK=&D0miW\mbPM,XBF#rbUi/?hR$u1mi$c6J>LBp//<+)Q7=8d;ufUXf\"h4B?o/agJ=4mA
a.X>QS2]@8kS)KP]Zj$r*3N5kKK>MCY#Qr)`G?UpPsGd9(M&bPAGid;G@:7&RE"lD:u4+;l
<ArZtRk/P:+J+-FT':r9$;]LDuNd'F0pR-a6Rc"^%dp^et1e9t"lk;RUDpF@4sNeZ5<+I@>
@oU'V8<*B\RccC?oDp*E4h*.@_XrUf=fn*6,<QDt84j\qpDNHBrQFQq4kDJl3&JY`G."&"m
m==W51/6,GQW;r;.'.-DoD"LB]cIpm=GC^t5nDQarb*=dK:5'#iI!g<df;J\R<7>L9\om*)
am9#\g=ihk"\T$=#F6heYZ/CA=K7n,;?8I/gt^\<#Jaq`B%O4nk?TDJ#(rUPZY%)1C!`N(V
OqBo!L@K[>e>/2h5d:gEHcV>C^l[;N"7I>:11&O$a<SjJY`EU;@or\?bX2B!17/3DU,jl-B
9-19'm!pn(taj/!UJne\l1NV@E2\XAGSl\H#c9K;AY0"&"mm==W51/6,GQWELZ555kbG%j+
")/ebI0n(p2CXilt[=%#FZmpbMi+$Q3k3s,]tjB\`i@&`Ar#mm<^R_lt[NDiMQ=BN/dU,0^
1bDW2_==Q!gYZ*X9[-mS#?.TY:bfaY1*N$\Oji#^2m+IS/LhZ#)'0kdXn*f^@*Hs)@]$q!e
,#Er`4*RuhV:gXQHth-2'h_o&2/C4D;RsS@drFm860`I)E8cCgMXg?2A2t/,*Zc@R%Dl"on
U[M\HB%*YQb4t)[=G(tHHl97&#eYU/6->E_(F\dqWcV3]SiW8\8c#E^=9,\LNfS8JYf6]Ub
)2]Pq,NE<OQ_HY-';b_GYsTJYaQ:%4i5[1`'8/(?Ei96]AqIB@!1>/s]8EG3rE.o)%mjo<)
%FYgdc^PbgQlqNU6=b*MG9OWuCd_GYsTJYaQ:%4i5[1`'8/(*kRf:ggPe</MJFY).FDkK]X
AU'<Dcbhud+>[XPq0I]Xh9M@!<X;J>dEp8\oOJP6F.PO&j<(*p@V':`X!_^e,=B\m+O6NH3
PB`G9`9Z$YF6Ch#gm=NkF*`1[o<)%FYgdc^Pbf!>:7OkWVdmc-N30ooJan;f,'j\L'gXYm=
DHFJq=EdfBESfYeZ)V:6UQ-cai_JS$\cpQ=gM`1Y#,4-WTc)o9-oouPq#de&($4N0,RoGV#
oZZ91AIk==So90!NhVbO+&nbEXUPeYDs3cTf0io7hI?iZK<=e]4&`B?rbenmo`T.SUmbC-#
&5;NnlnZ;3*FY?"Q0CtW%%DQu,(9*N<?QAXl`YZ(bQ>[XO6RF'=-H1U1KW)4f$+;1BK=0LK
'Pq-?R@X+4dKfaMHo^(8;8<G)Fh'l0n5hE/EY@#&i].V'QV5D-5/X6kd)nUFhl37\9Ujd/Y
[;+7FZY,2E3!#<PN"7HSd;*-h#bnlF;?7q%3gq%"1:lURLb])<#;]+OUFflQkqGh)9dMDEN
a,U^;,Pb*%SHuF#F:8226^$_d9L(Y!,)O<C-#&D;Ioo&"i^e5MWcq%<!:TR@&X->"^#M#@&
^eS"F:09MWcq%<!:TR@&X->"^#M#@&^eS"F:09MWcq%<!:TR@&X->"^#M#@&^eS"F:09MWc
q%<!:TR@&X->"^#M#@&^eS"F:09MWcq%<!:TRoPLS"5CYk:ie3knS[GluT7?jnZt[tn?hjT
ohlWu]VG3QBmdC)NokWDq-N!T5*'\o-aiS8no][SjN[30KmFuj[nDWEINLM\7b+_=_<ifE.
Dr3`S:X@tW@,AlF,!J3ilIDr9=0K';Z0BW/6gN=*;iXE?k0;YfC"'D$cUj<I\[]/>4*N;>4
IgW#'OkN\/mc1]cE8<XL7"I"Vf\_C_hOs3rVH2V3HO>c?+\1?<H*l9[o?^AhZF)nO>Ct:_M
+1$:F>8#Xf^u\3HJ6(>e+Fh(=IVOF&7%<U4B);qoIO$D`p3Fa;oog2orfZk99Z9jI08YB$K
ShVh9SQN80-.aN+Ss*ZR4_Lg8HQQ7\RfGAbQ+eA$M5^]+(f>U/;t3dg_l_hSbf?2Z6*/rn_
"aM1>7LCPVSr^MkcV-KVQg?d:d&%Tr&gU>?@meeC;//?QJ@&XF+\`hI>,9e>QpoS,NQ8s$K
UfL6h:n[q.4$A&jfU,)s7n<%(]=3"QhIXlrALTC"6A5csX]p"bJ-!i[00ascHq6eaKWQUK-
?c:Q7[OO+G/oU`mFntkT0GPM2pKRjaJb8H3pC-P;Nc"r`:8QY68W&K^5rBbSiqE]GOCt[Dd
J`i<39>hN5f5;GThRc`j+%Gf[u`VGENH%/mXpBKB.\27uF7c`f1poOr+T3q)'j8JsK$i9DD
J6rqncd;iI"\+!4;(s+(7WQ7>m,q!W:baAK^$rE6I=&XcXuq[!Q8[r:/IE,b$oZY,OQ<O-8
`c>j7(aM#/[SN>i?k3VI4o]]:g>:6m;ik/gNN;"27h"f&%nac8)[r:0dc'ug\B[3,.$Pk:4
EcN@jfZB=)("[O&^etcX#*t,hRZ#HB2)$_'p?^I$MA0J=)PuJ\?[a/N*4:RTY@#$c4*GFk!
X5A7R1\FE6\Z"hF`i-(jpbf0A7S>M<gs&c,;_6A%*XSE/LmZNA]g7*0O]Q`X0,^<;RclcE0
];sU@!jT04o=8F:d^)dA+agB@#WQTXL]nq>$!h2m-8f@M1_haq$`75RnQ,'fhO5@Y0n<`(.
>/Rl>7@2FY#QH[C*[EKr(XP5XU?5]jDDa,YB4hGpT-`3tJLR@BZrEa'c+9C<an$Aa\$F`_`
$mek9eB5)'O>Z.Q7Og7>$:7TtLH#ou=P@Hm2R5Sp99U[ePn(tb#5(+RT==U&s^etb4F4#uD
'($m<'Lg#4^]!l\UIUBp-o*2!B[itX6s/Ldq,MnBoiLkC7;YbrV%Tb4]6:=;D[b&kUIG]DD
&L/faT/VO\T0HPOXEqrfs><=,U>p]5s7ju(^qoqXAJDUP<]*F;d(KAaPrL8'4PU&qXfpA(i
XS=oTUe'W`5slCgg>E<Y\WSM%_6d=0=)qUH*DX*&hc*b[37A',03WgmU-<.]8H`[;1u<`.J
<eJ""mfQAXl`YZ(bQ>kDI(c^m;sl)107$k1RH.p&n8bEjaVU[%:']4Lu;8B#[%e]5^c'Vf'
f`f(c[YW5]82(C(jnDM+ip8)otefR,*PYd3/Q5U>Id@io4"Zo8B3HM'N9#Ld(Pu"AWV(Q)e
.'9ft5($2%Uji:=0bt<:(M@5f_u<mqQ%f_e9)^^>eu`/!lI8\2P.Gf%8h37UYZ+#oJYaQHk
+VrN4`]USTgFHt)B5K+W(h)EXS`E^&e5j=9T9D.@3V"0]V%ZL'$>BWpkZ^$e[*c@^qfg>lR
U_VCgVW0Q8%ch)O=!UEkQel'^su=_hZ33+otfG,37%?Hi*O(&j!(VV39#iAa<c5@4bZi:jh
TjbEm_OlBU"-6#+]1/!kj!$m.Z<quKXp==U&s^etb4F4%RqmbYW]fs*h(a?VI@3a,:4Ocbd
ng9jk__R,\^V&hjMS8h^UG0J1SK\o^,a\r*8r2NbtVJKU;WE$!bfQiDj[o@Ad./T3P.`RnR
(RD'8j:^4ZGH]ZEWar*\Y@"2F3]K*$NN\C@+JL@N"J.GaP2\@g>%S&+MWcq%<!:TR1i93>:
S(PS*R@]rG3pdTd9g>`D;2L!]>@OW>O&1dVfLtGXa%UL1he/H>r=/j/1aKJa2g'bWDb0AVj
?>.3dpjH2>T`Gq'($k6suu$OuI=9J,fIK<+jace=8O?;SO%oJ"Y6!/#eX(a\@q0-]iiTe0s
86_hXtHKi5]a&\SC7MBJ@GFtM8!gUhF`_J0Ji1,<Lf*,.h[k<\!)pfctKf<8a\&"=FmB$:h
C[,RBDjO#qo0=\O%YZI[&V7q9K8r^"g#Zau,U@u$+@&_:HUIL6AW$qAbWaVkXmpl(YgK3q4
An9c2H.5H(h7CS8hO,c!(+bi?R)j_!'Ej_ZkV]SD"OUI2C8hLG$&oi\')PISac[t9e>ZB\I
/,mMnqd.8R@+rifJ40P%hGo[Q75b0=gM]\4*DT!A4ZI_h7Igq7`;WB`JTU=)0</adNBE6MX
<'j8<G+HW`::9rUIoMM.D&-DpFt>0>)GH/Tpm[jm69O=gR7@!<]2mR:9fA2f[iqhS"9B^Qr
*2B[M?\!62%'[FC<`8$_lOe60P8rDp%(2/_3:\4jGRjmqNVQe<J8gY7Y?gQI,aI[.Qko+ii
W9\QNYe8L#g,/I.b'e2VS%WXUAFqYoXFK"[u[qsa7^:>^nWq>W/DpkFQjP$+dGr#3AhgbYh
j(HJO'OKqS?naEOdY,:NG0#BWIMA"MQAXl`YZ(bQ>Vp2pAB;U^cTN-[=^,+&3HHN"/hUuKD
r/-0]65e'P`3"beREn+/;9ai+SHlm.p&mdGk#6oj_m][NupT`5+fsE;AUrjaOjVsnJqi>#;
7a6F9dL2*Ze(2nP2hS`6_G[6maf[>ol=897?Ku(#u@&mFnu>o^pA[!nk8B%NQbeb0gP->K4
Mo[+*a\=I(tf.TNLU@`=4k0>I(=HW!bie#-!NDr5GBA!='n7MA-kC'rjGo*m^taUO6b-.;c
0qXNUdgUD)S>-s+aokJO0^O?!FYsK4!D;;Y+Xf^u^4aT_:kq;&8`'g>NLCYIRG7P&hMj.ja
KV'k&$k-ZoKVi>(QIi9FbLcmLkc%LY)Dl-Cd`?q>!sFK)s/`F]Oohn/nrH>jVG/!fCe,%+l
-cC3Q;T"qc$0L.#F:8226^$_d9O%lWFVZ"Y[Bb_JO/2-I>+$c+=$7_)`Ed4*_U:ocHbcFNZ
C3IV+i]l,eh:.JEFRoqh/26AZ<DX^&l'NV56Y@)J!O%?=_1aQMQrj>&)Zl?)\hf6fn:DpJ^
CM0OY$j.<71"mV2nWp&+XW_G0.5O^lLr-1$[5^3fTl`f(d(MA.3UN/39tr00l_WB^=MK9MK
4FW)lQUYEG,1S`k+p"*Q0's^pkfed2SjCIlQnfkPeJ\N'dHoQ8,`;[2]fcp@62qcd[q=CR[
jiWi]^tJVWksK<=>`r$`:;(`3:<&bcWUT#mQc.e'+4RK$5OEbX&n\FI$<SdPf>(8r7!$bMV
:sSS;!T:KSNE1C_7Op[ZM^k)[VT*dKk\WDL?3D:@WnYFT4[Q%a]^1SZ_RKrpS\!?.LcP5p"
$6Le;fbC<Jl3r)&?(T]65c!;[Q\XFikM7^ZH(lF`VVfn3Lc!ED*^J[MC_&q6O_[aA%W)a1h
B3S)E44Q3NV^<0mB[mlhF7;WR,nX,ILn49:VuU]eUjW=S\5(bgJg*cJ>?8Ne@mQ6[Q"s8G1
AV\BB%MWcq%<!:TR1hWe]TqO#%I?#@3>#_h=.*M1CkI,6^=BZpoHtlSJA(c?39YiP;Pmjft
-K,h)Gd-8.P,TjCWE*&#_G0.5Ob<M%Cg+n.rO:[5'5mE.?[cEt8jQ+HI^)/H`SO*kA8t8-Y
ZT#bLC[PUT2&-V/?KfC;FcZ_6/C=f4aTT)ftMl]i<Cf6Y5Hfhf:+^;KKi![C'f<LNfJ:*FV
Xd&"bEKoH4;D?5r9D&=mCkZ/#^EDB[B#]n6keG`RL2V1lqtcb8[G\r:?!%$;JuI(G&ZRD5q
3mRO\8nRY"G'lJpnlrNSiY(Egh,ln[tgHl4+-X72nKWU0uC`bqchHhS:n8pGnj'*4CKTgG%
a?&KIM=IM"BV32LTqH<n[X2R!_lg%4BP3qM_V\q^DmbBh]:PjBb`,pO+,'j\L'gXYmbunep
HM)qA+Tq]_2f;0"3A)qe7ZA>9Spkf/RC&JIH^<AVX]i+f:)l[@">//30N>,U;7N0e3HO&jH
WP#r7A5sB;Q'65Pq/3.L[kBAo2">24Zkj*N>U,BT07NJTpnLUQ7ATFkih5NjiRn=S0LN6QD
pdABrPufDSd>:GCF6:!;,R,9=X)+ldfYFeGfFDKg0_<^]E,Zjo?qId;*-h#bnkCb>Nb9I"[
!5,'<(t7<89)%:n_&XfX1_&U/GC29I_hV;Ah.O4oW%[C(\5MF&ab,s+r5SUUP68ZQgb[V`l
5Nu^<Jg5(?H8j,ff*#tdIe<n$LV%lS8?F$iLh-`oLmF\\=n:iJF/>T\$r:k9jQM^==POVR>
6A7WMC+3]B!LAW,26^$_d9O%iWT;rbC*hAt<s=D<M^r,H\8_<s>IG5`Ug_/q_CZHN;C(XE&
aYmXV9YJbLYC%U>IPl"<YUEn.QJn;F640S8+Q*n^:q=u/[MO?W1]tb+8[To\FB+Qc_Yd8BY
[NB'hN<-e0iuU%2qWOa(Uc2)PKoF-[BW`LPH9+NB24IAGjsMldpjVl-Q,V]MA&!QAXl`YZ(
bQ>dS(A6\Z!]/u*+-U5[RjAd3A]RJcmP$S7f?4?'Usl;NiCgS,!XlL2Lf0&4ND5Q)k0Z_C:
7;Qj?9,2<HDf[$0S9.hu2p<Ll1?G&8*"U-K#p[6kS9bGO4.<G=UA]am.!jGYGFgc2D>.AR<
/(\I#qWQ<OlA#67r$8aY]m=gPQ?267Sai<OqXnW=8W:"CR1ul)7'D0<,)GBU/P@Al-fHiAI
soQsme-5Ebj=AN+$ZWOI,i5+dV:Qq94dpMA)bF`dQ/lc74a`#;X.>5;IQJHmFoGE;jSA%cr
*)Wr(-cD/_cV9rVH9WDmDU-_GV]33G[1siPos$bXqcQcY/V:I4;RGl-aV+DqVFmE;LMS9dM
lV3h$f9LZI$^i%2o<!1&N+26^$_d9JM=W<S!+3\$4FEGdgbI!hl`(&3NRqMGsFdA'4[C,7_
?IJNF[[?4b,G"M#$-krr9dA'2>2c@D>I2<c#Y$>,>IB!]*BW9)^0D_M3I'uCt%YkQ::/">l
Dr1i9;C0r*B?qXaY4MA\(2h'(Q:c;bC=T?+\Mes:q.J[[^O"D.;kg,8TL"2T7ujOW%[XK:;
A$SHQAQfRMhWc?0JJSl`nnCUj_osd<r7IP$SqVGL(,*#77pmM`RHH(AN"&`PfS`TLo"9Y>#
Mu-.T`cX&["r59D.rLUqVVRNj<6>&mp_YbHVu$;C0pd%$\?hcCI$Egka?/Fl:&de.&D"TgO
Sj<jcGX%e^Zo8!AEKahM<UpP,]`;A$SHQAQfRMhWdJANEuf&YK-sldls0b(pWS1A`WqWR6+
hnjtIXe1>b&`f8J;"Q&*;&4J.XDV_nRm\n9b'.8G`<7XqR'.-D7:a^8;DV_lAg&A\m/6-_]
iSibF?+4tB<oHN,AuU:XnHX2(Wj7'Mp5Dut-72XjYt.CQgpt%@msaEC)3b#5'paa@26^$_d
9JM=WL#8FVNrBB]tAHoC=Pq$.plSL+GBt,('oCjcMLP;AuWt>/JE#q5_0!"4"CY,/=$'"Y1
aHM'!>&N99"mhCso,9jFV1!Y.\`/3mrh_N@G2b<H=Wu*cpD`+l*(N[;1I80q+r]3D1)qoB+
;)/aUcR4"TiEB;A"V)GX%&Eb8f[$!8[Of>(8r7!$b;V4K_jMHYb<YHRj5Fme$fGUqhc1AgG
9q=B;)>HV3kab?.OV9YPh:Ul*6A]dR3X=+dfe?WZ/;YQ$Jm,#E[\3e.dPn4iP>-D6q3Fs!Z
>^4u0Be2&,.h4+1:8uaBc^$4k0&2'+/=$(gW7n=W[k>#@W6`cq5cu+H)]P!0SICgAkV]SD"
OUI2A?!V0*M\o4'GMgB6c<Yk[j&&(r/r@!W5B7iKpeC+rq"H#_C\`i>Zl)[7A5O6(+WFE\k
c;EpqNZ&5RoXDRi*\EM\`_0[nfOcOALI<@&\0=V4R1"G':_S(sPsZ<NAUFOK)jb>A=Mp0.2
IqOX!Ao:7WZVWi%DP<(*p@V':`XU*3/mGO?HYN&P\3aPTh+G3ssld]H`_bW`XbokNcB7.RS
,e1?kG2Che-PdI$>71i0-?I.+,S3;4"\3cH32>PDug>pa8=KnIB0!o<>6BUFK(kJMUY*0iF
lD(B?Z4_&nBU27r`CXo/4?S9IFE_p^:nW?/9p!7IB[EDJT0CBS?#kIl,'j\L'gXYm%9_uhl
dr+IgqS>Gre?k#D_A\frr)_,p=W``G#=1qq!k,d_G&3Pa[$_\+`H5MdX!AY74bioq=<$`U+
/*>g^pVb4\JKm+<Y(QaH9pZr_5n>&g\S]T\i``!L>4G:6sRs2Jh"ggka?/[:-t-e.&D"Z"(
hQ7='<-P<6"m%?\76q3OkU*g7!`("$f)W<f6/BZO(SQ;4r3l&trReZ)VBGUk[12OT!elIDr
b,#=gp/Zg^*ZW&\NVD]WDfc<p<@]=M8e.HTZ]C3ILTI*-70/YQB^3r([g,(h)/:[]upTIo:
P$\M1=K:FCa\er'3pORgVDH82Z!t[O]f,?7\\hP7rr)_*5+e>q="\NoQbV"F!D>lR)H\J@B
J(4/e>T;oC)PMSs/?QXbF:Gon5^MK*&@E$YHKUeaMj&R9<6=e/G8)GPLN(7]Y(%_<YUEn.e
QC%6%]@ZTe?Haa&5ilMi6>p@u'.&L8n=Y:0LJoR*:)W9!7d4TgR=87o_@o=YEc_XoRKL\pW
MU#tmoaC"*(po&Rn[?*%'Q@&\rg"%u&obsb!c8gn#Y\8W=\7urtHM>R&9;`cN-NY8b@2Jq/
=X3K-Fp$q(_e4*tDnA9u*Q9&j70]>Ki1hgEP^'J+?921+F&VC<!-GsH\Ytg(iQT7Y=99ia0
Fm?;L%.>M[bu1H8T.[dA8sLmJhhpF7Gq>Y.iPL.sJ]=l2QAXl`YZ(bQ>dS(A^]4;FE#HFgn
r(^d\@T7L48\Bt1P$=cc-:r,SiqGoQS52j/PXJf8L%2[))Z/nKV"&i&PI7gF;/Vg:n^3FT#
3H,>V%`9EYFg#F!gQ!R'[PZ>#anNBjdp'l_NC7^An1ZC*Q3Se8<sK$#df,bUaq^6N2_h+>u
-$oB+<I(CDoQ@`/Q4<sqYioGUg]JnQdjZIC=%V?iNN1M>!`J,hU!kgZSqn0SJY/o33Y"Bnp
?GVO>b$,"q@J>l[$J\'?CR5/=d',)[6<YUEn.a].!4umoZUtU5/J>8s<&/>pKG'/WS-)`mT
Ksb^JW`foa<EbOGQC]U.0&aeR<eX;fBU8MYd3Iq2[Vt%UIm`Kerm`uNl;ZNHD6mm$:@1[]j
I\6eDa`+UQAXl`YZ(bQ>dS(ALCYK(<jI&EC<>iJ"U4#5SQiW&G4!ui2r`r\74g8bNZ8ig?5
-V8$!QVm;5:)WS2bLTCer$ELo!R/6r8[,K*Mof].X4^/[\EK6:N@J4?VE=`eL#$e3d"o9@Z
XBWR?Z/Y[@KS^F`ToK\DI6/2\RoTlAu-_AhdmZ(q4+)$0:="SEN)<2NE]C?4qnWJFj_919E
:79c&r'buue?U!F@lIDp_r*-'!e>6.NCY#S\[_oD^?c@m;hn=@aW]Us%eG]:=;qj%DkYVpb
-+%@56F`RKH1JUmnNuX2A-UR^F6:\\Zsle%4@rg$Z=qX[Wn%/CPu&X7Mj>kpNk4,\]tLC>)
9l%cSND$2hN4.nR;qA(;hUo9O-VA%QFchUeu``K_I0@!?3<hh&C!XJQ:`:B6S2onQ7W_Q%L
`as;P]+fbLs47J,Apk[AgQLf2@ONp17eKp8.:#5CQ:S/_Bc`)AX+.19Z_l5GouBW@Uh\>?P
+.g(sdG+B-J\o]_RelIin"41--h7-YKe99i>IXfX0tVq%_CK;C#,>,mL=$[#\7%]ROXN5N\
s+7%O^0AIeHhF<k_4"[[97'D0<,)GBU3D3q/kdO6R1?%3N@Tsm1BFqR_F)uDgVT?ikFQq6'
f!9^LoXB>MrW5=1`Q#n=3,kO3kKZ)/k+oFtHqPc-ldh'L<9;8f<OER</G8u=pFM4mONjcV(
BFR=!iWM4^3nUIob\*l++O2c\/prSFX.&^'jKO[.p#goeRj*^2qb^,)B'MdI?92f@)2n52J
4"9]m<+Qprq(1c^6#p;A$SHQAQfRMrlQJ0eoqB`JW/k>.8Ai',/:?m"uN.W,31"(L)*,G%P
GBQ'sRGNZC44_80R'Q7]8BY2hf@S2dcBM\[iGZW+G:lB*;]=DI0KT`[#e`q%'BPbf#H[V\\
)$Sg=?]6:1'(BIX($m%ELUbPLd4'&j4lC+2_J>J.'mJd(]`JPD*mP/b.#n@GWC!`659'G*C
2g'2pZY(Z[?DY)D"M/^>,2=D`e;RN@//?QJ@&XF+\S08d$1$3HVq.(!bNk7K^Y`n`\<5nI"
X9,re('Vd)0&-33Yd=+V37G$W`=tR]O--`jis8RN"q4:5tbdWkr7@`_=36m,NLD)6(InnN>
l=k7=Dm2=0>fJ*7bT:0L3.>HhZs-[rke&HXR-h*2$%lPesqMiu$N-ZDIQtn%XepjS%ieLJb
Fn$Fr<+]66oJZA"u)>\iC6(m^'C26^$_d9MpAe2ha;FAmb:T0Hti-QsY,>.&)r@hn!gkK]V
3kZU5:^qbL'=dgQ$h7Hb<IDago]3rI,N/]=h(J?(@fWg(6_Yj6$:S']%a2`t?jX3iq3&ilS
C=Ge!k::5FKN>3Y0m9I:l-aY8b^'6f4aZ5XhS!uSGOO.e+&N6.,q7=5o?TX"X"%,LeG8_!W
D,O(qGbu9#1Dd^rVEqG9aJODWPAE*S)X1=0k846<g!bmWgB&Rf</DY4">q.7>e=ag2(:m-*
VTh7#;OTVbRu71:<aHhtHHlXf\^`'e>S'?Tr$Oc\uSeV?qH7_KT.'J>FH9%4i5[1`)u><@'
C>0:b7QQ@7;olIDpKQ+1el!Z@;ZKn]@!qN?CR)3+:Vh4+79:b(Vijq=O$5(<DhbBo7A_95`
uStXGiRhg&2RP\_6ET4p=>ITc$FR.L0173I^lBS9FkG:h<gt^[sba:\NUVsT=5=1C'5QT#2
lGJAfW='?8KcFR]d=;,ffB1>Ic^[":p[6iR04'b.gqS@=qXs0P:S6LRE?j^aqtBE,pu)J"4
#mK0DjRH1C"()Ld?0saRD#BOZ=Q[<b(Bp0-<HD<2/RR)g*KukSih9t>qMD^;UqF\jiX!VA5
#WBgEJR24$1&!7ujC8G`Nn/+t"GBd9XJ6H2$a_j2[4a;Pf8LY,tp;Nd^pHhbr@EGse-*3\<
@4jJZ:lmdT2Qf<8OWG1#^3\">m7:3I5[`ejYVs+Xdb;l37Qe>ZBC8sRhQQMd.i1#rE1nF2P
8<=ebb)cEo1p;I)+7J%L#.Y;=d)RWNGOTM;C;5d;7acjNM]=YCCI&%%\/<rJTa6^r%JaV@+
$Z'*O9-k,u<j+/j&c5rZ&Pi^;agaYBOiOi(rR.N8NuL$<N8#5HP2$_lfUdCu2f78J<:@bg`
@Y)0rqu@`;;]>1hbjc]<in-oXrn;M(Tq<Jr;#F"$5Y<WAB9l(kKcfb.CCh>F6?:h8<CE`U]
=%VoGUg]JnQdj[FCS2QmPOr(nl]Nfs?$MGf[FH*'8?1gMaha6E(qV24=8g@;45m=]8_WMH_
PJE*?@GW7RS>2K%:uW\>M:+-q,LdmF$tisXQO*^'5_+-RAggt\D:l\ZE-[VacBq!d5u?T<N
4q!QtMaaU\'Yp&PWpr1FhH1OGs:+WVK"fYJ#;IEn*W;Y&];Mdp<lIF&`4+oZBZ)+:.g:o:F
[d:qh'@3428,[Qf/hW/h;s?LF<EcbCU"l5L!g\`-26^$_d9O%oWQALR,:['7]\54kZF%H[G
OPP+it&Ojj_Lj;CAu"CZq+S^@)X^_5e:=7G&<MUPKJOb'>t[;UIPhlS#B5]9#a>V*NR\b<6
WS1aD!<9GG9Va.RhIB,mDl;ap]ng8r/FbCtc7qgA>FMi5*9AUjXO4/`b-Z<iqgEKuK]NK-j
Bc4Cu["q=Ed5s(cCc9Dk5XSj.^R`Ysdr/R]!j<(*p@V':`XU1m7praLB,'cZ7"L)(-P7K1K
e]mD&`&*[[bg<-5X?bEFMW<S!k`l:JO#H9h1OQj<UL8?5H&_0@1)QD5W'Za*OCfSD#^A6n1
p.]Ysgc8jh_hJV!Y>ZkY))=Us4r4AR<=utFrqhH]+%k2c]IYr9Ml?XSqsUQQ(?+H,hnFN>l
IN:i=V<,2-qK?2-NG\4d;*-h#bnkCh,4RJhnO*^YbC'GcCI&+PEV1CpQ,?*GhgE)-i<Z,?_
g4)Q84=4.lMM5d*nmgPJQ+iIJ\]tf\G8PYmcmK2$Fd4(K%LL0sY<0Nm+r1P,/d8+sNsYK$'
cr`JP;.EclM9T07#1N#<L;@$rNI%c;^/S_1tQ,lgT':SUC=,lcrMd8H1C]_(aghg_]9B*oA
',k.,&LPLY2RnhqC=0C8m;A$SHQAQfRM[h9qq9*_gq!d8/j)un:rqN8BlfA^S]RB\NW`?)h
Num,kI=!0l5Q14QmFnstrUj5b91s&9CM.9m0/'N9Ze=^#\Pp"Snj2uO;g3h(9-miVHF7M<W
X9c+s'totl'ZB`4\JLXmFnt,h^XHDX"TI<5gC@hl(c@7PO>c>OccZhk`n)FhFj1fak>X3^f
'8ZcCaXea2c0<8`'Jp/N&6!gU<@q;*q*bjQl-$fle`;R\\A$;]u)[8@p\!"I=r/26^$_d9Q
<PW@;)bGd1l*RPM?C#1ukP:?=5nT]5%n,[>`3If1+Q;VP(UZ*CS*k05DUW0#4JP"MWISMJr
cg6S3*ASGFcC[569E[fP0'T*\[/p[;,@Y--=#A8E^RX@rb?DOD_JH@2pSs6dp):>piG3RFD
]e96^qsX:Jhj:nR9u0_k^H@qapYUHN50%p,_M&0M12,@HV6ZR`9A-U^7BQ3^+L"g5YCWMoL
utEZ925C@2=$8C4+@%j-OJNO5%SMFlf[FYoff'1F6Cg`mK38iZpq:L'M'Hik0/rJaV?fm`"
3*,pI;C:']-NM7ns]m^YKSU>-pYP%Qen&'UTMjKnP*^GB\7^R:M+SBDf#Nl-cC`ld(OD[;/
!QoLM`<7%nNl2&H`4+$Lt5G3@/A1Rk=5/4ATGo]X+tK.nW]W@<pYVl!4[>.SfiRCe:1D;)F
8lfR=Vn6KV:Kq+C(7ZA>!'K$boMWd"'<!:TR==f^GV"\gpo$_9DSt6TB9_eGHT;g"WPUotC
HhZsHD53l$V/=ChFR%@I\1amaY@_U.$lqKEaE\IR*Fug2rVH2$e#'NhfofoqbO!og'<uE3^
A['1Mm$I#9!.1MoB3u=\T-Ya;LM.91.FEVrqs]k'7]uRf6mDbZ&Cf'(GFXF<NAul7W$kdl1
*fSU/n+$iROu1/hSaY#7bRsTE.pJeEq^-"Wng.++&A3qXs0\<6bb(pLVO6`Q-"LgFluk-#p
IK$2dnQm+=&O;_^6k=B]A9r;;Qr4Z\)lHn-]tEg57l.Nqklp$1'4%2uTpkK\m>#cTo_/&]B
E:i@S9TBa:T3ub_?OBW1)g_`JC>VG/)*\h,WZa97U#7jq&%"@a+"lo4JU*0J>OYT+MrbR6.
Po6f*7'D0<,)GBu@]>eC,UDI!V+X2ck0BMZA]b]B"rK::gl*+,*$$&\*'*TVfeXi`U*N+k/
68j>n0$oL\T>F,Um$n%5a7.jlK[Y,Ne3gmh9;9Cao>YQAe"QS%N[`'#)^n6#>GH_AM7E),g
tu?k-f$TWmpI<?+W"+]hrhHIJilfaAn@b2VG%<[l6=b"oaJ5rIP1\lI;dXH!Hn%GOG1lgQT
?A7Re;uG9DU<W2Rat+.kN4K#lm4c'r!D>f_al1j7073TNC9kM!\#^SduB=BHF/9)1`TJi@W
)>eG=/h;*MPlIBF;baLD)n`%M_:/5$&DEW+*&G_q^I/"hdnUQ,idLL8*7<FgiWMQHQh7Ilr
h#e:?V':3p//:H-(Yr;qDBNF=iGhWdm+E]b9EVR[Y?nmdRPSd4Ya-kFIfKB@!X!B35?4jk\
T?rZe##jo]mFs:BIN?'!T8gL^]0`[CKe2b/`FZN,,`3Sp=lTIX%_\N'3H`Yf>(8r7!!pUC'
'%(5[D@CHM-R9b67Yb3&m;(X1,S4h(Lm?rqsZh&)lL+]^#X77#?n_]mBA:qXs/%:7TtKGOI
crr3J\A#'K4\q=+j#C=R(S\8durD7XoXC27Us@Ddhh2fG/C"U.OfoGUg]JnQd@<)#&rrd="
_o&IcOk?TD7!!!H191AIk==So90!J=JLlRMPZ=Sslkt7J9S>^Ko&WF%_,ldoF]`LhqoGUg]
JnQd@<;!bIodZ*Er;#sYmbN6ep?`LL4F6MT60HOa=l+(s=gOu+VL\dK!+;82;A$SHQAQfR$
S5:@*#osH\Ra6j<<j$UChICiGOODcp[8=l#H(f!JGd/MAl"pVZ#J[=k09C%ph:*$f<=Af9`
P.nq>ch=kV]SD"OUI^WTqm;B29;Zbagh>d@s'&Pq)IO2rCiTBj,9&XI503^q72Y!!'A8//?
QJ@&XF+\\M+nUI'YAd]?@]AnGWk04*_q<r`4#RKo.9kV]SD"OUI^W@AJs(ha%@--VrDRs/3
?!!)3`==U&s^etb4F+L0f`1]PRN1d*O#7aF"9&eZ.!!!"F!1&N+26^$_d9L(Y.PZ#,9XPW.
n%\lt2u+'d!!",Z==U&s^etb4F+L0fKXnY(H@B&)B[Nqd\+8r2!!!")!D>lR)H\J@BJ-Mg2
)#jU`JYO6_bY@:c>@E8*>fX7]8HXh!;$IH("$f)W<f6/^f"/V3&l0;[V\0Sp+0+;La%:OY$
ANZP:-8&q!d\h!!!"I!_YuS)H\J@BJ-Mg[7O%cI.6(1`f1pm%NS`^DV]mJ$aQ79Z!t\rc->
FrRs4Pj<QpU/!!#8a@&\rg"%u&oblsDJI"Hs%DVr1qiSibTij*t-njSHP:&2Yb))LXGm+/7
@ZZ"a8.p&m$r:lCuV#UJqZ4O6>7'D0<,)G@_9*G:q!'i:j("$r-W<f6/^et15!!&)h91AIl
==So90!J:T!!!!E_bq*F#*t,hRL:Y]zafn`4^O`4*Lunb3"TSN&5Val*d;NEl#bnlF;?6at
!0@U^7J%O$.Y;=dYZ(T&!!":^;A&j3QAQfR$S3"m!!!#@YZ+$*JYaQHjoS0Z!!!!a1+X0fD
d]OMU:J';!<<*"O:4cNoG^m^JnQd@;ucmu!$oH[&cDp"MBJ>q//8-b!!!/j-be?k/nV5q?J
Omp#17i?5Bt6GnktB)Y6*99*]KWL0&^_-Lctl5"TSN&zTIR3$na)*n:Z,M3zzzzzzzzzzzz
zzzz!!'gALl.-Si,Ji2Q(X2s]T4!3z!!)5KFXp70CUY-hccCZQ"8tT4+#a0"z!73*u1%Ab/
\o:_8D.UWcVZ;N&z!!!"t_lFUQ4Y6!2X.Qge7+M;>6ko\%z!*$dEqc3(@Vn(_%<<*"!z:^M
cjnB[nIgq?L)q<ou:INc@b*WQ0?zk`A(0d!jf:F8%lC`OaBqpHG3o+$BT(z!72nP:Z(=fI9
Ok!IVX<SWW3#!zTE5U]%WIau/S8CO(!jSlGTT'Kz!!(@b&`M-TqQ8m4I9K<oX6!+uqX?\!!
!(L-rk16p2d\hG"n,@i!!!!A"g<8kX=X->T,,nVj-!WuTCG*q!!#sVr94Ggk=]jX9\Yu"AD
hkE!<<*"?n,u95/VerU=&V?>]TMs'A`s*!5KJ)+aM\jbM;PWg<K-dCEgWjGooKU!!!"d&Fj
`Hj$mqI5"a49X=W^u*4X8j(]j]IOdM6;B),<lpEK"%7gJphO5BIlMuWhX!&-Fi]F+#UE=)B
EMK\$on[nm`WWA4SLlRLb2e*Zu>EG_'@*];=LCjLd!!"@gTtNCqO&\$-V$m";a!L4=MuWk<
&JG"edTBT=2]kb,i@GLe`<QAC!.`9I(^tJ_mbg9<d<+MEgDM"HbPOg3!/uKTgRo,\S@II"1
``k(5=`Z]5*>mG!!"]eJj2[4m'20>\4+lO*P!=I+H6&W"9>CD_u"?W=Q+-H.m5HNT0C9\Vu
Qet!2+DnW]0[GMq0\_V^%L*"[L+5^[ea5Vkr0e2-S=grKqd=zXK5TOK_st%lQIM*X-^%W%0
/HMJB&,#0eGW`oCh-c;ucmu!3d+O)*;T[>4,l;XbVjFp[#DE@2K!U+X&#VH.<5hpD+c[eDP
J3TCFrlz`:;o^:\XR+gda+\Lr5qhYqbd]O!aom/g8''ViT`PrKa11o]isI`Np)fO!ao-!!"
jtG1VZ-#;c4tpqJ]jqM4W*ScAcTGX(^=g35FKRu'=Lr:""K`tJFQ!!$1K0d19%hcL+[R1/B
Fq!e8ehM2dF+GEb7me*ql_YlBeO"=L[JG8R:!!!"L[L)R:*RGg"/LZf(*UJh.]YjW.!WYV"
+.p'onMp9TLMem$g,UVq.nTmD!!#8:[r4CLCmGE?\_Y)hkW%Eh'`^M^;c(D3>BfKo%Gdg]V
kpS(#4OgVzcj<o8?/RoZd8S$pF*[NR,O_B7!"e/SU\E>f<cPl[kUEEih;`o_!<<*"TH=d[P
@dSD`dNN8VtBBAE94rHh?Oern.c@djJ)tKoWY^cI\Y7gQJ3G@I:*'U!!&ZNJj4[lmZ!hR'[
?o\;t4i6]T4WEi;XB1(:@iL*ptrlSRq.aQY=%rz!#9a#ruG-:<BN/a2W3h,!)/%N?>kVl>J
pEJTX3R!;ucmu!3"&3*S7e3Gk@=d?'_$GI@p8="X$I%R#n[to*$WPHkE9(cCX[fI<Ybm!!&
[)$jOVd=WZA=4M$KHrLrF'/C4@s#Q-f>:9es%IM:(><\6JOqsXXe!!#:a6q51T*U:LijJ0o
r20ds+a7"9q@0!SKQd.bZf@>HLjfcjd)mqCY-D'rD"onW'5aK4SI;j\:jkRm@\r;o.h'V;@
#mlI$%l+.]-TX;+e^>\tYBmlo@#l'%+$t5pA,lT0!+[8@gjFYh\CA]tZ**QQ"n=dt!9fgu%
t-nX=i^JMf5#\SY^bU(QM3ZL!!!!aQ=KAYbbV%DH?WP=o\^aB_8,q-"/%S^A)]GL4,r^^<6
_[8GBk9CzA4;;=/RNmeqcHDHR5TMPYKnTQLDg0knDp:h(i*dPQaXW7g>OIKisYnf!._.D>[
5.AZ*)kP7/BZ^:.l+Bgdk&SO/`3$,!%2sPOf[iKW93mNSb?jO#QA*!!!#7P<f/p5s67!O,J
+PC#e"+j%!)LV"4!1f-:JZEPITXTAfb#KSDnc52#u:!!!#@O7'dKBt8ookXbI4eT&_!D--3
O"TY9QN/UoGr##1o2_1\JVkl&=qt!#0z!<:+8dgrr!OKqFV*kqXDK6Os=2uq[jp5S7QqQ8n
/fk,q?=kI#pns&kL#64`(!;IXZ\mOG\9ZeQaZ<4bOq6>bFB\pcL!7SpE04`IH&+3M7f#b`k
2gHKdzJFjZeaXc]gE??W@SIFqoo%^5A=K2RUFMu2;Dg/hGX!:q<0OC8NTAY.M!<<*"!5;2p
6K7>\41L?<Z;`01Fa`u5O8"bA^f7gbo>RXoCUmf>=XjekmS6GLidKkgz1*n,,HL+HEm\?X1
'e>3]X-Oe5$]X.on,_I(T5QF2-19Ap<f?@d%8i7m]FR1+zKb&VU=I[>*);&H<YsW^K'C^na
aDs[=`O`09f>H%.qdl/F19BB%:I,T*O$<UE!!!!4:EKAjV(aM>43Zg3bnn$R56+0i?nbhFo
3c6=bi6ehIChPQIMoru'EA+5!!!SHod`hM\$tB]NlmfY1Nga-<u=(%STFPVbAj:8EkgD8Ap
RS5s*OJtmo'2d!!!!a1oHAij$&^MZE^^>>I460d)U+^B)r"Tj8Ho?k+lkLYHf\uEdP?EiA'
f-z!'ha?[p@rVTZYFABt;0-eVVZ"8DY]q!6X6co4cmP"'-380<VCH,PuEN4qRbp!!!"0Z/4
^ZpG#Y`:VX%B]=2(&NfN.J/c[#bTTA&IQ64"k"Pg?>m3;"?!<<*"!'i.@K>D!D!U_0_A8n`
;L\BP]NK*+L7K=QkM"#*P%Hi%[>0?df6In1=2]-e3&-)\1!!#WQOH;GGqG-J=.thG(n!/\%
hMdGFWr`_A()jU:ojY[RbILt>#`8MmI7["L;ucmu!9f4%kd\`a]5f!)+XquC!YZsFA,)pDV
u(RB`r0@4;Y&/pmI>0&][$rczKaA9JZ5KouqcF4tc/;nYp[#C*q)O3(W<'g7_s`$CRcVS9=
P@i25`jJhrnB:[17%[6!<<*"!2'ZB_4SbM4*)K`+_fE/X+U;(F2=ImGb6!!X7Q1!^mFkD0g
Ch8A]!Y*T-Ni2('"=7!;&t3a7)rYf5VmV+mIG(ElhM*j1[^LGb6*$/+W>[qh;@=YeH&&`b*
/DYg=fT-O9\P!!%Q7"T!n6(uW>\oS$fad=_]'m.S$b#1Ieu,ES"KGicg&C#c[A5P(#@ArO-
=8FU9KV[3>'!!%P3nFm;.eo*G?0c6'V`X[,OHLME1XT9m`)A7>2j2UTfCUg#%87i_o^aUr[
N;&_Az?rZ!t$Q@f9-23N=,*5)R*OiRc#kSYhIBikOnDp:(_kI7#*6H,T]`/mTp](9o!6CVA
Gni<C`sV7p0gn!%(3U'uH/,t+!_Xg@ai)3=T/lH1K[H:!T?dd#6i4%[o*si1aoDDA!!$uuj
`CG&h'&fPaG9jlHZrf6Cqr:M^-81E2k7csY*BPeI?.O\zOQCcd113pS8+'kCKJD<;gF`25p
[u^*j5UeuT0'i1q&BufieZbs>BauJl@8S9/=OcOrbM!R.KBGK!'gm0?O%)*NH\>ZQ9dYS2`
[LUrA&otklXV8KS7:u2kD[j^TXQs'(2YG+t=fA3;J'>];P]0!!!$!%ptr)R.XOUYo19)pU2
Ror'GY#7"?XKDhGK9^4<DV1n'O/f*5Wo,QIfE!.YLQ]al18%kCRl2-(KNViBSSr:&OHcm[b
K&hkAX!FbkLhln!'Jbp=@8BtmakFdmp]MBgRz'8;Bi7h&eFIE[GeM3WeNN!W^L*kW0akqhc
A$E/[)gRnWi2opQYZJ^5T+`]>]W!fIj!rr<$!"]@/Wgiof=!qlKEo8j)VU5VQK>IGAYPZ?2
UPIb7eOaRHC^:K,jF(V@zBE056Ih,o4IJegJQjKNHmr6&6gtRmW%e&usLa+&dn_^s^SQDGf
m^%fJM1d:E.5l&UiR,<a0)ttP!!(8/`_L%I`I/GU.%VTq=0>\Tm)E&oaN,4TB,M7)cp.0h8
M>if#PqXVkC2,-MJ(5AS^Gi)][&>5zNBp$1A/rR:/;L0gmd9D=NSh$WlfG%*h^9`tnNPdEI
u+Gl^4,mWoBI!6VH;YXZ=#oJ3sGZb!!&)b)+Q8_G_#[I%T,=d\h1C\]D'BtgTOrg,UME3@&
">NQf*#Tc.:,U-B3/UZEWA<1*C=EXlFD+AH2]1!!%$^UFGA+-b,6'&>Q):eac/8pDht0o=;
>;@KM!g<J?7uke"<1mb2u4cI<lJ3\BHBck3$al_Y&72&lSr!!#8JA5'Dem3;;P*Fes=m^.)
UKWXY]c<\3UoMZ;:bE*5(r>4<4NZG^CEp;O;f$<'3/7SNZ=Y)b@k6CB2&HDe2!'jU*3H,of
1THW<n1K5O_tpL?T=<-Vqpdbe?U.eK0c9mOrR'.g:L)MDSN_K1IPB%+l!\:Urq(WqB-dNX!
!%NZ\T6YKYDu8cO7s2!al$JUkKVYeFjl&&B-4j8mN3A]che.4`daO9+O'HNbCb.ZY$$3qMN
(itXq'4t&7QjJf@Aj;]<?LPU]:Ap!!'UlnO&q"4]ZMDocYY!.uVBA#-V5jb@A_mo4Lhrqsa
U>TTA'C>b3f-+Xt2ko\Q-??_$a*S.lRVY^WY1]F*SFc2mtG!!)4&^\>Qo%E:.@#ZH%l>[fK
uKAG=rS"7kFhLFkFjepFrp]c6EX9j65NfN^V)g(i*b7dB.[r/pa_Z%o@$!W2X>D&>g&]TbK
\M<;X3:@Luz+A37])DuB%480=0U>>IGZl_$<M4@"mkNl@;G^P;DV5":a>e0A!rk17o?MODI
#`T+N<n1`UULF<-_T90um_-/WnHna44ZfgWY!9PPi@$-h_WX\r]&T1Z6rrGDgDL_DX55iFz
!7DGqQ`t#:IdZ5]7,R7\D)ma3^PB"b1tHg3Uht1Nmp*G3s)P`(cDs^9`dQnCXd^u>`bk[be
GmX)`Na!4%bT+^7m9I-:)^AT^4&WAPs%1\F71$An#T]9,U"=npO*q[!!!!Ab@*(AL_4SJ%3
c(0Qqj_6(@Tt'=UU:t!rr<$!9f^^7m-=bPk!4fG6%u$A5)Ge9<VZL_Y^JEz!0Zg.H\70)&H
p58):i`NbNJl;n&GD.!!!#Ws7$%"C--G<pJE,d+:+<-[<2udrlk77$ig8-!!*"Rkib"<\U1
lJ'bLR7N1<m@O2T'bn@f,0zJ?N?7(q.%^['JUSBLEC70g_rmljiBm_>Ddkz!%;*coV>:GA_
]e:889j/&q['EIbg=I^%IQ_*>\\U!!!!Qn`ki.L]L9+a,gRY+=^sXaGkY__7]6Ez!'g\G@8
ZWnn)QZq6kBJu4HB,j@UnDChdlfg!!!"LBTeMe41AJ'ZEW@QUdPas;'\:Um>i:!bPUE/z!+
^*<cDs5o*P%4_&HkC1Aluf*hG8NEhbsOU!!!"L!dkCbRpt^'I>!G"#U2:8VJHbPNT>LH"TS
N&!!%lg+.p("knNl3-6b[A0c8#IZ*IKEA^gIn`$F46;#gRr!!&ZSQS1JhgXUlPQkMasKJA+
*3b#W;z!.Enno4c)*c.kg\#_F2Kbau*bpsWm4G>/&;!!!"l3q;`sS"7l-=n!Mb+p^&N_DuD
/7gJoS40BG0#2])Iz!+7oODnd:?HR8Ek."WR4\r7Kao^pOXhY0P@z^k'joaEc6YEZ^Df#_J
klIbqfb&M^reNW9%Z!!%Ng#".st4Z@^k0&\uN71^`&VbcJe-]WHB^*s*`zPMkPDs"W*MgrH
?!Jn3P.Z$#Yb+3aUg#QXZ"g:R*W.-j$Hj8WG<Bd[-R7O<=O1UE9jVL+Ls\ThCJn-0V@W>uR
J;+a,*2&-Or2FGEgK^qGR/hH@0cCT$Q1T+qB%Jdm3HHl=G7hL0@msI=*m'?[GK(Sa0D^mg/
O\1dk\]KopmAN#,j%oaVpg)-=m;oUlJkrM3`^o]n.?8i<5tM%Vr/pcF^63/(nC^f>Af&QmO
ZmOVHM^(%GlRi'%]<+2k"Lg?T490YA94>Is(,,Uk]746J5N2AVq6j,P(pD9er"-,[Ek9B!8
rEVh@Q/6D-cYQ<`0./?rlgnk0'Go2#mVG]t5qtHMjtB#;21)Rm';fj,).G)#sZ)j4r>]"ga
)=cao9oWenXdKbi"hde_5=ct=0q!#[2I(t_]*Cs)PNi7#*0;:4IpH0(lFrVajbV\]=5RB4*
(F32;)i7"m*&`+I"._`ZF/bFl'!5Ot`8e(4ErPeEL<sBb!-&o]P9j:^!l1r03cpnfN!+X6\
T5Uk0B4^RX=OP8>P*NXnrP>)[5%k-#J7-Y]?[d"Ok2<SNUu8raI-H@;O.jlF!!)e<EZhc&f
?"mD<t4Idr(-UN>ghH6,AV%o)cJ1MisPk&#]esOpR8api7#!-i@L.W]4()XY-+AC-P-7Xr4
\KZmhX7(&q"_c1^q(.FPEXMSY8h"!!'NaA27/3i,$^2B^cU;dR.beG#A49k<g=L!!$s[ick
7-Q.8ZWX<@9t/SPK[q8DR@>poLGPG-;>!!%6Tf<9=`6u+-/b7-X=9DXQ8Z>u]DeQk,I"Vh#
f;6R+0j3=FT6B0P06dPI(#.3CW?/Jre3V6GU!!#CNe;8)[cJBCcfTpVd^%QJlm&MY1cOU!U
GUS`seDWd>o:FYII.3GDcPFj]Er'<^k[O\p!$8_&JRhJtj0LNKK+Hq(I^aSuD5d?mgu.*uk
gKS5!/=9V?[pVH-_I!92Y]Nil.9sQ8#n.9H%[gN!+T%lT%LILZg>c%i5<)^`d;ku@<t.4,R
-T-$31&;?I/#qD=?$$Ht%6f6!YC]c(8(JJ'Vj+.0'AG7Qd9p\*%kYoP!`f>oFsL9T)s>4CL
GX!.[;\fA"&apD:/KHFB"/&=].p<)_W:rMKVqn0b&fkC`Z#SpT1(ejr0`id"bn4unrL8;4e
$!<?O"8Is86EVbALRt;1E;?ld5P);&&>kIPA!!)L)%1Wl>q4dQLIr#WZj@c8Q860X-ZJ?=+
5DHn;!<=7k[($!5\8'pN$2MEXIVDcG^0-?Febo3[NR7DP!!$Q8?b5[lW&XMCPdS>/!,9B;1
HeoJ>'K"QGNeo=!!(#r6t2h_^tD05Z7>g&Y:lk7h@N=,4WFb.!5`Dbm>)NW:EH,EHomDk2K
_@cb2noFHjTiR,K.hG[s)]hCi4Dnn7CQBH6i,i5T.sj:N*2eH(t1:4S2nb!!)rJi8A!a;u=
`!Q'95L#2^GsLYA!_q9.[LFhAl`9)3-<!!!l#3]jpq9C$Vq7>%cVdZCqWp;X+n:]Adb-hMf
k!!(fH<9h4OX[W\uV`e&lI'\q6@X$^TR_GR&]lj__!2EfnXn[I\B3okW/GPs5i@)%hn/KJQ
n`iahe5SC#o^mmPP5kT5+nklrCEI@Uo'D=Pi2_WTcPFg_\81tSSK2"0mi)6,i8I;)#+JAs7
9<MS)-Iu-'9R`BcEq8!aX=2,Y(jYf!!%Q.et3d=FlM.5GuZXIXpVn4BT2[rAG*Nc]hN.nP0
$\e3s,H_#V<ZlSj(gG/Z?+\C7*29ZmL4[V(]U_rab6i!!!!9EI-Z%@s)/?0AAYgnWgrb(M.
R39O1^4Xnf9m;KBQ'VZ6_4^%E`W)GaWi.BJq#e"`3cABi@Og0Aa`I.QH!b/_U(!!!PnqodS
@GFj'Hn)]\5n8"%R?'25D,n%n><#f[hmI3uN!!'eGqPj(QrDdKr]tS"Qhu#U@ma4ssf<!)p
C8h$0qc5iOPm[QlA@VWW^q$f=je[)Q5@5>Napl&rBnS<W>jg#VhqM14+)AFHB6jRYJ0;FA`
K)sr8tn1aZ\sER8IEoDB8Y.S5l*7Gh;'%HH3=3Jpn'(o>s#:bbj#pi4EDt3S"!]jIeCFMLK
eZQ\/kFW!rr>2[uRLp7r$AP?bQL8S<De\Q2Z)n`oXokJ*Wu+6g;kfViIq,f,"De^k:saflO
eL[^EVgl([pLN6`$KE9U.VA)aM4?N'AgnqOJ`0#d;OKt`QI!!%c1^d,3u_UX;9Rb"\!^\G>
kPK%nCdKjU1q#"3"-n?aJq5!.hHX!Bq+9;HB@ng<KJ#qa(p$Paoo;Z,aZYB!*H,2GI1"Fb[
q+DO;\$>F1H7`uLm77__6=1<)!!"67It.%;`Qn=tkKC?c/ULu_k6;H6Of[=A3@26)I(ZS_^
>VUUHX!DU'EA-k^@_'i``fMbg>B8K6g_LhJ$`TaZ.E4[A<Y'sh;(XQb3G!.DJ<nR80eC+s*
k(M!+_PZ5cV/cX1>4Cp;#APd^k^e/!he<S,-5Qn?"BP;^^YPJ#<"3=$J6mel;'"EP*IgrT.
h:Ut80=!!'l,De.J'Fas#U&"bf!Wct'bg\>K/H[YR`&*?!b5%@oG9lK#!Aei(pUge1Iebbg
Hn(VnE]oAo(jfY(9U&Xoh!!)f#;Q7JOf=P6?>\uOX<e'mlFlfUimiO-<f&XUCYOoiDB^Y"c
e(-sn!^CFEl@f)g1Y9AuJ*U<3\#8ud:$W==q#8\5*d[Ht9DYjj?2Mt(\)O+]+TVQC(d@J7U
8t>mZ_OS'[3O7CjibY:`uAJXC7B"=)_6-(fN)$[?<VQ^NJ.Vd9CCWek#J7Eb$SAB^\?>e.O
hIpos]<JhN7_(CA4@&s7H6ZA$P0np2@\EiR5]joTr4#dGB*loQLfGzzzzzzz&Dhm:o`9!?~>
Q
Q Q
showpage
%%Trailer
end restore
%%EOF

View File

@ -0,0 +1,585 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
xmlns:osb="http://www.openswatchbook.org/uri/2009/osb"
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:xlink="http://www.w3.org/1999/xlink"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
width="104.75715mm"
height="57.028595mm"
viewBox="0 0 371.18675 202.06983"
id="svg2"
version="1.1"
inkscape:version="0.92.1 r15371"
sodipodi:docname="Logo-PCLL.svg"
inkscape:export-filename="/home/yohann/Documents/stage/Logos/Pôle Logiciel Libre/LogoPLLGrand.png"
inkscape:export-xdpi="200.87115"
inkscape:export-ydpi="200.87115">
<defs
id="defs4">
<marker
style="overflow:visible"
id="Arrow1Lend"
refX="0"
refY="0"
orient="auto"
inkscape:stockid="Arrow1Lend">
<path
inkscape:connector-curvature="0"
transform="matrix(-0.8,0,0,-0.8,-10,0)"
style="fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt"
d="M 0,0 5,-5 -12.5,0 5,5 Z"
id="path4626" />
</marker>
<linearGradient
osb:paint="solid"
id="linearGradient4664">
<stop
id="stop4666"
offset="0"
style="stop-color:#ffffff;stop-opacity:1;" />
</linearGradient>
<clipPath
id="clipPath3132"
clipPathUnits="userSpaceOnUse">
<path
inkscape:connector-curvature="0"
id="path3134"
d="M 0,600 H 800 V 0 H 0 Z" />
</clipPath>
<clipPath
id="clipPath3248"
clipPathUnits="userSpaceOnUse">
<path
inkscape:connector-curvature="0"
id="path3250"
d="M 205.131,405.857 H 559.926 V 579.858 H 205.131 Z" />
</clipPath>
<clipPath
id="clipPath3260"
clipPathUnits="userSpaceOnUse">
<path
inkscape:connector-curvature="0"
id="path3262"
d="M 0,600 H 800 V 0 H 0 Z" />
</clipPath>
<clipPath
id="clipPath3288"
clipPathUnits="userSpaceOnUse">
<path
inkscape:connector-curvature="0"
id="path3290"
d="M 205.131,405.857 H 559.926 V 579.858 H 205.131 Z" />
</clipPath>
<clipPath
id="clipPath3304"
clipPathUnits="userSpaceOnUse">
<path
inkscape:connector-curvature="0"
id="path3306"
d="M 0,600 H 800 V 0 H 0 Z" />
</clipPath>
<linearGradient
gradientUnits="userSpaceOnUse"
y2="926.69495"
x2="1341.036"
y1="926.69495"
x1="1114.8962"
id="linearGradient4668"
xlink:href="#linearGradient4664"
inkscape:collect="always" />
<linearGradient
gradientTransform="matrix(0.91526376,0,0,0.91526376,-623.31504,-541.38903)"
y2="926.69495"
x2="1341.036"
y1="926.69495"
x1="1114.8962"
gradientUnits="userSpaceOnUse"
id="linearGradient3315"
xlink:href="#linearGradient4664"
inkscape:collect="always" />
<linearGradient
gradientTransform="matrix(0.91526376,0,0,0.91526376,-623.43531,-541.69844)"
y2="926.69495"
x2="1341.036"
y1="926.69495"
x1="1114.8962"
gradientUnits="userSpaceOnUse"
id="linearGradient3440"
xlink:href="#linearGradient4664"
inkscape:collect="always" />
<marker
inkscape:stockid="Arrow1Lend"
orient="auto"
refY="0"
refX="0"
id="Arrow1Lend-7"
style="overflow:visible">
<path
id="path4626-5"
d="M 0,0 5,-5 -12.5,0 5,5 Z"
style="fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt"
transform="matrix(-0.8,0,0,-0.8,-10,0)"
inkscape:connector-curvature="0" />
</marker>
<clipPath
clipPathUnits="userSpaceOnUse"
id="clipPath3132-0">
<path
d="M 0,600 H 800 V 0 H 0 Z"
id="path3134-4"
inkscape:connector-curvature="0" />
</clipPath>
<clipPath
clipPathUnits="userSpaceOnUse"
id="clipPath3248-3">
<path
d="M 205.131,405.857 H 559.926 V 579.858 H 205.131 Z"
id="path3250-5"
inkscape:connector-curvature="0" />
</clipPath>
<clipPath
clipPathUnits="userSpaceOnUse"
id="clipPath3260-7">
<path
d="M 0,600 H 800 V 0 H 0 Z"
id="path3262-3"
inkscape:connector-curvature="0" />
</clipPath>
<clipPath
clipPathUnits="userSpaceOnUse"
id="clipPath3288-4">
<path
d="M 205.131,405.857 H 559.926 V 579.858 H 205.131 Z"
id="path3290-0"
inkscape:connector-curvature="0" />
</clipPath>
<clipPath
clipPathUnits="userSpaceOnUse"
id="clipPath3304-6">
<path
d="M 0,600 H 800 V 0 H 0 Z"
id="path3306-1"
inkscape:connector-curvature="0" />
</clipPath>
</defs>
<sodipodi:namedview
id="base"
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1.0"
inkscape:pageopacity="0.0"
inkscape:pageshadow="2"
inkscape:zoom="0.87885425"
inkscape:cx="-47.520975"
inkscape:cy="52.746356"
inkscape:document-units="px"
inkscape:current-layer="flowRoot7052-4-9"
showgrid="false"
showguides="true"
inkscape:guide-bbox="true"
inkscape:window-width="1678"
inkscape:window-height="1028"
inkscape:window-x="0"
inkscape:window-y="20"
inkscape:window-maximized="1"
inkscape:snap-global="false"
fit-margin-top="0"
fit-margin-left="0"
fit-margin-right="0"
fit-margin-bottom="0">
<inkscape:grid
type="xygrid"
id="grid4138"
originx="-168.73733"
originy="-76.130441" />
</sodipodi:namedview>
<metadata
id="metadata7">
<rdf:RDF>
<cc:Work
rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
<dc:title></dc:title>
</cc:Work>
</rdf:RDF>
</metadata>
<g
inkscape:groupmode="layer"
id="layer2"
inkscape:label="Calque 2"
style="display:inline"
transform="translate(-168.73733,-774.16196)" />
<g
inkscape:groupmode="layer"
id="layer4"
inkscape:label="Calque 4"
style="display:inline"
transform="translate(-168.73733,-774.16196)" />
<g
inkscape:groupmode="layer"
id="layer3"
inkscape:label="Calque 3"
style="display:inline"
transform="translate(-168.73733,-774.16196)" />
<g
inkscape:label="Calque 1"
inkscape:groupmode="layer"
id="layer1"
style="display:inline"
transform="translate(-168.73733,-774.16196)">
<g
id="g4172"
transform="matrix(3.4622468,0,0,3.4622468,439.25545,270.44423)" />
<g
id="g4174"
transform="matrix(3.4622468,0,0,3.4622468,439.25545,270.44423)" />
<g
id="g4176"
transform="matrix(3.4622468,0,0,3.4622468,439.25545,270.44423)" />
<g
id="g4178"
transform="matrix(3.4622468,0,0,3.4622468,439.25545,270.44423)" />
<g
id="g4180"
transform="matrix(3.4622468,0,0,3.4622468,439.25545,270.44423)" />
<g
id="g4182"
transform="matrix(3.4622468,0,0,3.4622468,439.25545,270.44423)" />
<g
id="g4184"
transform="matrix(3.4622468,0,0,3.4622468,439.25545,270.44423)" />
<g
id="g4186"
transform="matrix(3.4622468,0,0,3.4622468,439.25545,270.44423)" />
<g
id="g4188"
transform="matrix(3.4622468,0,0,3.4622468,439.25545,270.44423)" />
<g
id="g4190"
transform="matrix(3.4622468,0,0,3.4622468,439.25545,270.44423)" />
<g
id="g4192"
transform="matrix(3.4622468,0,0,3.4622468,439.25545,270.44423)" />
<g
id="g4194"
transform="matrix(3.4622468,0,0,3.4622468,439.25545,270.44423)" />
<g
id="g4196"
transform="matrix(3.4622468,0,0,3.4622468,439.25545,270.44423)" />
<g
id="g4198"
transform="matrix(3.4622468,0,0,3.4622468,439.25545,270.44423)" />
<g
id="g4200"
transform="matrix(3.4622468,0,0,3.4622468,439.25545,270.44423)" />
<flowRoot
xml:space="preserve"
id="flowRoot4381"
style="font-style:normal;font-weight:normal;line-height:0.01%;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"><flowRegion
id="flowRegion4383"
style="font-family:sans-serif"><rect
id="rect4385"
width="164.5"
height="46.75"
x="242.75"
y="422.36221"
style="font-family:sans-serif" /></flowRegion><flowPara
id="flowPara4387"
style="font-size:40px;line-height:1.25;font-family:sans-serif"> </flowPara></flowRoot> <g
style="display:inline"
id="g5969-5"
transform="matrix(0.74333811,0.11129858,-0.11129858,0.74333811,-1135.4668,488.39488)">
<g
transform="translate(0,1500)"
inkscape:label="bateau"
id="layer1-1-2" />
<flowRoot
xml:space="preserve"
id="flowRoot4297-8"
style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;line-height:0.01%;font-family:COUTURE;-inkscape-font-specification:'COUTURE Bold';letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
transform="translate(0,1500)"><flowRegion
id="flowRegion4299-4"><rect
id="rect4301-4"
width="1088"
height="416"
x="2104"
y="1948"
style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:144px;font-family:COUTURE;-inkscape-font-specification:'COUTURE Bold'" /></flowRegion><flowPara
id="flowPara4303-8"
style="font-size:144px;line-height:1.25"> </flowPara></flowRoot> <flowRoot
xml:space="preserve"
id="flowRoot3677-8"
style="font-style:normal;font-weight:normal;line-height:0.01%;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none"><flowRegion
id="flowRegion3679-2"
style="font-family:sans-serif"><rect
id="rect3681-7"
width="772.16058"
height="100.40916"
x="2815.6992"
y="1956.3104"
style="font-family:sans-serif" /></flowRegion><flowPara
id="flowPara3683-1"
style="font-size:40px;line-height:1.25;font-family:sans-serif"> </flowPara></flowRoot> <flowRoot
xml:space="preserve"
id="flowRoot4653-7"
style="font-style:normal;font-weight:normal;line-height:0.01%;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
transform="translate(0,1500)"><flowRegion
id="flowRegion4655-2"
style="font-family:sans-serif"><rect
id="rect4657-8"
width="408"
height="352"
x="1732"
y="1580"
style="font-family:sans-serif" /></flowRegion><flowPara
id="flowPara4659-8"
style="font-size:40px;line-height:1.25;font-family:sans-serif"> </flowPara></flowRoot> <g
transform="matrix(3.7418697,0,0,3.7418697,-7038.9947,-4368.125)"
style="font-style:normal;font-weight:normal;font-size:40px;line-height:125%;font-family:Sans;letter-spacing:0px;word-spacing:0px;fill:#4a3f74;fill-opacity:1;stroke:none"
id="flowRoot3442-6" />
<g
id="g3550-3-3-6-3-7-9-3-2-5-0-9"
transform="matrix(0.9986786,0,0,0.9986786,450.44451,-1197.2567)"
style="display:inline" />
</g>
<rect
style="opacity:1;fill:#000000;fill-opacity:0.94117647;stroke:#483e7e;stroke-width:2.5999999;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:0.30000001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:0.94117647"
id="rect8980"
width="0"
height="0"
x="0"
y="0" />
<rect
style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:0.95999995;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#534986;stroke-width:1.83099997;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:0.30000001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:0.61711713;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"
id="rect4682"
width="0"
height="0"
x="0"
y="0" />
</g>
<g
inkscape:groupmode="layer"
id="layer5"
inkscape:label="Calque 5"
style="display:inline"
transform="translate(-168.73733,-774.16196)">
<g
transform="translate(5927.9137,-1112.2775)"
style="font-style:normal;font-weight:normal;font-size:118.38638306px;line-height:125%;font-family:Sans;letter-spacing:0px;word-spacing:0px;display:inline;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:0.96078431"
id="flowRoot4401-3-7-5-3-0-8-5">
<g
transform="translate(-11640.668,-327.21498)"
style="font-style:normal;font-weight:normal;font-size:40px;line-height:125%;font-family:Sans;text-align:end;letter-spacing:0px;word-spacing:0px;text-anchor:end;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
id="flowRoot7052-4-9">
<g
id="g4868"
transform="translate(-10.35097,6.2783949)">
<path
inkscape:connector-curvature="0"
id="path4648-68-3-6-1-9-9"
d="m 424.11349,770.54724 c -32.4719,0 -61.2945,15.8724 -79.223,40.2273 h 25.1918 c 14.1484,-13.1505 33.1176,-21.1917 54.0312,-21.1917 20.722,0 39.5416,7.8864 53.6495,20.8217 h 25.3536 c -17.9453,-24.1609 -46.6833,-39.8573 -79.0031,-39.8573 z m -80.7259,154.34754 c 17.7878,25.5659 47.3097,42.3949 80.7259,42.3949 32.244,0 60.8846,-15.6536 78.8356,-39.7185 h -25.3596 c -14.0868,12.8507 -32.8325,20.6887 -53.476,20.6887 -22.0376,0 -41.8989,-8.9359 -56.2509,-23.3651 z"
style="color:#000000;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:normal;font-family:sans-serif;text-indent:0;text-align:start;text-decoration:none;text-decoration-line:none;text-decoration-style:solid;text-decoration-color:#000000;letter-spacing:normal;word-spacing:normal;text-transform:none;writing-mode:lr-tb;direction:ltr;baseline-shift:baseline;text-anchor:start;white-space:normal;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#534987;fill-opacity:1;fill-rule:evenodd;stroke:#534987;stroke-width:5.32738733;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:5;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"
transform="translate(5712.7543,1439.4925)" />
<path
sodipodi:nodetypes="ccccccc"
inkscape:connector-curvature="0"
id="rect4696-6-3-6-7-6-2-4"
d="m 479.57959,820.58324 v 96.62434 l 68.2492,0.021 v -23.1886 h -41.3604 v -73.45704 z"
style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:0.65;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#534987;fill-opacity:1;fill-rule:evenodd;stroke:#534987;stroke-width:4.89254045;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:50;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"
transform="translate(5712.7543,1439.4925)" />
<path
sodipodi:nodetypes="ccccccc"
inkscape:connector-curvature="0"
id="rect4696-6-3-4-3-0-3-6-4"
d="m 384.46959,820.53914 v 96.62444 l 68.2493,0.021 v -23.1886 h -41.3605 v -73.45704 z"
style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:0.65;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#534987;fill-opacity:1;fill-rule:evenodd;stroke:#534987;stroke-width:4.89254045;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:50;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"
transform="translate(5712.7543,1439.4925)" />
<path
inkscape:connector-curvature="0"
id="path8859"
style="font-style:normal;font-variant:normal;font-weight:500;font-stretch:normal;font-size:27.5px;font-family:Ubuntu;-inkscape-font-specification:'Ubuntu Medium';text-align:end;text-anchor:end"
d="m 5997.4772,2262.256 q 4.1525,0 6.3525,1.5125 2.2275,1.5125 2.2275,4.73 0,1.6775 -0.605,2.8875 -0.5775,1.1825 -1.705,1.9525 -1.1275,0.7425 -2.75,1.1 -1.6225,0.3575 -3.7125,0.3575 h -1.7325 v 6.71 h -3.465 v -18.7825 q 1.21,-0.275 2.6675,-0.3575 1.485,-0.11 2.7225,-0.11 z m 0.2475,2.9975 q -1.32,0 -2.1725,0.082 v 6.49 h 1.6775 q 2.5025,0 3.85,-0.6875 1.3475,-0.715 1.3475,-2.6675 0,-0.935 -0.3575,-1.5675 -0.3575,-0.6325 -0.99,-0.99 -0.6325,-0.3575 -1.5125,-0.495 -0.8525,-0.165 -1.8425,-0.165 z" />
<path
inkscape:connector-curvature="0"
id="path8861"
style="font-style:normal;font-variant:normal;font-weight:500;font-stretch:normal;font-size:27.5px;font-family:Ubuntu;-inkscape-font-specification:'Ubuntu Medium';text-align:end;text-anchor:end"
d="m 6021.5801,2274.301 q 0,1.705 -0.495,3.1075 -0.495,1.4025 -1.4025,2.3925 -0.9075,0.99 -2.2,1.54 -1.265,0.55 -2.805,0.55 -1.54,0 -2.805,-0.55 -1.265,-0.55 -2.1725,-1.54 -0.9075,-0.99 -1.43,-2.3925 -0.495,-1.4025 -0.495,-3.1075 0,-1.705 0.495,-3.08 0.5225,-1.4025 1.43,-2.3925 0.935,-0.99 2.2,-1.5125 1.265,-0.55 2.7775,-0.55 1.5125,0 2.7775,0.55 1.2925,0.5225 2.2,1.5125 0.9075,0.99 1.4025,2.3925 0.5225,1.375 0.5225,3.08 z m -3.41,0 q 0,-2.145 -0.935,-3.3825 -0.9075,-1.265 -2.5575,-1.265 -1.65,0 -2.585,1.265 -0.9075,1.2375 -0.9075,3.3825 0,2.1725 0.9075,3.4375 0.935,1.265 2.585,1.265 1.65,0 2.5575,-1.265 0.935,-1.265 0.935,-3.4375 z m 0.495,-10.2575 -1.2925,1.4575 -2.7225,-2.2275 -2.695,2.2275 -1.32,-1.4575 4.015,-3.85 z" />
<path
inkscape:connector-curvature="0"
id="path8863"
style="font-style:normal;font-variant:normal;font-weight:500;font-stretch:normal;font-size:27.5px;font-family:Ubuntu;-inkscape-font-specification:'Ubuntu Medium';text-align:end;text-anchor:end"
d="m 6030.0131,2281.781 q -1.485,-0.028 -2.475,-0.33 -0.9625,-0.3025 -1.54,-0.8525 -0.5775,-0.5775 -0.825,-1.4025 -0.22,-0.8525 -0.22,-1.925 v -16.555 l 3.3275,-0.55 v 16.4725 q 0,0.605 0.082,1.0175 0.11,0.4125 0.3575,0.715 0.2475,0.275 0.66,0.44 0.44,0.1375 1.1,0.22 l -0.4675,2.75 z" />
<path
inkscape:connector-curvature="0"
id="path8865"
style="font-style:normal;font-variant:normal;font-weight:500;font-stretch:normal;font-size:27.5px;font-family:Ubuntu;-inkscape-font-specification:'Ubuntu Medium';text-align:end;text-anchor:end"
d="m 6032.3747,2274.3835 q 0,-1.8975 0.55,-3.3275 0.5775,-1.43 1.5125,-2.365 0.935,-0.9625 2.145,-1.43 1.21,-0.495 2.475,-0.495 2.97,0 4.62,1.8425 1.6775,1.8425 1.6775,5.5 0,0.275 -0.028,0.6325 0,0.33 -0.028,0.605 h -9.4875 q 0.1375,1.7325 1.21,2.695 1.1,0.935 3.1625,0.935 1.21,0 2.2,-0.22 1.0175,-0.22 1.595,-0.4675 l 0.44,2.7225 q -0.275,0.1375 -0.77,0.3025 -0.4675,0.1375 -1.1,0.2475 -0.605,0.1375 -1.32,0.22 -0.715,0.082 -1.4575,0.082 -1.8975,0 -3.3,-0.55 -1.4025,-0.5775 -2.31,-1.5675 -0.9075,-1.0175 -1.3475,-2.365 -0.44,-1.375 -0.44,-2.9975 z m 9.6525,-1.485 q 0,-0.6875 -0.1925,-1.2925 -0.1925,-0.6325 -0.5775,-1.0725 -0.3575,-0.4675 -0.9075,-0.715 -0.5225,-0.275 -1.265,-0.275 -0.77,0 -1.3475,0.3025 -0.5775,0.275 -0.99,0.7425 -0.385,0.4675 -0.605,1.0725 -0.22,0.605 -0.3025,1.2375 z" />
<path
inkscape:connector-curvature="0"
id="path8867"
style="font-style:normal;font-variant:normal;font-weight:500;font-stretch:normal;font-size:27.5px;font-family:Ubuntu;-inkscape-font-specification:'Ubuntu Medium';text-align:end;text-anchor:end"
d="m 6057.8599,2274.2735 q 0,2.2 1.045,3.465 1.045,1.2375 2.8875,1.2375 0.7975,0 1.3475,-0.055 0.5775,-0.082 0.935,-0.165 v -8.25 q -0.44,-0.3025 -1.1825,-0.55 -0.715,-0.275 -1.54,-0.275 -1.815,0 -2.6675,1.2375 -0.825,1.2375 -0.825,3.355 z m 9.5425,6.7925 q -0.99,0.3025 -2.5025,0.55 -1.485,0.2475 -3.135,0.2475 -1.705,0 -3.0525,-0.5225 -1.3475,-0.5225 -2.31,-1.485 -0.935,-0.99 -1.4575,-2.365 -0.495,-1.4025 -0.495,-3.135 0,-1.705 0.4125,-3.08 0.44,-1.4025 1.265,-2.3925 0.825,-0.99 2.0075,-1.5125 1.1825,-0.55 2.7225,-0.55 1.045,0 1.8425,0.2475 0.7975,0.2475 1.375,0.55 v -6.9025 l 3.3275,-0.55 z" />
<path
inkscape:connector-curvature="0"
id="path8869"
style="font-style:normal;font-variant:normal;font-weight:500;font-stretch:normal;font-size:27.5px;font-family:Ubuntu;-inkscape-font-specification:'Ubuntu Medium';text-align:end;text-anchor:end"
d="m 6070.8317,2274.3835 q 0,-1.8975 0.55,-3.3275 0.5775,-1.43 1.5125,-2.365 0.935,-0.9625 2.145,-1.43 1.21,-0.495 2.475,-0.495 2.97,0 4.62,1.8425 1.6775,1.8425 1.6775,5.5 0,0.275 -0.028,0.6325 0,0.33 -0.028,0.605 h -9.4875 q 0.1375,1.7325 1.21,2.695 1.1,0.935 3.1625,0.935 1.21,0 2.2,-0.22 1.0175,-0.22 1.595,-0.4675 l 0.44,2.7225 q -0.275,0.1375 -0.77,0.3025 -0.4675,0.1375 -1.1,0.2475 -0.605,0.1375 -1.32,0.22 -0.715,0.082 -1.4575,0.082 -1.8975,0 -3.3,-0.55 -1.4025,-0.5775 -2.31,-1.5675 -0.9075,-1.0175 -1.3475,-2.365 -0.44,-1.375 -0.44,-2.9975 z m 9.6525,-1.485 q 0,-0.6875 -0.1925,-1.2925 -0.1925,-0.6325 -0.5775,-1.0725 -0.3575,-0.4675 -0.9075,-0.715 -0.5225,-0.275 -1.265,-0.275 -0.77,0 -1.3475,0.3025 -0.5775,0.275 -0.99,0.7425 -0.385,0.4675 -0.605,1.0725 -0.22,0.605 -0.3025,1.2375 z" />
<path
inkscape:connector-curvature="0"
id="path8871"
style="font-style:normal;font-variant:normal;font-weight:500;font-stretch:normal;font-size:27.5px;font-family:Ubuntu;-inkscape-font-specification:'Ubuntu Medium';text-align:end;text-anchor:end"
d="m 5921.6147,2316.2935 q -2.145,0 -3.85,-0.66 -1.705,-0.66 -2.8875,-1.925 -1.1825,-1.2925 -1.815,-3.135 -0.6325,-1.8425 -0.6325,-4.235 0,-2.3925 0.715,-4.235 0.7425,-1.8425 2.0075,-3.1075 1.265,-1.2925 2.97,-1.9525 1.705,-0.66 3.6575,-0.66 1.1825,0 2.145,0.1925 0.9625,0.165 1.6775,0.385 0.715,0.22 1.1825,0.4675 0.4675,0.2475 0.66,0.3575 l -1.0175,2.8325 q -0.66,-0.4125 -1.8975,-0.77 -1.21,-0.385 -2.64,-0.385 -1.2375,0 -2.31,0.44 -1.0725,0.4125 -1.87,1.265 -0.77,0.8525 -1.21,2.145 -0.44,1.2925 -0.44,2.9975 0,1.5125 0.33,2.7775 0.3575,1.265 1.0725,2.2 0.715,0.9075 1.815,1.43 1.1,0.495 2.64,0.495 1.8425,0 2.9975,-0.3575 1.155,-0.385 1.7875,-0.715 l 0.935,2.8325 q -0.33,0.22 -0.9075,0.44 -0.55,0.22 -1.32,0.44 -0.77,0.1925 -1.7325,0.3025 -0.9625,0.1375 -2.0625,0.1375 z" />
<path
inkscape:connector-curvature="0"
id="path8873"
style="font-style:normal;font-variant:normal;font-weight:500;font-stretch:normal;font-size:27.5px;font-family:Ubuntu;-inkscape-font-specification:'Ubuntu Medium';text-align:end;text-anchor:end"
d="m 5943.1747,2308.676 q 0,1.705 -0.495,3.1075 -0.495,1.4025 -1.4025,2.3925 -0.9075,0.99 -2.2,1.54 -1.265,0.55 -2.805,0.55 -1.54,0 -2.805,-0.55 -1.265,-0.55 -2.1725,-1.54 -0.9075,-0.99 -1.43,-2.3925 -0.495,-1.4025 -0.495,-3.1075 0,-1.705 0.495,-3.08 0.5225,-1.4025 1.43,-2.3925 0.935,-0.99 2.2,-1.5125 1.265,-0.55 2.7775,-0.55 1.5125,0 2.7775,0.55 1.2925,0.5225 2.2,1.5125 0.9075,0.99 1.4025,2.3925 0.5225,1.375 0.5225,3.08 z m -3.41,0 q 0,-2.145 -0.935,-3.3825 -0.9075,-1.265 -2.5575,-1.265 -1.65,0 -2.585,1.265 -0.9075,1.2375 -0.9075,3.3825 0,2.1725 0.9075,3.4375 0.935,1.265 2.585,1.265 1.65,0 2.5575,-1.265 0.935,-1.265 0.935,-3.4375 z" />
<path
inkscape:connector-curvature="0"
id="path8875"
style="font-style:normal;font-variant:normal;font-weight:500;font-stretch:normal;font-size:27.5px;font-family:Ubuntu;-inkscape-font-specification:'Ubuntu Medium';text-align:end;text-anchor:end"
d="m 5954.7977,2308.3185 q 0,-2.255 -0.5775,-3.245 -0.55,-1.0175 -2.09,-1.0175 -0.55,0 -1.21,0.082 -0.66,0.082 -0.99,0.1375 v 11.605 h -3.3275 v -13.915 q 0.9625,-0.275 2.5025,-0.5225 1.5675,-0.2475 3.3,-0.2475 1.485,0 2.42,0.385 0.9625,0.385 1.595,1.0175 0.3025,-0.22 0.77,-0.4675 0.4675,-0.2475 1.045,-0.44 0.5775,-0.22 1.21,-0.3575 0.66,-0.1375 1.32,-0.1375 1.6775,0 2.75,0.495 1.1,0.4675 1.705,1.3475 0.6325,0.8525 0.8525,2.09 0.2475,1.21 0.2475,2.6675 v 8.085 h -3.3275 v -7.5625 q 0,-2.255 -0.55,-3.245 -0.55,-1.0175 -2.1175,-1.0175 -0.7975,0 -1.5125,0.275 -0.715,0.2475 -1.0725,0.495 0.22,0.6875 0.3025,1.4575 0.083,0.77 0.083,1.65 v 7.9475 h -3.3275 v -7.5625 z" />
<path
inkscape:connector-curvature="0"
id="path8877"
style="font-style:normal;font-variant:normal;font-weight:500;font-stretch:normal;font-size:27.5px;font-family:Ubuntu;-inkscape-font-specification:'Ubuntu Medium';text-align:end;text-anchor:end"
d="m 5979.9392,2308.7585 q 0,-2.2275 -1.0175,-3.465 -0.99,-1.2375 -3.2175,-1.2375 -0.4675,0 -0.99,0.055 -0.495,0.028 -0.99,0.165 v 8.2225 q 0.44,0.3025 1.155,0.5775 0.7425,0.2475 1.5675,0.2475 1.815,0 2.64,-1.2375 0.8525,-1.2375 0.8525,-3.3275 z m 3.41,-0.055 q 0,1.65 -0.44,3.025 -0.4125,1.375 -1.21,2.365 -0.7975,0.99 -2.0075,1.54 -1.1825,0.55 -2.695,0.55 -1.0175,0 -1.87,-0.2475 -0.8525,-0.2475 -1.4025,-0.55 v 5.5825 h -3.3275 v -19.0025 q 1.0175,-0.275 2.5025,-0.5225 1.485,-0.2475 3.135,-0.2475 1.705,0 3.0525,0.5225 1.3475,0.5225 2.2825,1.5125 0.9625,0.9625 1.4575,2.365 0.5225,1.375 0.5225,3.1075 z" />
<path
inkscape:connector-curvature="0"
id="path8879"
style="font-style:normal;font-variant:normal;font-weight:500;font-stretch:normal;font-size:27.5px;font-family:Ubuntu;-inkscape-font-specification:'Ubuntu Medium';text-align:end;text-anchor:end"
d="m 5985.981,2308.7585 q 0,-1.8975 0.55,-3.3275 0.5775,-1.43 1.5125,-2.365 0.935,-0.9625 2.145,-1.43 1.21,-0.495 2.475,-0.495 2.97,0 4.62,1.8425 1.6775,1.8425 1.6775,5.5 0,0.275 -0.028,0.6325 0,0.33 -0.028,0.605 h -9.4875 q 0.1375,1.7325 1.21,2.695 1.1,0.935 3.1625,0.935 1.21,0 2.2,-0.22 1.0175,-0.22 1.595,-0.4675 l 0.44,2.7225 q -0.275,0.1375 -0.77,0.3025 -0.4675,0.1375 -1.1,0.2475 -0.605,0.1375 -1.32,0.22 -0.715,0.082 -1.4575,0.082 -1.8975,0 -3.3,-0.55 -1.4025,-0.5775 -2.31,-1.5675 -0.9075,-1.0175 -1.3475,-2.365 -0.44,-1.375 -0.44,-2.9975 z m 9.6525,-1.485 q 0,-0.6875 -0.1925,-1.2925 -0.1925,-0.6325 -0.5775,-1.0725 -0.3575,-0.4675 -0.9075,-0.715 -0.5225,-0.275 -1.265,-0.275 -0.77,0 -1.3475,0.3025 -0.5775,0.275 -0.99,0.7425 -0.385,0.4675 -0.605,1.0725 -0.22,0.605 -0.3025,1.2375 z m 0.5775,-11.66 -4.4825,4.345 -1.65,-1.485 4.0425,-4.8125 z" />
<path
inkscape:connector-curvature="0"
id="path8881"
style="font-style:normal;font-variant:normal;font-weight:500;font-stretch:normal;font-size:27.5px;font-family:Ubuntu;-inkscape-font-specification:'Ubuntu Medium';text-align:end;text-anchor:end"
d="m 6002.2971,2297.7035 3.3275,-0.55 v 4.345 h 5.115 v 2.7775 h -5.115 v 5.8575 q 0,1.7325 0.55,2.475 0.55,0.7425 1.87,0.7425 0.9075,0 1.595,-0.1925 0.715,-0.1925 1.1275,-0.3575 l 0.55,2.64 q -0.5775,0.2475 -1.5125,0.495 -0.935,0.275 -2.2,0.275 -1.54,0 -2.585,-0.4125 -1.0175,-0.4125 -1.6225,-1.1825 -0.605,-0.7975 -0.8525,-1.8975 -0.2475,-1.1275 -0.2475,-2.5575 z" />
<path
inkscape:connector-curvature="0"
id="path8883"
style="font-style:normal;font-variant:normal;font-weight:500;font-stretch:normal;font-size:27.5px;font-family:Ubuntu;-inkscape-font-specification:'Ubuntu Medium';text-align:end;text-anchor:end"
d="m 6012.8902,2308.7585 q 0,-1.8975 0.55,-3.3275 0.5775,-1.43 1.5125,-2.365 0.935,-0.9625 2.145,-1.43 1.21,-0.495 2.475,-0.495 2.97,0 4.62,1.8425 1.6775,1.8425 1.6775,5.5 0,0.275 -0.028,0.6325 0,0.33 -0.028,0.605 h -9.4875 q 0.1375,1.7325 1.21,2.695 1.1,0.935 3.1625,0.935 1.21,0 2.2,-0.22 1.0175,-0.22 1.595,-0.4675 l 0.44,2.7225 q -0.275,0.1375 -0.77,0.3025 -0.4675,0.1375 -1.1,0.2475 -0.605,0.1375 -1.32,0.22 -0.715,0.082 -1.4575,0.082 -1.8975,0 -3.3,-0.55 -1.4025,-0.5775 -2.31,-1.5675 -0.9075,-1.0175 -1.3475,-2.365 -0.44,-1.375 -0.44,-2.9975 z m 9.6525,-1.485 q 0,-0.6875 -0.1925,-1.2925 -0.1925,-0.6325 -0.5775,-1.0725 -0.3575,-0.4675 -0.9075,-0.715 -0.5225,-0.275 -1.265,-0.275 -0.77,0 -1.3475,0.3025 -0.5775,0.275 -0.99,0.7425 -0.385,0.4675 -0.605,1.0725 -0.22,0.605 -0.3025,1.2375 z" />
<path
inkscape:connector-curvature="0"
id="path8885"
style="font-style:normal;font-variant:normal;font-weight:500;font-stretch:normal;font-size:27.5px;font-family:Ubuntu;-inkscape-font-specification:'Ubuntu Medium';text-align:end;text-anchor:end"
d="m 6029.3713,2301.966 q 0.9625,-0.275 2.5025,-0.5225 1.54,-0.2475 3.41,-0.2475 1.76,0 2.9425,0.495 1.1825,0.4675 1.87,1.3475 0.715,0.8525 0.99,2.09 0.3025,1.21 0.3025,2.6675 v 8.085 h -3.3275 v -7.5625 q 0,-1.155 -0.165,-1.9525 -0.1375,-0.825 -0.495,-1.32 -0.33,-0.5225 -0.935,-0.7425 -0.5775,-0.2475 -1.43,-0.2475 -0.6325,0 -1.32,0.082 -0.6875,0.082 -1.0175,0.1375 v 11.605 h -3.3275 v -13.915 z" />
<path
inkscape:connector-curvature="0"
id="path8887"
style="font-style:normal;font-variant:normal;font-weight:500;font-stretch:normal;font-size:27.5px;font-family:Ubuntu;-inkscape-font-specification:'Ubuntu Medium';text-align:end;text-anchor:end"
d="m 6044.6871,2308.7035 q 0,-1.595 0.495,-2.97 0.495,-1.4025 1.4025,-2.42 0.935,-1.0175 2.255,-1.595 1.32,-0.5775 2.97,-0.5775 2.035,0 3.85,0.7425 l -0.715,2.7225 q -0.5775,-0.2475 -1.32,-0.4125 -0.715,-0.165 -1.54,-0.165 -1.9525,0 -2.97,1.2375 -1.0175,1.21 -1.0175,3.4375 0,2.145 0.9625,3.41 0.9625,1.2375 3.245,1.2375 0.8525,0 1.6775,-0.165 0.825,-0.165 1.43,-0.4125 l 0.4675,2.75 q -0.55,0.275 -1.6775,0.495 -1.1,0.22 -2.2825,0.22 -1.8425,0 -3.2175,-0.55 -1.3475,-0.5775 -2.255,-1.5675 -0.88,-1.0175 -1.32,-2.3925 -0.44,-1.4025 -0.44,-3.025 z" />
<path
inkscape:connector-curvature="0"
id="path8889"
style="font-style:normal;font-variant:normal;font-weight:500;font-stretch:normal;font-size:27.5px;font-family:Ubuntu;-inkscape-font-specification:'Ubuntu Medium';text-align:end;text-anchor:end"
d="m 6057.6851,2308.7585 q 0,-1.8975 0.55,-3.3275 0.5775,-1.43 1.5125,-2.365 0.935,-0.9625 2.145,-1.43 1.21,-0.495 2.475,-0.495 2.97,0 4.62,1.8425 1.6775,1.8425 1.6775,5.5 0,0.275 -0.028,0.6325 0,0.33 -0.028,0.605 h -9.4875 q 0.1375,1.7325 1.21,2.695 1.1,0.935 3.1625,0.935 1.21,0 2.2,-0.22 1.0175,-0.22 1.595,-0.4675 l 0.44,2.7225 q -0.275,0.1375 -0.77,0.3025 -0.4675,0.1375 -1.1,0.2475 -0.605,0.1375 -1.32,0.22 -0.715,0.082 -1.4575,0.082 -1.8975,0 -3.3,-0.55 -1.4025,-0.5775 -2.31,-1.5675 -0.9075,-1.0175 -1.3475,-2.365 -0.44,-1.375 -0.44,-2.9975 z m 9.6525,-1.485 q 0,-0.6875 -0.1925,-1.2925 -0.1925,-0.6325 -0.5775,-1.0725 -0.3575,-0.4675 -0.9075,-0.715 -0.5225,-0.275 -1.265,-0.275 -0.77,0 -1.3475,0.3025 -0.5775,0.275 -0.99,0.7425 -0.385,0.4675 -0.605,1.0725 -0.22,0.605 -0.3025,1.2375 z" />
<path
inkscape:connector-curvature="0"
id="path8891"
style="font-style:normal;font-variant:normal;font-weight:500;font-stretch:normal;font-size:27.5px;font-family:Ubuntu;-inkscape-font-specification:'Ubuntu Medium';text-align:end;text-anchor:end"
d="m 5903.8876,2347.2585 v 2.9975 h -12.045 v -19.0575 h 3.465 v 16.06 z" />
<path
inkscape:connector-curvature="0"
id="path8893"
style="font-style:normal;font-variant:normal;font-weight:500;font-stretch:normal;font-size:27.5px;font-family:Ubuntu;-inkscape-font-specification:'Ubuntu Medium';text-align:end;text-anchor:end"
d="m 5919.0796,2343.051 q 0,1.705 -0.495,3.1075 -0.495,1.4025 -1.4025,2.3925 -0.9075,0.99 -2.2,1.54 -1.265,0.55 -2.805,0.55 -1.54,0 -2.805,-0.55 -1.265,-0.55 -2.1725,-1.54 -0.9075,-0.99 -1.43,-2.3925 -0.495,-1.4025 -0.495,-3.1075 0,-1.705 0.495,-3.08 0.5225,-1.4025 1.43,-2.3925 0.935,-0.99 2.2,-1.5125 1.265,-0.55 2.7775,-0.55 1.5125,0 2.7775,0.55 1.2925,0.5225 2.2,1.5125 0.9075,0.99 1.4025,2.3925 0.5225,1.375 0.5225,3.08 z m -3.41,0 q 0,-2.145 -0.935,-3.3825 -0.9075,-1.265 -2.5575,-1.265 -1.65,0 -2.585,1.265 -0.9075,1.2375 -0.9075,3.3825 0,2.1725 0.9075,3.4375 0.935,1.265 2.585,1.265 1.65,0 2.5575,-1.265 0.935,-1.265 0.935,-3.4375 z" />
<path
inkscape:connector-curvature="0"
id="path8895"
style="font-style:normal;font-variant:normal;font-weight:500;font-stretch:normal;font-size:27.5px;font-family:Ubuntu;-inkscape-font-specification:'Ubuntu Medium';text-align:end;text-anchor:end"
d="m 5925.1201,2342.6935 q 0,2.1175 0.9075,3.1075 0.935,0.9625 2.3925,0.9625 0.7975,0 1.485,-0.22 0.715,-0.22 1.155,-0.5225 v -7.4525 q -0.3575,-0.082 -0.88,-0.1375 -0.5225,-0.082 -1.32,-0.082 -1.815,0 -2.7775,1.21 -0.9625,1.1825 -0.9625,3.135 z m 9.2675,6.105 q 0,3.4375 -1.76,5.0325 -1.7325,1.595 -5.335,1.595 -1.32,0 -2.585,-0.22 -1.2375,-0.22 -2.255,-0.5775 l 0.605,-2.8325 q 0.8525,0.3575 1.925,0.5775 1.1,0.22 2.365,0.22 2.0075,0 2.86,-0.825 0.8525,-0.825 0.8525,-2.4475 v -0.55 q -0.495,0.2475 -1.32,0.495 -0.7975,0.2475 -1.8425,0.2475 -1.375,0 -2.53,-0.44 -1.1275,-0.44 -1.9525,-1.2925 -0.7975,-0.8525 -1.265,-2.1175 -0.44,-1.2925 -0.44,-2.97 0,-1.5675 0.4675,-2.8875 0.495,-1.32 1.4025,-2.255 0.935,-0.935 2.255,-1.4575 1.32,-0.5225 2.9975,-0.5225 1.6225,0 3.08,0.2475 1.4575,0.2475 2.475,0.5225 z" />
<path
inkscape:connector-curvature="0"
id="path8897"
style="font-style:normal;font-variant:normal;font-weight:500;font-stretch:normal;font-size:27.5px;font-family:Ubuntu;-inkscape-font-specification:'Ubuntu Medium';text-align:end;text-anchor:end"
d="m 5941.9759,2350.256 h -3.3275 v -14.3825 h 3.3275 z m 0.3575,-18.59 q 0,0.935 -0.605,1.485 -0.605,0.55 -1.43,0.55 -0.8525,0 -1.4575,-0.55 -0.605,-0.55 -0.605,-1.485 0,-0.9625 0.605,-1.5125 0.605,-0.55 1.4575,-0.55 0.825,0 1.43,0.55 0.605,0.55 0.605,1.5125 z" />
<path
inkscape:connector-curvature="0"
id="path8899"
style="font-style:normal;font-variant:normal;font-weight:500;font-stretch:normal;font-size:27.5px;font-family:Ubuntu;-inkscape-font-specification:'Ubuntu Medium';text-align:end;text-anchor:end"
d="m 5945.3967,2343.0785 q 0,-1.595 0.495,-2.97 0.495,-1.4025 1.4025,-2.42 0.935,-1.0175 2.255,-1.595 1.32,-0.5775 2.97,-0.5775 2.035,0 3.85,0.7425 l -0.715,2.7225 q -0.5775,-0.2475 -1.32,-0.4125 -0.715,-0.165 -1.54,-0.165 -1.9525,0 -2.97,1.2375 -1.0175,1.21 -1.0175,3.4375 0,2.145 0.9625,3.41 0.9625,1.2375 3.245,1.2375 0.8525,0 1.6775,-0.165 0.825,-0.165 1.43,-0.4125 l 0.4675,2.75 q -0.55,0.275 -1.6775,0.495 -1.1,0.22 -2.2825,0.22 -1.8425,0 -3.2175,-0.55 -1.3475,-0.5775 -2.255,-1.5675 -0.88,-1.0175 -1.32,-2.3925 -0.44,-1.4025 -0.44,-3.025 z" />
<path
inkscape:connector-curvature="0"
id="path8901"
style="font-style:normal;font-variant:normal;font-weight:500;font-stretch:normal;font-size:27.5px;font-family:Ubuntu;-inkscape-font-specification:'Ubuntu Medium';text-align:end;text-anchor:end"
d="m 5962.5472,2350.256 h -3.3275 v -14.3825 h 3.3275 z m 0.3575,-18.59 q 0,0.935 -0.605,1.485 -0.605,0.55 -1.43,0.55 -0.8525,0 -1.4575,-0.55 -0.605,-0.55 -0.605,-1.485 0,-0.9625 0.605,-1.5125 0.605,-0.55 1.4575,-0.55 0.825,0 1.43,0.55 0.605,0.55 0.605,1.5125 z" />
<path
inkscape:connector-curvature="0"
id="path8903"
style="font-style:normal;font-variant:normal;font-weight:500;font-stretch:normal;font-size:27.5px;font-family:Ubuntu;-inkscape-font-specification:'Ubuntu Medium';text-align:end;text-anchor:end"
d="m 5965.9679,2343.1335 q 0,-1.8975 0.55,-3.3275 0.5775,-1.43 1.5125,-2.365 0.935,-0.9625 2.145,-1.43 1.21,-0.495 2.475,-0.495 2.97,0 4.62,1.8425 1.6775,1.8425 1.6775,5.5 0,0.275 -0.028,0.6325 0,0.33 -0.028,0.605 h -9.4875 q 0.1375,1.7325 1.21,2.695 1.1,0.935 3.1625,0.935 1.21,0 2.2,-0.22 1.0175,-0.22 1.595,-0.4675 l 0.44,2.7225 q -0.275,0.1375 -0.77,0.3025 -0.4675,0.1375 -1.1,0.2475 -0.605,0.1375 -1.32,0.22 -0.715,0.082 -1.4575,0.082 -1.8975,0 -3.3,-0.55 -1.4025,-0.5775 -2.31,-1.5675 -0.9075,-1.0175 -1.3475,-2.365 -0.44,-1.375 -0.44,-2.9975 z m 9.6525,-1.485 q 0,-0.6875 -0.1925,-1.2925 -0.1925,-0.6325 -0.5775,-1.0725 -0.3575,-0.4675 -0.9075,-0.715 -0.5225,-0.275 -1.265,-0.275 -0.77,0 -1.3475,0.3025 -0.5775,0.275 -0.99,0.7425 -0.385,0.4675 -0.605,1.0725 -0.22,0.605 -0.3025,1.2375 z" />
<path
inkscape:connector-curvature="0"
id="path8905"
style="font-style:normal;font-variant:normal;font-weight:500;font-stretch:normal;font-size:27.5px;font-family:Ubuntu;-inkscape-font-specification:'Ubuntu Medium';text-align:end;text-anchor:end"
d="m 5987.454,2350.531 q -1.485,-0.028 -2.475,-0.33 -0.9625,-0.3025 -1.54,-0.8525 -0.5775,-0.5775 -0.825,-1.4025 -0.22,-0.8525 -0.22,-1.925 v -16.555 l 3.3275,-0.55 v 16.4725 q 0,0.605 0.082,1.0175 0.11,0.4125 0.3575,0.715 0.2475,0.275 0.66,0.44 0.44,0.1375 1.1,0.22 l -0.4675,2.75 z" />
<path
inkscape:connector-curvature="0"
id="path8907"
style="font-style:normal;font-variant:normal;font-weight:500;font-stretch:normal;font-size:27.5px;font-family:Ubuntu;-inkscape-font-specification:'Ubuntu Medium';text-align:end;text-anchor:end"
d="m 6021.6857,2347.2585 v 2.9975 h -12.045 v -19.0575 h 3.465 v 16.06 z" />
<path
inkscape:connector-curvature="0"
id="path8909"
style="font-style:normal;font-variant:normal;font-weight:500;font-stretch:normal;font-size:27.5px;font-family:Ubuntu;-inkscape-font-specification:'Ubuntu Medium';text-align:end;text-anchor:end"
d="m 6027.4938,2350.256 h -3.3275 v -14.3825 h 3.3275 z m 0.3575,-18.59 q 0,0.935 -0.605,1.485 -0.605,0.55 -1.43,0.55 -0.8525,0 -1.4575,-0.55 -0.605,-0.55 -0.605,-1.485 0,-0.9625 0.605,-1.5125 0.605,-0.55 1.4575,-0.55 0.825,0 1.43,0.55 0.605,0.55 0.605,1.5125 z" />
<path
inkscape:connector-curvature="0"
id="path8911"
style="font-style:normal;font-variant:normal;font-weight:500;font-stretch:normal;font-size:27.5px;font-family:Ubuntu;-inkscape-font-specification:'Ubuntu Medium';text-align:end;text-anchor:end"
d="m 6041.2545,2343.0235 q 0,-2.1175 -0.8525,-3.355 -0.825,-1.2375 -2.64,-1.2375 -0.825,0 -1.5675,0.2475 -0.715,0.2475 -1.155,0.55 v 8.2775 q 0.3575,0.082 0.9075,0.165 0.5775,0.055 1.375,0.055 1.8425,0 2.8875,-1.2375 1.045,-1.265 1.045,-3.465 z m 3.41,0.055 q 0,1.7325 -0.5225,3.135 -0.495,1.375 -1.4575,2.365 -0.935,0.99 -2.2825,1.5125 -1.3475,0.5225 -3.0525,0.5225 -1.65,0 -3.1625,-0.2475 -1.485,-0.2475 -2.475,-0.55 v -20.35 l 3.3275,-0.55 v 7.4525 q 0.5775,-0.3025 1.4025,-0.55 0.8525,-0.2475 1.87,-0.2475 1.5125,0 2.695,0.55 1.21,0.5225 2.0075,1.5125 0.7975,0.99 1.21,2.3925 0.44,1.375 0.44,3.0525 z" />
<path
inkscape:connector-curvature="0"
id="path8913"
style="font-style:normal;font-variant:normal;font-weight:500;font-stretch:normal;font-size:27.5px;font-family:Ubuntu;-inkscape-font-specification:'Ubuntu Medium';text-align:end;text-anchor:end"
d="m 6056.2889,2338.871 q -0.4125,-0.1375 -1.155,-0.275 -0.715,-0.165 -1.6775,-0.165 -0.55,0 -1.1825,0.11 -0.605,0.11 -0.8525,0.1925 v 11.5225 h -3.3275 v -13.695 q 0.9625,-0.3575 2.3925,-0.66 1.4575,-0.33 3.2175,-0.33 0.33,0 0.77,0.055 0.44,0.027 0.88,0.11 0.44,0.055 0.8525,0.165 0.4125,0.082 0.66,0.165 z" />
<path
inkscape:connector-curvature="0"
id="path8915"
style="font-style:normal;font-variant:normal;font-weight:500;font-stretch:normal;font-size:27.5px;font-family:Ubuntu;-inkscape-font-specification:'Ubuntu Medium';text-align:end;text-anchor:end"
d="m 6058.3608,2343.1335 q 0,-1.8975 0.55,-3.3275 0.5775,-1.43 1.5125,-2.365 0.935,-0.9625 2.145,-1.43 1.21,-0.495 2.475,-0.495 2.97,0 4.62,1.8425 1.6775,1.8425 1.6775,5.5 0,0.275 -0.028,0.6325 0,0.33 -0.028,0.605 h -9.4875 q 0.1375,1.7325 1.21,2.695 1.1,0.935 3.1625,0.935 1.21,0 2.2,-0.22 1.0175,-0.22 1.595,-0.4675 l 0.44,2.7225 q -0.275,0.1375 -0.77,0.3025 -0.4675,0.1375 -1.1,0.2475 -0.605,0.1375 -1.32,0.22 -0.715,0.082 -1.4575,0.082 -1.8975,0 -3.3,-0.55 -1.4025,-0.5775 -2.31,-1.5675 -0.9075,-1.0175 -1.3475,-2.365 -0.44,-1.375 -0.44,-2.9975 z m 9.6525,-1.485 q 0,-0.6875 -0.1925,-1.2925 -0.1925,-0.6325 -0.5775,-1.0725 -0.3575,-0.4675 -0.9075,-0.715 -0.5225,-0.275 -1.265,-0.275 -0.77,0 -1.3475,0.3025 -0.5775,0.275 -0.99,0.7425 -0.385,0.4675 -0.605,1.0725 -0.22,0.605 -0.3025,1.2375 z" />
<g
transform="matrix(0.68174389,0,0,0.68174389,2141.0659,772.88352)"
id="text6302"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:40px;line-height:125%;font-family:Ubuntu;-inkscape-font-specification:Ubuntu;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:#000000;stroke-width:0.99968249;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1">
<path
style="stroke:#000000;stroke-width:0.99968249;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
inkscape:connector-curvature="0"
id="path6307"
d="m 5774.5893,2260.6745 q 2.28,0 3.36,-0.6 1.12,-0.6 1.12,-1.92 0,-1.36 -1.08,-2.16 -1.08,-0.8 -3.56,-1.8 -1.2,-0.48 -2.32,-0.96 -1.08,-0.52 -1.88,-1.2 -0.8,-0.68 -1.28,-1.64 -0.48,-0.96 -0.48,-2.36 0,-2.76 2.04,-4.36 2.04,-1.64 5.56,-1.64 0.88,0 1.76,0.12 0.88,0.08 1.64,0.24 0.76,0.12 1.32,0.28 0.6,0.16 0.92,0.28 l -0.68,3.2 q -0.6,-0.32 -1.88,-0.64 -1.28,-0.36 -3.08,-0.36 -1.56,0 -2.72,0.64 -1.16,0.6 -1.16,1.92 0,0.68 0.24,1.2 0.28,0.52 0.8,0.96 0.56,0.4 1.36,0.76 0.8,0.36 1.92,0.76 1.48,0.56 2.64,1.12 1.16,0.52 1.96,1.24 0.84,0.72 1.28,1.76 0.44,1 0.44,2.48 0,2.88 -2.16,4.36 -2.12,1.48 -6.08,1.48 -2.76,0 -4.32,-0.48 -1.56,-0.44 -2.12,-0.68 l 0.68,-3.2 q 0.64,0.24 2.04,0.72 1.4,0.48 3.72,0.48 z" />
</g>
<g
transform="matrix(0.68174389,0,0,0.68174389,2057.4567,807.42681)"
id="text6302-8"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:40px;line-height:125%;font-family:Ubuntu;-inkscape-font-specification:Ubuntu;text-align:end;letter-spacing:0px;word-spacing:0px;text-anchor:end;display:inline;fill:#000000;fill-opacity:1;stroke:#000000;stroke-width:0.99968249;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1">
<path
style="stroke:#000000;stroke-width:0.99968249;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
inkscape:connector-curvature="0"
id="path6307-7"
d="m 5774.5893,2260.6745 q 2.28,0 3.36,-0.6 1.12,-0.6 1.12,-1.92 0,-1.36 -1.08,-2.16 -1.08,-0.8 -3.56,-1.8 -1.2,-0.48 -2.32,-0.96 -1.08,-0.52 -1.88,-1.2 -0.8,-0.68 -1.28,-1.64 -0.48,-0.96 -0.48,-2.36 0,-2.76 2.04,-4.36 2.04,-1.64 5.56,-1.64 0.88,0 1.76,0.12 0.88,0.08 1.64,0.24 0.76,0.12 1.32,0.28 0.6,0.16 0.92,0.28 l -0.68,3.2 q -0.6,-0.32 -1.88,-0.64 -1.28,-0.36 -3.08,-0.36 -1.56,0 -2.72,0.64 -1.16,0.6 -1.16,1.92 0,0.68 0.24,1.2 0.28,0.52 0.8,0.96 0.56,0.4 1.36,0.76 0.8,0.36 1.92,0.76 1.48,0.56 2.64,1.12 1.16,0.52 1.96,1.24 0.84,0.72 1.28,1.76 0.44,1 0.44,2.48 0,2.88 -2.16,4.36 -2.12,1.48 -6.08,1.48 -2.76,0 -4.32,-0.48 -1.56,-0.44 -2.12,-0.68 l 0.68,-3.2 q 0.64,0.24 2.04,0.72 1.4,0.48 3.72,0.48 z" />
</g>
<g
transform="matrix(0.67616411,0,0,0.67616411,2173.1135,820.26245)"
id="text6302-8-5"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:40px;line-height:125%;font-family:Ubuntu;-inkscape-font-specification:Ubuntu;text-align:end;letter-spacing:0px;word-spacing:0px;text-anchor:end;display:inline;fill:#000000;fill-opacity:1;stroke:#000000;stroke-width:0.99968249;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1">
<path
style="stroke:#000000;stroke-width:0.99968249;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
inkscape:connector-curvature="0"
id="path6307-7-4"
d="m 5774.5893,2260.6745 q 2.28,0 3.36,-0.6 1.12,-0.6 1.12,-1.92 0,-1.36 -1.08,-2.16 -1.08,-0.8 -3.56,-1.8 -1.2,-0.48 -2.32,-0.96 -1.08,-0.52 -1.88,-1.2 -0.8,-0.68 -1.28,-1.64 -0.48,-0.96 -0.48,-2.36 0,-2.76 2.04,-4.36 2.04,-1.64 5.56,-1.64 0.88,0 1.76,0.12 0.88,0.08 1.64,0.24 0.76,0.12 1.32,0.28 0.6,0.16 0.92,0.28 l -0.68,3.2 q -0.6,-0.32 -1.88,-0.64 -1.28,-0.36 -3.08,-0.36 -1.56,0 -2.72,0.64 -1.16,0.6 -1.16,1.92 0,0.68 0.24,1.2 0.28,0.52 0.8,0.96 0.56,0.4 1.36,0.76 0.8,0.36 1.92,0.76 1.48,0.56 2.64,1.12 1.16,0.52 1.96,1.24 0.84,0.72 1.28,1.76 0.44,1 0.44,2.48 0,2.88 -2.16,4.36 -2.12,1.48 -6.08,1.48 -2.76,0 -4.32,-0.48 -1.56,-0.44 -2.12,-0.68 l 0.68,-3.2 q 0.64,0.24 2.04,0.72 1.4,0.48 3.72,0.48 z" />
</g>
</g>
</g>
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 46 KiB

View File

@ -0,0 +1,318 @@
%!PS-Adobe-3.0 EPSF-3.0
%%BoundingBox: 262 316 372 461
%................................
%%Creator: GNU Ghostscript 510 (epswrite)
%%CreationDate: 1999/12/10 21:20:34
%%DocumentData: Clean7Bit
%%LanguageLevel: 2
%%EndComments
%%BeginProlog
% This copyright applies to everything between here and the %%EndProlog:
% Copyright (C) 1997 Aladdin Enterprises, Menlo Park, CA. All rights reserved.
%%BeginResource: procset GS_pswrite_ProcSet
/GS_pswrite_ProcSet 40 dict dup begin
/!{bind def}bind def/X{load def}!
/rg/setrgbcolor X/g/setgray X/w/setlinewidth X/J/setlinecap X
/j/setlinejoin X/M/setmiterlimit X/d/setdash X/i/setflat X
/m/moveto X/l/lineto X/c/curveto X/h/closepath X
/lx{0 rlineto}!/ly{0 exch rlineto}!/v{currentpoint 6 2 roll c}!/y{2 copy c}!
/re{4 -2 roll m exch dup lx exch ly neg lx h}!
/q/gsave X/Q/grestore X/f/fill X/f*/eofill X/S/stroke X/rf{re f}!
/Y{initclip clip newpath}!/Y*{initclip eoclip newpath}!/rY{re Y}!
/@/currentfile X/|{string readstring pop}!
/Ix{[1 0 0 1 9 -1 roll neg 9 -1 roll neg]exch}!
/It{true exch Ix imagemask}!/If{false exch Ix imagemask}!/I{exch Ix image}!
/Ic{Ix false 1 colorimage}!
/@85{@/ASCII85Decode filter}!
end def
%%EndResource
%%EndProlog
%%Page: 1 1
%%BeginPageSetup
save GS_pswrite_ProcSet begin 0.1 0.1 scale
%%EndPageSetup
0.843137 0.027451 0.317647 rg
0 0 m
6120 0 l
6120 7920 l
0 7920 l
Y
3233.33 4125.86 m
3218.39 4125.66 3236.15 4118.18 3255.66 4115.17 c
3261.06 4119.39 3265.94 4123.63 3270.29 4127.77 c
3258.15 4124.8 3245.79 4124.73 3233.33 4125.86 c
f
3313.52 4145.85 m
3322.43 4158.14 3328.92 4171.58 3331.2 4185.48 c
3329.19 4175.58 3323.84 4167.03 3318.76 4157.99 c
3290.83 4140.4 3316.12 4168.43 3318.74 4179.1 c
3288.72 4141.27 3314.61 4156.42 3313.52 4145.85 c
f
3343.14 4222.89 m
3344.95 4249.8 3337.84 4241.28 3335.46 4231.03 c
3338.23 4229.57 3340.44 4212.05 3343.14 4222.89 c
f
3176.66 4590.68 m
3184.64 4589.26 3193.91 4588.16 3192.58 4586.25 c
3201.32 4588.18 3203.3 4589.92 3176.66 4590.68 c
f
3192.58 4586.25 m
3186.96 4585.08 l
3192.21 4585.56 l
3192.58 4586.25 l
f
3441.26 4212.69 m
3442.16 4188.53 3434.21 4176.79 3427.02 4156.03 c
3414.1 4149.6 l
3403.54 4129.06 3415.15 4136.56 3407.57 4120.23 c
3391.05 4105.56 3357.51 4074.34 3346.77 4071.48 c
3338.92 4071.65 3352.08 4080.74 3353.8 4084.29 c
3331.71 4069.13 3336.06 4061.53 3302.29 4052.3 c
3301.3 4054.51 l
3218 4015.31 3102.28 4092.98 3103.8 4198.94 c
3102.92 4192.22 3101.27 4193.9 3099.43 4191.2 c
3095.13 4245.71 3124.61 4300.46 3174.33 4322.85 c
3222.96 4346.91 3279.97 4337.05 3314.79 4304.56 c
3295.66 4329.62 3257.58 4356.19 3212.45 4353.73 c
3168.24 4353.01 3126.88 4324.92 3113.07 4294.41 c
3090.43 4280.16 3087.79 4239.45 3077.93 4231.99 c
3064.64 4134.39 3102.9 4092.24 3167.63 4042.63 c
3177.79 4035.77 3170.49 4034.72 3171.85 4029.5 c
3150.35 4039.56 3130.67 4054.76 3114.47 4073.37 c
3123.07 4060.8 3132.34 4048.58 3144.33 4038.98 c
3124.04 4045.83 3096.95 4088.11 3089.06 4089.83 c
3124.01 4027.25 3230.84 3980.08 3286.81 4003.49 c
3260.92 4002.53 3228.03 4002.96 3198.94 4013.71 c
3186.7 4020 3170.1 4033.01 3173.07 4035.44 c
3249.42 4006.93 3328.29 4013.86 3394.36 4066.81 c
3411.16 4079.91 3429.52 4102.18 3434.83 4102.48 c
3426.85 4090.46 3436.2 4096.7 3430.07 4086.09 c
3446.8 4113.1 3422.78 4097.09 3447.37 4132.73 c
3456.46 4120.23 l
3453.07 4142.67 3484.31 4169.89 3481.12 4205.35 c
3488.29 4216.19 3489.11 4193.67 3481.51 4168.73 c
3492.06 4196.4 3484.31 4200.85 3487 4223.69 c
3489.92 4216.01 3493.78 4207.86 3495.75 4199.75 c
3488.88 4226.5 3502.78 4244.78 3506.24 4260.33 c
3502.82 4261.83 3495.64 4248.51 3493.98 4280.09 c
3494.23 4293.81 3497.8 4287.28 3499.17 4290.66 c
3496.49 4292.21 3489.42 4302.73 3485.13 4322.9 c
3488.22 4327.65 3493.45 4310.61 3497.69 4309.92 c
3494.96 4325.95 3490.26 4338.18 3490.07 4350.49 c
3477.67 4376.39 3485.67 4347.03 3475.64 4361.61 c
3462.44 4402.75 3486.57 4371.16 3488.21 4389.84 c
3508.19 4360.89 3519.59 4315.99 3524.83 4297.4 c
3520.83 4320.07 3514.39 4342.04 3506.49 4363.29 c
3512.59 4360.72 3496.72 4409.92 3514.4 4377.34 c
3495.52 4446.79 3433.62 4511.69 3376.67 4542.13 c
3383.62 4535.76 3392.42 4527.76 3389.27 4526.5 c
3360.94 4543.35 3365.92 4544.68 3361.85 4551.8 c
3338.8 4561.19 3337.27 4551.03 3322 4551.78 c
3278.52 4574.86 3270.13 4572.4 3230.1 4586.85 c
3231.91 4578.33 l
3203.1 4587.93 3198.34 4574.71 3167.21 4578.31 c
3165.32 4579.78 3177.19 4583.67 3186.96 4585.08 c
3159.11 4581.4 3160.41 4590.58 3133.15 4584.07 c
3139.86 4588.78 3146.98 4591.91 3154.14 4595.91 c
3131.43 4594.53 3099.9 4582.69 3109.63 4593.47 c
3072.58 4576.93 3006.77 4553.72 2969.84 4519.09 c
2968.68 4526.85 l
2951.76 4506.54 2894.89 4466.19 2890.36 4439.86 c
2885.83 4438.81 l
2877.04 4423.9 2871.33 4407.01 2864.35 4391.68 c
2852.84 4372.05 2847.47 4384.12 2849.11 4381.04 c
2826.46 4335.12 2815.19 4296.54 2805.48 4264.88 c
2812.4 4254.53 2805.65 4202.56 2808.26 4160.97 c
2796.9 3955.53 2952.44 3756.07 3122.46 3710.04 c
3147.38 3701.11 3184.43 3701.44 3215.96 3700.55 c
3178.77 3711.19 3173.97 3706.17 3137.73 3718.81 c
3111.6 3731.13 3105.88 3745.18 3087.36 3761.25 c
3094.69 3748.3 l
3058.39 3761.15 3073.58 3764.2 3044.04 3773.55 c
3051.87 3783.77 l
3040.1 3784.67 3020.7 3803.59 3015.4 3814.1 c
3002.52 3813.59 l
2987.06 3832.66 2978.81 3846.43 2979.42 3857.09 c
2975.26 3849.67 l
2970.55 3857.75 2918.35 3921.25 2945.43 3906.47 c
2940.4 3911.05 2933.71 3913.94 2926.46 3927.13 c
2931.97 3933.42 l
2918.96 3950.19 2907.99 3971.68 2908.83 3978.84 c
2915.78 3969.46 2920.6 3967.7 2925.38 3966.09 c
2892.47 4047.73 2890.62 3970.58 2865.71 4049.19 c
2870.97 4049.61 l
2866.94 4055.72 2864.47 4062.31 2861.23 4068.8 c
2863.53 4091.65 l
2839.85 4119.01 2856.91 4208.1 2860.34 4256.95 c
2862.69 4276.81 2880.11 4297.96 2893.34 4331.13 c
2885.28 4332.51 l
2900.7 4359.39 2973.3 4440.5 3006.94 4436.34 c
3023.23 4456.8 3003.7 4436.42 3000.51 4441.56 c
3036.3 4478.59 3047.55 4467.72 3071.7 4474.39 c
3097.73 4489.84 3049.35 4468.35 3061.69 4480.28 c
3106.72 4491.77 3093.59 4506.42 3152.32 4512.25 c
3158.52 4508.73 3137.95 4506.81 3132.79 4502.24 c
3170.29 4520.6 3251.48 4516.41 3304.23 4492.06 c
3365.41 4463.45 3434.17 4378.92 3436.89 4299.39 c
3439.97 4298.56 l
3438.41 4266.94 3444.81 4230.37 3433.71 4196.79 c
3441.26 4212.69 l
f
3070.23 4105.36 m
3068.12 4094.89 l
3077.95 4081.54 3085.75 4067.08 3098.28 4056.68 c
3089.26 4074.27 3082.57 4081.54 3070.23 4105.36 c
f
3093.44 4106.26 m
3088.24 4112.02 3085.18 4118.94 3081.72 4125.82 c
3085.02 4113.71 3091.78 4103.3 3098.05 4092.7 c
3093.44 4106.26 l
f
3504.27 4195.56 m
3502.08 4190.04 l
3498.06 4161.46 3489.36 4133.18 3476.03 4106.95 c
3490.75 4134.62 3500.25 4164.89 3504.27 4195.56 c
f
3179.63 4597.85 m
3189.73 4601.54 3204.45 4599.88 3215.19 4602.31 c
3201.21 4601.14 3187.3 4600.44 3173.57 4598.69 c
3179.63 4597.85 l
f
2824.92 4409.23 m
2827.25 4387.69 2808.72 4379.32 2829.02 4393.54 c
2839.92 4418.08 2824.78 4400.31 2824.92 4409.23 c
f
2801.04 4309.49 m
2805.73 4323.86 2806.57 4332.48 2808.36 4340.81 c
2795.43 4324.27 2802.4 4320.74 2801.04 4309.49 c
f
0 g
2758.02 3347.25 m
2757.57 3346.78 2757.57 3272.19 2756.64 3252.72 c
2755.72 3236.97 2754.32 3203.15 2720.96 3203.15 c
2686.67 3203.15 2678.33 3242.54 2675.55 3259.67 c
2672.31 3278.67 2672.31 3294.43 2672.31 3301.37 c
2672.31 3323.61 2673.7 3385.72 2726.06 3385.72 c
2741.82 3385.72 2750.62 3381.07 2757.57 3377.38 c
2758.02 3347.25 l
h
2623.65 3292.56 m
2623.65 3161.9 2693.16 3161.9 2703.35 3161.9 c
2732.08 3161.9 2750.62 3177.66 2758.49 3204.98 c
2759.42 3163.75 l
2768.23 3164.22 2777.03 3165.14 2791.39 3165.14 c
2796.49 3165.14 2800.65 3165.14 2804.37 3164.67 c
2808.08 3164.67 2811.78 3164.22 2815.95 3163.75 c
2808.54 3178.57 2802.98 3211.93 2802.98 3284.24 c
2802.98 3354.67 2802.98 3473.75 2809 3509.9 c
2792.33 3502.01 2777.95 3496.91 2746.44 3494.14 c
2758.95 3480.7 2758.95 3473.75 2758.95 3412.6 c
2750.16 3415.37 2739.03 3418.61 2720.03 3418.61 c
2637.09 3418.61 2623.65 3346.33 2623.65 3292.56 c
f
2874.95 3316.21 m
2875.42 3354.67 2883.3 3388.97 2916.19 3388.97 c
2952.34 3388.97 2955.1 3349.12 2954.18 3316.21 c
2874.95 3316.21 l
h
3000.05 3311.56 m
3000.05 3365.78 2989.4 3419.08 2920.82 3419.08 c
2826.3 3419.08 2826.3 3314.35 2826.3 3292.11 c
2826.3 3198.05 2868.46 3160.98 2939.36 3160.98 c
2970.85 3160.98 2986.16 3165.6 2994.5 3167.93 c
2994.04 3184.61 2996.35 3195.27 2999.15 3209.63 c
2989.4 3203.59 2976.89 3195.72 2949.09 3195.72 c
2876.8 3195.72 2875.87 3261.54 2875.87 3284.24 c
2999.15 3284.24 l
3000.05 3311.56 l
f
3150.8 3291.64 m
3150.8 3248.55 3142.93 3190.62 3089.18 3190.62 c
3081.76 3190.62 3072.5 3192.03 3066.48 3193.42 c
3065.55 3210.1 3065.55 3238.83 3065.55 3272.19 c
3065.55 3312.05 3069.71 3332.87 3072.97 3343.09 c
3082.69 3375.98 3104.47 3376.44 3108.63 3376.44 c
3143.85 3376.44 3150.8 3327.77 3150.8 3291.64 c
h
3017.82 3241.13 m
3017.82 3206.84 3017.82 3187.38 3012.26 3172.56 c
3031.26 3165.14 3054.88 3160.98 3083.16 3160.98 c
3101.23 3160.98 3153.59 3160.98 3181.85 3218.89 c
3195.29 3245.76 3199.92 3281.91 3199.92 3309.26 c
3199.92 3325.94 3198.07 3362.54 3184.63 3385.72 c
3171.66 3407.48 3150.8 3418.61 3128.57 3418.61 c
3084.08 3418.61 3071.11 3381.54 3064.17 3362.54 c
3064.17 3386.17 3064.62 3468.65 3068.32 3510.82 c
3038.21 3496.91 3019.66 3494.61 2999.75 3492.75 c
3017.82 3485.35 3017.82 3454.75 3017.82 3355.12 c
3017.82 3241.13 l
f
3288.99 3163.75 m
3279.73 3165.14 3273.22 3166.07 3259.78 3166.07 c
3244.98 3166.07 3234.77 3165.14 3224.12 3163.75 c
3228.75 3172.56 3230.6 3176.74 3231.99 3206.84 c
3233.85 3248.09 3234.32 3358.38 3231.07 3381.54 c
3228.75 3399.16 3224.59 3401.93 3218.1 3406.56 c
3256.09 3410.27 3266.76 3413.05 3284.35 3421.39 c
3280.65 3401.02 3280.18 3390.8 3280.18 3359.77 c
3279.26 3199.88 3278.79 3182.75 3288.99 3163.75 c
f
3437.37 3294.9 m
3436.46 3265.7 3435.99 3245.31 3428.1 3229.1 c
3418.37 3208.24 3402.16 3202.23 3390.11 3202.23 c
3362.29 3202.23 3356.28 3225.39 3356.28 3248.09 c
3356.28 3291.64 3395.21 3294.9 3412.8 3294.9 c
3437.37 3294.9 l
h
3309.93 3237.89 m
3309.93 3208.69 3318.74 3179.51 3344.7 3166.99 c
3356.28 3161.9 3367.86 3161.9 3371.57 3161.9 c
3414.21 3161.9 3428.56 3193.42 3437.37 3212.87 c
3436.9 3192.48 3437.37 3179.98 3438.76 3163.75 c
3447.1 3164.22 3455.44 3165.14 3469.35 3165.14 c
3477.22 3165.14 3484.64 3164.22 3492.51 3163.75 c
3487.41 3171.62 3484.64 3176.27 3483.23 3194.34 c
3482.31 3211.93 3482.31 3229.55 3482.31 3254.1 c
3482.78 3348.63 l
3482.78 3383.87 3473.51 3418.61 3403.99 3418.61 c
3358.14 3418.61 3331.26 3404.71 3317.82 3397.75 c
3323.39 3387.56 3328.02 3378.77 3332.18 3358.83 c
3350.26 3374.59 3373.9 3382.93 3397.98 3382.93 c
3436.46 3382.93 3436.46 3357.44 3436.46 3321.31 c
3427.65 3321.76 3420.22 3322.68 3407.71 3322.68 c
3348.86 3322.68 3309.93 3300 3309.93 3237.89 c
f
3704.27 3209.63 m
3704.74 3193.87 3704.74 3177.19 3711.22 3163.75 c
3701.02 3164.67 3694.99 3166.07 3676.01 3166.07 c
3664.87 3166.07 3658.86 3165.14 3650.05 3163.75 c
3651.89 3169.77 3652.84 3172.09 3653.76 3179.98 c
3655.15 3190.62 3656.08 3226.31 3656.08 3238.83 c
3656.08 3288.87 l
3656.08 3310.65 3656.08 3342.17 3654.68 3353.28 c
3653.76 3361.15 3651.46 3382.46 3624.56 3382.46 c
3598.15 3382.46 3589.36 3363.01 3586.1 3347.25 c
3582.41 3331.03 3582.41 3313.42 3582.41 3244.84 c
3582.86 3185.53 3582.86 3179.98 3587.49 3163.75 c
3579.62 3164.67 3569.89 3165.6 3555.99 3165.6 c
3544.85 3165.6 3537.45 3165.14 3528.19 3163.75 c
3531.44 3171.17 3533.29 3174.88 3534.21 3200.82 c
3535.15 3226.31 3537 3351.43 3532.8 3381.07 c
3530.5 3399.16 3525.85 3403.32 3520.77 3407.95 c
3558.31 3409.8 3570.34 3415.84 3581.94 3421.85 c
3581.94 3372.73 l
3587.49 3387.11 3599.07 3419.08 3645.42 3419.08 c
3703.35 3419.08 3703.8 3376.91 3704.27 3349.12 c
3704.27 3209.63 l
f
0.843137 0.027451 0.317647 rg
3292.9 3486.97 m
3254.53 3448.61 l
3216.17 3486.97 l
3254.53 3525.33 l
3292.9 3486.97 l
f
end showpage restore
%%PageTrailer
%%Trailer
%%Pages: 1

Binary file not shown.

After

Width:  |  Height:  |  Size: 59 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 18 KiB

View File

@ -0,0 +1,56 @@
Machine learning
=================
Data science (not big data yet)
some links
------------
numpy, scipy, matplotlib... and scikit
https://www.scipy.org/install.html
https://matplotlib.org/
http://scikit-learn.org/stable/
installation
--------------
.. code-block:: python
Python 3.6.5 (default, Apr 1 2018, 05:46:30)
[GCC 7.3.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import sys
>>> print('Python: {}'.format(sys.version))
Python: 3.6.5 (default, Apr 1 2018, 05:46:30)
[GCC 7.3.0]
>>> import scipy
>>> print('scipy: {}'.format(scipy.__version__))
scipy: 0.19.1
>>> import numpy
>>> print('numpy: {}'.format(numpy.__version__))
numpy: 1.13.3
>>> import matplotlib
>>> print('matplotlib: {}'.format(matplotlib.__version__))
matplotlib: 2.1.1
>>> # pandas
...
>>> import pandas
>>> print('pandas: {}'.format(pandas.__version__))
pandas: 0.22.0
>>> # scikit-learn
... import sklearn
>>> print('sklearn: {}'.format(sklearn.__version__))
sklearn
usage
-------
https://machinelearningmastery.com/machine-learning-in-python-step-by-step/

20
algo/algofundoc/Makefile Normal file
View File

@ -0,0 +1,20 @@
# Minimal makefile for Sphinx documentation
#
# You can set these variables from the command line.
SPHINXOPTS =
SPHINXBUILD = sphinx-build
SPHINXPROJ = pyfun
SOURCEDIR = .
BUILDDIR = _build
# Put it first so that "make" without argument is like "make help".
help:
@$(SPHINXBUILD) -M help "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O)
.PHONY: help Makefile
# Catch-all target: route all unknown targets to Sphinx using the new
# "make mode" option. $(O) is meant as a shortcut for $(SPHINXOPTS).
%: Makefile
@$(SPHINXBUILD) -M $@ "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O)

View File

@ -0,0 +1,18 @@
Algo Fun Doc
==============
- install sphinx
- install the nbsphinx extension
nbsphinx is a Sphinx extension that provides a source parser for *.ipynb files. Custom Sphinx directives are used to show Jupyter Notebook code cells (and of course their results) in both HTML and LaTeX output.
Un-evaluated notebooks i.e. notebooks without stored output cells will be automatically executed during the Sphinx build process.
Quick Start::
Install nbsphinx
Edit your conf.py and add 'nbsphinx' to extensions.
Edit your index.rst and add the names of your *.ipynb files to the toctree.
Run Sphinx!

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@ -0,0 +1,4 @@
# Sphinx build info version 1
# This file hashes the configuration used when building these files. When it is not found, a full rebuild will be done.
config: ce4136e2523a6d07c59857a39ef0e4cf
tags: 645f666f9bcd5a90fca523b33c5a78b7

View File

@ -0,0 +1,125 @@
<!doctype html>
<html xmlns="http://www.w3.org/1999/xhtml" lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Machine learning &#8212; algofun documentation</title>
<link rel="stylesheet" href="_static/bizstyle.css" type="text/css" />
<link rel="stylesheet" href="_static/pygments.css" type="text/css" />
<script type="text/javascript">
var DOCUMENTATION_OPTIONS = {
URL_ROOT: './',
VERSION: ' ',
COLLAPSE_INDEX: false,
FILE_SUFFIX: '.html',
HAS_SOURCE: true,
SOURCELINK_SUFFIX: '.txt'
};
</script>
<script type="text/javascript" src="_static/jquery.js"></script>
<script type="text/javascript" src="_static/underscore.js"></script>
<script type="text/javascript" src="_static/doctools.js"></script>
<script type="text/javascript" src="_static/bizstyle.js"></script>
<link rel="index" title="Index" href="genindex.html" />
<link rel="search" title="Search" href="search.html" />
<link rel="next" title="pandas" href="pandas.html" />
<link rel="prev" title="Liens utiles" href="liens.html" />
<meta name="viewport" content="width=device-width,initial-scale=1.0">
<!--[if lt IE 9]>
<script type="text/javascript" src="_static/css3-mediaqueries.js"></script>
<![endif]-->
</head>
<body>
<div class="related" role="navigation" aria-label="related navigation">
<h3>Navigation</h3>
<ul>
<li class="right" style="margin-right: 10px">
<a href="genindex.html" title="General Index"
accesskey="I">index</a></li>
<li class="right" >
<a href="pandas.html" title="pandas"
accesskey="N">next</a> |</li>
<li class="right" >
<a href="liens.html" title="Liens utiles"
accesskey="P">previous</a> |</li>
<li class="nav-item nav-item-0"><a href="index.html">algofun documentation</a> &#187;</li>
</ul>
</div>
<div class="document">
<div class="documentwrapper">
<div class="body" role="main">
<div class="section" id="machine-learning">
<h1>Machine learning<a class="headerlink" href="#machine-learning" title="Permalink to this headline"></a></h1>
<p>Data science (not big data yet)</p>
<div class="section" id="some-links">
<h2>some links<a class="headerlink" href="#some-links" title="Permalink to this headline"></a></h2>
<p>numpy, scipy, matplotlib… and scikit</p>
<p><a class="reference external" href="https://www.scipy.org/install.html">https://www.scipy.org/install.html</a>
<a class="reference external" href="https://matplotlib.org/">https://matplotlib.org/</a>
<a class="reference external" href="http://scikit-learn.org/stable/">http://scikit-learn.org/stable/</a></p>
</div>
<div class="section" id="installation">
<h2>installation<a class="headerlink" href="#installation" title="Permalink to this headline"></a></h2>
<div class="highlight-python"><div class="highlight"><pre><span></span><span class="n">Python</span> <span class="mf">3.6</span><span class="o">.</span><span class="mi">5</span> <span class="p">(</span><span class="n">default</span><span class="p">,</span> <span class="n">Apr</span> <span class="mi">1</span> <span class="mi">2018</span><span class="p">,</span> <span class="mo">05</span><span class="p">:</span><span class="mi">46</span><span class="p">:</span><span class="mi">30</span><span class="p">)</span>
<span class="p">[</span><span class="n">GCC</span> <span class="mf">7.3</span><span class="o">.</span><span class="mi">0</span><span class="p">]</span> <span class="n">on</span> <span class="n">linux</span>
<span class="n">Type</span> <span class="s2">&quot;help&quot;</span><span class="p">,</span> <span class="s2">&quot;copyright&quot;</span><span class="p">,</span> <span class="s2">&quot;credits&quot;</span> <span class="ow">or</span> <span class="s2">&quot;license&quot;</span> <span class="k">for</span> <span class="n">more</span> <span class="n">information</span><span class="o">.</span>
<span class="o">&gt;&gt;&gt;</span> <span class="kn">import</span> <span class="nn">sys</span>
<span class="o">&gt;&gt;&gt;</span> <span class="k">print</span><span class="p">(</span><span class="s1">&#39;Python: {}&#39;</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">sys</span><span class="o">.</span><span class="n">version</span><span class="p">))</span>
<span class="n">Python</span><span class="p">:</span> <span class="mf">3.6</span><span class="o">.</span><span class="mi">5</span> <span class="p">(</span><span class="n">default</span><span class="p">,</span> <span class="n">Apr</span> <span class="mi">1</span> <span class="mi">2018</span><span class="p">,</span> <span class="mo">05</span><span class="p">:</span><span class="mi">46</span><span class="p">:</span><span class="mi">30</span><span class="p">)</span>
<span class="p">[</span><span class="n">GCC</span> <span class="mf">7.3</span><span class="o">.</span><span class="mi">0</span><span class="p">]</span>
<span class="o">&gt;&gt;&gt;</span> <span class="kn">import</span> <span class="nn">scipy</span>
<span class="o">&gt;&gt;&gt;</span> <span class="k">print</span><span class="p">(</span><span class="s1">&#39;scipy: {}&#39;</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">scipy</span><span class="o">.</span><span class="n">__version__</span><span class="p">))</span>
<span class="n">scipy</span><span class="p">:</span> <span class="mf">0.19</span><span class="o">.</span><span class="mi">1</span>
<span class="o">&gt;&gt;&gt;</span> <span class="kn">import</span> <span class="nn">numpy</span>
<span class="o">&gt;&gt;&gt;</span> <span class="k">print</span><span class="p">(</span><span class="s1">&#39;numpy: {}&#39;</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">numpy</span><span class="o">.</span><span class="n">__version__</span><span class="p">))</span>
<span class="n">numpy</span><span class="p">:</span> <span class="mf">1.13</span><span class="o">.</span><span class="mi">3</span>
<span class="o">&gt;&gt;&gt;</span> <span class="kn">import</span> <span class="nn">matplotlib</span>
<span class="o">&gt;&gt;&gt;</span> <span class="k">print</span><span class="p">(</span><span class="s1">&#39;matplotlib: {}&#39;</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">matplotlib</span><span class="o">.</span><span class="n">__version__</span><span class="p">))</span>
<span class="n">matplotlib</span><span class="p">:</span> <span class="mf">2.1</span><span class="o">.</span><span class="mi">1</span>
<span class="o">&gt;&gt;&gt;</span> <span class="c1"># pandas</span>
<span class="o">...</span>
<span class="o">&gt;&gt;&gt;</span> <span class="kn">import</span> <span class="nn">pandas</span>
<span class="o">&gt;&gt;&gt;</span> <span class="k">print</span><span class="p">(</span><span class="s1">&#39;pandas: {}&#39;</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">pandas</span><span class="o">.</span><span class="n">__version__</span><span class="p">))</span>
<span class="n">pandas</span><span class="p">:</span> <span class="mf">0.22</span><span class="o">.</span><span class="mi">0</span>
<span class="o">&gt;&gt;&gt;</span> <span class="c1"># scikit-learn</span>
<span class="o">...</span> <span class="kn">import</span> <span class="nn">sklearn</span>
<span class="o">&gt;&gt;&gt;</span> <span class="k">print</span><span class="p">(</span><span class="s1">&#39;sklearn: {}&#39;</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">sklearn</span><span class="o">.</span><span class="n">__version__</span><span class="p">))</span>
<span class="n">sklearn</span>
</pre></div>
</div>
</div>
<div class="section" id="usage">
<h2>usage<a class="headerlink" href="#usage" title="Permalink to this headline"></a></h2>
<p><a class="reference external" href="https://machinelearningmastery.com/machine-learning-in-python-step-by-step/">https://machinelearningmastery.com/machine-learning-in-python-step-by-step/</a></p>
</div>
</div>
</div>
</div>
<div class="clearer"></div>
</div>
<div class="related" role="navigation" aria-label="related navigation">
<h3>Navigation</h3>
<ul>
<li class="right" style="margin-right: 10px">
<a href="genindex.html" title="General Index"
>index</a></li>
<li class="right" >
<a href="pandas.html" title="pandas"
>next</a> |</li>
<li class="right" >
<a href="liens.html" title="Liens utiles"
>previous</a> |</li>
<li class="nav-item nav-item-0"><a href="index.html">algofun documentation</a> &#187;</li>
</ul>
</div>
<div class="footer" role="contentinfo">
</div>
</body>
</html>

Binary file not shown.

After

Width:  |  Height:  |  Size: 28 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 22 KiB

View File

@ -0,0 +1,56 @@
Machine learning
=================
Data science (not big data yet)
some links
------------
numpy, scipy, matplotlib... and scikit
https://www.scipy.org/install.html
https://matplotlib.org/
http://scikit-learn.org/stable/
installation
--------------
.. code-block:: python
Python 3.6.5 (default, Apr 1 2018, 05:46:30)
[GCC 7.3.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import sys
>>> print('Python: {}'.format(sys.version))
Python: 3.6.5 (default, Apr 1 2018, 05:46:30)
[GCC 7.3.0]
>>> import scipy
>>> print('scipy: {}'.format(scipy.__version__))
scipy: 0.19.1
>>> import numpy
>>> print('numpy: {}'.format(numpy.__version__))
numpy: 1.13.3
>>> import matplotlib
>>> print('matplotlib: {}'.format(matplotlib.__version__))
matplotlib: 2.1.1
>>> # pandas
...
>>> import pandas
>>> print('pandas: {}'.format(pandas.__version__))
pandas: 0.22.0
>>> # scikit-learn
... import sklearn
>>> print('sklearn: {}'.format(sklearn.__version__))
sklearn
usage
-------
https://machinelearningmastery.com/machine-learning-in-python-step-by-step/

View File

@ -0,0 +1,34 @@
Fil conducteur : 1er tour des élections présidentielles 2017
=============================================================
Le fil conducteur sera lexploitation de données issues du 1er tour des élections présidentielles qui ont eu lieu en France le 23 avril 2017.
Les données dont on dispose sont les résultats par canton (plus de 2000 cantons). Pour chaque canton sont donnés
- le nombre dinscrits
- le nombre de votants
- le nombre de bulletins nuls
- le nombre de bulletins blancs
- le nombre de voix obtenus par chacun des candidats.
Lobjectif est détablir
- les résultats au niveau national
- la participation
.. figure:: images/participation_globale.png
:width: 650
:alt: Participation globale
- le scores des candidats
.. figure:: images/scores_1er_tour.png
:width: 650
:alt: Score des candidats
Ce sera l'occasion de découvrir :
* les structures itérables, en particulier les tuples et dictionnaires
* la lecture et l'écriture de données dans des fichiers
* des algorithmes de tris et de recherche.

View File

@ -0,0 +1,36 @@
.. default-role:: literal
.. meta::
:description: algo tutorial
:keywords: algorithm, python, tutorial
.. title:: algofundoc
Algo Fun
==========
.. toctree::
:maxdepth: 1
programmation
liens
MachineLearning
pandas
Indices and tables
==================
* `All modules for which code is available <_modules/index.html>`_
* :ref:`genindex`
* :ref:`modindex`
* :ref:`search`
.. note:: The pyfun code is licensed under the `LGPL licence`_
and this documentation is licensed under the `Creative Commons
Attribution-ShareAlike 3.0 Unported License`_\ .
.. _`Creative Commons Attribution-ShareAlike 3.0 Unported License`: http://creativecommons.org/licenses/by-sa/3.0/deed.en_US
.. _`LGPL licence`: http://www.gnu.org/licenses/lgpl.html

View File

@ -0,0 +1,16 @@
Liens utiles
=============
- random_ datas
- pandas_
- ploting_
- machine_ learning
- making_ a machine learning
- data_ science
.. _making: https://machinelearningmastery.com/machine-learning-in-python-step-by-step/
.. _data: https://realpython.com/tutorials/data-science/
.. _machine: https://realpython.com/tutorials/machine-learning/
.. _ploting: https://realpython.com/python-histograms/?__s=o2w1az6ypdj7ogdsnqwf
.. _random: https://realpython.com/python-random/?__s=o2w1az6ypdj7ogdsnqwf
.. _pandas: https://realpython.com/fast-flexible-pandas/?__s=o2w1az6ypdj7ogdsnqwf

View File

@ -0,0 +1,229 @@
{
"cells": [
{
"cell_type": "markdown",
"metadata": {},
"source": [
"The **import** keyword is used to import a library"
]
},
{
"cell_type": "code",
"execution_count": 2,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"6.123233995736766e-17\n"
]
}
],
"source": [
"import math\n",
"print(math.cos(math.pi / 2))\n"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Pandas\n",
"======="
]
},
{
"cell_type": "code",
"execution_count": 1,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"<div>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>col1</th>\n",
" <th>col2</th>\n",
" <th>col3</th>\n",
" <th>col4</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>line1</th>\n",
" <td>-0.882125</td>\n",
" <td>2.176452</td>\n",
" <td>0.163955</td>\n",
" <td>-0.618232</td>\n",
" </tr>\n",
" <tr>\n",
" <th>line2</th>\n",
" <td>-0.721538</td>\n",
" <td>0.035578</td>\n",
" <td>0.180072</td>\n",
" <td>1.015987</td>\n",
" </tr>\n",
" <tr>\n",
" <th>line3</th>\n",
" <td>-1.162355</td>\n",
" <td>0.384632</td>\n",
" <td>-0.674092</td>\n",
" <td>0.162693</td>\n",
" </tr>\n",
" <tr>\n",
" <th>line4</th>\n",
" <td>-1.399455</td>\n",
" <td>-0.698512</td>\n",
" <td>0.039420</td>\n",
" <td>0.898408</td>\n",
" </tr>\n",
" <tr>\n",
" <th>line5</th>\n",
" <td>1.755342</td>\n",
" <td>-0.073242</td>\n",
" <td>-1.502503</td>\n",
" <td>-0.586194</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" col1 col2 col3 col4\n",
"line1 -0.882125 2.176452 0.163955 -0.618232\n",
"line2 -0.721538 0.035578 0.180072 1.015987\n",
"line3 -1.162355 0.384632 -0.674092 0.162693\n",
"line4 -1.399455 -0.698512 0.039420 0.898408\n",
"line5 1.755342 -0.073242 -1.502503 -0.586194"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"import numpy\n",
"import pandas\n",
"rows = ['line1', 'line2', 'line3', 'line4', 'line5']\n",
"cols = ['col1', 'col2', 'col3', 'col4']\n",
"from IPython.display import display\n",
"dataframe = pandas.DataFrame(numpy.random.randn(5,4), index=rows, columns=cols)\n",
"display(dataframe)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"reorganise a **dataframe** from datas as a dictionary with tuples as keys\n",
"-----------------------------------------------------------------------------------------------------"
]
},
{
"cell_type": "code",
"execution_count": 2,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"<div>\n",
"<style scoped>\n",
" .dataframe tbody tr th:only-of-type {\n",
" vertical-align: middle;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: right;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>Column 1</th>\n",
" <th>Column 2</th>\n",
" <th>Column 3</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>0</th>\n",
" <td>Cerise</td>\n",
" <td>Lanister</td>\n",
" <td>14</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1</th>\n",
" <td>Paul</td>\n",
" <td>Durand</td>\n",
" <td>13</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2</th>\n",
" <td>Pierre</td>\n",
" <td>Dupont</td>\n",
" <td>16</td>\n",
" </tr>\n",
" <tr>\n",
" <th>3</th>\n",
" <td>john</td>\n",
" <td>Snow</td>\n",
" <td>12</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" Column 1 Column 2 Column 3\n",
"0 Cerise Lanister 14\n",
"1 Paul Durand 13\n",
"2 Pierre Dupont 16\n",
"3 john Snow 12"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"dico = {('john', 'Snow') : 12, ('Paul', 'Durand') : 13, (\"Pierre\", \"Dupont\") : 16, (\"Cerise\", \"Lanister\") : 14}\n",
"import pandas\n",
"df = pandas.Series(dico).reset_index()\n",
"df.columns = ['Column 1', 'Column 2', 'Column 3']\n",
"from IPython.display import display\n",
"display(df)"
]
}
],
"metadata": {
"kernelspec": {
"display_name": "Python 3",
"language": "python",
"name": "python3"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 3
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
"version": "3.6.5"
}
},
"nbformat": 4,
"nbformat_minor": 2
}

View File

@ -0,0 +1,14 @@
pandas
==========
**examples** in the jupyter_ notebooks
.. _jupyter: http://jupyter.org/
ipython and pandas::
jupyter notebook Pandas.ipynb
.. toctree::
notebooks/Pandas.ipynb

View File

@ -0,0 +1,61 @@
==============================
Algorithmes et Programmation
==============================
-----
Cours
-----
.. toctree::
:maxdepth: 1
fil_conducteur
- Structures de données séquentielles
- Ensembles et dictionnaires
- Algorithmes de recherche
- Les fichiers
- Algorithmes de tri
----
TP
----
.. toctree::
:maxdepth: 1
- Tester avec doctest
- Listes
- Gestion dune promotion détudiants
- Anagrammes
- Analyse dun fichier texte
- Évaluation empirique des tris
-----------------
Documents annexes
-----------------
.. toctree::
:maxdepth: 1
Bibliographie
-------------
* Apprendre à programmer avec Python 3, Gérard Swinnen, editions Eyrolles (Chapitres 1 à 7, et chapitre 10 en partie). `Version électronique téléchargeable <http://inforef.be/swi/python.htm>`_.
* `Site officiel du langage Python <https://www.python.org/>`_.
* `Documentation officielle de la version 3.5 de Python <https://docs.python.org/3.5/>`_.
* `Site officiel de Thonny <http://www.thonny.org/>`_.

Binary file not shown.

After

Width:  |  Height:  |  Size: 673 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 78 B

View File

@ -0,0 +1,648 @@
/*
* basic.css
* ~~~~~~~~~
*
* Sphinx stylesheet -- basic theme.
*
* :copyright: Copyright 2007-2018 by the Sphinx team, see AUTHORS.
* :license: BSD, see LICENSE for details.
*
*/
/* -- main layout ----------------------------------------------------------- */
div.clearer {
clear: both;
}
/* -- relbar ---------------------------------------------------------------- */
div.related {
width: 100%;
font-size: 90%;
}
div.related h3 {
display: none;
}
div.related ul {
margin: 0;
padding: 0 0 0 10px;
list-style: none;
}
div.related li {
display: inline;
}
div.related li.right {
float: right;
margin-right: 5px;
}
/* -- sidebar --------------------------------------------------------------- */
div.sphinxsidebarwrapper {
padding: 10px 5px 0 10px;
}
div.sphinxsidebar {
float: left;
width: 230px;
margin-left: -100%;
font-size: 90%;
word-wrap: break-word;
overflow-wrap : break-word;
}
div.sphinxsidebar ul {
list-style: none;
}
div.sphinxsidebar ul ul,
div.sphinxsidebar ul.want-points {
margin-left: 20px;
list-style: square;
}
div.sphinxsidebar ul ul {
margin-top: 0;
margin-bottom: 0;
}
div.sphinxsidebar form {
margin-top: 10px;
}
div.sphinxsidebar input {
border: 1px solid #98dbcc;
font-family: sans-serif;
font-size: 1em;
}
div.sphinxsidebar #searchbox input[type="text"] {
width: 170px;
}
img {
border: 0;
max-width: 100%;
}
/* -- search page ----------------------------------------------------------- */
ul.search {
margin: 10px 0 0 20px;
padding: 0;
}
ul.search li {
padding: 5px 0 5px 20px;
background-image: url(file.png);
background-repeat: no-repeat;
background-position: 0 7px;
}
ul.search li a {
font-weight: bold;
}
ul.search li div.context {
color: #888;
margin: 2px 0 0 30px;
text-align: left;
}
ul.keywordmatches li.goodmatch a {
font-weight: bold;
}
/* -- index page ------------------------------------------------------------ */
table.contentstable {
width: 90%;
margin-left: auto;
margin-right: auto;
}
table.contentstable p.biglink {
line-height: 150%;
}
a.biglink {
font-size: 1.3em;
}
span.linkdescr {
font-style: italic;
padding-top: 5px;
font-size: 90%;
}
/* -- general index --------------------------------------------------------- */
table.indextable {
width: 100%;
}
table.indextable td {
text-align: left;
vertical-align: top;
}
table.indextable ul {
margin-top: 0;
margin-bottom: 0;
list-style-type: none;
}
table.indextable > tbody > tr > td > ul {
padding-left: 0em;
}
table.indextable tr.pcap {
height: 10px;
}
table.indextable tr.cap {
margin-top: 10px;
background-color: #f2f2f2;
}
img.toggler {
margin-right: 3px;
margin-top: 3px;
cursor: pointer;
}
div.modindex-jumpbox {
border-top: 1px solid #ddd;
border-bottom: 1px solid #ddd;
margin: 1em 0 1em 0;
padding: 0.4em;
}
div.genindex-jumpbox {
border-top: 1px solid #ddd;
border-bottom: 1px solid #ddd;
margin: 1em 0 1em 0;
padding: 0.4em;
}
/* -- domain module index --------------------------------------------------- */
table.modindextable td {
padding: 2px;
border-collapse: collapse;
}
/* -- general body styles --------------------------------------------------- */
div.body p, div.body dd, div.body li, div.body blockquote {
-moz-hyphens: auto;
-ms-hyphens: auto;
-webkit-hyphens: auto;
hyphens: auto;
}
a.headerlink {
visibility: hidden;
}
h1:hover > a.headerlink,
h2:hover > a.headerlink,
h3:hover > a.headerlink,
h4:hover > a.headerlink,
h5:hover > a.headerlink,
h6:hover > a.headerlink,
dt:hover > a.headerlink,
caption:hover > a.headerlink,
p.caption:hover > a.headerlink,
div.code-block-caption:hover > a.headerlink {
visibility: visible;
}
div.body p.caption {
text-align: inherit;
}
div.body td {
text-align: left;
}
.first {
margin-top: 0 !important;
}
p.rubric {
margin-top: 30px;
font-weight: bold;
}
img.align-left, .figure.align-left, object.align-left {
clear: left;
float: left;
margin-right: 1em;
}
img.align-right, .figure.align-right, object.align-right {
clear: right;
float: right;
margin-left: 1em;
}
img.align-center, .figure.align-center, object.align-center {
display: block;
margin-left: auto;
margin-right: auto;
}
.align-left {
text-align: left;
}
.align-center {
text-align: center;
}
.align-right {
text-align: right;
}
/* -- sidebars -------------------------------------------------------------- */
div.sidebar {
margin: 0 0 0.5em 1em;
border: 1px solid #ddb;
padding: 7px 7px 0 7px;
background-color: #ffe;
width: 40%;
float: right;
}
p.sidebar-title {
font-weight: bold;
}
/* -- topics ---------------------------------------------------------------- */
div.topic {
border: 1px solid #ccc;
padding: 7px 7px 0 7px;
margin: 10px 0 10px 0;
}
p.topic-title {
font-size: 1.1em;
font-weight: bold;
margin-top: 10px;
}
/* -- admonitions ----------------------------------------------------------- */
div.admonition {
margin-top: 10px;
margin-bottom: 10px;
padding: 7px;
}
div.admonition dt {
font-weight: bold;
}
div.admonition dl {
margin-bottom: 0;
}
p.admonition-title {
margin: 0px 10px 5px 0px;
font-weight: bold;
}
div.body p.centered {
text-align: center;
margin-top: 25px;
}
/* -- tables ---------------------------------------------------------------- */
table.docutils {
border: 0;
border-collapse: collapse;
}
table.align-center {
margin-left: auto;
margin-right: auto;
}
table caption span.caption-number {
font-style: italic;
}
table caption span.caption-text {
}
table.docutils td, table.docutils th {
padding: 1px 8px 1px 5px;
border-top: 0;
border-left: 0;
border-right: 0;
border-bottom: 1px solid #aaa;
}
table.footnote td, table.footnote th {
border: 0 !important;
}
th {
text-align: left;
padding-right: 5px;
}
table.citation {
border-left: solid 1px gray;
margin-left: 1px;
}
table.citation td {
border-bottom: none;
}
/* -- figures --------------------------------------------------------------- */
div.figure {
margin: 0.5em;
padding: 0.5em;
}
div.figure p.caption {
padding: 0.3em;
}
div.figure p.caption span.caption-number {
font-style: italic;
}
div.figure p.caption span.caption-text {
}
/* -- field list styles ----------------------------------------------------- */
table.field-list td, table.field-list th {
border: 0 !important;
}
.field-list ul {
margin: 0;
padding-left: 1em;
}
.field-list p {
margin: 0;
}
.field-name {
-moz-hyphens: manual;
-ms-hyphens: manual;
-webkit-hyphens: manual;
hyphens: manual;
}
/* -- other body styles ----------------------------------------------------- */
ol.arabic {
list-style: decimal;
}
ol.loweralpha {
list-style: lower-alpha;
}
ol.upperalpha {
list-style: upper-alpha;
}
ol.lowerroman {
list-style: lower-roman;
}
ol.upperroman {
list-style: upper-roman;
}
dl {
margin-bottom: 15px;
}
dd p {
margin-top: 0px;
}
dd ul, dd table {
margin-bottom: 10px;
}
dd {
margin-top: 3px;
margin-bottom: 10px;
margin-left: 30px;
}
dt:target, span.highlighted {
background-color: #fbe54e;
}
rect.highlighted {
fill: #fbe54e;
}
dl.glossary dt {
font-weight: bold;
font-size: 1.1em;
}
.optional {
font-size: 1.3em;
}
.sig-paren {
font-size: larger;
}
.versionmodified {
font-style: italic;
}
.system-message {
background-color: #fda;
padding: 5px;
border: 3px solid red;
}
.footnote:target {
background-color: #ffa;
}
.line-block {
display: block;
margin-top: 1em;
margin-bottom: 1em;
}
.line-block .line-block {
margin-top: 0;
margin-bottom: 0;
margin-left: 1.5em;
}
.guilabel, .menuselection {
font-family: sans-serif;
}
.accelerator {
text-decoration: underline;
}
.classifier {
font-style: oblique;
}
abbr, acronym {
border-bottom: dotted 1px;
cursor: help;
}
/* -- code displays --------------------------------------------------------- */
pre {
overflow: auto;
overflow-y: hidden; /* fixes display issues on Chrome browsers */
}
span.pre {
-moz-hyphens: none;
-ms-hyphens: none;
-webkit-hyphens: none;
hyphens: none;
}
td.linenos pre {
padding: 5px 0px;
border: 0;
background-color: transparent;
color: #aaa;
}
table.highlighttable {
margin-left: 0.5em;
}
table.highlighttable td {
padding: 0 0.5em 0 0.5em;
}
div.code-block-caption {
padding: 2px 5px;
font-size: small;
}
div.code-block-caption code {
background-color: transparent;
}
div.code-block-caption + div > div.highlight > pre {
margin-top: 0;
}
div.code-block-caption span.caption-number {
padding: 0.1em 0.3em;
font-style: italic;
}
div.code-block-caption span.caption-text {
}
div.literal-block-wrapper {
padding: 1em 1em 0;
}
div.literal-block-wrapper div.highlight {
margin: 0;
}
code.descname {
background-color: transparent;
font-weight: bold;
font-size: 1.2em;
}
code.descclassname {
background-color: transparent;
}
code.xref, a code {
background-color: transparent;
font-weight: bold;
}
h1 code, h2 code, h3 code, h4 code, h5 code, h6 code {
background-color: transparent;
}
.viewcode-link {
float: right;
}
.viewcode-back {
float: right;
font-family: sans-serif;
}
div.viewcode-block:target {
margin: -1px -10px;
padding: 0 10px;
}
/* -- math display ---------------------------------------------------------- */
img.math {
vertical-align: middle;
}
div.body div.math p {
text-align: center;
}
span.eqno {
float: right;
}
span.eqno a.headerlink {
position: relative;
left: 0px;
z-index: 1;
}
div.math:hover a.headerlink {
visibility: visible;
}
/* -- printout stylesheet --------------------------------------------------- */
@media print {
div.document,
div.documentwrapper,
div.bodywrapper {
margin: 0 !important;
width: 100%;
}
div.sphinxsidebar,
div.related,
div.footer,
#top-link {
display: none;
}
}

View File

@ -0,0 +1,490 @@
/*
* bizstyle.css_t
* ~~~~~~~~~~~~~~
*
* Sphinx stylesheet -- business style theme.
*
* :copyright: Copyright 2011-2014 by Sphinx team, see AUTHORS.
* :license: BSD, see LICENSE for details.
*
*/
@import url("basic.css");
/* -- page layout ----------------------------------------------------------- */
body {
font-family: 'Lucida Grande', 'Lucida Sans Unicode', 'Geneva',
'Verdana', sans-serif;
font-size: 14px;
letter-spacing: -0.01em;
line-height: 150%;
text-align: center;
background-color: white;
background-image: url(background_b01.png);
color: black;
padding: 0;
border-right: 1px solid #336699;
border-left: 1px solid #336699;
margin: 0px 40px 0px 40px;
}
div.document {
background-color: white;
text-align: left;
background-repeat: repeat-x;
-moz-box-shadow: 2px 2px 5px #000;
-webkit-box-shadow: 2px 2px 5px #000;
}
div.bodywrapper {
margin: 0 0 0 240px;
border-left: 1px solid #ccc;
}
div.body {
margin: 0;
padding: 0.5em 20px 20px 20px;
}
div.related {
font-size: 1em;
-moz-box-shadow: 2px 2px 5px #000;
-webkit-box-shadow: 2px 2px 5px #000;
}
div.related ul {
background-color: #336699;
height: 100%;
overflow: hidden;
border-top: 1px solid #ddd;
border-bottom: 1px solid #ddd;
}
div.related ul li {
color: white;
margin: 0;
padding: 0;
height: 2em;
float: left;
}
div.related ul li.right {
float: right;
margin-right: 5px;
}
div.related ul li a {
margin: 0;
padding: 0 5px 0 5px;
line-height: 1.75em;
color: #fff;
}
div.related ul li a:hover {
color: #fff;
text-decoration: underline;
}
div.sphinxsidebarwrapper {
padding: 0;
}
div.sphinxsidebar {
margin: 0;
padding: 0.5em 12px 12px 12px;
width: 210px;
font-size: 1em;
text-align: left;
}
div.sphinxsidebar h3, div.sphinxsidebar h4 {
margin: 1em 0 0.5em 0;
font-size: 1em;
padding: 0.1em 0 0.1em 0.5em;
color: white;
border: 1px solid #336699;
background-color: #336699;
}
div.sphinxsidebar h3 a {
color: white;
}
div.sphinxsidebar ul {
padding-left: 1.5em;
margin-top: 7px;
padding: 0;
line-height: 130%;
}
div.sphinxsidebar ul ul {
margin-left: 20px;
}
div.sphinxsidebar input {
border: 1px solid #336699;
}
div.footer {
background-color: white;
color: #336699;
padding: 3px 8px 3px 0;
clear: both;
font-size: 0.8em;
text-align: right;
border-bottom: 1px solid #336699;
-moz-box-shadow: 2px 2px 5px #000;
-webkit-box-shadow: 2px 2px 5px #000;
}
div.footer a {
color: #336699;
text-decoration: underline;
}
/* -- body styles ----------------------------------------------------------- */
p {
margin: 0.8em 0 0.5em 0;
}
a {
color: #336699;
text-decoration: none;
}
a:hover {
color: #336699;
text-decoration: underline;
}
div.body a {
text-decoration: underline;
}
h1, h2, h3 {
color: #336699;
}
h1 {
margin: 0;
padding: 0.7em 0 0.3em 0;
font-size: 1.5em;
}
h2 {
margin: 1.3em 0 0.2em 0;
font-size: 1.35em;
padding-bottom: .5em;
border-bottom: 1px solid #336699;
}
h3 {
margin: 1em 0 -0.3em 0;
font-size: 1.2em;
padding-bottom: .3em;
border-bottom: 1px solid #CCCCCC;
}
div.body h1 a, div.body h2 a, div.body h3 a,
div.body h4 a, div.body h5 a, div.body h6 a {
color: black!important;
}
h1 a.anchor, h2 a.anchor, h3 a.anchor,
h4 a.anchor, h5 a.anchor, h6 a.anchor {
display: none;
margin: 0 0 0 0.3em;
padding: 0 0.2em 0 0.2em;
color: #aaa!important;
}
h1:hover a.anchor, h2:hover a.anchor, h3:hover a.anchor, h4:hover a.anchor,
h5:hover a.anchor, h6:hover a.anchor {
display: inline;
}
h1 a.anchor:hover, h2 a.anchor:hover, h3 a.anchor:hover, h4 a.anchor:hover,
h5 a.anchor:hover, h6 a.anchor:hover {
color: #777;
background-color: #eee;
}
a.headerlink {
color: #c60f0f!important;
font-size: 1em;
margin-left: 6px;
padding: 0 4px 0 4px;
text-decoration: none!important;
}
a.headerlink:hover {
background-color: #ccc;
color: white!important;
}
cite, code, tt {
font-family: 'Consolas', 'Deja Vu Sans Mono',
'Bitstream Vera Sans Mono', monospace;
font-size: 0.95em;
letter-spacing: 0.01em;
}
code {
background-color: #F2F2F2;
border-bottom: 1px solid #ddd;
color: #333;
}
code.descname, code.descclassname, code.xref {
border: 0;
}
hr {
border: 1px solid #abc;
margin: 2em;
}
a code {
border: 0;
color: #CA7900;
}
a code:hover {
color: #2491CF;
}
pre {
background-color: transparent !important;
font-family: 'Consolas', 'Deja Vu Sans Mono',
'Bitstream Vera Sans Mono', monospace;
font-size: 0.95em;
letter-spacing: 0.015em;
line-height: 120%;
padding: 0.5em;
border-right: 5px solid #ccc;
border-left: 5px solid #ccc;
}
pre a {
color: inherit;
text-decoration: underline;
}
td.linenos pre {
padding: 0.5em 0;
}
div.quotebar {
background-color: #f8f8f8;
max-width: 250px;
float: right;
padding: 2px 7px;
border: 1px solid #ccc;
}
div.topic {
background-color: #f8f8f8;
}
table {
border-collapse: collapse;
margin: 0 -0.5em 0 -0.5em;
}
table td, table th {
padding: 0.2em 0.5em 0.2em 0.5em;
}
div.admonition {
font-size: 0.9em;
margin: 1em 0 1em 0;
border: 3px solid #cccccc;
background-color: #f7f7f7;
padding: 0;
}
div.admonition p {
margin: 0.5em 1em 0.5em 1em;
padding: 0;
}
div.admonition li p {
margin-left: 0;
}
div.admonition pre, div.warning pre {
margin: 0;
}
div.highlight {
margin: 0.4em 1em;
}
div.admonition p.admonition-title {
margin: 0;
padding: 0.1em 0 0.1em 0.5em;
color: white;
border-bottom: 3px solid #cccccc;
font-weight: bold;
background-color: #165e83;
}
div.danger { border: 3px solid #f0908d; background-color: #f0cfa0; }
div.error { border: 3px solid #f0908d; background-color: #ede4cd; }
div.warning { border: 3px solid #f8b862; background-color: #f0cfa0; }
div.caution { border: 3px solid #f8b862; background-color: #ede4cd; }
div.attention { border: 3px solid #f8b862; background-color: #f3f3f3; }
div.important { border: 3px solid #f0cfa0; background-color: #ede4cd; }
div.note { border: 3px solid #f0cfa0; background-color: #f3f3f3; }
div.hint { border: 3px solid #bed2c3; background-color: #f3f3f3; }
div.tip { border: 3px solid #bed2c3; background-color: #f3f3f3; }
div.danger p.admonition-title, div.error p.admonition-title {
background-color: #b7282e;
border-bottom: 3px solid #f0908d;
}
div.caution p.admonition-title,
div.warning p.admonition-title,
div.attention p.admonition-title {
background-color: #f19072;
border-bottom: 3px solid #f8b862;
}
div.note p.admonition-title, div.important p.admonition-title {
background-color: #f8b862;
border-bottom: 3px solid #f0cfa0;
}
div.hint p.admonition-title, div.tip p.admonition-title {
background-color: #7ebea5;
border-bottom: 3px solid #bed2c3;
}
div.admonition ul, div.admonition ol,
div.warning ul, div.warning ol {
margin: 0.1em 0.5em 0.5em 3em;
padding: 0;
}
div.versioninfo {
margin: 1em 0 0 0;
border: 1px solid #ccc;
background-color: #DDEAF0;
padding: 8px;
line-height: 1.3em;
font-size: 0.9em;
}
.viewcode-back {
font-family: 'Lucida Grande', 'Lucida Sans Unicode', 'Geneva',
'Verdana', sans-serif;
}
div.viewcode-block:target {
background-color: #f4debf;
border-top: 1px solid #ac9;
border-bottom: 1px solid #ac9;
}
p.versionchanged span.versionmodified {
font-size: 0.9em;
margin-right: 0.2em;
padding: 0.1em;
background-color: #DCE6A0;
}
/* -- table styles ---------------------------------------------------------- */
table.docutils {
margin: 1em 0;
padding: 0;
border: 1px solid white;
background-color: #f7f7f7;
}
table.docutils td, table.docutils th {
padding: 1px 8px 1px 5px;
border-top: 0;
border-left: 0;
border-right: 1px solid white;
border-bottom: 1px solid white;
}
table.docutils td p {
margin-top: 0;
margin-bottom: 0.3em;
}
table.field-list td, table.field-list th {
border: 0 !important;
word-break: break-word;
}
table.footnote td, table.footnote th {
border: 0 !important;
}
th {
color: white;
text-align: left;
padding-right: 5px;
background-color: #82A0BE;
}
div.literal-block-wrapper div.code-block-caption {
background-color: #EEE;
border-style: solid;
border-color: #CCC;
border-width: 1px 5px;
}
/* WIDE DESKTOP STYLE */
@media only screen and (min-width: 1176px) {
body {
margin: 0 40px 0 40px;
}
}
/* TABLET STYLE */
@media only screen and (min-width: 768px) and (max-width: 991px) {
body {
margin: 0 40px 0 40px;
}
}
/* MOBILE LAYOUT (PORTRAIT/320px) */
@media only screen and (max-width: 767px) {
body {
margin: 0;
}
div.bodywrapper {
margin: 0;
width: 100%;
border: none;
}
div.sphinxsidebar {
display: none;
}
}
/* MOBILE LAYOUT (LANDSCAPE/480px) */
@media only screen and (min-width: 480px) and (max-width: 767px) {
body {
margin: 0 20px 0 20px;
}
}
/* RETINA OVERRIDES */
@media
only screen and (-webkit-min-device-pixel-ratio: 2),
only screen and (min-device-pixel-ratio: 2) {
}
/* -- end ------------------------------------------------------------------- */

View File

@ -0,0 +1,41 @@
//
// bizstyle.js
// ~~~~~~~~~~~
//
// Sphinx javascript -- for bizstyle theme.
//
// This theme was created by referring to 'sphinxdoc'
//
// :copyright: Copyright 2012-2014 by Sphinx team, see AUTHORS.
// :license: BSD, see LICENSE for details.
//
$(document).ready(function(){
if (navigator.userAgent.indexOf('iPhone') > 0 ||
navigator.userAgent.indexOf('Android') > 0) {
$("li.nav-item-0 a").text("Top");
}
$("div.related:first ul li:not(.right) a").slice(1).each(function(i, item){
if (item.text.length > 20) {
var tmpstr = item.text
$(item).attr("title", tmpstr);
$(item).text(tmpstr.substr(0, 17) + "...");
}
});
$("div.related:last ul li:not(.right) a").slice(1).each(function(i, item){
if (item.text.length > 20) {
var tmpstr = item.text
$(item).attr("title", tmpstr);
$(item).text(tmpstr.substr(0, 17) + "...");
}
});
});
$(window).resize(function(){
if ($(window).width() <= 776) {
$("li.nav-item-0 a").text("Top");
}
else {
$("li.nav-item-0 a").text("algofun documentation");
}
});

Binary file not shown.

After

Width:  |  Height:  |  Size: 756 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 829 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 641 B

File diff suppressed because one or more lines are too long

View File

@ -0,0 +1,311 @@
/*
* doctools.js
* ~~~~~~~~~~~
*
* Sphinx JavaScript utilities for all documentation.
*
* :copyright: Copyright 2007-2018 by the Sphinx team, see AUTHORS.
* :license: BSD, see LICENSE for details.
*
*/
/**
* select a different prefix for underscore
*/
$u = _.noConflict();
/**
* make the code below compatible with browsers without
* an installed firebug like debugger
if (!window.console || !console.firebug) {
var names = ["log", "debug", "info", "warn", "error", "assert", "dir",
"dirxml", "group", "groupEnd", "time", "timeEnd", "count", "trace",
"profile", "profileEnd"];
window.console = {};
for (var i = 0; i < names.length; ++i)
window.console[names[i]] = function() {};
}
*/
/**
* small helper function to urldecode strings
*/
jQuery.urldecode = function(x) {
return decodeURIComponent(x).replace(/\+/g, ' ');
};
/**
* small helper function to urlencode strings
*/
jQuery.urlencode = encodeURIComponent;
/**
* This function returns the parsed url parameters of the
* current request. Multiple values per key are supported,
* it will always return arrays of strings for the value parts.
*/
jQuery.getQueryParameters = function(s) {
if (typeof s === 'undefined')
s = document.location.search;
var parts = s.substr(s.indexOf('?') + 1).split('&');
var result = {};
for (var i = 0; i < parts.length; i++) {
var tmp = parts[i].split('=', 2);
var key = jQuery.urldecode(tmp[0]);
var value = jQuery.urldecode(tmp[1]);
if (key in result)
result[key].push(value);
else
result[key] = [value];
}
return result;
};
/**
* highlight a given string on a jquery object by wrapping it in
* span elements with the given class name.
*/
jQuery.fn.highlightText = function(text, className) {
function highlight(node, addItems) {
if (node.nodeType === 3) {
var val = node.nodeValue;
var pos = val.toLowerCase().indexOf(text);
if (pos >= 0 && !jQuery(node.parentNode).hasClass(className)) {
var span;
var isInSVG = jQuery(node).closest("body, svg, foreignObject").is("svg");
if (isInSVG) {
span = document.createElementNS("http://www.w3.org/2000/svg", "tspan");
} else {
span = document.createElement("span");
span.className = className;
}
span.appendChild(document.createTextNode(val.substr(pos, text.length)));
node.parentNode.insertBefore(span, node.parentNode.insertBefore(
document.createTextNode(val.substr(pos + text.length)),
node.nextSibling));
node.nodeValue = val.substr(0, pos);
if (isInSVG) {
var bbox = span.getBBox();
var rect = document.createElementNS("http://www.w3.org/2000/svg", "rect");
rect.x.baseVal.value = bbox.x;
rect.y.baseVal.value = bbox.y;
rect.width.baseVal.value = bbox.width;
rect.height.baseVal.value = bbox.height;
rect.setAttribute('class', className);
var parentOfText = node.parentNode.parentNode;
addItems.push({
"parent": node.parentNode,
"target": rect});
}
}
}
else if (!jQuery(node).is("button, select, textarea")) {
jQuery.each(node.childNodes, function() {
highlight(this, addItems);
});
}
}
var addItems = [];
var result = this.each(function() {
highlight(this, addItems);
});
for (var i = 0; i < addItems.length; ++i) {
jQuery(addItems[i].parent).before(addItems[i].target);
}
return result;
};
/*
* backward compatibility for jQuery.browser
* This will be supported until firefox bug is fixed.
*/
if (!jQuery.browser) {
jQuery.uaMatch = function(ua) {
ua = ua.toLowerCase();
var match = /(chrome)[ \/]([\w.]+)/.exec(ua) ||
/(webkit)[ \/]([\w.]+)/.exec(ua) ||
/(opera)(?:.*version|)[ \/]([\w.]+)/.exec(ua) ||
/(msie) ([\w.]+)/.exec(ua) ||
ua.indexOf("compatible") < 0 && /(mozilla)(?:.*? rv:([\w.]+)|)/.exec(ua) ||
[];
return {
browser: match[ 1 ] || "",
version: match[ 2 ] || "0"
};
};
jQuery.browser = {};
jQuery.browser[jQuery.uaMatch(navigator.userAgent).browser] = true;
}
/**
* Small JavaScript module for the documentation.
*/
var Documentation = {
init : function() {
this.fixFirefoxAnchorBug();
this.highlightSearchWords();
this.initIndexTable();
},
/**
* i18n support
*/
TRANSLATIONS : {},
PLURAL_EXPR : function(n) { return n === 1 ? 0 : 1; },
LOCALE : 'unknown',
// gettext and ngettext don't access this so that the functions
// can safely bound to a different name (_ = Documentation.gettext)
gettext : function(string) {
var translated = Documentation.TRANSLATIONS[string];
if (typeof translated === 'undefined')
return string;
return (typeof translated === 'string') ? translated : translated[0];
},
ngettext : function(singular, plural, n) {
var translated = Documentation.TRANSLATIONS[singular];
if (typeof translated === 'undefined')
return (n == 1) ? singular : plural;
return translated[Documentation.PLURALEXPR(n)];
},
addTranslations : function(catalog) {
for (var key in catalog.messages)
this.TRANSLATIONS[key] = catalog.messages[key];
this.PLURAL_EXPR = new Function('n', 'return +(' + catalog.plural_expr + ')');
this.LOCALE = catalog.locale;
},
/**
* add context elements like header anchor links
*/
addContextElements : function() {
$('div[id] > :header:first').each(function() {
$('<a class="headerlink">\u00B6</a>').
attr('href', '#' + this.id).
attr('title', _('Permalink to this headline')).
appendTo(this);
});
$('dt[id]').each(function() {
$('<a class="headerlink">\u00B6</a>').
attr('href', '#' + this.id).
attr('title', _('Permalink to this definition')).
appendTo(this);
});
},
/**
* workaround a firefox stupidity
* see: https://bugzilla.mozilla.org/show_bug.cgi?id=645075
*/
fixFirefoxAnchorBug : function() {
if (document.location.hash && $.browser.mozilla)
window.setTimeout(function() {
document.location.href += '';
}, 10);
},
/**
* highlight the search words provided in the url in the text
*/
highlightSearchWords : function() {
var params = $.getQueryParameters();
var terms = (params.highlight) ? params.highlight[0].split(/\s+/) : [];
if (terms.length) {
var body = $('div.body');
if (!body.length) {
body = $('body');
}
window.setTimeout(function() {
$.each(terms, function() {
body.highlightText(this.toLowerCase(), 'highlighted');
});
}, 10);
$('<p class="highlight-link"><a href="javascript:Documentation.' +
'hideSearchWords()">' + _('Hide Search Matches') + '</a></p>')
.appendTo($('#searchbox'));
}
},
/**
* init the domain index toggle buttons
*/
initIndexTable : function() {
var togglers = $('img.toggler').click(function() {
var src = $(this).attr('src');
var idnum = $(this).attr('id').substr(7);
$('tr.cg-' + idnum).toggle();
if (src.substr(-9) === 'minus.png')
$(this).attr('src', src.substr(0, src.length-9) + 'plus.png');
else
$(this).attr('src', src.substr(0, src.length-8) + 'minus.png');
}).css('display', '');
if (DOCUMENTATION_OPTIONS.COLLAPSE_INDEX) {
togglers.click();
}
},
/**
* helper function to hide the search marks again
*/
hideSearchWords : function() {
$('#searchbox .highlight-link').fadeOut(300);
$('span.highlighted').removeClass('highlighted');
},
/**
* make the url absolute
*/
makeURL : function(relativeURL) {
return DOCUMENTATION_OPTIONS.URL_ROOT + '/' + relativeURL;
},
/**
* get the current relative url
*/
getCurrentURL : function() {
var path = document.location.pathname;
var parts = path.split(/\//);
$.each(DOCUMENTATION_OPTIONS.URL_ROOT.split(/\//), function() {
if (this === '..')
parts.pop();
});
var url = parts.join('/');
return path.substring(url.lastIndexOf('/') + 1, path.length - 1);
},
initOnKeyListeners: function() {
$(document).keyup(function(event) {
var activeElementType = document.activeElement.tagName;
// don't navigate when in search box or textarea
if (activeElementType !== 'TEXTAREA' && activeElementType !== 'INPUT' && activeElementType !== 'SELECT') {
switch (event.keyCode) {
case 37: // left
var prevHref = $('link[rel="prev"]').prop('href');
if (prevHref) {
window.location.href = prevHref;
return false;
}
case 39: // right
var nextHref = $('link[rel="next"]').prop('href');
if (nextHref) {
window.location.href = nextHref;
return false;
}
}
}
});
}
};
// quick alias for translations
_ = Documentation.gettext;
$(document).ready(function() {
Documentation.init();
});

Binary file not shown.

After

Width:  |  Height:  |  Size: 222 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 202 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 286 B

File diff suppressed because it is too large Load Diff

Binary file not shown.

After

Width:  |  Height:  |  Size: 90 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 90 B

View File

@ -0,0 +1,39 @@
.highlight .hll { background-color: #ffffcc }
.highlight { background: #ffffff; }
.highlight .c { font-style: italic } /* Comment */
.highlight .err { border: 1px solid #FF0000 } /* Error */
.highlight .k { font-weight: bold } /* Keyword */
.highlight .ch { font-style: italic } /* Comment.Hashbang */
.highlight .cm { font-style: italic } /* Comment.Multiline */
.highlight .cpf { font-style: italic } /* Comment.PreprocFile */
.highlight .c1 { font-style: italic } /* Comment.Single */
.highlight .cs { font-style: italic } /* Comment.Special */
.highlight .ge { font-style: italic } /* Generic.Emph */
.highlight .gh { font-weight: bold } /* Generic.Heading */
.highlight .gp { font-weight: bold } /* Generic.Prompt */
.highlight .gs { font-weight: bold } /* Generic.Strong */
.highlight .gu { font-weight: bold } /* Generic.Subheading */
.highlight .kc { font-weight: bold } /* Keyword.Constant */
.highlight .kd { font-weight: bold } /* Keyword.Declaration */
.highlight .kn { font-weight: bold } /* Keyword.Namespace */
.highlight .kr { font-weight: bold } /* Keyword.Reserved */
.highlight .s { font-style: italic } /* Literal.String */
.highlight .nc { font-weight: bold } /* Name.Class */
.highlight .ni { font-weight: bold } /* Name.Entity */
.highlight .ne { font-weight: bold } /* Name.Exception */
.highlight .nn { font-weight: bold } /* Name.Namespace */
.highlight .nt { font-weight: bold } /* Name.Tag */
.highlight .ow { font-weight: bold } /* Operator.Word */
.highlight .sa { font-style: italic } /* Literal.String.Affix */
.highlight .sb { font-style: italic } /* Literal.String.Backtick */
.highlight .sc { font-style: italic } /* Literal.String.Char */
.highlight .dl { font-style: italic } /* Literal.String.Delimiter */
.highlight .sd { font-style: italic } /* Literal.String.Doc */
.highlight .s2 { font-style: italic } /* Literal.String.Double */
.highlight .se { font-weight: bold; font-style: italic } /* Literal.String.Escape */
.highlight .sh { font-style: italic } /* Literal.String.Heredoc */
.highlight .si { font-weight: bold; font-style: italic } /* Literal.String.Interpol */
.highlight .sx { font-style: italic } /* Literal.String.Other */
.highlight .sr { font-style: italic } /* Literal.String.Regex */
.highlight .s1 { font-style: italic } /* Literal.String.Single */
.highlight .ss { font-style: italic } /* Literal.String.Symbol */

Binary file not shown.

After

Width:  |  Height:  |  Size: 13 KiB

View File

@ -0,0 +1,761 @@
/*
* searchtools.js_t
* ~~~~~~~~~~~~~~~~
*
* Sphinx JavaScript utilities for the full-text search.
*
* :copyright: Copyright 2007-2018 by the Sphinx team, see AUTHORS.
* :license: BSD, see LICENSE for details.
*
*/
/* Non-minified version JS is _stemmer.js if file is provided */
/**
* Porter Stemmer
*/
var Stemmer = function() {
var step2list = {
ational: 'ate',
tional: 'tion',
enci: 'ence',
anci: 'ance',
izer: 'ize',
bli: 'ble',
alli: 'al',
entli: 'ent',
eli: 'e',
ousli: 'ous',
ization: 'ize',
ation: 'ate',
ator: 'ate',
alism: 'al',
iveness: 'ive',
fulness: 'ful',
ousness: 'ous',
aliti: 'al',
iviti: 'ive',
biliti: 'ble',
logi: 'log'
};
var step3list = {
icate: 'ic',
ative: '',
alize: 'al',
iciti: 'ic',
ical: 'ic',
ful: '',
ness: ''
};
var c = "[^aeiou]"; // consonant
var v = "[aeiouy]"; // vowel
var C = c + "[^aeiouy]*"; // consonant sequence
var V = v + "[aeiou]*"; // vowel sequence
var mgr0 = "^(" + C + ")?" + V + C; // [C]VC... is m>0
var meq1 = "^(" + C + ")?" + V + C + "(" + V + ")?$"; // [C]VC[V] is m=1
var mgr1 = "^(" + C + ")?" + V + C + V + C; // [C]VCVC... is m>1
var s_v = "^(" + C + ")?" + v; // vowel in stem
this.stemWord = function (w) {
var stem;
var suffix;
var firstch;
var origword = w;
if (w.length < 3)
return w;
var re;
var re2;
var re3;
var re4;
firstch = w.substr(0,1);
if (firstch == "y")
w = firstch.toUpperCase() + w.substr(1);
// Step 1a
re = /^(.+?)(ss|i)es$/;
re2 = /^(.+?)([^s])s$/;
if (re.test(w))
w = w.replace(re,"$1$2");
else if (re2.test(w))
w = w.replace(re2,"$1$2");
// Step 1b
re = /^(.+?)eed$/;
re2 = /^(.+?)(ed|ing)$/;
if (re.test(w)) {
var fp = re.exec(w);
re = new RegExp(mgr0);
if (re.test(fp[1])) {
re = /.$/;
w = w.replace(re,"");
}
}
else if (re2.test(w)) {
var fp = re2.exec(w);
stem = fp[1];
re2 = new RegExp(s_v);
if (re2.test(stem)) {
w = stem;
re2 = /(at|bl|iz)$/;
re3 = new RegExp("([^aeiouylsz])\\1$");
re4 = new RegExp("^" + C + v + "[^aeiouwxy]$");
if (re2.test(w))
w = w + "e";
else if (re3.test(w)) {
re = /.$/;
w = w.replace(re,"");
}
else if (re4.test(w))
w = w + "e";
}
}
// Step 1c
re = /^(.+?)y$/;
if (re.test(w)) {
var fp = re.exec(w);
stem = fp[1];
re = new RegExp(s_v);
if (re.test(stem))
w = stem + "i";
}
// Step 2
re = /^(.+?)(ational|tional|enci|anci|izer|bli|alli|entli|eli|ousli|ization|ation|ator|alism|iveness|fulness|ousness|aliti|iviti|biliti|logi)$/;
if (re.test(w)) {
var fp = re.exec(w);
stem = fp[1];
suffix = fp[2];
re = new RegExp(mgr0);
if (re.test(stem))
w = stem + step2list[suffix];
}
// Step 3
re = /^(.+?)(icate|ative|alize|iciti|ical|ful|ness)$/;
if (re.test(w)) {
var fp = re.exec(w);
stem = fp[1];
suffix = fp[2];
re = new RegExp(mgr0);
if (re.test(stem))
w = stem + step3list[suffix];
}
// Step 4
re = /^(.+?)(al|ance|ence|er|ic|able|ible|ant|ement|ment|ent|ou|ism|ate|iti|ous|ive|ize)$/;
re2 = /^(.+?)(s|t)(ion)$/;
if (re.test(w)) {
var fp = re.exec(w);
stem = fp[1];
re = new RegExp(mgr1);
if (re.test(stem))
w = stem;
}
else if (re2.test(w)) {
var fp = re2.exec(w);
stem = fp[1] + fp[2];
re2 = new RegExp(mgr1);
if (re2.test(stem))
w = stem;
}
// Step 5
re = /^(.+?)e$/;
if (re.test(w)) {
var fp = re.exec(w);
stem = fp[1];
re = new RegExp(mgr1);
re2 = new RegExp(meq1);
re3 = new RegExp("^" + C + v + "[^aeiouwxy]$");
if (re.test(stem) || (re2.test(stem) && !(re3.test(stem))))
w = stem;
}
re = /ll$/;
re2 = new RegExp(mgr1);
if (re.test(w) && re2.test(w)) {
re = /.$/;
w = w.replace(re,"");
}
// and turn initial Y back to y
if (firstch == "y")
w = firstch.toLowerCase() + w.substr(1);
return w;
}
}
/**
* Simple result scoring code.
*/
var Scorer = {
// Implement the following function to further tweak the score for each result
// The function takes a result array [filename, title, anchor, descr, score]
// and returns the new score.
/*
score: function(result) {
return result[4];
},
*/
// query matches the full name of an object
objNameMatch: 11,
// or matches in the last dotted part of the object name
objPartialMatch: 6,
// Additive scores depending on the priority of the object
objPrio: {0: 15, // used to be importantResults
1: 5, // used to be objectResults
2: -5}, // used to be unimportantResults
// Used when the priority is not in the mapping.
objPrioDefault: 0,
// query found in title
title: 15,
// query found in terms
term: 5
};
var splitChars = (function() {
var result = {};
var singles = [96, 180, 187, 191, 215, 247, 749, 885, 903, 907, 909, 930, 1014, 1648,
1748, 1809, 2416, 2473, 2481, 2526, 2601, 2609, 2612, 2615, 2653, 2702,
2706, 2729, 2737, 2740, 2857, 2865, 2868, 2910, 2928, 2948, 2961, 2971,
2973, 3085, 3089, 3113, 3124, 3213, 3217, 3241, 3252, 3295, 3341, 3345,
3369, 3506, 3516, 3633, 3715, 3721, 3736, 3744, 3748, 3750, 3756, 3761,
3781, 3912, 4239, 4347, 4681, 4695, 4697, 4745, 4785, 4799, 4801, 4823,
4881, 5760, 5901, 5997, 6313, 7405, 8024, 8026, 8028, 8030, 8117, 8125,
8133, 8181, 8468, 8485, 8487, 8489, 8494, 8527, 11311, 11359, 11687, 11695,
11703, 11711, 11719, 11727, 11735, 12448, 12539, 43010, 43014, 43019, 43587,
43696, 43713, 64286, 64297, 64311, 64317, 64319, 64322, 64325, 65141];
var i, j, start, end;
for (i = 0; i < singles.length; i++) {
result[singles[i]] = true;
}
var ranges = [[0, 47], [58, 64], [91, 94], [123, 169], [171, 177], [182, 184], [706, 709],
[722, 735], [741, 747], [751, 879], [888, 889], [894, 901], [1154, 1161],
[1318, 1328], [1367, 1368], [1370, 1376], [1416, 1487], [1515, 1519], [1523, 1568],
[1611, 1631], [1642, 1645], [1750, 1764], [1767, 1773], [1789, 1790], [1792, 1807],
[1840, 1868], [1958, 1968], [1970, 1983], [2027, 2035], [2038, 2041], [2043, 2047],
[2070, 2073], [2075, 2083], [2085, 2087], [2089, 2307], [2362, 2364], [2366, 2383],
[2385, 2391], [2402, 2405], [2419, 2424], [2432, 2436], [2445, 2446], [2449, 2450],
[2483, 2485], [2490, 2492], [2494, 2509], [2511, 2523], [2530, 2533], [2546, 2547],
[2554, 2564], [2571, 2574], [2577, 2578], [2618, 2648], [2655, 2661], [2672, 2673],
[2677, 2692], [2746, 2748], [2750, 2767], [2769, 2783], [2786, 2789], [2800, 2820],
[2829, 2830], [2833, 2834], [2874, 2876], [2878, 2907], [2914, 2917], [2930, 2946],
[2955, 2957], [2966, 2968], [2976, 2978], [2981, 2983], [2987, 2989], [3002, 3023],
[3025, 3045], [3059, 3076], [3130, 3132], [3134, 3159], [3162, 3167], [3170, 3173],
[3184, 3191], [3199, 3204], [3258, 3260], [3262, 3293], [3298, 3301], [3312, 3332],
[3386, 3388], [3390, 3423], [3426, 3429], [3446, 3449], [3456, 3460], [3479, 3481],
[3518, 3519], [3527, 3584], [3636, 3647], [3655, 3663], [3674, 3712], [3717, 3718],
[3723, 3724], [3726, 3731], [3752, 3753], [3764, 3772], [3774, 3775], [3783, 3791],
[3802, 3803], [3806, 3839], [3841, 3871], [3892, 3903], [3949, 3975], [3980, 4095],
[4139, 4158], [4170, 4175], [4182, 4185], [4190, 4192], [4194, 4196], [4199, 4205],
[4209, 4212], [4226, 4237], [4250, 4255], [4294, 4303], [4349, 4351], [4686, 4687],
[4702, 4703], [4750, 4751], [4790, 4791], [4806, 4807], [4886, 4887], [4955, 4968],
[4989, 4991], [5008, 5023], [5109, 5120], [5741, 5742], [5787, 5791], [5867, 5869],
[5873, 5887], [5906, 5919], [5938, 5951], [5970, 5983], [6001, 6015], [6068, 6102],
[6104, 6107], [6109, 6111], [6122, 6127], [6138, 6159], [6170, 6175], [6264, 6271],
[6315, 6319], [6390, 6399], [6429, 6469], [6510, 6511], [6517, 6527], [6572, 6592],
[6600, 6607], [6619, 6655], [6679, 6687], [6741, 6783], [6794, 6799], [6810, 6822],
[6824, 6916], [6964, 6980], [6988, 6991], [7002, 7042], [7073, 7085], [7098, 7167],
[7204, 7231], [7242, 7244], [7294, 7400], [7410, 7423], [7616, 7679], [7958, 7959],
[7966, 7967], [8006, 8007], [8014, 8015], [8062, 8063], [8127, 8129], [8141, 8143],
[8148, 8149], [8156, 8159], [8173, 8177], [8189, 8303], [8306, 8307], [8314, 8318],
[8330, 8335], [8341, 8449], [8451, 8454], [8456, 8457], [8470, 8472], [8478, 8483],
[8506, 8507], [8512, 8516], [8522, 8525], [8586, 9311], [9372, 9449], [9472, 10101],
[10132, 11263], [11493, 11498], [11503, 11516], [11518, 11519], [11558, 11567],
[11622, 11630], [11632, 11647], [11671, 11679], [11743, 11822], [11824, 12292],
[12296, 12320], [12330, 12336], [12342, 12343], [12349, 12352], [12439, 12444],
[12544, 12548], [12590, 12592], [12687, 12689], [12694, 12703], [12728, 12783],
[12800, 12831], [12842, 12880], [12896, 12927], [12938, 12976], [12992, 13311],
[19894, 19967], [40908, 40959], [42125, 42191], [42238, 42239], [42509, 42511],
[42540, 42559], [42592, 42593], [42607, 42622], [42648, 42655], [42736, 42774],
[42784, 42785], [42889, 42890], [42893, 43002], [43043, 43055], [43062, 43071],
[43124, 43137], [43188, 43215], [43226, 43249], [43256, 43258], [43260, 43263],
[43302, 43311], [43335, 43359], [43389, 43395], [43443, 43470], [43482, 43519],
[43561, 43583], [43596, 43599], [43610, 43615], [43639, 43641], [43643, 43647],
[43698, 43700], [43703, 43704], [43710, 43711], [43715, 43738], [43742, 43967],
[44003, 44015], [44026, 44031], [55204, 55215], [55239, 55242], [55292, 55295],
[57344, 63743], [64046, 64047], [64110, 64111], [64218, 64255], [64263, 64274],
[64280, 64284], [64434, 64466], [64830, 64847], [64912, 64913], [64968, 65007],
[65020, 65135], [65277, 65295], [65306, 65312], [65339, 65344], [65371, 65381],
[65471, 65473], [65480, 65481], [65488, 65489], [65496, 65497]];
for (i = 0; i < ranges.length; i++) {
start = ranges[i][0];
end = ranges[i][1];
for (j = start; j <= end; j++) {
result[j] = true;
}
}
return result;
})();
function splitQuery(query) {
var result = [];
var start = -1;
for (var i = 0; i < query.length; i++) {
if (splitChars[query.charCodeAt(i)]) {
if (start !== -1) {
result.push(query.slice(start, i));
start = -1;
}
} else if (start === -1) {
start = i;
}
}
if (start !== -1) {
result.push(query.slice(start));
}
return result;
}
/**
* Search Module
*/
var Search = {
_index : null,
_queued_query : null,
_pulse_status : -1,
init : function() {
var params = $.getQueryParameters();
if (params.q) {
var query = params.q[0];
$('input[name="q"]')[0].value = query;
this.performSearch(query);
}
},
loadIndex : function(url) {
$.ajax({type: "GET", url: url, data: null,
dataType: "script", cache: true,
complete: function(jqxhr, textstatus) {
if (textstatus != "success") {
document.getElementById("searchindexloader").src = url;
}
}});
},
setIndex : function(index) {
var q;
this._index = index;
if ((q = this._queued_query) !== null) {
this._queued_query = null;
Search.query(q);
}
},
hasIndex : function() {
return this._index !== null;
},
deferQuery : function(query) {
this._queued_query = query;
},
stopPulse : function() {
this._pulse_status = 0;
},
startPulse : function() {
if (this._pulse_status >= 0)
return;
function pulse() {
var i;
Search._pulse_status = (Search._pulse_status + 1) % 4;
var dotString = '';
for (i = 0; i < Search._pulse_status; i++)
dotString += '.';
Search.dots.text(dotString);
if (Search._pulse_status > -1)
window.setTimeout(pulse, 500);
}
pulse();
},
/**
* perform a search for something (or wait until index is loaded)
*/
performSearch : function(query) {
// create the required interface elements
this.out = $('#search-results');
this.title = $('<h2>' + _('Searching') + '</h2>').appendTo(this.out);
this.dots = $('<span></span>').appendTo(this.title);
this.status = $('<p style="display: none"></p>').appendTo(this.out);
this.output = $('<ul class="search"/>').appendTo(this.out);
$('#search-progress').text(_('Preparing search...'));
this.startPulse();
// index already loaded, the browser was quick!
if (this.hasIndex())
this.query(query);
else
this.deferQuery(query);
},
/**
* execute search (requires search index to be loaded)
*/
query : function(query) {
var i;
var stopwords = ["a","and","are","as","at","be","but","by","for","if","in","into","is","it","near","no","not","of","on","or","such","that","the","their","then","there","these","they","this","to","was","will","with"];
// stem the searchterms and add them to the correct list
var stemmer = new Stemmer();
var searchterms = [];
var excluded = [];
var hlterms = [];
var tmp = splitQuery(query);
var objectterms = [];
for (i = 0; i < tmp.length; i++) {
if (tmp[i] !== "") {
objectterms.push(tmp[i].toLowerCase());
}
if ($u.indexOf(stopwords, tmp[i].toLowerCase()) != -1 || tmp[i].match(/^\d+$/) ||
tmp[i] === "") {
// skip this "word"
continue;
}
// stem the word
var word = stemmer.stemWord(tmp[i].toLowerCase());
// prevent stemmer from cutting word smaller than two chars
if(word.length < 3 && tmp[i].length >= 3) {
word = tmp[i];
}
var toAppend;
// select the correct list
if (word[0] == '-') {
toAppend = excluded;
word = word.substr(1);
}
else {
toAppend = searchterms;
hlterms.push(tmp[i].toLowerCase());
}
// only add if not already in the list
if (!$u.contains(toAppend, word))
toAppend.push(word);
}
var highlightstring = '?highlight=' + $.urlencode(hlterms.join(" "));
// console.debug('SEARCH: searching for:');
// console.info('required: ', searchterms);
// console.info('excluded: ', excluded);
// prepare search
var terms = this._index.terms;
var titleterms = this._index.titleterms;
// array of [filename, title, anchor, descr, score]
var results = [];
$('#search-progress').empty();
// lookup as object
for (i = 0; i < objectterms.length; i++) {
var others = [].concat(objectterms.slice(0, i),
objectterms.slice(i+1, objectterms.length));
results = results.concat(this.performObjectSearch(objectterms[i], others));
}
// lookup as search terms in fulltext
results = results.concat(this.performTermsSearch(searchterms, excluded, terms, titleterms));
// let the scorer override scores with a custom scoring function
if (Scorer.score) {
for (i = 0; i < results.length; i++)
results[i][4] = Scorer.score(results[i]);
}
// now sort the results by score (in opposite order of appearance, since the
// display function below uses pop() to retrieve items) and then
// alphabetically
results.sort(function(a, b) {
var left = a[4];
var right = b[4];
if (left > right) {
return 1;
} else if (left < right) {
return -1;
} else {
// same score: sort alphabetically
left = a[1].toLowerCase();
right = b[1].toLowerCase();
return (left > right) ? -1 : ((left < right) ? 1 : 0);
}
});
// for debugging
//Search.lastresults = results.slice(); // a copy
//console.info('search results:', Search.lastresults);
// print the results
var resultCount = results.length;
function displayNextItem() {
// results left, load the summary and display it
if (results.length) {
var item = results.pop();
var listItem = $('<li style="display:none"></li>');
if (DOCUMENTATION_OPTIONS.FILE_SUFFIX === '') {
// dirhtml builder
var dirname = item[0] + '/';
if (dirname.match(/\/index\/$/)) {
dirname = dirname.substring(0, dirname.length-6);
} else if (dirname == 'index/') {
dirname = '';
}
listItem.append($('<a/>').attr('href',
DOCUMENTATION_OPTIONS.URL_ROOT + dirname +
highlightstring + item[2]).html(item[1]));
} else {
// normal html builders
listItem.append($('<a/>').attr('href',
item[0] + DOCUMENTATION_OPTIONS.FILE_SUFFIX +
highlightstring + item[2]).html(item[1]));
}
if (item[3]) {
listItem.append($('<span> (' + item[3] + ')</span>'));
Search.output.append(listItem);
listItem.slideDown(5, function() {
displayNextItem();
});
} else if (DOCUMENTATION_OPTIONS.HAS_SOURCE) {
var suffix = DOCUMENTATION_OPTIONS.SOURCELINK_SUFFIX;
if (suffix === undefined) {
suffix = '.txt';
}
$.ajax({url: DOCUMENTATION_OPTIONS.URL_ROOT + '_sources/' + item[5] + (item[5].slice(-suffix.length) === suffix ? '' : suffix),
dataType: "text",
complete: function(jqxhr, textstatus) {
var data = jqxhr.responseText;
if (data !== '' && data !== undefined) {
listItem.append(Search.makeSearchSummary(data, searchterms, hlterms));
}
Search.output.append(listItem);
listItem.slideDown(5, function() {
displayNextItem();
});
}});
} else {
// no source available, just display title
Search.output.append(listItem);
listItem.slideDown(5, function() {
displayNextItem();
});
}
}
// search finished, update title and status message
else {
Search.stopPulse();
Search.title.text(_('Search Results'));
if (!resultCount)
Search.status.text(_('Your search did not match any documents. Please make sure that all words are spelled correctly and that you\'ve selected enough categories.'));
else
Search.status.text(_('Search finished, found %s page(s) matching the search query.').replace('%s', resultCount));
Search.status.fadeIn(500);
}
}
displayNextItem();
},
/**
* search for object names
*/
performObjectSearch : function(object, otherterms) {
var filenames = this._index.filenames;
var docnames = this._index.docnames;
var objects = this._index.objects;
var objnames = this._index.objnames;
var titles = this._index.titles;
var i;
var results = [];
for (var prefix in objects) {
for (var name in objects[prefix]) {
var fullname = (prefix ? prefix + '.' : '') + name;
if (fullname.toLowerCase().indexOf(object) > -1) {
var score = 0;
var parts = fullname.split('.');
// check for different match types: exact matches of full name or
// "last name" (i.e. last dotted part)
if (fullname == object || parts[parts.length - 1] == object) {
score += Scorer.objNameMatch;
// matches in last name
} else if (parts[parts.length - 1].indexOf(object) > -1) {
score += Scorer.objPartialMatch;
}
var match = objects[prefix][name];
var objname = objnames[match[1]][2];
var title = titles[match[0]];
// If more than one term searched for, we require other words to be
// found in the name/title/description
if (otherterms.length > 0) {
var haystack = (prefix + ' ' + name + ' ' +
objname + ' ' + title).toLowerCase();
var allfound = true;
for (i = 0; i < otherterms.length; i++) {
if (haystack.indexOf(otherterms[i]) == -1) {
allfound = false;
break;
}
}
if (!allfound) {
continue;
}
}
var descr = objname + _(', in ') + title;
var anchor = match[3];
if (anchor === '')
anchor = fullname;
else if (anchor == '-')
anchor = objnames[match[1]][1] + '-' + fullname;
// add custom score for some objects according to scorer
if (Scorer.objPrio.hasOwnProperty(match[2])) {
score += Scorer.objPrio[match[2]];
} else {
score += Scorer.objPrioDefault;
}
results.push([docnames[match[0]], fullname, '#'+anchor, descr, score, filenames[match[0]]]);
}
}
}
return results;
},
/**
* search for full-text terms in the index
*/
performTermsSearch : function(searchterms, excluded, terms, titleterms) {
var docnames = this._index.docnames;
var filenames = this._index.filenames;
var titles = this._index.titles;
var i, j, file;
var fileMap = {};
var scoreMap = {};
var results = [];
// perform the search on the required terms
for (i = 0; i < searchterms.length; i++) {
var word = searchterms[i];
var files = [];
var _o = [
{files: terms[word], score: Scorer.term},
{files: titleterms[word], score: Scorer.title}
];
// no match but word was a required one
if ($u.every(_o, function(o){return o.files === undefined;})) {
break;
}
// found search word in contents
$u.each(_o, function(o) {
var _files = o.files;
if (_files === undefined)
return
if (_files.length === undefined)
_files = [_files];
files = files.concat(_files);
// set score for the word in each file to Scorer.term
for (j = 0; j < _files.length; j++) {
file = _files[j];
if (!(file in scoreMap))
scoreMap[file] = {}
scoreMap[file][word] = o.score;
}
});
// create the mapping
for (j = 0; j < files.length; j++) {
file = files[j];
if (file in fileMap)
fileMap[file].push(word);
else
fileMap[file] = [word];
}
}
// now check if the files don't contain excluded terms
for (file in fileMap) {
var valid = true;
// check if all requirements are matched
if (fileMap[file].length != searchterms.length)
continue;
// ensure that none of the excluded terms is in the search result
for (i = 0; i < excluded.length; i++) {
if (terms[excluded[i]] == file ||
titleterms[excluded[i]] == file ||
$u.contains(terms[excluded[i]] || [], file) ||
$u.contains(titleterms[excluded[i]] || [], file)) {
valid = false;
break;
}
}
// if we have still a valid result we can add it to the result list
if (valid) {
// select one (max) score for the file.
// for better ranking, we should calculate ranking by using words statistics like basic tf-idf...
var score = $u.max($u.map(fileMap[file], function(w){return scoreMap[file][w]}));
results.push([docnames[file], titles[file], '', null, score, filenames[file]]);
}
}
return results;
},
/**
* helper function to return a node containing the
* search summary for a given text. keywords is a list
* of stemmed words, hlwords is the list of normal, unstemmed
* words. the first one is used to find the occurrence, the
* latter for highlighting it.
*/
makeSearchSummary : function(text, keywords, hlwords) {
var textLower = text.toLowerCase();
var start = 0;
$.each(keywords, function() {
var i = textLower.indexOf(this.toLowerCase());
if (i > -1)
start = i;
});
start = Math.max(start - 120, 0);
var excerpt = ((start > 0) ? '...' : '') +
$.trim(text.substr(start, 240)) +
((start + 240 - text.length) ? '...' : '');
var rv = $('<div class="context"></div>').text(excerpt);
$.each(hlwords, function() {
rv = rv.highlightText(this, 'highlighted');
});
return rv;
}
};
$(document).ready(function() {
Search.init();
});

View File

@ -0,0 +1,1548 @@
// Underscore.js 1.8.3
// http://underscorejs.org
// (c) 2009-2015 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
// Underscore may be freely distributed under the MIT license.
(function() {
// Baseline setup
// --------------
// Establish the root object, `window` in the browser, or `exports` on the server.
var root = this;
// Save the previous value of the `_` variable.
var previousUnderscore = root._;
// Save bytes in the minified (but not gzipped) version:
var ArrayProto = Array.prototype, ObjProto = Object.prototype, FuncProto = Function.prototype;
// Create quick reference variables for speed access to core prototypes.
var
push = ArrayProto.push,
slice = ArrayProto.slice,
toString = ObjProto.toString,
hasOwnProperty = ObjProto.hasOwnProperty;
// All **ECMAScript 5** native function implementations that we hope to use
// are declared here.
var
nativeIsArray = Array.isArray,
nativeKeys = Object.keys,
nativeBind = FuncProto.bind,
nativeCreate = Object.create;
// Naked function reference for surrogate-prototype-swapping.
var Ctor = function(){};
// Create a safe reference to the Underscore object for use below.
var _ = function(obj) {
if (obj instanceof _) return obj;
if (!(this instanceof _)) return new _(obj);
this._wrapped = obj;
};
// Export the Underscore object for **Node.js**, with
// backwards-compatibility for the old `require()` API. If we're in
// the browser, add `_` as a global object.
if (typeof exports !== 'undefined') {
if (typeof module !== 'undefined' && module.exports) {
exports = module.exports = _;
}
exports._ = _;
} else {
root._ = _;
}
// Current version.
_.VERSION = '1.8.3';
// Internal function that returns an efficient (for current engines) version
// of the passed-in callback, to be repeatedly applied in other Underscore
// functions.
var optimizeCb = function(func, context, argCount) {
if (context === void 0) return func;
switch (argCount == null ? 3 : argCount) {
case 1: return function(value) {
return func.call(context, value);
};
case 2: return function(value, other) {
return func.call(context, value, other);
};
case 3: return function(value, index, collection) {
return func.call(context, value, index, collection);
};
case 4: return function(accumulator, value, index, collection) {
return func.call(context, accumulator, value, index, collection);
};
}
return function() {
return func.apply(context, arguments);
};
};
// A mostly-internal function to generate callbacks that can be applied
// to each element in a collection, returning the desired result — either
// identity, an arbitrary callback, a property matcher, or a property accessor.
var cb = function(value, context, argCount) {
if (value == null) return _.identity;
if (_.isFunction(value)) return optimizeCb(value, context, argCount);
if (_.isObject(value)) return _.matcher(value);
return _.property(value);
};
_.iteratee = function(value, context) {
return cb(value, context, Infinity);
};
// An internal function for creating assigner functions.
var createAssigner = function(keysFunc, undefinedOnly) {
return function(obj) {
var length = arguments.length;
if (length < 2 || obj == null) return obj;
for (var index = 1; index < length; index++) {
var source = arguments[index],
keys = keysFunc(source),
l = keys.length;
for (var i = 0; i < l; i++) {
var key = keys[i];
if (!undefinedOnly || obj[key] === void 0) obj[key] = source[key];
}
}
return obj;
};
};
// An internal function for creating a new object that inherits from another.
var baseCreate = function(prototype) {
if (!_.isObject(prototype)) return {};
if (nativeCreate) return nativeCreate(prototype);
Ctor.prototype = prototype;
var result = new Ctor;
Ctor.prototype = null;
return result;
};
var property = function(key) {
return function(obj) {
return obj == null ? void 0 : obj[key];
};
};
// Helper for collection methods to determine whether a collection
// should be iterated as an array or as an object
// Related: http://people.mozilla.org/~jorendorff/es6-draft.html#sec-tolength
// Avoids a very nasty iOS 8 JIT bug on ARM-64. #2094
var MAX_ARRAY_INDEX = Math.pow(2, 53) - 1;
var getLength = property('length');
var isArrayLike = function(collection) {
var length = getLength(collection);
return typeof length == 'number' && length >= 0 && length <= MAX_ARRAY_INDEX;
};
// Collection Functions
// --------------------
// The cornerstone, an `each` implementation, aka `forEach`.
// Handles raw objects in addition to array-likes. Treats all
// sparse array-likes as if they were dense.
_.each = _.forEach = function(obj, iteratee, context) {
iteratee = optimizeCb(iteratee, context);
var i, length;
if (isArrayLike(obj)) {
for (i = 0, length = obj.length; i < length; i++) {
iteratee(obj[i], i, obj);
}
} else {
var keys = _.keys(obj);
for (i = 0, length = keys.length; i < length; i++) {
iteratee(obj[keys[i]], keys[i], obj);
}
}
return obj;
};
// Return the results of applying the iteratee to each element.
_.map = _.collect = function(obj, iteratee, context) {
iteratee = cb(iteratee, context);
var keys = !isArrayLike(obj) && _.keys(obj),
length = (keys || obj).length,
results = Array(length);
for (var index = 0; index < length; index++) {
var currentKey = keys ? keys[index] : index;
results[index] = iteratee(obj[currentKey], currentKey, obj);
}
return results;
};
// Create a reducing function iterating left or right.
function createReduce(dir) {
// Optimized iterator function as using arguments.length
// in the main function will deoptimize the, see #1991.
function iterator(obj, iteratee, memo, keys, index, length) {
for (; index >= 0 && index < length; index += dir) {
var currentKey = keys ? keys[index] : index;
memo = iteratee(memo, obj[currentKey], currentKey, obj);
}
return memo;
}
return function(obj, iteratee, memo, context) {
iteratee = optimizeCb(iteratee, context, 4);
var keys = !isArrayLike(obj) && _.keys(obj),
length = (keys || obj).length,
index = dir > 0 ? 0 : length - 1;
// Determine the initial value if none is provided.
if (arguments.length < 3) {
memo = obj[keys ? keys[index] : index];
index += dir;
}
return iterator(obj, iteratee, memo, keys, index, length);
};
}
// **Reduce** builds up a single result from a list of values, aka `inject`,
// or `foldl`.
_.reduce = _.foldl = _.inject = createReduce(1);
// The right-associative version of reduce, also known as `foldr`.
_.reduceRight = _.foldr = createReduce(-1);
// Return the first value which passes a truth test. Aliased as `detect`.
_.find = _.detect = function(obj, predicate, context) {
var key;
if (isArrayLike(obj)) {
key = _.findIndex(obj, predicate, context);
} else {
key = _.findKey(obj, predicate, context);
}
if (key !== void 0 && key !== -1) return obj[key];
};
// Return all the elements that pass a truth test.
// Aliased as `select`.
_.filter = _.select = function(obj, predicate, context) {
var results = [];
predicate = cb(predicate, context);
_.each(obj, function(value, index, list) {
if (predicate(value, index, list)) results.push(value);
});
return results;
};
// Return all the elements for which a truth test fails.
_.reject = function(obj, predicate, context) {
return _.filter(obj, _.negate(cb(predicate)), context);
};
// Determine whether all of the elements match a truth test.
// Aliased as `all`.
_.every = _.all = function(obj, predicate, context) {
predicate = cb(predicate, context);
var keys = !isArrayLike(obj) && _.keys(obj),
length = (keys || obj).length;
for (var index = 0; index < length; index++) {
var currentKey = keys ? keys[index] : index;
if (!predicate(obj[currentKey], currentKey, obj)) return false;
}
return true;
};
// Determine if at least one element in the object matches a truth test.
// Aliased as `any`.
_.some = _.any = function(obj, predicate, context) {
predicate = cb(predicate, context);
var keys = !isArrayLike(obj) && _.keys(obj),
length = (keys || obj).length;
for (var index = 0; index < length; index++) {
var currentKey = keys ? keys[index] : index;
if (predicate(obj[currentKey], currentKey, obj)) return true;
}
return false;
};
// Determine if the array or object contains a given item (using `===`).
// Aliased as `includes` and `include`.
_.contains = _.includes = _.include = function(obj, item, fromIndex, guard) {
if (!isArrayLike(obj)) obj = _.values(obj);
if (typeof fromIndex != 'number' || guard) fromIndex = 0;
return _.indexOf(obj, item, fromIndex) >= 0;
};
// Invoke a method (with arguments) on every item in a collection.
_.invoke = function(obj, method) {
var args = slice.call(arguments, 2);
var isFunc = _.isFunction(method);
return _.map(obj, function(value) {
var func = isFunc ? method : value[method];
return func == null ? func : func.apply(value, args);
});
};
// Convenience version of a common use case of `map`: fetching a property.
_.pluck = function(obj, key) {
return _.map(obj, _.property(key));
};
// Convenience version of a common use case of `filter`: selecting only objects
// containing specific `key:value` pairs.
_.where = function(obj, attrs) {
return _.filter(obj, _.matcher(attrs));
};
// Convenience version of a common use case of `find`: getting the first object
// containing specific `key:value` pairs.
_.findWhere = function(obj, attrs) {
return _.find(obj, _.matcher(attrs));
};
// Return the maximum element (or element-based computation).
_.max = function(obj, iteratee, context) {
var result = -Infinity, lastComputed = -Infinity,
value, computed;
if (iteratee == null && obj != null) {
obj = isArrayLike(obj) ? obj : _.values(obj);
for (var i = 0, length = obj.length; i < length; i++) {
value = obj[i];
if (value > result) {
result = value;
}
}
} else {
iteratee = cb(iteratee, context);
_.each(obj, function(value, index, list) {
computed = iteratee(value, index, list);
if (computed > lastComputed || computed === -Infinity && result === -Infinity) {
result = value;
lastComputed = computed;
}
});
}
return result;
};
// Return the minimum element (or element-based computation).
_.min = function(obj, iteratee, context) {
var result = Infinity, lastComputed = Infinity,
value, computed;
if (iteratee == null && obj != null) {
obj = isArrayLike(obj) ? obj : _.values(obj);
for (var i = 0, length = obj.length; i < length; i++) {
value = obj[i];
if (value < result) {
result = value;
}
}
} else {
iteratee = cb(iteratee, context);
_.each(obj, function(value, index, list) {
computed = iteratee(value, index, list);
if (computed < lastComputed || computed === Infinity && result === Infinity) {
result = value;
lastComputed = computed;
}
});
}
return result;
};
// Shuffle a collection, using the modern version of the
// [Fisher-Yates shuffle](http://en.wikipedia.org/wiki/FisherYates_shuffle).
_.shuffle = function(obj) {
var set = isArrayLike(obj) ? obj : _.values(obj);
var length = set.length;
var shuffled = Array(length);
for (var index = 0, rand; index < length; index++) {
rand = _.random(0, index);
if (rand !== index) shuffled[index] = shuffled[rand];
shuffled[rand] = set[index];
}
return shuffled;
};
// Sample **n** random values from a collection.
// If **n** is not specified, returns a single random element.
// The internal `guard` argument allows it to work with `map`.
_.sample = function(obj, n, guard) {
if (n == null || guard) {
if (!isArrayLike(obj)) obj = _.values(obj);
return obj[_.random(obj.length - 1)];
}
return _.shuffle(obj).slice(0, Math.max(0, n));
};
// Sort the object's values by a criterion produced by an iteratee.
_.sortBy = function(obj, iteratee, context) {
iteratee = cb(iteratee, context);
return _.pluck(_.map(obj, function(value, index, list) {
return {
value: value,
index: index,
criteria: iteratee(value, index, list)
};
}).sort(function(left, right) {
var a = left.criteria;
var b = right.criteria;
if (a !== b) {
if (a > b || a === void 0) return 1;
if (a < b || b === void 0) return -1;
}
return left.index - right.index;
}), 'value');
};
// An internal function used for aggregate "group by" operations.
var group = function(behavior) {
return function(obj, iteratee, context) {
var result = {};
iteratee = cb(iteratee, context);
_.each(obj, function(value, index) {
var key = iteratee(value, index, obj);
behavior(result, value, key);
});
return result;
};
};
// Groups the object's values by a criterion. Pass either a string attribute
// to group by, or a function that returns the criterion.
_.groupBy = group(function(result, value, key) {
if (_.has(result, key)) result[key].push(value); else result[key] = [value];
});
// Indexes the object's values by a criterion, similar to `groupBy`, but for
// when you know that your index values will be unique.
_.indexBy = group(function(result, value, key) {
result[key] = value;
});
// Counts instances of an object that group by a certain criterion. Pass
// either a string attribute to count by, or a function that returns the
// criterion.
_.countBy = group(function(result, value, key) {
if (_.has(result, key)) result[key]++; else result[key] = 1;
});
// Safely create a real, live array from anything iterable.
_.toArray = function(obj) {
if (!obj) return [];
if (_.isArray(obj)) return slice.call(obj);
if (isArrayLike(obj)) return _.map(obj, _.identity);
return _.values(obj);
};
// Return the number of elements in an object.
_.size = function(obj) {
if (obj == null) return 0;
return isArrayLike(obj) ? obj.length : _.keys(obj).length;
};
// Split a collection into two arrays: one whose elements all satisfy the given
// predicate, and one whose elements all do not satisfy the predicate.
_.partition = function(obj, predicate, context) {
predicate = cb(predicate, context);
var pass = [], fail = [];
_.each(obj, function(value, key, obj) {
(predicate(value, key, obj) ? pass : fail).push(value);
});
return [pass, fail];
};
// Array Functions
// ---------------
// Get the first element of an array. Passing **n** will return the first N
// values in the array. Aliased as `head` and `take`. The **guard** check
// allows it to work with `_.map`.
_.first = _.head = _.take = function(array, n, guard) {
if (array == null) return void 0;
if (n == null || guard) return array[0];
return _.initial(array, array.length - n);
};
// Returns everything but the last entry of the array. Especially useful on
// the arguments object. Passing **n** will return all the values in
// the array, excluding the last N.
_.initial = function(array, n, guard) {
return slice.call(array, 0, Math.max(0, array.length - (n == null || guard ? 1 : n)));
};
// Get the last element of an array. Passing **n** will return the last N
// values in the array.
_.last = function(array, n, guard) {
if (array == null) return void 0;
if (n == null || guard) return array[array.length - 1];
return _.rest(array, Math.max(0, array.length - n));
};
// Returns everything but the first entry of the array. Aliased as `tail` and `drop`.
// Especially useful on the arguments object. Passing an **n** will return
// the rest N values in the array.
_.rest = _.tail = _.drop = function(array, n, guard) {
return slice.call(array, n == null || guard ? 1 : n);
};
// Trim out all falsy values from an array.
_.compact = function(array) {
return _.filter(array, _.identity);
};
// Internal implementation of a recursive `flatten` function.
var flatten = function(input, shallow, strict, startIndex) {
var output = [], idx = 0;
for (var i = startIndex || 0, length = getLength(input); i < length; i++) {
var value = input[i];
if (isArrayLike(value) && (_.isArray(value) || _.isArguments(value))) {
//flatten current level of array or arguments object
if (!shallow) value = flatten(value, shallow, strict);
var j = 0, len = value.length;
output.length += len;
while (j < len) {
output[idx++] = value[j++];
}
} else if (!strict) {
output[idx++] = value;
}
}
return output;
};
// Flatten out an array, either recursively (by default), or just one level.
_.flatten = function(array, shallow) {
return flatten(array, shallow, false);
};
// Return a version of the array that does not contain the specified value(s).
_.without = function(array) {
return _.difference(array, slice.call(arguments, 1));
};
// Produce a duplicate-free version of the array. If the array has already
// been sorted, you have the option of using a faster algorithm.
// Aliased as `unique`.
_.uniq = _.unique = function(array, isSorted, iteratee, context) {
if (!_.isBoolean(isSorted)) {
context = iteratee;
iteratee = isSorted;
isSorted = false;
}
if (iteratee != null) iteratee = cb(iteratee, context);
var result = [];
var seen = [];
for (var i = 0, length = getLength(array); i < length; i++) {
var value = array[i],
computed = iteratee ? iteratee(value, i, array) : value;
if (isSorted) {
if (!i || seen !== computed) result.push(value);
seen = computed;
} else if (iteratee) {
if (!_.contains(seen, computed)) {
seen.push(computed);
result.push(value);
}
} else if (!_.contains(result, value)) {
result.push(value);
}
}
return result;
};
// Produce an array that contains the union: each distinct element from all of
// the passed-in arrays.
_.union = function() {
return _.uniq(flatten(arguments, true, true));
};
// Produce an array that contains every item shared between all the
// passed-in arrays.
_.intersection = function(array) {
var result = [];
var argsLength = arguments.length;
for (var i = 0, length = getLength(array); i < length; i++) {
var item = array[i];
if (_.contains(result, item)) continue;
for (var j = 1; j < argsLength; j++) {
if (!_.contains(arguments[j], item)) break;
}
if (j === argsLength) result.push(item);
}
return result;
};
// Take the difference between one array and a number of other arrays.
// Only the elements present in just the first array will remain.
_.difference = function(array) {
var rest = flatten(arguments, true, true, 1);
return _.filter(array, function(value){
return !_.contains(rest, value);
});
};
// Zip together multiple lists into a single array -- elements that share
// an index go together.
_.zip = function() {
return _.unzip(arguments);
};
// Complement of _.zip. Unzip accepts an array of arrays and groups
// each array's elements on shared indices
_.unzip = function(array) {
var length = array && _.max(array, getLength).length || 0;
var result = Array(length);
for (var index = 0; index < length; index++) {
result[index] = _.pluck(array, index);
}
return result;
};
// Converts lists into objects. Pass either a single array of `[key, value]`
// pairs, or two parallel arrays of the same length -- one of keys, and one of
// the corresponding values.
_.object = function(list, values) {
var result = {};
for (var i = 0, length = getLength(list); i < length; i++) {
if (values) {
result[list[i]] = values[i];
} else {
result[list[i][0]] = list[i][1];
}
}
return result;
};
// Generator function to create the findIndex and findLastIndex functions
function createPredicateIndexFinder(dir) {
return function(array, predicate, context) {
predicate = cb(predicate, context);
var length = getLength(array);
var index = dir > 0 ? 0 : length - 1;
for (; index >= 0 && index < length; index += dir) {
if (predicate(array[index], index, array)) return index;
}
return -1;
};
}
// Returns the first index on an array-like that passes a predicate test
_.findIndex = createPredicateIndexFinder(1);
_.findLastIndex = createPredicateIndexFinder(-1);
// Use a comparator function to figure out the smallest index at which
// an object should be inserted so as to maintain order. Uses binary search.
_.sortedIndex = function(array, obj, iteratee, context) {
iteratee = cb(iteratee, context, 1);
var value = iteratee(obj);
var low = 0, high = getLength(array);
while (low < high) {
var mid = Math.floor((low + high) / 2);
if (iteratee(array[mid]) < value) low = mid + 1; else high = mid;
}
return low;
};
// Generator function to create the indexOf and lastIndexOf functions
function createIndexFinder(dir, predicateFind, sortedIndex) {
return function(array, item, idx) {
var i = 0, length = getLength(array);
if (typeof idx == 'number') {
if (dir > 0) {
i = idx >= 0 ? idx : Math.max(idx + length, i);
} else {
length = idx >= 0 ? Math.min(idx + 1, length) : idx + length + 1;
}
} else if (sortedIndex && idx && length) {
idx = sortedIndex(array, item);
return array[idx] === item ? idx : -1;
}
if (item !== item) {
idx = predicateFind(slice.call(array, i, length), _.isNaN);
return idx >= 0 ? idx + i : -1;
}
for (idx = dir > 0 ? i : length - 1; idx >= 0 && idx < length; idx += dir) {
if (array[idx] === item) return idx;
}
return -1;
};
}
// Return the position of the first occurrence of an item in an array,
// or -1 if the item is not included in the array.
// If the array is large and already in sort order, pass `true`
// for **isSorted** to use binary search.
_.indexOf = createIndexFinder(1, _.findIndex, _.sortedIndex);
_.lastIndexOf = createIndexFinder(-1, _.findLastIndex);
// Generate an integer Array containing an arithmetic progression. A port of
// the native Python `range()` function. See
// [the Python documentation](http://docs.python.org/library/functions.html#range).
_.range = function(start, stop, step) {
if (stop == null) {
stop = start || 0;
start = 0;
}
step = step || 1;
var length = Math.max(Math.ceil((stop - start) / step), 0);
var range = Array(length);
for (var idx = 0; idx < length; idx++, start += step) {
range[idx] = start;
}
return range;
};
// Function (ahem) Functions
// ------------------
// Determines whether to execute a function as a constructor
// or a normal function with the provided arguments
var executeBound = function(sourceFunc, boundFunc, context, callingContext, args) {
if (!(callingContext instanceof boundFunc)) return sourceFunc.apply(context, args);
var self = baseCreate(sourceFunc.prototype);
var result = sourceFunc.apply(self, args);
if (_.isObject(result)) return result;
return self;
};
// Create a function bound to a given object (assigning `this`, and arguments,
// optionally). Delegates to **ECMAScript 5**'s native `Function.bind` if
// available.
_.bind = function(func, context) {
if (nativeBind && func.bind === nativeBind) return nativeBind.apply(func, slice.call(arguments, 1));
if (!_.isFunction(func)) throw new TypeError('Bind must be called on a function');
var args = slice.call(arguments, 2);
var bound = function() {
return executeBound(func, bound, context, this, args.concat(slice.call(arguments)));
};
return bound;
};
// Partially apply a function by creating a version that has had some of its
// arguments pre-filled, without changing its dynamic `this` context. _ acts
// as a placeholder, allowing any combination of arguments to be pre-filled.
_.partial = function(func) {
var boundArgs = slice.call(arguments, 1);
var bound = function() {
var position = 0, length = boundArgs.length;
var args = Array(length);
for (var i = 0; i < length; i++) {
args[i] = boundArgs[i] === _ ? arguments[position++] : boundArgs[i];
}
while (position < arguments.length) args.push(arguments[position++]);
return executeBound(func, bound, this, this, args);
};
return bound;
};
// Bind a number of an object's methods to that object. Remaining arguments
// are the method names to be bound. Useful for ensuring that all callbacks
// defined on an object belong to it.
_.bindAll = function(obj) {
var i, length = arguments.length, key;
if (length <= 1) throw new Error('bindAll must be passed function names');
for (i = 1; i < length; i++) {
key = arguments[i];
obj[key] = _.bind(obj[key], obj);
}
return obj;
};
// Memoize an expensive function by storing its results.
_.memoize = function(func, hasher) {
var memoize = function(key) {
var cache = memoize.cache;
var address = '' + (hasher ? hasher.apply(this, arguments) : key);
if (!_.has(cache, address)) cache[address] = func.apply(this, arguments);
return cache[address];
};
memoize.cache = {};
return memoize;
};
// Delays a function for the given number of milliseconds, and then calls
// it with the arguments supplied.
_.delay = function(func, wait) {
var args = slice.call(arguments, 2);
return setTimeout(function(){
return func.apply(null, args);
}, wait);
};
// Defers a function, scheduling it to run after the current call stack has
// cleared.
_.defer = _.partial(_.delay, _, 1);
// Returns a function, that, when invoked, will only be triggered at most once
// during a given window of time. Normally, the throttled function will run
// as much as it can, without ever going more than once per `wait` duration;
// but if you'd like to disable the execution on the leading edge, pass
// `{leading: false}`. To disable execution on the trailing edge, ditto.
_.throttle = function(func, wait, options) {
var context, args, result;
var timeout = null;
var previous = 0;
if (!options) options = {};
var later = function() {
previous = options.leading === false ? 0 : _.now();
timeout = null;
result = func.apply(context, args);
if (!timeout) context = args = null;
};
return function() {
var now = _.now();
if (!previous && options.leading === false) previous = now;
var remaining = wait - (now - previous);
context = this;
args = arguments;
if (remaining <= 0 || remaining > wait) {
if (timeout) {
clearTimeout(timeout);
timeout = null;
}
previous = now;
result = func.apply(context, args);
if (!timeout) context = args = null;
} else if (!timeout && options.trailing !== false) {
timeout = setTimeout(later, remaining);
}
return result;
};
};
// Returns a function, that, as long as it continues to be invoked, will not
// be triggered. The function will be called after it stops being called for
// N milliseconds. If `immediate` is passed, trigger the function on the
// leading edge, instead of the trailing.
_.debounce = function(func, wait, immediate) {
var timeout, args, context, timestamp, result;
var later = function() {
var last = _.now() - timestamp;
if (last < wait && last >= 0) {
timeout = setTimeout(later, wait - last);
} else {
timeout = null;
if (!immediate) {
result = func.apply(context, args);
if (!timeout) context = args = null;
}
}
};
return function() {
context = this;
args = arguments;
timestamp = _.now();
var callNow = immediate && !timeout;
if (!timeout) timeout = setTimeout(later, wait);
if (callNow) {
result = func.apply(context, args);
context = args = null;
}
return result;
};
};
// Returns the first function passed as an argument to the second,
// allowing you to adjust arguments, run code before and after, and
// conditionally execute the original function.
_.wrap = function(func, wrapper) {
return _.partial(wrapper, func);
};
// Returns a negated version of the passed-in predicate.
_.negate = function(predicate) {
return function() {
return !predicate.apply(this, arguments);
};
};
// Returns a function that is the composition of a list of functions, each
// consuming the return value of the function that follows.
_.compose = function() {
var args = arguments;
var start = args.length - 1;
return function() {
var i = start;
var result = args[start].apply(this, arguments);
while (i--) result = args[i].call(this, result);
return result;
};
};
// Returns a function that will only be executed on and after the Nth call.
_.after = function(times, func) {
return function() {
if (--times < 1) {
return func.apply(this, arguments);
}
};
};
// Returns a function that will only be executed up to (but not including) the Nth call.
_.before = function(times, func) {
var memo;
return function() {
if (--times > 0) {
memo = func.apply(this, arguments);
}
if (times <= 1) func = null;
return memo;
};
};
// Returns a function that will be executed at most one time, no matter how
// often you call it. Useful for lazy initialization.
_.once = _.partial(_.before, 2);
// Object Functions
// ----------------
// Keys in IE < 9 that won't be iterated by `for key in ...` and thus missed.
var hasEnumBug = !{toString: null}.propertyIsEnumerable('toString');
var nonEnumerableProps = ['valueOf', 'isPrototypeOf', 'toString',
'propertyIsEnumerable', 'hasOwnProperty', 'toLocaleString'];
function collectNonEnumProps(obj, keys) {
var nonEnumIdx = nonEnumerableProps.length;
var constructor = obj.constructor;
var proto = (_.isFunction(constructor) && constructor.prototype) || ObjProto;
// Constructor is a special case.
var prop = 'constructor';
if (_.has(obj, prop) && !_.contains(keys, prop)) keys.push(prop);
while (nonEnumIdx--) {
prop = nonEnumerableProps[nonEnumIdx];
if (prop in obj && obj[prop] !== proto[prop] && !_.contains(keys, prop)) {
keys.push(prop);
}
}
}
// Retrieve the names of an object's own properties.
// Delegates to **ECMAScript 5**'s native `Object.keys`
_.keys = function(obj) {
if (!_.isObject(obj)) return [];
if (nativeKeys) return nativeKeys(obj);
var keys = [];
for (var key in obj) if (_.has(obj, key)) keys.push(key);
// Ahem, IE < 9.
if (hasEnumBug) collectNonEnumProps(obj, keys);
return keys;
};
// Retrieve all the property names of an object.
_.allKeys = function(obj) {
if (!_.isObject(obj)) return [];
var keys = [];
for (var key in obj) keys.push(key);
// Ahem, IE < 9.
if (hasEnumBug) collectNonEnumProps(obj, keys);
return keys;
};
// Retrieve the values of an object's properties.
_.values = function(obj) {
var keys = _.keys(obj);
var length = keys.length;
var values = Array(length);
for (var i = 0; i < length; i++) {
values[i] = obj[keys[i]];
}
return values;
};
// Returns the results of applying the iteratee to each element of the object
// In contrast to _.map it returns an object
_.mapObject = function(obj, iteratee, context) {
iteratee = cb(iteratee, context);
var keys = _.keys(obj),
length = keys.length,
results = {},
currentKey;
for (var index = 0; index < length; index++) {
currentKey = keys[index];
results[currentKey] = iteratee(obj[currentKey], currentKey, obj);
}
return results;
};
// Convert an object into a list of `[key, value]` pairs.
_.pairs = function(obj) {
var keys = _.keys(obj);
var length = keys.length;
var pairs = Array(length);
for (var i = 0; i < length; i++) {
pairs[i] = [keys[i], obj[keys[i]]];
}
return pairs;
};
// Invert the keys and values of an object. The values must be serializable.
_.invert = function(obj) {
var result = {};
var keys = _.keys(obj);
for (var i = 0, length = keys.length; i < length; i++) {
result[obj[keys[i]]] = keys[i];
}
return result;
};
// Return a sorted list of the function names available on the object.
// Aliased as `methods`
_.functions = _.methods = function(obj) {
var names = [];
for (var key in obj) {
if (_.isFunction(obj[key])) names.push(key);
}
return names.sort();
};
// Extend a given object with all the properties in passed-in object(s).
_.extend = createAssigner(_.allKeys);
// Assigns a given object with all the own properties in the passed-in object(s)
// (https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Object/assign)
_.extendOwn = _.assign = createAssigner(_.keys);
// Returns the first key on an object that passes a predicate test
_.findKey = function(obj, predicate, context) {
predicate = cb(predicate, context);
var keys = _.keys(obj), key;
for (var i = 0, length = keys.length; i < length; i++) {
key = keys[i];
if (predicate(obj[key], key, obj)) return key;
}
};
// Return a copy of the object only containing the whitelisted properties.
_.pick = function(object, oiteratee, context) {
var result = {}, obj = object, iteratee, keys;
if (obj == null) return result;
if (_.isFunction(oiteratee)) {
keys = _.allKeys(obj);
iteratee = optimizeCb(oiteratee, context);
} else {
keys = flatten(arguments, false, false, 1);
iteratee = function(value, key, obj) { return key in obj; };
obj = Object(obj);
}
for (var i = 0, length = keys.length; i < length; i++) {
var key = keys[i];
var value = obj[key];
if (iteratee(value, key, obj)) result[key] = value;
}
return result;
};
// Return a copy of the object without the blacklisted properties.
_.omit = function(obj, iteratee, context) {
if (_.isFunction(iteratee)) {
iteratee = _.negate(iteratee);
} else {
var keys = _.map(flatten(arguments, false, false, 1), String);
iteratee = function(value, key) {
return !_.contains(keys, key);
};
}
return _.pick(obj, iteratee, context);
};
// Fill in a given object with default properties.
_.defaults = createAssigner(_.allKeys, true);
// Creates an object that inherits from the given prototype object.
// If additional properties are provided then they will be added to the
// created object.
_.create = function(prototype, props) {
var result = baseCreate(prototype);
if (props) _.extendOwn(result, props);
return result;
};
// Create a (shallow-cloned) duplicate of an object.
_.clone = function(obj) {
if (!_.isObject(obj)) return obj;
return _.isArray(obj) ? obj.slice() : _.extend({}, obj);
};
// Invokes interceptor with the obj, and then returns obj.
// The primary purpose of this method is to "tap into" a method chain, in
// order to perform operations on intermediate results within the chain.
_.tap = function(obj, interceptor) {
interceptor(obj);
return obj;
};
// Returns whether an object has a given set of `key:value` pairs.
_.isMatch = function(object, attrs) {
var keys = _.keys(attrs), length = keys.length;
if (object == null) return !length;
var obj = Object(object);
for (var i = 0; i < length; i++) {
var key = keys[i];
if (attrs[key] !== obj[key] || !(key in obj)) return false;
}
return true;
};
// Internal recursive comparison function for `isEqual`.
var eq = function(a, b, aStack, bStack) {
// Identical objects are equal. `0 === -0`, but they aren't identical.
// See the [Harmony `egal` proposal](http://wiki.ecmascript.org/doku.php?id=harmony:egal).
if (a === b) return a !== 0 || 1 / a === 1 / b;
// A strict comparison is necessary because `null == undefined`.
if (a == null || b == null) return a === b;
// Unwrap any wrapped objects.
if (a instanceof _) a = a._wrapped;
if (b instanceof _) b = b._wrapped;
// Compare `[[Class]]` names.
var className = toString.call(a);
if (className !== toString.call(b)) return false;
switch (className) {
// Strings, numbers, regular expressions, dates, and booleans are compared by value.
case '[object RegExp]':
// RegExps are coerced to strings for comparison (Note: '' + /a/i === '/a/i')
case '[object String]':
// Primitives and their corresponding object wrappers are equivalent; thus, `"5"` is
// equivalent to `new String("5")`.
return '' + a === '' + b;
case '[object Number]':
// `NaN`s are equivalent, but non-reflexive.
// Object(NaN) is equivalent to NaN
if (+a !== +a) return +b !== +b;
// An `egal` comparison is performed for other numeric values.
return +a === 0 ? 1 / +a === 1 / b : +a === +b;
case '[object Date]':
case '[object Boolean]':
// Coerce dates and booleans to numeric primitive values. Dates are compared by their
// millisecond representations. Note that invalid dates with millisecond representations
// of `NaN` are not equivalent.
return +a === +b;
}
var areArrays = className === '[object Array]';
if (!areArrays) {
if (typeof a != 'object' || typeof b != 'object') return false;
// Objects with different constructors are not equivalent, but `Object`s or `Array`s
// from different frames are.
var aCtor = a.constructor, bCtor = b.constructor;
if (aCtor !== bCtor && !(_.isFunction(aCtor) && aCtor instanceof aCtor &&
_.isFunction(bCtor) && bCtor instanceof bCtor)
&& ('constructor' in a && 'constructor' in b)) {
return false;
}
}
// Assume equality for cyclic structures. The algorithm for detecting cyclic
// structures is adapted from ES 5.1 section 15.12.3, abstract operation `JO`.
// Initializing stack of traversed objects.
// It's done here since we only need them for objects and arrays comparison.
aStack = aStack || [];
bStack = bStack || [];
var length = aStack.length;
while (length--) {
// Linear search. Performance is inversely proportional to the number of
// unique nested structures.
if (aStack[length] === a) return bStack[length] === b;
}
// Add the first object to the stack of traversed objects.
aStack.push(a);
bStack.push(b);
// Recursively compare objects and arrays.
if (areArrays) {
// Compare array lengths to determine if a deep comparison is necessary.
length = a.length;
if (length !== b.length) return false;
// Deep compare the contents, ignoring non-numeric properties.
while (length--) {
if (!eq(a[length], b[length], aStack, bStack)) return false;
}
} else {
// Deep compare objects.
var keys = _.keys(a), key;
length = keys.length;
// Ensure that both objects contain the same number of properties before comparing deep equality.
if (_.keys(b).length !== length) return false;
while (length--) {
// Deep compare each member
key = keys[length];
if (!(_.has(b, key) && eq(a[key], b[key], aStack, bStack))) return false;
}
}
// Remove the first object from the stack of traversed objects.
aStack.pop();
bStack.pop();
return true;
};
// Perform a deep comparison to check if two objects are equal.
_.isEqual = function(a, b) {
return eq(a, b);
};
// Is a given array, string, or object empty?
// An "empty" object has no enumerable own-properties.
_.isEmpty = function(obj) {
if (obj == null) return true;
if (isArrayLike(obj) && (_.isArray(obj) || _.isString(obj) || _.isArguments(obj))) return obj.length === 0;
return _.keys(obj).length === 0;
};
// Is a given value a DOM element?
_.isElement = function(obj) {
return !!(obj && obj.nodeType === 1);
};
// Is a given value an array?
// Delegates to ECMA5's native Array.isArray
_.isArray = nativeIsArray || function(obj) {
return toString.call(obj) === '[object Array]';
};
// Is a given variable an object?
_.isObject = function(obj) {
var type = typeof obj;
return type === 'function' || type === 'object' && !!obj;
};
// Add some isType methods: isArguments, isFunction, isString, isNumber, isDate, isRegExp, isError.
_.each(['Arguments', 'Function', 'String', 'Number', 'Date', 'RegExp', 'Error'], function(name) {
_['is' + name] = function(obj) {
return toString.call(obj) === '[object ' + name + ']';
};
});
// Define a fallback version of the method in browsers (ahem, IE < 9), where
// there isn't any inspectable "Arguments" type.
if (!_.isArguments(arguments)) {
_.isArguments = function(obj) {
return _.has(obj, 'callee');
};
}
// Optimize `isFunction` if appropriate. Work around some typeof bugs in old v8,
// IE 11 (#1621), and in Safari 8 (#1929).
if (typeof /./ != 'function' && typeof Int8Array != 'object') {
_.isFunction = function(obj) {
return typeof obj == 'function' || false;
};
}
// Is a given object a finite number?
_.isFinite = function(obj) {
return isFinite(obj) && !isNaN(parseFloat(obj));
};
// Is the given value `NaN`? (NaN is the only number which does not equal itself).
_.isNaN = function(obj) {
return _.isNumber(obj) && obj !== +obj;
};
// Is a given value a boolean?
_.isBoolean = function(obj) {
return obj === true || obj === false || toString.call(obj) === '[object Boolean]';
};
// Is a given value equal to null?
_.isNull = function(obj) {
return obj === null;
};
// Is a given variable undefined?
_.isUndefined = function(obj) {
return obj === void 0;
};
// Shortcut function for checking if an object has a given property directly
// on itself (in other words, not on a prototype).
_.has = function(obj, key) {
return obj != null && hasOwnProperty.call(obj, key);
};
// Utility Functions
// -----------------
// Run Underscore.js in *noConflict* mode, returning the `_` variable to its
// previous owner. Returns a reference to the Underscore object.
_.noConflict = function() {
root._ = previousUnderscore;
return this;
};
// Keep the identity function around for default iteratees.
_.identity = function(value) {
return value;
};
// Predicate-generating functions. Often useful outside of Underscore.
_.constant = function(value) {
return function() {
return value;
};
};
_.noop = function(){};
_.property = property;
// Generates a function for a given object that returns a given property.
_.propertyOf = function(obj) {
return obj == null ? function(){} : function(key) {
return obj[key];
};
};
// Returns a predicate for checking whether an object has a given set of
// `key:value` pairs.
_.matcher = _.matches = function(attrs) {
attrs = _.extendOwn({}, attrs);
return function(obj) {
return _.isMatch(obj, attrs);
};
};
// Run a function **n** times.
_.times = function(n, iteratee, context) {
var accum = Array(Math.max(0, n));
iteratee = optimizeCb(iteratee, context, 1);
for (var i = 0; i < n; i++) accum[i] = iteratee(i);
return accum;
};
// Return a random integer between min and max (inclusive).
_.random = function(min, max) {
if (max == null) {
max = min;
min = 0;
}
return min + Math.floor(Math.random() * (max - min + 1));
};
// A (possibly faster) way to get the current timestamp as an integer.
_.now = Date.now || function() {
return new Date().getTime();
};
// List of HTML entities for escaping.
var escapeMap = {
'&': '&amp;',
'<': '&lt;',
'>': '&gt;',
'"': '&quot;',
"'": '&#x27;',
'`': '&#x60;'
};
var unescapeMap = _.invert(escapeMap);
// Functions for escaping and unescaping strings to/from HTML interpolation.
var createEscaper = function(map) {
var escaper = function(match) {
return map[match];
};
// Regexes for identifying a key that needs to be escaped
var source = '(?:' + _.keys(map).join('|') + ')';
var testRegexp = RegExp(source);
var replaceRegexp = RegExp(source, 'g');
return function(string) {
string = string == null ? '' : '' + string;
return testRegexp.test(string) ? string.replace(replaceRegexp, escaper) : string;
};
};
_.escape = createEscaper(escapeMap);
_.unescape = createEscaper(unescapeMap);
// If the value of the named `property` is a function then invoke it with the
// `object` as context; otherwise, return it.
_.result = function(object, property, fallback) {
var value = object == null ? void 0 : object[property];
if (value === void 0) {
value = fallback;
}
return _.isFunction(value) ? value.call(object) : value;
};
// Generate a unique integer id (unique within the entire client session).
// Useful for temporary DOM ids.
var idCounter = 0;
_.uniqueId = function(prefix) {
var id = ++idCounter + '';
return prefix ? prefix + id : id;
};
// By default, Underscore uses ERB-style template delimiters, change the
// following template settings to use alternative delimiters.
_.templateSettings = {
evaluate : /<%([\s\S]+?)%>/g,
interpolate : /<%=([\s\S]+?)%>/g,
escape : /<%-([\s\S]+?)%>/g
};
// When customizing `templateSettings`, if you don't want to define an
// interpolation, evaluation or escaping regex, we need one that is
// guaranteed not to match.
var noMatch = /(.)^/;
// Certain characters need to be escaped so that they can be put into a
// string literal.
var escapes = {
"'": "'",
'\\': '\\',
'\r': 'r',
'\n': 'n',
'\u2028': 'u2028',
'\u2029': 'u2029'
};
var escaper = /\\|'|\r|\n|\u2028|\u2029/g;
var escapeChar = function(match) {
return '\\' + escapes[match];
};
// JavaScript micro-templating, similar to John Resig's implementation.
// Underscore templating handles arbitrary delimiters, preserves whitespace,
// and correctly escapes quotes within interpolated code.
// NB: `oldSettings` only exists for backwards compatibility.
_.template = function(text, settings, oldSettings) {
if (!settings && oldSettings) settings = oldSettings;
settings = _.defaults({}, settings, _.templateSettings);
// Combine delimiters into one regular expression via alternation.
var matcher = RegExp([
(settings.escape || noMatch).source,
(settings.interpolate || noMatch).source,
(settings.evaluate || noMatch).source
].join('|') + '|$', 'g');
// Compile the template source, escaping string literals appropriately.
var index = 0;
var source = "__p+='";
text.replace(matcher, function(match, escape, interpolate, evaluate, offset) {
source += text.slice(index, offset).replace(escaper, escapeChar);
index = offset + match.length;
if (escape) {
source += "'+\n((__t=(" + escape + "))==null?'':_.escape(__t))+\n'";
} else if (interpolate) {
source += "'+\n((__t=(" + interpolate + "))==null?'':__t)+\n'";
} else if (evaluate) {
source += "';\n" + evaluate + "\n__p+='";
}
// Adobe VMs need the match returned to produce the correct offest.
return match;
});
source += "';\n";
// If a variable is not specified, place data values in local scope.
if (!settings.variable) source = 'with(obj||{}){\n' + source + '}\n';
source = "var __t,__p='',__j=Array.prototype.join," +
"print=function(){__p+=__j.call(arguments,'');};\n" +
source + 'return __p;\n';
try {
var render = new Function(settings.variable || 'obj', '_', source);
} catch (e) {
e.source = source;
throw e;
}
var template = function(data) {
return render.call(this, data, _);
};
// Provide the compiled source as a convenience for precompilation.
var argument = settings.variable || 'obj';
template.source = 'function(' + argument + '){\n' + source + '}';
return template;
};
// Add a "chain" function. Start chaining a wrapped Underscore object.
_.chain = function(obj) {
var instance = _(obj);
instance._chain = true;
return instance;
};
// OOP
// ---------------
// If Underscore is called as a function, it returns a wrapped object that
// can be used OO-style. This wrapper holds altered versions of all the
// underscore functions. Wrapped objects may be chained.
// Helper function to continue chaining intermediate results.
var result = function(instance, obj) {
return instance._chain ? _(obj).chain() : obj;
};
// Add your own custom functions to the Underscore object.
_.mixin = function(obj) {
_.each(_.functions(obj), function(name) {
var func = _[name] = obj[name];
_.prototype[name] = function() {
var args = [this._wrapped];
push.apply(args, arguments);
return result(this, func.apply(_, args));
};
});
};
// Add all of the Underscore functions to the wrapper object.
_.mixin(_);
// Add all mutator Array functions to the wrapper.
_.each(['pop', 'push', 'reverse', 'shift', 'sort', 'splice', 'unshift'], function(name) {
var method = ArrayProto[name];
_.prototype[name] = function() {
var obj = this._wrapped;
method.apply(obj, arguments);
if ((name === 'shift' || name === 'splice') && obj.length === 0) delete obj[0];
return result(this, obj);
};
});
// Add all accessor Array functions to the wrapper.
_.each(['concat', 'join', 'slice'], function(name) {
var method = ArrayProto[name];
_.prototype[name] = function() {
return result(this, method.apply(this._wrapped, arguments));
};
});
// Extracts the result from a wrapped and chained object.
_.prototype.value = function() {
return this._wrapped;
};
// Provide unwrapping proxy for some methods used in engine operations
// such as arithmetic and JSON stringification.
_.prototype.valueOf = _.prototype.toJSON = _.prototype.value;
_.prototype.toString = function() {
return '' + this._wrapped;
};
// AMD registration happens at the end for compatibility with AMD loaders
// that may not enforce next-turn semantics on modules. Even though general
// practice for AMD registration is to be anonymous, underscore registers
// as a named module because, like jQuery, it is a base library that is
// popular enough to be bundled in a third party lib, but not be part of
// an AMD load request. Those cases could generate an error when an
// anonymous define() is called outside of a loader request.
if (typeof define === 'function' && define.amd) {
define('underscore', [], function() {
return _;
});
}
}.call(this));

Binary file not shown.

After

Width:  |  Height:  |  Size: 214 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 203 B

View File

@ -0,0 +1,808 @@
/*
* websupport.js
* ~~~~~~~~~~~~~
*
* sphinx.websupport utilities for all documentation.
*
* :copyright: Copyright 2007-2018 by the Sphinx team, see AUTHORS.
* :license: BSD, see LICENSE for details.
*
*/
(function($) {
$.fn.autogrow = function() {
return this.each(function() {
var textarea = this;
$.fn.autogrow.resize(textarea);
$(textarea)
.focus(function() {
textarea.interval = setInterval(function() {
$.fn.autogrow.resize(textarea);
}, 500);
})
.blur(function() {
clearInterval(textarea.interval);
});
});
};
$.fn.autogrow.resize = function(textarea) {
var lineHeight = parseInt($(textarea).css('line-height'), 10);
var lines = textarea.value.split('\n');
var columns = textarea.cols;
var lineCount = 0;
$.each(lines, function() {
lineCount += Math.ceil(this.length / columns) || 1;
});
var height = lineHeight * (lineCount + 1);
$(textarea).css('height', height);
};
})(jQuery);
(function($) {
var comp, by;
function init() {
initEvents();
initComparator();
}
function initEvents() {
$(document).on("click", 'a.comment-close', function(event) {
event.preventDefault();
hide($(this).attr('id').substring(2));
});
$(document).on("click", 'a.vote', function(event) {
event.preventDefault();
handleVote($(this));
});
$(document).on("click", 'a.reply', function(event) {
event.preventDefault();
openReply($(this).attr('id').substring(2));
});
$(document).on("click", 'a.close-reply', function(event) {
event.preventDefault();
closeReply($(this).attr('id').substring(2));
});
$(document).on("click", 'a.sort-option', function(event) {
event.preventDefault();
handleReSort($(this));
});
$(document).on("click", 'a.show-proposal', function(event) {
event.preventDefault();
showProposal($(this).attr('id').substring(2));
});
$(document).on("click", 'a.hide-proposal', function(event) {
event.preventDefault();
hideProposal($(this).attr('id').substring(2));
});
$(document).on("click", 'a.show-propose-change', function(event) {
event.preventDefault();
showProposeChange($(this).attr('id').substring(2));
});
$(document).on("click", 'a.hide-propose-change', function(event) {
event.preventDefault();
hideProposeChange($(this).attr('id').substring(2));
});
$(document).on("click", 'a.accept-comment', function(event) {
event.preventDefault();
acceptComment($(this).attr('id').substring(2));
});
$(document).on("click", 'a.delete-comment', function(event) {
event.preventDefault();
deleteComment($(this).attr('id').substring(2));
});
$(document).on("click", 'a.comment-markup', function(event) {
event.preventDefault();
toggleCommentMarkupBox($(this).attr('id').substring(2));
});
}
/**
* Set comp, which is a comparator function used for sorting and
* inserting comments into the list.
*/
function setComparator() {
// If the first three letters are "asc", sort in ascending order
// and remove the prefix.
if (by.substring(0,3) == 'asc') {
var i = by.substring(3);
comp = function(a, b) { return a[i] - b[i]; };
} else {
// Otherwise sort in descending order.
comp = function(a, b) { return b[by] - a[by]; };
}
// Reset link styles and format the selected sort option.
$('a.sel').attr('href', '#').removeClass('sel');
$('a.by' + by).removeAttr('href').addClass('sel');
}
/**
* Create a comp function. If the user has preferences stored in
* the sortBy cookie, use those, otherwise use the default.
*/
function initComparator() {
by = 'rating'; // Default to sort by rating.
// If the sortBy cookie is set, use that instead.
if (document.cookie.length > 0) {
var start = document.cookie.indexOf('sortBy=');
if (start != -1) {
start = start + 7;
var end = document.cookie.indexOf(";", start);
if (end == -1) {
end = document.cookie.length;
by = unescape(document.cookie.substring(start, end));
}
}
}
setComparator();
}
/**
* Show a comment div.
*/
function show(id) {
$('#ao' + id).hide();
$('#ah' + id).show();
var context = $.extend({id: id}, opts);
var popup = $(renderTemplate(popupTemplate, context)).hide();
popup.find('textarea[name="proposal"]').hide();
popup.find('a.by' + by).addClass('sel');
var form = popup.find('#cf' + id);
form.submit(function(event) {
event.preventDefault();
addComment(form);
});
$('#s' + id).after(popup);
popup.slideDown('fast', function() {
getComments(id);
});
}
/**
* Hide a comment div.
*/
function hide(id) {
$('#ah' + id).hide();
$('#ao' + id).show();
var div = $('#sc' + id);
div.slideUp('fast', function() {
div.remove();
});
}
/**
* Perform an ajax request to get comments for a node
* and insert the comments into the comments tree.
*/
function getComments(id) {
$.ajax({
type: 'GET',
url: opts.getCommentsURL,
data: {node: id},
success: function(data, textStatus, request) {
var ul = $('#cl' + id);
var speed = 100;
$('#cf' + id)
.find('textarea[name="proposal"]')
.data('source', data.source);
if (data.comments.length === 0) {
ul.html('<li>No comments yet.</li>');
ul.data('empty', true);
} else {
// If there are comments, sort them and put them in the list.
var comments = sortComments(data.comments);
speed = data.comments.length * 100;
appendComments(comments, ul);
ul.data('empty', false);
}
$('#cn' + id).slideUp(speed + 200);
ul.slideDown(speed);
},
error: function(request, textStatus, error) {
showError('Oops, there was a problem retrieving the comments.');
},
dataType: 'json'
});
}
/**
* Add a comment via ajax and insert the comment into the comment tree.
*/
function addComment(form) {
var node_id = form.find('input[name="node"]').val();
var parent_id = form.find('input[name="parent"]').val();
var text = form.find('textarea[name="comment"]').val();
var proposal = form.find('textarea[name="proposal"]').val();
if (text == '') {
showError('Please enter a comment.');
return;
}
// Disable the form that is being submitted.
form.find('textarea,input').attr('disabled', 'disabled');
// Send the comment to the server.
$.ajax({
type: "POST",
url: opts.addCommentURL,
dataType: 'json',
data: {
node: node_id,
parent: parent_id,
text: text,
proposal: proposal
},
success: function(data, textStatus, error) {
// Reset the form.
if (node_id) {
hideProposeChange(node_id);
}
form.find('textarea')
.val('')
.add(form.find('input'))
.removeAttr('disabled');
var ul = $('#cl' + (node_id || parent_id));
if (ul.data('empty')) {
$(ul).empty();
ul.data('empty', false);
}
insertComment(data.comment);
var ao = $('#ao' + node_id);
ao.find('img').attr({'src': opts.commentBrightImage});
if (node_id) {
// if this was a "root" comment, remove the commenting box
// (the user can get it back by reopening the comment popup)
$('#ca' + node_id).slideUp();
}
},
error: function(request, textStatus, error) {
form.find('textarea,input').removeAttr('disabled');
showError('Oops, there was a problem adding the comment.');
}
});
}
/**
* Recursively append comments to the main comment list and children
* lists, creating the comment tree.
*/
function appendComments(comments, ul) {
$.each(comments, function() {
var div = createCommentDiv(this);
ul.append($(document.createElement('li')).html(div));
appendComments(this.children, div.find('ul.comment-children'));
// To avoid stagnating data, don't store the comments children in data.
this.children = null;
div.data('comment', this);
});
}
/**
* After adding a new comment, it must be inserted in the correct
* location in the comment tree.
*/
function insertComment(comment) {
var div = createCommentDiv(comment);
// To avoid stagnating data, don't store the comments children in data.
comment.children = null;
div.data('comment', comment);
var ul = $('#cl' + (comment.node || comment.parent));
var siblings = getChildren(ul);
var li = $(document.createElement('li'));
li.hide();
// Determine where in the parents children list to insert this comment.
for(i=0; i < siblings.length; i++) {
if (comp(comment, siblings[i]) <= 0) {
$('#cd' + siblings[i].id)
.parent()
.before(li.html(div));
li.slideDown('fast');
return;
}
}
// If we get here, this comment rates lower than all the others,
// or it is the only comment in the list.
ul.append(li.html(div));
li.slideDown('fast');
}
function acceptComment(id) {
$.ajax({
type: 'POST',
url: opts.acceptCommentURL,
data: {id: id},
success: function(data, textStatus, request) {
$('#cm' + id).fadeOut('fast');
$('#cd' + id).removeClass('moderate');
},
error: function(request, textStatus, error) {
showError('Oops, there was a problem accepting the comment.');
}
});
}
function deleteComment(id) {
$.ajax({
type: 'POST',
url: opts.deleteCommentURL,
data: {id: id},
success: function(data, textStatus, request) {
var div = $('#cd' + id);
if (data == 'delete') {
// Moderator mode: remove the comment and all children immediately
div.slideUp('fast', function() {
div.remove();
});
return;
}
// User mode: only mark the comment as deleted
div
.find('span.user-id:first')
.text('[deleted]').end()
.find('div.comment-text:first')
.text('[deleted]').end()
.find('#cm' + id + ', #dc' + id + ', #ac' + id + ', #rc' + id +
', #sp' + id + ', #hp' + id + ', #cr' + id + ', #rl' + id)
.remove();
var comment = div.data('comment');
comment.username = '[deleted]';
comment.text = '[deleted]';
div.data('comment', comment);
},
error: function(request, textStatus, error) {
showError('Oops, there was a problem deleting the comment.');
}
});
}
function showProposal(id) {
$('#sp' + id).hide();
$('#hp' + id).show();
$('#pr' + id).slideDown('fast');
}
function hideProposal(id) {
$('#hp' + id).hide();
$('#sp' + id).show();
$('#pr' + id).slideUp('fast');
}
function showProposeChange(id) {
$('#pc' + id).hide();
$('#hc' + id).show();
var textarea = $('#pt' + id);
textarea.val(textarea.data('source'));
$.fn.autogrow.resize(textarea[0]);
textarea.slideDown('fast');
}
function hideProposeChange(id) {
$('#hc' + id).hide();
$('#pc' + id).show();
var textarea = $('#pt' + id);
textarea.val('').removeAttr('disabled');
textarea.slideUp('fast');
}
function toggleCommentMarkupBox(id) {
$('#mb' + id).toggle();
}
/** Handle when the user clicks on a sort by link. */
function handleReSort(link) {
var classes = link.attr('class').split(/\s+/);
for (var i=0; i<classes.length; i++) {
if (classes[i] != 'sort-option') {
by = classes[i].substring(2);
}
}
setComparator();
// Save/update the sortBy cookie.
var expiration = new Date();
expiration.setDate(expiration.getDate() + 365);
document.cookie= 'sortBy=' + escape(by) +
';expires=' + expiration.toUTCString();
$('ul.comment-ul').each(function(index, ul) {
var comments = getChildren($(ul), true);
comments = sortComments(comments);
appendComments(comments, $(ul).empty());
});
}
/**
* Function to process a vote when a user clicks an arrow.
*/
function handleVote(link) {
if (!opts.voting) {
showError("You'll need to login to vote.");
return;
}
var id = link.attr('id');
if (!id) {
// Didn't click on one of the voting arrows.
return;
}
// If it is an unvote, the new vote value is 0,
// Otherwise it's 1 for an upvote, or -1 for a downvote.
var value = 0;
if (id.charAt(1) != 'u') {
value = id.charAt(0) == 'u' ? 1 : -1;
}
// The data to be sent to the server.
var d = {
comment_id: id.substring(2),
value: value
};
// Swap the vote and unvote links.
link.hide();
$('#' + id.charAt(0) + (id.charAt(1) == 'u' ? 'v' : 'u') + d.comment_id)
.show();
// The div the comment is displayed in.
var div = $('div#cd' + d.comment_id);
var data = div.data('comment');
// If this is not an unvote, and the other vote arrow has
// already been pressed, unpress it.
if ((d.value !== 0) && (data.vote === d.value * -1)) {
$('#' + (d.value == 1 ? 'd' : 'u') + 'u' + d.comment_id).hide();
$('#' + (d.value == 1 ? 'd' : 'u') + 'v' + d.comment_id).show();
}
// Update the comments rating in the local data.
data.rating += (data.vote === 0) ? d.value : (d.value - data.vote);
data.vote = d.value;
div.data('comment', data);
// Change the rating text.
div.find('.rating:first')
.text(data.rating + ' point' + (data.rating == 1 ? '' : 's'));
// Send the vote information to the server.
$.ajax({
type: "POST",
url: opts.processVoteURL,
data: d,
error: function(request, textStatus, error) {
showError('Oops, there was a problem casting that vote.');
}
});
}
/**
* Open a reply form used to reply to an existing comment.
*/
function openReply(id) {
// Swap out the reply link for the hide link
$('#rl' + id).hide();
$('#cr' + id).show();
// Add the reply li to the children ul.
var div = $(renderTemplate(replyTemplate, {id: id})).hide();
$('#cl' + id)
.prepend(div)
// Setup the submit handler for the reply form.
.find('#rf' + id)
.submit(function(event) {
event.preventDefault();
addComment($('#rf' + id));
closeReply(id);
})
.find('input[type=button]')
.click(function() {
closeReply(id);
});
div.slideDown('fast', function() {
$('#rf' + id).find('textarea').focus();
});
}
/**
* Close the reply form opened with openReply.
*/
function closeReply(id) {
// Remove the reply div from the DOM.
$('#rd' + id).slideUp('fast', function() {
$(this).remove();
});
// Swap out the hide link for the reply link
$('#cr' + id).hide();
$('#rl' + id).show();
}
/**
* Recursively sort a tree of comments using the comp comparator.
*/
function sortComments(comments) {
comments.sort(comp);
$.each(comments, function() {
this.children = sortComments(this.children);
});
return comments;
}
/**
* Get the children comments from a ul. If recursive is true,
* recursively include childrens' children.
*/
function getChildren(ul, recursive) {
var children = [];
ul.children().children("[id^='cd']")
.each(function() {
var comment = $(this).data('comment');
if (recursive)
comment.children = getChildren($(this).find('#cl' + comment.id), true);
children.push(comment);
});
return children;
}
/** Create a div to display a comment in. */
function createCommentDiv(comment) {
if (!comment.displayed && !opts.moderator) {
return $('<div class="moderate">Thank you! Your comment will show up '
+ 'once it is has been approved by a moderator.</div>');
}
// Prettify the comment rating.
comment.pretty_rating = comment.rating + ' point' +
(comment.rating == 1 ? '' : 's');
// Make a class (for displaying not yet moderated comments differently)
comment.css_class = comment.displayed ? '' : ' moderate';
// Create a div for this comment.
var context = $.extend({}, opts, comment);
var div = $(renderTemplate(commentTemplate, context));
// If the user has voted on this comment, highlight the correct arrow.
if (comment.vote) {
var direction = (comment.vote == 1) ? 'u' : 'd';
div.find('#' + direction + 'v' + comment.id).hide();
div.find('#' + direction + 'u' + comment.id).show();
}
if (opts.moderator || comment.text != '[deleted]') {
div.find('a.reply').show();
if (comment.proposal_diff)
div.find('#sp' + comment.id).show();
if (opts.moderator && !comment.displayed)
div.find('#cm' + comment.id).show();
if (opts.moderator || (opts.username == comment.username))
div.find('#dc' + comment.id).show();
}
return div;
}
/**
* A simple template renderer. Placeholders such as <%id%> are replaced
* by context['id'] with items being escaped. Placeholders such as <#id#>
* are not escaped.
*/
function renderTemplate(template, context) {
var esc = $(document.createElement('div'));
function handle(ph, escape) {
var cur = context;
$.each(ph.split('.'), function() {
cur = cur[this];
});
return escape ? esc.text(cur || "").html() : cur;
}
return template.replace(/<([%#])([\w\.]*)\1>/g, function() {
return handle(arguments[2], arguments[1] == '%' ? true : false);
});
}
/** Flash an error message briefly. */
function showError(message) {
$(document.createElement('div')).attr({'class': 'popup-error'})
.append($(document.createElement('div'))
.attr({'class': 'error-message'}).text(message))
.appendTo('body')
.fadeIn("slow")
.delay(2000)
.fadeOut("slow");
}
/** Add a link the user uses to open the comments popup. */
$.fn.comment = function() {
return this.each(function() {
var id = $(this).attr('id').substring(1);
var count = COMMENT_METADATA[id];
var title = count + ' comment' + (count == 1 ? '' : 's');
var image = count > 0 ? opts.commentBrightImage : opts.commentImage;
var addcls = count == 0 ? ' nocomment' : '';
$(this)
.append(
$(document.createElement('a')).attr({
href: '#',
'class': 'sphinx-comment-open' + addcls,
id: 'ao' + id
})
.append($(document.createElement('img')).attr({
src: image,
alt: 'comment',
title: title
}))
.click(function(event) {
event.preventDefault();
show($(this).attr('id').substring(2));
})
)
.append(
$(document.createElement('a')).attr({
href: '#',
'class': 'sphinx-comment-close hidden',
id: 'ah' + id
})
.append($(document.createElement('img')).attr({
src: opts.closeCommentImage,
alt: 'close',
title: 'close'
}))
.click(function(event) {
event.preventDefault();
hide($(this).attr('id').substring(2));
})
);
});
};
var opts = {
processVoteURL: '/_process_vote',
addCommentURL: '/_add_comment',
getCommentsURL: '/_get_comments',
acceptCommentURL: '/_accept_comment',
deleteCommentURL: '/_delete_comment',
commentImage: '/static/_static/comment.png',
closeCommentImage: '/static/_static/comment-close.png',
loadingImage: '/static/_static/ajax-loader.gif',
commentBrightImage: '/static/_static/comment-bright.png',
upArrow: '/static/_static/up.png',
downArrow: '/static/_static/down.png',
upArrowPressed: '/static/_static/up-pressed.png',
downArrowPressed: '/static/_static/down-pressed.png',
voting: false,
moderator: false
};
if (typeof COMMENT_OPTIONS != "undefined") {
opts = jQuery.extend(opts, COMMENT_OPTIONS);
}
var popupTemplate = '\
<div class="sphinx-comments" id="sc<%id%>">\
<p class="sort-options">\
Sort by:\
<a href="#" class="sort-option byrating">best rated</a>\
<a href="#" class="sort-option byascage">newest</a>\
<a href="#" class="sort-option byage">oldest</a>\
</p>\
<div class="comment-header">Comments</div>\
<div class="comment-loading" id="cn<%id%>">\
loading comments... <img src="<%loadingImage%>" alt="" /></div>\
<ul id="cl<%id%>" class="comment-ul"></ul>\
<div id="ca<%id%>">\
<p class="add-a-comment">Add a comment\
(<a href="#" class="comment-markup" id="ab<%id%>">markup</a>):</p>\
<div class="comment-markup-box" id="mb<%id%>">\
reStructured text markup: <i>*emph*</i>, <b>**strong**</b>, \
<code>``code``</code>, \
code blocks: <code>::</code> and an indented block after blank line</div>\
<form method="post" id="cf<%id%>" class="comment-form" action="">\
<textarea name="comment" cols="80"></textarea>\
<p class="propose-button">\
<a href="#" id="pc<%id%>" class="show-propose-change">\
Propose a change &#9657;\
</a>\
<a href="#" id="hc<%id%>" class="hide-propose-change">\
Propose a change &#9663;\
</a>\
</p>\
<textarea name="proposal" id="pt<%id%>" cols="80"\
spellcheck="false"></textarea>\
<input type="submit" value="Add comment" />\
<input type="hidden" name="node" value="<%id%>" />\
<input type="hidden" name="parent" value="" />\
</form>\
</div>\
</div>';
var commentTemplate = '\
<div id="cd<%id%>" class="sphinx-comment<%css_class%>">\
<div class="vote">\
<div class="arrow">\
<a href="#" id="uv<%id%>" class="vote" title="vote up">\
<img src="<%upArrow%>" />\
</a>\
<a href="#" id="uu<%id%>" class="un vote" title="vote up">\
<img src="<%upArrowPressed%>" />\
</a>\
</div>\
<div class="arrow">\
<a href="#" id="dv<%id%>" class="vote" title="vote down">\
<img src="<%downArrow%>" id="da<%id%>" />\
</a>\
<a href="#" id="du<%id%>" class="un vote" title="vote down">\
<img src="<%downArrowPressed%>" />\
</a>\
</div>\
</div>\
<div class="comment-content">\
<p class="tagline comment">\
<span class="user-id"><%username%></span>\
<span class="rating"><%pretty_rating%></span>\
<span class="delta"><%time.delta%></span>\
</p>\
<div class="comment-text comment"><#text#></div>\
<p class="comment-opts comment">\
<a href="#" class="reply hidden" id="rl<%id%>">reply &#9657;</a>\
<a href="#" class="close-reply" id="cr<%id%>">reply &#9663;</a>\
<a href="#" id="sp<%id%>" class="show-proposal">proposal &#9657;</a>\
<a href="#" id="hp<%id%>" class="hide-proposal">proposal &#9663;</a>\
<a href="#" id="dc<%id%>" class="delete-comment hidden">delete</a>\
<span id="cm<%id%>" class="moderation hidden">\
<a href="#" id="ac<%id%>" class="accept-comment">accept</a>\
</span>\
</p>\
<pre class="proposal" id="pr<%id%>">\
<#proposal_diff#>\
</pre>\
<ul class="comment-children" id="cl<%id%>"></ul>\
</div>\
<div class="clearleft"></div>\
</div>\
</div>';
var replyTemplate = '\
<li>\
<div class="reply-div" id="rd<%id%>">\
<form id="rf<%id%>">\
<textarea name="comment" cols="80"></textarea>\
<input type="submit" value="Add reply" />\
<input type="button" value="Cancel" />\
<input type="hidden" name="parent" value="<%id%>" />\
<input type="hidden" name="node" value="" />\
</form>\
</div>\
</li>';
$(document).ready(function() {
init();
});
})(jQuery);
$(document).ready(function() {
// add comment anchors for all paragraphs that are commentable
$('.sphinx-has-comment').comment();
// highlight search words in search results
$("div.context").each(function() {
var params = $.getQueryParameters();
var terms = (params.q) ? params.q[0].split(/\s+/) : [];
var result = $(this);
$.each(terms, function() {
result.highlightText(this.toLowerCase(), 'highlighted');
});
});
// directly open comment window if requested
var anchor = document.location.hash;
if (anchor.substring(0, 9) == '#comment-') {
$('#ao' + anchor.substring(9)).click();
document.location.hash = '#s' + anchor.substring(9);
}
});

View File

@ -0,0 +1,113 @@
<!doctype html>
<html xmlns="http://www.w3.org/1999/xhtml" lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Fil conducteur : 1er tour des élections présidentielles 2017 &#8212; algofun documentation</title>
<link rel="stylesheet" href="_static/bizstyle.css" type="text/css" />
<link rel="stylesheet" href="_static/pygments.css" type="text/css" />
<script type="text/javascript">
var DOCUMENTATION_OPTIONS = {
URL_ROOT: './',
VERSION: ' ',
COLLAPSE_INDEX: false,
FILE_SUFFIX: '.html',
HAS_SOURCE: true,
SOURCELINK_SUFFIX: '.txt'
};
</script>
<script type="text/javascript" src="_static/jquery.js"></script>
<script type="text/javascript" src="_static/underscore.js"></script>
<script type="text/javascript" src="_static/doctools.js"></script>
<script type="text/javascript" src="_static/bizstyle.js"></script>
<link rel="index" title="Index" href="genindex.html" />
<link rel="search" title="Search" href="search.html" />
<link rel="next" title="Liens utiles" href="liens.html" />
<link rel="prev" title="Algorithmes et Programmation" href="programmation.html" />
<meta name="viewport" content="width=device-width,initial-scale=1.0">
<!--[if lt IE 9]>
<script type="text/javascript" src="_static/css3-mediaqueries.js"></script>
<![endif]-->
</head>
<body>
<div class="related" role="navigation" aria-label="related navigation">
<h3>Navigation</h3>
<ul>
<li class="right" style="margin-right: 10px">
<a href="genindex.html" title="General Index"
accesskey="I">index</a></li>
<li class="right" >
<a href="liens.html" title="Liens utiles"
accesskey="N">next</a> |</li>
<li class="right" >
<a href="programmation.html" title="Algorithmes et Programmation"
accesskey="P">previous</a> |</li>
<li class="nav-item nav-item-0"><a href="index.html">algofun documentation</a> &#187;</li>
<li class="nav-item nav-item-1"><a href="programmation.html" accesskey="U">Algorithmes et Programmation</a> &#187;</li>
</ul>
</div>
<div class="document">
<div class="documentwrapper">
<div class="body" role="main">
<div class="section" id="fil-conducteur-1er-tour-des-elections-presidentielles-2017">
<h1>Fil conducteur : 1er tour des élections présidentielles 2017<a class="headerlink" href="#fil-conducteur-1er-tour-des-elections-presidentielles-2017" title="Permalink to this headline"></a></h1>
<p>Le fil conducteur sera lexploitation de données issues du 1er tour des élections présidentielles qui ont eu lieu en France le 23 avril 2017.</p>
<p>Les données dont on dispose sont les résultats par canton (plus de 2000 cantons). Pour chaque canton sont donnés</p>
<ul class="simple">
<li>le nombre dinscrits</li>
<li>le nombre de votants</li>
<li>le nombre de bulletins nuls</li>
<li>le nombre de bulletins blancs</li>
<li>le nombre de voix obtenus par chacun des candidats.</li>
</ul>
<p>Lobjectif est détablir</p>
<ul class="simple">
<li>les résultats au niveau national</li>
<li>la participation</li>
</ul>
<div class="figure">
<a class="reference internal image-reference" href="_images/participation_globale.png"><img alt="Participation globale" src="_images/participation_globale.png" style="width: 650px;" /></a>
</div>
<ul class="simple">
<li>le scores des candidats</li>
</ul>
<div class="figure">
<a class="reference internal image-reference" href="_images/scores_1er_tour.png"><img alt="Score des candidats" src="_images/scores_1er_tour.png" style="width: 650px;" /></a>
</div>
<p>Ce sera loccasion de découvrir :</p>
<ul class="simple">
<li>les structures itérables, en particulier les tuples et dictionnaires</li>
<li>la lecture et lécriture de données dans des fichiers</li>
<li>des algorithmes de tris et de recherche.</li>
</ul>
</div>
</div>
</div>
<div class="clearer"></div>
</div>
<div class="related" role="navigation" aria-label="related navigation">
<h3>Navigation</h3>
<ul>
<li class="right" style="margin-right: 10px">
<a href="genindex.html" title="General Index"
>index</a></li>
<li class="right" >
<a href="liens.html" title="Liens utiles"
>next</a> |</li>
<li class="right" >
<a href="programmation.html" title="Algorithmes et Programmation"
>previous</a> |</li>
<li class="nav-item nav-item-0"><a href="index.html">algofun documentation</a> &#187;</li>
<li class="nav-item nav-item-1"><a href="programmation.html" >Algorithmes et Programmation</a> &#187;</li>
</ul>
</div>
<div class="footer" role="contentinfo">
</div>
</body>
</html>

View File

@ -0,0 +1,72 @@
<!doctype html>
<html xmlns="http://www.w3.org/1999/xhtml" lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Index &#8212; algofun documentation</title>
<link rel="stylesheet" href="_static/bizstyle.css" type="text/css" />
<link rel="stylesheet" href="_static/pygments.css" type="text/css" />
<script type="text/javascript">
var DOCUMENTATION_OPTIONS = {
URL_ROOT: './',
VERSION: ' ',
COLLAPSE_INDEX: false,
FILE_SUFFIX: '.html',
HAS_SOURCE: true,
SOURCELINK_SUFFIX: '.txt'
};
</script>
<script type="text/javascript" src="_static/jquery.js"></script>
<script type="text/javascript" src="_static/underscore.js"></script>
<script type="text/javascript" src="_static/doctools.js"></script>
<script type="text/javascript" src="_static/bizstyle.js"></script>
<link rel="index" title="Index" href="#" />
<link rel="search" title="Search" href="search.html" />
<meta name="viewport" content="width=device-width,initial-scale=1.0">
<!--[if lt IE 9]>
<script type="text/javascript" src="_static/css3-mediaqueries.js"></script>
<![endif]-->
</head>
<body>
<div class="related" role="navigation" aria-label="related navigation">
<h3>Navigation</h3>
<ul>
<li class="right" style="margin-right: 10px">
<a href="#" title="General Index"
accesskey="I">index</a></li>
<li class="nav-item nav-item-0"><a href="index.html">algofun documentation</a> &#187;</li>
</ul>
</div>
<div class="document">
<div class="documentwrapper">
<div class="body" role="main">
<h1 id="index">Index</h1>
<div class="genindex-jumpbox">
</div>
</div>
</div>
<div class="clearer"></div>
</div>
<div class="related" role="navigation" aria-label="related navigation">
<h3>Navigation</h3>
<ul>
<li class="right" style="margin-right: 10px">
<a href="#" title="General Index"
>index</a></li>
<li class="nav-item nav-item-0"><a href="index.html">algofun documentation</a> &#187;</li>
</ul>
</div>
<div class="footer" role="contentinfo">
</div>
</body>
</html>

View File

@ -0,0 +1,100 @@
<!doctype html>
<html xmlns="http://www.w3.org/1999/xhtml" lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" /><meta content="algo tutorial" name="description" />
<meta content="algorithm, python, tutorial" name="keywords" />
<title>algofundoc &#8212; algofun documentation</title>
<link rel="stylesheet" href="_static/bizstyle.css" type="text/css" />
<link rel="stylesheet" href="_static/pygments.css" type="text/css" />
<script type="text/javascript">
var DOCUMENTATION_OPTIONS = {
URL_ROOT: './',
VERSION: ' ',
COLLAPSE_INDEX: false,
FILE_SUFFIX: '.html',
HAS_SOURCE: true,
SOURCELINK_SUFFIX: '.txt'
};
</script>
<script type="text/javascript" src="_static/jquery.js"></script>
<script type="text/javascript" src="_static/underscore.js"></script>
<script type="text/javascript" src="_static/doctools.js"></script>
<script type="text/javascript" src="_static/bizstyle.js"></script>
<link rel="index" title="Index" href="genindex.html" />
<link rel="search" title="Search" href="search.html" />
<link rel="next" title="Algorithmes et Programmation" href="programmation.html" />
<meta name="viewport" content="width=device-width,initial-scale=1.0">
<!--[if lt IE 9]>
<script type="text/javascript" src="_static/css3-mediaqueries.js"></script>
<![endif]-->
</head>
<body>
<div class="related" role="navigation" aria-label="related navigation">
<h3>Navigation</h3>
<ul>
<li class="right" style="margin-right: 10px">
<a href="genindex.html" title="General Index"
accesskey="I">index</a></li>
<li class="right" >
<a href="programmation.html" title="Algorithmes et Programmation"
accesskey="N">next</a> |</li>
<li class="nav-item nav-item-0"><a href="#">algofun documentation</a> &#187;</li>
</ul>
</div>
<div class="document">
<div class="documentwrapper">
<div class="body" role="main">
<div class="section" id="algo-fun">
<h1>Algo Fun<a class="headerlink" href="#algo-fun" title="Permalink to this headline"></a></h1>
<div class="toctree-wrapper compound">
<ul>
<li class="toctree-l1"><a class="reference internal" href="programmation.html">Algorithmes et Programmation</a></li>
<li class="toctree-l1"><a class="reference internal" href="liens.html">Liens utiles</a></li>
<li class="toctree-l1"><a class="reference internal" href="MachineLearning.html">Machine learning</a></li>
<li class="toctree-l1"><a class="reference internal" href="pandas.html">pandas</a></li>
</ul>
</div>
</div>
<div class="section" id="indices-and-tables">
<h1>Indices and tables<a class="headerlink" href="#indices-and-tables" title="Permalink to this headline"></a></h1>
<ul class="simple">
<li><a class="reference external" href="_modules/index.html">All modules for which code is available</a></li>
<li><a class="reference internal" href="genindex.html"><span class="std std-ref">Index</span></a></li>
<li><a class="reference internal" href="py-modindex.html"><span class="std std-ref">Module Index</span></a></li>
<li><a class="reference internal" href="search.html"><span class="std std-ref">Search Page</span></a></li>
</ul>
<div class="admonition note">
<p class="first admonition-title">Note</p>
<p class="last">The pyfun code is licensed under the <a class="reference external" href="http://www.gnu.org/licenses/lgpl.html">LGPL licence</a>
and this documentation is licensed under the <a class="reference external" href="http://creativecommons.org/licenses/by-sa/3.0/deed.en_US">Creative Commons
Attribution-ShareAlike 3.0 Unported License</a>.</p>
</div>
</div>
</div>
</div>
<div class="clearer"></div>
</div>
<div class="related" role="navigation" aria-label="related navigation">
<h3>Navigation</h3>
<ul>
<li class="right" style="margin-right: 10px">
<a href="genindex.html" title="General Index"
>index</a></li>
<li class="right" >
<a href="programmation.html" title="Algorithmes et Programmation"
>next</a> |</li>
<li class="nav-item nav-item-0"><a href="#">algofun documentation</a> &#187;</li>
</ul>
</div>
<div class="footer" role="contentinfo">
</div>
</body>
</html>

View File

@ -0,0 +1,90 @@
<!doctype html>
<html xmlns="http://www.w3.org/1999/xhtml" lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Liens utiles &#8212; algofun documentation</title>
<link rel="stylesheet" href="_static/bizstyle.css" type="text/css" />
<link rel="stylesheet" href="_static/pygments.css" type="text/css" />
<script type="text/javascript">
var DOCUMENTATION_OPTIONS = {
URL_ROOT: './',
VERSION: ' ',
COLLAPSE_INDEX: false,
FILE_SUFFIX: '.html',
HAS_SOURCE: true,
SOURCELINK_SUFFIX: '.txt'
};
</script>
<script type="text/javascript" src="_static/jquery.js"></script>
<script type="text/javascript" src="_static/underscore.js"></script>
<script type="text/javascript" src="_static/doctools.js"></script>
<script type="text/javascript" src="_static/bizstyle.js"></script>
<link rel="index" title="Index" href="genindex.html" />
<link rel="search" title="Search" href="search.html" />
<link rel="next" title="Machine learning" href="MachineLearning.html" />
<link rel="prev" title="Fil conducteur : 1er tour des élections présidentielles 2017" href="fil_conducteur.html" />
<meta name="viewport" content="width=device-width,initial-scale=1.0">
<!--[if lt IE 9]>
<script type="text/javascript" src="_static/css3-mediaqueries.js"></script>
<![endif]-->
</head>
<body>
<div class="related" role="navigation" aria-label="related navigation">
<h3>Navigation</h3>
<ul>
<li class="right" style="margin-right: 10px">
<a href="genindex.html" title="General Index"
accesskey="I">index</a></li>
<li class="right" >
<a href="MachineLearning.html" title="Machine learning"
accesskey="N">next</a> |</li>
<li class="right" >
<a href="fil_conducteur.html" title="Fil conducteur : 1er tour des élections présidentielles 2017"
accesskey="P">previous</a> |</li>
<li class="nav-item nav-item-0"><a href="index.html">algofun documentation</a> &#187;</li>
</ul>
</div>
<div class="document">
<div class="documentwrapper">
<div class="body" role="main">
<div class="section" id="liens-utiles">
<h1>Liens utiles<a class="headerlink" href="#liens-utiles" title="Permalink to this headline"></a></h1>
<ul class="simple">
<li><a class="reference external" href="https://realpython.com/python-random/?__s=o2w1az6ypdj7ogdsnqwf">random</a> datas</li>
<li><a class="reference external" href="https://realpython.com/fast-flexible-pandas/?__s=o2w1az6ypdj7ogdsnqwf">pandas</a></li>
<li><a class="reference external" href="https://realpython.com/python-histograms/?__s=o2w1az6ypdj7ogdsnqwf">ploting</a></li>
<li><a class="reference external" href="https://realpython.com/tutorials/machine-learning/">machine</a> learning</li>
<li><a class="reference external" href="https://machinelearningmastery.com/machine-learning-in-python-step-by-step/">making</a> a machine learning</li>
<li><a class="reference external" href="https://realpython.com/tutorials/data-science/">data</a> science</li>
</ul>
</div>
</div>
</div>
<div class="clearer"></div>
</div>
<div class="related" role="navigation" aria-label="related navigation">
<h3>Navigation</h3>
<ul>
<li class="right" style="margin-right: 10px">
<a href="genindex.html" title="General Index"
>index</a></li>
<li class="right" >
<a href="MachineLearning.html" title="Machine learning"
>next</a> |</li>
<li class="right" >
<a href="fil_conducteur.html" title="Fil conducteur : 1er tour des élections présidentielles 2017"
>previous</a> |</li>
<li class="nav-item nav-item-0"><a href="index.html">algofun documentation</a> &#187;</li>
</ul>
</div>
<div class="footer" role="contentinfo">
</div>
</body>
</html>

View File

@ -0,0 +1,409 @@
<!doctype html>
<html xmlns="http://www.w3.org/1999/xhtml" lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Pandas &#8212; algofun documentation</title>
<link rel="stylesheet" href="../_static/bizstyle.css" type="text/css" />
<link rel="stylesheet" href="../_static/pygments.css" type="text/css" />
<script type="text/javascript">
var DOCUMENTATION_OPTIONS = {
URL_ROOT: '../',
VERSION: ' ',
COLLAPSE_INDEX: false,
FILE_SUFFIX: '.html',
HAS_SOURCE: true,
SOURCELINK_SUFFIX: '.txt'
};
</script>
<script type="text/javascript" src="../_static/jquery.js"></script>
<script type="text/javascript" src="../_static/underscore.js"></script>
<script type="text/javascript" src="../_static/doctools.js"></script>
<script type="text/javascript" src="../_static/bizstyle.js"></script>
<link rel="index" title="Index" href="../genindex.html" />
<link rel="search" title="Search" href="../search.html" />
<link rel="prev" title="pandas" href="../pandas.html" />
<meta name="viewport" content="width=device-width,initial-scale=1.0">
<!--[if lt IE 9]>
<script type="text/javascript" src="_static/css3-mediaqueries.js"></script>
<![endif]-->
</head>
<body>
<div class="related" role="navigation" aria-label="related navigation">
<h3>Navigation</h3>
<ul>
<li class="right" style="margin-right: 10px">
<a href="../genindex.html" title="General Index"
accesskey="I">index</a></li>
<li class="right" >
<a href="../pandas.html" title="pandas"
accesskey="P">previous</a> |</li>
<li class="nav-item nav-item-0"><a href="../index.html">algofun documentation</a> &#187;</li>
<li class="nav-item nav-item-1"><a href="../pandas.html" accesskey="U">pandas</a> &#187;</li>
</ul>
</div>
<div class="document">
<div class="documentwrapper">
<div class="body" role="main">
<style>
/* CSS for nbsphinx extension */
/* remove conflicting styling from Sphinx themes */
div.nbinput,
div.nbinput div.prompt,
div.nbinput div.input_area,
div.nbinput div[class*=highlight],
div.nbinput div[class*=highlight] pre,
div.nboutput,
div.nbinput div.prompt,
div.nbinput div.output_area,
div.nboutput div[class*=highlight],
div.nboutput div[class*=highlight] pre {
background: none;
border: none;
padding: 0 0;
margin: 0;
box-shadow: none;
}
/* avoid gaps between output lines */
div.nboutput div[class*=highlight] pre {
line-height: normal;
}
/* input/output containers */
div.nbinput,
div.nboutput {
display: -webkit-flex;
display: flex;
align-items: flex-start;
margin: 0;
width: 100%;
}
@media (max-width: 540px) {
div.nbinput,
div.nboutput {
flex-direction: column;
}
}
/* input container */
div.nbinput {
padding-top: 5px;
}
/* last container */
div.nblast {
padding-bottom: 5px;
}
/* input prompt */
div.nbinput div.prompt pre {
color: #303F9F;
}
/* output prompt */
div.nboutput div.prompt pre {
color: #D84315;
}
/* all prompts */
div.nbinput div.prompt,
div.nboutput div.prompt {
min-width: 9ex;
padding-top: 0.4em;
padding-right: 0.4em;
text-align: right;
flex: 0;
}
@media (max-width: 540px) {
div.nbinput div.prompt,
div.nboutput div.prompt {
text-align: left;
padding: 0.4em;
}
div.nboutput div.prompt.empty {
padding: 0;
}
}
/* disable scrollbars on prompts */
div.nbinput div.prompt pre,
div.nboutput div.prompt pre {
overflow: hidden;
}
/* input/output area */
div.nbinput div.input_area,
div.nboutput div.output_area {
padding: 0.4em;
-webkit-flex: 1;
flex: 1;
overflow: auto;
}
@media (max-width: 540px) {
div.nbinput div.input_area,
div.nboutput div.output_area {
width: 100%;
}
}
/* input area */
div.nbinput div.input_area {
border: 1px solid #cfcfcf;
border-radius: 2px;
background: #f7f7f7;
}
/* override MathJax center alignment in output cells */
div.nboutput div[class*=MathJax] {
text-align: left !important;
}
/* override sphinx.ext.pngmath center alignment in output cells */
div.nboutput div.math p {
text-align: left;
}
/* standard error */
div.nboutput div.output_area.stderr {
background: #fdd;
}
/* ANSI colors */
.ansi-black-fg { color: #3E424D; }
.ansi-black-bg { background-color: #3E424D; }
.ansi-black-intense-fg { color: #282C36; }
.ansi-black-intense-bg { background-color: #282C36; }
.ansi-red-fg { color: #E75C58; }
.ansi-red-bg { background-color: #E75C58; }
.ansi-red-intense-fg { color: #B22B31; }
.ansi-red-intense-bg { background-color: #B22B31; }
.ansi-green-fg { color: #00A250; }
.ansi-green-bg { background-color: #00A250; }
.ansi-green-intense-fg { color: #007427; }
.ansi-green-intense-bg { background-color: #007427; }
.ansi-yellow-fg { color: #DDB62B; }
.ansi-yellow-bg { background-color: #DDB62B; }
.ansi-yellow-intense-fg { color: #B27D12; }
.ansi-yellow-intense-bg { background-color: #B27D12; }
.ansi-blue-fg { color: #208FFB; }
.ansi-blue-bg { background-color: #208FFB; }
.ansi-blue-intense-fg { color: #0065CA; }
.ansi-blue-intense-bg { background-color: #0065CA; }
.ansi-magenta-fg { color: #D160C4; }
.ansi-magenta-bg { background-color: #D160C4; }
.ansi-magenta-intense-fg { color: #A03196; }
.ansi-magenta-intense-bg { background-color: #A03196; }
.ansi-cyan-fg { color: #60C6C8; }
.ansi-cyan-bg { background-color: #60C6C8; }
.ansi-cyan-intense-fg { color: #258F8F; }
.ansi-cyan-intense-bg { background-color: #258F8F; }
.ansi-white-fg { color: #C5C1B4; }
.ansi-white-bg { background-color: #C5C1B4; }
.ansi-white-intense-fg { color: #A1A6B2; }
.ansi-white-intense-bg { background-color: #A1A6B2; }
.ansi-default-inverse-fg { color: #FFFFFF; }
.ansi-default-inverse-bg { background-color: #000000; }
.ansi-bold { font-weight: bold; }
.ansi-underline { text-decoration: underline; }
</style>
<p>The <strong>import</strong> keyword is used to import a library</p>
<div class="nbinput docutils container">
<div class="prompt highlight-none"><div class="highlight"><pre>
<span></span>In [2]:
</pre></div>
</div>
<div class="input_area highlight-ipython3"><div class="highlight"><pre>
<span></span><span class="kn">import</span> <span class="nn">math</span>
<span class="nb">print</span><span class="p">(</span><span class="n">math</span><span class="o">.</span><span class="n">cos</span><span class="p">(</span><span class="n">math</span><span class="o">.</span><span class="n">pi</span> <span class="o">/</span> <span class="mi">2</span><span class="p">))</span>
</pre></div>
</div>
</div>
<div class="nboutput nblast docutils container">
<div class="prompt empty docutils container">
</div>
<div class="output_area docutils container">
<div class="highlight"><pre>
6.123233995736766e-17
</pre></div></div>
</div>
<div class="section" id="Pandas">
<h1>Pandas<a class="headerlink" href="#Pandas" title="Permalink to this headline"></a></h1>
<div class="nbinput docutils container">
<div class="prompt highlight-none"><div class="highlight"><pre>
<span></span>In [1]:
</pre></div>
</div>
<div class="input_area highlight-ipython3"><div class="highlight"><pre>
<span></span><span class="kn">import</span> <span class="nn">numpy</span>
<span class="kn">import</span> <span class="nn">pandas</span>
<span class="n">rows</span> <span class="o">=</span> <span class="p">[</span><span class="s1">&#39;line1&#39;</span><span class="p">,</span> <span class="s1">&#39;line2&#39;</span><span class="p">,</span> <span class="s1">&#39;line3&#39;</span><span class="p">,</span> <span class="s1">&#39;line4&#39;</span><span class="p">,</span> <span class="s1">&#39;line5&#39;</span><span class="p">]</span>
<span class="n">cols</span> <span class="o">=</span> <span class="p">[</span><span class="s1">&#39;col1&#39;</span><span class="p">,</span> <span class="s1">&#39;col2&#39;</span><span class="p">,</span> <span class="s1">&#39;col3&#39;</span><span class="p">,</span> <span class="s1">&#39;col4&#39;</span><span class="p">]</span>
<span class="kn">from</span> <span class="nn">IPython.display</span> <span class="k">import</span> <span class="n">display</span>
<span class="n">dataframe</span> <span class="o">=</span> <span class="n">pandas</span><span class="o">.</span><span class="n">DataFrame</span><span class="p">(</span><span class="n">numpy</span><span class="o">.</span><span class="n">random</span><span class="o">.</span><span class="n">randn</span><span class="p">(</span><span class="mi">5</span><span class="p">,</span><span class="mi">4</span><span class="p">),</span> <span class="n">index</span><span class="o">=</span><span class="n">rows</span><span class="p">,</span> <span class="n">columns</span><span class="o">=</span><span class="n">cols</span><span class="p">)</span>
<span class="n">display</span><span class="p">(</span><span class="n">dataframe</span><span class="p">)</span>
</pre></div>
</div>
</div>
<div class="nboutput nblast docutils container">
<div class="prompt empty docutils container">
</div>
<div class="output_area docutils container">
<div>
<table border="1" class="dataframe">
<thead>
<tr style="text-align: right;">
<th></th>
<th>col1</th>
<th>col2</th>
<th>col3</th>
<th>col4</th>
</tr>
</thead>
<tbody>
<tr>
<th>line1</th>
<td>-0.882125</td>
<td>2.176452</td>
<td>0.163955</td>
<td>-0.618232</td>
</tr>
<tr>
<th>line2</th>
<td>-0.721538</td>
<td>0.035578</td>
<td>0.180072</td>
<td>1.015987</td>
</tr>
<tr>
<th>line3</th>
<td>-1.162355</td>
<td>0.384632</td>
<td>-0.674092</td>
<td>0.162693</td>
</tr>
<tr>
<th>line4</th>
<td>-1.399455</td>
<td>-0.698512</td>
<td>0.039420</td>
<td>0.898408</td>
</tr>
<tr>
<th>line5</th>
<td>1.755342</td>
<td>-0.073242</td>
<td>-1.502503</td>
<td>-0.586194</td>
</tr>
</tbody>
</table>
</div></div>
</div>
<div class="section" id="reorganise-a-dataframe-from-datas-as-a-dictionary-with-tuples-as-keys">
<h2>reorganise a <strong>dataframe</strong> from datas as a dictionary with tuples as keys<a class="headerlink" href="#reorganise-a-dataframe-from-datas-as-a-dictionary-with-tuples-as-keys" title="Permalink to this headline"></a></h2>
<div class="nbinput docutils container">
<div class="prompt highlight-none"><div class="highlight"><pre>
<span></span>In [2]:
</pre></div>
</div>
<div class="input_area highlight-ipython3"><div class="highlight"><pre>
<span></span><span class="n">dico</span> <span class="o">=</span> <span class="p">{(</span><span class="s1">&#39;john&#39;</span><span class="p">,</span> <span class="s1">&#39;Snow&#39;</span><span class="p">)</span> <span class="p">:</span> <span class="mi">12</span><span class="p">,</span> <span class="p">(</span><span class="s1">&#39;Paul&#39;</span><span class="p">,</span> <span class="s1">&#39;Durand&#39;</span><span class="p">)</span> <span class="p">:</span> <span class="mi">13</span><span class="p">,</span> <span class="p">(</span><span class="s2">&quot;Pierre&quot;</span><span class="p">,</span> <span class="s2">&quot;Dupont&quot;</span><span class="p">)</span> <span class="p">:</span> <span class="mi">16</span><span class="p">,</span> <span class="p">(</span><span class="s2">&quot;Cerise&quot;</span><span class="p">,</span> <span class="s2">&quot;Lanister&quot;</span><span class="p">)</span> <span class="p">:</span> <span class="mi">14</span><span class="p">}</span>
<span class="kn">import</span> <span class="nn">pandas</span>
<span class="n">df</span> <span class="o">=</span> <span class="n">pandas</span><span class="o">.</span><span class="n">Series</span><span class="p">(</span><span class="n">dico</span><span class="p">)</span><span class="o">.</span><span class="n">reset_index</span><span class="p">()</span>
<span class="n">df</span><span class="o">.</span><span class="n">columns</span> <span class="o">=</span> <span class="p">[</span><span class="s1">&#39;Column 1&#39;</span><span class="p">,</span> <span class="s1">&#39;Column 2&#39;</span><span class="p">,</span> <span class="s1">&#39;Column 3&#39;</span><span class="p">]</span>
<span class="kn">from</span> <span class="nn">IPython.display</span> <span class="k">import</span> <span class="n">display</span>
<span class="n">display</span><span class="p">(</span><span class="n">df</span><span class="p">)</span>
</pre></div>
</div>
</div>
<div class="nboutput nblast docutils container">
<div class="prompt empty docutils container">
</div>
<div class="output_area docutils container">
<div>
<style scoped>
.dataframe tbody tr th:only-of-type {
vertical-align: middle;
}
.dataframe tbody tr th {
vertical-align: top;
}
.dataframe thead th {
text-align: right;
}
</style>
<table border="1" class="dataframe">
<thead>
<tr style="text-align: right;">
<th></th>
<th>Column 1</th>
<th>Column 2</th>
<th>Column 3</th>
</tr>
</thead>
<tbody>
<tr>
<th>0</th>
<td>Cerise</td>
<td>Lanister</td>
<td>14</td>
</tr>
<tr>
<th>1</th>
<td>Paul</td>
<td>Durand</td>
<td>13</td>
</tr>
<tr>
<th>2</th>
<td>Pierre</td>
<td>Dupont</td>
<td>16</td>
</tr>
<tr>
<th>3</th>
<td>john</td>
<td>Snow</td>
<td>12</td>
</tr>
</tbody>
</table>
</div></div>
</div>
</div>
</div>
</div>
</div>
<div class="clearer"></div>
</div>
<div class="related" role="navigation" aria-label="related navigation">
<h3>Navigation</h3>
<ul>
<li class="right" style="margin-right: 10px">
<a href="../genindex.html" title="General Index"
>index</a></li>
<li class="right" >
<a href="../pandas.html" title="pandas"
>previous</a> |</li>
<li class="nav-item nav-item-0"><a href="../index.html">algofun documentation</a> &#187;</li>
<li class="nav-item nav-item-1"><a href="../pandas.html" >pandas</a> &#187;</li>
</ul>
</div>
<div class="footer" role="contentinfo">
</div>
</body>
</html>

Binary file not shown.

View File

@ -0,0 +1,95 @@
<!doctype html>
<html xmlns="http://www.w3.org/1999/xhtml" lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>pandas &#8212; algofun documentation</title>
<link rel="stylesheet" href="_static/bizstyle.css" type="text/css" />
<link rel="stylesheet" href="_static/pygments.css" type="text/css" />
<script type="text/javascript">
var DOCUMENTATION_OPTIONS = {
URL_ROOT: './',
VERSION: ' ',
COLLAPSE_INDEX: false,
FILE_SUFFIX: '.html',
HAS_SOURCE: true,
SOURCELINK_SUFFIX: '.txt'
};
</script>
<script type="text/javascript" src="_static/jquery.js"></script>
<script type="text/javascript" src="_static/underscore.js"></script>
<script type="text/javascript" src="_static/doctools.js"></script>
<script type="text/javascript" src="_static/bizstyle.js"></script>
<link rel="index" title="Index" href="genindex.html" />
<link rel="search" title="Search" href="search.html" />
<link rel="next" title="Pandas" href="notebooks/Pandas.html" />
<link rel="prev" title="Machine learning" href="MachineLearning.html" />
<meta name="viewport" content="width=device-width,initial-scale=1.0">
<!--[if lt IE 9]>
<script type="text/javascript" src="_static/css3-mediaqueries.js"></script>
<![endif]-->
</head>
<body>
<div class="related" role="navigation" aria-label="related navigation">
<h3>Navigation</h3>
<ul>
<li class="right" style="margin-right: 10px">
<a href="genindex.html" title="General Index"
accesskey="I">index</a></li>
<li class="right" >
<a href="notebooks/Pandas.html" title="Pandas"
accesskey="N">next</a> |</li>
<li class="right" >
<a href="MachineLearning.html" title="Machine learning"
accesskey="P">previous</a> |</li>
<li class="nav-item nav-item-0"><a href="index.html">algofun documentation</a> &#187;</li>
</ul>
</div>
<div class="document">
<div class="documentwrapper">
<div class="body" role="main">
<div class="section" id="pandas">
<h1>pandas<a class="headerlink" href="#pandas" title="Permalink to this headline"></a></h1>
<p><strong>examples</strong> in the <a class="reference external" href="http://jupyter.org/">jupyter</a> notebooks</p>
<p>ipython and pandas:</p>
<div class="highlight-default"><div class="highlight"><pre><span></span><span class="n">jupyter</span> <span class="n">notebook</span> <span class="n">Pandas</span><span class="o">.</span><span class="n">ipynb</span>
</pre></div>
</div>
<div class="toctree-wrapper compound">
<ul>
<li class="toctree-l1"><a class="reference internal" href="notebooks/Pandas.html">Pandas</a><ul>
<li class="toctree-l2"><a class="reference internal" href="notebooks/Pandas.html#reorganise-a-dataframe-from-datas-as-a-dictionary-with-tuples-as-keys">reorganise a <strong>dataframe</strong> from datas as a dictionary with tuples as keys</a></li>
</ul>
</li>
</ul>
</div>
</div>
</div>
</div>
<div class="clearer"></div>
</div>
<div class="related" role="navigation" aria-label="related navigation">
<h3>Navigation</h3>
<ul>
<li class="right" style="margin-right: 10px">
<a href="genindex.html" title="General Index"
>index</a></li>
<li class="right" >
<a href="notebooks/Pandas.html" title="Pandas"
>next</a> |</li>
<li class="right" >
<a href="MachineLearning.html" title="Machine learning"
>previous</a> |</li>
<li class="nav-item nav-item-0"><a href="index.html">algofun documentation</a> &#187;</li>
</ul>
</div>
<div class="footer" role="contentinfo">
</div>
</body>
</html>

View File

@ -0,0 +1,124 @@
<!doctype html>
<html xmlns="http://www.w3.org/1999/xhtml" lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Algorithmes et Programmation &#8212; algofun documentation</title>
<link rel="stylesheet" href="_static/bizstyle.css" type="text/css" />
<link rel="stylesheet" href="_static/pygments.css" type="text/css" />
<script type="text/javascript">
var DOCUMENTATION_OPTIONS = {
URL_ROOT: './',
VERSION: ' ',
COLLAPSE_INDEX: false,
FILE_SUFFIX: '.html',
HAS_SOURCE: true,
SOURCELINK_SUFFIX: '.txt'
};
</script>
<script type="text/javascript" src="_static/jquery.js"></script>
<script type="text/javascript" src="_static/underscore.js"></script>
<script type="text/javascript" src="_static/doctools.js"></script>
<script type="text/javascript" src="_static/bizstyle.js"></script>
<link rel="index" title="Index" href="genindex.html" />
<link rel="search" title="Search" href="search.html" />
<link rel="next" title="Fil conducteur : 1er tour des élections présidentielles 2017" href="fil_conducteur.html" />
<link rel="prev" title="Algo Fun" href="index.html" />
<meta name="viewport" content="width=device-width,initial-scale=1.0">
<!--[if lt IE 9]>
<script type="text/javascript" src="_static/css3-mediaqueries.js"></script>
<![endif]-->
</head>
<body>
<div class="related" role="navigation" aria-label="related navigation">
<h3>Navigation</h3>
<ul>
<li class="right" style="margin-right: 10px">
<a href="genindex.html" title="General Index"
accesskey="I">index</a></li>
<li class="right" >
<a href="fil_conducteur.html" title="Fil conducteur : 1er tour des élections présidentielles 2017"
accesskey="N">next</a> |</li>
<li class="right" >
<a href="index.html" title="Algo Fun"
accesskey="P">previous</a> |</li>
<li class="nav-item nav-item-0"><a href="index.html">algofun documentation</a> &#187;</li>
</ul>
</div>
<div class="document">
<div class="documentwrapper">
<div class="body" role="main">
<div class="section" id="algorithmes-et-programmation">
<h1>Algorithmes et Programmation<a class="headerlink" href="#algorithmes-et-programmation" title="Permalink to this headline"></a></h1>
<div class="section" id="cours">
<h2>Cours<a class="headerlink" href="#cours" title="Permalink to this headline"></a></h2>
<div class="toctree-wrapper compound">
<ul>
<li class="toctree-l1"><a class="reference internal" href="fil_conducteur.html">Fil conducteur : 1er tour des élections présidentielles 2017</a></li>
</ul>
</div>
<ul class="simple">
<li>Structures de données séquentielles</li>
<li>Ensembles et dictionnaires</li>
<li>Algorithmes de recherche</li>
<li>Les fichiers</li>
<li>Algorithmes de tri</li>
</ul>
</div>
<div class="section" id="tp">
<h2>TP<a class="headerlink" href="#tp" title="Permalink to this headline"></a></h2>
<div class="toctree-wrapper compound">
</div>
<ul class="simple">
<li>Tester avec doctest</li>
<li>Listes</li>
<li>Gestion dune promotion détudiants</li>
<li>Anagrammes</li>
<li>Analyse dun fichier texte</li>
<li>Évaluation empirique des tris</li>
</ul>
</div>
<div class="section" id="documents-annexes">
<h2>Documents annexes<a class="headerlink" href="#documents-annexes" title="Permalink to this headline"></a></h2>
<div class="toctree-wrapper compound">
</div>
<div class="section" id="bibliographie">
<h3>Bibliographie<a class="headerlink" href="#bibliographie" title="Permalink to this headline"></a></h3>
<ul class="simple">
<li>Apprendre à programmer avec Python 3, Gérard Swinnen, editions Eyrolles (Chapitres 1 à 7, et chapitre 10 en partie). <a class="reference external" href="http://inforef.be/swi/python.htm">Version électronique téléchargeable</a>.</li>
<li><a class="reference external" href="https://www.python.org/">Site officiel du langage Python</a>.</li>
<li><a class="reference external" href="https://docs.python.org/3.5/">Documentation officielle de la version 3.5 de Python</a>.</li>
<li><a class="reference external" href="http://www.thonny.org/">Site officiel de Thonny</a>.</li>
</ul>
</div>
</div>
</div>
</div>
</div>
<div class="clearer"></div>
</div>
<div class="related" role="navigation" aria-label="related navigation">
<h3>Navigation</h3>
<ul>
<li class="right" style="margin-right: 10px">
<a href="genindex.html" title="General Index"
>index</a></li>
<li class="right" >
<a href="fil_conducteur.html" title="Fil conducteur : 1er tour des élections présidentielles 2017"
>next</a> |</li>
<li class="right" >
<a href="index.html" title="Algo Fun"
>previous</a> |</li>
<li class="nav-item nav-item-0"><a href="index.html">algofun documentation</a> &#187;</li>
</ul>
</div>
<div class="footer" role="contentinfo">
</div>
</body>
</html>

View File

@ -0,0 +1,95 @@
<!doctype html>
<html xmlns="http://www.w3.org/1999/xhtml" lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Search &#8212; algofun documentation</title>
<link rel="stylesheet" href="_static/bizstyle.css" type="text/css" />
<link rel="stylesheet" href="_static/pygments.css" type="text/css" />
<script type="text/javascript">
var DOCUMENTATION_OPTIONS = {
URL_ROOT: './',
VERSION: ' ',
COLLAPSE_INDEX: false,
FILE_SUFFIX: '.html',
HAS_SOURCE: true,
SOURCELINK_SUFFIX: '.txt'
};
</script>
<script type="text/javascript" src="_static/jquery.js"></script>
<script type="text/javascript" src="_static/underscore.js"></script>
<script type="text/javascript" src="_static/doctools.js"></script>
<script type="text/javascript" src="_static/searchtools.js"></script>
<script type="text/javascript" src="_static/bizstyle.js"></script>
<link rel="index" title="Index" href="genindex.html" />
<link rel="search" title="Search" href="#" />
<script type="text/javascript">
jQuery(function() { Search.loadIndex("searchindex.js"); });
</script>
<script type="text/javascript" id="searchindexloader"></script>
<meta name="viewport" content="width=device-width,initial-scale=1.0">
<!--[if lt IE 9]>
<script type="text/javascript" src="_static/css3-mediaqueries.js"></script>
<![endif]-->
</head>
<body>
<div class="related" role="navigation" aria-label="related navigation">
<h3>Navigation</h3>
<ul>
<li class="right" style="margin-right: 10px">
<a href="genindex.html" title="General Index"
accesskey="I">index</a></li>
<li class="nav-item nav-item-0"><a href="index.html">algofun documentation</a> &#187;</li>
</ul>
</div>
<div class="document">
<div class="documentwrapper">
<div class="body" role="main">
<h1 id="search-documentation">Search</h1>
<div id="fallback" class="admonition warning">
<script type="text/javascript">$('#fallback').hide();</script>
<p>
Please activate JavaScript to enable the search
functionality.
</p>
</div>
<p>
From here you can search these documents. Enter your search
words into the box below and click "search". Note that the search
function will automatically search for all of the words. Pages
containing fewer words won't appear in the result list.
</p>
<form action="" method="get">
<input type="text" name="q" value="" />
<input type="submit" value="search" />
<span id="search-progress" style="padding-left: 10px"></span>
</form>
<div id="search-results">
</div>
</div>
</div>
<div class="clearer"></div>
</div>
<div class="related" role="navigation" aria-label="related navigation">
<h3>Navigation</h3>
<ul>
<li class="right" style="margin-right: 10px">
<a href="genindex.html" title="General Index"
>index</a></li>
<li class="nav-item nav-item-0"><a href="index.html">algofun documentation</a> &#187;</li>
</ul>
</div>
<div class="footer" role="contentinfo">
</div>
</body>
</html>

View File

@ -0,0 +1 @@
Search.setIndex({docnames:["MachineLearning","fil_conducteur","index","liens","notebooks/Pandas","pandas","programmation"],envversion:53,filenames:["MachineLearning.txt","fil_conducteur.txt","index.txt","liens.txt","notebooks/Pandas.ipynb","pandas.txt","programmation.txt"],objects:{},objnames:{},objtypes:{},terms:{"123233995736766e":4,"1er":6,"\u00e9critur":1,"\u00e9lection":6,"\u00e9tablir":1,"\u00e9tudiant":6,"\u00e9valuat":6,"d\u00e9couvrir":1,"default":0,"donn\u00e9":[1,6],"import":[0,4],"it\u00e9rabl":1,"pr\u00e9sidentiel":6,"r\u00e9sultat":1,"s\u00e9quentiel":6,Les:[1,6],The:[2,4],__version__:0,algorithm:[1,2],all:2,anagramm:6,analys:6,apprendr:6,apr:0,attribut:2,avail:2,avec:6,avril:1,big:0,blanc:1,bulletin:1,candidat:1,canton:1,ceris:4,chacun:1,chapitr:6,chaqu:1,chargeabl:6,code:2,col1:4,col2:4,col3:4,col4:4,col:4,column:4,com:0,common:2,conducteur:6,copyright:0,cos:4,creativ:2,credit:0,dan:1,data:[0,3,5],datafram:5,des:6,dico:4,dictionari:5,dictionnair:[1,6],displai:4,dispos:1,doctest:6,document:2,dont:1,dupont:4,durand:4,edit:6,empiriqu:6,ensembl:6,est:1,exampl:5,exploit:1,eyrol:6,fichier:[1,6],fil:6,format:0,franc:1,from:5,gcc:0,gestion:6,help:0,html:0,http:0,index:[2,4],inform:0,inscrit:1,ipynb:5,ipython:[4,5],issu:1,john:4,jupyt:5,kei:5,keyword:4,langag:6,lanist:4,learn:[2,3],lectroniqu:6,lectur:1,les:1,lgpl:2,librari:4,licenc:2,licens:[0,2],lien:2,lieu:1,line1:4,line2:4,line3:4,line4:4,line5:4,linux:0,list:6,machin:[2,3],machinelearningmasteri:0,make:3,math:4,matplotlib:0,modul:2,more:0,nation:1,niveau:1,nombr:1,notebook:5,nul:1,numpi:[0,4],objectif:1,obtenu:1,occas:1,officiel:6,ont:1,org:0,page:2,panda:[0,2,3],par:1,parti:6,particip:1,particuli:1,paul:4,pierr:4,plote:3,plu:1,pour:1,print:[0,4],programm:2,promot:6,pyfun:2,python:[0,2,6],qui:1,randn:4,random:[3,4],rard:6,recherch:[1,6],reorganis:5,reset_index:4,row:4,scienc:[0,3],scikit:0,scipi:0,score:1,search:2,sera:1,seri:4,sharealik:2,site:6,sklearn:0,snow:4,sont:1,stabl:0,step:0,structur:[1,6],swinnen:6,sys:0,tester:6,text:6,thi:2,thonni:6,tour:6,tri:[1,6],tupl:[1,5],tutori:2,type:0,under:2,une:6,unport:2,used:4,util:2,version:[0,6],voix:1,votant:1,which:2,www:0,yet:0},titles:["Machine learning","Fil conducteur : 1er tour des \u00e9lections pr\u00e9sidentielles 2017","algofundoc","Liens utiles","Pandas","pandas","Algorithmes et Programmation"],titleterms:{"1er":1,"\u00e9lection":1,"pr\u00e9sidentiel":1,algo:2,algorithm:6,annex:6,bibliographi:6,conducteur:1,cour:6,data:4,datafram:4,des:1,dictionari:4,document:6,fil:1,from:4,fun:2,indic:2,instal:0,kei:4,learn:0,lien:3,link:0,machin:0,panda:[4,5],programm:6,reorganis:4,some:0,tabl:2,tour:1,tupl:4,usag:0,util:3}})

Binary file not shown.

After

Width:  |  Height:  |  Size: 13 KiB

200
algo/algofundoc/conf.py Normal file
View File

@ -0,0 +1,200 @@
# -*- coding: utf-8 -*-
#
# This file is execfile()d with the current directory set to its
# containing dir.
#
# Note that not all possible configuration values are present in this
# autogenerated file.
#
# All configuration values have a default; values that are commented out
# serve to show the default.
# If extensions (or modules to document with autodoc) are in another directory,
# add these directories to sys.path here. If the directory is relative to the
# documentation root, use os.path.abspath to make it absolute, like shown here.
#
import os
import sys
# the code library
sys.path.insert(0, os.path.abspath('./src'))
# the *question* extension
sys.path.insert(0, os.path.abspath('./ext'))
# -- General configuration ------------------------------------------------
# If your documentation needs a minimal Sphinx version, state it here.
#
# needs_sphinx = '1.0'
# Add any Sphinx extension module names here, as strings. They can be
# extensions coming with Sphinx (named 'sphinx.ext.*') or your custom
# ones.
extensions = ['nbsphinx',
'sphinx.ext.extlinks',
'sphinx.ext.todo',
'sphinx.ext.ifconfig',
'sphinx.ext.viewcode',
'question']
# _______________________________________________________________________
# extlinks config
# can add an
# :src:`my source <hello>`
# in the txt goal files
extlinks = {'src': ('_modules/%s.html',
'full source for: ')}
# _______________________________________________________________________
# ifconfig section
def setup(app):
app.add_config_value('answer', False, 'env')
answer = True
# _______________________________________________________________________
# Add any paths that contain templates here, relative to this directory.
templates_path = ['_templates']
# The suffix(es) of source filenames.
# You can specify multiple suffix as a list of string:
#
# source_suffix = ['.rst', '.md']
source_suffix = '.txt'
# The master toctree document.
master_doc = 'index'
# General information about the project.
project = u'algofun'
copyright = u'2018, gwen'
author = u'gwen'
# The version info for the project you're documenting, acts as replacement for
# |version| and |release|, also used in various other places throughout the
# built documents.
#
# The short X.Y version.
version = u' '
# The full version, including alpha/beta/rc tags.
release = u' '
# The language for content autogenerated by Sphinx. Refer to documentation
# for a list of supported languages.
#
# This is also used if you do content translation via gettext catalogs.
# Usually you set "language" from the command line for these cases.
language = "en"
# List of patterns, relative to source directory, that match files and
# directories to ignore when looking for source files.
# This patterns also effect to html_static_path and html_extra_path
exclude_patterns = ['Readme.txt', 'bribes', '_build', 'Thumbs.db', '.DS_Store']
# The name of the Pygments (syntax highlighting) style to use.
pygments_style = 'bw'
#pygments_style = 'sphinx'
# If true, `todo` and `todoList` produce output, else they produce nothing.
todo_include_todos = True
# -- Options for HTML output ----------------------------------------------
# If true, links to the reST sources are added to the pages.
html_show_sourcelink = False
# The theme to use for HTML and HTML Help pages. See the documentation for
# a list of builtin themes.
#
#html_theme = 'alabaster'
html_theme = 'bizstyle'
# Theme options are theme-specific and customize the look and feel of a theme
# further. For a list of options available for each theme, see the
# documentation.
#
#html_theme_options = {
# 'show_powered_by': False,
# 'page_width': 80
# }
# Add any paths that contain custom static files (such as style sheets) here,
# relative to this directory. They are copied after the builtin static files,
# so a file named "default.css" will overwrite the builtin "default.css".
html_static_path = ['_static']
# Custom sidebar templates, must be a dictionary that maps document names
# to template names.
#
# This is required for the alabaster theme
# refs: http://alabaster.readthedocs.io/en/latest/installation.html#sidebars
html_sidebars = {
'**': [
#'relations.html', # needs 'show_related': True theme option to display
#'searchbox.html',
]
}
# If true, "Created using Sphinx" is shown in the HTML footer. Default is True.
html_show_sphinx = False
# If true, "(C) Copyright ..." is shown in the HTML footer. Default is True.
html_show_copyright = False
# -- Options for HTMLHelp output ------------------------------------------
# Output file base name for HTML help builder.
htmlhelp_basename = 'pyfundoc'
# -- Options for LaTeX output ---------------------------------------------
latex_elements = {
# The paper size ('letterpaper' or 'a4paper').
#
'papersize': 'a4paper',
# The font size ('10pt', '11pt' or '12pt').
#
'pointsize': '12pt',
# Additional stuff for the LaTeX preamble.
#
# 'preamble': '',
# Latex figure (float) alignment
#
# 'figure_align': 'htbp',
}
# Grouping the document tree into LaTeX files. List of tuples
# (source start file, target name, title,
# author, documentclass [howto, manual, or own class]).
latex_documents = [
(master_doc, 'pyfun.tex', u'pyfun Documentation',
u'gwen', 'manual'),
]
# -- Options for manual page output ---------------------------------------
# One entry per manual page. List of tuples
# (source start file, name, description, authors, manual section).
man_pages = [
(master_doc, 'pyfun', u'pyfun Documentation',
[author], 1)
]
# -- Options for Texinfo output -------------------------------------------
# Grouping the document tree into Texinfo files. List of tuples
# (source start file, target name, title, author,
# dir menu entry, description, category)
texinfo_documents = [
(master_doc, 'pyfun', u'pyfun Documentation',
author, 'pyfun', 'One line description of project.',
'Miscellaneous'),
]

View File

@ -0,0 +1 @@
"sphinx extensions"

Some files were not shown because too many files have changed in this diff Show More