From 2ebcf5e1ec3c434fadc82235bfdad639e4f58d59 Mon Sep 17 00:00:00 2001 From: Dark-Storm Date: Mon, 12 Nov 2018 23:27:49 +0100 Subject: [PATCH] =?UTF-8?q?Modifications=20g=C3=A9n=C3=A9rales=20du=20styl?= =?UTF-8?q?e,=20finalisation=20du=20formulaire=20d'inscritpion?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- V5.py | 5 +- app/forms.py | 19 ++- app/models/contents.py | 19 +++ app/relationship.py | 15 +++ app/routes.py | 63 ++++----- app/static/css/container.css | 10 ++ app/static/css/flash.css | 45 +++++++ app/static/css/footer.css | 4 +- app/static/css/global.css | 178 +++++-------------------- app/static/css/header.css | 81 +++-------- app/static/css/navbar.css | 35 +++-- app/static/css/register.css | 55 ++++---- app/static/fonts/raleway_200.ttf | Bin 0 -> 122400 bytes app/static/scripts/pc-utils.js | 37 ++++- app/templates/base/alerts.html | 15 --- app/templates/base/base.html | 2 +- app/templates/base/flash.html | 18 +++ app/templates/base/head.html | 3 + app/templates/base/navbar/account.html | 2 +- app/templates/register.html | 19 ++- 20 files changed, 306 insertions(+), 319 deletions(-) create mode 100644 app/models/contents.py create mode 100644 app/relationship.py create mode 100644 app/static/css/flash.css create mode 100644 app/static/fonts/raleway_200.ttf delete mode 100644 app/templates/base/alerts.html create mode 100644 app/templates/base/flash.html diff --git a/V5.py b/V5.py index 3c32c5e..c255ae5 100644 --- a/V5.py +++ b/V5.py @@ -1,7 +1,8 @@ from app import app, db -from app.models import User, Post +from app.models.users import User +# from app.models.models import Post @app.shell_context_processor def make_shell_context(): - return {'db': db, 'User': User, 'Post': Post} + return {'db': db, 'User': User} diff --git a/app/forms.py b/app/forms.py index dfc523e..ccf5c4a 100644 --- a/app/forms.py +++ b/app/forms.py @@ -1,7 +1,7 @@ from flask_wtf import FlaskForm from wtforms import StringField, PasswordField, BooleanField, SubmitField from wtforms.validators import ValidationError, DataRequired, Email, EqualTo -from app.models import User +from app.models.users import Member class LoginForm(FlaskForm): @@ -16,14 +16,21 @@ class RegistrationForm(FlaskForm): email = StringField('Adresse Email :', validators=[DataRequired(), Email()]) password = PasswordField('Mot de passe :', validators=[DataRequired()]) password2 = PasswordField('Répéter le mot de passe', validators=[DataRequired(), EqualTo('password')]) + guidelines = BooleanField('J’accepte les CGU', validators=[DataRequired()]) + newsletter = BooleanField('Inscription à la newsletter', description='Un mail par trimestre environ, pour être prévenu des concours, évènements et nouveautés.') submit = SubmitField('S\'enregistrer') def validate_username(self, username): - user = User.query.filter_by(username=username.data).first() - if user is not None: + member = Member.query.filter_by(username=username.data).first() + if member is not None: raise ValidationError('Pseudo indisponible.') def validate_email(self, email): - user = User.query.filter_by(email=email.data).first() - if user is not None: - raise ValidationError('Adresse email déjà utilisé.') + member = Member.query.filter_by(email=email.data).first() + if member is not None: + raise ValidationError('Adresse email déjà utilisée.') + + def validate_password(self, password): + if len(password.data) < 10: + raise ValidationError('Mot de passe est trop court (10 caractères minimum)') + # TODO: add more rules >:] diff --git a/app/models/contents.py b/app/models/contents.py new file mode 100644 index 0000000..83ea859 --- /dev/null +++ b/app/models/contents.py @@ -0,0 +1,19 @@ +from datetime import datetime +from app import db +from app.models.users import * + +class Content(db.Model): + __tablename__ = 'content' + id = db.Column(db.Integer, primary_key=True) + type = db.Column(db.String(20)) + __mapper_args__ = { + 'polymorphic_identity':__tablename__, + 'polymorphic_on': type + } + # Standalone properties + data = db.Column(db.Text(convert_unicode=True)) + date_created = db.Column(db.DateTime, default=datetime.now) + date_modified = db.Column(db.DateTime, default=datetime.now) + # Relationships + author_id = db.Column(db.ForeignKey('user.id')) + author = db.relationship("User", back_populates="contents") \ No newline at end of file diff --git a/app/relationship.py b/app/relationship.py new file mode 100644 index 0000000..7fdd30b --- /dev/null +++ b/app/relationship.py @@ -0,0 +1,15 @@ +from app import db + +class Parent(): + __tablename__ = 'user' + id = db.Column(db.Integer, primary_key=True) + type = db.Column(db.String(20)) + __mapper_args__ = { + 'polymorphic_identity': __tablename__, + 'polymorphic_on': type + } + +class Children(Parent): + __tablename__ = 'member' + id = db.Column(db.Integer, db.ForeignKey('user.id'), primary_key=True) + __mapper_args__ = { 'polymorphic_identity': __tablename__ } \ No newline at end of file diff --git a/app/routes.py b/app/routes.py index a327b31..6f889c3 100644 --- a/app/routes.py +++ b/app/routes.py @@ -3,53 +3,54 @@ from flask_login import login_user, logout_user, current_user, login_required from werkzeug.urls import url_parse from app import app, db from app.forms import LoginForm, RegistrationForm -from app.models import User +from app.models.users import Member @app.route('/', methods=['GET', 'POST']) def index(): + form = LoginForm() + flash('pseudo ou mot de passe invalide', 'error') + flash('tout ça c\'est ok !', 'ok') + flash('mais ça bof', 'warning') + flash('et une info', 'info') + if form.validate_on_submit(): + flash('test', 'ok') + member = Member.query.filter_by(username=form.username.data).first() + if member is None or not member.check_password(form.password.data): + flash('pseudo ou mot de passe invalide') + return redirect(url_for('index')) + flash('Connexion réussie') + login_user(member, remember=form.remember_me.data) - form = LoginForm() - flash('pseudo ou mot de passe invalide', 'error') - flash('tout ça c\'est ok !', 'ok') - flash('mais ça non', 'error') - if form.validate_on_submit(): - user = User.query.filter_by(username=form.username.data).first() - if user is None or not user.check_password(form.password.data): - flash('pseudo ou mot de passe invalide') - return redirect(url_for('index')) - login_user(user, remember=form.remember_me.data) - - return render_template('index.html', form=form) + return render_template('index.html', form=form) @app.route('/logout/') def logout(): - logout_user() - return redirect(url_for('index')) + logout_user() + return redirect(url_for('index')) @app.route('/register', methods=['GET', 'POST']) def register(): - if current_user.is_authenticated: - return redirect(url_for('index')) - form = LoginForm() - form2 = RegistrationForm() - if form2.validate_on_submit(): - user = User(username=form2.username.data, email=form2.email.data) - user.set_password(form2.password.data) - db.session.add(user) - db.session.commit() - flash('Congratulations, you are now a registered user!') - return redirect(url_for('validation')) - return render_template('register.html', title='Register', form=form, form2 = form2) + if current_user.is_authenticated: + return redirect(url_for('index')) + form = LoginForm() + form2 = RegistrationForm() + if form2.validate_on_submit(): + member = Member(form2.username.data, form2.email.data, form2.password.data) + db.session.add(member) + db.session.commit() + flash('Congratulations, you are now a registered member!') + return redirect(url_for('validation')) + return render_template('register.html', title='Register', form=form, form2 = form2) @app.route('/register/validation/') def validation(): - if current_user.is_authenticated : - return redirect(url_for('index')) - form = LoginForm() - return render_template('validation.html', form = form) + if current_user.is_authenticated : + return redirect(url_for('index')) + form = LoginForm() + return render_template('validation.html', form = form) diff --git a/app/static/css/container.css b/app/static/css/container.css index 4e2176b..f390b72 100644 --- a/app/static/css/container.css +++ b/app/static/css/container.css @@ -2,6 +2,16 @@ margin-left: 60px; } +section { + margin: 10px 5%; +} + +section h1 { + border-bottom: 1px solid #a0a0a0; + font-family: Raleway; font-size: 32px; + font-weight: 200; color: #242424; +} + /* #container h1 { margin-left: 5%; font-family: Raleway; font-size: 24px; diff --git a/app/static/css/flash.css b/app/static/css/flash.css new file mode 100644 index 0000000..e66a1a1 --- /dev/null +++ b/app/static/css/flash.css @@ -0,0 +1,45 @@ +/* + flash overlay +*/ + +.flash { + position: fixed; left: 15%; + display: flex; align-items: center; + width: 70%; z-index: 10; + font-family: NotoSans; font-size: 14px; color: #212121; + background: #ffffff; + border-bottom: 5px solid #4caf50; + border-radius: 1px; box-shadow: 0 1px 12px rgba(0, 0, 0, 0.3); + transition: opacity .15s ease; + transition: top .2s ease; +} +.flash.info { + border-color: #2e7aec; +} +.flash.ok { + border-color: #4caf50; +} +.flash.warning { + border-color: #fbbc26; +} +.flash.error { + border-color: #f44336; +} +.flash span { + flex-grow: 1; margin: 15px 10px 10px 0; +} +.flash input[type="button"] { + margin: 3px 30px 0 0; padding: 10px 15px; + border: none; + background: rgba(0, 0, 0, 0); color: #727272; +} +.flash input[type="button"]:hover { + background: rgba(0, 0, 0, .1); +} +.flash input[type="button"]:focus { + background: rgba(0, 0, 0, .2); +} + +.flash svg { + margin: 15px 20px 10px 30px; +} diff --git a/app/static/css/footer.css b/app/static/css/footer.css index 7f497b8..153c068 100644 --- a/app/static/css/footer.css +++ b/app/static/css/footer.css @@ -1,5 +1,5 @@ /* - footer + Footer */ footer { @@ -10,4 +10,4 @@ footer { } footer p { margin: 3px 0; -} +} \ No newline at end of file diff --git a/app/static/css/global.css b/app/static/css/global.css index e03131d..4bca62e 100644 --- a/app/static/css/global.css +++ b/app/static/css/global.css @@ -7,6 +7,14 @@ @font-face { font-family: Raleway; font-weight: 300; src: url(../fonts/raleway_300.ttf); } +/* + ALL +*/ +* { + box-sizing: border-box; + transition: .15s ease; +} + /* body @@ -19,69 +27,6 @@ body { } -/* - header -*/ - -header { - height: 50px; margin: 0; padding: 0 30px; - display: flex; align-items: center; justify-content: space-between; - background: #f8f8fa; border-bottom: 1px solid #d0d0d0; -} - -header h1 { - font-family: Raleway; font-weight: 200; -} - -header svg { - width: 24px; height: 24px; vertical-align: middle; - transition: .15s ease; -} -header a:hover > svg, header a:focus > svg { - filter: brightness(.5); -} - -header input[type="search"] { - width: 250px; - padding: 5px 35px 5px 10px; - border: 0; border-radius: 1px; - font-family: "Segoe UI", Helvetica, "Droid Sans", Arial,sans-serif; - box-shadow: 0 0 1px rgba(0, 0, 0, .4); transition: .15s ease; -} -header input[type="search"] ~ a { - position: relative; left: -33px; -} -header input[type="search"]:focus { - box-shadow: 0 0 4px rgba(0, 102, 255, .9); -} -header input[type="search"] ~ a > svg > path { - fill: #cccccc; transition: .15s ease; -} -header input[type="search"]:focus ~ a > svg > path { - fill: #333333; -} - -#spotlight a { - padding: 8px 18px 6px 18px; - color: #727272; font-size: 15px; - border-bottom: 2px solid rgba(93, 123, 141, 0); - transition: border .15s ease; -} -#spotlight a:hover, header #spotlight a:focus { - border-bottom: 2px solid rgba(93, 123, 141, 1); -} - - -footer { - margin: 20px 10% 5px 10%; padding: 10px 0; - text-align: center; font-size: 11px; font-style: italic; - color: #a0a0a0; - border-top: 1px solid rgba(0, 0, 0, .1); -} -footer p { - margin: 3px 0; -} - /* links */ @@ -95,75 +40,19 @@ a:focus { -/* - alert overlay -*/ - -.alert { - position: fixed; left: 15%; - display: flex; align-items: center; - width: 70%; z-index: 10; - font-family: NotoSans; font-size: 14px; color: #212121; - background: #ffffff; - border-bottom: 5px solid #4caf50; - border-radius: 1px; box-shadow: 0 1px 12px rgba(0, 0, 0, 0.3); - transition: opacity .15s ease; -} -.alert.ok { - border-color: #4caf50; -} -.alert.error { - border-color: #f44336; -} -.alert span { - flex-grow: 1; margin: 15px 10px 10px 0; -} -.alert input[type="button"] { - margin: 3px 30px 0 0; +/* Buttons */ +input[type="button"], +input[type="submit"] { + padding: 6px 0; + border-radius: 3px; + font-size: 14px; + font-weight: 400; + border: 1px solid transparent; } -.alert svg { - margin: 15px 20px 10px 30px; -} - - - -/* - buttons -*/ - -input[type="button"] { - font-family: NotoSans; font-size: 14px; /*font-weight: bold;*/ - text-align: center; - padding: 5px 15px; - transition: .1s ease; -} - -/* flat */ -input[type="button"].flat { - border: none; - background: rgba(0, 0, 0, 0); color: #727272; -} -input[type="button"].flat:hover { - background: rgba(0, 0, 0, .1); -} -input[type="button"].flat:focus { - background: rgba(0, 0, 0, .2); -} - -/* raised */ -input[type="button"].raised { - border: none; - background: #e0e0e0; color: #212121; - box-shadow: 0 1px 2px rgba(0, 0, 0, .3); -} -input[type="button"].raised:hover, -input[type="button"].raised:focus { - background: #d5d5d5; -} -input[type="button"].raised:active { - background: #d6d6d6; - box-shadow: 0 1px 8px rgba(0, 0, 0, .3); +/* Checkbox */ +input[type="checkbox"] { + vertical-align: middle; } /* Input text */ @@ -180,23 +69,20 @@ input[type="password"]:focus { } - -section { - margin: 10px 5%; -} - -section h1 { - border-bottom: 1px solid #a0a0a0; - font-family: Raleway; font-size: 24px; - font-weight: 200; color: #242424; -} - -section * { - transition: .15s ease; -} - - /* Bootstrap-style rules */ .flex { display: flex; } + +.bg-green, +.bg-green { + background-color: #149641; + border-color: #0e692d; + color: #ffffff; +} +.bg-green:hover, +.bg-green:focus, +.bg-green:active { + background-color: #0f7331; + border-color: #073617; +} diff --git a/app/static/css/header.css b/app/static/css/header.css index 72996d7..07a0035 100644 --- a/app/static/css/header.css +++ b/app/static/css/header.css @@ -3,31 +3,29 @@ */ header { - margin: 0; padding: 10px 16px; - display: flex; align-items: center; justify-content: flex-end; - background: #ffffff; border-bottom: 1px solid #e0e0e0; + height: 50px; margin: 0; padding: 0 30px; + display: flex; align-items: center; justify-content: space-between; + background: #f8f8fa; border-bottom: 1px solid #d0d0d0; } header h1 { font-family: Raleway; font-weight: 200; } -header input + span { position: relative; left: -32px; cursor: pointer; } -header span > svg { +header svg { width: 24px; height: 24px; vertical-align: middle; - transition: .15s ease; fill: #969696; + transition: .15s ease; } -header span:hover > svg, header span:focus > svg { - border-color: rgba(32, 128, 255, .6); - fill: #484848; +header a:hover > svg, header a:focus > svg { + filter: brightness(.5); } -header form { - flex-shrink: 0; margin-right: -23px; -} header input[type="search"] { - width: 220px; height: 30px; padding: 4px 30px 4px 8px; - border: 1px solid rgba(0, 0, 0, .2); border-radius: 2px; + width: 250px; + padding: 5px 35px 5px 10px; + border: 0; border-radius: 1px; + font-family: "Segoe UI", Helvetica, "Droid Sans", Arial,sans-serif; + box-shadow: 0 0 1px rgba(0, 0, 0, .4); transition: .15s ease; } header input[type="search"] ~ a { position: relative; left: -33px; @@ -42,54 +40,13 @@ header input[type="search"]:focus ~ a > svg > path { fill: #333333; } -#spotlight { - flex-shrink: 0; +#spotlight a { + padding: 8px 18px 6px 18px; + color: #727272; font-size: 15px; + border-bottom: 2px solid rgba(93, 123, 141, 0); + transition: border .15s ease; } -#spotlight a { - display: inline-block; - height: 24px; line-height: 24px; - padding: 2px 10px; - background: #728bf6; color: white; font-size: 12px; - border-radius: 2px; border: 1px solid rgba(0, 0, 255, .05); -} -#spotlight a:hover { border-bottom: 1px solid rgba(128, 128, 255, .05); - background: #7a93ff; border-color: rgba(128, 128, 255, .03); -} - - -/* - subheader -*/ - -#subheader { - margin: 0; padding: 0 32px; - flex-grow: 1; -} -#subheader * { - margin: 0; padding: 0; -} - -#subheader li { - height: 30px; margin: 5px 0; - display: inline; - /*display: flex; align-items: center;*/ -} -#subheader li:after { - content: " »"; - opacity: 0.3; -} -#subheader li:last-child:after { - content: none; -} - -#subheader a { - padding: 0 3px; - /*border-bottom: 1px solid rgba(93, 123, 141, 0);*/ - color: #727272; -} -#subheader a:hover, #subheader a:focus { - /*border-bottom: 1px solid rgba(93, 123, 141, 1);*/ - color: #22292c; - text-decoration: none +#spotlight a:hover, header #spotlight a:focus { + border-bottom: 2px solid rgba(93, 123, 141, 1); } diff --git a/app/static/css/navbar.css b/app/static/css/navbar.css index 1b36e6f..f3cdb40 100644 --- a/app/static/css/navbar.css +++ b/app/static/css/navbar.css @@ -183,34 +183,31 @@ nav a:focus { #menu form div { padding: 0 5%; } -#menu form input[type="text"] { - display: block; width: 96%; +#menu form input[type="text"], +#menu form input[type="password"] { + display: block; width: 100%; margin: 0; padding: 5px 2%; font-size: 14px; color: inherit; background: #e8e8e8; transition: background .15s ease; border: none; - border-top-left-radius: 5px; - border-top-right-radius: 5px; -} -#menu form input[type="password"]{ - display: block; width: 96%; - margin: 0; padding: 5px 2%; - font-size: 14px; color: inherit; - background: #e8e8e8; transition: background .15s ease; - border: none; border-top: 1px solid #dddddd; - border-bottom-left-radius: 5px; - border-bottom-right-radius: 5px; } #menu form input[type="text"]:focus, #menu form input[type="password"]:focus { background: #ffffff; } +#menu form input[type="text"] { + border-top-left-radius: 5px; + border-top-right-radius: 5px; +} +#menu form input[type="password"] { + border-bottom-left-radius: 5px; + border-bottom-right-radius: 5px; +} +#menu form input[type="submit"] { + width: 100%; + margin-top: 10px; margin-bottom: 5px; + border-radius: 5px; +} #menu form label { font-size: 13px; color: #FFFFFF; opacity: .7; } -#menu form input[type="checkbox"] { - vertical-align: middle; -} -#menu form input[type="submit"] { - width: 100%; padding: 5px; -} diff --git a/app/static/css/register.css b/app/static/css/register.css index 835cde3..3de1823 100644 --- a/app/static/css/register.css +++ b/app/static/css/register.css @@ -1,50 +1,45 @@ -#form { +#register { width: 30%; min-width: 350px; margin: auto; } -form > div { +#register form > div { margin-bottom: 15px; } -form > div > * { - display: block; -} - -form > div > label { +#register form > div > label { + display: inline-block; margin-bottom: 5px; } -form > div > input[type='text'], -form > div > input[type='email'], -form > div > input[type='password'] { - width: 96%; padding: 6px 2%; +#register form > div > input[type='text'], +#register form > div > input[type='email'], +#register form > div > input[type='password'] { + display: block; + width: 100%; padding: 6px 2.5%; border: 1px solid #abcdef; } -form > div > input[type='text']:focus, -form > div > input[type='email']:focus, -form > div > input[type='password']:focus { - box-shadow: 0px 0px 3px 0px #0033ff; +#register form > div > input[type='text']:focus, +#register form > div > input[type='email']:focus, +#register form > div > input[type='password']:focus { + box-shadow: 0 0 4px rgba(0, 102, 255, .9); } -form > div > input[type='submit'] { - width: 100%; padding: 6px 0; - background-color: #168f48; - border-color: #12753a; - color: #fff; - border-radius: 3px; - font-size: 14px; - font-weight: 400; - border: 1px solid transparent; +#register input[type="submit"] { + width: 100%; + background-color: #149641; + border-color: #0e692d; + color: #ffffff; +} +#register input[type="submit"]:hover, +#register input[type="submit"]:focus, +#register input[type="submit"]:active { + background-color: #0f7331; + border-color: #073617; } -form > div > input[type='submit']:hover { - background-color: #168f48; - border-color: #12753a; -} - -form .msgerror { +#register form .msgerror { color: red; font-weight: 400; margin-top: 5px; diff --git a/app/static/fonts/raleway_200.ttf b/app/static/fonts/raleway_200.ttf new file mode 100644 index 0000000000000000000000000000000000000000..281a001983af7cd405be32acea233c22d3ebb00f GIT binary patch literal 122400 zcmeFa2XtK3z3{vDnb8z!)XS)jrl@yImSnj|<8Ff+rrMa|7J4x_U`l8Kf&(F>P%f9` zrT{6I+ynxIP?JDRNdkmW9f}*qxOW?unfLpjb4D7;mTi*ny|=!#F07-mMsxQ5_rA|4 zt(3~n_1_1l^U{< zyUw0}(cDY#z52m)rCO&bmHOKJD;5XS9x?u^^t)01-tv`8&$(#yRq=cI{Zggelh2uZ zIj<^<--q$)Ip@NwzVgJp?YuXtQ0Y$BxeMnm*#GmhexUT?Ab;;Tmp9zUIe)|Nr}2Bm zxfd;7@>*opxB2~A)@!+7;bj-6Uz55~>1!TQs(a{#m&~7gNp8?k`u8h<_x_9KF1ghB zwR@k^&+&N`ym;v7*Isn@BBeii zme0>sLYq_-Pz_37ICt^I$^(`7FCI7lqGf;HgIwn2REGKLQMx{6e)1=Jntnh(X;c_D zIh5mK$709T&MD4&oa>zXQW{cjO}QiGyRMU5+uarJY3`Fet)6E+AA9feK9(9yy(z6G z?S9{Vz8|JHq~D+6$;`=W$%`voT875))ik}d{^-giytXoUc9EH zs$^)%?2@xfzEW~w$z>%wOH)f1mo6`xQFd|JZDqeK+ZmV;m=ZW8a6{nMz=wfVMd*&ucf+OOuY~Uk-xGcy{F6va<15wD_*!*)e2cn2{*iis>!Y?~@Jv6>uUl4y^FN%MnFXLJo|42U`U!$MkdNRINKg;WL@ioe&-d9?ub4AoVeIc(G zaXriGCG4|_J+`sO2dux5^*6Hq7S>;_9*OT$&&PMD1Mxk&oI8SCRm!PrcwG{Y>l@7m=&w+_9JI06Uc{gWa9%?qYXCkLNvsU}=0myT|q2$YZ&xVTE?C z$?^B0-9C2vOf3Ny!R_|=L3a9_ojzx$HSF{O_-$5?#`m-1-_*{Z}5l&g!? z=f-#H`SA_<67ai>e_OkLr0+KI+YNqk6SorZ+5uiWSaA<4eh&QWS@Cn=-=Yh+O5&Ss zJRG`0Ww1-8iHqzqKE9rn_vvfno1p4OaM}(sc6x@_XZg%?TrWXOC)CvDU!LW!&#|fxI*XpH zg|>U4>mDHd!qycBblGcjb|3410kr#60o>XOx3&RY+?JPh+`WgpcbWKE+GYT)rEOhs zU_2C@4|HGzb@xHp&As^FZ%d(8ub>Gc9a*Xcx!8d`e4?(5$J7$#P*?GKGcZ2NuFu1J z(XyBM{A*l)<=^jfeE?+3p}r-#d$bpN6+oXNRxLqB0zhOz=eFfw2vC-rHeoz}KRq7P zbGYVm--XcmBCadB|5_lw-lVb6z|>fM4}ZI#zderpJi+xOHtbnmpW}K3YE*;4T6I?Z zY_NFEwi(|*E^bhF!qNNVcOn~iA{#e@%@R2LEjauz7_0$e*c9nHv3Vxc_aq|6L$l1B4rq*qwT*38m=YUZmj;AlwdwzXHNXfbeM`d>9BHgzrnS zDYwUe4J2_Oi33R-DE0%z0e1QV`8vQ32iRdBD;-d&XxBR3fW@AMCQN6~8?e|n#@|6R zmh108m3z?ldyxyxx=U3j_^<4>YG)%G7eJ3I*<}fwx{BAEk@2PRC;9YC&}0>myaFVz z0Lc?@d9QkwwVscE6R4h6FCh&t$Nva@#5QeFoA}#at^-(UFPsoAmvA)z$50?1kA}>O zzX`qm0yhn4wgQZP2S!hU(G$?@b7b)gle0IV$+z(N+o9nd(ChB_vv612wEM*7?x)c1 zLuj`g?rv7$Ud;OJ^;$GybCSLO3~WBL?e#nA5iF{uYkvi!FTh4H5SzVAm!iAs>&z-?ZJHUJm}$$IIukaPbeE#o4NMJ--Wty?CJ{bFyVYcr^a7Fhs2wupg$Tr+6>%< z*w78S2YWdl3Qa?^mzWgYp>KsdOXCmPwsQj%-H0@9g`!)L#;xEH2al~#bt|~UpzO!` zRdo31I7N`IPr>Vc@Om4Z{s!ImLy4Wxd?z&DiWF^y=DWd5Jet_Io#3<{e1ztoATisK z81ZTn8#urt#k2$BJI4d}Ts}8H{u^)+&$b&peyAVkZ%=SN$@L7^vs}+1?^!@1(T*kC z!UxMLX)|^a`Al$EWHAxLECpkcGrX{>MV{jL|F|7DNu(jGY4F;Dh8#dc;2HmZfa@W& zz{2Yj?=F9pZ#K(q^pB%<32G+Uwe9w6ETl|KZ6-Mw*wW&aI!jH8RY zObNchl!!RHiC5jrPH}enoSi;rr%g!2UUvJO-PW1X-D6tO$?9}puf!$OE0f15bryU4P5r3Zm(HL=1!h!y@ptnj8*$g~lE9yxfL zc;Qp%^?Txl7ogYE#0#;*#0x{AVVxZ>d>2`N0UF+ktp5=ic}jmZ{v;M<6&QX`UjvP= z<@Ia4-Vpx>mSq#N^Dr3i1moT4!XL1dFM;`Y!2BUFe+bMU1oK~k`Om=oAuxXkUHAhW z8V`3x*0&&G5)-}z4GuzszkvUnrl!Avjd>4i`GF}1Yt*O6!CvTefcvM3d~#dRmjQpCTI2m*B0Q~4qV%SYbS6?x_&@b|tb7U9!ixTv zL7}&iylw2dpB?wHqr@ls&D~bA+bVXGcy|XH3KNJ@(_w#BDT$>%4(Y`ucMa-|82@FLyCnu zZBS<=^6)OQ@B!G1RBpGiUu#CC?;-Oa@cwdSV>Qyd35&HC>vI52G~k67%aDUs6(9qC zc#()uE$bt4;7F2#Ca{ixwF60Bg$!&32zJ;}YkI#I7Pg~ACtFd$IcyB$|Cey--SNQ~9z6CEI1#^ig zo`#pN+t@z|_6PAKg1zw4gHAiq=`OIZvU&LoynGW1Jgl+q@bjNGKOfNvDtwiQ>q_k8 z5$NnN z|5(fJpRxNocK(c=*TSPcs+b6854-Mz7yI!YcM#R=!FRl>9^iT?{!9FZR5T<)7T@t9 zaYLLKeh>a)EB;~w{$eBXyX>|Pyd~pZn`Fy&vYSMcn~>M%;oi&KaW`6+#czLO&Chw~ z6W05J^|rI#Cf3``dOKJzk&CZmy&XWm1L*g#o_M~ksz^=7x-V2tbtP+G#kDm49#PPz zc3k#07`#m^?E#Bd)g$P_>0EQT7RBFXhxatG9NAe8t8ZlWjjX<%7}CKG8`xpJehFJC zxo-z~|D$A#%gKBWARUER_ENBH;I)yf3z;8J>_Q9x)bB$D;kan_Zr0t+y1U@`R@U9c zx>CE^3a7`h`eY)Zh3LTr(0nOT)9qmN0GRxg>mja3@m0&A(_S!;DnI~u`l==p?WftY zn*s!%0D(j{59m9<;&CM639cu(o?%@#JMDr-e}ucsq0MsW@-nno4lR}|JRA0M0#VCk z;)sPv+s#PbQlhpyx$A!JdVuSvRC*pl_at+Ao?Q7w{O-$SC%KEp20v&%1mZ37gNjQtCw;A1GX2?}k3LffFwCMdKC3T+ghCvgT8TF50i(v`ek z#kCZVe>=Rm(~Ncnsy{$24OFtrf3wTai19Y-TaeOQxt2l+vAR}G;3IbW)XEc(wO01&POGZ+`HunHSivwai9Y}`gUlyN|JjKCYhDw8f`Uszv zI$htV%c1&SsJ$N?_e1f$;CCOm?SG4BDWEcxADs4O*9sXrZn%2Gq!W6HLnQrL4DG?hKKL(lEd@>68* zcA{v(5X@A%nFk4sOYtvvA{ogwiszC4Dx@qqKat!dMKr#bo_02;h@;TiXZiUem8+NW z+^;~j*HkMtqZai6)Y}U;_CfOleC8lDjd8_UUvcHYkwWF8yW-OgT#a0_lvmHjm(9f% zp2zDYDoCtRr7u%{joj$ldG8KB^KG={ZZ%XdQ+P&p*LVP{M)`B{=%=v!Yq0oRvD_Px zi}lFG9(I)c=q_|11PykgAyN;P8n;wug&yCt>9GvjEki>#LBIRZkS$>UXLz;>o_%C$ zhgi9}*qHO+(IxD)2s?Zk{3D;Vt)1}eQ|KsBcOur`2*1RFZb2*dm|DD*U3bHQ&Fr|D z-9FO`;qFo*04@JA`C36;)l0-7HPq?I!wr1uMy|Wa2!dd;8%*~1>bleots43#U?cW_ z6>F~qo3*U}Pq0}DCR@OyubMp4IFj(^R_*gGB*PDE`}t%5 zIg#j~LQUfCCOra4mUuzzt&4Z`fZx*8SPPfjHOxVGyKIIxfmcPXDS z;LAasMm(3rebjBu`(EI_PoViHwl#Z)d)G*W9Z}M2Is8wNifu^69=Nd!ZtS#eQXH&4WW^n< zxPlc|u;K<*e47<_A{D!UL8{DBFEj7}dy$IWNX2eoqWTHuR%9SGOR3FnMz%L&i=@`H z8L8NeRBVFsdreF90(M9I%}RD!$u56G3Tl8!qLj((eKxNPq1w{;@A>4XeDWO`LbgXH=mm5F}VdiGz*{#Lvyd32GDv1s+Tz*sEeUs(MwtS;5q zUkeS<>hFQ|agDlQUZrn z?D8bLY&N~U7uzrm_@)E@5+wHqeD#gQ7ic=W>;a#>=<}Ookb9`|?q;{o*ljJlNe1~5 zxP1z3*Ff9l*o`}}Tvi8e^&vLdWm-dO_hz)4&Y7RUB zSqz^jHeboyF^Hyun;F_B>uM;abFX8GpM2J-wTCMApmrouAl%GAzc6__CK( z6RT&jdIoog^abeqCHRp=T$ial?rbyf3}R_sq|5j+zUdVpc}-PvPXver8Yj>=fyN0m zP8%AbUoFsR*7UGu4r>;%X19Eq(P+%f9bIuK!|36r1oK4!pwz zb~wwd|LtPeOf+T-yY6JyZR{$wUh#jDHEc5N!w2ZC)UFHgt&+dY!Y|F{nhU3_xJ9D= zt>iA!|F!c={@!1MB!1ojUk?{ol)xcPT%qBYAAWh@R{{JgP;c?xUjDj|IKYx5FTC?Y zUoX7#!aJ8ONu^1Wlm_2C`Wkq9JJ%gZ*|+)qZffhxkW!JXGen-iNiw1(ymJRvat!ng z{3i|~k8p9PrOoTm<_&1_Cus6VXz#mP`ZV`K&B7$>bLU~K&ttar`G-x@l~|q~&~6)+ zXFIeLx=F?)-giB4?7|l8!WKyN)}osSEZ7E`hVD+XEx>}$;3 zt<1pc``?YtJ2W%c2rV~Y%eG^2&LVHL{O0ra?(c)s`?l|toa96B+N}0qe?{6lu!!Va z_)qZ)JHeGM2ojOXN}KugPCmVz7*IYf-g=MyX~}GNnQ4hOi#3g~Ro}vA6Zy;irfpBueFiKL$M>gU7!@*S|1#z9fDH)LsHcw}StNNQ>27cs%|$ zB;~J2%KNPP8dQFT6}J#+Nv(b}wD9tmY0yUeko4ehByYM4iTMuvxCi>&%Z}-$^e&~s zKS=Ch_FW?Cgx+2Y-COX8kayML;nyNvYt=aTI)S|>Q}aFB%tP0*?x)12g4_S#E&sv# z;`I~RkwhZm^*_bNNtaG>MmWerC>rN zf#$3uYnR%^a_F%fdVGi%mFQb$BtAy+*28NDw6L;n7r!OvNd14y1c!&wlHUWrbjYPT z_X4oJ3~XQ6-0$mfjc5P)@vDGm7x4T5ZaRo{tQDSOg+1uy!>qEE%JzG#^t`>2bfY)) zdUGo}wR&dKJD(4?m%ukF0%X$;G;uPyyH$VN!iqm(#oesv#WzLM*lD$GkKSN6>HSI0^cVg@ zG(pt+BAg(0!QRW?GNnWJnjV<5H&TEX(x|pppnuV!S7SO6pzj zq3;seeg+hh=g4G-)GQ=|70YVPg;;%&9mvN{QyO+_(Pebl>_5JWby>%LQtNz!{XS;x zZR%a*dkori_c>PBcFwnI3fwF_O6+K!jmsmAc+lW;)t5D>ucXFRK z+q4df`~zydY}!bxUn~8qwd^etARVJbKYSB>kr+Qt)Fcx`GASiFn_0PlIx_9DocH&F zh1CI*>cv{*OR_=9t2{zERux*TCvwu*s;xH1xAT|BS)UpP8Nu&Z&x#d2czPF{cf)x% zUS8wnQ|t)Tg_n2X<=uFB7hc|JN1$H3yhw+KJv?}M7hc}L%S+to(0B6sZPvJ(^-`gk z)XO9rUS)fie?W^*@fYiWZX5PcCOnvzgm-&@WGPy7KYxFK>mm5}GFl>8UkcpZ0-ZO2 z^A@-!`QT1yF8yUIYx@p#m%7Ra-1`Cd{@#{E>DtB3buNLY(jTUN3N8A2!BT4xOG^C1 z&s)u(UFOdgQ}5T9vOgL7xeys#f;=pZKg3Q}=lZ8$CS0~`=yv$E+l&*X+VC>o*79DG zW3K`B&**zuRc5JV%*S_F-Mg)5TI(O_cm4$xZh`$ zT}bRs^y~uQC4K|WUqO{b)cj9YlsScMCN(U$K4-O+toD%!6V``Sq|Uan7jvl)NnJ&z zJ3a(1!TzVLDsyL>urZ&2{olcU6{~Nf=OH`nGIir+(*kY;W{JzCo*~!^tv3L(^k^jp z-_CAZOzS6@uQ9oqpyNw$u8(7DS>@9tj%{X@9jx+tf__Bp?MR$u3m-=M_VvPPX}#2Y zWRgK988@-oY8!L2Tg%;(*>55CM5;$pm$fPwAA_aT5MKw&ZLA;>=6aKNQYDhwER`a3 zYYF%Yv@77S1({SXcN1M~gcmRA|P&J=G+%;95piWk&sngY2 z>TKe#3y8gzsH@a9>TBwHbu%@jZ&FJqho_SCfcgQN`;dA>J*pm4za>L>PCXA#UsB7k ztgon7)nC*b>L2PoB9!IopXy`viCUpnsZZ4=wOQ>_%qyt<)FKb67y*l+sjKN!ovt%< zrq0sYI!701zb@1zx>T3xfG*cT9o7+Dp(}NjrdOo>htvl`a*q?zCs$0U_3io& z{Vjc`zDs{c-=pu<_v@eOU+7=yNA=_S3H_vgMn9{c(=TbFIHjPZ%wIRDA09G)%?vt! zHK4N->*RtX9_5`o_rk?$*n$hsJ4Z$NF;`8v@Zzstq^4XVKWAPpe?9H;i{@Xd&b<8c zmLX~ZKU>xLtYp}GY1WZ-UFJ`R`BNso#R6LU$xmzI+Y4j`%!X5AqsP(>XQ!!C)S3L9 z&)^HpyY)QlcNMi?sTi0mU24Bx4E(a@4fgB**zZgCM&5rHdww=@R7zA*!d`W%ON~@x z>8GE_ZnM-pwLo2{u2t8u!Y#Q_J^&}e-r5^m_5fOiDa^qBf5d~JkV zcR+8Zjl^ezQ;PBtxs}Q!8Z~Q&I)ML)o39OK9s2+PQNz$u18m@~8Bi^iJ2a5L$$K)j z;nY`||1xymAiIgTG?3%p^0@%i6Nm(}I;6ErJ9Mgz-6?{Zj;agwbg%aOa^H@;k4M7KL6(;wyZ4(?Dl#hkNmZNBC@&f@4GF&mnZ8F$ zB`H;H7EI8S=?SO>THYUyK0m6Kvw8z--j2je#;?&&k!9jT^HnrmLmToYl2C{5CYkU*=y2E?2iw!!@_$0P9q7J5Xj=TG00KN}un881{;_-S7*!9@PUr^>&K zD&;a#cJE?_WXU3^jXxFpYnX`$cU(^fL`&hC0Y6-Su z8l1Qb&KPjz2DsFt-opyDsy#ZF=;GHvl# zJwYF@C+W%h3{H~#NdHj(m!dkL-o=()r(V}*VZpCd(yJH!RYYr7^7AV~IsHf7*+)S= zizq~?r?A=QtNpr-zl$AHI#1`TZEz_aO}biLq>ocO)ee2JzErHZTFEE=pnic&bef(5 zrBffNv#{|O>IGykP1wq2CO(d1USg`6t}a$`!sjw|m-?>yzFLjU`^hFebVBmzK`ka` zWFpBqlh4dRo>KVRb?T@3I{jU}LC1{}qtlp$OulS<aWD`J z2djcD!QsJi!ApZz1(yaN357X@a%MOuoF6XQ{o;P-eixQbLE9gxhgfmF-e(lrD=stM zXT@=xW_dQSJ+L>J8!Y5BOVC`g%Up4B@CI|m6GNx>uBhx4Su}nHKUDm?v0ud_F;h+t zZkKoZ|F_~VD~GQ5XvLpanws;;?JF*qzkgEk$^D<)>;0NiuFH}B8QMpTuZ%w#FD33a zmKm?`&YQ+t#)rno#tLJVvBp?uY)t%}zpXX4%5O$YRLuI%h?%edSL=g*koZKT`H$*v zNVE@Go`p=d>4%W(EVV*^Mc=2tM@G}B&mvw5=@ay9ov%;UGxhh8 ztVbrBkwi-(+tISiOsTwDEz-l#j_;eY`91YB^)0yYH2U`>y7xP@?7X6!m2A-iOtCeWakI+N3P(QD~jb>!3XNVb|AliG53jN>lo^MlIdk5?NmZ~Ni zt05k1Rogj1_8I-*4fv?ts!^>|-8xf^(iv*B&Q?7-OO4mXY8;b3Gj$d6QK62qRytu@D)8=ovTNwbM#0(f_QV6`l_C) zF3}U!<$8*#(>LnH>g)Onb(8+8x>aATZqr}W59^<)Z|H0E&-E|V9b}HT>u;(5(7#pp z=%1+X=pU&2^keF7{bO~nepLNPKc#-IUr@hL|AP zN-ElI>3R-&zgV58yVXzh)9SzU@6?a=?}?MXP`}iFQva=AG_8!pi5Ho+=0dF6N7yr; zPSLmNudA(kjDAg@q)*hR>NM@v-_SR!Eqb&*MgNDMfo?mAXAVkmL#z`2UyJg;7KMn+ z_OSnJQU2GW5WW0+7DXai;$+8f9ry6BTs+LYXmMU%UO`?#ZccVqW=6U%E!FFByHcDE zBh6DEjY?ibtJGl_Az~&uuB4n^hf}FqPC6-fikH-~RvCN<$Dp+@tWr{3{M(~lu5?$# z^P3U%y1KK?9m)@7+gE$Y9U({8dkVW77wflUr|QdN-_no88e*G&RHHv2I~$%p{mo$P zonY+G!Ckv>i#NrtlaN5GR^vML17kTr6h?ti1EEji>;QkwP!WUOa@p-TRyM9npU%4u zEV(l70bi*cW~ebyVw8;ZRA5&Yn%d1OHNG^at~{E<&LJq2(uwgmw9`;VEsOZVE;b{F zilneZ8*V&O9dc_&$iZg$y0uKVR-G4n;5=RW3qAeUviY)u!*}g6?vGt%RGVN7fTL8M z7%lasDOFsQpPQMHR_ZHFhDa#iEWqdxbWCw|rs@>nO>t{z-5)To4VY^HV67dUZFw0+ zB-~`Qx8)TK1oGj$kfSKwUzU|!R*+sCPJ(xQMR9hyKRw-Fp6#y|nztCYs<)tdwyKF{ zXqB0f>TyyB(%C6Mnd5}#kB!hImf6um$^ zlEuwhy2W1UTZ#Lfw%l12>kKl4lcK@Q%rtnOnUjgGrDdd{ZOJ(L*rCDVx?88Dc~TuN zCAu^i%LmG0ds}`R*FY?Hm7i6fgkj4}{u7?H8{dGhA0U}-)c_;WX{XzXPVf#wXIZBW|T6WquPw0>1l@a&q7hDEtuSJuyZCtX!3$LeYT>pXd7$%j5~#=`SG)id#GFZ zss40FGm49HvNJPmlge9{os#x&W}uGy{fK5i zJ6=FWa%!}+kUs=U{o%qeR#93E4UlU?Y~$)U_-s1e3| z^(3|>4Nf&hu>-l;K7YC&%W8;KErjXR+Ayk4jpS-vE81s79OB;wfoa4cF#Ok{J15gI z2a1NMKn4?R4Q4@s|`{JQ|af(w~AZmoE&o zB01uQbOJ)R=_Vt(N&9h?N%U*RAnQT_xFAQ@o367`*XI;;BS1g1N$3|hx)D#X>mb*c4k_guP)gNrGr=0mW)(SY9}!a zj#agj;kmq)YxV=&$x#4KHWJP-@*_jLjkeYRSGRaw-Wd=ZoL>+s zE6&QwOLdl{WS1A`1xm_t^ZhT+^Izg+wz?QUfZQ%>aEAcVkwq@-ko3CW|`a8tOkG7=~)De}5qPScNPX~U^Q6394ktg6;F_k0h z{GH8#A(5O&e$~+O*xz+cd1sA3Hdg1Bw^ilmRSXF{RW-J?%vcs|8y)JHo$rmbbd?6W z>WgEq7B>ttJh3;6>pRKct=@VRe=#GtZpr; z8<&+arJ1p;uvXu?BDcIYzo51}NBAG#XWVVP28r6EsTJWOe`dPN=@h;P%Dfm5 z4QZjKMZ=shhTZ0SuEPvpb4?*F@VlEFrqJeD^4jUo;P)n@wejSy%{c3pU?8u(drWBJ zB~z-KPPn)yJaNphyg*L(l#^;FU47~heQxx+g*~T^%cvR}%;=i4c*N)>r*~vWI;wm% z-F5lVbH2{@ZSnm^19qcYY`rs#tv|}nZIu(x88hwT($cJk){c_lv%7;;V`jCL4DV>l zD$Q)`nGhPeU~-Ml9dh>6ma%P_Wz~gg_2W-%7&2>IjjyDpEIrU1%pNj*0fJ-Ddr|Bi zF#WkV>hgF|h4lKi+_qc^+;bhFq64M-BPYi`KIOC9bcPW)xaxPm(>r4;Y1?8lN`sO@lIva2cG5NQR(~OmTfB zrY?5wvCv&Iql0f9jrM&wxX{9JQD1#+Fi?<}o|fVi@6u9Pk(DW~J|tNUAwc=z(SUO% z8g8-a{!YI;QtdbjCUqyD>_4mc%vHyP%RN0k8Pld6TyZpXpmAR;UKDkvI3=b_?*m>n znTekT;sgr>W4XDyDTlL(iC$Bq)!EU!o>9YxwGXYY4V4!bkOiVH;^)S-G?x^!Zim)x zA0nVf(?xKK%cFG)ZzTux;QFY0Ithp&3|3S!UC3AM!bRsA5us8_KwAMqBdK*wY=*NZg`M)QOzOtLA})bS@pb82d8 z>TBxjY7^F5ykb+I^~Q6jC?{cg?VyHSa5{=P)ud_1X3R$gk8012@)J))09wfzXA*lj z)Dd!%q%^TLXncbk`Oh$8gZqdLd|2lp(F~;u@^Z8JEzMzawFEQD4&wMJB1ywmRXeSq z(h0I{*%DagODv#GFU#-U#=Or?y6(if=2NeosvB#jESmJ^KOeVfN|mu}*x5HuKH=+U zwCM#Ct~jOT;MGG;z0!n1e0d9gL14fyWan9ap>OTnzO`rlar}AXBh{17>Dd|VK7GWG ze>`%|sB$AvH+lZB?gbO8b=J^XJr%J)<>=D{KP&dR55M6u`=HTimfKxcQe5cHb?2md zQk;@c*Yw#evy^5cX;saf5(!nOU`x^s%W>Eiw-2@?ymgvo<-T`V{2i8MJ+NdDLKrFn z9exNevQ&sDjg*A=thlJqpU*p)ZYln0v5UaNXbmP11gS!pAexDya=S(MJ=)<&x1x%+ z>`41zc$6P8`E>61@dF`!`e~C_`jmj4*`Hmp*8{QFgk##2nNHwLQ$11>;_4==|Q}kD3w+DlSfo7>uoFMX{KSn;%BxZp- z#CXrX+cICXfn8)ub9HG_%n&+-`S{JE<<6;uJcz_G!_VA*7{GI+>P+rA7Mq zBzoGqb6+1xllUue%{UY;3emtd)bdMTn#H-6Z%T%2qveNmdlF!lyE(A74=~H-bUN;a zV{WX@8PTxEBXvAat|zISpIp_G?6(a|ljcap>>}~7n;|o=o1mapxhVc2d?_iuuuprv ztRx{|x*f^dWxsyX=%ohuog^T~N;&YrM}08%@idLP&&+7C4|yb~MLYV-Vk(fekb=_{ zb-4wY!zwoAha@Q!FW65C0Wn$fUJND)Tf}rk{oz4ZrPACV5>r<*Gi0hT#2m8A?0Fn& zW2n(4fpUmKP-095Whv#xBw((P!eauK>)HSR1KNc8(Pn}!NrGpr6cDku@e_@oVQ-7o zh^Q|=H^WEDjxUg?t2zaEHAM+&krb0(1~Fk$9#%Dkh0^#jGj_4Hx!G8Ko!ypgHXy31 zJ0&jcHb&{2!^MUtQdHAg6ll-O&#ueQtuD_sZa#P|#lp*sZyhWyZ>!AD%qz%D%`U6< zV<;_{<}mHDjM=7%!Yy74{nX?v0k<@--s6_~?w}@>yQ+yNdMgU~Rw>hM)gB{>#uSd> z?^1g#3xumy^f?Ht1SxgR=F(ng@qddCO~{z|gL<_n8Ww+0T@?sg&Xn+L=Ugr+UraQ))Wzq?!fP!>T8Rvm~AH4p2`$XvHa6Q*_o5%1=om z+c0P$iUge+$!>DKk!oR7nl&TU$PvRkDc!a-RYuAKWu+oOQa2HM*yHt(!PnIqt`s9g zAJ9nE)TNk5s`YB8)H@Fi#a%AQL1Ba7&h*l`-3|)HiIR#tTmsf%>p<8C{7@#Nk*OZ1%Mn%w$oU+gXeSWfiCo=@wTdUi)r*`@n}le&CY`OY=; z6ra9(_@$?`+vS(0sSDbRQ+%#8e_Bb$853%H%P=i7&g&}i5raYi(QOP4jY+uK5zXQq zuSzs}&0Y@&;8151ZOJ;s^h+e3qD=>2h2VArH+!D`3tijuW3(EAvA4@(56SuxJH12f zgtSEI3KBcDiDJqB*|YSuu?KZc?0pHE0FU#lw9dMEV#AE_!}5!A+j=I~j=5-BeZ%yNMvq)DrNy&B zXK7F8DT`7@Exc(wAdK+Wb%p)q9n}S0bFLiK{ngVuo2JZf52a+ex)+_ww4}+014a|n ztrA$$%$PTc4kFZtBSY4ymycXHxwdBFyb-f5C@n2tIJ)E1QK70av)el6H-F=yz$vp^ zrp<3_pFgE>Oj}mxkh<}wH4Qm!Y)w<^C8aTDauGI@|HP>^%&I;SEv>5^*4Z|sv7vT& z-SGa>K$L1p!|Qfr0VSuBxetF>)Mnmqf>W*#+EgG|yTE^<@!{P||MD>m4 zQtG{i%Z=7hAyc}M>Y&@@F~e4&9(_-qZbF?BvN@fQ&E;Z+YA@+BMR-q%EzScM;xp2Q z`Z6m;C;Tgmc)c*ef(h;dl6RJHA*FScZj+MaG4WwuR(Vl@E;uR|Zpess=jUqQQJ7%b zqQ>~SY7VEAAOiWf8@uRFz|<()S!?mpe)gk5Jrpght*vdSMauiz4wGx*Nk%5Cy~1F4 z@G>IZ$6z&(^XQkm{SbR$O8K$)7pdAEgO7=AKAM|xj5YHe%kN)r)==6GUqdM(aF#e_LlV#P)3`nos|kno`!chjPmeuhEQ>v%kLPBos}(2eCQ`iU zyDvY~ZWIS&*9U|8MrpKYS8SgV_~HwbheNsV31G{m4?Z&*&Lh6h^XC!X^G;F*YY(Jp ziA`%fE>7rBc~4_sRh!N$qiPbZ`MieP%@BiCLz9SwCL9GQ3jw@0qz$!ax045by|q

