From 2e6bd710731b4ee33d41b12a69de273b69dc009b Mon Sep 17 00:00:00 2001 From: Evarin Date: Tue, 4 Apr 2017 00:19:32 +0200 Subject: [PATCH 01/44] Archiving old stuff --- {experiENS => old/experiENS}/__init__.py | 0 {experiENS => old/experiENS}/settings.py | 0 {experiENS => old/experiENS}/urls.py | 0 {experiENS => old/experiENS}/wsgi.py | 0 {monstage => old/monstage}/__init__.py | 0 {monstage => old/monstage}/admin.py | 0 {monstage => old/monstage}/listepays.py | 0 .../monstage}/migrations/0001_initial.py | 0 .../monstage}/migrations/0002_auto_20150612_2003.py | 0 .../monstage}/migrations/0003_auto_20150613_1930.py | 0 .../monstage}/migrations/0004_auto_20150614_1517.py | 0 .../monstage}/migrations/0005_stage_thematiques.py | 0 {monstage => old/monstage}/migrations/__init__.py | 0 {monstage => old/monstage}/models.py | 0 {monstage => old/monstage}/static/home1.jpg | Bin {monstage => old/monstage}/static/home2.jpg | Bin {monstage => old/monstage}/static/index.css | 0 .../monstage}/static/script/jquery-1.11.1.min.js | 0 .../static/script/jquery.geocomplete.min.js | 0 {monstage => old/monstage}/static/style.css | 0 .../monstage}/templates/monstage/forbidden.html | 0 .../monstage}/templates/monstage/home.html | 0 .../monstage}/templates/monstage/index.html | 0 .../monstage}/templates/monstage/lieux_proches.json | 0 .../monstage}/templates/monstage/profil.html | 0 .../monstage}/templates/monstage/profil_edit.html | 0 .../monstage}/templates/monstage/search.html | 0 .../monstage}/templates/monstage/stage.html | 0 .../monstage}/templates/monstage/stage_add.html | 0 .../monstage}/templates/monstage/stage_edit.html | 0 .../templates/monstage/stage_edit_desc.html | 0 .../templates/monstage/stage_edit_feedback.html | 0 .../templates/monstage/stage_edit_lieu.html | 0 {monstage => old/monstage}/templates/skeleton.html | 0 {monstage => old/monstage}/tests.py | 0 {monstage => old/monstage}/urls.py | 0 {monstage => old/monstage}/views.py | 0 37 files changed, 0 insertions(+), 0 deletions(-) rename {experiENS => old/experiENS}/__init__.py (100%) rename {experiENS => old/experiENS}/settings.py (100%) rename {experiENS => old/experiENS}/urls.py (100%) rename {experiENS => old/experiENS}/wsgi.py (100%) rename {monstage => old/monstage}/__init__.py (100%) rename {monstage => old/monstage}/admin.py (100%) rename {monstage => old/monstage}/listepays.py (100%) rename {monstage => old/monstage}/migrations/0001_initial.py (100%) rename {monstage => old/monstage}/migrations/0002_auto_20150612_2003.py (100%) rename {monstage => old/monstage}/migrations/0003_auto_20150613_1930.py (100%) rename {monstage => old/monstage}/migrations/0004_auto_20150614_1517.py (100%) rename {monstage => old/monstage}/migrations/0005_stage_thematiques.py (100%) rename {monstage => old/monstage}/migrations/__init__.py (100%) rename {monstage => old/monstage}/models.py (100%) rename {monstage => old/monstage}/static/home1.jpg (100%) rename {monstage => old/monstage}/static/home2.jpg (100%) rename {monstage => old/monstage}/static/index.css (100%) rename {monstage => old/monstage}/static/script/jquery-1.11.1.min.js (100%) rename {monstage => old/monstage}/static/script/jquery.geocomplete.min.js (100%) rename {monstage => old/monstage}/static/style.css (100%) rename {monstage => old/monstage}/templates/monstage/forbidden.html (100%) rename {monstage => old/monstage}/templates/monstage/home.html (100%) rename {monstage => old/monstage}/templates/monstage/index.html (100%) rename {monstage => old/monstage}/templates/monstage/lieux_proches.json (100%) rename {monstage => old/monstage}/templates/monstage/profil.html (100%) rename {monstage => old/monstage}/templates/monstage/profil_edit.html (100%) rename {monstage => old/monstage}/templates/monstage/search.html (100%) rename {monstage => old/monstage}/templates/monstage/stage.html (100%) rename {monstage => old/monstage}/templates/monstage/stage_add.html (100%) rename {monstage => old/monstage}/templates/monstage/stage_edit.html (100%) rename {monstage => old/monstage}/templates/monstage/stage_edit_desc.html (100%) rename {monstage => old/monstage}/templates/monstage/stage_edit_feedback.html (100%) rename {monstage => old/monstage}/templates/monstage/stage_edit_lieu.html (100%) rename {monstage => old/monstage}/templates/skeleton.html (100%) rename {monstage => old/monstage}/tests.py (100%) rename {monstage => old/monstage}/urls.py (100%) rename {monstage => old/monstage}/views.py (100%) diff --git a/experiENS/__init__.py b/old/experiENS/__init__.py similarity index 100% rename from experiENS/__init__.py rename to old/experiENS/__init__.py diff --git a/experiENS/settings.py b/old/experiENS/settings.py similarity index 100% rename from experiENS/settings.py rename to old/experiENS/settings.py diff --git a/experiENS/urls.py b/old/experiENS/urls.py similarity index 100% rename from experiENS/urls.py rename to old/experiENS/urls.py diff --git a/experiENS/wsgi.py b/old/experiENS/wsgi.py similarity index 100% rename from experiENS/wsgi.py rename to old/experiENS/wsgi.py diff --git a/monstage/__init__.py b/old/monstage/__init__.py similarity index 100% rename from monstage/__init__.py rename to old/monstage/__init__.py diff --git a/monstage/admin.py b/old/monstage/admin.py similarity index 100% rename from monstage/admin.py rename to old/monstage/admin.py diff --git a/monstage/listepays.py b/old/monstage/listepays.py similarity index 100% rename from monstage/listepays.py rename to old/monstage/listepays.py diff --git a/monstage/migrations/0001_initial.py b/old/monstage/migrations/0001_initial.py similarity index 100% rename from monstage/migrations/0001_initial.py rename to old/monstage/migrations/0001_initial.py diff --git a/monstage/migrations/0002_auto_20150612_2003.py b/old/monstage/migrations/0002_auto_20150612_2003.py similarity index 100% rename from monstage/migrations/0002_auto_20150612_2003.py rename to old/monstage/migrations/0002_auto_20150612_2003.py diff --git a/monstage/migrations/0003_auto_20150613_1930.py b/old/monstage/migrations/0003_auto_20150613_1930.py similarity index 100% rename from monstage/migrations/0003_auto_20150613_1930.py rename to old/monstage/migrations/0003_auto_20150613_1930.py diff --git a/monstage/migrations/0004_auto_20150614_1517.py b/old/monstage/migrations/0004_auto_20150614_1517.py similarity index 100% rename from monstage/migrations/0004_auto_20150614_1517.py rename to old/monstage/migrations/0004_auto_20150614_1517.py diff --git a/monstage/migrations/0005_stage_thematiques.py b/old/monstage/migrations/0005_stage_thematiques.py similarity index 100% rename from monstage/migrations/0005_stage_thematiques.py rename to old/monstage/migrations/0005_stage_thematiques.py diff --git a/monstage/migrations/__init__.py b/old/monstage/migrations/__init__.py similarity index 100% rename from monstage/migrations/__init__.py rename to old/monstage/migrations/__init__.py diff --git a/monstage/models.py b/old/monstage/models.py similarity index 100% rename from monstage/models.py rename to old/monstage/models.py diff --git a/monstage/static/home1.jpg b/old/monstage/static/home1.jpg similarity index 100% rename from monstage/static/home1.jpg rename to old/monstage/static/home1.jpg diff --git a/monstage/static/home2.jpg b/old/monstage/static/home2.jpg similarity index 100% rename from monstage/static/home2.jpg rename to old/monstage/static/home2.jpg diff --git a/monstage/static/index.css b/old/monstage/static/index.css similarity index 100% rename from monstage/static/index.css rename to old/monstage/static/index.css diff --git a/monstage/static/script/jquery-1.11.1.min.js b/old/monstage/static/script/jquery-1.11.1.min.js similarity index 100% rename from monstage/static/script/jquery-1.11.1.min.js rename to old/monstage/static/script/jquery-1.11.1.min.js diff --git a/monstage/static/script/jquery.geocomplete.min.js b/old/monstage/static/script/jquery.geocomplete.min.js similarity index 100% rename from monstage/static/script/jquery.geocomplete.min.js rename to old/monstage/static/script/jquery.geocomplete.min.js diff --git a/monstage/static/style.css b/old/monstage/static/style.css similarity index 100% rename from monstage/static/style.css rename to old/monstage/static/style.css diff --git a/monstage/templates/monstage/forbidden.html b/old/monstage/templates/monstage/forbidden.html similarity index 100% rename from monstage/templates/monstage/forbidden.html rename to old/monstage/templates/monstage/forbidden.html diff --git a/monstage/templates/monstage/home.html b/old/monstage/templates/monstage/home.html similarity index 100% rename from monstage/templates/monstage/home.html rename to old/monstage/templates/monstage/home.html diff --git a/monstage/templates/monstage/index.html b/old/monstage/templates/monstage/index.html similarity index 100% rename from monstage/templates/monstage/index.html rename to old/monstage/templates/monstage/index.html diff --git a/monstage/templates/monstage/lieux_proches.json b/old/monstage/templates/monstage/lieux_proches.json similarity index 100% rename from monstage/templates/monstage/lieux_proches.json rename to old/monstage/templates/monstage/lieux_proches.json diff --git a/monstage/templates/monstage/profil.html b/old/monstage/templates/monstage/profil.html similarity index 100% rename from monstage/templates/monstage/profil.html rename to old/monstage/templates/monstage/profil.html diff --git a/monstage/templates/monstage/profil_edit.html b/old/monstage/templates/monstage/profil_edit.html similarity index 100% rename from monstage/templates/monstage/profil_edit.html rename to old/monstage/templates/monstage/profil_edit.html diff --git a/monstage/templates/monstage/search.html b/old/monstage/templates/monstage/search.html similarity index 100% rename from monstage/templates/monstage/search.html rename to old/monstage/templates/monstage/search.html diff --git a/monstage/templates/monstage/stage.html b/old/monstage/templates/monstage/stage.html similarity index 100% rename from monstage/templates/monstage/stage.html rename to old/monstage/templates/monstage/stage.html diff --git a/monstage/templates/monstage/stage_add.html b/old/monstage/templates/monstage/stage_add.html similarity index 100% rename from monstage/templates/monstage/stage_add.html rename to old/monstage/templates/monstage/stage_add.html diff --git a/monstage/templates/monstage/stage_edit.html b/old/monstage/templates/monstage/stage_edit.html similarity index 100% rename from monstage/templates/monstage/stage_edit.html rename to old/monstage/templates/monstage/stage_edit.html diff --git a/monstage/templates/monstage/stage_edit_desc.html b/old/monstage/templates/monstage/stage_edit_desc.html similarity index 100% rename from monstage/templates/monstage/stage_edit_desc.html rename to old/monstage/templates/monstage/stage_edit_desc.html diff --git a/monstage/templates/monstage/stage_edit_feedback.html b/old/monstage/templates/monstage/stage_edit_feedback.html similarity index 100% rename from monstage/templates/monstage/stage_edit_feedback.html rename to old/monstage/templates/monstage/stage_edit_feedback.html diff --git a/monstage/templates/monstage/stage_edit_lieu.html b/old/monstage/templates/monstage/stage_edit_lieu.html similarity index 100% rename from monstage/templates/monstage/stage_edit_lieu.html rename to old/monstage/templates/monstage/stage_edit_lieu.html diff --git a/monstage/templates/skeleton.html b/old/monstage/templates/skeleton.html similarity index 100% rename from monstage/templates/skeleton.html rename to old/monstage/templates/skeleton.html diff --git a/monstage/tests.py b/old/monstage/tests.py similarity index 100% rename from monstage/tests.py rename to old/monstage/tests.py diff --git a/monstage/urls.py b/old/monstage/urls.py similarity index 100% rename from monstage/urls.py rename to old/monstage/urls.py diff --git a/monstage/views.py b/old/monstage/views.py similarity index 100% rename from monstage/views.py rename to old/monstage/views.py From 7f574009905b79176b92b9d5d802c005d7bd764b Mon Sep 17 00:00:00 2001 From: Evarin Date: Tue, 4 Apr 2017 00:19:57 +0200 Subject: [PATCH 02/44] Misc --- .gitignore | 4 +++- requirements-dev.txt | 2 ++ requirements.txt | 8 +++----- 3 files changed, 8 insertions(+), 6 deletions(-) create mode 100644 requirements-dev.txt diff --git a/.gitignore b/.gitignore index 8db636a..35849b3 100644 --- a/.gitignore +++ b/.gitignore @@ -103,4 +103,6 @@ tpathtxt test.py # Migrations -monstage/migrations/ \ No newline at end of file +monstage/migrations/ +*.venv/ +*~ \ No newline at end of file diff --git a/requirements-dev.txt b/requirements-dev.txt new file mode 100644 index 0000000..d115872 --- /dev/null +++ b/requirements-dev.txt @@ -0,0 +1,2 @@ +#spatialite-bin +django-debug-toolbar diff --git a/requirements.txt b/requirements.txt index 9b2580a..7c8b216 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,6 +1,4 @@ -django>=1.7 -django-cas (patched) -psycopg2 -postgis +django +django-cas-ng django-taggit -python-ldap \ No newline at end of file +python-ldap From 2447b0558ad92b1b958dd337f8d64b10719b49ff Mon Sep 17 00:00:00 2001 From: Evarin Date: Tue, 4 Apr 2017 00:31:50 +0200 Subject: [PATCH 03/44] =?UTF-8?q?D=C3=A9but=20du=20renouveau?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- avisstage/.#models.py | 1 + avisstage/__init__.py | 0 avisstage/admin.py | 3 ++ avisstage/apps.py | 7 ++++ avisstage/migrations/__init__.py | 0 avisstage/models.py | 5 +++ avisstage/tests.py | 3 ++ avisstage/views.py | 3 ++ experiENS/__init__.py | 0 experiENS/secrets.py | 1 + experiENS/settings.py | 1 + experiENS/settings_base.py | 70 ++++++++++++++++++++++++++++++++ experiENS/settings_dev.py | 18 ++++++++ experiENS/urls.py | 10 +++++ experiENS/wsgi.py | 14 +++++++ old/manage.py | 10 +++++ 16 files changed, 146 insertions(+) create mode 120000 avisstage/.#models.py create mode 100644 avisstage/__init__.py create mode 100644 avisstage/admin.py create mode 100644 avisstage/apps.py create mode 100644 avisstage/migrations/__init__.py create mode 100644 avisstage/models.py create mode 100644 avisstage/tests.py create mode 100644 avisstage/views.py create mode 100644 experiENS/__init__.py create mode 100644 experiENS/secrets.py create mode 120000 experiENS/settings.py create mode 100644 experiENS/settings_base.py create mode 100644 experiENS/settings_dev.py create mode 100644 experiENS/urls.py create mode 100644 experiENS/wsgi.py create mode 100644 old/manage.py diff --git a/avisstage/.#models.py b/avisstage/.#models.py new file mode 120000 index 0000000..9dc600e --- /dev/null +++ b/avisstage/.#models.py @@ -0,0 +1 @@ +evarin@Igloo.6706:1491250550 \ No newline at end of file diff --git a/avisstage/__init__.py b/avisstage/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/avisstage/admin.py b/avisstage/admin.py new file mode 100644 index 0000000..8c38f3f --- /dev/null +++ b/avisstage/admin.py @@ -0,0 +1,3 @@ +from django.contrib import admin + +# Register your models here. diff --git a/avisstage/apps.py b/avisstage/apps.py new file mode 100644 index 0000000..afc1822 --- /dev/null +++ b/avisstage/apps.py @@ -0,0 +1,7 @@ +from __future__ import unicode_literals + +from django.apps import AppConfig + + +class AvisstageConfig(AppConfig): + name = 'avisstage' diff --git a/avisstage/migrations/__init__.py b/avisstage/migrations/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/avisstage/models.py b/avisstage/models.py new file mode 100644 index 0000000..bd4b2ab --- /dev/null +++ b/avisstage/models.py @@ -0,0 +1,5 @@ +from __future__ import unicode_literals + +from django.db import models + +# Create your models here. diff --git a/avisstage/tests.py b/avisstage/tests.py new file mode 100644 index 0000000..7ce503c --- /dev/null +++ b/avisstage/tests.py @@ -0,0 +1,3 @@ +from django.test import TestCase + +# Create your tests here. diff --git a/avisstage/views.py b/avisstage/views.py new file mode 100644 index 0000000..91ea44a --- /dev/null +++ b/avisstage/views.py @@ -0,0 +1,3 @@ +from django.shortcuts import render + +# Create your views here. diff --git a/experiENS/__init__.py b/experiENS/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/experiENS/secrets.py b/experiENS/secrets.py new file mode 100644 index 0000000..f03fb95 --- /dev/null +++ b/experiENS/secrets.py @@ -0,0 +1 @@ +SECRET_KEY = 'toto' diff --git a/experiENS/settings.py b/experiENS/settings.py new file mode 120000 index 0000000..f1c999f --- /dev/null +++ b/experiENS/settings.py @@ -0,0 +1 @@ +settings_dev.py \ No newline at end of file diff --git a/experiENS/settings_base.py b/experiENS/settings_base.py new file mode 100644 index 0000000..aaaf816 --- /dev/null +++ b/experiENS/settings_base.py @@ -0,0 +1,70 @@ +""" +Django settings for experiENS project. + +For more information on this file, see +https://docs.djangoproject.com/en/1.7/topics/settings/ + +For the full list of settings and their values, see +https://docs.djangoproject.com/en/1.7/ref/settings/ +""" + +# Build paths inside the project like this: os.path.join(BASE_DIR, ...) +import os +BASE_DIR = os.path.dirname(os.path.dirname(__file__)) + +# Quick-start development settings - unsuitable for production +# See https://docs.djangoproject.com/en/1.7/howto/deployment/checklist/ + +ALLOWED_HOSTS = [] + +# Application definition + +INSTALLED_APPS = ( + 'django.contrib.admin', + 'django.contrib.auth', + 'django.contrib.contenttypes', + 'django.contrib.sessions', + 'django.contrib.messages', + 'django.contrib.staticfiles', + 'django.contrib.gis', + + 'django-taggit', + 'avisstage' +) + +MIDDLEWARE_CLASSES = ( + 'django.contrib.sessions.middleware.SessionMiddleware', + 'django.middleware.common.CommonMiddleware', + 'django.middleware.csrf.CsrfViewMiddleware', + 'django.contrib.auth.middleware.AuthenticationMiddleware', + 'django.contrib.auth.middleware.SessionAuthenticationMiddleware', + 'django.contrib.messages.middleware.MessageMiddleware', + 'django.middleware.clickjacking.XFrameOptionsMiddleware', +) + +ROOT_URLCONF = 'experiENS.urls' + +WSGI_APPLICATION = 'experiENS.wsgi.application' + + +# Database +# https://docs.djangoproject.com/en/1.7/ref/settings/#databases + +# Internationalization +# https://docs.djangoproject.com/en/1.7/topics/i18n/ + +LANGUAGE_CODE = 'en-us' + +TIME_ZONE = 'UTC' + +USE_I18N = True + +USE_L10N = True + +USE_TZ = True + + +# Static files (CSS, JavaScript, Images) +# https://docs.djangoproject.com/en/1.7/howto/static-files/ + +STATIC_URL = '/static/' diff --git a/experiENS/settings_dev.py b/experiENS/settings_dev.py new file mode 100644 index 0000000..47c19f9 --- /dev/null +++ b/experiENS/settings_dev.py @@ -0,0 +1,18 @@ +from settings_base import * + +from secrets import SECRET_KEY + +DEBUG = True + +TEMPLATE_DEBUG = True + +DATABASES = { + 'default': { + 'ENGINE': 'django.db.backends.sqlite3', + 'NAME': os.path.join(BASE_DIR, 'db.sqlite3'), + } +} + +INSTALLED_APPS += ( + 'debug_toolbar', +) diff --git a/experiENS/urls.py b/experiENS/urls.py new file mode 100644 index 0000000..078fad9 --- /dev/null +++ b/experiENS/urls.py @@ -0,0 +1,10 @@ +from django.conf.urls import patterns, include, url +from django.contrib import admin + +urlpatterns = patterns('', + # Examples: + # url(r'^$', 'experiENS.views.home', name='home'), + # url(r'^blog/', include('blog.urls')), + + url(r'^admin/', include(admin.site.urls)), +) diff --git a/experiENS/wsgi.py b/experiENS/wsgi.py new file mode 100644 index 0000000..8650d72 --- /dev/null +++ b/experiENS/wsgi.py @@ -0,0 +1,14 @@ +""" +WSGI config for experiENS project. + +It exposes the WSGI callable as a module-level variable named ``application``. + +For more information on this file, see +https://docs.djangoproject.com/en/1.7/howto/deployment/wsgi/ +""" + +import os +os.environ.setdefault("DJANGO_SETTINGS_MODULE", "experiENS.settings") + +from django.core.wsgi import get_wsgi_application +application = get_wsgi_application() diff --git a/old/manage.py b/old/manage.py new file mode 100644 index 0000000..7c67bf4 --- /dev/null +++ b/old/manage.py @@ -0,0 +1,10 @@ +#!/usr/bin/env python +import os +import sys + +if __name__ == "__main__": + os.environ.setdefault("DJANGO_SETTINGS_MODULE", "experiENS.settings") + + from django.core.management import execute_from_command_line + + execute_from_command_line(sys.argv) From 71eada8eed57c7c52283e036e08ea503049742b0 Mon Sep 17 00:00:00 2001 From: Evarin Date: Tue, 4 Apr 2017 00:28:25 +0200 Subject: [PATCH 04/44] Nice models --- .gitignore | 4 +- avisstage/.#models.py | 1 - avisstage/models.py | 202 ++++++++++++++++++++++++++- avisstage/statics.py | 270 +++++++++++++++++++++++++++++++++++++ avisstage/utils.py | 4 + experiENS/settings_base.py | 20 ++- experiENS/urls.py | 6 +- requirements.txt | 1 + 8 files changed, 499 insertions(+), 9 deletions(-) delete mode 120000 avisstage/.#models.py create mode 100644 avisstage/statics.py create mode 100644 avisstage/utils.py diff --git a/.gitignore b/.gitignore index 35849b3..d73eec0 100644 --- a/.gitignore +++ b/.gitignore @@ -105,4 +105,6 @@ test.py # Migrations monstage/migrations/ *.venv/ -*~ \ No newline at end of file +*~ +\#* +.#* \ No newline at end of file diff --git a/avisstage/.#models.py b/avisstage/.#models.py deleted file mode 120000 index 9dc600e..0000000 --- a/avisstage/.#models.py +++ /dev/null @@ -1 +0,0 @@ -evarin@Igloo.6706:1491250550 \ No newline at end of file diff --git a/avisstage/models.py b/avisstage/models.py index bd4b2ab..b930edb 100644 --- a/avisstage/models.py +++ b/avisstage/models.py @@ -1,5 +1,205 @@ +# coding: utf-8 + from __future__ import unicode_literals from django.db import models +from django.contrib.auth.models import User +from django.db.models.signals import post_save +from django.template.defaultfilters import slugify +from django.contrib.gis.db import models as geomodels -# Create your models here. +from taggit.managers import TaggableManager + +from djrichtextfield.models import RichTextField +from .utils import choices_length +from .statics import DEPARTEMENTS_DEFAUT, PAYS_OPTIONS, TYPE_LIEU_OPTIONS, TYPE_STAGE_OPTIONS + +import ldap + +# +# Profil Normalien (extension du modèle User) +# + +class Normalien(models.Model): + user = models.OneToOneField(User, related_name="profil") + + # Infos spécifiques + nom = models.CharField(u"Nom complet", max_length=255, blank=True) + promotion = models.CharField(u"Promotion", max_length=40, blank=True) + mail = models.CharField(u"Adresse e-mail permanente", + max_length=200, blank=True) + + class Meta: + verbose_name = u"Profil élève" + verbose_name_plural = u"Profils élèves" + + def __unicode__(self): + return unicode("%s (%s)", self.nom, self.user.username) + +# Hook à la création d'un nouvel utilisateur : récupération de ses infos par LDAP +def create_user_profile(sender, instance, created, **kwargs): + if created: + profil = Normalien.objects.get_or_create(user=instance) + try: + ldap.set_option(ldap.OPT_X_TLS_REQUIRE_CERT, ldap.OPT_X_TLS_NEVER) + l = ldap.initialize("ldaps://ldap.spi.ens.fr:636") + l.set_option(ldap.OPT_REFERRALS, 0) + l.set_option(ldap.OPT_PROTOCOL_VERSION, 3) + l.set_option(ldap.OPT_X_TLS,ldap.OPT_X_TLS_DEMAND) + l.set_option( ldap.OPT_X_TLS_DEMAND, True ) + l.set_option( ldap.OPT_DEBUG_LEVEL, 255 ) + info = l.search_s('dc=spi,dc=ens,dc=fr', + ldap.SCOPE_SUBTREE, + '(uid=%s)' % (instance.username,), + ['cn','mailRoutingAddress', 'homeDirectory']) + if len(info) > 0: + infos = info[0][1] + profil.nom = infos.get('cn', [''])[0] + if 'homeDirectory' in infos: + dirs = infos['homeDirectory'][0].split('/') + if dirs[1] == 'users': + annee = dirs[2] + dep = dirs[4] + dep = dict(DEPARTEMENTS_DEFAUT).get('dep') + profil.promotion = u'%s %s' % (dep, annee) + profil.mail = infos.get('mailRoutingAddress', + ['%s@clipper.ens.fr'%instance.username]) + profil.save() + except ldap.LDAPError: + pass +post_save.connect(create_user_profile, sender=User) + +# +# Lieu de stage +# + +class Lieu(models.Model): + # Général + nom = models.CharField(u"Nom de l'institution d'accueil", + max_length=250) + type_lieu = models.CharField(u"Type de structure d'accueil", + default="universite", + choices=TYPE_LIEU_OPTIONS, + max_length=choices_length(TYPE_LIEU_OPTIONS)) + + # Infos géographiques + ville = models.CharField(u"Ville", + max_length=200) + pays = models.CharField(u"Pays", + choices=PAYS_OPTIONS, + max_length=choices_length(PAYS_OPTIONS)) + + # Coordonnées + objects = geomodels.GeoManager() # Requis par GeoDjango + coord = geomodels.PointField(u"Coordonnées", + geography=True) + + + def __unicode__(self): + return u"%s (%s)" % (self.name, self.ville) + + class Meta: + verbose_name = "Lieu" + verbose_name_plural = "Lieux" + +# +# Matières des stages +# + +class StageMatiere(models.Model): + nom = models.CharField(u"Nom", max_length=30) + slug = models.SlugField() + + class Meta: + verbose_name = "Matière des stages" + verbose_name_plural = "Matières des stages" + + def __unicode__(self): + return self.name + + def save(self, *args, **kwargs): + if not self.id: + self.slug = slugify(self.nom) + super(StageMatiere, self).save(*args, **kwargs) + +# +# Un stage +# + +class Stage(models.Model): + # Misc + auteur = models.ForeignKey(Normalien, related_name="stages") + public = models.BooleanField(u"Visible publiquement", default=False) + + # Caractéristiques du stage + sujet = models.CharField(u"Sujet", max_length=500) + + date_debut = models.DateField(u"Date de début", null=True) + date_fin = models.DateField(u"Date de fin", null=True) + + type_stage = models.CharField(u"Type", + default="stage", + choices=TYPE_STAGE_OPTIONS, + max_length=choices_length(TYPE_STAGE_OPTIONS)) + + thematiques = TaggableManager(u"Thématiques", blank=True) + matieres = models.ManyToManyField(StageMatiere, related_name="stages") + encadrants = models.CharField(u"Encadrants", max_length=500, blank=True) + + # Avis + lieux = models.ManyToManyField(Lieu, related_name="stages", + through="AvisLieu") + avis_stage = models.OneToOneField("AvisStage", related_name="stage") + + @property + def avis_lieux(self): + return self.avislieu_set.order_by('order') + + @property + def lieu_principal(self): + return self.avis_lieux[0].lieu + + def __unicode__(self): + return u"%s (par %s)" % (self.sujet, self.auteur.user_id) + + class Meta: + verbose_name = "Stage" + +# +# Les avis +# + +class AvisStage(models.Model): + stage = models.OneToOneField(Stage, related_name="avis_stage") + + chapo = models.TextField(u"En quelques mots") + avis_personnes = RichTextField(u"Les encadrants et l'équipe") + avis_sujet = RichTextField(u"Le sujet de stage") + avis_admin = RichTextField(u"Formalités et administration") + + les_plus = models.TextField(u"Les plus du stage") + les_moins = models.TextField(u"Les moins du stage") + + def __unicode__(self): + return u"Avis sur {%s} par %" % (stage.sujet, stage.auteur.user_id) + +class AvisLieu(models.Model): + stage = models.ForeignKey(Stage) + lieu = models.ForeignKey(Lieu) + order = models.IntegerField("Ordre", default=0) + + chapo = models.TextField(u"En quelques mots") + avis_lieustage = RichTextField(u"Le lieu du stage") + avis_pratique = RichTextField(u"S'installer - conseils pratiques") + avis_tourisme = RichTextField(u"Dans les parages") + + les_plus = models.TextField(u"Les plus du lieu") + les_moins = models.TextField(u"Les moins du lieu") + + class Meta: + verbose_name = "Avis sur un lieu de stage" + verbose_name_plural = "Avis sur un lieu de stage" + + def __unicode__(self): + return u"Avis sur {%s} par %" % (lieu.nom, stage.auteur.user_id) + diff --git a/avisstage/statics.py b/avisstage/statics.py new file mode 100644 index 0000000..356b39e --- /dev/null +++ b/avisstage/statics.py @@ -0,0 +1,270 @@ +# coding: utf-8 + +DEPARTEMENTS_DEFAUT = ( + ('phy', 'Physique'), + ('maths', 'Maths'), + ('bio', 'Biologie'), + ('chimie', 'Chimie'), + ('geol', u'Géosciences'), + ('dec', 'DEC'), + ('info', 'Informatique'), + ('litt', u'Littéraire'), + ('guests', u'Pensionnaires étrangers'), + ('pei', u'PEI'), +) + +TYPE_STAGE_OPTIONS = ( + ('stage', u"Stage"), +) + +TYPE_LIEU_OPTIONS = ( + ('universite', u"Université"), + ('entreprise', u"Entreprise"), + ('centrerecherche', u"Centre de recherche"), + ('administration', u"Administration"), + ('autre', u"Autre"), +) + +PAYS_OPTIONS = ( + ("AF", u"Afghanistan"), + ("AL", u"Albanie"), + ("AQ", u"Antarctique"), + ("DZ", u"Algérie"), + ("AS", u"Samoa Américaines"), + ("AD", u"Andorre"), + ("AO", u"Angola"), + ("AG", u"Antigua-et-Barbuda"), + ("AZ", u"Azerbaïdjan"), + ("AR", u"Argentine"), + ("AU", u"Australie"), + ("AT", u"Autriche"), + ("BS", u"Bahamas"), + ("BH", u"Bahreïn"), + ("BD", u"Bangladesh"), + ("AM", u"Arménie"), + ("BB", u"Barbade"), + ("BE", u"Belgique"), + ("BM", u"Bermudes"), + ("BT", u"Bhoutan"), + ("BO", u"Bolivie"), + ("BA", u"Bosnie-Herzégovine"), + ("BW", u"Botswana"), + ("BV", u"Île Bouvet"), + ("BR", u"Brésil"), + ("BZ", u"Belize"), + ("IO", u"Territoire Britannique de l'Océan Indien"), + ("SB", u"Îles Salomon"), + ("VG", u"Îles Vierges Britanniques"), + ("BN", u"Brunéi Darussalam"), + ("BG", u"Bulgarie"), + ("MM", u"Myanmar"), + ("BI", u"Burundi"), + ("BY", u"Bélarus"), + ("KH", u"Cambodge"), + ("CM", u"Cameroun"), + ("CA", u"Canada"), + ("CV", u"Cap-vert"), + ("KY", u"Îles Caïmanes"), + ("CF", u"République Centrafricaine"), + ("LK", u"Sri Lanka"), + ("TD", u"Tchad"), + ("CL", u"Chili"), + ("CN", u"Chine"), + ("TW", u"Taïwan"), + ("CX", u"Île Christmas"), + ("CC", u"Îles Cocos (Keeling)"), + ("CO", u"Colombie"), + ("KM", u"Comores"), + ("YT", u"Mayotte"), + ("CG", u"République du Congo"), + ("CD", u"République Démocratique du Congo"), + ("CK", u"Îles Cook"), + ("CR", u"Costa Rica"), + ("HR", u"Croatie"), + ("CU", u"Cuba"), + ("CY", u"Chypre"), + ("CZ", u"République Tchèque"), + ("BJ", u"Bénin"), + ("DK", u"Danemark"), + ("DM", u"Dominique"), + ("DO", u"République Dominicaine"), + ("EC", u"Équateur"), + ("SV", u"El Salvador"), + ("GQ", u"Guinée Équatoriale"), + ("ET", u"Éthiopie"), + ("ER", u"Érythrée"), + ("EE", u"Estonie"), + ("FO", u"Îles Féroé"), + ("FK", u"Îles (malvinas) Falkland"), + ("GS", u"Géorgie du Sud et les Îles Sandwich du Sud"), + ("FJ", u"Fidji"), + ("FI", u"Finlande"), + ("AX", u"Îles Åland"), + ("FR", u"France"), + ("GF", u"Guyane Française"), + ("PF", u"Polynésie Française"), + ("TF", u"Terres Australes Françaises"), + ("DJ", u"Djibouti"), + ("GA", u"Gabon"), + ("GE", u"Géorgie"), + ("GM", u"Gambie"), + ("PS", u"Territoire Palestinien Occupé"), + ("DE", u"Allemagne"), + ("GH", u"Ghana"), + ("GI", u"Gibraltar"), + ("KI", u"Kiribati"), + ("GR", u"Grèce"), + ("GL", u"Groenland"), + ("GD", u"Grenade"), + ("GP", u"Guadeloupe"), + ("GU", u"Guam"), + ("GT", u"Guatemala"), + ("GN", u"Guinée"), + ("GY", u"Guyana"), + ("HT", u"Haïti"), + ("HM", u"Îles Heard et Mcdonald"), + ("VA", u"Saint-Siège (état de la Cité du Vatican)"), + ("HN", u"Honduras"), + ("HK", u"Hong-Kong"), + ("HU", u"Hongrie"), + ("IS", u"Islande"), + ("IN", u"Inde"), + ("ID", u"Indonésie"), + ("IR", u"République Islamique d'Iran"), + ("IQ", u"Iraq"), + ("IE", u"Irlande"), + ("IL", u"Israël"), + ("IT", u"Italie"), + ("CI", u"Côte d'Ivoire"), + ("JM", u"Jamaïque"), + ("JP", u"Japon"), + ("KZ", u"Kazakhstan"), + ("JO", u"Jordanie"), + ("KE", u"Kenya"), + ("KP", u"République Populaire Démocratique de Corée"), + ("KR", u"République de Corée"), + ("KW", u"Koweït"), + ("KG", u"Kirghizistan"), + ("LA", u"République Démocratique Populaire Lao"), + ("LB", u"Liban"), + ("LS", u"Lesotho"), + ("LV", u"Lettonie"), + ("LR", u"Libéria"), + ("LY", u"Jamahiriya Arabe Libyenne"), + ("LI", u"Liechtenstein"), + ("LT", u"Lituanie"), + ("LU", u"Luxembourg"), + ("MO", u"Macao"), + ("MG", u"Madagascar"), + ("MW", u"Malawi"), + ("MY", u"Malaisie"), + ("MV", u"Maldives"), + ("ML", u"Mali"), + ("MT", u"Malte"), + ("MQ", u"Martinique"), + ("MR", u"Mauritanie"), + ("MU", u"Maurice"), + ("MX", u"Mexique"), + ("MC", u"Monaco"), + ("MN", u"Mongolie"), + ("MD", u"République de Moldova"), + ("MS", u"Montserrat"), + ("MA", u"Maroc"), + ("MZ", u"Mozambique"), + ("OM", u"Oman"), + ("NA", u"Namibie"), + ("NR", u"Nauru"), + ("NP", u"Népal"), + ("NL", u"Pays-Bas"), + ("AN", u"Antilles Néerlandaises"), + ("AW", u"Aruba"), + ("NC", u"Nouvelle-Calédonie"), + ("VU", u"Vanuatu"), + ("NZ", u"Nouvelle-Zélande"), + ("NI", u"Nicaragua"), + ("NE", u"Niger"), + ("NG", u"Nigéria"), + ("NU", u"Niué"), + ("NF", u"Île Norfolk"), + ("NO", u"Norvège"), + ("MP", u"Îles Mariannes du Nord"), + ("UM", u"Îles Mineures Éloignées des États-Unis"), + ("FM", u"États Fédérés de Micronésie"), + ("MH", u"Îles Marshall"), + ("PW", u"Palaos"), + ("PK", u"Pakistan"), + ("PA", u"Panama"), + ("PG", u"Papouasie-Nouvelle-Guinée"), + ("PY", u"Paraguay"), + ("PE", u"Pérou"), + ("PH", u"Philippines"), + ("PN", u"Pitcairn"), + ("PL", u"Pologne"), + ("PT", u"Portugal"), + ("GW", u"Guinée-Bissau"), + ("TL", u"Timor-Leste"), + ("PR", u"Porto Rico"), + ("QA", u"Qatar"), + ("RE", u"Réunion"), + ("RO", u"Roumanie"), + ("RU", u"Fédération de Russie"), + ("RW", u"Rwanda"), + ("SH", u"Sainte-Hélène"), + ("KN", u"Saint-Kitts-et-Nevis"), + ("AI", u"Anguilla"), + ("LC", u"Sainte-Lucie"), + ("PM", u"Saint-Pierre-et-Miquelon"), + ("VC", u"Saint-Vincent-et-les Grenadines"), + ("SM", u"Saint-Marin"), + ("ST", u"Sao Tomé-et-Principe"), + ("SA", u"Arabie Saoudite"), + ("SN", u"Sénégal"), + ("SC", u"Seychelles"), + ("SL", u"Sierra Leone"), + ("SG", u"Singapour"), + ("SK", u"Slovaquie"), + ("VN", u"Viet Nam"), + ("SI", u"Slovénie"), + ("SO", u"Somalie"), + ("ZA", u"Afrique du Sud"), + ("ZW", u"Zimbabwe"), + ("ES", u"Espagne"), + ("EH", u"Sahara Occidental"), + ("SD", u"Soudan"), + ("SR", u"Suriname"), + ("SJ", u"Svalbard etÎle Jan Mayen"), + ("SZ", u"Swaziland"), + ("SE", u"Suède"), + ("CH", u"Suisse"), + ("SY", u"République Arabe Syrienne"), + ("TJ", u"Tadjikistan"), + ("TH", u"Thaïlande"), + ("TG", u"Togo"), + ("TK", u"Tokelau"), + ("TO", u"Tonga"), + ("TT", u"Trinité-et-Tobago"), + ("AE", u"Émirats Arabes Unis"), + ("TN", u"Tunisie"), + ("TR", u"Turquie"), + ("TM", u"Turkménistan"), + ("TC", u"Îles Turks et Caïques"), + ("TV", u"Tuvalu"), + ("UG", u"Ouganda"), + ("UA", u"Ukraine"), + ("MK", u"L'ex-République Yougoslave de Macédoine"), + ("EG", u"Égypte"), + ("GB", u"Royaume-Uni"), + ("IM", u"Île de Man"), + ("TZ", u"République-Unie de Tanzanie"), + ("US", u"États-Unis"), + ("VI", u"Îles Vierges des États-Unis"), + ("BF", u"Burkina Faso"), + ("UY", u"Uruguay"), + ("UZ", u"Ouzbékistan"), + ("VE", u"Venezuela"), + ("WF", u"Wallis et Futuna"), + ("WS", u"Samoa"), + ("YE", u"Yémen"), + ("CS", u"Serbie-et-Monténégro"), + ("ZM", u"Zambie"), +) diff --git a/avisstage/utils.py b/avisstage/utils.py new file mode 100644 index 0000000..4f08e52 --- /dev/null +++ b/avisstage/utils.py @@ -0,0 +1,4 @@ +# coding: utf-8 + +def choices_length (choices): + return reduce (lambda m, choice: max (m, len (choice[0])), choices, 0) diff --git a/experiENS/settings_base.py b/experiENS/settings_base.py index aaaf816..40e2293 100644 --- a/experiENS/settings_base.py +++ b/experiENS/settings_base.py @@ -27,8 +27,9 @@ INSTALLED_APPS = ( 'django.contrib.messages', 'django.contrib.staticfiles', 'django.contrib.gis', - - 'django-taggit', + + 'djrichtextfield', + 'taggit', 'avisstage' ) @@ -53,9 +54,9 @@ WSGI_APPLICATION = 'experiENS.wsgi.application' # Internationalization # https://docs.djangoproject.com/en/1.7/topics/i18n/ -LANGUAGE_CODE = 'en-us' +LANGUAGE_CODE = 'fr-fr' -TIME_ZONE = 'UTC' +TIME_ZONE = 'Europe/Paris' USE_I18N = True @@ -68,3 +69,14 @@ USE_TZ = True # https://docs.djangoproject.com/en/1.7/howto/static-files/ STATIC_URL = '/static/' + +DJRICHTEXTFIELD_CONFIG = { + 'js': ['//tinymce.cachefly.net/4.1/tinymce.min.js'], + 'init_template': 'djrichtextfield/init/tinymce.js', + 'settings': { + 'menubar': False, + 'plugins': 'link image', + 'toolbar': 'bold italic | link image | removeformat', + 'width': 700 + } +} diff --git a/experiENS/urls.py b/experiENS/urls.py index 078fad9..1e61a2a 100644 --- a/experiENS/urls.py +++ b/experiENS/urls.py @@ -1,10 +1,12 @@ from django.conf.urls import patterns, include, url from django.contrib import admin -urlpatterns = patterns('', +urlpatterns = patterns( + '', # Examples: # url(r'^$', 'experiENS.views.home', name='home'), # url(r'^blog/', include('blog.urls')), - + + url(r'^djrichtextfield/', include('djrichtextfield.urls')) url(r'^admin/', include(admin.site.urls)), ) diff --git a/requirements.txt b/requirements.txt index 7c8b216..10aa196 100644 --- a/requirements.txt +++ b/requirements.txt @@ -2,3 +2,4 @@ django django-cas-ng django-taggit python-ldap +django-richtextfield From a0df71fcc4298c8a878f73ffece2b547986d8be3 Mon Sep 17 00:00:00 2001 From: Evarin Date: Tue, 4 Apr 2017 21:18:58 +0200 Subject: [PATCH 05/44] Corrections --- .gitignore | 5 +++-- avisstage/models.py | 1 - experiENS/settings_dev.py | 4 ++++ experiENS/urls.py | 9 ++++----- 4 files changed, 11 insertions(+), 8 deletions(-) diff --git a/.gitignore b/.gitignore index d73eec0..d82bbed 100644 --- a/.gitignore +++ b/.gitignore @@ -103,8 +103,9 @@ tpathtxt test.py # Migrations -monstage/migrations/ +migrations/ *.venv/ *~ \#* -.#* \ No newline at end of file +.#* +*.sqlite3 \ No newline at end of file diff --git a/avisstage/models.py b/avisstage/models.py index b930edb..436b9d5 100644 --- a/avisstage/models.py +++ b/avisstage/models.py @@ -149,7 +149,6 @@ class Stage(models.Model): # Avis lieux = models.ManyToManyField(Lieu, related_name="stages", through="AvisLieu") - avis_stage = models.OneToOneField("AvisStage", related_name="stage") @property def avis_lieux(self): diff --git a/experiENS/settings_dev.py b/experiENS/settings_dev.py index 47c19f9..3b47856 100644 --- a/experiENS/settings_dev.py +++ b/experiENS/settings_dev.py @@ -16,3 +16,7 @@ DATABASES = { INSTALLED_APPS += ( 'debug_toolbar', ) + +MIDDLEWARE_CLASSES += ( + 'debug_toolbar.middleware.DebugToolbarMiddleware', +) diff --git a/experiENS/urls.py b/experiENS/urls.py index 1e61a2a..26a87ff 100644 --- a/experiENS/urls.py +++ b/experiENS/urls.py @@ -1,12 +1,11 @@ -from django.conf.urls import patterns, include, url +from django.conf.urls import include, url from django.contrib import admin -urlpatterns = patterns( - '', +urlpatterns = [ # Examples: # url(r'^$', 'experiENS.views.home', name='home'), # url(r'^blog/', include('blog.urls')), - url(r'^djrichtextfield/', include('djrichtextfield.urls')) + url(r'^djrichtextfield/', include('djrichtextfield.urls')), url(r'^admin/', include(admin.site.urls)), -) +] From 1cd72e4afbaca3b3ad1ec92eb401aca3309bd9b3 Mon Sep 17 00:00:00 2001 From: Evarin Date: Wed, 5 Apr 2017 00:23:35 +0200 Subject: [PATCH 06/44] =?UTF-8?q?D=C3=A9but=20des=20templates?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .gitignore | 3 +- avisstage/config.rb | 25 ++++ avisstage/models.py | 6 +- avisstage/sass/screen.scss | 102 ++++++++++++++ avisstage/static/css/screen.css | 161 +++++++++++++++++++++++ avisstage/static/images/home1.jpg | Bin 0 -> 32473 bytes avisstage/static/images/home2.jpg | Bin 0 -> 33693 bytes avisstage/templates/avisstage/base.html | 73 ++++++++++ avisstage/templates/avisstage/index.html | 33 +++++ avisstage/templates/avisstage/perso.html | 25 ++++ avisstage/urls.py | 10 ++ avisstage/views.py | 15 ++- experiENS/settings_base.py | 29 ++++ experiENS/settings_dev.py | 6 +- experiENS/urls.py | 8 +- 15 files changed, 486 insertions(+), 10 deletions(-) create mode 100644 avisstage/config.rb create mode 100644 avisstage/sass/screen.scss create mode 100644 avisstage/static/css/screen.css create mode 100644 avisstage/static/images/home1.jpg create mode 100644 avisstage/static/images/home2.jpg create mode 100644 avisstage/templates/avisstage/base.html create mode 100644 avisstage/templates/avisstage/index.html create mode 100644 avisstage/templates/avisstage/perso.html create mode 100644 avisstage/urls.py diff --git a/.gitignore b/.gitignore index d82bbed..45c1249 100644 --- a/.gitignore +++ b/.gitignore @@ -108,4 +108,5 @@ migrations/ *~ \#* .#* -*.sqlite3 \ No newline at end of file +*.sqlite3 +.sass-cache \ No newline at end of file diff --git a/avisstage/config.rb b/avisstage/config.rb new file mode 100644 index 0000000..64d4c4b --- /dev/null +++ b/avisstage/config.rb @@ -0,0 +1,25 @@ +require 'compass/import-once/activate' +# Require any additional compass plugins here. + +# Set this to the root of your project when deployed: +http_path = "/" +css_dir = "static/css" +sass_dir = "sass" +images_dir = "static/images" +javascripts_dir = "static/js" + +# You can select your preferred output style here (can be overridden via the command line): +# output_style = :expanded or :nested or :compact or :compressed + +# To enable relative paths to assets via compass helper functions. Uncomment: +# relative_assets = true + +# To disable debugging comments that display the original location of your selectors. Uncomment: +# line_comments = false + + +# If you prefer the indented syntax, you might want to regenerate this +# project again passing --syntax sass, or you can uncomment this: +# preferred_syntax = :sass +# and then run: +# sass-convert -R --from scss --to sass sass scss && rm -rf sass && mv scss sass diff --git a/avisstage/models.py b/avisstage/models.py index 436b9d5..f1b5b11 100644 --- a/avisstage/models.py +++ b/avisstage/models.py @@ -50,8 +50,10 @@ def create_user_profile(sender, instance, created, **kwargs): l.set_option( ldap.OPT_DEBUG_LEVEL, 255 ) info = l.search_s('dc=spi,dc=ens,dc=fr', ldap.SCOPE_SUBTREE, - '(uid=%s)' % (instance.username,), - ['cn','mailRoutingAddress', 'homeDirectory']) + ('(uid=%s)' % (instance.username,)), + [str("cn"), + str("mailRoutingAddress"), + str("homeDirectory")]) if len(info) > 0: infos = info[0][1] profil.nom = infos.get('cn', [''])[0] diff --git a/avisstage/sass/screen.scss b/avisstage/sass/screen.scss new file mode 100644 index 0000000..821036a --- /dev/null +++ b/avisstage/sass/screen.scss @@ -0,0 +1,102 @@ +@import "compass/reset"; + +@import url('https://fonts.googleapis.com/css?family=Dosis:300,500,700|Podkova:700'); + +$fond: #E80051; +$barre: $fond * 0.7; + +body { + background: $fond; + font-family: 'Dosis', sans-serif; + line-height: 1.4; + font-size: 19px; + font-weight: 300; +} + +h1, h2, h3, h4 { + font-family: Podkova; +} + +h1 { + font-size: 2em; +} + +.beta { + opacity: 0.5; + font-size: 0.7em; + display: inline-block; + transform: translate(-1em, 0.6em) rotate(-15deg); +} + +a { + font-weight: bold; +} + +header { + background: $barre; + display: flex; + justify-content: space-between; + align-items: center; + + nav ul { + display: inline-flex; + + li { + display: inline-table; + + a { + text-align: center; + display: table-cell; + padding: 0 20px; + height: 90px; + vertical-align: middle; + + &:hover { + background: $barre * 0.6; + } + } + } + } + + a { + color: #fff; + text-decoration: none; + } + + h1 { + padding: 15px; + } +} + +p { + +} + +.content { + background: #efefef; + max-width: 900px; + padding: 30px; + margin: 15px auto; + + p { + margin: 0.5em 0; + } +} + + +// Index + +.homeh1 { + display: flex; + justify-content: space-between; + align-items: center; + font-size: 1.2em; + padding-bottom: 10px; + border-bottom: 3px solid #000; + margin-bottom: 15px; + + & > * { + display: inline-block; + } + +} diff --git a/avisstage/static/css/screen.css b/avisstage/static/css/screen.css new file mode 100644 index 0000000..8833d54 --- /dev/null +++ b/avisstage/static/css/screen.css @@ -0,0 +1,161 @@ +@import url("https://fonts.googleapis.com/css?family=Dosis:300,500,700|Podkova:700"); +/* line 5, ../../../../../../../var/lib/gems/2.3.0/gems/compass-core-1.0.3/stylesheets/compass/reset/_utilities.scss */ +html, body, div, span, applet, object, iframe, +h1, h2, h3, h4, h5, h6, p, blockquote, pre, +a, abbr, acronym, address, big, cite, code, +del, dfn, em, img, ins, kbd, q, s, samp, +small, strike, strong, sub, sup, tt, var, +b, u, i, center, +dl, dt, dd, ol, ul, li, +fieldset, form, label, legend, +table, caption, tbody, tfoot, thead, tr, th, td, +article, aside, canvas, details, embed, +figure, figcaption, footer, header, hgroup, +menu, nav, output, ruby, section, summary, +time, mark, audio, video { + margin: 0; + padding: 0; + border: 0; + font: inherit; + font-size: 100%; + vertical-align: baseline; +} + +/* line 22, ../../../../../../../var/lib/gems/2.3.0/gems/compass-core-1.0.3/stylesheets/compass/reset/_utilities.scss */ +html { + line-height: 1; +} + +/* line 24, ../../../../../../../var/lib/gems/2.3.0/gems/compass-core-1.0.3/stylesheets/compass/reset/_utilities.scss */ +ol, ul { + list-style: none; +} + +/* line 26, ../../../../../../../var/lib/gems/2.3.0/gems/compass-core-1.0.3/stylesheets/compass/reset/_utilities.scss */ +table { + border-collapse: collapse; + border-spacing: 0; +} + +/* line 28, ../../../../../../../var/lib/gems/2.3.0/gems/compass-core-1.0.3/stylesheets/compass/reset/_utilities.scss */ +caption, th, td { + text-align: left; + font-weight: normal; + vertical-align: middle; +} + +/* line 30, ../../../../../../../var/lib/gems/2.3.0/gems/compass-core-1.0.3/stylesheets/compass/reset/_utilities.scss */ +q, blockquote { + quotes: none; +} +/* line 103, ../../../../../../../var/lib/gems/2.3.0/gems/compass-core-1.0.3/stylesheets/compass/reset/_utilities.scss */ +q:before, q:after, blockquote:before, blockquote:after { + content: ""; + content: none; +} + +/* line 32, ../../../../../../../var/lib/gems/2.3.0/gems/compass-core-1.0.3/stylesheets/compass/reset/_utilities.scss */ +a img { + border: none; +} + +/* line 116, ../../../../../../../var/lib/gems/2.3.0/gems/compass-core-1.0.3/stylesheets/compass/reset/_utilities.scss */ +article, aside, details, figcaption, figure, footer, header, hgroup, main, menu, nav, section, summary { + display: block; +} + +/* line 8, ../../sass/screen.scss */ +body { + background: #E80051; + font-family: 'Dosis', sans-serif; + line-height: 1.4; + font-size: 19px; + font-weight: 300; +} + +/* line 16, ../../sass/screen.scss */ +h1, h2, h3, h4 { + font-family: Podkova; +} + +/* line 20, ../../sass/screen.scss */ +h1 { + font-size: 2em; +} + +/* line 24, ../../sass/screen.scss */ +.beta { + opacity: 0.5; + font-size: 0.7em; + display: inline-block; + transform: translate(-1em, 0.6em) rotate(-15deg); +} + +/* line 31, ../../sass/screen.scss */ +a { + font-weight: bold; +} + +/* line 35, ../../sass/screen.scss */ +header { + background: #a20039; + display: flex; + justify-content: space-between; + align-items: center; +} +/* line 41, ../../sass/screen.scss */ +header nav ul { + display: inline-flex; +} +/* line 44, ../../sass/screen.scss */ +header nav ul li { + display: inline-table; +} +/* line 47, ../../sass/screen.scss */ +header nav ul li a { + text-align: center; + display: table-cell; + padding: 0 20px; + height: 90px; + vertical-align: middle; +} +/* line 54, ../../sass/screen.scss */ +header nav ul li a:hover { + background: #610022; +} +/* line 61, ../../sass/screen.scss */ +header a { + color: #fff; + text-decoration: none; +} +/* line 66, ../../sass/screen.scss */ +header h1 { + padding: 15px; +} + +/* line 75, ../../sass/screen.scss */ +.content { + background: #efefef; + max-width: 900px; + padding: 30px; + margin: 15px auto; +} +/* line 81, ../../sass/screen.scss */ +.content p { + margin: 0.5em 0; +} + +/* line 89, ../../sass/screen.scss */ +.homeh1 { + display: flex; + justify-content: space-between; + align-items: center; + font-size: 1.2em; + padding-bottom: 10px; + border-bottom: 3px solid #000; + margin-bottom: 15px; +} +/* line 98, ../../sass/screen.scss */ +.homeh1 > * { + display: inline-block; +} diff --git a/avisstage/static/images/home1.jpg b/avisstage/static/images/home1.jpg new file mode 100644 index 0000000000000000000000000000000000000000..1bf02c0f7e1aad6d3fb1933d04055cf649ef4f83 GIT binary patch literal 32473 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�D0sug6J?p;# zfKPd$>HfF|C??>c09B;za#x<{k(XN+5m?Q!ABz4|+j0-ywpe}!uzTtfO6~`3wizrp zN|<(lecgZPxXmif{6xEZ8IGiFsz;^7+6_CLC0Yd+9MEQEAr%}2mo-Q)SrE#ol)(@w z#goXX_TzkYuG^>N!Fy*o_5DzvLy?%};M`p*xd(?wnwtem)JvkQYXuOp5i;LDzCSOx z7{sAoh7)j#4>Xdy*~7LNjSLwzP}{Uu$bPW_fAY_SB+nv6Cq1#V``()4pH>GMW!%j`HN+y%zSp z3m1C3{;gzxE3jVL42C{L%*`3tt}bw;tQj|r>ypb_L9&|6Mt*fJ=~2aSRcnE-&`57u(}1I}-=$dBOkC188#4*BDBY27MC zRA==52T%a0UpU4~v`Nvq;M;IGl8%jzWg?8oZi9adKb7aJYc2-IPPw&HXF2|?YKCT> zS_iLR-ZNlWgXH&p<}41ikj>Ki6^}IUvXMXFGgqv&JF;?QWL)V$gi`jyjmj+U&cRyO zQj?kMGSiIEy^ZuE{;nU%brcl6Jb0#naEu*`oDcnJsi{h zRT}aUs;OTU4wHTfz6Vrn+Y3H7Mi;q-m;8QOPd1O?XM>q5KGFL(AsOLE>^`rN^LhYp z$_rY+VD*kReCbAe2^j5EDLkDJKJxIZB4*(DgI|eN4>)u`A9iU_|FF1E8Pa%Z1n=3s z)bdkZ05wz_Y2EmxbE|(|oNxiUb*4gRX{Xr2RB zGs&f%T;uw;8O9Bh-lUXjSmaMA)j-*l)$XxY^{5oyr8@=YN=0~8R}ib?J1 zJ)Yi~Irdb1G5noxVs}F6_ zpopsSM9-{uq0k^l@-_qjfJMrl!%n5ShhE!hH#w)2zt*|G%3U{~%U!C*2F8LZN7Ko9 z1iYIt4&f5>T`VSxygyaXavP;5%D8mZ%IHJLBal-@bfbtrcA4<%Icvtxc3MkS_tm;8 zt2dHdMzaA%CjI}Dj{pFw{xbkiZqhYVY9n4`TR%Uv`G7O0vEonnj-lQ5c#`HAM#P^Q zp{-Ze*P_gN4up6C^tR3csI84T=mobUYi7It|3&%FiP^^x)Uq^Pj3)e7EXmgFg+kbI zUnu4k5;6)B@+&mt|BQLzj2Du@L&L?VMkk^VA7gGH~8wv$8_#TjV3%Q0EA;C9JqpMXd{(`P*5d3$3)Z zcdws(h$?Y;G>4&0{{LEC?!QJ$W0yl)&g-ZJV%IU0gwMK&I3GsSZRN%M7%f1-!Eg%r?0%+dS`H~>M|Cco|WDBgbx zT2To$2hFYiUCr`N^G?&4f8FjRDCT6x9I#D1qOqs;4ES0)*}p|Ma+<0BnY?$p^wKgD zEi#jV!qw8I6jiV+{>!3}l< zQN#gNs6>wY6b0L9!0HuTL)QzEq!W-@2q( z#G3pw#~WG|J%9hZ?Qcu;n$fxC0<7eN?I&OsmEGh3eh* z*A?g^)PKR~NIUM+e$voA&9VqaOEG56nJebZbMnM@8*{Qsvt_kTUYZa()#_^l#aJWG-%;S`)A)mt<1b7y zzf<1_$tILYjTHuBvdj1rO$!!u@^$ zDGCakmS?s2f32Ec;;vg(9ijFHCUFzA$MqieYW-aUj7kz zDng4odVT$Qd%DL>a^?vvKIRCBd!k^$-3_6P&YmAhWIQ>szboY%jyO1i;2lV00% zeT%(qQqU)oJ-P?m)k=9uIffXulG#EWl@F;r65`|yTM6R}ah!K>B84%B5!sXZwHUcq zY)Awhub%@|H}qCNh|HT*Gl>n?bXNE zFZbu$3O#0@ETXp0K9x!<=oSu5l^ew!y8kf!Hx%uT9VrO+#BkmJI*C!s7L!S)PFrYz z{zbNaX4b&~)5v|X(s&sr1WtYAO#jtnXY?zu$6{-ZbE(?R@Y-#(vy2B$&aTtX#J2!F zRl+Eyk4gv`nt{7>tB@{u>|dK@@+-G+q+N4ZUx4!LE7OYY1W6WYG&g6d9fsQyPFpM5 z?#7nFRQttel$W^KZ{u4nvQMrbW&4MEsYpat&Aebwul0J|*-j%v_$%g>B6&TPZ)D8% z;k~jRPr{ko9cT3dc zo+^}s8ZAe1VP9It1iwB5!dhH-Adc)|A5zBoY`fM`)QD-`QHzY0nOIn6hQcrQ$X6DF zo&m5S_#3LpHH9WW^7v_|oWNwL-MEB-LsL`-DRkE_g5LKmf z5?WhB3=&=9*DAfMzdZxC)J+Uxrv`_k`_H^$R&6-lGSl-6@iZUb;`qu_hB_Q)D{Ga0Z?T z!spo-M<-&AY~4|vpleaS8t@zjm~n#5&z~ZkGRYvHB{!|=ZKrQ3phZqK$$fYFfNTC0 zcN(%X{T~PqpM8$i(Q}rF8OpnJRX^|7!*gOIU+0LP$os#;CNnR{pB7Tq66P-MLM}hO z-uc}Chom65gKKoZok=s%dNODJB0V4n1mpf_Kl1AC31d>++C=Dz3OX)t_q)DM{@o+zn^d3q0y0!8|t! zjZB{LSS^@nN|KAp=$X~O-Ls{IweE${xjniTrTZ#hcIA7w>yUF6OG8wWOV)ETcZTAq zu)55+Ypzi?0{;6jF z0GMBr9b&rPU+Y%P%HG`v@Hlp|xT@b0%GjPPxF+6_>)*V4g3}RRSro_E4y>Gw3u-Q+ zUkX1Zq`qW9Hsh)G2%`OuzVUMXtmSHw?Z~zzPvYh5mwT8fLAYG z90>#YH5TT7bQJ*UMOWbgQ1NNl(Fh1>#gvR3aXC)Wsp&)mVza9|iGZKEz9_30*Nm^9 z(Q}GR7@9aae~-)guikq31R#R+3_$<4LF&nP?glXeUX*aipno3f=j3#Dat`1su8+K$ zE2^(_3|5z7+E)u9GBOqxKhsyVh}rU?ee>Hi4weUJ;79weqzDq5HkF7ebEeCSCa>nC zVR8in?XnPDLzacHDX?cszYd~w<$0!0LYZm7t+g?t6MJGYpzLI7&6k0rz zx}eIWQITtFMHL#3P_4e2{A?wsvkS3c>OPK3It zn6v7-vXSCML~7jjBh#viDhzu}^d6Z{6P#3q8y@QN#{o+5V%%@dPnDe^ zmc_oimMPN25EX(f(?}N2P*w>uu!gKZ8u05A;|k~*a2ze1g(2@9FZ<@CGPj>jKtLB; z>K(I}0eQ-B6Yu!Ghe$@Afsfi{(n|IF9G+$@ zt6ktH86`OiRmj9^ZB~2Qr24nj`dQGyD?;vHQsN(jooQPo z+Z<6!x}_>Sd$jrA>&*eQDpQ>XzW+*=orI%GvYM(n42=urM=SCQP;ll~+WIAu`;w)a z@K$7{G8JUweI6?2d=p~j5{WGXV&|^E>kd`568GV8>(F0$LZBcrl;B3I{sVv4qC2-J z>sI#^%c~7;msYIrF;BKDCSzdANSj8HD@ay#5GhkfpiA z`UKAvmEo2Dx>{_ha!Zrc<7m{Wz%g3f78#{rP(DEU=T6S55{+nomo4Aw6FnS}KAoTT zwp;F@kmP%S9tWie8aNW6=;sYt+`Pnhl;hhzggY7v9vRu^Au{9z>NVf;5jpz0wsv-n zMCFz0FQ=~Wyy4SbUuuEywa>}0`mSQV)*+3o?vFp6rhCYHY&Cz>U3zL3zZdWw_3feL`leC{7T>*Zw}3pYyf{e2={A`gl7sc_#xr9Dn~L|FrZ9 zCkGMKb6*)~8_IN$+yg!&(UE^fctvQ> z6&L5{C^*&RFqsKf@-4ej72^jdJWOMpbuZNp((HGl>M4;E?-oYf(pPTAU=st#6D8+ZF|yQJ(Vj zCy-yu2#VVKMZ+Jl3=f|eq6AdiDldHxUrY0%`*ub71RSsnqvN}#WnB2#$0L(Vu?Bwr zjBs-F9b!W}d&soBq!dx7hh~LtXGjDS_ZG&9n<>qAc&wGM4SANlrZ(Z&aw!{rr`|f` zEudOL>UI{2J%P8R32G%Kj@G~*WI5-ml|Jv=J_1JQ&E3}GE4HrxMnt40s7%&~CAEwy z)`Si(Xoi^Aw#a_(@BnmN!BlZa$%|^b*T?;-i_s&0F4?&8qUhqyQ`O`7FuFp<}(AUI^o>TX7&YilluO-FGHTQ z3p^i0RY_bEgqM>VHToW*7>aF_u}2pXpVtvlO7g(uUwy-_VgyBp(_DD6JKa}-$n*GM zs*>-gS}xISdWmv0Q|IF1n z2PdGhixDUpq2m(LesK)oP>#(W#~`An1AZ1YHi_$8KNYX8sXcqg$t|H`=#=yKzohW$ z|B^!O@S&~s+`>cU#1nBz>4@d;9GrIL$#E4S2^Chw{2yW3+?qd5fvoHvbkpT7#I9wP zMGcWGv@k}5mQgHyXwQW7oWSQ(Ga%JCv@6Jb^zmIu7&NCWPsWg4HBno;Su2B4n>UW$ z!)iNBQ`z!^^yaredE;_qM7@$-|I&eu`DV(>lTv2`j2{_bDqKZx3o`O^16*qH_Q48` z7%U?5n>B;0p*4=Ugde-SUgwzbNM#Nlj4 zsb7_YGt?!_rLC;eOPIfL;%m#MkntO32k-o7&GE26tOyPGUY?;^t8**w7f9DREMp_l zO_&ZjEx2l{=SJZ!51VNd|dYo5kWJ z!}#fav}vVc>*)IKl;n7l5E^k(Rr7S}Zo(zS#%O$r#}y+RBg|{-5g{M>B?wx%oOjsG zS@phEr=#U)8kXm3`%ZrsP^n3#{Zh*87T|wwza<_DDp1-{IYS|l=Ns7HrOWwRky4QE z#~55)BB&@+R%Y=Ga7K&Pa=BYNX%OEm?C-Ts-uBqGidEj8pVs>_qx!)_jaApNEVovJ z#45o`oy08Ah)n+LU6^#B)ZxOsn@YmwsVAEXY|QLe*OS4gyu#dIg!Q%RS#RQ5IBzLGSdX#|fsGUh17{ar!nqB;t~5{)hbhK)r*)_^=XB{s*hw^Zj43ZO$x1BY$Cj z4AZKFSCooi>@X5JA;{^K5Ct;}Obln06arn(cwGm>D>s#)ueW-~K&kQ@JfJyL)A3Ok zm0O8K{~O1`PbZJf`!gz&B#r5Tlf>Q0q_Kf|cJu;888`OoxR`EkL|-(;4#=nT+?-te zRaffPe7=I33ecrehC(xt)JnOu#=fU4Z{&0eC}5(M!Gn^q4nw;D?Kt&M0tp<}!L)@{)Bb=>*3rbMojt+Kzie%{<_A9hP4^DY z#JEqN6ZFNR=Xjs^!k}h)R@7#vdnfG(ggy5&fU_6*OqJm}K04pzp1tcCa2h7!(y`Nj z>ybzl=0VD&8YYFdkgD`*(LOK0dD6#!HG@pJBDL1t2Y~wF<8jea#oNu)^QAOZb2UXTkp(Y*25Cz##=YZkSAX|g2%z)b&)V)mEK`-y*0#*I ze&G?(wZ1%vYe9H{x=9k$H$7YQejDt162({?oI~mwT2GvR)hZ}G9MUn(3x7M^bJGq> zj!J&jH|VQCnq$=XQ|K9hIk!0KZ2&;1qufM_>gY+`{NZEu)$FTvxulm#OQvDQf7sT; zTX<+12*~aXqYTCaxeu zD$vX!#I^R7eU)$(#rCQKle6U>yzdjuW?I7uYsbZDkGyJv3Q1o5KUDGruaK+JS6>M2 z+%^SUj+T8Jc4lFW2Uw7en=Lbj%1=2n9W9tiUx^8I`JlMq44S38Ir`*gM_|_3-S_=)&yt z3dSF2n%irR^u5Q7UU`2f7z`|8lTUfP&pfy_lykDbT$9V;Wty2{ZLBxfYr9`v53A7( zUQK9^zUqBsXNfGCoij!Uo=pBT(d;QD%SrS$D1;je69?MXOOoLJVXl0GQ;`n!uH;IG^7&9A^E>W`a|N6Q6>6^HRvlOZR% z0wGnhmplnes<@jpGrGF^%P4-bbKLV*#z4<*>TOZ2Bb`(qj{uA?nfjc*_$0*oC&#w}|h5EIsE! z(M9NCEAO2i!B`w^VCJpY^zm+#`gO0yUsWzKv*L%6LKEjYrOf$CsK^49j&((3FCIR7 zJ|WZ1$Eq{oi>V8d@5!6LuGaHJtJGY6;i!u*b40m61B!$kXTOm;vZ#!GJsk=H8kn97 z4Hd?!j0blc71D>={VsmH%76x4gir0NL&?0Hc zWL(BR#^tJkI>0kp71Pg+NGef3h4pmiw+nU6Wv@o8s=1-i=~YYay< zdJ+#^5uI%>CG9wXcWmwH)cP6l!-qI3dASVrVRUf!0t@``*<*1i?ZtBAJS7r*+zBI& zdm~_pAXOE^yQ$4GH(AjN1wL8xeyguZcsDg+uu?mSD|}vEY%)|ockCz|aEvozaM~Yc zIaX}U`(N>;feU!`;>eLv&`{9dyg_^MF?DjOUFT6X{2rep>70;TQ~$SX^7QQg?T4U=ym|&y@e9Kh z&nw>wwz@uKDAs4L>1I-$4?P3sG*UcFf{CYE;|31M9gEH^+-cOn$-uYoG)-l49Dl_z zXwf;IX(+3O3{kDccTV}xOz&D=Hrf!Z){?)H;el<5R=Ce4710|7nI`xPemg6c$qBXf z6xw}|(UF?42ToZ-76xa-Ht%5B>UKIcw4>UrLaa>ZW1xHEIAfJBwPJbs%G>$*le3SM zr7Y2T^U*5RsAL>sVA^JbLg0arwd+QhM-xScIy9g0AJ#JfNhZ%zvQVsO!hD-LhA5?O zT}ydd@O1+OmW$QN5HNmSOG8ibYhSw|>Zsz5k@Y8wJTfVvs}E)Ok%3|)ilJ(LNf$(1 zO(ND!P=?KYw#L-z_XM|$5XJW1f^aVCzq)(RI>Pd$CP~;Z(2B9M6pX@s#OkFi@eGg? zVWs;(JRkaidpbYXM!i*6oVPDUw`dY!uEkYaRb5`h!n^_lZY_oi$7vT+d4>Hw8mPw} zWS=ZxnF~XPY|d|~RnVL5XeOd3VtM6xQ(cS)@pCmc7C$hb}R_J5^T=Q zODHRyZzB(X7n?m3295%&DDYYDxehW7&=yr6@R|kD?r>H28^6(Z$nesOYnGU?X^{~M z1q{VY4-Gj3gE9>T=}@HnX^SXpACP9}>-WAx{MHJZ%vTcCj@7H*h?kOFy{Rv-)|UK{ z(va`eMq=~zL#3W80r{IsqwG*6SLW!w^O(piwbsNphX&5qsm!{xyPGx*Be6&hWRR39((9;g z>DIijG$%2#2-*t#lDZDl3~Rc&^+O^!MR}^gH@7|F_rkheY%7c{FkifKf6rh)J;FET zYHJ?0?>s#NEYv2eAtR)TVsc?nC-r#H93D!)zotvLLyI=FDJmr$Z> zfb{7D6K?!g^xyc242g^F*+3V#8tXb-+GPOwcI4Xi!^K&&T^!*pRPN*1L9dQ3o_E${ zDeAw=q5QReh zUv_=r_?-Dr#M?pA5;U9iEUYKhE)%7E!UKfnTzK78Cvh3^hztrjM*lwF-mO@>Rj&2h zjtN;*zsjEn*k4-R@&%2Hjqd526#ojqe(+HJtIixSnYx&ZH4bJ^j2$5Yha3R?vs}$- zM1cW4?!};HQ)le+WC(-(R@E^^Tqm@oe|uwCYmRY#Ficchhb~!qLKEMuO#RUSI@8!Q$*>fk0%1q|e}p zOS!rhzu~d%@2?H$xcklYx7?(hrYvJTZqn(%K+6$erTM#Kd3~2Cs6h)Yv&%!7rP@xt zVa-$_0NZ%5sDCcczq$a-(_KyhMMlfeoZ5*pZ)A_*am=5BY1ZAwJlz<@z&q({{ULVEKs81d&fd5lS}LMAUaY9Xq0e-Y zcl6&21Q0}T_b!tO@sc86?K8b;$}^!sy)&lb)|jE$`UEq5a%PIO>yZ5W>s* z5NDE0;ynndyGbCT!S%4u>qh*ViA(c*tCaR+b0zYJa_qv*CS94AWsS$ev}n%g%>!+O>%m&?=xDS= zJkX}CNNd;eUnII3@%`(VS0K0omDZ*2!&Brz<#)F1!V+Rv?2Jv%nN)@i&pNs;9zyL% z=lSwkp<}L9un^lsZecMbPDVp+<}w*;;a#aYX|1j$CF7jl_;J5}-8opPWc+_(kTwA4&MURy7(lH>hATwbo%?odRTPnpME zVIx1Nh|a<=*Cjd{V?*&hO#DX}`-(eLZt;dr;#_JYF(}r4nTYRKQ>84fU`TE5QHm>I zA=4ZF+eG?NPbhv;geD?0Q5R=MbYr7_PY8FSWU;wpyx_Lh zf)+{AonH2VZy4F+etWp5Sb^HK4?${!=uD-RddbX@HtTk{YDpzmX-3b7+CdTvLv-TE z0LyB^>MJdpSg__+=pPv4`w@OMU5_Xsyj*+jrrig15iE==h&d5t7MngWP=3KEqd0hZ z5qHwE3_egb^R8hNra4D-niFC*0hhci6c6l)Rw zFA~A^j2>M7JzDbD;&tha9Hh;2F$+Jxk;N1H%HXRe0=<&fgZ(7a8o3z3Fh$)@>Kh4E zk>6&4m`O};@bA_9vZv_1;GxeOP^s;!G4z%2wAek8v4O;dT|LrFlvM0oeg{W}IU9Ya zG0>jCm#UVTCD1L2+lw$={`%#kZiYPFH7CPi;070(0aa7GV#k&=fs`;={u&A ziA#QgkEkt;@m^GAG7*&qfbXG2`acvE?8UFTQ+R-O1Q1UYy*Dv^Yo>WW#e4s7aMXP7 z;X9d!Z5QS#x{FSm)z;0$%_Nx14zg?lfYvTOI)S?8mWM3mE6zP_&R;LRWOGZF;g&7> zd5!}GGaVvtz?lXkm`~S=wYg6Gk5c^>-DyHmd0qvWAa?v-|Zj zB@2;i;E2*9K|!h^>V9$@gJ@!*t*4F_e~r;dfvML+FjzK0O#~XGL2YlItRwWzoK8iD zL3I(uW0_F2|JAU-$2f0{lD`Tl*E?pxWhCc2nsFZ+ee~|50Hb)F9jT0;Sk7;`u3w}~ zEk7mZNc!^Mw}*y5$57Oe7tXFpGfE35ruIcTG`^Lh4xBtq@!(63uCzk#W^)>@6s1`9 zJZ&GP1O!|gs%_77fP$&`v{2pf?nn4jt*1zC zaSI>2)wawp|FeDTcw+4*@17viyc>@uhmkNe_|ia&J%gvxk&F4jr2I`9h0GXU#Df1)nciX&tEa z`{L#o)hD|;eReBuFRxF%%LpNX=rdY@GYFm4v0W?`86u*>k8$sfAC>rY;+-l3xr#7J zsllj7+o#OT#oj!T$X)r#M{IYAizmNlK-0#RnRBg@Kg3b2_IK@!^f2YQB17`h z+XKA4_n9+NnrM>_1*MFyBUvQejIz{pR4ISZ&-irW`bh3_KT2!}G{``I1^}L(=%i^S zDq=5KuUl3(w&2HW4>O+oI3gVtugC(6KyN0#I*F;Y3>sYRb-dF?&cs17_1>=kq7oPK+Ckg3$exSVTcuEouE$)S)%#ZcM?x+R>aV z8R`ey4^(w`4`2$=?VPu;h_C?iepp)VTbE(dBmEoZ^dVg5>z%j;N=CYX&4n7-*8C4& zO1zz~9jDGFBh^JH%~L%@^3|0dTfYg3IL@4&J`6y;e>dIff8SrVaM!=IzrURTJ_BSH zcP+Mr^cU|2_o@*ml-}M#$wvxqUHS|uU(gT@+$?TI`$LXFO4F%t1TrXxd!7L#khiwF z2d!PL@u)1ugF==h&MFeXHB%*MZhen64~(-s@0M^u!RjrWt~RSWj+ zcmGZ6J&`9JZai~O!E(-);aq`%e$x>zWB=%f(yQVA-KJslfFY3tf7YPo<{z41G>fdR zVIiTSSLUZ_q+Dn9-co(q{dp6CZzrfYfePIe+Fj+Np-ETu>aV*l)3#f*oC(s z`$&$1e0S?5?2S|oj0y#k(Jq9V*+Dna*2?cS25pX9AqoDnm!gkMU2Ei{E&AG)aiY@?wIO#uY6&V4!hJlzhyiRVm z_xD_qzA$biH?0+uqziu8e&X2ngcpP1p@0P6jcHrqEsgnOn!Cn()OinHjd~-osB!lU z$lnk?beunsmf!2$yvYzabH%nBupzEfHtM zx=6{qsDh%J38JBRv`DYGR>K#+7}ew7$IeH$Fx?(6P?b=&Y%tQsRp1~KNWs_0@qG_> zqJCH$Z7jjaUiT%uDq04PoK;Cv|8y_NP+1BiMBOwd5(8Q7Jjymc(7)`_Fz(tlWR6ci zlKUNQ{Mrm)Ax(e%4TcO6`c-b#{GyyS>xBP0fPY>?#&)g8)uumPVv*d`Sh;HAMR4tL zpZ__ItlK3lmLs8rN0+ubb!8#o0lmHy(6F_n{Giw5g=DZESKzssZp5#pVU*-$%v#Dz zCpp51pB`cXaAu4?9e&e2|HV)n#LB+d6+TFG-GvTVzt!Q{eXbjhTs3* z8k*YsK1~agx@^~|QV*YxI+Qku?gszk6cf`!pg(%`>4yGLiOr1V@g$2UnMfb&Ny$FdSJU@I_ljU_hZ#s9NnWoG4CLF= z4d;j_KjHGHyp#Ny9YK-R2-(gpjyPkm;)0Db$qbn)yb|9=h2{3O zE|CTKJTaIg(ZVY(YJJ-#GN!c2?2UACQ#4EMZ;t|>>^!Dyyf0a5(z!|vT*w>8`rz0( z?^?KE3PHmU|G%EE%f7@3NQ)#K_VxYSKkLL89V=pgO%0{?k}7lVXJ9?2OaB*%XOJ5x zL!)WLwjrahddH2G+Qrh1cc%%G5&8X#8dfgU$14&2xD#zfAdzi^b8^hml6t?gp-kv_<$`UpapitHmK zApHzDyAtYJUysgIXk+)syYJ{0(s(j(r`RBTyj^QJokKZN=B0}1M`rkA8l6n8@O7k8 zwYR}K$?V7xR9*u-EGg$o+d2L_PM7y|$x7?~+gEkGgS9~#IdYs|BGEK_BYH5F%Ea)< zm9LXrc4Fwg!yNl`QiuDS++rbbZ}fNV@kGk~Rk3}&GO)Iv!F?M1bCC`@Ne#yvC9|O( zJ}Ohh|8O+e%=)k>r0Ml}4cw%crJkE8}^3T479*zl$VBruTOok)3bc@$o)8Pm+7=e8*}>DTOAOxfq@`3#8@d zmNb9v#6nst4RSRKR!2$*`SU#n+;>K^jbDMwV)hNA>hmIrDm%_thLKaDptMTe=iBc+ zBEOgfZf`u@+p#BGLD8fddsd!vF9nwHd%heC4C}I}$zZ)*BfP$eW6`&#-*_~vR@c9$ zIaGvv+%Nk9B{E8&JEH8oPrQ@(bbUr7Eg1VJob-cMALf}meR_1bV67lKOLv?i1x{%t zrEuB1UeF_SR8b!~TC{HzyIKhK8R$YJ|xrFFL8 zeAbdaRg3*=CU-th;OtPnMBRH!K7?vIn%s*-MI{W3%PmVVijp?kkNTuA)Krz~w48#Q z)_l?=C@#bG`|vPR5McCU@=pj#FN~9uM@EK6uLwa&NViDAF0vRTT|Je%0NsLY;HJwLKFPuoEaYG&| zCo^T3rtn$)g!7F9PS5jhENPH#&e-k4mnbDXlEw@-C)1 zqfH!+UnQg%Z~+3<@3ctCkZk()+o^s}W$5^15}zs|eU#`%R11ulkZDT}O-Lb{$x(BQ z(gd5gCy7Dx=ztD;1kGG=8q)^f5|#5I^rXM;`vYIgAyeFqy_=W) zC7B<#$%F~U3$$81eLNZG8N<`JHIU_VduwID86Y1QYR2)H)2j$pW{2Cum4No0;T)T%BFU|euQN)@zNGA~b z=bH0$1CeH1ZT8`-AE9zFxgcc=|IHy%)w|UR5M;sd#i$ZrFu9CVd>2++;HzZ$xCVf%@nRD@B9EqEu=nQ#l!(v2Gb40j-@AJ`=kv3>6|*jT(6IEOO@^ zy@}XrvNnFHpvAypcyDHVKPBvbifdYHGkkqvnu6Y4Xa+C&E}>kmiDw{JF_=!;w%1#(l$^39_-{`uZXBN+<5`1bLd(^|1u z&_ntZJZz969|fUGsRCKZP9J|k50aN$Rm*c+%Z%t>G&1;<^}D1U)Nr~^J$r!7CPjmP zE;Bm5<2)|fpw3%z>`m7~DCAJgQs}QyBqT;5hCX_D<+7HBbxUv!^(}h_7!)UN@IlZY zx_^WVy8_Af5nK4?1v2y*wbf_WH6Um|x(M5wsPIRN2;OL7hKQX|@ZQcb0v;`*b>Cq@ zvax%sXYwd8ZT1W}xQg>F{)2!|N6{TQ6M*1E#eWK{8&YrU4?azZ>`A-zP_?oAYy$Dx zxKD7++_)^L7(eWtPPu*@F~+_swOV9P^tS{-J@Z3A@dh_G!ziQ+a=d1J^LCUi3 zC&}E{cM=Y2<5L_Q89`bK;;#g7Jt_H{37jFW9G2>)wAGXhr#45w_s+d(PL%!L>Qbex zFEl}S0-D_RH1+icoSp%>)vxzCH{!6zW!rAk6Dv!psPw=>f)Y-Xe&KbHnS;!vNV?zb zXQ?2U(<`L+@X9Lay^rZzVGH>EZxJfUl#pmv+r?Rg zu?T0Pas|WTFR5=MVv!mf7Zop+s)Bjo!iK&PZHXSXt7&h?i?r>`iaWsWEm(B>8UZE& z!X*}!TPAI?CSbKPcKt&W!9;kiZuH+_Uf~D%X`fqde!(Rfh5y6TUq;2zJ>TQ#05j+S zgL{C%CBY>~f`!0fgS)%C+u-g54KBeU1b2tv8Z@{B3vMBhKhNjh-?v|NuRg2$tX`+9 zPF3x_>qH{0R`X6lbXijg)T%Iba5!;8y&m_Cu-8mQaH`t!s*+cO=UmE9Y3sRa4);AZ z%BFvnPusoEFqM#LP;Q6&)s6_!FxopmSYTrLKLGx|&{KEi*^TA=tjsYvG|ke4NL}nZ zyOJ2-NcMcQ3iq`Fil{|gE``s?vuyZcWofhWxaw3(cQ%)Vr;s?%8qCEkvmNyka*GhD zxuINMC>a=xm8&wsNHm97-Zi)+Y}iZ+r_tJl8=MbB$G&iiYT zb70EF``YD{r&-+g!>WKa|D}hEgoFxvdi*wvoUy;J7j5-&)wJ{T-!)t8ZR^@k%agH% zH0SiF16UCNDga78z#HlLqbZEa`iM)Z%6jLy8ma)+$^)^N8wa54*>|&ElR=liDKlfv zBRXEicYP(olxY>DIb^<86JY!YSiOCCg_9`sD&(+uBw-KB|IIe@&MMp;0rtAxQ)TS@ z&g?i%B&|g`)jthbER-rsN81)u?Y?At>J_=UIS@_9N(f+EnSip=JY4oPAK}=JZ2`U{|7|K8Icyv>*r!GG7zn$P3W2b(DrhkL}Os@a)xdgv+el`7l z`IpvsLtCOJAa%Lv&PrFMr@TKcU^H?21CtvwXNFvX_tBiU5{S)iZnA1AVe{SoS;AUt zKtkc4!wc3sC+c@c7;X>YrCpWE{*GNB068G!TfA-vUQ2hhQTz{)%z98aGcvT{o(|ZW%4w_pDwfI|rSD1?<#CFM9m$*kN zZN}O!MJr9M#My6U;%lfRk7j5x&)l_Nx7c>@cnI)W-NznM-X>5q-3?{~MYp>ChR=U* zq{;Ih`N22X>oR`p^rfZ)nN~Oa3!^p*ZBb)|BYI@KQDTLh9L5Vg%25HY(7IJG5nHZh zN+kCE=>*@b9nUYe{C5|MfgvY>PW~0`68X16*%O_JH?Nx>qn@}nId0xCtDDS?+@%x| zQp8cV^%0mP$~aYM)ViMlaLJ`# z33+)Y6g?-Oyz)TKpVX|0Mx8sWw+B30y*in)M6+W(ki4Rq+v{UAU$=3(M|t^x|?A)#&^y)RaR@WvdFm>S^v_{}F5yJikn_QqW|Oq}Isq zE2vA78xc29FRUJiMWw?AI;Cp5WQYei6J8Ic7CRR$nwADef7`Pd07Q-gF=b67PD!Oa zS$L7NQr%EfI6_fTzAU4hw3N}^_0%V{|Ll3~X;+FtJosG<3wW7GN6rf8`L5}p0S%oi zs!=;k&Z%9R>T2k3X82nw2OaSHO2ue$RWn*|V((7`qdk3sErh#a;8KxmM*F>x z1*x>Hm~!_&y6V-NHZ~FYW7qs4PL4rOU)7uKFiPsmUA}2lE=k}u5?WC}2$Fj^%5Q1J z#35fPp@LF`9BXC&j8LbGe(R--z6?vXm!{{1C*y{KIE^6!mH)@p=RdsL(YkW zucT~0CaN6HuEb^xAEf2gd_9xJP^N`t5sfMWGQ>q+u^J1$4|+RJf`6m<5dZs8Zc)>d z?`rNCGD26e|JuQM=d~A1skPbs+33$pSpp^n)44i~n1+y*Y4>GL!VA(3n^^KB3Ir%0 zudwzv@gZkqW_nt=z_o6jV~xmryOl`}T{dn<#*gyV%PKZAd#Bo)8GbG!t?|w=QS)N4FCGx&`OMGN%AJH(|=&urVIz4fmaQ+V_)?iJ2pgt!sT*Y zBXOmM0fv7$xM3BFILS|(pL-Qx#<~ebG46-fYM+_o3w&y!owx?yM+n*`Cy%N1dqJtO z{f3(42&RiJf(_xO09<&mYMw}^XcKcw+o2r%L^A38%*>W_zMk#y&PFy}ji1l(%O7kr zBZBqH?jxGlO*M~k(+9oWo@~PQ!F zi$Y0!=%Rp$%B^*0CJB)Ft0eudp1M{Y=Xh=JT>Wo87Y#eJM^JixQ_OW?dX+EG1p%zsDYigHHT@ z<%q8tSuMH?2Ri4qRVZR=HiR^C%Q^#GJoS8M)OOg7{4hyJeCPL!2BuBVrTrF?Hz6#?%OhW(1)f2=u*10crwlr z7i&N%w3X9;kD>pWQ7AD$H0X~o?DUKJh`+5s2`ty5{FpDRfbnA70^Gk+qEeXQL>}M5 z0)Y}A*8j1U%xxc_E^{NZY9BaLuFQNGrtF@v+@=3zxm7ko9P=) zhO&GGN>-9t4YH1ATzDe-6Gt1O?xcS9D1Gu-7bix>^`4CgfgJs=VRKsJ6-y5I2QEN@ zv=$>O^7r(5!9ygvRdCam4Il=eZ@`S0@pI%!jRjT&eT)uq~DqkRZ9$ilF7?#~03)@6#F?VHGiS{Rt@~kuETYP0EiW1+k`v+U&CA_Yz>kqSWw9=gp9C-eJC*DX8hOg<>g z@cy&U?vcpGpqB(r-oT}feTO;I8%cyI$}Redf~T6nrJ1!WIDu2yzohUdnYjeCFZQp* zSATp`S2Z_;wfd}c^J3Imv?DyG`%B>;ss4z7sM>Hh0Se#Aq6z8#igSJhI5KRn`|pdn z{OB8T!Q=a`JEN;2gAjhskK!)L1?n+w*XNK@Y#2q_W$_h7xX^!kP>N2E{e{%9_8K$e z#Bi5TjSsKxQLfP4NHb03<30I%IVabo!P%I@jUO5IDp;(jI$@}U(&MRA;xy?hnIE5i zXc3SwkUf~s&n7Z0Iglz3*w;8v#W&N$a@U3$c;OU~Ls@Vr&%zCw2I0!~%K1Ia4FFc8 zb&MK$YG?rIP2|t;DL9*@AC=B09_26s@>`uhGrJ2X0={~rRjrQNHB<)F!K!Cx3!7wPml1d)BF1U+X52bB zN0GfA&j#xUs|qP03CeJ|?qMj;0;zCrSghwpm*dP2XzG~$aYAWV@*&rlBHcSas%nyv zllmflya?L!XBSS8ecSUrPkPWOy{U&Ku4TTMeL?`|R%fvFikdq^7gBmuMjw8v7N%x=> zuYUm3hVsdOfRmC}(RfX3yUYD*qY0pR`?;Ip%2I~rQtD!^<5vr_@Z6y15+4GOAi!RU zL_e-w_m{!mK(ap3JHhAYwFgoBNtLFqAs5%Y$?JjHIZj?c&W9ZW+5Lm{8S}s?i%A@7?&Y)eQtT1d`#CJ z{|&UP`r&y(;jEzcb62RVfDqqOx$``>q0Eg%vSRT2o!8c?umzK=#@iD0>D!qkZUfyD zcS+_5P>vIcNkrGF8Tu_2+ICbNO4m*1?lBtg_&d~}1wo(p+*}^DRffWOnk70w9`VR2 ztW{_(U1hqyPL%8A6J@Ep1@ysiRwbP!S-x9^S|bbn>=s3`#x<`F> z#G9alPl(pC3jqEc+RaAtvBUZNwd3QgZn5Idm(ZE0_|r}>lXB`P7m{+D?eGf7Xh6UB zLy6m!RZ zXFL2eW-qXT*Gl{lkLnmu2`)n)RJ5t}nEax^UWwQLc?_j5lvH{zG5bhre2XOUulVjq zjx|jpIIdpp6)Q8_jW5hSCmod!_HNN6UVLeJ}1Jv4L0xe?HAJ3F|SuR(JV6q`ZQ#3If2E{JHTde@rT!a z`qBemfZ%=FyklIqy>uK|(;h5rA&Xr(o_C*7-w^wm?z8dE^HB3!-D|T zoi*ZwHG7`d1E7A-G}+-glb-|IKbY-1|ALB=22gh6nM7oa5m1^OM@*LN>bN`WzN5H8 z&uZ4s2`rPw^U@D=*7522qO$mFY@$$fHrUEjSInI-yynecFhQ;}#;dQ-8g*`>E)NVf24 z4=g*z`Czz=60n1S(@7tt-KKl8C_$pE?-=V#Daq&Nl~FaKWYxwUm-?-tZ&pXA3H$J) zXF?l^5H>=Sm*4)g&)VwIhxaekG>Zc?2_p};j@(x{-H?rzjt8OS1NDxsrM2O0mvALA zxjM9i0gYDwmUoHKAr+oSf9KlT7?d|1>U^#S>V`y`L86^a{bd>m!a{@G^QsR;X0rV7 z7xFv^UHj$4PysfLLv`wdO%duE>VIGkzI_;f) zt-6mShC`^7C-Cf%&VJ4BIn^MRe+~;=i@v%z@%rPhxsaT%Q{w%^y_U2$A+Z=-LSn>A zJ1yBekNNU4q>s-$vBb6-@+#=u_h6=VUJFe%d+e`=QQyaD>~pBJKk1kJnR;P^{ZDii z@Sl?2i|#5IAn|hYBD?zEK?4A6g8)b)gs%V7gF(Up0(t<*00{C3;M>c1BvMWQm<9+y zlA*y1BRlVTc?LStC^G^LI4gw?0OKJL06YW$@iGv|DG2~r$_e$qJT#OYsfTd$17IQ^ z^fC$nWDin;pr8@L830H4Juml_0fL+ZH2p&j@QF9L0Dvm?hHY8FqGtI69 z^4kW9adW~EGa;i~FR~Z%h}>d1?mpei1W;W=C_8Xe@>&$pG-6-g4*)EWj$ZX3JK+|f zZ2s>W@G6@6C1c2n_n(X)%8TkC@{3IEe+LpCE#Q9{!=Q7T{}gey#AYCz7e@c5fCKpl z7*5Uvv6^FLxMy3bQ!@wm=Tco+e!qxt6H{zAo7@<*GYiJpO7mAqTs;Iufl~9fLqI~U zG&INz0IcLWA(3IoXsmG(ksWEm>UTOo@bscOBt{Hm1OP&?5=q|&^<=MC1!0iEK}c1n zR;-e!XfmlJ2D*{P%@@L1JjCNN#?#`_rl;eidt4NmVb7H4>rvmF0RfUJS*djk$(%9F z1rVbWOr>#;UpN)eFrkU4r2N_La6Xg|^sxY{7lp3!WAznn`cIBDaBIYe62B3oQ2HEL zdnIDh2_gbO6U!sE&J(ecI45!#;#skD^*SnBfql3EPsxp~Y{k3M&5$PKI6jvoR45@m z{5f9t4vfdMP}gSoin;&sm2*if0P|N$w@Iy4vzW(u#cu zk(;rbVk&h>-kw-KlKK+wW=M#wC0DPdg<$M=odRe^yEjZn+=*s`zfU881*{Gjibmx?}E=-NgET>6alk+k*5mCi}uCNfl zm{U};8nkIjAwImwD3n(a66BE`t}edDYLiutF#BA!a$S=q=7k+Bdo~$ClwB|v?xLsN z_4)-1$wfRLb`H6;!Z9lfra#PkFNz()q0qA01-LQbJlBW?%+>bF|yQ%$GhAPYa~h0%ghJUw>LFZ_JRINffqk|7*X)rErks|lR~3{ zQiN1HG9{`h()u10F*N07EEu{U);O!jn?fc9zNSwb%}{Co*=4{jaPzy5PE_u z8|51}#flP?u2_f1LorEP0xsj8!mg|2yo>_@Di#NKuKDOraL%u~*`2OkOZBG&Z$EQ8 zpZTkPx7Z{{U6fRRfs^bjQtc zj1+v$^70)NUc=S`oGx3b1DzYWyIIivH^YKg!*5o&cF4DhFxwfN1yc*J>iO@QQX%>G zzbUFX-tcpsV}^=FMnid}M&hML4xwRh22>>9+$xvw`U{8!!DW$FGFa5iCq*C^!iT{> zA5njvBRfVR=7aeYo~S0>!4B4n7#n$uUDc9KmYKhQ5k-GE%%ghG;ecMAveDhRz{0r) z{A=%dx+B?#P`Dd(&@~rbeLMteJG!3`)$$*p#!Q-h;e629}PjI zv-!c$RX_Xgg`{GzB61=H{wJ4r)VTKiKvExb%M62|L_o(*)XxZ!r-Q!o%SYUU7lec@ zG;YWr<-OjE!XpQ3aQ{hrRK0fWi$U(xY_1Vu*j;l2b>1JBim6-p`c8KLKf8df`wH3r0Z3*LBPdasYBG9wVz_@RV7t(w&39e= zD_n0V)b$WJ7LmjlL^3eV`&Yli+uq1gjE1%!8uwT9syGExZb8yGMjBtrRba`n=wR_u z5h7I#3TP@AbD!g0^i1FH1(rWmv~4`Z=Bi}1ORvTMVe==&T>}~SI?_@suhkhXzoWjb zhM?t6<9YxsPiC{=Rf0by&t$jd!SF%nB#mWY#ME8UV_wPlO(6U!pjo`toNg5Nup%&1BdkgnG}-P$2g#N&j?O$ID8UZJQ)xWYcW>FF5PZFB zljk(4HAFF78mct3W@0P^xTqn!)KiiC=O6bCn`iGQ&n~?=A8x*+Ki29`nqHmVPHj+* zxOE3MAw8bYJUs_`9{vJR)8AzM{klPQUpo@mb(hyy&>Z-Y->t82t&$>?9U}-*99ab@ z!wNS2B#C@-QXfegfl&5}x*W-$X5Hz9V1h8MXhpi2SlZKQhwa%?s! zsFa``d*M+jw7`5HNKeQzne#o1 zDF8LpxthK={E9XyQ~@2+9>PyqhNOibRxt#{!#+pnge0M=A=3bfhHtvqTZS21hV!1C z$4WgTgl`g@KHc<)1{7TE?7Z*hR_EV1{rl{gi-KHY#+i>+ynGPNYv_DTv=P6iC{#(s zsxm6Mw11nZ`J@c~X-yElJ9*qWLLnPpdl-B4*@2)B z12n)YZ(eGQ^Jp%w5z|^G<9ZVp{1~y>4&8$5w8A;sP1Lo*UHt8ZdNa@>sXe2^D$Ff4 z?X*p3y%As*g=J#yNZ;aGOEW!zA3u;)Fu!iy%;l5(rvO!)*t0HVC(T8}VIuSpuz7;a zKGjaGRU2m8oFPZ^)G#j{v!BTDFgIqt)6!E!a$Oly)R(!yyYY6q-ySyrv+}BIM3kmg zYCS4nBWF~ou3YhZL+R_xyI-Ew_AQ zMatyfieYBLGS#QH@}Tum^OI%zq*0mUE=2fN+l`XklC-QNFOcnPauF(#U!rLFjccTK zy@=2^RM4yyy|IMsF&<0IBn|BY*P&+4V?RMs25gqr$^fc|?LjWg_&%$R$BU7k7{70% z3RBiX+tKjaP}fAV&kCZHCO?C$vjJHgzN=T-GYgz`#m_<6jlIDv>U!s#TlTObfCul8yaPd)f z1lGHZ$Pm|HpIT}=El%RJE|9xH%K!K=fGr-<4#^DoEUS$D46TZwxY zviGf<8>4g-Y zLLFc&8$|}j?)RU1+`@7c<9YQD0P_Bc>v$@0;{6Yh^AA9D!-Un1Hf1-1h_uIid|y|v z`9{wFah_SVK48N}tcY-5k6aX{I37gz^tRGq7hBKm+trd4(wsq!A#D4`dg1yuBq>2PBzGwW7*j*4EJ`S{0bY`zMlZlhA%rLJ-RkzOR~ zs(_w&C_GOy@Du0C{`9?2;7sJ4L7sO$02v|E{zKdMA0UvBNm-PyxD)~j^ln-`DEp8= zNI7RranzUnrh9T8&nU7X0R3$lz2oEKnZ{7-%Qmyie$!~)2)AWFYSi1!#qsT-Vt$=1 z@h|^or$QrlcR$e9V{%Su7Oy$q%;VjUC}WJIGu%5H5$Nm1=Olpsn2G!S;$%qAk>=%R zujpll){t@(%Df<)WZH%9f_SgL11R2Cf8|rkPj9cKC=&DoFi|yKP8_CP2q==c4`Xdh zF^Xx^k8X=-DTive(j8afB7*ltNHa_a2c0bXi>a&6X7iQ)A?iMGynMNe-_I7VZ}m`5 zl;LfdF_qn`0XCXSBEu!!gh>L>Lg~H+iw^@eb(?X`Z>tQt{g3`;+~cp`^>SOG?jM$$=x3anYwP+c^OS@!01MS5J)D_bZt=+yRsH+o7`W@f?*FzFaczKUHUMoQ`J5 zB}FdicD`39CQVJR8Q!q@>Qb8?iJ?_ur*-2;3|a}Dl@9XOytegoD^Y3H_PtjJBYo#I zeYE7Up{*falli6h#p0Fd28X_6)UPH6d?SS!|NMUd?<9u4+0nm@@*LCF>%r)pS{L5J zc>%|p`G(EBoD2G-!?L$$@90a~G_w+%&x%Vh3Y~ptm-pwor}UZm`flhReVCF3ED!eU zzh_J~q-i-ODCIcc_iY-?hbMG5Vo14nq5V{X7E=hHXV*-wyR+u*TGBSci-7-K%qsvptI8V0$y&HN+QhUZ%W@&(Ng|h zwBQ`iS`mew1Z#r7Wv33}3~kq?_A#6~AKX|8h5G#Ud@_h_K{9pxbhFKZ=fVH(=fQ9w z9$hGJfLkeO13xGEVY583pi-3YfS1^EbiI2IW~}%R5UCK|3Tk$a!}eJ^ldQ}oaD*0S z63)=xTK`5@a2F1ksI}FES8trv{3tgbUVXZrkZ0nMU3}P+ppVVPvkh>2yh|m|$r2@= zh=yI&**5cW0}6lc>+pe zFF|X!iex&BtaV$U`WpNXz)WUpYDl;6q$*Hn)Ls4i8GiX^;vb;%c=lx>2BsLWOLRK_ zHq<4Q0VQy7%9$(}NNXyPc-Fo>1!fspgEk#miDR!d8Tue^w36BEuW zTu4-#ad+Ja{R6mbDvJlZFQ2!GnY}`nLE{WnLLDYZnN9j&PS>Z5fI9R)9pA*Cz34j4 z7&s1^)h|8dWvRD~wLc_ERy^@pSIsNoF8}@Ti~B0yl~;yN)4i{zrzRz>Im{gTn9brBk zP>~OSRT^Pc8kLbn10X_pexvnu4iBe$o0Ma$=qt~EdFc-$%4@a0&6++Zy@^Xn*te3& zY+TI~QR8?1LOn$!O5Po)PEI4b^WMiKr^s^dDN7-}{0F zYm-1BFd}@#+rwzusSSsBn)lNbBxyH$)c*)4;3OH5Bz&zP%|zB3ATwb2I+_{sEw#xl zITbxQY+T~6GCNJQj0%1-|8NWECnvnZU{E>Eh#WJ|^{4yj%R~(5PY;5Vj|)|jcriop z&Dbq0dTd6!Ut!$3J;W8viHCJVh=}F}&T~fgTE}CDBcz|IqV5rQFHUIWVngTak-n_`?=O2a#2m8| z0e|UP%CqRl^l4;ISn z{53_u7c_kyJSkeX^yj%;T9xY0!Ht4Zx5vYT4Hzlp(3AtHTAKQ)h`>}9U+%~E;&Lrc zg-{0ji4Q?Qay1H-V86gZH^sm6-ApjjPGBSWcQ*{otZarUbo zE0d(gdgwKwz$O|NBrd6ofGqkj)A|nuTt#xk^jVVk_P;;Av+8!(JAknvw-M}#5m#*` zyg1sh9Xj2QE~m2O8NaYHc=ocGSi*V8eJN}SK~OAYCu`AmuWSP3Wz6;o*+M@Sw6E@j zb}C=Q8HAS)Q`@gN1VB8W>~EXO?kS3%rMyQ&WeaO-)5x5B9In*UWM(GRCS_kz?9H84WIZ- z)rT>XVWR)tJyGW$An415cqoKrGg#F`f$`5{c_X`%I!W6342!m~(f9anO!Rs7Q33*~ zbP_0%EGH8`Qm7x@Rf)cpxb&$sa{_Rf@^}!Njkr=tDlcS$K61dPgTK746rI zWfH%BFK94w2u*J*2E({21IfDG%XTVthf{}xGFc@F3a4a3e}veR&ZQ+P%P)9k7CQ$kAQYlAo$>wM*X#pQs^_sHI4vRApuS)uGxyXmP-6`B?0)IA*AlKc^&qya zJS14bkb-mb#Xk<1$Stgwi`tgh)#-Cp0fH0g3u2OT-+|*@155`ri4#qTB2g0)%Hdt< z+yd^Fi5*znn*6OT5knG-L=U;*kKWpLzN95w*}I~A);0`>0#Kn!_<4zyH=gt@XSi4t zLlTK|7fZZxA6Imd`=-E+hex3VnpeOd4RPU+gIN}ua}2f@oio^no-c2F*1zQe1*(Hy zHi9d3D$0KdZZ`0W3XbTL>Uw%m@Q?FEtR*5T9BZ#eI_28;XTz@OMW4o3!nZvV*k