A3WSdFpl=Awh|nF!Su-F)-Su_ylLe=Hf3nCW`6rk6t><&b)Wm3`D$Hc+Ouq`%&Y zNRcvO1!~{RbAARmErX`v`o7cX9Jstq;_s;`=A0N zBAgw#RixiW12=&JoSEY1^Jb0Cts0|bL2h|k0KQFn9z`iK>&I^VWXb_Nss2d~&aORY z%cS4DaFGlpfQ3}uWKBtWUozLsS0keZ5}fAdWcctH`6-;Zmer-25J=Gu!_n#12J#_< zvxf=?Y%w5Im>16O9|)K`5AgN|wvwY5CJd>nMes^Ya0yQD2+*II&T zZevxOq^@1T`hT=*Oliy<6x%hXG!M1d9WuiYa){AKn+C| z=Y`Lf0WzVcSv4|ck-cuVdDMFNnKT|b1T~YEx0?jX%g+mkg4V)z&8LQSzn9E=IMv5{ z)bz*%qLwo+JVyq`1loJd+6^b15lzSStm9VyGOQuU@IwZ;WZn5z4W^J8Dbe#xMX%H2 zHhY~JUYElhVDl++z|x+Yf|}Oc)QM$*NHud7*4$K4QUjdY>Ay&4GmmWkh-F&{`{;=iG@W=suNLcp_|an;0B3+r64aX zmMG5QD6sk*wgGnxFm>8z=}x?#9ZCeCjsZpwcr3qssp*%Q0OK8c8y;FOR<*4#6^_FL z9g; zI4H@<+p={VlUWXT{;Z&$SF=YusKN5(4~uiZqaKVF|oksVVdWPXr9;W z&GY7EXJw?P*%2|8&5DR?a&t0$WDeLE873qg76M8T>?Go)tKl+IQqof*DJ9X`ejjDT zs(rA}_6ta>O{guDbx0z?7m^XT!ovFw#b5mQFmOm=b{WgatJ&KUo=YjwG{Www1>>!`A=&1h*9ht&T@}VJQYFc%+VWy5rg(ZU?kk@HeSggsBpoSvw zQ@761n`kmAFLhH|O_O9MV@$0O}? zk?ivm!IpXXgS1Y2aqgS72WKRa`5nMZ8m$+ckrAP3)GzOovLNrGWFWD`+9C||sn2*;~3Q$0JV7oL7P44uFUu!Z_0tY}^T z*sKtCqrenbgzqv&jSTReZz5@(EH$D03l=c{NSV&)hL$|n)s)qA8WU+4CZG$MUfe-2 zVM)*-f@{I&uI@y57}P<4&K;FKE&SW87dbjzG~7Q~eT)lnFkPZ(vC{3LAJhV6xXg};LfP0K$qT%?E!)@@d&eJpCmiGe z_pqRGQ_Q3H9=r|$Z85SB4hLbeL*GY#e4;;0)uh*lvKKa(&SSvSv-0Ef(on-$dLsZya@ zz@94Ye?SA0_7W{=W^~|WD8#Z)jL2Rl&ZaF%S8Y+BoXWAdBb}IXEQz7KFeBlrEcPT# zOIU`)?!rX$jiThgv1lRoB(~XXxg_Y(x1Wpte@E0O2Z5x~Zq18@ec~09r^WD&{kAkS zo5Z|A@2*3w?&|&azE)#3cA($Zwha;fdhqZUMzf^dYvC(ZmtG4}nc<}ftV4-{i%>~C zjMS$k#I$T^Nwg~IbKKwOUiyEqpA9kPQ0#6*Um$kmGYewNlsHQJ0o+F`Ia@wlGU^0( ztQbnHNf723;tpvaqDV+)t>p=m%!wrWk_MUvKccS+#x~f5B5{9VkUhP`VY8yeX{nVJ z!9Yn-eqL5aYHeDrxEaw3nR@TEwL*E_UaELbhPP?qVC)DkBzE(p@{UJxkbZh2{mVWb za17e1u{G)sM+)hzhMp;1j=@4ZtN!~cHSk=*E9QZiAqy85rg=H>oGVh!!_gAsF%;0O z*&wM=P^=egms~HGsUU5Sv6>UN%wp^7j=So#mbO_}O`Lr7sqz~8jugqqQY>$rabZ+m zQ@R)2G;Sg_aw*qOx@rChrl77ky`yW+6(gdR(r>+o=9c%w4oiddm_%}sq=?+P$6%bI1D~}PHwgrCGD-05A|yT9R@pq zo9D>5&0|D#v&;z|QQe%doG)_AfMaiGv?Mz1NVma*oUp7xtwjQ2#^J3ctX5IF{j1c6 z@p)8sQ$@*W&$nBH#l3wM3NTD>bEQbNKxVgPb{_sYuZcBe51%@x?Krv|!n%$#rVPub z*L0e`EOuw?@nq(~%wTYN^9ds(bUI8fMn=tS`lmI@uCNylUE1 zKb_E?XjY1|rYcaHneOzb_$|LzZCX~*TXV3)q?U=cEsKmp31a3zA+eBXNdl|G%HS2) z-Q$lchh~Jg@EC-#4+qhiE+%A(Yio!mJ6c;B>T9}cyZSUpGPwpO6r3rYunaRKrvapt zZ?mUYrHCj*r39s;iu8c`#4)ItuIpdHIJ(N|r}}p@`fzqJmC&TdM6*0@ncvOHau<7w zt#fL1iTv%@SZCEcBx5}y_j0Y2?&PC0&>qeC<1z5iY0IHCvr|HUW_mQh*ghF~LtQwS zo9!v_mLykI#HM4amDfRGEHSYord;N9%+`Vw;xOtmac(+d9E;Rfjw+oklwYPF9XV^H z=c!}Bt&dkCpQer>bTxfaDN#~&eI4N&jKVW9S#yX$g4wYOWG;1?V-UhmDBK)_;O#cg z0w(w)=cC<9_%n{Y#?!|eH`8b0)FpTr;E`$Kp#qYoBpsm^U?^SSO|A;G*R8AOYS^6J*b}@xbGOm z6k4>!PctO;DCemnL!-WyrmBkKqU=l(AYc#5ushR4W~&odhLTw`256zQMFeX5bYx=0 z-@B~~+5WY5by+oufO%-8&FR{)zm@%~U!0H<6gXP7UK22aR3TXN_5d-P$ zGPr~IiWJ}usMNIf`>+JqX2K2)>{hVZ2C(iTPD#vAXm@~9qD*OrtE%0RPMNThGjRp} zPR%?FM*+pzrwpyC=Ba$rEikTX9yu1mOlX@`8LDYA|2?to)T&S{WyDZ@T6lV+czt8$ z$f2>Hhi6#7ESuDR?{o>+0>y2U+U`9;NX0*6KREu@W+S(-ROT&?yQTTyCVvTmfaH73 z03mP7pw__Ni4_Ec0F0I1iPV^k+*n(U{;Q;9+#@}mMC@SExKrIN<)hAy{&Y6$VM6Dj z?L!U2l|(vu23JN7avKjCI4bR}F8Y_Gy=0010{vre5Y`x9jtNF? zlKr>`X{lBd)%<8c;+L^wx<__(wzW1j)J&|M*yk-|I(gKfX-rxojX8`DNwuU{j%gk> zs2McVIR?+7zjA~$=onniBZJqytvqu&@|S@ooArhgEEKNP7QPXPbrjM$O zZPu;9_OX$Qv29`vso&`B)Jp^wa-gD20%fz7Y%fozwcYIfnaj`GTG`!LR9HW<;@x-3 zhlFzqD%(omFal-GBg=!MnoHl<Yp+qaz;zbY2(N}tsGSNBef_VkwJepV4cDUl;-8| zoB6mHb5<`}>FYhwE6+?p9((=5fJdkF3Zy$X;)wLgWF$0CSBOj&HAky|Tl45%?U7@= zB~7CuFrfd!!mn@rKAe#aoG%MvybU)dIf7OwG;<;VKGrzLE{Cib* zz4mTkNH{mYvbF5*mV^d|HI_Nve!~{hAyo*eHD`aa<39eCPtW&wIpGlw78W@3o#r62 zn1#5{P#GyHau>SIS!y|-B=EQ90(x?x@2Du4WurvpZ%`~g zw<>{)j)2B}=5fsfR~!iw_&~owWYI$|SgpPvE%bV2s?A&MmD5WFhsfvaIDGyY+4 za#*Fu`;J5mP{8n0(-=YQH-w%+YI7qeNb{^SoRJ|#d>am>d*o2r7@9f1Ere7t%v@38 zF`jF|uwB5B2;0o|Dznl}Ms*^-C31^bo!N8QSBlzab`3vsOhv_*GrCT`tt+qfh7%TC zUfOlah~cwGl~;_O(>4B_dgF}x$SIR5hJ^h-Unxq_IIhXx-dWT(bn@|4?Uf}yUvbUw zhUUpbifbAKhX%fdWEJ{C<2mZA&!IP9Mu~k;F%)Q@Avgr6M}t#`&Y784Kenl5YDd|n zXH8htl3RQ3xM^qknOrw_n+b=!c)(*FTmvr>S=%F-J9*wv6@NA#Dbd5Hb-{|v7E&JjD6jq|av(>|+3 z`ge?a^SV9URdVdOo?)IV-gfM$GD8Jpr(ze~sw$dF7AwsFWp=qG9_lUFBB`|Rr1z+0 zrZ3bUGN#6MM`F7UkpZZwu!4b$B}{6^CccxXUT8UBMlH+#73EA z7ZHF;*_D=;nW|F=m45~dea)1G!wVyU@t4j#Y0}-Y_Sc zP46ZJx5MMP7&|-V5M0el{H=o`+y@u5<{W=<3FqLXz8NSht}m(Yqr6n#s}8BYTda_R zJCTRY3IX%*BpZ05_AsoO(!aPqD5o4F``6U_@NlUhbBk2eONu$|m+lUFf>uSnVn9WG zP!ij<^utp*+cJJ99ZG1sV!monT03kRu;4YQaBIcxB zs!~_N-Q$1brSeyjn`0OO8N?8KB*asR*)nIzpnoM)beg@=K8dtS$@T$NqVRs^xoph& zQ>hhNvk~GN*K3Lwyw@ zP&lM$NZ*s_#ERkI`95Zu1rj&LcoyUq-zKUhz2H98G7WCx$!`Ommp6zJ?iu*Vx|~Dx z?(~5Vu{-b|$E1T@oQ6lFN!~c~Szjyj62)C5U43#S)y2-ER~Ieul7eEN|1{5f_wmZC z7g-D%d z%K#TO?+)tmrIoQaLa{ffdoMKp)2@AMbWs`2_;|jJChDYXmtJ3Dv@yIj;`4Qp1Lgaf zk;>5953b@9=Kf4SNv-I{Xokc_*5DdnJ(JLoa-Mw3DHFz-#ng!31}v(U_7tR(vr%cH zNXZ{F4Txz>yI&)A*D4>)sib?jCsFrV)rlkZSbj_u%M&aFxGT(2FnnnTtu(T?qFDnI+A za!u7+A6BjXyV)D?TeDUGdx%&9sPRtS$7UYGu4zWQ-AOODA%3@o$5 zW@pl}M70D+d?GKCL1Ko0B)6eSX|-{zo`(!XQSC^vDPGA9Jn1?42C6@#y=Z_KGwT>I z6THW~u*C)3g8L9o@ZEpijUOGB8xn)PI|xHeACbUcYFWRGX30rz^TEJO$QjnjVX?#w zRsh3;qWv6a@g5Ti?1MbI|2>DL!k1d!B7_+!WgbQRLc_2KH6^H8O88jBdePIsC zxzpXfGE#e(o5*tHCPqgk$+B<2*?qYUEE3s~*`e~He@|4l;_w7ABeSm$MxQ=?$xi4? zvRyK}3qp_D{5*Pgy;cW(k&fMAEL5+)aD(c9gW`t%whB5N`@(}*Er-N@hqqjvawKIC z>!tUb^9=G`oXR){8g&`&8%F#ACIbtoW3(e~;;DvHN%&(zw{Oe4Es{2tqD05eBzudP~ZnkWFp3E-JJ7JaA8-6yH?< zkdDE<7u5;A#SH+fW2?g^WEbi0#g2<@eJ%3%S8q%if+DM#cWpH*Rz_|x>O z0$C*%FbO(cf$4*INgyt!H=4X>CUffSnU`_aVa12fmQT$p^2r}p;}q_E%jhZ6|=or_Jl$RA3$`eDpHL3IrEXkC~tYHZX@Ro;m52BDl-PlEf zg3BRhcJnY1&cpFfZ!%TPx~W87ri2XIgHD21pLc|Cu|FcW4iX}owLRlRbWBc;^qZxx zAY0*oqC)}&vFIXDX3fkl9@-~VIyD8le9iP`nUQ|*3!~-WF2i&1Zvo@BVBp}Apxj!? z59!BQv-KWqK;KQ3`d18dz7acF|032@s@DWcW2JI-hMJ>sq8Zbqt1$!T-J8r>kC%s1 zVyYYt0F>!WeibOqLs~p^RsL;;D2bxGw--`9291l|mJF|1=(#Ncbl?6m|2{rCVE%oG zkG&}8IgF(0;*mf|DvCRLq1a_r8UNG|4EteY_aq<@)DpDtGLkYmnv_(5$nR-`+ejGv^q;16T_P9Ech^!Gk{INv<%BXtgOV7Jwl$O6r&+7Gx?xx~k z*YuY9*^ybtSDoCDweY0V&&zS7WEVv)AJubian{sXCoU|g9GY5GKRg`jtSQLI7&h&U zPp74zsF7 z{iM#t2lrpzIYBR!=Tp~>JGs93HP2r^s#1tmcSdW=IEqVup7ePG-bvP94^1I6MOc$C)fR9uJ4t29cgrTY9{f^vF}D z{uSww(`?5qLE|wYUqXtE3*>xwf4WRkH$|(4bqZxBj33>@^Qa~bn{+q|WkR8o1`vm* z@M@1rb#QtEk?d8lG|h>-K?%jfx=c0WD{@55QvX##4Ve2rW};2)U!VRm^jq4$Vm*+S zqts$c#=3?bj)Ed%Ge*fHzf%5x7c+-dAwOoK1*{nD%Mj~oJA!lCdia5@hu!LyXx)er zouf&KazI-9}>F6Qv!~eZU%AW zmm%6>E6Q}J%J^=__1M`FeADM?>Y8ZPv}vP8YBlY&X{VhubK>}sQ%6m0Z>y`37_i8n zn~moip+|_0PUU&snUq%2`AXJtd|}V%&gLc_nPl2AFPe#_X6Q5?^U8M?$=79B=1dA* z`QdbrVd0O3aXK#X1vf@txRHbxK3#f|JIakr%vROxGD>Dr5D|%8^qW$~s#r(gJC9!^T9$Tole~ z?-^fQIkBrc#h0$f9EaA2Vk$rKb`P@?{srMY%k# zE?cJ>leEh>eneX4O_N!a4Ra$lbmq`D=LrG z6&nhHtn5lcVlfCLF9h{gc+9hyO}{N&hkwIwORwvg2^7^OUxq&4m!6nI4JA&#)_8+% zc$Ye!zF0vcBVCgwG;}p~@m_s(RgoVL3{ARvTEZE8xlwan1nrY7(_mo3a2_(lo6a+^ zdxx2AyBMnOi+Ov$Rly#Zl%d=nd{s?X`t@6)h#@?JZ3O8*9&Q>$6;>#)X1p zQyoQo#iFZ@$I|dPzGm*_Gzwn>=uBzHA5&ML>((!~l75`zQ^ews%p7~S9&Kx8P5sja zaTQ6am3d@kKwhPPRu-tJ%Zpq-=I{v?&zV`3lwHYJbrlT>_=?D-5(a62ikatEel#%8 z(&~GBpJSXeNlwN0IWl$z1rGf_N9tJrU07p`!Q{2c*PQX`q^-p6mb(+w>S{*5y$*`?rx@8r8|0=bmAvH*!`j{y$>EP0Thw8i2r!PB% z@LDzNX8j)ZxupIrWhe7#7kP5l!R+7i!tfPzG$;9JBj!@0Z(dgR=g?zMaR0rr^Yo>$ zyZD6WjLlwsKNamDlb#vD@{%I?9)L8uVKR@>M7>XnZ}Lboc}@bcky)}NOk%4lDr}T3 ziI#XC8;A4FB9i@RT=S@h-yR(^OAV2UsRiMp{Hlt|yquD3PqEiuSyEVA70${k%<>fP zb(92)atm@Z^RkJxiUNiFJEtHQMgrqFBdB&5FH?7oFmIS5Ho%`4>J#KCgUKVD?I&O5 zc2;*%sBrU?6De+=Sv%G}&Qb0d=N?;^&m)|hhZhw3Cr1 zIv2j@R#)umt{l2@&ao?Yt`5`FVM5Q0Ca7mL(#$9$BqSkFL?8)7vcd4%*w5kFk7x62 zWLt#aHeeeY47LG*EHFXFJPBlspQUH>enb#V_51d@w_;cK^hjRIYyBhDR84o?d(YWt zpM7@t_TEBu>sEzUJdGTd+l7B^1eoxeTd%+N+%-oIudmL})hfA6JnHw7{1vWbSE9n; z`r}2!gU;e+ilHDIhK8xv9XueSxJOXX4Z{PjuMi6YN3JH3q2yI(>5~E;d&Mw)(x9|5 z_&Fiy^%y@nDS5q3(l$X==$blrrJ4z=hUI z#p`t$d6Agc%H8R>jZm-}_J@=qjq27j?b_WqThZf)y?^bY^L2&J;?D=1UbK`PiKdIL zrNe>pd@#G;r1y@;Vyl7C@ZoG}CZIzbxQuJKym{~P;(cf9mDBg_KfF2|Kbl&5HRw@Qx#+`ARkIHn<~JgUg~{oj~h0y-Af=D7eNP z4u>}~u@ZexwwRe;_pLp2O}%{88xO3#@#40688xIFnBb|vLyEWk z?Dcey>8)plkBZL;0pX4Y)p!p8rslQVs0A!X;5Z@KQr1?vL!f!k2AIrYnHQ}g8cAD9 zA&D;D_hmj(e1q5BXn3BlJa1SX~wRDyFu+L(~#Tj4ONa&?N?9$-qX#;C3}GzNoN z2M35*iHe}je;gVynbf0Eb@M6zh>4|4Xsn|*7>AhOs^g96a+uR^_s)sH4Un~z1-bq> zpOZ^ZIF%q0ePH4%_?$ovQiw69c1{M0htiz-z6^?sbk6WOwXSN-32BWKgMiSpK~*+c zRcY88CN#z+P+qPvWD(W+Ve_a#)2OM88r01aKjYU~o6imbdx4plnqM`I_*qUJ9aWo5 zBSS3ADY&`yb>R;&CpD`1Am&O~dk)m1P8-tsgEE(x2p~K-ML=&d8F>R{pr8060sIW7 z5(Z9T`xv$b#p&cLA{7EyXc8WT|6_!x#0@|LdW-NdHzKE0u;|`EAi&(s3+&g~^Yk}<&xEru zkr?}3;1Hq>74@~FN(Zz_iI$|<;3K~o6dRrn!CU;I-!WF3v3w|0D1<_Jb}F3Dhl7Oz zzb9fs*xyFPH<4=vDFux|?z`!6Z|l1W!PJgk$dw~I?b=x9nC*0i$i|kgsxIB+4mnR( zvxldG;idD}z64X%&#ffqYWiF`GIyd_Jh>1vd7?I*I~TO1*DhdA z7^7lA{5Rn$!kVpD5qpiw#doMZSDEKe$-%SUy8fMUw3LKa=05Cf;v-2%sNwD=SJ-9= zyNqjVOf!~`*UEOUM-}vJ*2fQ3y`ia%oTD}#R|SVN6AfSe%u+NwzgZh!aht;CP&rte zb}R3@FXb|N9V4Ps)ao>Pd%((m#W&*82kNP@g{*64GC!g(=UU;gQFqL#^XL7>-1@ok z^7-|w)9zYKdWtA4G<~A%Yu@7ZskIbHB>s}ti2RC40l8bT2<1%o_U;V$+r2xfK%xkR z6s*7)R!nja!V`m<#;q`Nr+4STRbzf~@qOabYe)XNW@h*G>x^H8PP53(O2#SIw%xZg z9NN8aXWtaM!_aaOhMryyoi%?-icP<357Us^YBnc#p9$^3+}0*=07iH_KHM61B- z>;F`WQT_JLvulYg@#mx_nQt9Dqn70A-n&uk-L-}}7KWSm+-jFCSZ0MI3G)c+MZ~)gd>;AebDhlhb-pP_6vi{Nhm2RQc^BKseFv2 zc-%x$AZp)iR^cV)uD*5AWIUxV>{w4sse z$D$7W`s1UJ5?=gXU}+42)DKcQq_h-zivVQl!B1IjhhOvk+-f7SVD!7KqsEmr^cVmj zdg~{O5#&!(J(45v%Ay{L4Lw0umS?9+#l(^15x>_Ox5cHZgcMbtJb0j9L!61V>gti1 z2aFf$RB+!3cb(92LZ$NfU^&Qzs!Pz?$p&?+m1(y@LXPWN*YB~iu-Q8(4q9OLTZi6! zO|5p#n-3j&%eh+Z+*=OrzyEZ(w0ZyP>iwrnrPKExPHfC2T$LkrZ!H(m1%@Muq!F%b zd$>C9w`G$^no|1mGwRy8M-Cl)gzogn!9$Ont2v9O?pt4dV6#-(yl-{o{>{>>{Zq%Q ziDQeYk+C@Zo4L$7EcEfBt<~6 zC0e9n@#>kyXapq|VZo)1A+thdavHPc$uaN3L|iePsm=Kchibmi^oB0Ceod)*el24S z=f>E|#WMf|xs451+Gh$llQrK*d=-Fk7LR8Mm4oTZ^EF_;PV8-9a=dZ7Qo`im`JHNV zG(<&bNaS3pu@{V)@`SfNxao2lUXkH+y*-?qcX1*v-sDR8Onn23v8%g>LSqBJ=eFL! zPC%C)CQTZn1Fn}t`X~*6aPW-?b_d!}2r-BlFek!G++x7?rFL0Ldgq$7Lu%d1&4mv? z@<{OEhaX~Z3b5}rooL%Z^JeIY{sy**XIZc}sh!xs?i{o~3OKZ>Z)6NR9_7y@H6CGB zC}?nq(eqIj8_(A<6vxK%DQk#7pLf?nadKPOM(XAtJ%T?N35{hgaBGnLYV*3_t%2rW z(s&e{@7|AfPzYgUv7c|aq7mf~sxj50b&m^eY^{hFqpH0^B!pT628#$O?6(XJsmC}( z4VEjNglc3AVCRdXEN8)iEqEGfg;e5xU|<;GrQNwu+#t2^k@jj|iWQ}3Zr`%+ksq%F z9pb{YaBCw#)s)KPiRt8Y01bVqB8Jo_5&JOC;uM=)&Sk@fA+^rSG+Ge}IGshp!hj+= zT}K^OtC9Le5s(qy4HRq;hyRN9BtfpaWtoFk4>Fw_3T?RFrS|5%_lDNi_PRg6?O9v% zT>R9oTNIc~aY6W7@hjL19wFJ#d0d^Y<_>IMFr=hC(pj}UBS?GX2l$r&` z2v<={`~0bt-SXbmR$pRv?&_e3Krl7$dv=HRONR@l|-Y8eIag-4r5;PbCavtDUhQvtF zUZrrfl;{W7H(BDyWbBkbCAC8?83GtR{)I{p4il*+RarBkR@zWas#KZRfj$-NXR$N0 zlUE^ieg3M6v4i(lthqba>L;dr58O1iaD7VYsvfCbxT|^4QCKV8ct*Smk>ciGqkza< zKD(H6o<4&~j}=NoY-SksL(-cUl-FI$66t0&T8g>!&A(Y=zZcGj9K)nuWsf{~*m8g%q#7Rp0#l4un{CyI#B ze+kGAgUFdk-6~Sj&Z|f95i~hXTdi@QB{UWv|NVAnQ!#n*>;7^SSqbu)5*CeIUtDk4 z!(k}w*>E-)2inMtof~54>Wj)FJ}-Hxf>;u82g!AkrJda>DUGrRlq-r|ClZ=^*}A|( zGHO-LQgAE8V@sQr%9*7EYvvTOsRL;a3i9JDPyL zSlVsn1NOeuU+aTy?u{Jm?LCmq4j-tno?JUjr8MePIfZ;&H@es5BfRH8)&w8Llw zEWmo<_1*liBP$R!kYeOehvU8VdAFe5t3~Oe`vrO$8(+5PMo!!AYKwh*LcO)1L*ZA%Cc zSX7PZ7lfZmHBc6izjJ_Xw393VWiCV1|8-!G!k*nF`8@jP44F?-5VElE9OE*-SU`yp zK4oI~&SAF0RAn=8yZJnDhx3xqdlz-@Bv|0y)|UMZ&!^-*1JQvvUmS?x!|*bX9#~sw z)T_CS%PHY1(qRL2$AkY82Q}5$rE-Y!K@HHKbWnq{sZ1rrS5(GPkmJ4WX_V1zK82bG z>pO0M{yqnyBffa5SUou#a%U&J?n1;Cn>iSdADoWaflv!hrk$bK^lBu!IvHubH{TE} zH~juaCFn0Lgu;z+-zT$cB~P%nl8DR}f?Az7QS_!7X@>*#AH2o5Pp69%rvpj+WGvf= zC+5-)XQsjK50xWkOQaIQyTuX(f~21|!wt<^BU6ReggC_iZ)QpJOrmDpmFy8A2syWk zs+gn8OVg9%g+$D0mv|uQmw5no_Ye}azylp_=;i=k0H}vHa>Zog02QLC{R|N20E|u` zn_W4Us{2E=xZUIqnF9r9yf8Laj5!OzRL$*(WbKYj*p7FbBOA8=FRMRpw!{Ngi!Wib z#eL?R#u8qG*`Kgmf-bXiIOTUloFgO7h{K;69#a_?*dwd^7-j zOm4he-2A*tvZIV_P>B|^+i8(#(V~k2L_|`b+Z$sP?ZHT``_Cf<`wP&*2wFH$sLG-o zPRg_hJN#*2e!@1;V8juy;(Zuiu+PafFd4gOu?z!Z5r#Kq76|H81ykfhoFop}PjC@g8OF zFA~fcBw7}>6yq#_*Ni!G5E4kBzNk>;>3rapXp$j#9u! zJ{FS!79#vB|ab|F=BHYtU6h|~1mz-A!&Oi$%IY^0-qIj*bMDyz`@lCJy zm={^PAW|N-ZUnL~CCm!QTb`OI=3`On8BW>hxl|JV7If=^8_k8*a>NjDkHQy=P$u_) zw+{l4l1o3e>{97cV;wm~9F5)JVJX4Gf-3rizv~kJ|8sMEHmpzVJ6$fHUW~^VH^-y< zCNd-FI$lZKGxA!`LZT3;InOrV7@9ns0k9wx0m#zRi*$Lid@F(uuwIRh0PTnXOZ*1v3=c!?RijuAcA8cT zxZHLTB_}l!=(^h#xq}MahA)Qu0dbchxB!$4dR<1NRX5~Tn*1)S&+WC?9D0RIWe)9C zq`hG`Jls{_ss}~Mcesc6T023%E525PXIhPeN=wu{IZY6HXW&v!kL*j6rmv1_b(UQJ}5=m-rRAQt8(c2rO)>!6W!aJf8im zsbCkS=QG5J1hxs>kwaMI%{LvqNR0&@pHXmD>KYP9JqNhff_Nw-CHbPW_k9~z-)u41heuBy z+we813$#dM5f?C)IP|yQZTP54SUwA{gtNElxa>8T5LvSkrV*kZa+@-yQv`<*JWv5y zgqo8WCb6T;u0Wi%lLx4f4j1(RC`|X=0Fh3lQW6q=ms`n~tBAG?;XrAYydbMY0jax& z1ac%w0Nc(}2l-doKSxRd!$&?6`Y2rOrbsOwFOOPhvq13ZM3dI@gnqjDt-t4vRSkaCLA*kCJleUDjIdZY<(3xPh-c z$~aQKB$ggzoaws*hBC}V!d>rjuh#XPjuy^3{e+_kBB+bASN_jJzHG|Eq@RPYTJ&q= z+}V&#VH-wJvlKME6#6>I`_(onyJ?5Q4GPDwnUl6zkthr5e*RDoF~N_h;kpG{)`We` zi7fFt6YBfw`x>)_ToM_Oyv189m;*eMP-8XZSx9{mmZMCsoo1rGLS>wSh7k~4trQi* zw2Og3X5g?mI1+5B*UKyl!7)6HRg9~KM)56dUJc5C5$=7hbGMj9j?`Xq2Ul5YGZ`Dck^ZhHWb+v?9?e>NA9Z9WL{n7&J@K6jqz4a>gk~jq&`E&y~5Ktr$L?{(#W37;5 zIa;x~3^2wnwVidwaX`Z|hP#;k>7bCKA>i9&2?Dr@k%Z)&90YXN_CC0RY^4>PTPL~XRP zW6i&r37%%8NGh1 z%k|CdPE_bC>RId}=Fl?5@GEiSH2=g8tco*L^B305R&yf>sG!9b&Nu>7Cbt605c}$1 zMy%BWb1<8|`Mu`zugvemoaR8*?ahbGsqnBj1i+Zx866vO*+&=lPpVwMVm4p=3_H!P zGBw}d{O`1{qU;D;<95;!+E=6@_&W#o{M_n@}h|<^Tj+5A%z&$BX7b&h5=% zRYUr&Rdr~ixnj~c1q|^84(r(YHc)KH9P4&FP(3i&b=^AAQLt<~0xDWPy$}tf5p;OEoG}OD3ny~9 z{neylEO5(ga;+95q@p9dSPd)m>FR8Nr&LUDXn_nHubf-YT0=S4>n?t;a(?5)fR?kgr*l7EWotbDE!nQst14*FqFDCYIPgKz1 z4j`%CRW~YOkDKGm5=vqEWo;2T(ct1eFK?@K(O&`We-Sw=u0mcpG&PZ5EG$ODIN=CW znp5UDrc{zW`#5~5QchVw{9xc^6MtdQeJ-E!{g9|VlAX7hyY}S~9Z5|Wy)TpE-8@h7 zX;Jv|MxepvQ)98QxG=w6Hu37!W9!=1Xz@&2?b^*`T!zo)d4 zHW{Ip+MS8IKQfW91wG^YQt^eN#~esGkDU0qhg{<66N$xwD_{*5yxwBiGL~z^n?r0X zyI%D=QJ6X6WS8>+3n4DvH$j? zm!i);6MYGz$FvH<0rm~{aeSZaVHzA?(8DY>o7!QE&oTa1`2Lr_{QZyp`%_Q-I~#p0 z_)EVO{Gda6!}UwJ{)NugYLAw4ihxCT=(({A-dW;vw zY5Upyp{?i9SWzPb-z~SkE6q)M4lC2(3x$mN+FbDX1`B=B zm79wo&iHimF$y%^`x+W2+$j9nK4{ifl9?TUI*oxWgN$7o19%6pW(_*1gSBAH(Rg4Q z5Z=5!9%8KS@sLpTyLNWyv+>q6tEJn!yt_th%h2$_2IH9nzV>(#!*tsmlEPhboxaB!iaSF6=JH7r7@@{UL1iXEpX zSNODGhB`@wSqin(k%wCIRKTYx2#<>rK5`h`=hA2>|6MbzLEcU`B9eBA7l07(8ZL>` z-o#`HK|sdLh_anV#}SWsss)h7YeJ#~RlG-fqKN%32yg1F7jI0*sYyuoF?Fj51l7|Z zLdu-oW&l*z+X$VZBI(2ePZRiUNSKH1UzYFbhFAM^BjWK$7*CJi0|&R=W`zG+>+YTp zVV?5{B0+8i1tt1+bB$7uVkr_6Vqq}|iuM_hG{={dHhzl@E!}PbZe>|y=B)Jr>?I68 zvFp#C*oL)Nl)%N{HyPjmG}glbue{X?pN!RkoDW+I=})I$l)El4Uh*2!e+fG4AgjoB z*VgEF`e(3*3sNotllA^8UKR19VV(m$}bFh}<&khVht>Y%_wO*4a;&To!TE@tMCa2?<; zUL%gCwcz!I;~|uPV07k|u)yD2Q3yr3_f2Eq?GkA#I|4HxZaKO(C(q|PAo zJFE;#dzvz{isVp%-Hya;WJ^-BNt^{-hwIffi1RsLkoTPUf~*TVq-@*5`5U3kEi!sIfS1?JLmq>0{1ebuG4QRyK z<{~<8qZCWAA{Hk*!Vn9Qxv7hbh}PS=NERynj3f(~0o*hx6#?dXFX+|&G;)u|d2JE7 z-v^TEF(Qu+M;)XnaW<_s>B<4>{)PrR=xVK6^qZmVW+`(QUd{E#jnLFH7V6tbU8RvU1MMJ7 zbi?z}dYLDjDV2s0WRV1iLf4p{uR~>^!el#spX^OXE3>!OHT37Hzw-ZV5C4s$jai%J zmwRVH`U>d-{|7o_UvCtNR_KjFv|`jChfcH>ohW5&H#%vWe=X683CFj7D*O;@VGyzn z4b=-lgaWJJ1v|r;0xASCJuCx{6wzr+t>AEba2&-jt5OxNSmk&y;vM#nXbf3nERThF z&>K=JJxWcU40Fum6#l-4?>Xp_psvKTr-I1My@&u5>H=XLitEAG7W5|6QB4eT&XN>} z^OGA5+;NN|nuP&T({GtMAR0*ESrn4SL#6ZjMs@|x^rPLQQ|Lwxzq5CMBGG|a`1mZ~ z%AV&35Dx|e(!<3dop_upvGVeRIXUp)aNmRf0uTQ4?gw+dqK7c_+#5OlHOSb#w=s&& zkt5{jB_AKJ9Yh?OHNp9AmXq+wlIUVlF6-MF_!eZ~yBoRQ@8f*v;?eCF^zf*nZxW9X zpXR$~A+f6Bj&2Ha`UyYdd}I+C4I}hEE($4;LnrU=8n`m2_GCD|)c+X%Bo!|b=3??%bNtJ&yF(Py5O>?`8Q zx3U-6CgK?54eIBk1QHs$9Pu3Q9b5-mh1B3`3^%n!phuP*+AA;}@ zhQUKapn(JRcQoi$s>khcuc(nKh2h2ozcKB$r+}h^WJ9h{@7}tw-*hT?#`Nm09mZ~5 zupMRln_oL&yT18E-(G{vP%Oef9VYL45U~%6mYdLNi*`3fbE2qksN-@2CWE9{LAgQl zno4C0@vc39CXl`lWjrLF=bmQE@ zG0pnJ#}2U2&DXlJjVQV=g_HCtTv*vyc+cza1ijXnn*Ae-(pd)kQXrYYF^unJ zY9Hl~pV-R4H>`mcx7skG{U|&L|PxRC{-rAF+b4=Rri^KqNe%HFOFqq zqin62Lw>Kzbb>6l@j{a{BL;l^UF-q&dyvtX2lPX-u?Z20I*?dP_JHHzhaC?+M1Mc> zPWOuw6&mu(*h+B%+{|1sZ?M-SkiRd zsnxa+S+*#Y0^m%s>k=GSU1!Wr*Yun;wLxp~5*;`H-?n+S)T2RM+*u3a;Z;IzcDNXP zEnDYVFtG?66J_XvGCaASf(%?}ko1F$fbavK!zaKoFgSDuGxKoZQ`<%;K6>of#d`)V zgNR(5>qQUZxe-)?ID)!C(Lyd-kJW>I2W(N*5XrKd8^=4f<|R-*kcP;yheV{>t>}UW z;_iUep-m@MZIjZmNQ|}MI-|VehlOmAE<|=RwzyfYo>_{;7SGmKUgLCIF3c8>P6mcE zllx=irxs#AL?Zh6U)V`9z7YJNIHPYX3F3M zzIt#X6vBHN?~o~kIS-*`4b2xeN;Ee#N;XQDoAuJ;%*Pf_m#e3jV$r3mCRSeKa9PjK z(Kz*)$>kW0s5Q<^S{~=ucO9on8Xu-Kc>v>_q;V4N;TrZRcJMgG*#rJm!ap7ucaPE8 zEv-w=fpsw%cUzY(yaU%=+S63EXIYh7BGvj9BjQX=1VdA4=jLj5* zXkP3Py9RQT=CyzDyt3W%>S8h(!a}YD9Bh1(z##77vj5O&iN~dBO-Ap1?e5d+I;$KI zr8hP_W6sieE(7#w$mem^#%i6@lR76awN6h+WThJAqfy#csn$XnP6BF*b4*2f?c~fw zuwaK1mf%(7-Q9M=QWo!E>wdu5`-{7n`vU|9yLl(;pU!J&%;IZ+%^=^_yBaZ%NAhZQ zFp<1;20ZGdb8>Z7KsDg?$9-f+7!Bz2*Nq6*>GYvd4K!RWB;v@hsMQ);0$%BEr0FO0 zYldHo$$?kP#{oyyqwWF0dBQdRs+4N*hLb%;F9m)mzUJQATi;a9|e|+EZehGiJgztO@^QBy}5Y8{Ee^n&^MI_{M0_%u+7o;P( zv2>8?(;(j4G@q}mZJMXEPbe8AYLu;cnA$Io>v&mJbxnFG;! z0@x`RRqLr$#|xQsVj?-wp*(rUGFo^ZASZBi0#nMvBiok(JB*UBXiAq_if!PBOE1mW zdmZPOUMY5SuUoxq-Bj?8<%ER>Jdf#Q&<`YoOXHGaE-A^ozQ?5-So2`}>d6HPk6(KI z+Jz4Gz=u+egOKdQcMEyw8$QYVok@iPsBO^a`5wkfrnL$UZ6b&OvZ5dw)#`RQ31Sk8 z2&!SVYmSnewS?ED_>;;Q9J=)MTICBaIXj>pP&@WT$bzD<4|dDBMre7tG>+8EjpdC4 zYco^h`%3$$9;s96fmLKh^6S?ONZ!bXL*(HMqPY!_JX(tAQ6FfM9OOB(g@#q4bmA#t za}8qIfeo$zjvnO*s#eWz(zIF~u2>A|ZX{bOiM8pB-toZ65=z)Kb3?J&jjXR;h-iI! zRImvp4>ra}Msl-jaVhuhkdy;Ac}V<*)Y$64L|D|NR?gMy7gp2m!oJkW3yIa6<_kw> zq=r@=6xVf+FC|m^impJkL1lN5yEuQUSUfQod8yshs&{{L8HKHz=;I z>vQ{t244)K&LG*!3msf~6aO49aB!*BXa9rOHfZs;6gwpTUTT=NnhtN1pM~`46h&|l z4Ph;ZU3WotwD-ZnBSAo38xRW!0p6o&Jw$_E> zD|B`&OA*G->Cv%a5aMYYFNm^ipA!YDT62OcxzYa*F~)m6)SSqS$LAJTi>=AbWv`@k7OUchnS{k7sh2tnAitLXi9UbwU2Lw@_2 zwKJzTPaMDE*r9_5*1OUEBxep@a~Mcvj`F_>{$d3ZQIL*8b)Px7AGyl-gcze5?U7J9 z1u3L(gCjMAe$VyMZd^ZAjCn=4{wTbY-2{{&{MuIp;s4Pmjw&5)uihB+n3-q2jV6C( zQ2hzFn;lZY;qNwDO|1C~&Hvs3r^BbqjtI|VEzF3#59BG*SBa;3*onA7kODXotk=>< zkLP=)!fxps1Mva%4r_8gh{BGY6>e_$V#vLY!E%RAgi1L`y@?A^0jY!zn;!i%U~^2T zA$`bP9GZ|q6hPCjh0hW*DM{^Xpc@xfFwBhEC6)b%aDPgm%?qFz~ z%k%6BorLaTfMfN|MOs_--MMLdG2yP(+$q0ZWf85>T4ZU_nyu~0f)t>_Tjl5aCIQqfjL422tu5aGl!z)v5UTMSbEqxoNk0%sDY3rwa@8pFA zVMTaT1N{mBC|f8j%s0^WcA{JwFCvo)vc9JGe6cH~x*uWa z^?soQ8(&w*#UfPigW_-~7fQVaw=1H!P%cTK++N*-Bqc+YR4O*!4fbRfuP+cqX^%+D z|sO9l@{Z>C!^l;?eB1+v?TE>6r%t}tlp(N~=wz~i@&JsJzUM+q`2*E;mtl^4; znUGC~i)abuae>pRj(`wi$P|||RvTst5)2~>mJEnPYBxf@*x~Kg*#f{FST-a-s+4fT zP-g&2`+zW@z_Xrrika`f1^N;6+=5mg=MIWClDlibJvbsB?ku@d0dFWEbzel=Er$)> zzC7=1KPyUI+fjYi{<|n>Vm`LuopMZ!S7r^%a|;JivNs~Ku>%ojKIU{*J>~f_J8MF} z-TZ`B8_d^}W4V?2_nTOl1w4VEf5hf7Ob)9P;ULAbLAwHI_g>JBd=I(pejeUz245o* zw3$IK7sutJr(|2n3Ep3S>e<+Q-tErM!&g&qy9@JwXp0rSo>J6qkCr^1@u;1h^%mzN z(fJ}kyz|ir-am|L)^uAIT4Q+6Tl^-*OzTXuSGfH zbYr}b_xqfq!vgRN3`;?^Dca6dUPpWcNV0ahNNDRMo{`1hYHI>-89Eg4RGqjwtgzZ0 z7AeKwBFV0}!v5}Dg%~)z;I#()*&6&-<^59@eg_XOabb3PqDJ24#Qx;|j>Swm-yF3&g%_*>oFv{gT+s3^kxHc;G~*6tNZcMTrCcnv zzfkocOL~{mFqgKkkxsi?NtjC--e-66MkDUFl@`Y#x2e`VdZW1jv5kbrvaT#79rZ?Y zGAD6LKAGtBM#FCCGFw}nbm<^Ml%6pN2-*(hEJQqBt}!KV>n_wj?~S$)nyF-rp@1<{ znef%lEJVX|r=|*rsy=G*!)xh}q$;zhDv@(F|5*ITTgK9UQ|`dIaqI!~M_c6m(c)vt zs#HcF`#ZYzIN(j66-?lMpU`O7eO{?XIYs4VhdR|8Xi%6?A=XJSL(K;a7Vab@@0kJl>e#W9h+?^UmA-h?|-o%`r+17nV6m%aH^Mfix zt}N1&KD)o+nptwhat=4OGGbSr`NY-6%|AVuyWzqnF!pD!K9Bn-d7l28U~|)cp=y)I zg&P{7nQ5s@1$xsTo;i#@6;sKn?miW?Z)T1mf0YF{P=PD}SP%{;RE#Di1zF1~+BuZY zA#WNpI-~daA$djBezD)hALNIlT_efV?fgT(5AvMoKlhenc6+SsZM{2_K9kv>wDWgg zk{$GxDX`Z0f+OiO%U_`P=4M;NV;{qb;`Ns3hV&k_k6HXlB)$907JmwN^qZTJ)~{M$ zb(sT6ha=^ezJjlItY2F1Wl;G#R0>lF!3LFp;PGri6&d(4O8!g0%Uf0XmQjh1nh;gs zEB#v6x?B)mFFYVT&=|k&+9MmS^||fU*S`L`*Pp&}`}wAhZwzJpkMluvLg3qxThn z^@gEVV<4=z#DydYqbQ67J*QRf9Udc!2pFuU{LT#995_@bv<{DmEInB+uH(% z&|@d=fA4$oKYw->XG#!fiWjkK^lR~>@>MF~8~2a5`?YwPm+}uLBVqJwQBuDa1yqmz zl)ApG>NYM6$)u7w*bxpq3z2KOsN*uqh^x?a7w8EIIl(;DQ*)s>;0XSyGJ0`Z6e`PD z>ZV$Frj#62#Oe!v>c|oX{@(3 z0myD5oj_?B`~)@rjiaR3rU{)QupoR5Sbh<0WO0?G({TNU{0#&fXl2{csYE_33Y62q z0@G5G!{o%G@^6pn9ezNF(;jzb!Z&$g%r%;=%?2X-$^lQh>N0ukdVk>K>FJbfSnrHf zl8MQfd8Rb#F9c1_{Bk}sk?@Ra(KaacaezMw%aLXuVlVMI+_S?R)*lZe3QiM&CyFLQ z!W2GUFo!&NXeaGiK@|a(HrfAe%n?^1w1AD({axN*l#0XB{J7mo*l3Qy;dPTi3-TPX zB&yU}9OFIHp7YbR-I*%74$`z)BQuq9>-IA5dGQ9}H&N?@a;Y+dbE(Wqcv7%bm?LBY zX(x18w8D7ve)zy|IEO#@g2;PZeFhRh0}bPv#;D0Sf`rR1JTmpV3R3AwG`oV{Lo7k? zSX>J2o_GWA)bA?5%Tv~N{z@+vtOb$h&9AQLbindTeX!VnLhmh6Xo%Co7oZ~nZ6G8Y zqZYGal+-}-rBJNQLL3AV05g-IB82Ea$_X2a&7ja9SQ|bS`O~ddmtUWK`{(LVjhk$;sdY{_^96d)83~`&lKgS(e@MS;=RI2&j0=T5e0UM=ke-d`MO`c z_Yf+C(zS$roxnLaDr6hF(P6^NAZQ56yLm-G7R0x(1fUT=U3h*Ep-QkAJonT#%WC7* z5}R1L*%k`AH%mIBihWOUe6{&8QS(S`nXDSRgY+DVS(=gCpf?*NE&{R-&x(SB6oOt2 ziiq?;Zb3u3aQ`^u5yvBP1QrD;d!PIVFmvl&4=1e0|JnZhbv{qZ9i;q4z0FMa3?WtN z`3c~pK&mdJDvG3o;rfTb%6;RbXch> zPfNn!oRM;J(k4AbEEa&=*uCiv00rZm;kZrduyHpsUEjtEb^%e5q}BiR9=T)brRO}M zPk-Ds4+(cFzOjEELp^=@CXoGnb0ai0NuBu?=O>q@mL?D*LfM5xx79;Y!bXYwZ~&ny zRU(wM3Op`=XHdx!Jwsx+67`At4IgQrlDnYo%I@ecfPNAb!B4y;JmtWak^ zvFc2eT&_aYsrcxJKm5dEj#TDnvB$#bN&FG$I3;0{ym~>u%ZWLbSc!Nq;`Q)u*jQ*J zT9Ps$Qlm5MTYSb!wp_gJx=VZ_@m3+{o@S>GsW9=sP2ZTXq)t^=HyxSzRC+FD^_3Q5 zbEj<%`|*Omnsge&l~`e|?Dmvab%~TC7MrcR!ebT`i+3gb@p{yp3YdI>5pTxl4A>0X zVY@FA3fB@g3@HPfN{QaZx3Gf^&yCk#IDhV%Gn*TSmiJ9hR?DG)na8?SLs;ka$Fq>N zS091q?Qx50cFROvp;rs22M6!0n(3KZPihC&ovH_;DB%!F5aKgsmJdU2k<`&iQb(^R zV!(wfSO~M&{)Z6OqabDukGX31#{lu7(L&5qGp5Ub$gsO{`akOakZybqm<&(LP=<$j z*-YL68oDbDPg8akgt>1#nVJY0d`7q1XLT2%Ht)pA$?hi6qP%D5yr=;U0wiHH?DOb# zLp5bhLK5cqnGp;?FXKfX`Ki$^9EBZ35}lZ)4Jai4siFlAzw|Ep7aS}HFJmW3Aj8Yr zPB<4O*+A#gBxU$$)QMQoZx~TeY9^&D3RHVXY90zv!$+mM21hSv4O_^{%U#3r*8f1B;pc?~;Uv1p8IK*I&MMRm4@HA{ zmx8%WI)IStarlSVn5Y`o2~Z&+`9+kJ7ZE8y;Y3l1#Uo@8{->Z;n;d4TT1^ybI?&5o zTUIKk&rd$87Tk&zb%{v1uR+x68v<5Qvb$rbbj;pej?|U{3ugk3#G!%*a*xWe#h1!H z)2PcIsw@Wg9USxMg7KuqQ_Hv=5KiHJwUDLxq&r=ks8~&AU%u{kS8St(k9iL!=Tf#( z$QF&5!$p56<%GY-5}Sy-N(SRxGB%yEXCosd2F<~uFO>6+7*ROKTYh^q=hCZHn$g@? zDCZv5YDcJ1vap1H%69+^1N9fSrjhC#l2(d;Lm7aDC3RNz6Y)ev78j5x5ECTUaFmc@ z4~G`nn)D4g;ww9SgS#6n_$NV`1s^jzS&Na!z#43z$y-8Gy`>{Nk2G2g0>@ZZ6 z7sR@>REYew9!_JBGC@%p5pm5Yo9EfzH-9NE#)20o@jI!W{0|UMkm_&_!N<;|ul`x< ztG_LM72n7KbEbp6Bw^0TkAALU1=Q^5k&SMo8F{|;9b`pX>H@WE!#P3s({W&==iu%V7$O9|D-J}rR$p3K#9S)_EV|Ur02@EDa|YPKf7vau zs`*n&081b0N&wq7SNJw_(a|BQJ;h~O%Y6CIAF2qQ{-^AQOXPq7!KM%$(wdOw1!03V zX|GP#ipXG^&NL}ST3Qel3MrF}R`;z3yMdCx!jmcI<_eO)%p*twTVsX;S)K)k>@Ug! z1AKvJfxWRmTk6Vi+Bzr+jITikd0^y&*)0#Odv4t`qFOo<-bCg+97g1Y=(NB351tzP z^0v7}QajHLcD>>wkgW#zR8BOUs5f9X!avsu)RH|(5sE5h+%ufLFoOtp2qX*)?IFp~ z#@wWX1ZZj$QNU*cDxiQ7DUu8|&Q0>G5>$r~oMvBTUum9XcQ${HeYlxv{_o#Ruy1Uk zOnIRB_kreT0x!M@8~dT=8$h}8*7xC4|2*P%H#Y3c`zGs^Qa%fR07A+Z)bo=a~;Y=LvfN`c#O#>*c48mMPdJUjEl3ZzTe#FjY6Arx$AlgYNsMU70)MB#KvV%Gs zi$cyYi6lUY8cRliC^)78>uEdYsf~2Fe3Rbg7TXvOEUu%w{r9pEc`p z70Z($C`Kynu-AdYRce(hFhH=c%DapojFeO_$?M3hr z-&K)ZR8Z3r$x5b#U3keP!x(qN4usdf=i8#9w%fN!Ip7v3#1d~f4`W3kKQpNI+=D@qqhgFumV5wk#749^TDK);x`eOqZmEaH9!=nRT$26 z{rWm8!Lb(tU;0v@iIQ75TQL6&<{uT_*Knd%M%qE4%13gOjZ!2M)niz#@ljEjneo=)@^C zfL1?oznO^jX7>-gJ~g2^MZWg4kWq+l3-4~2z3z5PcvOHMxT=2>qxyE;?XOr=(Y2uTxTS!S&rd! zt)M*Re}$23>6&#HcW`@nc1IS$ya_v#gZ!e{-$G+F5%an&CK6v#cg9T6pd-*GH9N(8#_NwG@q-74bYoF)P0Mcycrxj+|eZI6WH- z`RWJr;ptL*G&Zs5Eo@8%m{>W#o-z3nj^^Jgezo~jd8u&lTp@R2A>oXdJb&VY4=uTH zocK1o^=kGFv4Om~BQ%4cf6QUG63UUHBU99=4QGg`pq5D@Rt(~7I}R21p$-)Ii}NbI zMaTk-wlHuV3$TsaZAmVEo}!%=n_IpjFtJfszunCL8sBZm8v?3ll zLHjpB`P^BunO{?xu3 ztS)_eVktU)d?x&^=yb{vZJg8smKYxnOr*z9HZ)8>^slZ&W-?t1`y&F8Nfi*$oTrD1+6E(VfnM$jKYZ8r$)YPa*fR7TrpFj*`rwAIY4x5!6h_dSrTd&I< z0T(7@GX?uCsxS)HUbV{;5IR=V(Tpl;dw*8<{dsY1sp8(A(8|g#m9uR*QzUvXtxLI) z^VfUBJB!g*WCh*Pwu0C}LW<*%(c66HShj@}_l4nUbnG*0svIf)+$-vf+GQn4JfC0( z*$Lz*LQWyymvh&eb)d3@VtT}X6(toPmkB?q|p-8*J~kC^nm zk(PAdJaRT(;PjXjW`srIpQQ|j>8ZkGVN#0j49H-RsC0V1cZbbjA5q+Amg!WgAm3Wp zPS^ve;0z3*PSQnp+FYpg3B7cL>2xDHDujOJ?sxBOFxtYGcuvo~rQ+y&r#ZDs=(J|w zTjeu*+bZmjixmqM8ih-+F^+Uasi!1 zNeY-c9H+{GfNovwx%z452z$;t&w4`FijOs$9e_u+Jw za+=cAYRNrj9OXGpHY-Ktu$0{RCut@r5u!MLV6J}>Y!~x8(N(5%-5rq*kn91 znQ|$|M9=vCY<6GXnV4LHDjtQw@oLA?`hJ(*9Rr#$9kScKUX?@iq1t<@=E+Q_yn5@@ zOwAbJ=N1B=qKI=VN9UG@>z%Q33w+Yj271R~3)-s8S6xj<4lkr_*`-`&Un!y+WB#dA zQ`L=%E5Cd+JiivxvER{*YG$t5H*Pj~({shZbk5@p#SKO)NA2~q}m(( zIdBP+Kj#~e73NDLD=cGIHQCWvJ>?zN8j;x+Ds^YJCEX^~a3~rzxCl*2c}h0E&yNeI zQGw6L^OTMk;CcfhaZ*9f@80)t9~Su7_P0Hi_@L>R$R zbR1_0#fnLBM69^NYr7GQPcHHnf*&2tPT2R4U4aU3OH|>_j7YA@5xQIVy4Rv-ZclkP zkKsfE7+O9y_I-@aP5Vht_0NNqmNkItaZ+v(J%fD-wc_T3)rHtdNbj#_qD%FpF7%*( zJYr2OT#=y%q}J;}Pi`j2)-L{-e1X!u$?gdV=(?mFay#uvh8r0M93Y?!aLcDrh4F&) zCzGgz`$*lUIod0;qtdlT^Qkb`O=dLIDx(yO832J5qudWV>rSIix_|jx_0v z+XE?cq2cp+5f)F!qrreT=gal39!Gh1tsXGkIFBd|2|gHdNbj(mBHtERP6BG~ww#K- zQrZKS*V9)bWQUoFztdY7q%%*I5EhO%tQs}S4`PLkqxxZZTf$N|*ojtUkf0SyA;$}F8a&a|E+K1MxI#pmcjUe& zP#WZ(0h5wzf$Th|&boM{eZvHwx0mZEdRh(m5kP9Q9`+4oChf>>aHEm*pnbC|yP@Ft z02aG}3RvtgWbrv(wxYcjPeaZHfVVwKeaRx>fWLR_6y2E!1%2M3p3zfX&RvF&4YjA? z6MhV@0aG|5*R|Mj8gJ#*EIM-Q(|jJM8!j*Qzc=7T9&_(Z$n!eUUI5CqfZLB;ttyp% zr-h)-KYS*a-1oqe517U8GWU)X_>fd@oT0bcGwfIS?zoKp1r9vW#@-SL1aKwgWNfkL z7^05CW!!@R@XPEsq#g(mfm@s66#T=hhSa&yKXnLjhJ z?}oG`c6RQL>&GfbCnnD>L>{==r*mkQvnhAc@_>5SWVIP}%EMy0I#w#LuE#1-w_fi` zOlI<{MOPx@N{3IZM2aDYUhhG|*oo6ar6I8%@D6K;-r=oHjv-q|7ia70espl3?W5KD z<62m!ErK;#1Y5r}!FWbyH^JPm{5F)+N%pH_?}V2iPXj3b{to3+)w9t(LEEl7?%q!O zbwwh!H?-T*h9cXhKGEL}UOfn3WeC;stpOZ_z$VCTQ(C-QbF^q40?i?Cw=*gEXA#e! z;=Gd67SU3!u=P+WY(j_}aTn@4+GfA!Iz%WAHGe49nm-&0Y@gy4;_n0k7dLC2!BcEu zlgAb+EYfh6il`R|OlG@*u!+Xced|vCRvu(O5Jv)+L|)kxShdMMEl=cjLzH_XMi4Mg!jA#(jQo zX|NoM*Uz#8A|gm?=#dTgbQUKY%=ZLIMnr?dZyq2BHk9dTZ{WlOSBRE%c0HXn$*mi? zjMM-h_SS~6UX4ZkUaGN6)zRBn;nHL%s2xI)RG8!7uU@pU?3aXCY>P+>3Szh$2uXEa z1s$dbHN3-Rw5gRX3<=N5?g&i8N4e`nlC^NPcY<*&NVwu}^~lG_!c`N;-#Rf+lFF## z7kh;wjB`h&Hc)(mR$<_(31_PjriGtxSasSIa_db7?X+%Mq8E>(5SN!@(Gm2z)pqm{$MzT$VEM0x;)$ZA^gxYQhrwh&NBEQ;_%4m#De4E-l=w?unttQFO0`ahmpM}?4!Cpow5vZB{4i_}#8TI-iDedqe zuM4lM;y~4vv7%399p)aGjtxt_Vo)JpxT)bAbB^fqnN%{4c%#?jERU6er*Moo=p-kP z!{T@p_G_Bkub>9Q!2ng6!1SO3MZXS=0ym@DHjLIj$E*`#w zUA%LvqX9-*aJOm{I}k$rFFVzsfWr{X{R8Y{m5^vq4-XZRXi!v-vbd}OY6&bz4h#b( z$rGulGfqiSae#o`qA6-wPN_%6vqnVFNrpR6?18m9#_LNQFct zLr@T@qeCdxhnoUeM6KQErnq5v7$0%#c*%hpE*9~h!{7Gacdz%`p)bAeRA6l_aPlr{ z?!-LJ=kUxRGd=N#fA~c6-|$>u3sKHTBj{=GB4iFfqkJnqP_g*yzaIQ}^ml$O^lKl8 ze2jgqnZ)%m_B6dPZjorfv7-vXCd@R@cEyNZA83Pl|^7Fd= zVkB1(nzx}7BSy`(`Nc3PR5_qle;hoV8Z z-TX;@@+e|bf~w7=SYvV;^>Hd+<8AA!fMaU_w|-e}t=G@7;)l3X3%zWx_x>JyYoLlv zU@3z@K1G}=6ytG@A_PY#Q4mbnw^=NHhGrZJOE}Mf;I=3xKCIDvIPt|VBp%mj9#4GX zi=yV+BO~8#zSL|!qt`!!a|o&y_K9UHg!q;Qh(F|Ont5ijoUb{IM=%zo{Ro8yODicf zXrWFscEC?OtElm9k0?Nz-D7qu6Fz7(n;TlmM=hGOco$@{Hw$@mQ zE>X(t7~%uQ8c~_u0i)&>+4@IKIXr_#{tMWh+efcJ`PrVajPcx0Yxh_Zs6A*$8uQB= zjLy=qqCm%eZyCH8P^roV=Qy!da*;zC+=x z0egeAvu!(iXB}kFOuo8{5;9Rgw7?0_;ie)sAnhXpT^au=pigr_ z0%eN}CkZHkh#i{f5F^wmC&WfrV;_64`6xP-J;d&7p7F3Rc|FY{v7h`5iWQCkE2t-o zv!t2OI#Vv7$URahL#BY|jgEFa3Nn|{X(0~VZa29!2gwm_`>8*M^k{y$`_ViGxG>=P zD%i;T8hWykr3`j@eo>ESAt4P#Sa^>!CCWHr%#=btcnIW@mUHyrvytciK`90A^*!T| zbL=+SL+PT07PMGzn017T0YO@nr<1VQp*$VPBrdp|-EkRcM4e@z09MaZJQZjy1~vJ? z7-kT&PK(EZHI56208l+R>f=MJ?!=mltpovBANU5>p}C6Kg+$|-0A0zhWYCJ~=)z{T zy15W-y@&nvL;3vSy5Ck=qvVp3C8V`r4IveC68d>1+4LG}q{apJDCQ*-C;EX(iw`AOiJ-@_i^&(CkK;xfcE_-*nL*EKRw6GX;Ned>TUpjgssLdk=8OM5Dddn}jEV zhDfsJ6%COciSaSk!%;rQdiXQ)*xd41X^fx=#<}pg`_~`5+A#g1FsAq({rC&F{pLHR z_xpTXfvw=seTv`1zp=#hQ~beoipRFlTY2dB@%zBgef&<+@1!q$q3a(414u>jPl8f- zLKqi+Pq5JoJGa2!tMWVQiP67X-(hbOO8nnnm97!KFHF(D`899B&wfcbFHQ(oiXX@4 zllbnkFvdUQ-;D102~+@33Xay#gh%kbFXEbOaSgqHMF@*G;oXdX)B7$jg+~6pe2pR} zgv2AldG<40`*l3~yLi0{FZwLMgolJI|NIQDy%XR2o=_I?S@)Wf8UDx+i-vR zKH@v^?;QS3@2%GbAt{au8Ij&QFS}?Ey!cKEKeLNx@%U=~+| zu_1H<7}8_Tua!U3zvY+s8bK?11dDhV>d<(>L-gMNx*g;23sI5YTQ92+5zk{Cjd-We zT`$FN2~m2rfA%)4FMiK%7T(+bnF>{>pAq)6y0CB(wSjB!Vh=-h(d&)iBYaE8>=5SH_Zo6y zZM%Mk@8{V)LQ*jfIi|pYRTs+aZXpi)6iKi`K~aKSdr(MVopKEOm3AD_!XanmI z6@G;3c0awN>KOMLzLTXF`v%7M6lBh`!aOqy3&c}wDkWB&!NP!k@mq0`jgpaXC zN`J%oODtjk!S&(1_vse;Qc2zEc89|q{7bL~=}$>_{xhFim*Jb26Jz@8Pf5$apA$^*)pk4S)%KTgt>$c0HYgkQ(@jz{@}Gs9m0PK2AhMl>g_Id+twe@_ z$SFD1_UF)tt_C8luvR|}*vCmXqrHK|h%nfy^|UKHgh)<4l1IRJ_J9W>x#Xniry~DA zB>x&#YkD318p6Buzk)X@)3C@8tSLEe`!iUHu7;=%halTGq7W) zM`1nn4?)h?U<-X8Vu^%9OfPgY1gU7zj8=}7lE!79hB@|OSb`>p;0cl=(hfn|58yhq zG{kH|KSR)@QK|DS2fuO$luIZ z;1BIm{}0qRlC5z1n2cu@L%02BSV+yuXt)KgM3c#A?Og8*g0eGzy z2_5)MvKfreB%_&l7;g=RoUDRlrCl_G3?^OL#cI#PN_;XIE$x8Ii3Z77Z3(PKOUdX8 z`O$#1zFx2OY3m!64d^Nvy&Z&`?DwH)FB$Fahg+$69KP2EtFhfUeD4U9Q9Mq^?>Kbz zpQKyp%Q&?0l{F5T!=Z=P$05VlaJ5prXdL!B4I7k=TBb?Uo8isa;w)^ocf&2zb~81T zqjlbl-^w>Ea_IZb_-Z>WReI3y&8$QWlooHsW2ud{zJv|RMyZWHN=}nrwOP3pTTj8( zhINCKnZl>S%`g>z5H=G7Q?Y(KY)7A|^z=(BRby1D%9e^<_*6YM6l1Q1=q|@-a z<51#Z8hx~(jF&WOJ_uVi-Hs$_s>3vmfoaqqW~EVo1e6$2?Fc%2lrFR+hq7BNZ&!89QSQqimFW65$HFCS1f#-h$d8!K~ z&S%ia9#DKf1D_uWB9pQ3Q&?>;hc$R< zCL^K-`jr8DCFy3n5^k~Az!v*C_%6N3L_Y_h=qD5Xv|E{IW-E-f>tG7wG1Fv8J>~&r z0r4smKYt9CDn0fSq!&qTSo{mPoL*=0cUTOR*qBMLrRH_^YUtCPjrJc%H)t!3_RFN3 zL@N6GEZ;TpGN(L9kNyP3TOOn@!hmuMzVsly=&&9{wl86crc0F`bn+l=by%~BbqAr7 z`D-@O=`%PTIcFo`2XF=N*qKcfYK4ze^K4?#3HTJurgbmh9t|ftxpg*l>ul&|9y~)% zA+~Vir8ca@j(pEl(<|w_8~GbyHJWr|kps|YZ-;(mz-}O2k51fH6K%P%&MLSCJ-CVO zr(lcyH~21gabu%n@Q9XdS9VAlJehXYlik?sIBBQIz&h$Hm?Br9pV#37_D<;1@&!au zHyZmhEM;bK6BUsM3(^)NSI$a^-@4HflAA}go@y-X#*Qc9I=cz3$G&d0rkj}dA!+em zH{RO@n~2+Ptl0{;69EcUhlQ%cLL$#za%4qOXt~j3A@N7b$f~Rmy?q0H*sBnY31vl5 zi1q&q)-hWZqCL5`+1>@WAafxaI{{@~QHb5oK;9hyWpz=gtBXRN#|v3qoFpd)-zY>6 z=b%LFLiBJ9N+c{KYPG_3`spUEtx0Q>sI^Faa*_JvB4m@C0C8ZEMx;d=krttCV=dB= zUP*udfS0)KzrsR#T1kJefh)PT((+-KO3SaTRR)yx=)V%{zXy+K$)n14`)zV$byvxp zz8{8bx)*k=G|~82CDDvJiDQv)Fp^Xf$A-grRU#%$ONk6pspISFM2xI`oW5;PW0Iv%|((P+O!J!c78Iz^64ug$T8q-7nr zgpop9c+0QgM)bVIG$gZmo-n&#~ zSgPZ9sovKtHF96Gly<*`G7^^>Sp##wsk})k_g~9s>ntqPbR{L1p}k|Unh3d!=pS{AaC|SUe1h#aAM21e80YmAal;N#vw9jRq@; zgr`V*r7a|sYh^}TsVkY4$o4tu24$nP!ir8lZPJ|0Xl$jfcDy=+d+~wCEan#G2rqVd z7gpM@z?IbOMe{$0O|%`D(G7O}#M|5F?O|1#{$`0`@Gzrg-PCodM1{Hw9JSMLJ6XepAk+y!`z ztcbislF=~Ux)I7Hf@W8_w&|E;i)xuzQZ?}YVesaj)EwY7(Nry6ay!*})CR_35;s|{;bqvv;F z2NG7J!&9&ynyf~LXJ9OTQjJcILRmpon>@MJn+HW9n3>7C?n*8Hv1yoSDPfij1#p%;gs*WLuH8JlYu1yaVZthL`D9l(Fq z5FtN-Tj=8&M)yJZDl)IJb_tRHOXyblQ|a%6qtL-Osg5MB9nocb82$4S?-()KY<55s2q<->E>+hVlth5sPB z`k2we;5+orr)xPM{rx-Xk6B_)L!JF6)legDGpF*cC|4Qz&ev8E5ddIR=Hhd#Yq z;m;Clj*L*B-m~}^p%J9zp2f!qMFvLbO)#G4cRq9_pURrhhfmTj;QC~HC=n%n~)w*LVik^Z93-$L2x@}W)~n<`ZEGX` z?87(E7@kaj@sLwc*1bMFMDk_D>tmhpA!{J9gsPz@)h>SQ@;6F~UHobnzuLvGcJZrS z{Me<*@~d6^Y8SuS#gARW$QQf#HFEl~OC)Kri(l>HSG)MJ%NTOvc}nJ2yZF^Eezl7q zyL?2x*u}4Q@vB|@Y8OAxAPo6p9Y5Cj7>afLSZ6m}LLBp}jr?jOzuL&JHu9^D{Awe= z+Q_dq@-qtPFVO~Fsg3+IIjHhfphv@%9EpzQ@4vKEaY6}mbKtEESHowT)1>-P~iYVkCYLH74* z(GPmS$3BL#FItP1PFn%A)Cy()IiL|BKm>S(bT-jGKm=%jg?L>6-+LLZM7II-_FMR8 zWDDSjZLpcX2ULdv{BSF2iOB)gXF&BCP<;lhH?*yH^s0B6;{xbbYWtX(G+-UnPY)@N z;F$rm{VeQ2{{ejU4cN=BhkZ4tpGbwT?uMfI0Ge-vSBq?_`GERr0L}L#hl7srdTT6< zXMZ)Iz8XODw2rU74pUeW1&pj)0(k6uQ1l4Qyq3rzEVTxmPFn8A>`9avE>CKui zyK43Ln6MDt*5gZGLofSO_1qarzKa>jPJk;w7s-6|p`&K>o3pRW} zt}+EkRnL0qFf7GC>sc?IfYs6p64DB*rca^7-g+dI^0LyaM?y(&rgtx(w>H>9JuguH zl=UJxufZ)u{ujyr(0Y*;zk~(E$rowy2rOj`zDSFdr^TN6MMa3(2Y+vv7ZqRtCU`B-Ne0B8jn!lxRL)YC zGFqFEhZ>ATye9Sr`@)TAris1_8fkC~Ny>^spDM#;cn(RyWi7S<(&4Mm(??uRadt z&a0W$<s{h2NJc?^^YumwMtPgAh(7UVwyy*8^Evs!9qpMe(HXAm|j zH$nCqk(@gu)(=~;PAl{)13XLGidT?>640NUHewa4H}B;@{*`^s%t z`3&??+cxSE)-nrh!^*#fvJ1BjZ>)h^81LKg#`j>Lyr?9iyVL!;sj%7>GGJ8g^<8JGF+L)X>M;sWt4>8g^<8d+?BUYY$%WH7r!h`eYBj@ieT_wCri`L3={k z1>J*h1fe`B+k;np0b9_?9!9}eupOK3AZ( zC$@LMby6GJMh3Jk0m;9Hk zy{dt|+Ur*OYg_F2(qb#uO1cJVxm(h-Jbhq3R5lY^TG3b-lwGM-P5E82BpZU-q#w83Etb^6jjk_E}%? zmHK^FhhFs!t?#qGRoX(1UiOgid9mGK-Ut`^*DU8|w!rEYNg`Ty0ue;tlhsI7rd18K!XHsY2a>}3MnUruXKGu$Y&calDvK{?=3MERnv+lK_ zJo{^>-4CIxRk#;N1MRf_5v~Q+a~lVdVLB2jikI%)yH~bY0z{>*@}o z&{yPmS?zZ)3i?CYJNkxJVxX+#zoF*aVLW%8-FFtQWul+u(u}?uCdgx1A!di6Im)^Yv>-4HET0@JnLux?h zVKB>Xhb8p4FFr5id=cac0%VmA+1G;W&}UzK{wQov^0bTeCQUafS*w$?l{)*W&igUH zoFVPAKZ1-$7_eV6{kf|>2f5>bX~^84yIM&TL!j6G3uKKAefAsBuO#A;4%jclI&6XW zA#;BuKLkD4y+3oMAh8#E z?KO~D9{TK^(63~cCmpc=1jU+iM(#O+6F5WyVC774eL@1VtSxJ&sJ# zEaiR}E9IF<$(Qp{kn>ScJbb7;xrRKshO9SWDRFWrkzprfwGTO0DPF>eb}|dta5m%G ziL_^6C4be*iL}RH4e~pY_5|cPFAQitJ2RxWXgw17o$NcEgPfNzPUQRovdaXsq&)FT z=(3_9_aKn{6Ug~JxJa%gK70$=&xGr=yhJUhMlGjCEho`{wulC&unPM&CQ-+JB4Z+q zw2b{k9s9$ra5ONS^}nzM-y4qId%{;a**zS)3*XRB+wqg(cwi4RTu0MzJfRoqK}x5R z*KU!Mh5W;drCuuj4H8aMt!wW&}R= zLsmsw=w(<$z)kr1X!3~W$xDx0)eaI9MJHe_fvx6%4O z=vT@New(&(8|$Bs_?EuM{v0mHA11JxJq2ZTG=UYhFbDscK!4AgDQM%2NnzeU3E6dl zY0N1p%xlLWyDm_AokFjrB)cw01ezGn0 zh)lM{4h(cNHnZ`)6Oeme$W9UDL>A;k7UV=0_w2io>?ZF2oMch=!5?fW zQ7#7=UV{z9(i~*i3!7NW<TDyu!hR2~#arBr z_rq{K)^RiH51Bk2^?6AC1ZlZ<$V2j0DEAI|c)sMwy+a(;XFp)LFl#r2&;)F^N>XH z+1-NdZb7-Tn1>`U!#e$xvw5Uj88!3phmT-~)WeSSAvj1WQFNXeLNDfFcS$?7Orm}| zR>}Dg@;P@0y&^4EpmnSuwfRI&Y|#oEl#N(w9;5OL$fVJteJLj;H7E5X6INWN#16zr= zrP@|0ZLt%-p+n1Tg8$nz*=3&fA%{yql3<*DnX{@`-knl}diO-kehc7}-r$E1w zogC79F9~vP2iBwEGG+lA@`M74AC}RJcT5@5z7G2%PZ<$X(lRfUAsc0MZYo2kzWyrbHlasbFPdpxk#E>IdZpB!O9_w^}$U@#rG|# zvyvX2gM~;~Nspd_GOtzAuQ#FG)mG|kUP-?iNb^h$HY0x}v06&DFh5oz|5?blDqtxd zSjjwf9Ln4+r%z8qxo50oM9?lH;uPdt8$<-o>6vBtc^H(ayBuxrfU_A{%aQPH$jKJy zWdtoph7<5@{A4*Z6lwK@<#@tw(y@5>a^{*tFo%e=oVn&CT#g2oqrF%8-uG-q-wNv7 z1Y1~Bt)RC3@EqfGg`ClaQTWmd{OTPT%RbBs>THEmXm^F`b_MmnK-!JHR&cd}GDoaX z&-n>8d|)0y{u9tke;+}sMvYN!;lkh zQ0^U8Q}b>pezh8pJp)^{OgoxcP5tb>;<3kJEN!i3tc5|Ij=^{|xmqo_n${1I&QXf* zt)_LkN<4WrGMqGP@Qtq^PX|nm^=DeFq1`Ab7O7#SE$LTTQP<$r!glJZVT~PWYV>Z4 zvu9Ft0( zJ=cD2)>G1$r|`*R<|%yOFpSl->>oZw4X2HqcC(@E{P?KtamZ5-=pz>Ss8bkVUhwG% zm2+;Nkd`$SXWMAShbNH66NEgWhH`fxC%%MocOa*{Z1WqPaefCMHGhC(O+6gJv&?Yn z+^ErGBO~;Wq}`0ijrh+8&}(!40C|o<&L>0J?b)bW+K5!_)Z=3(VKZL6QSVPT;$!DX zw`jhs**4{AwfP=rx|Rii8a+VFMC! zoZuC2UX$8&tvuBs@VGPDH?VX+W(RY1W`}557sxEI}`;%1!k86qLOJ&Z@A| z+eEwPU^De>(snm#?>5om=VlWvegtE&>?ZBkCY^CM(aP84@a-YPQ!(UkLffYy&psgE zo`7z&-K08iqIFIV(fSeSSJpD)%L#=4gmrjG6Ox>OO~})PJZGRpo+k8g9JXp(vUkyh zRFqepH>n<)knJ!zoPdQn%#55{z(bml@EDZ2aRdo!(^ETKNo$?`@_PKBbjYFoy`aS#7#mZMqc=e967E%%Sp3|2ZhTi}Gau2$WuP zrir+{m3EIoc}B367Ei%;`IHtvhNA7Qv_(EOx0~(g^DK1JI^Ptb{_WKN3X~@W+o^dU ztVMoK5+T)g^mzix{q=St(jl{5{ct;Ri890`>Om)m%noWh4yErqD0$B8(BAE!cgINc z?Mt|V=V;ykJ%m3svFCe-`MKE`77^wQTM)J??Dept;kSm*3jaH=49<_(ADI;Sbmac1 z(NUhLwNWQ~JkX=EXGG7LJzws1O|S92e$=ZjIxPCW=$h!~qmRd=$M|AC?Va3vdGBqP z^tmMSl4mbz@8jvy@jd7FrhM=3m-f7L%B3eSTh%wcZ*JfA%Wu3q_44(XzkhlA6+N%G z{fdXLciUIKhDhE72 zVAoY)SB<+W^Qs?T<-h8UfzbnRANb6`*4QbrPsi>Z^zfj4S7%=R$~8&Xti7h=+H0=; z@wEpXiygkfw+?>mx`Ef-e%LM!og@8^7N;de-QpH~nnPq#s28V106Y za?{w7l)jI3= z50ifQqaW`6;qiwCJ#_m+s~&24==AJsW-p(;efHVx5!p4_&t)HXUFUk#)#y6p`fAR& zISc2s<_yXioii)vnVi$P5xJSU3v(OY5$>7p=jINWn?HAd-srq%@_Xmk6hsv~P|!4Q z%)DO}_Aaa|>Qhu%^#1%o^CuKX6;CPNTXJJbe#wCaH4EBHXO({CndWIOyS41C^6}+0 z7nLu1sd8ZD`pV|2=&C7Il~w+#1B?4D9=$k!@oyI&T{3gY zrw>nCx_s&B9~J-T?PW8TonAhEdG7MXD-u@Rv7%_jfgg|g@v}ea`;$38X*Cf@<;D4US zdOo&&ZT#aAkNch&^TetrM?LxIlfEaP|9RBUA6?gP-S~Bt>z-bBVEw4|tJc5uRPU!! zpUQsfxu;G(o%;08pKkrdeZTnGFSh&o_-6Q?@$LWRs9*ksfyq${Sk?h!W zPo-s|$iJ&I-Gg29*`4X0?9%_NGu?}HSDn#jpgG!^A7fp|dyYc&^tSqi-`JVH#9A9Z zp)=iw_v^ggndaR(;fIjQMD#-R{BSu@A!%dviOlUxhgnxdau=!j;nv#7M?2FI`~lW} zo#{wxR@Au8bQJmPJJUU^nNcryrh8g*d-U#1_afa@XLQ);9(z0UW2`CBU1fMLN%V}) z{7Z}@`r*!WA8T}se{#u!Do;UPez_wdXQ*S;h>;^4iSlEV({Y!pyxehDPFk_sQ|zvC zB+Tdc2@47;-9=>!JZ@KRQclVIp-#sP*PNmfN80=auA(BBry!xAD>Wf+zN?_9v((Iz zT$(9yq*l0#7rTlIa$Syue0Nb%$pp{b^I2Nfv8bRt-!ao&=JqUf=Q>hLipw48uK8}q zbu(Q>?nSPuuAeEDdRRZ(7&Uw}*r3r8d+4|OC?G)R#{x2>`D|e_Qxdmklidph{ zY+k4$CmqI3%FC-9_{oAIce&e9<}R16=N7nfJO$+iIaK8;b1cFQxS*a~3RV=AJ96?}9#;;{h*(Ma<>d>;4If^PPr6-s74DL`^Gg=G zac#F$Esoh);-3b)Jut*rA}HPk`|kjM}k6D~*U#Je4?@^Ow%Sx|hzg7UJYGKN`+CvW)l z)M@|yCta@C?VQ$RtHfHs?zG1$u=1>YtK4$%EfU@V#82LE#ybi|kV-uN+bGU=IXG?T zqNJ3)i?V4}F+1KKWfge|*8I-TCs20*D>1iKWR;O-*NjhcImwbkyYp#9YMVjc97@P} zu{3fQ@Ou&ebE#Ab)bP)F6OdKfD4^8EbYY$9musw_=|YW&HN@FGM7G9@UsN%6?Ez;0o{$DWU_i$qBXU%)sUxo`0XY>zgUBb z-zo3KWgN6n#?@lskalyCPyB>^TJlPe=HL5n(!cfW|Jhfi#KqS5ZV&9T^>>Y*|9`Ed zp@j=|lB@bzpd(Ahsn{k*{Z)KhMzrL~2rb8EGFC;KbI@DJ_e;1^Jid(ItJJ$i*TtGw zq}CM+=TV}V>t!T}hs(&9KFL*~(qa#(r|a5~TshieIrWGyNg0t*>doV~Zi%EWv2ZAw zh>uCRP&|>oxyg|+D5F$*6tcRsA-$D2CvD_(O6B6GjBklhMWjN%OZ{EF6rT!RA)gj$ z?Go!mCTU0dEU~RX<(GcVQHkc$vgpu({BF{s5AjNATWXiyml0V*(WF3qQ~I)ia$S}Y z*+RCF(It}KKzY%x)R;)k9)5}(Wmc)iu2z&4^FrY5k&2>6t{oP}G)Qg{1C^m>1Xa?`ME}X(2RfQ>ir+NADpums%xu zhBO!|A-*8~DtZgW-U`yvJLy44R)=*DbI3G)pRSq|y>-_t(YCt=@uYu_U?Yi3^3P#) zOLlR)-6Lut^2rR;rH2dW3Gtv*Yoc{GKgCldvR!Sv~J`)+aONyUd>svYmI~VUk)~M^2%whH$(8|UF^xfX6-gN zaOOV23^g~JVeFG9alR#qcR&v3{K!Z%inq0oHaA%Z*yEKqA^w0jHuAPGGmew7b2(`> z-U?c;n_GBuWgchtZ?!(;B*g^laqa^r@)pPMn@OCFn#|i0r*PsR)l9Xx6KURT0GO-WA0^dIfJ)(-DmDMyt~Lez$t*6IRh}> z{LngV9**v|!#kdUbtL2$EZ|3AFc7d78+*4#d!&ByYCZFB?0-os>^GtOjesKxk zA)U|6cALdpPOWU~R#qbit)KEHts+kLT2={9REv49#MRdK_&(57o(TNd`ny@cGl8F2 zFL7V|j`468ynyFy5?RW4qE^aVBNv)QJn8y9Z_Rv>?{_WcWRAl+WFEF6ICGF@mYN^& z9bee#e_k z&zRqvI`ao>gY_%xKg=I_v&lWy&o~|3+mgQ;vyJbWJZar){=^#V*PM<12j5QGXf;|5 zJfn%`Jy$`V2fSdd;{Bw2Lyfcb4eU}sYH^0!{Mo!@{$gIXu40FnZ-rTFtw*f;O|$u{ zdBr+v^)r7nf45FqXRXzouiIjsWcM@E{KNVYCz+O8D|lxJ-@oDQpgYW~W~bR@UNgJR z9`m~SPxFR()4XN=%e-ygF?+2n-eCK#X*KVe_j$|agVrpw&-%iAXuWK$H~Y;;JiR|) zeP%wkF6XbCwwX^O(le$_>oGCKl~Ymfj+!{f<6h|QF>yXOOC`lop&vaamgJQby9=Wy zdblOif)SIF%5owm3nqe?$vFj{oQnB#i`x%Ja% z_xY=$-Lj{YRK$MAC7LWKo+~cl3H?@9p$_8d!B&op%y2gY#NFwX?1L~s!spJO8_B=f z1W7N#guicF}jSPUL3NiCOe(r z68)vCTcO{&r07{zP#N+X5?z@wq`QhomWxOc^FN z?EE=Ne|~?`WcfL2)X1AUe^M@_?nv?Vyr_zhD=t#`7KPkrQMW34Ejk~D7HOo3tdf#3 zRoz9RszM>CN^6Q*taU^$?sl=oZcj)by(QJ9Tm7X=x$NN^z8m+wi&oLsv8uX`^_#e8>1udr|H|WTo8yB=@WV*8wgN6)8@Rb?Ci1-JB z5h)L54vrffyDHNWoG~MFaBxCatRt8#spPCIM=(0Yl^aZuU!zkT!4Z-eAthd!k?EN0 zShdPUkr|oUEJN)!88y{8ObHqn=_qH=WIG(eUX$+-osfu|logDY-)8b#G`}SV zdq`u!upyH=<*M&Rx;`2NO}{t?71I_aB8E&_waS4U!KfPt$I(Dnnx5aLS7!zZxNvpE!dxQ;( zy$;!WIfIeI{%wh9Cs)Q~J0>Ghwur(1@6L>KjOW+5U|;v3*ujITD8?C#9u|zgF)`TN z>2OR%Ctd1}b0x<)R%K-Vb7rhuc1f3bs3O?=#-O=!gv!)t@KUE0 z3=i29*XU|bl2$)?;AUA|DL%LsV;Lm#v?&jsccm0N=^*+btd&6pBTLSJ3d8` zIh44ulrL+l78+8M&h+*m?M}ijx*uz%ooEQ5sugw!{Z|cW=)!eWAvPi2Wa8A z)a+p7WUQU-pnsvk5|oEhNqm+Xhr)(o{lwr^+Iu7m>(q^PZ)TEXJi#L5PhAS>R$kN)gh}I5SJ0&7#LWqf z+_+ACB2Hp(U}s~KyA+x&v55|J={(jM=SY&Cr!p4DXC>9gm@9@Q1_zzbM(^F(SD(+; z(p{HcROT9*yfWkmjAiV8c~bB)Y=7;4lkdR0%@vmi`%-4GGbnBn?+ji!tgG^i z_8Ybee-X!6#hCdQ*)dg8ForJNp!yVF>ry|C#E^6(;qRedUhk~$NkBR8lU+*sAH8ns z|C^(UdS!r*k4ugne1XviXLSk^=M;YkUWeF2r0-p3NRaLh7F&r(opPV=;dRo(6m;N7 zB_MWn>PBa<|M?1r$uGfJ>UC;r5UE5}4B1!nOOi7<;C$)f@{5)pp(!anQd3fNlrwnM z`J&&KU$p3GO-a$4G$lpHID-Sv7yW_!qD7N6B}K<-N{Wtif}1-dTyWg^=tg9^^CfHh z%*=YuRA&99C%67N4uZ)P=7P8d!7Ec3SP9w8i5Z#QBOn+SH|51>{_x$f7kghO?Asq^ ey%3SmBW30k@*={9y=3f1f)Q)#BY7E%W&K}zD}vVm literal 0 HcmV?d00001 diff --git a/app/static/scripts/pc-utils.js b/app/static/scripts/pc-utils.js index f3dd880..fbb1341 100644 --- a/app/static/scripts/pc-utils.js +++ b/app/static/scripts/pc-utils.js @@ -12,9 +12,42 @@ function getCookie(name) { return unescape( document.cookie.substring( debut+name.length+1, end ) ); } -function close_important(element) { +/* + Flash messages +*/ +function flash_add(type, message) { + template = `

+ + {{ icon }} + + + {{ message }} + + +
`; + paths = { + 'error': '', + 'warning': '', + 'ok': '', + 'info': '' + }; + var top = (document.getElementsByClassName('flash').length + 1) * 70 - 45; + template = template.replace("{{ category }}", type); + template = template.replace("{{ top }}", top); + template = template.replace("{{ icon }}", paths[type]); + template = template.replace("{{ message }}", message); + document.body.innerHTML += template; +} +function flash_close(element) { element.style.opacity = 0; - setTimeout(function(){ element.parentNode.removeChild(element); }, 200); + setTimeout(function(){ + var parent = element.parentNode; + parent.removeChild(element); + var childs = parent.getElementsByClassName('flash'); + for(var i = 0; i < childs.length; i++) { + childs[i].style.top = ((i + 1) * 70 - 45) + 'px'; + } + }, 200); } /* diff --git a/app/templates/base/alerts.html b/app/templates/base/alerts.html deleted file mode 100644 index 276cab1..0000000 --- a/app/templates/base/alerts.html +++ /dev/null @@ -1,15 +0,0 @@ -{% with messages = get_flashed_messages(with_categories=true) %} - {% if messages %} - {% for category, message in messages %} -
- - - - - {{ message }} - - -
- {% endfor %} - {% endif %} -{% endwith %} diff --git a/app/templates/base/base.html b/app/templates/base/base.html index fb755d1..aedf74f 100644 --- a/app/templates/base/base.html +++ b/app/templates/base/base.html @@ -9,7 +9,7 @@ {% include "base/footer.html" %} - {% include "base/alerts.html" %} + {% include "base/flash.html" %} {% include "base/scripts.html" %} diff --git a/app/templates/base/flash.html b/app/templates/base/flash.html new file mode 100644 index 0000000..795fd74 --- /dev/null +++ b/app/templates/base/flash.html @@ -0,0 +1,18 @@ +{% with messages = get_flashed_messages(with_categories=true) %} + {% if messages %} + {% for category, message in messages %} +
+ + {% if category=="error" %}{% endif %} + {% if category=="warning" %}{% endif %} + {% if category=="ok" %}{% endif %} + {% if category=="info" %}{% endif %} + + + {{ message }} + + +
+ {% endfor %} + {% endif %} +{% endwith %} diff --git a/app/templates/base/head.html b/app/templates/base/head.html index 17f728c..0b24d3b 100644 --- a/app/templates/base/head.html +++ b/app/templates/base/head.html @@ -6,7 +6,10 @@ + + + diff --git a/app/templates/base/navbar/account.html b/app/templates/base/navbar/account.html index 529a9bc..6758b89 100644 --- a/app/templates/base/navbar/account.html +++ b/app/templates/base/navbar/account.html @@ -55,7 +55,7 @@ {{ form.username(size=32, placeholder="Identifiant") }} {{ form.password(size=32, placeholder="Mot de passe") }} -
{{ form.submit() }}
+
{{ form.submit(class_="bg-green") }}
{{ form.remember_me.label }} {{ form.remember_me() }}

diff --git a/app/templates/register.html b/app/templates/register.html index bda7bc7..846b7dc 100644 --- a/app/templates/register.html +++ b/app/templates/register.html @@ -2,7 +2,7 @@ {% block content %}
-
+

Inscription :

@@ -35,7 +35,22 @@ {{ error }} {% endfor %}
-
{{ form2.submit() }}
+
+ {{ form2.guidelines.label }} + {{ form2.guidelines() }} + {% for error in form2.guidelines.errors %} + {{ error }} + {% endfor %} +
+
+ {{ form2.newsletter.label }} + {{ form2.newsletter() }} +
{{ form2.newsletter.description }}
+ {% for error in form2.newsletter.errors %} + {{ error }} + {% endfor %} +
+
{{ form2.submit(class_="bg-green") }}