From c0bbfef68da6be07e6b8b3755b1a513673e55068 Mon Sep 17 00:00:00 2001 From: degerahmet Date: Mon, 24 Mar 2025 20:10:13 -0700 Subject: [PATCH] Fix Read the Docs build failure --- _build/.buildinfo | 4 + _build/.doctrees/api.doctree | Bin 0 -> 2314460 bytes _build/.doctrees/appcontext.doctree | Bin 0 -> 27476 bytes _build/.doctrees/async-await.doctree | Bin 0 -> 20252 bytes _build/.doctrees/blueprints.doctree | Bin 0 -> 45691 bytes _build/.doctrees/changes.doctree | Bin 0 -> 445815 bytes _build/.doctrees/cli.doctree | Bin 0 -> 75517 bytes _build/.doctrees/config.doctree | Bin 0 -> 142074 bytes _build/.doctrees/contributing.doctree | Bin 0 -> 3812 bytes _build/.doctrees/debugging.doctree | Bin 0 -> 15022 bytes .../.doctrees/deploying/apache-httpd.doctree | Bin 0 -> 12038 bytes _build/.doctrees/deploying/asgi.doctree | Bin 0 -> 5311 bytes _build/.doctrees/deploying/eventlet.doctree | Bin 0 -> 12352 bytes _build/.doctrees/deploying/gevent.doctree | Bin 0 -> 12748 bytes _build/.doctrees/deploying/gunicorn.doctree | Bin 0 -> 17409 bytes _build/.doctrees/deploying/index.doctree | Bin 0 -> 13988 bytes _build/.doctrees/deploying/mod_wsgi.doctree | Bin 0 -> 13891 bytes _build/.doctrees/deploying/nginx.doctree | Bin 0 -> 11342 bytes _build/.doctrees/deploying/proxy_fix.doctree | Bin 0 -> 6235 bytes _build/.doctrees/deploying/uwsgi.doctree | Bin 0 -> 19418 bytes _build/.doctrees/deploying/waitress.doctree | Bin 0 -> 12430 bytes _build/.doctrees/design.doctree | Bin 0 -> 31951 bytes _build/.doctrees/environment.pickle | Bin 0 -> 4412379 bytes _build/.doctrees/errorhandling.doctree | Bin 0 -> 63739 bytes _build/.doctrees/extensiondev.doctree | Bin 0 -> 52772 bytes _build/.doctrees/extensions.doctree | Bin 0 -> 7814 bytes _build/.doctrees/index.doctree | Bin 0 -> 10461 bytes _build/.doctrees/installation.doctree | Bin 0 -> 22108 bytes _build/.doctrees/license.doctree | Bin 0 -> 5717 bytes _build/.doctrees/lifecycle.doctree | Bin 0 -> 46877 bytes _build/.doctrees/logging.doctree | Bin 0 -> 22000 bytes _build/.doctrees/patterns/appdispatch.doctree | Bin 0 -> 19140 bytes .../.doctrees/patterns/appfactories.doctree | Bin 0 -> 17612 bytes _build/.doctrees/patterns/caching.doctree | Bin 0 -> 4256 bytes _build/.doctrees/patterns/celery.doctree | Bin 0 -> 28395 bytes .../patterns/deferredcallbacks.doctree | Bin 0 -> 7990 bytes _build/.doctrees/patterns/favicon.doctree | Bin 0 -> 8937 bytes _build/.doctrees/patterns/fileuploads.doctree | Bin 0 -> 27429 bytes _build/.doctrees/patterns/flashing.doctree | Bin 0 -> 15861 bytes _build/.doctrees/patterns/index.doctree | Bin 0 -> 4748 bytes _build/.doctrees/patterns/javascript.doctree | Bin 0 -> 31284 bytes _build/.doctrees/patterns/jquery.doctree | Bin 0 -> 3061 bytes _build/.doctrees/patterns/lazyloading.doctree | Bin 0 -> 13246 bytes .../patterns/methodoverrides.doctree | Bin 0 -> 5891 bytes _build/.doctrees/patterns/mongoengine.doctree | Bin 0 -> 13334 bytes _build/.doctrees/patterns/packages.doctree | Bin 0 -> 18030 bytes .../patterns/requestchecksum.doctree | Bin 0 -> 6899 bytes .../patterns/singlepageapplications.doctree | Bin 0 -> 4147 bytes _build/.doctrees/patterns/sqlalchemy.doctree | Bin 0 -> 25637 bytes _build/.doctrees/patterns/sqlite3.doctree | Bin 0 -> 17214 bytes _build/.doctrees/patterns/streaming.doctree | Bin 0 -> 12219 bytes _build/.doctrees/patterns/subclassing.doctree | Bin 0 -> 4498 bytes .../patterns/templateinheritance.doctree | Bin 0 -> 8531 bytes .../.doctrees/patterns/urlprocessors.doctree | Bin 0 -> 15556 bytes .../.doctrees/patterns/viewdecorators.doctree | Bin 0 -> 21981 bytes _build/.doctrees/patterns/wtforms.doctree | Bin 0 -> 19363 bytes _build/.doctrees/quickstart.doctree | Bin 0 -> 133167 bytes _build/.doctrees/reqcontext.doctree | Bin 0 -> 43577 bytes _build/.doctrees/server.doctree | Bin 0 -> 17555 bytes _build/.doctrees/shell.doctree | Bin 0 -> 17785 bytes _build/.doctrees/signals.doctree | Bin 0 -> 26659 bytes _build/.doctrees/templating.doctree | Bin 0 -> 39300 bytes _build/.doctrees/testing.doctree | Bin 0 -> 41057 bytes _build/.doctrees/tutorial/blog.doctree | Bin 0 -> 40543 bytes _build/.doctrees/tutorial/database.doctree | Bin 0 -> 29278 bytes _build/.doctrees/tutorial/deploy.doctree | Bin 0 -> 16383 bytes _build/.doctrees/tutorial/factory.doctree | Bin 0 -> 28426 bytes _build/.doctrees/tutorial/index.doctree | Bin 0 -> 9182 bytes _build/.doctrees/tutorial/install.doctree | Bin 0 -> 13549 bytes _build/.doctrees/tutorial/layout.doctree | Bin 0 -> 12669 bytes _build/.doctrees/tutorial/next.doctree | Bin 0 -> 9729 bytes _build/.doctrees/tutorial/static.doctree | Bin 0 -> 12733 bytes _build/.doctrees/tutorial/templates.doctree | Bin 0 -> 27181 bytes _build/.doctrees/tutorial/tests.doctree | Bin 0 -> 63338 bytes _build/.doctrees/tutorial/views.doctree | Bin 0 -> 48416 bytes _build/.doctrees/views.doctree | Bin 0 -> 41083 bytes _build/.doctrees/web-security.doctree | Bin 0 -> 51552 bytes _build/404/index.html | 82 + _build/_images/debugger.png | Bin 0 -> 207889 bytes _build/_images/flask-horizontal.png | Bin 0 -> 24796 bytes _build/_images/flaskr_edit.png | Bin 0 -> 13259 bytes _build/_images/flaskr_index.png | Bin 0 -> 11675 bytes _build/_images/flaskr_login.png | Bin 0 -> 7455 bytes _build/_images/pycharm-run-config.png | Bin 0 -> 99654 bytes _build/_sources/api.rst.txt | 717 ++ _build/_sources/appcontext.rst.txt | 147 + _build/_sources/async-await.rst.txt | 125 + _build/_sources/blueprints.rst.txt | 315 + _build/_sources/changes.rst.txt | 4 + _build/_sources/cli.rst.txt | 556 + _build/_sources/config.rst.txt | 836 ++ _build/_sources/contributing.rst.txt | 8 + _build/_sources/debugging.rst.txt | 99 + .../_sources/deploying/apache-httpd.rst.txt | 66 + _build/_sources/deploying/asgi.rst.txt | 27 + _build/_sources/deploying/eventlet.rst.txt | 80 + _build/_sources/deploying/gevent.rst.txt | 80 + _build/_sources/deploying/gunicorn.rst.txt | 130 + _build/_sources/deploying/index.rst.txt | 79 + _build/_sources/deploying/mod_wsgi.rst.txt | 94 + _build/_sources/deploying/nginx.rst.txt | 69 + _build/_sources/deploying/proxy_fix.rst.txt | 33 + _build/_sources/deploying/uwsgi.rst.txt | 145 + _build/_sources/deploying/waitress.rst.txt | 75 + _build/_sources/design.rst.txt | 228 + _build/_sources/errorhandling.rst.txt | 523 + _build/_sources/extensiondev.rst.txt | 304 + _build/_sources/extensions.rst.txt | 48 + _build/_sources/index.rst.txt | 88 + _build/_sources/installation.rst.txt | 144 + _build/_sources/license.rst.txt | 5 + _build/_sources/lifecycle.rst.txt | 168 + _build/_sources/logging.rst.txt | 183 + _build/_sources/patterns/appdispatch.rst.txt | 189 + _build/_sources/patterns/appfactories.rst.txt | 118 + _build/_sources/patterns/caching.rst.txt | 16 + _build/_sources/patterns/celery.rst.txt | 242 + .../patterns/deferredcallbacks.rst.txt | 44 + _build/_sources/patterns/favicon.rst.txt | 53 + _build/_sources/patterns/fileuploads.rst.txt | 182 + _build/_sources/patterns/flashing.rst.txt | 148 + _build/_sources/patterns/index.rst.txt | 40 + _build/_sources/patterns/javascript.rst.txt | 259 + _build/_sources/patterns/jquery.rst.txt | 6 + _build/_sources/patterns/lazyloading.rst.txt | 109 + .../_sources/patterns/methodoverrides.rst.txt | 42 + _build/_sources/patterns/mongoengine.rst.txt | 103 + _build/_sources/patterns/packages.rst.txt | 133 + .../_sources/patterns/requestchecksum.rst.txt | 55 + .../patterns/singlepageapplications.rst.txt | 24 + _build/_sources/patterns/sqlalchemy.rst.txt | 214 + _build/_sources/patterns/sqlite3.rst.txt | 147 + _build/_sources/patterns/streaming.rst.txt | 85 + _build/_sources/patterns/subclassing.rst.txt | 17 + .../patterns/templateinheritance.rst.txt | 68 + .../_sources/patterns/urlprocessors.rst.txt | 126 + .../_sources/patterns/viewdecorators.rst.txt | 171 + _build/_sources/patterns/wtforms.rst.txt | 126 + _build/_sources/quickstart.rst.txt | 907 ++ _build/_sources/reqcontext.rst.txt | 243 + _build/_sources/server.rst.txt | 115 + _build/_sources/shell.rst.txt | 100 + _build/_sources/signals.rst.txt | 167 + _build/_sources/templating.rst.txt | 229 + _build/_sources/testing.rst.txt | 319 + _build/_sources/tutorial/blog.rst.txt | 336 + _build/_sources/tutorial/database.rst.txt | 219 + _build/_sources/tutorial/deploy.rst.txt | 111 + _build/_sources/tutorial/factory.rst.txt | 162 + _build/_sources/tutorial/index.rst.txt | 64 + _build/_sources/tutorial/install.rst.txt | 89 + _build/_sources/tutorial/layout.rst.txt | 110 + _build/_sources/tutorial/next.rst.txt | 38 + _build/_sources/tutorial/static.rst.txt | 72 + _build/_sources/tutorial/templates.rst.txt | 187 + _build/_sources/tutorial/tests.rst.txt | 559 + _build/_sources/tutorial/views.rst.txt | 305 + _build/_sources/views.rst.txt | 324 + _build/_sources/web-security.rst.txt | 308 + _build/_static/basic.css | 914 ++ _build/_static/debugger.png | Bin 0 -> 207889 bytes _build/_static/describe_version.js | 198 + _build/_static/doctools.js | 149 + _build/_static/documentation_options.js | 13 + _build/_static/file.png | Bin 0 -> 286 bytes _build/_static/flask-horizontal.png | Bin 0 -> 24796 bytes _build/_static/flask-vertical.png | Bin 0 -> 16021 bytes _build/_static/flask.css | 15 + _build/_static/language_data.js | 191 + _build/_static/minus.png | Bin 0 -> 90 bytes _build/_static/plus.png | Bin 0 -> 90 bytes _build/_static/pocoo.css | 515 + _build/_static/pycharm-run-config.png | Bin 0 -> 99654 bytes _build/_static/pygments.css | 84 + _build/_static/searchtools.js | 632 ++ _build/_static/shortcut-icon.png | Bin 0 -> 4027 bytes _build/_static/sphinx_highlight.js | 154 + _build/_static/tabs.css | 89 + _build/_static/tabs.js | 145 + _build/api/index.html | 9831 +++++++++++++++++ _build/appcontext/index.html | 228 + _build/async-await/index.html | 204 + _build/blueprints/index.html | 397 + _build/changes/index.html | 1711 +++ _build/cli/index.html | 550 + _build/config/index.html | 930 ++ _build/contributing/index.html | 95 + _build/debugging/index.html | 178 + _build/deploying/apache-httpd/index.html | 158 + _build/deploying/asgi/index.html | 117 + _build/deploying/eventlet/index.html | 167 + _build/deploying/gevent/index.html | 166 + _build/deploying/gunicorn/index.html | 207 + _build/deploying/index.html | 171 + _build/deploying/mod_wsgi/index.html | 181 + _build/deploying/nginx/index.html | 162 + _build/deploying/proxy_fix/index.html | 121 + _build/deploying/uwsgi/index.html | 220 + _build/deploying/waitress/index.html | 164 + _build/design/index.html | 298 + _build/errorhandling/index.html | 552 + _build/extensiondev/index.html | 364 + _build/extensions/index.html | 139 + _build/genindex/index.html | 1550 +++ _build/index.html | 470 + _build/installation/index.html | 208 + _build/license/index.html | 122 + _build/lifecycle/index.html | 257 + _build/logging/index.html | 275 + _build/objects.inv | Bin 0 -> 5779 bytes _build/patterns/appdispatch/index.html | 272 + _build/patterns/appfactories/index.html | 213 + _build/patterns/caching/index.html | 105 + _build/patterns/celery/index.html | 301 + _build/patterns/deferredcallbacks/index.html | 134 + _build/patterns/favicon/index.html | 150 + _build/patterns/fileuploads/index.html | 273 + _build/patterns/flashing/index.html | 243 + _build/patterns/index.html | 222 + _build/patterns/javascript/index.html | 314 + _build/patterns/jquery/index.html | 82 + _build/patterns/lazyloading/index.html | 207 + _build/patterns/methodoverrides/index.html | 134 + _build/patterns/mongoengine/index.html | 197 + _build/patterns/packages/index.html | 226 + _build/patterns/requestchecksum/index.html | 146 + .../singlepageapplications/index.html | 117 + _build/patterns/sqlalchemy/index.html | 301 + _build/patterns/sqlite3/index.html | 244 + _build/patterns/streaming/index.html | 176 + _build/patterns/subclassing/index.html | 109 + .../patterns/templateinheritance/index.html | 162 + _build/patterns/urlprocessors/index.html | 227 + _build/patterns/viewdecorators/index.html | 269 + _build/patterns/wtforms/index.html | 214 + _build/py-modindex/index.html | 109 + _build/quickstart/index.html | 940 ++ _build/reqcontext/index.html | 312 + _build/search/index.html | 101 + _build/searchindex.js | 1 + _build/server/index.html | 190 + _build/shell/index.html | 192 + _build/signals/index.html | 250 + _build/templating/index.html | 319 + _build/testing/index.html | 373 + _build/tutorial/blog/index.html | 422 + _build/tutorial/database/index.html | 296 + _build/tutorial/deploy/index.html | 191 + _build/tutorial/factory/index.html | 249 + _build/tutorial/index.html | 134 + _build/tutorial/install/index.html | 178 + _build/tutorial/layout/index.html | 193 + _build/tutorial/next/index.html | 124 + _build/tutorial/static/index.html | 152 + _build/tutorial/templates/index.html | 268 + _build/tutorial/tests/index.html | 622 ++ _build/tutorial/views/index.html | 383 + _build/views/index.html | 416 + _build/web-security/index.html | 381 + 259 files changed, 48269 insertions(+) create mode 100644 _build/.buildinfo create mode 100644 _build/.doctrees/api.doctree create mode 100644 _build/.doctrees/appcontext.doctree create mode 100644 _build/.doctrees/async-await.doctree create mode 100644 _build/.doctrees/blueprints.doctree create mode 100644 _build/.doctrees/changes.doctree create mode 100644 _build/.doctrees/cli.doctree create mode 100644 _build/.doctrees/config.doctree create mode 100644 _build/.doctrees/contributing.doctree create mode 100644 _build/.doctrees/debugging.doctree create mode 100644 _build/.doctrees/deploying/apache-httpd.doctree create mode 100644 _build/.doctrees/deploying/asgi.doctree create mode 100644 _build/.doctrees/deploying/eventlet.doctree create mode 100644 _build/.doctrees/deploying/gevent.doctree create mode 100644 _build/.doctrees/deploying/gunicorn.doctree create mode 100644 _build/.doctrees/deploying/index.doctree create mode 100644 _build/.doctrees/deploying/mod_wsgi.doctree create mode 100644 _build/.doctrees/deploying/nginx.doctree create mode 100644 _build/.doctrees/deploying/proxy_fix.doctree create mode 100644 _build/.doctrees/deploying/uwsgi.doctree create mode 100644 _build/.doctrees/deploying/waitress.doctree create mode 100644 _build/.doctrees/design.doctree create mode 100644 _build/.doctrees/environment.pickle create mode 100644 _build/.doctrees/errorhandling.doctree create mode 100644 _build/.doctrees/extensiondev.doctree create mode 100644 _build/.doctrees/extensions.doctree create mode 100644 _build/.doctrees/index.doctree create mode 100644 _build/.doctrees/installation.doctree create mode 100644 _build/.doctrees/license.doctree create mode 100644 _build/.doctrees/lifecycle.doctree create mode 100644 _build/.doctrees/logging.doctree create mode 100644 _build/.doctrees/patterns/appdispatch.doctree create mode 100644 _build/.doctrees/patterns/appfactories.doctree create mode 100644 _build/.doctrees/patterns/caching.doctree create mode 100644 _build/.doctrees/patterns/celery.doctree create mode 100644 _build/.doctrees/patterns/deferredcallbacks.doctree create mode 100644 _build/.doctrees/patterns/favicon.doctree create mode 100644 _build/.doctrees/patterns/fileuploads.doctree create mode 100644 _build/.doctrees/patterns/flashing.doctree create mode 100644 _build/.doctrees/patterns/index.doctree create mode 100644 _build/.doctrees/patterns/javascript.doctree create mode 100644 _build/.doctrees/patterns/jquery.doctree create mode 100644 _build/.doctrees/patterns/lazyloading.doctree create mode 100644 _build/.doctrees/patterns/methodoverrides.doctree create mode 100644 _build/.doctrees/patterns/mongoengine.doctree create mode 100644 _build/.doctrees/patterns/packages.doctree create mode 100644 _build/.doctrees/patterns/requestchecksum.doctree create mode 100644 _build/.doctrees/patterns/singlepageapplications.doctree create mode 100644 _build/.doctrees/patterns/sqlalchemy.doctree create mode 100644 _build/.doctrees/patterns/sqlite3.doctree create mode 100644 _build/.doctrees/patterns/streaming.doctree create mode 100644 _build/.doctrees/patterns/subclassing.doctree create mode 100644 _build/.doctrees/patterns/templateinheritance.doctree create mode 100644 _build/.doctrees/patterns/urlprocessors.doctree create mode 100644 _build/.doctrees/patterns/viewdecorators.doctree create mode 100644 _build/.doctrees/patterns/wtforms.doctree create mode 100644 _build/.doctrees/quickstart.doctree create mode 100644 _build/.doctrees/reqcontext.doctree create mode 100644 _build/.doctrees/server.doctree create mode 100644 _build/.doctrees/shell.doctree create mode 100644 _build/.doctrees/signals.doctree create mode 100644 _build/.doctrees/templating.doctree create mode 100644 _build/.doctrees/testing.doctree create mode 100644 _build/.doctrees/tutorial/blog.doctree create mode 100644 _build/.doctrees/tutorial/database.doctree create mode 100644 _build/.doctrees/tutorial/deploy.doctree create mode 100644 _build/.doctrees/tutorial/factory.doctree create mode 100644 _build/.doctrees/tutorial/index.doctree create mode 100644 _build/.doctrees/tutorial/install.doctree create mode 100644 _build/.doctrees/tutorial/layout.doctree create mode 100644 _build/.doctrees/tutorial/next.doctree create mode 100644 _build/.doctrees/tutorial/static.doctree create mode 100644 _build/.doctrees/tutorial/templates.doctree create mode 100644 _build/.doctrees/tutorial/tests.doctree create mode 100644 _build/.doctrees/tutorial/views.doctree create mode 100644 _build/.doctrees/views.doctree create mode 100644 _build/.doctrees/web-security.doctree create mode 100644 _build/404/index.html create mode 100644 _build/_images/debugger.png create mode 100644 _build/_images/flask-horizontal.png create mode 100644 _build/_images/flaskr_edit.png create mode 100644 _build/_images/flaskr_index.png create mode 100644 _build/_images/flaskr_login.png create mode 100644 _build/_images/pycharm-run-config.png create mode 100644 _build/_sources/api.rst.txt create mode 100644 _build/_sources/appcontext.rst.txt create mode 100644 _build/_sources/async-await.rst.txt create mode 100644 _build/_sources/blueprints.rst.txt create mode 100644 _build/_sources/changes.rst.txt create mode 100644 _build/_sources/cli.rst.txt create mode 100644 _build/_sources/config.rst.txt create mode 100644 _build/_sources/contributing.rst.txt create mode 100644 _build/_sources/debugging.rst.txt create mode 100644 _build/_sources/deploying/apache-httpd.rst.txt create mode 100644 _build/_sources/deploying/asgi.rst.txt create mode 100644 _build/_sources/deploying/eventlet.rst.txt create mode 100644 _build/_sources/deploying/gevent.rst.txt create mode 100644 _build/_sources/deploying/gunicorn.rst.txt create mode 100644 _build/_sources/deploying/index.rst.txt create mode 100644 _build/_sources/deploying/mod_wsgi.rst.txt create mode 100644 _build/_sources/deploying/nginx.rst.txt create mode 100644 _build/_sources/deploying/proxy_fix.rst.txt create mode 100644 _build/_sources/deploying/uwsgi.rst.txt create mode 100644 _build/_sources/deploying/waitress.rst.txt create mode 100644 _build/_sources/design.rst.txt create mode 100644 _build/_sources/errorhandling.rst.txt create mode 100644 _build/_sources/extensiondev.rst.txt create mode 100644 _build/_sources/extensions.rst.txt create mode 100644 _build/_sources/index.rst.txt create mode 100644 _build/_sources/installation.rst.txt create mode 100644 _build/_sources/license.rst.txt create mode 100644 _build/_sources/lifecycle.rst.txt create mode 100644 _build/_sources/logging.rst.txt create mode 100644 _build/_sources/patterns/appdispatch.rst.txt create mode 100644 _build/_sources/patterns/appfactories.rst.txt create mode 100644 _build/_sources/patterns/caching.rst.txt create mode 100644 _build/_sources/patterns/celery.rst.txt create mode 100644 _build/_sources/patterns/deferredcallbacks.rst.txt create mode 100644 _build/_sources/patterns/favicon.rst.txt create mode 100644 _build/_sources/patterns/fileuploads.rst.txt create mode 100644 _build/_sources/patterns/flashing.rst.txt create mode 100644 _build/_sources/patterns/index.rst.txt create mode 100644 _build/_sources/patterns/javascript.rst.txt create mode 100644 _build/_sources/patterns/jquery.rst.txt create mode 100644 _build/_sources/patterns/lazyloading.rst.txt create mode 100644 _build/_sources/patterns/methodoverrides.rst.txt create mode 100644 _build/_sources/patterns/mongoengine.rst.txt create mode 100644 _build/_sources/patterns/packages.rst.txt create mode 100644 _build/_sources/patterns/requestchecksum.rst.txt create mode 100644 _build/_sources/patterns/singlepageapplications.rst.txt create mode 100644 _build/_sources/patterns/sqlalchemy.rst.txt create mode 100644 _build/_sources/patterns/sqlite3.rst.txt create mode 100644 _build/_sources/patterns/streaming.rst.txt create mode 100644 _build/_sources/patterns/subclassing.rst.txt create mode 100644 _build/_sources/patterns/templateinheritance.rst.txt create mode 100644 _build/_sources/patterns/urlprocessors.rst.txt create mode 100644 _build/_sources/patterns/viewdecorators.rst.txt create mode 100644 _build/_sources/patterns/wtforms.rst.txt create mode 100644 _build/_sources/quickstart.rst.txt create mode 100644 _build/_sources/reqcontext.rst.txt create mode 100644 _build/_sources/server.rst.txt create mode 100644 _build/_sources/shell.rst.txt create mode 100644 _build/_sources/signals.rst.txt create mode 100644 _build/_sources/templating.rst.txt create mode 100644 _build/_sources/testing.rst.txt create mode 100644 _build/_sources/tutorial/blog.rst.txt create mode 100644 _build/_sources/tutorial/database.rst.txt create mode 100644 _build/_sources/tutorial/deploy.rst.txt create mode 100644 _build/_sources/tutorial/factory.rst.txt create mode 100644 _build/_sources/tutorial/index.rst.txt create mode 100644 _build/_sources/tutorial/install.rst.txt create mode 100644 _build/_sources/tutorial/layout.rst.txt create mode 100644 _build/_sources/tutorial/next.rst.txt create mode 100644 _build/_sources/tutorial/static.rst.txt create mode 100644 _build/_sources/tutorial/templates.rst.txt create mode 100644 _build/_sources/tutorial/tests.rst.txt create mode 100644 _build/_sources/tutorial/views.rst.txt create mode 100644 _build/_sources/views.rst.txt create mode 100644 _build/_sources/web-security.rst.txt create mode 100644 _build/_static/basic.css create mode 100644 _build/_static/debugger.png create mode 100644 _build/_static/describe_version.js create mode 100644 _build/_static/doctools.js create mode 100644 _build/_static/documentation_options.js create mode 100644 _build/_static/file.png create mode 100644 _build/_static/flask-horizontal.png create mode 100644 _build/_static/flask-vertical.png create mode 100644 _build/_static/flask.css create mode 100644 _build/_static/language_data.js create mode 100644 _build/_static/minus.png create mode 100644 _build/_static/plus.png create mode 100644 _build/_static/pocoo.css create mode 100644 _build/_static/pycharm-run-config.png create mode 100644 _build/_static/pygments.css create mode 100644 _build/_static/searchtools.js create mode 100644 _build/_static/shortcut-icon.png create mode 100644 _build/_static/sphinx_highlight.js create mode 100644 _build/_static/tabs.css create mode 100644 _build/_static/tabs.js create mode 100644 _build/api/index.html create mode 100644 _build/appcontext/index.html create mode 100644 _build/async-await/index.html create mode 100644 _build/blueprints/index.html create mode 100644 _build/changes/index.html create mode 100644 _build/cli/index.html create mode 100644 _build/config/index.html create mode 100644 _build/contributing/index.html create mode 100644 _build/debugging/index.html create mode 100644 _build/deploying/apache-httpd/index.html create mode 100644 _build/deploying/asgi/index.html create mode 100644 _build/deploying/eventlet/index.html create mode 100644 _build/deploying/gevent/index.html create mode 100644 _build/deploying/gunicorn/index.html create mode 100644 _build/deploying/index.html create mode 100644 _build/deploying/mod_wsgi/index.html create mode 100644 _build/deploying/nginx/index.html create mode 100644 _build/deploying/proxy_fix/index.html create mode 100644 _build/deploying/uwsgi/index.html create mode 100644 _build/deploying/waitress/index.html create mode 100644 _build/design/index.html create mode 100644 _build/errorhandling/index.html create mode 100644 _build/extensiondev/index.html create mode 100644 _build/extensions/index.html create mode 100644 _build/genindex/index.html create mode 100644 _build/index.html create mode 100644 _build/installation/index.html create mode 100644 _build/license/index.html create mode 100644 _build/lifecycle/index.html create mode 100644 _build/logging/index.html create mode 100644 _build/objects.inv create mode 100644 _build/patterns/appdispatch/index.html create mode 100644 _build/patterns/appfactories/index.html create mode 100644 _build/patterns/caching/index.html create mode 100644 _build/patterns/celery/index.html create mode 100644 _build/patterns/deferredcallbacks/index.html create mode 100644 _build/patterns/favicon/index.html create mode 100644 _build/patterns/fileuploads/index.html create mode 100644 _build/patterns/flashing/index.html create mode 100644 _build/patterns/index.html create mode 100644 _build/patterns/javascript/index.html create mode 100644 _build/patterns/jquery/index.html create mode 100644 _build/patterns/lazyloading/index.html create mode 100644 _build/patterns/methodoverrides/index.html create mode 100644 _build/patterns/mongoengine/index.html create mode 100644 _build/patterns/packages/index.html create mode 100644 _build/patterns/requestchecksum/index.html create mode 100644 _build/patterns/singlepageapplications/index.html create mode 100644 _build/patterns/sqlalchemy/index.html create mode 100644 _build/patterns/sqlite3/index.html create mode 100644 _build/patterns/streaming/index.html create mode 100644 _build/patterns/subclassing/index.html create mode 100644 _build/patterns/templateinheritance/index.html create mode 100644 _build/patterns/urlprocessors/index.html create mode 100644 _build/patterns/viewdecorators/index.html create mode 100644 _build/patterns/wtforms/index.html create mode 100644 _build/py-modindex/index.html create mode 100644 _build/quickstart/index.html create mode 100644 _build/reqcontext/index.html create mode 100644 _build/search/index.html create mode 100644 _build/searchindex.js create mode 100644 _build/server/index.html create mode 100644 _build/shell/index.html create mode 100644 _build/signals/index.html create mode 100644 _build/templating/index.html create mode 100644 _build/testing/index.html create mode 100644 _build/tutorial/blog/index.html create mode 100644 _build/tutorial/database/index.html create mode 100644 _build/tutorial/deploy/index.html create mode 100644 _build/tutorial/factory/index.html create mode 100644 _build/tutorial/index.html create mode 100644 _build/tutorial/install/index.html create mode 100644 _build/tutorial/layout/index.html create mode 100644 _build/tutorial/next/index.html create mode 100644 _build/tutorial/static/index.html create mode 100644 _build/tutorial/templates/index.html create mode 100644 _build/tutorial/tests/index.html create mode 100644 _build/tutorial/views/index.html create mode 100644 _build/views/index.html create mode 100644 _build/web-security/index.html diff --git a/_build/.buildinfo b/_build/.buildinfo new file mode 100644 index 00000000..e14f39ca --- /dev/null +++ b/_build/.buildinfo @@ -0,0 +1,4 @@ +# Sphinx build info version 1 +# This file records the configuration used when building these files. When it is not found, a full rebuild will be done. +config: 600360abbe6c4808701ab5031e46e0b0 +tags: d77d1c0d9ca2f4c8421862c7c5a0d620 diff --git a/_build/.doctrees/api.doctree b/_build/.doctrees/api.doctree new file mode 100644 index 0000000000000000000000000000000000000000..ba0dc74d3ac5c104d4552c8bb8a399671bf2e827 GIT binary patch literal 2314460 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 z zT6jWau)3e8SHS(G*hKP>ES5AG-X1CU_g9+D>Ml49#rJXfwhPR#&EI=_w-S zltA9&fsA6u{e5UEwEqpn9zO+DH7L-Y#rkob4%3_xI34WRW6Qt7Ew_ki6dExTrU8nV zxdui|qb+njuYLP}(xg_hU^Th_mlF~8|Gbf0`~PE~A@~19{KfYF>{loIe??F3XDd!> zRp7Dg`o3B(#4`6bD)1OkvlUEF^$gnyaJAs~1n!z>Pau#3vd2wol7p~XI|!}@N{-A} zN4N?~m)ZSCZ9zAKf>4*hn&v|f4}I8hFy*TEZkR4-sJiWgQPONn|4$Nd)z_PK4lJ1_ zN?$yZU#!GYS13+hdwb7iqf4Pu$m~f`ejG%3Ns6-8Wg|sWbTR&9E`zo)(I)tqf6GDM zY;bB9-*=2aAI84Jt!?ru61hO=YLwng5*&eKPQ{;TQbyf*X?2fE2c_BS7=rWJc$&%;EEr}vuHiVt=ElKuP+bd(}aMc zi3CnP7qM4&VjXIXY&Ii|tm0#WCAn)cSMlYd;aH1~h5S}*i7(_!?DEDAgd-Z7#O$0a(prhq2w1fxnWWlqV=IAKl#7U>LFEb|xL9-* zs2i-$pJPS48gO{>@urga$A`>^9;}ppK2Rk>OY2fZBQVac05Asqq!sa!Ow^0;xQn1t za8acZ(uYG~mk;dDL)AS+JU@X*7!4M#b#8Jwsc1NAnG`Lk<}zGMT5hEeF)!LSs^a)f zZZ`cDOA(WPAZ!c&&cn8D#b3<%X1_XdzPXw2RLaPqO9p!YpF-?MCxqU`gQOzziWN8U+2W@ijPA3hFcw1FX>W~#~N+z zC+@W50+#F7BSUH2>Gxf!-!G&&mjTwttF?f7?;C==9_S*A8G~RshCKo@UKpv5j8q2T z*>H$&$KvQq17JP`z+a^XNj!K454g)*tPd6|nAcgkn2(G$hoHy3 z<=QA~4AA*~kmjH$F!>hXi0WD(EX+?!+O@^_niwOuJ7+CjEa2pBtifI0uj&Cd5=fL- zLKaLSfzpzTK(COrOd`?KqYi1(SKyR`a(xf_?oNsb!4Rg1&;2qXBwQ`UeQr!g4j#95FI&Mf>VsXpU`&=;p~)UHZ@8I#R}y(`y>qcs6D7SyX3JZTabHMDo-W)tik6lAH;sa zqjWhsIsw|FC!9TqsV5xL=(PS1Y!?TK#Cq>VlU=^PUL7dHBM(hHs#gl%?7^7>W`7K( zTcsakVKGTLe1VO~UVIUvI0(tbScxKQs5uH*b4S@Ufg-FhUq2!1NUJf{*LM;mXJPrw z)yjjDYPh}|Cg>QSwN1S$+&F~JxXBEO8nTkz6 zi8K|a14JxED@i$oe;`fl?}(bC#hU0EGp)EbnW+``aG&Cyww-O4TceFy5l)ie{2SK; zWrpQGo9{)cyKAuj7~on2yV`t}H9L1@5gA?hj`Xl|?MaX*Ydh}i;s46l!wf28s1LlP zva1e}=CId<$p8mwz~>0W&a}ib2D6c^D6ksB_P>U!92CWE88{ANenNZkqdL2uZkbnx z3C||Cs9Z44`S@f6>8QEjuT3dsW;P7t7Cnd!^F2WFF|?jDe__#M8a+D-ik)W~;SvZ? zizukKLsL0-1@DKdo$d+bp5b2Cvd&exs;m4e2Xp06DNg)^M5bx92`NFWi$ zf}O6Nmt0P&8ID;dH47@aJYADkTWLeu(=~}b`zw|rCi}qY8vdQ1uDu+8vC}p7tCQ0; zzRGoSy0#Xtamgf(!I0Kt?2|QG(|@Y=iYYr)GwDl;UnO@HXhm1t>H=CodV1zZy%D<) zMw>2crp*eUqTQ?NwhtOHcJT!5{ffN|Cur}1N+E+tPte|#qO5s>rX?Odgw)w5XyfoP z{|VYM?PM7$#Dh}50BswmXQoQYle6XSM#!m|q#QP?_aGB#PR-tS0h~|mD#Jm9^yS&> zqL|uHS_k$4N}1{NIS>E`6W}cl!;u-Lx$Y?zFKMln2Nyb{zDxnkylVj?prhR!s*es2 z6h=n|%7Ad8t1JE};N)tpI5G^GM--y)K-Z~-?7VrGMQP$8KG*`$3OcJaWYK=I%Xo#s zsu`7ikco*nyiZsPX!uv{Q;^){XM<>XMzFpIZ`TeCuhqWMPIj{IBG!LR-?K82D3FQMpb{Gs6PduzlwD)yxR8lO+YL)3 zw}|# zass;qr9f3n={~MxMZ1bpyabx0>f#?Ef>Ip7O6g~ZtxBno3RfjKp0Ph`wY(=2Cjzk; zXA<=@P1Q0gL*WdFMHkibt^_hAYH@pVIf+`}7-mwtpwdg!LRxjD9cfVux%c;1EOGe< zPzxL%j#@l|zZh!4eszLc@Fk!V)Z%0`L(E6$h5P)Fd-2lY7mTpg7_3p;vs7im3$p; z!C59c$rtRuzl|)WK}Oz8;)xLsVY8@6&5j9~NQ6W^-vm(xJlq&O1C5YCKm`QVNw5XN zf~!1&PDS0x7)}{A$D=ycfxND&qjheXYEp^2x!zK6W7FJTCfrSnDTjx78n(kd%tOu6 zhF5up)t$Nj$aLO)3N#g(WdX19JgA!ayc;#1c$HVdTXXG2Cactk{Fa!Tpu;F*=C91B z+Mq45JqE%32J?vLZQP7qBWqc-61jt}d5MIh6Z=fgy zM;FTwY`=Fegy9UAYr99wyG3XmpPq;+GRTl6ys1G<^=^oFgGcy=;2J$d&jFwak*fH| zR$ahLtZSx#CD;^y@M+2@nSn1711J$kBd(-9n~6lO>eF|ViUU?fb1vE5sE885-k2^P zmqyH5M{O!o>nMUKP94447&^e}q>6#+Dg>H6wuf3Gly;yBPu>)mfV5OCj*t7ueVMzHH1u4h1GZVP{Wku}W%cp^9h5tBD zu+21n^0Bi=b)5tH!@`ta=20F|3;X>IAFiYfC3s z_1fy*k$R)m%RG));&{vpT7{eA704XF!bYe`O+PGM8mRa4*JbfaPOyn2ym+bJd>CEh z4oyE*Ge7pXWo_e|o}RCUfuL)eX@L56fH~uh#O$DW4P%~~|7H?m{v5{NL$BPT z{R94D7LEPt#G)yJa;L+Ej649%L8zYhIW@(V>pcvsw%@XC2wJvSGfCEsMEJ()nig)c z^Y6>rvF}>DzA6;NtzBVD_eE8AGM|!&@n~DS&jDHatzAIc+~WNZnl~(7OuEwQ{Rm1* ztM?t06}Nhy$Db*z-mB5-(IGVVXP}SYesXeRl_cheNl^Y=AnIfwPnaKm`R> zSU;|vIL)ArN@bs=5FXLl5f=m>K{;|oLXk4uWOd?D6Dh?8;;9)rjb-u^P-}uhrZPgJ z1<0-_U6VrBv~jXY4esR`piHFmQxp`NX8vJB5=ACDIV)l5r8(AwHK?a}6(%Ww6>GR&-vc)*V2NwiM;j0)#j>51t2Owuh)WQy zsGa(x^rfxSjY0(O<;Jpv%sO4I<+oqSFO_wY;s)!)8_8##UJJc)>-0MO#jF$i)road z1m(6)>+uY`S02wpHZjWzLHat4HmtJ#*ke}q+o=iYw;qP7KvLpcy`K$s;dy9Jnk4clhsd#zXSU_OGjLmtUY-$7XTagc=+!{C;b^{Vmjg1u1lnn_Tsmu|~x zgObw*BBv!A_!{Y+$0_8Ltggji7dh1RP4X?ZN(ObAwS+_3Xs=Zs@ z>Uz~22o5K;7sw{Q8vHgf9KdE-RE8zuT=}E}yqZU{RFzH2`EAY?AT%PDggwO92bYff z>kzId@nghHj!)GLQOt(LiD53=3ylsPFv$U|&S8={j4C7g`@rNmMJ`Tl$LK}OF@inUmXVRm8w&q=US(_pTTXZ2 z+IgUOS-l1k<*Y2eIkICb%Y+JR?M~)UZH3&ajf=r-3|AV;uiBZ#v-+-*P-f5SKcQ+G z&+3=KE<9UR-ng*Gr*z6=W%eB$IuwOM+c=L7}e+caYcLnoNb>6J#O9Fu14wOfZW?f5(Eo z>|%xz$K6H@WF5gDd$4> zAFX!|gWDv1D#$`thT*HhF7gb6g)B7cCTc9pBU^bw+SbGbz5d`Q1RR# zA8BM}?i1anB~=nb*2_d!8JXxGBh0c9n1|-k(fL zFK_6y7eC-bF>~#(N8d)b(ZQ4^jU5|I-OB7_G#Zfy3~M=G0(H{#PN`2XOM z^yX%G|BZnHH{EnoUmw3F+}FoS!maW>aFZP#fItje##Yl;81TF7kKK6ZFK;0#xd8&N zp-l>O|QOQlh$H_vtU*zWs_qvsG@5Vl)T52ZL4n`tY+_6Z#--k$u&z z7vOOVd_`V@9{7F)5Ld0$DviB$c!kD1cxdX91ttc5@E~|mSpdjuF=uxqd}6@<&YB+P z)%D|34U^o$uTC6N((y;Fj!jgbE}x*MGAa+LW$^eRT%e@AFeCGn5=mlbGo>O8e6b^f z&g)b;2_<1x;4L_=Xp)mzmgDiAju<)8Gdr@-$LEov5C2K3KiLs|tA(Kb)01=+mgHfv zi7ZK8XiRX@;Cy(`CiNjgOlxN|LqVDg)0a5XD?6g*ML5zEW~sDaVKeDpP~|b_XT=H% zE7IQxWr10*k2$v*=acdUJYg`b8xB_LN9WGPR`{`} z|IxWER#&E-%yjyBHZ+y<^z(U8HS_5w?nvy@Pw%61V$A2kn4@%=m7h;XODmKu{nQGD zjXM=;GEXGMh)-shT6DXE+GMS|EaX6p%K}4mL5a&lP`R0eLr~sGzC+NPfn**5`V#!b z4nf(kP7Xm8LAeh>H<@{(SS)Bl9H_{tsm{!LTut~7LQf7Jgu2^GItnH4Jh>aN4nvRd zmV)C@_aC+Ly&TM?H7G7wncA?x{WSbV||<3H~m~QVK~XLxKx71-I+&bE?oV z&BFOiCgsuL4st6r>!t&+&p8Zkh3*NmkYX6zQ-8V7=n?5XJJ@w@rS^B-ZHc;p%`1Xz zrIDyY$=>V-FY04J;sY~BeU^8=en`wtFn?gv&4Xw$vZkl^MR6qn$p zq#3rauNC$t3EXUd#RabEyFRTtB;Ew{5JDRfaokne4Y(eL4%Y_@m2&@(gcU8w6JSG$ zkL^&6?UX1dfRiT5$=ddzoT@&;oCOo+gnl#-X~LX*w*fn~t0#s-GPQ59w9~{Dm-}QP zcRokBL`9l^mDRlI6;sPW&_kq&poaz0UYOhz=;6H`5wwMZTDb;2H7|*v(nB3_vLp^4 z21xUpAPEJ%M%Wyfzc&fO3@B)ef!!#mJO%=pJ9#GzWIXX)b~Hs8`IsdnV-3uZbNRE_ z4u^n3IhX&{>dsX6Od!ywp{bl8&|^?FGYEvX+XjIGIhVzF9|GfzG7iB&_86pACT!fP zOp}SpOeqZX3lME;7@NUBVq6eG)1nJXT*5$d*##JgHc4+3opf`?Ln4ONHQ4(`m?gPML_gh@l^e;LeoAOtkVaOf$#(a$cv5;< z*=aBSJvBw;^lm6R12w=#Qj*x?LX9A}NDCgY#Nlfl6C@nELNip~mtA+X| zVsf9)gjm7jBbcHW(Kz`&@uL%o}TNWq>keu(&8kPG_P!YqZ+_zNS_AQf#%K139fw|LD0CU@g?&ONedP=dM z8IAh|R851%%{?_}Cfp$`ym4bS^rCUg!X4xWFFHlz1P`Wb=LRp<2U!R@kReGWp>byg zyQLOyy4wPV$jwwom=*+Ag~GH7yM{+ABMnS}g`r_am{u_%OiKb)AWcZuIZMQo)S>lpxH&jV?%u8`)d_j-jI^rNoOUXN#Yr} zIC0}cNs!X_RDYwxfQxo*vUBz zZiSwIy16GdH>fFw!9DelW3W@${t^G@s2~-&^*a?69l%mfIlBR)jX@66$k{Yc?p~hN zX)pe5A%&&%0v){^r+^Jh4a3L$uvE&;3&*Ce0*(!AD!4z90M*q{O9E7q1K1wd#e7Z# zsD6+RrGaaMBaq6(%5R#!lvE{ln?lp-iMICbi1W4M>? z6abZi^QCma)LI*u^0eXyrA`ZiQr_m00IAg)kn*-+fl)_>3IY)2{ksOCW}gvK$1n&r zUDa*Bbn-wbFVA+I)0Pwf)KynrdNuAfuOJGP3w&CxWRV$sIs&Su0iR9?cH!~WdE>@n z=>?xo3wMy)SML;j593*b}8_7T_e!5{^>bvu!Q4nQZT zeBE%+!$I!S$k#MW?q2?-(_Z}BJqkMM1vxq#d$d8PU&Hn-Kj@TVgTeu)Z$sY(;N;zh zNU-TYp@syTB;~N({hin=CxT5sO^v#+S32S4O^8E+y!rd;je!EZT{F73QiF#&5s9h{ z;On;dcYF+81uGrI@le-II`hOjeBaXSE(1?Lvzj*@aB6%A@PssZfTu9IDS)R#&J69B zlL+c6@D%1H5qMhO5hr2b$tKNjz9jJUTb$}(uVB`HSB$vQ%B zwxXHPHd(?lR@L^ZaOVyPYBRRSA*khUk_{Z{*;e=FG{}TQodr$h#Gx*Ns+n;pTnua+ zYMGm53PuTiK)eWL&%r47>(BPsq*gX;+^KB;Yrv>oLA|o98H6y>R1zoaJb9OVw?^WO4y0hgfX* z>CANS(}i4Ta)C|{DE>2pPH%;(X+WpH4tC-3(Rt&>8tDa{J{s;Iw~yW_=p=YBy*sy$ z{^cMGK_4kaMG<-^QIq74Ge*kkR}hD z6ec$XoOE|b1a%co3iFZ(Cq2*+Ct*0rCe3fGB%IV1)(PhMenFT4C!L!BClv{zBlh~u zjzgIK!4i?NN~-tqh&$Enb3jL*{Quc|4>-B5`d(bJ`bd_mjqutrvx!Rpsrbu34YG{HXw57ff9)XZN5?cOw2@un3iU|pXKtdAYKnNir zkD5T>|K9g^`Z;sXxp(gDuAJgeBJSR~r~Q7v^Xun#s2A=!T5Eo5IgI|$8OkQ~t{g_6 zMOQf;Mt_E;T|113y}J&hHReK1H<7?Id2$H4+)d=aAJ2t;W+I}_y+rh1#!d7+fVR7w zC4m=m6KT*zAuioSQY^zw#5>97CR%xobQ7(jC*~$%PrbN_0uyrO#$TPZXb~2E?1iqxmNTucXX{+D_~E#RHsy5&LIgA>5+#2UWBiGJvUXJY%U-tzp}XV3OcEaL`$ z-^8i%MSI=8>PT&hR3B0CyLdyXSyGN7|F7Cn^aMb`1gFi?O!(2Fq=3YGUf#a>y zQ{Xf(QL`t|H_?*V_Q16l(OJ#G;$}A4&Aa-G*N&DOBSVeK_)ufIG=hu8)hETxyLNG# zq7UvmL5>>gH!B#51-wv=v$!a6hbP_QE~kZqC%=JB!?X_BJH*6?X@uOM2547%^!gpG zm!_x7^~S*T%%I1as(x0;xALo6lsBS+zX z=z%^QALvYXp!OM!*7S6(-W+O7mFmrBwrWjq+v6BNS%GiW6w-Nu7hxw`OtJ$}E5y%o zHR^A@pf5)k6d=wXF zbrKC9M8;5^Ut}w^rDBVci4M&mYR$req%_<(S!x^}C_)38Do-7PgIx%f^5Iz9!YPIy!+X z2?5zgu{B*RHHw2wDHA91!F-sdZ%0r) ztI;~dmBQu(h9lH9%FV)HsoAWnQ8?a3FGK9}VHyK{)Kv!@$E1d>_fOs6>zf_a*uI3b z0*hosWck#Roz#)gAH@8OVJ>%uv6VT~kFaujW*b|VZOafp{|UE;wxh3@0B$d@m&c%m z%_g@mfn~Ic{WVppRA-ax(A01w2rZR4@XHTPPgX`M&DrDZgQKN-b@q6206ipZlOLof zw(;+#UWK+US4z{{f%n+;m(Wr--MSRyM8IXPguCXNDh$xZF?eA*{dkahH?4sq^JI(I zjB)RwZw#|EjM5cADN%6{qX!tA><&z2B7)Hpni?2g%Erlq&~x}U_G~cIPvk@H>7EU! zd7q0OErDEHk;DdgpGiPoe)L9j^6l?fdvz@a;Gc?HO z*$(;GjOQZ7c*1M((Ctg8)1VP^+!@j)xbB$Hi_lk2CiGe~HAuDxCUi~^I3Ai^35G;K zXAJ4V`6UER{w|s`lRr&YlYesVa&16xpG$In$E&{NV&h%Aa962bnkwUJxQ5hv%vXAn z|2s+;CMP03e-XyOGEvy6=)dj^ClGLa&tEM z7Wz&e!Zfez3e#&BK$m{sJKf^waQ`A|mBca%L zs8*Zw(o?5zK@e8w4;o|Zo@7%+7!5RYL1Cw%5o1F(h0*J-C~PUMMUoZ&L(goh(_4II zf|fS3nT0eL`X=vKO{?%?h%ca z`?^AlAeg(^N?_2~1VgXqj$o=zZ(%ARzzKpm%w`t;v=@SzM&FqTMuEp77#BL}1hYS7 zF&zXG?J~KV^Qli}U}=~0Pf4c6-1jtrP5jgMX6W@C{;55u6N0NFTxSmF3#13qU)`=1jWUl<)C4~`if>utIt zK0rns|MEIplWi|$!}N^fFvpj1uNjySnq4G+LL}>MVLlmB68h42)g5tw_=)BgG=f!T z6OBK#_4H`}QKI3aq%R?f4iO+4(K)z)Lm~8osrK}M6WuiV5D?X6JcRp0DJ0VFlu0yTtpdtzEth0g?QwhnvCaY}l2$-Lj|fhe7BIQ@6A1E=y9wcra=lubqC_vRpNe4c={_N6Gb= zD`T}fbCS^*WA)lpp@bgrvb>#L_g9>NS8cLfFZK-&%fX~%9uWNv4{s@!n(_n0Sroip?h6vI?DB@+7|}#h&Y6DIjLV71Gh6!-BD}q z=5QL`QaDr|DFL$P+Srn+xGtowkTp3|JXC8{N44wlHIF}B8uH~;&d#$!Ano&FSeNqZ z>=0oX!@SWM#u1Z-2q1-6ghgm>%&0EM2<)-vy=iVp%$RN*Di>uSMhTqrQ^?jB^j$r{ zXlK{tZw%eB-kpg2C?{TjHyed5+@hl7BeXEC#h>bKEMpQMi>}{vW-mwh1)DV(eR+ft zPMF3b(U(6!Q>|FGm(VaikBAvfBZdxMSdnB1EsLvb*n5DFnZIb9qo`tC=ufji8su!^!k!kZCbPx@StU+}5u;M-Ow%EhM9 z8UQ>PXW1SM)h6h|XkQ%Jjz;seGvlYpEo`)LJRPg-pFq~e8%@eP0C7`Ac1U?5mao{a z+O})+n-}U?u4^fs#ZG@Wn)Uu-b6|IM=E3eAAA8h#x^{d#8BL*6q~_{AH9ADVzTuq* z93Sl1wZ`XAd;miu>dx_zdb*o(KO&9~u?E}B^dE+8M3)dXGh>ii0@^Utg6Bs^F(YVQ z0g8>%gY&=(C;!>)*F{&50Z!@U`u6A$ImmSx+nWX&-X9+!FTIL!<{A+^Zy&sL@q@-1 zJ{?`doFL+h(IMi9u=kwbANaS?{^w)~{}LS{z68^55C=&*y*)pV50H_R=H4I3x3sMn znf%4{2WpX;?4sqkQm!k1;D%i>*&cxSS!k5eAGjsjf0StWDCrF7s^}2WB~Vnr@dwhV zrn1umPIS}c5+EwSKhUGfafjgDn5^LtG_*JA5quiHkRCxvEl}RKh<)Jo2pUN=bsRXa zz>5b@7U_!c-^sF!5r-gBcFp^13lnsnrwY@IowjFAM0nGngOTI#Xk~H|em{8G2ob}> z+Iv-5u(1t3{h)(>%bn0pJ#bxin%klkvU`9A@B^ZcR>fwu`Nk#@OFt??lCTU6Wj(S80=9y8CUlsIINM_n~PP>+TcLAp+8hckZ|DPPW!;Fpw|AN6M({xLJH{XS^QN z=d2+6MtmXun56(&7RC1a(f*@4O4cPTda|um*gGu;)?Kw_ZG3=?$ew$}mIEj(yG+Ga zvy|k$gc5gmccs|&#{uFenm#njsMroh`;QV0A0=I}y*WBWfM`VLor*2}(7j^o#fe5| z@&+I(zhWB^aa_S2!=w!b*CWlOqC1W+rJ^gT2a3>}#okU+bpH@atJF+coRvkT5d|)f z3PlyVDg|>@q!xc6Brep~LcLU>gN55!Tvq&npz}0N(aJDzUF5g1xHc4E89J{t5H@ci zDn3KUPSAfKFpQA!jTGM$=vUU-CFvlp&O=4i#E5t$lHp z<$J<>4^gi?%(qg4$r$vQGpNmdy9w_dAu2m$w>P!=NO;i&1voMOOw4=2{7gc)KhYS#7#KRboxJ?XLh5;hCDGU(aNj?MQe=&Gb zl;~ab#0(Jj)QbV4CY0X*nJPWRFKe$hhbGI_@#chUf#CEQYF;#F5HaFKOa`R(-`O^3 zfpDcYR?g(ySg*{e&?QT*)Fn&g?7FF1vQjoOHsU7*RY-#)T?YQ4)56($elbqN#6pv% z((zF>K>MMEv15D)<*JU(K|bC05od6|pY*2vx>}CUf{B}S8WhRjP&cmrg*1<5_cqn{ zqce&sO5a7(EH>4mr`W1ZCL-aTTk=P_jhA4h2HCES_n%R@?y#iTC_UIuS;2E*eER-9 zB*2r!e%cZ3e@-yGD>_6#6^>!pwV!T_50DYXb8kQKHH1a4pOqQ=S2s;Qgzc1HSC5Gf zuB=Z2hK924V^mUGpTeh7TbH~Bddee$S9rDcKJAyj_X8qP6>PFH)tV|+TU5A%H0?t( zblTd~&5^2#%*@dizpk2m&O#F(Kye8qf8xa?G-sChN!ooGDKPy|#jn_Tc}yJ_l5}si zS!vE3tkrI#Q;x%ha=nhcRvLs^1T;pG_l*J+lo%@=-TlRC%^0|f%-0cE5U?p=W)yCu znj}Ry&QV7JrD>7OG>K%-$${d{$el&94z50u{mKsEbjLMGIyDyww2cDB7#`kJLq2b{ zx$QQldJGR2Cjb$EOE#dhrKpclr)<*E8o*br0UA|!{!!%4IL$)mf0hKBayjPm#0&k(slhK2i?0jR;VB<|^k6XOI zy)$Ba_;KwqM4m%Ka5=rs+lWo)bxRk4e(@g_y4#RE&zYAkzPd3_9!5_wjXPqVybMjd zHBV^6yXMIjpLya3g|<~ru<8XI5N$9E>B96K93!cpB7a|Hucn5J-iA?4pNx%p)3791 ziQHs0)qQiuLgsEo|6fllI$N=%x^k8<9+r86r+0EYnGe0zW`jnTpYCbW&pE;DR4e~3 zgVVADetsHtjcEB?Q5U>kWw(Pwpfluu%;Q)ukhpf9y9G+y&AhG?y;oEoLJGAG{ zI}Yx>?$t3bL0ZN|Je zM2OA+R0nptRjLEI&rW3<>^$SJUnflT1ay1uh6*F99XQ5txo-wG zM>F*!evDzQIL0u-F)9x-0GsYX2Ejen3c7&7X`Lmx-h%}khY&OY>y8VzR-GLZY)&9I z0ml!y(Z+x3ppd!hG6TJ^na1daf1uGds(|hF8uG&`F?tzR9Y}gPozcryMladmrKh8N z%S$~^_su6K^>~iK2Um`9&;?Cs@6bo>+W? zJ@pXZ;2_Q&+t@~)YWOaua2j^1R-ZvV^J5()J!B{V(Txl3^eSKL9^xD4?dJk;z~Aru zM>u|65uSi+>T!?vIV~J2^?PS&n5+?wcc=l{#}+Qa;gZCx2q)+m$C*JKA#ct9qh=AG zR*Uj-tmv5}4Upth)Xm()IsQC4qo^1Bi)adVnMx|(j1Cd-g7eNT10)pZ_(8n?j85=5 zk8@-N&x-4#dbxim3GifzbF7Q@KPMQzC^|$A47+iTo$&!OqImA(92^a{L^Sm~GtS}N zzq)DiR*-T2I7eKB@JPo~0YxLy;b&Gd*0CQSLknOI}T^)oo))Rics_Q^m1L8NQFH5?mduenqJ;JUoRPkSmmow4FX-wm-ZohiaoU zEI<(rg2akd2yyEKL5lt$NCA3aH$f1gPa94e5d>kXEtTZnWkwLXhl^or-{6BOl7LCKpTB-A{-}L^#aFH6m?|x?4dDijY(MwKQYy6n~nSJT{_sic^7xs3X{L@7{Rl{@aIc-+TL=`|le% zu5UAs(1VY=qjgo{4;23FrjSTaUU1*FPFBENdFX6 zyc`>!V9rEIM*nyRj;tLI$FrhSDF9c9HwL`F7KL|U->aEs_mZbhR=8}3`MsUc8a!U| z@AfoV@{-T@F6_cf?m{Fp$0J(N953A?s=egdJbY}YDn8owc|`McnZYBBRK|GeL6;n1YtYeU1tXv}mM+@S_&Hy7CdDZtJhjN0?L)}|22m)zG{hpnk4bnord z%TKD*&D?l9pC6r3)ED+_GzBY6^>)58Iz+%1#yhu^%8fv1OcsO-7H}hqRbZ+6% zoUWG}NM@!wkN=51n@==7o7v%E*k4O-ur*lAaBlbL(Om6x?g(vTV;N2zni121^LR8n zmNWMr>td89ka8L;+xW6Vg1I8yQr>0E~DvFGW+snUKk&Nn3huJens?nF4Q7wA7t1 zvxAB(&qiv#_VrP$n;hIn_PzTu-RWyF5b|YSM>FQW%td1I*n-*y|G!;1GVj{G|KNeR z3v*}p4$S{pslE3*G+^nP?e(q$lY`9Tx*Vl`IJa4=T$k)?gNcthgV}7tWHYHw%R}fY zr_*v8O$|Pi&1valH10xamk4*IAXIWe5rmnX$mp)@z=*Y}R}Bvfnv{0dGWNFtp%i zme*DJKHq$7&S&n)Ze5jPjpV8%3W~Xrh(8Her8H*pyDA^UVBA&tcl5+umF(%nxhgME zm)kpcuo+HD=L$C2BIur6s5{N{MA8cBsq1ufllgaq{#+4pR!8Wvy|%&TP`uxvL&L-< z*z_d)L`~@g;ON%H5b4?ly3)c0f^zzWc6**1g-E=ZgK#=P89E=VTaEkHHEmc&zJ?*0AH^=)oO!w~Go-|4iZqKaXd3t>M{#_!#lf~_s zMEjo;3_lbdA_so^)-+dV8{uEnkgJYP*Ql6IsE9J%yCx10t?#Od=AG}! zOaru>T`0WuBU%G@75s*1Y`F?BgMFVReZM95Xo6jHF-O6-OmF3iUG1 zqJb~BP{ErHYd1<$Wp5L7DSI?@XK>!X_3D5dtC;BW?lzUDyK5VlYe{hDdk?49p2ok}=%->+BwL35kh=_;v`)F!jYM?9 z=^=1W#w>x9(chDL!J>wri=xbgNR!co7;PqPBgy>~6A4xCiym$}>qcoGolQ^7K4MQj z*hhk?VLrJJxLtT?vQuR+q?&}Sqy@SS$(Tu+nWSzRFxt$&opc#+ZI(dE zpddRfoQ>_*0BM-4cG7?vV4?1;G9b?F6m2N2GJX^6QoqsL{Z2LK?lVO6dXqb-o4GNS zO3@ib73l}j6gxK6RH{XX2q@CLb4y}{Or>YX`!^Jc1vQnjg6Gxo>H9Z|08bWE>8;WJ z=LEy=jt-Fn!>+0Hd+`A>qIm92C60!$^fgT-@BYDlA9(< zNAMjC=3*5!e5eQ|kZ+JbGx|yeSZ!n24xoMNT#^0bWjY$& zn35)le%LJvk{?iuO}8$!fMTbH zowa)u)!pgrfT$E$ylh~{z)rC)ofaGY&Mw#({S;&x{9P}#aC1yi78zWxS{g3bxEvis zb2|e?7Ee+GOW>`Db;C2Q)(Fs*2$Z74;xYzCx5%PE2&wZ#r7=~Df+8Z*N^%yt_cR+M zOD)Tx&>dJ7SL1im6I0{aQx9sq(3Jl}2${*ANet_HA*43UrxQZ4`y_F1FQqfBPO(`wOIM@9(*$Sn7tOB%ezcB?8s&OJUBMJuHdly0AxR=x)xU_xG(RU_ zwHKE;bUxql1{cJa4V`jWEzbvz30I#8TnsL`ouyZ|Pj$y()MR<;lGjoXJTz30^T9&(u6vy`gl!wUp>$eU zFqHmkbQL4GNGScSXsVU^_EI)ZS}2{+?}pM>%0)79!z1aBCzb$;BBU}m=Xo|=pooV_ z85%_{73f{&3KpVY%GP;5h7hjj7t~s)0Ro5>UMJ4}YWomk|JOwewQ&QM{H;q`axa&)!VtX35 zyziNVc^b6-h=4`@?erPyA-0`9=M2%qcKQ^$%DJ8X6iw%CJ4xyy-#0;&(elMv(4QF< zmqf1HF$l%O@BWeCFA$`^GzR`B`T+Yu(m)tNX=gM4fvw$cZ_42ayZbSk8u-a{Hq*!L zHu>(;F_sN}AhU@COR$i(c)$RRyE!s*8R}AVndIE%`jQ(VC6n_#?=CjpwF`HZ>WEh$ zlBZpk#w*PW&)ye9p9y|i`$ZT7vs*`vHcs?|C4yR$D~yqarmn^Kb5WoAX~YEgvb(w- zF5XeAmbVnQZKJ!o;BRQqWx8BH58VCBLN@a1UurF*S;)7eo3@JNxS~K0X#z(5%I#zV z2#p}Q$(W;79UZlBTUWrikpp838nG>VQnAlKKfN~hg{5k6C?(G@Ce%X;vkZS~`cB&?P0#S`a_15ezlSi{gT9l8FwRSp8T^~Dopp?!TGs$J za?fl?IH>GpFTuG0xnB0H7kYo5g^DrE1M5C$^V9^v+1xyZ!+8dt=mNsY)9|rR9ScBs z3ZHiYVd%e$O`X)GMf|?3_}KGaTa3^vzPU2j4vq9_snYG#)Z$lmg$9vY>{;ukAj4oP zV&(~-IXvvL7hUJ>RQD&N+qccpLM-{>E;LQPY)CG_G-3)6?bORTyC4pq=0V!TKRum& znl6%7?`KLed^m+mbmT!5z&+@ydsNW$$%hW{%lCToc^689Ku3ZgcBv( z44vkihP@b5 z+l-zw28>+qw@}9mLU&FhLE-(D&L~M&_Okl;23*dKdfQFIuZSTr&VAo|usrVjW=|*1 z_uW?-87WUUhj1%X9rfR1IV>A(r?=BE=viIrYM1FXyg_36je4YakEVPMsvn|EAcDB5mc68FwM2455Dfn|L`Mfzg zL?G{mckVGoq1~KpFIHpV*W)AQO~C2z3idrD>hML|tlbnf{yk$*jBc7704(xHVS)^b zhhIL2&W-R($EJ`;BEOICNHuG~GcD;F`~7JGPu?UE!&yCi8zm+{15zS_xvobhE96XR zw5F$PR7n?!vx6hJ7`-t#9NZ=r$qW~3hm!J$aprVO=8+6z=?h{RQYKr}+TPyfoVb>6 z)+kE;f(GDxCrI;Ob0%RkXETbk61TfDFxmP6*;2wH{R;YunOzaT=HH{K;n!To2l6=% zkjGPQRrPj8Fo>;~Ld+I@J)APxlc)UdjM?^AlShzYK zQ{6UsRX5c#th*gqP~FX#P@3{~wxhfmP3K>Gy99J#I&0I#?|{?7Az#1tM#E&)-Y!%F zv`-w)9QEx~mqMi>+xdg$4|~)?x>w*d5R&Vu8&`q5Bq*7L0@t+Rv?bYbrP}VwkfYjDrgAb*)CW#m_^?ZS%G;QrIQioCuk!KnRb&W&5F;Fb-RbqpR zH5YF_c<`GKTivv?% zq|%|$0vc~aS2@+i_oAtxE-uYfK!XU`)fU}_k_slOXn+MvwU8jp)IuvR;lf?-$dEp0 zboqMfJ-a?AHxcwf-bpTf@JkE=YoIy*89gz5kUjOH532d}tPf6>s^hKFc)5FhP_+!| zgTh%AIh5w|L8H(4*UP>u$U*MmbiM4yP78Y@281gOlT|PKM>W6#>tzPuL0i~&x@?6M zKE@}UVRinXb%fQo@vSCdYeOpTSkpjA3e*js&@q*EJCLTA-6m*ycekFkjnP?0^|N!( zG>d+AX>^DH3GvST`q^4%wHgQ4#D~hOr)>)v`&@nvIP>X2U*pRTvv^Zq^Ae42ntT&G zYwq+ly%)H?b{|0P(bx26QeV5D$V7P8BymGu`#5vhwUhu8Y)vp4;vAat212^+H?*Gv@Uf*1qeu*D1qs3KDVArCVHcW)VSm5PB;vo zL61C1dR2P`j1S6Oo_+1C5)g;Qu_l-s)o~>G?-;nUu&-K#jdG+?Yc=G7F-nz2RyA__ zV9}sBLu;~BPxnf5p<-_r1UMFSOwQv0h?3Fx~+P))a|aq*&0W-@<0a)w`L#5&~l&T z5SvA)?fz6{+nA9@(cVkFb4A-v>o+;W+gr+XOQtK?dk9YvMJA$TKNU^8SF(wMTqXO$ z&@R(}GGo{uBO(HW1U(TZg37LoCcR5S%C6D#)#$kkpQR*hXn4GnTt3Sq3^?SoJW5YY zS7T2-=xTaCxqX&b6Sr$LhUjQcy*4>iFF&(|@@hj9NV>&YB=`J1IjAd#T1^~(Z})eG zw8I^RmAPw1Ya>YHqEkgkap|tlG=1z6Ge#Yo9PLT%p4$`$iVUKreWpd&s|CeLRo~gx z6OT-Mxa^Y(@5MfNg=*V=;lkwt#DK*V7`=q#C75A;xs(-0TuQwYV;NE^4FytW{TiA{ zne|ozDCaRRqeo`;dd{{RGV99+DAS5p7$lo_Y_c*w(S(7^HVcZ$qh`uzWdubFi$^Ca zh|$UIBku!Xce1kfbd-3cUTdJpPrWjZ$e-wBpm?C%ltt^Gv**tJ2lkg6(@zw#7^SH6vL^}!QVkwIi>KY(A1E^*`kBAL0lm`&>cCM z0{J*Wf^QZ=7!$}>Mzd>`#9&?nNoIEsaH6i)EN=Y|6HIN@2_%_;d zXUjj*6BFRHUNh=`H)Qh4;oNK&0$W`ASpj(mUi*ySMxoskZH3IH96jLduog zKLsV{m)sfg!v*&_fQ2ErQ{XS<_PJ;!<@V_WP0osbPWw26-2PIxa*YEDl74bhT@^#M zKIT+v^FbO}q_+69=#|=I3$r>yE?%Grns0{QWVVEZM`mA21I1*vXlu-En=`i_WcC(x zl~ZP4g{EE0Y}y-nWwrzac8SdR`5EmFzEKEanPs+@*fb|}k)JNJjfrf+M7ogKa)U!= z^G@=~?58uplF|JjJu#Who_dklYC^eX_7jANLJdz?433C4E*Cx5E1_AdusvO0P)Q>u zlP1c~bVRvmh8^BFp|en~eBj!Pn&pR@gT>7f3Y&NJ7q1;HH%5jUmGPm*bZMkKSX5sX zH}BfTE7Ow4Pv4)UiT0?VJ85O42SuLiw6OU|Ae)4S$r==Cr~%q123Jl%WQ|FUQa`d^ zYIx47$#<^~>4hh+rEZuuVxT`)#q4)RClrly{0f?8iF5pRbcg^&@Xjp(sp1@N#q3YS z2gn=Y=(%FHSVNYI*Ap;uxka8+!eI_x@IWJyVZ2lWD3*BulW19IoI<~ztht5Z9XE^`ZMs6RO=-xfLS>$fRh$NnnazO zQW1JN6~jg{3iq}Z%Man4q{u))5(;wR#konid5V?kB1-a7N`1Le7^~N&xK7W{P~u1U z@JPwW`AJ+gQ?ETVQ*4y$NO}<^C)T$Yc2Lc6&jqYVbCMFwkw*q|Ac#`&!y18+>wjm7 z#xZS{G)Iw=A`zfE38`IL)LMRP?kU-cLAj^oGJ0ZK7klbO>*9;Td~$1DTaAK0ot1^z zNlj4>63&rx9Mx-jdXoIRIF1q2ytqJ|h@@t(S6Yznu5V0M64rXq)mjf?)8dMGH>%KT zqn*KhZgprWT^l;!v~Z};pCUrTWYvalQUlCil~NUhRJDtRmrT_#Hb`Su=p{NFwA%WW zTcy@Jy;&#JYPwgCG$fL7>V~UFx_;aj_YvUjpqee&bY19jV1m(daJ{m6y zK*!ARw!j3U9F$dX_IxY-Wh0X{^j0Xfnz*Z^35Gd2IWx#_x*-FtydWSj$o`!IIZ}37 zN+xb%c7f&bM7@u?5PM!h)hZzUTh1Uhi*$oUG^8C~Ao(jQ54;Cm#dcgIW#bVvH62fE zoV3CNv=v;(6Rw(}AR-9Thyy*Icr!K~;gz|yUU1^cJ3?-nn}xDcK97Y6RqgHc$bH)X zYl%_NZvRs}ya>z2#qu*lM;qgnA&93wA<(uA7K->!)T-Vu!ohu;Z!RNVT)d}NpB%kl zGgmmUALpZME(?L9uVOt}@~D3ui-o=^AVIfbXh;|#_`|!|wK(^b>xYk(TjNMT-+2W; zGh2R$>SsYSgUV0AZIk)nw(u53>Pywp0#aO{&(pnv(DgZy!xli~UR9W*s*PdY&s zbWE*8d`nP*pj?)UQfU)1!vtb9)#e4UMNb z>_(!qF?1+RG%=V(t$5RMcMn5&JZ~_A*!nyO2cEn)+KW>B|nt!d#uk7d4l^ zNR2Ye-!n?MY5AxvQ{{ZTzv;PstDCv8ipAf^4sKe*9D~~`Yb~ukv;4JQ+R~@ml$r_b zi>XmYuy?Q(nvX|sz!vHFR8RAq%+oYwe$t(^=$t?%9~1B zG!bP0vWm4dM5HDdZzO!^(jnw;)W<;_DN#%);NJ7wuqf_5XHPwN&xLC`@1f3(@c(oi z1&|SXILl8TgO}*AcBbO%9=zmhl)cOPng1MtGT>|ppVV5eQ%(zq3HZI@G)#;}r8|{M z0hiPO?PP)SIT*0H&sn>^mlEbB)8~I^9`gb<$?l!qdV$IFsT(&J;Hu!ENTcZQ?XAgX z<%Y@#yJow;h+jl9NT$2CXQR`PhGJiZrdcuvekD3YAaj6s?&tWc)RGP5_kHnEj0mB{ z>(lO$4%YkiVSryh)0i%gRK_YJv&Y-3re_AHYNM@5Tv2@n(uI+oGs92M&APYDhy`a! zGx$_=sTpwQ2dk52@TbvHOb1L?0A-`}aF)~yr+&FR7xx<^@%PacWPnq8WblX4A#%{R zgM^dz+g#bnmiqd${$Fxr7_R(*nx!^5i~9r zWNyb!{74!c6}y(K9TM#sf?T}09cG;D=7VtL(LG~u)ZV@SHhL5nqrn}>f5P32{JazW zUK&HuL>9ne;Vbxo3sa@~;VsIGJ9iyw(RXzewI+w)%IwAk7vli=m12^RR8LlgTz+=_ zjJl(;R86nVvTtgt)g%Y3l03r�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 O{lz(*%mE?5{_hG|;!4^AK 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%0Ae0&)DNg7v)v;XW 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 e|2FqlmiWS@oNg{>-KuuU~hMIcXe0w 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 H*2@0}KOtmW literal 0 HcmV?d00001 diff --git a/_build/.doctrees/async-await.doctree b/_build/.doctrees/async-await.doctree new file mode 100644 index 0000000000000000000000000000000000000000..b5bc35071c35956733a488441a51b678fbe8842a GIT binary patch literal 20252 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 U7!s=E4NROcV$>(M55+kD1BjY1ivR!s literal 0 HcmV?d00001 diff --git a/_build/.doctrees/blueprints.doctree b/_build/.doctrees/blueprints.doctree new file mode 100644 index 0000000000000000000000000000000000000000..dfad35a51f10d95997ada99a8b4282d531df92bb GIT binary patch literal 45691 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

;8K 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 byLuP?uQmJP*+M5*qWeLg)aheuj|}`j>`7Og literal 0 HcmV?d00001 diff --git a/_build/.doctrees/cli.doctree b/_build/.doctrees/cli.doctree new file mode 100644 index 0000000000000000000000000000000000000000..4ae1a3f4be5a4ad43a29069b323a767b4ec4658e GIT binary patch literal 75517 zcmeHw3z%F-b*5!$Buz^iNtP@>Wv=CiMzXp`G7sa4Wk*Q1k@duqZ5a^VJ>7SvyVcX( z?%OSC*w_KWLkc%!f#DS(56ET{Hv6$(c0b5wLtZ2#WP$7}kdRFRh9o3k68N&4WJ5x- z|2cK5>fGw?JGWbsaUSrwHGTV5)v5EUb55N)^}4ZlOBVq@Uhh=v zK`v^)D)394YO`UQSH>zUE2~Z~PFBXlu}-y9_r*`)mi^87`C_B&9j-Qf?_i_jw`YqO zh+3e*ij)3%f@I)(Z(39^u51+nQD?ETF&xjEDO8q+DQ2z_U?b=h>zLG>_Yig9Rn>#Q>r{NN zP~ct*1urPItF6v1ujm!_*Q=#7g}hgakWLuMR5j9fp$BgPg!ax>+nsK)?l;cnya&(w zps-)|X4}nq?iw_juQrPHUHDcFqW-

RCU?6iX#P00d2MrdzFdvem{e4wTDb+x0urpMS25*cT@WA~H~3Yo zx+NTAe2Z@GmE9C8F94%eZUtB0hX3xsf7|ij4lq&WuF5?$D#qFpt`X!CeYqfwg9Cjq zJS0VnX=N;2tqE*kVuFi)j--PrT)|8oj;Z$HN(|R+R~N%=l}@J>OivM?md@l_;6J|; zv?8X?fv=``LWgKV;p(;@H0x*m^5UUoJi8y(H1eLOoF`BfNBK*YE(DS@g@Wczjpmi= zfoNP#hvzu$Uv?R|eE=8xiR_oHY_05q##yO#7_6)v}DJsQ}k=K zDS*K5WqL1Y`K9XYf>&vtqp$U55s#sQ1sqm|uAn&yF8_c;R>g`)3g!5tvgy*w@dK^+kwV(6VGND)tceP_`7KOu~8;|kJb#sQqD4Vj8^H?!A8yCF~$y`fcZ!EMKn_{ z=(bwTb|-*=akkj5`ke)@IqOC1uZM+NGZ|SbWL{(hbM3-{4h|=FEfryTc|oPw1*^~a zUQnHH)%~3Ja$V2g+!&NF1~+*IL*H{Z{vP(R(cz+r>G5$F5AV z+i8-;2jbTkyt3aRHv=+~m*ArDFk{gwhE`}7tIJRR zV?wDB(w2ex+1Gsl_<#0wA0&F=3$X)z>tzW12$rDVMqmo74r&wdm?U9@MpzZ`j;88z zfF@dQaat~^5O^%s2`gxNqN@ZT);nCQfms7!G%t&uCPxQqA}$c3(**D);&P**%UEF& z{Y;MzoWxk=CdOniBWSg@P_WXfp;)aS2^bEK4#U+ua-t&_Dd{xo4FG-(KtQx1$@H#` z6PU{SMiWv3$^HKyp)tMz9{az>;CxrKB75+h>rEJYBy8lAH_yb>9yeJ5AerU>emL^0+tKzL7T#MhYW$=%NyGH}R z@%eyWMjn|z_gxA!0=I8-a4RHl2`%|j}8=TNz3Tz zz#B?S{>n|DmRezcW^{1k3e)AGWQC?<54T_%Z)J{1FvsEw4^>dPBiC$dE`X0h>OtQ?&f(maMnhLL98f(T;*aZ|k z&F?2m)(e)vfRUMvJuiy6yx*CN5RY{+jB1`7?}w2OJG~_G2d{cGE{jTxFI{MonMSMe zEHL(7?k{m%$(PhbAvt*n&6h+J;!9=aiM8QCj5ntdRJj|>iEVntnH+q<6S20`K9h`_FFRU6NVIAYrT*QIf3xOEDM`Bi>DnOk$i zp~NunxM?S*^aswA1k`zN%&MFEP*L=p096Xr{tu(W6%!#B zie&!QBD5Q1e3s{#hz}`3)I?D}c?c~+#3_A6==GY}x3g-QwxPetZDs%LwjJA}pi?|l zsQrPMEK#7BBKhzG&Q;l&!F~@?a$xKi3fs{e^~Ej_ZT%=Op^yCCmI5SK9Cs`?;`jn3 zjsxc-nC32O#o0Y+rE@!4ED`-P(s?&}V)viz#i0lF!HgHyv7F}hZPWBgsTo*x~)jXlyM`gO6E ztQfTJc_EneekMpF;iT@NCW^0y zLm3u`mQcVu=2pbBZg4>B#H&%EK+Ya&jg&spmv%yWog~5OUtM%@f zaDUjPMuwu;%QNjcg4O{4X-=sInb~HyQ630~(S@_!2It!H22a^t7_jRtH_I?j1Pt4L zr`v8IOouQ>G@#AzIdWMsA~^fw4sQz1USeC}=be^Ib2W{{TpTY@$8MBu3GFCduNY*aNPd)%Ok!NduSi*^UyY@#o}cj-up59MOq3m~ z9F$!~s|^aXV`ZH8v8|!-p-gZ*qO8LJY5jFd#Db1|s@p`aywVidZv3Y)8B6GOD~7S| z^~&;qCA8&?@LHkdvt^TjYSUij3y4DN4Ar98EvjVDb#$7*CcR=2apzEoKn85>Hq(LueK2N)y@mXhY2vr(LK`67hZNu({>VoL z*!_jLDF$1q-C>!43uq>SvlN&J*2xa?fLnDO4^cszX&kJmOc(g@1NB+}D`TSzJ6jEv zRmd5IId9sg3A(P$iwyKpw*OV(S{%$M!x7D&N7Av#!3wt~PDJ6^>_OGOlX_NBpXGo} zsJ@puW5$=X$#4Y^9A4d8z=4$3LYC0C==V7?P`e*JCApZKw~u2bi{Wx0eh~+G{MmAI zzF2K6){dZUxC#$C3oV@MS;3=(YbeqBJS7}eJBt_i_jAQ|WAP%+p)5?#H_Kfd-_b`M z!qs@jCuSCpa^F$Hc(~pnGaU)2-AB__8=wz^ZwT|eOy74YEFjS8lCriJBk0YdaAOa% zxCE;ae2QRe3`|_yqAh>wI``ZNwu@|Kv0bbiBs*O zpjs`D_iF|EDB|O2ZHC&9o9QJIW=nr@5(sfoZna>a9q@`)n?!xBHNXMm;ksx!%g@xC zr883GTDN(QIIyzk?t5~( z@&7&3FW$X-_mnqz9EVc^Z~w_h58t(){J*EV)y@vBEuZ^=l@11K7D1vQA!{rgKR;ie z4v-lONnG8+EJ!^vCEtOjk%&FwB6$_bF;F7Vd+H82K?j=b8h4R^&8NAvYYdD4(R~jY z;J8n@%Z^7bbF6`ET-Dge2ED7ay)upsfezvqwYe`Iz%3{Jo`ETXp3hdxFlH!g93~Kw z*Q#{LX%|kDb+nU;V~W)|Iy43lVVzJ8K(*AZ7u$dYhY!1Le^&+z36d8$h1j2+g*L;2 zm;=jTHG)2zF5qZhtKM7yXj3>!;h!(?h|wVknm3jZF-^r5Cc5x1h#LxVl%V#Fe{Osx z)Z|A$jQ#>17>1|M9tN%*z@L>)#uN-ighaevww*D*BIdbK?0lwoJ! zGfS3&YiHCxMxESL`zic0;+pkKXe!pMLufo5G8QuHR(>mm2e|n6~M6kRu9`g+OUWHDfnBYOT*r{}mZ^s}xB7G^Iukdy%A zRtaPeAvCBrSWumJ1i*hkI>2|NqPQ5#ol#svZJkcy4W3l(zOA!w~Ed>CEORNDIFjTyf|MjVF&xJChvaN#(E>H&onIQT{JtTrMAMLPG2 z^RzfVRqWQO+5sYCbS%X4Nn-|{Uks}1Xe?AI|H_cS8f|*fKoT@)y$t&1JtTfkdX{Su zSf#hA&vXQ1A2O(jVhbiX5F%wq%v!63aq~>{a>D5)E*>rkD7%fuWxe%|=N~%7#1hc6 zhIZ~EtZU?~ik^rb{LxXf+7Qz+y9-b{se83x`tD5aok9E z?$zY^=P*^pDxmk%V7w$3z4jq+LG8o%K&Y%qb#pF;tLw$aTo-3qsmct}*qanco2XRh zDs}wV$s=S#$7^{euyHgLQEol=7jrVJ%~JG-WY(LN16=PXS_N&=vw6p zb&FS&4#e?Ot)6+E5@l7~r2Nh~N}G<0xQ5NMo{6L`*=Hl%b;uOJPbVn*^Y-InSEAP|(ug)`F>hWORV{87)34mD0@u z8?j7GJqIUh{j;ObU<;>u_40>Ry)JUosoq*lIO3}JfqtqtQo9^M?Dsnbe)KXE`PY}+ zk5L-`3kXc7G-_|fs~2k_KCP~(y$xS`^uv4%1r}{|jvRuVB|A%0ToK}pr`v4-BJ4LA z+cENB$#hGwAt#?Gc1jgCqz=wCs3_AzI9?RkbiPL;t4#A#`UaLSzK%H$_6=O)hwRTk zH7(fw?8NNPuRlSKuyV1jqEmSmdJ$Bmrr;sZ(JDxuGjwKK#X+Op*AkFQc^)cV1i2q- zUj!MA@QvqCv4V87>5ufxIfbionNN@51Q#8}61XBojw)I0VwQhE?qg(YdPiW)R#656 zVa`rPiBRAp}#D!}5mZ4maxxBFl zKboo5#qcJ28(TRH=aAV<Ccxrd2>O*#c z2^Y!28Q9XFJG2a5)5|)d-=`BX?3xa=02qjKIyjJy|HPmPlSxag<(co_`@5q2=SO=6FaN6R>bJ^7CYYJt!S&eXS`Uh7o|`o7~X4-AwkJ2 zdM7B`LCZq?p{2rSh9WE((4RIf*noa>%z*v^1xt}0M0y@b_sYdikycDD8Y}YNc-x9& z5h|mLvyG{Ss*2z$J315449r@f^TgCs&J^Q6dvnEd-aan+rBkspoGf`B#Sfx{MKz3y z0TY;j3{V0TO2pSMY3n_fANJ}iIYFT)zG$$ljNSOsa%+@nHW(G|YV%dOiP&{QloOC_82Uu`y0R#}WC-1Maj;9tTluRBlZxXEQ^7lB!q zidIJ?*|`LzmNM7Q{V{Fl@;r6A?+bH#khK2B@7}Y^+x?R17vDSm z;ypXOS3SIczqe;kZclFaX)?``H_$zw+1F}KLu!juP0@Rm&1yNFIT*>rv^Q00&ihm4 zBC>C6iR!4jZ&aRI3sC0%`|sCk=N}8W#!6nhDy^051Y*M&(S$Ml$YaQyijoVTd5G$8 z8y-al_xVm92&aS zb!nDPH_&iaH&mY1Tk7E&s=SQCJt)bpvY7`~l?%tPbzOxqzf!$UGvboU?-G4ej4x)> ztmS(2#jIL9Y_d8(hqa-f$76;uyM;`J1iR(d2OB6W-)wMh`r}b~p}>2Hs>(-@M(mj4 zO^fGJB3rt4K3O;g(}FFW_r@%o-zG=V#PjtMVr$&u2w_xq6jg53Mgrw3ihU9`XfmLa znXIm*6xB5{UwOlXPme)UW2d@Mc?paxbb?Dg+kfoHk$p!GnBR8s z_Keo*`mKG(kH?!m`q{^3l;jlNgLxD^@P_8V!XN1P#iB0!9BI;Q7VT;fa-aaIuqa3HSk_ zqGGD)R~|)Fl2TZ(%Yc|lz?p(d2O+%$n-n<4Tt$&(IAff;UDV>mabls6GFAgQ&1eyT zvTyh(25&C;p#EqR11T{o*?xNvDeO#C@tRW!{SNk!`zXD5tx=_huqphj&zIRC5Al-b zW0#`e9*S@DaflxpK<`uUKz2UTDhn;H-iPd5TKsW&3oZE#7bRnWQ^X@v&*y3^Up6^XS(yn_Ec=-+bH)Kml%Fa%wA9$32|E z6DAnRilFh>irA~woQmuW$?WN7fNDibCN$+%&{xrR%jocrG1H2^5-^EHRfwYoX52gz zy-bb{(Mv{?b1`_r6mZ}iaeJc<^c*twq3CCN^hw-nc5#PQG-CXOd8DYwad>p-rCmb> zeiHy0!q9rn=m5wMC>g2jQ>KAm|?XKmOqzs8=CSy00F{!x=&iBb$7__q=LINu__n*#rnp9dK{u|qK+|Lhk-;v zE(;Qs>ZLih+DPC-g}gj;4m|Af=w22 z%UZai%^8>KC%uRe9K49!mV%V&;NPg>H{{im=&PpRdAVnDbx!*B35XsN&>z3tfaWxx z;&!VPY@ZJMLny;fBu+^3P7k-N)?$|qs8lTd8;RhIz|ybK_`Q63z-nceuhMDdj||Yt zVg5i=uAI)Laf$~V0y^T`ZQ$v*r$9gm#E2!U2;Bx)S2aS8NaM{C&3nN8Ux9(-JZ!rxMhM8Z5j{W?YW(2GkDgfL`iS0i@VYE zl6QLs*Sh#AaJ#|v$t%H;scCh6wBO&uyDr5Zu@qY;csxeA!$VPSaB-QJk50MA9m@5o zEhCP64@fTKA~IrtMn@$Z<$9j(lf@t^P4$vN4EO26PK}{cIVTsc> zg@jJr#%{dz{1ENDRZiFbfkGeArryT{u$;L6y-VDWdfka=2Wx*+1M?W~Vg=et9r(LN z>+2Ia%w4`{%k3G{g16j$257aXLjPnxJRRI#jr{p2WT%3Fyc$F)5BdraRTo6v7_LL# zwCeYdZ>mguxGFl8d2%pXJS$;}4MiMw9nT|v)eB0(Ml+yPbs`PC9UGjF*dz`)puK?P*CTMuw zd*Bk$pKgXX45X5lglpM@bEznL|B2D(7&`;t(jlFi`dJ}Yz#DFgr!+X!_Cn1!TPq~G zuru5cv{38xd>(aif*gG;h8s`tqm%f8|N39_S^E^`7_N)GDS8iAysQ{hG{V#ut0z7; z5I^ArK*;XSzGD8N*B1Bf-K)|jC&Tp$$}9m$A1GNi*KT%O{CBK0iT3B0^IOq%<*QA9 z;c7hR%07$XvfYc}I?6Xdj%J;6{Za0$)9&K@rFu+wLv#Qr+0ZIB{JI3J3oL({IkWaz z{9|JJD;}zfiSrjb@jqU2;*ZYP<-}`WM2p(*;3GE4+V9ijFVV-B@e!^z&1zqv?^kE{ zEY|*j{u-Obj*P!p`y={dW?^0*G>hf?j~vj{+M9ojH#CquMGVB{E;-BRhq4nSoQ-qNecJ!}q@M zm8TwgZSmp9gBi<*DW|icr}^NiU9YFs)5cCSF87ex;TIvLn4NV~BZtU3sTG6_5tfYdRFK83d{lA+ zV|(%{2c|~#vtv1(Dp94=lV+NTP7aYQ@b8>n ztg+YcAOode(75caZE$Ct8aT0ysSSg^>4BdZ9k|=!yDyD#B{Q_m?qV~}S#D%QXK;N* zuud$g`Z}zUlr5Z%q6FC}WTC8P>Mqo;xO{+D;;GgqBo&ospcqO*w)Mn;YCxu=lUnUQ zwp0JoP*|p*&hMHQ9Mt(50E)|t4ul|OD?&h&qC;6$MN}6K0@TCts!l z!nuc!PCNGe$tn&GK?`Bahqiqv3b_=OkhE)^<*3p`E)Tl_;$tX2NNvD)$%*8+O;Y0{^@&TblC@ z`95)hH;(ZKr;9yPjtt&%+WJEu2 zH~_E=P-UCN}>g?|x~=h`p92#kBuleJ&#^DG_*ObUP=7)V;>G462#peX}SHqNO6 zPG1F-DwakrO)Ll~h9Ea|AG6L7q0GmYoPu$BBZGgWP-fq7U=+vPlQlyOnnFSxb9V3q z*dqjju2dW|>Ut2+GH96?$2>Q93hXBB$@T;lhoZ#@am+qL+G)n6uXZa8qgXDU3Txki z$F)1@V>?++V9xs$b1oIpnsj24LapxIBV&?U{ibhVjEA=al*=36_!cJkHlCnW@H&zx zgmfsc`2_ll#W*-lD0&+XtFeflz^XS0t0@~8tp4QX#_Ew3%YfFO7>HJ*IEF%Nc>r2X zZ}A{RO18a2hV}$@!LuTEqw+Xl72df8FChEV&<0Vy_{@{=SRYD3I1iu@1$%Z+4M9Xocv9a7S@}&{f<~{H*pN zR@isdqOh3_1Sn72b`wtEelrR~M5ot8;6wkS0~AZeI}l#5{Z59r3eP8NGCZ=B3!=xW zJ%KzKUk9+_O>B0%N-b6HnLRV_JJFZeLHGBDHz-FWkCXQBj!{*noS#|9(@}1e@U5+1 z3$=V0g9qVteP6`se7r{Bsn?Q2Id?oLoIIO>{}83b!u#vs=o^q>6i2$Z6@OFA>jpq8 zy&AhbY1BzvP~c~aX+eRXBR4FIMSebqGmGSEmes{V=OT|YIzbkZTOX*Gg@UMf53MMI zvf_{)++jpr`8*)Gt?*&tVB%fQxS>BSDsVnEO2X$tKu85HWP(z=+Cso$A5|d2kw7|E z7;9uskE!RnK7sW#-~4T#7oSuWp5t~yhn@)61{VREJyvU!h<>J=e&QUEKJ}d7VZU_x z63}fK)196b|9*@a1!IrgMA}tzC?Z^!->W-55M9cvyZg#}bz%rI@s2R!hw$o(OHRSq zIzxF9PJ&93S9f>ZtLry~1h1|=cmixy06|yEtBblGg!j~5-S-Th0jD4)g-~lYBH7t=t3Sx_kgXZBe#*Z`vHaF*wqu)J5Dn8 zANTV0h#H#6-jnefJ z_$)Vz-zBrHR1E|#{5F7*Mw8&P7YyVx)vqSNb-m2SFNjgT?2Ixh#}Tx>9Our#k}7F^ z-9fbdJa-sR6$3-X;sM||&*iuQFBp#dJM=pe$K7S2veU2}=dNby9M%?~>Bn)Vx3~|L ziuYa^l_vI(c^PNHSHJoM+o-{-U#%5hZl>6ge7G*wSTM@9>jtvp?UEe_jiGt+M&?Na zh=fCow$&MJRJJ6jd)d;Ri=}50TTT%JT*Dp4+45Q$cInZA1Aa9O`BL;a5<~8>@Yo69 zZfVXhj$0?`nDO;4GfF#W1V)_JykxU!m*&S-ut)Oa=6-z$MtOz9C_+mv$(A(KQf!HL z#Ar`Cqm9az1a&W4x^uBqO=8Oz6B``m4&!WjV=Qz!Szx@?c~wAY9W{nOl^X z5N*oqDppakhbk3Ys8Xq5tvbz7{wV*8PyLvh3KU1^Us8bz2H`w&x6?!c{3@MNU7&6M zHs2^h&7$3Py85_O@k?g_TC*!|PP%7Az=c%2-H{3*gF{vTc%ReLsPaV+v3$)vSLjsI zLcuN<8*yG6WM$t=vZDD*#v#KyM6k*YL)w6p2z$x~ZV)ooAfEjt3@tEIl(ZF#Dw;ntQq3r?D786^o(WRG(F-D(g z{70!F)WyT1E-I%huc6a;R0514&?UfL(MuYNMP3SVEbF;*O(&B3NF+560=qWz@KMfw z(v?vWGv-t!gZe_DglcCUpYAnoBZEriD&e9~^%}0>V}8TgPzvWGx7QOkq(}f`& z4;+Z|K-|E3r>gJomFRG>Dw?6rb4JfOMK6<~q_e#$UvDzcJ2?6Lj!fn|@jQp7R5cIv zBg&K81aY?Q$b2Vvo73DfxsC9I=QytHsW66v7>{0LCstVZy4D2jSAa|IBY^+yt}_l2cVo*8oN9sBCFb4MAeAG zRDH|TSf$*@VulZ^(y4P==mN@p?UQ@iY|j-N)z|vSgN*KW!`&s&NOWkAnGJQKh0eKa z2>66pA9F-g*nLnyv1w=mtPxK|Pfs{KEvB=cd1P3VRmTR|1+AgQ6|k%mC30j-a#BxEi{DVNLAo;!+cYtdhiPdvZqId ztP+PzsJTNYaP9dtJmBd<2lqh3RL+743(+mV9{Ij!tEl^o`W19MgZ9_)nkpDrVt<0Y zUaW=Ew5CplD8AKE6>dqQp5YlMwU3KSvup37K2%krH3CvG%6ptq;tDCMO|(4d;0}aU z_{7yvvpv_R)jozXvDm#6eaRz-ZZIdIKGBb$si;r1oQ4^AgW84K3|$8un-T4r+(%&G zG6v*P)QEP3K~|kF9*r`Jg~-))X^~DXG7!S9PH;1Cf7G9=qUcGR+%D~F^6dxS%j#Vp zbtD@d<9nui*+Tydi8OZIEOJOcVOlUYn=yy<)IF-0HWE{CSwpL(ua2T6I`C!;xHca} z9o6EHO*@*WxBu`#BLtqRM2Cn@v!Rkv=5rojv&v(bF3Aqi9Z-0OUZyw5^3+hM8)#9{ zy;-Wp3;~stf};|}vqhAsrt@5CEbCiqfO6i;7WAP)>W@m6YJ0+T(|||=2(nc?wpDQa z12;2*fEfx$(Skw>fc`cUuo*C)Q5i7*G!Q8C$>$8`j1my|ywf_aja*KpfB=ohGCuPh z5YLK~JI!XQD)fY?`3`gUFo*6nE$4BSLgTsB{)lNm% zyQC08UtZirK?ybF-t7nrY~SJC$Ki-Ruisyw<9w)x*{s)_=Li%!is?VqMHVB{K0CIg z*wl~{7YcA<{lH)q4v`yR?FG^(O%qK(^s>e2Wobo7$nuvHYh6|}{VD^wmv8t_k zxs!lY*5$Y%q!?gV;v{6<%hjlR$;0*7mV7_KB+qRy4iXH@m!PRIEXUL+15L{T^%KSP z97FR036H`3bpyCqASD^=N25xkmxEY2y`pP&-SM<5L z?gEn><&GPR11Ng^ASL0H#yk=y@C%mGAl5{137yVF;Nb?D2(=VeKujU>?T83#+(y@* zr6YLML@!Iv<&b8LI|~Y5?j`#B;;URdMs=fJqSbYhDolg}*;ncNl0(BL;@woz#^dR4tL5WVqh8gJn zc+P{_-i_j89MMULM{U|?r+=%xT3g)(9yq?3H`KjJ7 zC?Ez@YU0u}ES~zNbN{?w>QdZ?uVlkbYeG?i9E>PjID?9sxK9o@!f*h~iTUy+RmM9C z=x#PdrAlbGOfufL>Z>C9Dijy(`z+c~aav_Z>=0PrpBn4Q-qr)7BmGDm>HWN| zrSBiu+z%VcIDg;sR{0A0B=f?}Nov|<1>ds5Mn|Q`uB4b7iX{eLNl_Y|C7yCvVx%i6 zHW5oW6HVrbS6Gg?Tq~QkT3kw63(eidBws@xkYx?6%@;SI|GfheA7p}qg8(Eg04=36 z+5(wGrh@wlr6`n}dCG^LwCPa&Qxl^1Ou+v61d_3~zYpwmxxM|5($Z-OW2qT#5(XRW zZDrYVLOyLT#eUZI+>+KbS*&7+^~&Be*1WLZqo0i7-qUp~IhhlI6Rh-A$LrlW6a!GY zWJ_qiTfY7eiR!}LQ6p>o-p*$e@nn3yV#Mr{s-1zVGA7CBj1rhN zX9u{wxPX{D?oDhpvAInt%TB5nB`D)AWWNz0Gnq0+#mz96oD>ov2-tpHCXL4)xNK7NM4T*|x7G+^34nepH9$H+I@S^HR(@FD zt=uY>&J@AUb2+uwmP2yiR0jt>aNR^bm@+?SBYFi>w=qn(6^64TNHJ5oHP20_TR-)j zvz0(j50;Hz6K?6xeHz;najq17{#hcz(-)Yqd@(J0cOkY~EomA2dD6C8Z@A0g@mFd2 zlGMs=i}U!l)0uhf0Vz?S^IP)^c_aKrX~3zeZqqor{2iMmY4yfYmZTM=KnCm(e=?3D zaTC_59B#rA!e#HlG8{jmK(Iq+ZpTt`r-VhUNHK9VVI$m(^)*r)5UKA%I@Pa9=oB*-$lAsB60Ep0C3wdi%-f$*3J*k*>Qc>Qyl4?VybG zLq#gCK4La-aLqW^4|+q4v&$JLu4vPX8Ntiy_x3bX7XY{uO(%)JE(zsI;+~j6+G}cZ z@@u^+tV)fs5n38qdN{Q#QTXE>Hiz%C@wtetk2fBp6NTz@6E7NA^^qiwTf>lJW=#%G zJGTeHDCwNTacW(Uw9>8&p0PiH%OJFs;#plp$6A```)u=!+DM7m*@nfQykgJ@c6iL; zN5S`-_3c{{Xid2dtY*c0M4zXfKI1&z&zK-6n47N~gcNIex)7&h;Q#3m-QF0uiS%S- zS*r?Ef!dL(Xcgx!QMJcW6)c>Hw;>;sb=nu?NTkzZHvFnqWLjI-Ks<^E*JCz2+sg?y z`^0{ApfD;>py}j3ws?H&P*frd{(@=27W@}u7W}DYh^On^N;a5nG###yH;Y0Abenl} zuiq}J9z9=NKyhirgkfI8WkS)HDi$na0jLaIl13ub_L}D!N|AfIKp51wzQ->*o><6c zF$iP|xzE^Djkx*nRW!ZyL^4Wt5M*!z zo?j;N5>{C}Z(#B4MzhhzGKK6w5<6wF)al%v9{nOlC5Plb|xDX-Sxo=c%C8 zwPi``j6Nv3{ap1-6)8$|tP^QUV8u4oKEjzVdeX*UZQf)xp;1mRoh;RZy>=iZJu&yw zKImTiXLO#+nzY-tZ97tI;Gz^d1|O{q<_g*;0Epbq&Ef4x4gCvBN^19+P+~0mtFB4w zB|Db=R|aaaJqOsJV2vc!Yp68s-NgeVB3yUl;HE-cCIIsQ|8eAy%oeB5xOz(OD-vuh z__1PkF2v~s{2Or;#{@jQ&4gs4wd*wU8^HVsyU@R}C`+n$4NL4v%@Q)XJ}GeW7x9UR z6)z<75)L0Ti?A7qS!hKQo*$n0|uQ7#XdC+Mc=j(p{A&sXvIF|rL zIu8EpIN{?QjMEbGs-!G#RKjfq%*1fxweh&bTZU_kskzosWZ#U#h>N2$IELSBpnM9> zirAZ@Pp#HYm-2&f)LnUjO8($vsXEVyW4D{-E=)I=aVW1um-jR{XpsTic2WDA^AO>L zm3?*44aeQ#H}Po+NWv^mw!u>?6_N5oh8;!P8co~;)R@CD4Bnw3t{0j$m*FE3J>_MP z7UWa9Xy8+#5(I&50QSDr;N>O``%%siWiMg(g#s`^&{d*^FKwhw&10Dzm`}7p-wzXB z{~*nj0ytiO=Xmf7)}HPT#jNY2Jh*QW0iRM_Yi;Rwvs3uIBb8?B=PP)Y7~eA#G4yWw zKlCL=>m)e#+rXb&Lbuq_+nrg(wdpL~Q)c(@#`wF?g70%$FRe{!Jl3Wq2s|eTT}i35 z)N|*VPG2v-+K5uTL3o?hiCI=^LAKh+Dh+77=h&?_q-L9hFLj!mrPO*WV)NuR92AU2 zdM;`I#P#XpTPQk!5CJWAQS>j7PqA2h*YDhU75`5s;$lbTljPV%(Z`j9Ej=Z(qhb*^ zS^I8sIG0z;dyuw>+I_U#PU>K0G)#cotQ|BaUAA!Ki_2=)pqe1=OZaslx7Ni7L2a{o zLc^&iV7Y|&<)-5c`zyuvymt_(6LVM^Xr+t1_rAYbzWN_SNdQGMf5WukNM`10z-H9+ zsSQ|EH8jWD%~|Bn0+=FhPHZ>NVmAuboI0V1N9-%o&3h1~248}w3ZB81qldIAmg$f~ zvqi392IVGD#3AQBgcX>6+YkBcVp(7C9)ulX3GbsBIZ;&gK7!h z&PThAoyw9UrUs{Xy&13*vGN>>lr+7a#NL_xQbdBCIq%74cRS3>02N9gQs822-fCV% zE3*FV>7eXTFbSGowaM|#$HUeBe5+Cns(~=3!!e$RVGK-4bdqs8No0)LYI^&o8jZ}n zu{9ApVi*_J+Bmu}7VWit@u(r*)Cb9;>zglW29r!JIE72n%W|bVnRHya(c#MRaI89y z*qS8OTd+R!!|7=+4{sfnTc=tJC0anT5NJxkgEG#wP&9+WebYE{H`kc`Z$nm=)+ zVz|6m?<|IsX-7kYZo9e|-jY1y#V`Z^tXwU_y$W!NQMhd9V(lRiKOpnxMZ^Wl{Mqav z+N^+KowuH8g|RD(lwA|s)LXI z@-soVRH5Bam1{-#-Datnv7-wN*BlJT_1aAdaBA&#!@#MCVcO0xiGW=Mj!LF(>WhU=!^uwots$IO9t((+3#^-VO2)t=+A9o7rME=%+BL9QY4UiP*P)VCH$CXmJ zutL#+01AdEp|Kl!%9f+Fv~Ghhdmw4e>^%PD$(J8HdVJr>m+yq@%fXW<{hy_p^Ve|B zx=R}xD0RX0`nWI}KA2l15`fzWw=!Bg+~tPSUZ)AOUJ@UepMBP zI5)8W8*?umFOXZu7>IZw6S>30404?{#)amEBI@SM^0mbsX`Wd1ac4RZ1^vqo{l!{1 zgri({dP(FWUMFZ=W}!VpqbLFTINJ|lv^+D+1hhUgbJ&rdQkFek%%@||yW;F=8-<&6 zpbNYDW~aoalk1g4dbn;PON5i%H2?4rzG+Yg{pQ=@1gKHz*TGOf4gB&stFvkWeQLlWw zh$_Q2CLFHBtu^pW7mrrf9}UOn{D#j}ThP-uN7p*V`4+ycX*Zi4fQlTm^9Z+1p~SQT zA&+s-;Dt=|wcD=a+qzD(l%IhSLcao(G0vM<46m6*H%NW(#g7-lbpb*%jqZH@Ja%X1 z7cYbp*utr{xJ*162I%l6^#ltPZ88OUKHAOkO-u&kMGdGlCO=q9S7Eg~c~1IRJal!K zsUQ-mzmA0){qt2|5nknUSVGJGRD0uhFhIqoGxnr4H6zs zsD3RBy7kTRADqVF2ATtSFQ@=Tb>jMPT^%9JF6>2Myo~Qx`wblDrZkjxIS=EGQc)VE zDkFBKQu&0DYFRTxWo0-)N1F5YQFt}3mk-yKyYsEQVM!pCAF#w>yOBt@o}VzY6ZP$* zR^WGW3jaI~1|AJJ&>4lm&&!s~C8bXOY&EFj;05)SFINLfRl`ImI*v!Hw5UMr)?zYL z%1!OOf@`AJ^5kL$i#Wr+h5o`Iuu@ny{RZ_`2Fcg7i|0Tp_4UxQa3jeZIHxg(8bWn! zE_N1=Y}g)7wER{cQi9vnkVa0ESxZl5P!1?hq7hzi(&qhEAWtVQhS$=Y3;^EDcd&m$ z7WHDd8qc$L?0ymOInkaiIo;C}+x?xodkAllSoRD|@~YpN!IDj+8z~ zQMprDJhVF83Z9(L8{sq)$OrHw{KbpmhF}4=U!Bias&f@=G*rO9D=2!f7_JTGix9M@ zx{&Gsh}y*8)z^HziHNvD?N-{lzzG>#JHbK;EHetx`b@WlAtnG_r`iGjl^VDR?m;DT zT(M>J!ZoBQg6@p-8gG+etfCUe6|9oLGV?Qj84|nz2r9nc!5G)V_AQ>t`>3yen}{>?u|L<;Uo4R)2xUFOl_(P9`fyYIJFqAFflUxU=eFK>SquI*wx%!`OjS zJf#!lMXU+2Bo2C=4tNy1T-&u;=7pv91bVf1!`l=(hGs`dCkQF4ADN3Hoadef+C& ze4M9`FJ|!Z1^QS?KP;z@|BN};K1LrO!F+1}mOg$5rJHKMMIRrcuRlZ|Z=y7dH_*qe z^l=M)a54txUwj&S)U{91$1l>y&(X*GX)f=@M>ia&Id&FWOo7Q7&GKU9Ef;u#7kP3Q zd14oNQWtqb7kM%lcp?{h5*K&^7a91A4ERL``XU2-k%7I)fL>%EFED@?Y6RRx2J8X@ zb+KEy6|23%^V-TAE6*^JD{oa8zKsyh7@j6HGlu_^{$dP&nh?$yE)bd-!~7RxxJ_tg z3_nAEF@}Ga5Y8B;+XEGb>2d{yVJexbFicfH6o%&I`67AQq$d+0bt{_3e0&wu? zL&wOVF?KC!UVrh>yJ#17FZWlwAOGmh{ee?^QSa2^$yv!$Je_iiuN-!YwI|S`cY;U0 uu*}ZT$89QP&6DxM3&a{++FHjI16YveXl+2yn@b^LWq_59LU7%g-2VsbSUZgX literal 0 HcmV?d00001 diff --git a/_build/.doctrees/config.doctree b/_build/.doctrees/config.doctree new file mode 100644 index 0000000000000000000000000000000000000000..0bbc90bd209f1d1f270d1f0f483a2b84a0b6ee27 GIT binary patch literal 142074 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%0AFGoTz(3sFIq6G3qut16mUCkTW++ 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 literal 0 HcmV?d00001 diff --git a/_build/.doctrees/contributing.doctree b/_build/.doctrees/contributing.doctree new file mode 100644 index 0000000000000000000000000000000000000000..215fa7c003b9edbd66ba24554bddaa35eef6282d GIT binary patch literal 3812 zcmc&%-EP}P7PezcvSeAd(pxNfGU`OOg!-(Xt zGsD=v2(WumAO_~Hvv1Jn=zHwj^gA4qq6IX_Ue$nL&Y8nA=jS`$9R9oa-~Uavsy}I-yUMMnG?!-74ouzz`9#rDBEX=IZAsoCikm;4w>6ZglWn z%neIY9tT}hL6Z_jbqM|v)|-F*E({h@1sTh)f(v$~M@Ft+c8nIkoa77ERCUe@(V;okgJpNiwtLi=wckR(;9Imb` z(mL~LJr{4Gc$5jGpQGBqUV}%`vmgK8k$Y&}weP-0$~x}+x$6!SzXyQC+ra3%_`QeU z2lzb%fOacjyq|Kb_4A-+D#e+S5p8H~M(CQJg_tlTHCTqB_aq3;Xc( z52)$@xAz*iDU5Qyj@6F4Kt=+#8}5kL;U9q50E_YeJ-D z31;v_+cVOz)SYeFQKQ3wnXQt}+qRRaR7B%pOWNZ`;>p|YX>N#da4Q`XJgaMFp}?9v zkDcv5WhpqRZWE9dxK)Z0I2cOlIv$q#8lS{)pn=kDFU4MC*g_oe(%)PV|joYUH zkTSYdH4NVK5}xu(5?&-mgw17y^XeDs+v(hnJsXE9f6kH4TXrN^YMN!w9`nltSu|i} zy_WW3J};LzZgRm?jx0h$ah5?cL^&c(A(4Mcj+}*HSV`3H?65S8(?6Z+1kd+xZiZYb zsX_r_Pq{(`$koU=d+0OYvC^xoID4|OvtdH~WGCL}+JWZP`!_c>-n2&)0Dz|j@{=MU zXAe@AFH5%MNOz3&EzBtP4aFm=;xOj8g<~9(05j*dj~-bdMx-N&8#IW%ov_l#a4oX8 z5@78hF0&$R@rbNef&@@hIZMglVI`@MPNiRq3eC${hL;(k>4;wzQuDC;W(ASRgwGS5 zc)T8laiZBgr9f&g2Th-#=f((z?&7NHVDz9?3l|s$s)6P%J>d|HCNu<~Fk~%8z4tN9 zwac?@drZv+*yKx~Fio<=xUY^ru#Fh|kt{`uAHchtO2YkEXH1#!`w}g! zk*GJSwO@v*j98u8lSp7Vi%@vqY{+tzLcF~y3micsaW&`G9B>Wv$SBDdz(7q3w}~Zm zIp0uAGQw^uneRjzVpk53$>uyp`(D8V!7&$H+dC1oRw2(Y{)HIciF7NkkL&RpSWOq6 z(5~$c&!5vUZ1+5spm%}9B##sHh6(+&QQ_toP61g4Tnp61H2S^()!mT#@fc!QTeJ(B z6KJxAd_Y3~{6Jg?Bc6&UA{VRD4r#|+6>ya%sf%mz^rgsOmf~$%8VuD>#8+Y^cxey1 zMXbyoL2j?n- zDahX0v{mom>I0KRvLv3sJrhX`?$zfJE|S4#wfsjU;|KROx&mWA`U{^T8bI&|wuI6Z zV=$iRD~;A_r0p%(d~S(pGs*bRFU;Mie@EsOfhzDN58kNamv^zk-|iQsE4q!Ff^Pk#ZJ=hOZG literal 0 HcmV?d00001 diff --git a/_build/.doctrees/debugging.doctree b/_build/.doctrees/debugging.doctree new file mode 100644 index 0000000000000000000000000000000000000000..9a80fa885a5ad57145757951f1ff69d95fa4e9e8 GIT binary patch literal 15022 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 literal 0 HcmV?d00001 diff --git a/_build/.doctrees/deploying/apache-httpd.doctree b/_build/.doctrees/deploying/apache-httpd.doctree new file mode 100644 index 0000000000000000000000000000000000000000..f30bf9c2fa3531dcc3eead013d80e6e243fb4772 GIT binary patch literal 12038 zcmeHN&yO6(bzX8gyWH6yTvFn~vP7vRSrTRM&QO*G+eG|B79)$Gv?8dDB_EWYp6QyY zp6%%#bye@~9E8XR16;U**kId$jrf>@<6M-Rj*0(-Aifv~4BefZg8;txdsY3Tdbk{p z7|Vww61cnFUG?hKtM7gF>ec(8@#8!GPncc~r z|6cZfc3G_?-l2%oq{lL~fEGO-gnq)J?A=UlP;(iCqLuew7OW?OI4ZmI24CXK?`D_z zifYI}hRph;)?OZaJ#=4Orsw5tHp}Ozg{e+`gH_Ll{G}<1veNjBf2d zM%`~iYw9u%<4F(=+MYJTjy6Io5t!QJH%_Nrm|_KU^#+MI=9bmo`R=KOg^q2xj_U-% z@tnRVN*e{nody=Us&p20}952_okzW^lC=L_Ry}Y&(H$V)(c(A$btTz7r=-#Cl8! zFPS(pcE+iMc0TiI7)Y=bB5D03jwJdw1KD!+IAlGQK=DK{n#x&0+Sv2v3u+Bc;A7d`BTUIQ=$ehCf&!L;NV{-lcz#o}!L6fefT_n?f|(NvrSL-y9JGBuMe#RbyZs@`)#K2;>RN|h%)Y~Wwe)*F*tKk zcU#3XJ0eF5WOl4SA9_iY-PZl2mkgK$6Pd}8O0V-vd>ce?hK#9K^WQ!VPy6_Tzpwe) z#~=Ls&+2XWKn%O5r;u%SEZb-%hJ9LQyW)*^UIsmCH_;R65@iVKg&~M16~r8x^~3~Z zHgZ6{``&;#Us1>IVZ*0La?N zCORcjG_$a{yXAZfW26Zq#!Z+9qLz9Xy`LL;mvJ)%X=9Her4P9$oj&s#{82QvqJg%_hzeUQYuj11OpT(Ur|drS5(xfzR+qpt{o3t)i^wPyU;XR zY(o?dy^wjuZlu=C#*)WlUa>pzzvQoy-~9l5v{`6FKB$^RYkHIPv)k~()xrylsBg1) zp;oVHa&&fe5JjQhR{dRNq@T}kBnrlUW}0ideAuP}^Z^ z0mfk_&hi`{3rWhsqYpq6Xia_zvWT2<93UvtR80tB9f0}4&OP{ag=VjjqY-kIBY%DVlCvh*pP!!ke#nquX zpwT38p>zFa5vp#f=jT?O}EsAyDejhtZVkKC4+3#tyiejtW0VN`S%CW>l--x{Et?o!d-0=^Mx~yo`}02 zzJa58lB?yIutgwVncx^x#s`RPuu(~D`+!a~sZkQ)sfp-Y7}n`@S{gyLkbr0y>>D`i zuLwgNWCMtkfMybjz@-F1lki-@?#(~3X4dNc&R#uUgMh7l34!XRCFJ+Eko!aPcN&_X zo5v#7AotSr{;o4zra)Ea5$<<9q|KMS$EdiJuR{g4niBJY?FkEPIP79;lsLMu#B%>) z4+l5&yzx|8N1f=6bHA(fz3t#+l>k9sV!Qm_nV+%^T{xe#bCBQ)6z(8Ww0e|Ia6kgSvKXPa| zU+BFWCq9G*$S@qMv!NFaQXB;`wKSecjvSiW;K6{0_$OT)5GjF0Q~cUVQ>+%9V!AJy zm`+{HXT76my>p065)vZ#Xr~^gOmmyYc!I_#BP+G}7bf{sU$LR{|u#E*R(tmJ+OCe282#dk%*rgtACM=t#m!C)1HjCzN&G zL`Nhc4pS5&lTDH8EP46rSFT*Sg0Mx~_cFrAr{~bwve+-CEN|g?b9!pU8m`$hwq$)c zCF}l}rO|WD&TTfFXg;~&EG=iu_>p_sx0w3H6YXzF|J8%rpoZjWE$2h>l^T+V4wNZQ z2zkIVe8zgG=Ax`BZuu=u&crSAvDn9-*c$(V9-knN`4T4l8{K92b^IzOtA71@?D+`6 zQ{*OfO3)pd2lGp`@!QoOS|V=V)tFZKo;_UpO5JW!uJI;Z*lFvm&|QAnZr(B%F|Q%z zNcjyWop*L#jT5A|apSWC0XRmGxcfF_{ou%H7cl(aI=wPv{5=+PR>(Mf0}Y0|^y5wZ zI3C`_Pqk!HblLD0p6&_=E38z`L;>N8CMFxcgHH2Ce^y8|d>8$6$XDgrm88I;)2V=^ zPm`3x9#P1OtO#YHCyw4mkTLH&BHl*agY%|IQ*#EwPZ(0t`Obsrl5+KwyGHIiKZjy- z8BuyZMGAjX?EzYMPuC+pi{!CQ+e#Jyvs}WGb8$+}{Ry5%)&$?pcfU__`c;TK zJ>hD>XT44O_ZNODZep%7!Snl5GG`Z#hT#?j1 z5F-E|6tULdzh=@9`t~7}NXbfE5@V&2FO^Prg4QJk*&#qft81;>&eXc`H%g-1G*^t( ztPBF)DjE#GOnnXKuavDU*_{@3$dFb-eRIH~uo9mI+|M!s)fCJtXgzxnSI z`Fp4uAkucRe)@8_xJmpbmY%GnvHJ8JD{EQcF6)*XCT_&*04UsR)q;g3>AN#+Y1@NN ziAZ`>IyWn9SpsLM_E1eV1HnSQbC!Da#ge%H;3_sW!Yx@dw0pR&opFRhy-iy^`eey` z|H1Y9thwep$H~sIzoGKrmtlx*3C&JrK2^H zEY;=LT_0v-E07+j)F`gaOa)IRQJ=$p;!%A^k?~kGNeP`|IL&{GE3;XAkQX%Jp6y}W zB}D>P4^Ww6x&abMrl6@IV_a@$Hx^X0XhQ`c3n>kGN^PJPhRUVfvN&q3cte*B*{(VZ zqNP(Fs=v-7t6<8xbV&|!#z;ne#|u$sQ)bN65{`!`=*f2Zxm~rA=Y`-uc<|}ILVBYy z9##_^6`?8xb(uQV&eW<=!Ns`yXwb|b(xx{P}+6b zt92?fi_(#Mg!I`6MHCyjYzxM29!CfWeAK*QA)_;`aOwKQEsDM{UfvrbPM$ z5p3q7nkc5^I;urd+28rfjtKDgWA%?NOOiNoO}$fs6(Ci6s17-2EN@9^XepVxH1%al z#PGLpMYUn%Ryq{DAFF?u>Z~?t4#1w^Fj0s(Wyq%H$x2w<$Mb2F1FDCR6NnSvHHjav|}vKI3v}I z?q`6^sLOnK@C1v?849wF)x{oK?Yj(hU7?E;3GuGh`g~sL3ao~G!)eEAkwphocS@yr z#3snK1Bs{^()lvilx}F;oQG0CmIU2`(S52ieIIOBdrP@={TkBxNgg}_p@7YJe2Ojg|UJHSfhb)3$T58I2QJez5rn*7L;74DkTy>tZYjvJ72V>+$U%X#GRQ%aJQSfJHm#<^( z=f61FL6G$-ddv!A_#IC*@?G_mI%A3=&s^Vq^-W>~ia~B{mbKe_8)3`v8Yxj0S?geF p6GNyACFvIy)C;;=zSjP>iW1>4^~t{nMA1#3_NAP{X>Mt^^+ymb6zKo} literal 0 HcmV?d00001 diff --git a/_build/.doctrees/deploying/asgi.doctree b/_build/.doctrees/deploying/asgi.doctree new file mode 100644 index 0000000000000000000000000000000000000000..313505ca878af1603a79f3af4f166651c1064ad8 GIT binary patch literal 5311 zcmc&&U2h#n8Mb4eW1r)%I87{2lCq^OafE#i5(wI;AXQX_;MS^0NCBx@&)J=GX5!tQ zWoI_FFDjLbO0hH-K$i>d_z>zPs>DCwC%{#u-f+ursKoQmew;l{9HLN!rDN^B^X|<1 z@w{L2LFc!By*%gs?1oN-OpXUE3=T=5x^zU9t3Du`PPGW2A|AYsoIYe&+|b3tGqW z;$41B=T_7Yi}L(#%5a(~#HQ`}jd)_gb}Om&?P4SoUhL;1X8X*TOpbB`ZAkhB8ETSr zDTtWXAmX``u(*6$4)b*SGGf7D#>d2y+a<#$v{Z-G$A3^mV zbYzo^rJ`k>pT03aH+OsNov8dq=tc67dq#P=<{nEtGMood9`KA9ydxP!Uc!0kc;FHV zzITbqsJ>&4Wf(^M2*wRZF%L>iHg27!u);eD1& zloJ~4FCKw!*Qj0ke3ykRH9Y&?f#0tlJ*mBn<2!&TgfvWh(s(j49O}U-5Y!0I;C%i7 zUiBiSQqn2(#wzQ-N#?qty<0fx)&bKeN#L_1Ce4AT^E6eN8F)W~wgD_ahM;}wgGVR* zBUmtng&p1P<$U%ByWrnD`1}L%e{ndlA2v@w)mzd8O91I<`;nG>X7kuv)n@)LPYAE%76gZ_oA{?}WwP zd?oIdedh~=Hjt;imRDv0GG|wjIzj;0KZY!Aj9hv&BI>l+m5ED#Q$&ftWz;RZ(u$zg zsgv`uux%IJ(RM+b5LpxdcS#i91__yq!#)fN_k1Lgd6D?2NX%ru!i7PoVkVP9WOfOB z<|IXRS)h~b3jXusG?IZd#i?6H(n^Yl?z;**v#OCmzPK)SkWd#J$G!Gn<&1Npn4haK z39;J}!j%jM__atPNwUZvMJhOKyH$@f71x<~K-l$UOli)W265l^@WFc@GBd-)~9bgOL;Zq|9?|8jO|Rk-Lk`bpU79mmlvoigem3|S>s71b?s$AK8K45;i~hk60p2W7S@PHh4HT_j0bHmlz&bCHeu_;8`bgR22( zs?SGvGdGAGd)Z_x(GjDO#ZNOeL8>X|hK^B&MaABn?bkdUZNXel=gr&oAkSzj@tYZB zwWgG_h+Wp)7~}^GRh!L}gj9}BI6-CY-eXaYA*8O_wyScJ=BC&e8~e65;Rz~+QCWeP zkQ!&h;uJ3{nNkL#^07QF?EDb*vJ}C`xrborSFd>%;cd;Rz^A!}Rv}6UGG`}+y)?!) zi88#k_|UG=^p@nYe~d&MqvEb>3{$CJw(~|~!>c8QN1Uca?NdAN*RvJQt3IfPt$n+i zajIv2gmxe1ykPr+Ma^r+Zt`OZD;j2UT{CrTC*-4ig5%by^ixBGeL0Ik>A@WVCzVJ( znZRZ~I%-926IzShjCWtz)e_IwW*2>)Wh(OpGH%2(cz{F=Okp=l%eQvvxLpc+{mjal zE$;7PK(p)RzEc_MudmH6ocY*ZBprY~EnuR^mAbXMtij?TYTE@&+4eaar?SvT7eymg z5=g*i-*y9)jG-nhBEuRGqHEV#Zj?VI*$WbITMP3z^&3dSu#P};S(dPfHr#L&2X^xQ zl$2_ohssAu2G>QjW=eCv{iQ=mVEhMCqxUArZup_pY!q=QQc1Z~hYG@O70PG?hl@L~ zuT^aRSVrYwzC}+s1cl$lCQoR$5H4TAbp%{hzV6N2O^P=lCz$|WV;`RELrjM0+eELH|1UCSI6fJ{8%AtLw$ z5(tjT@6=uiz;)nF;)PU_9-0tr}+#$`@BwF^9XK-W8Vxy&XAUm#IpR6=YR zznlr&)y^h_0y3BbW*=~kfUig5F-NwxejVp9l1o{#Y%jfO;bBJ;Axwt3p zh|k2Qx$V&+%`2`>xaCuE@1gkYVJ=>vsrqyDnRmq7;#2XD+^)4<={8@(SX0&;99U8) zVr#xqi#CN|=BRLeJW^4E4oAFvhS+fTW_Ik=r@D_W&Fqiln;A^J_R874suk2gI~fJ1p;lU8QPD-GFsbVVjXl!t_% T3Ek86L&|(rlA!XA8>xQ-TG;ar literal 0 HcmV?d00001 diff --git a/_build/.doctrees/deploying/eventlet.doctree b/_build/.doctrees/deploying/eventlet.doctree new file mode 100644 index 0000000000000000000000000000000000000000..17addf716d38316d48a4d8553b596e7c79fa66c7 GIT binary patch literal 12352 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 F{$Ipyal8Nk literal 0 HcmV?d00001 diff --git a/_build/.doctrees/deploying/gevent.doctree b/_build/.doctrees/deploying/gevent.doctree new file mode 100644 index 0000000000000000000000000000000000000000..04bb5684089122fa4baf6f92d8c516750d3dbc4b GIT binary patch literal 12748 zcmds8>yISYRo}-vduC^6*SibIUgz45v$M`j_ikdzW@9gsA2^d0FxwmfB zt=`>n&)NZkSFY{4bsy)R^E;1w?%B8Jzxt=wPpJRo*(?dd_@M3jek^>RP2`daS1Unrz7B)E#A_NIgE0C(y$S!pKi~Jo(Z@u2J_qjIwq)elg=-9*Vdc9?S;| z!Qz)D8^N-i&%-?8)+f2p=lir6^+1QY*ZBdhT(y6BqG?!2T&#$G=j5_ekr+PkyM|}#p zn7e)YGzrcI4+pEkBf;t5vfSx>F5_v|@p+%8ZZPC|=Ov!)JeH_2{irMHkyÇ{>L!8Bqwn4ZJv?PahH>l$=DD%k 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 ZMTJjBp-=x{0Yz(YW~JSy?G@eje*=o546XnG literal 0 HcmV?d00001 diff --git a/_build/.doctrees/deploying/gunicorn.doctree b/_build/.doctrees/deploying/gunicorn.doctree new file mode 100644 index 0000000000000000000000000000000000000000..7c6f7171ad73f5f5e56a3b0bdb59b8eb265b7aea GIT binary patch literal 17409 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 Ze&&$r>Cj)ez&$Xy%-p-s-m+HXe*m%)AA$e? literal 0 HcmV?d00001 diff --git a/_build/.doctrees/deploying/index.doctree b/_build/.doctrees/deploying/index.doctree new file mode 100644 index 0000000000000000000000000000000000000000..39165830841fcb346c86a9d07bfa86ae00daca3b GIT binary patch literal 13988 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 b#Ts;{${SAr`G9)iGXxmt(vF$qSm%EMDCpxN literal 0 HcmV?d00001 diff --git a/_build/.doctrees/deploying/mod_wsgi.doctree b/_build/.doctrees/deploying/mod_wsgi.doctree new file mode 100644 index 0000000000000000000000000000000000000000..d0dfa131a237a98e5da4dfa9cf75b42fdc2e492f GIT binary patch literal 13891 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 TfZmZpUla^vVM_?Ttk?bp_||cO literal 0 HcmV?d00001 diff --git a/_build/.doctrees/deploying/nginx.doctree b/_build/.doctrees/deploying/nginx.doctree new file mode 100644 index 0000000000000000000000000000000000000000..415820bf85d063f6691dd904dc610b648f3fdc69 GIT binary patch literal 11342 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 J!Mhyx{{w^GKBfQw literal 0 HcmV?d00001 diff --git a/_build/.doctrees/deploying/uwsgi.doctree b/_build/.doctrees/deploying/uwsgi.doctree new file mode 100644 index 0000000000000000000000000000000000000000..a4908f3108d7a2705c29d56f12d4335bee25b23c GIT binary patch literal 19418 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 QN^>Y@qsNFqM(xG_1sd)3F8}}l literal 0 HcmV?d00001 diff --git a/_build/.doctrees/environment.pickle b/_build/.doctrees/environment.pickle new file mode 100644 index 0000000000000000000000000000000000000000..8d4ee411d8c838510e7b0210751814139af2f3b7 GIT binary patch literal 4412379 zcmdRXcYs_~^?&-LY?4jyun+b2bML!x z;$7p$j2(mjnzL(_T)wos+b`|RSIeb-zf>P=cCKyYi`fm4OD`W>dDGwxgDaZjy-H

MIJp`_5zy5vnAfP_Y}ZEiIY=@% zJ1ieY;vFs4a1*3bHCjY@i{7F<(GOz!uI$5@K4OPRINrOwJONLG!zTNfAi)qVT0EP7 z$jN*J$5w{4D*9-&YYl6J$5ihkm95B4C_c$ew$^t+%I;to8G`xv!FD#kv`Y=j^;5sd z;e&a74jO*wB6TAr;>_0l#I~~ayx&NB84UCMY z92Cz|@zR8aV(DQBFzY=~`e%bBUNM?h0cKBM!d0_(H?!-Tkf^?0GAt9KT86Nws5f?nc#XC}h2z{ZX!j z6sK=g9abS$a=3-cyX z(&`&GabZ?iCYBBC=5lI;&Mp(@TG)bf6GINGlP7Ilnz>1BHI|enZ&EvTvC_=2E~gqi zcCymEZvpSagZR z)NLyp>*M=*AHpy$W;OVSGXo1%8unBW=F2fn_VPn@5ko^~cAUx{!X0GugVm~Djo`$? zdU7o-nVmbyuI15~1RL$}60RV`hJ$mo&}w?NoOP0jN@6mfQA&O`y1M6C%x+8=GCr*q z)oM1~o6jbuL`AwrcH)7XZ#Pg55Kf>&NY)CcRN)6Btjd847VmW-QD-)cxUkH-2WJi8 z|G!A5)Y;`w-5CQ+)=c4&v+IIfIR1hR@N5cnu*C*8D(%0FXY!`x?6?JM->|!dPfg zE;TwbSgZjKzelimJ)6v727d4g)_-RkC<%~ZD7%V;zY6UXATkwBMLiYX(hJ=P7tHOt zxv*V!ud9*J<1+DAka#_k7g+v0JLswou#Qphgxou$8joEc!b!d=61b;3SuB>?xD%A` zKy90}N4AM|Z#7U6`uPeW6jTWA(wT^alPZX z&W^r_6Y%_GUCX~va0Fv*z8*3pb()1pNDXBk(Vqdq5;Y7%GLtAo@-?(o+7kaImprMN zpJ)YKT!6B8D1W+!LnX&>t^~>sqdQ`I{B#x4EeopVh#01OE^mGMgzY zObo|FXf36|`&mmgHmdOS_-Oyh!vmO|?maqw`gr#z|6)YeBW64KY_BjIATk@&6$X;P zGXK%zy+<)$c6R43R19X6-d+xq8Kr&?k3Ky*kNL6-K&^a;$ZWX&?qzv&bbRmtF5Lfh z%$VKeYhz?oW|cZVdh+?fY0S8jjs}t0WE+Ba9-JQS$9y}rp~GZGY1Na{qvP|v2agV7 z&Yi5vsLU#@dUmq6pD^xZRfE{Tc7Al8>bDb{L2O`qdU8_OV+qO$44T)b1JRv|t!0 znk8ZFf2@fFQ+>P)#fwzIe~rzp5268f7Aq!Vu~bXN-yXzLF$s(G9k7(G#KiJ|hj3E% zWV6DhNnw)g={;EupkXrO2mVtCOz9!Ig(8!oKEI1EObekxkM8 zvU+8>0JMcJS$r!=haLPJPa9Jt>D9r_dF7ysg@~-#`!SW=>dQuvP9*OE$#^=xoLyaw zlBcnz6QK zN%Qvu2P6%=jN~D>YuDwfzAV+Qh{eLYb~X5=+EoyI!?x=mwl%yEF?#{0Jfo-V`}q#y zu@V>)!C{$W9ld;9fZ|@)5?Xlp&%Y}Yj-My?= zk&8X4Ax>z|IF8`y=n$ z`woSGVQ1U@2@YadouiPP-L#lCaD;$F2a5{(@UV%}gYv4t?*ctM3Snda!Mi12z^y;R zO4$NKd84EUA!L*qkb6muw+8Z>L4ZQo*Z}aI@#pw}AfBv9Zo$Zw7EBY42#vU42@KEd z!g+wFiy8h((I~qPkc=!UBvE3}u_>#z5o5L1U+e z2V>$>JlU}eD(dh@aJ_91^$Cfl z;hfM=tZJo=^ZmMB)nN}|6cQg?2(G28&S!8BC;rR*G=R6xDmW?~bV3P6EKnOIK0rFb zl#PQKCId)pP=e#xs`*Af<(2L6ZBz!0ctYDH8f9C*g+^!tt&a;TeOe!{Ec2}&ppXU- zAMvkIL<^lbZ>@wQLL)B7B|TR-d-V22#>ea zDy@-+#~%jp0S>`~=TefYFl5^TFFFZVv=TJpfkPI=6SY>@_SsugoB1MC;)U%S$(#B? zc8JW8N`HX71rC`h#{5|>KfbOOzOg(8sbYXPup;^}+Uv+VvX=b9s;Pq_d>Fp)e9{>0 z6;otgO&)X-ID`)&IampYkuo0PvjI#Nt)*bZ1jn|556!~9i2d0_rIE;D5f21PyfaH_ z>+CRz*DU$Q4p2gDxFWb0wzygt?+SJ(gbke@?ipReeK*=tLADu^iF^b`G!W|_SGRk1 z*}GmntZ(tmN!Z`B)A`%#wuZ}4IpbFFhz*qr*be0Bn{1P}F##5_Kqmy2i)t13kY1h8 zLkWCbzA1!HP$9nAF^%!FOLg&v;bVp&Y-|Dgx5xj=Uc$;TST37daQupw7NQnv-_2tvSk-DjCu?L1}DWH z9o;t3Zz;h65j13$XXbncDTNDUvIZnOyont~9gpasQ$%!!vuZAn+-GB7JD&w4LYUW_ z-$1F&Wg26%V}*3u5Qfm9VQ|hFMW*aEi5oHXcL;=u664OY;z!xA6j>(3A$aI%=dekl zpl5p;b_Czk0u;iA4uF46N6l<}NTDrAf*cnp^+HAvLWcCt$h^Z+ry{&WBQ6*=o7XtA zK{{FElvqRpjR1>aO8fT8?K~9WLw+PLoE0Nlw)3h(O$10(&^F_}?d5FqSzSM;39z8c zX89rsP{4=^>yMwnox!;5-N=?z4)1F7Jwyj2M!d}6>HgVIgg)7kB5?wX5rKYO0Q6(- zB2Lmz3V?pXpjcGv>g)w>HYzI?ut%^M8V`J3nEhRWoDCKBH$nS35Hc=`>=yq8a8~4G z$ADo78b!v%hiD}E&$-1GxnMyMgo*;gvmk$r2dJziX7EHsu>Q>;1Pp`7c!OymE-DFI zWCsyBs0Jv64P)wfvtCD*$d0Kou0bG7G{jc1Z??Nd_9YC${SeAJOhuz9ZFH-M!XDY| zGL&0IBd)KRYPkCw97m_xmqd6J0)F#iwwSE$66CB~N5}yTLBD+o$>i#~+9crFfmL$2vj3uh$45f`148Y9l*Tn#t&uT~mk} zKq3(V8V6^kiTFK?!#D)~mjDjfBFJQeZn|9IPzd#_80Zpt@9U2Y!mt?K5-Z;qmO%*i zE3?HPwzHMIu_L z7r(D>GYG-H1$Ri^OmCM-quw`ogg6BL)io@#CCK-cnL!BlEf_hAj0PbNfxqqkxcg`z zfC&CC;jabasY4;uw@um&9VjvOeM5-=BKY^rUmLn;b|E2h@feFp-oj|8C5HF)#1MzT z--hV}+)=)UJ`|0?*=33(jteLv_}W&LJv&N7#_=cw{O${WPcLcQtYz@UC7NJHIE4Q- zlffls$wDV)@i-28`{h@szqF~qpRkl0mZPu?4%RGI_QL;gqbs|zlHM>c!AKvh;1Bk( z&2&j*FWHc64vCS~G&G|63Y;ga{}|P*W#`bd+wf^p6l-<2&a*5bcSsz@;6_(1&m(^b8dCxBY^@H!D$ zL}GjI0UWP;4tv5!Pg2A6@PZi5^Q^GC^JKPE8mJFX1V=n?JunM#sV*&HzR_#}6yd*Z z4lR5>SuMb3!U0-_!A1f+4?$SO@c#Y{yjgVu!xUVKp6b!ECfr1m0utA^VDokX!wYoI zy$g7+zPd~aTdK<%33XIreb2L|bUl0_h9jOpJJJCtpXaw{tO^F_U z5yKJB*AEsiW~+K}3uh!!OBPH$KA7--APf5yw}w454KKrOA^ChH&3HGWl@Y3_V8d z5Q^~Mv41RNe+fn$Uq4#FL19>vP_x_~5hcMRrZ@4ESE;dD*2x+h!Xptn=mC@G)pn_7 z0=@Kz@QCUCqxIgy8H`%svv;XFJ^FhJNL*iqgO@2qj}eP;2>E^Z%SAm|*;k0rZepPC zp+yQvTyH&sqJ-@-RisBh385Gt%4*fN=z$+X5&k!9m1}d1Z#hxWFn6PL`Y!Az6ki_?uCugbMdPI7HA>4PKz#0x5 z-g%j#_ZX!l7;${$UPo3E*l<*Axk|Fh*P4Ne`@NHDbvuLQO>L>8N3ImZ5zhy1av1jF zP`Mu7ryvp=R4U<($%n9M4==qm3~?#H?v%nsn5yKJB+o#(F7JH_;^jMt`Sj6zI`>U2t^|6K~*4Z88hf3nsV{{Fn2>%`XM>1p>4*KX| zge5TI03Ftw>Na(*UOIRv!hh4@<1>Y!0zGou0Ey7QdOo>GMemUXG7cfXjTP1PR#{8v z(dz^jF?{VDs#sFtd*m`6h_K&(y12kew|SK`<>-;arhvrtfh!@l&z+`ZJ^HnR7_*sm zAjN$B*+N8Od)rBpYSqIF1Qs!T)BP0=#4OfxIMSa|wLHYsG!E;a#QCoKm|{WLFMGuM z2#r|YdJ0=a8by!D5<(IFo6jcmtzxboktIMP^si`=_sEwChH&5he73l(Un&c4Jv>Ta z5ySgmRIB`ms6ZD1Zq6TUb5>H;q)Iz18(r zU)$}l^3EuRiT_Jt66bf5&wYFidrHg2@zgCDN$2&ro*Qp1o7JNSW-IIg+}|~;R%u8$ zZm#KOZj1D<_&;{vd(w`x$jp3k+3Y0KrRF?U4^+-^I$0iD>tN1wy9l;&!k zO?3*Vu2S`%c2~bi1dW2^_{hrv_sh=gv9DB$vl3Fo1c?lfX1B8q&Wl%DWwX723@HK0 z@B!K3H`@v#?d@_St0g-OOb+2+;pikh18KW~bHf0X2;UckhuisFfV%|C(s=oavR_BH4Q}naw8`uq~4W(*J9BH)|#$nLZ?$ zM5-EwyL*J3ramXIiTSOI%Zt&2%ZuM^qZvX=c?`uF{HgJ&5QBi<#j^zK>1;MiZQ5b1 z&0}tf>oW(=*n!qt=%Ab0N1~7VaGw( zy+fx_0IfJ#qBfaY2F|iFMMNai-zjPxE#gro?AZUULwltrX);yHMUwrMBAJK?p-{go zDwLohdHzL_2P-C_LdSWQTR=UjYdH>G6&0?TlO+8oMN*e8+dR=8D^KLSEGlOcBT0!p z6z(xH>H2E)5RRYEpnRozveY+FJLGTzkQ^>ULDKw<_%Ta!W(%XznE9-etvq>)ID&)Z z`9R2%@^{E>1VYMhF^Lc3fS164 zQLllmN+z8hwou$}ElY?)=zj&btWKu$2^9CQNAPkz9I7~4tT(u_ls5ip-uXf}!y5iU z!zV%By}Y;`UBX>silQBsbn(}gPr?xV*YFFe2|GA~K(+`3`VM|}z1S+iEys_@!vwHL zA#h`mg)a7e4HCc*{I@RaDHOqPMi1-hIsES-tZhKGq?n*}C~qMYYkM7%D8ENvehO!A z;c6Z%siDP3!P{YOOi+SX!zJ?X&@Zm6qB?Vj)iS~n%n2ybez$^KBg@&8DCXMbL=EBYc-BAKFJxLOg~LNvhto$u%ZHLMDq|N$lJz5jWyMs4>M%SCpj0RUP3%7qKeAuJaa4)X zzuCFz68JVLK8Lex14VJ_ZbIYJ<&vgjNnj~qK5!US zV~4~hei`%JchaG2_n0T3iCuby`$|L5+ubWte3C=P8<^xS=Wrj^B^+g{=Jm2_^p4%* zO*0)=|k$8=KB&W>cj%!NcjutGl(!9H8 zacxYxY;gPPYD3};nqjsvk!LLp@| zNTU44^=h)bK~LYmn`-q59k#d`!V)Tg#P;>;KhBn;2b0TB;eYY8r|482O8d<3ElrF> z93NqH9Zlym+)D;3yw!QT#)+XI>#&a<0vXQm4-%QkzaM@D_HY+9JU+5;iJ;)`upAp= zCHx6EiSUE)XZ~BKc)xk{cw&cIuMn(720|wxL?e85etx1an(W#L5}C;VHWV68VXYw9 zT0y?xu1!FPkiO6%9SONe{u?^Ghr$^TTiX;MFMnKZwb*70Tg%=LxdqXd9qH6D94bb-#4L5^ySUgZ*ojBd-NWKrS*uLeutPUwBAXw@YiCDf3 z-+8)NZ|Uaqi|ZO{JiGySkkhaTjitd=dv3jJ}l zxt*+^4?v$H6a9z3U)PJ#ug;zvH=RlAFyAv6Mq?F?xZVcefvQ}k5TL_+&;8c02pmFx zcmBuQ$>`A+kN48x*99McZP6tT;lG1Bh!^!MMf?tqPd_#c^dDAGBKR)<`4#M)z-jY+ zs0UC=mOEsZge2KgSfc(0{ooLm+9%3E&JK~4AOvTKM`Wxgl)!AKH;=7Z(?;v7rvgjV z-y|U+o|-cnDQkyAkpv<%m54<6x3^|-(U!`>-p*)mySah6G?sg+*Cc#_LvDNO7DHMw zI`EKCKa3IVoq;f;IJ=3*?+&G>F`6n*L_wl_KmM_+BTn0;LycpMr3xYl8pRM*(BXBEpotpV*23YxeWkJ!HD zzWH=v{)Ime4cfse6}}je7(ZCn;hs>Ry&8vLEt#Sb(??7Dj1;VtjQ9rbwCTF|iwCl# z{=Xw&;(p5>u1wE^b|_2?&Si!u1pTJ{V{-Dd<#hpC{7I0-QO|en$9xtu^nw4H@45*% z1CiwKt)L;`{Q^jG(`M*UQwcve=8s_r|6Q2OncIexou&UhuK@qrkq9i}fL9XcP_Cyi zbeL@TU#)NLKJ(e*^OIbneVlg$g0s9CY!c!-^eYs?EtaPS z?vT?EPQorgiT0cHb)!ah(!1UvId$I zrgvwwB$X0($P)=HF>Q*h3IO-F&6cUtA!k$2r2yd_9VFGxky6SV_ z#QoOtg*b%%p8Ll21TIa9FKF*@>ySdgP{i>LeJN$=kVnvuH@EY@rGK|Tg#WJlGY%|p z{g~(w9hT$>G$0@(Vt9Z3hdC5h|8(TzU+DB*hAszSTOvUtqHl&o7x>6V(kNY`X%m@8 zB*J%yFeU0@I*rI85y7{J0FRblLwUM#+M>h$384u4MUX1x>I%w3Q{{G{3?PY;+sz!H zg)}E+?AvY+1Vpx zdseM1p}GLw#grjsBPdbB+i8ZHpSuYCw99lRVq+X4fVbZ)K@u`MOofH{Ko=RrzTu$Z zI!)NQQaX1RSBT^nSfqn-1)%>Ns-3Z}WOr9cz=-ObPA8-a&h>|2fu zuf;p9;2j8M#@}HtH*TdEj_AI-#y1Gou)VS#VP%^A*VLF@vQ_@M>t6o9V`O4~+rIVI zGh;I^9~0MV%WDgS{)6@QV(IQ&*#~E=n%_w3P=^$N+33*F=T2w; z-!U?=e-yCO{>iH)Jfd*#TC@Nt);*8Ne{|e=!^} zeFUZZc+=Tv?_yog;Xya3%6p!gxWfofK#s5pwUHRs=#=f}U5Py^5r2mS#Rm1e9n$q^}>mf)_2d?Vk?i+Jqq}1t8IVgT4w&Zm{&3wrGb%H-ZpsAzngePau^e z3-O5TZ%Hil)F<1`dUgrt;~)wz8aBB*oD(BRp=ldF3G-L<%PxW(=NAD9P6*P3O+rAl zu)R$m%R7v(1R!WV8WC~VIfH}zv&mdv&h3!XseB12(Xua}ZJ>%xxe>juFNb(U_H~l& ze4_N44k9zZi~~ z{(8GI+Eq9Kf&ySza9M1qnkO}FhmsxvXxXzAB+a+PkIkWyWMbCgpn^b2Mew-9`%Uo+ zI6IMQ-l4)lfTXkxORR6cglDyteY&6JM;7x-LlIyQ?$=*d7Z)qI{JdHz=pDjq@O#S< z;}O$`uWsj~%ldZo@X2F+ZNEcbBn(4E{~-X0?mPTxeGBs?h!bZJ2B57(@8}R?2}e@K zphWvU`ubYFtC+ciYZ8=T)^LfOO>7>o)Aa3YVgX2WACZ7Z3wZQ(FL=sX z*tkO?Pe4M`6qSg%ZQZ%3y{UV{SMc_2+XR$oxozDy`2LYnZL8rD`47oP?n`hOCtO_< zns*pX2`#et3%pxBh9(idO+RuX;QB<;qdE+41fy{?CXupFTH<2tl{1AT{e7s3-ZZUiSWzCk~O^?5o6A{6g1 zAP_{v?D2?<-6`4(5QKf*DaIty_engyNK?>tm@yH6(9fe05j)c7@B;Gn!+J_jWeC2$ zj+B5B?e|eUQ*66}lEzn1Y&bf=f2K)Fr#du?z^XO^6TN9u`K>C+$~v^^@~)NHViKtd z5$nmT(b?W_cgidfgLO>+iSDn_#O_mYGbn4QuW^deaJyZH^V$R$b2p%qASP&dL44ha zddptNprP47bS4HTF-#iZ#5ggxl<`->#r}?IfW{x867dIcn}Autg!=0*l&c9kOnnH! zSf2hPfNP*aR?&}lqcU(r^&yGz2%f5`G`%_uc!VMJ5`aYa9r&s}xHkf>qlP!4JIrW2 z4w34xMEvF-ai*L`hYm9u^GnO(F$nhuf2hBZ1k(2LSU7TrhOVf4yW06CSTe^)$ro_t;MFE#?l2x@nHiY46P*`uxPKin z7tontiT7_}opHSnw;aY(mNE3i4kzhz$}0>c&G%wya37+&fFr+=B|3D7oERZA@qZxs zA+D{3({(6aX{R-a#P$Qh_UWqLE+G?|!VUYd-y?}TjEVl2HZ^DmCmFu0d<~{Ac%z@t zyu$`@2LT9~*#9OvJw2N8O_}4DP$C8Ec0!6i-Y3szYYZgK|Igc-c1dy^SEAI%5k&yK z?~RoJxFA4+6i1Xa@0~_3WJ|rNt3XH`NujLF$f{)LhFrS4aL)V#eSGtOpZRh<+4=@NU3xF9FWmRE8?G+=1K6eRery5%PM;VD|VoKg;hYABd)N0jvw z7Cvg0buk{VE56&%1FJ;^>t#Q$s7|bU3YL>iIdzy|yy!C~EZbtVN+2fL5*F>q7FhE= zUx}K8F-x{+6A>Qr^=|z%bTJGs4iYSv;v&-zS<{=<1`a%UtoNbbl%fab$uAmQS0!+= zglu#(krEw%g7dxLV;&dO!io_dm@ctT7AJq9vtX>qTJ$U_$TT1Axznv3z4BQ|@Zq6q zW9T*Qp!4jtsQoN^1`%u@mZf>8t}Ki4QAJk_($PNktSJq!t8zRIf~^F1eR+U-b+!v0 zN-onYvV-%&{FfsCXKQjGF+&TQi21hWO~NI~)Y~I%+GB>y!PR866MgUKxG2YyYC0GSN2+&aXrq9u)FHFZ>!B zHI#dw`wK)#bqI|Xz=6)?Dl>CvlPeDjH18l+i6K;Q_%Pa1&^!${&Ql78HkQFhIZ#m3`@5Us z+sWoE&neg=VVp4<$h1jm?Vjh_*Q5~`sN5^s_WkaHf*vR!h}9Osmb`tEH}!%yb&#~> z4_xrNcdNlWFW(F%6tc+UdIgS`-PAQS*r}1&x67?M+M3x+D&A8H9B;e10Sx9(z|3z> zwG%4)91yeqf9{TCfsAmrCgOs!kDF5KYz+9*qW^IiVW5JpkDx1h{F|mIbWa^UO~LH- z@7-lJFhLc6kGq%+-bOQ(J(`VoX9IHkFZva7;DXjQ*P}`uTrJEQN?vaT&O1x;MfI9S zhUsFlG(J3V2jC#T>ps^}r~2>;b^EKqoX!si6I6lg3?h_+Vql*w+ra=OuC8kBYl=l6 zr~P!QJ-4H6;=aOtDn;5RO-zvG4CI|}u=iaR%L%Wh|0=Jh9-5id+Rn@SyUzkOKZP+9 z=~ntIP&D5y46Fw;Z`5>k; zJW#a5N{isk^}(#9h@k0)e!ret?5pKsLYLB?EKkno^j=}b_wNJ?R0X7qD31uzD^Zdu z9W7(szF_v1C)8*lyA+VoD8rks;Lu@?N@IcOYCuHJ>=Qax#yWPSY(HKXwg6x=1MK} z`YJDt1)}Rgd8y|}78In*FIN}rcH|1I1_b4`lkdMOzW(!9>M(#gbEZ7@i!sZeV3n$1 zOdpcL1L6BA!g*DV*5zcr3_4Q5%&n2w$88j_RRO}Iazqi8EazPX__z@8p0&UuYWBq} z^gIhL1PQZT10^Y<7T=aa1A*eMy1`gI9$L^DT=T4ft#HIV=@zW#koF;&p&)rwk233jUViPPJ9IjN7VS%m> z-1n2Z0yl{uj?>`@^bk69eBr*A(NWq~9~(*Fn{ePFQJe}2YfC+*3jt0C)2FKG8)r`3 z3$(XX4jnq`c4kw4Yq~?DB-J;zZ)Z&m(DUAKHY)DZ|LI@t+hC)cU?5Q6H{}unf#M=4 z=#3R!{=ou7;H{5HJgA6<&Q#AgDqe`sEZfj{P@wq7?elb%6*%>y95Aq$isD#T1B%NDXSl7Xd@xX5Q$8fR?d87uM}_nj z^lv!16l}&@7}Mr6kasBLt%GX2MgMZ zT$cKc6>&o&7v@w$g6?uiH(v*iq=tQEF`)(pWl)~Vj}|qc?uK=+puNF!s+Z7-c!Y*9 zY+-hNWRPD9$SJ;v*QAEXMJcVu1Yv08RaG6J_KpDy+S@#zuimH!%#tm(VaraK;Q$;G zf*L)g^B98@)`Ys(XbTF;pv^|LxqF*s142-l)MtHHCWDFm=@GB)f#>=$EKb=F?JF!! zpn_BnJ2mNYLGg!~y40}B6q1MN5D_$^@3wYiT*3tH-%$(f*IoM>KsHkizx4we*Qu;i7jp>M`J6F!igS?7>JPJLD) z3B_d4M3?h7^jZ7y0~``q{=cCMSRT;ZKt<#u@0x#(oF#uk8;yq{uaQB1%QwE#ccd?9 ziRmStZLb`ovJbH#;4@#qs2UIGRkM+{zWKSNOPx21U}H$I6Yj%CVw!j$?7ELIQm=oj zkQYw}6>jka&XowkYwoBSZv9Y{12fTeqT#!v=w1W!rKH4dd z%M#o^r38wmxVK8k+5APq}fBBG!5?RWVutO9mpoSW|KJKe#qUO@Dx0^rFzE(7(iW++j z1sUoTOA;FbsGqIBrEhI3o<2T0di?AU%nYJ_wg!smIWovu?oE;fMa9QQ#Jc7_#D)Nx z#?_)tBC;0CdBZfW9^q<`OwJW*O}c(vJfM3bX?Q0`*>p0Cyas~!fgynyvLqVFuBmj6 zY_X--lJB;3%$wy=u*aUJ^YB1;)hDdz#%?-MK@M}qCx~ZB@_BHeyXn)Z#Va{r=z97A z4N#1-VZq^wF=f#J60}!*T5ZrMlWoheMg!TUkSq+4mUz}vnNw5>3q-elqBUKZIHB7U zsiNwerINi)CG%^AO4u~}X1O#Pn66tUTE)0uImW+gr ztOgRCS1o6GUtI}Ulqcm0-K4`QCEaOE86tx5R>Y`7?Ud)0(>Aze8Y)#y>%oFM%&qZA z@x@iQ+yW7ds7vL2bv*6GW<}>>PqndFm)@=}B|!7M6pueVtA?+7<#nLoMSoFCqnm+L zei?1M{vyT%t1H(RDxRGt2Ks0&uTCw?H9!QT%O^h9OOepO)-si>rj=>4 z@p`LeZHhs``_XVqzJPV1)}zb8s5qv7PZn>(l;FOb)=Qjgjx7oPeL4^S1%Asm3ttozNuWthl0#u`mW zCIy#c3eLrJWg<8*UEfOKrh=Z%eK|v^ zF=5dJ=NY|6-8ZMk1ZTpsVH@nhvVJ?f<80!7m`#SO#hT);f&)u}Q`8P4V_+Y;DbGP~ z&_|xV9)Y(}UD?Rvqb_pv?}X^qMtxM|^qMn|`yuX)1S6;WcFxKweAu;}+b+5L!RtT# z91DE34kAPCAtTobYbPpK57xG*4ZNH0)y<`Sm$F3#Z=&CbdgC7YD%K;{y}zz^QQz3U z_pkAgzkn<16FYLT{;;0;nD*4$e8j;aS2tYEHXmjBK*5U80r4gh!Gbx=W6<}tp9xvU zdM0$)NyA5BpC_2NI*erYbT5jW)h%E1d3}T5>$GqAAu4!-d?tFEj`<9Fnt(6S%XH)m zdYF0~Q5K*LAaa|~qJS@e+K(dvD6CrdYjuKfa?-wE>K?LE|kT4P5E@-MiNgCHeg7PvF zBahM6nxL%$BT2}1*X|;zrF%4(Ow}HnEppc7N(Pz++lJ7{@y(2c(*-}8Cz*Q-=oKue zZ)K=eTV`1obQ*w4*&JEdxF8Qr|8hI0o3x9uDFI%sJDNU(hJ-NxHk}Hx;QSr)&v18; zQ@0s(U;U69T##QwaXmC0rh3DmoUQr2fs#pGs>X$wAa&gd63`X`MMSfj*0wtdAhVP` z_F$k4da%f}i^SUyT}=zjY(CfIs~vKWURTpvNKm?-8g_Uy2+Fc;Pt5>9cLz0AO)y?o zYYM7f7xV@VU9+2CSjSK;U(Nx{SDfMkP36F$Uzf^Vi159uDFG52r^E*}A=K#e7UoDcBT zl$=dCib_`Ksd||Ohm4P_8P!AmObWf3ppLuHW-;9=w-}w5$qib;^(P!sn}+`>%>qe3 zO($0O=g@8FNl}6$5FE5YRLBEa8B6K2{iO;)4d0yT(^8xTl0M{_f>~{1b&8)2kbl~J z;SdLGu#(RKIiK)vLk`_uNY@`EO(eJiiDNb>3TPneBMuOXij4Gak4AzdO#(rm8bPL- zt*TQx-?Ta}?u|y|q@rPo{w>$kSF(~jk%|gXJ#z)0#C*{AvqpWR$$B{*oR`tssydiN zMhTU+HD+=}&w10aJ!V3|)vC#i?>3<&gEHHFWt45{SWaZS!NF|j=%DVG$xPbX@JHRn z>N-euF<48S9ZF=x3ayPb(SGYxJ)_1~TnDR(oDwQOOIlRDvu4wica5e#T;s5JV{VuZ$YFJ~SDRdc_1-0i=Y3)!G8J(8K!Y!c>gRrEiSB?zG~J$rfj z`02wxRjYN~0nY}12@WClKYPis?yYq~cUZF;`GaWHtk9Zn>2VI}$qQv=rndi8@e&${-Wm&kN|Hd3UHm1}R`h7z;xu^YRP2fYyMIwnF z*dEO2^fxQY-X%E}NV;Q&LuBb`Lx~Aqt}tNgw)ny3H(z}L)P$izBIvoB*5gd+k1B!- zDfSoSn06>~mOQv3#{@;TsVx`N$?%+Rr7+f}yH-^HP>$)=RUTX;cIjC}uecgHpvO+B zY}$va<-ai6u*M;2)DQ3hOk8?dRZUFLW~VC&ZD+<+oVqMWT+>C;0wO50F1~~^x(iEP zvys?h6T7fQ!Z;6f*&ZRGYr7f$9qXP1*Qc5WD3YV$q2f0C;tN}yHkCg2$3zH@qA{$v zc8BQDaEpDuSj)2sU0AR8|7Oq2L4dHLD=o&IQ+nGrX(}#sDpLJYAZia9ZB# z_q**`e`Xc&2yY=9v`UV_!1qJX4P(P}WE1J{drX{JGku~A3@MRqa7OO0me zlks_ZT2Vj@t#(KDHgN8J6fY@v6pq{iig~>+tbQaD9qKFcm1q0?&IM zkMi7cmVXp1@fCK+VvxXb!Q)u0)LtYjZ^1Pw$*fqY6pKC`+z*R|0?RvfULv=u;70mX zMwr9&-5NhW;w*T7AVpw+kb@hJ;l4TB9%*qbK+Nz-a|RI$2sD6TDXf-fx~g{+DkavYZNzyJRUX9N6ky>Z>1Tm3m%IZ~5_l zq+Kp!Oz_radQ8q#iY7PAVH|S1GL0ZP>m$0c_-on&p{I>#;{E*DqvtQ5GW+h&nuG-F zHC-4i$-{r5TksgCAPg!f(*z(Guf~l3{P5umMkol@Zz9xq;JY649UZ@X9Ar@tcHG2h z5y5#yMLrK_OS%ndrT$TmZwLM=0U<#2cz|CxA_#9LKc<}@`Q_}mRRKtORs##_TlfM~ zMpt5nLF|IiElkqr_Z^5Af0HyNnp@KLpZF&iD zex6_!1oAa8`>>$CgfG}UPpdHxe-$)cK%{c3@j!MRDLpb;3R2>$uSzxMp|{z zHtVDMpw*zDy$qE$x2wtN8Mm#V9|lG$rv?yoVeQqQ#@6jvdp*=<;>f2|>v|~s=aaO^&4wO{c0uq#W$1A#{nKnt*#UuL@ImzdX)XkUz z=R%EU$eY0-;&%NtCxR9@YDpOEH3^PK)L1zQH8ceL4Sk7j-5Jx3WWlXf4KE*MFN$Yi zpm@*ybvv2TU7Ea98(Qpc8UTXIuxzS*tco(@*$EfJqPsY;FweQRf@Idqv z5UEGRCXA-x=E0pb1`Qp@zlQPP_S-AiTl}7fV$iIb}nKETjY~NN4YrxmA1`_cZM37za$jA|@9xVu$><#59A@oo|>gP~Bk+TZ_dSjS09kl}*( zl1J=L-utAj`n=k*4ikiarP0n^?p*EIEG#0({AS^uy7%+fu~~SiAoaUB6_l4g$=|V? z-f0aoIZ=MkN z)O@UF844T{^7VwmJLx${Ry4iV6N|rF2tA>=+4559RfxrhkbI$RSG=b7S||z}67p3v z=RRv`zynp8I=UJUzxwsBe$NW0*E$LU=*aYR zbX6#Mo|%kZdpe5`6}N)=ZObSQ2NZ;w2T%=7g$D^{N(4i1B#L)evSU0@|7rs_m9ayoYgjTtY%@?079xQ^pKn`tVMhxA5x2KJtE#{_TvnDtH zL5y8g}jl4%TI|4-=fF4OmjcPO3Ggn4w(KgRFI}rbU3dk%8I!a6Jg;gxcQ( z7D(mResjJ~37#CRf<&~?tlieM?8Z90Su-<=_X zF6;2s9m%?Qx}Xal>7q>9jvJNnB4)qk!`g2A)IOUe0hIVlDKFt{7CIKiepZ{Q&?*r) z6!=aDmnbnnJ=?2}H<-aDr4k%zSUuR#jZ6O+K1h*$MoGdkSHzh5vg1za^HSW&n&GHT%`A^pW zghQpb`X4w`ZZNx9`^UYIAex&2Web42QIf3>K8}O5K7hmiW=TkQXVM3Sz7tSy)PA?6 z4e>wf_u5y5y?5k3g(7o@u;BJoZ50b&8)XkZ2>rE>lo4vSze{`F7i+vD^>u-ZU{9$5 zBgC5NeRD4LCOEmLuuae8O4lQM%cYHXpA&+AF0n2h`J)=abpFSI%xbA1&rH{w?Mbh0 zFIFmV>gve&%8RqZC{3_J^#2st)O_9E`BRP;tJ#3N`u}oB*#R$vODY562>ed!K$QVh zkoTFuuF(i8b*%2$pxAgSY4yw1VzU@7(!u!$YV{E(EcundlB-IO1*zc-KVOU2sI7~b8=^*o$BAF%>ijSw|p+tfV63w>B4oj*9BD0}%aky`B zYa&SdnZSC6fN7I%mhY*}GC`bV5@NoRY%d3zganKbD`_t4^L0|`ftrg?2bq$(_~wVI zi-ri&SaIL~!($U4$L7Yv(}}t~fFdm^&N_&f=vv$|Mu=sj&(TCZxtGvey`|}qx@vS? z&IbHOuCAkxlyg79LFM-68wV2{a6<6i37L$-f{Mpa@4fhK@#5w4#4O)rb^O9mPeF7b3awv_QUoM=Tr6Ce`21`lL6kDnN76kkzc-3(#^%CD9SYa4WBONtOeWeqT40WGke5ZD!_u^>sB^ z4bNPYl{7WM|1yZV(KpePj`FFa=1Z7+(8OU z-lF@E)Pt*qzS8pE>Xa^jnyXiD!vp#MBv59djFJXikbjUTH!@h?D_If96j*S`xRa6b z>P=(?!NxVfnyg@vAs}amHQj_v2lawj{GRMkgG0tgkpA^{Ob>dg8$#E`y=VVc>ML{q z5M7xoh{p#aH%1;FQf}glz7!*a)d|T`Jy|C_2^JRAb!~{!lrNt%_SUr_i3|aCZSa%j z3ZZpv$bmyfvIx{=xA%^j5&9?s3k&M&snUP+&66jLSa6X9aI)1;gMzm13q9MY6k)ly z?h6yRAWxS1qeGTD1BZ;;Fqz-*9zT2V_+@zIupoR0SXuKsV9;O1SA6#$wPnzB)I)v#xXh>+tfB#j_@E^J6 zmh51@efjwK-q%6N_tC*PVC4Nqs^+Uyyw?4(?QGZU;SDN?UAb#7^W*t=p+kgCfX`bV zB-6IZWuPI!HMu(7I2APAw#g-6L46Ho_tGeDJ8SBXS{gmX1ZgV2>XIA}H?)f#CAax^IZ4ebVGUwN-wjIeLP|&*Wq)vgyjJXS_ZFic&1-a`^Uf@l~ zqQ10~S-Wj_k^~05>rU!aBXiV~akuSGVpI^j3RWknX3Gta@NQedLQIgl*;$?76;(l& z)wZ*<01}jLP0Bx~b13WKYO;*la@#d&13aW8avwRYyXRg*g3^`p5j+9(0Bc{R9Abjh zHK{tm5{-*D=(bHN2@Lv=F;vv4Ruwrx=H6|*ti}oMCIBQ`4>aLJj2pGdYd5Ua9p(Lx z+8Jm_aHCkAuGdjJ0oz24kr7TAPUDK>uZ8IHq_u`{{{ZO0a_XfA(UDvA}ed zGgWgstVj<_GcLi!l!Ssp_qZGy*n)iNBLaLJX`L^N1*RZh^XiR$OtYVSIW(}n@2vRk zYOq{V$cADoO}T~Ulys4yIWw@}zZ>ztS1CHpp<`5bw~x`WrVjs(5F&@eRt#AKQ= z71MGxc^!rc_0^0$cnHZC5OpW&I45t(Jr+U?)cKUZ~7}Dp8|q1ZD}@m zOQlqeCvWNI1JLWv zPqdBF9g5)c-x@VBPY5K{BoOsk{dF~6cxGx%ak8QyS~Vgj55fOy$8I;z0$IWEh%X#y zmYaZwkYJXJlx`yGcQ9RNxe@pd5y@uNmk0+A5y4;xv4@*jrWqh7n787S!;X_I= zvGkJG^FF_xbe&ix2_PoZa=e+JFQx0m(vyODD}>|=$W8owC0!?$o)U)-DZxL52c?GHr=Z`+PlJCzjB|86YQ^L?Q7!F-CTsM1|Op5KJJvWNH?Z9EG}0AaWd# zlqn>7OBHg0bGm&M5@&#%V5SH4^^oq@m##Ct7#%V)bp?}RUqoMZ1=x^~DVY3Jv#)~T z43LxQ{&nJcq6ziY{WAiH$#iu(ZMv%T)zt+Q5X8r$-yPOpnSzH9K9h4P4>6OA!6AYV ziY^`b6MuUEe`OLMQh0w-Cv_f0zbSX@PZH>m!5g!m@G$<$3T^$V-xIPLUs2FT&=Q!Krt4=KT-!%KRYMMshVVlpk~K#LAf%8o^cm(nc?4pcx6A2!KXU2jR?i|IP4_A=`+ zKu$0+d5I6T=*Un&P{uxdNpJ}Ja0bW;=5!E0PxuA9&gnvINC@ULUa~{E)?If;*<>7$ zlqn?c_&!7-aR$fiz=niO!Q^MYef2J!0dg{<5u1|w z)uf|q-PK!005O@aPNz**m9CR;lu|$eK{x+GubLPCboBh$gGxPn^HAMfPm#dWIbW^{ zj-zQL9Y4~53Eu0;H1zT@Tc|(S9VD`YRUv}&R+3W%eg~Nq9JAa(YeB)B&TaUrefQk@ zPuZtA>2ONV7FLMJ=e6nL^pwKqizoCi1=Z8@-0>Byf~o`|6zsG3szB9Do_zq{@NBb7}92)av1YK;&bk`dgs3y2gOJ1%ntDJ>bDAPg_A6I4}z zr06Una(5kRLAY8h2d7~Gv!GQ1C&}qRL3MUP z@C8myZ<-9K-LMuaxTpwV4eUUMfDiDUqs^)s%<#Mp<$pGzd#e^)gCJNBcxWjF6O(0u zo}WkGSI602F6g#P>Q5j~Ra34^@a#{7%#=C3c|K_TWrURa4n3+7*>AK*UtoJLZofvA zV1&+3Bc1=Ut+o}6IGwEN-u1waf~)l+)U+MbT+nuF`u%KBJo)p}duqO6&Ks!-$5}Px zp}msUuAq#F22e2HNHbT9F>7vuQ{Wn?fmcC-^}{slysAcPdXsdy-TU^CUF<&e4i($^ zmJWNBqrqmtY#`X1*rmdUhKh^M7U~FSe2i3ZlrTYCV`X@vv9bdXA1CSQ-s#EWZSj=; zrH2>Pv^lt*L@-VQL{}*M!V!_NYqM&$Se?I~RBwu*zI|qLx?ODfOh?dg)|=7hd|BC7 z33H%ez2YaJC#@2kf<}|)tRcbZ=W~3Bd@@k5Uhwjnc>U_$?mj%5M+*n0OCA&L^3T?j z@A+*yg1KXs%K?JT&)59qd=o?*cFC881Jk=+zUHIJjCCr4ljzwzX)v(71Xu)yJ$5Y3N9(fglWO2`3%?L99?>$Aa(Xm@kYJ>Gu{m3eijv+aAC@J{SwkhKLwK}1KOa_Ks&SC6 z!=?v-O<&C6Ktq+>(v0cii-4!Wg1dPv9*C&jS|WQ#H_uYT(6XD#A%d*Vl^Wvu%$3E9 ziRh)}ai2sM4@4i%CS*W8%sr)_j`dHt;2?f+NU$MR1Dg7=6CYCU*59n9tm%%3$=m4V zBf)-Ujh5BnfkVWd`fIfaZJ$WPv)w~o4VKkVV?#o+NL(_S4!>rNwx1&5_>l4*y&t+P z^nVgpg8ZYv0P6cD?;#R6u9{Xx9a4R***d844ZekZE7n)`N3fv1;AqXe9|2>legljS z5oGT=ve9I?38-52hM=-|AbO`J>Zf;iJQ@x(b$-UQM(Hy@77s*qDcR>Xdg$GeC5H&I zI#+%5?w|^K_lvHSR7fQGvH}Y>4EejOdkq=qOWofeaCNGE7B41JH}3aIWbr`sp)ufC zU6@6$U28MjM}^EMdgJ3F4v4uMej8#&16mgIOB5t_31}O&SPDq_ASb1IJK3mhG&YV2g4RO3Mlp^A za&CuThhpoE3t9849-B z8|y-Odl%!dQJ!x$ugv_r(nY0|IK=9Hm!;2&Jo7x{$6`@GDoZjp&mNO*VE>Dsa zfed`PPX^X!+~KqN!PP4TkX{I+kDh9OYC+e&v0ifhLn-$KK)A%__+He%|6n#}3ff4I ze4anJbgcl=@6M~uYFJRT%xXyY39oG+jGDAZMiyMcW6*T-+W`y#x6|no(J2i}Mm(## zlRk(~xsfIh15^Y-6g!#y5S0riwfzoV@WUs!0%vYS=VQUN7kwIfOl}p#zz96k86FD; zqRSK-ctY1$758apb6UME=&4~IN+56>1H)9F6kwK)MiV~0=}M;oL3bO%^1sN5*YM1BYOHnwTkxICC#IeyoLq!d$cuB(K~BpIi&eW=)!3*a&}D{ z0fOpX_eoFwln@U@m)r;RLn>PhjeU2vJWLQ?TP!ye_d|CSKi5~k7x(TT(@W(?Y~&Se zUOE_Eb=+?OC|Ey<5dMsg1jj@E8x&jaK*{CHc-iUJ!tR~VT^Mi$-Em#Fy3~FJ;w6>A0OWT=Z7y@ z1r$VEIjk(PLk9m<_Z`bWh+i^kXm7GCTTF0X4>^Z}=`^}5RdBhm!%61Xp@KK6;Yd+N zFEVznUmO|=-gk(O7ls+}{Bdd5_u_t^b2N zX*;(q0|~|`pQ%SwI_DFhV7=@L#g;McW%E#~hJ6lMd(wzmzO!n|ujcH`rxC#yS(WxO z2d@V___4E90SeZr_ROO;+qw1_NH9j_sJ81^6X|SMjR?N?7VF}{Wc6^qS)CWr%1-bU z0Da$d10hb5A$r2NB?Eh&_zr1UQ^e$`r1{ifhM!jxdXPMLMMzRZ>I^l2B6rsmHwCzs zbf}QrkMwg%tAW7F+z@Tynx4m+f&<^p3|~3t9jT<2G*c=>u-=MUPbMq!P=q;^w1zBg z4GG@64ZLBFB_sE4YCqRE6717gk)x(zy|cS?Pb?sEd_Bdv7{21A+pv`)bHpy;Cj$2+l;Sp$TB0t;WECFVSjrg0K#CYBdfKtXJZ)992A|L*Qy55OlCXN29>N z^JhJ0O(YbtHY^Er+n#4}$#H5%9wb#m5k zPh;S~m*{D9f?j(XhX~e0F6ZRZ<|jxxwLAj{zC;G>U>6s;=lIx9DU zKY7pjT^Nw7uzXD2qc)=2a++dg|V1qM5+vB4hR zo0cli>M+W77R-|O8ynJiU{to`Db%JCAN=;SWeN>!*VGD#=6c18?W%e~KhsmOx^nLDur1Tv>e){m}_}tN3gUt;GcI!;jgQfS8D%zGz)R=M#H}+McFCEA0~ar?XpYsT zwAl2DmzJ53^p+@23i2`9o{ z^n^_~z5M39q%?~< zrS+Eev29rl5?KDm{6IF5NY4zy$Bnw<%o<1N`?$ z_Y2zGsaEqM-eeKfeXnde4j8U@47&Ejg)5j9BxpP^a9s$w_@qkEPvm&&J#5t;kW*SM zD$8}KsUZ?_;#nTIa}ooERGgbDY?83=M3TLbfm({(tS&VypoTl^+Cu zE#yfRmSEjN_lKw(!T{w)uyz(-ttaI;P(QG?fa9EUe>(N zRr{Uu0a!4v$n#k|kWtO|$mr(g!D=-)XH85ntpG@zJ%^Yj997>1_UuY%5J7ku;$Er} zBt0r5on=t4fCfe~gBlQYH;@!`A7#z4R+Jvv@e&9J}F}!L~FkeYf z`DkFe%$dgVELl=!u@Nno#mlixrZmB1Rk9nK!2=sg3|iVmS>?^hqpSihx+E=_M6|0N zR=R=9JXAh-o*1j^wfS z`E2*{r3Pzax7d(yb$zCezMB8i_S%fv51ol++>-8GqZr;aAP6t`grn+Y%a7a&P7xb` zh|6Gs=3SpAyfs+h_Q{a=mjz#B6zgGl6Qp1zontXz$jgnGX!PB75k}1loZF3jzyvMJ z-(()S@7w3kf`RC=pTEhRrf77>Ijez^jx}8a9URD5t`aVZ_PGi?^>_SSE!Eb`R&Q39 zL%K+WH?V&aH12fvV%%gt6Sbv%J}p?1XiblI4*6uaJ&^?i5$icNi&w$+aQmLaV1b79 zh;Pp5g5EVJSYo}zQkzsXs zp!;Nfw%tso#cD>4yebB-7ZbW!eSJQo#`B8KCT-{*I^H$}w@+D2J0b}1q2|ZyDV_05 zZ2brZh%t{_@sR-k*Z5AI)qcvc`@_PcrcqxxwA}C zDa@Bmv83=|r%RlTLVz|rx?j@$XUPm4xGr+8Hu1z3A(1Z@Pi&1x!G-kXmcHrgrSbr- zH+b1$IGxaBt896lm{DQTJuPBBSmZN?q~FNkI#=dbHX#3R!HA_xWFLVbg0fF{DKp?q zm>`~tp^7YLd7$eT3_)4!$P_X!U>(ZD#Ff2Rt$_>*W6Rku*~(TXT68~_OY=Zi)^c>& z!Qu^_Ql%Fzk`1C)%caPm@aMU*wUx8f>t`La&x-ax`z+c77xZOIcCD*m(s;d=Y`_Cu zcXM_#e`mIm4C%W&4_nhLK6HHCtfP!Ne8HWP3^LteFfoP%ir!~m_j(I;&}$LAC?mM> zlfgBr0Rfc!jD7V1IX6$~KsxWVidD4E6U5Il;8;^5)n4k}{BY_F71Z&5;rNV}s3QuT zcshCecwU@Lsk)YnIbArlSo4)a_kN+7OQg@-hg)v6YCgU0U0=WjeRtO1(Q2mp4PCZ2 zpOfdGqPEqw#0%we3RXFSOML)ls#+s51bm3^cmgK#azpW1>%{#&f;V3Qm=h78L&!(? zo-bs*m>TCmyqWngf|12qAgd&Rhm^YsDJvR>$7B$CxrlYz65s0%89p>5yq}P;sorjq z8YE889U2%mM0}7EK@Y=Cm9K_^19_7X+(87qT!CyDIAmPM*Y0muYkFo)hbTnnD+TAQ zfWzrSP|)5$a!X4W2H6(MDu7@oA3!Ny4;92Wk=_#16+Xk&L|-?@m?dtHWU-qZ`>>!6 zO|3!)sd@(IJv*AZ1_f=HW4}fCuNrsEu@4LCYk{#T&2X^|Hp?U~-DrSmluEi_<7N0H-Z36ql%D_&nui{NnyKT zV5emFI!y#LkbSPmj*gz(r=wqgs#cTnWT=NPQx@d!n2gm4s^H!P$>i4O7ZE_xFC>y? z^e_TFbHRES!9xfN+L?csDsVv99SEbB^Jri*k7t%=bboGC|0G>(C?$;w@}CFfprwJ0 zp730&19kKmgFd>)j3RiEAu@_p(nJAScLQ1UI0d~|TB^x?WE4qXm@!HSo1>>7p2=)G zE2-kHX=2JO(SbgM&C*Zi2cZvOL4PwaKHZ>OZs=rbn+M-AhW8;sdo`e?D*@H9PiAb1 zqc=kdIM96*&{44Krc@8}(uMl3$jL-cqA+Sn-=CpQK|{v1P=<1D(`65gTjEU5aRU#8 zVRy5xhFf*fTp6z{I&?PyD#$+#a!a9jrEwUkW?kZDPnLPf`X-b496aRQ3gyfvX$_Kj zPfml63F5GSBOT@fXLBVr%YTOsCWLLEHy)ba=@~5OL$llYKpf)M!R!nZ#9_~76VZV- zKI97`K2^qP&@PLqmf$9>YA}7>37_KC{;7KNn1)>|4 z=tw;!MZTJ|!P*WIEMtO5*3gm(M3CxNxCA|I(%lW=zO9YmqqJ*!1-4~Ss1C{QPJR$ni zl9TP*BPHOP>Aqrl>rD5R3+qkij+a_zy5Bguo9g0KI+8RQu8U`j)od_*K))5UYQR^r zl6{pL$xMFg-$P{B_I8eaGzs`6<7my-$gi=XAeaAe*4JPD6*AawrSngR_k+uHB@0YZ z_6;=n@22_b@_Dj<5Vk1U)DlT>=umOpoU1C1D|$+4u&L;-LGuG^W0Lv4KA&Z$-sa~R z6ReksbxWs+j?6!aH~AzhYx8AW-x7FWyU5w1jTy17Ddd9W5PthvX z=!N;sEDDA*KJ-fbsx_d=X#IPJ0J;98Sqsf0mq84J#GzW#3*=Z1DEhov(W=^PSM$jE zED3_yOO?k1Wjk!88t#f8yXxImmP4*6TnHROk>Y@&5B$>853kV!rM7z0j%RQmw^<=G9+I>9w^G=a>N9M*U`k3BREABme z_WbysdTy099!dWKNHfpFZw&-cb2qEz{*!x0M@)#skpt>xAqE>7KFn%(M7IV<_K<8G z%VaosD0x4ta>reMyKEC&LP-K!t?jEWf2Q+=QK3^AQH8b(7)x4w= z?~B6wowkvqNFzzdN3ga<$?zfQPEyb^bs|7Avu>2(P(gk>Nxq`sQ|fbBQW`At6aqw(f^t^P+C;fG3gFO?aZSn4@ejqxIUOi3-wamsFg#P@tMs{3cp!YYCXDac z_#hBa_L0js6v|YU%7&4HZ{K>G zM+LdAwI5jLFVrPV zmuD>LtPbOo1YyJl3nY+urloL;k|HHb@~)So$>}6`Y-Qgr!I(Ay3hFC<{^+h7b@(TE zB}n4QPvx;j1DV%MCi)Og#a;L9nu&t~jaO##1szV^@NTtTnE?qTS8K!3M|4tm6*Eb; zHDk*$IM8{fQ?Z@Y?s%r!na)9h#_K7++fIVpE8F#y1_uO}YO}2eikXF3^ch zn8t+wTmKgHda|CqQQyQm!u{(Xg943hRqnHDxt>gepuYWERRjk*I}>rA&j!@}hFRNx zCKBU;Ff=1|^?jL9L4oFmsV<(5x8<*YRaS5LwepfsEM8Gkh#(EiP7PxrV~4T>9Oxob z20rl)HFD-T!Xs1CLDrs4StBBEktr!jpQf~Mpt~GYmld7n=Jiq%R+XtK1`JeozTxT- zJ#|2b5Lg@7f4&i-flN1VJz3R#)?j+7UYS4Rx2f&hyi<4?LY?#^oWr#ztnomo8$qpT zG7H{V-M0}0P@vIcocGy$%t~zEF^(gFL|2XaBmMBowp-PR(LfgDXdXmowa<}40!dK+ z))g(Yd#nyM9tid9s?Ic>;O#iO3b8v zfF3cXL27Kste8aZS#Rm>1Z1!wM2`zDu?kpPj1&3acZf|Rf>e9b>LhNBXbv#yD=pS% ziz#1K?dwUC;6soeIgH=TR0VbS2de=4jvNtKmMS_M*@a4jfl9YqUr5S9xo}SH5ggJ2N|<#Y5|r1G7?k8|oDKf6;PH3@Zxe8mqz<%^c0wLKR>}LI z)u5og1eM6`X>gWG(3Sy_%&5Wx*%hR8WKl;Y7!&}KrenQTRF>-Y(1^3EQ5`7qc^MLs z&&ca7xEB@}$!uys&_!mQMf)XP&1w)q809ZAY1jO*Qj9u*#dsXP1=6(>u#m{1-|6X2 z!hBvvH~Dwy^dj6W`2l)dP444@JSy8Le7$SgvIzF5Z0Qc=Rd6+0*Rr*c*&Ie!{dLVD zyWTbGVYfZ^unG@(i@Jhs)HJ(x1qKm>AE@&iG#{z-iH^l;usVN0fmHfhup;7?%u;}7 z`aS%n&UU2Gq2s6O=;)i(U`aaOZoZ`-Xwg-i&|&3QC3#6t%QtkzG+!|bt}bz)R*Zx~ zqKIx%IXhpT(JNSNbnjDp_q=B-J9l)_y ztLeIy&4lipOT2_92<&l?c})QU)ZBGn_0=c`gL=_`8%N+kJ(w8&+y{ zA3RpnPo446q2n{B-nRw4Sf-TZnv>uPSqGapN`eHcK6PLBRZ+C-T3yYpeNxf8M}iP1 zhng1^b3oH=_ibO3YTn^St>E0H!^$fGGWc)0@A&+&|4%ZLLw}WLH@M)wZaf>*b1~4eg)zxG)6t|^`8#7*BGPEaC2%s= zAZbp2Ew=sqzi-y*ZBFMD=k&TNgK4ecqJa+IMh~T`I%Bk9E_7Aa17G;h3^tZ0lj6pBaosj?=^GLU&^_xcp2*zYdzUjRrHDV*@ zdGDMWv6-_P^xQVj6=Eaj_lr4?JnP&aXhd*c+PtFuCz?VWzalsIWI9>}4_irGwHCs( z%LE?CE_h@!y7M@gSPKFX01#4HG!Xp+=_pqlzCR||X~vgB5<&vOXGlXa_Vf&GHB$4z z;>iA@=7hzVUN_(+Hx#Vxto0Zy)4@JT5JKUnyA{4Z399qSVFhYF=)0{po~jdiajSTw zEOoS<&B)JF(Cw6Sz6U2bXk23%TQxyLzz6l0m;hRp)5Wx*2*Gim8m~!24G$q7)?bW- zs5Nk44#Du)kC$`=>S0wwEUR}f7?96Ds&%E(Y^+0Z6gXow_eWYFJf zpbrY;nV`jp1rRnQEaH$ba~DSm{f1i;}J}RZk_AtSlsc2w)XK zb!a4kO+Mcx%3Spq$dWkJ_LJpkAZ(Yl=IXK3KvwV80trO@dWW^v+vRdaSNu?4r*B9M z^ht(-z08*2gVfI&rK%1y(G3cY_SLYvtDDCnmzCHuJbwbqjqO_cQlhh&2mjH5Z~A5dEcU z&xPnXAnD`U)`@zRXn~S_oIPrlWq=%SdX|tgTl3=(U8ZLlcnE2>OQH+t*)Boz|ERH; z=sLb29#FD*vqvcz0@%izx+bis)}gMFDiJjsZ02*}zq& zag~BKiLL`z3cp#%gUNWDD2(2Oc=!;)TL}uJPDn>~f?d_ltt3YRNq1SpWvQcjB3(yh z8%hih8EhzXWvMNrWWV_nurfF31U_r||aPzqqq6QS!cXaJPLu?3O6JDK2@5q=JV(0NHs_TR|LjgILRgg3J zmj`olXX=Y?LceK4xJ!QFkpczfJC^cfK(CJkPSA$a^Sj6Z2b!N)n$cvq30NAoJ$JEK zG?4raNEX9@qv5FDP7VzQ3Y5@zvRZG<3@M=MP(mCOl<(SH=>y8)u0zB2^sbCKJP^Tr zv(+NVQwQ@IFi@ZxsNI%;qeC^YXdt;@4ffr3FijA(TDzMjE3iQSgRkXbdxQqq3dX<(^+U}xRcS4C}YW-Gq!iAAZS~kWccaNnXXK- zaN8||I8m3?1pQ2dqkBhX;Fw_b^KDYl zhB)n1lG~Xs+2FlQ`+TR6q2Plk-)c*KHF&KbQ3_{^l9fQ(_D%!Ch6?nx$5i`}GOeIp zPoKsGyP8F)F||&W?&k&9Y+59Llu4n2`NN2LGNG#4^=EvJ59l6X6vF&@|Bs4Sx^$r>mneSBZ0$i~Br9XN=Ycn+lZRxbn zv?}TS_OJtJU-}tv==jL1g-B}N6sIG32_cg0o^&er{$=4>%qf3ptHMGE4|9Bx)gk_Ec%y6^kCwsa-)eF`Yyb`i`Z9a>&Z zjSUT-xNmtHHqI_D$lVj%b}5LMa+p~q5yMVB&&Ub)!o(18%k-v)F+dNmw=b*pcDgA} zwqu%gvQDB~z2&&z{?yq~m5oh9ryZtrxkfd5uw5CaJJTW9_Hn3j>Et<}DQORVCmJu6 zUhH9U!OiQc)k@bnXmdO=;}}=bt#0HPpy#%;q*p#_JRMVn87mdRTGU}>OT{7Y095VPnb4K&*zomdd(<+a)L-jOq zP#pzP1P(S^7AX>_s^_^gx^lD7)9|P2r-8Zwp^O}+`v}sATveU~f@(8m(^5=Q&};nr z9*cr~R2e2n``DQ}DJ>2U+Gk=Um1S5Usjk%e`%hKL(K#kHDGEG1f)Eg%y+pwU@J%A9 zRZrvE)0>DI9wI*E>a|ptDy}j6jQ-lRIdcRYkW=?}`rEafxR&g*blfe4*N=J`!({|r z{yt;QP6>n!E4-g5l$l;e&{?}_(C_av1!)w)7$7B8APOZRq_+a`@F62*5%XLyxn^lg zf=z~cvj}5=lzLL4t@%{-9c#KYrL1Vq9z0MaIBvmA@d_ny^fIVePXG=DH`v$eL}Na;l}zpY+&A$P zG}!NE*i$zzOB%OS0`Q^ZPDTg0g4e-)DUy*;D#OA<#m$Tg`ZH@il1^VLL1BacHsk;1 ze}WuQm3ko$|pt4Z}@wNUf^#fl=D)$f1V|MH3eJ0-1|4=T}*AVV*$^`e`6<+T@3 zDNzg_8r~0bgGA#kO(^LzR)qy|n*m&t4o3kkIeVNfg7rtg_R#RqfIbC=ggwk8hgm~1 zNbj!20ReP;8W|F&Z8kKF*ZXc24h4OvV$n3(V?`;4X;(vZ)m@8ff|;0HA(*v8?9Q8>imHkSxx2 z*PECFYU&!ZUQ$#{RSZUSW$l=*sGCwR9L$-z)|dh``1^MCP{Ab7Dd3V>swKLD0s4hn`(#~4%~kMPU&=s$0?Ru!%RC$u z1#kGKC^Sw2U)^cSjMNfe;{g9gtzZ3JS8aNSX%ei&1;K}@tb~wY_4*&3By1=x`yYpu zbWe$20!UC^i$AB^X(qhG5rmclCc|kkL3$mjRbJJldDE%B zDS!tJ3eJxJhp|SWpuPE~IyqS_-p~{2G)bpOauwdOir-BU?B04vmOG0K_Rrp|Pbr3S zT$~v%(we!Hbod3u^^eY3^%bmR9PDN`{n-7og9D;|F8D%f4Ixo1A$}Edam>T)Z)RMGUVT=XBnhVo9KdADPI#$VgElf@WY0Z^?v8E?qUQbrR zxY}#w_c$Qxm#!kDYM3!pxn7Jnbn1&wF8=rK`JKbwS;;~onLIkHVr~ge+^^EBypRa; z3YWu__0)&zy1YMfwK%c1YIUre=!#2LjHPL{@leqf1=3KG9?`OI2Tf6qML zz!VC6qYhkVM4t%)n>!V4`_*<{F6fpxrmojch0{RV)wi>$x(K7VM`x=k-k;_XDz22t z5KNbVq6c#P5HjM_NOGu}M(1o;NXmG>%emDmJ5mQ+_kX=Md zO%_KH2wX)#h`9_Ls4gSn{l#oXn`rc2%x1uBDDVRSgOM>n(0zcU4;I6%;j=$HoL1_0 zMlIOf1|Fl%f4~5qUQaOj1Xxl7M}~lp@f{|BJOXr0++cd7o~+`g z5NvV-GA|>*hnO4qCKD4iCc%*m0OcjHMs*kIIWcZjVRbbO!W?Nvf8Js=~J5s@l6EMvBAtp#~A+=%}JtJq- zQ+m9T?(RR`oUvjTxIY2Kh*P*AcR5zP#lT$z!id}EIK)ho>K9B@QXVMXiPXbPlj>V* z?yI*``pc<@2~sx=(56t=!^WI#rvU+EhO*b0hoN+kpmd$4{#!|N030-)5G@;%qc-cydfJ8uCB+ABzIXen9LNi^Ko(>Mj_jiS#9?or?NgC$ZoT0 zLu9Wfi|rbf%ijhU98v*RTw_CE&@%%+p+g3#F{X=weN2#k1f4b#jN0boxp}pZwkqNo zwjgo@h%Dy~@R0HezL-wCq0=D2L{kuQ1WbV#O8_};xuzeUik2E}muoc|h;+WI&8n&j zI|VuRezs#iYh{DoE+mz2gISryipF1vzL#D)&{ zFWTeAn7uxb(M+N7Ccu|g9@uz$Om~ptC9SA<|SV)*0kac z+`QuhlxvC;GIeuUDx0m=g?gcUQ#@4v%~((nV!S*zFs^AfqeF;ZlxLGBuJ0Bs%H>jm zTfCdaBwq9ARZQ@f$1hb);+CPmm_HQvw<{HX{q^~#dORNmkrx8j_YM;^5TW3{6v(^3 zm~LnDXWQ9Hu-hW&UiVeVxFGTifygKHZd^j5z_YxsM2`sqf8HceH^y`k3p~qWbpZ{e z>5ev6|MYk6hqGou+~9tyGy?=R7N!-Hsc(H2X3PYEzt~xrUJdZ4;exlW_OqME196`< zi8B{Wl+mr$g55{4FrQ-|Q4}`8-LeM|r8)KyMK2t3ht2^+X%2`gnu?Du)S)+uM&A9p zY|<#$X%v@Yf(jCU)g*CE=kqCQJ}*)*ffS2Ol0l|&BCVFgVmO_sy_c^k%!po=jn+ki zb6p$=6Q2w==#}%^OY&%-E_fNM|3=-ZV0OX55)wju$atTB(@S635QI`NwYwbT9!3Q3SXELMDKG%i6TV;L5(&- z)Q~@<^lu}uKvGbHxItT-DA?0L{)vLG>~~ERNpUop(Os4Q`t-@m7x(P}E1X)SLRBwA zo$)PzQ_<>6RS3)A7vDalu-%34CrcF=QqT=kXL0bIz$XI$tpvZ+Xdt?VkN!Ma(wk8g z#r)|lXEr_vd~twbbRi~4uOKxNjH;6@_pb=N$N))F8blCYM_LdjU!4-T=Yf;tbfBQU zgycl~m<~P__g~&;h84so03u{`cp&pjQh(TUNis~3-hn*ikVwhxOV^@AQ$@i}Ex?j_ z<;c4QY{HF+-UMjmyZ}0Zy{SsGrOQgYvjBz+0e4|FR|Fi|ei>?m$6% z73~7e?6vY#^6pHq?F^J;>#~rbRAo)`Qo87-a6i$(i@}OQNP^=nvUY93z}%7z%F13Y0^qj2sP;%B^ym%=30$gM#_W_ltQoQS;G1(+|4KqYKg5Xep`N z05QDyjX_$*?SKD|<@w*+t2F-4|M&TSUsZRwxEsFJy#OUW*~Xifpf|1F4y&cwDqEY( zXHb#v+x+u4lg(M_0{2<=1r4m3JHUp58%)6;R*UVjAkSRbz6JHIk)8pA`+9%dTMc}dVV09aikwDd_-q(Fq&vlI+OjDu+PGk=?FDm4Krpu){LZQwH(A}g% z{h$Fei(thH3{9WH1KTB})NJZM!LTj}sRu+vX5qlabGAwpc$b_34{V>5n^$^1Q+zua zQB5m0uZp2wJE;k)J=@6aDsbfj(qvVD-=t zkgtZr8+3$)HfrdY(3cb}q5LTI;1&Ra=*Rl+1G?cM=)f9$gu7TQ8YuqSP^_ytpLI7F zYbS#S1A)y0^%cQ&7hUpT&_HpWg6i~Mb#ZT~W(@X3bx<;bIfuhB)h>q$-rFv{8OeG%!HV&)s($ z^px?`K(GVukj1Jj548Q(AtbcXyH4~VD!pPvGmz`maWtI_oKXq6M zz0|MT*bG*>f*FKE-Ko&yfTmx$ZwH!abww^JebqS~#+{RUa1mcz{a=0AFUtmJ^|EZ z`zh9|`Ch)>`YFZ$Jz49}Y!0u;vWC^0b$kM-`N$bIC@bB><8~yNO*+KJqVn*e;c}NC>t0I!ECjn=MK699)(x zdYq>lnT7)yYhOwVy&Mq**|l$9J|ZYtm7hc>7TVWEg9RE^7bkQl@ru{^2A9T;F3N&| z=v}`qE`ztn1XpWjYN0{`1TyQ;dUWn&6f3l8|s7OM%%vstMQPpJ9LRap^g{-X+j6q z=w$`+c+y_huzan4XC0x$uSQ^I+;2n$`IV47CY4l`9H~JA+1(^rd7m~OH-li*6g*X{ z(2`lztTim?i-CEyxwv;i2bSrvW_@+Tw}Z{_Oa%zg<|%~;Oh;vEUqRxLGU#6{7j(VK zIh5&lqNR*b`gya`&1Nt>qqhiy?oe>p%i`{#(c^-;j~dm*9(2iya9`UQ7AX3(Q4!q~ zOobh84hxPd?QN}^3Ce!msLTuy4b|>cuu|REbV<^z-iNR0@WvCWYA;N+R&Ev3Ox~D= z!#b#*^zJ5w-l$EdzDh$at+b=|(o>t>!6;TbuilhDtkQrHN~1a(=1{F#fABgGlS1## zI-tJ#!&)|Agi;!9&3N!NO$8@v&^e(vHP(Ve#w^G)jd`Lg*AJhIcl~N)rve8=*iefjTAqGjTjF!edcVmrAJih zWV7o7tnYTaREI@)xJtRloHT8!9b{1V)2uoQXQn6Ih84}}xi-npSaa(OwJ|CvtNW-h zxoV2WcC5m8@1q)spy~$fMGNYYzWOE^dMMe4w>DD$@EJx74fg9Xdm~QIyT$8ndU7i5P{kKnY_bls_=?iVL8I&8qwnY_nzX>qJ^U^*sCz%OU_FAyDoluisNi&+uKv_67yTOF zY3}5Mf|2JEYb2ktdoFER8YG4rTK8Y4SWE5RJ$yr z1_hy;J{v-6e{6`~V?LYZQ<$K0J({DV6X($^dXKTai51Ww4~+Yl#e}~y-iL8DC3QFfVGL>n4w%v@vm*e-C7-g%H z0|v31pc>-MVEsxji&)dy!(EtVu8~3QR%9=$!KijH&{CVuHII7VmdLU|kDD*^lxA-( zC8@J3yNL*@+(s8qtY&t!3z(ACd84b53A)@M|8h%v%Ji~tbX<53M<+dHs4&==!f?Ur zs;m7}O|rVIry7VIG`L-#Yq{yWtd;E1D>Tq5R4}^r!cjFFEYB8n$wcY~g+01KH6P(- zj-kQs`rtZAV)nR4-_S&Ek-?qFIc9t<2Y@DWK!e?_7LW9+y(Tt=HcQp*z5Mvg9@DnW zY9UDhA+C|xRBg4bzL(5FPYhJyh>E z7upZJdL0f>qs!poi7eeB@JH1s#PLUNtul{VvEgqYrKOu|)Lflf` zmYUv<($$A=fp=fZCkPJ(m9>8Q_4L zbg3vc>XrgFW$3e1907DVmq=t4I+qtb@+3LNX?z)9h-_jQpu`3I7$x6QJe`^`4(2+F zt%@q^9vg~zHAxmIs=E+fW05wR!|pM%>{g=Dn-z>!gJ31!rvifx1#Z2=N<|H@nFzW) z_6K$vBcOpMw++rT(Wt1p_i)tRW0={g$D@Fjp#9i7Lg#a6)Z0w?Jg}Gc6EQ$Z(7)Mq zxnZxD{w=`)HR-nVMm1{Ix%F9d4LTI0OGc-O`jS3Nre=VWbbZz7RAV$qsj)Nl zm{j}uY-ex?m7ER=Ka3UD{xm%?W({+XemuR`P?vQ`14Z@N;_70ZRQ3JK3Aa{fUs_5N zh@i?HkI5&dX0ky{J2Tq2zv2un!8oDSh1BJ=t}429l&%;Kj!Se7sT1%)V?8b-L>4$OKcul||9ERGFoHWur2}+{qby=x}>JI$a_#VvilQ z40#ZW<+gl0#xNdY4;OkPsUHa8JZe5~IJMqmuc?_>0mH^_4^cBm!C!mCH)c3l;1{=V zI@qVXeQR9g(z(rbF4Yi}3NzWmZJx=jj|^_!kWGpe57yly#IBK;VDqf=LGZFcKdc%S zth{_xUTJAIe8mRs?&VwKf|r-Cxy>tP?q0q=GPvDDPuHzvq@CYk?y=y=ly#BUd{dc=E84!O=8Wf`5rFj zbUDZHP*IN-^!CzXyHPK9Pw03YYi8X>ivSqR&dqRa6Hr~C>q$o2;7Y7LW+sWu$JpS% zj71gr-<(ygH+=KV8Wo&%-$J@pHc~O--J`fOyG<%f3?2g9X4ALIol`GV;xj0F_*K%g z`6L5$xTuF9Ro-XZIqIR23A)@0GDxk4i8sn*_Q)e$NIVN4bLzZ;6mmlAFHwPaeJ_e{ z+UGiu9Xw9_`t&{bMeYX$803B}S9a!4fE8P6+yzjogcFP)UDW(MX|>)(o_^Wi!l>q@#4^l zr{w!NNO5@Rpm$5B+A8bCf=_Pt*sR}a2n`N$*Hv(G`|QqoFy^~Rdt8tq(&6(!l8fv! zlA>MUJ?6KK8rTM~o8lN!vo}N6v#AHjD1c+F9xvi;WDjp(ql^p{tl?a8Oql9D$!ovl zrL)ILWQnAj1Y&qUYIm^gv>;N`Q$LzuftXu%ZM>uHSA->i2)Cs3 zEuof!%nsd`bP+rR1Vf-HIl9U9ZLZ$-H3X)aAS-CtUgAUv_0_Or7RYh;W@n(_1YJ&o5jILKY_mbQ%gJf7G1PRBiVa+|D@CW0vE z9CM;nlPbp)?MJUKvZl31ILt0Ri~~}511H(E)}S{e#@y}RQv>(mvjUV)^nd~!JOuFS zX(Oou7hzA;vjzt_pGwo`>TE^0oz>Gi&qD`2ALy*RoVpnb24=Oer!j^TKm>21HchY+ zJU|mo6G2qcGKp1Zzm^FWp1g5V)kp@;_tZFjcv!(XjC4n(QcUL5fmXvUbyTc|?6FzX z)K7&J5W>e>l}g9x(j;KER1bGDEj^952^Pq4dn(#4DmEj!E`JZlev?5QHmG@br96HI z8%=9)kn`2A`5beNM5X9y^_%2@B;I?dq(8_2pC*DRKESKAZ1DAavz`X{hyzl1%fSiS zQhV3wfdU@m*;C6&us{x8Zc<;UT~sMKS$~ z5@46-Ou-(ZM2&rmj}Hk!|Dux64V|wUe^1jPZ2=7qa(67L&cFJcMx70xknXWRvC{%I z17z^Q-^o<(^e{X0H28A@hzJ@k3POp9?a^1mjaeWkQ8m@r6yA;5XVnBgBqWN(4Uc}8 z+Gnvi0*FZT5h_hkKl|(>EIb4R4K#V6qpt?)z(MYU;7kME1TUBD5wX15$V~Y$zUr8KS3R(72#<19xqnf(~e? za~gCp|4cuL76t%Io-f9^JeO4-__~7)>Re};NFRlA@3DXD!LfK;@9!`Ii{);zmTJ$b zQ0~K6%V&eN+~!Rp8|hH)Jv{Fo<}Q=fTu|0jj?wKzhbc!*13gzyMkmGB^#2p`iqLFu zeopaBE8f}!4-G05ZHx>Y=q~clBdY(kJB~d=rJ+FcE@&tqX+f`|vCiY~TW|me1lJvb zy6aY5pj~PM^3}%uHcTNPDDT9SYE7Qv6X zYe>+>d5jLbcgmwi1KG7GkLEBG%b?(4!h8lT9thuagbO-}99};C4=q~Z2tc54t0p+IT#0~r(TNGT4 z1QIvoxQ}=z-Db$~pg`j)z52}WLVeq{sq`Tp2$}KX6Ao>SXOKYRaz%S9>sJ$c;(J7~ zv%xhPZE_Xjf$%4&5)@7z#Mk^?i|Sxd0RCeK9^4J~yEf3?O<-=mK`wO_(8YSXHuDYO zK>0hK^5Nz!!~cCd@d^g;zW(ZUa00WXevJbHS6P)Cx1W|?BZ1^HjHEsyw<5g?w&gR~ z|F?yy7#OJBh@(E8(~(M6B5g(-2b84vZW}yF*Oo#9fx>l-iaaq!x9J)^D9|uttvA)O z7h`E4P_X(%C&Y)m+}m`9DkBCdNfKYu)0Tu^##85nd_-lmKx#$ekdPBMt}bae2}o)l*=9{B4t`01k9KPtlmzI!|mS?bbkAM52YZ zSp)f4$c-82l?y-zB^D=3Gbv>?V()Q2fd@iUT7Ck3ppx$?aIWS39QH?+uF4bJJ3u;pYkm`=Xu zmVB^#oLz55oAYJ0wr-;oBKY3(_-MryI2{D}%5oVr@Vx8sET~szl~FKt$kJ#quz0x{ zRnh$*9dcvQz;m(A4f$i&Zzh{FmLWlH&t=Hrfy=8AbO3cgyG4T&zRK!QBRoX#y;J9H zJel*;u7WNxmoJS4jtd?KZAqS0eAX>!yjdCx2d1CYOd*S429{${P+;(CHkm8PNr#$k zz`){JjC#8%IS5&W>tHd!Wtf&{gFcxQT$*V;oJ@LT(r`(p(d0Ck@OQGFflD$?7jJ?N zwG)$pOEQsjHJFxnVlr?^rp;ut|4^H2N0YUIOEPWABf{eZJLSp1fywLTq8B7O^m6Rs z2(M?D{$(4yIo_dXFkr}u&l1(QE-V@hEZ)dEr5hzDe4W{0WVLAExm5SpvjLp~Qx}r4 zUO})AlB;bsV1jK)cU$V`a{FSd0l{{)&YOuJUaqR~gb#g!r&@B^W0+aaHN7F+H>bq} zr#Duus^zrDo(XVZ^6LI7nyhrF`vwdwUfrkD4dD>qq3&BW@c6muv%gqrFtB*@$yHrP z{gr%&`J{&kKHqxl=MDY1mj0&rZ6*U-Gymi|8&0skktod5H!#d63fy>KLJV)w~BR)g& z#z#FisW3H_c>YF> z^7KjUO%eDlMa=fjT_*&fIM+?=~_-vJGOCgruvJ|*_ zTMGJ*u@|9bDR^io1@P2s{T@o2A|~OB01vDc6-HZYv9hr16Sune^U!jA;;@1o#B+|8 zIp8x6J7Uy}c|Qv+M~oUQ$U{7`)koXyEY!erNC+VOO|-aB$Y!DKiM9tiJR!Uq%z;c}|h@KKhRNv@r1St-cTM#1AY&e;6S$n)GgcnmW79s58|YB758dJ5!z>TA7Zd)Ah-<5 z;bnvb=+N=L`<|2Rr99_b7lIS!4sN#$0*8ubYn-pYV(qqHYbbQ7j^7+q$8W?setS?I zzjZq9y5eND!?qP(IiBr~Z**u4mBV49Og?enavJJZg3p*e1owpCduBj(zcn%J)*JYoGHqK4NkNH)Y^^JIvz|Kuw~D{r`!3({4v@>`Ju!<*ny#m!zDP zgHm&iE~*B*+Aa@mjV0MiRkkwiYL^F^myCNal_Z1Wkb^$F_Xqmp^Z$JZ!v=5;fFKwM zroEOcl}W_j8wUpmGeCz1P8ne(Jd`Bt@`85g>fnm}4Q-d0;GmkYNW&ig0HtKqgalCY z4h-OZ28raS$HUU-{m2fGqyA-^<;lMgf0%$0> z=ROh&A}bU;mFKWJ1uzS|I$h32AJhNSpX#bDmgjq%NklgYl=9*S}%_GZA!D3N@isOOMnJq=s$85lf30gXQx~MM~x=BOhfWVbYvs~|9 z^f@;f8OtMq9*Gz%4B%ZUtlRBQ;`b>9;DF#Y=vO~P)uUj(Fv@`g z0);aXO)twV^f8fz0lYWSrin7p%S09j1aGOMbE7ZRaX`9Ne*U!ixLs{qn#HB5J^fFt z&`W}t!ZRV|5Hd8}%V}84Df5CGnKV`>zeWZ3+d1ydR}xLcvgva4f0CzhLO5XgHV}ER4GY;L&^KnCL-~+-EYJ}sFHzR z)+%XusQGD^n(bx#jP57gO`bQKjkxf<;C&noopjkylO%z%A0JXiD|*xBOgQxL471xw)rrXiS>W`6H4-?*7aLmj?xbl&3X|5)&DK%Uc z4qQ5FlaMb~^jPkawjWOxYKe}XV@PH4tAc4(W2Z2ad2Fb7$C@UQl9otlJzwlsFPUs8 z(&5md;Y{Dobc{_ z!Qn)U6IPNK6Rf(AM^!3H5e;1mE+sBu*0^AQBbVoRmsG(kh^6#?vGR7BpUQ?+#e$dQ z4|6L}P!CknrBDFq9ej|XYgv;e4w5;TvDK3_$EkVg7B8gvj33=sQPF#C+(7yZj*51%Agj)4d^-C0axz~%n5;*u=Gl09IbZPLRWuIp zXf}fRe@MVX2F0-;ojOlNHHvOQQk^hv^P+)~$BIQr@JwUU*<04}Q{#D|b%anQ};YCytc>rlnvz#)NRY;22NOI>ni zg`#ldfwERG$RNLyBHypoiZx>|>hl(`TWHYJyoLYhcN-diG_z0U6#AC!(`LMD>1JPE zGfP$`0?5b;ISvS7ju|Fiw{*i+!*9~5b<7k#gfPq4+2NV8%y_(u1#K$7`tWbqLJyQ*jSJ$0o6&On zY23^LgF4}6CdG-|EC7dugxTYxvBQ|1pOj6QeZHbwLV5KXrgmFkqw)5u5ENVGRPCgHpl5$riU@M1qO8@-y3=%X(KMX7$)C926-yq z)Xx!Jje+uQfI&^uC*D7{E%mnP_21cUPmg+z=#4_vvNGcr&2D?d$m22;kV7+U{$rU| z9TR0@O7@2Ycn8I30!U#U4JieKs4(i+b~JJv5JX+D)pWn1f$VN%o~qxDKDAH5(h*u7 z8UDFsYC3|m7K;9z(Lm38U3&1=BP*|eKaD8I1!d&a`7F>lV<|3B`qvZbGE7iKD_xPQ z&-T0hhB}P1*?2~a`1xJrrL`e=C?PD$| z`*pYFtf9y4X1r>5^Ya%JWTPmyK9wP}>`+g;F;?gE3%XB&MisQ4uKx1S{6)12TQf7u zO1-RY_n-(O{$H{*P^DVXOmaIP!sld*`aS{T0ZEPndT5;~_?pS5HBV-pqB-gS?0^&n z4;88oWUNBT&RW{uHQ`gVWl`T_9u@-@XzC~_(saIPC)_*(mz3jx9u@63_#jW)v zM-xK4!}d`O(9%&}my_+dU8_Y8<~#$JSHJ>I9razMehKwGq=70mw#by4n%(7F(jpm)D;S>v`(Q&lR#022Ps>Qw{&&N>Vjz+ z*n>hEs8YSnY{}_0CgXQZS6M&U!yYWXkO<0tbWm9;M3#-Nc)v(~ zA&aZNUzB2i7TRG#J6q{C>w zAd#N%jAjW3)tDlKM%ovjE79PyhKiZlu&nhcw4o$|HWd*8;T?_6|Hbwy+PC7sWSJ(w zp@FuJxX*%Qk*^o6B{`%H0U8*V0_O0#EPXX(f~29f-^u3EgdJ+(1N3SESl*k z+AZy{@;ZPG1+=i|zVfA^{D;vOEv`AB4tfO)Zd%vVpDZUUI+L%0t+5i{pi;1i8%JA; zs4*&dX|-JPQf(ALzF?2&AzA|pR^;|6&0eXAEafw_Ra5NAC^xjm2`wE1gBlrTDb&nO z*!3vd9-visGb>yW!@C%9JYp`d>fO|QsGKx-v{!K`gKJ>qJ85v5>pY3U6)uPoT$#b? zMd-b_rK@OPUO{17=q~zyqASd#uMI>GXwV~^hPhX1;+^N^t((TmRWlC`38?~5sbmj! zKnsL}jaR4brrp!a+07{KJ$Ce4J9b8MJmm8gPqdZ0tU3;y74T>{&;wb@jlyXkCxZQvy!X>9Ou+Wd0DI(t}RIf$o+v zA^pGjozHA^cxJN5Qg|SIYib_a{nBg&{j$|oRe#ujVMSQdPYfRJJ%|kzcWlb>$Dhy{ z5&dY$m=@qDvhti4^wunrsUk*83Kh(^6U>Q|=>`3@1H={-y!W%bGzJ#EwvrA^Z1phL zhTI@S!RrYHv=BPs6Y3oYdz`Oza~n*sUgxay)p#bxA|>9PWwdx;d!4pyZRsr|dUcpi z9X-_lJ2|6W{LHIM>>J`3-wOXFMDF4~qw6ksD>D?gK?e8jM8413-LB<@ThdJkvzg1d zh3;a%oX=(r@1YLGZlS?`E0K3f!i&75UtW@P4cx`7X4#pu4aKa1!F(r?=hQCAlK5Sc zZD51{euAGmj^jOTt61;&<$NWxj3pXEeCSA(y}HTaBqgAM!F)4eft}beUNQzQ$+^M> zZ>r=|Rv)V5ferptq~CAEtJ#kAWHx$Cf1b6^M|7{0I8*5SPT_$~=5Dv!v|pC9+B(P$SjVN| zz$N@%AEa#gt*=#n4?ystCt^d|bg|jB)In#aEO-hzUuX`oi?M0>3R69!LIflFdB`J0 zSXw>a^HVq_lWEz|tg>$)!72QcuCW-hoilLY5@kp~(oJ;>9-FHy>JY&wVhRNmvMuwO zs+eN&z$Wt7OfTE%rKo~c`E!V16t$4;~YlKd2J3^i!Mr!^ay)am7ak^-bBr#A8D~~ zxSD72z!sO?a`JrOvNMQzMw$^En9(4DF}CQSy>_x_*lUk{MP#nlR|pO{6I_?kHDgs= z1}?)jpG`%trHaeIWw{o^aw#})iC8jU(vfSyRuxMC2tF|mnXg1BsTzl9G%yM8pc@SY zRb7c`IB7_V4Ts}vdn7$FX$SG#$>}Y{f(SN1L`_0ZJVZklhB5K-c zo^rU>-Qs~wcr1-WpEg6rHUNT8#I|U$qbjzs6%G+^mQNESl&U_bLqy(0{a8Mg1EQ+> zVc@_e%59}CNfb{oR<%h01fLi`tE0KghIaNa$E+GZdq{9%rNCB~717at9a`e&v&AJV z?b%U#2nt?dTUw9X3~E~df=}31{j7I$3};&p2~H7Z=zf3ctW~3Tiw8DQ7wLAq&E(mT zEwMucqp+#@U1qV$Up*u^h2NxnwW>}65PYHxsba`yX{yT5;$_&j(+%C#!(6nA&EkPg zc#Qc~G)z^|+aZEccnrOALZ`Fx?BRWi&2L0dPao^M&YG& zpUCOZR6A4{WmhX#SVhvH2`$oi%|7Mrlp@UDS%Y{29CsHZf&h%|>`& z6Y(?E!>Ed%00f_?@w$H>&5u;ocn=9q;W0Xa^w27gafo2Vjy7T;-yG3R&1w)OIZJl! zWjj#;CRjyZ_-SO7nqO78BlRD2Y{xu+Dz^9*>;!c;;x0#xvdK!UxJ1I7BJ9&lV067nk!Jo)EZCpL06Lzc~4Ulud zf|>iaHcs5{sPpXr6s$Z_=>*DOSZ3=YmB$1puTSRp?a@=6hunHbkYIe-F4!LJP`Y)99vAO%>Jm^YQqi=o#~DE%u!Bk;_r3rW>wyYjuqUEz(0>Z6!~oGYKn8yz60F2Qg}Rni z=UYL7F%jRi)y^;X>+y1y=`@{ zJ3tGgF~OOrRqFRRvJ6nGJn#YbxHmo!y8#9}A7v?ZBlSPK?^v5&H_8f8!JFv6#G`=$ z`Y(J$kSb}{fe)+I5Vm%}$aBip->Ekv2Di0A1@Aj90=WO!@208=_ud$0zTk+T1Iomd z2p?J!HlVaJj1S;%78SgSlBX1OK1Uw)7@*`mFxc-qd%6FhM7pA>*FsqN7aa9-AbIP1 zY-mWdWf(|?g+D-B23RorGS`tHGdAsC<`NaWzQ15o#ADL_{RIXI#w)I5^v`Ng5!$w3 zn%x2LqIGa!^8T!U%8v^A`*Q*q>^^$yMATPH^g;VaZvhHcQJ&~Bg%++XPe6jv_eQiN z*Ha29`}amTCOEG<7tp`&;ufM{Ny=d)+{hw=Pn4w(USTFH%hH2_^)07R<&ySG(Y+!1 z6-jlAce|SLi$e;Y;dXd&j#KE+!F@_i8;xYGt@9}d2}U1>RnGO#s`iqJSghzDha*@p z^Ej-T6W&!9heK5G@>r!)c!vnRtS(jwV6gi+=iPVn)p;A0Z~r;x01#|JZ8B`BvaP61 z92BfUoH7X#lYq+6$h(9qXcQD^wCS9L z^Z8~QosK%zbTJypt~1lAd&T5Qtb)VNY2yJ5RJRz_rfD}9lU0xXerdJ<4}@13VdQ@W zceACbnD1RvX;$uk;$B)*af?hzYtzjaTpx2y(oN2I$EjdP7$B0lQ+UW*Og20EC`30I;eqTnQo74< zC#!Zfr^$8}cuP7fUDl-MtSl;s??%MxI)L%{VsgPvTQd9ENgd!GAg71p*QX#ixFEk3 z<-A?e$xJ>wQPPX(%(cY?>HQ4pcssw4TY5?smkPK64GC}LB$!w2!wzc6x<-itgA4(0 zcM2FUCw$v;$zZ5hghq#uD0)SA8P-NG4G6l|<9x4QjAaNb=`43=*MfrfUXs@SBa1F2 zI6V|fo zdd{IC;m1+AvvgxMQlmI8AAKu$)(pVOCUlx*fv}tS9&O!h{#4$0STYIG<%$*(ly}mU zWBJBh$>{Act%e14D!0p)_ap|$t%3w))N^T`^9`G|-6VyVB|BeESmmlEQ+ObYVi}!| z^?jPKQq{&X1`PTroKULs`HHUEXF0A7Cmt2VQ4pmhG`SN~*9OrL7vzx#Q=*l4yt3AV zEhH#YhF;O@c>{Nc6{|r7anvcKB;U%+)^-Yk3DQ(uPrh4pcWHs`la+KWDkC zodZ~CL=Z;3X!`k#@zwUCH6ZAsP)NV3aq?JRpIRFVLtKzY-8v+iujt@3U;V7@)(L1x zh`KUJ*YZ07Yr8T5EU2@le=fL(GQGkDdDN+)dz+Y-)%G(K9>}5~K|e+V)7l^bOpwMo zJpN8QRQ_bwd>Nb`jdMts(aWKCbq*~iau~%XQncqYJ+-mPAc8O&axeFb-F&^^bE36F zZU+k5sE+DaKjO^R*3keK)KOnTr&%wAnQQwJ9u>qCVIM=#c zCzmLybL~(;9Cc<^v`$BlWKI_o@fb*LXNCcTK5BcTg05|QH6ZAs`n#q>YP{L0t-l5l zgi-zdc0XC|WUD4(0jY|dMo+I$*B5JvvHX_oZps=O$<)_*-Jh@%dTOF~n0 z;)>JS4vm0@glKrVX?JpNuy%N9Awe0{+AZx$9cwq(^EXFoYb^r?eU#&^I#j{?%(XeT zkf4k_dV4uP=l#`Mk2Z)Pj3U$aThTwRjZ7L4bWxz7fgdgRh&SbH1BC+xZM2rMYw6w2 zi_}Z)wQDIH83LlU6iP;un$5+AMnuhXX@J_blo%aCQkK|G=O?m6fD8f713s|><;m=u z{dOnjQ2Kg61Pa=>(BpO~)XW?e0CfU3lii%pE0mnoN{#cg;E)mLemjnjR8;34prCc_ z76hgzWBaySF)E1N@Wmw=aPd}Rg48vZA^}!d!};gFjb#QJ5?nQt>4sapO(R2q3pmMS z(Fn3{z{#USNbGv;>YIJEs#xuM4i&^vRa1++gDvCwjEiMlH@;#i23$u?;UdooV-LBG z%Bc0~EQsBl2$Br7lojG-$%b0W0$I3}<>m<7kLmT;zHUMWGPOJwvUc1*~p$4&+fk8sr16 zqDg)W4GB@}3khN+tG4wGU_qTV{ZOlDGV94zG$a~o6)nU=PNN`!6|XQn)dogjf;8$e zs#UL$uQU%4(V|0bkHVvZII1){ z$$+a%EYlVj?@Tx_i(%yX@CF<{U~IUaBk1Ub$v zg1FxYTLj^V$Ya#08*CB8@u^i6&_$Dje9a&%(!Q$^;N{2=5Jl-=y@0jBefIza^jPI^ zxsPTh1M&fvLJ|@zI;_wsb zW^2#zdK_T?vB9RPPgbyh*$-O50QvhGS)ERx^Q?SxP{A?Xgm4E1hW}eL(8G94`d{>t zu26t$>`lADmt1x~dm9{J8+%6<>1S^Z17u^3wK%ug&l(B^xPPLpO#h-X!Yo~Id^b^y zKmz`&8lUbnnl-E zc#6bnbIoZV$JwHtJ~^E@$pdlkc3CcEv63t7Ql6D68Q>oj^X+~O;lpJ=qe?O2%)7eT+0$Fe6WKokwS4@5T3)Xg(Y(ptA zjRP;0@yk=n_@(Q59I^(l(F0q<-yreYY`z_R^kPRhe9h>dtvRPHXyVoPHu?%67@XRk z;1_+QS8aQ1&L-0*%+@87kV!Uy3F0e^SY0&5=nA@c>C9;)kldNI(;c;6qfgrDWBT(m zy(LyRZH%p?QMX9OoOxJKzb&XAPBvR=RaKK>e_;wr25}t<66g@}PF@J@?_1J!n%u2Q zu4gY(;@~0WZdwZUDd`TRFx-`NbPj7UxFCN|kbk{jt*Aig3d44@8=p_+i@mtJ<55A- z?NE^>fE-yYJT={=EOxtA7E1~qQo1d(-A|{DIEyf-Wk3KqzvwKeJx$!N8>-banl+g= zbQ^ZdmuLQC$WlwPLFny_&^;GaGOb_WMuZCDH`B!1{c<_k$iod^4PpV)9Hq$3+jHvz`xBA~$o$l+v9q^FyL)e3-H6q5UXVYxd(1z*xr=E5>!~s$F)Cr6Q z*+WIQ-RNWc=Xl(FD+aR#mf={s4dVYK;17yeH76CJ;UVIUoYeS!;exI|2kSJ2!H0~u z`IoTRSvz|{d+t>i>sbHbfE`jo4#@c-{~B^s2f-(&F(ec9uZNwM!*+;@nIP>)93zxw z>(tbEGt>5O18Wmh5ch6c++{PN(@v>^EVz({Lw4AVvp~|1`S-9FOFUMONb;W6zYl1z z6c^KiH}mOvie`5I3$MRw~{sv^A?UN%0nl2 z)w~mjOx>D7^{3SoGC|XO#!eRvjdv!ycB7{hw!d|MrQ3kT18o0N>VO_IFq8jBHFpsa zLDmlr$f7GGcT_c4%_weTyoM5Cpn|kR7JIglS2mrQt%OUON^(Gq z?M`_^`-CuO=<3C-um?OK2P_cOVV$_VhPMtcsyoKErdb|+t~)2Rloj>;3r1%QDX>Wr z8^*}+N8SDb`B|U;E>rFDANTkRCQlhuhXHtZKWTxFxL41_rVjZA7aa-dsDq^{zgIbaX#3YZ|xb~k|`GD2_O zBwVq$R|nL?$~;k-uyh?cfiO=5VKx#XZ^B}WW+nWqV3GP*|1u;H)Ln!$^m#c&=!qb# z+fs2$djd=G&d*P{p;^(XnV!jF*KAgFy~I-<$;PEk1)SoL!%H$)%ubmBCKkBcO{SMi zIWtn+*aEmnpXY+S_Yc_5G(D^lDA;twK})1r9?0sd0Ls#vhQ`d|#*)E9MMwl;c2X8r z=f$}-tr4?U@o*532dxDbNa|`IC)?D$GK05|o(7`qloc|?>=f^_{>PzfqoIHpJI$XL zlbq@+o`M1Hp_0?092LZM6(6;sV_Mvw@Lj=!7oVqrsQbJIv*M%nlX-Z-8aYQhWG6)c zAzcj)rK9-H-+dXp!2t;bbp-&GRxN2U^9&vU91A3M^+iqM{c1MZa9M-*MHy46G`qaU zmy1p!%`rh*R}-W1lA8S=yom{kAZ)~Ii>!MPHcl-~PKOSpfj~zHp}#B?O8eK=?RFk* zV7WM@*pL*0?PwkGI%`>VqhvJpot;vxV}#UFCr}sd$x-@AodARo`qM%uh*TC&bfLHk znhjSsG+U`edn_iN?l_4=#s-OpLby7e5j_Zhk~ry@N~P^r^XF>oD{J&lBF!;DT35f0 zu34c~wbamR@O~Yqg1D|Cr7z4?*mCpZ;C5q7kk-{XS2GK|IUc-oZYUt8D}YeSO;C(n z*Wk4?VuQr4L9+gc`sh0@Zty{Jzyn!!9T4%6HD}TJ$HzlAU+idPS0UxS|U1JON!AluighUY5RZmrV);S4xH4I))BQ{9vnh#MQy@dG?PXkeh ze9d)DLYoal!=~xsV9_llIZEFpvfLJl6B4u z^w|VNao7DQ8|euJw>FWnkY7zXxrICxEOeVs$H9*%d@=JBFOwW&9z_BjndnGKq9vP? z)Orv>Po~{f$&%xQleD{x4azccTcu6S@Smi83(26X!(whNC3NtUSXQ_*)>W=j_oqvD7OGg{Gp1fGJ6TS!jWNjSCV66_{a`P-N z#kU;W0cC7C=j6&58C{2Xk&|oKt^G20vRIIN3kN!_)enlmYdSEA+UvW&ZRY#q4 ztwCt4lk{tpD#r$8nOT;^V!}ygS;T@uCdNl=2`7p1Y(2r27}YLy!I?ht{aMq@9-6|+Ann}h3WKpF(#&XF05RPA%P-0Cucto#V{QO4A-l6#}eYl;Cp zAOjRoW4EnIYnauC@p(fx5UVC!M3drH>9B1QOweX$Rx;YQ?S4a>K4NjjquXL}j0)y!WjDBf7NY1=QFvKDSFE zN`&Sq9`PJ9Pl5-!cnn7t%(Z{%KvW;Yb1cwgH^3!r#R5WTtm2j3LSr!^DC;W4Fb;&m zhAzdB2f8p0Ve!UX7(<)d6W(4v4ml8cBncERVIe zBPg(34_VIDOMUW9lfUar&>9F>?Lc>SU-cQrV<(yBZsz(g)(S*p#Klf|4i7qS{zQWrK*K~!lzqhh> z{PocxAVdNOvmCt%K9uDQ6j)vlazdS{W;37CwKmlBGPnGsXO1``IB%#uEYszhp4i!_ zKZuXs1UZ%vAi5KSzi>nlzLWfUe7>i<`_zJoe2JuBW(6o7W9kqi)Y^PD!m>_!xb^b4&N>f@)m3W6bjoiT$6&hMMw)p_m9<~b|)f`E{s z0u&hj*f2=+zdY>6DRcz`0KywS;cnrnf))-uWIJ< zy2*ms8V_Y0qyriB_xv{jJ>@+LLUc+XqU`Nm?tq^DbF&8l6}aw4rmF=G_WV|vV7 ziNq8T^xx^@Ws`Wmx?|YBq1jgbRL}?XUhiZ{Z^A6h#7>9>g6~s7eAldKv&e}0u`FxH zw;Buz46k~I_;$F0!LkVLj)UI=_e#Jb-{bDE6+H~Rp(WxEvLxZ7+}Axv<~^o@E?tf( zK!oL}wL;nWU&o1Om%0Y4%j5=VV0tBFdd3^0g2|yA3n78wO29y!re??Ql`inJ42cB;PnZ*$v0!z&e@+w< z7;XePp~>iH&4NxE@Z5ZSc+{TBO#leK(4!aa#hgEQ)Zf<(7Fa^NEuReK0SXBWuLgEo zF1DPape4yzOhctOR*Nlf7W;E(C~({g^0A_~uvc3e5=@soKLyj`nfx$FaE7I`9;|*U zBrt@fLyyc4WjPH6jxYw$Ac_WGta|p30Tv8AVGZ3-E1%e^+P{VdfZ)3xc!c^ne#x<* z|CezGj|aBU7dFD}`bRj01ctEP+0t`J(z*M$J3s@|?Z9&COvS7@+g~hbfs0Sg6l@R3 zm`{L$_nP2cPqt5)FBXizIv6z^xWbyXm5(p?k4YK|9HGanO*Mmhd;kc((Bsw5LwdZ& z1KZ7@v~mHrV9b*#un-Z9VGVfN&IhakKm$|YiQ~s#J{nE-yUSrb(Zhi&$d&$aI-N4A z-u2p{fhq7u{o8ue(!oSV);j`+fSr8nq50N6Li$Gt$7YKRUw-TeSbheP-l{IX~0CDc9)y>8Dpx=lR*U4o7At~HP3gW z-+uLvk5!kAo{kA@Dj?IB>{#8=plo)+rqY z%OU{m*5S}0Bx?_sGMp(K${r3JGMsOGMXT$~IT8nU`uau=8zSC^4Woo=2h2G=*KszP z9(@TUKv}_bGeD3loG5wfe0kr($$}r2k@D5SWB?p8-hd?|!SmI5%c4iY>Ndc-i$x)wBcd4u#Jf!4p z;*y3+2D6DnhmiXho5}i8O@2OZ>0|&+715^FM>GXWr>^DtV@VtXnlT9emd1vLH#;=U zGbp+pa@l&ftsV$owrJ)Qx2-f?+} zOOyJfwDXG3%oLnEcZi3q1AJ)tq5Cq{LXmApOEm3f*6^9!f-@fu_K+Y(0##QpzMHQ{ zzoq~AjJE!b)=k43--2mZjbO-QEbv^poNRTKRez4Aa&^66MCJf?%f-9yFAfbv*Vs?9 z`9&jUM+>H?97IHA@j!OdrBpg-Gg^YLV20G8M0_3+lstclC8nzUiAARCP`16CJZWfG zXk^WT(Je5vi{LK|5P7@BfAyIU+m(Vve840aJtjzBxm-@Bqt73F_;Ku(zd5|Vp}#gn z90&NXdHjU^3MMjB48jkuc@Ce!&}aoy&M6uXmdH)Q_j=|=c-=i^&XK-EU^Dvs@q;fP z=5A0aXjnrmQ%qgp$mZSfvp_<0X-Yx=B82Kvz-~+VQTSCLK()CP$TxJ;@Woh-^jV+0 z;6P=F+odKZf^FUiA-FVp#*OJI=mUme2lOa(hFR^uK zUXUspvrj>nEW|9Zk0pVmABLZ&B+*f`7t*;4PArG8MXJC9VQ+;9v9R@=*{R^7fDo@h z5fMPjkHb%6DLO(X%I;qa+Vh}!D9{u#{pbJny+8V%`ah`rL4iu?UIn*ehNz_y6%AzN z+E<#S7aQybY+nsHB)l8uAt=B7>dC5owxab>5e5qGN(&*o%)&SzhM5Vvk!?T&*@*~&22@#?eVM{{|`w5NTGn8Pnp;qRTLpT;z2Q%0&=LO^&bo2RK?6a z6};ImYScXFAw>ZTME!Y(DAjYJb-3p*X!?U5mZfd!_TdgLvfx(okmQia4pxY!aNsj7 zEJ>e3EsLT>;lQI7sB|=tMNOaw5VF>^N~kR_%vq z^&$dDiE3AvG7*D@s9gyP$e|93_dVs*aa!J-6m?KMWYV2e91xWE87iv%hP&{fK4bAA zgogh<8_Y7%5@FHs--C7Age?>1MW`hY=Cy;0(CDzl+gVGfWONXRSLA}Fju5ch8jb;C zeqz3D+b8qpo5_YQQC0snqQV=ms1LNG8y@KNm3l0huQ2?F`fmH14?dW+)9q;eVs}YB z-ga~G!LL5Rxi*0u2rFVcppYhOU!uY!8x-1bD04;YO0xOLqeCTLPi#Amx@Pr4zgQSKm$#-XYK%eN&3X&`T4lzYrf-wi!vgE zzHXbDOCL{eGfM+af133EhvrJfS*xBJqj?4Dajm4;&IUAFjt?r+ZG-)aE>FMAXdE)~ zrrDq{T~F;dX#);fPa`7evf~UDFg>3n4K#JzXgd+R5KmzvO_I{H9ep&}+7cUm zvmLkl9nChgdR#oYrORwfV+*w>&Uf206i`D8fUdjCl19!`Jb6+gM59API5J}z66PqL z&MHx1@u9=6e%LRAk}<1B;-|)+l|;e) zRtzRfu7Htq9>r|VDFI#Iuln#zKz$U8@u4GG0*MWpgOz~TvT6FQx(d+CchtO@g#o=x z`#DWLFU--54NY><_Qfb%lumG20$(&oF~V5C(&gO!DeYNn#=H5lNy$A|00ndAN6L*j zA=u0vb_=FW63J~2lhbGo=^*px1$I4O?6;Rmp{3)jBaO-lA=S)`bz9VI@?=%Gbj|um zjg|@G{;a@`b_Xi0OVDLW<6r#z=S*kmIIx#awHN|YNH+U%O6)nN!%;Lj6>s1uoyO>= zIb?SZ_v{N^()tB$k9M^_6{^ zn|bevLRLt3tjv_do=_&}Ak$1=br-nWlana%(iz_)OFUqM$dV%0pCxv4oXD0T9b}fY zQu;gUtmxf?%r{TeN^wF+Es3h^OA4+FKK?jSR86o#bV*lGJ?ud{Yg2uz6LkdzBgC?P zz{kJ+BGGM~wd04sd-RxjL2W;vn+f868n#c5=F9aW)vYFdzx|ZUD_x7t)%inQ5Xjo0 zu8%(d^ute>0c+c#gJh6+ovuIE_hf$Y;KPT1Hkz#06egLJj}JHCz|i9k{DlF6?vD6X zZJ%Ay(Ow!&Fw!sTNJCgqU*pu%%SPOz@lh40!OM|FJLD_LG#<#Vik!*A!yndVjNQ&H zsA!v&D7iX!nHoUkOn7JFzR)^4acAf)o;&mFM4YrJIA05xM1Am>nLN^Uh-V948S3(A z0YP^I;!ORdvC5vV>|mAelPZ4!A_zsj)6a7=y1J@h@IWRUhIaSK;;S>J1q9t)ZcO#- zik1QOol-21e_v%%jtlae5&5@!;%2;`*76!iP>S$Py7cdxw&hcKb>W-Af?5Q*#avul zP#5Gh9H@lH(zr<6wOi-01`lNScq!^1$5VQcV!WLFIV;P830hz!0*?R&y{Ishisp_P zZC!=2fS{A5NLS=DvdU6aaG(;^WBFn;r)eL)HKeY3I7m>6_CsB4yIoJFJi6AkA088= z!lbLV<@X)dnN-7Ns9NeP4p@2`4pgFJC_A-j zon^7E>@*yxM0HTVsmod!U0ro>kf0Q?Wz$UM>HfOdVga*s(Z$lWbQ%zJkwFu)A+-jz zkf0O>-8PfWlwT5CmqQDfrK7hGhin^YgGugdpD zDt%SKfl8L2zT9RpWIx8-mqU=Cl*Xh1&7Koh#u)<$I?>-&_kQzssjk0m@IWTodG$uq zbTdEWgmvw_#{{V`DBVdcTlzYKT0qcU!8pK-@%M8cNdK;CP^i#ABz$vEcL_voL|sL9 zkf6LR^0xBU4woH2ughbA3S!}<&*_!IC5vcvUTW|__7j@TrXZm1@SL1YN1r}#rh9c! z^_T60u0YhM7SGjDX!&$T!4UzEY)6U3L=gA3hfw0wM$Ud-}K_t-HJjA2>PM_SPA-KwN={_ zY>74GSt(5gn>ameLQ|dvvV@)Z2Q&plXTrq!`dT|>C?MzuK0~pcl%Q?9--y9{!NzEh zdeBS(Ns%ZzAVJd$PbOmic34pX2}E^zROo_X7#P;0LKespL6aA^DZKHnjs2=NXm%1o z+&kV6ly}+cXVyDX6|mqk36GfYtRw-%yyZU)#N=W@!OmEZmzNU4cMAy%H*}$agoN-A zA}ap_8lpXk@wIG zR**e*N z;ATl6>Rs;-%FkH(WS6wy9FK=gxLBG2azt>55^rOludRtWjuJ^hPcbaDK_vwokksW# zVN)M!8q||Q5{T+5I#uDu%N-q_VBLv9?G$hnOQLzef#W*!CN0TuKvGwIqgmy+?Hjbd zIR?lPg+^~cscn&JKh9`8-fi~HZ2ol2A9$-Rv>XQ{iJp3xoT`F+*toWXoPdWAG3g^x zs#y@`%(as~Df|*C^u~=e%Ais#KBS0IU8wq-cD{<5*4j~Bk^o}v`=&;Nq0;)3#U4U6Ow;bDmmAo zEZ9u%DUK2xGD7apJyv&alU>cp$&BmhAoS0U5$Yzu!~RusQn8K_f`568;6$%^dQ!QT z@My6?UpKVv>BI(v5F3Om@3SfxbWZQogsTHI5SFY=fw1lgo?$9eCmn^+fgz*dX&~sn#aSpc`F=#w<8_=E1WajyxA6 z{=%b3Us=!{6M=WS#y^yKHb{GDWajuFHQ9;Fe!7jPyoTw-9b!CQZl>O!P;S5oxyi0v zGOxM%KTKEdASDC`F#r?CTfGMc!y~yy5c=)v7{BH4qO$QHbKDRe^gla4qyob4thN94 z<>(ISAw6&qNK4u~zm~CmIpVp1W91`n@oL9QlFtP|e%9NA0eg1t@l@WP6fr>1Z3v>* zkZD^qg{u+0V84*ZFH1Itr$of4AifFWNArsnos`%#qchqs#yWT)0EV? z+3e;M{?^fhg0OIy+Cf9Y>#>CMcC(!DLpQ&zCbyuVeKSG3X_wB{R5pnSzVEAF&*o|` z_Fg>9{5OYf8xwgbFuVc=I?Qk(_96XkUkZ!GIL=i`#*2@=I07ujL496ZGOSE`aRgZ4 z_!DI-+Q1y=;;;Ky${_*&^?5t`Xn%g*&`VBV{7&6cI-042jQogc$uXCf?mD9zx3hR) zycwrZ?KQJr$!Vo5pGE`Qtu)&&7+uN9y-vDcxYJR0(tK2kN7q?G%2-t8P$MFjck`?~ zrzLIDL0X^Ngms^7=HhmsD(f0Je*J98;8J|QSA|Af-ql641Jn!#*TFZGuUI|<2fpj7PN}NBN1*R*c z#kMzN8aXV)7Q4SXDl-BI9Itwg__^}G?89JSfUnBKQmZ+g6_4=8l?TTGLy&{GZuZK7 zfdPJygZY-8!Q?~9UOBKhV7TgSq?{n?t{3!T2m$S&wUR^1utb-f^k&gWU{UovP@sO} zgWcomc?1QXS3J*Fwr+pX$89wV(1Q|D|2|BKI3%zHdDt}zK057{2aN*sAP=-fcNJYF z*{i%AQi4S_EyGyKA%R83TVM$uorlozeyzINZHQ38)LdGaYy1f+r?NR z(_?x~)Ve}q#CIH1j0GlTx!_k7xtTW{XE})k7BwyqzeR1paXs}E8rVdhq8QyfPf?r> zR76pR2Y)^47t=dP7FdKqK7*o#{oN>0!?`h=Ps2PFLuZ%?A zc`G>{R-!2)fvCG_QJ3vjoWLr0q{~BfSjQlP{=WZ46(~&D(s8H7WX)|+a#Ezk77iRD z-b{<2`+TTO#_c(a1O*T6dAJTccy!2k!+#gr!X)IT_^O}}QDO>ULqeuFwtI?=WD919 zp^C$SL&V!TI~WnNKuXpY%WUECA%%ytU!OLdrQjiihqGU!o}4h8WjP>;hclNviZo%D zv@)FKNg#@cGnanwa3+vJ&+Cs%FgF^%lXD*!&IH8KlaF#%a3?9xz!a>7X zgbfLq;&2fsG{jKF;lLq+hqFMd4>zHX%5av%hmzi%68vXsF z-+lFoeuQ>ItCi86VFmXpY8cI%0|evUD8Xj(jApDO)`D#h9jpN;m|u6ypX$eLRbJy4 zGz%906SNW$oZh}jVV}GW>rFrV3P3P=`yzpIs03?2`zAoa{Kx76fYDZ7<61DS&a0+} z0rJ~)13tYUaA8;0>AybH+hizXqr`@pf`$Qr+GX(Y4hmap0O!^r;Nc{Zj>+J4)_B#ZU>FS`^BU#GZn?p~#_&+^dMZh?ob#c; zF}`BnnC%dt(ZPQs;Ma~iUr5g=h&2FVom^?a!ypc=#i1y#`Jq-mj0s!NN7e+A15O5FQNUe|MH8lm#kN~Tb zUju{Ql|QN*^^{h$?~Grz(zpC0P|)6jQlywnzunJ|pM(Sq%do@*sS7VI!E9z~1#`B7 zjjG+W4i&_%R)aW>X?<%oM+D&=2y{Qwod1r_#R``$crFM?Nei1BDKspouj2zyN71vO z=K_o*DGQi4krZ_2al|axZv~Vjp@l>aqtc9b1=N-%-yjg@QAZT!wAFbukjP_1d8ym6 zK`AXHDDR>SP?F~NPot-T3!d}>RI)fjT#!fcXhZj@(>_d=;ethxPGVq!)P;WJc+)It z>Ld}8`iA}_aF(79PP;~kWxST20fRnjc_`JF&C`Z2RM)mV4ivP`=wG%MU(*0`GgBMW z9?&9*yv@09u9Lu^ce$oiw2@pb&?L&cZ>}Ry(7LA2r?9@k3c7F87o&pMRV^k{RPWt-!_N==IG+r%`52)An2qE(b`_3%UtO~9u%~$*|RoC zG_-x2J&p)M>9guC=#Ob5ix`wv`fPv-V(GIKA3naEFZiB`N}qL@Aaz|fYYZfySs3QI zeY-tf>4_LaW14uzSQ#(^R1ix8XZvxL24=V*4?8rfM`04BTK9?$ zO$-cr87y6gE1ayZ43-WPq;7a(o$A?Sv!W?jR?K}zL;@0&ZlcKi{^4x0R?}(pwB(ff zj*PkQL{STbJSlHqn1q1NV-p9-yCnqQ~9MIyrAYr;_pnuG)-9Z&>)bAp9 z$Zw;2XorHuMOf8*EoX`o_^^S~Ks!8}$r2?JS)p1(0v{S&;NfZF35kO1Z@UeVB7llF z@hMM4wbuLts~iPeA^?{zk{k)t{51Mp9jN?TKMuaSKrwC9-}&%V6i%xaC7wZhP787qiczLx9cc3>Z>E>HCq=PbRy`1zqp}p-~b4+h7Wl zR8SVzZ<$>6&>qF_kPcVBI|!lju>GQEc28$N_5`n6dUG}8^T&@LW=pl;+R?~W(sd)E zfvtWV0fb4Hll7OFs$(t5WH5ir(m~;Sk-`TwRl9istHtX%|2mks6jQ0LIMkg=mtlgg zA04n4bqyX*HZ;Y-3iLltWHZkOeLp#*FB60duIG%9)0KgjYAOQ9HvH=Gr%&mspD$b2 z%*K8->%*+-|0C@~RK#q;vq(&i-8!_B;$u9doAs;|9$+4m@a%#m(b8LY;{?J`cKxQDA|vtu#9QCP{DmW#T~DOl z`e<_YVxe}>>n#ebTno$#6itV}2uM)A9{)}k&o>M1Oa6VO>N*k{s{JY=E7(U4j0Bkl1l@fk)pT~kTpdUlYZI`tEO^TRXfbgN4GC}J zBPKz4Q=(`Kt}_5!UPFKl5pUtENW|0mb}lbf=m?mL`PpW&dGP`8x>W!iGTz2#OorLb znJAHh&2<3G>tN^*k}eclL_Jxd1lSOfE)g95UX84OyY=*E3o&Oe!hZ z?FYzwu?T#KaY6UN=hT?fea&=9!&02o?HhCjBq(n{Ed8z`!+E=qmjV>*$p;9_F-HX9 zYe-8!PZzB?fmd*EAHJ7d1`ISVsuRs@zMW1syzACCst0hO3Ud_qK`L^@dmq=3agva1 zjtfo{07BZ%;UQ0_156n5aGKa4?g)!w>9y* zNWHru91@hiy}|G2G`wX-@7)byh#>S;O#K{1;oeoup@GOZ+v=x8ZSLJ{2Y4X6hj99U zehh2$`C`HkPZb;$0~Qa>DPYjQfloqu-PjX7ugL|oBLK_tdt?Ym=3ghHH_Dhd4UvBb z40>OC11q6rktNW(_GYjlB3THkqAMR5z7RYz1SAVVCp$$UIN+Gx&R~t{jlI>5Zc^Ne zp;T`lNCAWXF5LEkOO+nT6&w`>6t4jZ+zxVb(!?mTp4{Vt-1pI(LUqZYFnaGkngj){ z@4~wjbd*Z4_U^(9Opqo@nH=#XhW5B1_f3jbM+0{j+A4k>}+LZn*$b z*4h>p)R7mf2*~>wwO(uxK^QrfYGGp1TF3IJAdVbMC3(`k;F+y;EC&kOsBBdV{bCU( zt}WXD7SwLB3T_qUw(nvU1I*GzW3pO04G6lZ4PA@P)3t4=!UI{q@N?IZzmubxxEjog$ibsp*_> zR1inrtBHsA-T)TVNmECcoeg1XcH^0!W1^Nw8HFvhg{53G$rAx1*Q{@(Q^{q#n$C&? z1YH#Vb90Kd;XlL$xt~w8rbeRJzj{yVCXpc^s#bc+Z}4j6Q9&H}wn{R%Z#z)XvM!DC zg@Jof0c4(1Z-8NKZcUd)QyNH6`nhsb_?@d2z30j^*oQ=@K&N&9F#`-F!eK*%+X>WE(fgWd(PFjW}&!)n{NrOjbOM6wWkzzrn~ zQ3xIx0+NNGlbxav95CpwEcFF%Pv^}unoVoI6${1%`-A!WbTJ&5UJZVlPPTm2tzdg_ zmPdnu<&}WtvU$!rCk5L*vm^=&99IJlymb;fN978c zWwT_1r^7OxSohZiGz9!8CE#LDi=$(D>wzAwr(2!2bPX+E&?>l<(&J{uBxxY*T@T>p zn=hOwW}wFfC&8RW4ruZW1#(o+Y8;i*)_yegu%U$CDKPV0L?-P0awr6QLEbxT+kY&*~A7M!Z_`7DoFM8~WuW_J1DCuWv zhZA$zo+WL7z;NCBtNuYx9x5W7{575B%*0P=L7madRy20~-{>x|PFLcqUd>p)_ zXA|O?5D@-LiUC^Q>(H`ajkolI-I@;o{&zv$4cQOr@hs5v&T_xl&Fxz=v~h3r_w8Ii z;iPX~9DPH7Vx@vr@?$EAk7$D^BoHb~J?UG`zXmLxLfMaapSs>^~QjiJ#(+Qn|UyPNnpf0xe-M1trVlv)21sCpB#6bXvM{3!(SVE?9!w4rtxZwp@KlyJ!ot>l1pI>pG? zatbkFg!!q=3Z1fEsW+wD)#zjYpRpI64b)}n;)BKhv`nO0{#fz%nWraJX$c|oCuK6% z^o9a!;3p>)sp*cCxM`+OU!p`!2Z=u~v!ePYaTxXDq_zx5A@|RZl}o$OcHBu9FG;gu zhVVjfjc#v0t+%o}+zVYnee=>?As{WW=$Ew2sNX%BOs9>Qm^^_+B^@OGxWilBH*v84 zkKsL3ut8uH>X(z%gq}6u(iOJb=7ISOT~MqWDHfuJ3iX|YkokeMWAZCCklNBoU-4ef z`9Rh@#0jxKD-vs#!iCh?DWy8bVCl{__QaHs+8sOXcNCNKvE#i&wTFUk+JAUpX=`RK)JigNjIvzhR1 zQ-fE^m<|&2o*sVl(PXokiw14*UP6ixGNZA9cdo#aAGLd0PoF(%Xc7LBc9Sxv7;0=# z#th;4pciJB<_BhTHB-P84<7W=l#p8Ht@;6BCiA4;YUm&_>U1XyL(O6`g+q0^^K1}U zR@`4r=q@C>IG8)=NsHT4LTXuY>#0v>%##+kp*v2Zo>P8#5)BJ)4WiHBVZlAS_yf(ZU`or<<(T;waBhOE8iHV$xRfV#X6y z4_F}%YNdz?!aA%JPZ17pCBp$R_hqqrbIz&b%*^wTLk0(J9!&u$(HZ% zo|zkJk585i@;WRP?U)TI3k|hQ90)>#JtBnU2i=CKnPuJZxX{wRYkp9LVm3zfShM%VxEkPbYLxnx8i= zxS=jXDL_Gdd$nJlsntjII_jc%u2vqu*abwnts-w|xpt<7dspO*91UjymDaa5I zLH1fe_I$n*x$3ymuY}70CaBci%Y#x`Ku`q^LAxD>EGZ2Kn!tD~I^8aa>WpUr6I5z& zHYk+^1l6m~CC+G!Czv|!pg8Oi77s+;(a-khR22nPm7_aEkomIG7i$Qvs>Cmo)K@*VX;lR2r}>7n zfYd>P?pi>Xd_kwYY?hX^v3w?rMQ z&6|Y;T~K0k8Gq|aOv8aDFyZ_ub+iUGArL|4BRx7hp|e*-dH{mz`z~5Uw`u)dO;{D?4y4lI<9+2(A{#C*Zwv? z+egv8<9hMK&Aq?{G0W%BF`hU@jK2})bJaYXY%b&=xue1@=4YG9=EVo=`Si)65j_ne z^MJ^n?<@vCH_wINbkw?1N{tCtU(Jb?W`v`X>~PdWgn$EAQ0ZiKsH=1e4J1D7Urx4{ z!g^I<-{QqYb9EsquijNe7B58<4a+Nu*tq<<^Z0oXpTk~2$K2Q9Y8`?iZ@x~?7u(DE zx%7*wew&9(&`}FR^Xj75>gXIK=)5n^+k-`CNz z)YLx#f+{fHDw?^e%ag$akq^9c^#k3@Z3fl6Mpuo}B`~Oc4}lJB31fBy-V$SmG0}Ie z<|{fVBAKeXRt_KWomnYUg4cuehJ`=X9a}R@u`~)FtGkl10kf00lMV>flz6@T1 zD4tfXGoZl(k?&&6cbk1P@JJ%S1Yuyp=aCE6<;>uL$aiSy)>R%ZsyZ|p4J1BB#E%tM z)h7c7nwzfir+>fLU5+o~kkoN~>fw;YVL|IdQ?mW93QZ0XWI=h!7+60s;n17R1c zDn||xIr712Ip1#SIym8mRUH}+2|DkKaet=D7kPKa`{Hubj%oIYj#$XCSCubv*hKE4 zPE=j)SRcxJ;cC#Rq0!>JtQzSQRe3RRDH_=bSJEgr(0G$Y@w}?yvL1zZ?sY4@ttu}D z4tWV_1~nP)w)jSHGw|@#;vqjF(XhkQ&4dk4eXQG1A0iGwRk6-PB455`qFt8zsjR96 zt3S!P9|r~=KkBwWMRPtKU6#%%m=F(aw_P)DZ}=IzCEu`>>UhZGa7!N{gFGm~X1$rjQRQdjL9WP;B1c7~&Kke~}(C5|X{uEP5?AyL%3s3c{I^Z+M#-xVjsc59fOh68Q>RnAF5V)kq;C3ye7M zyuyahD+Dp|1jGG}$AlS!oDDqO-|*qSuUYDiC_dh=s#yjO`SAu+|GuIVv4X3rQ3)_X z=-r-v9C`uKLni5lUdJOkv5v>gi6yD9R(BL#XZMPz0Eesv9ujS@>7Y5>6)@M6Bxs^3 z!a5oa2O94ezS4z;t7`c@BMuyco?_bl!91)f`i=NszIMPA&|&qB95!{y+>cT@0fUo4}uj2-I) z2k3wXw%0;7H3DEJEO^l?l`V|}29=+OlilT)^Cu0R&O4_Yk!V4d4>*s@PYMleDnDC# zJcN8Maf0=@{BRsF+)(<-$~sdcI&9c3Xv-)wTgPMviU%OND&a3GV;&KN*Z9xd@qROB zbR83J1#|`vWLFv4^pfWN7*~O#10l|ufdkcRNcd1?d-{wMl`Kivf=Cb%7-+cpXuJDX z1pO-WSv-*4VtHzwugMelG)!VP?3nU6TwVbtNV!Lz(>vmki&S}}Lj>U!mdlGpd&crt zP@4e|7oA1}5%TsP}i|J@Nga_FzD|}`YBl>#on>mzKA`<1vw7^BvJNA zszQLp1KD+%)ARW`zrMa>_NOR|8nA;-^n>c@2oQ9702SvTt3#{zvD*N+QF(tr6?zofe+WqvBRe&ldF>s*b zRXcIvRaMotcp&4Y_H44?cWYIZnnnW=?_c^S)p=7;)xQiuLCc-Rq=*`WDrX5WL3-Qu zG54G1p`QEMj%k1GoL?GOa90+9_;5Nx1+gEDA&GisbxixoguC`0j3sbE?gyesMBUQl zG+OV0XbKqgZ^Bj&gH*K1bF!m%x@CCyDu01PcMm^<4G~EjY#ROa5uXMd!Uhf)^s(cq zOGuSrSg@*gJckNm-{pdVVxQ~X<>HW_j7^;@>}peoz@Wbqx!bcjO@BxIu#OWTWuE3? zL47|>y=^X*bP9zB)CaYWuIU{#BxG_=FS{+7rwx;P4GZeH+>J!KWlY4^>T(Z(LI2;^ zGg={_|Cg`K|GL1^^qGm|0S16y4S>~EV9bsM>l^BG39fNc1P#4>Gz5Xh0l^jIK&?*h zHu8Opg4Mw&4;~35x9oX^hx*EjkM!Mgqs`3|8Zr+Y)0pFg}_)JwI86Qld#~vVe{`3(M3(%>?PygIM)IY zd~Zd3LAgZKB|WAtYKaXMudUlPHH4#wzkB#AdUBxU&RuZU#(r-?pTtVCOegCJE6fTO zjg@3kx4#X=qOrhoGqf1(b9>e-rgC|yWN2?}71=F71S2b>=y8+^>#?U#7|W_1&J#2i z@^U4#-df#v$qK1tbvk1>0|p+Jn{W4XKK)o>GmVvG+0Z@IEHf1>8Y|5*U>&8CEo-*| z#Vkf!kO#Av#zJ21gypZg7qjMUf3cv0alAuRGDgZcfAkIeJL7clY9<+OkR;`OUS0jIgAiYM@LBb-;rA%_R4Ht5z=5{(Z(@(tA6^A3#IH zTUia$J@sV8B0@=zrbGm=q2gXr#X3<8CB5iF3V;jtv=10btPF-sr*q-v=;_Ql+%q(jUsD#1W=i_xfQjD*u1 zZO)J_zy#@iMyd`4=?})%k62Di8l`MbV`xaY!z385R&LZZJR}|+Ai}J3*n`yKv6!K# z2^Q3^CvvR?Gn1Dr_hn6<3J~1b_PUF)euRz@SLK+)BFEgnw=G>@7-zW3zXQw+DP2Le zR(l}1XVsBOLY8{i6V8I|G!=j-; z@@hyzm6&l9%vfhQ6cQ+I3X1WnjUM|fnApoR0T6`DaM44D{SC(+G-QTb?}sv+LP9>6 z;phkCGu$@W-*5pS2$^GlyPbc>M=kvw+hBp_dgu__%l&Rfo939~70l^p+`++t>_$ko zn`~)kc)Q~HD(Ez2*gPKSZkd#i=IW8K|E1$Z93cv3CnLfb5tKHEVFFo^`{YpKf$mjqoKf~>a){8qmFnZ+i~?d#sbr80aMIU zu;nL_9fJdgD*?l{nQX)^(1J?=5)>8)9APfDw3N@it6we*4j7d8!isc@8>^%s_blBUlB*cL*ffrzT1_~{pnsbEk6gf!DH zTzheUqqZDS4_~b>nFoQ@f8pO4ZNUvGA)2A?hDVNXZl{;cjIITs|J^T?fC)YL%jXFS z28ael6K4QHctidkk8KLNO&xp&FHffy^q6%k=`?34CGx6J;+Xl|IY@Bc z7M%N)OA-!z3&w&SxeP$Td(|dyGCo>TAL49=XkbDKn%@%s*{=i{T!xFTvN-2Mm?|y< zm*z^;gBmVT3$C!zit0eY>RG}&j0IT@Kr}HwB|WiU?G}KrA!?lYIdId^_xshj2ojv| z$0uf1Y`SR0_UeA+#^AsOd*a8I?#*g>{OV^<0SG>{J@)5BW$V}WaJ(E_T;1x}czr{} z(g7<`-TFnW5Docy%~lruo30M7bx8nt ziHPNdZ$lqcgaU_%H@tRci9{_b*skWmx(p#&us8izOhVG}3+~y|DWZ)qrsH&f; z_|+w&rj{hZAtG?mf6#q{E)_K{nns6=tJ}+lZlV}HqCd_PqsNkV&LEgFh|$1wg)wbk ztfs62l=LcdL>de{uWv6G&GV7@Upi$)PjS$pwpovXmBz8z%0PnjMo6ln@~(X%?z$;y zU(<{p4|F#}I@)(W-nRRVxEZaatC!{r06}<*5$@@E=LBO(i=JT&5JAcFs1n3Bt;nMX zOcJUs-h&bbfJs7Q&&#&umsRx7VE_oi?{61$e;(bWON&5ar(Q=r&%Tks(Li!#yWHv1 zZ;u{4emI)!#X0>BBAguufT?;B8i=kVohF*Ls})Uzv6xa~JPRLl0T6Uo8QrX%E{`AV zXUPm4sJIE6%LSiet1_WR1JS!IPwFSyS2(6H+m7ew;}tDwi$(2{{y{dA8GMMj!NjQR z)aimNK5tqQVY2iN5ro{#D%Z?=s?4m>K*U{V(O%4Xwo2vzve`0lpyGLo&gfO;iJj8B z%}Q%aEAQiFvyEOGC^&KkptuS$ROFDmiAu7Z%=s)wm76$35Z;AA9cRQrxUlnFa5?}` zsl2jddmtCNRV&>)asI6?w?G8pHAvLCrDN)H!o8#)lXX^$2eRwtR>_h5V=|pKYaYT& z*z{$WX0J&S4{TTYuV>T_9$n$HTpA5b*EmzZS-&imfdkhK!PT=J%(GcQ@V%boqgc&s zS+GCb;+U#n=%7zS76 z%Ho0T4W27CteCGZsfO>O!;A%I+499Ffx&+};@8(Y)7#n1bxKyBveqST2b$+yH?*%u z-Y!|o>p=6o$^e7&I#BS68cHTnN$4#QX6C9I8eryGck^Y_ie2=ztiS}Th_v%|y5oI; zlD<{en+zPdL~T_UJ@gpkXUQxc*lzOLvYb5Wb=##yNkmzP2u9I9Zkp*+<}oFm$87F2 z8klbJys6*RGh@8}U9u9_NoOFzDeS2@)ms59hb3L9PD+gk#=CJY_3H#tP75}g=Zg^; z;kgyP0+ndF<#D!TbljO)1&F-fiStT7$Awxl9ymnGb1J-6b>CT;R(Y*PLmq`q)o*fJ zXq8O?2tMJl>SxuWv)omAtV0B2B8P)|jUo)aM${1d^LTPTS#V#isv#T}c@@!IB@zLs zs_$j-z$W@$Y7}{rzLx|Bzvz2WGS^KChp<(Bpb!+iqAx;8RG=8NFA`wpSS6;B!T19c;q|qz8@bwdkR+ui4MoJeg{ zrCa6ZTYf3)9}aKwXQ)9hU04-(_be?En|3=LG> zk5oNsHZ&_kr5A1GESc=pZM7|{bm?(?=!m_^rBhxs-WcCHL8+yApzGb7ebk^fCF=Ks zl$jM3l0eaWIYq|b#(Ig9+39}|DT%Q_Q?~SM>Xe~|sdLs)f~Qm$B6ipcoI)3PpzDXZ zGNd~@XeDl&^sIjwvKS>1l*LiXT6n9%!k8|2qFdznp5$SoRFVd&vi8!dHsc9BYWY+i zCLPpXk_gJO@xgu&O)3u>A3_o+%EkwqIG%hSG(IpEXzDCKT6@+7*sk~?jKRw@#{ezaC~8(ol0jk6XeD@{>+1GfI`Y>1YV;93mYCQRRML&L2&PLA z!-47wqf&b$SW8wicF!_tv@{VNujbnM8Vy9el=O=o%yw0!WZ*z` z8>RHISqq|Pu}5c<=@Zd?Et%U%l~#-j;=3tga?0o-v67|NL)5?p`RfVtIGC19DC-ixK+Kf3Y|;ZLE#E^i zoEVP}G4JFpbDnx&yJYWbnPD6}r2IH9NwL3}@9k(qj(W ztUD=L&zq@y0lZ{#^^gz?3+hy%G$ze*vf`&91}Kye8WP^h=YBh-JLULlXvseBG8yAkZP?hY4>`NoiV!dR8<6WG1vW|KET9?t6dqJ@tQK z>-|p!!_WiHktBn<_cQABdq-n+v1{ZkB_rbkNrC}_(r$C2ph>2&(HQipDnqGG5;Pqy z$gjJ?(EXgm_`770IcfV45Og;Mooz~4WGLB*(Lo4EQ2Ks}5frxGq1*TFm&CB3_KwBU zBsv7W<53D2^tXhu&&l;J~^4Z49^5wuC^t1ua^0O*cPagn-{x!JQ*X^?r9XjSYF4?u3@+$`h znycIGV)UR{wwo6peepZG{z=T*6Vy)S5WS6N$~!ml`tQ_|{Ws3k1u-%iobn)Ati zL3WRf{$)XTuS)?(hKM(kA}+`4$!4P)k3cMr1r$tXFCnuxn}Fk(;2x4-&`_A*-NDIvutO zhLE8BVPtl7-pNz}TUKj&)0tbKWKuU<0vUV=lJ!A}Zl<%#F}-~xURA274+0hBZzZg; z$~rYb9Vw z%Qn^2hnyBK*|nJA3lKpHvsy{BR?oE1UdktYYi19#rXWF!NN>~Vz7S3EteOQm5gor5 zN1l2_`VM4>c!wKYiP*1nterRX{%_RtDVc~*TRsU58Hja(;tml#VqG2>5`^oKTySTBaz zv`0U#8yr&J<>qx#!q$!{DY;@PZR|8QgrGwS*=pN2Rj)*ssz--14GL-zz4t2>;#sEq zM{f%Ts-JLk+b)~!EUeq@E)!V)@%X`v&2uLOWQj^f-$V^c|4Iflkm(r-Uo+}wBqSDy zZmS0#=y>6Lx*dJhZkCh9C-k?`bjIf-N@Ar4GV?9|?*bUy@1(i)$+hi7U69TD=p`!w zp0q;*V}P1B(rV_br(D^XU#wG$MOH210Xg62S5Z7h)~)e+?8U)-uoOJ96SSX(G?D`e<-n6*Gt~F3%K>b zBV57&S*o5br>iqw(ow2Y9AHb2Qx9?Ta&8@%73Fb_1bi7aGkJpzo%X=1Y*f@3Sm5}9 z@H~A5#v>-+HVfDB5(T)@@1Cosqx_!Y09*P+{VlOiNR9G~fdvj3k>nQZh?J;^R4_pP zvGDkOGg&OJ`G@QQx1hLA2atn)^=!gYTQs@=ve7rw`Mef%2?X>vm1oXo(>e8?7=Fm| zl#^uU8$f{}_5IoWV$L&7q<0h$(BDz|=Vz4M=I3)OPlj}9Jti1v;7P4mtX^6akya=m zpr@rk(Mj7e`FWp_r2r@}ysi8s@6B~iu?ZRcc-)kMfhF}4-9Kd=vKi?m1!SSqHEY(# z{gLPj$U?uqx~ivy6%f#6&Ufx(jmr7#Dpr{@7k|0l@VXV1GZhRJD`Y3$m~DyK0t56|ZMyhffB4LmX{(DhP_TCxIwfG*>7?R2N2;#9!^S;pzw?T|#pX^I1E zrMjMayOuCOmOZs~7FFg>v8bM!fdvlbnW!7z-0swx-}shd*OMLAD$78(^tvlMDpt5^ z>2>+1#e8WE^`pFQU_rg&5C>7Zqn|jA3=15}Lyq&~JS1U&EJtpemy@e09r3_Ano%P+ zjRbtD-0d4gDd#-{*`~<$gubWZ(xWnd2F0|yJ&!2uyx$?c@;5rPg7@vCkQEFx)BGpp zw2Q{Rn0FNyfHvqVzUgyXI=kM8m5%iVZ+=5IjVr`-?sF$Plzi$cS&8+#Z9)SAYhET~ z1+h>CLxzF}j)HXfY$o53rPCtn6cU^?%V&8g9a6hS2hD#=Fu&^=F!(=o_{Hj`OCGW* zq{!?HwV3(EWO2ZO%qw=ta=1&L3k?mhTt7J9Bvcx6K5G_dxr+%_$MVhOoOYXDpVA`J z*8U){qUAO;G@xc_l{xfr@$EweGp(Miuj!V|k@_F;u@>cX8qM=BphDJX6$0`}4k&ov z(CSr7FuPfeof?o zn`UcNsSHg}@ct7;X?l8&z83iGNS)i0b`92alGoZ@7x=#eRx>he5%^5E_Y|hV0X*;fAT8$k4y0(sZQhn5E(Eg~f|0U_7Lsze9_#;!yd3DSFb8j9T0K?4>|0OF4K@0#c8k&#lZ8uyP6%I|-POg_Krrr4CAh1f?fZ7t6XMRUj4+(i!5cMph3T zfmlFDBe9wZ1tJKYbcZdx=6ZD1bO%h3I_0=s*%`K~TNNS*f3c;_GNNbH7+tMai`kjj zXt7#P);Ig&kK)Kz@v$oNbHIV68dcSoFb-(?seW6FY0v47%Pk#AM+aukCQECCGupir zuOYdh0s^S{$(BZ!jSX#3q$%0P;e^g~q+Nrwd2sqn?Ci02Zw1WPNxW3X4rFNfIA4Rc zR2kA?7541lCsc5A`$v-(vyog7-_X&38!8e$3X8YjhYSs$F#F9XH>8IJXGky7?*IoD z?El8tPj9v}@sViqY__0}ZW?>(zsH2yqD{gLTE?bboZTgUVDkPF5~|+vDbEZ2%^3at zRh|i#w`~Hah82&?SwZ8U?2w>w`WVf09e#u7Om)*XcbYN z<%{`xwY;Q{1D{ORkFO`|vj&|s#^UJD(ZYB0K;Ks-^j$A)h5zf86e=cY{6HMBDb7V{ zjOjm4=s!fAqy~-e6$;7O$&cn5lj&ct zsUO1J9Maxtzgo;LGHm|PM^Bp(=I8u!jex1$3@MjA1qS)2*(;es^$eW^#p_kT3Q&f& zLx2Q_2yX$bXVm$#Hm=uG06+%)`>H*Y$#2 zLc{WV*-M=l)B?#4H)jqR^yHasVuI4B;p%5v@38Yq$gE^BX9^0^JGPxRW5_tGm{A~t z?ygPe1XIY2KrtT+B*UpaI{nd`ys9{rfx=27c;xT2ljOOzB331MOiWPPcA_Smqx8yl z0u-c13p`|wFj=cKg&Z}P7P{)C1uAHbTs)f5F)DPq3XO7VZVX-ILV9R4Ew9oPWb{A= zz0nkmW&IPoRQj}4iDly|O@Rdq;t#Tvkv=isv?ug|J--?+Wa2w7Z`im+)YLrBt+943 z)G02gjTDlqbIzZrl0r;OP#U>8{ds-OeOx6s8;~G0x_9ZX)Kqwiwo3QT0S37n&qRJ3 z@eEiH8<`s7XjYw%TB>Af2I?c7(>XPCw%T$!=(W zFhaT)3PttZ{D^)=dBhFfOUTdUslu2cg7J>H1zp=n^VoEiD9eZeH`JyOu7N3>pG&<} z8&?VkuAgk5%e&^}S5{)^H(9JM8g2DIn`f(+j5uJMQHr39+=UGlpFqXg@~qKbo*hh< zXA6Jy2JAgE!I%y|`YsW4YRP=_jQOEP5h*%E=<=|%(wz>MG$6Jb!;qDLv9KZD%WAQ-UuZl}rtR|>8Syc&GiVZJeg9EC5 zy<3&?wVjB+tFsOZVHpjy>6Sr6W@_brmH{vL?y|_1Iu{!%eo^e9)pJks2xu9?OHDIC z(HF&vXbzjF+kmz^T#ZDBk{vNk1B6?TX@di*cEq%JBMUY&QPmpLoCex_IjTpOj2m%H z<$XIjDxarFome%09qRIVpzeJg_jK_d9q>f|k9JRATc7TSOcJF%#B%|`x@Gb&CNjA1 zyWCUCS}a$G%$5W&OI+}JY@WJzkJn^#iVSX_&8sWEKvkE`0vEg=xW2xmWua?pWiDiW zB*5K(E@Y>T1yjC#yEb+O4ffAqJAEm+nOw|HSFh-ax-V+BwfwE*@~(>5Zi zA1hk=vOZ0!O3i>ltz%F)Tt6{eitkzz`i@83He)qKPj~l`%|LPrKc5AnJ~H3ekJC!B z9S8w6(}c>Gl43)E&ehB-&*;lj77QgCC;^mDFOfm6C(#&r`qeAXOaXo1F#9z+M0{wz zr;ETnp0`AUQS1VKhk!o<=CoVOnt87+0#a<)?-!st*enKW6Odv<0Lz5B0Jf7;#$H=a z5Wt}JM?XEm`wF#1zeEN(i+(!M>_S|}csf}(=#Cq!?5jq=xQ!{BVrYqMPP}pvNr*kxP`=aOI#PR*$}f@Kib~Vrvz&BVE59i z)_NNomg|nG@RfRqHjjxdwaJt=Pg*DE1@s2ZB6QjxF9D?JKD#T${rWQCWStU9_=lK! z{lXO@zFuEhHxC5NQk9Sb26%;~W#zxcVM74xo{Z^;trzpz%f_iaRIb`R;m9Co*6T;6 ztHt#t-+NQldKBC77Cl#kra!DYGP3^c(r~OJ+MpdVF@>w8iho9)vX?sbw zem|uokmRpVh@WI_?VYNvJ~0M}@#mKM=UuXrl2<^2-rv04!n}*YFXwb1z~8vj+4%gM z`Pv$HiCj!Bt_EYZq&9MiTukm9#ZntNJCnsPX824;gv~h#2U* z&n5PP$Z=gQsNOdrDImw+erC_AYyMbfsIC2USRiVbkL+2pTkw%NVYbUh+ttN|b%e|< z_$Xz8kMe3#y>m21fMzRs{=Nix?3VlHi~)Y|r?u_mA~~fF1q1~{uf!|{6HwdmQ9&2e-`pO(f(AY7X`IZ@Xx!RB zPnelswWncYLjZF>9$M1sk~M!))%_MU=vi_~pK-~nHuDS^)E|p;IcK!9gBJB^6V7n9 zxn68Hjq9s3+xC#p0wtE3NG*Z|`A_}iFW1xqr|%G?6juHrDQTAmjt(hzl$5c2+eaO6 z1D1j?%;#vJdYe&MpXUW!#hFJ#NT7JnqL^;^mZ5Kyru9xR@`wT0w3T{i$ zK=r9qbV~Py(IOcA|Isyl4??GCrN^-{){s0cN?M|21(pvE5ufCU@LUNPlBp}^1&lr8rOZVkT=P;*)oMKZ#ki`UfKgp9vCu}CpnWZ5khcHbV9zs-dkwrQNMCa9X zCYJ{ro&pP*!~syl3YvTd$a$FgCHG5?D`5*g&GNNkn#$%*(7NebgV>5wjckP1!#IeuR( z=<@>>7`6FAB7@u?5u!s!%Tf03>e?d0z=sgkxl0RWtRvi$`$8Mcyts70A>jkMaB?e- zIY9Q>5Rlhn)3ayHZ5I#NLNm6HZ{}Qu%Nw@T8rQ5OG<8P!8sGVOl6oL{DCCAT=VSq z-}Bq3Vio}e=#K>ShE6BFqTOW|v={Ex%~&{nYJZRsvb#h=sgNl^1@(tH)b{?ikZ9e> zEI>j0aSpLqiQsv&AZ8cyQ*qesmkO)MXax)MJcmD@-Ei(&94=8o{Yj49@-SLX9 zr_WPd&pPiPR#QbicMz=GfNaltO4O*}Ow*>pH&E_ayQ zZEhbbm_Osp<7@ifC6_*A&O;eunx4|T(9rM|UHiM0r*d{TD{;m7S#xuf6%+|8_TlAfxebK~e?T&Q$p!H`vwc6(?1&kUsW|$WR z1N3~Z-!-d+ya(7fN_ULEEHqlLyIqJrSSHA>XA}M)LQUR@`<*=@`_tJ0qvXyD|Cp0-l<@pZl>mY zNNQ7{prPP1E!*7^ErTe^r+}Rxnxp|_y>84|4mb7Zi69zu~@TpdBm%*k_a|BFBz;wDsD=r6x z4Gp;&qD#;5K|pQwQ$a&PZnl(myOq!s-fb$;@KBOpCM)X;kNV0)AcOxGx>i|r^pM8L^B&!#>$)T0C?}0tSXV6$ zXv)nS{Z-HQN^N-~#fFAlzfji5>j2i~7mEX$exki*X3_33(IB_8T`4uWjV3wdZM=8vVjjRxp8_jSzF&b*A}M=8VYi~As=(A zOKsjT@S(*Mp;Ix_ftHW=S8Iq+3mrNh=%@m7<7{?%&F_y4STNEsIZdqs1*<26rpp#W zh1$i(I_x!MP?rE|JpJ~wl{rbt3!{d9yA2N|o_rx5l~ajaL=C-V0~!3Da*>nG${C)? z?HbC(C4d@FTdyAW2&tj1XV}niUkA3XALo-fKefJKb$Z8Y4#x!NU6*stH+}>hAg?iU zDkLF-@1A~E>#>&!0=0GVQvrvuYT&Ta(=<@V z>$>XCio-A4*K68EY2B1jt*(2(p@P@-?7_}@ZQWp4t*+b1;O8-8JoSq9D$$OaedU3AYYNx=R>jgwm<5*57OyeXa#GFSoB zk~cLn_`R(Mp0eFvOY32RLj|7|Nz3WwWRup4^J_i`t~M*;g@+QJFGtt3|5t2{7oTSE zZQ|APr3DOjK4wr4QB&^3LbWji#|5{~@|2r*wd$~31B0DMfKq5pBbp~sRf_;GJe2TE zpdNLnDXV1y6BWFC_D4NoPmNTY{mC%FY0kmDk~yEM{E|j#$>rpE`h_z~LRIGAatWZu zj6n9V?S?85=m5Lya&k@$#eAD=pD++J4%Ix3|cBH`tdH=}k zn^TXMtF4k}RhQ&83fd%tz-(gJ^51$!)5vtY=JYws_+{pwc00}>fuO9IwNW)4U;?3>t{arqT>i z@_WUiJnldOeWEDp%=x9CDAwEJhi(5;D^mF6{cM*?Xf z`kw(9oWN7_9Q9`9wPqfdcC0S9t}D-WixBA ze~hl^1HYj>5KLS)L%*>K5YkaMv6UwCFT2>F@n6#i*J5MlX4`0>@`ZJwo_E)P%u?dJqB@tw%Z2YaH0NC+wId-(?7i3mBL$A*1-+p3fnIuAda>nl4t>r+*<0N;yf218RO*peEhdm#nU4 z{L{CPiI{St7!|brbAdLa8l~^DiXU(&mIdysLuN^O2%)pchu6#JOZvY4b@-4`LEArC zX13_!joJSA2sMF5!H1JqH1TI`6b{dvNH{(R7O_F$KkQaGo?p)FTa!XY61!v2BM@ZJ z_cKdho6h}#_rw`MZqbGeBz8;l^FY-XmMWu2fNs%*$OVz(wA3lx22E27htZjOgN zA%*7HuV};16?MgEU{9%cvw6w)U7pv{R_yQOgj%~)#r57ORXRCr=6bN6QuXsd)kDjN z2jlTkQ4ivqufAq!?^!Kg3}J=hM;^t6EwwE_mN0JtM%F8#ae71Qz?o5&8pL+w(68i2aR9v(0ERVup7zKR(f$ON;PHYvXsBnDQ&s^i`5$G zEKp=u4tZ{F@tBgQpL!}s5G^!+W0kCYdB^aMi~dV3U4SrNsQ%niJxrGZWR0OEDXYSS zY&F>(jUE!{!Ac1x=*&m2mq>^+s?M&svs(POixEognvD0vwiMb8y-3Kjw@{P4G|-e+ znnIJuVfB`#K@y_pa<+Z8;=TF$^`s=b^oR`xx9%T<1bXsfNNEv!+N}e#>uC)TLyQKR z?CB6ZtS$rexv8G%5I+x8*$Ys3T5O2B5~r%Os#ebel*<7%pIBKln=y78%aDy8yECRm z03G&nA%Bdv5Xf~L=9+qz3v-B|%g#gDw~H3ThV2mFV9yLXkw4RlJ)h}1 z=RPVt#oQCJiKwX7m{p;jwNE#ea*H5;}jM){AJz$uc>olHSWI{pEwM0Tpa*L;SfN%=dK-AQjdXp<{CsZB1D06e zFrY)FYD(z*6=Kl^BLK(QPQK904LcIaOu+{dV*c8VE zmRQ^{U_)If>7Y+9xEVmMJ~=Ow&}aO-s7s7L4ft@K1}*gJHqHRF^@`q-ow!SknhfMn zsbGZ4kj%NEelLC9cEvXp-)`p2IHC0Zi`nu;qqBUmcRgQ-V^OB^fN>U%d%H)R5=D9| z2M>Hd^Z%|d5q3|C2>8@`7rTWHEx*XoazXo2=NHQrT?Hrh8!%r4?3UfB#>R)9FKj)t z<%W)m5TBsX^2CaIlsr}f4hhKD;=zWF&uks?LM|HXs}q~Jh=7j}^F`ReQ1GFx;EFD1 zNT`-w^UvV-t3;-O3Eq!wUP+l;-OwPO@3RZ|>^9$Qh6?Ua{Mv>r(RxP zU94$hj5Htry3B7=$8;hKrB7)Q7gD{*`e?bLk26p(+ddZQsb(J=kYK%M`FK5h zNn4Isx1?DiA*OJ7Y}8&*OIaIR3J113mTlXa^-byjtYDc01C!xJd7ZqcS&8(b2?sVK zM%B+`x41^tN$`;|>Vks#Dl)ORg0nTbay} zEvkbFULz;yXFMq|vYoLZ!RjmJEMJ-SRxRZW72HPuOv!U9ZDjwiBv^Co8NQ&YEAqIdBG2>f&5vuzza2Ltk2(?8$P*t6fmcYsMW4Bsx@l zQLG}_PEJ{&2L*f?C6WPZ?ofYkJ)=91Zw|igeAj3>pCX2IToiCElK3bRMvqjAx&p4VFn4#`wr(Tn(*VfBcw(ZQ7S|*{`BSMg68nf>Aq&U zJ8#o4KVMAF7uOq}Ljq86ni0xU^i+S>b)*6|l zfOTOFywg97B}|yw9ZugpUS0F;sE1szJlDp|m~ zm4++Q0c?o)25)WVmsj+iFm+&GP{;LT^thXDa>G_A@usiP0?sA?hw4bBaaD>CavuRI z=9w_CC!pB|9+#3vf&&g2U*NSo8T}E9qJX9dh(SUK9#THVie313 zfV%{MRwM(^yCif}9b=xTNdllDAule{=d9wWDK0W_$jB-)k0APdM;zxsN5P2;?AO(H|;$?uKU*g?DK~@L_jOG9vF3G6YALH%RGh)BEKgk8`NCFm9;su6JbXM^_Ww|1@ zO6NdBg09lu=j>>WtwnC zVa|h=D+1Ov0O$=0%S0m{ev0?b(HfS(TQ;n@>v?reN2JA8b4(GK&L3(Skb2pmvW;7GqqA!Wssoc6-YHfHCG@L6tuit z*R!j|WIA(sE0rrl1@S!;h$zh7oDP6VzM10K_WKRP6kqtl4>q%EXGV*#WhAp#x}K7#k~q7-|*T+EkzgG`BD450Eg zr1%i=iC2VN=C)l?V%WZ0hGu|}e}IrHI+r7z*X__pCEL-KHWgns=!Q>PQxh&?ffDfb zw++mEvzrY9^}IsPD`HYY=w^GsV{tVL;4Y>+04GhZ6b z?@|AbX}e9orF0M{``h{A#Hp4{TEGEb(M2lBAWTk077Mc%a|0G3D`^vakS8Ztisfy| z)y#JROS+ZxNkRyeUJARCJm%IU#dLN>L*|_Pk`Mv|3S2jprpVhaa7_xKawwkL z%1Fc1IYy?+vs=zXim`-5_gjVAmdL+e$nm0ZpFU2<`BvvPB)W|7VouFwFL*Xa-A2v! zaYANJ%{E^V7do+K`!;H}LkNKZemq-Eov*uZ+mGOc%$xzdX_h_jaT^18n-B7Sg|a{?}Uy}A)ge%pp# z*eO8;iC+~-Y(1l+o~AUlW?YELL71&j2OL8feT^2|%O=li@E@ReS;K-G^1O^~$q z?0j;)z|~XCcXdj$XdtbyaQQnOxp>S3)>*h-GRQ2fCh1Jt>!>CkDoA`-R82axlT3_W zMs$iNo#281F^ARxEq8Dn=Fmav*E^)rrhhSv$#ZDH>Ps1=9ySR5=N&@R;_$gM;5w!< zA}uBee6&NL*lf7DqU}g|z6|IQm67S?gV-J3+|IW*c{1zurp*L_zb*78t=F&Vu%8ay zkGQ=#lHKzbHRjg$Z2>)_aEInoLh?7^l83W%U!VreVMGcx2q9OlwB|LEk7rwPC<)8( z0o$g6)d3%3eqH1{dbqo!vo+}Qb7yiq;2xGTq8Jav{bq-_;Y_-bS}i)%LPX`{bYYFf z0><2BWacnJaA8Z{U(psY+WIvSyNi8MSZ7P_C4)@aN6(8udQ*OVoR@|Img#~$>f?e) zxq6r<@<^l}R!IUr)(DoR&>=*Qu?vNWi#V8=fE|YA#7G7R`h8Kg@P5+ii?)Dyo^Xx6 z??^!k*@by;bjx`U_z+Xr{i25{1SXeRGe=*@vI4HN`{ieY(83%@ujXVVvsYVZ4$NnS z;KJ6J65x8fs~28pYn)36xrMz)`L?HTY z&iI@K!V2eqo?b5U+*ju$i$w!zvOBSvylRY^Pdhl>OMJbq|G|6}(47#iumIHadd27v zBEN+7J$gtdF-$IaM#>4QTeXS5jc+ zoo74QAW%k9fk0Y5rM&E(ixV(|6Qj_igT!4vq<7M6%p&WSd}y#ipd8y3`!E$~eOMaM zq(wS0#3-pXrVxV4jC9%9tD>PWBT+w(Osqkd~)6vn}d>Z#A9J zwM@*>&u&MvhZTb55j#bKpU>%I=Cm8Zv<7r{V}fGC2!myc-V!|fT4XXp$lR5>HsUQ` zcD<$4#rPmn&gB*rxgpZZumSzWs50k_5W2H6iPw0>GkfE=Rhe8?2$tJxOwUqRHl0pr zERFdo7N7y+n;@U&aY39@?8Xb%&S-&2tgG0I86nh3Noou;oNZPMaUv&u;wb(@{gvsg zD@nKBSTmfSmPLiA>@=5!wf3X-nfaSr|q*gX+clsQz8<`k#( zJoWcl?dG_7E5(_|1#xnExxjBEj;cG87O)Z+2gk*4OoLDEICP2Mix70cBi-GMLDm-TZ#zY(!CI$xB4RyVZyz8 zH-8fU!}OJC-9z2x5|+>@74F@Cz67(dv3Vor$Egce9~3rb~ywZR^rR(B&CL(f2|_HC~s|Mmt~i zvN-F})HaGLB7{y)&SS4-6T(bmZ8;^64ElEYkxv9Ojkn`Rix4_JtuZsroZ)0DYwN$} z(?O$W=7_!IyWFO>nIkU~lzB2Ad!F{5UeN(hH_UUjWj;R@wCVjlSys+okb9+=s=#wu zcefTc3G@`!2+_L{d+J|XW^oCjvoN#JYp*Y}a5CuIzTbPGFON`E$^*#bV_8@89xfWoSR@h6U6EMX=lEN)FgiVg|l+-E~4 zeF8lj&o5^_KLmV7#lbv&u<>`v@c5!u8J0K1lE2{%brT{5>8qQ@Moxn?#K-K1v+c9h z8K21xOG5^>$2mLb;46_T4Is~3mr~%tY{9RH3|m?>pu;p8Y>+5sL=2owXEA#)#lq|J^SnRY{O5c3EP)waF~M2(L(g^ z!bGoU7Zk9wb#i{abZ@5%J1-(mx62$Wole@N@BXGdBfb{tniJ>NSi%^Gw%FtesxaY=r@ig+h=sb7xgH47iMp_I6%md z#y?CvKiPbfoXz>SDV4}lJdoXGO6W&nCTsXxRZIgQ=pNW~o107LmZ$xSjKBn`Wg`s+ zY>!s6F$DzOJ!a!yR&(0YZ|&1;SFundg795NNHge5R)GIrg-oKQMAyIi4_I4r@I5{vj!81V6IaXe+sV`=GwrXi=P|!M7inPT7sH&9`5Og2?&8nj`%)6RwHZNCe z&icoSVQb=o+^MD1#%xItGq-A10wzeE>f+u@P_?@7dk36Al0R>@yt`L5kTfXl)QuZO zcb5`T<9xlkbUS{rjhl-KV%?DA5l`nfwjsA5LHX0a&97*bx>|1=`oHK)8rn}z>paQj z>g?L;?gpH^rGeDR9oawie>n`0^SOS6$(g;HO?_elR(di(w16ISO?*iCEPGS`7wHyv z$|PdKmQ}TY6+jJAs0B@&MZkcI(=|qs3Jo40LLB(YTv4Y82@Vlo zWZLzArJfLjGG~Tr6qI+zI;J9VUz!6$#gP(W{p4s4l2@MMS3{zhk|iqTf%&-5R%w<9kYR#}6E=3xLUz*KnRUtVa~`;n`_-{1PS zI)4TX_77e5<;r7xNGBfV<`}PWQ|{~k`2N++zsM%;|NZ}d^&dazEEe;t&798_{b9G! z)0JHQ-fmP<&@eFZ|Ja`_tSOS;mPS<=fc*PD*~)_BH>D9J1OVTngKE2%SL&8->xAKe z>|wdU0t3n4kJr~#RZ9o}{xC_-W~bK|Ny2>b`_jGu3V`29w$H?1vq9VPo;zP<2jp$M zFGJDB0?QpdHSQjE2FK&%u=$i35|C#AVG@~e;Ce6FKBq|l>X~$&wmL`S?x4@80`fKh z6qSPprgt^du+wZe_j(;h6c9~bA`Ry9oD93;+ITb=c;24S(c3o-aaV!p@bmQWKX!+j zdR;orMgqmBlg+kqbko{Tn!VoOBpDBml3wRYr+-GltmcFlr=_+|NiT`VPB)?zA1IfOvOp8!$MRZv5R*Cut214?F$wh`BO~j>CcO z-ehyLoX%GbDnLPY)a#5p{7jRef|DTsyq#>GqXd1hV0{4A{qAry&fyJcwo@1nuMM2T z?9VARFlWGE{tz~Au20hw_8RTZlm2n9#|k%Ko&;taNNKfEPB;Dz2B^@UH=a4_9`RHc zFsdpcLBfOo1CJL*<2E%S%n1QQ@Dd7A0%&+k>{zGM{^{J8qhXhOKcI=!Z%d!+e<>_* zyq*31`0=rom;#y-{klb>z`*jZeyrVTbq@DBL*~VRJfQ(NkA`!Z_B(sS*UwBdhj_8oHqIu-hT?l_=<=S}_GACG(7mVe#d1nZYA5&`97 z=<|A9g@K^JkkyyN=CF0Z3O>HRC@gTip-nxsiaekd*Y9#S2_)cWQFS=z*B4bO7+A9U z*dIKpvp#A#FlF&OXpIMU#gC6)pn)f|Xw)1Z4{guIXBZ6!ruTFyj;NdOIxk>?OC#_& z$ne0GMZ@U0#%M^vz>@iHd~iG*)#p162c|3<#>X9pC_Wm12A-^pPCD(r%M@Qm86LPY z@10Fa)fnRcgT#K?OuWaXzGORRL-~z~pZ_O#i;}a0@-!b$bkN3a+E%Q%E2hDGS z!UD@3o5l83NSZ7lGCk&US$?a^mG8Yr59{+DVdZ%5(ZgE3r{MCr>hvCQ8Qy!FN5$`% z^FoFnxe@Vu?Yp1QB>nVyy%wKRpI>jUX$`bswkqJ{Q4d~PeRuG{!(Vt1>j0~@(x1*_`4bSVYlBsY;uB- zNdT7sNFaGDBk2#Uxss6eQkOx(0RAq6?;js_hTRtPQ^@p{mjqy-GThZ4jGZ~;IClZb zLoyl?WhM{m&jmK91!4=IO4 zVtH8x%^_b!slXz!z{31B+N;f90?N-Z+GFmjP$naS%HgQb4hkVJ$GF4$_7&_9P~dpi zj4fKr>F|Y&kQ$#8TnY?4?-@L;Z}*(|3Yp~b69ElOrbX@Ma5y+&K)^R^&ry$hqQ|_6i_bbh1Cv=Q zM?H%szLk?u;4n*NSZ57Q!N6nMGORDcBosKzk{^9tQ^^yM7ynUR_>cVfzpD%XcYgdo z)P?^Cjc=Cmh`RiYAwFIu6v}{e)YgNgPO`rTOFz_SM@|oxde3$B#3hv1SM`l3h{N9# zABkarIT2N%%mtL+j{3@j^lA>XWgk(Gh&o@7nJpnR)Bd(Y!};tP*Ov<=6gbShPP<_0 z>+7dr;4%GnTyKv^!+E*Tg)!qTzKo6m2QITG{-nm9xWWR9_8v{VjavuJ;m8_gMp|UT zdAP9cn{?(obO&6UA{>n-%bl0EVrpOp!jUGh|<6bTHvtxxs_JwEJJUGT^|K`KsH0(&fP$>nnu>2Hm?zX#alCn&XXZ%>V_CEOL9DeI8Y@kt>0KpOrUl z+-FT#YkQKH426gdl`v0RoReb_*mm-#A|1z2Fo zVs_Yle84SNGW24TL6jVplzbUmt0Xy2afe(~~% z990`=V9NYOr9SSqtb7&gFAZk%P(wSW-&{}qeW5_bDq*h1mh}l%+v1~PXEdtSVjzO?fo1Wq)9W;C%7D{F3T)Mo;IzF=JyH5H=@z_f0fQf{uk0i7 zE<{}Gn*#mkTi^S;?}`5d5vry9ojR{gYjHBJTAFBJLPEoD$2@b!B^m?F&(r#@$yW`k z@JKN5aLxfTMnd{;j9tH=lA7?Saizj3s zi8mCoNv0pA*qtFC=!NXEaiIkYR3oi@+o7*z>zMjZfxP&SnD67#ro?xrzQv#S_)g7u zd;)@g)O3kYsd#kMZ1HG~tLYpMZ0PjMUpssrF|N}OBru?c%fHiy=zNMLu7+n=V8LKd z{z4zLvvQ9c>}e=)n33D6D{=|Qi(gmdwz9}Y>njXvHT$g&?|sL$iUt_$FiX7Ev=*gJTxJaqW|d1}3wfv<64zzXo-a zyP_c|aIiR|8gDhW72-^Rfrr^*hgp1`ZwV-Hn03C*H&VuDdjj&}^ZHl;zo+p{AGHT3 zyn7n&BMAi?%r>NB%|ynxAp*(EVAYKZ41@#*GiOoP+S)4l)HfParEuQ>39wa1rF0&{Uf{F<6Ccq z1s2m=gClFIFWwRf1r9TY#o=6oK5xV0V;E>)GJSSbqt6r;STG+Z1_?B&|D;Q?%%UuA zK8(SEi&;e93h`B}_$Z(Qng|OlW)#qT<$zfe9|aN$9OfL*u(RJ8c4)NDh~npfGCZ)E zF-O1BVh;ZpGCt;j=4U#hl?HBA6()rSCNmbuAZxEud@Lv|u$UuV`i0KrV}%qy(oMm@ z!%K+PyN5istN2Z!fyuInz8|d5A^`>-RzA*lg9_y%vA|;1)lsvy_Dw>0Irgk6)cAZb z5>VhU%YWpVx{EJ=pn=KE*CTQ8qdgTBpRY9>xXc)!AFau#_!v-FVBx-Vr=zO)j?YJ# zy~2?-Srp$Z6iBdzGw{Jo6^3jiVAlT;EwWoXn&LBB3Ia5GRIq~0h%gps%Ax`bo3r37_M}A>7IW5u z)kJIBqC!nH<}H{V&cs3mJJ`$u%l8=OR^O;D`sX9Sd86#m9&T2!NMd?g(&w$k*XP{Og z4%kSI#lf)S4rwa%mjLH28Fx@qp=9z$H6wQ~a1|cbJ7Q)KFJTAUP zunw+lub^$$qnb;rZR{SixxT5L>zh0u)?T;TM%}XPvd*cjp}g2pm1afk@NXQeM?3-g zqp;KeQ_ZC%5OcT&d~UkB2RnqA!!_btvTEQW#2l_M-&9%y7a`_x@w=?*;L6s?dEVXU z^GVgCkN{zo#Z-5@wV$@^0s5JGb(a$Xf{EwAzO_fYdh`iI zaPgAr^GWRL{v$vzSyml$sv4{!L~wDdtj}etTSb6=rV&3jsyY(^<}mRAU=2(I&BRM; zG~nyc)k{hs=2*o?X*F1tjn*uy#&zfP5h21Vi|e@VwrWI(Ib7e>Jw_N2qMys2>Zl$W z=8Olg!`42P>XAW!u!=K1;T@*xOaus~57IHc8v4;W(cATEA@0oBunu9s^|%bk9U3!e zu;WAFrFt3Te?}c%h9;?v2u7^Sq%#eSDQ;Z`NMN`lF1?*DCL3{L@V6(4xU7-U1l*}? zLP)F3KLFE9c-S3{?DL+g5&{#1?~t0=c78b%N2Pyfe_0bSTch8HZ5++R)9u&ElcIs= z4Xx*R%*P7>5uxAZwg@EPzjtjFu5oY6oCr`ns>xQOY#5c zM(*`weZ!(IV1AL2Fd$IerAtcYmy<+Ym0Ozg?K=CEK_)} zOQ$MDcF^qYCysHkS;NLGBBe8@co)A0Qi%ytD`cdlR)AIu86bjCCoAO!iz~KzYcSB< zJ)6^IVK-ZO_jyBHQ?xqe*QbS05r&Et9~h_}Fsk$Udb3Ry^W}`?laT22vKe?Fydwy^ zbXm*#db*`Gy~bpH!N>wuhy{c;&Bg+ew9NW(J-b>nva*)>@IZLqW7&(zg7Jmqlmg=f z9Oyo@=}sq`+3HF}3!@C_2<1^4kUMCd`x&d#vKty5Yp0Xxvspq{7_Mrw)_{byAKOk= z&#cbRH#6SBeZ2efquj7%prCdvrfz5AA+F+R0}`~K+7{0@$zQH7uaYfQRLkaW1)D8c z(0^pp=W&O$C3#_OV&)QyESM~>FHdJYWmF+HF+uF44Nnbwb;TO)fSY^8o4VVVLNM58 zlZ~Cr%EG1)fPG7H(j@rmlF}saSOuJx#uO7YU;zJyhNliOb4S4DITu`j09yK)C}*#x z3^>9e0s^ojsX@J z07g_SR&-xFLym|F1p;UkpVKTxXl8BU4@Kdwt}Z9s6#;jsv#3xAP%C42b>)aH8^b9C zVBbGmO}Denwn5)19yN#E5uIJU-)mZ%KSJ_)ildTJ9w=x(0d1Qma+7AOMYqR_Q&aoj zitV(loO=NsYah2C83I1_2^bHLJIVfFnDB$?0v7gw#;i9L7|@XL4ql=IF1tq~>xBD| zM#g8h1_RBzpxJMBd&z!t#8*l~I=DWb3=Kq|fvEeKPI&Jm`VL{b8+c6ItW^7vrJ9Eg z5g$W@I%J-{CQszyqV5Th0jD|xi zwY%jvqydB3su)wiJi30}bP5o3pF>$HMywSl>h5e2gU3UjE&^_P2B6PW4?2X{Za%Kt zZUqRsHz0HLZI^Gb30bD}#g7C6{Lg2Xllg+i541kH++I$WlZ)B9v7Wq4Xtj2dq<>&_ zcCx$9dO@Y1y}vkgQ1`BS{A#tBPj4Cr<1zO@z&sBFFcg@OezwtJ?Q9YfZ1xr& z<>QHf-VB3qDN|4|{&==tFISDu!@VwFqzgFdS-q+#3=}}WkwS|u5?^@^7;?GT3I^cs z0KDC%<9X}@vI4eTcnCBUNbVRUbTfJLiQN?l=z;ioG#aRWq^X{;7z-FG_!yq(QOJ7$ z-tP}a$48=RX9NMAH4lLS1`Bj?KWVZT7G_>zE>GtUsM~~7DAP_)1{hfCxqO?mCKpWaSPp#b+vDzgN2n_9fgL|y@ zY*#x1k__7CpW;RZq=JF&x6^>6zaBPQ2YhpMz`im!A~g~y-ZUsiJUIt^?&&8W9Kai% zAF_-P>-p?^J45;Kh;Pw}RW5L#+=TyAP4I-{fgf2{A;qc}IDpq-xli*4%<*wyDPaJv z3-x%!lVn_>3KT#i;??<6)=eEz5wDRz0oSw+y4FpJQLa%iF8I*ej}!?mU;qxkizBmG znMV0tq5v8VIPDwkH}|Odwp<_8fSX`GB09N``cyn?MiT)HMCiK-5$-t_QGK@z3M5Dp zZR#)d_=n(8wK&BAJZgjd^T7JjJgPQmBv7E>+Z{TXf%>My4*!ZXsys|E5M{2StKoQC z5a}w319)_8+XG%TqPn&M1i)JNVB8+?R2rvS;Q$`lsQss73q2}fC>R@@&iS%tHKV{4 zj19iuJhmFJC~yS>aHP8ZT1Jc#1<>&L{`k8i-jj{fEnxtT8hbDpQMg!FAw<H?s0gR2e83fWMn|X}f*8FO_aM zvu;Qa*fZ#MYYi;WX!rETJe|e4N1y;&yQlxex{fo>JrV}sKZJYua3Ww)&*PTt^Gf8& zE}e|o=UaKB@??qw)!HSac9*+5&LtAY1@AX`s7Hbe7=R-j>A1Si)1xk(?8T~UR5%(~ zpg~%opN5@3(wUkTPgGhk!9Zl#LuYLd>|01X}L+`D`l5aF6}{QLK9e4)h!FqgD-Bl;jH>!0WK=*D^fqNf>}*BD+T;mE-*_DU2$BfTAV+TG(rr;iww-V7|zpd=3WyVhwyQB975almP_ z2p^TkflC;Gqlz7l9y^E8N99fcfdGBzLmF3f53B-?>O*TJP@u7-cDgej40;1=vL>pr zG{HcG`rLPyb)wQmiUWAKs^96fokfKxS7{_rpt$=TcR&+W+yDYWX2aN>r-`&7MFIut zG*SCTOi^{(zyb~GbibZDtzaDRL9@?$?ooBRFJS<#!*tLbTceq{FjY7%{N6F0r(_=W z8woFQ0I&T%Xjw5p|Xxv<`^1;)S+F#Kzjz>vu0Hz9V1`>o;k*8ej^>j+FzY7>8NM@pvlT$WUb3ax=FwQ96f*9XTqm}qI&)k1<;0Ws|}3R z?U~Xe#_xCw7z<7?P>!`OvEipR?v}rU$er2Cpg@wPweemZYhA=3Z~&hL=eX58YVKL1 zqR8OXSfJ6}*}>SEr;O{)ra&Mt++@#GMrQx9zyW-gCdQq^qj4>1B1Hm)VSzmz8f$?$ zA9^pHf2Q)MqgCjJj-gZ70bkmCBi6)&HAaDt>?PFL0+&D_Fx*93-&mUy>n?!<_$(`p ztl_IL0-dg(cKM(sE?o;0KqKi5jwq7ErbFiXs0IEE3M8m* zB24MzloQ4g)hcTwP-r_&`kkRzpJyC#c4#P&pd5}mb*$w{6hLDx<;d8sX^!xs=2A>B z5NR8_*1By}EFB3HK%*W|zo^yg@-B5$Jpd30w3CS7*fSXv=OhCRM3{sXOP_S+-eGfW zEe}Uc!ZI{a88$tx(6pRf%Z1%0IwWGil48Y--Vdt=Qz=v>A zj!AJm@PjemTM`Q|Z~%|Sh*;^*R)ZSV7-=L>AQ93`taAZuR3Zcr2y_YTf7`W!C(cC* z2k>YkDDL?vE2@oodgkwJk3u{1h3cIWk@ zVo4)`0-06xmd7<_Rtpbw$VwyGvYS1SsKlXQ0FJmC+22+~#g#+>wAMX5tYeaPBw-xz zanl-5$2mp90369;G#)xWk4hE*0s*`}?pjwwM|oYM02=Wx{@5NI^O>-y_}56FK*FGz zHoD=McI8+pDJo%@U?4(H9X}oKSv&Hha%zfW!ymVL9qX>9DEJh|f$uwg)i`*C19(&~ z+G%cO(x@7sU;vIutCPWTue~R>DzL#@)TEVx1sc?Yr}i3AR6UR=fQEaX*3*|$FaS?0 z8O_zK*3MajF_kPs0>$6YUd^}6=>Z3R&_~^LbkuU29uXuV0Qlzlbh%wLL|M`a4GcLT z9M#M6YgLZpgYWYT6r$k?#|J;+`+}q43C9P2TzY$w-#LT>_y_0n#f%PXYP36YJ9wf_ zv)~<|fYTuWqsk!%6Qu8+Z?EXE^TuScNMw9%SfK}G=@dY*Ibh(qdod-u_KqLZ;oLoO z>A5rQ8IUdrL(+J$!1Sj6l@d13NCBTiI1~~D*zag;aWQGLd>7t<2M!qC${5DYF)#ao zeCOgz6rkVN=*RuMatN3raacGS*xsP$=v=17>16txhgHCKYl9=h0P>IM*Ne&eluo5! z;Tmv=l7R~Zpngn;fIU-{;bOI(Z=YRmlF17?2V-)&;5-4R!vISLEdDWBcz{9wiRY<{ z>&co@^=x*=>d2w-{q1~LSEhIdXEljpOCr{Z#oq}_c?qv6Ea>=tlD58#-DJZy;2 zg(+^L+9AMKLu27hNbEm`;!F^5$|&mQq2t=Qo|d_fJ5atjz@q2 z4e~qgOTS?aOGtn*D?Pm8PruQ0(Ykk>^E?66chb zfb)$^l+_e? zblf~0!n?j{?0q+;Ee`EYGCJPh?>@CoD0;HHj%A?I?(CmM9FX*D-{WcsQY`F$)gmm9 z3G#m7lSh{pb^4>O=x_L3c2bKn4+%tl=@Uge<+_J-RAM_R_S^riMO_gaWd77Ab2K;} zwsK-^T#GcD0dhXdIROa{NQyfj7Swm~0#UaHbUO>3X~|dq0uJ8>hE19Q`sn;NR-nrO zLH7xik#*g%+NqUeW=P4V?zGMHAVa{rhJZee!peV91^}BhMFWvpj{VLFP5(7}eD0xw zV>3V>ov!b!FHnIl0|ecB@B)=1-3iwmTIUxBTyy{g+mC<))qOmusA%+ZG8kHy!UY^p z2^0^VhRi5edd84G4B77t-N9<#@Q)M<6z}2ho7MT&LlaP3KwvZm9H_oe2Z+w7d&FWdV4BUELI(<9-;zg(&l=6W zcJn*yxafe1|MYDs-a_&-JY@Q-Fg(=#c5cI?+87??Fnm)R!#6n$e56ywOWEj#d+E2e z+3?#O8-7!U;SZYOUE~g$38%G)uC*o>ut4d{9vK*Xg}U83Xbuzm zaErLQt)ajHZ;45fk@baMoVS1k25rT#-};U=6tMz{v;t7zcq4VF+qVf=WcL(?!ttT= z>=%!o7|zdDe?Z&w4W^I?s6V=vhz3MCaKq9zDx-COXe_@#t9(Mx!VD zhhrAH|h1p86zEfc#E|oU|SF0b4Ho_$d}x z-eWATmjZ^LxjYIDOr||9PrN;x<;_%0ua($)JOXxhdQ3@yUCGYk{xhBlXkaqRhh}j* z!!ADwEV_IE1|DPQ&L{(#Q<JU$rEes}(1bzD{k5*SblZVx7|6nO6it(W|3(mXukU-ZVcUIrMf zfSiu*o-2wv*g{}HUuGuq=AUix9 z3dtd$v)`>n*;oRF1Of^uC8FEk=idki)jN*?5(w~A(&`a$)_^r{5j3gbAxNP>L0wh# z&`ERHr;8C;DFoGQ4+pS7LVZ>B)MB#P4rd$MvBG!)R+fOkBFcaR)dM`Zp3FD1&a3I{ z%DwMAU|$_z7@v&^(zh=s>&>&tqVZz3-q7vp%(wt2;&n-ee*g<4|Lt{7mzS$$BLBe{0yb7=D5}W(pdfvaJw98~<~~Z<8@eO%im?W4 zI?G@zR*nkVce3Z_%lX#YBOg$iv-d5&6b?jpvj?9qS1*_13!4oyE?`YR!?4Hmtj|Z-A-PH* zC?XdNJa1(@w3~?UObX~~$+s;Ii39w1GW_$*OYK+^SsofIhsUv|0#A`W;#gl+T`TZNEZAej*Z#0mOMFQj;6KRXOZ+_rl;D z4uu2`Bf{t+q+>c>xoeetWP}-L;JTlc%xJJbPUvJPI#-zIn}Cz9e8t1?z;`d>quU_7 z*&w8Y>gnW|a9}es+zA~lR9AbavA~1&?kIUgw^{Sxj_FSU2lyzZBU*Q(uixpD13KE! z+C(2yN;V$&-b_o0e(zh2LcsYLPB5e}Ku4*lKYw>f(}^q{#PmW;Ebt&79MNiGzeS&= zGnSaTnjwKBv!&hXe|JLjalG!t*^*&_2W{vP9Y4`&9lOT_#I&Id3{0q@N6A5RH0sce zEeG}xA*O~}aA12wN7^5)dK0k7?+G-40_?2(sR^eG@p#F^l|PWcftKwk5p(kNl@jkz z$Fyt)6j-t->r+|KnKf3s6BlI}7I-pijs{1^&H{X#H5v*mS-BhyyHD&@{>_PW%FQWl`?Wt2Wy8VH&6v0IxX8gMwEV1D1jEY9TTTUbKo4T@+LA~@gHoFiKO zu?BSkQ{A45lmdYvYvJe!KAb>96P^8EZ&J z$+gr31@A{0FMY^JP4ZsvyF?rTNgu>A=7295{RQj7g8N;Id&oPtA-xW-t&)+z!1Ip5 zo zHqE6=@p9PcMs2F&tRh!pOYy)4U#5APs6?a6=;C~70fO)I)R#|ai!D<9(eWPL{X-wP zj_F=qp0fr~nWF$4I_|Ab|02GfPiVz!JAIZ+*0gk)FuMyDF4wd3*_sw7XJ4L8wv$Ub zP-dalr2MELeMkSiS**4;UxA-@^8qlU+B90dwwM{9Z}X3>E^|PSc9k9zN&m}n!0=}J zi&!+W-~-Ovv*1$@8@uzA<{S8kvpjYRVq=SwxGQ6)Ai#br^~q>FaPEN(81Gw70g8=I z9q}5_fx^*gOLQVSqI|}xto95A=s%X8k$>mV0SA{dx13wIzeA!%GR;K&wNQEdY*(;k(fj z8l_cdNO8cB`DlDFw66q;@lgr`{457O;o@U*5J3P})UM7xwY5E(BJJ=UE#+#Li2`)t z74dgksBq8PF6R{n1AGxV;s^g!c)8f;IAD+#JWX27{)%a{Ukk1lS@P>CfGPja)7oH3V=|Z_sM{V8mTr z+8ZebkW+8;2i^XWb$38%ZvX_?S~V^E@yZ#YT4DfM*3PF?ea8EPV=FI~tepl5(6w%- z)rio|T8tm4_!#hgUjaLA={+N&>3wKTBW^(L8*kuBN1TEHZt8=<$e9!^?Sm8p$Z6Th zyPoKaN!H?&E<254p^J5Vn&IMu-qPqA#X=X?OztMyw+s?zp z1Oi7IFSPZ{+MrcBUK9jye@N8(?qprSo@zsL3INRSOH8Y>e7$@2fFT-nMQI$<;cG1D z%4(DV(D);%aqP@e2JHN1G8F=7@-oOAN2OSYQ%%h+nJs{!A1bU2Mb~_xRNr<-8=&fdX_<%J_To z^=}_@{BottadH?AYhoZAFo@n|#%-BUu6M~`{P>muvG|65k;ygj!{7YYVkno%Eg-KA z59{%ffbrv77DW2!q2VJIr;o%h=6=-3IF&fCfR(~;zJB;Er-&>C1@xb-@BQ8P#Q)`y zS@y(}<+<#)-&poUx=iB03RdxcZ`lx8=mG}#tk4geBi<2?v_Rs3fff4bpu5i-`^a)o zK;RIaC_0~)CTy*-N4ZXvh5)YUOr+=jvdU1dGXVskDz$svzJ16>S+ywyaK#XTjtcfn zkdzxDWEenJesJd%%KAYe09E;cuAsNKa+mc(3ISZvS)dh5i94{)F)7!anwrVsdFfvo!m3 zFp_oSe7VUb0|eM2&u4$8J>Oh;xjb(HfkV}7F|Bn#2M6(nq-@R3P=F5ac&32MdnW|} zwyK3k%`v|@uWT)p0KimH;u+bMjce=kloXdfFtk!pXsi*rDFkpuZ;l9Qul+dbb)Q%(@8x=P z90v?4=Z(HQq@h0VE0)c9zyPv}4yPc?Mu!9drpgy$UT;9#=y*aZn=djHpew~=+Of|% zhh-H@0AMQrj%hlR_6IQ7vi=1IkX20?59vBVhFiAZq7Zv44lYQ~Ay!fEn`M4|KBRN9BQh*N)Z1*^u_-=xhB3MxbY=rfb z0SsJXV$RS)Kii*u25ffBr4m>OqnN*U-yRtz9bmqNgEH0cXZjQC)&qH4_V{~Y+7}S z&49||8PJ44O*|3`JTf~CyEHs(4o|xMWRI_im&{Ha2plpVjGrhE9(S2BCF8-t0+Wn$ z<5yb4Ytd<=jH_gvd(glp^Pus&XB$e%Jm`XfOSGo+QP&_jdOYM?*2=Y}83vF=4^jQq zw4vKOWx{zXcc{cBibQO-*oZOO}XBzhTypU!Aa8^ z>XpS!A%H7=OZ^Ig%fAvU85J6XBhv@{Lwl;BEHW^FEc%*s!{K9V<6pVHW(ojIvH5}i zWI>jV1alLi=wnL6eZDoWTptq%(5Y;9qM)qp5&)QDq%<7U-tBg$b42r~TyMFN62}39 z7<SR+tw7Q_Gnw)T3T zzJKU-tk2vdysmM;puOH7^af2{su5mKQGhNooivM*2lGt1jHDreD}8>l?_0qr>GKQ( z*fLV+&+d$M$w<){Hu6E2S{de!^2iDU$nb|J_m}sFmHlNIk}b|mL&-7(1T>4yF~g+N z<{0@p@I)k!=)3{C8MHaJ8rE`=Y@z^Ncv$^?ziXXpTF%1;h>P8ATay?u*b)TTnO6p5 zngeE07vmL$0(8+6RtAX!66heCe&QUXR<0-PLj#+L#PoM=NV!PV5Wsy`KRK+NT}K&+g^d$V%&C%+b$_3F*XqC(V9UBM{@m`4 zzU}g!d&#<`L}O(qihu)R2nn;-86QUktH>KC{%>8&)olX=*rN8Gc)mm}SNnj# zQ0W7Urgi3dNz@dW>-=GU4s+(6Gn0s2P_eYIGuUM8EHOUeY#xlI8lzxf<^Zb5=qG>V&> zO-@xQ*C=uvFg&=LPoFPljr6c4Iwfo{rW4HhBz}NZDU6K6JV=}KfKEi95BcikbRfZb z=V~$EY^laH=t|nevyna^8a0Hn(gO&#cl4uz?dc(RXTWrze&3}MXyAGCYPFfaLi@{V zS3q#6mlXrU0sPS1?y%zS#Hy$Bq225de-1mbdtIHP=0u~}oH2J=X=$=_w4v}9o_Cw-o561So zc|eEL5Sao%<=@j!+~#r~>}IhekRFR|V6CRLYbao7ZYVTBOqD$5%c;yFT=bKzn^-*LWANr*R!j&X!IsS`VZ#dfUX{1 zPB}~@5WKghTl=op(^+HK>mGK;ba)_R3D^;+5mFil4_tTklPQ;T(MrJFrN;2GvCE|H z=x4!q#A807%b+3rbOe}dowJ%%**b{`zI$3)YTdq=He!Vr(CyP8Ui%az7$4||Q^s%U zTZv=qM7w}Pj5Umx6QH@Qhn+*`8;Z)T00ry&T4ZV~9VRNRWezSl$ujHwr1imTtVRW| zQ%5MZ@Jxe5}Du2+w&lj5p- zRUm@TvCwsDWeXJ~7@b@C}8{b+&TUq?iSq&RSayoDwsabF}9q z*~*+LCOALTbt%m}bY7tN#@#+<<&Pl)ucF*z;DXzUTlda}%5lrDZ*Xen=%mSaZC9?D z5)l?Ud`~Fzv(!_WPa=Yk*OY{Af$sLZ)(5`TA}GTIr(vT!A1c|S9Zz-HXdr^mXe-sP zt%Gi_J+wZgV-mr-GY z^1)_)v80QZF|m?N(2%Z&>N)YRqPLT&iIS#qnT(vren_`O7ToU0~7TIx3fm4FOFnRj_IiFWMto& z8`PgBkhC}Lg9972f%LPwa?P6I4(bgu77YV*$}04LG-A(QyA4?Pmv3iAWH=st$4Qa+ z5(oHiZdSDFwQV%%^Ti(TD~Ggz>SbjB1M=Y0wse-TqVWX~@ZZVwx9P|vt3Mu+NxUYc zSRR&x@95}!-U>#uq*!2iE3<{xuz4#Ol1;ppNF*@4%^7~n$|EGZ=TiJumxy77bIMe- z6%q+n7-fD$7tvatiY|>53oP$uzWNhgL^K@pFXaMGxkv%5+5s@|7&UO%=1aEGHADab z-zX1pRV*v==<<+AU@*$#xIa3wu6Kzpj}!|mM(jQr*(a|>$F70`2g-b}-E6n%BOvP( z#JDmyz`%1S4UP0CxhaMfOi26Z)9%sRRSX|fSuKHrm`)#s_oCjr5SdPi~+_e`L;8j)dv1toUS>dMc$#nH^H z>cy29g98`xulP}gKVyo^zXlk15EN0Kxb3G!p-R-rlsk(IdO_ zEL+M=x$oLlDwV6sZWqdyRPxd@-2;+fCQ95yfSD=TZZrshBr35LmdvEinQ!2i(_f|E z&o`SJ%RipD5%GZcc>s>jaVZHPe*YUc_WikTZs=+P)x6LpT`je%uysJsywU;`-_g{# zcu_b}=q?a|Jzs|Q(7Dh(y2qQYt7sfi3m#mkBY0wVnJqCKc6^azhfWlFYM7<|?rI*f zRyZ_l`04^1qH}s?*&ehja@L?Fr_NDA)SLOsGC}9x$rO zMPJE^T3k~?)FJaUclP%WHmEbtQhYT{hlHjp_13!w^rBTT>szwab0G9WztW|Vl$eKn zC1JHVIwUk*ZEa2ZsdmV(S}0jt`#5Ml$?^@YQtGoRs?WrdP_PFhSyd`t~ zjK0%)vD;Dufm*ZCqL+WvYgyHu)@E=aTDf}k0s+|bz}jx54{N~yPBLc}7aE@irO#re z7EMGn>WyZYhrcgXPkN$082T8c9&D>eDp?Yj8>Lzh_~^^f$7`F%$yf=MwapxmN-%Ta z`D#5QdXn%*^ynouHh0xo`>h6F2q@P}@?h{5Mvjf=N3@fKS6k&qjvzq+sct_Hu9h#? zgUwh_VetqwR)`0Ypzx6`oejFI^n1FJke*U|QER=Z?(or@U~hAxGE6|Bi&{bb1kD{? zhpi6sg>MyFzI>6TWKPUr&_S!Fs{7;l=W1n`+Ztm~We(Kg{a3H8$zcVC4(bWmMv(`MH^jO47)(II5Iw+-Q?OCfo zdBf+b%9S98g2u0Ae;Lr4z|Pmqm=OIEqKzMRXr;Tg zwLy-ihuG=*;_Vu3E(~scI}mi>Q}X$A81hA~AwM))TU)&K-dmR$mMt?PIH12)BfR7K zU*&niZcEtyzQ!+RK3tPGd_Fw#`-_ZeHoj>!_rI_0(YZiA`TFl`Hj67s4OEvk(<5~> z6r~O$uk_b!V4ws8FG|iI4jO!O!&ARUj^n~soxNf-I&MZL!7 zZPx4`&4)36m**ebB30G8SF0Jl*#6_1e3X!pnx;-vs!N4;t9(j!&8GP>Fzt7FUfZJ= zKfgcF*B!^N&b(Zc&ms|+m7Cek9n9*WbF?vPU70 z|IkZZG?oDsNA|)B9q;wn% zG7lg_m)o_6v-$aekBB7mF)1Mr2Prp5Fp{k|z3HqU+?!Z-kPsjt`3Yjjzi;(NCu8PM z!O2~q*w`q=h4>?cn4hVuMP}`j-u#@YN+vi`&SgNz-GyAruaXgaN(n58xH#D_Vo#Qh z69Yo-x3k%xLiZHWJDOXy#^z!DK#y+eBH^vZ^Xm81f>-N1N5O60l16~ACLM)*81(D3 zLG?ZA=q5d}SgMaU_U*q+>!kW{>XXRxb>xNv3$FK+;Muu_O_qx0LAf zYJ=wg4)`caa19ts8V8BcwaqPlg1ih`LxBDQR`1a{T)O@Fc}-2y@9*x?gp!)iVRe_J z#`GPgB9h020XLlif!72#e??x~BSr*1Xz+~*Wx$FNfg5}L2Dvg|#Q<2BZsoH^W9JQD z7A#u2GfEQv4NKOt@NZ(vn>&p+{OnX2xS_!EyT~E>;}*wDj!}eJ5}X_X?)mZp{<$n$ zH5g^?{qh2t{~szBsb?}N=d`FCM-w@czJTwhkOfzLm=IDoU+`@zlK#LFH3Nj?$0^CZ zquq^Q5=PRETqbIfko~~OMz1vrZtheeT|2waA8ge1Eq%6GKcF4EbSmsnRlDkBQjPXA z1$Rspt#6lc5w8a}UUn+;d&-imGLS4(1o87xkola;?AB?5y0)?ZO0_Mtyv-yf`=Zm5 z5f<{FT6r^)YaQ*?UeVD8HDa#?H!?_;^#k!VG?cazRW^m~21XX|64GfXq#xT@tN9*s zv)ZH@&ge=8t3h-F8pNJvVw7`h&-R=3s_Ln;C`!itu^i_?P`3k=#mSzyfh<~!`kWkr z)vD=CAgiYDWiD&hqq9$vtyrzB!6U+yg@?{ntk4SuFlM|M3GGE1j)`}aM}|trMmf%m}F`vE#`2L z(|wKuY#r4lk~^?ypCe>JNViz*ORiJ2#R^c6(S_4}7dDGU3nv3XLRXpoH?$q99_|1w zT4knq`GTf7Vi|BHLCb?6Pph~FDxFrm64Is0kNBH^48{dTOH~9zj8am(Hd;|CtB_3g zSWM|Y`Ci53j8^q1xHGPBY9)Ax8xyo0m9+`_JP7J;8FhH;+dry~_5Mq>Q~cGBEj1a{ zV41RL-zXOfX+4avzuKhB$LvhU^J<;<=fD!f?Ed_%#E7zsSww#o&U22E#PhP zfkn~QE`ftw6jve6)eW^@0L?=6yy zUYAQd>{4}_9XR~)fQGQFD6g!ZVWFP%`Ewe;2RDhX>~qV6?yplmR|_G}Xl46HI^`Md z-<9mOTk86V4qK8wpf^5tgGG^*ePEf;{cXwzd;3iq&yyqQPEcCRsJ#mEfaH|aQa7Xo zV9}Rpi)iP=;n7C?RJ7!r=LNR-XjqY~0r$7JqxV8qt^oms@~5fzQ%>C4-`n98fu!DF z8g)m7cGCCsfTrGXdqCF=@aAr1-*Ysq_#)+jhA~35NvuASoK#ur1Ro3wlBKcnBkjQ9 z`}tQcjg|@BWGg_T>S_0Nw*na!>d8Eh%ToQP?N-k7fI``%xH`#W^IDS*x>pYlsOF(z z$sS)$E1u#@z)LOI-KV#7TXDW$*#aL73yk*zQyV|-M)5E1{TwKi@96SIubC^42Z#A3 zGkCmsWgPJDIlk#Z@(zV$+ACH7Dbi3|2zO{6npF~|G#n|?pe}fvETuFY2^#m|tNQNl zQM{>DGLVX#m7$>GQe=;Ec$C3P#l(@I@c=QQRRKLx3OW&z*}5ny9t%1yE_C5x?66XC zaimyduX@mUzR#P%avC5(!=-%V=z!|`u-{!OQ^5Y&|;X{-8te})raVV(VHfc{c zmqbr>NN!OKk{y_cPREdf4I`!K1_Sy{*iIuf<{Qb@m&kGjiOA1_TL(&!6(l0p_xQqi zDYAlqd<)*#4Ig@w?6Zj6p($XyT(Y~KbTpWV9#?Rsa*4r!?)(zH3scH3ngX`Vfpn?M z>N!wBK(C+39)jPD+<_|A$ z*qRcv!v?t=JJllB8!wvtw%u}UMTzWwxt6k{DKUF3W#^?|c3e#uKMz%^4(BgIxtj3h zT1uv-L|%Ed7LRL6%wCJfU-=$)K6$kkpJ)o~HnU4dYnolkIN+Ok2KwAv&GRQKi_bG~ z7Ie(`oW4`@LNBWHcsQ%pi;tWc3M$T9iS@7Ib8#dQta-UuWRpU^vr5GxLq)OJ+uu40 zu1YNx3(EoD%=u94+^mxyiQ@AyJ_#BwCH4=h^a3zT>{4;C9PnKn+-%dzad0GP+|{FZ ziXC0sLfb!i=S;H0j1S;F5ELHG=F|S@w9=k+`u*0RH=omiOXe%d{vpG#n*7CeOFo#_>}L=PkQeX z5~A8Nk~nj$P-WbiuT3Rmg(?%WXx=^!jun@SOU8lH_c+J- zG$>K+td-uL(Va`PNxQ?dwq)a9EabtU^PAb?crqP#db3%jy0K5U51MTOv^%c8uQxwz z?$9;UtX#bk9O=)fCIe=FFH=cbwNX=>^)B10Wh$`h*PgHF{>&=vgwjtJR$o?sq}%@Y zcUynj-(a4STz-&wCiGOk#uAI{raN;qxE0OSuEnB+1}yq4_R(JLrP@Q%*bmn0B}bJn zbdC>)4PT{gp#7ek>hAPshx@^sgOYnQM3!&~*z-xkp8XcRZML<~FVB(eqPW-&hfe8l z)tXh>f4Zf1zbbFA?7EtMgogeDFaER&vUe0*_bF+o^P>$S)IRsrp4Xqz69@SiY?Rna^8 zm4+obpt(|8mZyMN`_|A?5r@rfbqUla9R%FouGO}pi|bdjCQkv@eChdy{dO;DjAU{Gz zYhLC74TP589yOYDE>+zk(lQZd@m;Mwh|qcZ^}PeSDEw0N85;VZa$mQ|**OO6tyDWG z2XHnl@LR;jOEojYXBAd!5kZ97liB&K(rO*kwLq^YV;UcwjmNKBEtb@hDwrsyi<-tk z?xB(E_Ggnp`#hl~8I5r*&VtYbBh-7>=}l5`l1yQ79fpF;QzJuu>rLC8dH+o>5huyq z2G@#t5WHgqXY+1vIt|iEGVRTE90vH?4&NUIbjeCXMAsC+Guy|Dc|b2^yTJf&v+`mz zZTDwtn4d_B;#oPuLGF=uRc|=!O#730Zxr7@B^ih_kA*NunN)c0mnwgOm07#vz z$248o>b>iAT9aw-r2mfLizaIXgOqlU{x+df)IB~20v{^(954EVIhDiVxVsqiTBG)` z$CFvofAHOv1VU10)#LMdZ#<vp0$9?e^Cr!;BTQgQ2yyL{rVXgiVOK~U$dyc}FKZ}}Vu=*nDuv52Qsi&o|y z2KXB)>&8{mw*`x~ApojvJ{gSL^SH7uYO{v{URNFF^J#A~ZN*nu7OgrW7^HMDqiguj z;)oQ@tQiGx?IxP6$Bm2ric?WHc^Kez*Q`IB40^*J&BsR*yk-JLofDuSqw|mXE_`^RX#UA4fb0CD zKYr65EO;GPH2-)Q;BTs`Vc32*>;KHzl8f&Ah71gVwcYgLV$_f7=Aw3c7~r+fhrM~b zHEGY!SgIEFc}4-;I7K({ymc?^6w3fu_o|2EQGY(xi%whhMs$h#j;vPpC~mCieFk!# z@@}2(joRZ|+18^BGL&^nQFKpR?XYiIG^H{M;JVKm<$$7nRt*4BXI%A3OAUE=`WMZ( z9tL>bdC{L!RXd*2P`A}-cg}d>E82NU@gS(HZkiyNpNywNR#1x8uMPsVaTTEl{o`(* zcTfwvD#HN(fvTGly?M#?e16qr5x`#4*crdm>T6l4b46`J;RE2;%(=yZ*(EW$-I|>1 ze32S76>YZy6ztaiHM17X^rHT?2w-(@lRoQ@7`13`(+~jF#fCnjoR&ZMDq3t(JP5)$ zG%doSQNlS20jwTMn0vnCzEshngwKJ1&O5HVGw2Wd-2S3@CqO|)H<776ZP6wY41n*c z(#b9j_j}Be?KpnXXCO%EGsF`bDgVqiC!9Us5VxEr1LCcSi+8x21 zRz5x&mDHfkJnPa>sI*3K2j>d$I3yG_?tAI7Rjttl;VdSy5qBz8EDSn+PTs0*9Pxf= z`J8N6DV5r8?QmTxh6NSX2|`|`1wQ65$+lP%IxLfllv3Dk@|SVSD<~2a{4x^V^jtn~ zX%sY6!vsIo_h{8R*qkES(wFuXXi)NF^F6)az>=hVY%~fQer$HCM|+#k`A*;Ru>lQA zewoy7fd2!FPx&%wVYxcIgS?_n)?1F^!~4xE>SUehNave%`YpTtHPZQZojTvTG8*ap zah*DU%-7+MoUWKY-{tH4(>mkxPfo|LpLY({RX-~dN{(OO?9#(EEFR_S8;yd7pZat? z*iMz-OI1EqEDSn+y|zbpRfO06m#^1AgOcwx+FZJ>ewju=gL#cEFAwhCU%_hzmezS$ z4SIm9=xA6h z%^`J}o3-eAUD={=s^9DZq37pmy333PgRH(OpEec-9lw0imOfr_mao+`Dyea_$-A~I zXebmk{2J|L^>8no^)6qdfd-`~w0Jvek4EQ}6MEWD?G0#+M+5#eoZ$L8N6}*f_ZMeE z^Pc;jCL50FQfZbM1aWiWxf*Dm&Qw`YsnP`s>X|L3Bgk~~wh3=#0vKfO;%9W}NTebd z7a}-Q0V@)rdqdVH0v1FlVN4v=t)7ueS%*0oWGK%W85|W!ynQRU?iv*4w*U!Amqv6o zN))lOX#^HTocrkR+I{u5+gkFQgGDmx&Xp)KWmCz)AoC&o`)uz>skC8XhDmPNrW zgW#}qil9qnqZi-SA*-Q~b$JqonfpFj3YN{20TPlA;28Qo_58D7J`se_wZK8jWq-N@ zC(1Epvp-l6aq&5*zJdY%Jb2mocsNM8_@pZKvhe{c5~15Q*XA^^Ao2)FNbfdR4^wUv zbi}}5*?<8dcW>SsPIQ~7{t>Q!N}67TH(K}$H0a!?HR54^JgYP}8`Z7D@Y;QmkO5eo zkd_qM-Z^UUcPLj8GBgO?^<%UboXwMDIqQ%pK8gjACv=>5UYXHpZ(3!i$7bp5XoDUW zXSI-E!BA7IP?86|Pnq8HDxL7%+TT?7aPB?h;|{?k(mARj722OMZS$~ft=Up%vcdx{ zg3IJ{#3L-!A2Icv>ftlGew6uHly%6vv7bSM)<;~6n$ct|CC!V<9tlAo303ajo&Eg- zb)qb(T;9JC7V4j{IPX%6aB$w5sU2IbIdik5B~QmXfI|68u59)UwKnrIw%{0(2F6~u zn}#?VRy<}_n8#*=f-Gqd(=m5As8O}W%MLV|zx0^^!@+HJp>DjHz zwJMW6w%eSkQUo>CisI{pS8&@GyoXr=*lJ z8nix4X|)ck{8A{vT@acRy3pxqA~e6q(^OCX(1WPVsglNhX;hUoz_8#m&jQ?+wMqAH zP}XS$YweO8o6=8Up?;UE^QTY++qjdiCcSMpi1y0_?gwICEn6lW3~{;R#id#0okPKX z@nlpK2mDWcK9#uYRx2l=B&}8|p_&mD+V?%}ql2hk5iG(dqi0c2c^s)k#ZNLMPesir zv9jm;Gy59l!*7ks`ZJ~?rnhuV+k^Sf;}Kts7o2trTnP%;xAphk_W2+>vM)Gp6~G;a z)77sc(~Hv`2K1X+e*UxC7QsrX;1pV5xrKmyfBsru@lrXVD*-AS`#ZdcC7BBL0j7HQ zKha32J!EQi+Qu9-TarmwpC0R3Xj;+S{>D7Gx}t?b@d1k?-M3lgV?jx`YIzh56M7#) zk8abLwNHD;<9F(g)Zl=NWW;AxJq~lP_qpN2g0J!{IIJ}ff2=9Y?B^gD?t+4{IA(cAup1}2{j^V?Clot|dvR*G(0od>~krL7FSjos% zo(}Bz#N&j1@bZ}8p4S81|w&|9k>Zfo&|~y^;Djq?}O@Ly?Mg$VL>WS=wDoVp72#*&CU7v zb#GLu?$UO1RxBi4a2?cm-J<|~&qLRKI0~MMmyDK@e1n3>bt}TxECnaeO*r59?EL6$ zKx4BdW7x>-Cb!u-X0v{{d9=H|Q{xjHWgO$7;F!lI4%s(xTqH|VVO&BU&QATHQRg$AL6tqQ^vso-qubryi6;d%(8kE z+1&rW#%u2~S=K|r{--ttUR5_~Uz1X4sjbaCGf5T|qLhe;khE1y?G?Qhvr7+s2hCEM zD#m98GTUbJDy>`c8MQJpJ_|CBj05r2Zhea`f@k?yGAA5*FTg?UAs5rP<})qHa#Nm` zp+U-)n`bnU-wX<7nQ{XT@DEH(?8kBOkt}(e*ZI}ejuLjZP; zYBb^qlyekFkbvz6LC2w#?Ftft8$a;3ph|%i1Yp}a*sUje=4IM$2ZDfY`RMZ_o}Oh| zK0^W8dOJGgRmLgoP?xRL=y*MyTjK?`Or-`6?6yPRJwC5pX2?qjKy5z!+O)V;2EWq^#DP@`h1@syDsB%LI7&>3C+B0hOI`Kd;$*e zw(+wc$H`iz@nbLu*@ARH$Dmj@p-e&25P)r!t3Hd(FH_}aBuLn7d03_QX80bLGTG8% zLilZg}@XXm5Nv)+gvoT4k)o8k5SlD$KkW2S`jkP!XI zh;EoiWVY4Y#`FeJq$=576RM_|kbTNzcYAc4ryGe%CaQ8oJt8FU7|BiAY#u2|(l1nU zAP9V61?WkGnbF_sna86N$tbwk-r&4s+{`7zgooCI@suuj?vHv=L?tsyQA8OHQV)z& zZ7}FhX8l>DB&nK0B?g1gT_dzTrCoZFilli6RWcGJY+Q14f0?*27=BDJ| z`q;SbS#RFx&6i|E$xgk{gGnfa?-}8p_VBpdjuK4L>j~vN6hv(7c6-C)-gM2eOF|=I zRb#DPI01#Qb*opg`5l2WZuL+QvDLEq=H;|Kp)-h45|*i!Vq^Xcr8AY8Ps*XludVQ(aWjz&1 zPtJr#!^2rn`M|00%j6_|-W31b4F_&#o;jF;ty?BEm}ajrnHT(u|aC!6iTK)oW# z6lCQnRB)(BL$%m1+B_B|HGqPKYP57b#-k1;^N9YRMMc(>L{af*P`YK6w)>+tKd2{} zK8sV^a6nfTfU;tT-p!i^d|C4z#sMTKJmLzJ87Ktvm1J%uj)&E;JgC82dp$ZG$W+RC z%WyzP>E0V}^-kK0!JH|SE8Q6jDkvj+sP+rO!3oRNl8KyJj0@Uh5p)>{zxkLk?3dJeJMp0_KD zPPg?<>+2SO&_U2i^&z_F=zow=A^HjXdem3q$ycNW7oGU1SUO5x5Gz`|8((b0Y`#(9v9m8U5Fvw$WW>7@r&~Xb8Q^JbsZCODuInj`YU^dF3YDy zVyPhsNpK{cN0*Q1;Lef5HRJ=pkB~4&$9y!3lRxNk}^|gdZ#x z{cc5VQ=l7WH|Ywh;B_ZK&8Z1SD`w^C><7o^SJ6?dJe}}rt5tLq3px)2zrFh7Kkzz8 zFb9|GI1Pi+BmFbFL!x#_cN(>}kD5opK}tc-Gmr{t(0a5+OMa*6E{RZn2z6_ zt45b830ft9bZNpL7_Dbi2;av~vakF}HbK4sfC*+a2tB~>+*iC?BG{(~LRx9&lIk&j zc-TAXO?#tGJk2H;DFDLMI1zFCke&#f_D(C$X*IelCZR*JncYkssf!ANTY{i_F7< zu|}SU9S>?B`D*%+F1puf^Le=IPOz4cC&{7E{nXc`JyH540Xk|P$5zmT$&-$_P`~f1 zs}$vRsh~y5lQb~sJhnem1%@sLZB;in!(Fw4HX@-F0HOE9)7#WL!dubB|B^Z(E+@Lk zdqgNA|9IawjyBYO6_#bo<(~u;x}SM5t$&aZGH1K{gOqjybpb1zT$V^ zu3OO%p?J?rwU_i}EYBf=QA19$85UHK>*;NW)<%7=ddQtvF4uc7=pZ)gtF35@UAfp~ zEU0{90CT)K@F!Y zjT+)|HJn31pIQ=zMB zeD(|f=&L{VAnTnjk@mq*S2ZqEe@>MytMp{OkR`I32))S5?j|8Wsw;chQK5Usk7sa6 zl&tN}iJ^BVlvhdpI&S4t=2AwHQO^>+scbl+cm^18eqLn?HGI5vLV z+hn8pSV(Z_HF{UAqD&<6m7IhPY5_yvADSqug$ zUG4IF>v(aZo)2T``r_in_YlWS$kSlPOxn{~Z#t{=-c8!`3Rz8Cpy-2Wxk<1SVRCLD z&WL4f81Z*13jBw?>2ypMDG%yPURwHQ*x;FlA1`*!1@`31z_kBUV%jcsKelZLgoXvX z^=4~>Cf7FkRa1jYur^;A5%_~70;=CZ(;Urulg}Rgk4rGw*MgD%m&C{>J=(ZI)5kP5 zLL-yCD&-7qF%1g&J@(^EuzIODq9O71hPp=nIX#3LT73z=W?C@vTY<05L}H$QJL~sv zEC_Qq1?JLqmbB7I1FdJZ);3-5L%SJT`)ZAh4tF=g4T#hATYsTGBJ-UfGFwMxFjH$) zk?B~A&|AO#DM^_8&jOQeIi&ZO=wVRWP*UG(1y9kRuHWdiD9rw^60?JPM2*yG@{zBW z|M?Ou&(kepJo34nl4`V6Q@PdTlNXm@e6B8x|1Sd1Z`b$gjpspY{?qzB?Q~$=KM0Jg z)1`jYuGXlf33733{T6aDnE6McnY71)Zn@LXe}(zBdpWiSiZJ*ak-@a4Sf`nx!)LS% z9b8X(d>Q5jdN5X&2~6Plp2ADX1il!|{1<^w|8%tXeXF{yx0UWw7j8$-O|$mmZ2g|i zQH9}>%s@{IAMDWX&@EkW9q=1XE+I2SdNB4M1zx7z1TDHzV{faf?geJv{h#aiZlDH3 zCAn4yJ!%}#f@x5>UP7+rVleaXMgDAU9Bpq0mvjBwWw;VTFs~vr&lV)UKjuF!#Xu(o z6NMg3OqyPf2ZPB}N$IA3cXc;!_;3lOJJN$MB_lEl+^o}RQjN-3*}jAk8PkH1k{;6m zUGrSu40gC*LXXMmz_@=B6d3A-9MM4Qh1x2i<`AN>?aBH}PEr#_OPWqvb2Z!F-83UT zTFu*`OK3WCRAIPefankhG=)%qr5aF{Z7*Sfn39Cak^y2Od~hh_5(bEAQJ5{MWgE$+ z^b%^>ObF)vUQq08sBo0>@9QsYo)QfFTZw@`?lptAUte8#k&@ikqkqO8~gMicFWX4tOmM-PH~_HLnRgc z(H_0f+n|xg=2o>?rOmCI(G~5NP|@e8!f=^~t>N(?^in*`)L^J&Dnh@DPE&t02a(DS zmoOEPP=vvf{;3L1b3>FTOoxT#-b?78Mta4JrM;k(X~|j|ga+G)FU8nEub8pl@9n?b zOV3GNim`znjFoh%^^|E?!CpeA+UdZ!&vP43bqt*!gcBSOmMwA`G)(w1*97|!jDFOIHF<2=-ToEVm4uD*!Wel7zpSOviNn z*SsGXa&&PgMr?>D0aJb*2DaXyx9#bEAi994bs88X=oEy^q-T;saS3|Y*+s&i!k|@C}V#r-;SR{6#$KJFD>ZXiv>({zH=E=Y$-DUUlnJu~Jt!}R~ zpgWJ0Q7v1Ev0@-tFBf@jsUXbM^?KUO@vt?b=7rfN7>^aS4Jt4w%4sedgWfyZ#y3d% zY+X4mR}AKT6-Lj6pf6e`gEEf^`UfF0Sq4%%FzWu#{mDsx(5oD@=Vz7KyfPaTGad9mPL_*5&Aodu)GJ3j@_NdEVdN#? z{$<+Q!SaS+KR5_coGcDfAN@S&A6I_bsc*Cnk7y2gx7K<=ht0#M)CBw8HOR>2BB6Re zQ%$J}&S|C8fP%{1pXp-P{^(>}Y5sIjZSqZllEgxA6D#~>VOC}FpEoAw|2iCZ7jzTa z|NZ~`?ms_hwN4hQ58Z09L=$AhEM!GX8tU(}k6qvEdaE^T_eX(*AWjGu2v`_Acda!) zo6>E2ECPa5vB5apqQJi1vd=m*_?T^Qk!agygIr0Ka$K zJ!VuvzM~)Q?iKoS&U3M#M%IBsCSfw_*<$pX`By?!fjCuT zGU|{t4`6B11ywuK(k(dnK484}$0ERs3$( zbqYkskj{C;BqiL23snpZQTm`W9!{usq8V?Niv)f2EMy?zfDn1mq5JF?Q@ZzVUNIvA z9vi`|dQ1pJBLRrtqM#>z)6bl;I0`Ph^23IL85C0F%n|i8<}~VKLLz4(WGDk5L@2ZC zpT403a!f^(*Ks{jb0 zo9a$&nwy`6i6bbjUQiYz?{k;2uG5FTd4I_J0)l1&;X(xiLp0v&9`pHMK{=ox97+iA zuB$J*iy^Nk|MlX*T>@%2AYW6zI2|om5fjt|DX_wTt1TYUuNb(b#hL^1O(i}1%Ya^9 z`G&y-HDk(ZpuoRIy}ACd_=6iZ7*9is%Gmvrld!py*lmJwwnc&cUboNdGfAH7&jM!F z{k%cEIX%cX;8ejBvI`ipEe;l6>yA6>Hv7V#M>CVWk0!{~IuPR;45+uw z4`}*{DtT_V;Cee2I990u3$;f!fa<`E=EL@=eHuK@^YY>vAjL>&a}k(u#{{Pvm}!s` zbf5&+JMqv7SqFyTEgM8%CcrX=pi%R~ro;>sQg_YIPw{FgQxgnNg5U|k3=K^iy)&93 z50X+GJrg#eW}%R>xyO7;T|X+#Q{F)p=N`_;m3AU9!FpJ~kwwqK@`^<4VHZ3h?7nji zk1e8h(-KQlaS^qF6MDcRh98(rFbsPVf=*EuGNq${5P9PLlwLPX-lVfHtqGK=If4}* z4)J@wxSG5z>C$Dg8Vf<2X|$bcPM7Hk?g#Vi^#=gn$C?T`KYrBgpK?8UmRS-%gN5J& z&k|%O|0+3gwYn@N0fwlp40MnoJ;2tdbtK+?iHqY>S%-%3Q!ln7x`4_3z>l(EtD=X= zNmWLNyq}rWSY!Q}NmC(bt9NrT4$~4>?q9X2Ipppd$0oFDfE z1%om#XhO&!p>s#~251M{tkUm}+RT4~3Nt9>a(TM%BYaM(HqTZ55c6*m+J)Gb{CK*l*2*c{oZK7hjoIPE)^!=5(LOAbgR>d zw=9z0x(dXh8UyMr{nlh^f1jX;_+gob|3wyolg?;fc(|bhak$1H0@u`vR%gglQZQV! z!8qBXz`mh=)E`Y2yiOG46BjVz8ypm_os4KLr^DBTB-Wc?oNiHI-#D4J6AKs;>k*Li z@u^GEt0!~nY4Hgc!3?1Z#n}dwnZ6ix=HqekarFrTay&kDrvLRR-+1!P#eKt5zU_nn zF!$*O!YUP0rc197g#fcpN~u+58^zzHf0XDUdBoDX>$ zB0*9Zj#LmJZ>!F7MLi@K9f=VPZCKz)B*Q}OrVfzk{R%pYUeH)6==;8}Dm0d$B1g@6 z2GkJGbo#n8=!ZANicEJw1Jm8-Eg}#IhM;pthIuc!;!Q4=a4YY@Qi^@9$gpmwJq0WzzKZ_t? z;c0t%{)bH6A#&v1_pX9_nhG2y^M91HfiM@@!8QZk$!t+G4J;7^*KcQ`(6-@7^|(W%rAnb%Y@==1A^(-2IJGy@WiUX zEjCzyHYl*~;74Xp8Z%x{>+{elCF;bfjdIRQ_YlNRIPu~oSf2^QCq*3`@qB;q^N=?$ zf})_paJ+&5c}*>yACLL5LP4_FU zLG6wiUJ(nP=Lk8=OmG^o;!zlS5_TyLFYZ!=jAa&RKGZ)8LsG>y?R8tj-f$cYefq`C zV6bJmv%-GqDvwXo)+ILi3XbfDtYtnj=2#v0>dL4$pYka@!Mvaj#Nuu+puRUMz73Cp za3UeVyEYod3lV|_(+1;Qi^|xvr8L~uC1IOjoNZBHUsw0=v}xB5YkvfD+6c$!_|Un9 z@U(hByYPzRO}GGWVX*$M$Gp}MjJU=;4G93)HTsI4=_$MrW`l7{Eehu^+?}J$zLCvHC1#JJ?rE8Pdr_nTsBneG0PPQmme0?%#&rilv zzAr#f+7XV^0rT**eKE{_BD@I~;4KXJtCMjw?JMXInot~VKmcEvjAz01ERuv&fdZ_; zfO>T@nbK`ftmc!Lt3z?F0Reo?9-?JrNe)Szy#)&FtCQKhJ?FKmU~(mOtk;r2es418 zy-dLbI0fO3AVkJ{TlmcBa^4vn^Tt+^ zCv>O)u0a4_nVi!^F*96}g;k&ct1yoGmql;E+in3>2Vzu%0rl!%7GuiM%vgaFOsIgX zK@L2nn-0gkaua|}C09g4FJ2;eKU!KKINR3)jX0tHxw0hP>+ z`g9_5Rj7c=*0ZkCR#m#Vv~UvYP#kPPu=xEMt@1FeU{X?r37`Z4^0xZAvzX1t!|*j$ z!HscAc1DB9mDzAUDP9UyAa1$FfO<_)OH`^hSVUGRu&>TW-4a_4Oejt^pbR|jybjL4 zNiv-d#lZ#y@U5BtJF$gCuvx_qn-B>$k-R@seKh|Rf+QP;{X7kU_1AEe)Tc^nRCAb> z+iVZGg8klX#>=9hlS@H3lMvv&uX^K!qfcQtQ9*$GKp|;l)i1uIJ_{M)Ef6AC6Zd;c zvYx&pH-OV1DqFrI>($?M@i1R85%kitkO=_|^sQf%Xcy;G3KhZ?2;dK9i(?upsdWdI zs1oa4NG{+$b|P11i&4AqNpT%0Kr0MPzdk!3&fCYqe2t*jig26_81V0fcfm*s&N-jU zQwZ?x&>xlIc+{t<&2WiFu&&HQ2c|PH1aDA~#2U7w%Y%TSOt5l&l@w_4nPnVFnbM&` zwgSQQ>y)me_GrY1=Ypg~I0nau4u5Ulo~pwL%y2<{Yl8)FgM#Td=Dh(;?1wG0!0Rp` z=Q|t}uG1aC`pRHtzQj2;T)?+5;IGk8XV?#>u_ewi!2-BJf&G4TYG2THsxSf7yVmix z{+dn@Pb0RV3zuY991V8g(!ZN6CTfFYaknSzuK)&#Pko8X@j3NN>EwKih61!4!XyPd zLekN)k`Wvxe9TNRo7hqY2o|K58^Fse>opUhLzE619n zbL4e5_HyJI8uFhpr<;p&sdY+OAUJHh-1iY3M)17Q zdR_k@oII4Y8wx|=Vzz<-e~o4)2jN&k(iu0w0=PkeePvE(m-!e-;t&;xb2SFk8=89D z?(oEvv~-H20>*TWgThU%Ko_miK5>?uk_@9XOwd@xBBAr%y!i4k1>sz8dH5-WgQw{Hlpuq6L79a2xzo8$AI?>mx2V?tiuMB}#m*^s*KOhZr&v%pCq znv5bW)UGb3QAHz24HJs<4G7>{_9t{xN3f?)(0==26CxD@4W;7!eR3%sHYH`Ckh)_n zoAziYL68Fkvw1vpN)BKM-gQA{6S{tz*V{W6cWGU4ZEsr9k|Fs3VaCT}v(1rrqy^of zn2=QV1R#EULH+h@G0h(-2&Ofi^nq+J4z?(;KX}_aKAw)>hGRs*@<$djP;fwqTz%Ug(Uc;yUr@E0P#kVR0AHt{ z(1w*@z$Zyd8!m(!81UEL&QAMf9B+bgxJ7||&$96pEMI*RoUwJ`y|dizGxNM`*44P{ zzR~w*axp=#zy(i$tNf$<6s`Rxv>6 z+=5QDeMInpAi}1i#deXn{9&KxpO}(FQd^2{oZuKDQu%-=p^-S-BT1 zBC01Peg7x~c-PdI;f6v%U1)=aT#W+zE`BuZkNTm8VD>u*p3}e>_KpQvqlVso=yR#XFBq{Uf#Pn;v!kFq5d>7 zj7CD;9xtbY{4NtWXlU#5OHcMP{|d{me(Be1fK)UT3T$0|z2|_Lh9EwchZZ?1OFsI4 z{nao2>KE$&Abt;_=~t>E=Se9TpCG&roYZz?XzFaMtfH`LCvq^)FUUU-HKCKL85^=! z)khOP^(1L5bf{26fdIa3z^Tim1Ot8+I3WXUsFvuT$kj~Xl$ymt?J8Z`Mz=(>JSlLR z3B~vp1n@QbyUbn=8!SX?6xcWDM`o>>*)5pMbOA%Y#X;eH^{Om`3x-SCOSHD8)es=B z;|*Gd6$}axj+<=XphYHK{O5Igd{#fSqTilIq~>KR%lEa-cB2;F$%G20A? zxLs2h`BXPHnZnl>w-fIEAA|?+ru|@-u3KWz?}|e;1K_*v>C|d`q+XC1F1YrH`^&FGjsLAHAOn%UWN+BdRI$LiWNr^sh*1n1ZtH4tB_0h^w>&{g~U19jY%8zJaY zI853I3x(?E?&lkHY`)hX?N8KA2JJz@{dNnEgy+C6pCK&_r0^UVOnwyxdRrTAYm-N#D&4_y%2$dd z{$vq%6j=L#hST$8!3ILXgn$ZZGKESKg9x#q!6mQ?0qiYfExmC~jR?yEg8oThuY~~p zC_}3YsHyx?o5ds~%_Db-lJH=VG6|}l?|#`2Zc!+lppL@fH0JLgFM@MPh2f6E;fvFC zWJN~-{Dw|}x9wnS*SCT?gSlN37<8jg?Ji5pqEJHsR2Q0!{=6EL@}jxhB7oHnpwISs z)-G9XU}G~a($3q#jFQ@ zDkYh%MZM}EKpU_2`66y%uTppbuc};ID8-Go=SMUzYefV^YurbBYnSqrXo73@t4jCL5{b&l8`jK|ZhAnl6g2nPXL z=ZLUZRWwJa@Bltgk-=EM`=UJvY6ijdGIK|Og3MhlRiL)K;WJ)5RIM% zlZ8nI4Pp|{@NOezD3;laN-z*4bglP{9_a{f&-^B;j?*- z#lL7KRN(>C_SJbmzNmc^95~%Qsh@-?RJ40y2!QIOsq0JXS-guTjYR;ft0ME+_B6Qb zrD#>;VSqQD<-^g!p3O#fx)|5#VOZJ;JMRa3b&3{ap96c1mq+xJ1JA96y=)M`8aMD| zrNVB=c7&J=HrpF>BMWCRO@NJhy!odwU8K`(%z0y1bV!&{0M~xqX`J;>xXDHRY7rdU z9v*l31bAVrK>(|p{2e-j&q`X+CSL=9)NQi*WaVC(g8*%;9k==9RAFls07#u*cX;%R z=2r?1oUX8UR;;j9cmVb2XSY4yrR#xN8WkP=fB~>BS@dD>ep}I!We9-6+Rj;(R{g&`Xyxr;fY*H*{rN7fewNtn&iXVA1c}TwG#TOd$x69~7y#>`ftGBj zP0pj>tVq$J0VhF3cV5j`?~ZxhRJ5x)P15lcJTV1~8;r2x2K#6sZ9~>YSiH z=|%(6qB$X>0RB)F*FD-y)THbBW+$}%8mxQ%w}K<}kOd*#i&I~|=+jnr8Vvdczi2Pc z=RiO=wtM4|ev5?+Ts{O2(9y;cL^vF0M(s> zpqeh)De!7&otJ4Lygh8t3qmZFist2v0$X))KA?$L#w}X*Gyq7Q@(1I$j94_~Rd@h( zO?J3?pV%UR)fwur-49OL6is_W0MyvpqYW}VM-{Dg4-EoX?bAk&_u-2ARD}mn_b2Fs zsFz)|KLG~7+N%wEb)47cMZIbWfEsJ5O{d2SShgx`tz`ggtfi`TMQb$yP?J~-zT>NK zVo`Vibq&y19Gkrm%mGDffQ$mTwze6({!r9f6&^sHSoA?7?1L3eEHD7piPc=tnRVuZ zqFKuj0M))#(}&eTzs+mGqQ1>2fE!m3{6)|mE$j-*09cPWlpcX&j})EaWFScBmf@%x zY~?80GH3utQWj+CR~V@PKxz*kjp$jzVCA%^hrs|?XSSDT;r(GnGn*j*s(l*mQYh*G z4FFQx`D4E~;1y$0I}HI)T`2TN(OhTILXlAb*A};<(pJ=BLjY9QVzjx6<*cH$m!(ZF+n{>Y(d(EtNrJrW+Oxt~_2 z9rT`xj)Xl7@On`4mbUWHt-btC^`e6k2Lbxiw%XuBk6%`g=~hmf8sDS>-hHW}5)9!E zB||vP`u$`~y&deaTgHbKAB9%b=so$SXv3#LZe)hC>zwj>j&u|*jR3Z|6WnBgN_5CM4Qs^#jJNQ9nZ&fvlEM|;0O!k z=sr~)K9uyx(0%Od>Pds>hC#{JQDgk?^Mx}sls|OJ>Hsk-xP+I{2J?L~9|XiKhX z4*u|J(-I>kvs;PzRdT4rreKa=Efiud9e4UC;~%1jX9TCvQBTnN$--W70as;A$Wiyk zcyTAZ??-Us36vCqdr;G$@fkGKJbPdDEOIkTL!NM{%#s#>9j;P3=yy-Lxi$#y`$WW3 zHpFn~yN35*+Nb-t=jUZfh(QVr~RNJBNDhp~`B3WP$pKhOorod5LjzR9{j}cp0je3)PQN1<`!n#5_LX zs*RG>AYl??t^^-8d=lG`t~H7@gBKW)3BU^1zqA&aOq~Y5cl~~@xIEd$m z1efSIGZKTj3zXoC(6XrgxHQZ1lwjEt=QCBYWRxgyPVvVPH(YsQAQt7K=clC4mh zMKApn7;t+edmhzfeeZK9z=~_f^xpDD@J#d97k4sMFs*^`0N&9bQ1kYBLK|&)!4^z0 zb8dzK{{3S*C&yZP!TS7(JXm{;se?OQ)lz;oYwIGbr_JZC^BDv5ZD@1 zvrWdEmg1pCm2~DZb=uQ{rFF_wpV~j!$5Q?9Kidvkiz;G}mm|@IU^`TI{rGDO-RW{XsSOf)| zIBi%LMaKdCo=>ljPWbikk}PMeixe~qDj!)DxwELR8?bwuhG4e5`= zKpQmJPLv73u8EM8jJ$`32_J?5X{0iUyf0WG4LL~z931kI2R2=9UsTQwSp)lg7!mc4b{DzZ}U5%56&o$wYmhYyse%M)DmkAyoCPc;4`N_{0 z>nffO4tX{PRK+tqhFEYorVz=J;U7f}@lE zDcu=Lb0n3G_N?DA^ZMgKJ32@pOT!EYXJwxx1Yn8EN7)ZI^&fPKpUh%qQ#3yIK(P%B z4fS6!_1e2Rt%LTu`K}Ok2$q_W)_^^qGJELKbY``mk40mJrIv(r*q}<)oK_U+Ne_37 zOiv<_E$Z{#_NaXtB+n~R#sw9LgTHZDEu{jhzD!uP#2{Iog#md61p=_;m%c4(dd>b$ ztrtz(VMQ$JSUZnLrX=~WM3o*yLVK_Fu0N-9>A^$0l6Bw=lr$j&LtC{(&|c~QS=j|D zRFBZmrx|UhpIPUZ5z*wmV}!yP6N=PR)W4>eD%4u1{x_?o5boY348zqyzCx zQ#75OQSvku7P8b&$^tZ__vS_Yqzn)#8Y0AQc4luXTYcKT5Zr|<*x#ap8ob8<_>KX0 z=7~+nf_+N?+hHPnVxg}LK3L$>ZfT7A>SQ5H@1kx219sm~5$n+f$9#X-w}Kkn_qHJb zdfP!;G_Ys(3c9?^)f%iRfZtQ!(?j6zTHQo85!?mA_zVPzTOG4UtvaPAM40)K4GiA? zHpT({Bm3z_|FlLYHQOVafnRi@BW9A-uvjVqh3?}}_h=MeGA-GFvP9DWp?A~jZEo%C zFeggNL#(1PVBfLq=ZCe%(N2@$CCkq-9waC{vI;x><0)OYu|wBj21QS@Ss>QoJg9x@ z)aLU+Z&|jGjD%CFDK6AMOsL11L(-frSLXTSwpHC9^uin>DaEmr1tC@_#RumhzFa9b z9MJDs>(hl-vJEMYK*oX!;t;1sxj3X#fVQNEE-IG-76j{&!mUkpjG7hFa(oK{A8F9q zR1f7G1h*5HOM{FBmAf{jTL)@yc2EfjuJW|OP0z$6xFrRlMt8gj zC)dkrSQIqSMs`{!gK?WLA(U$)L4pEmr%sCs221F2wUgn1p4m_IfBcT|%i3>9Nri8| zUY7!qk_z8_yDkMHK_M&66t{n70%c2s2F3irc*O6UD$Ca(@KN)1TI%COX((6oF&wn+ z+gjFq8O2BNL|dXR_h8V;a_)>SpW!8=Y|b?#C}efijMj5nT%v6KVNuXP>)L72Yc!Ea zxz;sfK_!dHoX#4qDJB*LjVwJDx+U>vh03OfAweN4g$pV@Ybk{q1b*fv^>I)cmQ8Pq zN^1nw;VK$leaPbxREVo+cr~Jz+EJBQI<;Ay=qW^%NNELDD?V^F)k1w9sR#~IC#$NA zmPqxuvMQY-d9~G>algB!9+gEQ9$A{ajk<+p)5MUVkkyC!^B@{!>qD?YmC1Q)eEjEd z7POp7#)8TdS~Q-~DNHrZK52I=P5STgn6FMtCUySH> z9yn9f$KBo_7^@2=x*UN=CgUMCncviRKaYb=r{(?Ta8SDIY?}Yv508lnx_T~n5G4c4 zRC=BMusx{IODn@kuxCe5TIqzG4sJvORxFZOWhyOVS&;~>TPl-Sel9Bl7DPToeC-$J zX~l3FS}^qu4)a?Ch3pgjoE|=;w(KQxpNkOn6;!?0adP8>-chfN|n}QJ(viA_TecF#m^BH`rw4^wv z3YvpK#<}p&T=TgW7lH+m`-ltOLKzK0??)T< z1Ph4#(gsZc?@pIiI@OMot$4*#(&*XH#yuPbiF=TEJ|7O03`=TBhDwPz7-XJ81{+QF zOH08dvS4Ke7#5|F3DH~K{;Z-7->5^HEM9^urBzs~;z5AEtG=#}W_rmothWWTevIyO zAaGm#;$Tb<01=&E1R_{FX84Q(_`~kFL)VMUD_gze#cASdJ4si^B8-m`Jc!+OV&hJe zL|H;e8q}naWkKX|AhJ#O7zMdY(zRY9Wr=x$iQRcC3R+^GU?SC46bvpTbm>-mM_sz$ zY;)Ok11pNv{$f5^(B-zh&g(U$8z(~0Wqp+u4|_AZDV3M5vRU8fLF_TzyWJmD)IfaJ zo2%2?>c6Z22-dMVM3*=I5x9{3%6_eSwxc1LvvHs+<&Lz!;Um`DWXd=#3KwnMPN zH3TK?$mlTOp$T`U@20FgkFTf{^ko^s)8$Yoe(L{x+B>D!U#I64dU{4(PsIv}U?Xjk z6`2sJz?NSn!&_St&iEhF{9vN)bT72XYQe5Al6KL~@m|8He_Ojzo)9ehebOSm?{hTY z>eF?Frq7bFufKNta%Exd-!HRP->XME3H2o~;e`limt}0E3R{1()Kj?q;IAlvhA zzWzOEDFdump>OMgp;`~32g~XCDm@ijQHEBtzga4XdtRFA8*z~etU`X!zh89el`d_M z`WLfAaPZeAi6TXo1Z1dx=!H3^UX>PCy&k459;79`z`0QN<4x-fR1{Ra>*`-jd$o9n zWT@MLn6?*LNa?3CrFhJdjD3m@D{QaZSfSo5nNUI0e$Wq$sK1ym1Xm(?=^5sMVU7Z< zvGu#QW;7o0pVLd%X`6nMR-Q@kEZ2c$elAr@)!IdBt(tjfwOq=%P_|<IOaIN(#ks_?ywu5|!v>pI{a=|zEMbM=Z; zlv$mV1madJSK0$Z*-lK@Aj~oTY>nVJBa1?u{0t3sJ1b$;ty6qm@vKB{oGlcJww1Q8 z5~wRARXfYFy5Ml3jq5mjBa(gMuuw(bG68C;QDg{ z4ZWH1<>(p%y7Bn-pv|`~7x%bEfO=m?N`17U)`{tS7_(cjL>YL6p`db0|ENBi*TM`V zSP2URK#ACqYf7=1cT9dc>`iEbDah%?Q`BL&<#bdkf)}?O6tGQhY18c~EIo_o7L5S) z&I#R++Zj$O-TsvR!_b1Pg3!8%;tz|0#6$IYe?%)uw6|{1tE+!89l;V=hHy$D5pq}J z6D5L!$iZDUh5_V*6ZJr`TJx=J+kdeL2#%&^1QUT62(cR{)A7&r5_Pa9CCHt8(?W&; z`Gb==4KR-@+sy-Jz94VfkjD0m0`i@V+-mML7+tWzHBHwfC_L2(L|5g^D%5G1)9GrO zi#i+gd#D6&>17xb7xj=xf(qHsv)|A3oDwbKQ{SU=mQWW=j%2hzJqd>qPfvSuJra1f zccdq(&CNG_IYzKg0~oE1KSCx%Kg19A7K1^qs-PDF4pWVwko}n6>z$mbT-qE{cW-=3 z6C#5K9aISxpatV9M>5L!Txj1u{kcD>Jfr_n^%Tp*g3_l08!3hX{fYWcWnMLCQ?GE? zKCa(!7Ib2LidOSK@UW1*tNL%G*F4yb3yk2Dln!o%I4D-2>s;mwo-NBMSP&FG)<$#& zeRY+XiV7_;jcEIMxW`8@-tkFUtkP)6KlK9{PwIJ6mO}&?(#IsVG0_9z5B(5InD$0Y zs1@RQQ!v8xIZ0&)hV& z2OpJG_t`Muu?aOEzwY<`tX}@n|6(o|N8CX?b@!PCL)ZE|`1()5VP0{p9VcH}v7v6= z?m`*k62m{irH6q7^9=|Fg1-s^+84faO?jn$FUbKeRw+|bD)7pufkmo%Hs*xsBA99l zSSedLA6A5Ev-6VbA(cHtBi55P3=bQ=2&~^7|J$eOeQ zjG=B7bxW)8DhlT8~eOZ%e7q~&NTg_)iM&ydXBvUt7Pna7uX~^Q) z?)NmM6{W>R)};6_49c_w|ej`Do8ib4& z(@rYGt?GjSeSraqYZ%vMfJMWAkF%6hxuB63f5A{EBPH?x14I0yEQk`PNgj2de)QIe zU}T$t652i&(!a_=1ky+;K8+yQgOd@L+mH#snBQeVhwaXpdhUj{Jk#cz9?kX+dvC|n z*NOVzN7Y&{ANFM2z@!UgVAxj~APcdv=+mZ*QC-(p!K|2|tCb;hZ3-1&&Tq4@nK?Ce z6Sdm3=+)_dM?)|=%&@s8rBqnw9+iD>HPoZ=%G%4N*l3>!(npk&o&em$U_iaAEDr|L_}z_7o~VwHJ{u5j#*-_Edm zJ5jy`8^1DeuDjAYFzt(sK&wD)x{IMrXMw3J-#@08%ElvByb8I>;X=!jGO)+%$T@)S z$>}>GnKgnjXd-fX)_5YY#V=(rI{O)K(+jl>E@l@SGjp@4ex(d+4(P^t+RnLa|7Py_ z_aaUDg%*WM%Y0;itEvoU(RzL4tH2ts2RgO=?^&ff>d@tI%#uPCQAP@qEBnGqz>MEy z`7Zm7>KYzeqY{1cUXkSD)LgR?k}%P0&^XNR;QC!3!I_P`STD8D*Mo6?pGWe33|I1E z`1+E(m=uP&-q3^U%t2+R{d4LX>s5vxAs5n5`etgOqPIs?r>BcyZxoz2mW=f+#iUdk z3CV{}Qa`7vHYD*h*bt;aQqSW->^{Ww;3ay5UNSkBlFDe25G`bzlR>P)C@YlFBB4hA zbVMu6Q@;LLRw$!ILX>wqz2oq0lCnY>4MOkHm3_=v-(H*n^xhHbUf4AfMF8$T9ndh( z>C%fp`_V}W!5TaPOh%4CDUHLI2kky@9?EH0P*Q{5iXZd2){+_ql+=h1RF~8+pp-`9 z&5d#z!K)h|s5Dnw|LgljbCRFfmH^9d(08iSA3(pkID2|f3-FnVTv?210bqVga`jPX z+EaCRd$8AgJD_PBbC92BOu@b=&-8pIlyA|m={>4Mgao?`J*A8R@=f}dHht2XP2l}M z7V^GBfP0&`>Rd{~5YxThT+KW((N$v#W?J&Q zOK`4ZLXtc8yUY!K&v`}XdQ`}A=Y9uA_@XO1*D)b^@6R*Z3iYSP{$8qH60C&k@H*>6 zq*z1Wmk^Y{avC5(Vu(r$NMsjq+pLdLbFJcjzU4= zK7N#TrJ&~u09SDd1EIV4UCMic3#bsB$$$kB7n_~&>7jb5kZ7O9`eg*5>s#8iO+J}if~m)dmo_L=fjyr_;nilPlyd}2LlG-&i?0AXK99og_J-r> zdCHO(7x$PWTG|q>0b70*h2Cq{-q0XtXPnH-f(4I=n6@X@flZ%9gdY~YMY8=A%o0bi zv^h)ymc%Kgf3`y%6m@$Y>!hqNrML!ciR&HIIes6&uXxv2@1&GqS6r$ZyO&+6dkDZblxFxj& zZvkis*J3!R-F9lqy{roRmr^m(7)MvP7SQV%v~B$OoNtmBj1Cc4M+1Kt5(FNxk8y&@ z&$)svvS7qI07C8q{B-wuQCA@(6Cn)H_wj?>=TP;dAsBT45Ga5Kp3p z6Z!%%^*tw87X&4WkcWh1=DfsRYo(nR+%V>H+c11Yr)+N1AjHAtHuY)BXJvDn&x6

*&76cQ`d_v0Ofc;S21!bNo-KBr2n>zR+tzej*Ax!coh>*K6q(c%F^*<~( z3+DQDK*M(kP(K>#U4AF}rgb{Rq_+Gewn+(w;tXWea?wzKYOd#+jyseGX#h%%&UD%j z`sISnzl%2HpG7!hSKZ%y>5dp`I*pe7T&Z9c0z@`v=!zpj!XpRd=v(!^Rr$3 zZ~#kh!3|v@C}~GVhXIenaC#WY#05twLP%2FkRkk880Js(HnG}OuE$Z#0KvFEge48& z3NYkR7ihMX&W7BIcxC?0CVMyAYMkZ9X4H{7o3LbWV+>~vOkGV z7zxtY1=n`Fzbp(YkAg4aCp!c)AdZoe;tzB@cE2@-B<@2K%(pp6O3)$^!_1E_+5@^g zg=ORNezY*C+#Jv7JQ!U8N{8v0f?#fkf|_`E2%oDC2<`M=^SO*-T!#Sn4vEgx@=lBL zSa7|CpceE@_9=``dofzHViWc!3er6a==VsSw$lu0f??2_(aR*v;eu&F&w9>*!mSCp zT;0eKoy`)|7YM7<6n|(C@b}%P^hDD;{gppz6)ZXcz%?8VLig~y13Etu=?F4E!gC$K zAoCbM(=yHqKTd*L1dv$E5h3^#zg2?v;O0Sij83q%6PQTSXF~KLe(ith$5Alp4FnVP zc@Voc=~C|N9^0(_zy9hMfAtIXe}Dep|L-q;@tD3gZ+bV7+$dMY=auO zhXMPp$Br&&67(2z`22RJ$%IZz%qs^|x*zxaK>a&dYmgK}!!Qv^@v<0A$0xKxPjdRd z%wv+=WrG`~fCZ83lj)dFQOtSAL69Cn2hw2xzBQRq^EsmfCiK6|bV)PDO!q;+e?B>H zsjU*)Kj$6$RJ!iSQ#s+SvS9S?(Tuy6(_zJ}$$4jROm~G2+QDO$f}Vg4YxO)1=y&Ze zw$+`{;W>XvmNv%u0uJRg{-So)Rd)I(<9Pm9Q0h%^EfJC+@z8uh#brG0&(C8SL7yX% z;WS9yG{1`_1RcLf!cc&|Z@%}Z!u|GFP#z-zp9PuQQ+;}nPJER)jc5bwr;9lOKlBf6^fuoLg9>45FW%2=o{+2 zQ9aJD(GZ+C@t7chdW*iJOGA3^q6a0uySVq{aWjTTo=nx~Ks^P)ydbDnrxZqowXX0$ zz(1Z2RINHt&o0_&q_Bw-9F_7RMk`5$=v_UGGebh!KER_TsDn&!EfkU<@o3hgvzw|p z%FFkHO=Dmfr4$fyPw0MFx=fJniPg8KHtb(4y#!arW)v%#ghKSA?C17w+^c%WHe{c!XoD1ovnX$E8VL_hFFhQI-6|x^@zyDrW?8yiVPLySwKsUfb*vndU zjdt44t7I((g{T)>6VJ8BHo!voapoRKe&6GLRl!g@g9JYInUH)hd5%jKz$m`GDr%uHJZi1!60*crVp-E%zp|;!vr=G3`F;@W zMPSI-iX0JG^breA=c-@Rj@I4&yE-442)5EPP;3W7L;W)r$o{0cd5}mC!E+M~mTN(V zUuwnC)}>mJ;bFyZnEBQhN2C5bq+r4+f?Z^cn(LH=4($3hBY1Y1gUSi3UR^xgWXz>j zF%{VKB@1tUvZNFpt!z+I0@gfX)@1q1pQ@1zfONGvGw)x-KFPSy{e6ABr9f@WJx9fOMb^(=}b0 zj$t8KIrA-By^hJ(fnB@=Wj^)oSiJ;gTW8@rvU*Dx;bFzC z*NlYN=R`4e>9uXwpf}Bop1GK zooT<+HY~+3sgr_1>bCls*~7e1=Xd)_2HU?+e<`x~lCS2Kc)wd5PUWIgc;LmCRrH zY3p+!pzSwbMC;K-eeYp_f2`KTX|G0~p1|BwcV-RLh43s5B$L1y#8ea6-yRg2@6G0X zX{PwZC;>pbM>KU}lSVO#tJnm~sW!YdJYYfPuKiWBM~hnRIiJgtlwo6}FXB+pxJ??1 z&RkukN&jJKAZe;iU?_MX@IRR?j%j;^I^yb<fLgl}CX}GkOO@hmtE$GadVx8Lm!N8LFcYz*Xjt%x z3*@9}BfMUD=Zl1bDP)J@`Ux=9AJJvl^9t1->LEX~FD2N#AlTWY8CEhugVu*kt3eN^ zVX?-~K7taGqvsQ$`Ae=z@l=-}ZBE;>GunMZab_h&aM(IeJ3)pGzh^ca)9v9M+TPcq zbx^9a^?l^(?Ug1`|IxKxJTx>9=BR%A}ZtF`@F}G z@4GPQPZy8l>@ny<8CdsAVV%Db1GYVyO@`spG+~xuQ}!OS_VZ!SugDOx?V2$JoP^g*T3Hl)uF3@Y>vM3HDK3I_t^E> z@Oimi!Bl=w_AN7VGA4pyflS*khwBA3h@*eL4S)OdXjQ?|p0+QPfpt{6z1qH{L)P6{ z?l>jAb7>P8!7&vg^lof1uw6aH#n8@70Iyc?AoXr~^V~CAEU_L%wC28ZT5ctA8oQ{R z&|)dX_o*f#!g?*qmFKZo>Zg5D@(h-%Nv1f4!_Y)bUn@6?gHE!rl!tvB5*B&DM;1fr z@Qtnsf1leD5ixW<1^$`)N>mqyc6|C?IWOQKl(~^5@zV{x}Bxqdbcc$B;XY?QGF2fj6_%2ssdZyOW)7uT;dJsxKG-! z%Ks6j7*LBV0iy^0-Q>hUYXj_(W99TJ)k zDw^E4`dALt83t!BPz_M%)_l&dyfL3EIPAC)!%y=vG`Op-9W!`a07PaxiAboui*J+93e=DRa)t=IfL0}+EVq;vmasif0{+~9=3EHh%D;HJnl7|=4O87YqVO)55RAE+L;7_4 zS{)m0>9K?q&45zQ5g~RvH|^PaGAT}9Jv1gG6p}Y{$#19QQ(D2FS5X~`t!e-R5^{I8 zeBC2uj2DwNm0JGbD_KEUy1NeIomu5U?vj^tw?c|w8K#*1rcEefL26lck$?X-=YEv(f3nGoeMb3pS~JR%7q!0vF;eaYv=VDJ6!`0?&DKoz{{q750ghJA1|L{5`Hb0Rs!f2Rw%Iz*Zny3(c zkiQ=ve=E6z-)SSCvSwZ;NCkz1s|9av-b1w+vEpvn(t0V#oDhLHNQ765G zB7nfZ6GDL|@T1}4#ZXqIhMm0uk_SZrp?4X2XG1kpY#9+MJw|6L5(jj6D>yN4g0#hX z0D*riSnq$X#EE6Ju?&R3K?|Px<7D(u9wyV~DbE4@`+RV|NU?_Orq*mY1b{dAFIr$j z6#(r)cQf|6`z`sw0el)NSdh6IWO&k2hrklWg$6(nxakFc&(~8;M<36oDmPdLLoG%xJjAgi7%OnycIPLM8zK@S- zSbjL#K2_Z)TVR-gNYXSYy$dBiI5;c;uAOOYsp!4ULa{=HGA9sc6~E&$#*of=5G9c< z)fd5(K7ODfwnDd1NigUjERW8p`$r|EP-zQG zL_q^#dBkIx<-t>JVaZ_7LF{w(rO>Dewzk+$ET|yAo>NG)cTJp^DY%XMM{2?{97!;vqaOx4onwz52@LFsY`%O|||S|n&oL(%&o zFTFhn^h==Y09a;OD{#hujhsSj*lAhK`0I)6OSk2e3N2W{nt z!+?#v5V|})>JYQQW?m3{N7XM=B+KC8eo^IP}aRr1P zcW$|c43D33)wF0BwJa+TO@t!qlK5N>Lbuf=8BFVN-*)`07_@BD$zaey+I}*5`HXsw zJ)~`rpn$af<$64!TX=eEq2x3up;V^R{fG0XtI0@&rma*?EU3U^I7~86+-)@@NKim| zNrN@z_UN|qGNPb?bo}*%CO0=z+5;t=)t0_87<3SpYSwHEOGH8Aolpws7MEq-w9NTT z0U4#`Q@TN5EF9EUT6zxX$Qe)l)|3s6#|VwKQa`6b38NEu_7Bu$m0E4%1(F9fl*)MO zw=BwgZY*<2mADC>0uhQje4ovhLs>8%7Cz70r}lU;R=4;ZrsjE2)2W2+;OQ}yFbzuD zi(m8Fc%gMzxI7PPXt5Owui9E{4g>a;P$KY;s_kzZz1Q9D00KYSuB*&O+Zh8kVu7n; zH!o1s%WbhBc~C=b#!qQ~kBIHI+6*Kp@Yp%KGyGn*Wh|3fWl{JG#$kK9o2mmA4CP5AltJ@6Xx)o%a*@e;mCzZM>O_nd6wq^2cXYR{ zEY5mR_0UpvPG_t5+cCeOe~Fkhtkj8Nbr>07McyO*#qe}GdLz<_4C$1boNa|_7dJaX zCBO~}!Cy%KJXtOt(ds%LGEBzhoiM`*ppsZIpeh1`K9Ha1@9Nk$>>`%13v6LN%y?IR zNnJd5Lrf7NhK(DNRIx$8VZeLxGrx_Es`|o$E)~SSBq8ZA;lXY_mbk)|zZ zp>CzXF|73zAn$>_XsG{0e3Yw~9V|;q$OX?g!Si9qePIU;S!}{$<<2G1`4;44Xn(Lz zyL5r!7(M|jU62`Yo(G=N^;NZc$5Ixb?}40L_dxc>oA5w^hZTPtT(|Z|Bge%ZbXYU3 zFWPO-YJ2Mb_2NA)3Y*8tg;KEXR|14_h?AhZhrRctC|&tJyI$>H7m3NEYZH;lay;#^y7=14hvAC!xwwp zV5!tDj*JWreUxWWf4CUE{)Tp*(~d;dpfntBYKV%@qyX&DF~K_o-&{=ObXf4$%J@G# zd-m12rOBUq$*@%!*z}8vO^;{?*_6)`<&)Ob8ZX1PX+^B%7B)$%z@lHO@A=)Ze8Qb1 zS&OrO>CI6!C0O?FYL=Z_;{J1gb`?6X>gN@!oTKUyXlcw}oX9p4LpUx71Nh?khGU z9yaLumAB@8dR12fB~Fq`-jwwtJx<8@5p?vO|D+ z?ZssA;)u@n`-k0hrl&d#Q>5;5XSD`F;T}$~I~ws#umk)ll8Rxh7~lE5Ch;!?h3eIp zbePJ~xAZ>)zS~8J8J29guU)Vd2mEX4_m^}_vRpJ{@LNs5gP`!>52<~N$#WHKd#k0hRQGEw)5Fv$3OP4VZ{5@7i$(6 zj#P-Oy%qor`S;={uyarNEr|&3tg2^Ri2tMzfBg7q_Fmo!G|X^BT2)`7_nY9iNWxFO znjq0I;a;?x3Up3|fAIem>D_RWPQ-}dD<(vLg||2ERHi|=W9-|fzkeJWhcyov1}nhz zxh|xL3q@eo&+vKqMdemG!x$-e7nl>^FyjF}+tNCl&5;{fq3v{&p&Syh)KRrOQBwB^ zbF;5@;_YF=IdzZl;OBc5r8-0Ud# zOP=p7jksDg7f{IlkW0E##C(pd$0J@kN@c*8Tv-V!G`!R+2jdj>dDckvk4#n&Bt*aJ^Jw1Prl`r z@0#v1(C2TBE^d@2>cmr>LUe~g5C(pbP`QEO-@-?Rk(&fF+65h$^YcWgn8UskCK)C- z6R?{}P77xJEKzc^TxZ#p+rlctd~o6!t;(ce)O!h%8};9Ke~PfjFeI8#Mti&pOxY7{ z?892u_)SDxt_8Dxnu3*k=%2p$ylt2x;f!8NN-*iK6GNLsWn#sw|M3P&12!wE!8BK4 zY=*DUQ=$FVwB3499c4FG7&$GLPWg{Y0;asnUdrG5 zcDj8{t%l`{Hv5PS)|WSw1Wb8fhrty&HGddJE;Xy_4QO48J_q6(E)hKR`N;1iD$9@!%RLtORA2{nH&?E}vnc!s5Gh?@)SNPL*# z>L)gX2s~m($De<^rIR_1ciYM4F`bAjJYu+P1eOGtaLHZ`Sn~^fU3>G%)50EO{lww3 z+7nb@kt=nje;zOBkT!0R4Qr*YVG#xbdA>=d3~Y)?Cwa+tU1%ymZNBZ0gfFs&dt6=s zc052pk{xspMRCrLp&Ja)`8EI!eb*g2&`e+QDQ2xi418@Uzs#bin{H$vNPwN9T;e+4_2HN`U63T%ZH9ekINNWI3`} zX6sy?Z`nCgFi!c5zWCqbvwb=+iz|&RZ1Hs;?IJbV+8Y_H5`~%%GgQ?1A?FJn)JN2v zBL(BQF_Z->|Dxh1TT3+64>u6S%w zqyfX;cL1bDq(SH!-mA$NCL8g&kO8YE(sGgKJ`r(|=N)>BrX%FRe-bcVT>3A>(0Pm#&zV5X{YAPfKF?d`}PbwFadEPs{)~S8Lv{mQ#M!( z6Sep@mvJ1>Z{Q6Yj~z_M)D9H>GR!sukV_;ObfVYz(SpuHr&ShHxk#YVYZ3^(yD-aL zzqQ`2wgWy+Uj)u@jsz%q;1m&xH}URG}cwf+9yL_&WXgAbiLQS(E z^e(@(TaCFuL@M!tlZV9^E|L&>dytTQi?l>!{rcimp-Olr0QUnrrB+po-7kvw3?Sdq z9liz&smlo54~7eU+f;*vjsfIb!-c#`yTL*t0QZC8W;C6ONNKRpF@U@=q=PI*%hhYH zYbo0-WkGH@Y=i;6)G0_1`7ysU-p%ESyB}Sgo&?(gfPBD@PNuI0^XX5?PXw!igWPR?af-pq z!Hf>wT`Yx|rI02@Oalc>N>M2=7@g7j*1>{~-^SA>5d27h0x=)u!14{oC1>509(hUQA0r8)xWS`LOsdVB|NT(&a zl%-4PsWJT~WHT~kDc=X1)|1oerW#fQnWh zdaBc%$7Pnav~4`#KXG))NKQzoQK1*qHiOZUZ+N7`lteBw3|S+n6~UYe&7VV)=83o| zH=)bxe3~Ad&~*<>b@7{F9BID+`z2t_Pn0#A-7z()d9UtZ@=Bf2X_!xgDG4K^AQ+S$ zdlgvo)BV@JD`!|FQNP$rKY3dNWrN4xc!io3GZIVeR6 zDm34P*DpwlPb>{Jm!B$`ufm4@ov6Rq?ADXP$&PMVl9iodz6yT!U&~}S5n$+Eh3@Ha zd#3s%mTvamf+p~wLv2)F%5d|`H+f$2t{WxUp-^8fXVcMZ8O9P0{aB;$D|DhPrK;I- zDI4J(#2tYFrG5s7_y>95)ANB3f+%YZ)6t0JeGVuEU`MRk*a>SoD$I8llpDI#Z0yLo z8w4H(#Ij_%87*-YMP92ORF>pWC{o+hr@QHh$<`HMODt43Z?aG= z;n0uConLul$z8!A9t&0Z{0$VUbphBBYtYRZcdteCA5?<|9(1lC;caGPsdh)Gi}*e0Q2~qG4VN zsiq8;GO8szjPeO<>9p%vRJFW19WtxaxNx`trY8W1@an%Ag9Omncb z9Mg|{2sc`0qx|Q-0#hhx+z1+J1VX4-h8|0m3v~V zLXy)Ek_REg)WTbg=>o+;O6VO&7b>o+K+n^yc+)Vdae=P#?EUaM9c;v1&OO03v?VLD zB@>~os8#}du&N3xN~piY{GLZ?TM3m|2wSF72~)F*3d@b-@$nH2dXAp+>X3!rOlp`k zXMk@F6(j`Z3coWsIpNWt7qZ3myNib-gg~MQICqHoUhc!-i30dr$7=1IVSZOFvta^o zx9AVIO5|wx@Oa>px@dqJdUg@von8S#?RtEb)u<^Vq%5U2;H4DPpmR;=d?!Z&3@!Kg zc_~A%y2@@R0&|!O!Jv|2==kBV-x$h(P)jky5BrND(4doIh@bQpLjhJ-=`Ds>C5xe} zF}aM^qmLenWMC;3>uK7v5Rw!x^!woKyS{P`Xr&It{cL(7m!q}kP|%=rGx}_|z_Yy0 zGK>mFg3P3e2dyi|(+w5$NB%z|dMs@?|8Wq>LEuwZvY!XD$w}vNoj@o>JPk@z7UW9n z>FJr2vh=O?g=gS#(1O>d3p$Qls{Lg)PEvG>VUJK9q@|wUw>z!ko5PH5^ z($e&<2~F412?Y4%<<0(x&3_G`9;^$H;z@U;m$Ql$RnWox37;#X#8V#D$nI7^i zZ$k|kzm~!AENI+~Z@J&`mq-+beiyz|i9#}=c`Lr{p09_CQ`z1(w4NiP5;zZpTJqv* zO<#$SwR_RCpm9B#vs!!q=C!h+{*T|w;D835`|&;M;)pzu>lxNCMUK?dROqIh#S=lN z@(3_Pn|+U5fI%gBu~t~Ldl59~r1Zy6&dM_j+S6YKgxZfO@b1Pok@5_+gR0pg2H>|w zXYxRs?tNM&0C#EMo+!iEfi^YUT?PC*qdBbuI~tCbvb;3Z!Tw91QWFH=O9?ECNW+js zm3$Um0-I^;gNVE)n;D{Qrr&z7*-?Oo%`{$lxXla!7=EVTda&71fPUM@gH9TT#qvc2 zG6UG)3i?SJ+!B2b0&uW*@=7)_TI^*8uvdI&XtCLBskS2+Hd7R?00;Q1z|&F6w539% z4nyCh!Ve$_gcLHR^e9hcZpn$BQlJ+qS+}8?0(6MX+459)q$M($0c>yv{q*7A32=+W zo}$pJGks`Q3))jOnl3(;bxRZ4QGgD)k#B$z{%FaK4gzq9KrUbNR!~a>G6UFPuPa=0 zZi~GRqQT#(@qs2VLjVqr&?SG1Bl3bjIHD-`TkI9Z{%u}S;dOL|oaGoUV!sK$EH7vD=cT^tC0Mh)*WLX9`G217V*Bpq)-Pdb1>=l!G;_k<4VUK9RVN*dNz238(D6toKW ze0A8ECyqYU!G-$u6m}Z-)8V!B?yFH5SQQm_Uy1Z;vr1q=#g&GXucoJqC2iBGX2c;5i8F{{w&GNQVBY?oa6+G*I_OT;E zVj1@<6Pv(6>p{@sS^RT~cf;C`N^+<`p?fL3UW_;!Ye-7GdBGvZov#IU>)O*wNFoaM z-%%QsSh9@ll(7V*04(+PR>7@$0th{n5PT@Yh_*$PHGW$OA$d?k36U+n&5QH4oSVU* z^V1M(bpG4uY)IQOPtHm6hD}D5l(H8M8}9N)wB?Q`a`v@F4eP%HC1!#OF;kq){4T1^ z5$DPAc1IheMUi4y0zO(MN{~%IWLU^jF*c)S;%myOvkjf5GgzM<3r$mk1%hvrsR1i$ zn-@K+C19yWfnqfZVozbqfcw=pFM3uZ;9j-Y)9?CKV_>O9zxEq%84zke3b{^%$1vWY z2c3Q1je(#%?J_fszQ=q`7tjh7%S=h4gbY@tA~5$Vswet@M^na*GW%p5_B`Dc4Y-To z_M_{t(52FQ5w^V_`F$vxqhWq9Ltbb6>EcC#6WUJn=Jb?i*Ad&=;cle#k7@{Rd zbSrT?BC2-KX8nnLp^6`^rpMEVuWGQP(8IYiG0}6ktCPPb! zP!UNm=pcT+ef*><)D}NE4NBKSh`yaJ%DAyqX=QjK3L40}!||9Gaxdi)leWB@ScS@r z=1qzdVH;H<3o0n(j;YNd!_ijCc@F58LTrpEtBB-lX@r$A;V@vo2R2o7bi5)D9n-PE z$2-~-C^Nrhtf8V+!$SLgsZGbN@PMln|6dQj_gCNJ|NHa*`~Q9Kd;eycblhu&5`Y;< zh^Krs(R#g*=lHfIk;H<^oe)@lLgjfF?ibN%8LKS=r-0Byu{WR0=S#J@v#ruauQoP(jM# zC%vXD1%w{F#y(S}cAM7%2>j?ZUl!33MfsRxTYe1X8nK{)CYHOon-)HfsZVvh9;)+X z+nQJ<6RP(@o=I=aH!ntN;h1GuqRc%75}Ih9yi88W9op7B$zagAPUFU#2@e<3ar<-| zjf^)-13CZRH~RBmmqnERdo_!A>_t<=r1tIcY`Bo;qxYfdsr$k?TIdASho+}O z^Oj0OMVhrNH@PSYottXM(^EA@)ki2j6`|Czc}l0R$vLtORfQN}pEJM>suopC-*synz(t zsnEQm%7a&B_Ox{IE-DcM7OFDcvg1|Fd3d@FP$*st;XEGh#%t=*iYm-9bm2poHwYpM z8keAR=|6i8@Zfu`HGFO)1T`Z7c# z4+0-$i3^CI6jNo1WjdxJ!;XnOsNFzl+|$)itr4-bclSv-7<7=*SdQ)+k_A;;N{c9H zz;olt$$)N}I33JsghWJ8o984CYA7T4sk_>tl(URcl-^T7=%I8NPiDi{1Dd*}d(lPU zEW^MxwG0O>#MXG}Z*UVjZLt+m&_KB`8J)>Nq_%RwVZcTnrNbUxs-017c{G5)NAHcU zW}?GYXyK-CkfqmMMnqyk1)-p|PP9;6NVJ6_fWW^T^8N`8gvfTFWgxZ;f#-mZG;}iC z(UIE=xh%ac4Mh|*kSE*-;%4NshVWBco)9=_p%={$w{-2G9t5*YD3m_SX;6aa=-GU^ zQ=4JiJQq>WK-!`Qo7eJWsJ65fKox#JIgt1a0v|c>Y&bh9qrEK$CKgmsJJM!T->{Ig z?`^eX27}JeLr&yJ{u;5#*b5GL;fy{^$#7shfNqs?NOt?-umh=r?U;^4PHIaP0aWG7 zQK19)>3+?t2sYXOd?FX&SVqCi{K)}e5<-9!!Mn(P3<)o_rHBj$9i(sfsA!h8rSHUo z3jD=SHX~WZwD}7pDBKM(GNlFgll6Sy2mR$nSNmvZ-aywxD5CVFGt0`_zpeC)C}_ZM zlrngqfk*;vegg>#2*vX$Eq>GujJ8ljl-8In7pFxq+B6~x8ffJeV=!&4yy~cnt0djF zWPM3yTYF#f5EA4__jIoBiEPV}i3Jt3$ri)aTvj%1Z8FaR9pyV+b+j7FOxRZb22h3H zPpwbL~NufUaQ90tkbxvj4taL__u z!9AqusAJWAYwIiIG$=g?IbuaOi_eaZm)q@fK5&1CD6(uF^f|ChB|6@{|aBA zR!Un|p`0(BxOLs_a`i@Z6BoMg3U7zo?Ol*%S^dPYl>GcKOE&b8$7$$C_NUwOxWj;r zHcc&ux3y_Ng2Fq&dpdVpRKe{HQyO@tywp8fMZ<9}@<&jk{i zh#~jFwvXNoNKinzMZeSVhHJ5lVx+Cy%4twSKgvJju7MD0>qliU=)h+ix@LRZi_buU z0_qh`d6WLepac$Dh#!8~-xyR*gA!UR^sJxpp#TCOEeiU1w<@B)twoVoP>KF>_urLM zLv88VUwG$fP(pY(D8ubm9Y)j^p2UI*+Nu1cryg5GLF0ZXrFqvSbrNV_$cPTEI#pYB z>}!VdrbNkvYV_Zf2Ks0qS?(Kc^j~B_CHjw_=w(7}?fflJRSjB2Cd#z~G#CX9w3I1= zRKeNSQuZ9sV_dvmO@@3ztO!D5TtpUBP{LH^x!d|fYHk~$*wL);cJOi}XE@qIkyr=? z>KFG!X|%PPK!O5lO82`PFc8tvR#Rp$=pf&Rmgj7`n7Bc2*|KfR_azgm=)cf3$ABh2 zhr3xAR+X~$l@EDwQ-MM^#vAEQ7V_|l#&`=Pt-zO2>J=+(3Lrt@!Faf(ZT7U^i58L$ z=!RZeDDTF22O@oszs%217rT;e7={(>2m#vJz2J9>Q`oxN zohX3+xXLx$Cn9VX=ek|zN1N|vboAdxrOAd?j6e$ztiHsrygZxIK_K$1D#O9Hf({12 zH|gNR>3lfj-RrfJ7Yw7JAo#>m;vjV!FV2>9j(<(euuuvNAtr#3iy@=_U`?zwWEl=p zKjNha)Y}uKh#{$})0;p6_Q801a>9q`JbpTO^oNhX{`e8?#U1?DZ=U?45VF)i0pz{5 zmkQzAnegY2pL|+sT4HLCW&##+A)090{)yZX+A1f2kh_V{@qY*9#i^ErQ43p!gH((` z?t8cs?FTe0Kvz`CDz-HSODcq~AdCzChe$4lMkhWN$;Fc(a1HO!U>ltiBImvhy()Yz zB*215Ooy}!m6{Rb{t|`&LhdbnXjAvgM3?{^#Q`5_L%Vb7E&#c<(NH$<$H6%{1@Is7 zbNYV~wGS_zZxC4i9zcpv2jp(V{8$b17={xxIC3CxmEYh^gLDzhM4d`#n70u83VW4SD-ZNZ-x!8mN{NJm3?<2pJL!e)aC2wmOzE&35ebH#xDet@EMSmw>1T7cd`Z)k zY5{ZC^phxnUuPT0O{3=ne+{h&gQd+v-^cVRK#=(1c>02tUJJ0HZKx|n4*~S{csbfq z{2qO>9DPP-3O?QGYdkDHj(2kG(^72Lg5^mNxFG}v zo3&isXBY?vK={syI2wfB!+Y_pp5( z>3mt4T`irxnqT*zVZ!?`f!5PaSKGnKnkM9{23WefH3O<($p0+LQ|UsL-IntVt-9ki zq#Om(2Zn{D;E6b(rf?k&Gp^$^mUm}$=KWnuNm&bdghA$7E~ASaOJii83bP<`GZ)z` zcWZS)x24&*Pbc6Yb#F2sPU*x}TJT3MKB5y^2E*BOC?m}f}#}4Cx2u3&9Lg zjz77$r6ECk#KDGqCFETB$x^DXkb5$uKkx>J>lHRf{vU(CU#@?5toGzSwT3>zvf#(x zlmP5_zivn6g7vTaG$Zg~#k+MY7R#kvabh@6Rgundg`>lQJ%0FZx1(Gcb$iSpu>Ua5A z5jtXWcTBUe)ReE8^{+jdwMPo3{luF#r=!8>;A7wB;JeP(uLnitYtA$js?B8W+xi#q zVMj=`(vH_uZHu@vC)$fFaAatQ8boLpfj6|dd{8ftc3>!ns#7TYmZu1|p}}d=4rr){ zoWdvC@OS}Tx4NR4$o0wS;lqzU9MFpRogAb2#+oEOG0U*$O2C}p4F4`w;5-aM&K#=M z?B+DE#|lY?cqq7pc<@A9RGhC4bX7jo@^~k2|C&?69(jd^{Cht6_>WH9xs*K7MORp< zEh^?ZYmdHW!+^V`0er}yaJ}K&gq%_&Kd_&HG_Dq`0)8|ItSsT}4xG#7Vot(30V8!v`O z&z2uQef0RT$VG-Ax{fni&I|ghBtr3iq4aKpTo zf+r66SKJ%4*@Ra2shtIeX)T417|`#y7u@^}kK6i&yzECA1|F44frFZl1sX5@PW2YL z$3lQeGNr8PiQKW$og5$_zs-T;5enJTGeoVLX-XWRzdzACi47 zz+btgvUKFtct(A6I;?6mnGI;k*J?n;&uGH;7}NQ-G$bJkhkv=a_7+^1b;U2|DZ#ee z;tQH@9O`LhLo-G&N;^P>=6m9O=?LKh!<2_WRiuTNV~qS+ifVx<^#c@&_r&Y84%0uE{R2bOO<+pZ3=HKv;uFjdidZ-FO9Z6UjaaD4 z@TSW`gzn+t&A?E;bV8?>&W_yw3N^#(0RO2EUPjSq>ix-cUYpR4qR>;C3X{9{ThN}O z&@3mHJhh-b1?XEm(l?sZ?WnWKkoJuaX$_a~xuLxUg!g)d2eC_dlLUo`rA`Z6DMB2; zuV--nr)*0YreyKGR`4*$T;o6KxUb!oT((q)R~eQWq|c*HPJ_(t^dA3AkIwHg_S&z#EsR9uAdu6o4}YD!&8B^8sKa_SlD0t(SAbvpNoTy{w6^fbuaNnx9A zPNwS(U5UAn<%Xf>n;f5AL8G|rvzROHi;|%fxhhYnD58=DK0KU1n-x zXmYu}yE|E~?7kIj_CcW*yf)p?&QPWc6hd${=q%mcnle=z`q@eX6wt2+I$a4kSx**f z4~L=utN4jiRan!^i70>?6&wc&NIkSELfPLvjy(fpcxQV?D-6z-Gucb(ZhPWD;Trjm zhSq3*4J|nSi|YOvrZY143k>*IJf8=rpDVhd#U<&0fX#mABU*WkQ+lSG-xDJz^IG>q zb8TXP%rVNprkKb}+io!`IZ(Jn3cE$6gfz@NWd4o_aDT)rQV!qq3JS1S=m**6rg9UefLaIooV#=!1d))sT?9j+e*bAHsXKIC6X;7GaR# zwBTMFFKRl5HW~m@C(2zbsv?vKaRVg0sXIBEDZpMnU9XNPvgvw5RbE))kG}QMmqSXlUQXMDW=M&q`6ZD$n$QdZ z`pW5FXvG^Qj0D@#U*M0uO9Te=YmUyV{QZQK;9Dvh$fqq06 zhV;-n1_j1`pMH=-bp|_CigpM9ukl}e#0*`&`h4u60R@T6cxiJs{7`tyP&(jSDZn7$ zQwYw64Wm<)|}*+DYTAqlt$N`Bsm$-rGqv)q|6+e9VI}sE^?*jlG z|AB_ED4~Zc1so>CGzeXxth zhIvKZj3okax40GK`XIw~we4pqN*Un`p9&00mz+|ib!q5FxlfZqfPnmC_gFXi41Q7A zys>wQ)f&ed+^62!3<7JfxW_v>X{{K?F!cHqJ7Pe8!21(u-RP8N0FT@@y>R4)>^c}W zkLREen0;i3{~u~Et6?TtCC#kkeU;8uUAZGX7u$y)ehRKh_2&xq%1n;GngB+bgwNpzTP2q%y(v(!l zzL&`^XwTBr?f-R)%{u40gwoOl8S+0%-%#;O7e!CjuaBrgqjObGPNuKaGIhg=Gl{2c z*n@{5KTRLq#`bByQ1f-I%R7{Wh9Ven0_u@fa=$G@+HU`6X1=;$3f);>!z z(lw)At=c098*9E=PrlntX#vR_^i`CA9aKr7G=d+Gu+2Dc&_Caxe1CsW9iCdiGCJfiYQSgBaRShhQrQGz`Zv)&jLR$v6R+P>rB99RT>hBZ6`r z7*vfQ_u?Cmprit0{!4N!A6#@qCt34U-EcdlMR;`H?UoLiphnZcH(@!OQA29P?I>CO zJnxc}RK#@_hVfaO(=l9Q*Pogf4rI-%rbF7Cd+;zME2Z6=;Z(DV5r!kfQjFC6B+)P+ z%V*92UWzl=tkhWrrXD29_?mdaLO9D^PB^3!cUp3xZ#Zl8{JCPM?B}~72Sfaq=@Tzb z>CgLs>+k_>$fjaNb-+5cT53s>6Io3JM(G5a-skqCT5@@C0xjq;;|Jw7Rl@=tJub!D zvE!iWby}!Kf#?0%6FNU+DW`!ABc}M?yH&$r`E9&L_lfd~{u4R_QnrB&+c&|GQaKQE z_wZ^sAaH%^j=q$&jbYO*FhWr?3sG7aG#D-xw85#Y;#x&D6Qa?v^a9N-RD#*+SOJ9G z19*g=ZeA}&r;`O|NwvbtGB6dAig0a7h4B4~FmH>HiO8@;9Grc+9tzpJc%3byb?$UH zF-5A(B$koCeSyu8ki3;il4E(sNTyrE+6*9cAR`ZAdGc|WM{a2ol_=y7NInS&x!j$6 zAOxM1_JRhDh2R11%#n~3?p)62RQO1}L)-}-#NLJDDY=Z6>m}7-3mRf5@`t4jwI|7F zETr?C8Q&>$$N@Q1Q6YRa3$w02ER!31!pSH|T+1Yi!4t#mFFx1V!LcBcX9ZV1756nA zkQEXTa(Pxb+4*d)o7x9tg&YaVJatmJ?ay=XH+5<(r1R7n-|01VDk_9?H%}K7W)~B( z1USIWITDgLk=&>d@TUz*Im-y+o=gE8q;j{0XSEvYfK0Eb5WbOzv7DGPEWiOk=gBb5 z1))25kDcj+ir$!Ezds;#F-L@8UYyO>@~oW$iZez*B2SZ4Mf9B}b0j45`0~9jQRf~I zUx5apJih#+qQE{NzA_>Nb7%U;d~S@)aR+4Z90|#o!TB&lKH*i}cHNr6Gh9t7G`B^> z9Uui9q+;zrW`t+xISR?vwo3&I>DWf2cU}&s+v0q});3zsgILT8)6MaY4&qUp7+bSK zqCqIOTBaM<5*A);ZMA>}kyu>O1ARYWYjG7&kjP>uHUULg+G8j2Aod=LYBnM?psUHy zaFz{FqSUW(As#!K(+$t~k7->KU)#2nTWVW7nFSQGSwbntMcNaJXF((@w5tAWFG(T} zQdxqDt+JjHOyWT-OEB?av?w3BZ%;5K7vfo&N$nHbdcP;hw3nF$wj%A@XuV4pSV+e) z!|8^m@z3aXyxh;NV}=n1nasIf<_(09trkF%LNs@4*`z+etsVxM zto{q-tBAh#`VTY+WyJuuk=!xVLaM#qNIZyrfWm%0Tt7d*=CI7()cRj_G7N}r-Aqpx z!>zs@t<|lG2B9kmDRrOKxx9vT-uPJ5iJnvlI4_GBYZdS$2*ftaZo&CVD73a&0tym8 znl6ucA%S3jXqaAJ`qkg~9K6fnhw>6;!vqX{>)q{b@(hr#(^H9Meam+~h~#D1RfJ}8IOHG$WpKLDvh2OKz#|Co@AD;@!shP# zi5vpJ+x(Y5Ep<2=?dH4Uv{*|9hzy_2=e+o^oWiygTzl1WC`A9ZE;@KQ-JbDn70a?iixs5` z%(^Meawnk+3oO$?=UCu@5XAMqJkRZcm>8$M&%$bnPvi>P`d{)QuKBGgjK6sG2o z%%-ZGw~X8D3s}HGC`<6G;dK3yjzARY5!+Mh9fm z5zDenIV9G=gH#r4RD?~2Qt6Ob3pfa6VWMWhnsyqBNIN7<;6W7bnS$M z0QH^tlbrf8bWbbTbfAv6w%8@p-CBo`*78q>TI(6$-grKFO}(Bmod6sDC46kC-~e!L z#vh3Wp*!i(W_hx$i5aRmK$KWcgy36r%Zvz%VNbYf-!lQY+dN6?78M^+vvu^mTwiQx zDkp{uK>9O7)&%+Tq@D#65`s69IW#iBe+c&(ip2y_!2=Icx6+%l;a^^tK{F(UgivCM z2)Rpc$3+@*QEtag*_GiYGzMkn)^u*=M!WHJXGb+b9BRDG<726 z3}dvFpzI?fbayffk^w^4(8k##oB^SCExhU%J&$A)(J<0kQHm&NTn{geX(_HdD^&!? zP)}Aw5(_FfpyF3E(m;=pF-%U>WD*QI@K`*hH=kK*^H@Yd<90B`uj8imQpE)nmcqej zo;)K-9@OpyHHw|_#9b@se-Qq&6t<;cfrRGGq=_q#g`A-t41_#Bpg&z&mA$2)Nf&%iEf0cI3z7Qg9 zc`JiK2YJgq(mA*-Z$%U|kn$EYx`K3ZS}dV$OL;jBN=SJNzHo_eDG*L;OL>WLTv7qvfXCF~fB>0ANr^1(cK4l8XNWJtMPtXW@Tj~X=qVVcuEsvFLR&XRJAb(^P zY@X-a@<#@P&JUe0WrxIYpp$N8`_=w{Qe|^W+2HhuW}QBtyqL_MG;DkVBgAqA2)SE$ z^?10Mjvg%+CsTR1lBsI*0zxh4L5!+4|0bRO#1r1%4%Z6`s`Q|t`wWZ_)J%vzz}r+% zQsC%RmeIBnPQ%U43MADF_&$AJ-ulM$GdT3A4I7;9O`OpYBdTj?nB-EBTG#^^y6>w` zHgq$`=T2MCSsUj06ssmL`LKdY{Sf-~l=fk%%h*gsK_zk1DnAc{%oWI#cfFX(w2Fqj zr-|xf{|+w4%1bm;TE=p3va4|R{#T8J<#sV(A!J_>XaGD9xSYyx&{ni))2)UTA^QW6H zhO3p%*By!#?cNxU2!=d0?R^Sh`Q_=?bjJI7{28sNU#?|$*|2;Qs6t(HAs*AO7e7_g z(XHt>(I9jero~5(X8JlHQy;LBTNDzKmmyiS!3~r5_*Qt*fqSF|b(E0*x7 zpfd;XSjWw2mf>^6o{+H&sRav#j3h!Zrb23)N4-8%VT}v%m^l1PlnVPx9101^SdDJZ zb~Ft4QVuP*R-+LHnOMuc^esaXgRQk3SP;1~`^$XTeD#F;*ryPI0sWeLA-gdmuc$3K ziK&U7fuL~DDbT4RWo|vHJ`K z6M(x+>&fUC@mV=jX7D<`b&kg$Zpsb#EBUXoLN~OH@NvOU6KB!>V(zTfelddZe2?e9dYJW9qeO0oOe1KeOOE!sQOT1J2xd`myc8w47B>lh{XU@s6?$Jyw3EeBP*$C*RGTJPJ@WGV-{ z8mNp=R9d}uV2shZXvdLCnV2%jXt{dL%lrk|FyE#!M8v@69|yY3z=l$}0H;zdcz3Bz zf@<(CBVZ|&mE?!<^wmlhG!2$A0#sjqO#aSZt=b~8 zx?AfIpk8(9j#l+kPj#xsp$vT>m1+|QeD95u*;0+%boYj5fa}x4$$TiB(LFsd0nFfG zI-fy68$8SiP=g276q^Fu-~q<~H&{zs3Iw*nT1J5CtvwymJ_v#BZmnm4>*MQmBwgD* zzL)@}xApAxYAFlF?zVacxV{{x9oBTTlbnz1UXFtTwy!Iv8#+CbmIVqIcdsiW26XQc z-T@&?^zI(<49#7rrd|t|8Jhc@YCN@YnE|d(ZL^Wg8r@SH6TtMoosAFA$DRT1C0B;d z$}DG?v{S`zfPfslphmVDypWA)1ura5Km0q9c)Q0Kjg%1swkGbOr6hB89Z$aiZRP&LdjCPp>D4hg}l>1A${3n{}CQuRnYl9Uc_71l|!C}F@`R2uFy*+xg-aegd=_Q)!`b_T)wIoxI z@gd)XJWulreN@`vnhpug+aa7ZH$PZzPR`tt72#sTI=sNh11Wh>yPVWUa){p2fGS-{ zD#QW(N=}yrie)Bi4?bI^l=v@|`OSO=!Tzg)F9TqiDys&71X2i~z;~$XGNVlaB!mGm z{QUS#6|`+J>^Y#rep>(fTrc`*vmYcV+zD~u?)Ir?2um}hj0y#W9{fc&9jGML<}c3y z9XW!2?I*ZoZ`00|1$LQ-?T>*z7;atNR2rEWw);|?7yvYk?gYD7(3$}vYDuh&DlT+Oh7O+&n7 zl?>r~`kOC?3%Y1fj(9w|_?Rn=sY-(l@!R^VucoSjX;>ks8C7KmhHT;NKMrR*nH&0Y zwkJdQr`lGU>zUGZKy)wZY)qG!i2D4GJvm)#z?h$FV`%w1?cn7#w?~iM70JS!f9lDc zQUwP6hjR>~QKFZVH93m!BG<=29rtfqp$8-X<2go-Co_u8eO8Y8x3Uz3nMF#=+|K7A zi>U1@rD+Wq^PuqAYDar?`4pLaK*n&(kp@-s`Y6(2KMJ1^A~5F{ zg{RIa0gXp~P`hk<|EVu8l`=4?D2r*Sax&@b;mgvhzRKddlG(7b_57v`ldb9VBeAsV zjYOg}sc2IR*YbKwQ6BWwrY=yU6c7*z7uqSk-Uv6YC>6QR;6 z|DaGY3@UkUp7J6BS!^7Vn**+{R1{E$DTxv)kEv<3;5Z~-B_cw0H)f2%V49`Ryd`Zo zDE@MGsZBb6Iv?pN(IU=aU2On8VNjT<*l3PLKnb?v~D~NI(Z#UPw0?#6{th%=m>}FMe;Z();tbMdEHElz+|0yNZssUP|5RFERgd`<&eA;flw1+(z*DcFy-xy zJWR3B?<-6Zh%n{lMOld)QeMb9MCcS%$U!=y2Fc@S(Pz4Iu$tEvlT($v4+)K@Rdtp+ z$sMHQXwb>MR+I{dq-;@VQxOPK`jQ<@F$q z7Wdq{N<`@8UM#D@L%b+!!8}~`O7M_&b0XHlRaSwAgiF?dmt#v*Z@x9G^@-ogRxFbc zj*LH+L!t-pi3I+YXaglx9#Fuj0T6<0bt<(u4aw0(O zI-o)4QcRSS?}UV5scrmJre^|yp5g@q973Z#ULp=kDIDsOx%O}n2=o-|VZ==Yqdhi2 zgH9F-IjeF&DAHs|%I!SJCW6qO+Z_t_=L(Dd6bJ={6cb@YO$4JoCP0Hu8g+@|XhNxd z)Ftttm4(UouY}S8VG6X0j_>pIr4wk-$x;Dzc!bCS>5Ne|gG@z?d_E8nCjH~<;CK3<>wjQ-z$RA-uumo2u(`QmFl-WJ*(O`^O+3H0X|D@yA*~> z)!rTkRkNqjdB3=ryLxJ~N&76lKq78ZS*Dv3?PXcslF0a~A#ngdYe%G5SNDyz$2x&Z z@6Z^j$RX|4GYR}ul29=(tCIGT#G#;&{7=K8J%xZtC7;Gad*U;x#+T=|w8uc+W=Q$E z(qw4Q*Q&*kS|(x4Q+TSqWdd61EnTIzdn>QeQ#isHXHVe(4dF<=1A4NRTddoA2c89u zlrwZC-tMcs4u6Zz)fet*SZPUwWbWqZ+ecr1{ply)eDRgw8je(1h8ySUzlj0zRsQwU ze|r4v>9dcYee+bX4M*1G?2H2XHKsrQ?9rD`o;`l@&8MFTyx}0Z9G_#rzwG&}tl%B} z^7ymB0NMHF@n=sT|NhCxpDT7pzho59uXwwkKKt^kuN2&HoSO6sAYfl&HvdSr3x69H z59eec1ozpeUw?5R7YJ~FOrmsXjoNqj@Zwe0nX&%+oH#tD!!AVdyAl2OAihmn!x8U4 z7RZk}85saz-exAP?i)9j8ugA-8|yIhxP9` z;>m2NE}$}$bM&PjxM7<-0aS0NZj5%dGjD==qP}yXE0Mp4jhq&EXMpOOcS{Qa0H(9D zIL5Q1mF{~GxrA{CgRbdfK)KVZTM3gvz;R`vpLVYK$)=bi0s&O^%6Rf(I+_fscW`#|iY7tj zhpe)bM_T?}r^1cD2JJ_l_D~cyA9lrMM^zJ#F7sP#PY&@c2(XgdCgHaMA4(;x?bbFC z81S!W{Fij)naqTSlTqk)jYfeTTiP5bD0s)r7pK=(#yFb(5J^cCNP=68tRz~Kb{(MpT^TombWI}G~N!je^ z7V`n1n7WD3nVGi{*rOz)8ws76c`JeInUnEwJLH{xqG;(>&m@NMz?kO1|w-7U?jJZ?{}UahBe zQIu+Zb{n_PDX=-DU>cknFXinNol|gNX!2yE(?fT%XOv`J0=1AUWzgo(RKWmP8&aA! zwR1|#?F>2i6|d1hEC+i8Y;`G^;&Ho@MP;M6q>l~JRv7GJZ%J6P=PEG-x>m2^QEWWyx--!V-_f5GIDaTT}^-cZvAUa!@ z)KD7eBBrCQkpZ%^bu*dBB;3(f_q`+@Hr_FF<0Uz9KK!#<723^4|2>GD&*sDD6PmXX z6<4=>1_G#D8oJ-6Yncr$*^jJfYY25stIe47z`G>>Ck3j&H({p8!@?v8#Qe{96RT}Dt@%Ho zAd$K2&or^bcSrQ(u84zF7Mh}$*B%zhO0RlF6c31lHtZtoC z_c?gn9p@k9`qpmUasRy_@<^H}SvwNl_kvisvLn%b528!S%gyxF;AA*{F;$gKw`CzK z!GVIymf^{aLZe5JY?(iHFck?ZuKah;ICyI2rrRKu4@SU%@7iLHPh$+UZ6Hs|-3Eg_ z-cvwN*1O;39B+&D0Rz5E+r?_=j_JmI4V#s+t*x_$ zWV@ynQ33@WPG9TEe5pF<-O@q;fXOwq|B3q1a@wF<4V^*2<}%a&TuyRzD>HKn=-wMe z7Vhc|2LO|E2HmPf&2H(6ZaD)4NnOo`YGl4E)e}H<>3FWkQ97n$_dSRl`pt+2HPwc~ zZgzqIDlZG&&`rtQ;iAOx>4t8W>?d5?G?=$p3oKb zdZALc+N)$Cblfe7Pw9@fp2Ya^t@n@SK{3S@owm?hT;(h%rMRM}{lrxSK_kT#JxcD)8%`~8C1B9v zGTr<3^>i|m<9OZ5^qc}Z*ZDNPHZBG{y4Cp+0WP<%DL8#Bt``{aT^UFG%1ZS-7CM$U zbs#jkU&Y4sv-Dk)pyKL;ut+-(O2;}uE%OFduLtZ-%@+i6i-5wRS6X&!5d;9j&jZT* z6EB{YZGvt~UlIdkuD|Kmg`{??zy0?h2Cp8t^q82%(qs4AK}(N8fUT|^>19DLld&uq zbYG5axg{-&sIKKmK!6)k15G<1D$7 zleV;T4$kci;V-)&ox?Ae3A^y~SdeU{bhOn2kP2K5c0b8UpN{2XAe2-&u+&0Ln+Kd< zos!yJ+|jQ3yWbQfg+NE`U;cd5Gz5+pm`w)0U-YJ$! zb(@>fB&cxzR6QH0W^cFtX$1zYJVfNtoo4xUR9#eriT zQ-u2-L>GVj%OO22H4FU1)%f^mC7W)BK=W5_rXYL{6R)|ymz(WiP6vOgCZS<giOpc7)cW(oo3?*Y6NfW_rthW4O_id(?|p6H2@2C!qm;wvmmh52B+)-#lb5q)8E zq5ytrH61;lP3RcHx$GnxR<(preY(gnU|-JIvUOxh86K$N>6CI<&Zkd^)X`?S!)VL- z$386g9MG?MzigMw8J+()l>&xowEXkTKZysSoB5lklf_aEksIzc$O(m3Ktk?z{_=7~ z^{+mL=l2(%Mwv4T!3c%qt=03>-F7;oV+pCfG%gQLvbZxKyjq1zBY245s!}lUs5eAvtc#WS-=PNG7<%TIkr3*$O6@ieuiC0;!;z7e! z0}u+afP>Usyhs)3ItEQ#lAreSN+6+l zUx$*mlCNkZr))9&;m~kKDs+FMb*W)7o6PBKa@q{7Hh4ZcR9&%QLlO2hoe#g!>Ia8C zQlWcKhn))OLe|o--jkGl(gGB!AM8;bZ0V3fSuT8WsKbMHK*NGmveqiY_7V>?=v<2- z-ITLhmUedCuK@;?lvn+O!EiPm%C=#9UKL0vUX9`MW8wKkf?=g={8|>}a$G&d5zV}xWl}e#zr7M^3@C+yJAcAi?V)g}G8FuC zU!m|UXuPHG<~2;7oP@It!iwtrdc7MfT5q@5(usq-4W>BX*;1r=fREe)2D5KwI-?!c zNow(qCHvQfK!eiNptR!7pgJktFa;jI&VvII6yAn{90WCNv8ln+BCIQs%TXc{s9}LX zmF+;V`&xKqGd!8BCo5TASh7GF0TBg_AGmjf?S>(3oj`@zm#6{FOOlF_eapab_|!*d z#(}+8Gx%sLcd=MpvWL$oNL(k0)nvVWO_v1CXr@;B-Oz<8yrXasx)z0Kz)b5HGT1(y zKr3ZvhM-58K!ePW>0q()!VANEB!B1Q8vr0L@gu(%Sl)SINTPxY2EcFgQ@;y1Z_^lx zW`XqtKrgRej@>!QG~gwdrCLfF`qn!khm>d<1r(XJ3C)latrz|_q4UMRH|gTB(A%S1 z$Xs7i*lro%O9bzo^f!nI$c@$O(d>9lTL_0^KRPSKEH$GC1R)KB&h0{n=Cg&Ar73rw z6!V~V<-6UIifAf|iV1T=9TPrwA(9~QZ;7Aj_POaoo)K&)@Aj$$9JCOY%H1t(VNo}@ zAT0jp-oheq2+K{ssO9LGwy@D*Zc}}*f}!{h1Q$6K8kFwh8J)5@pAKg=HA7CSsVO29 zuY`B$ykos!*$__^p#TE^s^H6Jx1q(iS0HsA5Ic0(-m>Pew%EyO2+OTt&FOGHuODr0D+(Ti5{sdV%z=XSx`YJ z=r}PwSlbqg00RG#4;3v+n#e&H!_u4ZXUS=*uAdT3miBLn|JO@Vx$Umm1CDpLh zHlzCQbK+{ZR^@RwqW>O5j{nVMNUJ`CPrJo`0D#Hic83EBWH&4Q_aOd|i931kn&AfO z%#ZvvXg~5axmee*x>(}UTHV{+QKwxSlcV8yJUF8Xf#q6`@>oh9FhWkP5MlrONpD4` z)I~{mH@fio=NHd;MwZg8kfDD!elw!wKkI6U4bxnaB9$c*nz!QH)D9mU^NxHuRADJ= z>n_fKP)i}?hde%04xhG%P%@$Ufe2yL9MI71bS^tEhNse@_SX~insr<7wrIs`hB6!h3MdzTDz)>H!N3)oHD`ZROqHMd%B>r z#Q9RzS90R3z0A&u(7PAyqn_zzGN7*E;Fy{sqPR9JkBJx=Oa+DNyYY4YN6bpaHv9kD z9JM7E+9|~D9X`jbtf1OMte{Z6$-le0culJ>s1-4kHL+zh0R-vd#Di8UFa5!S(Z5Bu zZ7(ltWay_FgXUEESit=TwAUC_G%QG^7Ij_+!yWC2t2KYxORWM6Wj2I{!;^4!0=5zEqd+ zSEz1!txGE4x;mW-Ooy7Sc4UWkMte=h>Iw{XnHOkKXiaMnOYOt*g1|yKdEM=zjD9bQ z`Sx&Ez)=5wv7p1yAy*Ur4gnx#?bVu>e61&8g$?a9P-{jEOWHsQrFazyNg4ydb0uUM zhz#EGohgf14T+nBtmrqFY}1}@np7q zDI&*^IRFr9i3XwTc+Wl3bE}3a1AJfVFbp!c@Y;6yd_wzFirG3tCImt#gL62sTOk?W?sVAK}e9G za5=m)DfouD{0iT5K)({+cuu8c_m!y?d;k^v?{<@&j0i(vQ{#IO_?N;fg>wvZkQKVa zfDPaH_e3IUvps;o{}I(zbQ`>!Z84nXpz07%fW5Rio6t63w;WO!ZE=bJ)ThS`1NJ+c zGr9-usJOPxumaG38ORX=Fd5Ci(E>5G%ERD~g6t^@UCx-apyj;DWt#BiV+W{uQkTtG z@}~bbcqHRwhWlTaD>=wwib(gVfHMZ{XgU4(P^6MZ%N+;wYw!#GTJ(}EZGehvfP%(N zrLjEzvj~T!QrR!VG$`evp>~-p#o9yTP&Ex+@F0THuHjHM4LZuQuW&dNG;V}gp#hWU zgR-|`X}*+^lEI+!ZqVV02A*A|T_=2@3ysgnsT{+|b|B?hrACGF{Y;sr%IQk<;cQTJ zI1OWCdvqlest+<%YJt$$i_3c2N?3;h`zL{&?gq@v35PCn0diy+|4^bO7 zpjV~$v0=qeODm-Nb0ZAn_?tp=CRA@hb$jOKAfHcFx7t$vR|In$wC*Y``m;E~)>6Ce zmje-s2;F)}t0-&kYzv*hLF;x19d!@~FR3=A>5>yUA#NGtDZ?gtP(!|=r@iH?#DWU^ zM?rJfPpxcs~&&$m8ekw~_xvBvebTXfDfj8z8 zQAKE)eU@<0x|+gN$XLe1ssVB&DBP3^)5XbB1jf?u+pFSeP>LyfOS{^Oa<8qXpuJ{+ z1r_8{Ixm!tHuDcg%ZD{cXucPGu>Kg=2shU0yRi6Ywfx<%%s7B=fR*#1> z#gLHEG-y!_c`d5`*2ns!G*f!hI*|koss)qA-Y}VJiJF!mLi25>IUlNv5DgQ*?!y#6 z4gu=54V_Xx*&aRm;_2@PpMUy9WE;yEga6#q6$%49pF2eo_2d)^j)syE?VCW_Aq9+1$?QY32@;j`3!d*wvvG9~`KzqB7|2-BV9 zM>>gQyF4y$53!82RD+cRp_ipeF10Fh&8Z~g?N#IBkNe31Ud{2K_8|E3Y`7VWcf%PC z(bHh=boJu5LeeslTl%vCg)VB$v+Yvdg=ZNns7N_ZjV@cS?ew%*0qJjgLQ4+Ew32*T zWUIFHr+^5}tq@1_*yjb(6tQFJF_kV8IA~>IW3BDdg;1z9hb;#}5A`x_1)!-D@}!Vz ztCth2s6?tseVJhkLF5$6Nj~;U@ga!GN0(d4z*xGWC=hWzZ7eAyM`50b0`A$gfY`Sr(7J{eFaPskW@ zCx07579l`ijp%YIsbx03fO`z^*CL)X{Z8ftO9ff*0|x>w0r<$LF>;O$S_QgXsJg6c z0;mEZ`7Vbk3NzStTt`uPk;O{e>#w}=vm>ZDc8y==7uif=OQp-|QdUWXVsEqDVL(rofBot2gn`Z-TDLZNv*(>$3^hH?EGhEV)6t-iv@9UpFR8%LzMpBI(OR(Oq9$!PTp{Od=d-`g{}x;* zU(Mclu2y_o8b|ws$~36tDTjU^_`}{rX>?f1$)M1DKMNV3<3Q&NQMZUTeioO>JTdey z_lL7&!-8v>1w}ft46N=KbvWqU5ISQzflqkW(v&|>$pN92=Mq|BLt2AV+8?@7V<3m+ z5(S2KUh0Kc&ZejGys^Vdy_^cwJne?(dQaqGX*YvHQ=}Zd5#zv=!#L>N&QlIe^iGS~ z&@u#gPU4A7DCTK(wV}aBdDrt{X*B?$m4|K>YnHA9oclwUm^H=kcEbg2nNl6j!~B_; zP|WMc(w&FZkDdpmTUlDEI@8hv-0#eYgdXJqK6(9!j+A`4T&v*;Lpv&b9vU_h1q~`u z_yHZnu{xU4@nmi|a`>SrK20S`q-1gh^<35CH=;^ZsNSoEb@ZW>wG22Wm+cKKW1;)r z9^Jv{!-vArmL>c)ZHI>bo^VU;-opJbhP$r&@Xh#}un2G6-w!_=j2_A`_vP<^hW?&# zOYOe=O+kWgH7}1o5=pG5yiC;dRe$|PRDXSe>TlkN>TfPkm8&`W^6+mjQ2qNi64t-J zK=pTTMD=$UsQ%|SqWYiDR~^fOs;77*>bW^*EQ^W0R8uLDmrnEHDpdK$QueUYNnjD$ zJ-V`Z>Pc;|R{mTqdVM ziDm`dd%W6SNSFrg3JHe+n_AM5O^dI#aHi3!Dbr6Tw7c64A{5m?K{ z?Q?Yn8R}Ovbvmu9b4uN>$TX2UO#?m!+dUv5rl?H}Efr}tc1I)5UN=c8f96=wz&GtL(x$yg@s zgkq!s?vo0BrlCqYIIvhA-8rdLco6hSg)YKAoz4c{0dhL8b5c<(2wit>;~TeWQOtUw z2GcDK1L3(G1c?t=Vn}YzUW`uZP)+uVtl3PhpiH2GgWTUjj#fHQ%als1!E()~BDmc0oU#ioi=&tk zj{Dj$r<(_m^)KSXAlEG852#3>gVJA7X}acvS@jX7U7KZlkdTGjU0Z?*@$oUWDGqnL z#uajl@p?I>Rnat;^gQ<;9d zmh1`z8CUDlGhQM@$=EI8=Ua;>>-BOi6}#5D`>7Cr5HgMu*Y%5KN56{13K62NtR&m$ zTtV7NE`!*$tjsVPPa_X(gvj#^cwm5cZFZ6kC&tqT!j{v)+3&IFENKvPRib-*GNR+L zWy7Uwm6&rN;3^h+zyp8F6XC0_70dt6+nYAYbzIk?wnSnc8Z$|7C`~qHu^JL7QMT;o z8<;4;1_2lVHQA1O)m7EqB~*8{YQVsV8}WX?`N;bR-!HjqXXeVxooDE*Qw2N16#CRT zYwetN?%cU^XFwr1t7`sgjH@Dy;fhQgie%O0jgV+Gl9|aJKbsRGieuHu-GdOC+8h@_ z%E+VzUUHVU(B@T;q-FKFWt!w%Pb2tRR9}KdvNO^nZOK&S<>c9j`?7-|EIc8Ao#Qqh zI3~v5rivx!*uFwnNF@2#k)%tOp0Q=M2FP*AC5&~jq`xWj5|D?x_)x&@UE~wRp^53F zH`Z&xoKs2~%BzSvc*v8 z#-vabl*Kp!5?Q1~TML=ky z+!a&RCK>nJB}J>MkA#47q`ed8F{@CECxem`#U6gR@Ei?bYj3S?S9KEPbH$;DX>Bx%ih z0`F{UJ&{0>##q<*jdp8XtE-y75e(stQG(|iG=IxzDOqCj#YI}x0s>irMlxeS;^*}Z zNDo42)AY+j$xJEngC!5qs!PcPiZn9$;LzmmcyGHW6EMOHal0ih6YR~gA(U=n5ih(dvH3{cggvas=EQw{lE0-T{ zXlpFbiJHS4p959YJPm3)fGT&M1ys+TK(p*g+e@x-S%$xzwlAYo3>k7!6O^uZ$_XR) z2ubfZW2+B$BFU1DCS)dAj&AOCJ6Z%wV%dI5N~t;XJU8`?ES#ZpiRBQ};Y^uaG@!aw zPNaoLsj66lvW&92i%AourpWUw$cEyk;1uG+M2I(V^B>9?>(Y{Z-C=d4p(%hEEm1Al z@m$f#a*ow_q>AcSz$B0K8P@Vn!ky)KqSv?U=(7};)X~tg7Z2M?=xJa6IzuagC9$~P zCQ}?PkgS^chw5i}6SjQLDppYB5L-=t5C?Ngk>?soDTqV{@xRDBFiG$~rG(x&S#B&q zT#g8gJmN<*Jm!B?UFB^~rUkKhUc+8MIL%@I@bC@p7eauSBFNZc_g|Z0_`fU`%W%U# zcR_1dm*GA*txz-6n}^Y42`E{wU_~wyvL%zAYoJ`(e zcWj9bhhY_Kh8`i7Vyy%w{bhcF(eD1KS~6qzh6su@f+N*Az9=I?k!18oeyd0f5aE4E z@M=}{wJk{mN2;6H5;`(Hkl##Dbf&rt|H^U3QbpR!<_QdrF2idR`1k)}QKnFt6aQRtcSa1@(%3cWC8u3a*UJ=DM0_ zqM%es>zGeWcuId)RJ|OagiMFpxwS^?)Duvmk1OhFd~h^DfbIgbplYHFe_~_h#JJ?w zbFgs$^$?@HK#Z=5xKskPpMxuaDM6x*rOGOz@7B=95h6L0G2uM8h+WjP&KhGPh9ql8 zwKWhFz824#C~q9Dnt^=7Qw;{{}Uy%{5tQ)>^r zfrVsme>6E7&9<@g2{}~{Yp*>jp((|->TCK{_ZKGh`F_tHcvK?&x%JxZcpl29SCy6D zRY=x;RoTQqnf{@n&dmMi_6RICGqn=V2+1_aWu>U4N;$IRGUrw2<~aA^QhPBsCRf5i zxtiM0Hr^chy%&j8n`%SNK$)6G-x3?9eZBp>snO@4DTUU!*lNO1n=WSqT%Kkwr_e&Q z*SJ;4ltEjqQgW!=!3${Jp7cgN!M3+rD}X71?jJDV=2$jhnmv$1Uo))pMuR0bJ`)q8 zeg9};piFw!Kb%&cjcq^cM}TD1zAD)f>@8;#b_k_-+xx0Yuw>Wsz!X^!4to6t4_iDh zwx0)%=b?N*R62J$=S(?33Rq;Wz$tRQasR0G+*FNCIrNCt@4ha%x7&}{DrCx_byxHz zRvj3%gI8K@wAWpg(3C=t+UQk#@hY~;7H>>sp6a^oM{N@WWzxDVe6c%(I!VvCwbx}8 zz?7g{(@%GiT>-N%?oJku4I)2qdHYLk&i`oxUABgX($$S3V^Qot^CvgdZekS0*px$i z6+?B-4$|%T_FlylmE4J*^_paMfCZ&)ku~&e3QKlvI|do&FUCi3ZsMFSY@rH$*4{>I z=Ac}4qdAtVtlu^3SpTvJ`Z;30)sS zQ;NDVgASWcyqg#^4wmefl}^R3X5!t;+VHRRgIFx`Xur!54qPsJullpY)QR2R@1ilu zt8EJB?Zj+htRozr*3)@=o1zMtGU&2n3dacBM-c8TiEwLQc8y8iAE~y*$sZ)!Zge|k zgkc-V@*=thoRXw9U{A%HHITAk)~SIQlf2rSIvf3UIfl`%DBF8eJsjDzH__{yharRz1S}D?`bOCg-Ykb+;d3Rmha#CrMAY z?Ti?S(P(Ertc>^1I7U_5*K6P@jhRdKuP!4Va>mTkrSyw-(>3Lbu=Vi4n>9bEW_1gW34V@AvfQ zxZe_6UG{udRmk3dwRR5VFj2;zWy?6#?zTU?74bkq$^N-PvN*!fPdB5(m*d&=@L-f= zHrm^eq{os{avdqETjRwTu|u}iRnKc5DO!(DdGxHK-#5ORqZc}6r~Rx`15QbrYQ{)n zzke$=6XR1J9nn-FJj{|_T089{ni>cwk@gnVd{9wK?Y%|K9F*%;!)O%U=M)({t|oP@ zUcmn6hDKl|5hZMDO9TMFqKv9@ZK^F50VUEaAMAJHc1P@693;6h+pl~SBw4j>gIAIa z74be!d)uarOa5Q$o+4h(@osNtCZ`{J2XaB1JG&@bev;60A4(fO57jP%_B|$_kP_=y z+xcWPIuhB+an$W&Z4*#3|5(=*(rcoVxQGxKW!RTRh={6~jQkb`v+N9+*Pv6D#1bgK zjqGwrJ!+mSk=C#Tnn`jbli)FU(UF;`qOvw6S&4*_C4F5LC-!oiwydkaHTrr!Atlzk zRk}|gR}FTlU_RLs9EV9fQv2PiV`(Uz_KeNZ`G?~q?ykLO%)^llXD8t!=82y9D|kRl z`?*;sqbfbk0k44%G1EHX#hQEuk9>)>WzxYy1LN2d5@#aAF3t)Kun19uc?~Jqj_>B~lO52E~ zPmJ5$KGj~%_BLWO2j$W;Na-7!EwDP~8hJu}Nz|J;s+wJ_H2`q`P1me-*@<2{HYL7+E)`2HUI0GW- zu10j`&}%8nXUMAF>|<&z%|ac=Y_;v}`(FlQI2u810y zv{AL<1sDjWV{GeGYXnKc%c`8^WUx8$iX3;K&x2O1dgOQ`2wTQW1+hajD#I zn<`ZVN47Jz4oju^GQ)CDD$ZaK_lm)l`N(#W(sgk;HnJv2z{qsgG98qP@avU}uxCMt ze8C`_OAbol85akcuftFYIK;P-BM(~Il~$MBfe_hBjvErD3+yuK)0wMF9&m_n^@x9- z_RrPzh=S5AI48Vo?cpTP!0IdtiY!-6JHoC_y9F2e$U?Of7TD;Am+^d}7t+m|#gAR$`LZ>MgUusI>6vddp%E_q-_& zqGfkWt&?%{gZVfNc@I-Umve`D`e=o2VTitE=v}py2r`l(C*sFQuhv1>g$5!r2Q?^IG_|?YA^Abx5IZp#6P>hWu-{UwEcXb zJ!Ux*pZnC-QiMbBj|h(BDAU;h{s{y$!dQP{{#LD?vq9k)6qw>xzjzu-bB)pr4~N_M zf21$L)l^D~9B+b?LO>L`MkVPdBo!~haNL)yGXqT8@qMjR4L1 z=v3Foy#I34pO<>aqvNNO<0~V=rW8LuPKr_w$%sK%MH1CVyrS5h9xk?b`v>F6I5~Tj z<2`nY!hq=Us$f|Mmwg?`&mxfS068{cGo{5O-;EOAVk)vKg_v`C^>|VTOlGf-P{cVh zitJ2Zi%y)rK-z{ua+`C`o|qFLLQ~ZpJ&#$Ak>;;U1pcJApKe?l&q8T_z*f;xn>fRY z>dDzRU#WUxBFc2LTBbLn`JuklJ}0JSC21@L<*2C}^V0uB-NZzc>BEY;!9Lroa%#t% z$eR4h2^^H9s+Huek}qkqt>h^vN7d+-m)u6VQZJhwPcaLn@h0dT*|K5_44LB-dp$$f zRZS_?z~uLHeEOPL-Fu0TrsW)82Td7#i=;2wW3H-2TH1d#$dur$xz}dvrrK-!LgGe|4LEIynCZVvvpl{8Bu%Q6qUT^eR;(=RfWv0 z(Q+XT6d5jg2L3~_tI5OG3DB|FZi~B}#yOftM z$1~u*btQ^`2#E)g#Vb!Rly;`PS=wrM&K?TQg0`s>$vXJZ}0 z2$F;!gc62dM{v1L^`Op}Wdl-DwjOZR>#o&T|- zBj=opt1DxQOX^5X*jFa~r2nilY9q*c!nDI~fKVVw7!46CPPx0TGelxcQeIBmGwG~3 zlX7!IMtwDE!B_psi;Br*oeGU0S-MN1bmrHja5;M&b%i4ysopbGHeA?E+2)Bh4ssQ| z!wD+B3YgTLm|8*`aJ7r%_V(ILT`6>(2$cjB#m+VEQ+dBd6tl-E=thRvf>h#yu8VR5P?$#Fg$*EA6&DJYJe4qY*jEKOcb z*G@UU+a?hr*h*T&iJ@0uJ5VRXSeG_}C9NI%uC(RdtlVj_uGK9f$+n_u-<~g~I$%6k ziPm!gkW_XCcCRjQpL=h9*gt}MM?0r8d=;_GrNO0Vi8F}Bb`XTUh?}bxxRDqa zvCa4UM>^Ic#|>aVx3!)?k>jl6kfoxk@|;+bGQNQ!HszOx@N?=A^>*@mC~{n){G&a@ zZDVUr@7L!gt^IOiFTT153#;R_DY zPZM4DrkrTR3h0p2=nQe+=wXmEcq@Q`LW$2iLuH5?9&<={v&<-jDET<_a%1Vmuu(IpZdZAq_FB8x_* z&@$6Q-SBN&MsP~#66Ldrb~iXg-(tJVQ(W7j<mI6#qcj`0=TLJoHIbalpB@e-%rjf(eUc_R1g0c!)m&IYR#;Do%aBfEtwA1VchS(hG`!@fOf^Rnt zi9`lknfo|LT~SHxtjq|EJglYtX^S%y?bEj!VYw`*B| z5SO!$92B2S6DMLjYsN#7gY{loEVQe414C@ekNghf!=vP~^LFxkC~{EuR9Rx}bPtip zz}_=G9M1YWvZ!6}aX`f9T4#FrVzi01j>RE5HK%!c1i!eR#M)`j2#h>eoE2k!nvLLh znCo>_PUuisgDN<3Q6o(ctBBfZq<}>h+GW#2YZjC({dRVl#v@zk$8zXMdj{I}V~a!v zYN;dbac!ri076`@MpHwt-D*@&h)n%~XXRx|JN@CI$iaHY52fj|UA+^jf}xb)p*4d+ zA_FxDn3Gg??Yt!xhv>e2r&@KiY+s-d*|+ah?($1wpIWvrp~&HT{Zg5wEqnda%g%l? zL&{BLc~#);T9rtY{F>9KGi*D+ZkgG|p(4uJNG$8r1dx2}MP~0*(X{JD7KiBcnwX~* zYqoY?lNgOmobm7*qDxD5O}iN{0wa&Fukl`D(zmQHgF|%o+vLz?yM7B0;<9#Z6Oa?hWx4{AKHx!i$nAeoL7J zCH|S5z~r)WtU@Jo)Tdu>rcb~2<1)h5i-6YS<&DSo?NJIBXxSbHhqXd$+`6@(a#hu| zv&I7!SvVV-Ul3ApIG1Q!Mb&OLOaRH}$0jt)Y!{*L$!=ZCu^FL}$!jy5``VaqOOAIr zF!K0ba5PHp!))0L3=YvbUnL>9?dGc}2G&bm+FEWYwZWm(v_KbFu$HcdXlH?XC~|Oo zNTSlR8>HR%2v}sH{=juH+6&cAe;62I`w{>f_oFA_5G_mKvB<)fUW^glqy~1ombN%V zr@g+I%2v@P>~$iMf!2ZvqtgrccGiLeBEBzynY1=i0*6EfY9gyRHe?${V2)?`X~Etq z#)xX_cD>cWuoUlEMjR`np@ZbZvot9|PT+jmIw)h3mHIC+c-rYdfDo6xYI!90OQ^bP z*Q*>5@j2>VjfaV$-fq-c9HP_i#KCHKSC9<6v{q_ocWOMc(Ff^%Ef=Ys4^qLA%h%fs zSA?i$X<2Uuhv>9%U&+&+zht*`c}qJRw+fZa9GS0ijkGFOyOC*NQtUUI!8S0&zPWgV z4chH{Z;-fSJh+RqK=a$kB0Jt$Ce4#mWd_Oy$Tpyo`l6*qp{7gB@VYnT_<~ZpfJBP- zECqJK!_D41@UZJyAm_A9%2feLQdh3S(JN%yM1896(574gi4<3Cxv(#B)JLZOGEI(| zofb)>B~)hGjWdaXH zj!O~8bT&qaz3Or~{5iCl zIH{Vn1WWE~5jXxh>g^-tiDu35Zd9{IfaIgr!0{}~q?)ju)`-!_BpP07RStroV8fCL z(@qyEIC8PS;D#VmW^-SVDp$MyqVdS~u`8MSwKp7L_U@`J4$*ZF20q`@t)}+{WPX2XKh$+ ztuiKAIlF~USx&UjZgxu%$@o6*#zZEZk<3HeJ7b$c6FaQQgp<)NV<2M@#}70z$*;z* z;7-8NUV6kfBgsOHQR4NWq`VftKA0Zheo!>C>O>h6c??qK^r$4g62FgeKgJU4mjCoh8TRrteN=rF0t94Ii=K$SIg&e@Rk>H`y>)eNQArs_ zjd|bvxLsP8W#re?qE{3*f+o4l>}h$o50;a~7#T-Z!87g}(^$0vcz6o&f&S2nX|v=g z5%P?Ss5rGEIB*JZvq}KT6OxX&jAS$#s#XG`Q-ox!&$04SW#7bDH=ra8gNy-)Pe*e! zd}~%+)C82Q*M0TO5DWNnRHdo&refR7DQS#JPBA#_+m^GUoOuRZJ*9&rW0)G|FUC6L zs{PbppvZ91mq{K!*j25T;qmjI>k4#WWC_|(e)#5alAc${GYqThEdnIlwdKs@1jXLN ze6(%;+xzS4MoSE0OBX-!uw=bn$*KomM!r0SQcpYaJIR;T7k^z&lZ~;QQ4klb%xN)M z&X3A`$XYr*=Q>H3!=_+rirzE8WWK6CSss>aJZEZe zE;dme=l?nLH-Gy#@_)tqRpeH_c%79q$!AHRi>{mA35gWRZ>8x=@N9r9Ngb3fZqAwF zjw`*s!dWvSICX?Pz1k18{?G=A!(~aeO2O|Y54JX^Hp1(0$(wZX+2k+NWMQ&_F78mt zsg*X$Y80%Rj&fF-$FwV9Ygy+oVVj zG?J)$HZu2pZ0{_`lc8CSCF|?_NrO!B8bg+|JkW)yk{|*n zKlLa1okO6i7BbRzCKXyGLqb3~(zd`tX13ZXFBmR_IZ^qcEQ%bbXn!-=i_Om=2{ z=u*arQ~j8;qUPv38A@*$w89wynk8#p_nrKJ^o|OWT40p`ieZpg&44R z2Z_bozTGq?IZwaBO^Vy4nJq(Sm=9fP2tm{vuaI4OHrkar#Qk$HMf``VwVa|j7)w)w zNzyB2Qr+h>B9RDDLm1A{pXZxmr0Uay8DYBoSkYJ{mgd5%(az3n`buu3MJ=kD%LvYi zzIG%EjVu?V_ez~0BTOv%Jf$&kM|I1Ma$<8snFzQJ;ONb+68K?ywEzB|Fy#s8kWgLEU->YJIEV5iqS?=o-#yO*`qD#8!Rj6dX;F*^PX+d*lmvTYxBXmWO$iN;c&&%!Cu15we zvV6jFygov(#{I*WpPLeD-Kgr){FF4>8g)rHmWe(58CDBvleO#N zL?Q#n>9f(ITxadZsfQv5TZTU*_0_IrA~5otM+45W-WhJ+8I4vB4e%e+e2JjQaMi!` zwY{UfM3iTdS!hiZBa%;S3;XU9WQTtyWm9Ht&eDnqnl0dw>!Vlmy|FAF_icpV9QzXe zVGmv?nLZS4MtqnDTO3S&9h0QT34F3MQbfeJ7HZB1WemAM!gKvz=_C^l(Y^#Q^IqXJaKp#?BP6lnj-? zq<^2En78(D=l#4l#|e@oRd9|8R@Dk+R1$xnh!HWqKRv=$y8MqSb&lOx%dBBZ{hp$B z`wyk+&Y8AqiDOXG`oUo;WiEN7dJ@|VLk%aacKZk$)9#dv=unoV+~76%6h?Qu`Tlqp z$>6aQ)+^l>zgD+Pfl2RM|0RweND_!`_mAX&e%scsfF<>ZuMZ~M!|8!IeeON}`hnaE zFDA1YbgJuRl$=7yb%ANB@5%uJ#dJ>y3++Qq?=D)dhOHy}iAH7-ZPY<`Jv%Oni z+`?|^tUr5mE5O1LBZJCNc;RvwDPkvJB_fWksH)HY_uG+;R21r?l2Fg34)0D6q_9e& zKW|nd#Y1s^RxQqx*>r$;9P`QpoaC4-jXy^TxBnJ|t7fIB<>oXcdbZqgt*hkQaC4?q z6zcuz`upS850x~(e+#uG92CRoCN(yUzY5tQ-GrrD@4w!LJf7(|kq|;rwhiBkNS=uz z)o7%$IB!EEX~XT)>IS2Y)05D>`4R5&RxLMr3oTbc$@==ZT1cGuE31V6d<&v^A_`Qa z$N64K9lQ-auE;2uv7k%~&*s|*!00cw@5|9_XDP?=EE&t7qc;}9TbT986u>lK0^4Cr+6eg&o>Q^qRH?p^J7J0 zkx1Z6V;)zuW82cicqF?)flyp=qo5DX2kCv$86Af(7DJUTMJDx6_>F&oIoV7C+#bBQ zvqTGJt^uU!ngprjp;*Q+5(F=nIg``J(n~dVMjS5-*d$8;rvS!?Rst*!D;nidp4vOE zE<85rrTfi}2HUvF2Ij=J*lOB~mf^b85bO;l)EdfiR<})1T2xYg|J&pQUSVPTUI_`zaNKDIys! z<6XoTjwDBy`==TX8C!QmVEIxwQl0x&g30@mE8&aJ6-h=gxB1pG#3;l*Z+@4gIEV_> z{W>E{}P!#Bo?M8iM-^oZt{$Y&12a<)r8D)Ui06W z$m8DPTiFOuT_GcQ(1U1V1?d=<#fAA|_?x5Q4tnGPb_&1y-`{;&{Ou1EWk&Ej0BnqS zKRlwey?6 zwLru@<(f`+(2OBbRTCbI=%)v`Pq3T>EF*rP8lGUphxEvmcbG)gwU*vt5&hlaXlJSY zKrP$S0ulElE@Us|^~;FdsHzh}#n?ybz4Yy|4HU88DP2O>a>N)MqMjI;utC+eGp4Mn z%5X?TJ~Mhf7#*48Ito1_>ar3&ppoI7{n12kbGNJ!gG1C4<2~f;(vFapHR6zne99PY zxG+Z5N6Yczv55Z8Us5k_%i1tF9<}7;Xo+fYi2A)GdsK#rSJfwgLd16tafgbk*Oqb` z9HRcM?p`ft)39RrUJ{nmvfMzSgzx-ynH;@oS#EsB7YwlTor7_vZ1QO3Jft%RJb}?O6!n_{0{Df)E&2FpD;K? zJ+UYoS1sjrNJKulME2R#%52%&2u1AE2mu@;jX+-?erjn01u){jE9ruDmuqRISRmql zFG=g!Qd30N#hiGxkKi0_X|`-XheTQ5eYHPICd`&~V1XR&vN$gboWa3xYRm|;zB$?L zn!F5ZG&W43OWDA`1w(aryocaKff#m=-VAh|H7p+; z*}-svyFOB?YGhKM?{=Lr+1*R}Q-e$An9{|FB)SlY#z!x|RQ1@fK+R+_kfgdEs3bzK ziwjqgdQ{hD!{$IHrGh5)m2TIXqurhH9%>dji8XIS&YNR+%eW*(8}i3#lDw{c8^(wv zdfyXC8qyiO90mv zB8-0CpUj84Qy;JR>t-3(kP4Z^A9>mK|)_PuN^J+ zr)o*ORK}bLBKRV}ZMAlGX-0 z^H^{LM#)Kl<0VSVtwkVUB*18s5_Ml&V@tRD@vTr_M*)#k(h7*_P~~Va_m3IR28z(9 zx>cR%_)4l9xvobN{&cr1x&d>I68?Dmv$}eSMfmr+-B;tqeiv!lv1*=o=Y3?0#k~UA zd(g*JRSh`lZ<7A#sEeGyvr$*}y09`kOm^fOV%xJMsKTcZmnej}A+0p4H*5-LQ3q5K z!c;W%VwM#!_az`(wQhS;v5ZSnXnp@9Tq z?%{eXJ^0(tdsWCJhW%oG9_}2V;JBwf>E-S1ml7-~G0oWD%=NjdjgMDwbs8c@BoW8) z=wLpWjgMfScHvFKCcENnh$YGC%4KlU!%j0&!79d*_b7>ZXm6(_prm6L@-}<7bZN($ zT_{0LiOp)gKfzr>P@ekY_ce(VWD=is6^xFnZz5<2(#mO4gI7VK%d|epfuHrGlITId zK1tY>h3#Ux&Sar)bZ&?q$*L{Dv9jQ~F%-Cz4>wBHOq>nDQ#pJkY?8yJV#ue+dN7}B zXJC7mih?B7RZZ1JY;zK1&~V%?r;x4;4w$r@l#gEQ!6p!2n$l!zPRbE#iEz?iU{v6i zvW*f3R1&fckKUBGo!4wbLXrxWwrN{gUWubnm8|``R%4P3t|IdT`eoOhO6$(CWt12h z?OjE6=oA3UO8W|8xCe`_+#tR=-LIXFW6mEv8uViRamQ`=e>!Q0WcC2W#Y7a1e23y*=GxYpD~ z5h@AUjVdC#)-)R(B8lMQG`$PEOz?vo!WiEf?e|}fr?Z+WZtvneo`*uQn|bF|SK?fC zov+!=QfN|BQDP@{4`;%3Dvvc4rN<;0XI5-MjV4{0lF~_M&6!mLlh&=daXox@(49cD2z1{*?!B$Wny?HB? z9=3wA(%xCWlpdCpAB5g4yA)%LtMN{SU#B56eP&-S!Bd3qb^n)Y%ZA;1M^)`03~{*M z>)zQ2;vK(a`d;_`MiB2uhz~Y`_#i_3w~ZkFTZH&{BZ!YZ;`h6cHDp6cor1$(al2KbKZDkDJy6<(D z8l6q;N@h z*3p%E@0u-R$yE0}``deWzOE|QdQ>qgOLf{jES0IfXGJP7V3Ov{?;eYSd-UkOHbK`L z`4K3IPCmR>?s)B8bW$23lHwd{>&{zHnF^LK>mK8O^h~$j0FF^fCGGa`&tKoJ zD%#rZ76X$|+RZ#K6>jZz3$P@+2$HX#+`E6bs(9@kfv#IBWKv33u|JdwxOP{Ga7lL= zEKl#>zW4CKqx)5bY#$-w3YmhFcq=9@6?Hvpw**bncS=O<0{~q4g74sxfd9usSWaJ5 z)nxmve==!omPz_3X-mahyN@blQp%wJ=9>ris*1VxppSt`D1+WSFBNd@K_6gAcJk}n zcYk;9zBW$Ro5P7nigQnHKf3?0s`}O|kAfxH8T+(Ub?eRH5ojR#_uuyH0zxf+)+7p` zB)as(KkK1b_a11gZoQFK#wP8>=%**QpZ`u3a=nq3B9rpm^Sck9|NG`Uih?EC8T)j@ z9VG%K(b+$PqpDEr*(Wh7sZN`Rr6R4jzzCS6In$pnwksn0GfutAmnPLpI1-3Q-QZPx z&tkh2#$8DWHr_#?toFLKXX^WP^Eon=5_&dxFtD>_QbyO5BT3uoDhlWDbkI>l@cl6a z28!))-Im~R+FiUkGQs0=FiqD~gNi+dssu~g6Na|06v8GN#Nuiy7i2tc-C#G<1_H^36&L?ag6FE_vv zT<8}hjN@?FpFt}Pl7wRo%8!-izfLq0pBqfp+Z8?q*XVFC9j2$o8f?OBLJv&V_afHa z@eC^S)oAo$n4Ge2h$_sc*68HF81a`*bTybf*|h3(*H*+P5u3W}G|ZdXbQYDRyA<=8 zm>{LxGIXd1sOv&D)X0y%nDGFiKS_YsCKw$o%Xry~*zHQ@;k4T}thcjkmAK@LdyPy{ zs#Z7AYYZsa;$HJ=JWS%WH_>Y>D*4Wa8r7NiH_>`Ye~GyCUh}5aTSTOr>#eA@h;3JO zj<=`DB1&y)Y@$CZEfz89GYXsNidun1RN7?NL|04{NyMe~^4riL5t)wg-b8CD?GZ8Q zVEIk7mR20WTrpLvI)1~-I$I5k3(X=^Rh{>$>dh#LFx|ws7D59|zMFEq5qWG8Who2A z{!9*Dyyy;>N6B3NP5lvjU)%tdPOko!l!9`6tmGIUA_`gV?Lw@tBuCK-?vEQ1rOZNU z&d1W|Af%j5=1ZHdpaX0-1SKgl9Zj?;vJhRQ$aJ-CifrUvm_;sb1w~EZ@WTwY&zll5mL|q}1fI8A1a~!n1q0k_2_T z1AU^nGPc>wr%AcwnFS-mCC3omh7oI!jHIizJYk8$Vw6j(xECv}${`GYV5On%U zTT6N=xDIrv8waiDp>?2x)TfQqB_k3`}#U@jR(PdfrZ(}H6Qjm_C9(~SmY{dvk ze~o^MmgkqE$KV|7>9u8s8z=^7pcG{Gup99=k}S5$^xa%(LkGF8iLpz$m=30T(YZO^ zusFM*c(u!Ab9}++qWSbt+Z@2ac=9ZvB%Xx$CgfesDtptb$F4s>v@Ip~#@ zd2L+>W$vK0s#{0upxPX?wr19W4t@{^tyi1tKnJgfgVuJ@I?xNR>o38IK7wb%ShWi* z;6rc-hGi-RM*cqL=2(m*799=4lAS8e%UKv*)G z8e*NPjGEa(x4j$_IU!;LbJGR89`nh+B|CBAQOVHm&Bcpw*@8D?UW9+yrA4o z%~*^zlc(U6;94TV|3GCc$~mUA?u*eIJytRnMa{(xuq^1sxS)%^woEqNpUy>OTCHzz zkVK;qw*sb4&9%F$SOgB2b$BTh3)xpnlo=bF&8;Ss1SaQsxn;(vH**7EtOYXsZvKjz z5dDfr-C!}CF!0(I*&MD84QP)Wf(Wl4jR!9#BT@R|TJ9enPLTmdTO}DyAEPANKl-T~ zVt3z<9)s7aiOJ~YXyqkE4Aej!cCs$VUv#^Yq*7U>n=5Xp=Bt_$of5f&-x6zZ{Uwcy z)ZG08Tm$izc*7#&f-0?!Gu~Y7hR&q<-hL0#e0orBu6&{QXuh}ATSLFmd@CnJ1t~+9~NTB?!C1oCE*s|N7Tr8vPeei`sH(=q`MI4N|z>Qs8oJkQ#f^hazrIz zF{+QOPh}uks;Jdk#;6=qurMi|;hXS4#D+yiYzM!rsl1@>0*4-1>vM!1i@>25Z|ie} zWq;t%t-n4;aM=eAZKABt5!(Dbu1y?`E01qyC~)_2+Uf=}vTiSWlEdY}PNE0ar3p7W zZ+RMQC=YOfm+Hmq@`MFuC=PD-f!^LIP1t9;;ERLU#^gHUbqf==oI(dc8u-l?C1jus zEmNh#)-6ov&8JyqE89Bm!{d6gC(u`vty_Z7hdqJzldMY+I3tXLvE216=g1;!jSZF~EHOPpY1yB#q1aGU29AdCWfo(+cPMvbrqz|Ro{;)a z-E;=F8-bGWT0)2ug1A0iRbYmDzM*)I)8Uf#5@}_{vAaARXg#`KuLuV0MbaFM=kxUN z|9T{0tHGBA8~m`9(g3mbXrB5Wet~7#I7gV)e0|NA2M7J+c+h$U2~(Rd2+Wbqw#lBa zEU(v0rK#?`UNOSL#Sc}Xc!9IVNwCp+JkNbme4A9c!*gbXdVN4dj>=Q6i{0H|g#{H& z^rss{55t4#&o_u38iDBAXRuxqhbfZi+B>=)dYHI~uCG&E4?T=DqH8b2dgwuc6J2i@ zuZJEqH_`PfVLkMqOo_h9sV!(xqHoe@3(D=Ltdqq>2Mc6Akoy#2BjUnA_&4>Uupx~r ztwchlHVL15if&lI{iyUK_;ElAk!sZe{2P@c)big~$+4IobxqvO|AZ{ZvM4n_B&jMGQQ@&#m?R9E~r z_Ed4{B;6*eG|csJ`3 z(Z<*&XhJhZG%q$@X)pZJ;p}ob9-_mSJQn|Qe7ukOH0=X`i*`H+FQGoF6d9*OYvBzT zJJ*&gfIO5udzvPvO{4;4AfcP=E*{=|ka{ZkV-igr|=4 z6@s*rYsfc68*1@Rgv5tT0ZqG}^XUmmt^`o{sUn zZ@5{K?jb_e@RsqZ=c4kqiBCI*SH-8D;mfNBjq%Hx;sq5EIJA|U5eRh*N7z*k9NJyG zK1Xob1`cf=tk2;MgJp4Qz8L-n&d7uB{`YsE7T@3A-c~ci&+FGWdz0yWj;$@bDiDaS ze9cbv{eS&eeR>1$)g6tffcm)ydgl)A2~#rheP-?z25F}v7C*1J%#=2m8u{D zA@J#5Z$6nW<_YeXE8-G^uvhv!bJ@aObawjlQD-pe=ZA+@R0`3|afGf#Bh?vq>={|5 z*QlBZguth8x@{>}`Y71dI-Q3g=!gCJo5R8WYrTb7julH`fw~Ter8wy(4%L#Y8TUjWB(9=}r#P8TJC*qd8+^7^b);rELG5}}QX|cG zOs%K62H*a%bV2=Yk-~R~c;9iwW_LyMP%Ot8AsO#2VKAtMStq%Q_qt$_nl*C3JNwB(t@D^4gwoN+~vG=PfGY=&f{YV%;Nlxt|c&=34t62*kf}m%` zpsX^SR;z8}J5NleE%UI>Fk7usJXC6z{X~A5znL#a2OZu$*+IsN&ImT`th0}QPLlYi z26uMFNDKJhIgV^$!>+-{?M)V+)p=r9GJ5Ix@{5(MBnLpi3&>l6aty~W$0e1qn&D!A z5bWrH0>NxF>MZtgtiN<2=!ygY>INVZoZl4!KQ+g*{A%tU!6{pIr~KR&Bd<6rIM-6< zD+EPXGKt|*jnS~7Rn>$kwN7BU1P?7j=2T^}|so4;GRn;^G5jhJzV%H$D zbuR4p=ljObIP4s~(GKU;R7n6rVzjWkc1oU?R-vnnbq_(QPmK=_aNMguQ8w^updNyt zr}1RDt`{g^5ccf&K#rz$5X7%z5LTP5Es7ik2(bsK27ylIu2rkSK~P>)gFHzsxz%(| zz#!~d(*@xoAHUS=uNA97Ikp&VfLq5yR6p34U7cs2n^*vd4MR(RMW2Jfg}PUwwW@d zW*lrj7$}mQmS4&~>(%CnfI-+3c$C)iYGcs>5b%cm8=EBa=>)F7DK@QVX%Ae@pt6YA zDIsFlB9ih%g)?ErGH4gVSqs>a`xR9GUTt=>C|!d>Sx;8kJ1cfSXE71-ti<;ZJIE-M zY^JRytwHHp6hfa4M+f40V6{#cFbI3eKfSQ&U zJyKFFC)o&be_5@66M;2-`lvrc4^M6G)jDCoAnYZv>rL>;uu5&O)(Hj6F6mOeea6sW z42@jzVzM1qSxssc84n(S${>hef1 zumvfi*jrBev&tE4RSJVtn!irXM}J+G;!IXsK6(hseF?b-8x|g`sXbuTtUE4B3L?yn zNU4A!nH+ast$HkyWKOV1EXlj`Nt$STwFnOTJ>f3Sr@M>Ja0GV*4rq_`!ed2=frRU` zJQ67`h$%S62zEAeJi1ov_YNps+?+<*2yF2{k*hJa+Ef`ZDEAe4gcX^1PCK~!d+;Jz zVy~teESl_H;vk7bBh?o6?xu%(H8EDJt)(nfMTFIP6B5aNFjZBn?X?I_dHs6Yz{`%9 zf?ll^479;u)x2x6@hQmF`n&y}a96QOiWLJcvX~kpxx8n(nx9Rx8SA?q@+L}8}4kn~d+_%QX$SG}#~?D1f7 z($|8K=nA(FH?to{w5t8MD=){h1!i&hf$*>CVM*t#rV<<)#!^6IsVOr-d zVkQld9L2JL;vD`4fs43bN)Fka`1}j3C3Wv=IJWR=zrUEHHEw;r{e?YiW49D=vQi#oTUScBhN|M3FWuOv@x1rnvD~;5v7)*}gZLo8A4d#;zpH`sJ|&I{*2v>NXl07CBLIeq||Qkm8dEVb`H!{%y7ieDS1Er$7Idb+PD% zYFHwdNeNK=@X_eiXPpO#J3^$QM!w}}%{T)*WH)F}hDBuzf28PkZcH@84?}1akVD2Hm7i#D++sED@{liyu(N zdxpJ6$Sp7A9(+hh^QpR2gUwCB`lSjZ5VSk{)o&d(YUOfpw>Jn1%{%r@}xo6-prkx^{5po%4A*NVMN|CK6Ru{YBn2ytE?t5Ij zY>re{;1wU=_9Psg9qhTl6zKeJ)ISnAF1hcfvo5Zvg6h#?+^W|gRt&iUlZS}M!(Vt8 z$h(58u^RfH?;-M0D9`-6;s?K#2qUa7A0Nq~EmT+MnGIEZHk!S}8sE%D=Y;K5ua8tW zBb^_vp%Fc)?v{eobx7=-SNd|J%^~<-j(R&w30Tx+YoM{c6jmk6<<C&LW|&1pLlD z?AXr6J7#~(lH#m(TJsgrm zl4?cNFoy@CIigD@quzXRu<%R-!$5S`!Xj+I;LBp5yi5XrqHfJP; z8M>jEW@}Ch*U)yy)R_Y-E=7{KXE80VCO6w&nzrHKXy`Jd*Q0^y-!QR96E`q?m?&X` z08m7RF&`Vk37T_4Gd>(lmN-J9NE()el_VadIRC)nb-t2VcB|103+h@? zH0QXDF|;7`XVOVl zZ9$7rylZMzdWICCzhk^^vSSzb@&?D0tvdCoAH)$FR+LX37-fC?&V$bH;n@QRMzj#4 z;~!yL!p*udZ-ZxL495()PWNYU(!G@0Sh4W_L&`#&;^TYBxrEVS z)8e77ZQXk!&|dXlcO#=GmY`wE@YRoC(=lf%qQ`i})!TfW*j8t;|BL-Q^n|3~$M$4= z$N~q1;wMimmfu&lx?)GB3~2{=gs_&E4)<}y?7Z&AoUs{=b#G|6QN?xr3Sp{1i!0B} zb^)c5wOOVE_{}4z7%L;p4sv9)eD{kJ_c6td6=7M|Hc}@aU!udc8U7{!(wv5>B z{MfgHD}g{2cIN^d@8C6EoegbU3ytN@#XF-nQyjg*ajb1%zLZw{Ub2<=Lv`sIrb@PwPwQ+~*@n$yaea6utZh^WYnV@t zDHB#=X4|B=cDrubgnTNpV3XIPgFd=||6ad-4+4}|iq*iF+x!pFNhLG5Pr@075H)=( zaL$U~`_SC?#bqe-134b}5Ps0kH!^QY54~&%(5qqK&APjjelp;4#TE3C}h_O{=o#NID6k8%rdoyJ_>LCbh_vsVnL*vu)*@KB#K~)Gf#op zv6v{3q4DE>J(>unIP;951*SBn-o)&ZS+9Sfc~-5r7^k=>MjWDQT+E+gd)K7cQEk)E z7ecSE){w|h^j&f0E>ja2hSP=t;U78`dcziY1`C#tyWbTbc_x2sLwLlqD7Gou%#mZ? zM-_2Ra)B#uSe1z)cks8?n$T$STxJTz+h8i?6x!ew?*-!WRAkdcA#@0ve2AccDu4!n z1rZx;SxyGY#u@t;q(EiZ;-lMfTB^I2w(~Vq}?5nDP^+xM3)rTet(04e&@IV>&$M(I8IO zJE8oMAT7o>E$5hHD6rEMNzw6A_<>?X{kTR{8%3oBeYQzKNl^TKwV1xUxPUGr?R!dE z>_wOjqjX)+urQ;>N6X@?s9{~-kvudWv$z%QEXK@Dn~Rud(JoVDRT)m(yuCAUTGm~@Gtu{q%&iua{r%3Z+YxIdCi z5!%n5;oqgy!_muxo>NGIUwi^@3SvAE?t{1=TgwO|@Zy+$a)Ypg<$N(c=pIesHy9^| zLB`cLgfZW{RIhxNLKheB8nVt4lA*eMZ!lYAl1@Xfpc;Y=lE%S&m()-MS)4JhPYI?l z#-2@^hgO1j82j-ahO}Lqx!0ZDYsZBt1x|}kbzblW3qP|SB4D^`rLH;; zg$2$3L&_cA>6+ahS#(tRvHo-IMrj}_J_y1|FwVrpO@%$I4=RMEmX3{whG}5s8uKf` z;&LS1*XG=u=`>f$Lg{|okau!rX|TROrjGo0j{Ng+-K-*wck1h56(Ogde=H1aU$)s~ zbw#Y8O6=#FmXO8CuS}|1tw(KiOm|0;Eu_(0Sc?%e6Lj^pTddo#Jym&qSr)-`IDW3xX=y$-jvjQtr;C)apFHL zGJ3n$`B-_5QfJT#I^TY-=?Gbz#QN2MgV0ZL^W_d|K*Cd130G*=fROM8jxJ8whGgd!5t{!$k661$mic-5RMSVYxb zE5H_KbRY6c!M}q2Ha|Aw+F4sER5HNj>ie`Y(3E1Z{ywOzfX9f2~ zS%o@aoTsqBv^hD^d1eXs?BO^|LcT)H7{5f>heQd4plb<=e?R~)D)Nnqvu2WL>;SlZ z_aMusKb0=@1E-XNuu!XuQ4bp+hxRO(YRx~bJNmrHhDJ6-NK@RzGS2*g_3QoD2t$^I z>@zHxN0@{m>Q9dqwNl~t@k+r1hqaR#@}V5Vb6YamH_l=SER{ z`cq?HJ@YbQ>b7h9$d;)ReJ;IDiT>yO9utJ9Rx{yuQ{RQ<7wjb&a7yrLNrJ&qPgXlUyV|jRDs|4R zFa?<2g72$aCS7&$ZFo*(*_9Z>^}=V%E|#%PXv0 zkI~^m(IrLk5AgnV>|e}dKR33(vj@L@@aVZ6sSkep{QlFg#l9(7tYSN)kvA(?to0p{ z!0d!{QTwVgwtsI|PjxG}sE?^81K$OF@%Ls)(dnCOv9R&Un?X!9!9>J00J0@$?7s`J zOJC#Aw;Rt&K{SMKdS8h7+6@DZgwQne0A{CIE7-M_Y<-W1V3&MQN!(3?>o5c&MZtTd zO(2Ua4+25w(?>`-H8*DYc|_nG;7%-w#YqlWWQF`xQ+vGP)I&m}~PEUYhx%XEry+ZXcJ?L7vNzJlvFs z9ZwnC4aW#WR2$zHB++u5>o13*L#$SbCCG87%D2`$p^qX)D=y!bKb^|z*zEBr`zgbj zZv1|6yiFr<_%`rca0P%}{d9l1X9KWRA8$Ct;Je4IiV@|(aAJ13C*c(c3JL+BH(*?RN%S(OPn*qIVUKvH>$uH;mJte z;!ixrFvYb;P)Kt*lCI#v_pXUPQ$#HlqRg~VgC^K43R;&Dab7}u7SpQPtf4EK%Z22i z4Nh3&#v=KbtwW7gT)6{uaX`qGQ@l{;yfuA@>dWGt(z(soqhiWu`zMT(AV=5?%1 zunE4}O*w8`jyc;al&{mYEj?sxE?Ql`vN3Iv-ELzUe{?!o6&HijZ zXCr8+;>I(Fia-op83rX9B8E=byF67lYskbA25@O^a6rX}ckCUbxax7SkKiLDE{M*Y zp{y6|o0aX}Fh8=W(7>~!!M0tQxDp#i4_I7qB0RPUZKQ%PIa0GV0DCquH5zmldF9H{ z0bAD+MqtGy$7wbhECFawTUw-9Glk``1y*z54;O!13Y7ASynz92^A=Q0vJKR1>;*!kVD|d5 zmhdo=9gA5(-S-QGt(~zX9*aV><66#$leFKHS+Js@b56Y&L*|z%#hulX^0ne15*g0p zBrCj5q8O(~y6H0XQQCWBsNzR=#*0^wp9xJQ!2l*eNn?hnFx#JH%$|e@@}BB94W*0w z4bq|Epcar>NQ+dwk7kn_kR5cQn$GS_`iC#D&Na(Z>C^;bsC3ouuij5HWaM3KnyisoN1o5#X{FKvb>Q<}rQ7 z$gQGRc*QvhM~q{Tu31+21jk2cHpiUX{!QghA&V=rK)LUToD5R%EhmBxC{^qk#SS5- z>;lq~;VIOjB-B_S>jW$@pWg!1H!U?5#y+eW(dKp`qol}Ks#R5fHE{91)C7!QAH@t~ z-_F-k9~c)R|KSpQiWQ<{1dCRR62ZZ@C<5R~MCSXSmknGaS2I zNNb*Qw7PT+(@2vhx0IOtYw|dq6*AjrG~ci4*Shwsn0)9)PXvJj>6S898CS{|)N8Va zA!{|axrfq+C1a$zt6$x$F&=*I*V&hMj;7r&zWn(={;JC?b*cdyj0(Pg>x=DwbVVy; zamsf*|M-hvZ;VG_6?b@X?7ZXhcXs|Cd+u^H*+ufT!BSTJGD}6P3u9lIgEA&P9lF!I zNO9KJH!U=bl+c&TJ_ieAwX*qla56~0{k3^!@(?*l>rNR>XAX{ely+uG&a-Z*w{gle|q8J<8?v0kMA&M}If3e)6G#rmlxMMWObh$WM+E{pap$;Uythh1d zR+5Q{gFkO;2AK1Mg^n3$@J3__X#k5~JhLvcvV8E2jgWA1@|m^Dtsp3g^in5Q)kN0d zJ*aCf!eBD9O%-p+pEh}Ox=8G#ny6vE^wY}c+b%nGfGBQ=-2u-n;+yZvWh_j&Z7l)$ zO^O(s^$mVa?_j)T81N-Wox>?UGIY}ZcP;17eg+Gdv#F3?;isaYT_B(0Z&=j?e)plK zj}ePc8zm8C9ES#ap^o0*in&8UlAT*6Sc9Ewb85;Li9`vUw7AQP^u!QJjhr#$W__pl z8cecK5&mBhv4z6wnq0SiCamB4Tuc{*RaPJ}1pFcF=UceFnAPN@zD`Hd5Z$?3Z;F`A#Ra|m=UvP8oBK+2+b2@9}ggP9KwARnapNUT_U5rtD zWc$-CJMBJYCbSMRx!^7m)1mD92RLja`R9^(xS>Ot?{0#?63@On_B6ynHbaYubbz>gk_p?5qxQ)g{C3xTCKY*k(0w&S3QajygiEwu z^%Fb3LGSJM|C;XBR)7`Tf55h#HKxXM1dPpw|BNJyBiX^lfBT0x+Z^(A&;OSQ_5Hy= z{gbK;)Z^l4{+nC3u%e%DTYF@CI@`PT#VxNF7*rtNvTolS;0Bw~?&64k>q;NoqvO%5 zwuWo5iyL=^_N(VlDz=EvA<`MvdmpRjB(Yn=l8J@nx2|8sNOdXR-jT@a+{&~aSHAEJ z6U@SQ@xY&Yw7mvTydi>9g=3u%xWO1Dv zj1rPW+kGhTd3lVVZP!=L*`Q**U0oWd3a$9$uKk;e!rPsl-P!b@b61-DU6DXfVht)P z)O6%`3k8>GI^i@X$whX6z?K~T zRCe|NTa7+c&-KOjFMb}= zD6ryv%V+K|!u-kc>iWkyOge)Xl1~bqM0LZ4EaDYCJVrr9%Af8=E-B?nMDdqmJsOlQ z31AMHG`}pJ1>wlN2~=F}i`W2c6XR9mx0h6x@Gq;PWb7H@s%*_v3tas8uA_w^;!{6M zE=-er+lg+~-voh!N|FW}{+Ll=po&ZIsn6$8W=f+CZC zguAMJH?=pJnLgw`?s%CX?gb^T?z&mcSEtrOFMPa582lFBj_s_F$e z#YsbAd*)4pj<|aS`X6-VlF#KF$u!NMswE!P8}-dSvPyzjNbhxIuSd1dPrdwnfSd_P zW_=*8rH7J3TVl&*atr`}?%-MoNhFEJKPO%{vmpxOTNSRM=ExsenK6osFT$c7$9YWn zgJogs#oDmJ#;EW1LPju0#y?S{%TlC)zF#q>Y*>J>U)qg(A-M)JG47`g55{6 zQn7~Os%Wq#>#Kr5#V01?H|+a)=f1eA!DsfL?ujeckzcUnxZxA0m1o(f2HZ+ON*-5& zhk+qvT7VA>FC!|{PQY0afFj3bKYks84+A+NTz`8Ubk7f>+c|M(9Eyos4ePsK##!VD zP_Fx=5dIF(8kXV*cf&oQ{)*00Fa0Qj?@ed$Sje?fgGH}5`fIPJ`e{b+e*{*RGeYko za+^Bu6sGF(pvc;msg5x9cvvM8+L#ph1G|cLOCejm+RkS`!qU&{0fkk(CrsGUv^^mS zHn<9jV3m*OX1^6Tv;GDDQdQefS`NLV@!*AD##iALS0RI=u^Z@y#?0yd2VLw2*9;gd+weeRnABCb`8sEA^^6Df-O69TM&B_3J7dI{jT_T`#RtH z+P?i8Tucmi^4vvFVRd9)V2T4SyL0 zg^Bou+xmcBG&fDaV^VUgHnb6|EPNfR3HMeI4Q>l`PRs!&kQ;?JhyPC7uS7G)I|EnfH*yktGJY|V%WPl)n`!cr$T2|z?3tg%V|g-M zXtRlj2=Zt|>KfC$_{nT2#xxl&fY`n<5*rXZ00`;S49fGGQ$)E0tITSp3wbXtK!wCa_QDpLLLx z)ZSSoGa`t+p=^pTM=H9nIh)R&wR;gezrd}VG?CaHr%y~R`!^puJ7G})*vcYNG zdDYsj!Tl4J+GBWr|0IYY<;UYE#_1SKA?3#p;va`^u{3-dl!RNh^7EKIMl+?i3}yRAeykQ zxEL8z8DjUaR`ONqK(Ha;0Z~^s0FR1Wth@Wn6ai+<$|&JFY@@1#mCYC}t**I`5LmwJ z_6ZPXth!Z$1A#R<^UF9>x&*AahzlpM0U<3YVwlMe4h!SFKy1pc-YRZT9!(Lk3a|L3 zyP4iSMQBP#h$O}dqg9siZ>Gzc50|wOyzI^5RDn0w+=!&AqG5#Ph(^ew`;FO6=u4!q zkikuB$aqje5)z`vyU{9Q*>(zIRcv!N%-L)wgrQ?h`#u_%(*fd2=E)dN7aZF|9$G6M zzBX6ch#Xjo*k*GQ>&dM_gkUzLPTdr+_~Z|AaiVd3$Qssm8&uNQ(PdHRgKXH{QjOFQ zy6jy)KBid16xW`Mn?DrW?VO?D@OhbnzrM z4F+7ZmMx(c7azkRF~bR&IkdgIRURFPFG`Y(>CBw;*L%th$v*Q$P{_rPPa;Ew<*yQFo$?b; z7FHr%tZy;t8i5;bugC~Kh^juVi3C{ITS8dA!UERPY+BhA8S7VO1yUHYz?i}8k)5lk znqmLCr>ci#tXf@uMxq8>w4d=`n0 zX=l+#&zUt{aabq06g}EUGOIYb(fPsrr9I46 z@=9a`5a46Sq)=$SpL5`LSsoi<86J-m+k(`r_CfE`|LAVADvt*#PVvNx?GPZ?Jy^iw zTDl9nVL?c1MHMB2DSmhlCnm5Qw=U~&Yzfh-@$J|@8`uGB(_>1%^jqXziI~RuWF(dx zc86)i^q-E`+7{Zi;tDjyk8cm00U1KaZTz;CremZ*NB)PB^foOIT1*B9=)U5@p_g^^HyE!I0lnh3t5as z22sdC1|zhS1D)!9C$dDq%dv(qB9xR3fjSKpR{@HUA;%PYyJ&{@B01E+RAMy5KOQ57 z#)Q!cDez1S@xwYHOkkKeIkXS!NvpP#T2bOe=t$_B3ig@tY*=zs)EBif$}zF-^cBuj z+k2A5^sX?L`x_Fvfv)&PsT4LW!+3KcV#kWu5fOu7{ez@v@VSlq*nh0)lNm|yEuhkC zto;gb1U0+L=a0I3+@O3`z57Lu>Y@$K=cX>2Lc)b>9>FPs{36CtgvO_ibAm8yj1r)o zj!O}-Uu5|`2k0-kw`zJ;#ukJHPz@4+;pS`AAwF?@yEefhZfn2+M2Y2K;AU(JWh??K z*lVGS_r9{M9m|SLePoT)74|AdNa0`8L))pVGG=iJCXMju{`di_$E6#vm#CR$Q#~TX z4^&k%6{y7(9x)TY*J5h9P#+%!QHF4sVcj`F405IZ$?(NgOH&10T!%pXAyFs3_k=eh znYy2=I%?T_>Y$tCq8gF31~&euLQA((BPGaU>w#wp=`?@hT1yN}nTdvP;N^s#6(?`a z=*n0rSG3wO1jWY>tppt>fuzHfoS4x_V=EHsE$Dz+=;A%fSEU2kj&jek)S|ZpW3AM# z9ZQhKmrpE9hb)~>r?cPS#FOEclTR3S*kPI@=Wm!Z%;gPElUK{v;B9D_t|$b~Ha@Yt zPR9Pd;`$ZBca}J5Q`STcS!^2E6kKucsX-5B!%rQnq-Y=SzLBPoTw7zAD*TDGvMhgS zWd~)D6#w$fOJWWrQJS#*Vx;MO%GGD2Oihb@$P$^%Uav{D!a=uU^XR31D%- zCZ&su?zn9gg?y7>pC6 z*Fhtv2KV`K*%uil;tL|kR)+M)i|%U|*Qa|zgWAmy$U_!?M?qvj@Ua~k5|fR<4g{Xs zTQ|{4b8|r#t~i+3phb~1Zl#7*SB6w3iAw-R0F)uLVu^gnW@X+nYT|q>j;@@BkRK%m z2WTi3&J&+^tPiD_h6y^>z5&%S!uFqb&o$U1imbY8px-#m;+iG4w`@I}?me|!=n2q> zB7h0J(iuY=f{Vkj2;as9c4$0f&q$^R5}MH6s$M-WQ3zga-|52FI+Mp5jwi58(hYAAJcxW3jS>sC~jhQ zqK!IV8_Le@Knanq8spdvkxKoTVJ25)imJpduG~Y#{Z0;+VrM-H%D5@7o1^BK_09j{ z-UJsPsK(->;|-Ar%2rVHpoCpqG-q!+fen@Ne`$Ny?YNF3O|+*i^M*SK61?cLE!(nW zt3Z*|y;q+;5HBLeyubuxy1SiE`Mpdp~0X;Fm(=MTsO5EQ9<)Rh+YK;IFRWb9h{6AkY{f=ASry@rKnWx zz|0e8Wa(&hx#^S!hKyg(mUT@id&Z!;xqF_FmsQdk=ZQE^dP6mH7(Z5Dlt|ufE3i5r z`4eBV*cu-6MvZmD>GWbyHG{cbysI|t$}Bgrkn@XWHwun#6>WY*-J-!rpF8Z(UfhOl zHgKZo%YjM+<)-P|Sd}d3&zTn2I*b?d25uAuNYIngi6n;1Lrj-6sW5ibMreBr7tdAF z3>w(EicujQBf2GALB~}DcZw%ODP|&YmQ>{p^j6|tFy$#gy7_x(Di@E8RQOEzU9Hb2 zA7kn7Y5HH>Oj6L&*YpjR;ZfVjZi8@1MX2<2iRTu=-!bV@yy)wndPi2ACl{{(=jQd# znC_f1+#2D+(p?*q)8O<-U$3@Tz}&2$CMoKEDxOA}Ar%WHO;4fHA~eMpRJ15;&|0Gz zU6jl=i*ejVAJKHLgUI-Tsvz%>IzK13VN^}MBl?ez4Gr{{~ ztK|pJ;_LSDfmL4(qBd=ot%4}`@A(JpAwi}|B@-g>UF z%ec6v@8^9HnVDJlMU01Z*E~CEKLm6Hk3kEz?Ge0UhykPu*=G1NJ}K3>{%xNCGzQaM zQC6M{u>v_cL<|$^BHqE46bu}7UL{UpGcHpsfO196O}xtcpiP}fI=yPph`#moqF`*^ zHhpWR8?l87EITmI5&yf*6<}fs%9vx?HIz`zH;^ZwBpb2(0el9 zZO92pjMW!*-EH6{t167KxbFJBK(w%WgIyf36QwF6qLfXSXBI8(hU$=(Ksu(E6&<;p z-J_S}Gp^Ff%#l)1u`7%H)@f9?xC#<%Z%CVw0wQj6s3GAEZ0J@lRzsP6x8D_p_jS-~ zcr@tx&~8V=V?Kc}ot&|BQWuptfb#rMa!-kn4|3~JRupRwo~bT-aou7(?1 zA;h>=SX<1p^bWYS)<}b-o0<@fLan@|9Xj~HNegP4AXE+Ehge-f*K}cn)m2{fl`zI( zy5c!qhrBvOt0Jm&MlDqNx(oCy4x)N}3Oq4vWO`PoOZ2J^W{E{x)$pmx8NX{Qa71OI9}c0Mc}?R4ov%5)Z26S>6eXsHsk zSZ?+nqsKLkXFb7G+Zsp;y9rNMe#qX_a58giNt>%{&c ziihpsV9OJtA^`qn5}`9Y-NELr_3?dn`ax1p?fUMZg|~HaL^lq$5Btd#sX;eFD|PU? z4x52O02djoj4#E}iT$&f4z-Glw@>Fk++L>dQ{AFecM*|G_z~4dLH(0q_s7j)zx~P@ z7MYD%m~Y2h(AktCr>$d1>_q|D5=gFL2STJvu*INogqH}}c=7QkxO^HRvw^t8OUx)+ z{39bknML?Ch6L<2Svdz*uxqHOyar0$n4OB@&OYh9qOBKo{zZZgrBmvci)D5N@tZgK z&CvH%L~PL`GU_>ttRYc;u=&!Q12Q^kodHWnCv#$t5rS;)XkKf&}WccB(fC# zIBb<0AS0idvzch~qj!-c;cy77REXw<9SWPJU=O<#W~S!pUV;+RT_Ekl!6e+oc_Ihl zrAQClc3N@qXN>PUQQxUmJXNU|ap_n~&H`JwjfA3CO;523k8O==la*39 zw^U0scb-R8=}jrU>iuX9Y^r4Y2&cRqjo0EI^v1-{I5{z@?gJ)mT#4q+%V`lIW0H_8 zai?P$g=LEqYb#5cX{kyf*~SPCu89&GBq`*hIsUYh=-`xwaoV&u?>Xj{2G{PRjhx5wa zk=IoCI$FUtc_N$f5M>3hj*0??*yI2Gum2YnL$E@H!ns<=khl0(l`E25=z{dVs=-R) zajY(_fx3?#_Ff@Ps8e8qkO2aFR_kXJIF0P>9Z`k@vlbQ>IDcA*Z+iuM*N)hv3yT4C z)5Oy1sG#FJUcrNCrfTX=Dw>Mrrk`>h-QvMPdymNljUd%O`L49LG#f3VyZrQc)IT2a z#c5U}EU6gCkwA-<0@`w!S=qq(l$3%hrdwWz0f|DayxM(RFh52TP|%@WP^JJK`mn8k zCBY!vJchrFL6@C65q|{fS`F9>;%g;l*lYKZ-C)?7RALkhN7x>f4QN?tC_RmjQfhY3 zq?5t`y6GQ0zFI%?Isod7H*IXNt4xYU0CVTOyPo?qXr)&uL$u$*tD-CH^q*8K)j-|* z&xuZ{lZLnsoirwrhL1{Zbcj?Z+NQ&=o-*wlbUYpJ?eq>+NhSc@yi}aQuKuy#K48?* z`S>l4-IDH;2Ay9g9D~8O#>aTA#9}1`yIaR29E!obSEp5MB{W#9l9cPHZt)57dv~6| zKl`}dk6F1ytdPTsvL91SWVTc~?Q2X_@hFaoDa4eq4iIIj*Icb++F({EsFqlCxkUL% zX7(XTx?C`sYUm^aRs+Ntil-4b6%(!`&YRa10}Uozt*T2jH*>M& zARMswt=*@%1v9fI;vfcd)2y(tL@_pI7Yx%woMqxVff4R#Jxn${6OU9~q58)M2S5xO zBn6GosHczb6U}v|8IQoFozafw-6VNw5N<(2H*DjkB1r-Byd-dOMz?VGDsJ5KnghQQtPY)${3Bi|;z4SDnrgUx>w}=p^Tuh4W$umx7`4EJ_o%aI%Mh z4SP>wgAG=_ym124UA#|(iVYAd9(Y0|s~x)Bh9bCdVc1doWp}S0q0(TrD{sphgXgZ? z7ed?tPf9}I;VivVjnv3QPRL1!e@R495!^hH0Tz>4y?38G`TfrBZg;zj*@56vaxiSd zgrh*Kqk3aA6B7~OH*qYd8T+2HLQ~B{>PQRi?y>u)D-M^#9@c@tO!2CH!d2D-Gab5a zd^FzZZ#w}~Rd2iC1nuA$3uZb+{fEkesc8I?km89kNL4q%SJGBV@kGIiPF>i*FyL4Y{o(*sx z>*dQakLf{dkfhnL*Gl}#2rk83ke`@j7@$TYW{xG})haJc+$%8!H${GE&?|6|M3#z5 zw)_&y9@WgH9~frdie%SGxL>S+BKbD>uA3v=-noS&Zw{wZHo)VxxWE2FHzg$HJ#)Ls zYxbC>;b#6oyW&`mF2x)T#r`oJmN9X{`RVQDue?4JVdef&F!#X^eaZ{lDX{e7jQiW- zek9VjmhaHunJGuFb2`|Vdmi83luJ=^mo`A3GsY?hlW|x5=oP5xt3SLoT@c{i{GU*e zj#PEwZz-nkde5+Oct9dHrnCOz?eSEj;}$UYXd2p%`bCvHOpOeO|MRVKSf}MK6PI{i z=XAkvN;eOh@qF_3IAd%#^QSe?h)41rY$0vFOD2t`G-u&&s^z;dlEf}`cWtaasNg2o zc<=TGRDhJGGRrsTs?Wn3=?%{R`0Zuy;qbO`1<}p%1E>(VQsE6?1MPfAub6Gx!qN~A zuX_Czklb(X>)#rpgF}QBv#?sF6~MQI&a zoOBUW@d~vesBR%`TfId|1|q_5nGMe_@wFKEg0@QDW{~l~o!&_?s9Q?)m%rBFJhn1? zvAdOtjE|(0^mLX*3Ft20_uxn|K@pLG#7I%|FNR;WdI&P12vZ{=nXQ^Gvs8y{TV+uj zQKFT^WjJuiL2nT8C2Sa|&Kup)bO7qfg}$MJscoLeVPm7jRG)dG@k&39mr#6$D^c2U zXs}I$UoIJ-WiZ_|s3W@8lRzh2=^P!y@2`P8nifIy^KQ+>5?%&`@;*Ax? ze!GxE71|ron;j7d+~-XfAzk>AS>w-sdhub zu~Mtr4oF5Ylcefs?n63+rgQQ8=mTjr9}sguF3}wEnfMI1S}T2-amnODrkU{N!VsoM zG!Ydb<-=$)NTVsPPgqq`CSH+Vx6ySpWC19Jc!|BhZDgKJ12ay7WCI1kUEtO|eENLj zDK%}L(W!VttBvXe-+TrIczpm0h1GF(&5*hwg8^>7^7RW8%-`VT%lE}r* zij6^+D;H?O#K-*mPhy2Q+ZhaS^r}^XOlM}yBW1=c4Hn7G-lqqJcV)7bGLLK@Tz`(h zO1VhT&iITM_0*-XiVHUuKMHpidMgPRj`RlA__U01QWCD^igW@Nh|xtRyyzlyoZule zGwfzgE_oS(+Ow5Av@I623wf&JfjlFJRb~J)WXg6Wt!R$2q9*Vk6#tI^d1};@JlU+- z(v9qx@wDKSB9nTG{+A#}Y51mTZ%U2<-K@0cw-Ln!c?28NUx#YLVKSZo9Xa^5!)4KR zFjWF29iDqt7fmKKR1$mwvKnR@7#HB+u-0cX35f=V@Iv{j>C%jox|EjG5kiEAg+Xch z35U2mK5a0hGOas}l)_OoqQA7Bd@4w>M$;BCNm26?4rJ^TaLqG4w>l;xH#&a(6Grix zI|Yaui$Z~J4?{|~CNV;2xYg6b2CG&}zJY#EkoQ0^w27O7KT>IBs+~7tikPU>a6K81 zO^OCuJVjFWmN;7QyG-idi%f;dC)HYJSjTs+h4XE^&r64urFl?C`Uip*|BUMK)d}+^ zi$@ignP5_MwLqs(dguaTf=Yjoe&`+{?$5||=IEo8>roGzc4SZD2n8F8BM54k!WC$& zD}fp^%7_|RfC|>%S>ehUk0tf!Ir6*{5>sKz(ayQK zfCFjY=`@bP46ns`VBw+1g1xHk6w<-jM4{C_(KxDKOTup$8VzhQxXcO`Xpiq1q-+Au zyQA9yOa~?T{%ku4K>`!1((vh8HE&HAJ2@%MF3;5&Xm;YM}2WM;IxRvR&aEg zd6}u<9NxbfUag8t1=wA?ABIePT{zN^ZX%A(@A@;`#u8i3m9&qm1XRQ68V-@m8#-PN zThI(R&w)44G&>UzkvxSSkLtdT51>nTMX}|h5>S7D;|skvQrVFVgy+X$}rvAg(Cy#zB8KR&iK z2}t+uL-=xbdc|tN-@=ted4Tu;g3Qdj%nZVXaFqucMmyN)9d%kLm4ak<)4`b;F`lJy z!0um&v2FAjIO887%AVD_i+Hr zX{^Nqx;zE~cW_dy3}0Z1{^1z82Wp=33_3*FukH>!6zoq&B|}>9OgBw3gVLz(<8tt{ zi>kkbr8N|H+K z&w!w4m{&>{Z-<*jAdl@M9#5X|5#`pP{YoQS=&npgHLaLr!kK9@;ar%()bCzSlv1 zVcVBBBd*7Sy4%vPQ2vo+<$vylfLbIxu!3h+p(ut}S6kbC$&M!?QZmoc8QB z@AzN`0>EdF#o-CIC5TAC5er{E^b`Kv?_l}FWnZ104V zB_36DQM>r>s~fymLVg#Aytzvi@+XIfFU{Cx_Kc^~XEb+n73=a5?1vGYtz+@dKR1#Zsq}%wT%6v zb4=0uxv7Rqym!rPsg!2?dPFh;bT?LqLu^)gyFht#z=0bTng8Lx4#DG*eW%mV_6m1?MBum5(W(aDVby_H+DYrpXVu&-|3*~{<+hu_X z#W=@7yMG~0=mf0W`S0xkPNU>-g-lQ^O543w4~IqKH0M5h)!8bx2EA8^q+zC~8QJ%+ z8Lx~^S5DLS9T-G6MGQU!Gng*aON;T>L73uU%53VCaOz5sBrdK+Ey>5CdVzml_bz4h zS-FiG>s^XK-36jtdX(n)yD%Dd^OiaC)g}-3Ndx*>0pxOE;Zk~E3KSqLn}?l94U32t z`hAKX%4JEGcE+Qlw4+x`1{BLpKcI#pbOiS>u}qz(-;-b163QG=210tLSxH84bYse` zNNKcFi**rCC8|Pr=AUl;84-!h{Lkr!mhsH`p^T3UTM#fR2}W_(NJ*s4ojk;toaMhz z_be9w1{H?(7A2s*52ruG;rO3ylsBe(53H zEVuzyJmoLScXZ^`JwkaZ#M_t-XfP2Deme98gA!QogXnfqxr>R0nz&$++(yp?T|5Y1 z#gC(76ugc{KV#_cbC8N}Ew3|M(EC9MK*ylED>@Iw+@zf!Zlpwd3mI{=ILA_vv7Jh) zqJu&sYk;&CG8vwQN(Q5TZr2y_H#9RgVo7t1Ls9YEQn(+0W3{lUhnTjdXy!DNRZSc> zHxm&g2ebU9Zz<7I5M1uIBzLovwd`2 zd@PAzP<%%_*#43m?h_j48UM;~bW*iOGP)qULP)oJK=-R3q!?qH)+b6Z!%a^@ll?CK zXW(R3o+edqgK;3UM{96bklfq@8TNn;au?)Bv^tyqZm@T&lVTM2p(i7&v#)JfJjPsT zJ!&8A9V6o~>T*G`+95NOb+8k}x#h6S7L`6fDArGq%l;!#ye4g>BMW&Q{$Z~k<5`_? zU6y)ej3VX^P7#QYk-&Hls;y%mV0}hq_I#($C{9b&S@r*j$wgLHcl#JI;`KQN2NrIX*@K^JRGjpV z5gl9>xD+v@leX6#g;EeGT9spRytXxH@Y&GkxSZLAU3yY4QPp5>mv2V21PRw-iBB8H zBmo|B_Q5VCN6Oj-u@{FU4spn@OnW0U{{M6Q$%Bkb1V%&4N3G=Y^|2n&*GXFL%42hB zDecXWSjTqyV)Qa$*KZBW=wV6y75f=kVu4MTd9{IDo7TtRij=HVd&zxZfwO=WLJRTU^^FS2! z!*E_0w#C$oXLbkO&S&44fo@QqdGH*iuX+Y4)s zUfLb?HLf|SvKo|TN&4~bYq6G` zmtP{u#^+I(&TZg1s89mc2+N&+7I1k+A&0Ofc_ssPRCG}opspV?@)`KN>0x{u#{;|T z5AbF2J=FCfIg(+3l~lphEahgmwoXQ!_F&L%yeZa+5;D7$5d)@jdm#|9GqHgIHjcnB zSOMo5oO}>w@G>(a$2{XG-vUj+>Td&@aTHqmUG8)qb}Z`+45U=Ilwe9k_^(ALOxQJy zqtJ8Q>$1>Kk{Fk2K!m1bL~;hO=k59Kgpwmb3Vx2;Q0@ID`laH}rYS@)72uI|983xf z7zLK@;20z$krQ@@04X?kN6lKx>=8ddQqgDBuXh)D*i!cp z_W=txr7PXYUleE}Jf?2VWLoR384nqP2f}BM=H6ARuvfgbd8=OrVOsh?Odi;| z@)gRgv`jQG2<#Q}3?~ zJ&$eM7;N`0vx8h~s`JXlSBu9bX^g#e2i|A*QKdUFj-7H$QcIFHSV4WafDe5F(xF>a z7vW6qfNs~SsmqLl)(MBPMBmshN#f!xIoy*N-&!c*iH<0hZ9Ek+8?k0xQNsH9fzBwO zp*t3}(?~4C1>!LenMl%RJQ!rRsIozi35U^yO^K^JFoF#1Jml&~c zq`{MOpOD;TCP3>tV#3R`BlIb?grkrRx!;Ums`U3PNXV&P<%AL-X+$NT9d#+Ijqi7( zt9`_sVkl&!MSNS~f*&8KIUd%1BtB8^rGbkU)#J9Gu1m1C&|dBh*p&oD&S9Ue-q2>j zWEA-rehA@pNJEbZY4pqh4s+8T4T83Ewm}tISI={MxK0RlZLK+w2}+kmt31RD@4M?y zV9)w4mI(PB@A6`)J+pVv+p3sYjfA#tc6cQ53CV}j^q|#vULI0_!!FXzDks^QEoH5B z%yWd}-v6E-Q2+xX6OMgcn??b1OV5G&a9GVo$avE9_g?kt+nDwGC)zZ-2cLZ(Sum(v zKd9KkjTZjoB4aV#?DzBlmm_;3pnHAqxU13Ov^PMUKAh+E3%O49MVIq+JRlaiA6Da? z2#w~sy`Q>$EUsNMAu{t(7c_d$_o*U;`{*Prh>bbEClGWlF`Z+&MJQO-hGYZNrb4m; z<`(YzT22(e$zM_fXC(H~+mD81gUxch%dtRi=~-uwqP|Xib%xlMJS)Got4MiY$A7+}BnS!!iOi}ST?wqH^lkJ*kf#+yrjkC zg56B2{u~k&_F)_C^-x-C|IivJ88?RVL$Bj+?H`LpaxmP7Ar#Od-n0G{REccA=-f7f z&>-TkMiA5$%ANV{(aP`d-=lrbv?1y>CLv`|nC_~L$dZ@nn80-BbnPdyOSB%zg4ROJ+rFM)npQWl z`3KlTZ7uV$?ofMp3^a0UH#XMzTE-QS)b%U!H(zG1eEJBo@#MlD!&BzKPe(g-nwkd2 zA_|Tqbp-BbAs3qvSNXl2?jF)w$M@3{`ql8;n>TS^%5b^d&)vLp^HiQv*zP@I>mE}b z(^KypqMIW6UVuoP7vry! z-O#}QG*)hWLjo=|Vo5$07io9ueyIlQ4mCliFXpDAVBG<+*!{V{jqM}FAAv>)AlkDw zbY{^xRT>SbTO!J9p3dVv;|l&ojR`3Z(MMUn0Z$b(?$7Dx6HbwssTvXYs|u6PVO6dX z6Et(;!4c&$zy$gWFfrc8ZC`4ZpqS_W$h!Pk$5}$ZbA@K^I@idyD zj`L8*z`85c@35LYy;%M)(L2aYV*f%aSg4VuL3x=`K5Pn8)Z=5J6m!5@8l{L(jcS+< z?`%5!RTgTXZjn0TnWq&q!D?Wr(?2;NZ=eS1z{1ITV*bC=z4f(~y^N1eC4t_N+0Jjf zMSmVhCoYsBBq36mYZvJI#HoGeSXpV1vljc4l8heLe_A1i?S};L!UUlpE6KP;=q;`u z;E8sjyOTVX%1pBI7$hCf9U;08Fu!gT8beC>+$}KGQI~nQOF0_ohpG5;Jnb^R zkJEW5Ngy%4B*}6d+}Y5UBUuWVk*Ckvc($@#P0-Oaaj?$h1HW{1vwmY}Po-VeM+m6Mf@EQ&ovT)B-7JM zsp83KDU#BPc2;u;U6q?a{3`g`Goedm%XZ}2IBlSXbk|mVCQYYUt&l@=KME|67oS}C zDDMXkAaazp<4o?DvrNFWDk~{%;v*>aMn=kcP(Qr#NaF*Ve<{C!Cz~>IBwriHKHD$oTmmv(yO=K%jIVIEfB54+|p4jaXM?BRy70WvKzW->nLbLFa(){R#0Y zSPM}Ug_q(uiW^Fmcp}GPJkh=&LoU5P^JkL$THGfD;TD8E&7#NUvhRstyqgkm3PUBJ^{Fj{7ie!o z2AOGnW=j=XA1-&QL%GXOI-*u;CJbTmdLwx4h^s-*cl7n^ES4*Pz zgl4?$GCXndjknKJ71r={pKg?~nU~k&26-R6+E8&ft(`t+=yE^0IfgQusx+?oicbuR!X8znN}$#GWEW5OvG^R-3kj_32N;`IFSW|SU|mLUPqY? z)AgC&?sbXQhAfpL8R^|AjJ`yhsM*ZgR#(Yj_$ zM81>})At$gdD-`+_(dr06FcsoqHI~|Cy`=2lFG>{dND8oi-znrc4Wl5AQLz)tjJ3h zW@0qRfVPy(rn`PkXZq9KBQpIH^=&h5n_xYZ#SaaPdvBFdwSsbpS(U1`B>ZSMs=oUZ z^Q2F#!TCvA2PSacrBx!g&X!8NNL)iyCX();iNu`~tP5+qWeNlZ8%BV17{;NZ;)iz} zkuOC}Ccl&LyvTso9P}Bblw~4<3;y{;FxZlIh5o+R+C6CR*^X%7vGp*vBdVCh2ue(P ze?jpbcA$KL6^X`GWrPEPI0Zu1NHaqlIBt`i)Ii-W_!tL09x$37RCu|)1$UxYQ)KpY zj1e*7_cg>Nw15+#bd8mVNofiaY-&Pew<6LD$-pFfu#!L<#xy07OAa}e z5@>JtEb+|xPzg}Z0MdN{OpQ7l+2UoP1V|++Yvsrl@g?k{IE)r3=4SOd~5R841=Yi>>CiF?LHp3XKLJJj)Rk zIH%|#h|hcC7`s+oGBRdG`CeR&y?pA?XiLG&kZ^b->v8FlAvNw39yaMrVzYO&2~*?P z3h1elfEa(>5(m5%;Zaz&;JLYo5jwdjTYt2z75p1_e7O^@y26Nl4Cv;WE*{0f5?8q0 zcqs7{N!upVYH!o=B>>TctmC<*K>e{?8DPBcV0OTlH^}*1Y*A*;!X&ngS`fWlvJpLm zlZ@!g6IKsi1bClwZv#ckq%P(<*R0%V_x*$z!C(0!ZjKpjA`+=Pvg4BJm@pwmJG^=* zSMYYWf23MYaOyH1Jd{|)_IL%OI#}d1)so-`oufT$MGm@$T?8VKTEav*N2?xw-}|Ouo8+)fgbk0l*-Lv;moYO-l4I-O#;9Q$k~2CZN?{oFkc%g)xvySBy?cq@6`LYC88T~>k|#$>M7jb-g`z`; z7W}t2VWJrUbu=2Z!?8l>Pdn(D5zuR6Z;CCe=Rf06aY`G1RXo#TBdnXT?J5tqj1`xe z0fA?zwH#QO#cb*?8A| z@&p$Pp~598W!nBiN@=&j!K82x9Ufw__a%3DWCxJ=;}LDfHn-cA0Q1aDE$2xx+Mq;* z*MsinTv{z36?gHd_ztDfP^=V8{BzeThzVWjRFP1kHb!*20(|!VqB)Q_(;XJLdEN|c zCJU-;UENbZY!T3SQrE>fi2lcslG^YIx!M>%vR7xv!b*t~AgviPd& z3X+@sJwvN+jKube5Afm}qp*#n>W&y})2@v0+HBhx3+9kwY0J)qV6wPP88IpKQQ8;| zc<$Wqqd2wM7bpgZTQ|kEXO-;h_Mk;V5AuV!2hSX|54U#OrpG4Ju^z~seZ+`7$Ii;b z#*HYutfs;h$>5(m(2}|Fm^3ik^*xzI`Ux&pzgN>zyu~`1XOy}IX#+K!s-tF)>8*^h zmT;5=2zMip5>Sp=dG7sYpf;^Ph4pCjoihgz8HxiX)gVn0U*hk-q{!V6eJF90-s*aPFY}(@Bd8%E`^?hDye79gBs(0UCRa zj=z7T3hL$_flLvRL2phSP|hQQK@j9<$Y$&o)$?WL?ifV%!oopkuf2VOJIQcpNg)7M z+B1GM#ShgQ*dVOKk=q+treq!Ta2*wg8PLX$WbzCrJzA0(iByuB;p{2mZek48?4#Zu zqCEE`uaQUWtXEy8%Q8(WM=GuJ6wb{*>ih_k_5kK?``}~&c!L)UH z{N=NS{3I8GHEegqvyzAlUj!ly!tD-wYEc9eB@t|2H#qkR@B5u`5|eHs_GAiA1|2f% zTa-Ek&S+^dMeP_%B$WcWU+AeXkGCIpDu>d>2^a@m(SXb-{kog9fl}a?eCK=eg5z$` zk&4%U>wI(PU}p?nY{881HKH5#k|qCyQ{Vp2v%`yO?)JNInpW<^%q+KJ_rmXqJ(xBT zuCo}4BdW2N7;!B8Bl4_Ko!vEdfTL&S=L}?8m{ITJsS1pnQ8HY(jD`>*gi~ztM{d(W zouSldtLW$CrcP9CtwDwEpg7r*3@A@gf2ORMjDC^^(u+!_gmBZ3@H{qNeojBM^D!eH zrEaPl7mP!_2Lgy_g`)v?7@-Z24=ihl-NNAk{-_jNY1DtIt#%C+`cMd&f-C2Ob2K(@ z-oWGxcLG&qi_EMfqZ#jpf)5gD`joRxb#TRz#vP|i$2 zKeunn+g@JyM$mxduFI8EH->z>dxE9gE2juQ8U^+yMmN3ZsAdH z4;xxQ#+1&`@0(l4tdB962y8OFnXv;>tFbJ&2~1>ecsd2KM62_L(u2TWQEs-{L*!~CS;4PHvRP$d5cNJicX)$xdurdqnO)&6pt|p z6KPuydK|;zKfD`x@`$5>2qvavl#Qn6ZK9g48Rl>21U>dYy4W;u(%9L`ky z)_PbB+FiQsWJhj#^xRU{&uH@*)Nqj5Q)D<09PBB4Uxz~KLG~nP2DTXvfB3RHL-h@1 zuMWo%Vr(HU8d}~HVrF{-wKkrl0=h+}to3G8jX}ufm4Reoz04AyZEpax z*}rp2jQ)=rQ>LMr7%!o{RU?H}7m?}qn4Ig5;w8X{oCId^Y3oI0`;c(ivIy+-lmJ={_h$m3)5}jr9-}dGSOhb@L zp7At@Ink?BEr^?WOrY`k#5qdxpwuSQi<#YGB19-aID{!4_Bg$gf}J0){AqJ-W#b`^ z=Hs-GC7+UrniqV=2cINnY-Jo9U9VF+h#iM~TAhtEco9{%O&^>Z9xLy7L6Y~eDDoc= z;BciB#Aa508g{a=z-GL1s#D=qpp%?szs>e>AQeoEEtB?PC?u_(Y%p_UvKgn8pC^nK zw=UpR&1L>2`@8u9jF?Pj(H}>q1cI`Y-XtHyKrh$utqOb4nA`-d3OF|X;i7ae;f}5f!iOca=z8#8!s}!dY-`mz(&thVkWuw&MmAu6m%S~Zx9*{Bj z&e6B@g6YMK)ab~Gt%gs_il8Is@!aKm2s6=oZj>P@bU^eheZUPuhGv7+!d}3jAlhj& zc(BijfPd~)3Lj+_KW&e_qR&Dp1&AIfNL)gzMkEt2s6;9u4K+9=bc4Rx+-(m>@Dd-e z+h#MwQOEL-@gd6e4xvgx8>0mVxD|lidynsLJluS+vc7S5<07b84>`t061 zsp{V_WAqOy%r#~5`Dq4hlF5k3ScZSc4AMVO?Ii2a&7&q$G zcbUmQt~^_L_WinY8FwmH3hvJ>gbiZ-G_xWjRJjRH!=rF2R7xhblWDLZ5sP7p6TafO z*~iR(Y_5?4!*A;87a0W>`GD0M9Mcml_Z8Wpl4kz*zy9B$cQqCp6rt#o%Hpa%AsL3G zcj>T;qQR7ZL`4aZ`@l|EL>R|Y>dAO%m18i~LIJ~bIR@MP^09t{s%b(Mu@$I(f@m$p zBJR!|(rFGNrVKl$@BU%~NDHrM?}Tu%g8PK*Mbd8LC>ulmI;SvAZ**X9bd0VLud zL>54#!;4ywlem)`EHD8e(5v9Vhy{%et{@_tKHloh9U_rn2X(!Wb=1QDO>Z`^Vky`S zuPu8RrEW3ZyZ&nyIod?rd-|9*Mz~oS0chxez=lqfxcP6&hGM!YA{#Y+_V5Kf!JCve zuvN{i&v+|zed_5dK`2y>N>EgToH;y1A!utVG^j3pc<4J(-iEX4_<)iP0A&(SE**0I z>-YrQ2Hrqe<(godLW8NE$g!P5OIxox?H5p~MqDy#QM=5)=35xyxEuZ}uA}`N=s1zy z?F^8H?elCvRRYCh(fI9n^@DsieTB)9w~^~@Ad!{|zd-6{@B>s3Yi-x<)QnRs)bqN% z{6%O;1miA}HW5rMeoNG*JvCG->R2V3k+reJ1jQ{8t@~1DbpyCD!C6nxUnbUctj3a5 z9Pw`WPbq>r;o^~+Xla(=Q8;&229On(_9ppG?WQK<8Ve$I(>PCsj35Omk&ls-4F5ur z(xw+DkrEFhohTpfq&o4{a1S@3G@fB&M@?~rp#KyTTof@u1R2#K_5J|U%*;`=PV5*X zo)i^S_uhTETT5=Yq?*7orYQRd>d~asL62o9)7^f1&LbJqR~VRG{9Ua6&kEC4dKz4D z>0gV>4W=aWm&p5Qk!@j5b{p*cQP*g>L{iF0WDfSGYW+lwrwUez z0T=dZZ|}pH--g@8wmD;FiV-(J!53dwD20VJ3KYn=j45F1Km);QJebs|A?1#svEB=m z71K5wJQ`Jc5RdBY;qc`)s(O>NqgT1yA)^|CAoJUvnniL`IEEn1V)f=z(dhC63fQwf z+F&UZHVq-cadQtS0Ptx)z7l8Jx2gy0$$A1NBPBR)?kV8~v!BIf>2QdWYJ8f6YdW?$ zW`?s}-4&bfX__D`#i^`=AVs^f}~W;jYHhw+&3 zDwkiP+=n3unZC^Ypt3nU+(Yb+xG<6({fwW%#0FMkGSk2=#Qamf3b6*-g`o|uF6uXw zT0_Sx6@kpC@J1|^sO~d_sc{Yh?Z|Lt;?W-Xk(gB!2rgMHUjcs~2!G+|heE-)OpC<( z+W!0Fc&jca~&e;3`+-SblDQNyw*AO>@9UsjPI_j zmDCDc#f}7c4$ejIyq93?$CFL9h~m-9RIqui2?y4GJPE74n*nn_p2Umuuc|yDuJ&cC z-`#!zeHt!@i&^{6x72G%Lb_G=N-L<7*08-xm#JVGl#PNhhch19*Xper5oM<~a&VQ< zJtgcVw8H(iM$S@j*D2rvE=H+O$6v-(8)uGCQ>8%m;%=?xaf8DHb>oRXBB)kx;L9g# z7tGV+&CXwraaA{8*KPhH)PhGr!R)M zwx;oBPlvtUGJ$c6v`v4au>M$(Xq^GAs-no44R%oeH7@`jg9@)xVi(FIav$BX^l_&72igg>+x6OZ+yE5HwS#%i$HC zq~E#~?QIm=#tba{`_vIjM>x8^{RQoAxc**Pl;SSQ#O>DI1mghR)#tc#i^Rz5f+Ak^ zgpV)Z1|MJQ$e>{fz&sxpnf))ZF@Weu9ZNG}nYk2og=HbeqFVR?xwwm94cs+N10jUJ zdPBlrMQyiOV+l`Di+wVSX=>&yA~f~R@|}{Rg1EE#7ut26;5!s&YQQs!A`LDO?&tD< z0N)_s-A;Ri+$OohgS@V-ee||n(lT3>h}5mm%7%u^%m z-s=|NNA)b{i2?SLw@_2JTk*MOPN>R*N+2*m*)s;ueR7Y|SV`mD*K&(IP(!4r42Qh| zRZ7_q+88vR2QP=1fL&XeDkG|*q&v8iu;f7@+^?QvGe*LJ!*YZ>#XQy85bq)l1D{n|P>P4ucP*zrl%wxH8PZSoy z_YP=SyEGHhs5Tt*-$+Xm@%w7PU4lc}C+h7b0~s@}ECo*oGNypt!jp~r&Ja)DwKH66_=FspbjKBpsD{Ed1pM3g7|E%{=)5!9Z&Y zjuAT}SD+f1$c&jN3wcKg&}APuB!6;Df7miP^1~3>9h-p}Sr;OtexX-lDgnq{_0+t2 z3USG!A8d!BzN^80BMcG(ULzK8tL1MAxAr(pD?w#swwhy7K zhZqAhs;91L*uu(q_F5%^E1rH-d@Q_wQv4_QL6$EjH!ctphwpz;@1Bt#7<#8pM0v-P zlrIK_kJH#M!TSPf};g!9uiq`*^~6rSYGV) zDJl$C8y+0UWv;d(8n~fQ(#;PmL&2;rp-|R`A0qUud+Ew znOX?i3*ja+WgrQvi}Vr^r7ACo2iV40a?%abAW{8zfQ0KU+<}RLzgkOg95h`~Kt%6( znz4&y8ZU9-aJbTJl2ArdXw&uG(DD+=y&tlYJOSJz+_Q(1^ZI^kczlR_9-G~f5x`RX zYc^yJ(p`G$87SaVKzT2ULL#Xi?*O9{qW-! z6iYl4eXD)G)5Dp6IpTEKl*V<_xR`>Dq8_kc7cC|>B=i%Sl%_spzeSg^R8t8W7>Wv| zLq8taUBp2hO?ps+8%(Hyn`;U|M|;XmeXYz~DyChcK;wB4ST`SW5_I7ueI0rF+b^gz zYh@YBNW>`|M1bzXcO|+R3yO26AL_|q%ep8gABzOA`_)}ft?);M#jS4(=wy_M#ue-S zJDMG(tmxCg-)*x_yhZ+Q|IK|=r2kK*_9zqwY8-_Mob_5hKxbp1LNypy^erwsiU|0qVk z_?!D>jnOZ@MJU3La1_B#gaz*-pfdgVB`IBRRwHuMq^&PxwY3PYZnooym-1>#SDrNqN>21~j_zDWn@Y0~lpaRx;VfSkd z-dzu#*>=$Qezb_ga#==m1VR|IVl?@(T!VG0aog`4Sd)2j5w4=Tx$k-T;0-?0F~Yg^ z6;+UnH>VAD3yM@>509a0Vq7>T#J-AXft6Al_*Yb0*^ZiA8`NOkyl3RD*NeP_V6W~q zHwU{WcP*Kq(Nh)>i|J-0kT%+@RLQ5Jcixn|Vk&w4Yy^T763zS4B6>RlQO9))YeLIf zU!`pJdwuVL)OGhQu~Nfzm)F9x%8DMQ5kh6*W}>cvw~#Jq_USUsFHw8fZ)4aRldx|HuGO0x*V}Z`8TpOm{H5PD^FQ{Z~;mQ>E`J~pC9>tp)p$w^l=b!*gfjuq||y# z8=S5xMrBIIh;C{l!Uy36eJOntLFSb3ltzb(4cxi-`h#Bwdho(Qk&~p*e8yuoSP~NY z!^C2cCE?!vA?84pPGl66wh@Kos0mKzDMm0Rw~cDB?(%a`VzX8{WJsmO|BWQ%qtJ2u zR=+nyyk8Gh?@Lpm##w{Z3`MQTOrD1OFtAzjQJN8f=XZc^?a0r@k0p^D!i9V@Wa{$U zu$CYidfgq{ivL_0fJ`i1P?$IC2MIW&9}|l*g=3rKbwL?VaY-pvX)FeGQ%|3nOM>Qm zgFURvKhZp>Uq9EtofL}La`a+#MbKpn{VN?CxuY%$~jMicn2*=U@+Xj zayt{wcG1s7qb1r^$I?S->NhG&G1#^4nb+$#ML?t=VHGSB<&@+$ zT>+)zBUE&R#j}k{_#K}r5{qF2jTTLg6q>ect~dOV3~Y2GsRb+TnHa@N)$=L}oO3^{ zQsh=h4Pz6H_Hz`^%i%K;UTef76IZLF1%neq?Nw+B&wa3R&_(hrAEvY0g3fN3Vi|dK zMf@2EP#vIl9v_^v?kw9wrVKM-rNuijD;BTyIo3yUlpxwQ5TZ$cLFm(^yQTv&S})Kn zS9fkcV<3KkJ`~~3-Y9f`NoaXzNeilvy;^pt8@Ti_4JcXPBlhTx8pqou^UdB8%X@dL&hlWbshzws> zyn2K?;QBqpb>J9oy|+7hg_%oZEIpv%M)CB`ge|2a%$O&|ar1hEdmN*3jw(RX4Tepn zDLI`KL&tEo_lh!LQR8%gf-km1Gy9rwXaJMZ-`wCQiG@R8nLa3LWs2H^Bw(1>|Q5&Ur z3mxf|1fF|;6F0e|%HL*DI-3g|?Mn^=^DzVG4osK*&XCT}&A2yWp=QooJa-98ZHdnp zG%?)^_}#EGI!0Q)A({z63t~_ehzQDkien|J)Z4{Q8uEYG%_1c)rDb!D{nHX06L*i1PY|) zSr4dsj-@XXkggh^cBH`1PjLQx<$y#@sk_u*M0v{|t~Ut^=deByQ0?pNsn7}1S7 zE`>VUJBI2t^4Y*J@Hk~7lAvyWO{%>Yfew1_T))$AeRk*bJBDaxwT{dnpW77>+%MMd zuNA=hw%CA&@b7>9Kd-u@eH4PUQsPN|X+vQqAPEHb1(W;|fiCxd?8EZFAp+;!A#SmN z(T7C{)i>o1+c3Hbdf=;DI5QT~2$G{tuM|9hwqyoks<$U-uumM7q5cX{aGwiRgueNJMWjPL zrMNd3VfV^A7_pF7LYlSPzkXvbzW$rLC0u;{tq<4Ml0N8uS{pX@u@T2Ag3WjbN>^)a zo~35o`OI>Vaq2`O?rfGe1R&%nT4jZZ_AB1DnOzOdm0N%Qo+F)f~e-Zy`9zZQDm zK+a?l2}^RZ(kJ;3jt1`MJGVZ2Lm6WPFJl0s;g&0i({b`j)kfjHwq%1U!tLJU#^TR! z5f_c4Q>0~L8msvoL>d{hZ#ah;K^u7slQ>+~*b2cU(T2`9^4261Dbkssiixx&jl6}K zL>2-(WpJ*b3Ps$!H`J6M1WkF(6N0LIf-q;)6a%d-imi-E*-0_Mz}>>Mly%_NEli7N z9lA|zr}*x87v(igF4-KQuUAC-5YFgBkpRXAM($WeYnjSlq>TaF-N!4`5G;-`NY; z?XQf+n1CP<+^0hD_E+Dc5~*Cn=w+<%Nx$3+>nFJKhRc*H^*3(rZ8Z0~r;g@w1B-if zWjkqNmT*yxx2)sm^;IJP+#R8W(Ba3vnmw-p{*FI&4CsP5EMDGPz7Mh#l- zGb@WWR(|hS4Na{K^y@d3#`%{#&Yz>Ze>g%3K`6M<-~_vC>f)P-Nkt$Ft5xaU&+SSv z0ZA+rqBuUsIzcMU$6mt7(RveQw^oe#3CJOdpqVW%?fc?Q+Xn#mF?Z<~XkS=;vD^=- zwXJo|%!@Rnr)zgDuiwxw&`?hoo0cEQVNk$s`>C^uBWyUZF@d-UG&`=#4*tR_<_YLR zFN+9$0k!NmOH}m%m7+H{X~!gv-ICc8@)DD#t1KN=x9~aJvf=*Wpt?LLGy8`Slzx)aZh=769 zj*3Pg8rzIR#(@-BgtzW^H%J;#eJ@K%f_-~-nF&~GN)d=kauzwByPL2w;c!A5P1`aK zV?>dUdN=L6+Qh*wo$`7-_ggRB!{a{nBTsJ9U^sg}{;?ngY@_Jc5|IcqZ?KDuTI&|f z9DvEuh`v?wz!->3i^#4KG5GXZ(5LXqkZWpID%>?V8;)KL1OpbbGU%E;5DSkWOSAp` zlOfetNZcEr@kf_V&-Bq(1=Y>2c`_&+LD$oR@|-U$iK7d+Q9# z3{Y~jE(Mgz zaL{qe02X5GTb@@Ys81+e&!~qc6NTl)$PPm?mXCJZhL3IwS2plZk+O(>I6m^9I6^OQ z;kUw8HB87wz;YLPx=L6NX(vR*#M1@_0E~f3(W%U-R;K#{l)LoIqmrO~f6&|Vu9a!u z;RxTXcpfqbBN>W<niYxqb*_>@bb@WchF{vA#EHeK0(6y8OzDyawu=RQx@?qHIl+zX~5I#1~6xln8x zPC`dl#&R8vJnQ@*5RYGrN4BQZs%{mWV3h z7|UIJM931C7nLN0)DA~ndXd8#>1?H9K{q%irD|2%;$#gCuY*FhDJ?RW{ngPVyAYyR zFr6DJfYP3<2YN7$KSZa$5xEbK9DJfgX133V9ZAL3#Hi!9eFH6$I~!@Wc~2(P1~Lt6 zGLUsbC6+s{$26>}XRy1M;iDqthEgV?S2i3}3ez{ofVg+R>%fTUsDfLqU7axns^Lzr zc-S&Db$)bF957G~Anww7hm+)}P)~S@L7St`m>4i=wyE5jX<`Et5>k&TK8#4lVD4iL zoi5s2TLT=a@OnEeJ{Gca^*6|J6_2xc2r%2tnWZYU|;kVi0%~QzHX4`1VY=# z0}5->b*D%A7@ni&flh*5tpr#Dq_fGeZwWZ< z$=gSE>zkQ6SptgXmSj&qf@i%mkPBf^YX;Ymp;@6b50DxqZeKfbC+*A_&rLmw&_NXo zk+hfgYnEP{|BaXL8MVY>96g{81ErT$9xm&_?S8((p z_~aC7Q^!%V2DRs$|JzDTCVjVDS5Ped02P)GP^l8pZ%5Fx8YU|6*u`9hj{rY{r`{{M zKn9C2vs92KV$1`rFIm;t%>Y1|+la;^OgnewQ4mB_) zQspNV5Gj2C)Zw1j$D6)ZWzzvyQOc51Or^FEQ5#~2hE~2BY-CO$=RuX;RnWsNNn33= z#anH<4ou3q*qzLi(-YptkWFKg%?PrHZ0T;(y<_Yb!%ipicU%+3cDlIY0wpKLan?LQ z+f*7I5ANP)*6uOgF}#uJp<$_>nq2fEKmcteZDPA7L*e%ST%o)bf&fn7mw`ZiRNbQZtYKe_!C_8YXn zI%?yX1St)W&TUDAG6XZ({E=r%9e7z-_XWk8XoLxc`ckAz4euHnAA1PHREDbmD&$)hmN5YP0`#H@91tlB1bn25u7;sy(orb8Iww3~^{u2_z^cX6F~YqXD?Z!V|7 z8ihlsl?}p0UN~^w)Y=I}H*7wkPxySTf3iysQt>+=ll0at-1I{@X6!SzTbLR2u2M9Z ztrAlw<+=XJAtJqcHc%mBdx~`{;iyW)Bgo|?3P_cZa6gK72`=Dq=MeQ6w~ldb1}-SJ ziZZj6ND{0-x!>I*;DUiE$&Ji-uj+)=k{h1d!Va#6Kx9WEIXbgU2s^>BR@0PPXW(!v zIzRCj{$YeKaToX>^>%lW0cSfQvn-!ZRRMKiO$+N~ecq^r0vB2+AJM|u{>c$SU%bg- z8<*Lz$>j0ZlHfR?_X1@PU#M^yME5Uc~YbIC5Ti|0@^krqvV!2;GM9o1gF7#OC?>0^!pkT`-=MM34rq3r=hJ0q$ zm0FF?yOcWpP2u+ph5T2PX2T_u>z%<%zI_^Gt_T_Avr+7N3nn4&Mhw}^Vp}dJRllm7 zyH#P`mGZ(2`L4{Dzu{RyFe~33LYJ4)($;GC?J06bxyv+&-08wb5)v*q>6g2nAUcK# z7AtG3Gz3^=`S6eye_45BTQwsKIvCX3!LeV(Lav&SHw*i;r#VEmQS0w)aFQK4^o5$B zxM@#mok7tu%tLC~=I!M>n}-8iJ|p8-6&c41v3#{|x9+qE#C;Sw6@g4K>ifMNSWFx! zO_6e(Jw;s$<>S*5lgoF;fYH9SS&cO`)J;73k8b|~jH!4(cIGc5szhPLJ7c^`gVTz~ zBe}(u;t!*ON>NbopZ_hjaRycPj&U0w^iK5>ri=t@`#jLH>PqQy3+bj~1xGYzGH60HV7eKms#=uDPBYomiAaMD4!;{UPhmWrc=&!!b^oj{A#)B~DyMpmuK>AA zB(nUs&ELE*z^L^OYgT=ONhohhdm@w&w!$HMW!TEa@;Axzh6Yn1O);RkMcqfhN!c-L zou}>3IqZ6zvA9%R5`+Vkjjp>iXydNM&S8%VT&A>X=KQd3-=)CZ;$gjFCV2ICYBrArcK_g`hz#r9sI>fN(dS zb@ot}mP!}k)RfaiHQb2J>kA;L^E_Tu8(26IJw0$5NyEJW-M?vlu>e7?2oD58$pPT2-d7&C)J%%sF%et-C#Z>4n(BxY=j? zAXdAVh!iOg2rj$Ts}6@o!YU9Y(JG+306j%cdqT&eG9RdVxia&kiC*+vS4b+F2^F~p zVh3^$0bL73QJSf;FbzD{Mk$U3rNIpZO(7VbACMy)A(LysG&(b`q9sEDoZohqFmBQ`DYqYgE3%m48cP9LH9`Pax(^*eevle10t#- zThg>WMy&|h8IUB*fen;4Ah#>$Xc;Clf)HN2$**Z=TP*ipv^NL^!~#o1|3(1fxD%uo zfD`;fg_;a6nWZ{F+>E`O;b{WcU3`MIk%^fKOjw|H{VjNgcqSl0W?=bV=n2Jf7oL@% zXfamZz0Qwx4Z_H7!7^bTvLoRa6~DxAR}(A7!>7+To>B*&!&|t)v69}~w z%Wx*}z0&mM5auk&6FJqeLSP>4h?QH~dLm$SRp!f%jEyxkG7~xsUu94&7;-H{R>(uo zWVAL4wH>MiN5-T{kQ8MpXEqS3O5ndj^Rx?MAosCG%CZ+eo#&wpqG+cvCvJFfLC~8Kd=NOlZ zW*XsX;KUI1LVbq><2Lyvb7fONn3&Q~wvAS0!R)4sqqF>(e`sK*0q zfM)EUvhfLTiy%qZp}<;y3kDojj1Z7tv-C2ShpNZAr59n5p)DVicHT6yvG%tQ`*ieY z6+xpFsp9oEU@FWP2M2!Jgxwl=g;&6gYJ(P1oh>iKbu4!UTM6EtQ44{7?87!$m~h1Q zBB>V|kPRo5N;}4KGtVC3bF2<7!wP7Xw=EdxaT$TE_3RJX{XX}$-|pz@Ekuu4*tGFy}y8>7R6U#1b=;`+*; zLS2lQg#}+TdyKcEfh044Z@bj;j351l_&BG4W+c7NtdVF-7 z{FdKd8S<%6D6W^r=$Z<4BztS zi<#a28dWb=iti{}02#+*=Tl!UC_%2p3Pos_l#EM#Jk=5kL47Dnar;Zu7FovyOxviZ zMF+?CsrV|>vK*km7Zw7mmnP&up%BtX9DIdJSDhpOP{#D4wmj5Tu}#m+(eX`>u%yV= z?Jv;n>oD+esu!vQvDGxI^s&FYQz;0T*|U$Q?QwkhMXCy@`%8|AW6KG%nC(m6_K`h_ zLef&z&az`m2Tjfn%AiPvyU%=uq*bo|Sv=%$8H~OqYiqnrP8OwJSn}>rsTcTY58Lpf zQ?@2eHd=QRBVhAwC#Q|lHt%vpozJMWjU;5>kD~(7>iIDCsZgbis?LnQBB6AW|C8oB zZ}zd%LosZ>QWPt35L4*?A%&~j88A^FcpNu(pS_D9yDrFnsvl#KIMJ=QrI!gtQ`L=r zV}MP&-`2+^E-nl6KPBJs5N={IF?rxI^$*+q{oc4Uqy~or6+<%th&5WN=s}WKxJo;< z_iYe@IF_{H#grrG^f^69GV4mlycGAKzNIUR97bW~Sf|}JoUf*QBqUp&%Fj}q_&Vv&sIkvnn;m91vQIemaKaHt2+xJwnb5f|3?M$>dRUzi#XNbNu zQ#)famZM%C=6g>ep}1*eRMQz>|Db)s(scokQ|-!}6RZ00p7;oWEc#K*ItEN`Iqe+1 ze2Mr2(~Qh=DEIBW!ZA+oRmnc@=M~BQ1{*XSOdbzmhY1x}g5@1oAlD@~j!s});UJY; z>PJc$-CUk)Q4xHyZB=?Ic&l^|2ut>> z&6mT?old8Z0RBozw2X&b)hfN?SrRnbJrNrGJ8?NQiobgqLMxh%gHn;Vm5xC&XV-I{ zjIP^;PG*8;=maQrVx7YcExRNNO~G?>LZLAE{GYx$1a?_0IWxn3WML3p2 zb+}Kv65KzDq75&pjT-+DE7S&Vb-~eQj=^*bD@rF0H2d{9CR%i0LV0_g>OFw#I?n{=^^}j7z4bVw7gL$aPv!X|gaDMZ|zb?z<%nRGtINv%K412_1Pi{YB*>uG#I3Pl?> zof+j!)MK|AQb^7uZ*wI%bISi3@^wlQOGmI|l7O;RX#j_5F| zG^IDeY~+2yWfOR z>SVIPkzo3qmswXtY;8f&A4--jOKqJeYMBE0mOU*)#xDL@K!cSH;WuN8lcuK+GWw4=6Ehd6HOWF4wVZr0O{#AQy{-NBP#TdYhHHPBQQObs;Bi}*#;8Cbz-%1`Gde< zMG(|tqqDt#)PK$W?GuY!RsqC8gXuMS^`oTsLo`US&XP%gJ5l9y$X$-*}Y75~$X=JORRxQf* zn9Kh_&&36!eP#ddWBy-MzOWl-a2osKeeC>fmv{!lUh{jPx{N3FkAn9!jP>cYzjw z^I_F2jqzgF{0# z6YG&3e8?GNx%d6pzoHN*>~$~+xL9+rH;F@rm__!wS$ESMA}#bJ*@bjl=6BgB)6P6X#Jg!oyWMVC|};Bdi>*qozeXl4#! zv*HlrxvBdRdMtdB5!n^9`W&a2dZX|l;k5fdbxjaQX`1htP*1DV}oR`hD1ZvHU` z;FFs6>IQup?4$Dc2n!h5&Yjdgs$vEfw1ONDYqcNBFJq1ThW${2rkMy9F%-adXTNuV z*ge|`lUl?E(0$=$odi7ohSsYsM1OcAopO$`o)y??a~XS#)Pjmj*jE}&k@3D}<)lP& z=bve6GtIW36iEZ5*2qbfVvJX_m~Ut+BO`__Rx&JNd1!EQ=Ao?qN#Tw)V?N4oLuG1v zbZXMI0ZVXYfAX_CUa%m6SmWcA@9+BQ-Q3!RR{%jmK&jZO zbU0TvPlNq~m}8joh~>6=Xj1zpf^+YBEkxHtOJs*<=!a*ktdr-5Lmao3H+fnXnj9hw zHR7ZSW7xv_lwItY9() z-hx7n2?vlU3Y?Z&8wEZ^^hO86m$x?Wn097DqLbtpqjd+_@*9uVi(AWgXu6-l!d|^G zFq5h64>S24uO;PuH+Pq+`{7F7_7-aPkN5)X3j*H4qo$mXBfuE$0>L9iW#zk7S#bCx zeb>U$$RRz3P-c4P2$f(c@#t}r@%cDV-f0hZf+cQ+zQF=Z6@a(ZRbNMgciBI*$w(K` zu}nGIqQsJzS!ku*<$GZit9Xcp3A8mykte`4CGL|OXd|`<)mriBX10WR9_p~}MqouN z5Zo<^LW*a>(g0=P5l4ahEbO^L11k(CGN|5#S{#Q^C!s@PK=&SE^|$xck@77iS;K)q z+L#G~hk1SkPcq_pNEmHUM8+WI4aLnd{%s-?W4aGlio1_ii*_Gp$>@1_Y=jqza#zCO zW*Xd}*k|H&HFK;Z<3cMAthdk)B@9k;8CB{G(F{b#?@%rRqLYWvTxRk$@mAV{6^n(- zY$9YKhW*}QGW|Kzzp4z!oUtNiF2ckK89#{5ST7?>f_{R3#+3zYAY*o>rvP!T!-SqO zoj4$5(Q?4vTYCdTX2NUp$1~vZ5OfvMe@-r9Qw-xu;DVsiUa$ty2}wRIBF^zVC;U9_ z3LOmLIl0T2Y%nT-IvDkCxQ=c>z&0-M!XJn;!yj9n{r1al&kjk0?FLRWQIzdaFGp2&h zAZduF~24Hn`ir2RhmomzWV=vhLUzHT=7aC=?z zv`7lS!yN`g9eK75d^0Il^mXzywTH>K824|$aaT9+6$PaDJ2jCcQ`XwX(o44?wU9u% zcSNOaUVj~;_XA~%Sf+eZ-D}fsNd(N}q2C@-K)8INqU*(*4t3W2)8!9Tf@Vqk6D5wOBP_f%mprVPmt>B zCa(T^t6><*rbQupere$Zl0|wMqP^(OwwdT zo!rOudR&?9lWNNn#!K25Sob+N02NvypOTxpED$QL9FBDkFZ;50w2E9RNu*sKO++vN z*SJhMK4@B;`tzax##SZxuPbjQiq8`X*1qr`x%R)i zAy<%sefd$*#yNi>^PFg34&R`TD{Zz=M&ZzoeSv8Uf#rOYb?M;{CIFfYHIn$E3@0&zzsij*RixhWC zcjnH3SV)YpH5O6oKd?ff08|q|RaX^AL1x#iA0YpoK4$lroq4%_lJmKTdt`WKR#qT^ zF`E{uSn++adU&{dc${qOL(KHt8W;lZi)cM;B`0iVv6v9Lhl9E9c3@_?1X@_IGPi3u z-6~|S6FeyFJK3N>yJ6gH&!gFO9(Fao$6=*>gr@>!DGi_FGeA~TKS%$jT2|Pa2oFVp zLvdgmadHzWYw#n=kc2}n3ohov7DNKiEY>=Fij!VkbBIZ2Fpyx-Yf?Md8IZFGudw8= zfJMlyd;>YLVThN-XcjMmeV`S52$ydSQm!nINfr7kVq^@+IvIJ*JYiB}(5oi47Q4aBw|V5R3)@pbaTA)_;|kP#gN z>@TNV=}>Xt(G6JvL_8GWtc1I-;$NW%vUub5-mdY5$^F7?y~0r$1n1o~jTH z(|LMjb$w}hdS><)YSm@>*A{XxlrGhy5b}wpfR>(JrK1cnuq?vz!LjK8N1IZ@h~?v3 z=m{-cdXX2ao}xqoLSnlhX4($zl0D)Hfdkz+CdENP905Gx_!IXHy7d(O3KktRd=c{# z-ZGBo&?VtO(%Veo?Lez^k@lZ|{|BuLr>rnriAl9WEy~1^np9n#1*O`cdL4%YBo9F# z2_B){A$R!pfnAIh=5puH3|>+w1xv5fvE;dOBukEiI~QkUSdUHTR;V!OobvZUhJu3_ z9sHHd0uu0O8+r0@1r4|5AlbToI)_E>nR%;LDOUQ?DpMp#;|!0;ilgA9`M3%|b$Gw5 zT;Vy!3N0$89*mcMQd*a<5d!j!KF4@bYNLC8*cTP!>}MD^77J2lwd-C5OD{?V7PC9R z9}1znR0c1#j6$IYD$GkGdY}|C{Y>iME~&xNpkwm&>PprRw_UY*lzSHG+$pZBbT?QX z?L*T(!I>7>yzuDD@b1bknbXCeb2p*g} z+8LC3gm-;11-!t$D@@ke%;HPa_chJdTkPa)QLI&?vpFK_IKt=7o$QuaJ%dP$QyE{Yoia`pC*?nAG;RAV^IBW>bt2f^X_djt^|85l`AfG=5lP#h>d zsQSOo^UracJ~m&il;FTOR~Vks2C`Zsiu@UFm2Wug#MKT zrdNz1j4JMBwtFbb!Q;qUiOjnDbfHDr6cZY&;v>>Te?|MoMI?n`FJ(#VD(s1Fhc@AM zIiU37KmY!JhP{Nr|M~a-CbBbR@oE=Tr3#;@U!+t}TIDg)n+U4d?l&RR5$I9{u-@3-FS+{jq2gns}5gj*5)vXFO*tCoQg4P+l^v<*--ldbjb3KsO<1RQg=Gt%C zyVgP+R7zFZaBry)OWCB#Wvj@Vsfg(noGV*xs%m)Q^IdrD;eiSHBHoM59WEJy?x_GO z`I#>ACv;Yao=&sq55wH;yo!06HHfEuF6}e{p&jT<{6(>-uo_Va4oJ=phpz|2Lzstc zgnrD%?8Nw8Ajp_zP_S|gUqgj=z~DKLJhZzMvkI4`mERR-a#?*@poRg#o=pD|?#Wl( z!y}lZI1iVE)C1{HdSWdYuqsq~dP4sM%@uB9f1`ut-akYJ6x+y(BdzBuZ=``t-=EOW z$%G_$LB>3aSwI~wx;o%pZoCkkTYMGb)K?&g`w80H_ju`L&$%QNV7*DK8;H2%8;Cd> zv~~~j@e47{hak%~`*O(i>T~76mL)u>0@f(10Q+(Ou+;Mw(|AWOPvMl{rC+_mB`9>O z3!Zt-Y{?X!!$YJ`3wf22x#po}kvhWwFgU$F@{B8;1se>Ne$4;n!#n+~vk&QxC@v>@ zc?v*upeJxEV{3>fZ47yZl7~WkN$y@@3_Mc$`E&X^Sp_U@rnHTMnq$f^12<^a(;U2P zDlmL&#aD%}%+(ctRZwHN6reeXuV2xDw44 zgKS|0fayn0w~#A(9MdqF@u6E1>J|<@_KtL3a6TzJ^HT$Z;dND4>|0Dz8)knBH>rK(Ytnz0#nEdVu>(s#MCb~SD#8)U_<6%eKmx=iX@b_! z9yO85HvAAUeV=U$u-X0IrB{^r(E?Hq+1h`bXHsaf%5sv03#}ru&G$rJCPEvg=m%#A z%V52|3epf6Y;~v1HfAaZ4VmO*ScRCqi8p2nczB}+Ia==-Ui#exMM1c5>H(z)Ao0u{ zbsB1NZZGK`F0MpA;q@K`7CCSvYWj@xEJi0O8kS7oamCPpy<;4f>gqXZE6Yp{&*7cSgsU(zgMg>tjo(g>E2 zEN1nT>i7X(dSj~F;_RJHbgX2NGJLXNt-v%fMwciGEQe#Fp=mon3(wMIkzlj1brsi$ zeOKmn7J*4`OmpxW%LJQOi;s~0a(bh+)8zSUS{Sn#6qxk}dj?4%eXTZI4W8FhYsi53+$Mn5A%>09Wp$v?c*I+NX||8fTfzecv)y?)q^D^ zx29sI-RRmmy!6xQeR^`6YLwBt^DZaI@N?hS#O@q17L}2efTo^Hx5iq^R%sYoMM#mK zhn@W%&b0?a{BNc}XK?8UGaN)qo$VGFG&g8b&0X$swkdE(;9ES2)k3}p+t!#GihfsiWi)0AmbW?pOmE4BQ98zR1%ks0ix;A|jg1-Dk;HU;ly0}{ ztf$M>^fz&HSMzSM)#)Q<4S`1#Qx=MxsGZT33x+vFOK(kp4Dg6;=)OjxAe>nokIHf; zM;v-C&NQyS%Zvj7VEU=!ULkncPmt(ha}Xw3r&Y!K76Q#o%cG9HWjX-?r5EwPWTFYI zL#%$_>qdJw7pff9$s?#7T6%*(sb>)e&Dqt_+2~K-#cr`-;7uE2lGu^N|l!_50_poS3g;2 z3SOWNX=Aid5e?Z01X$@=`+7B-TsQ*6iGiLmoK zhB3b-dZ6^0*ATM(n5Oi5q@H!Q%w&#H0ZYdYIO&DXR++4z5Pe)Uv1f*uNrJUfVlwq` z$Y+DdOaUk3g#R%aFPs^b+R3|NXCH5dU;^VcU(?_iGge{Ngkb5p*#H`JtYxWfR!w^0 zM2%UuC6sWFqVfuuUiKE)VCUsIi*ADg(lX7AvD+6_dqpBL#w6nrIlkFGCjBb^kQ2!< zjTCrmk@8;xFntj6&XOvYOp}pERbM!*kSZ48u^aGCV>*)sBpY#GWz!YWHN)ZrLMAJG z&ECK^Q`#dk^e9EI(==OjP1|tCY*cxDk7)zE^b&UpzJalp8PH-rYVj|RZV_?C${Gt3 z@fUP>WkS~-ycf(42S_UBUznvXXPpm7x#YDm@`UCcMlY~RI-K<8tDQFIU`c)@htY)m zj_6occJ|+N$(d%lI7SH>(PBX(tFZesvw*tB6SI?=)*}_u%2NHK178$o63uHeayiX| zSa^Hog9IkHokKBdbWwcJT41R3%&h+#M5k#J`0F5NIgAk(r43>vB-KGqBdk$x@Yzhr z6ypwo{1Y&<_`sVrl!z8TwvCKlqwnF7Yt~OMd>g(Hu08l!dOlhTU6n3D4UaMwu(~xake&DQ0%M{Ej8oXDRm=>|>k}bXdTu^IMyGNFlCv7ArWwxS7_Ggq_gJ{}qO%-@;c+}$#CU$>*-|jN zD^Pk0n(Bd=huAbL{{piON3YwyjFCa3xH81_BXR;Uu9i`{_2nJDKd)8LqW zuk`%27XZRIN50BQH`U0O^%f>068NBJDNMg+DPhQCdSKM5$q>^E%#Q7r<&)oF=@-%? zhBf8{R?_boSb9kb=d+zU)b7XI9klh@Dw!QMtb{6A6|_6O(eu%l?{sRhAB%UEA=a>2AKM*l6eOK{Rp zCP-gEPP~mS)Zm3C{Jc&X&Z1vfN$qatjOP_MSpAk-WF?gJ!Xo~|EYth=jHa>q7}u`( zXi&J66f;Nja@K&Qw-?>3@DK}8>EJ#{Wu9o@F5!>!wDO+rxhk_5i-59 zIMTk^!}eWxUN2_S7S^XnN>48-D4NLwNs*;y`ou7l3Ozvk3Kto_Gsa{-U_{edAoX5vH}GsauJXbm)wFix7=cvm=Nw>q zdzRs8`}sDR>38>#8A(RK>t(%u=M60SW(;EVvch6gp!CX;gS63rES7qQttK)M9ht1y zQ~^pq#Kjg0M}g;O6Bk?bO#|m}(w_d?L6cI+(~VQuB&_YRjuj@4mtOj_W6*8Z_io?$ zW=(@*1Z3WTt2pUZ_4ZoxEi0jT5G{8Dy|xnSpi;hD&wuCQ6?inUf|~u@8xggpjsm3@ zmvJh`G+h>C3?R#5dH2U4q!Tj{MT2< z%v6erAu6>M=0TD2n`s~nHrxKa1sYOU2Z?c)o-%c)CHAp-aL~L026q&;Q=5!Jy%28nhLvijW4tB<8t7nLGp>~Ul3H-@#w)jji>G#v*5>@ByavK3vF3TjV zadHt6=X6d1q>cbS&bk0AQL9Wp#HduIW=;!9=@;lC1BJm#QZ>jL??la5+aXRS3(C7!#cI9V2QaGsC4$3fFs#a4k29xq3j#y+avksM$`g z_z2%4_x#9JogfQz#& zMAEVDbx^n;7o&TX?k5gPZves8r%Ej!5;Nx$Z<%k}`)|yYuDIaqJDv(<6Ph8?&wlPe zY$MG=;LCG^AD-EG2YZWKXh=9MSKjT+i`l^nGdvHNUU~%zXn~$W#njuK=5W9J*0eZA z<&<(+qZKGU^9qp3Lig=|sF>o5YdHIFw(afCn2nN4d6p0fH>k6bT$Sr_L`l=v{SaMB zcR+F)b%l&_c{+T47RnV}0+wEKHzW{J#Ci!Y;&&)rfa%5xZPt(Vy#WrayY2PCaL?y8 zAe{eo?O*=KztI1=_-4Yk;oIlwD|%Of6TF3+Oa-mKe|$)0cj?s-Cp}NMJ`#mRXWn3* z?v~t)D>GYH%+Qg91weNlgWHLiM^^H~i}&Za8o0UA%=scJ$g@r+msmG{JD%DtfDp~p zZ2m-133xd}JWsCqK6jNfw%Y|-q2_4wbE)%)xd5rTGTgvozsH_yi7NEFvV;}PA}}~8 zPy-j)=$G5jPgB=!z<_NgZ-x0!TLq~@MKvH_QPOMA0fu{R{1{czNEjPa=>iks#g1mb z-?TTZDnxq)n}sI)j1FYULH? zkkM>8y!6JTBY>L84B0zhmx&%1Of*4H>&c7MygfKk`iE~iZM!2@v~Khu z23YC&c?M2?1~N|@7HDN1S)p!Z9hr%4g%HUtok-i@yVM>#9V!-eCM-#f#mToVkA6Co z^h4Tg^p-OiTeq>ftazXwG482=~a&IL^7NS+V^E2Kz8lRT6}^8qy!&b-eJ_Fz}b zpXn;p!U{S?N^j0P%wYKFni~z8aF)FERg+VY;0u?(G7@o?h9g#!M39Wb-L(X6L|ScT z{?#KVhMa3^uD0#NgYOVoUkJSS%=PBGOrP_Xni+&p^_HoiXMM3t~EC((($v$uD^ z@2;4MR!^c^JOqO(c2*4*yVUhgBvA?KA46VGBzdSHwu}`h?&PvYR#@!D^s=Hs9=Xmd zX`mDDR4X^;;UcOh-ZQN9J-B|h-HOS0c#4^xtk2`H()XNMiw5iztxV)gF$5I~jdmf5 zne!+?nDY?6DAqh;y_Wzx97VtFenE~*9J!iE3$fWKYedY06}Ay*P${Z1zk5KrkW5ci zG$>Qg3Xf(vob;%!VS3!{78xj}HZ#uZfz;U9sWelgzxD_0#iBWJ{h+@~ zmUnXSl|Nn@BX!+`;0j8;%23nmYs+(F*e5c)qKLO25VuCPxP)3@P*v*Ni4bGcFPo7$ zNL|_Ig^T;ujC_TS$_;`msj|f3JDBt-Cx=gF+K4=Gmk8kqoAHDk3&?J-T+_txPOPKM%@q@$#?6F>InI z@N?=a5c4K<3I6G=gIyImUj zmf8|Xh{Av;ds2)Rzzy?zG2Gf(R4B&U|KSO%91!|xSO+0u6Eb)GyG2ibgl)sc`Jxtg zp@=uBCuH0e@FUM0?GWr?fqQP6 zo@b(4d=f!OJ#fwyFZ${$Qp1%FT`SjXau8TX1E7YLN?l*Xbvb9%y4s)!=BZb0I4WQEVWJ1Hp!(qJdvRY zKz4xLt~H8O=(CJ)Zv=4xG`&KuLBwDa5w=?*GR;P03alr#hif)lp^zplyPlo^y+e8p zFXpVfd7Z~Q5~^CQP{@!QbT`i>RH@VN?rUEA_kH(^m?8a#tsddYszSJqtp?u2Qpohu z3+L^Eb;X-jZu=Ve1GX;^)}iJED1xR}{Fyqe$9Z3my3!q~&HsD zhZ=1LgQTCVX4U6(v2hrvF4uIDK$H@5SYwj(;@11yoM36=CGtLdv0s3)5Q_I<@vzk;@~c z*JUSgR>k0I$$4f~BU`vkDmrfjqoSBcVlTd-7h7PlX0PqH7$6w&N6xs)Z!h6(@}Khphy9-uB3?R$AVKAULGsG@v6Nsfryd44K&;w2d=-RTVU`mV5Y*k z4#U81PGO!Kzx2H^(G~Y|u>_gK5r2&}&=zk8jXiqcO&b?V@R+uGiNl3ZabU<6puS^K zgi5cx0{l9`hn{xGUy#0qeZBmN`G|fe1nu?$7Bv>MOc3&3qRTEYihAWRY-$XtD=xe_ zETj5)rm{}0%cNMy$7inSls1u8AJQ9`Ra7C?G9w|J#jH8nRw`V9o0c>2U@l#h?$vsR zy*oB;LCP9d1uBp(W+_Q7vm>>ET0;?PJh=PBw75d&@(x&(5mxe*d!)t_yzcr6U;Xp% z|9ikP6tRAC1S1+2oZ?-_4tof3YLgMha6i2JDBz|>C{lV#{{qoftt_rjQ}&Er$KE5Z zm{D5tUXd!pO3!3}gYJSB0^Px$>ClQJgcd4g0!;c2qwz%1ek)p!V|pzxAS)>bpYDuN zs>-qvqtUvV{dUlWX$Hc#a5AsZ{IqmQ^Ew7kwdgBaqOpq`I)&UD6{1xOg6eT@dUz;h z$)*MpLJW2gobu2NSiPx{VWp?!Z|cHCYu0dSmHJ)Edy37vvEL;NjC~-lVh2;4lFl53 ztPQ@dWgAFVgo~$}9I_qCnhK3Y%a-(Ph^AalxX`l1A$|utp6S|{sajlhijIp_5~N^x!0#NX$S=KV#-c4}L@<(k*|f zYzD6_?sk6XAVVugdtC7GiB;k8KhlS;3Xk!um^==}yrc(DiZquCHxs+NT^tB0&1-Q) z9-Y{T04e={T%|A~3+=a14JV-?QLqy!XHd^wz7SLd1J=g<*!_m)8KVPQN#&l^=&`(H zaee;`Z!)^dJ;Qyx2`n!1SI`Ua{uVg9GW-CRb=KqiHR_Y!2)RB$O26m&Jid?VEAB^% zS>lj*_D|BWa+Z@VNk*@d9(rtrV$GFHvlB?^|Lbb>@JGt)y4z`Wh6ye*4k;{{Bjjju zEzK?^nZm%g65x*T&Y#?}dwgQk3rOh$S3gWIgcU(uVE-5Ue()F%BE9)g`m#CL!R;tA ze;^FFq|ctz8O73B1*G)fxK2;*V^$%+xP=f-$kYgCUl#Tq+3~CPpmJW zqA#8NcnXQT+~()R4^fl7gzUb^N(`F_o&4Wo(k0Wg3#-dz_4%QO{3spUr$787edhY^ z2kZbm`*Eqc+jEyXDWZYT-c%(#70`jj#JP}1Yy;08om9<$lwRkWJ$r;vCA&IbV=a@X z&rWQ7fRsLRtQemOALio(saQxL#QNRe5a>K?Cy1hisCRL2IhpmWj?5|@B_O5$;c5k$ zHQ#)VK)}r3H`j#u3^%xvChSbOpRfgAn@g7wxb#cA?ZmdlXV?~+6R)N?z&6 z0ZI1fA0A*9Pj>rV*!K4!zj=Z45thXf#tyrr%ilvax~7_V19Oc%Jq^3GDlDN|wB+y* zfTi#CI<41EU&;x(lgoLXxuHWVS~;_$d1?T?wPmf)1 zFaxmkZ1BNMpTWTf2A!YZ2+x3VjQKeofPpbX24gmbhP#8t{ripkb`jN^LK&8hWWa+6 zhxP`d9L$yz$CGauMN2p=T!Ht0qgmN$n!m>7794^MVccmtuf2z8xB*X;f(_Daw!+d# z)`Q;R!(4a98DjM2gic_(keA`%i4gus^5&BN$?u&WHaOG73ge^}D_I%>l)fi_fWFG(u&GGd(I^>~MJL~d!Fy~2~IiRk`!c#$L5I5ik9NMLS@%S=KV-FN@~ zIaw}t+n-CIo7rHggXE5qsa)K;F6$vhOHUzJEZuz~z7KS^K7?#+ZsH7u=svpBVRzb! zxEBS$QoDaYKN<3v={Z)?w~SfPj7i?KcLTWq5G2LNi<4@v#l)RJ z;*cW@&%Tee!>Gk{RHnWtt;FnTSE6E!==1_?`o3Dt^q&%KHU`0)ys1hYp<$+6+}>3- z_zo+*;G)vqIj-0V{Hsx7sD39DVDrN06YWLcZ1y5;!KlYq7emFQA~~a?j2H`74KhZ1 z;PgDLf*Iw(2z;g>Syjl{Pn#ky+gzCSLhYI1YLmx?)O2h(`$IH9Ze=zwy69Mt6aoW9 z5>+&lrM{%Fn7CHp(6h$~6Ou3^s-nUz9JAwAMKO)Q{LqXPi;i-US#iZpAx6!Z9BO*Y zt(?t!Qln6SexYDIbEKsFu2hsS)t@^f&@1Z~s2Y$hZa2<*WFl3K5*Z%=re}i>SW^Bp zM;$}ghdAY6ZeOd2GuD0`F-Rd|dM^9~Zm*sTH=a-1vmsh>$GS3^3MvPep7wu&()9E3 zRJxLW4gm8~^i%C9ZmZY!8nh8YI@o=NYk${g(C2e{;QkG5H6LsyKd5yCt9 z$3|YANR2%5h#HxlChJRbWEZZ4)!%7KfK5uNk4KD@OD=1ArQ%+uf{a=h**FPqkX(JP zvw?6jzMbo>k~D1!@d|NX_Of}xP+82vZLKcRIOBSw<&H_F!4JvIz0o&+GqtEc4NHL2Kg>-0nQCB` zX6}b{706Vf{?aT%PT!%+MO2BhIpJcUt*|=woKVp8OS~k5%z}x0k=%nb0~WWIyFIV* zQX{I?KR}ku-1c$oswt?SuFJwQq7tyakc!2jnzP=AI~xaGCR2Ibl!#TDD$Ha#gj4-nX1$ueML)8>0jV8yXkK8 z_e0pj=^}gs3l3Ke4R!t9v;-LWGk4legk#)E=wE%0I9k*!FmT>)I2)s>O{9UdM6L)} z`kwre?{*1oH*EF0UD480`WN_&EP=DzUOlQWOBgDBhyMc_b9^N0O_{D<|M(apI-}^k zoCUybb|ejBF@0KpNAhs#Y5ylEja`)PUGGVxpPk3`O)3@>FGv~=)Zn6u0}>~>gb{I` zp0eWrfYN`(|A63YLjVs!pWYJOu+dOYYOeXO}&c0esoW8B9hQWlu<}TNtZr(e3C5%So%k< zz~e_0oZ4!$`!IQdu$-PIR-`Y#Ew77>Gdo^qJVvP53s)C}n$6?2N?7>e4%qA<#}GYs zL?LgRQ^>bYp^1B_-5{YvU;Ob}>^83~t#`&?ezTF%xIU4(}2F`TU&DvrN?L>x9$ zP-LjXe>M|-pDH0eg%4Kb(eNP@BgWK5eI2tO5%~43>qi8Bak@r|?V`?{*lc2a-^d$) z+3QsKb^GM$_eO{uuR;JDxtyLpJV_#iT3_XsKSikZN_%&UQ-PIE1_YjlV)B?R#MJ$h zBc>?HK2jr-wGpYCD28?yk6Z8ygNQESX#8S#+rYzPRz^eepFE}5LtWDY1k~=6$Zqc= z2S09-x`;ch8k`u)1kJOfM~0L;;%T`64BHw>x@U;XpMq0F9%4dA?GF$q?ULTu-Mz%g zcZ}U#(5l>f#u+MSDx{GZWx8>yuuJpuZZ8z*Pe}s#5A;4SViHDy6{2b8F1Lt_1^JZz6ru2%-9B%^awTTXVAMTO(2ZlMR5< zf5rbmXqfe?Z4W!O{(4n3)00N+m0y(ln(J%hdDKcDvoVU{n(Z#a7R#OT^^IZ$*!1$U zFoo`Tv#AVrD9e+XT=h2<0ZZSLKk}Q!po`>P*5GvvG6x1S_eXw`4gN-(s?{3mPclVI zPw8KU#_`sDQa$Ow&^Y%;p>YRD`It*jevHNmTKdU~`-?CAEF++uZUIp4oL&6?kavF{ z?n(!$!J)Oi#NB=?JGK#0`Um=7G}U+j@ExKikp0YbZGFE(hKJaCj}2C1(!#l+M^`Tl zX?>HHhr?4oikxrgaEG#4eJFak$sD6IJzg%%-AGf33J)pk3pfD_W6jO3=Kehk*$Y|g?`nC} z^z$$f5W#nx-+&_CR?WpSV~j@bN(vdJkRvnV^^MUXA`%1#_!xP!a`A8co`)f>zj8es z@)as_ehpEwG(%T^4KY;u4*w_LGEIhLsOq=O!=@xtb@QK1#03dxMcGaMKoqbbYC!Xz3~a3*8Z{?+0u^d{WBwqPPp z^wM9_Y;iggBuU7^j&rsUH=wx-kjEPgx&!$G+d_UoqKh@o1WZ!b**5vkIP$!qmhBe3 zul4P>ud$G~2V~14HKJ_x{!q)BHKO|fCbpU%V9nzF09RY!S*H8pD~J2TCST<#jA6aY zETby%bo7k<;Up&uz|w{r4NMlvK1fM5T1Y^LwaN=sf~L?HBSzrq_qD8L<&7sWS10@h zLnd`Of^=F`6hB0~<#`l$?hge{1#5d>SzgX3IqDyd7Uts)3|^?dXM)sT+n z_J9=`^g5b3z)jC&91srKQZ?paIVZ)`EK$s4h!ZC}H ze2@PY??b5GzKXM5KFr_s8cUL5Cz4bbK|LVzQ75SfsvS%aI8(cLO)U2^XrvBOQa?pY zPw8La3#`o#5xUbx9&|p>!Gcs4C>&{RE@3anPH)VFoS`xjT;IZXHg{hE)Gko9AG#nYdifjoKnvI0BUSB^8gdj= z2%CO2)!t(FBfSnwjz>I6C7is4xe{N0lhYp_@@3e1e)^Jn!Pi4hf0rKze^E{sy7CFr z)Bo9|tezX3+#HEy|M~a-rf1LhSTRF9?*3-8Pmi7WIDONNnhUj|c_l-+QNJ4tuy~!_ z<)`F6+v{#nf-U_O@3O&lmxriLX)=MxYegmf7XaoH3S`FoM~%V0&23)sgpkT(5g z+&^?UdN9b$bNGI+D|edAJ`r~+EuqQalr0PUdep$VvC(Sxhfrpq_!`EzHC$xOK`LuD zcu!bnU_&Zo1B|mKg(*N0Quol}rMJkuLeO;b3*xJ2^<@F(PiXNydScbtI4eVuU!dH< z6QDmLCw?2xW4)o%&rj_`B!S<|68bGtF2u6hJhM>}$EgjVB-zU|#7L}gPxKS_v}2&e z^7Xi+MJeqhHCCoNxgL7<6fRhw4#ElZj47QVUF`8TX(G z;szv|L4q4tDCTPM_&`eK;ww zh{!syaIgmrpq0$In2z$g*aO$G>Vo6ecdjltZc$!Etl}o;jY3u=PLM|aV{gkSS;~(e z*eIUkR0mKln-oBeVBtrQlZhc5T6m>_&dtz5I0s}hO2j;VU`<=csux0j?sGRiK*&$l zO=PY}@Lv3`TPgfD9gN$7!7V>!ADrAg0#ur~N>MlvWrNtkOJek}l*@&w$>IuiIJsr> z0L#YBaS9%z2F#}CM!!8go(r8qsCTV+x8dU$dx4N&QqJb4~srJ2cNj4nKA z+36k|CEo!lNyrqZjh1YYAt2J({kr;cabbR9ZfddrO23?1B{v~oh+5%EvD)mB;N76&7ogB>RTX=h?pSl#k~R>&W6_CFpPtD3_TMe?hfuZ#P>=C+&31Hq5$6wJS<^p%Qgu z?}$ox<>nz|FCCS#*JD@N2G(#&FEX$8VQjKnf$Nh;bwqA?bpYiQ-N%n0a-rxVh|BFk ziCj+hujl1E|@mcsvU<6KYk3=j?-+w=$35Y zocOxeh3(eavI>1r=lnXN4{(0XCs@hTJvq5)2q@(~c*>TdRmWptS= z6#eNsEMf3o!q$zKt_Ix$>^Ih(66X&rHq_(7zp1$CHUI71>|1oT*YDQhC+O_1^GNIu zC10gcq2u(soE5ggurBjf2CIq|tl4;rg&o63$#g9KfqNRXb$1V8!s-t+fa%3o#6Thm zh7#mbMw8!tyOR(8tXNQZ_zM6q`Q0P$PWNDcbA2$}8xE9?pwerrh$~@O*u{__i#BVb zI*ae%Kt$A!RUj)|tr_2L`!_rku)B`bp}U8JPR6K+=?AYoJb5o0nVKR#sk!c&lH9oBvnc46~RP3TG#YJzKf@-zpYS3x}x?XuI|q~|BaoaJsqa?S^?)|IzNui1jns{Fm)iY1ec zbLqS)z@}GT$#=;Td(Ye;pJyM3yh3f3YsH+-o^3;EdhT0Bk~}a9g_kIyeYn@HlL^Z0 z-*n68G%;@G^K4YS@KwRaFzHPf{WLW<$2Qg_ju60#!LVN-vhwG!E4*F&%J#iN+cKQ= zta}cdPj;ZWD!+xa+Q8FLM|sh-oQpa&1WRv{gvih#jaskeOmj}j^Et38-m#@cm~S6* z5=MGM&JA$?zH$ScNCGUHF79^+xfhr#2C$-uTLhC{rN+^pSTm4+yX1qH!DF)hgYDea zkRuOXfaCg-G4FQ!+uD^Z^Db-q$Sh7dGh&xSMH@X-`Y~?!I_o6bD}9WB))sv2^28F& zSFUQ&iCM474k!JPdU(Fm>URg-ts%WdLa~9_9J(dE>kw2_!*zE+unI-Ru2a!`LG%eo z(o5P4%7LMNhaPS)eO+-~WSr;&lABWe8boeG1rLQ&ytYlNPzqI9@Yf_%*mmooV5j6jv|#Q%yr;w{;&`cSdh?h0 zIr4PM>wICdrEB;>EluSGz}-RfH|X1h;`=!V%Jj?p zlaT%f(f3-7)@}#7Wa-nh73YJX3IMt5K(ZPXanoDVzcndFf#ON=%pVyf*C@h^f?G zH{obv#yJF(C9@PI$&9GeC8?8C)An42-dRx#50##lnaE>wMVOrQYTz2anHd!!_!V3M zSbA2r@rk8b>g~^jkFvLQwhmdM?~IOBT^uiBOM1KlJiX1SI+&Sb;<(>~=v2UwTT-V3 z%?8sW6>&>Jj}U~P1O>ctL(c`ugmJ|}tt3~h^wM8Cy&2Rkl!UYZn9a-3w zgNlr;mHg$%>5XNzpCBSJW5hJMiaI%iib`g?1}eN!K}8&bABQ}kT?yAb<%k`rLc1Hs z86c)1PdE&;=JBv$w{#b-G4KY92YwdlA>(Ji!-PveTc^8*uuO4u?>fcXl9?)hYxvI* zYf%8D%jFYiXQu^4!NVNRiw_K+-i8eH-;!bo(gR!w5$D*4`5K1*9!|^{$y`~t5IFs4 zQYu1w3hATNKZ%<9c+W6B7r5!yVPZA%qT=d>pEVUV3!obWoqjMK!~_&N>?7M@k_EVI zG-H->MZE;s59AGX;pMAzKyQR?{)l!^_5Z(re4U7_G_`u3=kJ!5iX0Wvdn||IDa)DXb5koXCzhwDOfxFB%t{ImruhFlIcb2Ojb49M zz(7&N)02}W6|Rsi)wqJC=-K`Pe;*RJ)2#i`kqRl`)V!HsW~0xHj?$;J7l*|}*16|FBWt=eT*w@o=n z<+?n%xG*#OVr_YPy<|RAEY&3A%c%Ws?f@PHQ-j+5Ykqp5s0K! zRAs!9G0sgDgtpp49e-Y;~oTVk!C`CV%u?mGrgSx)INh22tdD6FczLMise+*pJZ75Z-kMPYRP zeiw4o99@s4?RaNy_PG^vW39vG+6Ch%>U(pu3qR#{<(fO3ASv=6AeK*JHWG|to?lvC zoPpF|U!7R_$$;0KjRsFy-dkE*o}KyC;MeREK~m(aE);fR<=2JD*~O{p=WBK|9>16D zZPM}G9Y#c3EWuR1%kJNvFHcYWw6usf&`q1h&;F5Y0itr9cU+Uugct4DjMsuk@(7x8 zToaDP>E+4kNrV$m%uSmnjo&XuQyEZYJm(mTLp5F}9?9gul;MIh{5+2tVOmphYfi*d z1&4!EmRrKIxUl+ad3JUB`LCN!y962u-OYvoG%`U7gO;1|kcZ{{AaLRJS zwF2UGe&Uyv)#a(#7qht&Nkve{xRsTMRaTjQvy0OUSjhQf-7)50fT&y_yB5w(znGZ( z_0{ac)Z(j^nUzxF3X|HnmX3ngTD)IUi*+sJ!Dy%?9s(?dQZrR=3B^JYXjNMJp zl;etPpZj)Ybs{&1#-D0OE{YIR*<>%pL7mi)<%xwC(^fbiV=uL!$|y5-VR3C`dU*w# zkm<)`%-8@?xkQ3Nd7Pb}{flKfh6M9?$|DkNX=3%IY0WVt7-K2E%!#Gx<(ZYWrKQDX zE5(j6CqhVNlMz~)n^?suVQSXyGRGL908zO_BM}XJcAnaX!Lmbj42`4+tjsd=mwug` zn0z@+TFIl>TTo?`*|;(>GhLV|$C!;CPkCg&gX~ydU0X5}@)-M_!YPZ)N!SG@ zr%MFlG3I0lsca&7SN~Gzxe9|~xgWwDm;_L1Wa_UiJYSocna*3lk1_QFMCFp{Kw^;0 z`evMtF@`!Lk+@ie(b`0UfSc)&x?PoM&G1rV^OgDv7mJi&v_-bN#VQQMy)l$V{ zyh(KA_E-k3>@rsL6X;lWhdjnuc|7HjMYWCzF*~`wJiRn$ro}N9RS2nUGIHyai*xWm z7^Y*4oWd!Ktf}?Mr8WH1+R2$80z~B!C47BmdGRmP3+p&bug&EYnqw&8d01tY6}C>< zDUW9K8#x&nOYvp)t-pjbWpUY>q>eHBJf8B%X1q>H!TNvAuCA9U8^_p;i@?gPEyOll zPzjIILd8=a93Ix6ug%V_&g$eSGiui~{Ex&|_A~fJiSKB<5lOuEd5fQdDLz)3e5FR| za5j!NeN@vZrm|tou%64^VdHnokz4_yGF?(8wd#k>8ZQ$osT5MVVCsWhDeI z6izuHFV>YeY|8jUU@=>2)@&ufLkj9mXOQMWnuTMs_U?}2cLR_C&TbNv(U0hh7wx*B@ z6|4%~;8`ZvvoWG{$gzp9>oSFSqnI9;K{!6s1K)e6xc7c~We6(bE-E_>FxrBPuuM(< zv_Aa;!fkcZ+7>I6g^}Cy z`^}hzTw|v(SjwO+n3>4MMAmNsLn;0RVSO>T_e|w1yc@f!@@+)Mqj@T45j$m zhLsc19Hk8crW|LdW+zwI=ckun*d}Lw2xTon0c#Lgec|`=&4t&9aTAsQ6vraoV+e2r6f8Km-EcscPi_W0!&YxC1NPeF}Quwcq@ z&bgVnL8iZINazqMkAD(-q~M!9^4-~j{#oNh=|Hs3@B9}c=1gbQ&UwH5!~s{gt5GwQ;#Yf zAfskMDW)=>asQe>kJQ+WG9bmi%wIX<*W?^pWxA|}CQ!grrt|zS2%}!X)h5GIV-_1M zWjO1;B}1*juc2=TNEW?#YO9OxkQCjGapA;PcZ|(>?Had+zFJ2#?>ZSYtU6X>Z!Lq= zwp_~oku5%EFlyL&@^H!%w9Eg*a2=~%8Km;va$k{p!e=jNw#DgC;ee`K{H*m@Smpho z$m@>YcCl7C%;T9ASh>$Jcgab=jx;5~DNq)l?^f8>)WsJli$6b&obXmRsEaR9itpBK zK?AG1ZjJus))8VOrk9J>sJiPYfb(sbpZE!vO{a6F{u*t_fE4=zf2H<*vpQ>NXBJF3 zPQeMaJ~3s-x5k-7VHEcq8^a+l^V?#Lxf4Pu{#o}We2RAJ*Vs`4Bt=Kh!<0|n%B8$Z zt5(m4V9IgPajZ=Lc@0r=c2}=qkdH)579{9o-t5VF6E> zuG@cE#rZ17RzssM#Z*Sqw$V?1R#MfF(C&EFcbNnsTC!qVExOPXjniO$$7 zDK%EN1yhbQ{Pn`x@%M!cNU<+0Pt2~c9|txVEB7Dg=A>nlad(6OFNoYr;FGbBYnNAcj(C8ymQns5lE_-Eah1@lMk z+8g`F^$dMIJJp9{P(!~c#nkrP2>vzu(=3sS(Abd^j0b`3I02|~o_F7s9Mx;cT!WZh_)a?&BGXK5jxLKZyU#z&Pr-Bv_ z)#8B`#dDGQ*=L8}5NK^>F*G*9{u)KZF}F%{3b*s5E@s7@V0Q|-5>j{aHe&cruze0( z>E11h>xih3C~4x5m8jIZby7P+-sE)=%Jb4XMU=5=#B}A_39a=Ug|zb^Jw@C7X1B#V z{JYJK?!nOTe>s|;f6V*&KhpOns3fvccLoX2vgb-EtNuG12ipUK`o(Be`mKOonQAwY zB5&J0xbmDpfOfG(?*QCuZVc!JXj|LHXk1%L7;a7oiY6XU=9-7@^`gsCU>DEAxQyT7 znfBgTB419ZKADhj(4NJOzqVU=%LNZKQU30i?PiZ!c1~Hg+yBE?n4)9nReNFFg zx@SqxItI4-GuZje1`vS49 zb*A29JDf^Ll`l-MMl=`}Cy4;6<&KZ6CR^C?SC7C-HY# z59HtP9^V5f;X(0t2r9!x_mx|w`D2HRiwNwOlT<$Gx3}^7OaIV4GDQDco5PMj_+?*NGRz+7s5yu4)DsIdF)6;Dss%W`t6||)v+Q~OJy_;MLR7M zsaIs~bn%$XZ$p0VHI%8}kDWhRK_UBK(tVZu-0VYW?%EX~A{-Sg6Q*NDcveo>@a`HN ziRmE-0pxMp>h|~WB%{bwoypz4eMdH8()GJSbOrA|V>_jXcLGT#qlDKU+Vlv9nG0h_ zNlOXCo5TTu^cPyXTfrIKjrYAS2|>oYRWI==k$0;^335*enc9w3f`V6w z@Y>!iKT1tqGtW=V^ByD<2Tx1pcA&8nhl@y+KXy-T-J7IJw)?jJN+-I9)> zw{}e%#&!&q5SDLd@plKuhTmCfzmwp#%HR_gak9EYZ}4%;WJjX%Wv|eT-I0QV!vBRl zC}yjHnH4_a1J%;^=`goXMD!_&2-|tQ57x&(`8lgyh}YVV*o7z|pjT$`H&5D77nW6y z_pJHf4EoqruBC+GvS$cnw^V%>3XuUHJNi^Y`-2|SD_Lv1T?p=QD;N)o5(0XO9%0+I z8k4AHco`J0Vp-_1YMB($zL<9yWm@(g4p%!^8)3~O;JJ{%zmJW+nFtUcrd5b$XQ#dP zUbk-#H)F+yDkom*v&XACoEST%g;bcy6yxW901*0 z-G(Bf5%j*dz~7qP$6K>_={=cu&wdAUQ{=0A@%D%uEJuaoqLZrO4Aoxp9ufmTzL$JC zp}0Knze!lsQXk3M+Q*Yw27c@^pb`RniQXVyz-Os_(D(a%qAJ`%y%!~2<7`SyrER&Z)5 zVY?x?{0i_A5V7O{2^QJO@E~fdd$7-kkx*)k-N}N2!gV#a zDudE1)8GA8$4cc~_8LQTzfZ(26X`4+(_VNK# zNn7EudpQ>o)C((AJ`@eI0w9&>dGWBD$F43{MvyN#m1_k!^mg+h%@-L)7$2ZK9N+~^ zgFki{vvR`mKCBDy>Pq$Lq^!6g(=I=>EaSTzuH&8I9^R(Dy@-{-=bB{Y5bx#gC2K={ zhZ+PT-wMa#vGR>d2*vrOLp~6Dp((>UJiy8}y)$-Lxro4CSf%peuxe!wdlq(lWl=&a zyNbU#|u zWN49~cFG9J!G4D`1BR1-EQu5nlG}JZoiMbw*k;4#Hx``Iaj>?OJZnC-<9sn8J7cD$ zh<+H04tF}+_Ov%vm}x0N{(!dMpMjLT1XMDIxQyM*v?ks4w%vRU3463LkwU_A^A#|H zm=TyOgj6C z91@xLNY#9N;?;Z{Rn5oLn|I>czI8wwimB*N$L&vtDOLTvq(^6%RQ+4Lvag!z7OfZe zBP$geG0sl~6N>ueOG8pVw;r0ls0as(!HOELhp|<&)Bbo>dlXf*N3m72Q~h{VJHjN7 z8PF#uIG|7Ry(V(Wiis!GYkwLyKT1|!#VzePw4<&$7-0IH4eX2i+xL#P<_aZ+`opQ< zUsQAk=EpaV;s;_-3lT1#>Pe-&`LW=Y-VL!H>zrU;w{t8GKgF%Q5+cx_-D>{r9-M!j zZR;qhIL~AygzzR@g(%N!?Io5w?2*aL#Gh%fFVK&DMa=}SI0=|SLULDmI=!_ zDge(7PMOvoRB_k~iU`A1=kP(u#33w;``Uz4{L6!msr;WtFBJK?fZl%5Z}xWJrdk_7 z2#_(lztx1LKx%%5eqCIL6^CnIKnOn5+VKv|Kp#3|8H$4kC4PB8}>0H zBt?Y#gSpN|pS;E_YgD2u$0cfGuixE|C(19>YvgL{i*Cm)U6-gPm6=kb*Oe>^_ zAm5OF%NC;IpWfc>4hCqT>7t4=n*LspPruOeBv^L3Z-?D`&3$Y@yzN8_mO?>+zdey* zCC@RtV46b^9}HhCRxe7q{&o+p4||5FI568%LUm;S;CzN{!i-dfWiKovd^gcX4!cVx87g_%ecM>= zlGv24Y*9#2ekPCYN-ZTce_V1P!PY4H7d1@gBA+?5VFwsJJ6XmzjLQh)CzJe%47Yv- zu^!^csDYPVe`HZ7rXMRTnE7%-c{zwyd2!Iea}*#s>wesZx5B_z>}^>I0X{p8(#gxk zSF4Kz`KkNCR=?eD4A~Wp;c4&&=akFP)>Uz1Yz&N$f9q_&yz{Y66M7J4PzP~`(-cAF zJ}gD;@or{1phB;yfRIYvl_}Hy4OU%PVE3^-B;uE3*9LVCLSxBKFBOx~)^L&BCOvkv zvvN{}k2KH(%;6;S!z8kAdvjxbr@f1M+UZ=ORJryC1%>j5sWyU}x6vTym`k!TcV`Ug z72e?yv@mdS&o8E))5x52u*HqOV&e#kNF6Q+2RD;N?hXABne=%mXva5W{b=;YS6W!O z?vX>)VRD;=nwRm^D#U)9o9*oRt1blkk^uIao11V-*ggmDs0}z*Olt7e#6FJES%d^h zD>_wl6h0A;F8cSjKn%LOEWk&t$chW1qYUzQIgUaUvLP!U7jUo3@TJCQ%IOD z%sGrq?A$azYqYxE*NCisZAdCo|CE;&w#&*ksi!}YDPtxx?O|)j9WM9b-KI5m(1%uzLnjGuT8XY)veaz7MwAc9 ztIKk-!!JrspcR{PzMRzM1KKfgQY1#1-l3gOPIC9w*PWqrecd#?!s=5jDU9D`Sjj*C z{*Of52&e^o%+O0Puw)hThv3T@(q6N(pQ}Mdi}U4#|Eu+Nhr{f!FEw`AvB!r7ym8y< zclR}(>XOHBnvrQd@J0!jTrpw(V%?!I@f?l~j@T<*8d`czi#IpyNu@&X2#N^X$0*HA z{=(Js<^Tb=yUhU|6fl?0`$C;9OH^@k2+Ii5cTJRMs%2=8tYN(EBmOX%n4Ov7kN9Jf zSFMu=9s~EYqUD+?B+Q?&@dtLALaf3{yZ=UyxL179eru=mCcjNp=#_sv( zg*MqXCOkYX)U0gD$vR@%>fu!=5isp=xTBZotlnqEy@eoQ zhWsoy0EH`76{0L_5Ux{6t?uw8Ew0k^)>fz0p#{v};i}zMf>Rhy8?E3@S~jU;Q*5e~|t}88sr^HFPAxMQH>SV?D@(g+?UP5~aix`Kg|V2YAX>0-qtkIHuv78~ zq9sERzVj;{(@m4>`Oc<2%5-7HLB6c45Zzv(ofn&=Tnxhe=Q1Gwlr3KwxZHrB4fH(*N% z@%uO_0fT9$=?~%IR{A4L^I)@+-vj|LR@HFDgzAri!d$p((&@ok0nNVOe4Fq;CAj6< zq+KzaMF1GC^B!s^ZOm{6Wu*pJC+NGx;Uz9E8+5)uH*lzVVq>Zz`qPyXif8Tj3@Pk3CV}0il>qE;4QA0m-!*CrB z;kCnLqdk1vZto}bkKz-aSecxi%{6m?OQEJaqnb&jg#F8n4t-*7mjJ?jK{m|h?l!_k zhC6#inl&5oNATO(NgLB_DJR4qQ$!TuxcNjMpnHecr?M&YyR{?5Oqt&w2+toket*Ce zp?hiL_fGEt9YyqDYFdai6NuVs+Wj%2g<4LS@9Afz*Z2$l5>dV+A~tPO1>fe@ww+fI zZAKAc{u+NW>7={*@B&0{k=rAS&=9LJHT!}JPZS#3wHa~BFxjRsaL zPGD%W9J0y9q|s@1*8>EVFrovk8@KC8G3kdd)zvO^&bGpw90v6D?O<-taU6{(_uhC%c1zRT2;&`<5wg$N?n$;3UPLb9FQFYV zX=SEDzX8#&5sw!hAR;8QDBDJT|6Zw)GaTwvftm$n}I80WkwX2 zT09GCL8#mh-h@UfkD7;hq5C@W67%~cK)QV-cr%kAW*3oiQklDoBcq`SUIt!8;2$Jl zf@6TIa5ZZlj~)CLrV$Yt-%=|h>}CEXe*(?^`K~km*zt}y zfff;j{$BB4xa;SdNW+AyblVA{wkUdW7y7;&-u&?bWw$!c5^nXFh~q_AR_X#_l;P=2 z1i=BtltEQwS0e|JaTv6BC7>8QR{4ur5v~MZP%3bh;(l2}ob-^nVW-qhn1VHiT}leo zBXG+%+){sWj#oR`RU4TXPJYYlE}ZfNP{<<{H|4dcR0lf`SBKEF=jkU|W+|Hg!9Lfs z>nv)Y>#3*Wn-*@VG0h6{JM6;EPdn^pyWPV|z`t}6S-?Y{(_I3-r=vo`{cVdrFtf&AQGi2hrwttz zPHu!$z#)i(rc2L~ZS+*kIx1pzTP`KkHz)ZMq6s;cIy`G;$AN)$55y>pgEvC(Woz)p z&775=k#z>0NlG#a5E|Q8IO5@NnnYQviZ>TxTE(S=^!pZnV%`Z_Ic8c& ziA;_<$l^giMvew$rC08`O5J5Vu9}rDe8$fzR$7-{bH8mj^!U1PS*goIsSAH6MW}s(V=}HGW)wx3jJ3_h! zMTPXE;4AKfDauL{c>n!YMn5bri-@hv7Zl2~OtH#$gD};+!ie7$)8|Dfj9O0M|D>O} zInY+&Sf;Odu~T4B;#vV}FJ3k`tdTxKyr75>ev3bui${!3eghJnEHrVS0^ChHtPF5t zf~Jo@hi_8QshKwsGMfttG2ERRwkm!ViLL{Sx9{TM)Y;1g<)Zw!ok@xb)4$6{H$xmE zbe`YZn~fePvm<^^b_dy_U$N;7Bif=?d))wzUUJcL=*&@PZ&p<5g*?O_4R^r0yLMLw z7s5#Gu{WyiTueA_$;mII!oi2@I86s3To zJ>*MqwlL|{4V$$)rOIrFoF*6^^PpkP9;9(Dl+%x2EL08Iu`>IGw`mMRO1d3 ze-jEa`hI?Pemc`e zf|I3p2s;$gQSu3aA{@e|uvFz+^W~3F0?GOfgCWfauL~t$<39LAb!#bxHPReDe9+i~ zmzAO{!>JMR#7jAfRP87CuL6B{-cjVLi0s<@vqXND9B=?A1wE4?f-0w>fgk1T4jpBG zD5hvr^N8nswB{j()cd=#fBVs8o1N`XptZF`>;)!j))K~VOcw;+KdNE4aafv1(`JAT2fuDr2V?&!nqXRekm+*h#mu1 zR;uxptDXDqM`xej=QDZ}$wuJ~aR0(}$Sn-_FF3fn(Za|LlxF3$Q#5*@d~vDGZP!EoYjhIMER;x;J0&M_%LH7s$W;;Ml7roG#Pa1B zc}D%<&6rXU>bhB_5vJR$q_qB7_6Wo35wi3pY%xv+@yZy^;7D53>)0c9gfiv}3U$MO z;gqp%cZgLlIbLZO1qT!(9R6WbW;3ogDi&^;Mi>>Tj4*#je=}+5vZOCVV`8Rs_51tQ zq!y!eQ6b^`3j5K1*Ac?{3|IbU;=XcT5;#ltHsr9BtvKDgtk8*BalWMRU-QOlzaiSW zywyC|9ctLq5f@WfR`|XRzvE_49qje^LZKWpFwU(u`QvF#`;Ojf?GKNv-EtvMObES1T*SBtSv0G_b{b8l+ck$6D)0nUUHSZErfvb9?8gVM=`0+2QxsC^P_h4M2llD z(aRavKEfifhlH~`hRYQbu5Y*8M{YP9l&A^&l;$7$KK5|r)-v(AE%POnR=q2^+wBrcVn@-t zdX74ZT2Q;w%VTBFEmitGThHncQ9&Vk!Tt^Ug8P+jf55u{rx6)_v{JlwGCvw6mLUmA zsdU5ex3hYN-L_H26$u`)5>lVfw_Wf;?imUAKG*<4wp!|OKd-jiLtKqAizZ@Txl%&; zz^0b*c0D9ckAjPB-U&u$U1*Hh#&Q%Yd zlaP5<@~PHfrDDSR1gz|tr7)p+631xeHlC1hy`7!OSc<^VlHI-Ynii7YSPyoDrbT6> z3U}#mZZ%6w?f&78k(tPDfg1_%+fyHS{{uT9^I|2!|Dffh3je8}xf;6Qa1+5#TwG?4}MG>jWZT!i#AmwBm4;S?~jEKAu)bgy;5e{mG zKBm)AMrc0W#^1~ns<-?l@3>~B(Nih;P6p1n`7OnSu^}HFDZ*f2+oi9d3y=;Z=O=hH zw_)sLS?6^=9LalsGmVWHS&f{x^Ug+?OdR0o0vl$QeK2FE1l^%Tk6}j{VaHV4bGq$I`0Dzr6mv1( z?7zk=nrqU!#=ATcl|Uoxtq4@?E>($-av^_&6~Ppiioos>AaZ}W^m}}Xl`fFJT%Dgw zoE>U6@zki4S9%%3$zjta5lU}RR4RlSg9?dMCtWX+tUE*5KOWvDq0#v)NMp#b5vQi&T4=D8!J%^Y% zCQ8D+H8Fr4725D}7SGsGaYdy9A91DJSJ|kz&)jk^0Xp}e*@Qt6(~Zgq(RKD{=k{&0 zb98WZ`Ka@m$_PO+J2f}WO^|bX8<%(>+-MC!nj>x#i^r=*@M9O$egKWzI;5CTekLE8 zb#{JY=~0>L?=`~C-uBL>jUbHB2wf>*{KkD^!YN9WijWb?q2&S*NPNMwgIc-F9e(GB zNHIMdvGb#daDIV5nb4g~U2Y|QK}>ZqXOZwHM*JRXVt!+eI5GNy!u+lOg851Fz&GIw zENHO%4GpdjB=yDa;=Q0I1x=XNM+A}<5u{4@i~oYU{m;bp4T%r&KSFU3YSheMI?hVN zUFdSJn5sowIxc~bx=oe*6Iaf;s&R!*IPnL^tlc3ElC$B`B58WV!>4-qDFG~mhF2u7 z8v`TN{*MtXu3z=(W>PfO{l!X)HpZ%C#gqdPDj64&+I&c}OeDyP8a(G*I#DY@a1R;Q zF*AI?7%M?sF=4|BVica=v-0;YdD6v+K$QMe!3Rww?lGJZrwT16q@OrZj08Y1jj*A@ zsk)+Z6Qx&iQM7+#`!N?1vhyIbkJtHGVR0kQ;yxY4w;gAZ#=ToeKDH5%9!qx@X$f+^ zhQMf-NhVDRXL>M3GHF3+)txN49N%MEdh_Vs?9!Vjv}d~us}#vCEu{|4L~+k*@iC&f zr%L=c3%JTCjie>Z0|^z1EQWlA=Kz^T`9w^dS+lWG)UwHtmyZidv;Wh7!4p;wq=N)6 z3OiRA{eYc;yhhtTK?^0vz|c^&yhia?n3K&wL}(OLMk@0e{mu3Gua(6GsOlU5!23Ny z%qSRu*!+(Fx_w9?$A%C{_l^I88@r7826v|0B*^%{)*1Q@H`XgTyIs1K zX~-j#99K%1zjmLPmS=cQYc$p#KfY!86ahGHe5IIBe!S}>x! z9i*Z6H2Qw!;rUP4Qw(Lq%5$ZJ@$(h693raDnP;FP(C$KVZk0A#BU4eh@N{WZGsDMA zzZVp4rmT0LTi>ZcwBobpeyIw66M@glI>sVq8kLb2e@cH#2jdupPxksTae3LghY*rl zVe7u2uzuse5b7R}D;btK-kZZnd}z7%UhLV(@(7J-Ps0YTu?>9>XX0iO?i*P@;y`TX zPE0?djI`(rTpxC)ME8Dc10Q>IBcB|cfo0DdQk=aBX%}k*ZiQuq|8DplcPgHQhV|Bk z!6Lj7b=kms0CH#E&SHs`J?dh0#iRn|k7{R&bATMCzle2hkN{q8@G%D9BVo* z>*0K-)$a}vnGB6kVotc{?bf_Ec+=|J!$VXZs8m)5`owj>Lls*Gy9rzY(1O%+PNsnUB9kDu5#5oXzV`iikWc{F=@HtQmaPpYp$LMt_B?(H_2^Ap*VO&nlo_x zQ4b-xl6N7_`t8ki_bjog-BiRT!eIlxaTZMKx?IV~HOFm1)By$rda#+5j?E552dMJZ zq`@ALsfi@B)4%-whvQ+v-~sA!`=1n(O5Sv07$?Ljy2A4kx*s$>*53We5GDHdC=+qg z=0Za9DSzM=yT4dgNUMa+ADi}%escgtgy|msWFBr7=Tm?JyK=Dq&%gigL9#Hrl6?Iu z41~C#xdhAEfb%S59lBo(5QyneS4?VDiU{q8_>(CE^Q9*Cq7nDK4)5y# z5$dp(*h6|muLnhi^)hb{O93RPyw2lpo13wX&^KHuA^4NrSSKT!m_J6H2(lLPCHJDe zE2f26QK`Upt^$na`qx_c0DsnvCmU0`;R)$Vz5)uJ>BsUeOKpju9t|5HCR zwfI!X)^tFpgxy1uXZjP~y77JwRLm{@2iAH*sosOKSMWkbRmzo*8OItogfAQiV_5CpRFAOApJGhiu|?2OVqvh?#g)NZ9W5=mV3H zFxl(kjvwt{km^f|E3?1omf}N^vjyMlW1lgTAZEdHDIx!)$Df#;g$reeg6WOF%~^Dz zLXki}5CNulE_tqsdqbB(PJz5tUrRAegdxz^7Qc6o?dM_dhH7hAC{5JcB8wv#= zOmgMCoMr3cu(i8kb-tL%!li`z>mGk{{p;RhbO-)qqmTD7p?w9Ghiriy;wqVGcFY2y zLPGnjM<3i2HIJP8+iQF@@9vX;#*MMvo-7%odi4$|bkMFA5R9F@u9#Hi!EZizXmFSD zxLPxmto|1S5Rrr;sp(9oc<}{-Iu3G}9B`Nc8W{R3Z&G)?>4K^H>9jB`ZOTqz-a>OOIox*MQ@cgbBy#V?Q~ zu)*Sq17md?@ zF|2O|VQQ%rUXB)W6Xde002ER{^W8KwVz1cjS5v5Rd0PA!Va==Hz;CKuI0 z?F;(VNzkMBt1Bn`Uun1mS72EKK@RBpIh+~JhapkSUX$+c(k8LX4>E_EY=kBq6qOo0 z3clh>&_)4lPI)HBayE9o2nLE zp8b?s(@pktRg3emZ{DoTQ&q{%$}HuhAF^lTg=bR>FM56+Z~QsDz02#Z{Rzek`(ro) zz#l*WI46P3bBdz{)m3#6|33n+Kp+sXlL+|}gM3^WlZYy0C|poKDDc~KOsNiU`53*@ z+3#qcG8e=xGrUIKGr`eWqdhMDY{gx>FpAg?m+iKZf$$i zqf3Mr`!kNwZ9#+m6Z;DV?>%C|=-L@Pq1@_0)-c}XJ(QDaPOVibgZv{cL&3_uv$v6# zUHq7s2u-x`_zvCH9OV|oUOIx5Q8&iR<@z#hIfW8(`ZAR<;2$siEi0Y9jpz&}xpTGF*y8sTic?(@ zpd@YW@~Dd$+|P^@-R4(!`Hh~7y`SoMW_3Qq;e>mCcbkVAHqdGm+nxGiA>C{lJ9R2z z@c)GVsj&BN?_Jp2yS?*>a|f8y0`roG7Xa$iO=?g**3ELy{p|lQgROcevRL&bB2v6XJ9^q z992(uw6-KiBX1GOk2qHjd7TVIznK%vmqGUSocYq`N%$$9V(JD}hiA^{;T}yfS)>Bx znGth`jnCwK3p5n@Hc&XgGvYI4X`_%``CG-!=1|v0A34q~Bv}sjN+Xr*^Wk5gUz`;^ zFXKw1D2&EocdvTBmUC380nUaCw+*voEE5MsOZb2u45a}{N4~_#?RK6lwD~Cb&iwju}bX7p=QS2n16U{fVAVz$aSN{pn(ix|L|{J5H=Ax_X9v$7O6&)4xqS zAHiSCf7fd;yZYF!)nkx*y9XR3Y{&w(*&5ze7rJS*BUIQw1n^q-@sbT)QNyg()#Xer z|CnzcupHBw=qkA~pV`P^Zyq%+`HN)|8~fn3z|QH)$Lx?MaTXlE(CF%?bc~@>ZkTy4 zN4ZqSK>kP_tFTGAPrt-m$~C1fL|brDtV_GaN0Du zNy(_?KdQ|!WrLm&4VvN?bnofZq&u}I5KH+IRmKU#63ZAgg z^!2WN<=$}PRVO?a%}Z5TJ6?4$+qfoeGArA-%#*WD8E_*Bq*Ga=KLGGwL&x8*)ZL$s?Z7gn|nCj4#7b+XZR=Z;ITW0o+mZ^_Sxj zW!YhcMO|hYjNF1QLq!db55a?eWpu+UV#J_rgX_Fl~)Y3Fi&EcB%Iyl>sOQ|G^{?0UKK}JEttxEq z<~MInC*wi}=r5GVPvKmDLczpz$icrcmyO8`VH-%_nPRi{0IynUMv`LNN->$d$^+kzY`wW3kCL_OoS_(RX_^V>Yx$3xY&_pw*Xdu>#HU8;q zd8C?Q{Bs$D_V#^#FKZ8neEz=5_U_d@T01g&w=QL1exQHSO?~gSdriTMgs^s-@3?`_KK~DF!yvuTA(dAJEgv>IR?rcwSN57xi&cb;wIC@Eh_{Weu-CHBj1M zP+J1Erry7In_V`v9bnhzY>ES3>u(Gw`kgPs-zZBPE~1f z(uHZVdaN-F5wnAtzNRAgDH+CaEWyy*jsK!3s$AseSZmI>i{6qj0Cw{ay6=1<*kbfdB-XUfTf zcjzy>2wyg~To@wuh#bZg-z-?9#Pg=zW z6i;Osj~0&>*Ka8=5(i$0D(3WCQ_iZ{{H%cYSmG{SAW`>4oMVS)O`{1W;d(kB{|FibgzP z{{8iPD$apX?Z$*+%Z2_kHYOa7&Iv6kI|_%NdmiCbWG#Ok#zs@|b;H*bGeAEvKdPGX zQP_18lW!iN;B!%W)|Wy&xN`O)I)u<|jB&^z<05)c+;HgyzgC>?5CZK9cdmbNClTly z5jtH>CR-3P#SNj$AY^{62>II=-ZZIoi>#a_rPxp`t#jmi#;~}+VrWBMRXvKv7ai`-EWI)c+lKEYq5HsB-DWKpNU4Ij1L4F~i|UMoOfly(@oz zQC+1VXM5C%RC(Ho@+9q>dYPTbEAFep`?aETHB5g;oNU-3bF$W_sYH*@Edojz)~76O z7^&uGM)X%LR&lz8JH=`vjO!*wM|N8Xi5#>km#mC!p(t$F{1Cq+MoOq|FVcsdSy>@& z@+8th(zTq)Q9T`qW_=`g&#VvJ<8gDz!o zf2w~{fRvVr4>YxVQC+<;4qi?mZVt5-0Xs?1AELu$61;AbFvSdoADSN(hc77?pFWQI z$6I#=sC9JG=Q_WosCb5>(-t(qJ^Kpgox7bi;{HH;V-D*OHP0~OP|l!#gr9Z2uY7(*pFi@i z{d1@1CgUMJ%Osa2m0)>s`N9Rdu}85m>bhHRHb1&>>4N#(puF)LigVz-pb(yPP`-UsWPDE^4R#=|ADe+bLs^OVJEQ!_L`-HM^b$aHVnS7oPm1Id$|5h_l=I)qW8%kiDj+9 z^_?nfFy6Vt35@Bmnj^t>ZgK`Hn`H4FTaM>{9brvTIC7?J*ksfcH^{H@(GiD+Q{1+a z$`gw%qTiqu6{K=?hEh<>AiQ-$J!GraQ|r)I^YYua0G@eQ55EhzhM|@&ZBQ?g5@|lB zm*elM$KrNv1en7A{&8DNv8af}`x9?V)HB9j{@<|VGc}-Nab~RWV z$-)Nuhx7*dEq!r%!qI6q$vGbZXfkqIA`3`8$zD1wnQ{j9xjQa{nj5fm%_TJP>HD<< zRu@Bsu2R6nAx%Iuv6}ety+i_hH_z(Q7e%kinP*Ko1KV2_Z>YN%t#=k`-+k2P=+UQmWH(`rjSATfOae{ogI&Q@A!!; z^s44YhZpKXs$BF*NL{xKiW#`qXnE9fyisLzrk{9`OXAwvm_iWG(-+C z&yyTJ7PeNhdnxR#P%`~V%l@`z9fdSB9NM}PhWGbF=_fK{1kIogLA|$V=&(5!K@RBR*xty0Glb6N-gcfe7XV5r)yz8 z4PoSroL8HRYhmeR66Vqdm(&_tY?(sX3xdwel`) zL-0~u(m=j&&59y~SL}DOx!mA7k)@1ea_^;VDXPfo>;>93UeEf;FPQveCrmUB=)6})M{dl1*9n!yQ_!$IVm9s1=Ka~BjNEFc zM>yGleM31hFH>fH^^b>x$x1fCz4i6Bc?(jVQHkA^@&W!G4bCT%bX*c+|6MECLOh^f z)X?-Uc5v17x2<4mxd40B1LH^~(Z@4dHbcP*P{{`9D;kteDb5AdrlvA=-cYYo~10E6%P436lrCBB6Q zgTS{rzHEy{2m&T=`Aq19WjN-{140uS%S~P*IPpLitsiyr)>>cmbAibh{X}J3!&H({ zPcgRWnso3uOKW3Giw5f3Xj?TdFAwHNu_>8h$E(*+ppZ7>O+9V`;vuf6p9v#l8a?*cyeh74Dk4Y zx51A%BBLTpZKbJ4;Vl2*B8N z7{GrSf4dxQgd3Ko4WN~HpuTmg!b*3I58?8l&w-6X`wg>}L+4WZsat)>7dRy(%C12H ziFf3mFVk^jOryaYurUqbG!coeqjy9^;eZIe4#Lk=xMrEE-a)TB4(L7GBXwI+1^J1V zn$(XIr=lpvZ%tFxB7^G(A=mj4y`V<}ncpxH{Q5ck3VV_O1Eu#uN-Aw3jc94|W$|GL z0>?P(n99_kmSDRB2L?Xx%TF#-BhusaaRdJ690ip&poaxMKZ^OFQ#tjEraQ`E=E`PG z0@8&sn3pt|oxyy!ufKCNbPYYua0ZP2|0Ab3TikRO`q zv+rmWTm#M0)~2)!9$3Y#$gKFvMXat-hw5^OVD?7Xj+B5%bgHcN-gVrp9?ux{1eS8$ z{fBP!K^q6l;k%I%$P(ne3oREy8CerksWLn)C?#6=R!6*)d>!jvEi$;i87gmeG?Q1v zvMi_4c}byw!@DsD%HzVB(R}yHf0xsf%6S+haETV(NAz4tY{zAhDeOuP31mW(k`j2w z-u|rhKfKD3VF6e$unAQ|AJ9&rItt>52RZGu86UvaGNQY&58^rbzt3S**mDjX6xf7| zs!G3JErtV1s8#)5^yMmt(Iz_LjPDK-%)%K`G2>Sp=t*|LD{HaelotTODzqmRE82h^ z2A5#6mikRe89ZwaLSoo=;4WeQ3I{~q4$L6+ z!C0EGS>|+^-2oWTh2+rX;un)PN3=+ts^kcm|qPaSn0*R8tYhpF8jwv%hcv{&}t2r=G`ZyX|WJq(+ z*kGb;d+qcU8avK0(Mo$%5)~xl)};4*rz?FAT5$U>Iot{jS~>&s(7-9~?#Z*bu5A9q z!Cc5_M91LgxC`;%prdfYq)+IP3%b%I+N_&p)?tB7LO+^~j0MaZdOYRW@txxvvUFTf zV7T`n1BIqB{brC*P*xw>fRP6W9feCiW%h`7jae&P;UKd>VDe!wF^$HR6=W3sgb{k z4~(*A>kav6G>{6Nd9kx7%P!eqFD-*b<94DDRTbIkcjhd;Y|2HUK`%cHN7-yeNt0;E z59Z1JN7mY3J{2WU!7$Vq>T*!f|&r6i$9ymq%QTdhvpIm3t6u`hHnx+!*D_LuBv5ARD88C_TLQJ9q zfR6eNpui>SH!F3p6)n11o5|7%+`|H&kAey5sG8DwD7kIwCd|Y3C!-`L2!;wfn#>N! z6h9Y*`B>l+TD|I;N^<{{HS~)+x5NXhaL;?R8qDRZ1z8qBIU9uo7U4iUt{%sm@2(~w z3kEi!eL^3cr;pTw1Ea7nk4NO?(hg@~lw|ds4Hi`&51hg_qi@(FAft}DYBLK4Hes95 ztKFm@x<(+~$XPq3jTB_zz$jeC#%zxVL95*?V?Y9vNH-^gql87)nQj~$7)AYAivJ))zJQj$>}MHB#mr(%unS!# z^yMRZ1S~!g$m(Zh+em>0LZNR7ADv(DR)`2@KL|!Z@SQvx%<>Fu(vGTij56E_VR!~+ zxGnk=1FY`gNOoB+)r}g{M}*?SiGDITIT$7Gmt}3D%2@eOpc8g^zMXVlM{)uSgu-ba zL7x7M)j`k_U_c|*3(xSB&iy!ebD%5lsUf5R!77{&@X`6r2O%Puh38F^+4M-o-pza-<3t|!9i2ufw=o5YQn7b zWy2=aN)T;W&n#-h?wN^Jj24&KqiWti;E)?J4!c-fJSa3_c#Zl*dBOyftjj=U%bY<0 ziEz$5p@%Uz;mY~VnIR&Wg=3Bq@C*|-0JA&>#nzJt20md>sJNrad~+2By!VtaPvgO z=Z7W~|B=)9(Z!PuTu{XgB;e3Ap;<7UP3gi($_bw3*eGlvi3U!Qo@UcORP^>ll!mV> zQpK(Gp(nUrave;!F6EKVH}%JCViCTot|zyh#fU=z;S^uc+0!aX=J3bPjQYw^vK zcGe+y@pwz)f@Qd^GpAzZlVX`I02t7SnlBx%m(`uhHRQm+C!v;TkY%kE#cC0WRl?m{ zI-oks>s723hXtjC_O<;Yj_1gl5;vzL13AKL_>xzDI_sa#=-$pm#xhTHyuVvg^s%AE zKMp)}0b4$qB7c~4g=MA6*_NwC2Gei`b4*o0?Sn@V&u(V0G%i>s$4HbpvcoZ=u)roX z8i+fcw;l8SKN-B9MW}4{5Lh4-tA{SLZg#v^XjPr^wONG(F5#@2+Uj+4&gR64_9XOfM6W|+?4~$gM)U$cpjSEam6ov zkdW1Ug+ncc34)<#!y_0uqO$b1F*o6a3gbpSTFDO9&E<#`Dijxn_?)uuN|>SzNjNvX zjjTaHA)2D*V|svCS`Hl;ey0WoG@@l>&KH#X3w}vkD5Q&J#K!`ma2l8o#*`HzT1T=b zrNVW@g94jygw3l7Jw^Jk>Kk8+e<+m|X;exnzyq&vS&8#^`pmKh*an;97!~|NKQuiK zx|-9jG>rDi>Q%)$b6DULo>n*dG_!p6#S2~p32vdT7FGHHHml2*&EP&1=!64saXdae zpL|swQazd3d>J1rW-V?TbnwNog#)8-Z|Xidw^OMAay_%i7|813Tj@&}1W^xXwI&W1 zvu4muX&F3dE1cPtQoXZ2fBwv}>$c-1&KDcFMNN4Q+(cW34s=etOG$SU!IN37Sw4*l zJhW!i!ziRt-Ny~0OS@QayyeNBy+o5J+f#8ES=Ju3a7uSbP)?dml!mx7G71S~Lc5nO zO*)Mgwq^%*FJM3;n#T1xUMh`5H!eoy*|H8N+i^mB+>kJl@7PC1?Bu?*&4Y0r_JkMt{VI;T59fYwM6p)CF0(EWL zrRF>rgC)QOx5y|^-yx*ZXO=bgHZi3HB6!8KDPJ{DWCYEc<2R-iqy&vvtq#7bDDMmp zXffJ4n&W-AT1~AE7Q^{Ceg`va%oR>eJ{AatF1p2v%uu17Zf@ae9IyySKCMDw7U?Ww z#j_D}mJk{~RwHS#7fsmFBf#Ie+r$hQ6KRwZdURJK zW3a#`Jm4YS#ALD@OPe&5h60yx8^Uj-QA{D3++tXF6MEr+floB5EFXFPl@$n9t{x8! zjG~^*-$XvstbJPPD7Q%967JJjfe(YL4_Qn$(hMVkNw{1ZCd(D=@I}w*X1Nq_;1sS4 zt9bG5z#=p#AQ5)p)hQp{oJ+8`4+T1*5mR+3+Es8JWS+q%(5~zAVt9|!qb>!6E$3iY!nuB6Z#nJ z(>W^b0PU0IqR~yvc>)yt!dddMpP<0sfpxXj5rAM7wjqDS4iM>8$Xa1H*nK%P@Cogq z$A}O0HI%inDBI##91sbor6=m`O-dFcjiIa+wv3901Tx{Aq(5e|MK*!|C8R9{p!Ebe}4Nn z-~acce}4MO*$bynE}J+B{_!1(v3c-^YIW2b4VDA)Zmou#uZiZ(v**7we|mcM?4{nP zy~j__EOT4xlwMA$mW$K*jJ+j`9xX8!s_6xqPADhc1u65wM;dt7mX?3F#^o#SgX&<# z#}NPP|MHDzzWO)%&zXJG-F~x%0!v6BE5YbRZ&+c~<6))zE4*?zRQuAc{jeF;iHV`z z-)w~)K1Yhu_KTie6!>4j_ne8(pU23aaMb)|E0Bu_O#7g{{iM0hX-p*+Xs%(^{T=~V z+OSGOTt_V!fZw;=PsXFsq@tkZs>k`J`BGn?V|#1PmT9i9lX$^Nj0w5VeBefctg}81 zsmC07<~rdP1f9f2g6=chHQ%+`@G3H)+ckokwbbp`*}7v{jieM9^!0%S@aT}LI8&w^ zGS=9$C9)|&UL!4hWHt3Y3nZyMenQVgKNjk;M@hCw2{$cp9XSIF#r?oSdF&RHH-XL! zc^Ve{PPij1E?>A{3uW{3L^d+?zOx#9&BD!RE4slYXa3ST(8!2cKsZ$Mx`ka-!xiOI zlEd!vLS+#1$s$IzvH|OAOSApMZEI^}q;R!xz`7aV+-Y(XOzDiz0%AaMhsmL><`cQ5 zmZGtM7)^;q-P}65B7O7+lz36jQ+L~GOHVqW-O{GoUksH zt_<076Ku9MSFP&OP-uydYrk93!|3zzA1FFmC8>2I&7Qd0qRp)%30(Nd7L$MIT@i?D z30|Z5pTbQOs_TlNL;O*Z!i(38fcS6fur>iA(>oA@Wsfq|BjShKX@Wg(5yAC z;;FkU<4Ple(4W@n?H(rwTP&{)$j8Zs>3qhoo4ZxmCTg$(+UayDT#)@UizOSPcduH| zBVUWEmTjrqQ_8Pz=p-=c)=ue(>B(1ZS5tZd7F2&+r`a#R{F3*Bv@IDADQ;YJ0ec(3 z7H+2tgqR>%Yh(=6w*70|z1Mb3!%Xg2{kHDP$dHK8;I3^c*};2;XRsjoM9+B*tliBU zrrz4*vpmP8uy%A0XuJeY6rW;OEuMDU)b~tg8IClc=XsCrU)A-^AumBH7>Cv%n(F`K ztxK14ssBe@rE0CsYB@OSeO*qUi*+hJ)KPxQW6_h&4!`$yHOeF+=GC8Ov;De#ExkIX z$J&e53p`xDPP_m+d<1EKyF z@wIT^yCW4Zvd%?>_O9D-(>pc>RWN%}*fAW82t2jT;QsDKoTh1@4sL7V6=qsG47H~; zUPFJmIemxVjkP=mVD5GrUO5gK?cJvT)KD%xJ8+^e=y27Pu2Z03=>jR8s2(CnS-ZS7 zp4YHlY_4EHq}7YRrU-z!J9CrFb$F@n7&n9P)>4nXlYD_FA-pxEWBX?Z45H5bcj9_p zlxc5I1-tV4P^0JnVRJouIB8XTAEb$(8t#+4y_8@BVy$MA5Mbhh z74X@O=}2Ydy-V3vgC;LsU+cL9AoXl+PG*B;S~Kmj2|&QcouxuIxAbGAX+Aa`h1Gns zHB_&i2nLLt{Q*XI2J$|~?ZWO|Pl6=_*I6JQ?v>HtH0-T=ZNdWpEL>D5Slk^fkJF7& zYMR#TL1KW*TegwG<=#qNigyRFcUseh5)EW`Il@Q2IT%uqn2c%PZHorW$oA$i0Rbj1UK1K2+ih9hp<@XOE4`Dr1yt&*s_z{sB=CAa>LYurgVF3{FrEt2 z@Lp@}cFYp*FI7&N6j z5l@hltBB96>y@gJmK-MC(2^L?R%25}!^LOTUQJ3T`y&B+2;&o~i~*G-ppSv<-ulXJDs+>VlOboQ=I#^G(s(%XLe zzNl5SFBa2l2s)cR7|YSo3aAzfP`7VVluS&+)fHud+R}}ls&OD5B;1xjk=Q4lBSKZo z4yAtV6a^t11l+F8U2pB(r+c(lqHDCJYm2$iYFj=D03L2vpo;ZW3>l^3QV-Jvce6|9 zsE7#P)s7Ir#EnGFq|!IY(o{-!vS}(21h|A+(SbB+D(z?`L;w@FZ^X@D1onx3S~^8S znCCymudIAfaAU>$L6EL-Db&v&@>knNNJsLZZSnE zqN3>%m-AMPn@IS2H!U3WT-x;L7VTRpm6kk~Ebb)gzPO!7lJe0$UO#0T9R2sDz9}#I zNNIWpePvxz@MQzunR|-m?ePgE(i`n9=atH>>YRb4ISEn(q;x}Jb@n1%owxHQ-=23J zB?uzFqQmeHXw?zg>FO@2j|Yv_#*MOiP4Fcpm{Rwi`;%&Vv^*AEe_!Y5U5XPegi<<- zv5YXCpM#=9e2{lX>;ZXq9l~7YpkzuXGIXRgACE++*LDr`29&>|CzeH@K0nF|8kF5Z zyVOB1uIl4R&Gu1fJG(a@(@BUDHEV2;u8mGhT$t#c3?6f~&cJ7|?5JlqGuW&G<7xkp z%o90zpKApy1605T56Cu!CFfsG?9r3rYEL5i`{EoMz!Cuc+Dj~{=Hs`}`{P4hhmokn zlXI*@Km%3zxgC2^OK3Y*G{qPx3Pd$lomHce0;Y;0O~5&h?t;4wcDHIe0RD!pi2OvOLeuqX~GBj zvUzFIr)4i(_0DxzTL!4WpBHr}Wr4F5Rn6ytPwNlo*_i?!sLZtuDx=@Us2L&u)A?5_ z;)BZ7`iX)o@jd&Jr}P4J_H_r)RT@{AdL*dwH~6VSm@O1%0rX{ z23_ZR_U^;%@m-MKawfxJOV0)x?xQ#W@Nj1X>M&0p`Ss|%I@u#j1AS6wdMOOhap4dt zItPPA)u%kVVlA=nZP=Nl*%y*Q$>M;POJJ0u)!^wZy*QXbE;TVUd1jT zC>*#hrXxk~ko@Mdqm_o?W$@A<&{uQEkBs0BI=;dHo#y5nPfu4%a;8N`G95IZzyiJI zaS2ay*W=RSfR>x|Q@skGryT61IeaquR|p4^%}q<^qv};fep*)OuY;x)SfJ;kcT+m# zZ0(ewd^$LhJKNHX)fxKpp^C_z(yd;hy6(s+D3Ehe7fN&cULZ_wSv{7V_6x0|l)_>J zP;q_Co~s*=DvoM~I)k>HWlIlDA>8wL;a6}#M|hy<0-#o{1mM`F)zJI0kMtxu}EmL1|1#Gf?%;ObfiE)reV_L?;FJcoDUhg_nUS#ZD`!mys!XR)3^~Ps5Y#J<3&G;8S7#_1P&-Q zOtbW|QkMEuA-7RY4hqB?dJ;wM(PJT^e|OQ73=9alIBnF( zYU2qir_=1b`V>dvE+gag6kJ_;pp z70LLnh4R|nN7W&MW}_Yr&3MIc*E1GyluN&h*+GwX0|?GEypY^Kol#_)OjuPKO#+n0 zaZ?8jt^SpbeSo;Nq$w1d53~9l-7fmWqgMU5fvyA12@CigqXFeFnB|S=} zLKF+TTuDo|U5}E)0i`B=X-Z@pj-*qm6Mgw$AlIy~DDbHxeJLDJYMLq@4uV9LolF%9 z1$3G$yho27_4!G##=iCZX3hG1Ls>fnED_t<8+_mg9An3UXP>KP)->>L$V34?{ ztM{l(UI{>gq8l`6ipyDFr@IkaEKL(HWv|tu0|iazigiQ}2~6D(Ri>s@F!Kpy{mIK)0gAir)B@M7w%XCjkqpwKJ)DE3r4=6F^C_tC>^) zf?n-Rs=ppmvr~p>Y2tP@lLnBWSlih0dpaDK&cv=7I{^!-&aw;oWl-i(HIPrmboD-V z3KwKuBt()dpBR&SIS6JiJ*rHV)M0{T?fPU3M7r#1eUgYExJHX^iuI@WZnfwz zL9#Xz&`r9pW8W_84Mw9r$EyjGq^q<#HPE13YsYgrn;VM~y-BuR+3_(dh}JHdev!rC zq2$@sk{N-5X6-<-&o6TGi0l@1DSNNtMMLU zf@JOBaRunPu;E}X8@#K*6QhD?t@+`KMEl^b%#Q#P6f+t;-VJx(;BrHpF?iSGj|XzK zw!8N+_Mm=ycV)XLU_o`w0!cZWqiMa{1rmrLxMr?g^ysEy75EIhohvOQD6Z{`N5NjV z>%Pc%Ah%{BU-al>j-?ScP`4Ag!z>{=83(r@&Vi)D1j)6{d>UlF=(?F159HQ1Gkr{X zk!5PEt~CfukX$>K6RUOCV>wu>*EVwKx9Yl)84vnfyROj3qv~+5nn>ST*XxQ03#x1T zBb7P#5e-a`taT7z!88R@I_=6qPy-FhE@g!DG4)W6EJ;pW-j9@98rdb~*ZZ)Nz@WQ! z#3yXYu19=eN!IQfZyjpCf7&+hYS$Q}LYK9p{}z(7ULOyal(_v=M#ObB`V+9A`pdfG zD_drt(pb^?0VU^HjAzp{@zPMf+#b7@1gcSM91G{6u$;OwjwK=p*3Po-^VojxYSj-h zL9%uZ@Ct-|wyQZHfCRq1m9(p=KSqTnGsZa^_p-&iALkkqBs0c&)GNCm=L!-OGxW%^ke;<^681rjkTU72`EV9?DN<>AJ-`%&(1jWb3$HmbfeuKQ6ARA|y&IG2`8&*|S3 ziKe8kl9r~CK{!vd5!rLmtU?9Rj3MRiVf|jv{gCp2K{rFM*vk4`yVomFLA3TcCf9FF zk<=EttLK<%!9hDizqIKa(QZoE_TB3js32N<7~`s#*g$u6Ivjx(&`hjW-O~($DrTWi6g-C8e|E;;AmM83zHdaA7}FI5dRDAy;cSCN#|%{j!* z>N#~5R(gR~E}8Z2D$Tr(0V+^yDB9x3)gXMdwkv}>!~{uqSz1=!UY->1w&-iV_LV|^ z;rK&G;ljAO-NXZxDSMBI+Aq-n=lULzqkt;Z4%CFRE8O^YHBf7yLAmxRj4=CqU8H$e zPhm9SgM4j}d|22umEY^T3X-o!2XW_asvZxk(@Ipce15PdkDZxn@J}2YRXi_~I1W!PfrY^|f7Q%s} z^B<)+rsJ=KCSN6^x>E;Z3r@@Q^R^PJ`#AjrQGMm*Mp~{)7hAIlGWqWYRGLS z*p-HjG_yHEU^Sk|*`U;{ z$>OGAz$iH@pc)kGPr00j+a+_(B4v@Xc(L&srF3p}wt@yM5_q}oUZMq+T}C&^>2fA5 zn&UamT2Z3sQg?Wk`s#qey0PEId7nG!cNzwaTzmt>J6Z4}L}<_5_DBx}MKc+-RvKUj`HicA7v}w%p zSS8;HXSA30XD4G;pn+afb1Ms*jFZurcd`SSKBklAju1h!X?<0Nk~U~3>#KwV!KU@q z^MU%aUnlFUhXra)(=vY^ZE`!AXe?4Lt@D|dnO5Dj96t$Q-UARzf3g2$?P~x)fu@{$ zm}j-%l>&AlQo_U8bV_IWf>?3?T1!k~fu1)ull0E(5d~uBpg_(=k0f+QPic$>2SHZY z;@!epwOJUD@G!1{6^8c2qH?WfkzbUwA~vy7$-58VEyXb@mdyd@)!q z=i`GF9o_Te7tWu<(-oy}UJaMzdsqZH=jnmN0mV>J#t|_Ty1LgTlg@kKP^(*B8)+|R z4}z26uF^tE#u^u7o!h;cY`9S@^_EHLUcZok2%1*yPeHX-uh;x+{t1UlS9(q1f^4l` zMWMxVFqac}S9(prf~s3;g0=|C1o7vk{#_}&z6ZppAeyJs)pQ&rdN>!IYFJQpTNPRD zo}ba0kF=&Vb%|-KG!jqBuUBgl7<6lgmR~Bh0qkmMrEo#k*&ed)Lbs7#ySkO^GgY9V zS=(Fv5{YN1yXvh8SWtBaQ=m~KEu&w{URrwUD&^MqQURDvFWNSAO;79|YOgEWd}LqD z=}K`mviI!8fbZ(MVmj=C7G=5xNzKRfs;+-jEgg@$Wi^?=~%q8ku`%onAGD$!tM`Ip9S)yEzO zAYkMCdp;YJ3WbmMsP!XOrB7Bivr2%0o!i!_0HkXw0+~XhmCLbDd9y?ZEZx?nB99Uf zAmf59Qe;#Vh@ey2b{TXu2ndA%<3>BP6M7g*Fli-VTu29nFfvzvMEA+)Zibw1TZzn- z;z7dQ@bnvo_xSPK+oiV)8XCm`fJhi3tLcW_w3QH9CmP`CrZ^cq?$fPq(H&ZB3Wx`Z z^nle1N8A`K4p<)oWWs=HtuqR$miMh%37Ga|13uj?7qm<2FX%8sG)ary(gA=-dY(`Z z#Y+|~&J#vDD1<@NT3zv+*-Fr~FB}Bi7DmkxLENwjd`;Z$EM4kS^F<>V2)b={iXa8H z(n8#))Huu8a3+tkN{@*$D28w#>HI4xlIqaXq)QgPyVRAR!BAjM3Dvb>L?l6S2q7NaKlW>#5I{i49YrR?tq`xVoCc-vsK76ZD`4J-_a~TAClbhRz~7*QzOxY^)9Rl#!YUV_ zigpS6Y^nPI(wi7ZfFS8QFT_M7Pez}Kv0l3TLU0a0#sW1rLqbACEsD}CwXYyKhnqNZ zbJjRSSaOj|xO9z!#3oV-1e$Wj9*R0Ll+u+h2hHZRmL%-acEi8)OAX{)>N5=TORrAHFLXku6c3&IULOr1k@p+n$+Qo~3cPwC!m z>ULTeBUONboZDnT`L=;6iO>nX95tqW5U+<~mMe9cLwHlmhIpXp&g~#2qPRTf7!|>= zbfX5@ISdUP2sW$|RHylBO3s+zzH%3)O;*ZYnYZfS9>r= z`bJ9^({chbgD89CU_2xONV*`JfCN#OpA((g4iqk>X3i6O|91X_d}6^(iPB?kAT$k^ zBq+!>jA~nsf~10wj4noX00)8%)3zx=$uUQATI^!l7GNOfT)$`t*VNVWcqZq<;xNUG zT}oiiHxSa^Vll^bLCC;BL+*4v(vXe4YnWq715^OgG#=`3LAk+dj{N9dSj`FqWE#3Z znWQ|0#QuaXy1xJeIp^4e-fj1vSBDjyJ#Xi;g4Cwgv_K%$UN_R~;n=SiM&o6bRL2P4NS|reFn9ml&<0=Tg>ta4LFgb+O zd4*`bP6%lj5NgSCt_98hxc6=-zZmnaB)v82?$oM=(5*`>!35Z%7xV)UlHnENF!sQhKf@IPzGdDTeF?wp=LXk>r*Dg!Kfnd__>6P$2x2hK={kHA; zJ#)}ErmqbxsqXWm4|LFX&vIZK&=6~?f5Q4JyS^{qy!V|J~joM~hP)-`PC>q4dv}@FQARyD&dslqgPo^XJXF2AO@3E#H zmFcGUHh_ctpQjFdP)RCJDQPK@)MP@YIbBq2a7&avrIa`R)-gaeT-*TUx)}tdlP5o& z+#-$;K{M$XHQGj@gv+O0$7mW46mv9*o-Ay!PBm!}K{L6N3~CmhqP4q|On`x0(qs(2 zkIvEBH5pTApx0#V4CgblbxbT?b#hRR=(a%rbVljqWLQfl)Ca5OeT&8!V!oEubXR`PK z2&9^(r11$SvmDdmjY;!nE;TH|?3SHONsZ{B-?SR}$5j4-QzxsD4+e5gn{RpxW!b0m zy7A#S$NdZbR|M1y3YA%AdQPsPotCQ&5G`qJ`5CB zN5{nL3DdR%I)DKkH-kvp=DWYGo~Rpqf>!Aeb&_kf6v8#q)9+hcx5;0&oI%#nOTdAi zyE)^8^sddOhqQ3Wlm?~V04Fc4GYbML?!d+s?cGq%bE)0`%{bX>spankr#Z!FAm^fa zos6DlbiE>Lc|?0;ITA}(DJM70Edm2I_t>Bl(YraDAJ98`L28mx!`KO|;bc)j#@R@& zY|l(o`{R>}-p3Oou{15YlbU7}K!KLKo#q7eem$GY8NT!;l9N?Kh5&)v+YqB zKtXTrCY-BW?>0Rx7|>jlX+Ws$xjX^`wWKj~XS~q6 z(rN_b$G7R*Hf9oVpqHG(SZC@aGRnu+_8caWKq_g%(5E+NtKb3DwoMod0xHRIM_=8d zjW`7<&^?N7$6WvgTFG8@myTADAT(iGwcV={aG>Y5*=`{B{O^-ZGdK`6@uIF9Dz(!^vAqp_XSz@VI5H})z@OG6_k-k!I;Zb&4MN;dNzMOBT5)&1$&ic}{`sa)~Q- zf;*XMRssl=T&TS(&XmxGv>U!%9StV;ssTORCDm4XE6O3%60Cy--Q@n^{?y#;;ZCP# z_)hl^DLfENuE_W4$r!U0yh9HV5B9@kqHV9pNkBt!b@n19nmt@i>FsuUs*Cf?x|Aob ziF$(r+PexpmOfVMgr(bCBS3R*)bjlf3NfcZ-k$nDec^*n5#_T~rMp!=fAxqopn#Io z3zzNjt98Z$FZ5EH3ML>D$!>zzck;S{H?jfm62K^i^g>=W=a+k;WP^A4?~BV9oE3FS z(L2?0LBo=>rY$H>*~x`!dVvm1X@p)#)n7^ng?DVEkfOl<;mqyQ_jJ1jcqbXqZsAqX zbSLfL2~~d1Mna!b(2V6|{ks-Oq%c6o9UXuU?TN?)NCkG4I^$TPH!#uwAmS`fe0MxM zCEZX!@@a}p>CUl+Obk*_h)#xPD}LQ4dC1rjp%?^&f}W$NFcWc{7`|=voD>G=xD`n? znErG)pxA#ETE~eY60A!7TB&AhfNCaZ(kAG!)-Aad6v#QJo3A;QCrV7frRk>{bftxZ zfb+e31fuz`G&5X1ya?2BaYH^hU;0n9NU3Siz`;X+9)fjP_bXn8q&?ckI_%2^yt7O^ zO^grCT9DAjmX=8a3MeHTM_v6*&}px6d<0Ml76h$8^9*{btF$ryCP6^R?Xo;Y*3KoR z9`pL1Dk_KHH zO_G2BnP52cHN%Ib3g4WP^GX}TIgJ8JZd4xB7A)`J^9ZF%Av_>HCa^|M}-0tn_sg-)*YN^#= zft}maT6T-UVb%X?79>9|&30Q$$cYCBcOpU_j)#;Mtfv#6Ox3&0^Vta{YU5{`gL}-S z4pbxD>rQLoz|ierP(;7~wwUxs)x#m>_7?VUX{cH~vj_%^{C3ki<7_kw4wRK^N9h_` z&&2}(3pesPm1l2Axq5gJojx4TgGcX6yAR9rS}G+TB;16ozG9jxt!el=Yw3iXq9BBW zfV0NA2*LLF|M?wO(JM-=@!+|vNH*Y|A+wrK7QOL&++WW6bRHtmOAQ&85>h@`IB%t9k!+IUj=3Dmp2e$dz{DG$it2*&PE03ty{Fv&idfhOOEP(&LI5y}S*H)Sb( z=sOjms7_^{8y@pvlUzi9Q8+4$j0;cCp1WqmEuWsf z!j-4ISLQuYQN_P1M3ABg=+)~ad}q%|C%|V%)xqjW;Cxn!!xBjR+t>LY^rY0$&XrTX zrKheqES?g|JEQ7!GJC?|f)@s-e8jQKAo8T{*TuL=nZ)F!D+*&rV-Wru9)9(ZSkNJ; zsPnbWu_2FepU1zs&aZozN9qp(@yh0iS{mVf%g7CCctj77QJx9;XwVilggma{uOXW- zU-N26wq^BLRPgfV6{HSxU3D1lOUv2L-8m%@)lm^aRmq%Hn=FC6MO7h>tBQYfWBOH{ zQWuw1{hQ6Js)P~Rvsx-az3FL{&gmaNp~+XmUEdte3M9xM?$blcJ6~4w2Y;wmM?2%? z&UmqNwK}Gz+!?UWA3q7JzTy=`=z5E)D`8yq)t7s}zQs`fFnu%_FKKO(lk65P3whkK zUqUuve%l4Zh>DeVUnhnTUgf1^=LX)@Q*+=qxzz;3&kEa-KPTa@DB<_Xh957-vPGmd(ybwc+ zAnD(}a`)EGZ7q;wKS!%j6<&HRU8#)>lK$q^z3aP|cCSqal-z9Rwvo;HR}Nv(xTUM8 zb}>`y(j~%W^?12+n|;`-b>BLnYi|>}7dx*mjK&MfS4az}%%ymvP+>`lRKvHum3xOS za{`O%=(Aune!Ylh2;VT@f`yYvEMB`hSd51|s-L@g$m1M$_tN3&38P+f$10fn{;S>} zC*!HK6#ja1O|vZSMLgZ{{Hor5qHaX(Jy+A8hfB)kt+{OF(&;ZDkMaFBCK?)t>iwqt zzJ--1C6E}r_xHOLzRJmss}cW8FE%?jX`Le)Z+oRE{~~!*IJ8WL7~b5x6+DqlWsh@C z?(8WXvW;oJ8xoO;o>#w37t4kZXd(<8>!rQTi6O{u|D6*`)qQDhUVn)ySvu4Dg1Bne zD~g6A3+mB$dAwudt9N)0z*>IJyy7VaaOu>Dmq4GMy?FoL?VWpc6_x;%c;mm{N<7X0 zOfzv^)Y$PluwMRX0G-Gcq;&dK5=d#U(!D0~P!6WcoqZ*gRP{}Ed5emauG}nuTV$X9 zzqS_7FDb#_alwhF$1e)keAGO_Tqon(%8w+~m(H7o3n> z+6vl<_w?)qVck5BEHXlNsbV066!Sg?!vz`^IxWV|7wR2hRgrH-R&Hr~D@O|rZPim zW`{OD$e}f*hg8YjRIiwP@^9aG=BuC3f6lDM zgU{Ea!~(5%@p;CFkV67L^bSmf^XIX7%7ncE=nFyI8D#5V+ZPbI|A!SXSV%St-4Sg&G*#f zbb@2m<*XuYSLiL`es^`Vey7v~d1yMTO0@u!A2AB5cDfMnJhs6ScxdZCv z6N)9H2!mlY=GQ0rK9;EPZ_9g9tz0m8GhlGC(kTF3>)L|~e3`9gEel8=puFK!Ur)Oo zM2T!fDHF(cYB0!rR4x>|!P4N10#4Y2)RFvP@nkv_Xq)#SPoTln+1Lh4dRygyT24(% z-+|f;N44U6!_{s?@m;oh{UzT{eqnQpx^6J}Me?BD5K(2VR_nh%8EuZ}-PO?099^{>X$ zuLis1@+61Pg051NC*}ZncBRVgdPvggoFw1A%F6gRN?*=cMI*9V1J7_z-ZU?Oe1NJQmYc`-l**08eD_lqh@Y?|}-OyX;+yJh| zHmq?wWQYcIpz3Nt&B1|$4!9jv8^M76K-QR#F8HBIP8l%ZO^t)ML1J6gI{*NUU~nCd z=gL9s(AybYT5cUExr$_!TLM*b0s3B`@EKj-PBga7G_akvJ?S72bhJcEx6{##V88}r z`iM?CP7nCB)3tFsV;YhH9MqS6r|JaK;kHv>BN(v3!l+L@9cDXAB1;8eFoedmj`FF5 zgKVcaYqmRbwQabfKPKCT5+ckx;W zB&n!j&|^FGq^CaiaUH9jr4^EEf!Sv&jn=k+wPXMXvlH18%AM%y+s^Ey#y8u|KVf@pbt~SO6|7Ohm}}B1|Ac-3Nxi^Dss5C z<1w+K0Uaor?orUg^BpMJ2nKA>p(x#DCzi363(#Q9QoxvcZ&OycoiXcV13XmpJaRy` z)0+vIJ)3|H>dcuwhP2R2d#;^2JJ|pa`Za&R@ou7fwbQSyXg~+%+~X7Sh6ko(J607W z1K3O-N0ZqB1Kc3mqF3|KRU@mH14N>p{bMM269 zKsj`E(L0#UD3^|06Sf1Dasg@-tpCVQ4V!e;ZvER%!GU1F8U^dWl9zovRp+4&wT-$$ zEoaZiQ4)!|NhrCFv;yU}Q35J(sI>v*dDFzm<7-Aot=fLNmq0F5 zDW-68zt20F!mVJy3bh7%rZ&_{A^{}^LhNd8V<1RJv#eYDy>sGvr|2@|dp_m+JZ(?b zkPC&1`l$!(+8yZLlXYTUnCjQ^99SFcf)a|FiD`Peq9@d)leLX$+K2_@tNzM28_A{C z21;(R@UcvQiTW)lzI`AM@!F`L5erB$zu*;U(M8)Z5v^dr%9_T$uU2ZR#R5|FRi11` zE!*g;N@yBx9yljjfn%Y7Gy6uph>$}(VRdh}Zww^^SWMrsKctQ6TY5wEoO-c0q%G9E zuQI&LQDVd4b4De_RGCn-KqBe~ILca-R_n%aLL%V4t4Lq$O{&LqSxC7&`qSzW1?s5` zIc{<-ipZfG@N{vXat|P`t_A=szGqmdM3s}7N<&jq{h}?Euk9Mypztv$Q1a%U%7!}u#`zVS=FL7BgXZ`0{BO! z6E5fo`(XB%GuX0$KBv2FefG=gpnu<>vq@rA$u-fgMy#EHnqfc+BLiRaUCu*FUDAIr zojscN>DEWINBGB*kx|F01_!kC3UsjtTB~VvNLu9gsiR@!0v3HkA0_tbk+E4KqHg29 z5sNjzt2253F>q!MpV0awt<&ucDYzAlU{pVV`@lG@s!8${iH2dG?IMOgj_&lExC3)qcit}VmDq(ghaq$zEFAY(zPtwU-`8R zWC9W$=Qn@CL{b5ZZgkVU^p^nLxElpB0SW8)PIaQTAESD07fpe_wrgaA z!p}^Lr$6i68BfP2gUPkYn2fVqY_S}ML19&iNwA(-9V7^2a?#lz5{p07U)hk!VUVn84e(enKMP^a=IF-X7VY!)1E*Eb=k#7 zYc?D`KCm4Mek-&$us$?>AO%Tdz8c7YF`Lq;bfh)NM|Z^hOpdAE4LGMngBN)#6aFnJ z8MrXZw0muT_8>UQF0!i=sJ>iaVu$MeEurnAJ73MnMmq4ZrI@I#(&9X}P3YW!6dM4) zb8oyV3W;?!_3UyVv`stz2WCv6rfyzM*Z}QYzc58D{P|hIVH*oO%vbluZ7d|Bjj@8F z#?l<~aW`H;rAPpW^%ZuRkGpYwg+#!@1v#b5`46ilJ*mE+oKgJm8#P-?`=)KqyzPm# zZb%(;gM9} zVUuB)EI2=hSTu`VjP+I2f`N+l%SXLR36>uS=xx`pSUT`wE9ft-j;A*spGwc_wzh(l z3|!a>=C4tWx3v{~xiy$%lSwVNgsJ2L6J9aR=Ng5HiiRz6o!9m$B^HR-y*k9WKNT7L zjj&oauw`$$HanrGWTi*9o!$h=z?EZ{(vs6n38Ck9#;y?zRBUmLrf1VpGv+3OVz z(Lk1?hiC->7wz<9Ef<)uhHPy)_4_>>8w+jUFL8f0)mlP;Nu+m5R2+nWw5E408pzgO zP;21zYEG8Ih}0x``u2)_U^mBJs8vNB5_rj3hAnf^9_`FBN-PkiHE@0WPyn{GI}Aj%1V5%-oSvdgzK0a(#MmJ8escCL(MP)a)s93%r5 zJ7Lr2aO$KxzkR)Wt2swe;IJkK0yc8FrCs?}xvOg1+z1A$9B}%Nv1!wesq9M!zU*~3 zC$rf+ocG%4byhTxXKe9G$hyJazY+a<#xt4;VQ|%m7__g;1{s%7_UY!P;uU*+xXU@KrA}ls#P!v z1)8j5qBpfuMDQ5ht`3wY855Z#7?PY$F~FWM95D9Zpsw3Eobhf@I(Z zH8){(UDezd4+gU4e_K7_+qgpQ?bIBSfh(<%+gl}cs_ofIED&W)Z>#G*a+lvuO(7Y$ zauaxGFr0G=aknnCvkBC4fhpI(JA?Uyy)aozJ8Pg74P?0iz@Kj&UP;F!7KMt|wsR5& zjO40JX0gzIJF7BFt-)K#KGqT*Nd=zlU!U*MUSHI(o&Kfe0#lCOXufJ^FQLQ&QMTge zmApdMj#gPJ@PZoBc2+30r5dtWAOT?~ ziT~V+C#fC_+yZ@Um!qt9Y2QiTIoiVND0#hFR-JcHT zPa1n%AGi-x`7YEGA~ z<-Vcl?)egTwZn^j0RVJ`;fiIlccR`W6-~Esw+)2?)J7GmYxgQHSVz(Js=%1vFX=Uj zi8_h`RtUCLf+r5OVX_;v$&};@eH5K2t!oe^9g2Bh4X=>EyrRdt1cM^eXdMGB9u&|v z?s{hLs9N?HvlYFbAxIQihyE;{77YUEk=|DveJY?g?vbHTfNI4DH&1oa3jtiThZlAB zubvpe0RN$xRK?wp-e`4l+CMPG1c{;vp`L^UXePrg&?y-S05XVd@D`QcU^MF6kuLO7 zG%9?()QblZ+@bNm98xqJT>&LBr!<84U|g^%vN7w}Brre;p+_l7cE}4xMNwGm7&!&p39ggW|Lt}Sc9zz!y&U*M3A zx%-Pa6;sh6dYyKB;UMvogo=1#pUwLw>jGL-D5)rrypB%|4yYlP#n%rPNfIhre47Ya z>7W7I)~7M1KuQYH?Gqgi>7xWlI<2ehNuw5fQavJgUP!cLSgN+uA9YAofP!t4R;Mdc zttjPhTe{F{j0m2vd;HetG#vfYLEyXC*zQS-1_9VT{#RtaiqW{S-4hB0C>#dj?{q|N z$DZuy8(&gvkPj*_!Te8W`aDDEU}F<3B^cn?Nc-O?7mI){@>8%VyCmIAkP0X(JEJ3gi)J|IC z7U$PBuweX4!#I7fyCzixZ|X$vDkARpu5#Gzh=+UOb0W^LAdcB$-#A-HnUn`Ae2Zh_ z*&-GTU|5pT7kxau?xKA*wj}F>g9NT-+V50u!Gzza$j9w>sifpucuLrq%uu&Iye}E> zSf(vU^4E=m5c`dn=};&@F)IdtPqg~Rvtn8_2w)@bzM9RJeO>iFzlkp9l8raw_2NM! zQa|mX!c+>|tKSF(=%1Py*1Few{lmd{(tkw9S}sv%znafyGWenBvX4IkvXDUUPYgXI z_|TbEdhi|f{q3M{VE~G5GGq{ty0~74l}dY9qr%~)6GVd+ zB0!LZ`;go$E=f%7P`~;~<{5=+JO25g!G7urZT- z4%O`{o;1UCugF)omXX8(C+yNCr+BMe7Y(xYL>ve-g1b@P zQDcwOw~L`(WQ-?RM8biNWh4BcKbXoF--~wb84MHvSip_su`qLVpYo}b-?T5ZQM9@@ za|vO<2z?}GM8`GZ%dXq@ky;S2ftM%#kS-0%oD)UMYL;#k1ejosiZ{)hU2JPKHQ|60Cb{ri%FQqdvIT5AwbVd>35;y-GjeS9hf8_Rw5^ey5Dx}06@pK^ z9fN3|ZB2y+7%-9}_j4XGtP_3&W-2dGwli`=1n@xHC}S5v!##F135{&qHVN@y04G53 z$-Jui;}L}=#>qsA99)T+q!|gkumH)g)lX)E?Jo!O@I>Rkle;jTGI-axXf|HQ z#3F!BoleLhJDWU|k+7}l1j0cAL0h3t%y%5TbuuOkGkE8+$fjx1Oacegdd9bC!r^RR*-U@3J)|t%b`gxV(~LiHLqcP)fwFw z7qov?LL1R@Vm>W8zb{fUSX)>_dUf{F>66RsS=KL#{qxgL&QcMi`~(q2{;8vV8foHa$S}vdwXX8V&YhCJn<2ajGEP&xevHqf~*6s0-v=axt+VBr<9AJBZgI_=X*{U{8jDsosQ!KG|az&%|{AyW6o zY3-#*0K&+{U-zC&mxISQIBA6Z>i&6R{)K%*y+yUvSXsqvg{d*)mV z0ya>D{BSuql4eZN$VfOM6XHV#-YIY|v8rs#AR!(MVA=Se@S`rGHx_ws5*mnv104pP z{{dwM4>HpiO$lq@wRGTPuJ-UvxI`+=K+$HlnMZ&EJ}`dtnT(fRs#o)l^v1?dBLe7P z(uzNRIOF@GL57}`oWD$qE z6OU``&W8mF<_|h&?g1AO zr@dfBDPvCQ*iP$Rj?3^F?i9Ywf59fhzAcuJ9#{y{;y$_C$s`Ku~u3h@UVarnn?D;_Q$@x z)&*zl!d^l<=V<`G;Dj#DbwE!I<_5v^`H?8PfZDe&vNCa6*f6 zTc=Va9J2$?gUy`swMQSpMmZQs) z!9g{7%B}j|V8}^mD7tKSd0g%4ecvu!Cz8=zMR5ldb3+H|7e1;NefHiJ!0r(2j)vX2 z&9KX-XD{j-6>;2Z(L3`?mnPMhclIK!u=LEcmQHAII?v>;Z8p&mMMj?$!5Xmd)OeE5 z-gM8`?A*Yseq3*#38zJx)477&nH2RwUjdGY6D)}EyAK+Vh`fHl9b}hxSx1!fBs_pD z>X@F83m?UD&z`-iIwPTeE8%$i%aXmXS79US>|0lLR0oNF^drMKodCZX z1$O^=35?gwO3>LiuW_I_34We(cE+<)Q5}5Y5O(%F=doAO`ULXos5)33c@u|k@DxQR z`BPFT^z2oY^juCvFID7}-5n;&b$!v@YmgJ(rZc`T z@9f1JHhrrahp&-BcE_Loa=J@P6)9Xsxs|6gLz;k-xt}*(E~Uh?mv0?X zt62oX{MJ~#St{D9XxjCwqD7s3%RG{*nn?X__u-g!wBreRz68?7y&{r&_KpU{Jil|b zIvzY6>tU{6LUN0nob`)H_@hGYrhKVq-&V7u$`8X0`YH#f?0R?A{6)2BFnU@JWuCoy zn^1Q4+~qq$et$xS;qL5EEvxg{gh1<&{oqbEa|EenUJh>C%<+!MCoIcrw5L%I6x}#i5J9c4y(f7jmqp@g$^@Lpb z$ot{x*&ClLFVfE4CzRf4y0cHAVcH0!%#VxZlS#E}5`T-9+IR+vq@KP0dG&|}93k!e zx>6~|x!vBL@+!7Fo9-@F2aDl+tm1rSJC=D}oV%k&G{(tWoFRMHoLcW5(w^pEFq9c; ziky1z_oT(1z4bZ6UDwC+J2wGGI(R;L$EIl6R)fTfIeY#tZtakGdXLBUJkhvYbl*2j zHwt_4E2pY^?dl|AvKcp><^qvtuK-&mDpQ^KTZ?KiAIcm$mr5pXU7p6}i+f7a&Rq_| zC*{3~`Ifvu$CP<*IhY1E^QOM2q+qh1P5-5t!Ql~+XSH9!pBet5q=tYan^{Xbdv+fl zi5Do$WXzEwvcdjlL-|hH*$cn3lBo`_a2C;;6{*PR@K>Zj=GiO!RGu?BxDmg@xgFWJ z>&l6NP~^ySGA?|SkbCx>FEyCkgs3k1D!#>b(r?KkO{=jUN;`Yy+G??!o%nvXm+?{D zb;?&@DeLSd1BX7eI(v>i>Z93E`P2U>T=IWf(wDe~PtX3yEbY$?j|bDEpl|-HM4k~q zGM~F$wf+_!X)zjoAc`TEAoX+p6py%Jg7!H zf48Dxt6q5FSs^w`{;Y&PN%-w}`qh9($%~$gTF@?9Cp;lU|HWIL?_BdGvs6gGSi+a2 z&u1j}C6YTQ3rcx(nf!D7r0sMey{Sc=#0VhaZ(iNIzI$o++GMa=R6DngVAhatQTgMy zNJE|w0;{vjp2Lxqk5g139EFi`_Vkm5tf&_jG+|PPs34ER&r4dtiXi?U??K+qO?v2O z=Ln(x?E?8fwn_JC>ze8Db3qWz1Itq4N?fd#o<@ktiJUY`wD>^RnEHB{SgX`@U4 z78wS{sG}Y8{`hpULwelVSLb@9%hl>%o__WJeB+sCzWR6i&u{ZoV79WO&y#r8!6L>1e9$%Zb6|*>%vb9cI&6CSIodl1K zw;^4181A3FYkT)@ib~rJFTSl~qK5;%3M8W5JL$ixmpE^7QaXWc{URu}3AQIY&BF9( z3TROSCepw*EK;(;;=8Do?&iI#v)QB?Ok*|JJq-%fsX+@OL)gr5DZxO0FZk%%Y%-h2 z*x55i4Yns1$nOTo^!|Dk16yAQzAmh^lM37qAjznOzu2e8s$*;$T7eQ9U^~gc{}9pw z{M$1+$c;%@mn({GNWv2jCSlLJUJb`5DGuBAJRun9b`F3ZH2OW>R>W$sS9&&8LnIwM z!Vz%egfbq+1hyRko>(B;h1zH!2F;#zwS;KMYl*-MN1XaAd*8)uyX}Z`QtNRii5A`- z7gB*6>35L&2*y={AvCl<(2%aSD%18=QiD;2o!V>BMB zOtQV-j7N0r86#U?4!$p(#C*BH4red5sjU)g*S52l5DfHi_A(!JG<(I;!6WSBw^hKJ z-`%$D<60u{!ajb7jvlx8a7VyLZIUMcUD<4B|JKBA@_1KeYn3!C*$98go{X@)J zhkBOVtN0t&L&E)v4FN~F!r3k*A6%j~AYaJzsDn1}rVaM1 zgpFnc5AkuK;;m4ihGTu7Jj+)|XsqvT$GVgZ{BT`&y9s};+jd=dQh^(4`~JP#ah12# zwiOE0aA!0;o{^h((etJvzuFzlaDRf1V|p1Fq(-DqrOOc?&iBecbF*VpHf##=O;tVhSf9kULy$>0$siJTiHL}|vG&D9d>EIJ~NbvDC%f3#w9TJ{cFsN%6v3>M8Y}+nE zFj&;JOT2^hscgGjilu{3I9DwwfOt}!vy(gAIvNt5Q`%R?wtd4B3oX4qYBZ4EJ8wN<+8sII!_jHreYcLUfNeK%zFbiFaasdz7k9p1gmAVn8j)LmUnkpI zH&QaRQqwU04%{cPZNvC-*HQ2`psiByDr@29(`-I4nE+itw9P=MET zM!6^T8Eo4brDV{k(ShA3`V6+!ffWkyw`>EjC3$tQsMzikCnNcuR4Pf~1!;)@v{50} zbQNGW`VdlTeHjTbMIAuaiNK);WG1RqWOu@-hU_R59n}CIj5m(LlFbcJC9q%#&)4Z0Cs+m23`AJXoZ3@cC?71rt+SIxwPvZkISm zy!ZL)bA6$$dC3ZIVsMW_EWeme_|j+l z46JZ4NcDt!)e&8(75HuS1S1;g*7A0(*ZcpOd$&KilH)v(T#0vz98w%oqAUs0h!Qy@ z3d7-5lq?y8!H|##z!1R9h!Ukzb@l1)8dO&m>jI$1mMvdo*)rt4k-O`?+PlBqKWF!K z_hI+Jf5}GX$uCbvW@MhsQ|DB-9;g9OC%!KtBO@atZx6T2)jRc0K!3}oy+#)Otm7!< zL4b|j0_d=z6p0xkJNa*9i2kVL0@p4yG~bNge*4br3^=<`(g=}(m0%#-!bJ1Y=pAc& zTrJnQp?%n5&j#=@z{f_%r?X=^^tTz^I;*CSkCxALC};M_9xjcj#u&0}P_VL;q?9K!E!dM+CjtT(#aD++pbA>@&r zv?k5q0f0>42Rf?@N$l?jj$nWXexPbpA@=@$(8vX}9Td?BbsZ@L&z`kJt?x<(yq$pp zJ_OF5q(y;inScyhTCHEas{;^=IQzG>BRC4K*O@}4_Xl?b13YN!I!mh2fA)nB(Ag3C zKQ|BAztLR?@CafL>U5zU_K!VWHYfy6px4_&{QcX(5u5<0{lCM2TfqPioS?2xhUojZ zy(<~;Ht9l#ueTYno|j$ciuQOT6riEbx*9o%&W_|L{3CV5SqM4%o7|NQcv}sD$*C3^ zs-C?96g9dPn*gr260z3q1K5ZKa4?>#+H0ut{^MyQHx4c4R6RgjxquGZnI;{f()*j+ ziUn|B?su!|afrOX&W&6^2RUSYlI!5p2wQzcAFFvZDZe|a?mwvL<<{E5u!OC$Fa}NH z?-JO*B^tTFms^5o{w|08M|Lh7JnWihU<{jA!KJXjKe&>?A(#{BcyNf>NJM*Q;?T49j$~*rb8u%5{c><6gF{dT&@EtR5iWuK zlU6IX4gD}P6nR8$rW3C6`;W+tTxcJ`w{wb~@vU6o%WZFG7B2k$ZEwW_UDm#tUAXZ3 zTfdQO@ORHYNq139wzMnjXt%BOJymvi;6U<3nQ zZiN%`u7m53{j>rk1K&<1nD!^Z@ucj~kyO5x3v9c1%&=#CV^wwmH3>{YfhucUzgpwk zyC02fxxkityV`@toV}mkuEnO2%`3A_(CY_Tiv_aW&zDE<(HY!v5a{~p=dN_{Xts0K zr-0v3|8KNfFV!1GW1+ui7gCa*=K+9?O&XZ*uP0AKlVopTN%F9w!N5-57=z8(a=je~ zev!S6D9OPQ4i<8c*wRJH1M~CGkq~<(=B`H z6-+vK_kjbquFRFaS*96VwcGW%l(wvdDZW?w-(;udmhBjfRG zG24#E%u?_6(R30Bc-iIEI4@Fb$1~CFjohjBb6M38;KXhq*7pMIyIh?QR?F3nf_F8h zNe;8upZ07o22{XrU5()l!}4>1z|Y3iXq%b|8KagRQ!^VC7+_^bJvP@GkJZzUp4ac2 zWxt`PwN`W+gR|}VPz;RdHU>h^@5=^8G#E5Vw_5>dUg&A&TluM=meiy|tbHLF__7z! ziemk6k6V1|#{yO~7}&}@<4F&YZ{;qVeT1o&7qJ7E4=#4xw z3y(;DHLUTtmJS}G*J{d>)v8(?k5x&HA4=@SYeNVy6637?IVDvBonGRsCqLvu-Pc}> zFro~Bu6~`&78|df@*PGfgV<^p6Avnl>v~j zg7<59COV-B(rCgMThAo!8px(lX0f5hMBTWzZJY7%fI&3g^ z$xhT;2yq0%Xs6zY{ocuLQ9q~mmp^@OSDbNlKvzgsll6oiE_1tA_B7K7YUbUNWW#5} zACq(*fNbg>uVj}H>lYvC!8rHv$4}}9veibw`X#(Z@VBxBt0%UN1d{#*{iwM4^R?~r z8s2%MXXrjTT~9V=l*aDX`ia6WXpRIz`{XV4XL@j3OC*S&4|@9bY(*$WkjPJ~cc`wt zwWbG|?X!wM=dW#lEmtUgNHXOYF&p)>#nrE2{@fckf2bZY{BS*uW1e^;ms$NSk^Ar) zx+JCqe&|FEyG-6FTb>@VNroB+^-G68Kl}Q3`3}wOwoqRZwO>)!oUYYNk;?_$6!O0Q zk8596|N0fp7w>*Hru=d)U+M^sYdQ~SHnOriSH`26Kd&MZvuw68bSxt$())0)-Bog^ ztv<6^(F;o_v+0;pQaaJ=wcGb{?GT6|yZ`dT<@^angli8ChUyPB1|fgkqyqkS%WvdD zHs7nh@lNv+9|`~1)3eETGp2{rnXz8Ym2E#)YP?Ib{?lLm`^`1===yAdSaj_h%77m+ zp_k!gH#q{ia-;hG7?Megpz8VGxqcExJ@ogPseX?5dZRHz%ic!Ne1GGmP~`K^m}iKa zpD6`DN=vO_2l;xgCGj;G@UVk&S*Rp6L5e#<#?$?2JihA^g>K z8~Iuy)+crwYPjp+=$0KN^`|#pa^*b##M?^hHH>%q9o+v*y@UIIM&H4G{-G(26^|)0 zeCU?`kLMryZvFc0--pxaABTpN(Y+C87<@833Pt+1`9??Eg>LefekMs=gN9li_|9&x~D+y`*=j*?GZE}2beX5@w zetR=HRo$^cvYW)}-)1Nm5em@H*?+IExeFm}Xf20yMFQ}%7Vs^V{Z|xk~@)oe_!f0W&LjWoa*Bi>s++)dAFD>J07 zMq~m3_Cifpdq${~eNwnkDMuWDOb4)?ZZjIHtNlhz)U`^9-SUfp&P|_k74ENxhE`^M%LVOfWhM}<`zwK_PDgW5`|G#< zo7|tODPRy|f$0xBMt3U=dVZz`QHyT3mgnb_g*rObjFa{`_4;Soq1KfLs87~1Zs{kz z7)p7n!9)Sz7tG%Zdi+60d%-4v_yU8VduP-$fb~VKjnVAm8TF5|jb^|cserYbQT0I| zYG}Z^YgWqwgz>i5&ApebeY$#^6$TKh7*Ga5?r#o(fx` z(YiLg6$TKKXz8a`(5GC>b&cIjAizwZ5%RgNfyRgefYGM@TN?5=UITU2h6x0iNriQ0 z@u)u3)_7dkfwqw*!32|uy^{iUDFyWUdv(Neah%c4)vo_B zlaKbgh@j*1`C0%3A;uiCJ-%W@9-<3f2cSbUfd7te$RawaR?AH zU3yz>v^(6I&mQa+bTExsrE63Sr2^LUIQ-y2wb{*iQMPMk&l3qi6Nc3}diB78dfu6- z*fm8nq5uQEG>n~xxE|hhu(rYgWdeS!(J)gRlMfh(`EnxU>OD?ynDJ~b--q$6Fc|N} zx;NFDHCd^PwO7c0q%vlJv6dPp1vTSjt{>?{Bde@Y?mIU!1tDFDMJucj?f)&PEB?qF-Eb!r@2Y2p$pHc4` zVvHyNn5KUF-dhju-@5(q;cfL~O=JG9`ME0(P^O8^vp5Y#*Cy72jBxS#wc75^)MG@; zf6J$1sy?kJ%z9wJu;URHICeUUDy-qftpD*-JUU@A5GMHyVHBRf(AkX zYQ}H;`wH7b8$G)wb)HB7ntovZwVBe7HhMnAo4RX1h)V|zGpo8)cfoYXvKw*=9WE*y zB+O)o|1Jz6t^;(P?6hHklF7O4&;9V-b+X3<0?bs&@NZLf=|6M#uJc(g5pX7fZ2mD^ z#IkpocWmmZSx^F`S(5~$nZ(n6b=*tZ^fP<6Nk?d3HYnH*rw5x6O7Zd|(Xd1$0K2Z zBlwPM1AEk?qf^Wlfp`${{NjA_OrO!D)2n0JAL`ZIy9eUhx}kK?FsU)@QC~CCG(gwX z*p&w;JJ!{ldL8SS$T%Qbmj$@)gR2EpA^~WM=1`t?;HiTEQp#(O^L2DAPc#U4PDL*# z&*n4bQe2sH6HpV0{bp;ztO z2%cyVFgZR*Zq;SeV@j*f)iH!>tPTmWcIY}KO9Ft5DI)9T4Ydw1&cX#&A&^JTU3)OL3cqm&;;!VffI!YnJJ~nW?K9R{yUqXup#U{C6ZY>J*;&_` zNe&LEnViwqdg->>Cr>8p@tkh19dA~2i-W)4rEAXE0s%rMqBOq_ssddjiYF3)zg_nw zX@PKb>;B!lH}Adv=AC=DnTOcJxP`sD6$GTr_#*!P_1kaUeEUsaqU}1qBmqDsWg$am zeD~&C!&%4$$su+7-aB_5+`o7CwpYmRwb@({kTN^4MXOR>`tDo2)$A=XeYla44=N_+ z1gpGky)!Jib&WYWIH2~;THTgU>SEQHmZDecc0}e~RmX9x5E6t6HF^}w;E@xdY)TMX& zde3J5(Y24IOnxhsdUMvXCk#zM10iQA`I-~*;wsOWu zEQK}Tu3gik0MQ^|>xPVg_C?kL-Rp*eV1S#D42tS5q@d}$hU7pfK z6J7jTDq!s@NewHcBVB78z%(KO=taHr31tL&MCO*>H|n`^0d3MR5R2piUDGc?EP%a8 zml*%|jdY%95bz=$8=Bqe+P;yF2?jVH^PN2)lVe&54foaWIp)g%Aj89t^IH`Qr@{fz zJ;P4~0d(x15Z(QpAM2v0;lop+?t4Pg7@*{B)0hO8aqPQIqm~Fbn}pR%och&*<$_jH zmipqgX7=1Y36mrP-qSXO-B;UMBH%o2tHowV``_v(1=;YsueMw=;Jy7m)w3DT`}f`N zqXkC5PA0QCQ*mD~Ef8RKSg9NPgzh?$%-Vfe3FQLXj@-^q*2^WgZ1<7dmkL;Ke-q{K zPbX`BNPpk`O^^vlo3qxOkUp|j?VhuGLIG-rkLKTL38@@0Dz3w*2)5XW@!zB zNS0Rrpw}#oiG-duW2ygjzFa=0MsKBOTZHi0^Y!|nJ)FS zq0M--@4!$?1f1vPv^!g6#lv~I2mmrRU96jkWp(|ei-KT)dqd>Y+4gKqdw;?_ao-`5 zO9njK)uA#}DJkq4&Fftqu2jGpcdLIOL3VXFE)j4{%UJ5WpO&svz?$uU&gK?2c68nT z=gI>V+lds=fZZ{%g})^$f>Tsml&7{-6N5pD$P8pCACfH%I+fAn-s z&s{M6yZXK)7to^nY3T7WPyhRIKPwsp%u1xdk?N}xx&xJ$_Pee`rsRW)sWnJHRb%@p z-5r0%8l-EjA&me!rsyyIxVNHzR5(b89kg!5Fp=)3gSyf|<9F({RkoRM+O`;F-+L`w zm~BS^Et3VZ56t3>SPSY}DoX-@jOj_zZ?Tf%CWBpjQc6Ck7}sS#b@L0CN7wbLsBn-l zQI-8pn2B|bs*+qln^g+-6P|mx7U;T4kq{3eW&w%)GEztHx_}gu4GK~pq4@#bPNAPX z4GvNE(nov%kdgX`SA%z3rk6hA$p;k^S(*8wGqPEqK&uP_RZY)~-Myth;(L0x!3`ym!jD(`abuG73wDqw?+ z(?RXG>!M=-&R#G>wJv?)+Ia4S2)IDsxZ1Cs9 z?0C0Wp!n@9ip})M+!)84`E(erAt*?HH;c5HyBNmdUewtzv?W*&&pQdhCGd?21D%BM zAwl@7S(X;o4Sqa~aSamay;4Ar&I-_TLGG|T8IofS2cjktV1NHD+%M=3QR?BY)9}88 zu8|-Y3lz=p6@Dg6zq<}!QQ;tA{7v}XW~ojEsdq%@)#hU3-&onz-|~<^&pUz9G~-Ou z^RJ@sIunhNQu0B?R4c-t>ZMl70GX?ItyUz&8zS{9ndG{36WI1bUy0|fY?`7PEwy?# zV02xaz#(}i7CTsv&6m|VzfYjxpNYoXPoWmFg~rMPL9>XOkroJvgv`dn1j7alBu$nM&w8M%N+UYgv)b_-xoeg#OHRYrhn$$B^aO7tx5ASF27*_T z4SevV?U$dM2MEN2)}!W!HNwYe^7q9_TRffB|&9I~}qDh{efl z%`Z#t4pGYjgeiSf^+-YJl~nBOce9qRrEf_tpv~BST+vD9$(A1SqzC6V8(rKPKdvsA zMZ1puQQ;tAuGy@nXZ(n5*K0PlAP6_rGWB=kC$k9+MyKBG&Rwfzo=5;fn`3YHXJ>7c zAP6_x63q-rr9{E430=1(`Z57&c9p1!!em9e)MmURcimOu$^(=ssH%UWx7{b}i!mJ$ zsV2PFbuFldQUPoFpZdXcx28AB)n0YIhl=@s*ZwET1+-~T^%H%4si1Gy_Vi@}(!@;q z=joXjl)DBr$O43k`lr3U)Kg1>c;k^&OTq1Xtev`gq$>|l<~HN`gi0pv?<6l)o?Zs|p>o*t&gR^@i+RX^A*pmyZW0E1ps3z+HmIOD_u=hOM>{XM&@#6 zUn{Db;iactDJMvQPw~Hj2T@V|R z`>~t&gOdIc%5@f}-t`CHERk&lkmQftGP2ae?`FElNf%ie5=ind-l~sCZuCR zAivZ*RKktIMXydUG0J4G8@aR@;M&9KdbZkXZ9d*Sj?5JLPDz_LG6?CjxA6k^wI9&E zn{&0-l@$9FIfMSgbzPulU`10tE{6a=1(<8?&-NK{6m6G^+(cDbB$HHrWl83ge8hgKr#v#n^qwSJM8 zz+TW91@(TtyzQ@z6lGz)Bm#axFQQ+o!x$hxVrsvv`xUj35kLT6d{jRMR`-t}PJVi~ zn5j$9u5Wg$)zWLQq9n)@M9`mpyOw?Jp^;72{Mc?qwhgw{7Y&S71Y!Kj+mLtd(em28 z>M1$ogNh2Y8xv!8+nMJjua?9Z{W;-$>}`@W+ss7agqtH4bs6M+H(r9M=bxs|qV9^mcGCza z6r)~5{lC7y0Kq!Wj+7I&3g~;kfvI)a$q^LD@%Nl%#l|3Pd~@|WxVoo zy;2+CbU3TTUN$K3j9)B`14=BWuBM0cH079yRU(jp=p{(qu_NKy||%^41lrk zC0E+>Pu3u^1SvXLG<$%AFZhhNp4MH?GfGgrJ1~luj!wzH~qs6Aw_%LAWnCo8;Xoh z-MRGVFTURV{WUh*dXb|1Y`t8ZQz<=SoU%n$bom=E$&#PHc)LNo_Ks~16@64%u8hJP zr)Y}rrRFa+BAp-bFVaeix-3GO%e=j%IzQz>oI+8PG*LYv{rMN)u+Z1uuAlvK zW5Y*Jt3^12D4MN80u5>(x}zr}WaHEvsHk%78=C)FoDzNXd`Xt}XGPyF8Kzek*CB+| z`sCf^@s8TmYWH~-YpzovU`AHt2OW#txrsRu$lgGlG=mp?s>rSF zm=cJ5{(>ezD6adwP=9c}p3e9t=ms5#eEzX|UZlh;*Q$RonNu9`Z~QGP>|13$fzLm6 zU-!+)oZ^N;AW(6tS~Qe-Xd6Cd{j{BKUe_;{vRO;f6)#rM=Eh6*zm3r6pMDE7<7?`8 ziXJK&XyG!z9-!57G->NV-_w6XR{ez2&zQ!0bk<*d>tcJhTwL?}?1$H3xv!`iV;j&2 zdj1O!lti~Xe0W2fTD(=kqUk~XJ%yZ4Jk*k?wtA}l@AJ(}`?`8c19NM4KrcF1)yTW? zQuE(Tc4|WZg$>>2F{QH%r`Na3>x}@`ibZ*~Q>%C>Cj9vq9s*WXs~*~VgX*Fmr*a0x zK-GO1i=s6++sKZv=fA3-52h0A#^iiDEVvE-sd_q1=*#P`j$UE-MNzPsmcQhRy#5M> z`DT_*x+@eF44q$nWAtj@z~8w3st>GCJmBy2ukm+6jTH(3f3}(OUzaWzD9SDxSvOv4 z{@cp+Dhj*Z-~9Bw|L21r_`rMrH~r5a{exfoPp9hH=a11F(3CAuhM?!`FV41`V-*=_ zufvAkRH4d{9vGj0^3HbiI{tx@rB_FuLvB=y z8&nXaSq1%9E%nArHSl%zE&kQ+5qg3D^E358)d&Cg4}Rdi|BU|UxxL_!{i=lkD&I89 zh!h9|i(Ow}a;e%mqcX(%dJf)@_%ozu?8j*mjVPH!^Y50+FEa5PdWpy5VV}5RKWyQl z#Y8yN5U|B(nb_^@T(8D8X0WI7*zeNtT8fNb0|1Jx}kp@w;8D=k)g|2#oec=@&nsjqqMy>*8!yVG2A67*P2Y={Ijp zF6PULs^T^-Wgov`AEY~88yDb!%&#)p^tEc9hZGqaP2@Mhy}O{f0#75e22@ zr>>1U`F4xraI`ov%jovA)okrW&EAOxXogtb>1e+Ltzqxzn5G*3MI+YUPR{`cPTxCM z@*$1}BYs6{UGvlBdUmRx&D4jISx-0{!1ZKQ5Pex9YC6v-!PK7GWZ(DFXMI>u{St%n zyD)8)4){~ohwld_E-+C*_= z4(^Xn%&JPwUawL$5&ZoQ^cy&DG->`JiwBhXR)I1N1nYj=!>QpgfC67HQJ_w3-4SAS zK=M4X9%T@xU6u4!m^#Ix%I=NloDa|1g^t)->oZb4o35*X#}ijdfY-Ap^;Qa(b(ij{ zd;Qw?^&Di7{%vk&_Nl9+%hVpOX5XgcbOuuw4)nPHZq@v1q+-zV!!VlE5X=)Eckl!a z;+ZrH*l^xG|0op@>dm_+)2mw%_OncW>UhIX|Uw zdV8kM4f=#`94 zmln(R|5jF1+&W(gM(UrHi-aco9cE9IEkM^G$mocd*zXo#PJr{AwK^*hp~zcW|LW`4tvDYhL~&?s!J$jP(7O zXG>mk=`!D_G5n#;P5E~cIj?&$wbc1_B{eLU zPrHn~T6WTo91s+LJ<;Tf9&^hs>k1i`(>Nd`PRkzFrmM$NMyX3Wok7VUffQezslP|Z zpp9EIRfS}<{(P7=v{)ea)kO2ran0EY-7z6LS*H=b-N^z>5as!jIC-Oh8O@iv#Fp&2 zoDU4ny!*;Wg1mT6tJ);A7C23&JkGf!}vo0Fe1vYmVu@S{16)UogV!K`kreLj%6DCu<-C z{w|}W7VZs_NkDMqVOIXc#%6aeQVnWY3u$-?cNX#`GI? zwdmxL7DStJU-*7SYcsShoX+gk!f8L^N3pSpIYJjC2qL7<-ZmTjuJI$2&5jd>W)J8U z7_bpVcptxQw`r(7miAD2V>-Kyxd4JrPTX;~Jd$MRTzMnAOZ#UWFQ*gE;#R{h)@nqN zwZ8Ds2-b^o`mFQ%WHQwowLe^Ex~zHZbp{2ttHlu5XCBf}NgGHx%!hP9WhlSf!MW?` zt~4?r@6sa9wMR%L^!b2~q7KZ^x;Qulkyf9lvidbuSEo(fbtBaaoWl86_lQ#CGhOh- zlS=Msp+>yjG+xkT&S3`9FgP^i9d_swD|+U^o=0fVIys|0j6h0x#}f30=>Jb`i2i>Q z8=}8ZJ)?CUItw|P9KT21WHG%MtH+dRt@Gm#fB5Fj`Sh$hzo7HlYES!fdr>l-G2Dzc zKbcSJf2SQer)mfEtFPQxu4ykcWS(u$=h%X5|I!1(K>4}m2b;}uI>Vy+hyM@S3;hxL zpXc_-!d~c(a6rG{Kwm7TGj*?J18Wbc?gv{72ILnlWPOlzZ1=6H+GGQ6*C6)+4`vfM$+R8`s4^BVK+YSL&66Dg%=wN7jztHHl;f&r|KrK#t8Q4TZGtzZd;|08sc`Z4gKwCGFvW>kJQ<#hJ-D8 z$6XLoZq!oTe5V}?w0r`3hllyMr$PQU`KYjHcRE`rvx zht_(wlz{@N-xNt*(BCSbI#>U}j5RK4KrN=#sW=#j$&Fb5c0CnE=-|dwOlMHf-Thr?@iFMn;CN4zJOl< z3Zh?55LNPJnzoSKH%$%+l8MfsoA_AWquCg7s73}>1}zGHN|l4q0v2e=fmS=qzJXQ? z$%|-Sp#62p&*&KpdSXPMMrD>N3I0Y#8z~nGhWf1pr|GkC{RtyxS5q_mzKmFd2X-$d z*wwNLCSt5Mq9{`rIF-ceB2H>%;IR`&HzPENG9{y188H@J#GY&9t#qC>TT#u9 zwWB?Ak>O@#)LcZgsTiMKhQ6DXjBp+3DL8QZ41JH~k!nE)y1Bz=)U@f5uj+8Cw z-M87+@ua1xabVcX4?yQTeO(x{R(Sw2Qc{Ef1R}rUHJrY4n-)InWq&6eW=v+hwsS?L zD7nA0E%?hGuVz~hvr$HL)N!f#JjJB>mF3}fFKYJ{)!6Ds5gG@|jg8IcF%HcyEdFO5 zJCJ=xG!`=hWG@D)ZE&f)0m9)JZWmJj<~cnhkC>)_f0)rZutVz^o^0NreHqxRgWYrz_ayW75M zpdr=$=CmVv62mm2f$DZS(wJOrrQUn@Nv`*E&v$3;50fe`fZvZquXgCs4vGfkDAdAsmK(y7H(jLJNI1Qr>7_G?dJ62 zgg3C}dIaf2uZ5_q-D@_Ej;?6f;1}J0mvD2PKZOgq0CiIdx&=mEfh5eBvga;(vSp0# zsKX@#`&YwXoG+)3B?3Rp?1VMBzLTiy3VNnXNv+xiPZ=ip=kF2yBrSphEpc(sQDL%PPcFujQ(ow| zXJO*`IU4DPBP_>e4In7C)zAeWvj;T#=jVBwxNb>qL4_ujp83vS(ix4EsL?nIti>ko zI?#^v$!kAG-P1f6s|VF79Sb`v#fX*=^qnUdsl9 zQ1f+lzVs?aeQ0jP0{82#=0bVXt#^*Yg6FgLwotPay+1fr@GNHm1#SeN>dol&BCE-C zqTQ&x$fZ|NXUkwQ@tzEtzEV#N$ zOCeW@WX94`XOh4JyRSrAe>z`osxjT#2{ZEGRbG0{X?Fn>Jl!2nt`$u_tffn7dB(PY z4z`p~!88mAwUe-KczW%o%*ze|q1{6h;Na~pmuU-|)eEy0qGqkUdYiFa=9|`C5b+&P zf&;gp_05m<-HYm(8a2#}!;)!-*3Y0Qp@QkxB5LV_6>9FfuIBpi(&lW&*O%;p|9IZm z!JINK*nTI%)|!;wlvEp`spb`jQ4asX!+*vB1f9EDDbna^|Iz$MbKjgh zjb>!%G)8r*5?Y>9W>}|yjspVgxHDBn$X%i!3+)!$Iz!^SsmfQ9m|V$b><0|ElxasFn`JF?&!d}vWR%EsUvh*|w;9LEAg69FlmkKkQ^kx;8LDyGS-1e8;jVzyG?G=zj1@4&rLCtW%9MT=YeLdybhMj4rYgj0t}dK% z{Wr6a*2s$bO7jyB4hDPG>t*f-w7Z9%omST#@I8ty)yxS@BQ}d_3>mE5;)HJI<$QO( zh$Us233DDt4+o6=-EbsK{gT#q=r#*4-N`7HWc2_K0#w}nF|~2dY1!L9+mNyBrbwt# zjQ%*>pu%MXJ!~4a)Jl&cioqbGP?Kj09|Uy#sRUMD#}z%t&BJ46uXE-zZn%!wr(Wna zaA4)md6gNR*-cnh&zSS(*eJjN8NbEcAD+*i&G=ezPc0ULfR4LoptjA)WH;Zcc{&S{ znb~hqbD6igG#2={Col{j&v7!xRfkC(9b}gw4kRDw?kcuLuOH29sv?;IrG$Wj00+Mh z9h!@L<5kPq%2Hr>d_YZVZyyB3U#bANX!9TD8d8WJ4pQzKx2K z(QwHr($n`PFN9Q5`! zQ#=e5*!UR?Rk%)ei>V&AsgB5EZ)V<{kx}_5VB^QV`Q&}P($sYG%(_vLWh@Yw`012t zpYd`r=OwJnLE52`8Uq>(u<&EB-bS}wPiS$EHk7f($t;Ps^&SraMEsfy|CzpHolX_d znFKysX9k`!QVb0Q{a~m9D+T7-+{{ot%|tl>X!yg#d9^;JT?y;u`;}Tc-%v`!$YkbK zvjwenE+%t16iXl=-srNjC4?N&q}F)w^#-d5a(;2XT(8dP#?{@zKk}5>dD~19f`E=cVbnT} zn-f$ll$0k7sj(=40w=$b)|1&L%s4Yw0-Q!_@6ZhrxcGf~UC~5eWtYK?XFc_44geZ{ zjCECEO_b>{?)TAolKUe&XY)g?+NA6)Gi2;|r#^ba6`$as#lsH%x+(cZMVrQ`9@cat zW{=E_-|-UXj^1F2U5zawB>4I5gdYdPQRY&N!^<_7JV-OJD5Kqx7J3*)E*Kd3^K80e zYq_{k&q6l|ctK~P6wIz-M(kn$K)^2q83Mrpf=oYd3%;&+Q1ETATh!GV*9Mt`v*RME zXbS`|@B^Fq_wng^x#QbKGppQXJPZ!l_@m-(JDZPY$0|$MUYMr_8}G;ra%~M0f+Xo6 z%L$fMGwHNVK{Oo(0y_R6t$+EH%0sj#qoS2c)^#!`j9F}443P0hXS|lg7vnN3hpLI% zJ8%O55`InLDZNP&%Ua44g;YQCk-*3wne^{ekfq1>rgWjay4jtzQ+YBKOEN_$@bZJ5 z{;^tp>o&P}dU=wLK>!QigKHL%F}r-dq;1R&;K0j`!}X;E>ImHv)=(J>T4v9$N(|}r z9d4R%RzO|Zz;>6E&A+E+M;ZNE)8Kb6gdBVf&~c}YhR$Y5Q#D<9=AApEY^kXnAJ2mn zN)QbO?#7JpXXD926 zWZW1SkeQE}eKNwawhzgPUDF^z*_zdE8jwP^5|@cBSS4q8gd;((O98!;fYeM&Wm z@nXqqs~M?9F|7s(#1b8y?!n+YeERR`8X}JhH_jkbwmD8s`5PU5xsY4%*k+`I zN1_`YS6)2s-*+_xsJNAJ&sC1;(AjL^oes&Uj2AkKg#o3+7*XHC%7@PE?v(8^Kmj3l zx4&m2^HVxA&Ri#B)wZ@$DJKO4S_yBio>ANJ95B0=7f{k5pp$GinvHmll-+FEc_1D0 z(kLL5NRdxyb&&_<>=ZehPK^OF2_I5h5Kd-u|A1$<59KpzfIutZL-p*8xpj{b(MSi6 zL>i_SVd<%6KBQ--VcG87;DD67vDxeQ_Q&eF2xg;+pJRbsVhjmZ5wpjTY-6!a zK8cP-*YtTytNnMh8UuDo{{fO2Vt<{F4r4Fp<= z0az;$7%O`K&i8QTE*b}<5)((d`i6OV_QWxpjzR#Dgms#IHSUUOwso?jcY^~`iK!d? zIILXtKXtP(pp*!abS)j@b9V2_4$cMybW#qjZXcg6tF?CkHQS-{IXOrmmgx537R&y-eT@M! ziBU}dFqq5sKZ-RtAeHc>-HLAR=Vh86D-cF{1`mDue&}kN0RbKNsWERZq_z;yKErT( zRPNF<$)hMO-hiKi0yXzyLiKx9zp9_rz(r+a{1pq>8RsMPL=7K@Tj<)*z|b$;*vAj( z6g!;>8dIH6y~562D>oomVg40Rik}vJA1RTvM3oK zLu~i_ldFsG>5QK?;jMrAmp}dTbGLQPO{nGyas9iE+Fhhx%N|eGr#!ah_S0Hi*h|~d zU{AN7%3rCsFP41XkZaH~dIkv0+~R@AteT!JS#-;-*A>yyDB$ECON(-%?dRU(Jh`Jn zF|is7?A$AWWp?K)+CWPKm)e@Ptxoyj!i?SVI;51b3?RYQy+BoFyHJbE^$nNwW)Urf z^5dZymqB;nD}aJ=yM3QkQ`(M8x7IG}SFV_Q4rAW{5^UW_DcbjBx1|d+7{%Odv&aPu z4tTj2zl*%iXsh?wMp7OaGhX2+Z*w0IOx;^+M5Z&EqtB*v1=zYGQ!ac5J!!w5temWX z3BKQ>6aufi%6#>CyYtE7qE2Iwkp3`d&yv9C= zXZV0%+8PPo+fWdoT^?$q_nhp@$In3`K?n)9t#;L)Mz{`QS04~eTQerT&`7PnINhGH z$TdjD#L)6NE>G!Y<~o)~&6t zK35gyllk)L@Rnt0;Mh8<(gmM8uW&oasA_P)%dH5AvA>>jY%e@+xqBswMtlbg{95N3 ztND(44Ik|XnP&h9%v$FeK{`LkJVT>^Q|tJmAM%*HUEi%f4>G=lkYMW`)sTHpJsU{3 z?Tyt{(X8Xr6f zV42m<`qoxv#=+XTh5|eHQ3o*w>9dOTR4CmU6wY`uuJSGKH31^Hw)S#m`+9d~Ggo6q z9i*3wsNgL4sPks*$P_dyU5)Ung+2Lb3JxsY?Q6yhgwOnUA#;}#jMX+e)}J!sD8%NGjiQ3FJ5E8g zVSG>a95=Dgs3<~c9^VKi*e3jdeR&8!kO09mWz|Qw|G0^+VhHHpsxl_nrmX6Ic@V1# zfZ*w_(7>(WtMA-=(C)4oH6+N*bk`^>IHx?p`&ck<|DGUYg01@yA}nDn{NVn(@7#Xy z@Jf=^TwUqHj|`OVz-;|o0c*j&@JnQZQ$VV*7|{9Vh9DF*Y4cA z`QS&eJe_f@Xzjo9E>y^Ph7pqUB1j4tyxkfnq{ny*&YiLP52+nF8&L2~jzcfNn;o=u49v!(U_C52u-_Z*n5#ROZ~Z;frOL+tCfd1m$Dz){Y1 zYL0K-e+^+kAX${_WRVQ&ouY$4+0)o%Hyoo-Tg`)yo$!z9DB-;;F@XC zL-a70s5gEk{L`OSo^1F9wY~eN1PE)&IiYSP|1)v=Ta**#G=3B{hw<%ORBN@l7OmG$ zXB&U=+dtzNDj3U|VQpjn?PfahR_=>3!z}wsh+rzuXe6dKm2iu@MKhWXWG!epUz*WR?HCfRlSw{HX#d{a@3eHuD$|4~c;1kXg){W|;1dXVb|z2~tJ%wo3I ze-6mjVuEcV>%M*O?YqcmC!6VP#wIgGv&Ecf5W<0DA}4S^Iz*Nw;DKeLH@RO;&n9%N zkXOii?@baQcqXzz_L;a8)q6H5LxO9jcUFttIp3K%sCU+I;F#&1RMwn%7nJor2XKvP z@W3+DJL&NCba~9zKnC?r0D@;C*1z%Q{hM}TE)Su-$NC5+*e2SZeHjj*y|=x92bPH* z&%P3e&)$2y3|Y$64rK1&IV@KT39j;*k{;`*gn9e>&4Nt4j9Ij%lrxMbk-y|oGslK-PiQcDwoUWxel=KXu$cUP6eJh=CmBSV5~Vtn*J6!PKT z$HxdJ*e2qP|D}`{_ug+~px`U-DAN5l_*Be~i*^*{g!4EoI45d+{>Kab0kKL8G}(7@*+$-FV!)d;9e}Z{MZi3xPX6(r27nE?Z4$!3O(;PX`jj(Y|+| zj>C50YzJT0M~3HYVZk}!)wROuaisTH7Xt;~MBE5J6~>a@<3~?oD-E9 zwxwL?g1uK}BtY;?WS;CZ*@=74JR_K3n`>2JA$eG-|$ zLB<5z#Mp4p`%(^Jy=M<`Sa2?|un@=wx3Cw>5_OaZx7#*u^j=4iAz|6X%98tG7{YpA zSqkC6F%fCqkHp~Bd!!W+3z^yo;)bn3nOa0Jb?>3^^4f>D?JPbl^JUz&0C9PHApl_DaTCT3ggyZV3~W)N;K z>V3AAzy<3>UCjBK?jBsv=sG-g!1-vV9}Hz1NqVn~wP1sNo)1g59@2+_2bOu!K)8N< z$Y|hQL@u8a)zxi%+%c;>T69V@r*fW#hJ6$BFJFK-&h|e4ilTO4Y)3ygQVh=6qJnY4 zhuy+RIOz87!yz0vCZd7+kudD`9t{LMuuN1n+^?j8xA&@s1PGpqnE?At9C~}73CNJ( zn%VNg{A$pa_vTiKT*g&Tti<-7%ZP}uXQq#0pmRghpgsyf@RV;2(j$v|Er5T1qv+P4 zoN>wr1HV*@w_RJ%e~U|qnM~Q)df%LbFbxpFG*JTz&f<#)VtTIu#bLoYvCHhyoqIpZ zO0Ig}WtKz+^F;mC`(8|~daq~3K+E~s6vvHTL-Vzu;F}s{$urz29p+a3kFp{pxF#x@ zs##pFLXOpYB{PBvwk@9PvXyeJK|DbM1>a;`~1)@6}{6rgste@v7c)^CU8u z|6zPjtN%T9v)y_!AI~R?)17*dCs1M6_g1ew3ee^EGIdd}Vvg%uud8RP30={%}Dx^CQxe%`sio zaPI9pFS%VNmvtH)3W%q3QVJOQ<{7PVxGA9I7|TAoh(vyN_X8jNfcih^SKL7I*0Mu2 zP=gKy#DzuPK|iA~9+ovq1RV5lwRaFEL2OkwNhmq|wTC7m4=7dICQYllnjEN2 z8gS4TXBfs->QWlyJz~|bBuUG(zlaI4VhU^oGtZG7za(eRq#Hp6;goZ*PwVNMdTU3x zyJrCBNP~m^?XB;$odZSI9a`W`iBL zdh4I5ka+Kwa~Gm)*a1Rf1QnJ|CG_l5!L$P;^b#bfiuXmDCJWZ5=1aQ8Y%C6wCDW%& zk7$F33gQO3mkt4a7 zeS;42;y~{}F!E~IkltiCrnj%S^-FRUM|d%RMgS^^b!i9XHCht9iNR6`ktN#&9kDs& zC1}uY^ZHwN+yxnVEE>@3WALCat`j=u;ol2pFWIc?$jvdkhz;Ux9{>9NyEpIL8`bw2 z!)<7?!7tz*(BtC-pu!(WlMKg3q6B&kaQgUUw)QIV7X=xv1Ci4VZ8V@xTTd`@j@Qdo zv^@sw2{Cxk7pHuVsf6z%ZSi#Qws39ekbo*}q132ioHg7PsiIcv}X_8*D?P)j4;T0W(k$8^r%X zYx<^c_#VIYfNo%SU&WJ4^d$?1#h%kf1SoXt#{{uZB#CWbH&wP_%2?$p!LD zXuF08RB9XW^i{wu)1d(eycj&_w`EVl_fF>P`r3fmQ6gPzrrlkXp-7+|+ zi-lh&+yq}o+Ms0rk0U;3986Jw8d-foNFH4`8oDnC@SuOQB@EwwHl6Q|t6NJ3#(K+30sENYJ!s1Uk%F0pO(>MXBaIa;oX`Tw8O;;!M zX2EuRyc|<$=ZuCLL^k>-Q{iU8?cWU7g-U5b-3NWBs~6PAVgmkmm#nf!4Qk)-PwjA6 z{@W{|Gasn$c2bzX!x8c7e|>0mqpZ-nKkPwS&vD%N^!#!a_LxEGZh?#2vKAeB^uYsH zoEFsmeh+O-PtT26fd1!~+p?Mu6#PLC3WhEDFD_R@9+cXW>_2*V-@eX0*&IB{j=`ga z#H-$%B-{Odv0Ug&|AN)0lKt6^?3{986dww-RcqaAPUWSW0jsq#IH-$9HXZx8UyI8j zZa^Cmn#Qc?-r0dk)AJ~R%UyBXhGJYYnZph3IM?;UP5*MZ&Rf6;O14ci zMUnbV?1YK~PBXLlK*6?sPoluBT9O_wXU7R82i*5m#0iSFmHhIA)|v-vy#to~ig`id zH%j~GnL1QQ!6nhC|LlOBGeQUI6^9>Ro{pnIOCB=(#2GEhUwds{7*VVM#FFOU)!BwB{cX#AL2^;a`mKzLC1wKm}vjOC+&j zW0nl6y=%$aQryo|pklD1Qc_y&Q8%`dB3^M;pj6mmCA;2x)QY#2INLR7(bB&gEK8nA z%G4r?i$0V}XoNw}r8_`EBOrokDxq;d^9DJW@Bj%-0vW{J4XoATbhfBQx6XEp$JOzj zZMB|I{`Elb`WjuRokL?Pwj#Y*?9N$2mQhBVF4xr!+83~(89rSgxf%H>WH|%q;pRDz zvOHhS=GF12-iffIy*Fk99{YbxiHstwR)S8WR_n!N9#6Fwu# z=#SmVipXH@UfmmGz9qWq@B;JPj0c}O(zS5lC|VbtdURA#6d7-yE>|>Rwbg-VUd=b7 zcB<*-L<<{G64>DGUL|4eYq`@!FVpeydiJDRk7*1;sMDRHq8`tCUB*WD4mz}RfG+Mv z_iSA@wmIFNnQ;uMKUEqE`I_t~Yc?@S8EB`*kMVM)hY{8fhSMZT0h*-yMoryn67j2H z`bHcZ+}$Kb_9w>#O(VK~l(Cf4(T_xEFn4qI7<0#A;7L<6NROuznx`>0$~a!sS&?=o z(CaMhSeK$)Q!j)O) z^jhkiHDt!=w_cU>s6aD!s$8Jie0fTv>FId8d|dGh*E1%Sed@)DK&y`Z?tJoWyk0&X zAMH-)#3F011NS?R3H0jNT8m{p!w6G_1Gg3@04za1Xy?}33bYfmad$||D4zDIpvVV0cI zpIOj$wkE+sNXALpJ{znd0d3qZJ)t(U1r5qGy2;0;fz`8Vr88NkM#hp$2Q^aY;P39| z0e^jS)oooMdTYL;F$p=8P>sl_6lODT!v$yelKNK8yEV@dGVYGvpRfW2TWJ=$Thn1z zQ*5IXmAmt1-^;1W6}Yz5Dc_7dl)WR+ zVBThL8%aUlFEI~gZxI-*g=qLXT}MGBY*koRrEJiB`Q>Tt;mk=g*8H`Tw3d`xQNdV< zg|Tm^K`A-o0`>jq){x*TjFpyaeOsb2@>ns2rTqY&TQSMEaT*)!-CKZ61Oa8Dp8%!Y=lWVQN}$?#rAK3hYmtMqb*YKzXu2Qjn~k?mU?0GhP)d*f%h zL2QtIpTPmzxVJ$HQ7k6OO>^9&F}LPh6vlE$K%cxQ5VVezZ4DU(q6DCau#ZlR0xjEn zdfP{r3l9G2JSBHj93oFiVS|05)e^-U2LwA@jg%4ppj1lIwf)vC2UhseRVOdT2<*iCuv2828n8jl9AOA zy;nn$$Y3tih~ZDPy~8B2W2*llq4GQ z=ky2W?YY&~CVP+WI8H%=sSq7ItT^TRbq487bnq7{+eSjhDpQZEd}&ay75u_{*t)XR zqhF*T!8C5y$dZnmd-ZSE2q@Ub?J6$hxLo_Us|X3EUkmr|z5U=#@2x%csE<0f%>u(; zWQMUi-b8~!0u3D1nKW;Yq41U76CLCmM}x6!@WAuSIXutk0a#|o9}mS)BY|61JFh02 z&C}(Ymxu>zXNv}oS@v5k*9WqnMglkCJW1$-ly$B7I`*Fp)wnej*k!dY-3~(sg3b@r zi!B;B3blS^!F5Hi*RIEORRit3a;_Xcn;loQS5a`t+?iWO;K>7r2Exe~r2(DIM5t`^HC6fe$=0b`Y>P>={wHP#dhwo??_N!*KV^Q;SVb7OhUtbt7);=^orpx6KDJOI*qW6Gv?z}jIc^fQP z3#)EP*0mmb3sty-KDR2m5C4DwG!g14fhMa7y)~U^fZScNr3y&6;GNR~?EA;n#aN#i zqU3EpyK-b=9tw4D@@mSifKauPL&!P?39TX&rEffRKaLDLRC8)zzRS~!@`M%h3^_af7-ZRv-b z+*6W!gquk3apO&qm&UeaI^OSg#{+n21|zg#eojL}ZA`A;h(qTzEmWXeQ7dNb3q5cv zW-x-L_e(~P=w{1^!~S(7G6?RI#ZMbHL=L*8^m# zt$d*6!y=Eh`vZloSrM;iWZTx;=oo3& zLqwwtO3+ofHz=OZHYW6Rb@NAel*zcOzdt8VaDuj-VpBAabTvI-Y>M)MmhKCGt$A&< zP5q=O;|1-(+S1K!i!#1oBW$Es9w6gOQ9;Y)*G?&g3zdl-vx3I?*`1P|y+L^B?5>pz^vkc%DUn&*hlj4vC5b?<*Rnk|zRTAg51tJ? z>4>v{M(?$1bQ{-W-dfTn#m~0-A*JbVO}lZ-1;~1F6}kCLUsy-i-_q4kv-*m@@#%WG zTk*xe|1gl|{jr6Ggq59jb)xR;pgU;P&HLtksgw2cd~62N`r3}s5nb`Zs_40gZXJNg zmDbKL+9^O4VaONdsJ=iKSWX|S4f3>ZNN;9s?NW5G0V6l+I8Y@@wUdE*LM_t4Y|NCD zC>$Zlcp*XOG!9sA3K}|4Q7HB}sF^B8UXjY3b2xy#sp(LHs=576x2AW$mA^-5;C>gQ z09AyemW~mBIpG*Skl*B(zlGDzv*Bv1K z#fdz5r%VvA~XDcfx z+)s-J5#~}`l!Y1h#b&dV;8<4*Gm`CuSd+W)z(MO4YZ83WiX~8wZFHbw z`6%d3&w~l{!A3!e2-GUiVLWNkSaYx(CPfHp?%jGpgt@HNW5K07hw+Rh#Fc~PFftXi zSa}W;$n&Q~2g_kZCQz(AR<7JdTP(^4;pAYkGEN673cG)tQAir|M48dhlDkFL0qr*Q zwbO#iJ+*2OW-hl?S+FS|Dn#=MA?IL2MT!twvOHmnNcF?d!4kFvA1GPwuJtm9I)X%- zgf2e_#pyuB@*pJ2y!;^4P75mc)T);kghW;M3__yJ%M3y(LTJhIAQX{$X+bE#2TFEz zSM#R#RS7~89jMqf2zfHEN)SrXg33L$>SYHZPt{(6kSFuqTWUd>XsBV#ra@RKRQ4`Gfo6*l@v5ZX@ajFprDze z0@X_LB2iwQQ3q%J4p1R#qXQL7wp-T?#UIEBeDVO>t)o1kR7oLPKGqkgb$~*2f(aB8 z&eJ*tQ(mQ&#R;7)_pq>oR9c!%a)ELs;~zb$zNNQk>i#uZ9FI>PPg@-G0OMaKD<~}7 zOX1kqYt2@Lg_ix>;nTWyl?^W_T`~%a1&N?*9$*xV6M!5|Qp|d8LHQ z3m*~@s8t?5JZVCE9V~pvRG?aU`0(U4p3XMIA0UaYk>hlrVo6%It^#J!`q{%?N zlD-&`sQ)_1qYuy*Tlqjq;ZiIo$K_L6tBp-M1JBI8na9B>&7&hMpioJDEEFa9;{obp zQ65n0_cPa&&gg|Py)iPnZlC*lNXG_}2|$h9Sz91Q>!iy?ETbHF)|R3Hm2$5e2xJMK zHt=-=F$z$nbL&J#;zPHNLjx)akG?pL-9$HKnz})v9Vhp75l4PWWQ#C>BDuwZP)w~> z*mnjl4y1`dE#YA#$9`V>nD@S;E%apA;;Gh1;s9lGhf+z95Df+%N)s%gP;P!FigI6P zXF+@5{H~o0)GHZOb!>@x-T?;HkO0&u8G)D-!RHPz0!b90O34Vscpt zdNnh1i(P$~`(B_EHcN&b7Z#Lr=RF3pu8pB@%ofx6jvlo&mkY3-Kk&RKiw~5{4c4Mi z-RMlUfrE8|1r!P$ZLF`>q^l@TW~XSL`cJ#{MAa9V1}B-LXMMgl_R@JfCis3e=or$s zkDsbXOc~MfU_=dA8AE#Z77!I@w3GTKKKFkf1vhK3$^89%I|o2yLV<90(`#Q!e_N! zt|q6GEhm-z0CIKojsa4GaO0hN34oVqcJfAEsm}a?^{2n!PsX#rpuGT?4okoU_Md$9p>rp$0 z36x{g*bd5VwiJTZiA>gVx%HDCb!&(~wfw&32gCV<-j%QBpe1piPYD?)H6<|)}RA%f&&y{ z6_k=T7j(&f8@$FTODa5F4E)||tg8*3i(pN1NHq*R)L^CVNNXHb>cXVlL@)Q|f zn3K*X4d$d-?j?T%rL(zIpkB`Ko0QpPTCR2j4ZoR8pj<(p^Tvy5H0c|*&n0OwRw_`hU}*Ma#!|mwhvozcsKi#Fi`-5~ z{?>fMG>C6^~gL>HMQ0#qB*gmhz)7QbHoB{X2x_lHJO61H|wcP_H z{5L=cnytpcp~AN^Tt{6>HM4h81@=E1#&-l%kj|O3)t?8357-Yh+eyJgjhqTjL{98o z;DIVQ87!bwPREXj^E<^r9Xo+uqC~wIs;((f>k!eEhJlnwphJmQGP-s>kc@;io#`;W zngfDr&PYt_pY(Cn-lGQ^iIezHBquV(1o`eiP-IHMLk;%&R3tN6Qw4dlslwNigAkj$ zMXGS-nd^rE-Y|hm#07D- zgDBQNmh<`1gdT(qo)Zr`NbdgP(hibl0A+G!cCd!1OwdIJn%T9JfJ*zdPtZvY-af3C zWOaBn_4esYf&;Pr6jd`o(I(#ugLnGtCZ4bz0O!4g?`&w$|8^<;Eo~65_~wP&GZX1xm!@uD zL7VNquieA{{+M?2M%|71?z!AS<{oB}FH3&sARxpIShKgIqc_`TH-8sU&?c=25dm9xp5 z*5*vkenwZ%&Z}{?UN6@eX2}(U>Sa%%G8-H1AfyU!Ethk{etK3-=>~d-xHY=qupQwuf}NO$g&*?MD_P4b$e z_s*Tk0Sd8;aO%0C6DdSt$%e_j*C$;OEv5i;+H%9_m`x04o?_??cdqU z2!a9ro2zC3!x75gb5~gQQhvETtJcite|FV$uPH+H?#^E=jyF$dTf4A*Rh>V<6GrIn z{J!w3==>3mP`f|A))&{VAd_1A76uDEtM|1^@qVubc_I z=-<8f2kM7C;L?Y_2uHO29$moiTaf|a^1DESD9o@&7x1ND$u1Bf3HA5r0>0#{*ac*c zQ2x#CqriOj*zOV*+Wo)2^w1{|gxYK)ds)jQ?DNT$d)bH-*jpXHOvt7>?r>vTF>25CYgVJ|9$M;4k-Jvn9jw}DofS+Err;7}s zc=rm9Blco@Mu$&l=PUjKz@?WjWr}^OPIu(&)^r`&g;%z}LaMtIq53`{uA;YM?8HSK za0nh`xdI_hCJFWTae6K}9N4Zv%S#lYdiU{sxngpcD;C@@eLN58LFMkb`?@-xRARN}Z>L;(r7lIZH#5*}WAh0u-cn*WIp2&z zU$`n}5Q)MJ-RJej$ewh`A1-}fpQZ{^yxlqP3+J?v8utHq+4*0RDGbqlb{~otrnr|r zyN|Mj0lKF|q3AFxxb&1LMiT1(sI4R1TF!Up3xAtZ&NdPEu*ZKmP-p1Q76xgJ422Lv zr#Mt(=*AR=Xw4l8#fP2aP=jVCqAAkstr9r$n8FZycN4!CUh!^{pbL}i-A#OqE8I;YRAGv}yNNIV>UI;EDGbqCv}=n;?)skK z4~Ht+b)X3ov`)!OWQTrms400lOBkSaXIYzQe`AX~6Ft=C%2JL{{>S^KQ{jw1GE)3+ zS0tfI5{6m+xPP+<(cyo&vL-QPVUBnEH%AyL{^u)ejhZWrv2Va^88WU&z!X@*0IfC5 zmSE(H4&C5THOyj?P=DV%ve_;W-@bE2rdu(pFvY%Ip^-0c<+&nVL0}03w4P0C@v=sA zWLwXn4rX@Y2_x)VnR1K}+2V6WO1Co6{>|X-rE!zVD`y6mD9o^bcw`$u#H~M9COpbi zVT%1b2A3ZWmRH6jB%(0GzWGA9=f>?6S0rBuNkaX7=MvJElWi>E* zCgVxIFv`Bwi4a7n)m)M4M3gIxv2Xen0)$z|6-mEhRAGwNy%hJ4-lN+|qnnNVrGrRe z^H6&!y0e8rT9Kg&^s=y0g|XJ@i7M{BjB93hMphpJX| z)J?*gMKc)|$#R;C&+SY7g7ihL_LMEf^`yG6lW;J6|Mx~9Ec zqAl86`4!K$-*4_Rwg9`X^s4fR3=k&dp3!;aUk@Ot7Q_AE=;m-UBZ~%!;t*s ziqs|2gkhG}y%a4OOm?;AP%{R#oXtmBHLUoomM z1$!P#x}ep0@~M7|8n;)`EnfV&nSXhptwm`@P^`6L9ThX3&^t=U)tLTwK3UT%zVm8Z zZP;~nhdTXN$`Q)52QrIVwZ3+iKO*%vm))=+1@&52q~dm4S9Ja4n64XLEEm<7em6T^ zoL7r2Yu-bxNOhnI6YSB#$^=W^buYh#4JoMC`ruvEbjQ`nWH;ZAPbO2+@`APNp&q=; zCI@xD-?sfTD)F@1((|OEw*T(3yRF9!%61=e&L*2P)}WU@hr4EU%Vgno%E$ z&3I_N^cI^fh!GU)9z`ENr9ouQ!^@>dQILXq-NTB0Rdjr`n?D{?cww%2>0!m=24&yq z97Ah?(tz=ImmNYmHK^J>g3?@{kNlV3A2lN=)_T2kbR47yV`#XcR}3xxmeWdjH+kVbl2RRUjLEw953}N>U@6k*B$(}hLs=m z?MMka{(jIkvji^nHh$KS?_Y*uh6l6>2aPOk^rg=r+?tB)(n$LWmAdjwA(JvC#%uT`v1Q+Q8Ps< z?@XMT3jNc3IXNCboo#s~zk^N&P8`ijsX(XOzK^vF(s`kpc#Th%>+yDSH0N{Te^Ksr z`)MW-f__1C$k5N0)PxkcLv+|vIiC$Q`)+y5)%}fyh$n|`EW-g>1mkUc` zuI3X}`P`h%_~UvV#@qcGNu~rHgF=0~jx?3t&8tKw>rlqtPeqXtGz{{^b`7m=O?4pN zpdIqX{j_am2hD@0F$**|`)#6b{QS^;(`qd-gT}vG9(UH&iCUy!f#>O=l>-Ur@p@-H zVv7*}{E}31`9Ql4qr+x;R-I2+BOQEnFdU%8jYu1*)5Mf{jgNH7RX;8nlta!3X^to~ zI0yA96A`2jk1NVu=zZYXlS=EtjNhR?l@au^Xh4^5N9-?TTqw1vCShu92Wf^j2GAf_ z>}C9aecVTB4N#bclIWn*bHgSyK$-QCT#gODryl85Ddf=-R`?rFIU`BB-F4 z=1xjbt5!jibf}(P5oq-$rSO?4{3q zNoxc&ZQXm_W?y|8BG4yT>&R&zO4_RRnifHPl{&0-?5h&v0$Q3rFQp0vVnR%P%JFH7(xMBxV&@HlE|8P%FW!>3T^xs^nqKp=F4XWvWiwYC=XpbDG@@)OJjS6&% zRi1MMMS9{emFGf2&@WbB$Pw3gyX%<4)ECP5K)YDoHb)wBaaX}%>bAv{pySuQ2y--f zOq-itQ~&$JUA4X#(dNL}9R2KMH=ncFR(buQ29VZwGN8fQ&$EJ0x6AQQG<~z~rvEUe zr5v;Ihbi%oi-Tc-60J<2lb@A1b(7J}BQ+>bx3qPbR`j;jYfepw{$)1Zj@8VIXT<-u zSS<(ghTcOtlG@4nRX#Cj>E|b|u-8o@{GcwSsy&h3Qsc`nQ@>JW*0HxOsC+ND1DvUA zAw6j9@BMUuN9`hys2!NImXF*HU~iggTF}rR<<6Gt+55}ImS$<2v&s5+^ich8b&PG4 zYEQosfT%*nm7P~mD_<4}Kqc1=ew4?oFGZ=GyQ=t6jVq$4Vb)bq6J^bDhVk@lNt?*8 zgrX5tw$kRPo)bnqP$Cm(d z4?Q_ADCrk11H^=qeDo~OvjePswcFSujs9#mfKtbWYm3ZmSfyiTtI4T48BaNg+Mwf~ zQYk+<9pGlEm`yIb6(xyKpN*D>YQ-cWsO8t7b&9377LD|Oshc=xc-UTGTvREYKK;Q| zDnBdH;7HBY{A(Kv=;5z7wMjUhY$w}`6+M;|t zph4-RM12o}jSJuOW^avjSqJ^MOoQ^3%Lb#11~r4OZE(H|7cLLo2H*f4N_zucQKAaS zJgYx+Z?Ghw#VejC87)V5Ym1Mj%W6HfhtnQc{E+;jI2C|=$%pW7acr=DwTShT$$ZCy z(CUD^YjiO8d#iMI{WYy6O;Fdf#p!&u z*^cg;KfI~_VDe!6Ko?qA2rb_(3t1XW(uVz@oei3$yHdfahf7sTvw>26{iM}4>q`Gb z-3O)S+g|;od{Zd{?9^Hzqn~}^10Vc=`afv-EiaNWQ2b%69mY7M$_|+ymM4ago9Bo4 zb;trr_?vj}g_e&$u+OK<-GVMUS})I;D&;HRkiLg14i_l&n@+3Hakdpz9uW^{jdWAd zx;^9lqxP6QU9KxC!)aNn!s$Cy3u zp(4po!5 zr>q7hYaqeb&B@yNhIzs9z;t;Y;GUg{vmHNOj#c)dPGY1zIX9~*_2e`I*xoIFm1*O9 zcy31DhaRrCySo6&G!Q&L_iSJvN_f5C51cSvrbpN#a%U-hsKI+jn?LEh#JsDf$Ohir8G3%dZO4cIxGM&oG#O8hCo8(xifNR)leizfYI4+oXuy`1d4q|a0 zkJ>CA-bN+OuKKrl92XXM>lsq~@g)e3a@zX<5CH{ewYL1fe?Az! z8Vd~DDlF^jeEGz#&8TR2hzd|CDTEc|1*j*ZFukKR$$YB}A}o>t)Wjg5&nz%R)Rb zZ5ykcFGHjDKUM{B;Q5j_9=x_&9McvZGeo^iciegVtp6-;7|>hLPj|F+@Wx~{3+n!A z_!gnS%PsteKUN0-*x-~ob{4bJK;ZOp(pDR_o?4CTt&)sfW&|oG#}UEOpVi-5&UfdF zx3Jsl*7966E+um#?=3_7uBCf`BlDmw=Y#{ z0#L-gJ6QR1wj$m$n9GAILEunej@0nf&NR=R6HB2PfZ*!qI>}Fk{2?=rcO`2O!Pf6^9$S??Vwk3fBX|k_ zFZwoXfCiR+MwVdt_-Vj%|BS31uLDz|?FVJ*wY)zA7IdW7vS#z0b1S9q0sHSU$VG*H z{pwxD_ku_4U%ku6-GjN{AqQdZc}h$4RmUI@Bj|wjwtB{IZ0kMxN`SC(OQdi=6|CEP z{}b@Qv?cPIOsA>)x%qPMkvBjC%P)HgndkTBJHN>ICw-3$4i1?4Nlk=Vr7FsmKC45k zjG=e#znWVB4DKzlcQufh$ZJduJ;mf~~(!;yIP~t>no2uao3qg0WwNOn)u7L*^tXKhgD!N==NVYFYcfjrYC+R7?fxE)FB+RP=8u5m%yy;wk1fsDrX;s9Fj z)W;s^(C_Sgvc4G8U%*?OzhZi1UTT$T{9-Cl%})rUs;!q#p%VQkQzi4>pw6mz(4g+m zV+?iU?)381^68lVKO6nQ1fUg{3?h z9!R?9V;nCx${kI%Q~n@G#`zc$bEAw~4FgL4@*TIEzQ>nuq|2QDm2omSAmy)d6qav&8ZpLg5Lsb?|C5EX>eJ-3>iR%@brGNFe{In_aWu7?Mb{%Sn8YW1vs+e}q-=thc} z_x@;RidAM)0W*&*p5QzrSpgGd(__qRaYpBi)h6=AG40dxp0plhj0qt@HQlxF9ld~5 z%}y68L*f29NY@fkK{y?x%%_~>AVJC^f!OtA^qg0xlj+5np3+;cS7#G`C30r%rmQms zh#>0ER(QX!@8k^c*ccBH>0PiqdJ8(zZIWX)5Dh}l1p_^QuPC?Pir$h{JA>=7h`V9t z!a`Xq`+#LMcPrYK;6?U9X#x;5)8S{eoL`)){xX}6C+7Z3*6M?V9}%^jFeX=rC2Uba zI31Q;UDe_bBRfb~3J^gwoin+gc_Zc^Ig^J6lIhqPo3#%ToLn%_`<>(%6v>V<_plen zr6z3zxpV_Rp{waA7aGs#5rie*WIsp)dw3w34oJ>N=Is&h3C}?Sl86ez>He+W;~YD_ zJbeES5JA-6>{kz*W=quMgzAoF)I`CE^5cc@YDs3*@7;YwOhRo=_yg<0-JLghw>B=wKMBOc?xG;?kRP~c^NS! zid^X*{8dwA48szcBS3bZrEXkf0F)RC#veJ z$^;TXRvnDI>C_xO2uK;lA$oEDA-66IuZA+n(E2R)ioslneUA+G z$ylKKt=pWrS-+#h1Y@musQkjdJqLY1{)+l9#oyDvo6wDH zx$Yqxm(lDC0Y&QVFKoMMrDO}qKsFkvHayyg?swdQq8`dpO36p62o$ zK|$CrkM;=D^naokaEHiiNiUH$bRV1df{AegokTkU4f1}4bcVb_+_<8?7x5kzr2WF< z4C(Ny0%IcjUYzCq1Q{ctd*zRAy90CC1&t&D4Si>f#Bbq3MiPMq>5P&1Uth*ZbW~8z zc$sklJhp+^f}3Uq_9EXzXdTz zUm1tS6BqZR?s@Bs_Xs2pM`DdBCISmx=S;;P$PtHK#Z(g5pr11pzllqkN(2|QbEe{d zej!uQVL>|Mwbz^VhvC96Mb9nR6ohkjJQ&6P?)2W3yx#6*!D|&eR#7KYru~KUVcQNwVH0&J zb5u~y4n22}eef3Q+Plus({VvNYaH_P&?nc?w1x`GnJL7(G1a@9v&Iw>B7$lr9HOfx z>GDOoDUwbl!!zG(mfl5yHNv4dGN@-3uUZ3px(0}Dm=y!D#^N=FJ&nHiP*kYiuE2UH?eM1`Qp?^rCI!byBl=Yxv;rUjfncr~8)aEcs9o(OxevT)HvYG=;N@37-BD z>yGC;_DBN-+46Qj<1G~vCif%fNeTh^1n1FvDh4G5f3H*FC zaPx1M5!^JFV?6yiof^Qv%+G1}%-TC;7JQ?c28g?7#yj|JEM}O(GX)LS{^}yi`kJm} zqVs^lH5#Y;`*8*^80&gI()Ba+LZ5rc9FylG_aBSh+g}RK<@KC|25Y~1u+uX=<=rX= zl!He^jLDt}8df2}(qA6yEU7H_ylUJ*VS2?wdU|8@dJn!HIGFo6HJy2TJa)5u+iWCl zffLCtK-x;yA!u7LdxXIXAc0&VF-7KnYc^Xx^hACPJ%eUPT6Vbt?9ZMmFGWa~0W@%j=xIJ?Cc=Uw7HgtGD!m+mH&| z(t9F}yw%H?YU+~<(PLF9IB3-m8;5V)p|9>xAl9Ak9GLLz##qcuGXe>!engX?svM*= zmKfZFtapUczx7GbZ7*+(D%P0Eo5VFlgkF;-AU+GPoUCC23M8od-gnUHdGldGfh@&@ zty{8iaDXtM&l0Asuu-pvzPqG6k_JTbCwb97$0gl;O8HJogbqWb|4(6H#t3Cn zzof81-hVkaOP&(tH13^H2eL3BgYgmId&}TafGEjvqUoZqp;GOt#yGKXfG|%|<3wu+ zD-gO#`5j&PzT0l(a{b2&1I5Y%LM7*uUH~_LJivUCMuz~&`6SWAMdp(nK7@$*D_Xqv zw@dO!DRLD-VSkmy26?}v2mUH-AUxsEm$ToO9S#veZ*{b3 zV9<`4jrVn0?S;)Iiw*Mr1uGGq_cthTLowD#%+z%c2%7#rPJ||9kWY=fGek_k#-f;+ zOh-(Rjoa~l&7K@aj%ndGQe`k&+>TSgpdDK%$~VZ>G=1TPVgwOH{oA2o4B~-9EtWLi z4sA6A6|X0G{;j``wdLA1jHIe+IFoG#gnvU_j5*THJcs{VRdP>#j3x6R?*u!2xyn8NX_4hWjD$yR(7ys}bwvJJsN zFBV~mFW|2EqM&eurQ(5PY;x_Zaovp_?FN_duZ1Vq01M<|9n3zUa*W%xT&Wc9;1CS- z47zKh+Y9Ng!vZ<~olv-)UYub6&-hNL)y;4iQ1UCe6-v@^8{Y|?!Rh!nAmx|7d!&?8 z@5cK*C$j2+Kr6OZ@AbOc?2Zk+MSE;c^unE=jV-)Zk79ysY>MkYY_@J^fAMztfl|lc z)1fE-FhSudE(Ht9v3*i}`^hc#Nwe-20pGzC-Y1Pgf@;P>Z_c!FBtyzN7TN=WR>r}s zw>LZC`06;A76z1JYn@)h?ugFfbXabW%Qi}MfuvMi;k8Z@7o;<@h#N0=bS=5`jCE$< z5eww}i1`b$2GkL&A%#}{O*-FK!KWn2o%)l3=H|j;kY>++3u>)lnkM<_Q~qW zGsqK(`%6t8A=V}CBZGKkccib6?Vc19)llQUh42JM_K70WzOPNlU?16Gh_}&qyP$5I zsqRA^u;3lp6^!#{9!_vKo`bp%cMc8yPxZZK$=?;-m@BG{yXR8{$#R%1QJ0!R?x){D zr9lx?@m7>5$pI4i7w>B0s|$o646KxUCFATlv0rptFps2(gmsB6hW0mN1|QdT=IaWhi+-`E1wiG5<{0tq7}Wx{u+847NNnmh~RQpQqBBF@L0miES zsRAU>Aw_!D>=hx}!A_V=(UhJw)5u_-j^wpAH2+&Vl274+d88(}x1Q_fv|PQX{PAhG zpo3vYDpX(xw$TG(EE@~P%_d}|0C^&35lr%EePZ0jE+h^ZK$`R%f4!rE{adOZX{wv|q&sbo$dhZ0!VAQw*j3Y6=(3(|%}A@d%wCnBZ1R`ym?x zNRuA5$+k38FFk5a1SZSU28!$4d{a* z8LvxW%Y)VB$BTslq)A6rVTncdc5dv&EN!>v95ADGk}5HZ+JOMj~iWLFAF~Z)Ru&tPOL>TvI;Kp ztj4NE0xSQR+*t1Np}C_4?DcxQ>Dv8WJ0yg`84pd4#r4rEYHZkG{!_n~heDl@`TE_~ zt*g#k92udNIespL`L{MxxTi2lI*`vlxi%0!Ub!E|Gemw( zc#gd90FCu5_vP(iq3?uGQG2Yt(N>sBc`Hu;HA5~F|OZ&0;*`ja;kisud9$|EKDAyw!9naYEYyo<3 zaQD*^gh2PcFYXbS8B1<#qRij|$^0Q6m8`!gXmQ*(D>1~4{`5YQ2y8I-PZRdcafLCa zut)UgazSZ4O$gA~ayN+wk`eX#B;D}~y5p-4frWaF9&{#K4;ZxlI3Xe{Rie6Ro#KPV z4YfqkyP$3yt~04C;GpjxK2Oq@L9p>m_q{kb!vw4NL^qaw^XRWkQEJ`h3FKgk@i$is3?&ni*jgixq4T|d(-M@*14c08@9WR9S& zZMJZr=pV^+fx+&$W=}7>rM8R#jk)NdsiV5%G5qxqY<5Us7S56$GcWw&yGcfy94HtW zdWc|})uD3izmg8UbN_zYWDpoScYlxwLXB4+4b2+$sGvfZe#O?%v}7#fPU9}u(AFfH zW55~u9?v5EfRCG`F>ss8(T9W{{mV{= z(lW5}VytSc2nW`l^=SxlxWB06(*Ol-S&aq3NhOVmsKj5@T{kqbQLe=0dEQcO228)3 z?&yJa+Wz$NCxupZMr5edkND!B%aE#2#Fv5tML#BpenS`EoepQ0nG!*?aVsSkL|b4% z*_c>Z>-DQNHz;qQ6z zMjO1r;rjck##xFLOLYr&J>&?Wz{!uz#1F@HH=jR^cSp`)HUfg5Kf@#7h1%RcO7PaP zaYZnNA!UmLNO1I51U|=6Dy~N3D4$7k!~{$K(yjIFZ9@+MpW0*&WINEoFe+Q8adX}5 zPcrprJafwk9~vqFbl1GTU+;ChG?9P=ehA?132UxhE(-M5^mfI;{jnJG#;w3f#8cSd z>({{35WhKZS9mOIAZ;z0`}1N&b90zLDnDe1wAKHy=m_I9OhdZAA2_;Eo&g0{KY!F7 z_;S}ULidlt9Go$(Vb+pzyfH*D^tXY6-;V>CI}f8K=aL*j!PEC~ZFuGm&pGcqX!FsB zkD|kkrO3I-HVy`Qz8du}mIv=aw?eyV2{aJ&eV6*lBCPr?w0udyO{C}|9MQ>jDYkHb z`};rnwV$~EfvdmNQswiK%6$A3T54HfLD`S8)o)$qh@LnX`YjY?C-Ekcr1)le-pC!b znk0b-l71wkO4fg*7AF{w_qul7ncG;YjR_Z|{i86kkHf+QW4t|=tt?A04J-t>i!gCp zb6|O}(CqJc%c`Vi7vt2%{ekh$#e3VyHD^_kiZ;;;HrH#?6I<&hTczWD z?txnP5Z>uEZPkNChnpq=WRf}8n*J4dAZc<{?onBHUAUO4YPzZc5H$T9n>z0IhxP4} zE@q|$gJ5c0ea{;391~^3rr6A8UaHWwVakH_w9vacv!ss37devr%E)T8LKMfmsxaXHB><(rv1N z#+-YW*(DHR$cV$;--sb-OvD>g7$$gd_nq+&6M{5FlwmoZao>{>&gVbl$l&U4d|^wL z4yRJC)4c{Kw{5FzeC0tw*SF>Lm#y!XW>LtNO}HTKuOKoX54(LlKr6I@utI~n@9fgw z2cDylvooNAuz&Pq_>^pcqV%B}Va(C`Z)y}edSU}M(O%!u=6G8}F|vN-=R#}Hjsk;r z)UutnwXeIn58&m7L>!eZQM>qq?X9>8~qj!(xRze{-X#qSos`t_i}I&=h~Rk%;-l_xO`7&AVz z)eFoiJZaIqqWfzv$`hF28Aj}(KKpNIsnP0H+JW&r?QF#c;FFk-wFF^VV0Gp`IGFoY zxLh}IFWpvP^c1sk`OI6M*+@@l2gQv^!r3bJvB5hG z+7;eZmrd_!pD5m?x1LWye%l!I&gZV+gTG&O!$Dx(*WNJ{WvR#$jX`T12o-XxxmM%~Wg^S{McgS86j9Cs=F@>2L{; zdh0VJK=iV|@5XxucBxl58q+wu!AV9rqJnFrhW|L*GU~8GNunWq& zzxIp;Oz^bW=w|t&+{&zNqb(p9TISTghLK)mXfN6o1FH6%>SKeqWo+%}v7SXxJzRTi zji}&iSwXhju#30S5^Ap?2hd4Oe`pSytoO1 z-8~`tFuZ{c-hM#=_vV<(+`EX2?nB`tj9Wmw$w{*r$DPEtt0f6MM0LIlcM9KbPc&Ti z*5=D`r|>;Aw>#R;Jko967qthD3%-__I4IYtJrj$P9m|Y%q;i4nHPt@}eb%1QMpS4s z+{6x}#o?=9d>J?1XZr(*Jc%=H7;Tz`E7{)4g+q1D0vVhwE8F889YI2}k_WrBSGEEe zj4hEl6;y2~-5_kZc4Q7r@U+BaKdhUN?r@PHT07DiK*7|HbdIYX?KCd>3wW;<3)&^! zEEbrAgMDhFcjzC5J});{+N%o|R514UA-r$j(j^2#InkD$?(#0~GirDmVGR^~{r5S1 zzV0sHzW%r0wmU-G?!Ucr^v0K9CeqJyfHeLo#fj38ACeKL@n!I`^0X`<(HGu8cXCJ-%6;hGEtJr*ORHYo#X(m0|!%{5OxSlDP88=HMhekRb|z{;XOr zX##mfAeUuqY0VuP+2cI$s5iDOOd#1G8pf8^UblcAfaX6 z>c4-`c`MBU(pcuLL`xT(w{k2XQO5hxjJYMJ$7-wJuDA5SPG8m`U3wMomt_D+{MXn# z?-#byy+}-=Eq43%#t7m0j5kkA3n?rlAdg>*=*i=~r<~{(sUg%-L+27MobEY?1PT|9D#+<^vXphKXp0)k``Y>D@ zH@qIBJn2`-_EYeX!7n-ww9gx%fc&)Fu4d&Rr|MqC1?$X8zP)c93rj5muCkI>QNh?h zo9F473RS>2;UkT8h0|0WhX!{)cNXVPxxV#DW_gTfAZK&#A;HzZ3@yR+6W!?4UWBGi ztos_VDN}Vgi$DT@e<&^i?FM+cRb%1#Y-M+dVCv_t<4iRT8}pR2xdIbx?UsR}-r=0A zm?CRiMu-jx{6}8m`u?~+y7Zjd(TDAO!7Z`_@m z%v{5r$y&)`UW9dz3)WB5EB5tqal5--->k=THdHaWIbS#I`9`^F`mu&TH1dE{|73<# zO2A^QZJuUEswh1;_-CT?+lJ~@Vg72URV6ytVZk{w_lu8Rg^?JrRp$N>5?nJ;q4*H9 z1JAZqi3(LzFwV^N{kgB!&%65(g>tLR^#LN7X1q7P>rS}e=W3~G!!Cjg*8e>1G3X!+ zC6(V}%%zrS#;WmY>@)cDr10loZsC`Z!pDac!RVw~GRoO)o!3AQq%K)C?gmb}WPrBM zvmC(RuY2jYjc=D9ngjR;TgJvSjJY>pqgWv4m%L~nEYGK1_!611GG`9M5fC&jI&?vx zaC8-Q*kXa4e`J{=*$mQ?Fy>KP;?H}02ib! zT^<~NsMzJ=B>BpLMhg!{Z`D{-1GMVDu^NAhd8V%5|hgEVR{ zxU8h6_F6Cy`v+dPo~bB=UJS*6@$Zr|@?vv#>c(gV47~hY$GBD2!g(+34V_SxO$MdsHe$8gS5Z+i+<_qgn#hVYuuBWsa~iH$e`?3O}5c! zc=uLt=azBpXSCE5Dwz7=M&uiRNEvJT?nl&tf~TK#X?eP!ovOiTqB%8(^%A43OU6@$ zPJ8v1h&_(B1QO#NyIgnz0m$Izep5}rvf6tFJ)1V}?%q=fp8=%!1JC)Uq;M}%FWw=;xa?z3L}Z4aU8_66AYyu=Y<;#8|s4Ero#?L&E};TWIjLYPn5ecz*hF zS_V2;TeW;chp-+<%Plnc`m2VRRgAX~a93>1_7*UW5g*L0nhut-m$PTFu(f(VeiQIc zKBjd!&*zbV&i&IuF>C3v-oX|1(cU~X0-|aS6PllS_Z|FatZRxGmtMwKu zP)tP97aGp#t?2fe&l~_%IR~@NBw#S-Yl{gD9CtU;#Te=`N|A4|!Jk`x%m2l4yL{Ii z#}3Hq-LNm6r*4AXkjvZS)#}i=o6W@R^Id+e zmZzzKK$}TM^c14oC9BH_AYkybaHCpZW0!K_s6Aq4JhE0v~JpRzFT>Z zwGD9eygpXLdCFfim1KX0wyeaT@Nz&UbS_P{4sD&sXUz-JjB3FF(rQ*03i&gW`wpP{+|3ha1|T+8k?&2@BP)^7XeJw|Ve>YcCH4ZBczq9#;u=6Rgs>V0#&yn1}?Jp7UJ-0LyjONCOwwcJ*VyuJ=^!mwb0 zBcF>>->r{3%G)%HHZ>i-c3@qlOr@*9g835`#rDjfyl++?n0|3c)s^dG4KVy!kR36c zbZ-r0HFRKDZ8Dn(r24&iQuP-shwP7Ii~9qWnH`rvkc{%_ofTn>DmqEs`}a$8GOE1lGZLwU+yX*G32a~*L>3jDm2UU z#^Af#oNu>R!}M+i$7OS^VK2I%uTf2ng$ZOZ4C1^*Gf5m_3b$fIaY;L&%wr5hP)(V|_C$-# zp;*@)9HA=q_7tq z(YP7V4TDFwXN`r)Wy~Of3d(Ua@IS6^1`$M1jhli0VRbXm0YNk#J*+9lvbcl7(L)Lr zq_r5c8)U)PiX~VBVxzl_L4s`DYJ)FBTPWB2J;SF(hC?I$;d{*B3B` z2qefRjKTl1zA@;Cpc;>H*PHc+A;ML3S~$kl;6Re^;L5m5d==`_a9niCT&tjgBHt|W zC~k*Ku0w*>tiIJt`BqiWu@!=WV0>=c?Gawn zl{IcPOGjyrUL|YcKqUqVvhfZdzufI=5EZ7A5q=Ws-Y{{y!#Oi z?>9~vJ}Mq)#-o4s+1=?qo!p>z;x{!HfjZz6qW#6#?)mM@5aoa%ni@#Wfp(iQnp`nX zkP<3BkaS3pO?AKgGIULaa{%O@BZ#Q^SS< z&y&`n1|(49WvZ&y{Fi~Pm9x_{#@_?Z4gx92Q)8mjrd3Bs{hXYz!f7ia&bGV?t^8i6K>+kyS2HW6Me;t44 zBZ4Zw#z-B<$2)rD?N;>lzpN5>_CO$(wL!N^lLdrzY_P)tt*pMz+x7QnIX3F(s|NzH zc#iPUyrav97PrgOYS`$cGv8h92A7(J22X}d%A$FImqMBg?C_5ux8TqEbL~v z8rJBcp6ifSVL>{c_wGgZzSeYIIPaYX263&hwabBpS>(trowb6|7;z+VK|7xP4nJ42 z^@X$FQB2T{C!E4h!z@nWgi{O>WWQEU0<SZq=6*g!YPMrBPo92N_~=ou z7OMUfvHxY{(O5tpe$qPMKWM2d!IkB+hPxFD^o`E|a_~0*&2o?nZ4Tiv7{g8V$rWxG)+(W?1c3#5>bM*ZCr>*mQ*>NT z-~d@vYfiS)Yft$6qSkCe2Y=PCq+8(O7dM}xe#K4!lBn5^p&2=U>k*&z<|va-$s&Wd znpTQ@jYx{C-Maq14{P9pv$~*-a1J9j>zR-HFqRQonlIvqSVUHbuZC*VZ~rCTF-+Hr zHH*X9yXvSaUx5m~YC3+f2k>q4yl;1O<-c%#*1YI6b5KCRR-M6pwkR^-L(RISJBuj* z!BX9e@maD+krTBhxMmS$nBb~z2l`xt4SZ`rG>fI!$5(4?LVjAbY|XySBnik#nhc`h zs+tthuU5$4x}oQ;Y6OLI+RZZ7f*YEtqsN)!NYI})n}%PlZx-9#se21nu2`)lRnu5X zJaCQb@{QZpzlbhXB=C#sQhX(4<6fwkE)#g*s^$OMewW|&FQU>R{AT@b>k0s4rpP71CbQIBc{P>*150I} zPuC?mq2?2%T;ve8o*kR4%@Gbvm76~zOw$*dSyyw@DTlb=u2gP2?%5gLS`Cuns^Wl~ zGDim7#@^twPl0$NfdqaL-3gx$tLE$q=}yG~w}|e|Oe0Lf`weC5q>-x{~C zGA8FkfRVEE@$6HxI-guXMl;K^?#9F`dWFfoKLbxrM;qy>d$Fjs=8_UbCm@5rvRkOO z(zHS~*$d+guT8YO9#f@A;X@W>m(VB+vQ>P%Su?EnmjvjLL&tcFNMsX zDKdP~h0uT0+)bpGaNL}M9{C>}T}xlQex@TgY7+-4jQES215_z}x9@_sLv z+e~7DtCHIczpI(sjG%#^lH1h2K%$YWvS4mA1qr66@lKEUd~oku206~E<6WSFud_XO9S;rm^nsuwT+`sPaCzs$+eG1XHE5cGM`#g-xsW_)FvRZ<19^Vgvb% ztW0?bVBO`IJEC+3kVDCu8srGq#nwDU87bu2*eXMAJyTl-4IllW90OAOp>IPg^(}b6 zy#;zU^Kj*JG3FgKm?!fP%op@JkF18Qd9AsYAEJZ5vOApWxL}23-RZa|b5RGPyh4%Y ztgV`?m$ToSIKZLtiJnHRX}Hh7kf#y&kU_aAIMoB;>dJad@}An4>#T{k9;~=7Wb0z> zrJPAkX?j=_aZ9o0oA0UY0UK5_nY*$wyBK$GjW*G*ADSC&I=zrzXXw!VL?1aW{kY*= z$VZOgVE@m;HO!Yw_wMmEdDGo?xpDO&GAPxH!3{5GTMzu$2|x+J;z0t^I|Jg%?7?QRf@PgvHZ{nTD&aMMUav~M!=7O7KDM&EYVv_b4jnr!x7#A$o(0F!$S(aKxnNL^6S!#f0mUKhgp*bFD5h$bf zYAiV*SSpvFb{)`*7Gz1SH`^I9Fd>kYRgllB#Y!Zwl*1-Mgz$nu7|S@M!hrEFR7 zQtl_Tt_-IV^KK|qj!V2~PRpmu)AFi6EKCp3Vg(yKCuyy$%H8Ca!-Ux>IfBHew4z;o zxLF^LGIFvOTHk{-Lk4vv4oOgN%g3eHu~swPgLaP!%E}}@P`;+Jd#V|Un})T_#Y|U4 z1XX1_GD?+o4xf9h8TZ+Q87^q2hMzC5ViLuNUj!3$mBVv`mhU?qnbpdHKrA)5`rp$; zK@Z2cvztG-w48TJr1;>9qJpwg(CX{5okSMhjYnchVhup1>Qn%NsFKFx4d5TSHlXEs4YMM4gpej z>?t7#ABx+t1_+``DkEkp^ej9*PS~9f^Wt#b8GtMf5H0RNgN=HQr~N6N6TmytnZz`0CFe+ouQR5-&wF? z&5REjl&z-M4Lv|XZ$cs%t+(B-BTb=JZM!|7mfLRkKe(o})FOBZveb5a91Yr2HjDj_ zZgz)-Qd(AOvp4|urYB7EaFY{9WLBxsV$2E$-|mlu3%`bW}nWm!vZ~}Vzr~!b}ZL^V2IYc#cULHJkV6?TOu@v z4&d={srr^2Cg?^dhCs@&=gUqE5kL@Cib6XX`?8ZqkGv=1{gxebO`{s7AeFuk3;9$MxyG@Hu6@q6!C+N>)!uhZjk>8m*PT zHh0EIV=|fFK(6i2Zl#+x=#}TA!%M=X5@7{pypl9x;vyx;ed4 zZhv#WZu*>oT#i)Hs}BgGIgc2W$yf1+;_8sxi2l$tdp)gEWkgFj=q(z|_O`KcuM%$Q zbwc5C$_BFm6v!z_G~sUGG6Xkk5)B_;y+7S`G2UgWi-KATd5;^?lY|NQ^qu5anPXs2scz1eN^(>oW_JxOtlc(cCZHVmq{p!Hun7 z-o<5ezbRB`G8#!M9|z8*Y$P2+1l8#NhVmi#9D2LCx$ei&;$|z{b=mz58$QH{Mv6)^ ziXE4Y6yunntEBqA-L9$XX?Bh0pBvYQh9ht@m_RP2NYK=pwq;YWNN^Gd$nqq->d4kk zY%k}}F5E@x&W@5L52Uh`a9RiZ9D9r5qi2+@wTukf=0w5s{zi20SFT^nv=EkTT6bda zuYY-3-NL<}jQJTNF;Udyu3Dd)0 z2yI(W@ZN(pLk4dpYK!q+Z*dbRkJ<{}B$5XPYbApd`#6Z(tTDtr^emQ$%JJ^w?r>V1 zoCO@Q!AZHi!*X%mxMCHmsa|_aM(Zv(x#ZZo!UhTrD|sHJf#Zku-VZOWtJ`T*fdqca zLQ>(^=~xUiYvy(uy&eecej3IkjNM|{79(|X^=s&Bdg!Lp8%d+iCFjh&DGoGvAKHM1+sti-D5fcJn%puW z_gwwb)xC!9WiAhNiCEg&8`IVz)?+?p!~p{cB2LXs5G1w`v6h7tl7`cWiPTqm9j@s9 z*e6|$+2N|2DbK6ZqK}TmKZN)FWb|QcdP4a?*VHN(aFSx@uz*CO!ZOxYFF=o@m3UdJ zk7fv>gM+^ajx+qV<&-tcHlH|9!T1mOWSC*x<$M+t3vG{^<*8ZRF89KK&h-qa*Sksq zvWPH0C(DTh2;SYcE>7m_zg-BnxM1yj*kSy1_e#cW;N8wJTAgL!nWP`-!P=4<=Hb43Cbj78cr zqic66wSPhRcDa?8gIJS>^Y!hcLjtkGk&!?t9k(v@=M(Qi!8baiDZMq$EZj;8&uB?p zu=ce)UNU+0@lE%usBsfW}$t`ubxv# zTYbn3(h4$&iv_bsye($NWAJ@Y0j&o|POLi-nbizeToxZf_$xDOBm8^_H~B&LG7+1;Ip?X@bFN6PR_iP)H(BfG97#h=}*m&IJljb{pqloU@`= zRHmGM`77f(h!~I$bE|=@2b;kNf__&>(BOCqA9Vlk!-^bmgYYR2+3K{khn(7{DSQZ# z@{lPZ?&~27$--$sq?CtDi*#=fSxhRy1cIeJWJ)l&CqAgG99K6hyHPWM&B(5Xo$2ep?SzodE>#x96hcWldWq7I$V% z>&+cCDIO5YPv6^xQY_6{ELcpSo&$t2kD5R;p{><+&JhX_#cpiA(MFtFbz@8LfKYa0 z^Ba2zV~cQrFm_|}8+rg^(|=i6Xr#`z35n870;-iGo6T6Xn0Shd`mhSxeUn$|J{(dFb>F!eqZ;!s5Ae;dNnK00s1Jy`jw7Uylf(upZ4|JUagqdJovZ2uR*6$UK z0R%D6AG^J1W+w~qYR?}bIs`DsScm2vO^#GLcv=mKyqnF^dmX8Ej1^}Afy^s-t*QO; z_%V_IL;Ubm!~Krp`&F&b2c%a%wM z$y%~EHx@_|fmr6%OW2wc^w(a!L`gs#^Mo3<6wX4mC)5}R2qWH3(!$P{?fkPl9IqCO z<8skY2#X<~p@s>6QK>k-lyDsth?d<&%ZcWN616sK4KyH9 z*8h!d8Mka|`9Bj8h?Vt!@zyTr|FR??PS*d$TM7qLE&rF}0AVJWoS&1w@RU1Blpq4J zCYYSx+Jl%}gapKyU~+y-4`FgT2MCi5U&o#fHXS22S1WwAF@a#&C1IjD#p-G;3G*x< z(1cMG^i*hfwF1|KJThXKVtBp@Kb+wun4q7g7@ptU!x&zK1q7O6cz#n4Vt6_Uh?C9Q zF%#xH7E0gL%G#wFK#**bKGICsC$*CFNdgcfyIsOs@i&ioxoWNLk_0?N5O;c{*RA&5 z>wi;yWtZjx;j*bnrl4?vuZ)^nSvw042sL57s%R-3LG{O zHWj+%OZ1M$0m4j}Uv|me?)vjfhz}tq#AMpW?B#Y+M`sr20ih;j1hmF3xs#d}3ryw< z=4}#({Z&85rf(8=Od!~Vb&uX0G{xO_{dG^83xu1nTNf^SA{nasyLCw_5N*QhCu~ny z(bZr5L}@^z36pNvRya%5pLAm^AW$+*b-Q<$F21JY`>WH{@|xZ-W~FlU@AA@PbDFAc zuYDRhcq7KoYUCL}kYvxKn%Oq=qzqlpA`42*JyS@Skp%?$qtrIO5NP7X4gb!X@tG@{ zfe(cIwuq3y#R%Nd|Mf$P8!&_5$zwFKcgHao+$3#2Ml-uBJ#f%ZhPP4rG}8R)b8~oG zLV_M2LfCyD^Ltc(em)%6KS*~`-S?>sAc(y;ZW>mRx+3o`?&gceUL z|7ykRy`eIIAjx&C7#pG)cj$j{@~>StuVd$qj|c|{W1m*v9d_sa;_V&kXdiVi4a*pz z`m`El0fFpeWwX9rpCC>9AEMN``dCr$A%uOb>~3z3%^*ehUqX!PV?|{ELG0$WJ6zKp z?hkEVQ5F#BxjCR|$Gf}3@w}&d&4(i>ADX+x@jYFHD|+cKYX>n|HV`nmUKQRg(&Tpc zak-Y$j(NR0*U6=+K(yp~)gs#NMs%8ay;@i-q5+YTrG6HX4$bmf2xYD=Ei6<^1Y+6O zMvX*CqaPRBQ zc_WW^mcKwXg$&|}wPxgVI_!L=eh@uSeyy1S2mQpc!AJ``dOmx3KFTT7d~DF{xN_(a zz`wqm9dU{@aahy1723Zo9snevK|N75#lCNiC29EPs;N23*Wn>TVlzG^f@(wN&G;f> z3=|+rV(pR=CA6mUYnMDegh;Gie(Ih?r#F6nX!@M9Se%CGit=k03j+v}Sm&pk(NY%W z*ZDRM5GJt@OE=U8G(p;;{5s#t0sNi#7SUl zqe?o%d=hxRr-*30Cj;>ktADF_UP`0<>VEpozuwm&>DjK_y#nP<}C;LI&}~YE=Jx+}Y$u?B>ShVR?JJQV-c! zqbIu@5m2!9-&SN>4}E`l4FtDeUKby>8Y1{6X1DP$#Dq(^tcF7|F-_Q(N6O4JAW~v> z%eEC(jGN<+asqWEAWq_lW=vY-K!67(X;?-b$I#Au)Uik=R(& zgisI4nl~2j#eaYX^~9dEMx7QH+O^N-J?VRqXW*cph>2ACkpr>jEWrKvGxV7P@B^rP zV!n(39327}2e3S&sa@|}cL3}75W;9ivXO97sM`w~Is`~0I`}vcO?cCQIngm|4EV?( zo>-*4UM)Av!|Qed-#v=DVfC4h+~Q3uZ7!c0pFjj+C3bD}*6986RkI%ogrm}x-?f>} z2SO%xLHk~7bI0wgCu2NLhXmHaKDBja-7U^6XVxqXAV^~L@Mgy1;763aldEd;=rQM` zQpg~l@LT%lmr8=?&>=vgD5!6uJ;Y`j_~na&OcWqW;ykeEk3#n5)y7oCN6{fbevoDgMy-kb z<5cPjE=cDGsrXnc4y`swRb&uPWW4)9Dn8c>LAS>A@%=PDVuO6%)=fp9)oeYA4gnH- zSH1SvTRNg~bXRkvwj9b=-e=(`%NLNox1vP3C;ip z?fjI*B_58cTqLekkwH8kAn?!Wf!}wHJZ4obKu~Z&IzP|4j~6cQ2v6S@kceow+B_S< z2Kjs>A2#5himVn6>(HQ{4-tazF;KXrR|^rM=nxpI9Dtl6Kn- zUD0y4-EHq~=NM_S>>DS2F5ZF}3mW1>)P2-WS-4`J0KwLqt?P-z|z>SZ?V*lI{? z>~={BTKc~}hHR5KGG_dbwGw<2IYHR$BJ1fI>#e+_w7fay&>=wLC|jb5F3wxf;!Z|B=A&%psmMqI z;v^#QWJ_)LEIxb;&PtXKR_#0>RAP0MXiQ6+m0ukh2tbU)%}lbD!=bTP0GGd+X(Abj z_bML#SX)dwzyG^<{4<*tL{4NvdE0KwZP@0nzf+uq26dz3=F~5m9 z%VqP}urD)(BpN=1NL***23S;x*pk_NolO~8I1PxDnsL%1MVHMLW}FF3AXs9PH`!O( z(z*O5uZaRg`NPEO($mbO<@3KSzp9){2O_>HA!2d~{r^0mumLfMomvG+RVFqPDy)K% z*dU);g+?1twiC+N9(bdR>8^)|2U((eM8dN5bCt*+DcF)oU z7v)ubV=4^_)`?pNV-3Wv_v1Zbom~yL^G&4z$@2Z--JYjat`)pxu$LnO3f76eO}&92 zb6)V4!2}}sCPL-z>vm(YzjX>XvSPtJd*xy_n=CrycpaYv^Kw{5#J@Mrfki}%5rVXd zt1}GJp7;Cig2&~?730Xor}g&#GI9n~AYo$76G)hR_0L)=Fh`yM80@F?4{IdW?c6ih z>>mRaNSIj8vHocjPw%Pj3m&6iAuNJan{{bAt((&Lkj3T$gSL*t%2FIZv}SMaDG5V| z9EqSZ)h8zkIE4h(lUVnZpv49E#PP8nc*f^e$qk1GtZE>|b0nzd?9 zsV@UOko;fb_W8CseQcUxQ$M)K$r}3;0!==aJGwPQ5KXLAyw5hfkM70!-Px^|6{X$k9W7X&FQdS30ttfzA&5g2n)(~O;bSpFq-DT7TQ#b*ZSFE(9yjwu5xc7 zbX~zf;=prg(-2&?cP3t%_6Q8xiNolw@KI>Ht!ioiMDR8rMz{Nq1Tu(UB?hGbIh8&N z#*KAOp3m4pf@&f}4s^U()1^|hL~cGcD|!N4&^G5?=hOD#AwuFd$v}kf&pVH}H6b>^ z`T1Skfr4%#un*|=xqeyWYh8`pgYke1(o=NoN)V*eyMT^6P|!`pae;)1z8X|}$7GU0IH|u62!|U=3Fcs23b=|!P z+6PnX?Pk4|Uf};I=LJ+Oa7^^O{I05_(xAXF(c$v5Hms4uznT_%EO1OL{Dzx)G37tP z(BnSUyzn!R`8X~}CyGvnkHvLK8u9W)Woc}Xe-vM)@bg$V{!y}}aa?t>wugQ*TW0|r zC?3WWoNN!%416=t>B9nXh`hQwj*hP#YN&3DD#U!sr*#7b1d^w}r`tNz9e4^qq* zP1;52cA;Y6pq~f^Jo;f4&>RfRB`tR=>{Pp?EZ1*!svRV>nn+y03S<&7NCcV_7gKfX zz40fC=@L815!%5XR{5Re6f*SvS$xh7PJaiX_f7F-jE)Jii3M)(;SdpXV=lkIjpKrJ zV&)7!4#RQt%xMnCBcPz0STF8=Xb$j-1m}vO#4K-KFPcZ5h6thwr^Y|Sz4(G@d8ejA zf@)$ThJQzSIQL5MZo7CZOE$`H#6)31Igyy>-yW9Rciz@!`NX^e2%3q-nfPk=Q3gQe z7iR$+C?@s}y7Uf)lzsYAousj2}P#HVTc*feqn=^~nLQ9(H2XI&f&n+SsO@_sge1I5HfLc1DT?V7`Cu--@^ ziFqTz9KxirK|T>7C=GP0J094Uj}W4;pqyAav~M)PCe-6MBKB|?hf812N8sM>0q9W6+qBT%opz9DLtFeK9f8cg}RU|KVPJ= zK|Wy|S_7o7V6|>G4)au(LI!a^^0_&0S8mCBy!xX5w?W~n&GLNo64%yII5w;8n~#4R z1qEMU(eY3Bw4JtmN1JQ69%pMpa%_4UX8{b}{vvK{+!r|vCakNDvCV0OJ47(`cm2jz z!Sq>w@J^gnbi3Hc#hO+m>(%o>N44{2I- zNZ?UBz>VL$XCZvrKB=zsc7*S1<1|!b; z>f4A@Ksqt<{LRr3$(N`PtJP(eH9Q$xpC*TojsBRW;a1(ptH-ZiJ^sbjlXj`LBqw{tj$`fU zA{6&$g17bk?{-oDc6nT{j)7HAfCh8EA!7La^uCd_tts$((r$6V*`n?39r9Zj*R}!; z<`!+U&o8QN9~YeeA&ZT;h4gEZ<#BO3({{BmX6s2Tt5x_|;PzW-Zr5wd#=1l7^P+`` z>=+vO{f}vWG*R3x9Ewn$HQbs=Zv+E79uK<4;I(>f|JWRMUE0M(i# z*m3;)tCyc+Y;T(FyVHB2y?<#81@q(-Ah6=|YR~HB%deh2{u;zq^bGl_p;X=WNK-8x zauXb_yT}HPIao0M&A<{rm!AfUvOg`SNCgSJ_>|vka<|(w%k7ohW?SqJyA|C-LGx#C zl-ffK*8GJ*ohEE>SFE7_z9)MzE6Bluv0?@C)0$SGAb}UpV@WHZTS(5EQ)ma2w{$-g z!^)b!x7$GueLjE9jxWa_=-?mD@lU>d{0d`^bWInI`gg&Uo8xsXa0_Pu{`;ykfC2!ZrH&souBODn1521BRhM_90xW;+<^4rh98b*z7l-6{k zfm{R){CE{zZS!Un{Iix;M>OyYGX-6*FTQz2cKQ1G%VDXZ z_kX#(Odc1Ue=i(EttEt<)vn=+w!W=qwFx5yNMhIi*mInIeeI99;H>yqT7tfzITh1a z?fEqZ2Zmu>@@#v)1v@&HbH0^{nsRG-1qiHo1y|?4_>a>|IBSADZ>DL?p6mIy{+e%* zg>2Vb%FnJ(3+0H5wdQjgRSyt4P4{%w2$U8u4;JOWD3+QDV8AGxALUO^^t|+3?u+XrJ2cwQ9;Nw^yBo1!I1RpJ%yKoQCx!n+dj?gTIFa7{1(fTu=hQ zLxLy4>g5k#Q_j)-zy5I68`^%I;7P1k;pKZ{1`$XV=BnGq?4<_fa@7W4unyO{?Z>?z z+|rKOf~v5#b1y$OYFvW@!>}T+WtbZ-+}6w0KboLtGRH7^0Oo)O^RRmBD|*7T`J7H6 z9ERdYCDm50dMl0xj^WJsHQ!U$x5>-Rj1e%f3#(zo2a4{>)kJAX;1!PdufKiq?A7xp z={0e=+*TA048whB@0090soXxa1sS}vn$=^VYMLG4z%a~Fd-B!XhgPA$Ec7>D|NQZ* z{BSPkZ{m31sQ4R?qcW%q`Wqb#?824s*XLW>uUSn9qspy>ZP?(hjGUf(9~bC(n}Q=J z1_y?UPm-Tp(kB^^!8@zj(Mj;Aqnc(%I51Rvl9aEiPtu^kEUX)aRZj^$%hg?4(dY9= z6v$2Ca{Pe~{^3gfoAv6$rkS`lEVs@z!$X2_KZiBZySDDajo`#qx&53ZB$$SCTlkr~ zrbTS!l$+ZkU|<(U2jK_%);8q%v2xKt91k4B+6m>G!|t@Bb&1eox!Q>YAXxshAoIdL zn&Q^1Z;a&E{}Tw@OA5Fb?%Xaa1qeWju*&<@vs^iFxw?2A3*5rIF8_Tt*eRFS&BB6l zTAO3s!MneXHb*RQ3o}@++b#SFp?SFsmI)fn!%Ch0^I`VVPH&W})QO>iUl={gFO(Ho zxvDD_3e3VCvi|2&yllB0G9&nG_Hb@|cwLM=z`;KB1#h1H@lf=kCkD&;0v!w7!YV2L zd&OSMRY@s8U=>DK?(EF#H;-R@gS?7zbv~YU-AU@$r3jOGKqUUc)kKkY!TEjb4OJxt>R3RWFuJsAX15nH z@#*q?Lku7We~C})75k2!^`yb%E=f~>ApatW_GN$c2cQ>SYsbbc>NGP$JAJ^=ehg=<^^bKEe6~O-A`r@Ia#~wq zA5}NGI1LDtGr7KnzO%-=1SraIoq8FQ%aORRFq*kl8$U5&Kq4*7v+X;20DWpOFewqR z+^-|IBRThKCjde8`6k~^7y?Ynb>3GDIroRza+5N=iGR{E_nrc<89z)lGxF)Vmd}ur z_Rmc0)7UVeu&$WVcM0b8_~H*n5$A2ako`pFy)f~PfP%0dDE1Z~8~>U|owPe)VxB|4 zmk65jFDC-fA%Z@&^}W#E^VvQ;yB*5sAN4IP+@Udf{-nGEH4uOxVSbI-zt&D`$YN@q zbdn^EOTgft}Z3JV#(B_b1&mE{T<4ZvWnXw$JC zDhR4-Q$Yf+FooI*)${6#w?l5_Qm8RB@Cye|`$f(V^7&)Ztew1G(gZz|Io#g^Fb6c4 zhh-UFagUy(ELWBhg#*Jdh3b8xWGc(0P<1SD3!{ghy9d%~p3;17V$v!!^-e&C2w}vQ zY9ySl3Po&rP!Q%ZWwTi!H08k;{r|^D;yRQDRU}Ly90PWb=j4I1Z8BPOB1EupdYgV3;xYmDK56|dHSl+f7EzFJV!_x$nK(#8$D-)PCGF9rl& z2}^g|(xL;4TY8HCCW%>h*dP~liqE$F{b@gOrtD4Yf>$9FkG z7Z36h6HeP@7moCJVoWo17KU*XFCM%w92hsh@=Bv712N9-LNQ-XcPt>|?27A-;XrqZ zDZ90@*DNUG+%6LR<%Yn8L%`fTIRc}iFt0Ep8#t?I#GZe|Q(G|sO0%ow0y z0OTUEi-v^>ga4&_`1!*5m%p!Og6_JE=TH6R#m}cKFWN@pNl%V}p3-CY{+DuXIw^Ly zQF$}O?)sXvZN(jn7b}}dYf=l576BU3ZMSU(p|N1|$EAB{Kmj9tMcOgyF4h->COILC zdir+}EPeHiu00TBiuYBE0L|#R%vPrMibp|ZQmkvyO9x@#^8D*(Z+^Qjmkz?n<#+0H z`JKU964p!3?%7Yhv_*021qgJL@W0Qu$L4Sn$|>%DdknBi_`UnhOBMqb`vM8S_tnd< zf9hUv6PhXR_XZT`Cc`M$AgIEqMFAsyJ=?1K#j~f+zkLyCY0`4T(q{|@tn>hfvGRk8 zNzt>Nl!F1MtfqqAtE4H>e~I~`y+leFc=7q7gMfw-ezCthNU$mH7Xbo3iP473f&`)B zqisL|ql9m~U!KNd(qcz05heTE@5Q5J2LO#E`lwAq_yfIo9}OsAl<1@TB@!%s)FOaM z!V4D2Az10OXGksm<1Mghe|(!7NclLt>6dXsEB# z6K=4$Uj_&?lo(;ZcvgF5+#-NUVotxl-CR9D^sMKATRUvF?y@U-KjQl8!i!Qpqv?~n z=)9pPq&rHV=mL+UdoJ+mc6nOK2cV0GKpg}OD&evVWacdHNUVVL3YWH-TUT*={r2kO zD|sWQi>~MsQS`-4NYB!@edfxDkF@E3@tkVHtikDmnbm~X?$}&7znXB59iJip$@eab z&-()koKa$=^}HS;*Q(c$G5fxFo-?Z_B;0uS6_1htg5Jwo)sS7{w2E8RfHH|!{V3P* z5>aj!0L4Q`#n&{E2r?_~AE9)tcg5m~N z+*1Gq)|K@XLmrCLD()!;6!6N<(-+QpW%V@Vf~x9iKr!p-!g;5xw|cPbQ?>_(>`>Jn z98l1MS-#xhZv5mu|{i(N!RyfARb) zd8%QGdiqA9Wi>QRjezkL4n<5#~}bY;aNmuR?Q8kK0DS!oF{&{IdCq!+F$rW`Ds z#?DYk(KqN;Z9-*J_UDbHS`26^Wmln!D%h3Ojhb5M<#J1+S3mbos!fSJjrtjIpd&RO z)Hmi99<@8H#Q>R9hkgCTFJh?BVI2tQsJjWhZYVPS+^c?>GMyN^t49GLbvvPN>eb`# zL|;uw{~Fmi2vA9N6;-4^e=5jS=&B9`bkr%W7fX-frqpX2^)mv2mYU)0TkDp?4=}&+ zCq*$OT}e`6;^DE$#b!D6q?1N6bmW(s>(oWNpm^~aFK=(5x+;uKIq#{9ETN}iR^q01 ziPJh*aL>k z^w8{Fi{a3qt=63}9r>3}O*z!cnz5+bL4j7zm3>YXagT)!RCHw>7^tbK2PW#1=TGG^ zttl}yYsaFp77N7G0E{*Gdo_4kH7YAq7#0qk&v*hy;a*6^Dp8C&#Zd zL|XmqNJ4uPS|Tt|QT`pwH%G8bI2qkA-v%jvWG zIghV+P+U=;AuuTCY|~XXiixG7ZMIk-mh+Ibu>Wo5A^-O8{N&eu;{L}qTG3T{@L-*D zmF}~Py2=p{6b*{~U8dN}>64>^tU;f@due_4fS{-*Fxc!!JrM4{7+wsU>pKTL5X`wu zr9i);%k&Pq=KN1^+O?wp5mn!6Dw}ny`*F;Z8y^0g+q*t2IytvOaNo&;x)oOl9T=$P zk{#`@W2&r}>Mgqrx2DgvNx*?# zPJjLHfA>=Q8}L9dH(0_8(JBrWdG)QjqrtmYPq1CrTNJXC9`u(>tWm~35 zb6I9mF)1+uf@03igjvsuZbs&tb77a;wh>)hG3;uwptD@J>ibC*yLAKv#ebB^)xUWi zaejvPALdTM0uw}YVZxi&bWQLpxdm1+OaPpnUg(*t((B+rFSky9^ZL!7L^`@+-oZl! z+3c_(vY|F>4x0fG6mv7mo7X>o_Jopm!tGR?i3dCo%R6y>Z)k zI_HX6%e@B+%DEWJQI4>!nDJnUAezet4@7?mJ(}SqHQ3nHebSa`4>^hIaq+%cUT^4) zaN&GwQe}{!`oA08+Q;VYu~{Bg?-#6FxQ8%2H$7LqDmKXHwpHFAX=;<|tvF%yXdsu% z&~-n*deGhST<;5xJP_i&UvXZGZ<-sm`=Az(TM_CvDOF7KxLu4Py_lO|2X?W3uQ*vb zq8t`uDi=;BgQ4 zP%3UQLSb?*<%?ya=eg1RDwOd5lWB7Ca(XVx16A_pX2af&ypm^5ykZvLL&dnw z`9;S0qRITQ-rA^LSABT-JrWOfqITWa7uD_v2&Q)J@|wvD*)GxLsNih0UHA2+wd)mZ z=Bl*&QO4?CxMnNnofsmtYMc#a?F*+{aW<5oV4Mq;dhHH%Fq~|~-M#@2JafDFJ{!4BGj4NnC4k^-tjfF<8DjFOXO#1vW)trXfjA>GnZ)WFQa)bj}cWY zWBi<;KrXAp?lSO)J3gBoFfG9cJ4BnCCA-dj@{mVqZ5sTQJ;&B*kiz1JJtUM%!*(=L z>CfFw#km`B7|po|Ly&y9;{`US^MHp8Y%cqOD$i}5Jk*18Q>?gt81P_=xphuwi(^qZ z=UFi%8v#Mo<{uxd;M=Chu?qV_dK>|vN1KO4ku#@R(L(|bByEFdD1GHDD-NCk4>WUW z4YlxslYOY75A{w{%9F28&6UfNifWoEm(ccYM6VLz7|^16h=ctw7}Hbky_-O&#Q`bx zX4Aeg<)rbHn@x?Byc5Q$E^BKNxLsA~GEw)CA`^611u~+m)Y|c0$!)Fd#VuM5OngRx zo-Se5SzQIJYWJR6f7a_NQm|Zqu%*;ARC3gIl48VhC)sS@QN`oczoTwiZdUJ`+qtS+pA1&)p@0vMl6yWcmU}ljD#|fj zGHx|x2?92X)x2m9@0x3cOhKy=7~rBrGha7H3TEEW?&^{5g7u>r!%fRp?Sw#JrFcI@ zHwC?4-#YO5nzOf;SG(OQrW0#~XE0zN28{mma6Wjo`zT!S3*%g5V)1c^7L=%kkbBD( z1PVqi3;`NYM$PNhaBzQ8Ww~&@ZI1g|mxyXdWZ#Lo7e0R)=UBK%rQFyDd z*nlcI#M%6h4&?igTuZ+q<6QATt9EU7^@K0+cpnxFuLK4(rkMP7bF-u*$ko&CpIG>D zR)#}!tzXQpDkE56#}6U({po!Xtb904Ln-JingJ;I@}0+?Z}UU5Jss&B7@X>}_78+d zvyO_stswgrfdDJTcl0gweXCHirs2|*Wc%R5H$ZzWwT413JGe7C51p%2vV@EtODl3y zv+655B3S#-7cYhk_4OpoS8-yO$&B%>;*jFg&mVvDd>jG7_6?h`wlT{3$j5^s6=xTG z)jDFqu$Z%pV1b=7O#Lq?UoOwrTYI-{D3!Wbk-$vJ$MWA_GVRE>`$IzuGIM++Tp|OQ zqvxgRI6Z5UDchCN*@<6H6YB0&bK|ndv`h59S$&|~ikJaK zkzs#n?=pVA+njIZzJQ_b=stWqK+sIjYmDaY{!DrnPR3AaeJ`RtB&hz=Fh8Jm$QQKj zw|=+%qvkGR58oS?rSt4Tg@*`6Z9l)J_-lQVH^SA`_5ca0yrwuY@Sbn4n@_?jtdrwB z^>%n5X*7v%4(r?H;qIYKLWPG2{QOWt&u^A*H}u5I?JZe`P`BaW`aK4rfCc5>u?@s; zw`;m`D>4WT=Z)_{JAejtC0=26sNZ#GO{lSkg4Iq}(!hQ(LV=p%8xC#0@k-x<=kxHz z_WPA=Ku=O^pK)#lvjGAFdP`8^yJ)p2aSTvWR%5-Eysb1&${I_phE;hqW9p%RmTLU2 zcH~NKsc}}-_wC}{C$`o&r-BwGFrX)8W3%tRSK$Ug!OU*oI%vc-BeqW}X+~gxlCr4k zHS>mTUT{X%G?BroIRpqP6(xt=$EyqN;wd}wJ^JN$@)S*+51XqC?8%6|OqbTX>UKfG zoT0U_CzYTRjl&E?NilljrZG(XDU_F5@ z<_z7cUO4A<7&63Ym1MHbsCcYGjyrKf@{oE_8)a5 zZPPpN={r`XkII_>vZ9=pk!O;OxJFFPs56v~M{=-e3dOPnAdd0dq>2a-}t z8Lr#95U5X5ww*2~R!+8#jVhq9(OB1Wx(_<3iz+TQh&Vwp&vJEMdTx)|DJRQw$ee3U zJ5?M$zgeSO$98t=Ts@ti>XsD$KXLs1y!7D9pV%ZS_`Oyp(F=xnV&|NVCyiswr9Mok zC#sqi=E_XW$5$QKs(`|^1`DP0X?MHaUp?;r`8ge+5pn*Eg;L+5x=L5jz)a-kNt16W zR=U3W-2MNb1uv8t&S`i7Ue}yPDgXi_v0Wh;dGDneHiKudArLU}=bP(hMQ70{@A?DX z2l3Vw_pMG8w5<-!sR_DpdfJsWPZvc{AyZiRN9tg|(n)~5zZ~KpMp^GB=j~XtM%Drx zZ2bV4HS3O1G>3ybJKNS*`itW81vo1dz+6;)c^yQvX`fWr`-(fI2R9f|`xO^NbRQSs z!EDFR!*knVJ)ra>K&A{oonAV6dMzeNmQYr(uGopKwKMEzQMkb9%p%Jv}`T zLzAc5jR_6ZM19rRtzB~q+UMOj2d@U(P}@AYZ+$$_^P`D2Kyg*TSM9&)1gFQ@W3!t5 zjeqNbf~CKOxpqe|&aO(i-7Tm0j%hw7C+hYr*`L2^-mU2mTq3j+J;E&(kXShZ+i=8rkF(@WqkAKM+*Udhn(+!2~J&>JDaF{8bwYwtF# zs@iMOjLg2G5ihK*Dzg?1%=|5TbU@#)uf4LX>09<_(9oj}47~hJ(;dZ|2TA~LNL5!a z`~L{^W_V548>OOMjidO100vdRy5LAemz(vE&4E^n<9~<_HiSa$A&>EMbpg))T0nuC zs7fXe$A15MU@3?h(kc^)F(A<56}g+;yQ}Vq)y>*FMQ1I1jGv+O8V5cv?jw7+dc5De zsrV3PnGBb1ID?{8%)4f>+HKsKOINoR^i~K1GTdvmzoI&s^;b;D4Ww@z*uDy$ERU<@b@Q^V{gnMsL&t-2$Em0_t+2oZh_OeZ70poR(7q8fR-03H3mr zVao$Q>5pNs>d~Z$5@O>8-xf)=> zp@_Hk+6N7OeORjpK_i|BG_G+ndP#tRAYXfh1fOqjc0yN%BQMU9r|@bqKu77e_Jlwi zhstonXgZ0o&!uME@q@l`aPS8beijCOKeJ_!vf5}_$e7P}GL8hx&?)*bc1=bfAqLbE zXVhG~G1aaYgs~X?OkO=5DGmctzMr8>B)&LrS3#P^aMh%<+i~?2ofS9&Sp28#q=*|t zU+tDMZEjpIvGDxRY}yp<@%?(QujE<~FyN_mFlY`>mYa>sCOXqP%h6*vrIjDZjzWL} zO8%-vnTYWKMN`7PxALQD2<}g~-H)(r5av)MPV(9Z4POmk?@mK-BuEso zNzpne_$!Q;uU>Tbp0(~%rdy0FjJ|L%I+yqmpyGFm>khZo;EJtw(khE|iq}49{Ab>@ z7N#bRy}{KKmP&1cS2&Cm(yl?Y4hsJInE!~%&e|(&7aN)a7ds^z zR%CsghXh$a5Nf|v+=$VOCEN&a8R&fb!G#~~Z{S35SlqK*<8J1v>+|z+6So=#3C#TU zP0P&1M0&_-45AIzBr!n8H|tj{%q#EbMC+j7$MO6}PuGWTku10riQ{z`kn-bK{%iEE z;8Y}jRZ&2RS8_R<)_%;>YP`zGa7ko7y3PTDC@)!dL@B~)Cl)o5GA@MD1|A@Q%75X_ z7$`C0x-kYaxw#Wf1KMA;_kXXrz^`qAT*3v)w!y%6HT|z*Ck2caeC)#EXbhpCfDo^j zXbq!liV=EwSo`mu8SW-_raPThj|FmpsoZUM+q+va$p6UJQyF9J8wRi+=e_R!UiC7D zdsXt|*arX+Kg#>|<#()Wgd&PWd0zXV;jhKMJ5UMD%k73PXvJ2t;9^Wo+P0%LFc9-Q zYWQuthL8ysL&<>asEMR{AQ0j;`EEQdk@cc0=JBtszj<@{4Rhc5Fm7K`xysHf<}2iU z6ci|n9~SYHHRdvTN{`PGMIsIz2K;!nv&Zj&V?@6z-_mKQE4j@wLsvG_moU(k?;=`8 zq~3?vQSt3c;WA_ng8FKs?@CW7Qg8_djrj{Ah2_QfR{Y9=mXn&o<>qDd6ls;IDA1L^ zbZvPlKK>Hf;uc$^hqx|^^=nhyZ0^jBKfT>FA0XPx3W4PyY4P=;(9 z+VF|c0j%~3xy#qZ`*ypQb;S>Hu!#`$+Pz_=$0veJEQzj{s~0T$$oydodvoV zh`S*'_|ifrw9?Hd?5E)P&r=120k?dcSDYW0fOS93iXvx;MWA)1ch2+))t#J9W- z?aN!C z<tJgUD`z+tP!@yl? zYmRo>&%3k4T}%GW1P`F^nS|I%B-3=4g(2jd)^8(>4*=o){4d|;(_M^W81M;mEd z;X65lHvBbmoX|JgA>$$&bDY?K0*(30KzW~Dv>wi{t4Z9@Zd}i0YEV4@sLwAT z#Pz}Ln1He$v^dsZ+<~Dd5bw#V8uNX5Uu1UW*U582##B+RUd@LR7cZy^|is+`_L`_PzQ{w;pQ zt-2ZdCxlS5?OlFwyyLM|6Pa!UtpiOah?9PfC5 zW1ar8;JjU*b~hh)hYwd?HRlZDN%xo6J}lVZ5IUdMo2$p0HPxtHx7#qnBmRl4fR}}m zvC9}j95C|B-}x`ej^up<#{Hm)gjyKz@x$zvk8**AF*RwR;^o@?A=MJ_?$s%7E?)ak zhQHqb=!%PXR9t*Dl+@#gG$TkDQbu_aL(9PC zr!!mZ0Qbwh_s!$BtpYQ!QunvCl=(#0=0$p-h?VLvV8yTU+Y=#|bx_8OAw18kV{97e z!5De%u83?-yX~9zhh}-*Dvp4eVIN%5ObAhKBbVARNUHrN9U@mCcFx$WMP}i-P z5xV?%54=ymbL`AX*?u-G30hYe*?$fj$7te9g4U?lxBCYQbc6BLQ_;du?r)035$$V# zK~N1X1uKD;+7NhgHg!Teo@^YuX$(0ygG$j%FhjLE(4q}arg})j7x|-RSnR>s)QW33 ziR0>hbGy8HeC^_1mnoubikO+KWBK|zyx2l*99GJstNw?dQ}*TQ)32Uw8uzq=pkdhR zY+Xu%hSxfHaNpMRc=EnkeTeA8I(}D!I>T$vA~0aYS7Z2Tc&n9l;Lz(Q%WJwcELg?M zrUA|~9pV>bej}n8!%2{~i!7RH#Z?i(lUHI!c)nPFTFd*s4au0f6gx1mQ-)Z#e@~B9 zEzcWi+t!sse^*c3o?5K|0aW-ZYEabeo-Rd~O9t~m?<7dD=o<$CUXwBqP<@S65he>7 z5Ws`aO5i~Y+f&o^jBqzr*PC!RPk7tlz^7)x;W^!z|4C4=j_)jmu4yocYTOUWHk)t3zgyOH=kNPppHDFymq)c;c8PY2rs>RoQ zLjeyZ+6IS64}^Z9P!CA2z%u}S|94k7I=2)FkPY?tIa5$Epb@24zGzM~XI%e$xj9Q` zX(+DgxMV^J0RSS3d491wH0yU;Du@-H)9Sqp;RHhf52cgFUqwP>!=+T#_*2CKH=beZ z4d~0I+grL`yA8qR#-C&i_YPT!g+O4XM54IzUi4e3NOWlYZ-4zKzxEUNKQQ41oV|WR z=W3;4Fdyk)6+O787TnFwv-FT#;SG&Le8qIXIjnD&hdUZV^-WjB0yiZl>t>#om(Y)) zo~Je1oPK!wprLq~?q|liz_abS zn;pFu*1h-Y7o-d-kSHJ|Viyn^qaC3q>r8kgEv-&2Aj|2A0f7+Ta~imJ{-xbcdE?%| zlSv|Le3#x+2{Ay)@3hsDV!OqM=I-i=`!_$fvZg^ZoyN@xFks}{_{hkG82B|`j~K3E zwpbEn!GCBD$K~dD#gV{EtP;tZR&*i3dP6T%x^rmsFEXuWT_wh=7@IBKZQ6{jgNF$6 zI1dW$dMfgU4QrppsW@95#N{yH2|QodySvd`D4m?BZB@((~}mp`pw3y_0-~yBk`oH&Rs4z%XiYbQ(<6USW&l zFyJI&S#F-MPY3?{Iex;ZF%JpMd_Uo)`3Kl%^BudR;cbO+-B|rqB53hihdxB+k$TFt zAd=*qMuEhRXd5K_P+%kxE&z+=eC6^lu7_@R7U4)SJ@jou51LhYS#sVT1+2nr9Yo?C z60S6gb%rlT~=R$TO5{`yKnNB$t#A=_x zDFt$ItWVSih3E>DR)Cto5#a4RX3FD%LMuJw5VO@_Tx+?-MNNt@%< z=j$yca%mZ)JwRt&&QObegE>R zWmsY^vnGY@q<{iC{=#FR^93dTnuTCvtvs=_=|Moo&ti;Z=oMhMW&6c?<9kbMG2;YM z5)9=0$#)?4)$(m4&#_peLOZ7p15~1(+f}!VE-UXaTZk-?my|lLOr(VX5kIpzbWWT6 z+MI8Ui?k->7-PimG|Nd2&AHh{pN7?JV1HF?l3?l>Kxx3?kHra z?HqvuI&saM_g-aW1>UVj`3v;rs5-u&uvmF=#v+*Y?{j?){)W7|;@!%DNeKSk)p>>U0- z=H9eTk{me`8-COekhJ99hqTm6%HD&^o7}Cgu9+#auc_*uAy-GpGs3efrXnM<uNC0#ue+JS;BJTjJhGo>rjH88`@&!_7z_r3(@@)KdQ+pN-?y;a zDqf=mnR@lAKA!g5!>io~E*?WEx7Hs|W5xj?GkLT}Xa@Ud>YC5ET@NhUAW27&Y@#W@ z{96Z(1^ETb(LnC`H!qmRS;If}{0)x)BEe!rh-euJ)&tOlO)_9WDcHwQO7n&@#;I^0 zCcl5)xJi)8h&o?Cq!C09$dC=O20GF5J2kBo*b`8}CX~>ku?9+Prm)6{0evc2Z(|yF z_1Fuoz1VnOa%jJLXfNFGMKZs~+K$$MhWQ$VvnfIM;EPNBd)=(W%-EYlAm&Bfr?C() z(380wWC5S`BxuBP45w*KL}trj77+n5i08#e_iQiMDswa~fl>nkI`VX#j25DR)P|Lh zHIAsyHKL6pTJ-(>?*5W+jCsfi5Qc5U27I4KCh6#zZGibmOMrpi$QsmLC0xI+6(ePK z;?1%P;6QOi&wM7UaFz4V!wv*=g2RZxsJmafWX8Mo$C}#)^G4b%EQ(|!_WE=;6R{o% z#6|{i)&u_$PyTmyqNsw|lQ$1p0|Ai)L61R+=0ATJaq>Q|?r&Gsi&;)eITj=}vh02C zQZ@D!KOr$Md**Qi3J8s8(cI@XK}2uRqQM!Z%Zl|rkv$?h;27jH_c79lsg6a^@|$Xk z1Q`V}<6+>m^Cmik^PX^x?4DmQD_7rFaShD7XY&+fP>|sywKl(q?Hfu_>!3hwWWiJ9 zmEU9OKtN~2Gj4wwWO?P^UlAbC8gV__UpFh^>*J$1o6GNd25_J_DY>AeN-4=TK%n*a zoqeu0KIiw*zhgoV2%4)%zR(z7O{oQWW4ttJ58p;WL3bp+{Q7k3Zoi76v)1_X!EQhR z14<(+Lz70V>=yH{3>3*q>~-aeL!Nm|XBJmOtV05^k=fe(yfJ~R_8^ODTmIP^z=7h( zY$bUTl$?3Cnzz{m2((7rYyaz0wQ21STdB;4Q1(G(SRgmD5t%<?d<{bk^#W)u%WfZB|>2s90dj+fa*FdHO_1Y#q*{^jX#+}*o3 zk=R<2f7d_YfYgYzXwpwvX;GvYvAZtlezr~NhL*-TQ5>*}&&uV_mHIh|wA|dYvIhYl>7EaLTkf{Y>b&fu zp^*szwGiMU1K&e4OP5^0saTihp^Ygj9sx{b=G@TA@^s5L$JVNiLlYB3JOFsaXVvm_ zUoTef{GMrW?pZaUfRS8=hi)xT`@IVbErR>4xmP;|Wao8Ui|pf4yc!_zid$}U!~gtn zbWs;JlDRE+hz5q!BkJlK^UFD^W(;^Aws)n^~t8mGmPz$|VlHamBY5-5LeOEI8;k&H?W{p)`ls=f96 zWN2($SON;%0|Kx3j;{N;E9L9=+ZUF+l%I)no0N^nq z6ZcB6xOxv&gwR4WiC|m@ikA zoip&&akoEorIUw*FiO+9U$Q5j#qL~4PkZ2}GqXmO?92unjBlLN5J;!e%Fk)Q0Vioe z4^0WVo9EYkB~IE;uxjoaF;Bo+HgT#zd#gvi>6EE8jDY*CztQU|mqbb$T9fmf*VR2s zIP&6{zc{WUVhClGj0o2&z8EJr4UA#;ei9p1Yus?E=zlw^K!Ctx1hc0z=gV<&aqdY# zCC(CvNuzoM2qZE-o!pcps9fX25kN=AZ#vO*KkhDw?0B%t8iHRjIaA7+XW0|1$b@(l0hlu{mo04_3i3c>X67DbGt)vGe7^uUT>fuD?Ub^QEwo-4l@ z6tP47(>_$4ay^66HxBWz*T7s7X(yhrMy{2CVZ3;q+=v*ynDyD9h!(5Q`OtC6sKqK4 zhDn}CcEj|#an~BHXH(v~t(A`^F)S$oy%t zQ`wMMYdlX4N!v2uBWq>w%ny}?bzfna$pH>{$tV#?(hie@t)U0fh!%Sw8|?8)I;5TE zhrF;271gYjbYz5t(3IC(tqvGzVnSlH5{%s3lU76x0V*r=Wo2`&vH*i_1qNtn@ESMr zWk88Yi(CY!lCsAANlO!>M}Q!uU_~3G6x^|<GP9oe+r`D8%+$JM@j0kXdcdV&yBc)SH{MgbY)~iVL&W!{Xp!~ zmp^#<%~R_z2}B(KHSc!C_@DiO;|Kl*z$*SZR=hZyE%GSW8df ztFJzP@$5^+!TOMrfkW3iXap-*Ph{uZU&CKhb9c^8BY_x&0>`M%eD+Kfxyz?BP17I{tilkI|J64yzu-lwt&h_+ zQW;(O`sP6-I*C7f@%-f%&pu}pD4$_N>!1-`>OTAG+fP5|(#W^Ubd7^V)DdWZxA^*% zlgaCsUvX=n&k+bgt;Yfw;Q5UwtF*6J=CaG!G(iJ=vXZMYWcUdeSxy z64Bv!u@$MO`G%uu8U&(F^Y=gh>KXS7^Eu6J+tU;_J8@YuBZa1IP>7l?=NrHH!3)0j z=QCYs9W;WdC`@^C1RpHDNm?0SdWXirL%wCvue<$E=}Jf!UF%`x#GfL(mB6t^|w zV0Ep7M%0jb?|J`Tl(@`i$ol3%B*-Wnw5BBz8!T)1XWAD4CyE4mQ4{w&uf_70&%`xN zgFp~NfqeY0C}XO~))R+m*+>-7icYfT1OI<7+S(1@I0u>ePS)_gk(-19!5})! zrfERW8h}lpHvoa0%)akUR4+ZJlf!3pXst;=N&E;FD9Rd3A;qt&{TF)d`ocO{4^2w z7-%rVlSU=(xB0@=P1|4*9~D>FV!!5>GBb`!*E(oKBa2_Jm+v-pAdY;IMFIdaQSal` z3lWjX=Y2FygFsYAU%QaV=Q8%5Pe=RaK_ogXZ7OKNVIcq@6OA*zzOObL?@r42v-NK3 zaq`H9L4Z&+8sHWuSAv2Ww4{C4sB!Na2Z^Y%e)Hn@_+C7pvNlam6OeJlj0AksAP`+< zeIWDoH_yKKnvF!hWp-#ERN{l-N+&QD8D-&{o+copWElzgrY8w}`|Zom3Q3@88U&&X znoDF}%0e3X7BsXD8c|oY`=LLHXX41`ic$p7i7Mu|r}c{Q$fp-g(;yI?q|WR5^ks0A zn{Sd1?So2GLo^34pN61y(2yxE$9?4wlbb7r?`=z%Yk zZ|m4OTIlkiQ~@SyR`-@eksk zNejy83}iWL3UWEkW65eX5Z;bF%Oay=pUJCb?PKU^u1`pV8Y;>t=@2izyi-OL3gp7k znJX{t=L5UYXN*xfA?9m@&;Plzfu}M*E&`b!eJKze5|{`~GqRmdQr5 z_CX_bl;_KDQ?O@CYzs{wa?a@3=QDw59diGLU=e7t3WAMNk`;`vhC|~ZKtoRL;@tm+ zE|*jqNeLJRE))l}lyOncyfTi9NL~vKVzcL+F>8%RCNVHiAzdvrl|GGzE!p`@Wz#ft zf}Rw&5@`~6d|3_U(pdQfwQ%b62}M`VOrr-fL{grfp0tz{bsY8adJzmj7(aSbKVU`j z!>FyXhShv~;};PLF@gndGzMxY0AVR$eqI zj55l1)<+S*BV0d+d@#x)$#)tZuc3W#2>qA&63xPO5;tvt%MG55F zIP}erFhJfHWl$=oOc{V#lgYy99!c_|0>~HLBLEnL&?%TJeJoVKKCz4TKA!^i&7<$( z2#|a($|2tf5CE_U_mM1(i}EO(DHiVJ=S&d`HF2)oFa>$0q_A)i9J00Oz~@^8hxVa= zO7Clt^^cpH08lk21@|ra>BlM{U z3NaBSZI0sc4jm}2#d9SQh8_&^`>3Aeb0N_>dLC{iXi^{LkZ&tN5x^r1FUT|%%EfwI ze?c}(Xj11&UV>Bw2$Ek)e=dCltDhVMC&8?^CcnCmF09?Z*E>M-IFh? zSM?kB`s)6XMcWLsVz#iX8+uiEV|HYsG;-ApP zaJ6XWu9scraU4GAMmQwGHEU8R&C zywJHBf?sIN#!X;>9ZjD^gI#Z$D5EMkLp}rAvXSFZ;5H&TSE}LnBBPpJasmtNXksjS z+ez-#S3mjji&wtni$1u9+U01`CO-`jJn2+Ms~yi~|BqA(o$B3m(lZ*hQH@}NExjp^ zhC8pqE)OOl+8 z96fS^ngfCuv_VU{=qKiwCH(`;gf(MqmCrMbwWtrqj+G%n?@En=%%_*@y zpR&()fdzIW^SwLi)%j(g?*SSZj?5Sw1?v>E&zKMn97on0e+;Vg%f8-lC~zC`!(P82 z-VqH&WcR}u5}1vQEY4VU$z>ne5DpwiM%M3ibbi@KmP3Kth@Dn;VRU@6+i3+4EJrNN zH!r{Z{pebf-NFQDU^t?O{u^%AsTi~CVF(9~BU0?**19TYmtuehhO`tl-1u%+aPKRC z-K@8Z+xEuS;$D`fsB^nxIwZJ`_>ldF+v<4QSDVGA+P*neZ|abAb{}#A8|;56?g6(g zd{`gfF1|a}`^SZQL$KN&+|%AHhWpbp;#P6NT8&q@dIrl)ee>z}Uw$63r6~&BwH6In z=x8AL4>Ymjlcs3LqP-ua&$PD*GPM%bQ9)RZQF6j!mq(4)n__$gDCnw=a7Wh%8+5Uz z#H);Ag6MB*_VQtOIKJ7}?vHL{6@nXo0A2aY zB8yvofc+tXHvx#+dGeca66lKR4;WfGuvPUie>V<&DY9Ql9gUrXf86aKZ>rT#t7W}C zE{;1k0)JF+1X4Jmqn}^e(deZA<16-*kwRC0n5nDWDEyo2cXKcjzjJ99SL?gGdS7ps zyfW0ky<#T`C5+_7O1pNMQu~9;hLIbmYbq@xg|5E3bVRqiquV69cdJ&5O?`JRsDRo^;>V}EbG?wSZ;|JVSrBj z@zzT(lc@5=Qc1`qnbl}w-QwCPOzIA<>y3v^~mp+aGF&2Znj zphAr>KqsammthmDwz@N0XbMIy;{?!!smP_)!lo8WWx>d06dxT(AA`5mVc}kJx!xFn zz=d7da?3QU8Z}*T1TO1>OAo#7D0l+s!aq(nukLGZjUMJSs|`BHr%z*-tgv5yWa6K7 z8h7~UK>FHza5=`@W1n?xZs9>cU3pwByDKVBgAVdjJJ8Ms_vbKw@$=vNx$pVEs7q0B zZzu7=TTR6wu5S0;?b?M`ANIRteK_p)OyhUOC#(Pmb)&kwv)t3>7$IL?-2-^gSCe0e zNqTIuH zUvMD$+aOe&9S3w|DwM$Q*iscL7@XmtpgN^K{;N;v){*UcDD{HsGfo0snev!pt?=cl zpt~6-fG$kUfS`p{?Kdrp2lt{eTL22qfKd+U$dum}G=jYY)u@7gTNMAY4v4MG>>VIG zm$ODdZd~T>0NuAF&jmjT+^MrGWx{9loO6M4fGYj^#IhFXV$(>Ibj{}UsobhIMgiSW zFEkL}sLe`REb8w>ZI6_?1*APoK$l^H=#&%JeiX}P3=3!X)j7E<`Ce8%UdW4JNoCY*PuAzC$S&R|$p;(o>60 zJ2*-T4y9gj(TU=t15-X^&_JJnKzmTohl~?I7i`nAPmrO!i%-iQ6=bL4OKo?96cm4)RmM4)M9FDg}cbF?i6QIz?{35A$IPo+497(45*#`^yCSscgZ`GzSIMDVwd_ zd!U+J&}J*hAU$O-nzLeEzyw-joQTBZeOq8Y!}V5t&44SU-K^gVL4~k z%m*EuN=;B3Y&*6SkHQyBO_*ST&P@3>K{Gxk<7+;%U1&kyCQe|q3r-2w$NEN(4r_t# zl+%%}@u(|r0tbE7JsxdA32vuc5Wk4M2x_a@TpfUqALvU&%1v7%TMh=<(q*h}US+>| zwyGYE_3HU-0V-=MRj=GE}2RjGR~IHXnoRbdE8sr;Y;@hK=7nKLigG8x2Ns9 zdiBy>52@Um^{P1>yLnvK8+X1}^OHTpab&~Q#R|GkN7+unf-$Yt3&!s5*?Lp2^f5Qo zoVCf*zrn>}z=;NZU^zav%gs)ZD>Jq&4mhb6q?eq#$a=p%vQf3ZjgTg>4#>u8 zRUfM*KU6EjssjQmy4?-uLH)5_E>`=syJo#`%Ow+<;iCQ-#zP{4Cw)j#=Xny@l!p3W zXY%t%;6;;uV!Yf9pT+LM-^1iv55q~t*$gQrxc);ogwULSUws^Pq;-`8A64H1Jg8B0{~rS+k8zU`{AaQXe)gS$xYgw3Xv z;Xvq2$_g-8k6QshLNU5!tbjxW&v6ZQ#krI|(vVjf4c2kNd3+sr-^N5+W*rxRU`cBP zhI+f+x=hD)P=MC3+d4y62^iRo`?h=cZpLl3e8=Wd8Q->t0<&>nq%f&x;XAFxA$a@UwPSFWP&0d{>im&6xxSYnrD5ixYnQw%V>X^`a}r zxOn%W+P~qNYdF8XK-fAy`amOWlYMw_g(I~N7~+GMcYuO}Jxx-Gvv1>ai_@OFR)*8A z3s@6Su+?^&r@c!>?*drzE>g~&ro;g!&Cb%_hWp=~b~Z!;FIq1dBg=lh+nnyjZp2Wn z+dQBe7Px7i2L1hA?Fy~R!OZDts9<16!_J!I8g}=U$hnh$sD{eiFQrRGD61YVl|$kbq8*FWPj%jrKVP++F{kM!rk<+z;wV*mtJnnyu@ zyr~XH_pX|Mslru4RN~$_J&H+Su-0~m!N={&qLR+JJDkD=XN#owyAKP0IO=XaSMDAY zcYjJsIsgXiDJyheJv_MkKAdSOE7XI5-INu&ulH~GWG`ifS|sqA@?fOdF6F^ci%qk# zwDr#YcH#D8TglB(egCW#kK#dY+F1>qU(Ws<*I{@y=UGhz4h*%uBKyQulx@~>|Hdbu z6*>2cBamRKMf%uh`#M52XQVHV2%b|bwh~z>wPK6d%9J*?KVQfRQ%V~N9Au}R`BRAx zpQuwi=b8TmEErGiS6aq=;*{F201Movyo!T=rK?`N-R;*u^TnYz8(xi}lvknQg0psN z!iJ*d?2h%0?u9YQIOnO!I4bzkJWFjAI-DLJcKhRDaj4vSbnl#?^};zP%iU?qw-bhR zv9p$?Q3B`%%`Ttrh06baIvX(q{~j95r>yPKJw+$-CQDh{4$8{R<%_#VLRg@<6tfNr z%%&m*dO}sHNWp*xet$DO?ftBM9@`hO_t{!ZYCkb*-egvq1OXq#N9upt#C@G_)X-W4 zAztfAn4Oyf2%gIBLGb)2a&4`CdMZ7S16GQk4pysr>)xVw=W{=+oBU=rtX6$9a|_VG zP}$w|40nq#%j@@YE1at{!E?NnlUK<|&!DpUYIdP@)CM@4)WZ0238_tHPZ6mp*;Co_ zFGCneN!hgoKOSUDkK(NR)RduYWia4@<%s2Qy4mK|@TDrd$Yk244%~ zS@(P?(hCv6R9R6&ra|o8x(_&mV}k{DBkQS?x(|0T!<&6Q1qk?ztf&5```U#?>Oo2A zq{zOWYJfJL`+DhbY0k$p00htRd9rtvPh6s{+km{UA9hZc*kG5KCm|x3D&9JoCw+a{@x zHDxFJswc3(PRS90-uWcW=5|w`owGbMwry5G9n#3vWtT1A`Aue5TbnDRH4dM|HG~A$ z5gYD1>5d741dZ%AoC1ND62qe7-5o(LWco8*Ypf@dNs^2KgSQfuXT00U$3kkT^-MC2 zD**#PB_gZwYtpoq?s%Omr#1KSESdxpY$s-YcOzuD4#S+GA~Pw31lN(sh*xmj{|*u< zvPVV&G%%c)>#nY<+Y|8tFEZBw1YRRM2;Y~nIi7t7p#g#?El}IV)#=<3JQpri{UpR` zJ%dS_KM`E8p0K2@;99+RhQfJ8tHt|u{XwZsP{fkPfUUfn!r#>Mtc#lN; zymED)E9+|ZXkQ2ijuWdu%Q0%PimU<(CfJ%J3Zp{Dzo0|`2ad{FH?<9I?;fbz$JQ!q z7ITte&_I*;wk17$n9;qiIu~CKdIn$Zieo|fc6Cp>dzIizi)1NlMLRU@NnUg-U?_~# z9KxQV6bdq!Pt3Ns4i}ki91a{Oe68*>O;}{7h_A)az;GlQ;mz`)cBjSeTH3sYr} zFRF-OIBB`Ly`PC1kS8ej+`^T}ux8N(I^oJORzzW4cti`8xQux7NfON$|a*@$+nx6W2HVFSi1 zyLJ&Auu^V)U>>gB?UeOF%PX^H_&9X)q~N7HoMLd9IzUZ+3@S&a&mT=2`sQ1iIclWpWMnRVuWnUW{;EW zkl?D^x5w=DOow3pL=_-I0qnHh@gzEWFtWGzZFDD?ZGKU#hEevt{U|b+kNAQ9`!Oxa z?gwgs;5oAA^OafM4aCE8zkYC4Bbg>=-}6Z@@EegM3e+stE<^RWzFUh*mf7W~0fOgW z3v;huv_(S0JlG!_^I(Sw8ZEKOFu+BTS@*l8OKIA>iQiVeTr6DyI-USwwNQ3yDkPZx zji}VL)yJ9%n?SBhi=XD>d>!}j1{YR-K0pBE>H*NW$#j?2<#sr%!HZy?~ZgSgZF;?r*H% z;BS$(tAgQDR<&J!IcalDuvKpO1s(RYb>}h#n|c!Nox#0!ly7*!#O8k5;n4@h+gBUu zuh&uIW?f6u^~8&m0-UfZevmtU_Av*a4sHsYrWv&@f(Cv{)Ij+nxVUAt zBgyh>#KG=v*(4}Sc9fN%M}q_>XGT~!t=P=qmD3ap%*Qs!tIcSE6(mS((!$BXEN0>8 zI4Wx@?}PiXT64u3ol2ey6cDmg;s~5&q@a@3J4q%<@W4?yo8uhYQ+HR=QP92Gx4{HDJJ zNr&2+yJOJA5k&C(D`DI;;^uvmFV;*Dz(a|8NB#7SQE!F;E=nvJzf)YfjImpR0zS&^ z@$Q$Z^JdL{Fes3O0VAbe2mNW_u31le6Dcu2Z9+ooVp{(5wt z--Y#St@Q^IhN}gE{`}P_o4_UfHoMtrAiyN9HTPN_()?P}!+=p-Yr@*2`L%{u9gVLJ zaysQ-9q3F_b`qVvalcZX;*2{91qoxN>?FEh6StHu?iqIyArM%_=XzV8kU75j=XwVM zHgOrXKMbl}=9dux0xM;=)d_U?v8q@ZcUy5lu#9^mElYm!GruPS6!3{_mQv*}zh;U0 zesMO+1}{Gwv9pW&M8h77nu7d3(SU>TQeu;@cDv*FPA+3?QU?P&C9)QL5bokKM%E%| z;HT^}F5^BkiU*FGC$;-<;fEcQaoVx+b|%P(F0bHz)M+S*ss+HMaC6I2Ln50 zg$X|hq7@lemPI(WC#i!L=+2Q=_g)~azoI^$Xu0)drcLD-K& z|2d-tQINn(IfJ9WR{iFTXK*SOxG8)8Z$9k4c6SeJ`dzrBX59P70l`u^K~g^oM>yjN z(g-4WDt835uezeLY$IUJYc#}}#~{H}$uHMFQ+3mt^Li%L9ur)Z-PE_QKJQYXnGnA= zZe!X!<>>tn(mFUOBkO;)THoE(`=$~`mrd^KV(j_DCDs+qKq>|YmWrkEEPZCHf7rR+ zuENUpR)57nFTepWWw!-htG37=8%FEy+(-!!V56-2J)8a7S5fxmI2a@A{?E#Yz<^a` z?3{9~93y`h{8wA}SKCZR9#O+DW<&=t$?(T_g=V&h7`;d)8< z*oD;_G7MP+4IGtypXW#og1gl%B2ZS3$UrXy0yD*r446Gs?lDm|lvb}Om0F7gZp!{3 z;HId&)dNo@*Fk}uax0`OoqF?G`+OuW{dTJylc05loXkI;zy#ah4CiR#MiB3_@~lm^*9az2!C1K?H}$Qq zB-!rB+2PR#yDfBYhWM*RCsB02v@ImC;QU+WRcQD)@?ehj{lRlBxk>>2Q0~md2e6ZU z5IE0vXU+xSIlmezq#-23)XymSQ`>nm@)vyYRud8^6GQ>Lk#gG;Io= z>!E#_Lz@Bu=!a5$K0d0$qdt^>w(9d1VDL`zftpfAk;jE*@PQ;e`j901;X$C8Wj_Fe zx7~kegB0q+M5X-)0S)fIZMH)`*gO7g(Xp@*(ixoBlkhzRsz!74BxHb|*jF?!5$(yN z(kmLp1?$g}G^w*~qb1yaHiJIJc%WCmn$|1wf)UlH?HoNJ*kJ!p&SFm0O(Kk6t`an$e;cT3x8e8D@2a2Ktn?a>U+YqWU$*$`RvnX0Hs-L(S5w2oLni9*_50 z+&&wlc_^jh@gX{TkhUhaJ&4-iIo3pl0{U{!XuvMg`7+;V03AK}r%Cp#6$O7|hxX(B z48~03a7l047f`fEtLEzs=Wuy%@Se+c#-{BJIG{H#&d{_rBiQGhxO9Qa10{jqn++IdgoT6yx)XO9dRywkL! zS^b!(=g^K86^!kYX3vaKQ&L*e3>duaT1}oIqpVA7HGu_Z<@KS+!8U)PjMC2b`j813 z%JsNVXA*UmnKHppoiZ-uZPYVafjyay25T* z9}eP)&woB=?*b<1*%>w@^3D{s@UzXb2p9D3jB!)np`v}8ZQN8Q=-KqiQeba~2dijz zN}Vi?z@rb-yXdeH?fI-yyXZJNdZ5I&ntK#?m7DN4pMCo5>zB{lCs3VxtvnBrExt90 z3dYLbdF4BpC}wpRADkmZl?RQMq{+`}p{j-|yaI>9=n2^t6?sk41btdf@m=k0$ zSKc7r*LRzGdGtQp%kAO8{o`(bvv8-^>*HdTMzE6N*Qg_VWEg0gZoA5gO={a&SZhC`PGmOPS8rENIen^4KtN z&{y(535G_WO)oka*5hN+{&{_14A7DEalm||eVA<=01o=fIX;n-HV!;1pLW7}<$ZMKZ8fbut8qA|3ikFE7ZvC8S4Q7X**So1UfpPB;*hf z(ShCmSg#iC)T&&8?z?wOzFXU)?*jaW-8wf6@-;zd(yZdtX==Hp2m?@lPLoiq*IilS>TwEXHbe36m*p%Pa=&$ z#@&Bx*CR&RdSXwSO%XB&2JO#{Av~9V<}TM(x10Ll9+#%YqZX_B!M`oCUGnE@{*5t1 z?ac1j2%(#7AM@U2cph$s)S4IVf2i(U2}Yj*>Y7$dVOwWG-L@ADP6{rFvsp0OfOhV0 zeO&7-#sCCW=21qd-qt=eHYQ~2EJ&oR1A{uV=;PGUYr1M$Q$fz-3`CG+kFi9_zFBXX zbuqsa)3#_;-rL#(ftpQ@?hCz6ela;RM37|<$3*0)yhC7q)h11l9TLc~)1Xmux+tyB zz$L0=%W{AOUCY3uQf!;j$dt3tzzal>waB*nbhSRX#Mhc9%omcagalpYy+u@Ew5Gi^ z%^*=10!$EQu26(_{0TNYdyGB z=2INdA$FT-q(hy7Z2h6wjZb4inyJgITw{;xei*pvBVXbXx9xZ+|1NIv!m<8sleug?xOdB|nY_qKdOP ze2C3OIJSA5#TXLEv49X~{@f}(iUVTG?ltHOmp3*3d3LW8fS~&KXdpz& zu&p$^=t31t3C-_F8YhW>8l%@1X79|4dswJ5_$BDYpi<~zA4`Wglk_A#K!Kj(h;+|x z4$|wsi995h$0Id>f-<|B(&=NQn?Yi~`K9P_og9M$O>KtD@8a3!nP&JnAgC&?9UqVG zI%vJ$i_5loT)Po4Q2aZg5&C+!+jL6WBnykM&QG#faRmgF*dy1izQ|v@w0LH7ey<28 zj{;JEYg|sjU9E4kGio3}N7+468TsG3D7p7vL?j{4?lF!9f)jeBL}c>oRR;n}>=Hwu zSFN;|R{c2l7wZhcc;#8bqEMix_;}=-^%iAI7`Hq=o{j@z<8!g8 zsKhvBpNlO7=qOg6@IUPCT!kN9Sb41c2pA}`P0z>W&GYqsdD>L_&-#P37k&x4?9NdA zaalk3OGwJSQwt`@vf*_fHrLWe_?b72MpN+xjVjSt`tv@HG9b8WT!zv zmxVMO-Pgy;RV{Y0f)RpYQG;)|<-D%n_dEqvmm* zCR~ta>9QY>HDB802D-$ z(%7IwETzlTggcyGEM4Ukekb;So%TG+^k|@iF0oLlrAsdHa)i(=_EcAr z8s65&4|UD+oc{RQQw*fgJ@yJ=TKCq+4{H}Xa<_Td4*EY{y^Dkxy7>bdk~^!Lo5S1n z9gigb*;DCh#|@pmd`!1H-qR;Drk)tO$ubSj8dDKS{|`@PJRL7|@^Z!9KVik~xS_L` zEAB@zq)$e1Ju!6if+fWrw=6^+#Pyeyj@0GdbEnHL_Q0$9T)lfBh3=idn{X%K%ZeM; zt8bM$PUzgTv)4)2(9yjW$zv1$?%Ec$XN3-)KYFWrQw!a^`sj6>(7E&X7OPtL;8))Z zHjL1*^VQO&NV{TkOFrwau9iKk%RA^UHyu8#k39G6>K*J^p@Xa#Q$p<9Qi)-6W}-D0nAr77ZJ z0e4{G3wE-h`%hQbNy!c!KHrgc4<5?+($yX5juSff#o61SwxN*`{qrXbxLf6iB!M(bN4&2pU@PQV(c>XHcw8ak(uf9rloY1-R zqcXmsVBTFlXwkFE(!o$apF#)u9^)eQl-rD_pq_N6asDxjQ-nY}uYL{zQc%wG7xwLG zvpFo9I|FR9arK3r5<@r7Kjm#(^DoV@US9o_m+;Ee$#5v2MkiZd=;Q^-@z(61%wix=47TlamIhy)`E9xAfV?i$!p~U@ik>W0tX_@~Xkp=_tK$ zaQTP^*AAXcN7?0r$@w{acL_ao zdGb`!*k$D^!(6A5X$;ZvTx0D*Xl(QH#KzjwLzgG>35=2y`S5e)6WH0I!?~1Ox$f}9 zlv`YS$fex!>cbOLZh8UY;$=#?2JuvuDRCL%(ylI*D-lnmtDuG%eCe*IyNW;;<0rD~ z>6oFTlYz7e>!;?A&J{?razke?-5LZp3!cc+bVQNB$GnRtGNL^444^>Nb?UPqo{cYAW^?&LB5 zlmLTFhPjUUO~la6OXsOfMtLIhl;)#c+(nW9{#3e1vf#hEFeu})r?Fgxx$yt@(}>Ij z9HGLO`oCQcI<-nq#Q*J>p`))aA7vNn7#ZpR@5zjG$P+@i*e(b8@=wJsv#j}77msx) zLaO2a?^7A-kS0d@(f|!jSEpTnA^{po4_&@=(--(0Ph`{A@Iogqoxx$=&l8!!Jj?!4 zf7wrrFqip>Y!3!<7}ZNx;ig5NcmG6I;f@(Pdg(UaHy6y)C$f$2xn=BZsKZaEvpg$5 zg9^*-(9=<2x+A(YIPTOW(BLN$90xTh@TE=!O^ttoP6VZgE?;_tN%G`rkDtg9CSjMg z!(lG}Q|d6!=)c&t=o9Ga06!Jiq9=#(oxJZh5%Cf^{&QUin`VU$UTTlEl<6m8k3kJx z{oM=qwJgJ)YVZH~G&Z!1A3A+$j)lmzr`>)cITnH;I{xLwqs`OqY0v-SsSG%$h^}9{ z3X_C&+UqB>C=qt(@TB+LzTxo{)9G!@GIsP@>GabbrRnsO(Wr^$u9jtP;f2whJRO>9 z>`GbY23qLi#p8IbEc59;4uzmD9>*(XnNRgGCChxGt!rkP8>vBMC%5fW?U6KYx_r(R z`%j>UE>Aj%#x}2*WuC?m9nUq^F7(6lz@FGxdwS^dq;qJLGtl5S>}^HZJq}}M<>ts zrke{3^3QeTW#xv>Ub;27T9)}lN7J&*ry6sq8bK}lCo-Z)+v{D6OVzhegr#ot6X|Tv z4eER8rtex=<`W8+lx05A)^)SY&EznmlSf-qE%rJ>^>?nLEi*ZEcQO}hs>R?Oey&_7 z6ESr2(s?S=D&|VTp6Vp2uYPeCuaspz)y0%7^Xay*TwO2AJe4C<_)`D(idp8# z$t-hIb59`4{2ZPb?ThX5)w0YddrilBGRxf3+Q?APm1TYgO^o!V(MOubO(O{lFk!^g>4WoK#%)&Kzy)5(TaZSuJH#8_7nwl%i+{O%}dg(cU8`VIA=gMlF z?kQVrE_EVk8ut@)A}BqK?xjbVB#)c+c&_}msR8y$$cv`*dDaeJFU#E0;lwO+OOrwM z_$LyIYt)a8?_`$wM0c;0Wj@Uc3Vf+OMk+U*u1~}sgBrRznPom9HI~Iq`#V>bc?v&t z`qCT=k;6^9Jy({wt=p)FkB(1fnNK#$Q@Cl*=gKlqq=>Fxx(bs#ZrbZ7vI-M+=<;|Ngm-6L7-$=Rd%WNL?KEKU{qKyQ-PUi` zd|&$0S?IR7VEd0!*eVS=ubo9*xKEgJ9A{Au$pAgLN$A1p$W6y)Hs&4~jDIzWv9o&a?G$hP z`0MZQXXH*fpcml_p}NI>Qy;r2y*Tcx?V)N6Ia8oNn58QbBIwVr8Aru8v#&lZT;f}| zD6zhLn5{2@1o~l}(Y_zC0hwn;O9tpc`1p>lSuT5^U8rK5{EUV>P?yjGTlU6C94}Z_nht?}(YW=o6?G81CsY}^=kfD_FOo0lfzhsc9 z-}#;V21wlp?Tbq{#0UG)om@8$yq6ocK+Q+No!lq~^kUS*>sk<-4NAYDho^&sclbIm z*(Y?Lo*ukMIxzr`#Z@Ru1AQ4?HNU7H9@g78uj<2TbG&io7npe|xN3&L;5+JF^UuP- zTtV+zg9hhOJr^JDHm7?La4D$gIyiX$!!aAlKfSAu%ePWN9?GeA1Rcyrc`o3WePH+oM5q~YRqP_ zsaA~cb9g`9XN%o_v6Z|F?sMVuxJw21k^&V>|69X|s}9n-_^|h|;5r)9>-yJx6u3kMV|oED*qS9PSB#k?OV>He ztP0(p^0SKjJO7PESNC=OGrkbKDX*z5C`SJ88h8c{SzVlE0||~6?YwWd(A;q>ubn+C zxLQ^vIf=@zN_75=dg7ghaKBd_#DeD|3NmCm>WO#XMO?yyo_GihzLvS)9a_;iTlu-) zfr6(+uI(oasj}teN`S$4bcfRo$MBh|zy)_WaRT6P@w8h0+>Dj?w15hx77ae09yT>6 zT3&-Y&=j7^cB?#3vCp!2gToGo8in%S;D8IMj+UP%!c9ScQ=o$BXcVIVX2tKU z6pTVpNN^mDLXZy@(kUt!g^;k|I_kgUqcCZ#pkK^E!E^M~gnfcrL(~owJT+0V!P+F< z(Ak_px-BSpj_&W#!{(DfXAAD{LtyYV*(>E@)eQDZ+^QP)Cp*g;xj<6VpA34huM;A~pO?lz~xTb7MD!z$K-f~UzhbV<03 z$dZiJf6z(Bp#buaBMiVR`mnP29fwSne2bf(3eFvJt)~GDtFm zjQ}jTjz<}~iRwS1m-MK+TQbTJfd_Y!pT1tzTbGvgxNwKJY%pRz zjTu&Q3JuPtmHfWm3qNUwmAnN7Pm><+Zhz`Z!7L7~Vlg{1gB}a?zxcb~`?>G=zt9EK zg0rvh_O)=EW>|0l3$7-$a72acG=o~Spx|k8p8BiQ)I`kSJoUI~Y;lQtZnnS$Thj*h z5Z>ILVT0PCf~jd{wcqfhgBfNPV8PWU)$soF98%?%pG_uLTs)>aJA=s;=#cSfvQOtX zeKXXXxl!VR1(SW^1i*jvLbUREZ)m9a3tosGqkuk)29TNX=PcS50)y|UyU9Kat8*1} zHx*wPpEv26<6`Wl_6ch<8;TjZaLg6 z7R>c5lb$e+4{0Z|R}Pq^Dmsx?v(7`;m71X~Khtp-Yf>CI2js=-w z9|pnbGC`(McyN!U#i<{Mhu3A&;zq#1J60qj{;77DU8YFHGzat|N&4a8_Kec!hukqg zQSG^Y*j>g?oFD+XC)r2E$(_+YibL=;$?vvz>o+HH4mzjgdjgPrtdOEUaC$Y!GKCbU z7@!A9x}zNK&!{`%kUwdi!l^sm8O^v(0sbthcgOIQ`ixTV(7`-OM9?{P@Qvna|Ngh2rdZw0gMvtCxKrfQ4Jvj=ceVEbO z69(u(lEtJaqqGY%T1-j-eMqvH;UVpe7Ly;=#*&28r9vE=Qt_8b60)$s2qak|9HP=L z%xH-K5AI1G{=UB7z2~`*Gy0kxI+!QveRv8zqu%q==%iIwjmpos>h}1MdXl~<=e{%Q zi#Y#Hnx#09z0xcN{CQFj&xPldIzJyyvhw1jmI{AHD=%0W$DmCoy06~Vd;Nr`=oqNz zXE9e!cV=WR&UPktRkYV(yuRqJDujl#C+rOU&|TnBVwOd{0UaLPgS?Z|apx)!-8^gm z{%LinZyww$dzA>Yo{@LbwXD9NHi8PKGNU#pq4iEffW>moM&eiffw3@?2nV!j)K$3!j z>3=0I76eRPMfx=_Ze5iWWD5s&vT$6$?zmgH!kl8H(~EN@2(d>5N10g>aQv`7zSSpA zdLCQ?Q4R~X@&ssAFWnO`)zQ5ock@|&SMT@r>Q#NW>E3qKOw+$e9)AMziMvfxf4tGA zKKa!c74$^LO5X1F>!0nm$7-`Uysh@Do7evTVZ2<*Z2OSs_5S%xL!>i7N2CMu_VIS_7`K00+}Fpqy9obuJB+rK z*J|-c4SE0zvNG>c{mPvvxk!hvP{OQMdO{vrx6&oRHo^~k|1S9PQP+=xghOBumU)_x zK|3z}cP>N1Ip5WB$E#$gZ*|cAq>MFake1E_8Wp75qj}Ca{bmIkw=)JV=o)2A)QMWa zIb=+rL3-Ry^rPbprQ7PTiC550NZ3TO&N5zuYzGUn!MeySaNouLv6~c zU62~xxU1eLxoQ4s(RV^E8I>N_8QRyJui;N)=-~ZKcwOtQ3%Z@|-SuAQ+q()^FZsWJ zQEjU?F0Qs(yNi2@rvGvBiY@{5?j(~!|9)^@|Gc;3nN{0mz3`o7^Z8G&*~^d``ugR0 zef5#PwR`XNXZ1*z|NNR=jxt2ge|T=s-3Yr20IT}o0#pxjE&sFY_Br5&-hOsjZ}02- zTd_d>ho{ifju(3Q{IXs;>52MA=^Mg~wy7~DPSsjk=;QC4-^bQSFRJ5lzrOWP(o+xV zKV5q~19s@~k1p=<(mnFrMwu2a1a;syME{>B((!;K`Y#_umn!yBUvFK3UAOMCG5*7A zcD3V!UY%)?+E(_OBXL!WBzU2hXRfdAY1X5A3b#98ip{ouHlbk(&+WrrSr|Gc$kXjAc&{^XjP z8!$sp|LM6s-Pdo{2N?nQqwDsu=Y-zL+=KhmvDsOF(f!@ezs1J)W9ti2agQK9ScK-a zohbe+3JuOO_aOMNpnv7!y$N zltE84H}E{{mTUiJv_I2iT+<`VXxzq?0fVm$bD>F{Z$vNBbDRN_&YVy{A7lmv8b=@8 zlf|y^B`hB7k&ZS@Ry^?u1+>1DFPL!%~wEg<+!%&sQ0XBl!VI=d(+ zcurW|=kEMtcW_xfHy8lw;1#vHAv8G4yblahH};>oK;F%AQ&&7ZpZ;JV+BFP6!34_* z4QRiZSpz62cuvgq=97or12e2e=X#F_hB8YI<3h*VF?3pb&se5so}p#yhyxW&C)TQ_ zXYN#FRo_*o4UaY#U8^K8_*!(dJq=-kEo!A2t{te6=jYBVym9YE)}j_~QJxeOJSQwu z^U2JXiC}`|#HhDl%xsw`XbR8zquUQ~N2L6ycc3Xe-S*mLK+HFb8hLi0;3>08VC_0P z+J16a_#ECK&nmr|7Fsvh(f}EZVPV&|7Tt3YOt74YNBJ*Ym1~#BUHgm& z#j`6KkJ916eZn@iA3KY?pK-OPpx`MpVlg$l8Sg(?Z`~4l=#DQHDW_LS0*GP$#|VJG z!5YX#s<<`qfZ%7CY045+e5Q#N>bFEJ9s@+Q;P80w(u()%rAsXun{$6qGA`w{VT?$E z)D=Z8E_JaFly}f~?h40#y?wLs8^Eu+e`(ffH32U@d5{5UlaKvCX8;k)P+R;{Whl^Ev<^%skfPudw0`}{EI(;thaC0+vH8ha<{KPAuVZq$sfm1 zL0DdHi+$=YT^yPNQ+IH>tGM4}h}~bpT0(=mtY<-}zaGR+zFu?Mh9vt$+EG|g{u^Ye z-|g>jo;88Sdf(rBW}5sz*;aFRt+NatZs7`0Y$|b>ZZvZVQe;rzHzmu}+LZ)2P(xZ+mI@%a((t+_%cj=KVDTAIEXXHX*fbwVANU3K$6fHL>!4dfKks#XU7p z@Ow5iUOu#w{Gez)A$K9g;~`{3^qF5UHRar4-id0}U!B7)^# z)@8P-Zfjok<=fl>Yazgco~(JZ@Z4Vs`J%g}_|_#2`U*+HbNe4`l*Sb+1_WYq4zk~O z*C%Mkl+h?8km^7{h(=EXNwJJ^O3S#KC(vS0AU8UUr){4SOsVA`Mgjz4G5+!f?;M;TGO`#efo zLW8_?l0*xn%8z@-sXEIuPNEzDf~Z{aCDEO`M!V*F#ebH?;&73!IvmiNke>^Hb{D&q zYjeh(MUwmiKoFIiMj^kjFtTyYO=8C@Aiof+S)XCbCVG?ZYF&6v)vNgVwgne)%A<=EoYtYpG(S za3DE7;K8hEDFC1Td1`sR;q%tkirItCcY86tjtx8A#}rsu9cc2)!j%%r<3m<60J-*RdQU?cZX z%5N8U)p{czsk%IrF@^+o6S4{pWU|YuK>(WxEq_=q--*h4*|ogG03+#O37MjBKDAuN z-IHC#0Rm1k9IA6#gzw-Om#1WA9TfP<4V2(_+A8B{^sDUDdK9pt74{ng-&xQ$7<1Yp zn&xcQkQc?mpN3Pt>CFg)F%ApTzb2eP|1~Lz^rAaIKuoPEn$!L{V{W~+5s%g<0E0VC zL4&|U?oHi{7;kGzZz}Hq6rAa`$SKb44QNH$Mm?F(<(Q}#EO^U(%rJgx;4&War1R6E!S*+_@l-!SZqdpm z)*fAf(wfWnU)dsUnfNPY&?9x;?5p)5w0_0r%>V~hGEmrPg`?ze9&Hy7yUpYMZvXIh zy<}^L@hWe+P*r4bRo6Fs5zO>r>l;HH=XSbnL@*;aiU@A1Epn+V{xudhti@~*z`#iL z2D%?D-t2cLUMr-SH^3pmPVU#6Inlg!LyEmqpVJr#NuLf96bz-m;?6-_Qh}a`WX!8^ zZ-za%Yfy_=Btb%eii`?(zw>W-Idkn;1s2)3r!f)|K%gb}G$AeSsu&Xh(@8z{?zxP- zc9fQt%TidmlG?szf~+iU+&LI&1yGQd)Ob+a-QT;qb4q5EF&Jd!#c)6>GK7A6(P>u6 zA!IP1B+qs`Inm!PZXf-f443=EOsjEQY7|%m5Hw{jQb&`%2)?-6@9vw(u0N<`RE^fm zNOc4hbm^6IAJ>i2eb}$>tNo*|-N+alD|MXBnBsP%Prvvl@}wt9+ofVMy2c&k*>pV~ zWGj6pkUT67>)VYp_>7tHbj-?Z00A8tFzM;=2Oqz-Iqha1RWA>D;M)-(j;?NqjV`&7 zkqQSH(fgZZIuIosnY_l>oR#M=;RGhgMwWk&^*F-G%)9&xAkfkcHBRL2+)_If+UBb+QRDPTlb?bK#)eT=qW(o>DT4mA&fs8WI<38}-BYgqN>o>io=*|uHqk1?5De0j zAuBfC-Dk=qFlNfa|>q?L(MMw()#jIJe4 z^6_lx%xg)21?i2>DUGifH&5e@f|NKtpadde<0Lknyf18zw?2^7dp z46*w{gusniGpW2B3Mk2Y(_g*%;>E{$>0S(Lvmw7qhr0WiZ-Q~LQTzG2>fuxd-VuQTg(EABP zE-x+?^>>Q}6R$CJKCYTNjG2@>x}Jkn17jz3oQIT$F_YTPBdG=kq@;f;2D@5S568uE z*B;>W(5^97nxtG34>YC6B5As(t(f9x@mMqvE1~Ub20|VLgygxcB){c@XT1NBHh2yL zbfyMu`#6Vu90&+a$>+e+D2m9(VStX@8HnM!t&bmSkrkL_XAr>wEg3qIKVKg|xU85( zC5rMJeT^h-x+PekC-?gidK;I_ddD3N;~~LW3_CcGG|F(h;|xp6&|`s~biN}p6qQM` zINxz7kTVYOe%=A@;6Tziz#oMOOAfHd0=+5IvfFK(Tg#TqBBrIoG1Bt+`?B;#30lAb ztqG^v#o3n?pQt6A>JA2^WIl?RIPTZY1pqdN#(-;*h3kPpY+_mWkFYaRCH$}k1cW9e zC)-VyYJUuu&=O8I#R9zvM<}qrB^;p! z1cW9u?!G!M`SZyoG_FMfrHQ58kNr9jREed1KmxT1E7yF$vxG}nxef-TCVW}{>p)y3 zT*e;APAnY9Ld04i5St!G>2?$vM(TM??7y9KgHbH8(FG1)yIUL|ANWS4 z#8dzdXvxfb;R=c1nDLfYlIKHSM4OV4Qj)faj5-|1NM_>;8M$h{?#A6BbSsQmYe~{# zU?4aVD(=3~UN_JGRBO8n7_gBQPuidPtB%UmGNTiez=r^Vk+f!#5s&8?4gXn`hNxa#N=+pI zeimIuN*xfS^p`}{f=)^sUg_RgrZGi24gnlwh^*uA@UVGYG$rx*P#Nb}3K?wsYlB*5U#`sHuFvO)3eU(B`mx(0*D%Hb4 zE;5wR%B9{`w=Pf4y{_T!{>ySVMu#IoL?NDuUsKl17v|vRuoypr2Y#};QzyTV%i5*G zvB5Nk(Nd(=p@56Nme%dBDzSj&UrPxP7)7*eG-kqYLD6mCA1wI*@TD zck7M2=E~G4Ka&mwO!QU0{gEq-z{uoZRRJh*}_gH<63$<`zevg$wft8F+v}5LfI-a<1Ji|&D zIvo={b)TRqq9mtWexIO+0UO;azOCM$S!yCdOdSZA=(fmTQt}l~xQWhhiw2x2K3zR? zHs4C{0S@@c!^Kv=n~>STReuW}|24+w69$Z9ftM^1((>}fF`0;r0n-FJ4Fp)|D@XWh zUH+AWKU){!vA$n(3tfOmg8_NyHoCba=xQDwP8&`qzl~;4V5M7|-QAtLK*zKtzvt6| zfQi12?!-Iq`PWg801kSL&i!Js+q;As!6ko;jv|4RJU41*v#%8E)aH2FZx`;S<3^Zc zV=hv{+*Sa=P~U}VSMu`j!hixU`dYr*uUx$v;XdbI%X=8G(O1x&yAiq%%yIq|Yrp{? zeYX2&74P|So`1G?AYh{JP2Jl8C!b#K97MMXlnzh+y=jOCe!3-iaBtPDKQ4ld;QW?= zB7u`kqi8LGTRWUb?bYeQ{f`^%^qSU~Oef}$+N&flYfq;pwGwxZT9pC=s*O?XrJoL4{ z`Ax7h%)j;zIN+m?kWvyV{|Je4Q2GeHuQn%sCY67LT8wdtG`}hB4Rs)3qD$n%+xomm zFB9DQ76Ux=h(=pOTYDNHe?)_0ftS8UHNSOb_7;i~=U<~F8o256y!rK8>5t`~=K~J- z=&M8XJ0*D`zmGwY44jnG*o8QCNZ_Q$V;c5dNf_oN=8wlPD6o<#UagPc{uJjN?&)LU z=cm8aFy-fKhz5?weYHKfDd`dp<$7C)qd){leO5lM>y4|bFAnwc&&mM@d}La8Gp@2$ zX!C*$(>mih@kk-g5g>4r#m?iOER>WDupl=J zJtZ@|7(J04ZqP!RYfPnBN(&_>q$!`&eMKHU^oi{*9qRFByp)>pA%pROH{yb}tX4Pu zxv#1zDw`P}gu0Y?hYafJ5)Z1M%_MPF4(+!^mhhCs$4u?PRwnQ=!Ak;=zpM&6*%4`k zvs48&p@Oo!3Cnw*vk<1Y zKz}*WlE49=%cSx7`O7Q_fT0@lB?omzjMfA9 zvpb6uJ%R;#GO_!0TZ&n~+GdPdPZb>wFhE8|it$5t;fw_ieq{4%tUP@4pddplghFtz zVazd0pwU2pip)F#mD~D_NOpUjR~{_@XvpMbMq{z95AqQmW5mfSmWB;*KuX5)ds1uX zL*9q4N*NC>&724fD9Mm3qjdDUdZxq1Y@sAZEeZ%pi{2ADZQl8({oIDL5tYkC;U_}I zP?DLNh6j=|B+N)2Dz{4RZhz|XO*unj{(BNb1_pYgGHjz_^T|-+fn>~3EH}FYSGvrG zq6GjAc{YQgYxQ@XTi+Rtl$I%gyMtraN52pJV-4BsKgu<$J$c~gp=7( zp)jBnTQ0(z?U|R0763G2&c3_O#2lr}&c1IR6k?knf1~Qwxp<66=FLx!0Wz{o3yh)v zVe4ftn&aRqTr!NO&sIAaK?Kp*?DC(0~d8H#LAQW3(TF7OA$Vai!sV!XEA zB*J*il**5wL4IbIN)}#0mLdnwqJhgW)Kx|UJ0M8VqJiOVvy2AvO{dHm(=@R8V&Pwp z^${0lYK>lSq7n)~NHG$7X7ji=*3=3ccQ}bGdnoXenYEfM54*eLqW_YTG#)Y}lH_<` zDigspro`P}ESvYV*~lAnHxlV8px_*djk3|FpS$N-7-3^f-~z%P5o~2O94_J8+GWkV zSXa0p8eMKPOOBMpPBE5+*a>SnZpphIh2}E1C1*g8-1r=Cm+6&%n{`!tXGiQdbI)-N z4@}4B3;EI|+8*5fd-)1^n#7ht!+pC=7|%51mE$s$R+ByTQObX zE53uxy%q^5@Ec#({n=5yay2Jo(#*ZCtAOA-uBi{sth#fqk)hA6sX8Lqj!Tw&+bl+F zIjwR_Rs{stDam5uw+3rd%gmMhlGPBwcH9OG^FC@`bK8IjB>2koJ8rZ1$GS2YuUwdo zRtyu2$91>o*v_?P+A$X@x9+Nd;2L-VkFF%s<9&ZK#MePlu9IfT6MP-V0zIj$-+uLz zZ~S%0_B86ItF75ot8_28xNFO+nm_NFC70iX3d&MngOAjR*tVR=?#8<-v zU3migll}Twf92}8J$Iq%HoM8)1?5{)qg{1*@-9Kbzm?p!qu&FK0fM01nMQseBw`o` z{vwhMD2U1hKqJ~tBsPzX1Aacw4l{*jn_N0C%?>k#W;+k(rP*Po&}{2k%}cYxOrfbn z!;9;th>6Q;lKo0~xcOnbRNmD04@Z8qY4o5D?Zt>i^{`ee$VIUrLz&;BeBdsdxti9Y zA7b2>oI#Nyf~efC|_xEz{hY+X+Fdw2Un&^7KhhBi~_4zS?+TQyq2yMDRjFJBbblpYmqrTrS@!Zf9I7dTm?XF9Z)swV(Fiz_!4GjSareUqF1 zK?;go4_%RIW_`D%6}c5}j}0js^|yOWl8d>x{`RO~E8`UIg`S(weVBd!+J(7}^_#~R z&Er7sc8h+O)M)M6mw#L<`tHvJ3(iu){^PHj+hw2CO)&Vye!tu6bd9T?f$kXM7}IaJ z&ArCebN7z!VHT!ih+rzi6<((J?q&Cw#t2!XeK3f10u+4ZB{lbEs@oaF-tshFQu71j z&un6QgAfFCq_5ro((MH3RsGva+~hMJt(uu>cpxdWo_mtcp}1SWIf(4QEj(77i@P6y1zHg9516sV3y$sEGWz9 z^tsWoq6DrOeJIC%rvj7^*#hv5fg>j9G07O4pdektkR%BnAnt7U_0ovoo`N zIVmSyi3-LOvnVWaQDheJLKpIwL5%oNih_=`@w_{2qz5R-OBR!t+`=0H#Y`7PLIa7ZRXU8PMyXQkvA}L(Je33CBI79zfhX2nRH~r*Uu4Y%kWpG~ zsR-tD7Litm16C6n*8VzhQi^C8!2-L!Z&w$Tuk|k_~sr2d?xl+KCdjOvr%Lh(<6b|gx34t%UTviv>rg< zHQ}MNst(k=7V*#-8W>K@OIi|u5-c(=DH!-o%*(J0L6LdMixJ4W8^V@}N&!@C#sE&5 zITLtB$%Rz`ib#&v2AGgs^W()sS3aK^w<3}gc#zzLH9?gDIX9I=i7`~FFccX>QHx-Jf zbZ8%TyUoqBgRhP3j;Ox&|AzBk%FeJLE!~axPkeJOF(5br8i4^Tx*#b(-`7f!0)ydC zrPbqr7hR4NUj8P{i3g1hRwI>FhXPJ?OVV(9-j~+>+Ks@Atxxc1<}~vV4FSe!VsR+2 zqiIJ`cBHl&RWySWdmcrC2cFc`Zg_rCZ7X*rZs_3+`HHeMY(A%1j-r7hP2XuaetFt# z{1~g#)KHFUnpc1TE;QJ}x%88U3dxWnkU*w~02`VU!`UcP(ooJVfs2@pv|d=lq#2)u zOC1j01vAuko#w%thdgK{w}FM*C;OV)%nW=zz0?>QjDwIr zNlRyAmh~cp0Gko%^s|@J$t;~71AKy&eW0$Gi7YF7fB-Imt$6L6c$Xo*+kW%bU%hU0 z2*#cYDT}Qb150A4X;m?X00YConrYqYwSWpSi!~cX14p_!Z7hWLm7;xyquFUoF@gnt z!5n?aNEjj;G+(u;egQ~C+-``o+D>3+-T8WNq) zr7K~X9JKXA++`D>-K4m`$4XOyBLd~80p|ZWUt_Nl^;`m@pGMl=zWEuoWW|WG2jy(Gy zZ9Ia7O7OsVb}H;Cak}~E`r_|3u=(`LxbZgXO4B|hGD2hfSeAxwA2ev7Uq~aivREVP zR;f@N(4vtlLF>TFPg?^tRyMAAkf7TyPU5yceyD4{f?542BN0G=3_W8IWY)(I>w_!R zC8`};4`i%_2ntQ zUYykrPL!2H0j237+|M?I9TKQb58+24u0liTVL)ocD7YxvV#n|A2Es;WE#5!QE}8oW4*@c9f6#3R zmKE2R%uZN`04i~(-TkoHBr?;S*=g@FKxbqg`CS=}C*__;bk`TBv8sjJlbJ@-KBN&J z92a0auD9Z>F!SK_7}IoId8@;R^^w1Zm6=YD0XlJy+2^e<->x^Sy>JaPd&~?6v}jzE zyB6zS-Kid1!;nVLVgNA^>SbDzP!9q^w041z&}RLP7s#+C16ZZg0Dwq*bK{lB@4NI$h=^72%ti1 zqXm+3R7Rv_jab{I72<*B$Q(OJf#sfK4FHJHqc$n8kUq6ThAhhzk8tg2iO~Vc_y)(R zeziY_i(BRm4ut`!_z-TY+j_(7Q|2LT0YD_~4F%>pvp2-7bzC0z)ls}&(S**ta#pb~dk{SO1tWcCqz3=^Gjr1H~gF+gW@prp@{ zf1s$_5f2qOAqL}=c|!~c$R%!nw=RX&z1gweizrHF`%7U!Djp+jf9>j7@tu0+7$HG1 zQVPXXf>MhDN+ZV54_zRn+{Um60U?^r$sG<6611kZ8r?D1Iw-{FmaE|9tM0M2JM-KE z1jxi~jth`g_xw6UW}DL?fJ%Huxx1mY+pI6e8#kHNm!N=BJc!^b#JS1}uB4LmEiwlY z7!GK~4+FZNcQtRBB4s|$5lEn>Wkj?Y2YdH6*4~|eK?A8XZ@tc9oNN*bS0rb4jG}CkG?u}UtE=)L?vDV0B92(4jjnvVf zX3lcT=nVdD7WNDtJ^0O}9w5r9Ww#w?>4ao}erTzA@quje(C7%{OwF5s1!G!CeOh;v zOt^Qm2wWt^sdnxD!M#ei(r2dCuC403>a;n=6G`2vBS(QCRWGdjaWK$UFU(Abr8KH8 z4=j!@AM5IEvRok)grr8H`=2w@K<9-uP?*M!!GWO~-sl+y18Lo*rZHoqsp@*qNSTq= z)iRBfn1R|d-n?7?(mjOpQCBi+@Wnwz6H_$|jGg9)HNSt|X2YwOK&{)=Nm3F7tfG?o zrn=qKg(W30z)6X;e)ietI+rhv27W|9tZi^mY{6%)lG5|uH`3`?XWST_2n?7h!79&e zM6=EIJg(Ua0{AHQ-2YlC9JQF%ki&$OBm@{mBqX$r63QeYfdD?V3i6?y>@Pmn%hSEK!bcRG8>6lt=OWK$cFtAfB;J|KbO*OoO)Wlbk zSZbhPtL!>ew$Ztgao0Hw4A#FKMk&;fotUDx@3uy7>ReGvY;dQS%DWXZ!d+xx8lKC( zNH^GCN6EcWS-Ryzt~`df3@+l?K|-F&rPd!-zF5&}?Q3^c8}IWfG_5H@hVhT$fupi> ze7SON(E1ozA9F=XLKIL^q9px~gJs9;Gfo6;I0C3BXLutXzEw1aaT6%uqxjVAFQZ1# zdK_ft#E`&C*(#^#wSt<m&iDjA4F>2a zUhCKU^?kK}bUV)HL)?m)QMwz*=(SD*gSFzdsvkS+Gl$n|!UlK6YmIzg&TEYWf~DfM zsvjwfR7S6L3=&Kgqw~6Uhwd&f=d!h8>Yyq_0VQRQ_dmYC!!Q#P9){we_H@o(*v(|v z!mcb_J(aC{+;Q=~+MKurv@Tp`LIei`rY!CvDoagXuEkwIfQ(`w+F!ai8W-+j$EtpC zx08I;o*hq;wia-iS}Wpcpr|C*cOPxm6;IB~m0VBT2MtA=x}Ui>T(>JNm%^$|Mj0_2 z&{E=lf)oa`Ms2 zuvuXD>-X-_>fq+6H8^FPR1yi)qT2J*-I_1>d9|l$9wegn*cas3SNtMhULyzuP*J?; zcBpnPYi%D0CD)EwVt`Img_R`VyjDhBOi;r0E$1%H-aWeR!y7(bfXyrG`JGLR6|hN3 zwZs^yyprkwKtu@wwUQ#4@6-_H3IYWnAQZLD&1kiopcRu(UfaxIKuXz2w;gDHeW>mq zgd*jN-i0XBly(cKClgapEw(2nSS4GZf>hXee>D6 z@;=7z{^Z&I&EY1hpw^J^-R`t?HGEyNL6|IUfP^sFw%L8>cld5wy}xk@4A1e;>YTTx zGPu&?_1ZG@xbzzXzESut9IZ{%cFLO%sP$EU>o3q^`{orE*9(V2fDZfW`)ai zyWbt_MdL~^+yBvM3eM=m1PkWs8F+fkEe&*{R&Fg2X zcwiY_ZRuBozvt?QxLWWo{Ow=+;nL2$+M4jui>SA(x1t1NGkeRUxL_T%^7QL2b0Iu$ z$ZX}Km|$ztl=iG^;gU7>RYQ5P+*BtqFAHi)6d%2a+Iil8_xfDz%9z}{CsdUVWVZ8D z(BRI>UQn-qHsDXz+6edJ!95bz9R6|(zsqYDr@_HLx|d>2_<}Zz+ec0AnfFp-ut}VE z`>4pR_EL7h>tli0ssADlUNIn?{TbAA`MYggi(`HKbFtJq*4 z_1|9~_jKAs7dLu*li7c_Qb1qgYZUKGH=I6;LQ|yNYt$q-_)9OxIlL~H>fnRU&wTn~ zy?Rw2Py6lR)$YULMrLWyfjAg#P`g++r7_+f?>FqA)tSFE0_cX^Mv+!Nb$b7`FFEF1 zoc)bh2D)qKY+6_~%I(5jPC-+4V4@=?3h2s+K%Rf|;>PU(MN+Bt0Mjn`0mn${v~>!@ zgjj}Divv>Z5R0ph??Ln9;FgUwu{2Fu0~W~1EgI3t=as8q;cFNicZ=QKov$9~_LqB? zyvRgoy-YH3PGkcHZFcl3WZJBMsI-AZQECFLTeJkmD&|>aWwPoVWNG^9m_o2#vRpwb z-U12{2ZoI0Nheh&_O%jZ$aK;<1qrI`Abw1D-Q3nHiCVW?=c+G(1!Y!~a*VPwFp=7s zR^R_z)*KncC+)=N?m>hb(qpQ~)~RP-VV^guC^11+Zp5iVwPh5W&u^kL&l)XDARNU7 z>9L8|e%zNWy>XXe*wSI0c*%S@B&fqVrofu0VuCEI12-`(+u#M$gtz6jxI;aMaC32%%XbFC9V!S< zPBd(#7K{2j@tS?91zbR$L3LBlPPKtNhw5>DsvhzTsxAV+UkWU*01YIl%ES9$g@fW$ zn++#wO$<+6mKk6=&F$mNG(8|_vMhVew)UM9PtjU4ZqF8`!vo35)e0nU>*I%7Ji}UQ zwUU@1JGq1FKU^O_tlbMHE^C9WSEY7v8ZJmrZj0o{oA7z~Qrn^kG^i)b+r0;N6?uDH zke=Ke$xe$W?@Mit6j)GBR+0VnRHTCj^<)+KD8xP2l=QeDZ8v(m-NrqG#B{p2(d#fl z*1RY$G=zrfnO?{U$dWyP0`(r#}D396F;2AFOHrkFaE3NQqqpldb=t6Dggr42#@2%2W8 z;#u-prP_lg({&kS;WN^um7oU&-LZ4TCgKD2iJoRy&k@hH3=9~wC*w_^y;kR1sqjsR znohVMA{yo`PPj(}VOFJZY}XmSn!G9$&FiJho&h&+kL7#HrMJiQb!9ur1CKNmC+YAo z)kIgGxTu!Z=W>3MjAUBw$J%tVuR7djU+T)jA)f=iK z(l+PGC7%C`5*b5{l{>^oC(K)9H#MvMF?23U zZ;>f3NSjrpxdqHzx6&%oB7&&d8*UaKx;B^ghS_RomS^}*b!mCFh>)k*L-PtB`VgfZ zo&gnv&C5sgDbG(Wy?k_#plaR{`R@XKExpI+LC>KZYQhY3TTswVQ3UBz&Y%d?tuzPA z+?WJi&0%r3-it@=O0QoO7o^Rn0PV*c89Oa~3P51bqa2EP7RoIw zDBBkcuNr}ni!T;EDhRUzkz>1K5%jkfl{(jdba0?(whg-nS9NseKsqo%)@*Yx$O}JL zrX3`xnj>cW`iu=~0zKFU1u(#OXF8r0>@(CF@MU%Tsx?zkS> zMZI+E^~7_vL}G)yc>#%Jx0klY1QwLds&aVi&a@8B!`#-@8-BP|T2%xzsN1EjZ;^{j zdw>Pyu}d2)0?)5bP~Em(+BjFYIWmY(F4|u;3(IbQaJAk10~-R#)rR+uo8q|{{{YIu&&LQar6m%zT z2JNmpK=Ya9LeQmbhK>y4X>yhsx3kEZ=G;y$C$zV3tHWC%RfRbd%P*edyEA zvEFsCpgb8Ipv%ra;&qk^4#coQK26@Cg_}j*+{7hP4s6^!l$nuBTCCf=bTJXC z^OWOox)r2nk#q|S%1JxG{c(S)ud@Rr(4an<{6y#Sp+byN$h=hYQxqKZlUBx1SLX0M zxT+*=VRcQJV+%VVL(-E+6~kBs*BeV64-3e1sLCsjGf<_M94GTyNEbymda1k?jtH41 zOf>DPWBG{&R1i*>Xt$B;j^!sBMF#N%i;T~eE05(ZvH%DDGvw|vCfIq~d~)~5AfDhZ zq3hxY`kKoKIcE1;{hhMP7lNPhIFG$P|O9T!Wm!Ac~8S350Rqj~=#_ zCk#|*c0!Owxdc}}h#;=PCF~H@%Q@xuEj=tGoZ!<1m*L7gO6)pZf^>05gRLp$rQ5?o zx(Sr~Ye;m)m8aapg7Rdp;@}+WH_S@qDr&grknVd-1w8}l9v7r1)6__hXG>v~m>`?5 zOOctu<##DGF*t>&xN$ZEQF7;OvYsCqim_W~rRw>Oz(Xk#mS^SWS^4Ez+&vp9ZrQFjaIG{AC8FK`ZQN+zSlSdNIhYv zLT`l8g{J&Yg(Cm|%)M=sB*}3m27Zu88cC4U@o)qP0(A$zEY7xTcV__X0!QH3)6=ut zz)a7eyJrFLMRnCx+1-h)t}0Yk%}j$w9ZovQPEwg(mok%?^i@BMzeFAp`DBGhL`HgM zN7fJ@u(Lar@jT%X;o;%#;Q`_;tUPb0>EFuJkf7RPX8ZZY{m*QE)vJZEq|}Lj#ixI} zV}}a~x6s=9V}9YQf301Df^G{NT7Buw-~Mgr3bq?%e^%^;GQaxOZc?}=-d-k!ZRNG_ zWYFk%bE1Dw22e32T5KKmWvu;f9X2wExA2KtH?nNr{rf~M;I6d&%V2w=&98&C*-)yh zS+=nEu%T4Akagn)@||_%Tng*!0yzT&%@#Ui5x5xEzs>+E2)D>7U>Be4`Otq>IfDlE z79k1e>XS{r|B!?O4*KqEWZu22-2`)QKiT}3J(UBhM@I)*XziMk8U3q23mCMcR>WLMHYJh~8d9ynbfKMCh8b{=%+tuaAXu05`@_2h=dvU=AZ z1`<@Go>L}QRkP3^AA3_2drrHGIZOdviCQLJS9GN$dQ|Xk#xMDbEtC6n!UhNZs1eKQ zmk(mIc_TJrJM#uA2+QS7-gD{mJZ^yQ1xFXPqwBIR|wz5?PY>%~vKkUp<=YB9Ls~d*J@vk=l$anZp9Z1LyZ31TP|%etG(20+ zrfu&EtwIIiXhlV)fy+W7BPujOM;3M7VARDG6|2vO4euj6$CUs+Iw9A}<}5Ix6n1(y zbH(2p?0pw>!9icXAdT#q+C3uv9u+xF|tYVJNGE`5o8dOK^<(;g1E{aJmcMET9@o6LDk<5QuNQO?U?fKw!L z1x{+1r}2K9&!#`->d z!nGA|dLK+9Jh~9^c3Ew}475q7_jUyUK{KKTj^8Lh4LzbuufKW^?TG6bwwM?W94JP1 z2A3lFTqfC)ACl7V40Wg={O9%RtNb)zj{Vm{{bfFtcKEnJX}90wfI>HtPLd)F!=z@(f$2Reof z;*llyaW+?lpegiluGjX^54fdYay6i!8#xJhU#jy!oeL)YNuUuPU5LzYzYWBV?7cX> zQF(r&7`P&?|YsU6)s4(S&S6_d7F#T zg+~|K%xm8#x`%nqy`pU-?t1#{*|G=q=fXqc@6;RhpNxy6i{oGt+bFqB?|^~cpES~Q z^XvY)FKP-1v?2tMP1;@pQNJ5-UN#DsoaNd!jYxo&pCkNHC7b@rUGlp<@2|Ja=mYr}tlSERc)1 zVDtwur&f9wOb`-O|FnK<(chKM5PP4NsuuI9#0zXAfmp=PhM$Md+3EdkE*c0%w9M1- zWi}gHCvsbSVi&8}6X3ytV#L3;yO%)EUU;uai2Z9~jy@hpMiz_xQLqZUc(HWiSwVto zWXNr*UWw%NL+-(WV&w9G{Y`CcQ1Rt~P7-CXpe&lDmw~EWea=$gfn+4svy-cHWlkLH z=^#t%4K?%(s>$=o2U06)PRC+q&#}~%TNqmTpnF4={PpXM^3@4ff{ol{VBK( z6@(*)O7^KAyiOlo4*-H@!~iU3Z_vh1ZveVzAQ+RQiB0I6kNSBuexB<=jy@o0Mtoak z&q5b8)BCm@Fwl!^toXvqQV?&f@}*wNk6px!n0ugB-GuC9;kTw&!9jYFV{l24>U3^y zc`icwV=%`8xn}u=_aCvj+*W=&I8cl!Z!;yTZ$f)c56Zg+6@()uNi_(R3s)=`^C_jp zjsnA<-Xw`3gLuS;jnADMwdsA>77%DP?=n@TP_I*e{PmrAnmC)xs_OuTl0o!J{Vo{%Uiu|h&wn?jHHj1OT|Q-)^soRHkCWIYgmBJ?2UGa@A2!pnxTbF^=D_t8Dbeqi&os;J(gx<`L3JnCC_36#{m3#lHH+@=S zfn2jb&F7TqTF_-Dwomq^Pj_&j7>RC_%dh%o3CBoJ$!m5P{uccr&kxq}16W&=(uE4FBQGvEvqs5PH=P@Td)kM(xm z0T}2BB_ckDCHp_ICO*fOQ^z(7!yEmCS zm>?U8@s|5!pv;NAoWwESwgyiC7o?l5oTSXuxx5F()(LB79eOg5AkMBw@aDk>1~J&6sR>@NBZ~P3A;DzXa@(1 z&C>JpEqaq4FBZ_OYTSD>_B!cJ)wrOLWbzx{Es~OrZ2}30S4_x-T7!-WWn28ed$gH2%3#^)_mn zEI3eX^i-N}suUDk2lVBsbRa=BQuE(T8U3Bk+=wMYh-?10JZ{vZqXUiJ5YvQ{5Yd-6 zqyhuIMgv)Y5ePu{Wgy#lAlay}^hdG#_I)X=AaFa{uG8CIY`xNUfk9iQz>R}gdD)_KofkIqUT3ch4B9e5C|lkB$yBP7vLM ztHEu7_qF(fz@Xizm-W|BlQ!MH^fChk%|^Yfzj{l0xegoTBM;>? zvLyR(96UbtFwcEJ(2VSb7iyZ-)`m>K7y5W08QE0qk0$i!*VrktoPJXYA$A~|JEZ~p zC#n!ZG*YF9_pjmhK>8{@jqvC~WP#ajOv#LMPR{8USO5?-BhEkjE0!o~?|SK-f3>in zER<}nYtFFUqF>3DfS?(<{9<=8W&x$Y{1QV3@yO}f{@hDgOMiOy;6PERaYJTWzlscq zAR0-Dusc`feX!}8J|!ZI39`b4MVr|8mM3rYyRb??(2TqjVfU}W_)Y&#L<2bJ3#A-5 z-}ftJ=YSuHv)LV`uR_TO>EmoQppdF?A6qMzTjRI;SeacilE=UWPTi_*`ewSMb2%1gH?Ne1~ZF;C;Zh=bp zJuNpM6m*-GoBbvB#66geAy`n3c+~VPvcIJZSoCBho{eORB7GdL2^}4X*%H~Cb$JxN z%;(d<(i7Vf;)*mEK}?X1ExX-^=E8SJTcQh70D`7WrZt;fuQIhTg=9D5*|`o11TzT4 zWOWnTh1c*Zpqc?b9zX=q*fz{R3%bL4*oJFRLAYVg?uI1faO!&+ z0J9TW*XgtmvbNjlFY4<{^2y#9cPWHrV`-I_Pk1)@r3C~a^O)0=%`LYOa}Q2a4-X_` z+cEnne$lvx?YIFQ9f+hL@v#b|o}^Df3POTvBo@cNt9A3GkHtlRK|2yB^1qHx6KR~N z>v~jz^BJHck!YRY5uGOzcp5%^7DXJpHTjq)vv2Y)Hpq*u5I-5HZ!3i71Bo~F&}pjg zeG-_Es+cTpF4{-GzR3a;WW{QKt@Q}7x)w$VE_7v$` zTe#RDFPz!@F65x?!QWX23(E4T;UsVEb!s@+ARqJ3@s5Wc zwC}+`7X}60Sn!d3S?{dvA@~?U2Ju+%aYOGF?ype&g$oCYvEA=(nH?>%)ufiEc=wZg zw}O};8!`P~&c~~}<2Q7ZyC_s*RE?$(oBm?P5n#}c+#G(nq(rW4*za2{90aT)BVT@? zOCe-a6Jg?hP3eUQ!6P?eFtCg)q4LAtUzG81z^!>)U-kN;Oi8Q+0jtP$$MOUJy5pxp z5088}`8~&o1_!6mTlMx{DK$x2Pz*sriZNBA*R0NTc28k+A+c za4L}2dTmG3ISa_7X;v}?s;_9J)v?u3;5z-KaRvoyk@9Qh@5!d%ndRxr zuh~c-7P(tl{v5s+TTe<&33FzY#PS?4(2GpF@{95){mS39rMpjSk{l9LBih_h)!ID3 zGod#3fxs>j4*!XM&iZ5ZPI2g!b8!}m*!&Ivf@Z{Yw7>G+Hy5XVb|R_a>L^~7@5C2F zJk}k4PET4PW!GLP{Jr~I9}NuMfU^J1ae1vJ_$G+dSFmeVM$`iZUw4u38b%-S>9}*K ze%EF@vIY@M-TOAXRz0Q#m8wwJE%L%C@*;I>?AmV0m?5`kZZcFtDT;kF=g460o_Tk2 zab+H;RW98Fc8#_Zwo|g)jrQ!Cb-8*POsZygO}1mobeNlGuxr%iS?+b~y0q1m@D#d3 zXh%DQ-+pG8Exwbxyfbl~SW#Ula#L4#&3Y2QpTB(9a7#h&U?E@E1F&n_Gq`tdd z)9qL@;P$-L8G?!n>pI?ScJ$4g0fV<2ecK7emAC!*XiffCMqZkdvTMJc(0z3Dz}3~S z@*-a^R>ko64PBk3qW2f8@hd7ZKAsIHH{+aFKa;u(szyVstG}#61Xb5aihQW9{gTI* z$yn+}ubOR17MP&xhTE!k{eG^Ej5%MaQCGFwl5YhH!uE+*&Cp_acy@O9v*D4pipDf6 zD2<%oM3$b#Rdb`uagk37FKI0T)rQ%eKPl2DGlBv$`}9-Ok;!7driH^DZPK*44uY%j z!13!=ilWUic$APn#V#dQfq>1|JT{M>K7SNGfJq(Z&15(Rxcp0>%k$??j}K47bbcnZ zoCI`Smo9K5=bfx26q1X z1G|~l$FmxO>DFI89yr?dS-Au$j7l!}8j4Z}iCl&r92oj*^5~Ppv+yEFwEF~t7Hno#{nl_XFWbXI(c^ZG)yU-hVWp(Xy8lf`O8O7 zYh?7(bTV>Kz{l4KkM%D{FV09(=O@o=)O$LeP>%G4nJSe_NYqzTrDX2fMDrwMaT2aZFp4EZABadT)yflHvPNF zDs#`47s-^GjQ}2B3G+Y`(K)$gND%3nOx;Qybj|x>11Q*r*NUEpQB{+6t%UKw(Vv$;JST(O_8}Id zOLM4a(o8omBY$)Bf9PQjvqbc<_>i^1Aj|=kg4aHmYSFNKi6%O73q*OBFsZglJML>$YyOreX3y>N8!z|qcwH~YKQ zujnL{rYAM;@-am4^li1X)~_jmi3zK1{E{_f*|Q&dKtx4#z|F`s{ck3NKkwQ52>4hrPsTl(kb zml186&e9KKHF9%ye|wWm&dtFBH-8T=`w}-Z((U23aA4^Bk;+e^`aPW=sSXYNeBFL= z{L`A?S32F!F~H>;UNlf8q?}(IK6?>fn9|#7&D&rA2(0`$w)?R&E$tyd~K#XrPP3dot<=TtS@ClJkF?`rOpVp9Q%u&30kda270Zo~y;`^t6$f`Y7l!>g8TIE__$WuP0^9VV#yPIf-&n`4sFr@>k?4nu>u zUFs?%|mI7Y!7{E4rM!W@EblT{e;Y954_J zZ=xl^u>EaIQfgJnB^ky9-LL^z(RD3vn`*1@kw~Qe0RuFn!|s^eHpf;T79mIdm@ndK zAQ-mqD>>dS-6u|3Ioid{>_<&}cdWIVYwgZfnJXe*3<~m!4rr##9m;twM)QTUGp8R= z2TVlJIimDC;~X#$jIP|u-VG|l^eflL15H2hYt2H>aI+=Z%Bw7zi5?tCMwf~zyFtsH zUZ9`zMB?;Ig+YOwAGUb;^5k(iO3=!5iI#HU7~tZYfG>+|^*FmC3wo*sb{O7n>~WRm zVG4|E892xX1i8tly$h0IfQui;c&UEp7!|hIqz)l%8N`P+fCOH?38;BBk7}!vNHe`K zAXxgIb^x2bW!9m7P$FGp=d&6x||XZ28{gd+E0zH z9Wrfb3#(NcNBzza!~rdPifz{UYJ!;?8}u4{Vn;D-DG>(OLP>0itVD9DXNlkb@( z-SSfS>lh-$X=ex2eWwUJcNGPC7p=7oL@XYJ0=59 z9e`EZ!02i`p?~nCKfwc-X#72^@mjjpZ|Vu43&FMIw?I1LMitg%G8P0}?n%6YmC`NO zfA(fF+f1ER)gxUO7If{H1w>&_kVbVSc-{-`ww)V6Y!J5#Y68F}t}iAXRr7i{F4XqS zW{04*BU)}ty#^iR?IRZ;Jn{{TQt&Pun(o9t01x_hgbo-U{qos$efpV@^qJ@d=S4K! ziM$66>h`TeAh^^YHR(e^0utKp!aj(P4g@zuOC6q#=hyV0Qb9EamTRuY1+luWv>jBC zwH-xh+Lksx^SKI=kNyw124E~tu)=DHCzkf7PL8=B7PZ$|l? zU!Cr8dvRgA(Y<0iVsCV>V9K+5Ul=ui5^R=~PsynEJ_!tDJE`h#_CE=Bu-)kHc@lu` zZW1(^L^qTWyHan~)t%saG>L-PkaLp?D?e7w#C^?P8!}3h4kJ_+6sO~$bu5S-V9lzO z7S&ws38V%N6z!B4w5c?&MX`SP1>s(_*^(#61X&P;~Mp(-?#O^+7yc{W+A_aLXM zoD!<3Xb%1hn*q`c4pn7Dl^*vq!CL@>x9zqpKYv7pYboMDxbE}$bAr-D zjy4228W`G6kdmP~fl&Z^I@FG?(PtSqNd-PkneYNQU}XmaJywR^s93v&1EtRUMyc(X zF)XmNO=OoHy*a1LT#*0+45blYIYS>$!ZLf4O~^OAnA2qq^$+e5PS4WE1IvI$siYrx z`Z1YCaY4YxjyJetOS=iimfMoj2()}y85FqLS4cf>-fED>pj(jA7+@3A9C~fuW=^0! zz2?~AfK_ZhQNYNp`jmb?l_20_CnQy4h7ElWE$zqk@b|ht25X8PD1mXJuF55+T+hgLiQ5RZ`98 zR|{r^NQ1iV${F6K`MHWOQ- zs{Z*cReAD^5vdg{q1p%x)^>zO%6ha~yym;Cz?Cgt=uOlOI{1fX1#6)o7laZ#o31Hm zMHo%WZ$_?Z5@*h9vG&DphX#K36{yhon}?67%xUmhXn{+&)42Pn;2St?9@!({ed$kD z@%0>mLKQ%Rxt#`8FX_VPD+natL&zl{ScY~}*2%@|$ztOeLn(LDAQ;$%tVa6-zRCr; z7o7xGHJY*^Ajrwin{jwiLVU5zCR~3@B_$?R zp@5McH}V+GNe6Bw>k*Yeq$+W9=k0mv{BJ?d2L#W+c^HD8th3S8Vn)G@;GUA~q#3~j zOS?#;BTfBE2;1yl3akH%S&|+_?E{klIx@pAb8s0fSP$wWWU&C^ND^-kuw#<2D{Ay z4hgPyYKg~nmXQiI{xhmMH@_PhYt7vvr6*qb>Y@jHYmvb`;NONOo|^B&Y^An(Tedqi zFbwz->KKmbg@<*1wOVw$Pv4oVg$ve!xJJb~e?=N>MD_F+t7-mYghyyzGigLuA2OfIh8wLg6z-bXPW*2~%tlx|#GcH*{n7W<5_u;@X z;5!1xtMMyJ=B-rNNIh9U+Ib)Bn-_v~g?5A+u)#iX(gl0UsvS|J`If4&J8wlNi;je$ zz%8N$@+lpV@~fQWNyUpOtmNbZCD#HWK=6!c0m}YT8OHn70(GF^8`+EU`HU_cs+gF6 z0!_XbxnSTIv7U?<^KDp9QDiVbr6}KcrmW?=p=0;Oz8{f)d_B6n8|nBc8ELB#nF7v~ z{!gh7u$>s8rx81`Y`0Q-Y`kq3`{C+Af~#Gm zz}cHU$CmWLTCvX22w)P(vwkzJe& z|I&*#8gJGMvU*pUvRbPnEZ+i?@8SY{^dhpK1dlJt_mc_*j3N=9Rd%IfcfIElVlD>o zz|y{GXyR$CAeOe6AyN2MrJGo4kGJYp8W1Ix&X znzBQbccP&EWi-*zWG>F+C+ZNOoTn;Gu4bs0gVh&L1_++9QCF#zS{>10T4i7J1k?1R z?&E=FAUg8w%E|rIb)euIvDvFn_4V3N8eVcc zI1CA{fecM=g_=Xg`i{;>s!%202?SR{+ik2BUk?_X1Nm+qXC3Qm#tQ6p&bA8zL5&HsQ8O^a57mZkIOb-gZ+d0 z=*6yuoyqSNFq7t_x8Lrn8(L-AG%$`t71tXj<$R9X&UWBCc~sE_1HVY5TUYiB9@COX zx;YfMMb1F%gZ}dzd^m87XjlFb#aGs2%EDvoD7kj6!35ig-r6kH1*x|YLyjVYc_gx0 ze!r*4s)q)Kku#aJ81=;LPZh-|6!SvtM>;BMpqt}aF zjuE3Rs7}_-q-lmn9|F1g$EGZXDT2XxO7H9n?)-6(W;VvF+%uaJ1Z@7;AK#L;7l@MH zT98YIMWO;L`55;Uj!Z4x;pB!wq!h)iE-)}*No_j`!DeJgFyP1bc~=+L7-6Zmr4!*D zB$x)QBA=;tw=yrG9>$#0bS&-!+cI|HGQjmv?MRph{7(@yeP+&_2G>$N3F}8h_gU{0#>Rw zn<=@bhQIXG)QLYs1>b;G65>no+mUyPQfgCoWLsf^YrqTZab2u(dh~5PtJy9R-a3{* zgSlkCsB$m4x4X~%!h!@-yELj%F+;DTyCqvAWofowmx&Ps2m63e%V!U-1=Ac-3%e8L z3K2X5=j~$@P&$I$Qx?r)G^IOAqg$mO4jhAXwk-0rc+2!e5 zILZ7zK1YFlS8!3mIA}*ZJ3|$RW2!*vm1)m)hXH_D=8fxS=R&sDLJ8D0IIj;Mr_^YWea zo|%A)hXYBGo5?K{1Vk zLCr`|>H$4^;S?ZCI1*L+;1Tf7lout2k4*`<#|=d;lleIWxL_SPN!EN_6{ob1I>}Cw zO`zZ#xZhd(sk&cNUm$ZO)L4xtpBDJ&MId9Rt`*8Wi$Qak9HE5@7HSWD?YUUQu=K@7N_thJh19~IZvgMGC>Pmk0tz|>_=*17@>%JUa+@BbE_WpWL z^NTY;PmWvkBvQ1~UNC>xdxs)K(62zXqFNoGn+vBhOY;}HZslGjQ}91(J1!OfnndTj z{ftV82Kp4Z2U9mDPHj+odL_FDBg6*#z|Gpa7W^`$(%hZS^T_=!JYA&&>1b(c*@E?|gL}y7Wc`SmFgx`|nMd1A6m4v3}ac??dHLr7zWVT^K$( zdhoHh2Mq;GZRPa$J!{zpD(G7vcdtfQU2SHwnmZfP49TuT<3NLZ;J#E1_xiH1(hTOV z)HyPk%eAgmI*kIw6oz*yp7gDCL-^>0T@>5C)Q<>My1>g56 z#RCWbAGI9EXrWnq!Tra*j9Qcq`Y8AD88KOns*;sfj+NcPzI}X6T+loDIn!$~TqL*e zb7q7F`XrA$RK;!Wq3JvFP=SK4+|SC&-rAh|_OmkJ4!rH6xO?So1B17G&PR&m+P&y| z&PQmVPjZiBxQ?#foxVMiVFn$0;#Jw*drv$D=t&^wx8@|{g_D!z{Kf#mGf;=E<}s5dg0tLOqC;V6$%_gK_iZf+=%A1Cy*GI9?R)R7K*3iY zFAo$4w&zpd@$vvX`tW_R6>g3Xky6D)&vti^0Qw;x3&gT&3K{o376EwlLGA+zRUNh` zRNp?J5Ps)gu$shgp%)Avy=XC?a4(kvA%POfz0W5f9(|B|a;su&egWmaJ-H4vxXWV% zRRh6##eK&Je020c?tin|h!s1-qw%9;r_irW#_lq8*o5xaw{2c;C524OGy#!w&0e zcfR$?gTLO}dU8mhKk^I_x1P5>?fT9Tak0T(o-M`7RI|fd-`P?e8O-J00rtIDc)V}# zfRBzI$ahQL28FQwvgCd5mNgX67r7=b3tYebOrt0f^h=&$Q#SW@GHg6>@RxgP+$P@A zJ%9)e^hti2303)Ks;lo)K#&0X@k8-W7;2`zSo*Je-V&SHpoh&m`dCz~vM(K7kB%NR z$72F*RFx&|9lo!4Obj2rX!bbyt!!2+^#pBA{#johCkYSqs@d`iwN@yUj}UUk@D z-@LPUEuh?{J+1o6-K+%%{|?eOmvxu|-kbDGY_M;(y*vSAwS__Zvb`E8pfAn)VO>Ki z*OU!MU;AN{0Q%8vtJE}O7x%Q+Mqg1S0gZd~$uIr+R{G@AK%YA7>Q#kMyDNL!)hqOS z^}txBY`N^Q2PHas&_RFk!lL#->`i}h3g}A*8>_}D*_(}J;iDJL@h?wpL<*ty75{4D zfZlYNUz8hHQzmt9^NUkJUz$CRo>bg&ruJ&-%j4Kc0{sc(^ypyq)p(K>!^e*fUz{9O z^w@66>Pl*bk+Oec(oee6;w!#Y20KLY#UL*I8Z&S=G$pj zOjh}FP38#WoUD4502i#~a-NN;7}esn^HOi$a^9i-!=HWO*S?_s2kL#q zcJ>Y5q11&5Iu+B8JHqsQLG#vs1bR=M~20Nmkh}Q~}t_80$uiU>h(%G>W zA$W8lu7!4!%(PLaK{72Qz2bE*@&E?yz}2*fu(Al^>iWpd;G z3&T7dzm&BGKk0bE_a!F*S4g)?!APrQ9-z! zq~}!aV|+Q|CfQyjT_J;bJ4vhPC7T|5k+eny;efw1yflpt94@m}kr%Eul)8Jn&JYhA z^aF_kQTo_}?UR%A%yCchfClwb`VZsT9L zraH5m+c~$?{`+1nH8CZ0HIOVV?rO*om3mOSjaaaIpn)z0Zas>-M6@yrV}*zAzuo`P zd3?~xKq$Cz(qMNVJv404LE%< zAOH^fap&V1yd6~wRIEW?k7Dy&8ujhAXnpL?~F3~VcMe;oiiIv})xs}Z2*#nrimP5pjtU=JG9+v<3FDa5HMxF=<4 zfVSm9>R8ULfu41|4-Wc5f9Z+c0;N^0>D@Or*ZcLC z2I0|#!0ncxveaF0-B7l+k%p8zs>>igIuQt5Mmn)s&hp84ofWDYa~Wk|!y&!-dateo zS)fBw<3UR$dqd&eqM&FRUlu*@zaBQox0+I@D;n|{>|;u~_~=C7z0>+B<@qP2v9e!S0fYk%cX*@1+IOH#%sFUbo~cArIlh+_08pi&IR7Bw;)gE#gft_ z7OUYUb%E({=|j*~YclBo057rYIv;vSWxOwu^g`_H*D;GDh!8YrVUS;^(Y|4G=OP^Hk~;wd$RFk)TB>_ z$EX#?jrICBxt5rq(`uJe1ou{&D?Kq zCc{Uh`yRaiI3s@oIY>y^{A9eEle20#E&mfmhzmL~^Z6ikztO`@naSZCdP=bsIOsE9 zEwyld*p|A~>DfSC1`OKFKcZ>B$mUZLb6fUO|41YI7Wn7{Q);RcsQPidT9I*@7rFu( zo8W&V)f@47QiB9y|H|G7d}51L&V8>x>xGqu0VTFw`jkwuZzd}7zSK%oB@k%+d0bND zsbBl4yFo5#bT0crL+C8so8D-?m}euRNf}vQ9`^tK z*7{pZ4_)S4k4T29P3KO!ph#Fx16qoab5YJ z-_|5l&-O4@=peghBktgOy~;1?vIHBk|MWIHS204zm@`eZEB2!T~+a!(vp@ zL6=y5t+Y!t3029QZ04IC|KnR6Fozbp$gYq`yO@VclKppYv2zt6bgR>3yd5to4WBKs zw>cS0I_OfTks>RTy0qq-*V`PaiV(WRN|#F~U_q;E;%5g7((`*$9Tp{Yji2l#*5PLv zA1Oh3(tbLmh@czotwMdaA!R!IOuezq7SvlaoE%Q*T>I%~8VVVOZ*BTN)dh2s(9)ll}$W zdmA2}pFcl3IlMS|emZ(__WY+mV;%j!-qJ4J#1WluZ5~rNPM1d=dSm*w%wx_79b*?_ zB>P;|%x*ab4mkhYTN=-LcIa^Tk@SwHZ+#@$5tZfHv>M6Tg1maZ^7)_M_83~cFnX;w z{c1vxf0n||OzFI>P2c5&&ancStwxZ_L@X#w=jodN`E3uOO$^=aK8D8o{7-8POHSw< ztHaW23}H@q&Z6zx9z@0r9c^vKRkMDb)AL)DpvApLZ_A7e&_Wj*HR_SRi|qzWsusQF zxG#+=;e}2%8UPKASxVZzv9K=#K+X;wZj1*tG-<0eyT|*A2eqJwE;lNrhBgCwcV9|L z#ta>0*Yrc$x1l+v>FmM%KlY@9+weoDKWRFcH8mR4$N%d;ksep%(A`F@{QUCgZfNeUYvnfl z(CJ34+|+2L`0RaXUs_pA4&7zR>3ZkY39gh$ME^V_zh*HUzaHm0IHJ#~JRmMebMzdY z1|Xa>)CdmVELGR#y-U^}PG$=V<+G!wAiuFIXCD}RqjI)Ct8&^I=N{!81_y6HpkWP> z^(pSOM>wKP}I29Uw{&jhP|v*JP(TrR!mB2tK8$Vzg!yVf(xK%*-( zbboC#TZc?xL2ZGqT!YwP9bNhLbbDO+927kHB^5`DmY?w0q~L;GSBX}5V8?C(x?_K? zZ+!4>*$YZgN~|l<5HvVP&u!K|_{El&t=QbZ0e51BEJ~P*9xFOr4?d`&X zYjjmrALVZTW{<0igMw#NXW^5)taLh}yj8Yo^{BIg*kH{rQ+uneoVnf+?5cx1UU=rM z*s7}+U@2N(>NWu- zW!SA)YjdkGlb4Bj53CtBSVvFc7##b{KoVPzr|<{^^uWJ6W!AGkfzd@w%AltU1 ze?MoJT4-=?HQ(8uY>R!5^PO=(FZ@dmkyTsnQ^8Big6BO_EnJrd`tq);^~nOG^TP1Z z{8N=~8D8FvZWq&yleQ>$R?#J2wjB&yMsdN`^Ku8i(sz!XQqCQ`+%35R6->QTZ-6N! zgN`YFGiGLEhf{A$sue7_x>vk!sLaSO7xOix#uqo^)pV#X-RnP%^68N7HZ8~3s!YUs zF`6x?HpYrawA)|t_5edO#QRY*D|C=m5v7CY&E4gSdh&_>2fqmO$T{U`fe0ITa8?{%R_v%E&0o`x|Y-nAJV?;CaW-%Q) z^&)K5-`-LKg8M$_PKM?eHQ*rbu4gpMi0AX=j2;1I)26-ZLDN#kKm}FT97B7YDmgH! ziUGES+gk=`U(DBr25I+dE*dqYmCjMOrejm1{qX}Bjl}EVLEd#4p<#zS2Fez9`&|@` z%UJ^#bmNP#>Z~$3gHxo(MHmJLao6O9C>%L2D0WQx-LV1MXP%&WxukcuE+h7jR z(&pQAr0+blU2D_>HwFfR->}Xf0fIg=K@C%C=e<@^Gbo_+FC0pbbV;1ygbC=!G6B(p z2&=p64Jo7d#>+f7f>rat|Kl3`!1I@a`nO6LEm)Kw;9`gG)$o*L)z-j@DcM_^ppa`j zQXU%EeLXBG`h8h9$fhM!0&-dHV8F*!PCIEi#eQsFWcsX$3S1&I*^1GFG`jA%% z13vEJFXctGV6SIXut~qu$X4Corj`|l0x#P@QnUU@-AsKpo{z7y6&0;5A2l_%5XvJk zqbZCB$90qh6ohT-*&|F3`Q+*m*2t7FBN&)ICL% zhO`J4q-_&aOPYT@G5S-vMrg`V@k}-^go#ZJLT*9?RXf}spt=((<0xEWtvFgxAZNQ| z0_2RM7~wcjBTu18-->HJGN^mnfhOvr$k$mlb>p)jjdl=#g0NkC&B)p%T;FMXrxKp~ zn#3&!M+fY*9Myrx8EtT+8Yut5oDx)u3+-Q{5u3_FLqvT`JI<)iK#QP(pq-Z)B}nz0 z3Wufeu-BPo2??sMR`7dgZYpt63eN-WNdgS?Y*$KHlI2AzUywrW+LfatM>}v5A*xc0 zodKW7jF^r*OF+oeHA&s!u7UyfLKjryrY^tNmSKe@CAZ41>D=s8`t6Bag#~i%PVY$W zbn%SBH^Wg_^$3&JT1wEz1X#Pttz$rUwZL+vzcZ z_3nHZ5U|kG+f~3!ErPUbs?<#j{c%852@ULfads3|!v;{wxl$$ejOb?ra1kL}8PQ6u z?2TxJ2%_#zMOAv#TW?fNQaMj!Ar+x(B5v@-;Xu;W1kP8U3&<9ya6@fH(*p!i*P|LB z3YRo9MuiqsYmyZh2)aAIPcYyd6Fj1#cKo*NN+eKow^W~+OEynD%AuF z0)d!)ThNyjvcBzADU4FIkriM-$_?$(aQLn}ck4A6-WT^S5u8o!630}Mz73=V7P%3tpSBYeiEGC1Ohpc>dVtq*VLZAawZ zGa;thHtVoJFTMzZ)OuJ16%J^{rG}r6+-DqmkQ&1RJ=fXF*C?Ga@{kdkBm`3r1#)im zm46YiAB9_a8x`W%j`3MWN$B}i-oL7?aAcBN=&FlsRrVmM5(Sjv>UL>f{$!kbP`7{q zslchk(kpZvDaf7c)*?@JDhVTjT3lY`?TEhR1sITu+hJ?<$Zqb6s|P!52LxjAb-0obq<4a*PuXK!U%=WMpEF@5iZ%XPFX;{EE zw;nbn8w%uHud3RVRvYyMsji6^J825fa}6iW2pBlJmiJS-1VbnCn{1WSTRrMDz$TtB zP+=vWtuj*qu(-*W;k3^HB-pvbtADE8Akj-Z!c>a(B!kG{>Uw<@*KBoE9zfOkcvB1y zFD}kT$Io6kS6PyHeVYJ5)V@=p4yN_r{p9d`bbfr%Wd_6zr)Efyb=Oev%hTgekIy`& z!s0s}nC|dE(~V1nX+9r)dieC^F_UMKxI`QdB;DMZ;8!o`iKmlKk4HyO=?|l4C+E)& zFOEK8l#}Gnv;jv4>}$@oGZ!5=eLgxnK7aX?PhVl=vcshCaY5TX*gezk>>+7}5%q$0 zsA96pmy{gH&+I}ctvYtZQhp+6Aoxd)`vsqP-n=uJ<3&n|Ir7|{s3dVow|2|C1U3nU z#}XkG8wFBvbLUG!Ja_&ysYE7~3+k)kA)yFQQSfx8^Rx^M0A%2vt04pZt6P&r%!Wm1 zItz!zbQd@v<@%sON+*+Q4;Wua!qcLZlMMq(?mY)aiL<##J6j=daUF?Eo0)xgqdp##&x3W_P!X)$%5v zgri5ogOnN_fw>%n14Y-R7@$ZnYy}G4VI9~hBoK2w!vSIoevL=yg6+VIfIzEe36#^{ zi)f`?0yYW=)tI%+SH*@ety#-)K&r+-sacO{4HOFmbZXWi{qkxwo=^3$l|nP)`I=h^ zY1d&84isxNytxR;#xJdgF9ATK#)hK0l#BV@EtgJO8>)f;l^TiY{g)F-E0GcaG-{@D z`OJpv=tw)2EfCOgU9+WHe4VdvMz*3?TF$KiCG>a;6=W?WsD?FoEL0%0gd?E>BMuh> zj9d?_`SlB2Z8b;q>OL-8bxAz14S1j#wrX}Xs~fnCVUkFY%Www;a^VfIA~#)dr;>0; z<4#J4mBIj>u(4jz@e(qH3$zs<4FW=859y9jfdkha8@(i{FOHn(D7Y-=b|tTd;d3)` z`WQZi0cnMGL?x}j8|lK+R;vLlVL-|q!qdgNszx_FeSR@I{^`Z>>G{d?)AU0a!2&(k znt6Wq?D$PK*{riNbCsO&w*mDpv}RC}vhLn(3=R}sMeBZ}swS}fJ=Audkgt@gI!^g%(lY3NBQnS1!U z+yxVAPebn@f~dR8x^kt@Ou_}@DD)k)mFEr&^aOG=gOE{7f$t^#$ zZby`zz0Op|2$N?|^V0_fUBR$Z_9s;}WHkF5_7V*A++3=_tW<&4urP(!n>$QSjtR2v z<=X&R+dts1cwq>;17RN*qy-bexDfU<0ZOnI^fpWNyyTwfm0+OPG(TtKU*4HQMpM1) z8OxsLr-uo$?xiw!e$FVbDY$D2PkU|WCBp;BrbVPaq8cicZ%2cEeMc1^*ZldYo)%FM z7o_diOjP=cFIl>-L>ZsTEUhz5ge7g;3por8>aKO~QdiZj=pMW4JQ1d_v}J3dfuNgy z>=G;?*vb+f{@bzx6sR@n&hWO>)8@GY13kCghATOv%Sy8@xbTJLHrmQD3=G;$8el`_ z2$8;`$6~|kswWK)#06}vfsq>mD;Wh(uR@L1hERnAK5hWY@Oe$w8dSMG z($P%E3N=OxMm7>Sxj|>m$&I?$GfEgMj6`;V5a8qHtm_}E=~LAqw~CcAc?lO{T*JoU zK+@fs0$+LI3gL`zO^<~v+?ZmBSly!oNv?Y|0YZYojfxL*AYvf2ja$pmi5j>k<1_2F z&||9ft4li#pBM$;n`xY5BO>JJ4tVUt=coLVN0I?=0&GW=C<%hRPrs64na6?LSfLRwp8^rwuCxP@kiF0@aY5Vl>jb4e8B-E1Hem-D z0}T}2z*3N6U=|3^${iRw+0r6{f${E-pfkv>9d=&6EE~E7D>N^fj_oc42GdPNs($A^ zSt?9L5);t?py66wpi$MhAPKTvMQEN%*)SZCaxYv}q}1cxwh1V_a3v;VKMwBN$Q21P zTm1LHg*hN%CKU)|@)hT*2gSwmPcy4mC zD=Xj4ycBBAxFs0^0U>XTaR_Gbfjsz2BK1A_A(shVV_4_g9lUPG@qNe+8 z>=Yq%=Bcw}>}p&cl#JTcxbt3d=Rz;kc2J<^I`6VKli|@~KH02Rbi{wAi}6iNRi@Qy z!6UFj8-be4OfG3KTGxaKrfzHpCGdylq|Y^rFw?wgU_A_warH?tA+Ow&u83+?FdWls z?N_r+!BcC5Lpq^X+39uc&3G1+S1lB{x!acWfyxSIi$J)Mwxgv{z{uUV97a$#_5o5D zs%S?FK;Y%t94;@M#-scxXgT&lZt0OVkGgmaG?rY1! zC`~)*xq#qlA6l1-#Z2v+a}$_*LH~L@r$?=Z(@Qc7>5c;ahG|}bM_{s8W$&rh$^P)R z134-<+mWUEuUGWu-l~qY;JKiVq&--$w&!du>wG?P(-#B=d^f5k7Wmm-zX(6ag)K;~ z=*o_ez|9UM*K(tH@?tfmLe&mM!FuXO(FO!l`yDII)I7#p?3Pu0HC;8ANopo5zyx1A z(Xx)OH>GWrD!8rEiLeI>#`Y1ZhOsvV1P+8QB$=bd*7!BN>^xcg`N!u>Dk^s z&GH4QWpbFkp=#yQIVy;6H`5j3g17w&Z;ZD$ZEQIU{HvXbd%$4s>HToey*Zmi??PivJQV}?E?m^Yyfu~Ta_7b&cYL8O2A;H#m z-W608`gS}#y2&P=kw#FLY{;=%=00-=g;Z~mZg2Oh-jiO@hibXi$ysNRDxV8PhlU~3q6R#qKovQ5@D zQfs)C!*7qez^$Mceg}3X8f0f5;=xbX@End+u{Mf>nB;t>m!vi{o)YzrP*EgMv;9PY z5A>Y@MoZvQ(^6|g%b$%T&52;ZuoL>wFwCs#IPKzAK*&8lys zNEn;KUh9HN&#ibE1jxhoPjf0uI;`DMkcL-d5V&01u-Sn$6WZOLv&EB`&<+HI>IZ8x z&wsJufyl&zRU&|j?L=jRb+ni%lavDMN0kX2w4?=(n&{z^SSWfuN0Gt%-&jeR&AhQ2 z1q`f0=(V~ZeTM*g@fV$X5!$}jd+i1opdX==Lj72JCV0w|LIW%q+s?!0`4gBoQisg_ z=8a>c+le3*YaCFA&Lp!{n$(djVp|6Y+1mH_>RDnA*)#T@l)Fklp)b^Wddi<7e!;^Vm{_Z<~6xZ2ESb1FN-7DYnc zX3=vIAw4^oSL(LiS4XZzr@TA-gewh{2oy^rE;!o`@@CGQuQd30Kfb&7W9&eFjB7*> z2{O;6`$gg&`NB2tC+$y`uD1A2cx=Y_{&Vj~E2>7l}loKyz zvP*-g0^tU+z%Ag(=D)`xw2c$NoiC~G3WI@Nz`15V@D`2KPa>8VTO|Q+tl<$@7J}sG zcEWMiLBPTPEL)EskJsa2u~^aVM)R%_SAVG-{54P*uz(?1eGz!=K`N^zPr8c%Isu#F zg?ZeF&MuY?HubT%#1h&RQA}_R=(pf^&c<%9%Y^z(0uAN?nVM#JSGP(5r3u=;`6=KqqiIzfcvW^o5{Yy}PN71!c*4Hv6RcKuscx zz=7nKeW$k}U?Qk5e}7>JUNI zt|D8Q)K8Bp*B{alPHTQU$6&zxF{JX_k+*#y;;rOtI(;;pIR_Ttycf%$|K>t z8=O}E0|8V5hx?MgYdECJoUxh*i9q@ner0F-*r%*i>0con(6TFWvB|Bnerz%?lG+KX zbx;WSJPhN&AtO}=8Up~4T03EBj`Cd|YSkVX**dpTK&e(XW~|r^HL`f zH8?kVEV;9gX(sNlCevVs}-P8ERYe{Gz@<*Z4ni)`z|d8+ z!5K^|0yBbFJ(5OcI`CweV9PeHI(h2Xi`Y7o>a8v`)vFSfl`hg-yVsR$!>UKUwF874 zMe~xp3hu$U$9Y+zfg#H&w@3Q;&2mhK?QE% z!*^}xa(y2v;`FK;^-a~!W3zYBXAeT);9sj7xDcu)xPK?HZm7isTj7jZE{eA~W5V$0 zL#;jG^uFu^J!{2gN@9DW9u$0~Gi0@x&~?JaYM(P?hY7aKom#&hck0sC&(g?kCq1%* z1lN!1bjQcpJX__Hi@Rl3S;E=8*sRDDR(HSHgpkJZg`^v?!Jgfvu_b*nRZjn_JX^h3 zWu!RBq&Gg45jmL4x~QxNtF+2bgpXdZdntA=&VRf+g(!tR(yxoJHZ#X#D|MC##UFzO zXBJSeYiTCkZOt7uh9rl;zn4(=bdhrFBC)OPz zeDs24Vb!g}va)RXny>dLpY%3ohgls!26MYa5-ri4E5z=9c6FsLq`t~(B52aww+_@p z(BLkTx=|%lqqKc3*rU_~$gP;)jH!0`W?gsG>5+K=xfSziO^AfXo-2!MS>$$|f$uJ;zie;>M zQXMSv94=nxypDU%GIpWC{YMggL5~Scsig2)*?Xhc`TB+?%WQKyr;@Xy@;Upf)#8>Z zz5m#s0+G@|A4T&hoLAN3JlX+*r)a0FK2sa~B%_qik=ZVp^n2VX>j|JAqSG7AJE$DK z$@h4AW0+toIt!D#Yw{VBaF1tU0|tH~uLISpoEPdKO!bj;El5%^n+atK@)Xq`y$%ru z=!wXBE%nL1tydQooL$|aY|`?Xki%I%F6fp*U7nxRIkkIt-cOMtJF@{1L|yl*`&l+U z)0v~i+2S>&qR_!^mFst1*sPXDZd!7#2M2vO&L5|5ULG9J7|Wd}WDs{Ze~b7d zas|Fnp>h@D8}7UST3<8jQm;2Du=1XG(^QFLgM38lyn*^zE|z*n>KqxwBg^tgCE3vR z%%Sqc28>zhvTR5Rvc@@t2%_xz1z*k8XKqfeG*`a^Lpwn?GWbWcF}=ocZ0aCHRGf71 zTQH3vL#8p}+Aan0@oYxQjtuVG%juXcI4N=Yf}^@~WD$pvLELrr*>i}0USBg;dQRxf zoI`^;OKElHu}|HvsVj9n-HSFavdfAS#we>)&GJOUT?*0+tgfUPaBE4c13T?5^o$Oh z+I>sff(2#Qu&bTdb!LY&;km1zZCsF!7)*REM=yPe4JPsS*8mRs;sv=IjJ-}13l@~c z3(~r}wciEFfI(Zl-EdRIPQ~bZyWz+n?q+lChJ+rwvUe+bZ(^eN-BD>>vY8@v1$SMX zJ~}$!rUt}1K&iNlwbajg57r72ROOSTD39o!gQxdkygT|-#95hu*e>Z>snV!MSGu;T z8aZU~nLN*~O^DshXEr0!AF|@um>S~U(Y`5WYmdHnM;jNU-MqfqrMD}XZBv%s59vBN zcBmjMR(2+BH@~_Ym6yiYBQBGbPND3jslCn^_pSb1Y>;nM zf6tc`jHXjeG29K1JuUiDe<56uc7xDtV%#p(ExdEGl_vB&6ce)a!r^WsZgS)u(J7C? zfnrqQv2TccePIZ(!qeT=<#0kb59*7*CJxh!=<%I7kJ0=0+^wtpWOd9e-_%P;^4nr=|jn()?F zwxhw;VbXgJon&c)f^OtIV$qGdHpGY4F5>l&TN00{w0?=Z$RHjuek_SI4}(2J#1?ZG zX){z1md$AUaA5Q8bw=Bupc^@;TJjAP&=4O~yGYilr@^Wy@YD2(PRksc70!$X>5D<+ zZ)ma>I0!@+v1Wd_$mg}u;Plpv2M3CgUEt~XGMf$A6t*X#coz_RU;}`l8JUFUD|_bJ zEX9+sB}*F*B;EW(YpZ%nDI%2l842l0({JQERTvXwBbLc?ddGf9i&9lxWD7=YnTUnS zpg=7WuCsF~JOkGrcX7B*tbC%-pdN9xpHIfK@#04B8R<4_!1CH9Y@UbPV9U)0i=5kt_i-^!oF9Eg()NX*mG`u%IlHwKv&q-PNnCJ!BAf6SXa~ z+sIm<5YE?kR8jot;iKcHqw|ZOJv|;hK7Mle^63S$a5uu+6NZe$D=VUau6#mai}6eq z#l2H|h@FERZ|CIv@Y$o2k6#{M9FLx#KK&W%)PLA>r#v#~o?CcDI#Q?4PmfuTr1!NG z4U@)4Cr&z!(Z%7Tr^ly<&yGhgp1wRE9X)@_y7a644pM*(I@qWP^t68~N;ixQ;*CmI zf4+aE8-NAnNbvbwm90`o@TWSB_83XQ1)X?il-bT^k2Lr!PY7;=M;9VN(nuRl){rzv znuNcVKGaG6=Fak4lYa>h`FHAqQH*b`3ne_d5J?HGpF->G4fjq-Q$kbBAq@`tokk#V zUwxm8xP(U+A~A{c%_TiC=32qk&_AT;z@n`ydcm zmEMu*NU=l&(a3??CTcm@n8HYZpsqs&;fQ0{{?vxbxZ6%sK*6qp*FDt zXST5W)h0G72uIv=c5efb?ey-s03c{K$@NoJv}bBAMVpYwKD2ZI6@=Z3{njb}f^4?U zcy_L*o#RrJ){$wk+8i_xjA;k!)ny_kvN*gi4xNWFK{j$Kf4QWWEHdN2Ht(v{S$I;rUXUOY2LOV7f=~IAwJdkuVzOFWNDt<}t?hT)me}W&6$J3;n->$t- zGWhOqeKat1Px_H>^wmV3n;=zVyH;EBEHOK<4IHO?XX_lO-KzmRDY)YiJ)%l?xLxz@ zgzSMs+Aa9I`p{Ovz4Ld$!QVYMQEenjWh=(BV))6psOo;y+eOlIQ-cdpgbUKH_wZFt z&km?tImd4(XOP~jxIiz4OiQbD$QU_>-5bc5p9-VMqOBF;-D~q|_ZrDa6O*pIC?m{2HAnxYLRgDLUUoIB2 zY|Jk%O8qlc%k60c7Nl$Ee2}zBkfAf9mynuv&I`cNfq(0meU)sQ+ZfI0iV~YQ(&}&( zNc#a`A~X!pmA|}4SLj)h84pBC6DX4P#ZW+J4)5C;ZtlDi2IbTCX7?;{JJpKEIPrv^ zy(jNMwYu;a6Sur(C9L3Dp)l~=WRXZYqE=YYyRpZ^pqC^Ju^HvL7rR5scH=2y8z*bH<_+=`q`iHtm z>|W#l&;2iXAuDwGsB4!o|B8(7H*faZMVke>)NcP*PYO(ePk8QO|L5T7Ks#l?+ITDb ze}DnH(r(M-4e8By?^|Y&1G?j$0W0+r)NT3oeBspUl?I}!hTH445*3tPzj)Phn6fD| zp_0njmLd&oSFLy8Z9#*4yWO2~msE`mMc!Wrd)VDQe00MNa#vCcj)68%nDnKt@~YkT z(l?+W+-?sy7L|AM*ux%fA%nV`uwBU{C~M`_osOo{S+Gc&wBUM$(O&L80d&L-S5zRu zjx5T0D{S6KJx*2A?fF-@pxtij&^urB+`u%Sa3f+5Q^!IE^>%I=)4<~L=S<{#aMSF7 zLA>2bPE}#g-%!Ci%DkITxSrp`NzR4u+KI(-Ol9G+(RjUf9`xKxCpbJh(azsdAPakR zlh4=wp0x*mM~DJC)6Uv4MbOw{*n_oGqJr|1R>v9had}y`bOHLx=K|kr&9JXd3*wp`=CxYDd*AXcFZ5qewkG3R1hHZ zCl(nc?qc}JL~n-6yY&t6@y7jcgoML1|%&W(j&QVDzU!Mi)8duGEdI z^tQE(l?Mf8_C;_ruvHY8Cd|;d;1>KjCTZ$V!*GUyKo z$~<5=;AAI#yPT?b9fFEWdN)UpXjHlCO{Q(htv{pAJu7KINCI&yq=K*FHGB6Xwvc4N4RKnrD+{6hH$%e*$o%78m{$5d zstxM#z|q(5r<>bsl~4Ad-$O|Cyk6v!&t}<0t+kMD-w7dsmuao2TRBqJYmgJdJg}Ugh)a+UeBF$cs+)01#ODy1_G4?Sz(ey1|11 zBm0)InMZ2G9%qw_VJWD@yGmpoAsd?sS(;nfTF5>u2;0TycGKc` zex1+h4Ch;%_M(zrY*g)z>JR5iLiKThe-cR}-{)tVR4t6)GXyynZ!)Y&Pmwlxti z8wu3>ql+c4@@;PQ_9o@ZI0>fGdcyKy_259#z9grbD~3MFna*FQL@bwQt0R_3jwMfq z2&&_)J*eWN=BRQ zZ!hn@m%W)}<_YV+|NNb;eg37t86MtV=GU9Wrg%b`Rg~%UqwKCYUag$hGNsSBS6IH0 z6bFM0ziJt~`is>y9iHZEpVGPTAkajK0o2lXJ6yMJ&LzqpnR5Ta>XxQ7ElExz{ z?fKyS#~DTZ$%9Y1us<2E=5!QbjHHEg8U#~|1#-6kS&=)+SCb9Z%qDsn`CaFeJAcrm zj;01~bx@%8N6sudB0DOdWj-INr>TjL-9AXz27s0i-JznZX8C-5q%R_#F4j-flSMu& zsa@B|Dh3FeUv^~m_|f5u6Q9$IG|SCu9R&W+B`{u(ef;N%@T-WNZk$%QzU=_LblsM6QavQl#sv9%-;LuRz4qTytjdm3jr#w`a7Zf3D;CCMP(oz-Hhkgff#?S(9jya{$n=Lu`8b&dFn) zPnBVj6#*MZY9cmG;Q&knC7Q%9D1E_~Pg+V029&<;Oy8%pt|oW1D}}5bX$+)6L>>mn zxEkkKUKC_;eZ0!DIn{M#mRBN;<3fOnE0<@BSK0Jr{^0!{<>Fz0jJrKNQp-x6sXyubTfRFoTe9Q=zM8O zor{g*7eoRvcRy1dQR~iMc8T^g4geZ<=+4OJd^5SJ8#L(yZjGXGLE?0tEvB2$NF}9X zgMf~|$`tXMd6R6FIT#@057qkIypWv*PN2zT)CjI`Exqz(2@99zt$aITZudy zwOAnM4xD)cncOWQgE7&-c^Dw$ZnQ7Rxk3iW8Qq7z98W&;HBh3BHi!dKu7qB!7T2rs z?JW`W2_=${hXFFKRZXgJv7uP%(QHwKCU+teHUtAo?x39?HaP7P4O$Qfr0nDwrLE5o z%Q0@?CXGim=^3JAH*sq@1Sk3`O?UE_dvPao$$ zetKvgobi`gqSJ>90V=Ljp(^$7Gf8xocMw3tb?&N!ki{l&dQRlrW$lB6YuLY>Uus{j z-o0q2@P(4dunz-)mTODDoYU1rRX0Ozs5O>HB3rr+3e;Tf^OC}L%O!j09Y zO=6a*kcuxg!68N{H3tNILL>QdPWR4erqP=wMIex#ZX^Rh;AQUukW=+@9eebJCGcAa zg%v^qGy4?kGV?hJ4h}6j84R!q=?SpkhrSPEmFza#U#H}aDb4K9Ro;eON+ElrYL`C^4am}#o@)t^V89@!_&i$kI$G3_TM)LdyG8ka$rG5O!1zJ;@&)M z!vs=q>WPCnqGTl6TX@-`{q&@c33_6mg4Jv`dY{~1p-N?fQ>POCr20CTu^EH`A6J8` zLJs-mhAu=Hom5vuO_0bZq!vR2OFK7Cb!XS(!us=QJRL9TS{R$ag0ekAq79(nYP+dQ zuA5tZwU|_Voj3&+tDI#R4*cx1km9E-*3;+oVk*5X$|Uz=>C!KA#r*s&uX%8Ab$WcR z2^<|l;rKXUfHgIC25by=xL0> zKmO|fQ6JNR_xl&CP4wM~vQ*8E?#Xx@BYwO_Wj{msLwW$MN6S2&|3B@DR9h@adS?*OfCe@`VOQ2T>N z+0FP>P8q6tSV4x$FRgOQrud~AdDdsauvQ`s_W6J{y*)X%kOq0NFs_TidxLW-V82}C z^L0W0LWSVx1x+|wHRIXf@#Ck1cgDrte3CB)s?0t8=WnVWd~qkh&Gd?!Imh>wo^Epc zC6zOMQ08?Hp5T=W1^>_Jn6jAUW^pfR|E41LOnL$@no`&_(T9lTSiIX_H9e);Prt*+5UihQFJRqO*5b3;B~&f z89W=$?+(_B1NG0r;bcM^$>4<%oL<*|Xmw(_TD-X%(b6Bg_5TGK)v6DbiYwl8n=KdS zPLLYx0ASlM9Vu9vW`o7m;52(Z_|z0OCOLn@ZEI9eson9)vS|236kO%%#@67H;)Kmy ze7^nKxqfW#>Q0Tqxh6&mboT>iq8J&k7nFSRingpyE~o0i;|ium$Q9c5_YZdiFrX0C zo4ayV>6NZGo6SmPR`9wiVtdSDrdtFd{V#gMLG#;pUaHI_nz!_K=f=D-Ggj?B`d910 z#klxP&(bfJx`-}K(^kqyTTq_E8|?tOvgPfc8(!vL4WsofMR`E)cJ|MG4|j&Htrgy;Nf)+@yxSUkkzK*JpDV79{-D?MkGR8FX_NIuEe zgOlfj*EiXG;IDqg`%BE!CnS{TK^L??*XNknH5$XL=RtIxMzE!R*v+UBnZ_-o?! zd*D{7Q(JkTrWw$x?d?|%6_cCQVoukc1}E=5uM9FhvwmH(x#fEL`^_XO+tD`16%sWC zYuu=S<+XV$;b!67_!KDI3S~(jU(@N84w%{-r&%wr>A*w@n7ZZdKi5f;>d)%nQR*kX z&W+L~9(4X)j@4@iwD8vYr501Ooy`k@v$~NMfDS6416`SlR6R{*&0#?9b;DtxAAM5O z_UmQ0LPWh941z;v7oHkt`)2`~r&I;PY-BG!enfHK3Hhmr^zV;1R3u=$G{xFR8#)8p z6S{+=JZT>}_E%V8NYJB^fkJO)O-;v|O*SD}LOboEh4P&SUTFg4Eh z>pC^RgjaSY{pW!`8s*AZ)>MBFR4e6Sk7EbL6rxwPz5Vq=^Y>~H-y8o@-DV~IFp&fe3OcMGZ1n4@gYp+v`>?5f@E?>ti78~k`f?ik}z`?7&n$Mn%aZ{`RlcgU{r9q+LVBSd=Dw=bJR!XS2cWcs;qHbBz9vbcmtn47JB< zcK7ap-u@e0-VM}7_^vTBmvlfTncF|B>DC9|>bG0e{`PNFHLg;J7p6OkGM#g>)q0@+ zQWcjQA05{l<}kb^%V@4dWcB- ztw~F%Y4!ehS?>fMsnDRk|6M+4<5@Xu1x+ea$%L}~GISO>5swT7I+YyJUn_!N4iKcd z>+%z%LbT*ZAe!DE2I-ZDrr)^ST#p{U|M1&PSWlW2P>9S2@0Y^bTp#E*w@0OyV|bmd zN2-w8`GeZa#-Ifg>U)o=?F~qZ&&0yRzfs1KX}N;GzCr7=Ju#O z@~D8&hVF%8=kdY%X1xB#U;W?3;F7MG(O>JFAdBXQ?lW#IH1)N;!V?o%95$ z&Fx3e?kG8RP`*w%DDG}A7c(92Q7kFW^R9~hX!i6kgV&4IX9IfCfHte$7=QFp58OWb zeEY~4lH>rSI227cEihFuo79r#K@uZfnkoOfu`(!BK|!M8-GP2_YjmmohDL%99(tIEaCDoa~%BLF|@H?~5Z?r3UJkVYRy>U+IS87|`3H9NJ+;T~wFjbpd zT=b>w_%^2%Gc}x)okcoZiPd;6%|be*VxMMjFO-whGuO?UdiWu?N79h}*5}*5J5*X{ zPIr_QQCjzF(l`aJ>H*#ACQYhTkX$NZ-d2{`qNcW!p5)3^Oa0V47|C4QcfW3UbD;?jNLoW(Q-!DOy@HhFWDR*~1LSk^ zj;t0N%XSiafpO0Wvo&t(JA=;(z)yAw6DpMUXp_&( zL7gVgkyZ$UV`Oe<;NMm5IATes*;gbvjxBJ1W~x|JIakW2=p1XB+J4`}cFjarbC`m4 z)6Il}KeUsOYiK~F7~dVd$W|&0pb{!dw{|&|X=Z(~JerS;A;hNDqh`sdb6nX%#Zfy0 z4$Ahn|7H0H!ulhQMOkz6J5`WV{gVL;=5rJ9fofERk#*zSZ<(W`;lkY!_79mR(Zl!8 z9nOo@l1yO6Ru~zHiRqwhcKbVqA^u(I9}p<5TL#_98&Wn%6Iq+fpKpI1eKM;q1 z1`f(sH8RE!Bk=Kkx@nX|<@#05k4fI|yzLsbye!bHd^EvX=)2s$7|* zz5eh>JMOd!HE95k^=U{?{NFM=#^{3&-haqsBAD*M&E{dLK=m2>KsUR6`m9`~%El<& zego25lh4S}O5e%4__`fsJ@oj8_04{dGGrnpvt&VfmxU_8IekDFb2ev3=@AvL>w z_uSk7)1p*IyR+3#cK{EXR^)dS8-HA`Lvht<*IR+S(mn{H0| z6O;__Zs~G*mjtSU)MWHide^(8ob_Eha-T7>AATpz1a(BHn%y28kJULGwvDovG5t1k zqgi$nkjwD9-{z;xt}=9HplWvej`B}w2ZEYa%HKv8{q!(DQU18+FE5VI20wg$a%v0e z!TaA%vnEPMQMo2`v)e~>LE`xAV({eb`Ln_K@zdj@3w@}pM$nv=G-sNMN-LL6Z7dZg zy$27!#l1yoq^FzReyF^xbR37$txQ^_a?~j@o01Ejl1wN!McGX1^h-*T6a2PwG*3iO zHM<=h4ql$pEfaOhDe_yoySY+FT_e`gwtaf??BwFT=TDxTAJae19@Bt7`k5BF3i{6J zFjM5eq?MyiHQDWDHl31zYz%3qBZ+1OpQjJLP0eoq?C9cnV6S&GOWqy4eDRo4=-(YY zrkO&i^p-|^@SO*J=pNnd_FGB|QhKS%GAgrljF&?n7b-DL7o?5KRb>t`*jFBW=UWeY z*bQ~F+aIW$6P+wTL#2+Lr19wORGNWmV$!?ybWl~#3zjp$%8aWL<90kh>_huJ_zpF@ z{i@pkN>|rlmS1I)y9s3wnRG8cmLGA~bfQJ_9cp&_KnKAOF38bL*?(mu+++opnNCV- zdP9LjgLC^X_gHl0#`m}f-=Su=A1Miu+d{>;GcvoD%6&>3g-#dMgGqj>b)jaR@(5GO zk@C-s;fD`;(SfSj?RO5(&JKTOj>*TTFQ4HE`C9vg21jSdv_1zHKYMYkC!f+H>Svta zM@i-wqBPh~KBQ*1&v)J#9e%hW{|P;wN2Zo`>S*VH$%RnV9zRlXG}v4ejxtUjb0W?P zQiqKAM;|0v#4d5w?Dj8BO2&Zv7G>$oLTly8ct!r*v2yGyot%?Ke?1@kVzbcc9r>JQ z1%(P7+vdSX50Xq$k0~{~{hINq!%L#aS(y_`wq?M#QYRlhOrn%M9@Omi{Csn1#?u&E z>iW4lljwn_t(SbJk5A4oPEN_BAP1xx@0_x(R<|kvt28zAnp#lSP?&s@d5RD)=IKWd zX`Y@vRSxF??YZPFSHTD6s8&8-82&n*^I8RZ=Bm1@a`Tcoc}?$6TFG_OKH6eU&O%ay)SWB$tK^zeNra@KJ+I-GQ~+do&LPzSA% zHpUbkeNTaGSp1E?aK;Jsa!h#mJ~d04+&WjC9iD!CtQYLr^Pij#RH8T4MK)F9^)5=w z`ZcWwVvVP7*g}5z{(}SDEL@$)x!OP+I zQJTXcKL$K}pPHp3zm6#8S2|DN$2!ufwYv)As>~3*ipwh%N|mdBrwk31Bt~jcPfBRV4ON8ltzVFA4Uz5%}Z;9@1acl1eA5Hf_ydW=Ywyj5iECJJXFnYzi%=hE>4~u z)79>0F9u4fYx$Z1F9tfz>Ak_}^9%FGGI~#*RTHkqUi0vS@1$`?xiqQS?XzQjEtk@# zD3qu|ZEA@t8~2iYLHc}8OUHOcDFChVgq0>$L2;!I^zlq5zK|(GpR)z^!FSSZksfW* zqu*20)*Sr*@mK$!?I5bMIJB&x?ejTZLp7I+ImeIE%w3lwHM>1|argZ3qa)lvQceN2 zC$7pTNwgpbD&t@MjlO<7)!MZ5B~VA~YXH@3c<_E7d-y}u?Dj`w_K+TW?>XJNrk$Mb z>{9rerUrT3*3}g%txU69au1H_^r3R^viDx)v`%#o$-O{+L$d0aoF9CU#MXCpglcv> zQgdOb_H&|1Qc z3KdY=CGW_CG`@9b!aSg6x8ERN%}Nyrho49vpUB;%udSIe`Tu!)*X6j5Bu%i|Y^STL zOAV!m z#%%ZRJj4Fohu9aGC)w|F_lOg5G64j@gC4V<5)+vo9v&VZe)kG8_1v(^`#(x!emK@t z#BrptEV$I46x+w^2c1pG;Xt?a;U68p6p2N!Zek98YMpvC%@j8o&*C#=gVJg4e!RQB zvCCl@$r&51NyV$4qN#Xddcxd=2=bgqo0I9QFgB6MKymx|9CP-}H;lX<9}}oh@^(G^ zR#Blw0oHxR$5kCj(1&++x==Q^m>RA{YEgy>&s?4>a3{=BufU|tcsZ}sC|{`^UUA8K zhOEb$lbxK)!N#FFhy<6BGaSgxs|+~!ww{rN?Uo8<-K|Wt3bRYQu_~~ zOfah5RCaYa(slyU_VzOHg@!^~6JrvaB1$cBP7S^RqPD^w6ZOc|DkB4|`$7i)l%*lX z(*q4!h{>WBeN$3N%3!4mFbTb-WV}-ko>fT&ux`p;D-erv!6dhr43=_;_=WHb^S<~H z@6k1e&J%5V8&Xv7UXJVnSocVkLWEaT9bCe7+D0C`3I>Y~z+1YHbX4`tAMJHEx|;}J zuJ5$=epUtzxr!;?ll7=FRY?J`?tc6js9hkpXb*P?Z)`i*5A;+;mkvj=n=&l2z-x(h zR2YF^-97V=qt=b{g~X4fL3Cx-1C4q7veVLjyh!do9J0PM2`R^Fa_&@a6~Vec`7@_X z6)!oRHifi+Xb*298M!zBLsY0XdMSqV7{Eg3GrxmRl2EmuqDNwycoHmCcZ2;Anf{Dq zNr_@Y?Dj-uHRH8{^jJMlSCxtY>n2uYc7nvHd{Cs=VDoUg!Mx{*f9Z9fAT|I0)<34F zd^vXO812^4DUFRr-kzz)YfIBhi-@oit+EA;bwTadUx`ayV z3pEqmXKkGu3Up`=QnhaAU%aziLtv7wc_@Jgg#$UJIx{$f$pi*1C3{UVvWlDutK&3_gfQcy^@zqaDQb*h z-BdNOi-deUmoWEvryJh&h)?M)fvcxgfQ}9ME0U;?X`G@uRu6kt&Tt%H-O@LbEfHzN z)Jnl>U?}h!YC!RPGY*C~635Gw4_bVZ_0Fafhv+RX1{3qY5H+bFUeBrbAr9snqms&j zavR4;;$jVTQwm0i{*#^7mKRI(OyRPL`kx|KNzT8hC%p1Djx#_1&WcP3)}$z`4r}+& zvJ)9Sg0tZ#YcZvoa(B;C7h|(&eDYGXID&Pbr5JJg9azy~9`r>+Rbm6Ks%K$*vK||_ zdZGa9=B6dFkWzB1bszymi0-33KhvD=iiBM7B%(loSro{K(FAh5?!+1lC|Bn-jg>T! zgEWcqY2Obb(St2Ov&~V z{;Zb0UX(v8q$XImq!0Qk?uNb~YVL_a3VI`DN?7+^RL1JRi2HQ3uNehU=up2wm861r zJ(9H#aY)t$$a9G)(2AqcsZZZ*S(K`7(|L5neTMhZx{rZ9Ok$8e_ToVZtMi&dwgr;Ss=Q zN{I?yR;?YwK|{$00TDODe@h&df-R&-!yf3yC0~^UnO6flkBm2eLIo99NLczgtLGIy zisnbg8v(xNlW|i+;6)IHVoWNybJeoK>q{N*Ua<%F+ti~U z#ho&R6kG4uN_DNrYb(UXC_+o7&)AiYH!i)bO(dO^D=qZAuhXt%O774rDOO4fs@4Fua_rGlr{kS53XB zs|rx_{YAyN3+GRpnkZ_7C&h65GV+PWZUd~lrd}tx;&$Na+BF5is?Q^XV54(K2hiFN zia9B?1@CM9c|)9?kTGRSwB&15)w_vGtBsm;4uW-GTE6L!6cFKAuv+DP9oI&s_z7I$ z(CV-QwL2gRgIhdhv5A^|Min9wtb0q2&btQ_DUuxI#N~(zf^{P>Abi~nlowJ&9I5#4 z<(2uxsg)m#Z)blb%`7C7O0kKWoIzFc&>8ffR~bMhHb`;SK0mY@PzlesNFG_n2gFsa zC8kj{1_;CV2BSA-#op1nIlEH&UXGxfprHF2kMA6EBvFZa%m)}$#9b)!fk0>R98i8J zk+o9+qVbrd#hA>1oR*174Sij=hh_9%&UB^D+thWEA5=%4S_?I_ur-jxO@+Z^9z&~U z!4+deNRqi#q3opy=m`qw&sRDaLeSVlpBUgH75$lL-WkFpei+3KCu(xbRk@gMx%-G! zvdIsa)~m95)6wz|^n~)lLVuPZhs@PK!^G4gjTFnwO8hTIp*-oPI8R(k^kM>F-HgT6gY$!UNyZq$ z#xUO4$;@`31m5rN9PhGx7QsaEG*wk`mMp|Qvg*25tc3V}7S-8%7>_4yQm7+(cYE=d z=t&YzDBq&;OFvS2JmHWrm3XLn#M7H(uZ~UJt;aQA_)Yt+OeWw zL8!T*5V=1<6&Jc~fn!9pg@7Y|*pc3KFr3qu@6O2OU=OhF^;myjn|iP?yNXn^g{1gt z?9Sypy#(vNMkf!vyb=ZUO@3Ih%47yj6$HytZHl$JzT2JgdbqRV z2PIf{Z<*M@5bPmTEN)_pUBSMf__gpmUf9jhR1F=*SZ1Vv?G2op0+RwAbzp#)btiqY00->`7!cW=-F-}-Rh8aG*Iu6JcSlcp)(eQ zJro=HJLM9kmZ&S}!yl515qNAt)v2V6-Ki;ku!=drx~0Bw2<|0W**i-;!M`9k}D0b+@KWhRQJ$ta~`i`vBrd#loIHX!51c2}SAp zk+*3qy+QjMpucdtoaUKgd?}%lyKH%QV^te`X@)zhptU_C@%NeSa^9&By<3w(RS9_# ztQ&pMLAyXEafaSa(n|r}VI7C$O_ShKO5g3fCG&Aw1ELgekPr zVZcJ#l=*sb{R8C5^%xf~ntBO78N-Zo@hKN@%Tq=4=BddEaV>2SVTR(~;LB)&#uyJ# zX9IEXvSQF(8~jEBAz^~aTlLs<6`B&P>+nHDvC6Pid*DC3t6#F{G~X{m);EatK5mHp zC!MXM12XbGpM1-h3|y9siL;>tl6IN%#w~>i;^fFkb8NB_*1Bi}vAVC3k%qu_^X3u= z`dsL9fWv{wRJ3+kpj`UY*mVUDgcwpl9-ghQ&|eYdPw9D#T#D$J1Xwq@jG-JIn%EK5 zVUL!s7ZEAAw@3RDFcdk{7gngN2(*v1cu>Du=GpGD_+o=K80FIs20+6ZXd%GTGyUGXv>%NW^Fi8C!47Tzqe0rbYTY-yhcIEpi^tjS~Npu*neKmxy z59Fi>*Ho-q(HJLLtotuaj8U5=xQbcn&jx+=hSBJz119bY-SZD1=%4w_3j}hLV9x0nDt#6stWq#<>;IQ z>&8S8r{jeTs)>ALW3-i!@#E5T*9Skr4mg7Cl!`Sa)m537Np%x*F!fn%im7YxUeRm8 zBu=;p*~?apvdCofUr8?h_^q03?-V})>xQhHf@nMeNnz#%_O2E3WsMz8b@)iWG6_2^~@C~O& z#~QwX=J>nl=quEOW>ZPi7{7I=o_g#m`2f~^vmDx~Y`1s7c*1FVo5gJ4!zAtI!~(;4 zGu@5ZgkIQh>Et9GV(ZIs$473}6S%72Ot9{rb@`C62xXnHUYmV=Fv3(q#Hh>V#N=Vg zCRV??8bJvQj9d<15^P#1`amX=ETUoww$2<<2GRSYy>TR>@u84Cy~rczcT>M!I!>^z zF)!_skS5Mr-gcBlNp=_@im0GL=K2Q4Hy|4u>7k$$ z(#Fxb7*<@#VKsR`tH{s;I{UDTt}XO-BWuI7 z-Oe8WLerER3+Wgv&Jm$gaR)AIy-&JTz zucaKC{#M#3egSI3H zzKTW#k=KAz0y3Kgk|HQY_+dYx9ucE%dOsykMIiaSGuT>(m!iEz1I~KiW52Qo#Jm=u~q1@Jb zTcV@M8IIKy+peM~v2E`hi0oA{M4;^8g7l<&uiR$w7qZT)9opH)FAj34FNKC|-?|pj zP|G)Ytcasxn2G2#;61#^W(@`tL1SBN)Iq}wz3h=G#~ciu&61M1CRaw4#B^o+bumg1 zG0!;Nf-qI#K>8m(+mIq2)|Z4}={unDg^zS@lu1(x%ZS0%F66dt%R|TVbOq)K8phDh{WDOr}x>#asf+`Ui75pmBD`<1UZ&11Y6ZNEy zRIvnDHx?UU7WRsB<+Y41ScxLgQxevcq8w%-6KuKV`3)!#v04U6STXIkcSj`a-!OX%`OFJ zfPHt`TGTCbl8~u~f>7&Pk`^NY@5|v@CXvi;JZqY-z?}1ug9SYZ(DIP#6Z$KM3gq~N zEQ*_Q$ek43hv%vGdWw!*J-kKD(X{G&d<;1lnC z{{tZ4m(&rto7dyr9Bv=9Tbnywl;tIK&ls7SyQ6pscM}&d`hf2UD)Er6;tSWbAc)}Dkb2CS;orQCzr&iaZPW~yCFU65RK2Ase z-DzfXlAZBrSY9_x>?a4UtunnD4g^SYos~IA%-z0qDX%oay0K{{6XJlyej-lHrxtG? z8c0dYryCHGYzL@z&d0r^nr-}cO@%y_Lnm1G?^^xKQ$~s;gqGwIOB*6;wmw-QMADhb z(9(h3)OY>3(Q25wS2U4=xpCNRCX6sKQje3PvJ--J^HYVj$%a}1rxmeF0_apNJKAaw zLYfaXg8sahY%HlGJ=AVbQLYSht;u;b!I`e#t#KSXbR^FQZ9E}!@R7I^dH26jP zMlv{H(KIHKVBDp)9;Qzjw-#UTA&7ud7$)XQ{l*3=W74CjNztyN&SH{BjCkM$q`xE- zW&mZY6ck@r`x(HzWf`8sISaSMu6WnkGw^K~l712)tr z4lQf0bf2o_om|)!cg1{WmY>}VsYlRGa7_4#SPo*9L2&MLe%9P#)fF+4TdMESh+#*3 zR#&`&!Y!c*SfZFLo=2Uc0EorJ$X+>RueU6+X#`92w2w&I%61x$vr&|Z3 zBaz{OpQH3gM>vHCBi%zyUYqJ3=(TxlD_e?@a5CN_kashFiJ%X#38w6*909C4nCc3q zkBO?5s)~1OaywSgCs?;iS;NbTpaCQvA1&eVb*Zx~ zc%&-w0PC)=unvJvFrn+T`0pyTtEs6=Jd6!azCoA--$4nNQUp*O+0KWXqQ_>+8uj%Y42i3ekKQ2jfWB2-gLxGF+y z2{*IMzER9I*l0Jj))OX|dh5-*EVea5h;sXJgX9foN9*q1&T-#-h}(4ytVppHuJw_0t&!Wa+iQjO6=^z;3hIjE-XrizrWs)>r3--SQZzt?}`_}C=MWGgU z6{v1ON3OBUJv3z`q42+=Kw=cK33VW+bltSLnOosTTQwMDU9r0LlSgqtUeZ9|)#i&$?*JRLQ?G zq!IK!Z*9N~g7M9KdA;l!IDqhnPrR)<6!*NBS)!Nu-?_>5khXUZ#!MKqVE+OmK#ASF{ZWFBgS|+p5F<;FD zi)$5pf*PDF&~mhsFs*0{MM2R?5FW3orA~zp2-f{uIB-*>eDGe%fGxwRsTpciz~red zIe=P%W#L6^QjX!{KCbyIH$HJ2rX>eeBy4@ITBws^CYUOG8$o6P?$)S(Tcl@hVQC5@ z=&$aRTAK#17R7y2P=2wxx(Zp@+$p$KC=Q3o7VK>Cg5>CkgodjlEYbS-H#Vn zPjE5a8NC$h6RP`QS_Vu?#rPSHFfq z_uKo8+aq@nDW~a>gvIZSSGu&-bKHdLR=lMvsc7t$-c`Rcdx>qM90QLQdRxP1i;~78 z^ul70kptiGABdKz-h%i!_M%m%Rn#ZbNN!E21FDXAOTBV*aQ0};9krKH;VO3J6F5U{ zcpCGU=`K&aADA+H2`CCww}9uX;j^G|_P9Y9L%;9;m$sz%nrBe7iT_*;QN)|7Y4P<7 z%5N-K@7}H$6}8Y+pt=c|1vfNdW9aB$$A({b*Pk3AgB4ivePVkG#MdM~V%I)F4^f>& z0jmc+LUqFkkw~LyWLnBhEc1KGVXw&4kDG(9GE?F$O8H*AC{W)R0)nQVFO2vMLkEiRn8=JAYf5un0j2)d!YQBFp}IL7Y?L%&)_g#d00D z$NX`eHc|ko6p~Ydqa$1^0D+qaA<;Q7r;Z{m0HA;Q;k>w$lq41(ELgoG zHipkGkcoG_>Iq#myC6Lwg)QeZ1Sx`cA2ibR3_@WG^hWs}^>{wjG=fA%yl7{$wcQ-8 zG=%#0f`^ed)!N!_5U`tk#A(2cs*3{zIHCp}PALR;H$XQ?3_O7H=*bD8ESiI){Rj`A zblK@4*^2ocNVsC?FyWqyCS9focX|!KL_?Nvx8rAUezoiYE3U>8v-0vW#|G(4!43?I?chsu-IwYGbcCGYbVHu6c3*^<*3Ce$rLgp;x6eb`zrRP?r@8 zc>{3?Q4(-cNp^Y^lu!xk7d?tJ1zAxS;O-RC`vA<|IWIt2N9z!eYB2w>}$Rbj@g{F=W#hF&)K>u<<8J0dM zL{e8m6q_kcSV`hS%S8GC>vJDV^eVPEaLlEFA#XQ@a2x(03SqoUkat^V2_|u^7i@p~ z2jdk>uyqWLxMK*iyBWl2lx+m2Mvf(Mg((@boaf-R5XLq{rPei?LC%~ zTNeO%jhYvltV&^0(2qdkGik=q7a(nL@7r>-uE{d;E2dnd8Om_O8 zFUS_voytP!6(ptb;B;BYq1YD}Q?bC*PWdBbhPVUB(MPxtk`krC+7&$~=`93_Ob2p^ zDS8gVV+iutptgFt*QHOQF3`|PaJ_iCx0f*FZl)*EH6ZiiL>n@mLTXa;unSH6*LGUg zaW0!y^qW`$11u`(46M68Ey?nl+_va5EqU};CHn+M>Q2)#4U*%|(90mOhV7?KIhLN` z!Ga6|Zg{}%T7L$M;vlV~K?Yynli-jeiJ*oIYidMO)J;P{;Ig97*DJX{YGDIxhS@z1 z+-3a$bqn!`KGq?;#OXR7Q%lqDHA8)8f>*{oBhm)>J6oJ;6To@g!Uv5KzPpMBmU2TS zoo)f?bj0R${G2_L;MRi&{P4J`Rro18XQ-sa2XRZEQlyip{dsA{tzV+ymvGshze-wvkf0|^;P*|)OPe^9QvLf3 zfp`Y8evL-FhPyNEKc}p2_{BxV_I-Cs7gT97au06@g}aGM*xf)Md&+g3?X%;Ahu6=> zo;(veh4h9acml2@z9{&O=Vx$_bm|t3M8UG@56~=v|M6riH;ViE|?pIYZ=|?4lz7y?^-$%r- zfN3l52UM7vvg((o_W2DU34Rc%hHg{*r|LIIXqfrj1VDXw5pcr*yE~9fxEGY1aNnW~ zg#{!x#pxY2rDsKhNdEwpH|Pca3(nfj=H_PlE>E3(Wmta!IV)kb2t|Tx5S;sD+Mwfb z6}=l@&pw)6L1N`hF}3i+)Q_vh)T-3!fbn#2Q8UU4ya>^vpZhzjfT5Fz;asr4Aq{m< zk_ztm=#QXFiB8m&vR-sz!0xkv&T=%Yg%6Pkb>A>oynBY8@0>nZt;#VaRbKlptKkI0 z2a#s=(GMt3A}ZuO=oH${ow_;@_n45OKEgTD-hoHTcTI0HevPLEf3ZTSgpfJ*q+x1+ zOHA#9hA|<%^;k*ks-=M;l>Rk%5oavc`$!uc0%wm2P=-_vDEFb73cn29LoP)Lu^-ny z9HC5q3XG&BvYoc=tLVd5B+N?yFY_Fl(%?0rW~R0#MicrGY_^Bv9E1{Ef!|R0ZfXS< z8Bv?Hwgf8ehRX;bJ&@gEmJu!lh{(54IdSQ|Zb{bo9nnUBASLPD966)E3-?)}xT_Yl zVIapKW0^N)8R%Tb6wN0#2|8W(QO>#phQCsdDSzR@rS#+_IkS<^l%54|?H2 zTbrH_zPfXnm`N+*aAIs=MW&7}?H|PLJIhanZ}4(*Wj{ZoH+cCRw;k_e3CEucQ3${z zJgz7n;ZI}+#pMZ0epG1-R$QD3my1gYC&H!tFv4Y+m9k)CnBr28vViL9Bd~2T7f?a^ z0FDw@(5uRdE1q`_jirM5T)38SB3#Q4BV1owIf4*F&(-;`G&@?5e6Pt-((QkMB(1>+ z!T20UeDdKvV%e9y)7!6{1Ceo-(P zcrIUN;t~56z~9l%uK{-;WZK$!+B#+{_{x`o^)=0=Zfd?n6DE5q6thK-Dgeg7^tQ2m9+iTIz;v&u zicn08Ck`sT@$JXvy}&_2K7)pgP^m8iZn)6MIhFzcmU(^y{32raHn0}twXH?1x!r>& zF0AElB)W|m%WM3a*!^jjm}|BS^zHDr#n@(CIyH~{&zr6Nj?q!kjUmIPln*<9Q^mml z$i}Xd5#R1dXs|fQ&|UH|i*Cn_@|iC@wj$DndhEb6g9$aA9g!F%`DpCPh^OSTWC(mB zNmm>ACN!4tqRUgT1nyo_V-mi}1UZuKs*!GU9cR#g8D=vXPZ>W&K|tDFn9zlbnFk~W zt|j$lxO>a?)x*fE;pOHZ5TB*4rRMm{h9NaIxg`m)a$Ki;sSSv5e!^-5D;EOx&;u>F zY_zuax-z8U>&NpmlKrdijgYo!GfyG$@H8Qf;{vR2Ai&TGF7`3Vppf1BMz-%+@CXSq zt$*mD6R%uOqV;>^N?2J#jLBDLpPbcm^oI54hRU;0BtghaS}=iiUJUCrce?Azu4kTi ztp*{w7Z;WuNM|ZJCFM@Px8@$&oTHR3SvSLbc={e29;&;x?8`lhN4k>S)mO?*hY($Y zLWV2o3=~SZ?rO*!^dUV~lW7 z;XPqn+4LQK^xRB=U{3_wEzPkZ6>41YKWwpNfqPt6CXE->H7Q(=ApXZMiGY(`c{QDf)E98ZpujOl#&_w4`-aNVFCR_S83QP z?uvv)NGoZnBs~8jX~?A8CUQwrOmZD!$#dYrH3Xb{amK*2Hb@qHmEREeZ@bsrKjvKI z%0TSQt3D{g!v3NShH+UIniFDL~Cqy#7u9z1M?VbulmITtd1QvjA9>7YBKG6YxM{0c#g~wQs(Ld8 z&3k=_!&b(Tpqnx`n_!{heC9(fH1-TxL}`R@z<-1 z!?fT)n1ntV0_toWU{DBP_nE)*%NR~wo)@&fRfGridK7E=WnlOkT?UQuU`Nq~Vi{Ho zyf!BNqbPN2oo?TaRGMb`b7S1Wa5zi5-zEG;fbU*tHvK=e$KKohzaMNwW;iqYNU3r2 zetZnn!X)vV$-Og%QzG&@S4a_`k@UirE+Z@oG$DOeSejp-b?tQ8onl?swrofy1=~ z2N84$1{rB`6bC2Vtg4W;4nQhvaev+w(JF2v^995LmgoC!j9+{Za7b6$2k&0yA;(L@ zca5dpN3$#@RYeuKxA8Yh&ky&I$X@ZKhv-E5&OV?WjyB^!bsW@9v*2wdAkf&AcXMTmDiBwMoRS=h;WTw)z@Z985mU-8|!KEMss6_4SAtK{R+)$ zvk8t!?s={XY$4a6I4SgoLWlMw&>MvA-kX*s8}s_1DC=chPB`sP9$Xp9l_IHQ;K`y? z|8auq#@YA$N$VH5{dV;@(Kw!FrN0%1v8~+Ds;pz6&INtg7c)SAKzDj+eQw`mlO_3W z(|#giE5%bjVvCldx7|J3fm+Cv-!FL*5VUp@JsSp<-uInKIR>(1-@>REjtXlmBRT@#7`@dH@Q#P>18eL}HBKcgu%*jM)WLT z5MNtcJO~H(yBYn+o!R}5YhRk?Kfb8C7+v>p~dajJ4d2h4J z&b%S1e+zDP;%8L@333@uMUu<>!WP^%G%>aXr7J$8Usq{_Ron+?7zt~n&_5JEJe*yb zh3$$es_-2k`*sCcNz0HRcg4QXVCqavB{{<{;a*>9VtCbh3=ibP`F8P07n49X(d^% z8or6geXwminm|kkFAy5XbR}*2#>~p}vLqs2+0=e3$S8)4>2wpkGOEUS9Fe|jP>do9 zTE!PY|MdU-zrXnn2=J<3Gu9H5g)^it7d{~g-@qsKDN-0_6rIHM(A+J(QXfeA*N!G3 zHlut+W{GQ@D!%d=FE4S7QqLkgP6-q*2w}W)jKa(P?al^M#&tpWu_T!Zn!IOFt>cVI z_=rLP?YjBRnBt1A8k>@YpFV0C=P6POvdAYn8lsx);6Y0!K6;Ta%%JV6CgQ`Xdn9a# zLeW-mu}2f~Sm_P(8e>MfNb$KrC-4s1SA_a$k!n|L4=A6-n^iGsa+QLUun#~P3SsgF ziui3AFy-sEwCXT4Uun=(0$myL`cnzm2i)C3V)eXeTW|-#F8*E?Wrp>GHrx1sPIQ>} zwbhe1-~^Nhr6*n3Wv*+OMp%+1q%2)C|EXwuWrorRC*g*vElp`9nOyiE&z6AaA}k64 z_Rv=brIOI7nD{T^%GPZn7E{f-DH|4pW`N+y-`&k=pOggwRfe@$c+dV0Wvw+rvU1C0Ssb)$3d_wqtuX`hYHK<;?ntKONWrzzPuT_x2`>B7%33wU1gZXBgt$}4u z&nsgUbXn^(qp$mdtSAIUO9o6B+F}RX4K{f~8Xg#X3xPNJbC9UMe?Lqda*xLyUiWru z*Q!8ME%teFSI}1X3HQK=;=T&qit#C^Bgjf(z^PZ_+qSaeMDb?0N%M4v-jlky{7n~3x+9v143LG znJ$8yfr@nmw7xK{&qug!e65q$Njv*nfv7jymm&18+Od5V)O*=u7p%jWXcr3q8N|p% z^y;iW|NgcIKiWS@u0(UR^`w)Co{Xe@&9X2`a8^u1pt#R*4(uJII$6>m^{~)Bo{*7z z`3)%?9q=;siwxzF`sr@kg6U#N5sG`!r!`9^NVLdU_fC4tF0_b1ajT*9U%Qx6cjYrz z+<*2(K|=}cWS$oHkH5g>r(%d2)KYURmo&UN8di=L&E2QE;h(dEH*JJg51Gw z#83r~FgMv(72t0S17arBQExjU%iYOeQ+?$^7z-5lJsgw}8^A`|)F4*|{=1vS78)Y2 zqHuNNaHv3N8kRm2qJd@dEqqn-Cx&3lhz*1kP#riQV_OS-?-GjpQRo}75bhoFXV|#L zPveOQ4%C--+6-Wm;G{P2(`JwBZOBh_(L3mF;9&)kQ-sre$cvG;H;Np{C(|vPI?TdK zNrq(s1e@%`^yr`iX2c)ZOvD)%#C~#na{KuOn?P~DXZlq2zO3KfOostnh&%#C=R(~V zYtfe-eF4%`ov1R(sBD@nKR9IZc`Pi}*Po;<4=;unp}7BV4k9}CTom`?e|_QS4?sOe z7q7iAtpq2y2Zw;@5;$+sGb!TOVi0^vbsx4MIuc8B7wSq7m@WJ%O!-b$#b6QS`mi~9 z`D3cm>96?-!?A$E&Y=FE{NDuHP{iXPR@%V!qQruy)xow!1{abt??XM6|H2_6ePjnh zWAnK1b>$$0s$9IS_6ux3`q8gwW7k28+xsC4{)@8QSBW7P9@GShyH5cT?NGo6$TEW( z25lqRhBTD4pX!l9|7pgR% z2X7Cf!_Sa!_zdM89JI%CHh~nM)Y1MgHSB^=+z-g0Z9v79u6A)lBJ}THK0r@=^vTDF zHgL@^M<}|+>&3_pGO1w&YV{2a5a6iaL<7mf{3oRfvoYDK;cXHq?xAm_L!|*)IDGQ< z5V0vfZ<2Nd;B{d1m|TDI{NxlU?w2V^O~#-=G;zmpU%sMb zVa3WcKc9PW6GjE>IAnHW$fI<_k-0@=BG}A&!SUb5LC}b(Q!?|J-+(2E=V~+A$mZCy z8a6^GZhA@&l1tgy>nt!?A2$ny_DJv&t?mXnAbbLY>1dw{o;aFKjosKksDs9Y;yz!} zX#@5I$PK~3I;tY-YQ&MJL$cAp1TE}D-xp)(52Cg=B`-1|ScdCgerlm#`R|5;aW80c zqr8o>ifw&!W4DG=5h!l&2ey9}1p&&+E;YgXh{1oM>SD-+*6C9na98_A4txYI|38^mhItUcEU^5xQLJ%uLN;KNG!Wcdb z+^Q&<+-CT$_(id4ppP2!cKqD8$9}o{{5T2}_j2gY(b|zCjReM%@mn?6WCF##j3jg< zsw2OAZ>ze_*3bJtJ^y|LihD^j;yZ`O)m1vZjT%l?pt#X_STX2KzRITA+NMgD6QuQ6tCG00mR@&=>|J=Rfl(e#8kxm;d0`CpBDtfufi40I4+X z>ZR;W9@L^N&3L2No1Ouc~m3?34Dgk~|6Qg6aUn?HPdH%&*m z(18gQclA;C(E4|^H>>-9*7~W2{RPXr4K`)1#AnEIglWj@0186DaP*si&>Z;fkvK z(zDKVnP;1$HHZ^|;;t-qU>WUgea*QQ7_|_Sd2_6mWdOy!j>g8YMy;tuF%=I2v|ase zXTJv02^9D38eb8y+|gpYSXm~!6p*b~Y$@r@Qi5~8N8r^!V>55- za@5;U)_$-hnKIUAGPzc{5h;NeFD;;%HY=bT+QJe+Ftiu~(WmTl=mZ!KDHM1~Q5qO` z$SAPZcu1810h;^AS^iB{daeDe#UWX}W^3~&i2S{c;~jJ)PxhS=fnjoqhh#f9xQ!I9 zduhtAQ!H>H9Kdz|%ea$Z%3K-sYNw%4wgd#ny)YI36YIYmt>2$_lo97Sb!mm@UYRmQ zL{;7p<|!8+6q$Rz#XUrKWv08uJRBdCBh}vxyOwtc3F_YeB?@q?o@K-bPa%PUN9I*% z6NyuJRU&a1nO!}NR|8&Aic-Rl8C9;Qpc6xNZ_k&#=Ryh83dSzlJb^bNWa!x0#l6v^ zi|Lb*aCs_1DP;HN6s9zboy<2PSrzA2(g*4|1u{LFHPR=B>i)1Ct%1eg5A=Wo5c87o zQZ_jRy?xw0g1;_pS)G~Y??G1NMp&ScEZ|<}7&j`6T(Vet3Mc##5D;nhwugo64RLU4 zTB=IB_{1`Dr%pLB1FqSq3LK_6`bs0p2+w3GU9Xn-Y_|^jN{2JLoScS*2kBmU2xrRQ z(3k-2vsV45IIU8+_x2&%8OmXWal$OmC)`uG?xj_(1Fp4&fI~@w@czUH@q8o*Al(Zj z|E#?^6mM?@($ms|NWH%10g)0NASE^WH3kgOUNsnh^M4;|kgpC@4 zf0GNjailc=P680_azxy6e+50^Cts&!ci1TU8AX*lp}+z=bLvzfKNamiLPbWv_4 zdPmEh5G;FE8(8c z4gaM=O$3W%FbE^HFC zr!*m)I}*UyjsMf%-4_oLKiq_wO%4G*;zXhw#o9fDuPQf$gmF!MlFG2Fg7W4L*c z-+Z79IYfMYV9f?Zl+1uW&0uYqg92F*hGA|PGX{^LMd;UDtW7;wm>n)=R+g6azd5A? z&5!7NMO;~aUm|SvF-WQee5G!1X!A=sKXd!ecBY zE(jU3Q%Ue<37+qeunC?`y1c+m)s8k9I%FQoNpqV;%>`9XAbPrTF~wlLju&X5G^4dC z2@&>I(HpuqvCl~OvYc-p z2?q$m7I?#afKjOa8mSKNJR}ovl-PI^QOSfwG9EJ0`()9g@PVwrZxFs~5MjBB_$zP~ zHzDpLE+tdVkT4U4>IKy+M0KzIbYQw_My(%l94LSRv&>Qb{D)F8G1d5 zWTuRTj`4}qVfyh<2G>oIP@7#uM59%UHZH5p*kYOkQo&)EF#$-21j!I4`@0b9bsnmu z-=TUKL)Vl!D>`Q8BhZhx07jK?4A`wL9-C1n*fVnl0t_Rs!6N^>$ry$9>_{#TSTsp zbHV2p_1o+oafmqtt*T+F%ygc}Fd*7L(D+rM=*hi%bHKg^sAidJ1J0>DrjyUlYiO(C z9kVz+5sUy(a_Dz4wiuGK*I9>-EKUH;uEz;N?>`L+AM@gpJg(Amc0L%)tF7`p?euVK(yR)Fi&=w!>ptb6LC^~?^`JspBNoWnCYTKu_2~L?8YeJx(|Ja%EtFo3y)`4 z{RmSb$GlYJCPy@Sx1Ld&RlX6p?uR*u2XV14W3UqHE5yKLLqPb>q#yJ$9-5AIhBgNS zN4PV5{0P6qROAW>#-A&vdG}5_HvOUmt+4(m;Ud1yIqvXbfyJj=`>l0^Dh@k+C`_j5 z92Z1k3dE8uR-Lf=6N(q{2JdOhI5m_z0)UPkp2 zSBNz^Q49C=VM@5}-J#CjlP)@6N|RUSR(Ez`SpF(@d=-&9X`#~vN!G`BlYr~)u5`Ax z4;yH}PW`k4U(P|nDPd5_eS!oH4Ss~bOTz*YW+{$ix5mcnxT;lR30(KBRvQhgT-8Sr zJx1o{R%h3c`gRPxhDER&%rAfmPOmMLpY;yXV?o$dVMy-u*sZ&lgf`&1iA8j=n?Vlk z5Z`;mLNrx})5>8z;NIfxhgQBxIDzshQ&EhNlkck?Ik&0sMpIVcs6SO@ zaj^+y57N+*xLRQ9gY?8l?$q+24L}aB|FjubLvVjKnI8{Ph!UVp?;)d3P=;Sbd; zB$J|aHGpHtzbRQq@22T+b+IYox`%7P0}+F!G!{Y0V++>To)_L=hI9uvj(SH_mOrJJ z%kp9OP|4Sp1hzkTo$JnMigJd#Fh>t0Sd7Gdv^u-8rfK%8vkSA+Yoyl|zqTeDrfI}E zsZIkrj#b6F2koxX$x7!RLr56WrCk87dKAc_Z8&05t284>KZpp`>j2;l1@4A;VZ&m$ z5HQBJyJq0@zt<$wivh>&k;=Q0;i}5QPXN0&qxI+J7uH~g!FkFmA)--|3PS*o)|=xg zzg&=1)$`gC;0*wGe4;mz!DwbEWMgwcO56Mx}tl=46(qgXpfJCu+ zjQ3lTUtjlF#(DY83X&Pk;|4L4pFCzuBwfP<$3LyKnGOX$FPPgj6yqTBj8Hop!X-g; zA)s-X@_J38O98u)RoE@Q15BdEL0gCQhDVa0c1mO@Fsq*8_n}_XR6mvd7 zbT27z0I6>py89Ps)|ojcPQ_44vi-ZXS< ziX4JHj3D$ie9d?f&&EpEU}{iU!@d3BsIw#CZ);LJ9sL#fy=C~Jn<4y#P^?N-AYsf5 z>2WrKevwH2q3k-eR4!#**{u*g6$LM~eaiGc-_DRUe%1D{-`*d;J8lEB6YMk6tJIt7cXtvHZ_+A5eFtCRJIa{hJel&IQPIxEgb;J6gOM<;{Tx9J3lk~Xl;J&N3ot>^-&R&AY-6bn`wU+I?c#wW-dMz zJq90lN8mH>56Z&_i_pz^n#dnIT9@_?$Z?XV*ft|?p8XhOV}0+on9nlaJpa2mu;+m` z{2yWD&dWG4Xkq3sm*aa$9=gG=MMkq?`L!nktjCC5-oR7ud!Q#RlDX?^@Z$SH>rRFa4^7@3Sgy}U?pupJ!h==lh=M+dne9qEeW(@Y}7 zMt#+VnQ)N?&8W|SG8#F%SE6N_-6#EXR5R?P^B~@RVl!3me}fTTs;%n` zVkWgx(T^J|L(xZEIYfzYBLh7K(>%k5BI*&GenN*Jx%=2(#c2xigrE;m1lc;+*tYl; zXc|o8@cZ~e=J-1iYXW8-jz`S@J39DN2BE(I0A)UQj6p`n5||^tS$P5m?#c*i@ioTe zinaI#zZDf=4L+01dl2bo6|jL4@mdi%-Y-Ws`h!Z)5{*IwR80v``FoqZJAXM_QLk`) zZ0DP0sH-$&6@O!)&XDmTL6cV9BF_w~h#wQ2GF;9B+1b#D!MZmL34KcD%bP?*UeRAj zo(t@(CjXgWlBq35!t6xqNS+H8X~-gOY6Xc>lnPK5k$s3{IU?E{UJXe`Y9&WlkCC6_CpdGsMBL+T3dL)r(d*MZmY z5UKX~SObk{jAcp+N&F@}$5bIa)|k7gWs9j!k&z|EBQF7!MJrfFn`njD0VdyKagd*f5b8oe2wo%Is5{OZ-C0Jyexh7;}2s&lc_+S(3`&x zw0kcZ4!MAmZ6x8R2))3LX#;O{hQsRYTTSTYZGK^a?b*nNpp=}f_UvkQdT{@-r620H zHSIQGzlaq?JMM=;BBTc4R zV~d0lsxyj{B}|Eyb%h^+@&k*7GDuay50?$CY3!9T(7f#Y5Yi9#ft_m>bWNXH#-n@7 zQ*G+BS?0Vy1K~q_9o&&#@bFz*cO_=p?0R#|DYPk33S~d<*nU*Dz`I~xMD|NbH*9CSmy zpf752{U<5j=9xP_H58P26au*nDn+b)U?P}xV05`1_s4>+t5ea)>Ay!7AI`%V_YyVX z=$)2u(NB5S%5$KOt=YQn7G2C;3P$A{J%Pl}co;f$tf4VGxA$_`p8U4b6f&a@i?={= zU@M6V)jdo;efHl}3i$|zyw=wO2F!;YY@B8W4-!ZfR0uq>M&F}3u&5$K%~1r-%7R~# z<|PAXe%Rz-Gd&mrK{M{8D@jTp57@n{+&9ziVcgn2gA}6ft4mhy`!&Pmq~gO&1^SFz zo|GPrkUC^020!=0Jx0(`lFF8&X2N#YNwl{OQPDuy{r{xEMrP#2CWKFU zS{gZ|4SLKYDKdVtGK#8sSq%hEHX){c40)oE-MjumkOx}D_m;puZGZP?jlW7psSy89=|=!gcYI~2o{1^JXz6Dh@*=36QU`Z<~$LMV5R8U0ugT4 zd6Y!0FD~$E2`OkvIT3#`Wqfm1GV?zqgaK@#ID;h3twD7gd_c$3ilRFhK1Ak=`AI)nMk&@YCm`7jah>o^O|U z%6O0FCRCt7ondk&x1Ew2=9hs1j#{X8gUf_AF<k2{ZNPGJ6*IIlUD|$J-L;2F5ih!!rdAGHikI1X!sl=GVKSH+ z846ksN)cVo#_g2|H!4oZ)K8l(<)$`yIDK>qP~C^Bn{kOSn$>y?FIssB`Q{xD3g){1 z@nC{wXcIy(5Aa0XB9dhySxQuRM_4xnk96G`vXL%VaG%T}dRBbR3KY01 zJnC?A3+nR$6>R*K$hV49`(Esvf@k$m8ZUGxM`7p-u+gLh)k@Ka{sQLNoaA zVv=U)kJ)&J1dpsAtBiDy`cf}ZF93X>}I27`efx_f6z%HMdER9BOC zUEdQSUipTF4aF48eZx*dsS7Rf*EW)fGKJpncRT1u!x%wAnTfM?hbY`$!f>yS3_YV| zJUVo%SPY=S+b@MLHAik$%C0k%`hl?}E7T2;8v@xqSZJ-c*%aSYd(7{F`ozjFYq9`y z7d+iLDCn+}hVZDgLrV5uXjY)gj>jKW^@Crl9R41l9gd6}C;0_XULU;_!BE0w=Tq?{9g}XzEDDx!5Ba6W_syIO| zpu-!)9XNqwf$V+5^G3p64F}d7z16%uS}6j|(U}Gi)d#u*@W$w^h5&be(HwFp*=5Nb z%T)K#0#OPUH%n%ru5InJQ9*6@TAPg^41g`smB{J1{m^S8xlcL9 zPVSzfCEVIVXPsrh4Y~Ej4Gvmj9DnlwvCjjHV}dOBl#x`r)D9Ww?oZlP0^@FwIHtl{5TBrMpq5|hG+72awaS~L~A(fEt2fz zf=27W17WQrTE+Qg+^2L9e!jEX}$ml1s4v#6HWkhYVH;LsM;_Q{6wY7bOS8Jg>BV3VhfC}}IVPQ4?7w$_E zjb-&Qe5}FsdsAcx{9^dBT%+shE+JZeMTd#x@Gkfi4&*s7k}lxhr8?30g5B{-b)s1E zfA6~#LX8miOAxH{QYg`V)DK0N7O0qCU7LS2y{4+Y&u~GRnmr>r2v0gd>Wd^L=#nEU zPsuw8nRPD|(JV4e$I8_yt#mV7ht;JRJU6>4^;6^&c_8r2Yx_D*sKhrU35Th#@=MGa z9NHSmSP}^L@niP(3s?P(0jG1s5hDqkWyEi?@3-zk*KltpDmCskxAR!m$2CZi z(|PmFz6RiRBByI`rY30n!HP_{#}Hp661Fg`a;Nh%8X-cxh7QP179vJccCaVqB$cU7 zcCe+Aj;)`UDv^xP^hd2czpA0Gdonm_y^Tmp=%9pqjc|6K?DyNjy^z6$phDHEs#Es+ zEmf9t4a1xlGW{E0uJ!hI3!}C<;WzMgs=%Tqc^~oy{lyZtu2X^K5)d_9!c8xF1uaqT zR{2+|cWB%bq9932THXdE3vtFZ&mw)HbQ7It$rkE-p>zvazSs=UbRQntHj{5PC5<}WVq^2jkC{tBt-m6TVCr7~31d+Pmm5kSd5NYscXAiH}HY;+%NX0#td zUWoVbFhvPbQy5N?2#ofLG!NTq2_vDsy&*){svz^2&258OhMJ2u0f$312k ziu_HG8@)7&0U^O%M1$iY+&Es ziqN<_HkL@V8i@_aZko0fjRKvDT`|reIpBN2YY1PJO@uM6y!A6R^!Ae{2xau4Jf3zq zsS#yBMg*q&RHXyGs!YHaB~LoP5-G1{^r2O0_f{iXZ1}dOQ^}<#F6b566 zsbvwCG|*;tPdj;6xL?*#=*#kF>54428gd6PaGIVanXc5oqf28Jw4-xhMQy13_=z8v zXJw>1s+MOTJzf;&JhUTu7JoVFO6o6t$E_VSkp3D z;11%Wm|j{~V6zwK&~5NIG*mU^#2Sbt;N)c5OzVPt?i};t+ z#JgyREmr#xItVj`?#V%Gi`@gQSBthUt&nrR;O-YnRSlW0cqTLPL541ZQRW452fM#Kj3w1d}0uVJ| zGPr~UdwAxzbjn=h9mJW*m<`+knX}P`k5%&DxAeYNH#Jge%Ud6R5wiPsT1ZKvTJej- zW#bYUbi%M=C%GruZX)tlG0ubRPHj6E-Q%&*N)yHUP$y(Je>TG6Y~bEtL>5br%wE9z z1%VDrAr3@E-W4B3fwf7Ow4QLH!(7n2($87tQmE|P4P__@KWoSc!ii?uEH#+oVYmBp z&&O)WCm#gS);#XCcQ%_~y;G{3n-_}^^kXfHHK_Ylik%;PBLZl6)x4WgPhiouO0yl_ zUoq?{eNp&d1pK)#*v8Kg0Eh~{1|}e6*v24gQca_MYkm9}i^Pmx<{>;(kF<1j)9iNe z0`ELD25^(KhoY6FcZKONFrYUerKRePTQ#3Gck??o+F~1tgoQ@WK8*ci>CwfX3dTrR zL_;pTr-kH<684KyOxbL8y4}t7jbwr8vlkdtk|_Wi9-#ZJ|1T_dT^C~@6zqs5H`0MJ zSu~@9;p9aPFuL0)U=)bWEFiWj%b_8PehNfhS47w~-~f^2!EI17>MT!2#ezQND$<5|8S@QJ#vnj+pV8HdBZulrx`#w`grt1W8Y_PhUGJ)4M7C+_JefE} z<~-eD1d?4A7VYA)uwjb=buZ6#c5nc=!BGmcF{FGEx@Wxdb1|d`=w6>j!@OwOm@kY$ zkv@ictY$EyVkDl6K^1T#0CrcbeQ5Zkyd|ApSHsjzO)07m2@hDa77*B$A!zC_FXsJU ziv_$}JCqUcC__kby<{6AjWi@ABqx-S7 z`GrU{FTVsVUr;RfkNX7KgXa-s2G9ND^6}ElgK5&^t$3xTHe5$8z|Uw^n@}SozwKmd z=(-JsjuZfa?mnBgXgOX8+-dZLl*~)Z`PDDu5Ax;m|uIB{Ul7GyX&YFD_0wE`{4#gZbx^I^A_P` zOOEupZodF-pw!j?yE|(-v6mdpR7nVA1oAKi8)h&511Vl&_J#zBVi|5rCHv$X}J5_&w}+8(0&-J1VT?De%>sSiS1dz%Q#o`V%e z&M;jDo`Z+1<=HJ?;ryDGB(ameW(H$S3zq~o*Vws*P0pYVNwQo8lMJaurI!kfwBGIw z8$f%<6*^Si0Ns5&i{h$vl*VjRb7gZF8P9?-1bfuJJQhIiibt*|e(dyYG8C>H%sgl} zdt&B%;Io)>AD#V@frWETU8N z1pL}=s@aina)!jN;sU64i1;r&vH^a>;JZJo-SSmpvq+}aO!;j@BVqUmv%M&ohW*5} z$|!R=9lrq8-B<*^1?0@K_0lv|Uc@71j}`6-N+2HVWl<9YO#vn#x{_@kZB&X zj)dpwMkQ83LzfMpT_b6cWLgUAB8uQEq=N@>QaXZFehZp#BUtuZlcmAvW|iKFbII>2 zq9t&tI~L&Xk6wkqQX0vk{1yurhfGGV;F=!O4-X@=?$r3lk`N$(9MgsH% zKcKWtA`NOXoRKbeGO5gFfZ7n&A=yH|;ZN0sKr$8lQ!|g37v`twB>#5yM?dM|#^ZgW zDt$?>8}eSue_rFFkD?xMu5n@4b(bf$)0fC|*0_4?#}zRb#XU(|dzb z`jXOyoYt3QeJ;JBN)!qWO{Tss-cr7j^t^|aAoE|g#e2<-qk~?xTYE-b%E=sr_BkG= zdqveGbRR;qu4!8d%Nt+xP?d$0I?Qficq_f|=hA)qNT7f*w?zS?El4y9z0CQC3yl42 zNugE!Nul%GMJ8P}A|3B-G-ZZ;ieZLG;ylPwEczO7V%z8eYQvzq{}VAlI*uT<5othL zKavLcg?q(u_lW5ZC=fw<;t}T#BU}k>h+kz)g%QJHh7e^SE_8l2D6$}Ub!IUXY{V$$ zb!xUow9sQ64iOd^phJ(2nzC%pS9SAzCZKNZ?l<=kXG&CpjIzX&xg@}C2weBp+Wg|| z>e|%evUd*2E5S4gzF%)tvFYv&Xs@23Fy&wrV7q@^327Vsy_bs;W7 zkuDWIKJUx-t?D)LO?i2Rq}-TEfuMcFkIi#QfdCQWM_wB;j0qwxY>yn0tVBnM*L|)> z&I5G6jnof2KKu>o7%&xBtA!HDiuUnb$EUDiD3q|>Naawd5di^kSoo4~nXiS^u~L5! zUc>9q>!l1ob+$f!B71GFHweyMSzV=%*sEb8XRi1Kv4_6H$SAQtZBY+0Jq}omka4CffyOF|n`r+*KxA8HMBd-}&TBFL;j8xuc$eUB~ ziQ&5YI0NZ)M05-*USmtux`}t-Xczh7Ax^5lmW&ZOv_IhQFq^={6KMie2AA+zfFM8E zA=+}bQrxvKGIXdJMa z4xe_A&>M@M40pdE5}+u@g@3|YQlReY1N|@P(mDoRPVF5i92?@T@Dd;@b5AhI$hZyn zPJtRKvOvW4QP(>tKBee^&&_wkBVk@O%$^_};`xJB127W6Ww7d_xrL>vHRujAOOGEc z%m()wPwasujtj{=Vq(2mE7SC1W^m7Gq!Peo<;EvVLc!2s;uPEHHKW;S!He@K^8=_B zKzj@0#wp22=2C?H8nzp#N`86L3>+=+bIz<8WNmFM6A##R{*lQf_rPR z^{lgdv|G$e$dAh-)S`a`f-f6_>LZ3MOzuF&Z9EO95~#bnGQ0M8<u<$1uTgzDXioOy($?~@VSrB z15NZ(%-7&64XW9n;UR!xOqF$j9iEX_bNVUTBJdXIBEc-bGHag{vj+!sl7Jp~4tL95 ze}l5EGQ@gSlFQ;wOS)8T=4V>oq&Onx%=@j67)xIWw~RNX}@@2;p)mVZdIaTuNKl{oUP~ zLaz2P&z!*zJAX|pMXtHe29+%^V^POxzgOLeW|$4sA2V7?$OcMWli5`GTM}K;mC9Ei zlg!nOT416v_1k3zkCC0ggl~KNg_D!06VrEPc8Bz>2WP)s-BLu+PdMHuaj^s|%S?GH)7|Avq5}c`-P&h*;5hNp# z77ru9-;#R)s@Nj#UP4-XjP*LScp>zA#SLWZN3>+Eo8JD9s;uI(gEyP}jt*K#_OhON zA2Rn6)@w)?KYcOWdwK-21)qmdJOD!49G9erF`ddSK1E1$R(YSGoY9i7N`4VNkrosY zub~T3hjw_1m)E=5Ii9;?v5;ZArtg*7J{Kg!X)3Txj=^LMlME>KcJA?9jRMGA- zdJ9~5e^7(Docm|prA?HlJCtMZIA8Sk-HBp>H5O=gBBmbOmNCM}e^5c-X?=S7o*4D9 zyq)Caw$9IN*(WEVCcmg#s+gsW9!Vy}y;AGDMS*!%&T?z>#c z8mM>JzdbpY?DqnfD}TSX9^xP-Cw|yQA+iP7%GVRo5b6<~Dp} zLNc|^aWV&tralWnLDppL=n zYTHKF%C|5}Fv@5NM2w=h?^H`GtkKsARg|bjYb{UwKJFu!Wc5jV{PqDGIdCRTf^4oH z9&cKJp1`s4H+{>?1>Kya7jE$hllm#MQ$0qgpyCrCo)G=QA_e~e3gQK0wRlxv_Dg@= zW72*t+2RGHzbdJxZZTcYyt1Y?@rwPGm75C@RoLsmY9uj45Hm(^Y{`yQc>kVC* z{B!{;=rnDhT*Up^xS~{IP(5_4xLRBl&YLxccZARTbbSpH{D!g&&O?y0y_kC0XXeK@9j@qBny>QjdD;xjF!XhgL7iX*#b1Gw8mqZa z7hnK2X4$$y1Pc?_Vj)vZ`S!Ye1pZv*^cW%{Bw$y}OgZk~N#+Q#i|r(=YkM;Du2nGG zLO#RZz)kdci<^)NClWBi@0f$<+X#~YEO%lXRVjPIw%@OATTT7JU8Zxrxe>da<~h*6 zMb7BAVkzry(JGy1a#6&6-}n9}awsD+0vpa&BIL4QI8Th1TwJ})yL@iFk*`JjeebM* zkV&@XjH3kQ3%s+Z-C_Bg47HURL-Y#3V4j%*rW#7??*>|R)W*BjEtbCXKGQkbUwmhh zO>WnG-IHA=tGc`Bb%!@Ox$0u6kfG=`SBF_K^#opmQbwzh+~@7k?U~}GNnpvwYW8;M zzH~WOI8nJc{}9JMh1T!lWE1QH3atP=K^*&iR4lNM)+DLnYy<4Xb0EMYZ3^-qaSriv z?)~^;4A=>uk-le8C=pk~C1_{#kvO-!iVNiMuAya~&V!H2gFADrO+3F1^uv<&*M@j@u^I)VXjVCDQ-Yxk(>gwEMJ~oF7QLOjxf1^U*^{O zWi$Rjg`A;$sOH>hs@B#moBhsYJ-@N{A9MBKtz_pc@mR_pA+(6PDzzQyr*pW2g*o%=Z)1)Hzn%w??~18r_hT=Ru!L3`xz%efEP}P{%0iP$kG8!w0!t1 z!r>*sA^e4WCUK0YG$8nMBmk3$uFNxy^|h)p=od=dNsPR}1E;peX)zb%%i^S-A#B%U zy|>RI9*{zu=~`kt#^bFc+`r+?U8{4%8qx4lpHS?xiAO-e#_S#+HMH({v^u-8=J`+a zvo*Q6KuHD4{?Tzn4qJ@sGU|GwLnG5i7da}*124g+j*LlaK~#@UigsG~I*R1lFUTH9 z8QYB$J|H{A{}H~8)gt&+9t_{XU97N^!)g5RdHx`~#d5SU1v^isrmDfAc zamv*+R&H^(psI~cv5yNpNC>cn1SzEOTi-q-rM|Wn>kyU@eWwJTZpHh8;eu}UZ2r1?q; zLvf=u^z%?_sL)~0rNQv4#;iqR#_hFQ7M^eJcQKbI-cLpvHRX2%EV|Fy537Z=poU+e zAuG7s4~{xJV)D$Ot1xVuhe)Ju9c*j|4;jC=+dbIdhA+kcnAaIWQ(Wf~vcEfY%|T~` zw2INs^q58P2BUA*O}U60W3P{$Un!QLUvT(1Ed;?pHC3bsLDFk)KSPrEi$efaCfd3x zQdl_mF9^dHJ8x&dfd4sMl{sh63+>ywGPKtmRY zS|-W(VsFug!Uz&ZtPuH?54@Sp)C?0%Vj^We<)@gbjp)qFV*-%=2L+<2x&E7_%(!pL`Wcm z8euh5B!$)7%|%sq(5icyH$6;)nDWS>d?b85rZQlva5yQgw+1Q`Z)4U-V7*C!MZANQ zh$j|ZrTF(GW^3D2-e;p7K8gWiasyEoV1LN7lkN~4%p zN6bTyl-e`Ng~{k{#P=qJP`;BMA%pC$`2*zJSbD3vx4MKg+}iJyXJ39U ze{LHro2?_}+nW|<9DYbaZ&l_BUPYhRZZ;>4z;1e@; z!IH6ID-O2uw=s65gDAoC-}2%DCCnT=OCJ$NvwYpw1p7TqFtz7JxiVD!@mfnpcDc%6 z%#nkEJiJOA`N`$(0Ks8h(~V7YE(>!caF+t|@M3M?D;5fuZhl%hCBNg=!<^FZXud7#-n|Qnr?+``=B=}397?l~e zIcP-coYLda7Jf*@l<5_y#y==fcqhjqai#L;^_JMC`M~2Hg7ug1Q)Ymp1bR9@*{*dl zh^1{z3KDrV@StR)-w0yna+xoUU7n)k`IT#X`&Y9cDj5rzl|Usl6tGG3b)bYdBRH(& zZY^{$tCx5CDa>@v!Id8uQWzwj2{Vl~{Q}4Ve<}DYSJZrwg#PD$lTO20&_z64owM>U zZR6bq?wILe&ASZ*F%|w^#7`hi2M^v>$JPw|$ zqME3tFFY^)opQA@C1>lPdz2;^XPVI^usqatAvFJm6OIV`J^9AyOb?Xr2)^QEE0-wo zE!}+yy)!MR5@H_G(Q59?h+S~>;23%e%Wp{C9zs7i^*=VHiD~KBmu-nhqePW zHv?&sU7cU-oXPgUyiqRZZt14NCyXfJ4U_2tl@pS2x3Y`sTO8*54$Le*|66>LJ{i_2 zD-W;pdC-Q$(8ztMA+PLbRL3JytMb>}=2OsRg-rLT*ObR0wHGt9xJ$?4k@3rf4j;p$ivYVB8oV2Ot~5FyxhxYd%FJ5H-;uprvMOIMRCS0~ z>F@4FtX1=Roc3&0FN2*BYe5Db%=zU~6885_rJJJ^8`N#rjY z58hM=YK9z(Sg<8zvtgS0^W+dRog*czv)Ibka5saNHy>%E%itmObru;^(Mqegm#4|5 zMXe*5ZB#J~GW~oJ-a4jnpt``N*v6<_$_>GQMSBFk2rE(Qv?_5{bI$m;O`PFfkWABZ zL76U`Bv)cLa3ay$4kuZ13Yl4sCGg?1b`xi9VQac>gX>;oYgJ87&L(o-#ZII1--omI z5-sGe^XBqY@F1iP!K#r-9P!2E1bP_KDr2A%>UYjRs!oXxC?aIU(-sCr4S z+62|}3+>bNFRmd?YoVMdcZOBf{D5wT#@3=|!P6a?A61bZey5kNBC^kKqGw^PHw|mK z@qX-~d&xxv-rhaM*g61Pf|qdjjfxgSKQWqhc}24s)X?M<&hMK#Z9lqZR2mR8Z#NPf zRQ5fY)xuo#fE#nsVBQjS^{kemu+pR>ly;5ysbVau{4JtV|N#dNoYNoAY1EW5-*G3 z0GEZ0;kz2T&yr^ZdX}iW68c4(>z)`M{>#`@)p(7eE9FzpIKP>9%DWgZrsM~QygmDu z`PH>mTCBUhf98Z)NStBR-5qPbf7QPc13@dZ7N?*l)Xyv;kC-_I8RaLG-$-6^v^ z-TN!i1229gY9(tSuaaC;_2|WGoxnbsIk6>rr)h%mdNJR;li>ct!`YSDv{~kGMIgq2 zbatN%5oEM`JGVL&gU>hvTmZBx;1sh)K)`(h(*ntY{1n|%6s>S9s|enq z5tA9Me>!bfBgh3P4mTK{BedbrOYuO<>-j)Qqpd~-v_p1c6n*U2#Ew9bT?YJHsyU0K9^ z=9@#YsB5SF7u#HVSs2m1@}g z74-^mMK`n>$Q~LBhy%)SLKlAiswK`Pq|FU@3v4^Q83T7x>sw$u!D7)SUMn{d<4$A; zvp0=9jyg{Gne@d_VEn7vS>jZ3kLBL zBs-{=XJp0n38U?Zng{R%kV(B8!QPY1yHb{&lo)h=Lqv~$Fn^c%J?_Jj8G;ZILZ>#r zq_st8O65l?@6I2hIR!<7@9vz0-s4B}OOI6EY2yF{_o6||WaesY(;|GD^xoXS%<f{j4Z=#=LH;}4+O?ThidZE{~Fj~rc+^>0#`}f!<$)u7h*-U1F zZYd5=bk%E_7R)c627CzmZ#odt_e;vxOL(XOVxrOsw9af0Qi3}Jy_mcf5-;;|guIGQ zrTnMrs^&MNI;Mo8=V$iQJUCn_s%C;(Mn#=gVU)v~X5%0n4(D%FA6K;)E7)r(W%@c~ z)`v!PKgT8-{>8hk3|_$p);d2a^x3;<&2nJLa5b~GsxHlPfO;G?IR7(!QZzQqd`FLp zIn2S3S&=&0S5-FnjiI&)-aoPx3oCCZW?oXWu(RYzR&RWb=riqP zKJ4}-;3tv^J(Hyh@Yf#915VaTFw9I8^FUyX@AY&HbV(-rW8>EzYyw%qjhcgB2QU=B zVuaPK{0Zh7n!Xef9C&o4**OXN0?#p|qQ*@2c^)NYEJcY~0OejnGTqb;rrYcu)1%47 zeite+;)QOXy$}j(4!X7oj{et9`zfHM3FP+q;LUt-p*5oP^<=Rt`$)Q%{!gOQr5reY z_EMnv@J0(GQ8(M>!7+efI1ZhGm1=Dz;p^j|#{#njSwU=ynf+F;C2vV=B#Fo1oeGA? zt=~HaY2<$scFas$KNVeR;R0f5D;IZ9#ou7uMU=#?U;2>$Z}0!+AAZCChv^JPXH{ZS zI%gI##iXG(&R=`wCQo<2fcr!S<-*j9k}P}hvOZQte%elr-2B@9*46m|4^)zl3~z*_S?WgHspSDvd^7JHQD^@Ay1LjB%A4CA|^mqH5*al5DVcq*@pChUg+Qa-Y%nN_P zx;qU*a-&nr^TkYe1LJV^kbKVk!$vXnYpa8{%X|g!t3fj|-Vt1&NBKF?ojv4ob&%m+ ztrX38Ur)fVgbwda1l_&5hz&70cs~9Z6na^(LLR>TG(GkVwfqE3Vu9%;?B+0+s;X zC_y7WMbPfP^*AC8S+K;`9_)uw$Y>#$5crn30n48jy^S{JyLY;xg5ssbb%j3DK4fO1 z`hOCXGbRI{fU-bE8jiU=pp3v;h4Xl64=#H8nMgQA03WlI0qbuZV^~s62pCkXuTb5q ztGbR#j1~JBSiB@;=t1oj<2qUY!G&d43D3Q^>S3QKt^R-B&H}uuqg&Wj+}$~)ltRlP zXrW#pL0X(p>S>5TAS7v|kh<%sQ+IcFcXxMpcW=M`>mAv9W}lO=bIASg^W66g)&LQdj0#Ro(56fdI%ZWS#(|-?`vNm0t|n1gGeVXr%k=z7b)VQ9EMnbx zUDn+vh6WN-T_Uzo9#U3qnet}3raq=4b2ZBx5gy!4KVD*rN#9>so2Zh#hFa!YG8iwH zahJUQISE+;$@ZM&iOrQ99u-`ONEovEsO1T}NRjv`m3=}2k!niF@gecvwf>2#7;gQB zS3iLwiIFmjWHO8*iT4&osbTh$3lrVUSHG7Ke7QD~0n(H;1>DQEyt=xuzM!&HT^ZrE z#u$srSQeuoSy?LHnY!iT71FITZ`OjDdd)s@-n@xBH)z#T2}b%qwMr>S_0?8wKY#YD z955+jTNk&)*h#7KzuXujPOP#rqEjsk&3{E|OM75-JiZ@1(@eFc6(m(KzC=d$oU9YS z?8y0n;>47?3YGsuwg3K3naI4y94^lo0}~?;b)4b}wS)mL{paY9gX5~w#Elj1!5P<1 zwX&5NLq$=YoZ79Zjidr|BJ6vn`afIdTE2^YlY#dBGnAt zPg6bD^vPiC5@RyBL0C{p9c)!rq!TSP-00NqmrVSmNvQluUYRvpqeBZ5!9Yu@zfOMl z(LtAaDHj*$Y>RZdecXm8*`Cy*Erate#$H0KQnV_p1F!FDJa^q4`{=4OWCM+{dWvHj z(rxa~HjDu}g(-z3lc8XwUtTDaSFiqJ%-Z7U*Md`>rpR$I6&57hO^omuFu*lH_Ib+0 z-MN?kr4_5&BElMW z`(GO;ZIc6emEBDJuhn6b14$d3Ee?4ug|nHkqhF^Sv?M>59LZDTh-XzZeVs;yxLCA` zR7W|$sgi=J4p@3Wsm0DtEov9HXG)ArJ8`PcNKUmd{~?Oqj=rjpPvlLf`3 z8F|s~r!ntKGkrg4u9)%pB?QQkpd?@UP;-d>tgNe+-coyMWW{Y)X82p@XfHvux2$37 zxKR8y!HmpZjW<(osg;NuCs2~wYF^25iR(+69Oe2Q{G@!ek~!fN++F@k!xg_%(B<24 z!f(4V*7R{coKUy~sG0$(CPy;=PM;%idwEM-K_DJ?hSx3}xnYdf)%{1+)sSy{fmY(XW z<2fYiTXLOGHb0eGbm#u+kbK5PUNfygm4a}6*UM>Ky8X@8J4AdVZe?o2%)-?zsAj56 zZI@jb_fWPZGp&nVzmRKG)=56&G&R>cC&}j&WoANIEr~qzzf?S-Uf1i_NtD`k{cv^2 zog5EHgy#ik7`-o}=|>J+ zkD-l1(Mdy+D3jAd5}_9=OO2SLe=82lL|w%SiGLR72!E-z?rKc3?(hMzzPscuT*h#EdF*HtHoLq_U_?t=W`#v!iD;$xeo&DK&JC`8gByARkA)x-wVYTJD}~ z?P{kVl3`wYrGn+M$Ke(78r8O$+Q@ajB0H&Mrv}b3KTS+2l=C!U4wPvn<;1Gc1bPQn z>C`DQC`u?#nr$({${PNrtZj~lCRo@fVxbJ`89U20nsN9hii)ti++>cNW($IGb0&w* z|FA%v4zy!n?h?E$eig?^(!Ba&G;&jIr_IlwEyo2}hf$Ti0?k2CPX@Qc8jUHom;wdX z=`eVXZECCWK7?O^TFw?Mk-0cdRQrUr6R4B2Z{Ehk$+6ARo z6A5XWx+V(|TVe>!7}V4`&>M8q?hvp>3lXb4kSxwATTiAP`**{2vcD#}IW5L&jodQU z7Ash`Ewl>lzMW%!PeX27RZst**34ep7`^(Ma2{1%w=6WxmC7?Ki|eH3)w`iph+?1~DFo-Zf0)V3!( zolaLM=Mi&rXJBogz}ng+EW(+;n4N5|^qLaenbG7xeA0?f^~tv?bIh{XOQzpGFs-h* z)L$CK*q&~*-6WO7R1fiXRwpH-UEN^i?S1tMl~D(3#7{JP8RJqowpx ze<{1jH0R=iFjKeJPGXGb*up_PO0`%{M$4X_Yl>0ecN^I^d@M^Jnipde4+Fo*yC{41U zQbizZBX#)S968d5r6s&yq6kz2OU#!8fO35pOV!+&Ga_fXbYs+2t=f`JWahm_j5&Cu zNOd@7T7{!RHr{luG>NL)UjD7_wk(ttH$lF7)*!ik*@jb@-1uY$I5lrK1jN@Pf(j)} z%paa&ENN7HSRg0O$ly0>W4cgw3aiAKFGoIE#Hz3n9k3~eb#)92W@GL=ujvgyO^?!S z3WV#7`g7?}FlQ>aeNjaHLvN&VpH!ErA;`1}uQubBP$*HG6aHKIO|%9nBbDb@Hmx{W zqkm|3#AU6o!y;7oyKyMM-Y2=2gbbC*jo##4mT(s3|ouTYBV~x8u&?UPz zp{~><@zPq&?AU1!ZZi05`!3Q4>c&Y3vN^qF{#cFwu4lyNz|$LJ-uuM-lrr|~t_qU_ zN-i|uE)S{yd2X^C@muIzQ0BT=EbQk#t~S`q8VFj8X`?I8j6Cj-)b4tj8^tCQzA$4S zox5`vY6Aw=RhOvz4gPc?h9AGd!7+o0q9jRyOEC_zR`GEyku;i~$*Q}eEc?1rO!#ks zIlAOkcZ^-on3k&O-=x(chT5wu%z@`A=FpeCfSC+rsB|SndQ826>RH-+WvVR=l%$5~ zkTD&mwyzxyE$0hT~w4D>hTNp!~!}Q!43xZye^9pa>ahO)9B`M4Qgkxy%#!a?Mrx zr>D=tWON)hi*wt3nY4o{L+82unLUcGcBss&I1a>tuBZaJbVz3Y>P7~2gHgnF5HrUP zpHJHC-_?^8J+c5$derq$q9?{sG1!%%rW5757Hl7v)`(*k_UaAhu&+^OJ3HN;dojH* zze(86ZU;UlY0KR`gC)|J*x#%^Gx?n5l0jEorZyaCNcEk>1O6}}k;GcRSmt*E_PK)P zqy32b7@=)+0!_0niI!B`nd17FRg0W+P#@4B_vHw`R<;(9e47PBnrSg}$TZP3t4`b4 zZI;n4pL<0;hk}i<4HRGHX#cd$|4s3sCDm3eq4Y3}rsjVeLGj7o%9m(!o_bwq%=8gW zEI?7n+}mtL$6S%xk8RiFq`_o1e5~z@%3Nk`@rQB@OMyo>x0+k_Pw9Y;y)0H}Pbr_2o z`#0X1`tbIgwEk7@2$d}sS#WtK$2gazdocB=U8IHUfg0K4)KXI>6AHGK>mzO-9dw5I z?MDZl*@&He+$L7jaQ=cA(N?j$+nPusgLbyRwLQj$4I3rVV3N8)mX=;o#>`L}tHbcE z)2SlRml~#0i?Pg6Cwo-tH%eStFY8DB7Ru!woh-`1=!z2ZLdgGkhR0k(#57!_GZLUA z)n>NttmJ=aj~(=yUb%9Mi~SqGVr1=59s_w!w?g9|z;%nPRDW^lyL%GS0~s%*b>Vh4 z>gCT1`2RBhQ;4zCl+gkag#}3wml`KpC4EV`I*y7#CUp#M2=P*Anad$*To~--I;CQG{Ts9|l$h!rH8BV$ql)BQrwYX@uIDE6B6FWPvsH76qSta_xEz#8 zaz{!bhf2MgGb+p_=J*|~iqs~-srg)OhjG~?((iP1+m&*{Mf&6z`(DaKQ7_F!RgGt* zm6>YkR90_OO6HfrI2LiY$JjNBqdOSBM0~1?-KUXFEXSh0#v)tN)>X$fonDp22&-$j z%B=LH)}}7!B+F_z4JeE_*{HD+?SYeQ{)M^H2&ggpDK0NtEUQNOI{bk&Zlzg!yc%<4 zriQC&3Ed@{r3WjqNyQ|HUvAP`yhJVp4NMTj2AFcJk(10OBNUB4*r9Si$QYBVhKo`Z z*pyQ={Xju#xDESFD@ta6v*dX8WarPtl| zRozr@M{882xG*FqmDdJiY_Tg_v<$CuLyvkNqfzZ&sx7F*3^}h+$B`{Dpo=v?qPuID zuSCuw#|ZvWHaKRup=pRbi-wuB{>ow-A>L4a)R2Ua`deG{eWuB3HjE zDd|Kyt;tGHb(REla~I?}0}o}>LPs%s%9E@2#ObG0DaZm#pWYG2lrHbVdhbZBMN2E| zsFwWq#)Q-K=5yIHH3=HdmBYI5h#y|-y!@nQxxXUq%e8} zIY?CE8I?>W+E`*PNg8*jSv^UmN4cfYBYRZph2+926#8=cVG&kn=`t7)C~x z7$FqQgrhQo0xTsAK9HR1H?eqWp(J#WyJJ{``U@kh84#6Ju*QWIm6+MKXkl$K*||e; zz7$b%Uic!3JZX&8Hn}}^_m666cySTa8IjQ!h8DL(BWnxEs2(wtX*#oHHC=a?p%_hz z^r~K8i|2i=F@nD1Hvri-lZ{C^`k7|uTonQ_KXC10US~U*EU?3`XIb2_+l;QZ3o~aL zl7Y;7Fi_yk+|=?Vv8|X zq(Y4d=_EWO5uY@_la5e}PxaFV>+=pfYUR@Zso$z`se{ctStwB)kpVKMXTVBOtHYo& zCHIH8u#Hr@7sRW{i_Br{eKLvZasjZiql=XyZq4elMRi#^R;(0BQ!1G%mKRn?cR;Qu zTU5rXP)DlEeA1N2;%s90L*2yHkJXLqi{yR`f2AKI^iqF(T1dvCk?Ym9;8Yu~T9?o- zw21EB_ALtSpO6elt>~LL`HXD?DS?!N)Y#nMGH0w(77|Wx&I73QSgN@@(R6-G(l6^Z z?U>m`?R&e$RaQJoN@NnwdP(w8n$X@-Is;X-l-GvAbCjS=Hu(iaBExoYd?{!QIOPz8wC<=r@V>tC+?UxXZG}2`4p#gq`K7> zl~<-E@QIPv(KW-ZNo#=>n`$}PC=jK=_pb{nZL%JFy3_Cn=SWVqnXKwUsS)kcN1IpH z8|~_tFtgWaml(6Hje1+1+f2C~MXO5nGuzbCRZ9vrS>UVV z$@bS`sZ0vBrP=`*>9J!hX;xP|f!tIp>u97=Y!KC3fa6iVHM>9IkGC=0LKx!bnY9hX znvg_=d}E=C)WX0Gu8b>@gm2c$U|DabgGDkvE9YpqhoW6>^QBxRc-ftEsSd2CeMNPb za!uw?)0l&_FUs#aw0N2OnRRh$f^?-t%jhqdg-KkXYyd4k3ayUP3Mc zvq_PMqfA*XQ$^h%%xRtiE#B)pVk|4&W}ziSj9yt%B!hC&NKbXphiys{p(VjoLITgr zA_r|^PgeE2G(LPA`Kj(w({dnLWiije@mofuAFVa`O4Of5KjLQiN&>m5?pCk#>!Cdu z;na+tAr`2<*Q=SB--)f`277g}M@>R?_bz^Ru}aTMC)rs=KP!aOb=49VT;NFajEb== zcbkhNCfa7SqNMW|k`I;LK^l87hD$(^OfV#NG|yP(M(QVq*3=a(NfhezgEB3wl{}(y z1fXUZW!%=jRB7Q}-aEv|d+feLrf~|9+_s~dWMWFST75`9rNqP<=KiuUk~Ek2E#117 zhYED0e@$U&ll`tSOiDV^Q?sX&+D%+<#z_6UB&xSfNSbIdRWf6K36(L|{8~+=%4&zJKGOMxOey5uYSpU*-9V|Nb@T=kO!=dM;^cSBo{3~=M@(GcGK_a#NZaI*d8lh+Z z`RWu>az-T+&iRsc#&}p3mMluJ4JQ-Pprh+BCCLtfX?Znl%*2k8P+XI-nm-{L)V^FQMOfA#V5VXxMbHW9T(=0PuwOk?$ zBc7~gw#sNo^(LfLyl?u76V>55#&xwX$s}5(As9W<>vLo5f30r(wW5bF^3GaCOq9Bnf7TT-}pS)~Muiq}t1T4X|siyvdWlZ8S5 zVm%RFK{dm`7|2bvn`dGnCP`bTq(a?w6$MOBJl(V6m5!GoLS&Sg`(jKRNLJTXB$e#c z_<3~|Y7Ce!f5ugCm31`<*@#|JDW4tdE4!O6IV~h9ShdVFl{`!hR)j>a%M@D{8@LLy z>h7G+tU;FmA?vQ1)P}}A6S*2o`M*sat3EF%(_m5Qwz!zrW0k%9^h2`_P3#nEJ) z!pk*udT>H{hV;ngoK4Q1#MJ~77v#^LJbUKM>Bz5y)^^PM9x}*| z@j`MqQCzGgN-396>30j?M`oXiiFPDgUbsxYCs~>6o2eFJsoMcae#9!d*W5Qh=E1ww zn{S1udgpPVk}fcRMP+gh8f6QF^#j&)mir3C5ktaZE_8@)QOE3$)DTr%5N=+WvefCZ z9NDSPCP&tep+2#q3*VMl;at7pRcg#xvGce!0I{-PCBejHa*Jt^gyi*_uXH8y)z0{I z=T~A#Te`ZU!u0I*F*=b3q9vqLvjS5+brR#{RdVA7bIQbIqe@hFbyUk9{9#W zrpszgkWF_jIJHThEZ-$P84Uv~dtP4`D3xJgIHInFE|?^qmNfR zF$YX%&{APzriuc&()Xi?E57o?6H=ka8u?Me*F8c!*;0VA*BSKAZU+#!pgfSS+5EBvz4(vCI8jA@T zD$ZaQ!+F}K#^XXLc56KOPvpF7b;E|oh@sWNEP>E8!>tl2edGP0J4y|X7%iDolr3q2 zEZxLlagC`x%d!gb+EDIZOO5dfWy~9)1t-~%3=+<+bu@NKuP>q8ks!$!YwX61 z3S_3bibW-AqRBzHFduIptG!ar@f5R>BJGl3TUo`rUvrENhei!i;@LzI@hVzV8dTR@ z^;0Pj^)V2jsiu+iz_cIf1-XYX{m5gCj;=9dj9hcjv8zlL)OCk)7|hKd)6-ZX4XwOR zVkX2pto+qpvCLZiI-xO3jBI_PoE#ac4P>pPui{#aKU!%tq0r(Sl^8PP=hYyU3wWqH?e_ZzyY z*K2elAaz-g{F#YERE5_&gKctnTednq^J45)HCBGEc}9ASEb+GMR1O`RgW5A|4ZBVw zSX!K9o|eu>xr+PGuH7dQ4zFYRoUg8q!9^o+z*SCit4us7qsR9|%~@t0Iq)Jqtb+iYTPAvCmZvLaKh z#BHOcOFL;RF%iooEPt~JWBuIZF(TE9)b_c|{&QByT}U;uhAkL9QkS@vnp9GWe=4MD z$}XeIXr?+clZG!bCNZ>d#Ig~EBe)vg{7~+O*ISXsxbd5f8RZp4vlyqOrgBX1e~@sA z14c5cnwg+FyQ12$b1uXd+Juqg#x}oQN@}WKrb3gf;Bp09@gnJI>V~E|OIY7xiOmh> zI(~bJ(Y>i}+>aRzWSR+%%x$L3EUZ=&zv;59Cs0i`Y{T2TWz{X)w!;(5_r$Zhyh{EX zCt$uc&diBa%kEGsLo12pWI;?;O1FK-mJ3t5E9 zKeRP;k&`P+Wb;r?{7J*_Wo5}ck&&K7tGZaivnj^Dy_J)rzG^oDzZn>9 zWQDl~>HDN4^^{Ic<q>27%&e=?_pB{8cggFmd+A8TJtU1% z`jLcwB*8KZ&xGv9$@NWA$UUqD`kjIZY4<&1IL@q;94jDG8Qb5jN)568y}Bwq=IZE{ z-bU80BfU4L3O&*a^aa~qc#lzO^+xZ z3d*mq6|KupKcmm^`rgMFi+C$aH-^<&sSoao*KLq)vJ2+qPR!3!U%9#7-EX~~rD}E{ z9i~>|cR&-EL3Yat7P7N9%BrK4XLb|3 zPd3JwY#-0jlgG%{s(&aQiMU#E!Rt^xal@#yj(eBY)=T^*Cg~jl3>si1%6=OWhqN;B z$;$AlHgr7uVk9`R(pEp-1?rNbPV&oYb*cV3&XE;^+I1ttq4;O#o8S9IxRUH0o{2FQ zjiHGRP7_MB;8f?lou<#vpU*|wtRcv*F9w8zLurY=Y(rw-ilq9)aTicuTf8`{On3XVnl)-tJf;z%M9qj5-LWy*HWFSxu zH#PS9k@him1g$*XLu8!V1=d;Lo6(e-WV~)_D(Y@OClh*Djr@Yp$3h9qQ9;Z4S>9=& zwIM9y0_CU5baiHvW`+$m!|;`qqTmY6Ms5npWF_B`9Mf1Vhp+t%pv`TiR+Q9=WH!SY zb@8}Z_jyfX;q?4za^`aCyx9xp3{Om%J|jPG9%UO&w@d4)rGKgx=ZMM-?R`@*jtkm4 z%8AH{^pobd;wRBsQXQvgz2Ya)KM|wCnSqIKlO}8rjeB-AX+pcYZ{6s^<7W=2%ang= ziQe~>HB0zoF){4CRhbtol1oeq3KuVy#NjfV@cV$K%nusw1C*ZRBDudL>FAN{5msq< z@r&-iRb3}0ago-vi91f8HI@1fi&if%^w|deS$jp>8X>FhkqVr=?ZL5-|pjAfyURF}Z6d3pH@=FKuC7LGak z5i?ACCN-rWWr$a`EW58|Rgzqu&Ed#b5@=$CUX>a(T`dOb^;IIAx*$A-0a`9IsO7jA z1B0YQQn}J7&ajDcj2E*#7o7J3G1B=2Wy%ZK>AG1LMa(z)t!H@5#AS{jGUE`I(PEpwc2#P$UeUOgV>nOAk+<3vB@)Xm zK@JjbQ7k(sB#Bnjm43ksvBapxyJFTGI6K@)OH(@7hPw!(MS3v3szFPt>kL_i&6_ww zf}_Kqdd-6bm1(8znb*9{!|01PkM1@*rCZFAa#V4pX7INQlQk;GjEh>OC8{6(Z9mlrImEB6onHf8*dGbG91B$blX=t-hWCKalI zsVnC6z&TtTRQN21C(=AW*c&#yW3S{{R zrYkbJ$d#XwfG_x&o^;~kkVy#@-rwp`UJdQxlF82AC6b#l5(ydOn1U77kT*!#sa$1B zhh%Exj_ZM*JBB1vIMdW$sH^hQ8>Z^-qdiemmTR#KmGJ{bsWECOQ7u!ZbGCJcle~r| zc;Q?gow6w)UM4e1@)saY=?fa3T~NYWiJ2J5l&*`4;8U7SHh(o>`wf=yUPcve8(h_rbl-Y_BHxFR2|h z6&C+?<_U8~t67LD^?G|;0?>n#uFRMdo0{Em?4})uvyco5J>z4X%djPrlR;L79>Tm{ z(!8Gdp*%Mgtwhc0WPWVgHx~O1Si5wBJsEde7bB!TFxU#nV5OeX**{p78mp)ESm$;O z60Egc-T0!TBaE+Vrb+9F;i1=$;*nHjk?H)bCbW*mKR7L$v$-mWgwac^&Et#XRvmTf zU-}15YKUF_7^~*C|3A92Kv8Op+C^!4R~GJM26I_G>uO+2s7a0=ynGqw`GGE3W=roN z5g_`{q+{zH%$gHwF6M6#g`b*g_!Pe^amA0H<`s`IrI9A&-q)3Jed?-_*lDFE)z|pQ zB`RWh%@zrX_LqH`9NBQI*Y{3`9!dA{;A#zjjEJ$24n8p&y%O1Ahvq7jyNUE&9#X9R z<~fW1#KLKL^YRjMa#cEN!hfX&hyF;JAIeZ&U}KTI4y-BtLBrpd){qP|q^#?iFbQX8 z&_pAdJ&15@(=}C4SiPuBhL!4iIqVdPmT$^ju@O7fx1S93B$b}ju&_^1`!)HZUAEoD zauw2nKKmt}WlxXw#os6MMOArgvDPNWX`U^LT<@4@i>&FBM$w*K#*}nG8@kmzdG?G2GiS|L?a^tV^h4p|U%woNqR4BH&9nFq6qx8E z6Y*p2#Pee&!Y(~{O3hu>ygWLyZpx}9P9aK*)e8U=H8>^FohMz8`nYT&D1Ib zMJkBFD#E8{rpFw#u-4{SOT#TDz1nCX5eQ@%Qd=*NSHftTs4 zh~^2rG%JW@0GRcv|o@V)@;>?C8bdVXHcR1HE*0W6VOm6aA zr!kY2^i(_T^&ByRkpwHkjYH+i$>^DBN<(Y7i&pYOr%Zc2Lzt*Gq|^r*Hv7n3H2$dD z8Qtv1fX|V~*-@m|d#`02Fo~bs9&)ukDFi8F78 zN+K)OUWRymHqzeI(oSpANiscUF;14~_tvRAl^j>05t(Xdjx*=mmus(8s_^VGKPyRG zok+luFS%-6l~!b`zdDH^*Um}Q_hi|BESLS45(2*iBRXm$Lhpe4ZN)iBqN==sR}ZD8 zHkwx=M=4AqK34Xmc%$k$Vd6O-RC}yZ7kH`=HZDFdBK$G3F&Sgt-)Oza;XoZxrq63> z1*u^qpi(y`OH`l9{4+_;(B;f4si`Zk)#tbL-^#bsS(l!Ol9{AjKv3;R_QgF&)<8A7 zVpE$DWhnDerA2+k!QS$YGNqO+N~z-obLQmDn>=xTo>#{mw3We;JhzIsYr?1GwXr~2 zsvDNkb)&}hEO#|}<;Sw|B*$~azvO*dF=C?|twQ97l2g4W)-C2(2F)tS_?<6*qxur_ zg-aq+DJ;*7xChoym*HzO5>uOyaY&>mYt-d5`m6J5gfUT-3H@#t^hGBOnnair1xb5WIE6b+Da63sU zjLcv!NVX-URZZ0SF9@zeVFBGgcos8g=430LhUXIC}Cke*MoTp>LRpZ_ueAuzd zWCm4#?pYXP(iGc5lOR+pNp(q2?xz~NW8da*F{LI!B63zbq0+4O zbWYT&MT)pK)6N6M@V+#1MAvGN#CvL`Vl|}3%+hfS=5Vs=CK>z8AK2qT5<`y$@$=p%`tX^V!lGCFsT*FG~6hZ{T46V8&g9H zJSjt{`4cgJfNTEp`l@=#L$SE9sJ=i_$nb`)*)e=eG0jGi%)wBUG>WX}eTKg8b0&Ww z7R%remh~XlSZRjl0GX;dQ{bM#Fl|rJL zDH_^R!({mhSedA)tuOZviN|nvEtc5T8i{_; zrG>zx$dc$gWG%hp!L`+T?lm9y?v zEd`lLBh$XgdXwiZXpZ7hVyw{hwbR+H#x1fc87;?(T~`j9d&NB=JE0;a6gjh5M2eJ9 z|FJ1^YIeW@5OoeY(t#6`cHwx*g?sDP^@ zyN}bAW(%*EwBAZNz^>9JyWShG3}YNs%kWN)Xn#IumA96?g5_k>@(;#k*XBZ5R(va& z_>zLz|7f!7I0I2ucuQ{CkeCy%oU&`sR+1InXHi+PTy<7Nornjx!CHy2SDT?$JmHz^ zrNbipazV(p_lhwxc4t&7{=ZP5ebbJ+i?+zq8oUrEL9;f!&`NV zsPbPcyWv5J40VO?)xJo!cgQhcl2}&ae@EF34}m-q>ITKvSzIm>`X>8V46(&zz;ZjJ z7!%VBbrr~DgjF(a!)R$v6M9Or`?{c^mJrbJ4z(Z0^?~9imijJ zaS6{fIoLc^*?mbyV05VHPV|LbtSZf*s#+4zSJ$UChZtLpnd->Ol{!*#y=KvtcNX^{ zSG;>Km)!{EO0)H)RLBktYwKoGVWn9WZJe5OTXl9bR7aRq5WYjL-x*|IOzIs(npGhU zAjq#Ko*z6#(IDk)8-SH-k8dE?s_mMt)^7+gqDwNix~S5yE0WqWzx2y8+u90**>_s6 zsJhN?YS}prlo%_tg=DF(iG(C6BIntwLH^5m*R&*OV>t9q|RuzrI$?p4bgjoerJXV4K1!h}3 zp){+aRk74bGfmwCQC4_Mv)=QnHp{ZtX`O?X(_U`8m$F}8R*@D4mECO2muKIgU9o)d zvOkvYgUoLAsl`RSkZmMqdf}onxx2yd(X(tvp)mUvZImxPp$=8MpL2E!LdSei8|^{` zkuNQ~VhUA=IQtguLnYC@wCt)p)Pg*#rfsOEIX=2jNjR44;*u?vv>I81;*z}_B`$mq zedo92xbT}*cAbYl(Nm(NSrsiL5F&b2cy>dr5o86o)c^M92HABSR#HT?U$tu@I;_@K zN>{XPX6FV8L|MCAlopa)#_LM6D{CXj3SM8`g6zr7ZWlqzv0_`Qe@1$P?8@0nvZ7n5 zA2d%n2coR-9Ww{k=`&wF_it*UmRsz@i0 zWkU!occ%oQl4y63-ITzWXWyljzAq~B9@%y5fha4yb#NJ#R~y;+=0jOle8=EN33c(Z zrzFd!9J%7ks_I%^xKF)gAd@sM5_hyudJD_WMS)bgI>M7`Rkl_t)230`6`oS$&!GbG zk-E=r4izYHnsB>7MYIKH_nibf5NC_2O`yc@Ua}io0u|xZryczlQN?Mq&FtO+F>-e$ z3EDz`R9mYgy1|`YZCD*hvjx>cZ#H`$Np`a=BghJt0#X+pr0-&9TR@1zIW3#wR!K{g zM4M4|b1o~%ik7kuy+!V5m~GjI(yWSBfqTf6pIt8-h_b>v%1`9Z@PvfQs#9}b4QJO4 zYKh4}qE*#)dD%*F8Kl>AmPLiMNJY1IR79fOvm5u6Jgvm>Ik%NhBjZP%-J6KCv~Rj) zl}=#c)kk(s)=IMVAfl_1qsMOEETXj}E4qzLKlN^mzp0g7f9eRc3R+0)jT~?BOwX<# zGJ>q&4*K7c^Mu3={sKF@eX@u^tEi*-xjnt-y-Ic;TvVb})z*n#_S9t8OkHVKMMvj{ z>Q*PWi^}qC!hm%p(W+|O(6(ZhZMM2Wmmc9YOhmKEQ|{78aSyw;svXX6O73R=kp z53;pf?YjxH8+ZdzR=8NN6Xwe;y>1<3YkeThD(Dg_kbL!vOBPl839YgVN(_a{p$aY3 zDr{$eM}9=_owA$CdE%^+_U=#pNqcr9yf4qHX(>N0A*--kHQ5cnR+1GhtxAdZ$Czwe zl@S#c?w8CO2@j{y9ji;KB%OlFY{W`$IDp;Agg_PaQO9@QhRBx?LQJ0C2&#UL`hNDoHEu_wJCR>7D8k#p`7b2i# zW|}gP9|3i^EC!9qrnHy<^=yGQq*xN zNe47?#3*yetX$a4Dc8(e{Y#*;)jB%VIy#QlF#Hm@YHFXR|rkwP7LySYZk;l!q(p~G& z`Mynd2U(Z_vBQoHVR?}EE?OR&HDbpaj24a^cC={Rj`5Ayu?FLZV}~6-8nz zMkdD&J2EwH$CyU!XqNso7^@n$qmlk}O-8S_G5mKKg`{=v>7A;KvZ``g$=Mq@ixfFzle79`7WO%#t8>2c zvPn*l$yOklHHs>$>Z{8ZFRAt3Yh)bp=0PLBo8%v5gK^~+3DIDMii(aZ*&{cl>wK@C zqByey619ep8+9Eg%a6%{%SCLGMV1O{uQYM6qpUoVlx}RC7mDTpUX{u*sc*?NCdEcX zS5d8=kxW)os1Rs8ff2fIzF}`!Sm*g2YacJ^D1Q1(p-ijmYFN3DTY(m zT5IjK_`lE+bA&HzOYHN;61ncmB*fKa!ihs&DAOy7C3;y^MrU0NPJ&&p;$vjGNE2Yx zr{yD-PeiJ&xY*zJi1mr+=Ylq+tS#F|0y`3<<_Ox9WB@LdB)Wb9#%)vfVWXx0WPQVq zzVf&d~+FvDSfl6v5$-Qh8m|JJtsX{B!&B&{o zF)^E{dDbZFrduSRiOMRaW76bpdbx_o@foyL*Do8xH{OsOV?b|X0I6ZaFM{NY)FUVC zN^(jh<*nb-jf(rSJZUtw$m1WXmCGqeE7oruqnjdE=Oj6n4aB8i%Swy0!8ZDE8Dx%TI7tg6i2CSL8q7dxR^B? zJZtGP_jnIm}8EF*65^lGv&Y_ zKMGr9n3vxDHsiiu@U&6g#ip;91azfx#aBg}%M*|$=jtu5mtH$Y#=NPF$ z6LEqh+*gX*M8e07vcB>v_O44?oNj7&{higwIn3pL@Iu`0Oh0P0^_i~(nF*0vKG^Oh z{0f{6+-zPkeB3DQZ|?S@FPTTkha~8eA~us#SFhg3jZB5(7Oma4EvYtoxsI<|=dqR) z-d47Bt@d7wpi(9Ozf3eZ`;gUlA3kn1n<-PC7MeDI@Xq?n%$V9e?w4sFHd>?kg>B7x z+1!m<66{BZ%-Cwp!$xiT6(4#GlB-DupgK|N_yGkvjyqW(tqD9inc(v4&x6zN=w-MNf0xE{xk;jdq?&0uUBlrL6Rg}`#ng`P7h%uZ)!GlIe zpDEQP5?WGGD<`oh)-00&Yi^z7?o?|UDX&iY@8v3*avgN&)kusEF8aJt+fL?*p-h?? ze`qIQ1sP@mF`8Kh5k_5SJ7JSz)Dr_5LpL6f48c-y&cfL3@M46UXOdyHlDSdp&=D?L zRa=p8cR30xr*C9p=PHcZR-DI;uC{X=iK3+)cA2{^{7yW^RMCCb$d^kt)jb(BL}?-R zM%pgwPi0aOOh9~PF>=|YOE4-~y*SH5-HY?rwM)vXizUBXBvnL=VZwjf=oyfYyoB5y zT3fHy6xQE7y{1OK1zJigdz9I$tQdYQ`ACZ$5j{?)X6M#8eHnvX zHFbuOE;;$VG=xqXJ+Y&w7ABr$FEO~^>|(_EH6X^=*H`(jz4YJGKqOwjTHk)#j>k>1 zH(zy(&&z$*7PWgHP4a%J&crmryR=!@}7GDcq*dEA(=v1@|c{pty5 zNzoD&PN_Q-EyAR;^9_j6q4-Z5{XN)$(CP8a@+e7F`h=BH!6q7 zFr$~5B2&HQ>_tn(!6W^dcV<{j=wL)}*}PmU?=`R3Z)~rRGU^%SjJ$>~lv0%~{zH4Q zji)(gWjl}CH^&QPdu(;XgY!44B)E}4)pZZv+{urH%Ui}~&yE;zWSONHb2ggE8P{rm z*w;>@-0&6`K0?)zxz^a@rf%mNvm?tO#?}n>;K7-P?f25 zuGQo?si!5i>`MRSM2t}O)rd3Zbe`xW&z__7$ZM-lS6R+2cGyy1QB>wn`(l2&=~9g5 zJ`)kTq`I=AQZnmL&zYSVYSgG5i!>ADN=50*yo%1k1TDpw&~l;?DzDrvQeKM+W!dU! zi?M9WB*W+uH=kJt+f~kh$X`3%E%6VY?ii;r8kc6Q=;(G&GHqhW7~IH{DukmzF8=eZ ziIJr#j!a`yYdtGA8@Gu@o=jib#5jVuI(f#59&X9x1)m`WG^9}xOJvz9x7|jT+%eM4 z$CGNz>*<;|y&_a9_HEFJqzq$jj9f9R6=rWA{n8#f|Njjfp`b+cB#td1$x*w{70z)cxO zM}{Sp)n)t0)VQ#`Kr+`xu5xbr$Pg80t(g|6Nz6wLyMtm)_sB~vsb5rG=J%8_!sIdv zF`7G1QzD&9z0e!&pwl~prgzY;+ry0hW^+r;)_O&(RDYh$G0%qNm=|t6oj58bSY9+b zF39ZF%LC@lrkXx3M5GxD22SKkHOcsDK3;a*J*8q-bVOcWr#=mDWN7+`Y^2z#pD9As zzN+l#6v>sVs>yYYlpoh^dTL|1aWjZ8I)`#MXF@!Xb0n+D*a>6hR=KJwxwcAOnaY&V zEOu0r=o^t!SzRpsf5qZ*Ip*(~6yq#;BchCH?PnYDi5bY3N@&eP=}kX|k3M+N$nM~{ z`Q$ATuGZ4dt$f}K#av4}j~hj5@k+O=7K_rdg2BsOtf5~mUL64$Z}g41c+DWj*b{ME zsVROC3gW$T%qf2Ga8PT~XuP?-YQRe?%PJU0ip6&#V~?jPW&@6hF!~0$W80F-72f!! zuJlt)S9RQJ*A{wa#O%1!gcw5xcp@t2(vHjEKz2dh_+#zifEk6eE#MgMuc=#=Z_wKhA~)gP(Uv)Vqe4`uMo#oRvdB^a%} z(~8*Lgi_PI3S8Z?kl|WpBg6lkV?-=d!a?ulG3tGP7WVs_{m1sSvYH*8j}-1;fDs5z}GLcE;?lGZ{_ z4rDc_Z9r7!no`aS_X&66mR=w+ofnM?G=>asxM0jR$j($XV>wlo7s`|_-N=}8f7eJy zlrc|YE*ol2Iv^C22Jx-Ca%!a4E-xu?3eg)Yr^oYIG%j)V8r|^4wa}3V^tTbWUi@!@R+3<=)6aQ^`O^OV-9qgB^eV&bLqO&f5L=NhXtUT zhx2`VV{x=(ln&3hrk9M8Va)0@qhxVmQN1o4d!nIVs2!Rj zQvfylcS=~trh6q3bM~Jm#8@%1@fwQG+w?A~nLv~kEt3k3+%Fz`0%4yvhIG`eRes9J zB@rs$tZD~tJ*3UOW442+45PENTLrsAu!Km(OX5x_}0AV*N z4Zl<(!_=u6a`1baV>W`Q45Pc>#NwreMch8AoP1s_CdSkjw%%etK=P*Xj z1Ygq9mFLg=VOk@PxxjQDH@eyy4YrHZRj5NgGo22PTZNtkqpO3}rFIil!FlR3#5puk zot9wKO|bsy1U;Jsn+#8A2aXzVtt~dCjS7zmqa)N8Zi`EeNz$S#B{x7mBx=+7ylC*i$fZnADI!{{EQ-`kwxXXD$< zt$j24hGs01Wln+fefi^MjHO~DqKr`+drctiiz6O7can+r=opC8=lQ*|iP6(X9yb;Y z$&+quk!*r3q2=38d~dmTQ8KQeUmr7}b@U1(l-5p7F3j#mWdlT-|1&M2T$39C|;4rm@uUYFq-}C7QTE5 z*O6{sBB531A}>53cve;f1^kqermU(i!?~Lnez3-+S+lT&zCBQ*qYr5YGRdY5^z#I% z$)LFAGHs&77yuiSWlTzV9|$vjH7H0;=`n)oLS5aFtLjqS)n;Bzm9*oP(rc3Vp;8>6 z`%9f|bjI3i@xL3(|1RAW3Bx=K@F$_ zdxMpr9_$PD0|$Tu!NK4Va2Plo90`sB$ADwOao~7xA~*@00#ZU=XQyTCo*UT{Bn06YX929JWrz!Ts} z@HBV^JO`c!FM^lAE8tb|I(P%T1>Oelg7?4&;6v~+_yl|gJ_lcdufR9pTkt*j0sI7h z2ET&ez#rgG@HhAe{15yG*4{|44pRDd1;fDzkOM}6(O@hX2gZX5U<_Q z*dELPGr?>y2h0QW!2+-&*a_?mb_KhEJwO2{1dBj1C;^MX60j631Is}Lr~-R|8c+-N z1}i{4*az$f_6G-ogTNu+P;fXn0vrX72FHRFI3An;P68)`Rp3-`IyeKI1w@(_3(yj@25mq)&>nOIoj@1R6?6wZKrhf6^acIE z05A}200x1DtB3^*1X2aX3Pf|I~0U==tGoDR+eXMuCTx!`b=mz>nZ( z@C*12{0{yEe}R9%zu-Tx*2aQ$z`9_4&;qmqtwCGR4s-w=L1)kfbOYT%PtXhW0ewM# zFaRXL24F)l7z_a$gJED3FdQU74j2hWgE3$n*bGbnn}aRER$v>jEtm)b-+z4(4w}9Kg?ch#u7q|!93+@LGfQP`t;8E}xcmg~L zo(9i==fLyeMeq`M1-uGg2XBD4z}w(m@E-U8dBfzF^S=mvU#o}f4A1Nwpf zU?50U(gQ> z00Y4WU=SD#HUb-ipVWfvv%|U^_4gOa^&i3YZ3_ zgB`#OFbm8EbHO~24;FxhU?;E(*cI#!_5gc=LQn*XK`B@a%D_@k4wi#TPz9<%4X6Wq zgO#8j>^?!Qc>Z7&sgp3628CfMdaN;COH%I0>8rR)N#N>EKLo7B~l-3(f}@ zfQ!Jz;8JiIxB^@Wt_IhD>%jHkMsO3j1>6d52X}zGz}?_pa36R8JO~~JkATO(Rv z13&_705$}J!4R-97zQ>0!$A_{fRSJ{7z4(E&A2AI=7RYkAM6Mgf}O!GU^lQkC;)qcMW6_jfKspol!0ZS98`cxuotKXwV)2H z04u>hU|+C5H~<_34hDyU!@v>XNN_Yb2Bg4o-~@0YI2oJ*P6eldGr*bPY;X=Z51bD! z1Q&rzz@^}Fa0R#uTn(-T*MS?rjo@Z*3%Cv34(3_E-9Qh}6Z8gsKtIqQ z36 zR)Bi257-av4-NzefkVKd;BasRI0_sMjs+=jJU9WI1WpF4z^UMLa0WOFoDI$e=Yb2r zh2Uav3AhYg4z2`Ofos6E;CgTaxCz`0ZUwi2JHVabZg3B{58MwP1P_5nz@y-C@C0}Y zJPn=&&w&@fi{NGO3V02?4&DTBfp@^W;C=7`_y~LqJ_VnFFTj`JYw!*D4tx)O1V4da zz^~wU@CWz{{0;sE{{w3c7px7|1?zzppe1Mx+JJVTJ?IEJfi9pc=ni^-UZ6MV3;KZp zU?A843<86}Mqpzw6l?-E1xYXhj0B^=7%&!W2F8QU!4_aEur=5gYzHQR$si9*0n@;A zumhL@W`WsYE|>@M!2+-l>;!fJyMo=p9$-&U2#P>4C6 z012=G*boc`L%_yh7}x|12T70vMuO2`3>XJC0~5gJU`wzS*amD1CW1*I7vzDdU>evS z>;PthSzr#B3+97-up?Lqb_TnE-N5dk0PG1Cfg(@>O2HCP29|+xPys5zUZ5J(f;zAQ ztOWajeZl_V0B{gE7#s=?14n=(!O`FtkOIen6Tpe!WN->N6`Tgn0B3@;!8zbOa6Y&Y zTm&uwmx9Z|72qmxHMkaB2W|j2f}6oD;5KkOxD(t3?g96L`@sX?A@DGG6g&o=08fIa z!871F@H}`CyaZkWuY%XX8{jSQHh34j2R;BFf{(!`;4|*uz?NWZunpJ_OazlbE|>zQg6Uv; zFayj4v%wrN56lM(z>Z)iurt^d><0D#1)vZt0>z*NECx%!Qm_mx2Nj?S>;-B-E!Z2Z z0QF!WupihT90(2qhk!%D;ot~x6gV0j3sT^CZ~{09oD5chQ^D!r3~&}W8=MQy0~de` z!NuSba2dE9TnVlM*MMum_233@6Sx`N3T^{;fIGq6;2v-vxF0+S9s-YmN5SLZ3Gftn z8axZ0122FV!OP$k@EUj>yb0a{?|^r~```ock)Uqq(vSJ?Pr+y43-BfQ8hiu31K)!m z!B5~9@GJNo`~m&~e}jL)|G-)~g0;cAU_HcYXb^tTLEHE3)1@k~YSO6A+oxm<&SFk(S1MCS3K@lhhrC>2A14}_USPm*d6{rR^ zpbqQ}R)Tu4FW3(p01gBPgG0b!;BasxI0_sCjs?eo;WOTlH}3UDR38e9Xe1J{Ea!A;;6a4WbS+yU+acY}Muec%D`Ab1!&0v-d8 zgD1gL;2H2Ncpkg}UIH(JSHWxG4e%y-8@vPF1MhcF05}L73=Rc{fg`|?;An6RNP*+P3E)Iil3~UO9gApJHi~^&+U`wzy*amC|CW6Tz7fbQ1~?0x4bBDU zfeXNe;9_tIxC~qlt^`+sYrwVOdT;}{3ET{B1-F4az@6Z3a1Xc-+z%cE4}nL(qu_Dy z1b7NO4W0$hffvAw;AQX%cn!P`-UM%fcfh;geeePJ2z(4a1)qU0z?a}_@D2D5d=GvE zKY?Gsui$s^2lxy84gLlH18a>ItPR!$>wy-aC1?%WfOeog=m8Yyvg~NiYJ81f#$hFcxeE#)Hkl7GNu|HP{wx2PT2ZAP-Cd z)4+7F1DFA3f!Sa#m64Zlz!G7QXa3DAs90Cplhl3-*QQ#PGEI1Av4^9Lpfm6ULa2hxroC(eX=YVs; z`QQR@5x5v!3N8azfGfe(;2LlpxE|aHZUVP}Tfyz%4saK^8{7--0}p@)!NcGY@ECX; zJPDox&wyva^WX*W5_lQB3SI+mfH%S0;2rQDcprQSJ_4VBPr>Kl3-A^A8hi`B13!Qt z!O!3q@EiCY{0aU7|A2qNe_*XKf_1>UV13X6v;wU`ThI=403AVR&;@h@-9b;#3-kef zL4Pm+B)|q>LogT&0ULv1U=uJLBtZ@s2}Xl4U>w*COaPmMEx}e`8?Y^y2quACkO!uM zX<&P>1DFYBfjM9c9%H66^!^1^a^oz(L?(a40wo90865M}uQP3LFPc04IWz!71QWa2hxRoC(eb=YaFT z`QSou5x4|g3N8m%fUCgO;977UxB=VUUz{B8C@ECXk zJPDo#&w%H^^Wa7B5_ko?3SI|qfVaTg;9c+@_yBweJ_etF&%o#4OYjx=27C*?2S0$H zz|Y`U@EiC8{0aUB|A7C2|G?T~1?zzI!1|yiXa(AUwxB)e06KxrpeyJGdVrpwH|PWU zf&O41NPt0LL$DDT0)~QNU{f$0i~u=c6c`Q0f^lFxm;kl_TY{~@Hefq25ljZTU<#ND zri1Ol3@{VS26MnXFdr-cJA$3S&R|!t8`uLBfI_ec6oV457%Txx!7{KMRDde57pMWX zU~jMj)PsG%eqeuaAUFsd0uBX-gCoFE;An6xNP*+Q3E(7fGFSyp1*d~Ez**pIa4t9x zTmUWv7lTW{W#DpfCAbP)1Fi+vgB!q2;AU_uxDDI^?gV#(d%%6*e()f82s{EF1&@O# zz*FF9@GN)^yZ~MVFN0UWYv6V8CU^_H1KtJigAc$*;A8M9_zZjjz64)`Z@_opd+;Op z3H$6R;^rf)QXO7zM_Fv0yVW9&8S_09%2r!M0#KFbPZsd0+~d z2Bw1@zzi@8%m#D8Jdh6-fQ4WuunX7~><;z-dxAnx1d2f^SPaU*Qcw<-gGx{ZszD8? z1ABv&pdRcC_5%li1Hr-I5O5ec92^Ob0>^-3!ExYta3VMfoB~#X)4=KAOmG%B2b>Ge z2N!^gz{TKFa2dD)TnVlQ*MRH5_25Qu6SxK33T_8?fV;rm;9hVacmO;I9tMwq$H3#@ zN$?bS20RO%2QPq^z{}uO@EUjnyb0b0?|}Ef``|gr3O)y4fUm&U;9Kw=_yPO~ zeg?mQ-@xzSPw*G`2mA~E18Z$2SO=^N)(0&>E6^IW1?@lw&=GV7T|hU`9rOgfKp)T- z^ale#0&D;_1cSj4urU}0HUYyy66Ao9U^Ey5#(~Yi1h6^S5^M#w0o#I!U=qj$d0;A- z2DS$~fSF(xm;>g5`5+(c2o{2!!7gAousbLKdxAxv2$Xfmgt*;C1i@cniD@-UaW055R}uWAF+1415m01Ydz~z_;Lg@B{b> z{0x2tzkxr%pWtus5BMMW53D_2unt%ctPfg(R-g@N3)+JYpcCi}x`J+?2j~fUgFc`i z=nn>h1Q-N11RH@NU?>;{HU-1M2#^Ctfze^-3!ExYta3Ux_T~HyYTbd&oK1lpAicBA4z*w*u7!NiF zTY#;=)?iz(9hjv4Nv4m9U=qj$d0;A-2DS$~fd5CqJp~JrECB!=+qP}nwr%6>j&0kv zZF9%AZQJ&|d-~%cO|3w_WR{V@Q8Fc?EI3?ncSqcH~KFdh>z2~#i?(=h|HFdK6* z4-2pmi?IaDupBF~3Tv#+fwuo+vi4Lh(CyRaL3QEN#6bx;@e(EyFm7){X(EzlCJ z@jv{FHfV=EGXmI${Wyq2ID(@%juSYA(>RNBxPXhej4QZ?>$r(qxP!a6j|X^!$9Rfo zc!8IAjW>9Q_xOlU_=2zajvx4i-}s9_GXn^Mpa_l-2!+rHi*Sg5h=`0Rh=%BhiCBn( zxQLGgNQA^lieyNElt_&ifX8Vny8IBsE7J!h(>6Frf7~9Xoc4J2mhii+MxqFqBFXn8@i(>dZ7>cqCW;; z5C&r?hG7IoVl>8J9L8fJCSeMuVmfAE7G`5E=3xOAVlkFr8J1%uR$&d+Vm&rs6ESGf+HkCAq>JIJR%?xA|ooIAqHY1HsT;2 z;v*pvAqm3f4In%sAQB=YDxx6r+F$hC26vHtBqc9p{F%A#!ahu?btS72B}`|6v#QU@!LL01n|Wj^Y?j;3Q7t49?*^ zF5(id;3}@;25#Xt?&2OE;2|F437+9OUg8zr;4R+c13uw1zTz8x;3t0L4+7;2ATWX= z7(yTZ1V~p)s1G8CswvTH}BC z7j4iE?a>jP&;?!59X-$sz0nu_FaQHF7(*}&!!Z)0Fa~2W9uqJLlQ9+3Fat9&8*?xZ z^RW<%umnr794oL2tFadAumKyf8C$Ro+p!b>VK??*ANJ!Q4&exn;y6y=6i(wT&fx+s z;xew_8m{9eZs88@;yxbW5gy|yp5X;v;x*pj9p2+3KH&?#;yZre7k=X}0_6`N2!bLw zLLd}EBP_xp0wN+Zq97WgBPL=Y4&ov{5+D&0BPo(01yUk4(jXnuBO@{)3$h|Rav&FS zBQNry01Bcoil7*Zqa;e949cQBDxeZ7qbjPQ25O=<>YyI#qahlh37VogTA&qL;~)Hs zwrGbA=!nkff^O)Jp6G=>=!^asfI%3Hp%{h{7>UssgK-#-iI{{bn2PC`fmxW1xtNCq zSct_~f@N5al~{!}Sc~=8fKAwpt=NVg*oj@(jlI~112~AoID%t1j*~crGdPR$xPVKz zjH|eY8@P$vxPyDRkB4}KCwPkIc!5`VjkkD*5BP}B_=0cvj-U92KlqEl1p)|yUY{-tB$b~$} zi~J~nLMV))D25U!iP9*8aww0AsDvu0it4C=TBwb>sD}n=h=Qnyju?oA*ocdGNPvV$j3h{g5jXcPQ z{3wV*D1xFWjuI$^(kP2^sDO&7j4G&x>ZplYsDrwwj|OOj#%PLWXn~e!jsM|av_U(x zM@Mu*7j#8;^gu84Mql*901U)n48brA$4HFA7>vbuOu!^e##Bth49vuA%)va&$3iT^ z5-i1XtiUR)##*ey25iJ;Y{52c$4>l*-PnVD*pGuagd;eL<2Zp+IE}M7hYPrf%eaDT zxQ?5+g*&*5`*?syc#Nlbh8K8=*LZ_>c#n_xgfIAt@A!dV_>I2^R49NT2#VkcflvsI zun30;h=|CDf@p}2n23cqh>Q40fJ8`)q)3JoNQu-)gLFubjL3v6$cpU9fn3OqyvT2TD2wu_fJ&&0s;GtK)Xo}`&fmUdZfABBbq8&P* zBRZoCx}iIIq8Iw0FZyEu24OIUVi-nXBt~Nl#$h}rViKlcDyCxwW??qwVjdP?Ar@l^ zmSH(oVine4E!JZLHeoZiVjFf~Cw5^s_F^9n;2;j;2#(=6PT~~K;4IGL0xsb)uHqVQ z;3jV44({PT9^w(6;3=Nt1zzDb-r^lT;3Gcc3%=nye&QGY;4cCf4j>4EAvi)J6v7}Z z!XpAAAu^&O8e$+OVj~XXAwCi!5t1M&k|PCDAvMw>9Wo#zG9wGJAv zp)iV~7)qcdN}~+Qp*$+05~`pos-p&Kp*HHG9vYw_8lwrCp*dQj75;~R&<1VM9v#pL zozWHD&;vcu8-36Z{V@=OFa$#}93wCaqcIlaFaZ-W8B;I~(=ijXFb8un9}BPui?I~T zumUTw8f&l)>#-4=umxMO9Xs$Jc3}_pVm}Vx5Dw!gj^PAO;xx|S9M0n+F5wEU;yP~N z7H;D%?%@F*;xV4!8J^=MUf~Vi;ypg#6F%cBzTpRc;y3;vP>}!vBPfC)1VSP-!XO;N zBO)Rp3Zf!9Vjvb`BQD}00TLoHk{}t9BPCKH4bmb#G9VK&BP+5Y2XZ1e@*p4bqaX^Q z2#TUON}v=3M4JMkZOV-NOWKMvv$j^HSc;{;COG|u82F5n_A;|i|fI&R_? z?%*!&;{hJwF`nWXUf?BO;|<>7JwDH~u0}(Ex%VD1svdLLoH5A{-(h zA|fLSq9HnBA{OExF5)8r5+N~?A{kO3B~l{|(jh%EA``M8E3zX8av?YJA|DE%APS=h zilI14q7=%YEXtz-Dxor}q8e(TCTgP&>Y+Xwq7j;)DVn1NTA?-m!M|vWcIbeP=!`Dt zhVJNzUg(3q=#K#yguxh!VHkmt7>zL)hw+$*NtlAEn2s5kh1r;kd02pjSd1lDhUHj^ zRak?ySdR_Zgw5EBZPzjve?9yRZj)u^$I;2#0YL$8Z8CaT;fE4(D+Zmv9AFaUC~s z3%79>_wWD@@fc6=4A1crukZ$M@g5)W37_#5-|z!J@f&{-sCWQ@5fs4?0wEC^VGs`C z5fPCP1yK&4bTXU(G<fnMm1zUYSm7>L0bf?*hrkr;(B7>n_kfJvB)shEZtn2Fh#gL#;bg;<0oSc>IX zfmK+IwOEG@*oe*8f^FE2o%j#Cu?PFG9|v&=M{pF!aRR4s8fS417jO}maRt|K9XD|c zcW@W?@c@tT7*FvGFYpqt(SCmb9nlG0&=uX$1HI52ebEmCFc5<=1j8^KBQXkNFc#x6 z0h2HpQ!x!QFcY&e2lFr=3$X}GuoTO&0;{kZYq1U+uo0WF1>3M4JMkZOV-NOWKMvv$ zj^HSc;{;COG|u82F5n_A;|i|fI&R_??%*!&;{hJwF`nWXUf?BO;|<>7JwDH~u2ffdGOaD1svdLLoH5A{-(hA|fLSq9HnBA{OExF5)8r5+N~?A{kO3B~l{| z(jh%EA``M8E3zX8av?YJA|DE%APS=hilI14q7=%YEXtz-Dxor}q8e(TCTgP&>Y+Xw zq7j;)DVn1NTA?-m!M|vWcIbeP=!`DthVJNzUg(3q=#K#yguxh!VHkmt7>zL)hw+$* zNtlAEn2s5kh1r;kd02pjSd1lDhUHj^Rak?ySdR_Zgw5EBZP zh7&l6(>Q~3IFF0Cge$m;>$rhixQ)BGhX;6w$9RHgc#fBNg*SMM_xONM_>8akh9CHe z-}r+-hXM$Upa_N#2#L@LgK!9sh=_zJh>GZlfmn!*xQK@YNQlHpf@DaJlt_g%NQ?By zfK14YtjLBO$cfy@gM7%3f+&O{D2n1Jfl?@qvM7fNsEEp_f@-Lany7_3sEhh&fJSJH zrf7y1Xo=SNAO1xfv_pGzL??7XS9C`Y^g?g+ML!I{Kn%tZ48w4Y#3+oxSd7O6Ou}SL z#Wc*oOw7g{%)@*v#3C%gQY^;`tio!n#X4-jMr_6wY{Pc!#DCb0J=ll+IEX_yf}=Q& z6F7y_IE!<*fQz_{E4YU1xQSc1gS)to2Y7_Xc#3CuftPrVH+YBl_=r#Vg0J|FANYme z_=`Y?0|R$RhUkciScrqTh>rwFgv3aSWJrOONR2c|hxEvZ zOvr+)$c`Myh1|%Cd?V zI%Z%NW@9eqVF4CmF_vH%mSZJWVGY(|JvLwyHe)NcVFz|%7j|PW_Tc~y;xLZj7>?s4 zPT>sB;yfBPVhp5Aq^E3ZM`QqbQ1@1WKYb%Ag#|qarGy3aX+yYM>Tsqb};90UDw)nxGk) zqa|A5fA|M&&=&2{0iDnpUC|9a&=bAU2mR0=12G6gFciZv0;4b*V=)dBFcFh61=BDc zGcgNuFcJTBrAuHY)J;|6ZwHtymc9^fG!;|ZSOIbPxw-rz0X;{!h7Grr;*e&8p5;|~HI z4InUrA{as-Btjz$!XZ2&A`+q?DxxC>Vj(u-A|4VTArd1Ak|8-#A{EjgEz%#zYEu^C&i4coC3|6w=wU?2A5AP(UOj^a2@;1o{d zEY9HqF5)t-;2N&uCT`&l?&3Zk;1M3Aq%o1 zJ8~cwaw9MDp#Tb^Fp8iUilZb-p$y8RJSw0PDx)f@p$2NAHtL`r>Z2hVp$VFzIa;6< zTH_!5i?(Qo4(N!^=z?zOj-Kd+KIn`77=S?-jG-8Y5g3Wl7=v*bkBOLsDVU1sn1NZC zjk%bI1z3p1Sb}9(j+I!2HCT)F*nmygjIG#)9oUIo*p0o|hXXi>!#ILtIF6Gzg)=yd z^SFRZxQwf~h8wtv+qi>!xQ~Z;geQ24=Xilvc#XGshY$FO&-j9G_>Q0Wg+KU6&UgLsIKgh+%WNQ&f0fmBG1v`B{x$cW6yf^5i+ zoXCYd$cy|afI=vYq9}$ED2dW2gK{X3il~GtsEX>Sfm*1Ix~PW+Xo$vWf@WxrmS~0l z;UBa?TeL?9bV6rzMK|<7PxM9~^h19P#2^g8Pz=WijKXM)#W+mBL`=pMOv7}{#4OCg zT+GJ;EW%jSDh1iITcu0VRNQ@*%hU7?zR7iugNRJH2gv`i_Y{-F} z$c;S6hx{mrLMVcwD2@^+h0-XCa;SicsEjJ8hU%z^TBw7%sE-C{gvMx!W@v$yXpR5j zU$j9xv`0sDLKk#Jcl1Cn^hRIw!vGA#U<|=9497@}!WfLjcuc?~OvY49!wk&CY|Ozt z%*R43!V)aSa;(5Atj1cb!v<``W^BPWY{yRghuzqNeb|qKID{iOisLweQ#g&YIEM?k zh|9QwYq*Y^xP?2oi~D$hM|g~WD1u@rj*=*aGAN7ksDMhSjH;-H8mNidsDpZ_kA`T3CTNQ0Xn|H}jeqbj z+M*pgpd&h?3%a2@dZHKlpfCDk00v<&hGG~-U?fIk48~zRCSnq%U@E3#24-P4=3*We zU?CP`36^0wR$>*_U@g{T12$nZwqhH0U?+BAH}+y54&WdT;|Px7I8Nde&fqN0;{q<> zGOpqpZr~N8lod6Vj&LVB0drz5fURQk|70BA~n(=9nvEs zG9e4HB0F**7jh#n@}U3c7LN}&wOqC6^~5-OuAs-XsIqBiQF9_phZ8lefA zqB&Zi6uD9h7lNv(HMhq7>|jVgejPc z>6n38n2ouZhXq)O#aM!6SdNugg*8}<_1J(-*o>{%h8@_6UD%Di*oOl+h{HI7V>phJ zIE6Dfi}SdEOSp`yxP}|JiQBk?d$^B>c!Vc-isyKNS9p!Lc!v-8h|lw!YG1bD2|dSg)%6M@~D7HsEn$ph8n1e+NgtisE>wdgeGW;=4gRdXpMjHFWRCV zI-nyuqYJvBJ9?rQ`k*iRV*mzWFot3nMqngHV+_V&JSJiireG?jV+LknHs)d;7GNP3 zV+odFIaXp7)?h8xV*@r}Gqz$Ic3>xVVK??-9}eIk4&w-p;W$p>6wcr*&f@|u;WDn` z8gAewZsQK_;XWSX5uV^Fp5p~x;Wggk9X{YAKI03%;X8if7yjTc0?!K|2!bIvLLwBx zAS}Wo0wN(Yq9Ph%ASPlX4&os`5+V_jASsd~1yUh3(jpx)AR{s(3$h_Qav~SY^SRpdlKg37VlfTA~&HhkwupZP6Yb z& z6w9yzE3q1Dunz07F@P@rD;h9m*pTAlrVW=wDU?B3lt%?rLS&)J7fDLwz(v zBQ!zhg#mO$H}pVH^hO`_Lw^j!APm7!495tJ!f1@eI84AqOvV&U!*tBVEX=`N%*O&O z!eT7NGOWN#ti~Fw!+LDQCTzi0Y{w4#hh5l%z1WWfIE2GEieor|lQ@ktIEVANh)cMF ztGJFExP{xei+gy0hj@%9c!uYAiC1`ow|I{a_=L~+if{OVpZJYG2(&1GzzB+92!W6Y zjW7s@@Q8>=h=Qnyju?oA*ocdGNPvV$j3h{g5jXcPQ z{3wV*D1xFWjuI$^(kP2^sDO&7j4G&x>ZplYsDrwwj|OOj#%PLWXn~e!jsM|av_U(x zM@Mu*7j#8;^gu84Mql*901U)n48brA$4HFA7>vbuOu!^`ToOQMbU`MjcJ<$t&&=>tN0D~|XLoo~^FcPCN z2IDXu6EO)>Fcs4=1G6w2b1@GKun>!}1k11-E3pb|uommF0h_QHTd@s0uoJtm8+)-2 z2XGLFaRkS394B!KXK)thaRHZb8CP))H*gcTaR>Ks9}n>ePw*7a@dB^#8gKCqAMg>M z@de-T9Y664fAAN9X9o}j!4MoF5ei`t7U2;Akq{YC5e+dA6R{Bo@em&gkqAkU6v>eS zsgN3Jkq#M<5t*^$b)>ykAf(KA}EUDD1lNajj||*3aE(6sDf&!j+&^2I;e~KXn;m&jHYOY z7HEmq_#gg78?-}vbVMg~L05D~5A;HB^hG}mz(5Sf5Ddd`jKnC6!B~vP1WdwYOvN9L&RfEW{!#!BQ;83ar9vti?KPz(#Dw7Hq?I?8JZAjXl_h{Wyq2ID(@%juSYA z(>RNBxPXhej4QZ?>$r(qxP!a6j|X^!$9Rfoc!8IAjW>9Q_xOlU_=2zajvx4i-}s9_ zfddGFpa_l-2!+rHi*Sg5h=`0Rh=%BhiCBn(xQLGgNQA^lieyNElt_&ifX8Vny8IBsE7J!h(>6Frf7~9 zXoc4J2mhii+MxqFqBFXn8@i(>dZ7>cqCW;;5C&r?hG7IoVl>8J9L8fJCSeMuVmfAE z7G`5E=3xOAVlkFr8J1%uR$&d+Vm&rs6ESGf+HkCAq>JIJR%?xA|ooIAqHY1HsT;2;v*pvAqkQqIZ_}MQX?(WApf4-5LRe|wrGzI=!DMbif-tEp6HD}=!gCoh(Q>Fp%{)47=_Uoi*cBMiI|Kjn1<u3Z+pNvF0UNOyTd)n=u@nDcH}+s3_TwN9;Ruf6I8NXc zPU9@j;Q}t=GOpknuHzpBQhZi zvLZWjAQy5YFY=)P3ZgKIpcsmyBub$S%A!0fpb{#hDypFdYN9skpdRX@AsV3xnxZ*c zpcPuWO+h8T#6*ocF8h>wIwgd|9cgh7u@=(kO#+D36M$ges_t>ZpNQsExX)hX!bf#%O|OXpWX> zg@E7GfUrUvv_*S#KqquYS9C)U^h9s;K|l1zKn%hV48?Gaz$lEySd7C2OvGeN!8AOIkBhj3E4Yg5xPe=^jk~yq2Y86bc!Fnmj+c0aH+YNp_<&FNjIa2HANYyi_=7+p z0tk$t2!;>{iO>jxa0rixh=eGJis*=eSco0Klt2OdAg=$#bt@hcAR!VX36dc>QX&=7 zAT81(12Q2qvLYLDASZGo5Aq>D3Zf8-peTx?1WKVa%Ay=9pdu=x3aX(xYN8hEpf2j8 z0UDt(nxYw6pe0%(UKkUXH?8AN> z#33BPQ5?q!oWg0G#W`HSMO?-eT*GzT#4X&xUEIe5Ji=o<#WTFXOT5M#yu*8Z#3y{g zSA540{K9YiMWB!Y1VK;)M+k&MXoN*LL_kDDMifLtbi_m~#6eudM*<{5VkAW}q(Dlf zMjE6;dSpZwa054S8+ULI_wf*q@B~ls953(+ukjY|@Btt38DH=X z-|-W_@CSbpI8*>Z5DdW)5}^iB~cn>P!8o$5tUE{RZ$%^Pz$wD7xmBp z4bd1)&6nRGn1i{Pj|EtS#aN1ESb>#TjWt+@_1K6_*n+Ltjve?9yRZj)u^$I; z2#0YL$8Z8CaT;fE4(D+(fPmhNOV(F#71wbCw{RPGaSsph5RdT$&+r^C@d|J77Vq%^ zpYR!9@eM!l6Tk5XfkFom7(o#XArKOw5eDH99uW}I8Cj7HIgk^%kq7yZ9|cheMNkyQQ39n<8f8%q6;KhCQ3cgd9W_x4 zbx;@e(EyFm7){X(EzlCJ5pePskgCuI?a&?_(FtA972VMTz0ezd(GLSK5Q8xU!!R5p zF$!Za7UMAilQ0=mF%2^?6SFY~^DrL^u?S1B6w9#!tFRhtu?`!s5u33E+prxw@gH_$ z5B6a{4&o4w;3$sc1Ww^J&f**{;36*L3a;TgZsHd1;4bdt0UqHop5hr^;3Zz;4c_5B zKH?L;;48l42Y%r<{vuGA0D>SWf+GY%AvD4w93mhhA|nc-Av$6r7UCc-;v)ePAu*C7 z8B!o6QX>u0Aw4o86S5#HvLgp_Avf|O9}1u#3Zn>$p*TvS6w071%A*1*p)#tX8fu^> zYNHP7p*|X-5t^VWnxh3;p*8-&zi5kg=zxysj4tSg?&yhL=!3rKj{z8j!5E5R7=e)( zjWHO9@tBB7n1ZR8jv1JR*_exYSb&9Cj3rox%FIE*7WhT}MiQ#gaOIFAdsgv+>!Yq)`%xQ#owhx>SlM|gs#c#ao%h1YnCcldyh z_>3?3hVS@^U-*N+2pl$mAP9!w2#HV#gRlsX2#AEph>B>4ftZMmIEaV%NQgv8f}}`} z6i9{CNQ-pHfQ-nDEXaoJ$cbFYgS^O(0w{#SD2iezfs!bVGAM`gsEA6af~u&F8mNWZ zsEc}NfQD#{CTND{Xo*$`s7?t8E3`pdv_}VYLT7YEH}pVH^hO`_Lw^j!APm7!495tJ z!f1@eI84AqOvV&U!*tBVEX=`N%*O&O!eT7NGOWN#ti~Fw!+LDQCTzi0Y{w4#hh5l% zz1WWfIE2GEieor|lQ@ktIEVANh)cMFtGJFExP{xei+gy0hj@%9c!uYAiC1`ow|I{a z_=L~+if{OVpZJYG2ox@WzzB+92!W6YjW7s@@Q8>=h=Qnyju?oA*ocdGNPvV$j3h{g z5jXcPQ{3wV*D1xFWjuI$^(kP2^sDO&7j4G&x>ZplY zsDrwwj|OOj#%PLWXn~e!jevTufJB8hXovRbh)(E&uIP>)=!M?si+&h@ff$S-7>3~( ziBTAXu^5jDn1sogifNdEnV5|^n1}gTh(%a}rC5#?ScTPCi*?w5jo6GW*oN)ciT|)0 zd$14taS(@a1V?ckCvXa6rrBDWCQ63dg36)V5)ldU9 zQ5$to5B1RyjnD*5(Ht$%3a#-E{zY4~LkDz3XLLa~bVpD0LLc-+e+!w&4kF6_o$ z?85;Z#917bJi-$^#dEyCE4;>Ayu$~4 z#AkfLH+;uW{K6mnMc@bl1VJzaM@WQ17=%T5L_j1&MpQ&Y48%li#6dj7M?xe*5+p@( zq(Ca9Mp~pp24qBLWI;A$M^5BI9^^%S6hI*qMo|<)36w->ltDR^M@3XZ6;wra)IcrN zMqSiH12jZqG(j^oM@zIqKuvN$SfLHtqCGmG6FQ?Sx}gVpqBr`WANpe;24M(>VmL-% z6h>n##$f^`Vlt*+8m40=W?>HIVm=mN5f)=9mSF`}Vl~!a9oAzbHen04Vmo%=KkULD z?8SZ@z#$yQQ5?ewoWyCI!8x4AMO?xaT*Y!81I^OT5Axyv2Kb zz$bjhSA4?{{KRkkL7<2M1V&Ht+dSpN*WJXqGLk{FbZsb8e*ejlT#KDS#jdir@%=Pza5%2!{xWh{%Y7Xo!xOh=n+ai}*-@L`aOJ zNQM+hiPT7gbV!ek$b>A&itNaNT*!^Q$cF+bh{7m>VknN1D1|a8i}I*|N~nygsD>J- ziQ1@xdZ>?vXoMzcisop6R%nfX@Gsh;9Xg;RI-?7^p*wn_7y6(t`eOhFVK9bb7)D?u zMq>=dVLT>c5~g4(reg+XVK(Ms9u{CB7GnvPVL4V}71m%a)?))UVKcU38+KqPc40U6 zVjm9RAP(aQj^Q{?;uOx{EY9NsF5xn+;u>z?CT`;n?%_Tj;t`(UDW2m6Ug0&~;vGKV zBR=B`zTrE5;urqlF9JsnAP9mXI6@*6!XPZdBLX5JGNK|HVjw1BBM#yrJ`y4kk{~IP zBLz|+HPRv-G9V)|BMY)2J8~iy@*pqrqW}t_Fp8oWN}wc4qYTQSJSw6Rs-P;WqXufB zHtM1t8lWK>qY0X!Ia;C>0y@zG!U}EB7VXgiozNLw(G5M&6TQ&~{m>r+F$hC26vHtB zqc9p{F%A#!ahu?btS72B}`|6v#Q zU@!LL01n|Wj^Y?j;3Q7t49?*^F5(id;3}@;25#Xt?&2OE;2|F437+9OUg8zr;4R+c z13uw1zTz8x;3t0L4+2FAATWX=7(yTZ1V~p)s1G8CswvS|gyhGayl+4cehSI-(Q0pewqg2YUUVqkGyG1lyqiTDEQ5 zwr$%+cb9G3wr$(CZKJEYY~M5Q%iQ^ajO>Su74$}5^uquQ#9$1;Fbu~?jKUa<#du7> zBuvIsOv4P!#B9vLJj};JEW#2j#d55`Dy+s@tiuLu#Aa;4Hf+aE?7|-G#eN*XAsoh0 z9K#8m#A%$tIh@BuT*4Jx#dX}kE!@Uk+`|Jr#A7_cGd#x&yu>TK##_9@2Yke5e8D$- z$4~si9|VdTKoA5)aD+f8ghp6|Lj*)bWJEzUL`O`-LL9_Jd?Y|3Bt}vsLkgrsYNSCr zq(??%LKb92cH}@V-VH80z6h}#vLK&1rc~n3pR7O=)Lk-kKZPY9uqMM zQ!o|NF$1$O8*?!a3$PH2u>{Mo94oO3Yp@pUu>qT~8C$UpJFpYGu?PFG9|v&=M{pF! zaRR4s8fS417jO}maRt|K9XD|ccW@W?@c@tT7*FvG|KbJy!z;YOTfD~ye8OjZ#W(!G zPyEIo1dbL!5ClVTghVKWL0E)G1Vln)L`5{jKup9&9K=I>Bt#-4K~f|~3Zz16q(wSp zKt^On7Gy(qo4b(zy)I~isKtnV} z6Es6}v_vZet+dSpN*WJXqGLk{FbZsb8e!81I^3%tZDyvAF+!v}oC zXMDjoe8*4x!XE^R5kL?GMR0^bD1=5>ghK>GL}WxkG(<;C#6ldzMSLVcA|ysqBtr_M zL~5i#I;2NNWI`5XMRw#sF62gDcO|3w_WR{V@Q8Fc?EI3?ncSqcH~K zFdh>z2~#i?(=h|HFdK6*4-2pmi?IaDupBF~3Tv#+fwuo+vi4Lh(CyRirRupb9; z2uE-f$8iFua2jWE4i|6{mvIHxa2+>s3wLlA_wfLa@EA|=4FBQ<{=+N0!CSn?2YkY3 ze8o5Xz)$?f9|VpWKoA5&aD+rCgh5z@M+8JdWJEz?CT`;n?%_Tj;t`(UDW2nByu^QajW>9Q_xOlU z_=2zajvx4i-v|^dfWQcfUjSDh1iITcu0VRNQ@*%hU7?z zR7iugNRJH2gv`i_Y{-F}$c;S6hx{mrLMVcwD2@^+h0-XCa;SicsEjJ8hU%z^TBw7% zsE-C{gvMx!W@v$yXpMj*w}3%~HfV?T=!j0}g0AR}9_WSM=!Q9B zgRvNo37CY*n2Kqbfti?%Ihcp}ScpYff~8oF63?3hVS@^U-*MSu>%N#pa_l-2!+rHi*Sg5h=`0Rh=%BhiCBn(xQLGgNQA^lieyNE zlt_&ifX8Vny8IB zsE7J!h(>6Frf7~9Xoc4J8~>m!+MxqFqBFXn8@i(>dZ7>cqCW;;5C&r?hG7IoVl>8J z9L8fJCSeMuVmfAE7G`5E=3xOAVlkFr8J1%uR$&d+Vm&rs6EWO+h8T#6*ocF8h>wIwgd|9cgh7u@=(kO#+D36M$ges_t>ZpNQsExX) zhX!bf#%O|OXpWX>g@CltfVM&#v_*S#KqquYS9C)U^h9s;K|l1zKn%hV48?Gaz$lEy zSd7C2OvGeN!8AN9!7&`iNu0tNoW*%uz$IM9Rb0aj+{A6%!9Co^Lp;J0JjHYTi8B;M0GcXggF$eQ79}BSvORyBnu>z~G8f&o*8?X_Zu?5?(9XqiLd$1S# zaR7&K7)NmoCvXy{aR%pb9v5*5S8x^AaRaw-8+UOJ5AYC=@dVHC953(^ukadg@eUvG z5ufn|-|!tj@e6+tC|&?T5EQ`?0-+EZVG#}y5D}3P14F%b)K5Et>00Ev(oNs$aG zkP@kp2I-I<8IcKDkQLdH1G$hJd65qVP!NSt1jSGsB~c1xP!{D;0hLf0RZ$H!P!qLL z2lY@N4bccq&=k$l0iF#44=8TCB$gY{F)2#Ww7~PVB}W?8AN> z#33BPQ5?q!oWg0G#W`HSMO?-eT*GzT#4X&xUEIe5Ji=o<#WVbi7x)ja@CI-39v|=t zpYavn@B=^b8-EZuegHub48ai+p%4aP5gri`36T*M(GUYM5gTz35Al%@iI45u^#kr`Q#4cUGd_f}t3W5g3Kh z7>jY3fQgulDVT=on2A}KgSnWG1z3c|Sc+v>ft6T|HCTuB*oaNog00w&9oU84*o%EQ zfP*-UBRGcRIEhm@gR?k~3%G>KxQc7Ift$FEJGh7Yc!)=Mf~R`(jq-FAQLhpE3zR6aw0eKARqFhAPS)filR75pcG1@EXtt*Dxxx~pc<;9CTgJ$ z>Y_dxpb;9QDVm`LTB0=qt~LY=Dzrg6v`0sDLKk#Jcl1Cn^hRIw!vGA#U<|=9497@} z!WfLjcuc?~OvY49!wk&CY|Ozt%*R43!V)aSa;(5Atj1cb!v<``W^BPWY{yRQ!XE6! zejLCd9L7-`!wHMjcJ<$t&&=>tN0D~|XLoo~^FcPCN z2IDXu6EO)>Fcs4=1G6w2b1@GKun>!}1k11-E3pb|uommF0h_QHTd@s0uoJtn2m7!e z2XP2Ta1_UJ0;g~qXK@Y}a1obr1=nyLH*pJha2NOS0FUq(Pw@=@;syT0E4;y5yvGN8 z!e@NNH~hd){Kg*yP82{81VeCyL@0zoScFFeL_%alMKr`fOvFYU#6x@}L?R?XQY1$T zq(W+>MLJ|aMr1}7WJ7l3L@wk(UgSps6hdJX4Ip46u9&(6N}@E%pd8AhA}XN@s-ik- zpcZPQF6yBH8lo|ppc$H@C0ZfiwopK0p$*!iJvyKhI-@JPp$B@RH~OF-`ePslVF-p| zI7VO;Mq@0-VFD&%GNxb}reh{%VGibEJ{DjR7Go)vVFgxVHP&Dq)?*_!VGFimJ9c0f zc4II0;Q$WeFpl6Dj^iXw;SA2=JTBl8F5@b$;RbHvHtyga?&BdI;R&ANIsU~<{D;?g zgLin3kNAWy_=@lNfnWHIK#2ngjGzdH5D1CT2!n74kBEqbD2R&ah=Ev$jkt)11W1U) zNP=WYj+97+G)Rl|$bd}9jI79p9LR~>$b)>ykAf(KA}EUDD1lNajj||*3aE(6sDf&! zj+&^2I;e~KXn;m&jHYOY7HEmq_zVA_4cehSI-(Q0pewqg2YR75`l25OU?2u#2!>%e zMq(7kU@XRC0w!THreYdqU?yf`4(4G#7Ge>WU@4Yk1y*4-)?yttU?VnT3$|f9c48Oy zU@!LL01n|Wj^Y?j;3Q7t49?*^F5(id;3}@;25#Xt?&2OE;2|F437+9OUf?BO;Wggk z9X{YAKI03%;X8if7ycknk^q7rD1svdLLoH5A{-(hA|fLSq9HnBA{OExF5)8r5+N~? zA{kO3B~l{|(jh%EA``M8E3zX8av?YJA|DE%APS=hilI14q7=%YEXtz-Dxor}q8e(T zCTgP&>Y+Xwq7j;)DVn1NTA?-m#y@C_cIbeP=!`DthVJNzUg(3q=#K#yguxh!VHkmt z7>zL)hw+$*NtlAEn2s5kh1r;kd02pjSd1lDhUHj^Rak?ySdR_Zgw5EBZPVATeyR}xQ_>TgvWS_XZRN{@E=~`4c_8C zKHw8R<14=52Y%u={vdGD0D>SGf+HkCAq>JIJR%?xA|ooIAqHY1HsT;2;v*pvAqkQq zIZ_}MQX?(WAp&Der%*p8jpg+17d{WyR_ zIEh7&l6(>Q~3IFF0Cge$m;>$rhixQ)BGhX;6w$9RHgc#ao%iC1`yw|IvS_=wN= zf^YbapZJA82y`ZZAP9=!2!T)tjj#xZ2#AQth=OQ{j+lsrIEah*NPt90jHF106iA8G zNP~1pkBrEKEXa!N$bnqQjl9T*0w{>WD1u@rj*=*aGAN7ksDMhSjH;-H8mNidsDpZ_ zkA`T3CTNQ0Xn|H}jlb~^+M*pgpd&h?3%a2@dZHKlpfCDk00v<&hGG~-U?fIk48~zR zCSnq%U@E3#24-P4=3*WeU?CP`36^0wR$>*_U@g{T12$nZwqhH0U?+BC5B6a{4&o4w z;3$sc1Ww^J&f**{;36*L3a;TgZsHd1;4bdt0UqHop5ht)#S8q0S9pWBc#jYGgwObj zZ}@?q_>DgZd^Ug}2!`MYiBJfGun3O`h=j<9ifD*|n23!yh==${h(t(&q)3hwNQKl$ zi*(3QbD2MW>h)Sq}s;G_{sD;|7i+X5) zhG>i?Xolu!iB|Xvf1?fBqCGmG6FQ?Sx}gVpqBr`WANpe;24M(>VmL-%6h>n##$f^` zVlt*+8m40=W?>HIVm=mN5f)=9mSF`}Vl~!a9oAzbHen04Vmo$V7j|PW_Tc~y;xLZj z7>?s4PT>sB;yf*ejX>uD2#lZzh7bse&h>f_2hXhE7#7KfJTBrAuHY)J;|6ZwHtymc9^fG!;|ZSOIbPr;Ug0&~;vGKVBR=B`zTrE5 z;uroP(D?v@ASi+(1VSM+!Xg|ZAR;0o3Zfx8Vj>peATHt~0TLlGk|G&WASF^G4bmY! zG9nYQAS<#X2XY}d@**D!pdbpP2#TRNN}?3Xpe)Lx0xF?0s-hZdpeAag4(g#k8ln-J zpedT81zMps{>DFOi+1RMj_8ao=!Wj-iC*Y~zUYqu7=*zXieVUmkr<6J7>Dtgh)I}& zshEx#n1$Jxi+Napg;5+Wliq9F!iA~xb69^xY*5+MnaA~{kZ6;dND(jfyf zA~Uie8?qxOav=}$B0mbC5DKFxilGEbqBP2&9Ll32DxnIhqB?4z7HXp|>Y)J|qA{AF z8JeRdTH!DJjW%eD_UM34=!~xDh92mN-sppV=#POIgdrG;;TVBY7>%(QhY6U7$(Vv^ zn2wp4g*lju`B;EOSd67uh80+e)mVddSdWd^ge};L?bv}`*p0o|hXXi>!#ILtIF6Gz zg)=yd^SFRZxQwf~h8wtv+qi>!xQ~Z;geQ24=lB;d@gH8}4c_5BKH?L;;48l42Y%r< z0$mIsFoGf&LLekUBMibJJR%|zq97`wBL-q2HsT^45+ETGBMFirIZ`4O(jYC;BLgxa zGqNHZav&#iBMYy&_qX8PBF`A+o zTA(Fb<1hS!HfV?T=!j0}g0AR}9_WSM=!Q9BgRvNo37CY*n2Kqb zfti?%Ihcp}ScpYff~8oF63?3hVS@^U-*MS zmjVcapa_l-2!+rHi*Sg5h=`0Rh=%BhiCBn(xQLGgNQA^lieyNElt_&ifX8Vny8IBsE7J!h(>6Frf7~9 zXoc4J8~>m!+MxqFqBFXn8@i(>dZ7>cqCW;;5C&r?hG7IoVl>8J9L8fJCSeMuVmfAE z7G`5E=3xOAVlkFr8J1%uR$&d+Vm&rs6EWO+h8T#6*ocF8h>wIwgd|9cgh7u@=(kO#+D36M$ges_t>ZpNQsExX)hX!bf#%O|OXpWX> zg}?AO+Mq4kqXRmjGrFQ1dY~tIqYwI_KL%nDhF~a$V+2NFG{#~aCSW2aV+y8WI%Z-P z=3p-7V*wUnF_vN(R$wJoV-40}JvL$!wqPr^V+VF&H}+y54&WdT;|Px7I8Nde&fqN0 z;{q<>GOpqpZr~Yy&_qX8PBF`A+o zTA(Fb<1hS!HfV?T=!j0}g0AR}9_WSM=!Q9BgRvNo37CY*n2Kqb zfti?%Ihcp}ScpYff~8oF63?3hVS@^U-*MS zR|5!wpa_l-2!+rHi*Sg5h=`0Rh=%BhiCBn(xQLGgNQA^lieyNElt_&ifX8Vny8IBsE7J!h(>6Frf7~9 zXoc4J8~>m!+MxqFqBFXn8@i(>dZ7>cqCW;;5C&r?hG7IoVl>8J9L8fJCSeMuVmfAE z7G`5E=3xOAVlkFr8J1%uR$&d+Vm&rs6EWO+h8T#6*ocF8h>wIwgd|9cgh7u@=(kO#+D36M$ges_t>ZpNQsExX)hX!bf#%O|OXpWX> zg}?AO+Mq4kqXRmjGrFQ1dY~tIqYwI_KL%nDhF~a$V+2NFG{#~aCSW2aV+y8WI%Z-P z=3p-7V*wUnF_vN(R$wJoV-40}JvL$!wqPr^V+VF&H}+y54&WdT;|Px7I8Nde&fqN0 z;{q<>GOpqpZr~I?~h>LhgfP_elBuIwjNQqQPgS1GG49JAc$ck*p zft<*VJjjRqD2PHRf}$vn5-5ezD2sBafQqP$DyW9)sEJyrgSx1X255xFXo_ZNftF~E zzwi&*pdH$yBRZiAx}rOJpci_hFZy8s24XOVU>JsDBt~Hj#$r4sU=k){DyCruW@0wx zU>@dUAr@f?mSQzlE!JTJHexfjU>mk$Cw5^E_F_K{;1CYuD30L-PU1Aq;2h55 zA}-+yuHrgw;1+JN8lod6Vj&LVB0drz5fURQk|70BA~n(=9nvEsG9e4HB0F** z7jh#n@}U3c7LN}&wOqC6^~5-OuAs-XsIqBiQF9_phZ8lefAqB&Zi6uD9h7lNv(HMhq7>|jVgejPc>6n38n2ouZ zhXq)O#aM!6SdNugg*8}<_1J(-*o>{%h8@_6-PnVD*pGuagd;eL<2Zp+IE}M7hYPrf z%eaDTxQ?5+g*&*5`*?syc#NlbhJWz_|KSzh;4R+c13uw1zTz8x;3t0L4+7r|AP9mX zI6@*6!XPZdBLX5JGNK|HVjw1BBM#yrJ`y4kk{~IPBLz|+HPRv-G9V)|BMY)2J8~iy z@*pqrqW}t_Fp8oWN}wc4qYTQSJSw6Rs-P;WqXufBHtM1t8lWK>qY0X!Ia;C>{=(mA zgSKdo4(No==!$OWfu87%KIn)37>Gd_f}t3W5g3Kh7>jY3fQgulDVT=on2A}KgSnWG z1z3c|Sc+v>ft6T|HCTuB*oaNog00w&9oU84*o%EQfP*-UBRGcRIEhm@gR?k~3%G>K zxQc7Ift$FEJGh7Yc!)=Mf~R`(jq-FAQLhpE3zR6aw0eK zARqFhAPS)filR75pcG1@EXtt*Dxxx~pc<;9CTgJ$>Y_dxpb;9QDVm`LTB0@n!arz( zc4&`|=!7olitgxvUg(X!=!XFqh`|_wVHl2)7=T*o8gVi~Tr&LpY41IEE8AiPJcPb2yKSxP&XX zitD(6Teyw8xQ7RLh{t$>XLybmc!^hdjkkD*5BP}B_=0cvj-U92KL~U?fFKBp;0S?G z2#v4^hX{y>$cTbyh>nw!YG1bD2|dSg)%6M@~D7HsEn$ph8n1e+NgtisE>wdgeGW;=4gRdXpO(|589#~ zI-nyuqYJvBJ9?rQ`k*iRV*mzWFot3nMqngHV+_V&JSJiireG?jV+LknHs)d;7GNP3 zV+odFIaXp7)?h8xV*@r}Gqz$Ic3>xVV-NOWKMvv$j^HSc;{;COG|u82F5n_A;|i|f zI&R_??%*!&;{hJwF`nWX{>2OYhgW!mw|I{a_=L~+if{OVpZJYG2z)1iAP9!w2#HV# zgRlsX2#AEph>B>4ftZMmIEaV%NQgv8f}}`}6i9{CNQ-pHfQ-nDEXaoJ$cbFYgS^O( z0w{#SD2iezfs!bVGAM`gsEA6af~u&F8mNWZsEc}NfQD#{CTND{Xo*(%3xA^x+M+!= zpc6WyE4rZvdZIV_pdb2UAO>LwhGIBIU=&7UEXH91CSo$CU>c@lCT3v{=3+h;U=bE$ zDVAXcR$?{QU>(+DBQ{|RwqiSWU>9~{FZSU84&pG5;24hMBu?QB&f+{S;1Vw5Dz4!M zZsIoX;2!SdAs*ogp5i(F#Y_B$*LZ_>c#n_xgfIAt@A!dV_>Dk!0|<{iO>jx za0rixh=eGJis*=eScr|dh=&A7h{Q;OWJr#bNQE>=i}c8VOvsF^$c7xqiQLG8e8`W2 zD1;&?isC4NQYekGD2EEDh{~vfYN(EysD(PHi~4AQMre$tXoePOiPrcF|DX-pp*=dH z6S|-)x}yhrp*Q-X9|m9`24e_@VK_!&6vkjI#$y5|VKSy-8fIW7W@8TKVLldO5td*n zmSY80VKvrb9X4PiHe(C6VLNtW7xrK;_TvB!;V_Qk7*60MPU8&D;XE$l60YDXuHy!7 z;WqB#9ve@BLqSrG{Pbr zA|N6nBMPD+I$|Og;vg>KBLNa2F_Iz~QXnN#BMs6aJu)H_vLGw6BL{LJH}WDM3ZNhg zqX>$jI7*@v%AhRDqXH_SGOD5)YM>@+qYmn!J{qDCnxH9~qXk-_HU7pwXp45}fR5;l zF6f5t=!stFgTCmG0T_hA7>Z#Sfsq)EF&KyOn21T3f~lB}8JLCHn2UK>fQ49$C0K^# zScz3wgSA+X4cLUu*otk~ft}cmJ=ll+IEX_yf}=Q&6F7y_IE!<*fQz_{E4YU1xQSc1 zgS)to2Y7_Xc#3EE7ccN1Uf~Vi;ypg#6F%cBzTpRc;y3;v@cjUSAQ*xpBtjt!!Xi8( zAQB=YDxx65a%h{>3OX_$_gn1wl*i}_f9MOcibScVl? ziPczxby$y$*n}r9K&&(#3`J?S)9iOT*75s#Wmc( zP29#E+{1l5#3MYxQ#{ANc!~e;8gK9p@9`0z@C9G-9Y633zY*v`0D%z{!4Lu=5gK6- z4&f0Ikq`w@5gjoQ3$YOw@sI!skr+vk49SrasgMR~kscY437L@<*^mP{ksEoC5BX6L zg-`@VQ5+>u3Z+pNMjcJ<$t&&=>tN0D~|XLoo~^FcPCN2IDXu6EO)>Fcs4=1G6w2b1@GKun>!}1k11- zE3pb|uommF0h_QHTd@s0uoJtn2m7!e2XP2Ta1_UJ0;g~qXK@Y}a1obr1=nyLH*pJh za2NOS0FUq(Pw@=@;syT0E4;y5yvGN8!e@NNH~hd){Kg*yeiT3u1VeCyL@0zoScFFe zL_%alMKr`fOvFYU#6x@}L?R?XQY1$Tq(W+>MLJ|aMr1}7WJ7l3L@wk(UgSps6hdJX zMKP2>Nt8wzltXz`L?u)~Ra8d})Ix34MLje?Lo`McG(&T=L@WG-ztIM5(H3ZpR=<1hgeF&R@Z4bw3bvoHs9F&_)C2#c{4%di3~ zu^MZz4(qWIo3I62u^l_G3%juw`)~jUaTrH%499U2r*H;maUK_N372sd*Kh+jaT|AV z5BKp9kMIOf@f`o+CH})}yumxX$47j^7ktHc{J<~#Mxe(51V&Ht+dSpN*WJXqGLk{FbZsb8er9K&&(#3`J?S)9iOT*75s#Wmc( zP29#E+{1l5#3MYxQ#{ANc!~e;8gK9p@9`0z@C9G-9Y633zY%D10D%z{!4Lu=5gK6- z4&f0Ikq`w@5gjoQ3$YOw@sI!skr+vk49SrasgMR~kscY437L@<*^mP{ksEoC5BX6L zg-`@VQ5+>u3Z+pNoF71J#6dj7M?xe*5+p@(q(Ca9Mp~pp24qBLWI;A$ zM^5BI9^^%S6hI*qMo|<)36w->ltDR^M@3XZ6;wra)IcrNMqSiH12jZqG(j^oM@zKA zU-%ns&=&2{0iDnpUC|9a&=bAU2mR0=12G6gFciZv0;4b*V=)dBFcFgj=<-+7>45|F znVjmc<^k_tEzt^p;cv9T)dc}u#|_-VZQR8@JitRd#uGflbG*Pyyuxd|#XEe!M|{Q? ze8YGA#4r3opoIYhK~Mxo2!ujtghe<+Ktx1F6huRG#6&E_L0rT~0wh9WBtu3Z+pN5a%h{>3OX_$_gn1wl*i}_f9MOcib zScVl?iPczxby$y$*n}phJIE6Dfi}SdEOSp`yxP}|J ziQBk?d$^B>c!Vc-is$$jFYzB<;|<>7JwDHv+v6ATWX=7(yTZ1V~p)s1G8CswvTH`PLgEnY~_UMRC z=z^~3jvnZR-sp>d7=VEoj3F3?;TVZg7=y7Gj|rHB$(V|1n1Pv?jX9Wy`B;cWSc0Wk zjulvi)mV#l*no}Lj4jxP?bwN3*n_>;j{`V_!#Ij#IDwNmjWalh^SFphxPq&=jvKgz z+qjE+cz}m^j3;=8=Ximac!k$^i+A{dkNAu)_=fNJiC_4GKpz4Kf}jYF5D10P2#aut zfQX2UD2RsWh>2K;gSd!~1W1I$NQz`gfs{y%G)RZ^$cRkHf~?4n9LR;-$cua^fPyHD zA}EI9D2Y-igR&@(3aEt2sETT+ftsj|I;e;GXoyB=f~IJW7HEam_#6MAE!v?2I-)bW zpc}fQCwid|`l3GuU=RjlD28DKMq)I^U>wF{A|_!9reZo~U>0U$F6LnY7Gg1$U>TNU zC01b#)?z(2U=ucDE4E<=c49a7U?2A5AP(UOj^ck5-9xlkNfZUp*tTukwrxAr9K&&(#3`J?S)9iOT*75s#Wmc(P29#E+{1l5#3MYx zQ#{8Dyuxd|#XEe!M|{Q?e8YGA#4r3opw9sWK~Mxo2!ujtghe<+Ktx1F6huRG#6&E_ zL0rT~0wh9WBt z&Der%*p8jpg+17d{WyR_IEh7&l6(>Q~3IFF0Cge$m;>$rhixQ)BGhX;6w$9RHg zc#fBNg*SMM_xONM_>8akh9CHe-}r;TUjhh%UY{-tB$b~$}i~J~nLMV))D25U!iP9*8aww0A zsDvu0it4C=TBwb>sD}nUssgK-#-iI{{bn2PC`fmxW1xtNCqSct_~f@N5al~{!}Sc~=8fKAwp zt=NVg*oocPgMHYKgE)jEIEv#qfm1k*vp9zfxQNTRf@`>ro4AELxQqLEfJb$b)>ykAf(KA}EUDD1lNajj||*3aE(6 zsDf&!j+&^2I;e~KXn;m&jHYOY7HEmT&>DZEE&f4!bVMg~L05D~5B!T>_z!*15B)I^ zgD?a`F&rZ>3ZpR=<1hgeF&R@Z4bw3bvoHs9F&_)C2#c{4%di3~u^MZz4(qWIo3I62 zu^l_G3%juw`)~jUaTrH%499U2r*H;maUK_N372sd*Kh+jaT|AV5BKp9kMIOf@fbRDUlj!kPhjQ5t)z$S&C1yLA9Pz=RU5~WZEWlJTBrAuHY)J;|6ZwHtymc9^fG!;|ZSOIbPxw z-rz0X;{!h7Grr;*e&8p5;|~IV49Wo#zG9wGJAvp)iV~7)qcdN}~+Qp*$+05~`po zs-p&Kp*HHG9vYw_8lwrCp*dQj6&4bTXU(G<fq&5p|Dg~1p+5#< z5QbnVhGPUqVKl~K9425QCSwYwVLE1F7Up0s=3@aCVKJ6s8CGB=R$~p;VLdit6SiP0 zwqpl&VK??-9}eIk4&w-p;W$p>6wcr*&f@|u;WDn`8gAewZsQK_;XWSX5uV^Fp5p~x z;Wggk9X{YAKI03%;X8if7ycm7&j5lTD1svdLLoH5A{-(hA|fLSq9HnBA{OExF5)8r z5+N~?A{kO3B~l{|(jh%EA``M8E3zX8av?YJA|DE%APS=hilI14q7=%YEXtz-Dxor} zq8e(TCTgP&>Y+Xwq7j;)DVn1NTH!CW!QW_yf6xIP(HULP4c*Zb|DrekLtpg601U)n z48brA$4HFA7>vbuOu!^e##Bth49vuA%)va&$3iT^5-i1XtiUR)##*ey25iJ;Y{52c z$4>0R9_+<_9KazQ#!(!@37o`foWVJq$31OLKuWactk)XL`GCZLkz@3Y{Wr4#79CT zLJ}lJa-={iq()k#Lk46-W@JG&WJgZqLLTHreiT3<6h=`LLkW~bX_P@Zlt)EWLKRd+ zb<{vD)J9#@LjyEKV>CfCG)GIcLTj`^TeL%abU-I`Mptx05A;MY^hO`_MSl#yAPmM( z48sVF#AuAcIE=?cOu`gQ#dOTTEX>AS%)VOCTzx5Y{L%h z#BS`tKJ3Rq9KsPC#c`a#DV)YxoWliN#ARH;HC)F{+`=8)#eF=$BRs}aJi`mT#B034 zJG{q7e8Lxe#drL`FZ@QJ-vIq(ypUKqh2HR%AmCs}6h(2AKq-_)S(HNsR77P|K{ZrI zP1Hgi)J1(XKqE9pQ#3;hw8UR%jla6nRGn1i{Pj|EtS#aN1ESb>#TjWt+@_1K6_*n+Ltjvd&A z-PntLIDmsVj3YRP<2Z>^ID@k|j|;ej%eabbxPhCvjXSu9`*?^)c!H;Rju&`^*LaI} z_<)c2j4$|x@A!#d_=7-y0tkYj2#yd4h0q9#aEO42h>R$RhUkciScrqTh>rwFgv3aS zWJrOONR2c|hxEvZOvr+)$c`Myh1|%Cd?w#Z~Q^v zM*##uFa$?PghCjEMR-I&Bt%A3L_-Y3L~O)CJj6#rBtjA-MRKG-Dx^kQq(cT|L}p|` zHe^RmkIh035R6-S0MRn9bE!0L`)I$R_L}N5TGc-p_ zv_fmNL0hy#dvri2bVgTnLl5*sFZ4zq^hJLRz#t69Pz=KejKpY+!8nY^L`=dIOvQA} zz%0zhT+G7)EW~0g!7?nzO02>fti^h4z$R?QR&2u#?8I*D!9MKAK^(#n9K~^*z$u)@ zS)9WKT*PHu!8KgRP29pA+{Jx7z#}}yQ#`{9yu@p~!8^RiM|{E;e8qSCz%TqppvM6O zMo>MqI>00whFYBtbGHM@pnZ8l**fWI!flMpk4) z4&+2`*Gbh0z#`ahQOKn2afyhUu7z zS(t;ln2!ZmgvD5jWmtigSdBGUhxOQqP1u61*p408h27YTeK>%FIE*7WhT}MiQ#gaO zIFAdsgv+>!Yq)`%xQ#owhx>SlM|gs#c#ao%h1YnCcldyh_>3?3hVS@^U-*MSPXY*n zpa_l-2!+rHi*Sg5h=`0Rh=%BhiCBn(xQLGgNQA^lieyNElt_&ifX8Vny8IBsE7J!h(>6Frf7~9XobJf z27jX+{y_(HL}zqCH*`l&{EOcB4}H-O127PSF$BXf93wFbV=xxuF#(e>8B;M0GcXgg zF$eQ79}BSvORyBnu>z~G8f&o*8?X_Zu?5?(9XqiLd$1S#aR7&K7)NmoCvXy{aR%pb z9v5*5S8x^AaRaw-8+UOJ5AYC=@dVHC953+-Z}1lH@d2Ok8DH@YKkyU3@dtsQ1`q_n z5F8;93Skfy;Sm9m5E)Ss4KWZCu@MLH5FZJV2uY9>$&mu7kQ!-`4jGUUnUMwAkR3UZ z3we+i`B4CcP#8r~3?)z!rBMduP#zUg2~|)P)lmbrP#bko4-L=|jnM?n&>St%3a!xw zZP5MZw7yU5+gD@CFF$^Ox5~DE&<1ii*F$q&J71J>TvoITT zF%Ju{5R0({%di|Pu?lOj7VEJAo3I&Mu?;)06T7ho`>-DeaR^6n6vuG_r*Il)aSj)7 z5tnfV*Ki#-aSL~F7x(c1kMI~z@eD8U60h+F@9-WU@d;n>72oj#zwjG@o&^vXK@kig z5E7vg2H_AM5fKSd5Eao81F;YraS;y*kPwNH1j&#bDUk|kkQV8Y0hy2)S&zqF2MjqrteiTF@6hToGM+uZdX_Q4dR6s>kMio>;b<{*H)InX;M*}oMV>CrG zv_MPzh1U2RZSfD5a%h{>3O zX_$_gn1wl*i}_f9MOcibScVl?iPczxby$y$*n}phJ zIE6Dfi}SdEOSp`yxP}|JiQBk?d$^B>c!Vc-isyKNS9p!Lc!v-8h|lQ40fJ8`)q)3JoNQu-)gLFubjL3v6 z$cpU9fn3OqyvT2TD2wu_fJ&&0s;GtK)Xo}`& zfmZknZSXhR;U9EBM|4IPbVGOa#J}i`|IioxFaQHF7(*}&!!Z)0Fa~2W9uqJLlQ9+3 zFat9&8*?xZ^RW<%umnr794oL2tFadAumKyf8C$Ro+p!b7um^jw9|v#5u^#kr`Q# z4cU!}1k11-E3pb|uommF0h_QHTd@s0uoJtn2m7!e2XP2Ta1_UJ z0;g~qXK@Y}a1obr1=nyLH*pJha2NOS0FUq(Pw@;d@Di`_2Ji45AMpua@D<7(o#XArKOw5eDH99uW}I z8Cj7HIgk^%kq7yZ9|cheMNkyQQ39n<8f8%q6;KhCQ3cgd9W_x4bx;@e(EyFm7){X( zEzlBwp*8+STl|Ce=!j0}g0AR}9{3l%@E`i1ANpe;24M(>VmL-%6h>n##$f^`Vlt*+ z8m40=W?>HIVm=mN5f)=9mSF`}Vl~!a9oAzbHen04Vmo$V7j|PW_Tc~y;xLZj7>?s4 zPT>sB;yfpBQhZi zvLZWjAQy5YFY=)P3ZgKIpcsmyBub$S%A!0fpb{#hDypFdYN9skpdRX@AsV3xnxZ*c zpcVc?8~lxS_y--(5uMQm-OwF9@h^JgKlDXE48TAP#t;m{aE!z#jKNrp#{^8mWK6|0 z%)m^{#vIJUd@RHwEWuJN#|o^%YOKXNY`{ir#ujYDcI?D1?7?2_#{nF|VI0LVoWMz( z#u=Q$d0fOLT)|ab#|_-VZQR8@JitRd#uGflbG*bWyun+%#|M1EXMDvs{J>BA#vcTJ z9Y7ESLvVydD1<>+ghvEKLS#fmG{itm#6}#%LwqDeA|ydlBu5IQLTaQ%I%GgbWJVTb zLw4juF62R8iF#44=8TCB$gY{F)2#Ww7~PVB}W?8AN>#33BPQ5?q!oWg0G z#W`HSMO?-eT*GzT#4X&xUEIe5Ji=o<#WTFXOT5M#yu*8Z#3y{gSA540{K9VpdJ{lk z1Vu1}KuCl}7=%N3L_{P+K~zLX48%fg#6>(LKtd!&5+p-%q(myDL0Y6o24q5JWJNaQ zKu+XF9^^xQ6ht8uK~WS(36w%%(QhY6U7$(Vv^n2wp4 zg*lju`B;EOSd67uh80+e)mVddSdWd^ge};L?bv}`Nb1S<gh7u@=(kO#+D36M$ges_t>ZpNQsExX)hX!bf#%O|OXpWX> zh1O_;wrGd;=zvb>jIQX09_Wc)=#4(;i~bmZK^Tmo7={rTiP0E?aTt$@n1m^qis_hv zS(uHvn1=;eh{affWmt}tScNrMi}l!mP1uaB*oGb0iQU+Peb|qKID{iOisLweQ#g&Y zIEM?kh|9QwYq*Y^xP?2oi~D$hM|g~GZlfmn!*xQK@YNQlHpf@DaJlt_g%NQ?ByfK14YtjLBO z$cfy@gM7%3f+&O{D2n1Jfl?@qvM7fNsEEp_f@-Lany7_3*fb}AE!c|f*nwTxjlI~1 z12~AoID%t1j*~crGdPR$xPVKzjH|eY8@P$vxPyDRkB4}KCwPkIc!5`VjkkD*5BP}B z_=0cvj-U92KM159AqavZI6@#4LL)4~Ap#;IGNK?_09{(Q3n)&|tk7P8LPvB$7ffCd zz*J1b49vuA%)va&$3iT^5-i1X>{%4RKJ3RqB%cvLN~A&>q(yqf9v?tl#6tokL}DaC zG9*Vzq(T~`MS5gFCS*odWJ3<*L~i6kKIBJ16haXcMRAlsDU?Q8ltTqnL}gS#HB?7U z)IuH9MSV0tBQ!=+G(!ut#9wHQztI-|pglUG6S|-)x}yjFMKAn^KIn)37>Gd_f}t3W z5g3Kh7>jY3fQgulDVT=on2A}KgSnWG1z3c|Sc+v>ft6T|HCTuB*oaNog00w&9oU84 z*o%EQfP*-UBRGcRIEhm@gR?k~3%G>KxQc7Ift$FEJGh7Yc!)=Mf~Re@BLqSrG{PbrA|N6nBMPD+I$|Og;vg>KBLNa2F_Iz~ zQXnN#BMs6aJu)H_vLGw6BL{LJH}WDM3ZNhgqX>!x(4}?PfRqtF-K9-WtdbaOuommF z0h_QHTd@s0uoJtn2m7!e2XP2Ta1_UJ0;g~qXK@Y}a1obr1=nyLH*pJha2NOS0FUq( zPw@;d@Di`_2Ji45AMpua@D<$eI&R<=ZsRWQ;Q=1vF`nQVp5rB6;SJv6JwD(QKI1FC;Rk-=H~t{- zv;cx27=j}tLLm&oB0M4>5+Wliq9F!iA~xb69^xY*5+MnaA~{kZ6;dND(jfyfA~Uie z8?qxOav=}$B0mbC5DKFxilGEbqBP2&9Ll32DxnIhqB?4z7HXp|>Y)J|qA{AF8JeRd zTA?-Cpe@>=JvyKhI-@JPp$B@R7kZ-)`l3GuU=RjlD28DKMq)I^U>wF{A|_!9reZo~ zU>0U$F6LnY7Gg1$U>TNUC01b#)?z(2U=ucDE4E<=-WCtwJwD(QKI1FC;Rk-=H~t`S zi2#Bi7=j}tLLm&oB0M4>5+Wliq9F!iA~xb69^xY*5+MnaA~{kZ6;dND(jfyfA~Uie z8?qxOav=}$B0mbC5DKFxilGEbqBP2&9Ll32DxnIhqB?4z7HXp|>Y)J|qA{AF8JeRd zTA?-Cpe@>=JvyKhI-@JPp$B@R7kZ-)`l3GuU=RjlD28DKMq)I^U>wF{A|_!9reZo~ zU>0U$F6LnY7Gg1$U>TNUC01b#)?z(2U=ucDE4E<=c49a7U?2A5AP(UOj^a2@;1o{d zEY9HqF5)t-;2N&uCT`&l?&3Zk;1M37ML@dNXT*OBLBtl{&MKYv7N~A^_q(gdSL?&cGR%AyG z(26hm>8L@AU(S(HZwR6=D`MK#nwP1Hsm)I)tVL?bjoQ#3~lw8CF# zgTK)Z|DXdpqBFXn8@i(>{zY&6hrZ~C0T_tE7=mFKj*%FJF&K;Sn1D%`jH#H08JLOL zn1gwkkA+x-C0L5(SbZ4cLgy*n(}?j-A+rJ=lx=IDkVqjH5V)6F7;}ID>OI zkBhj3E4Yg5xPe=^jk~yq2Y86bc!Fnmj+c0aH+YNp_<&FNjIa2HANYyi_=CWu0|WO+h8T#6*ocF8h>wIwgd|9cgh7u@=(kO#+D36M$ges_t>ZpNQsExX)hX!bf#%O|OXpWX>h1O_; zwrGd;=zvb>jIQX09_Wc)=#4(;i~bmZK^Tmo7={rTiP0E?aTt$@n1m^qis_hvS(uHv zn1=;eh{affWmt}tScNrMi}l!mP1uaB*oGb0iQU+Peb|qKID{iOisLweQ#g&YIEM?k zh|9QwYq*Y^xP?2oi~D$hM|g~GZlfmn!*xQK@YNQlHpf@DaJlt_g%NQ?ByfK14YtjLBO$cfy@ zgM7%3f+&O{D2n1Jfl?@qvM7fNsEEp_f@-Lany7_3sEhh&fJSJHrf7y1Xo#-4=umxMO9XqfKyRjGhZ~zB!7)Njn$8i#;a0X{_9v5&4 zmvI%>a054S8+ULI_wf*q@B~ls953(+ukjY|@Btt38DH=X-|-W_@CSj)1`q^65gZ{9 z3ZW4e;Sd245gAbs4bc%3u@DDw5g!SV2#Jvt$&dmmks4``4(X8*nUDopksUdZ3%QXO z`A`4_Q5Z!~48>6rrBDWCQ63dg36)V5)ldU9Q5$to5B1RyjnD*5(Ht$%3V)#u{zg0e zgAVA3&gg<}=#HNF7rpTx`l25OU?2u#2!>%eMq(7kU@XRC0w!THreYdqU?yf`4(4G# z7Ge>WU@4Yk1y*4-)?yttU?VnT3$|f9c48OyU@!LL01n|Wj^Y?j;3Q7t49?*^F5(id z;3}@;25#Xt?&2OE;2|F437+9OUg8zr;4R+c13uw1zTz8x;3t0L4+579AP9mXI6@*6 z!XPZdBLX5JGNK|HVjw1BBM#yrJ`y4kk{~IPBLz|+HPRv-G9V)|BMY)2J8~iy@*pqr zqW}t_Fp8oWN}wc4qYTQSJSw6Rs-P;WqXufBHtM1t8lWK>qY0X!Ia;C>TB8lxq8-|! z13IBIx}qC;peK5vH~OG2`eOhFVK9bb7)D?uMq>=dVLT>c5~g4(reg+XVK(Ms9u{CB z7GnvPVL4V}71m%a)?))UVKcU38+KqPc4H6rVLuMy5RTv|j^hMQ;WWO7Vh9K?&AR-;W3`#8D8KeUgHhk;XOX$6TaXpzT*de;Wq-64Vj(u-A|4VTArd1Ak|8-#A{EjgEz%- zVH80z6h}#vLK&1rc~n3pR7O=)Lk-kKZPY3~(iBTAXu^5jDn1sogifNdEnV5|^n1}gTh(%a} zrC5#?ScTPCi*?w5jo6GW*oN)ciCx%(z1WWfIE2GEieor|lQ@ktIEVANh)cMFtGJFE zxP{xei+gy0hj@%9c!uYAiC1`ow|I{a_=L~+if{OVpZJYG2wX9MAP9!w2#HV#gRlsX z2#AEph>B>4ftZMmIEaV%NQgv8f}}`}6i9{CNQ-pHfQ-nDEXaoJ$cbFYgS^O(0w{#S zD2iezfs!bVGAM`gsEA6af~u&F8mNWZsEc}NfQD#{CTND{Xo*&6jW%eDc4&_d=!DMb zif-tEp6G?%=!3rKj{z8j!5E5R7=e)(jWHO9@tBB7n1ZR8jv1JR*_exYSb&9Cj3rox zRNBxPXhej4QZ?>$r(q zxP!a6j|X^!$9Rfoc!8IAjW>9Q_xOlU_=2zajvx4i-w0GGfWQcfUjSD6+po5dTeuC#6tokL}DaCG9*Vzq(T~`MS5gFCS*odWJ3<*L~i6kKIBJ1 z6haXcMRAlsDU?Q8ltTqnL}gS#HB?7U)IuH9MSV0tBQ!=+G(!ut#9wHQztI-|pglUG z6S|-)x}yjFMKAn^KIn)37>Gd_f}t3W5g3Kh7>jY3fQgulDVT=on2A}KgSnWG1z3c| zSc+v>ft6T|HCTuB*oaNog00w&9oU84*o%EQfP*-UBRGcRIEhm@gR?k~3%G>KxQc7I zft$FEJGh7Yc!)=Mf~R5EHQx2k{Ue36Tg%kQB+00;!N1X^{>YkP(@Y1=)}tIgtx_kQez;0EJK( zMNteTP!gq42IWv56;TOQP!-it1GP{abx{uu&=8H$1kKPKEzt_C(FSeN4(-taozNLw z(G5M&6TQ$Ieb5*EF#v-w7(+1(BQO%9F$Uu>9uqMMQ!o|NF$1$O8*?!a3$PH2u>{Mo z94oO3Yp@pUu>qT~8C$UpJFpYGu?PFG9|v&=M{pF!aRR4s8fS417jO}maRt|K9XD|c zcW@W?@c@tT7*FvGFYpqt@doek9v|@uU+@**@dLl`8-c0@5Ewxb3?UE_p%Dh*5FQZ` z2~iLg(Gdf&5F2q34+)SEiID`!kQ^zI3TcoQ>5&1MkQrH#4LOh#xseC?kRJt62t`m7 z#ZdyKP#R@X4i!)ll~D!NP#rZ<3w2Nz_0a&0&=^h83@y+Sf1x%0MqB)Y_UMRC=z^~3 zjvn|Iz3?CUpdb2UAO>LwhGIBIU=&7UEXH91CSo$CU>c@lCT3v{=3+h;U=bE$DVAXc zR$?{QU>(+DBQ{|RwqiSWU>9~{FZSU84&pG5;24hMBu?QB&f+{S;1Vw5Dz4!MZsIoX z;2!SdAs*ogp5i%P;1youE#Bb+KH@XJ;2XZYyI#qahlh37VogTA&sFLL2;zcK8P!&=H-{1>Mjc zJ@GGk<3IF8KMcS?48{-)!*GnmD2%~ajK>5_!emUvG|a$E%*Gtd!+b2nA}qmDEXNA0 z!fLF=I&8p3Y{nLB!*=Y%F6_Zx?8gBd!eJc6F`U3joW>cP!+Bi9C0xN(T*nRE!fo8e zJv_ieJjN3|!*jgEE4;y5yvGN8!e@NNH~hd){Kg*yt{y-T1VeCyL@0zoScFFeL_%al zMKr`fOvFYU#6x@}L?R?XQY1$Tq(W+>MLJ|aMr1}7WJ7l3L@wk(UgSps6hdJXMKP2> zNt8wzltXz`L?u)~Ra8d})Ix34MLje?Lo`McG(&T=L@TsL8?;3`v_}VYLT7YEH}pVH z^g?g+L0|O801U!l48<^vz(|b77>vVsOvEHi!BkAg49vo8%*8w`z(Op>5-h`Vti&p; z!CI`x25iD+Y{fS0z)tMO9_+(@9K<0U!BHH?37o=doW(g@z(rif6385B$P!1ga50U<5@lgg{7yMi_)cctk`bL_t(U zM-0S5Y{W%8BtSwWMiL}La->8mq(NGwM+RgkMio>;b<{*H)InX;M*}oMV>CrGv_MPzh1U2RZSfD5a%h{>3OX_$_gn1wl*i}_f9MOcibScVl?iPczx zby$y$*n}phJIE6Dfi}SdEOSp`yxP}|JiQBk?d$^B> zc!Vc-isyKNS9p!Lc!v-8h|lQ40fJ8`)q)3JoNQu-)gLFubjL3v6$cpU9fn3OqyvT2T zD2wu_fJ&&0s;GtK)Xo}`&fmZknZSXhR;U9EBM|4IPbVGOa#J}i` z|IioxFaQHF7(*}&!!Z)0Fa~2W9uqJLlQ9+3Fat9&8*?xZ^RW<%umnr794oL2tFadA zumKyf8C$Ro+p!b7um^jw9|v#5u^#kr`Q#4cU5fs4?0wEC^VGs`C5fPCP1yK&4bTXU(G<fq&5p|Dg~1 zp+5#<5QbnVhGPUqVKl~K9425QCSwYwVLE1F7Up0s=3@aCVKJ6s8CGB=R$~p;VLdit z6SiP0wqpl&VK??-9}eIk4&w-p;W$p>6wcr*&f@|u;WDn`8gAewZsQK_;XWSX5uV^F zp5p~x;Wggk9X{YAKI03%;X8if7ycknodAL$D1svdLLoH5A{-(hA|fLSq9HnBA{OEx zF5)8r65)T6?lS0!vtigU?(XjH?i6=-cXxMpFYrLQq1a9F;;sdX7k4OL+}-uf@qPJm zF#@A78e=gI6EG2zF$GgG4gbRo{DxVWjX9W$d02pjScE^Y1WU0TEAS^)VGY(| zJvLwyHe)NcVFz|%H~zw2?8AN>z#$yQQT&7BIDu0*jk7q13%H2OxPq&=h8wtv+xQQ6 zaSsph5RdT$&+r^C@d|J77Vq%^pYR!9@eM!l6CoP~2!${Ri|~kmNQjK6h=v%5iP(sP zc!-aLNQ5LvisVRvR7j1qNQVr_h|I`>Y{-tB$b~$}i~J~nLMV))_yxsL0;NzIWl;_l zP!W|;1=Ua;HBk$7P#5*l0FBTXP0No4&exn;uwzOBu?Q>fWU~jv-&(P;1Vw5UtGm?+`ui| z#vRc7LN}&wO zqC6^~5-OuAs-XsIqBiQF9_phZ8lefAqB&Zi6dZ7>cqCW;; z5C&r?hG7IoVl>8J9L8fJCSeMG#WYOE49vtV1Yr(-$2`o(LImRvEXGnS!wRg#Dy+s@ ztiuLu#Aa;4Hf+aE?80BzgMIiL2XGLFaRmS17*60MPU8&D;XE$l60YE1T*GzT#4Y@X zJGh7Yc!)=Mf~R|Y|O!2%)#+fwuo+vi4Lh(CyYUzHVjuS701n|Wj^ZC2#|fOmX`ID5T);(K#uZ$}HQc~W+{S;n zi+gy0hj@%9c!uYAiC1`ow|I{a_=L~+if{OVp9tABKq!PkScFFeL_%alMKr`fOvFYU z#6x@}L?R?XQY1$Tq(W+>MLJ|aMr1}7WJ7l3L@wk(UgSps6hdJX#V;t15-5ezD2sBa zfQqP$DyW9)sEJyrgSx1X255xFXo_ZNftF~EHfV?T=!j0}g0AR}9_WSM=!Q9BgRvNo37CY*_!Uzz9sk2j{DvUR#_yPm`B;EpEW%5&1MkQrH#4LOh#xseC?kRJt62t`m7#ZVk2Q3_>H7UfX^ zl~5T~Q4KXv6SYwX^-v!T(Fje@6wT2BtPVjVVM zBQ|3TwqZMV;^MLZmvIGGaSb5EHQx2k{Ue36Tg%kQB+00;!N1X^{>YkP(@Y1=)}t zIgtx_kQez;0EJK(Mez%YqXbH!G|HkJDxe}NqYA2_I%=X8>Yy&_qX8PBF`A+oTA(Fb zqYc`jJvyQjx}Yn%qX&ASH~OL<24EltV+e*}I7VU=#$YVQV*(~&GJeHWOvnE)6Tcw{ zv++CTVm=li7>lqNORx;fu@Zk`HP&Dq)?*_!VGFimJ9c0fc4H6r;&1H7K^(#n9K|sl z$4Q*R8Jxv=T)-t<#=p3V>$rhixQ#owi~D$hM|g~T zgvWS_XLx~^c#SuBhxho1Pxykb_>Lb45fmUKLL&^qAv_`?5~3g~q9X=kAvWS79ugoS z5+ezcAvsba71AIr(jx;hAv3Zf8*(5gaw8A&AwLSD5Q?BEilI14q7=%YEXtz-Dxor} zq8e(TCTgP&>Y+Xwq7j;)DVn1NTA?-Cq8&OQ$UH@J{@*-BgJ%E#sX~SX?mOPMe1v+f z#;Esdg8Hobn*(DI24fh8V-!YX9L8f3CSxk5VFqR*2(vL4^RN)XSd1lDjulvi_1J{% z*oEELi+wnNgE)etIF1uIjWalpE4YT+xQlyuh(~yeXLyNMc#C)Vh)?*6(DMU?LwH0& zWJE)B#6oPuLwqDcVkARyq(W+>LwaOFX0+}QAiMgia;tpEk3uMn;#~t2QzcOfWl;_l zQ3+L13w2Qs4bccq(F`ro3QM{NXs0@&6AoI|P4z@C^hG}m#2^gCFpR_~jKNq;z(h>J zub7Tmn1kOj9}5tSMOcERSb;TIk1g1a9oUV(un&LZAP(Uu{=o^H#Ql*0aS zg-{f~pae>y49cPcDxwOiq6TWB4(g%-8lnlBq6J!_4cejuI-(1@qC0w^H~OGI24FCT zU>JsD6h>n##$h5R;a5z>|1bly5QN_`7Yncue_%0|VLAT9Dy+piY{VvP#Ww83F6_Zx z?8gBd#t|IDah$?woWprs!ev~=HQdB4+`(Nuz(YL2Q@p@Syun+1z(;(+SNy3Zf8-;un-aNt8iZ zR6s>kK~>a1P1HeMG(bZ%K~uCqOSC~-bU;URL09xZPxL`w48TAP!BC9ANQ}W)Ou$4; z#uQA$bj-wW2*Pa4#XKxTFcxD8mSY80VKvraJvL!8wqZMVVK??-9}eIkj^HSc;{;CQ z49?>MF5?QW;W}>NHtygq9^fIK;3;0Qe1jSGsrBE8>P#%>~ z8C6jYHBk$7Q4bB#2u;xpEzt^X(GDHa30=_*J<$t&(GLSL2tzRpBQXkNF%Aa1*z12Y2xR5Ag&~@d7XL25<2JAMpiW@dG~*%C$;pghO~lLS#fkbi_hz z#6x@}LSiICa->3Pq(gdSLS|$`cH}~CDtggvpqSX_$eT2*Pa4#XKy) zLi~ZnScc{J6RWTm>#z}Sg-{f~pae>y49cPcDxwOiq6TWBHtL{08lW+npgCHgHQJy( zI-oPUpgVe?H~OGI24D~dV;F{G6h>nl#$ysDV=AU$24*4%voRO*un@smj3ro(63Pq(gdSLS|$`cH}~C zzL)j|rHJDVT=on2Fyo8*?xZ^AU_iSc0Wkft6T|HCT@g*o-aMhV9se z-PntLIDmsVf}=Q&6F7}CIFAdsj4QZ?>$rv6xQlyuh(~yWr+9&vc!Rh2fRFfsulRwV z2-P`2XoN#}L_%alLv+MKY{W%8Bt#-4K~khZN~A$rWI#q_L005IPUJye6hJ`~K~WS# zag;)7ltXz`LSjGx zjKNq;z(h>O6imZ(%*1b)jX9Wy`3S}$EWuK&z)Gyf8mz|#Y{nLB!*=Y#ZtTTA9Kb;w z!BHH?37p0moW})R#uZ${b=<;j+{HaS#3MY#GrYtryu~|w#3y{kH~d71E&)O#48kJ< zA|nc-BL-q44&oyL5+ezcBLz|;4bme6G9wGJBL{LL5Ave`3Zn>$p*TvRG|HhoDxor} zp*m`zHtL~18lf?op*dQiHQJ#)I-xVVp*wn^H~OJJ24OIUVK_!%G{#{(CSfwBVj5;( zCW0^gs6yyn23eAh=&A7 zh$Kjg6iA6QNQ(@}h%Cs89LR}0$cq9fh$1L~(kO%SsDR3-g6gP&+Ngv2Xn@9Og63#} zR%nfOXpc_ljBe`MqjH#H08JLM6%*I^I!$JgOF_vIC zR$vuYV;$CG6E|$;yZpIWVZmJ5EkJO5s?rT(GU}{5Et=~5Q&f!$&eDMkQV8X5t)z$ zS&;)dkq3EE00mJ5MNtgJQ3|C|4&_k^l~EPdP!qLK7xmB(jnEX$&=RfC25r$E9ncA# z(G}g$13l3jeb5j6F%W|=1Vb?#BQOf1F%IJ~36n7u(=Y=w5ro;8i+NaxU@XQGEW>jA ziB(vOb=Zha*otk~iCx%(z1WWfIE*7WhT}Me(>RCAxQc7IiCg#&cW@sM@EA|<952x5 zQ-C+>JwD(wzTi84Af#`3LLn@|AtE9nDxx7KVj(W#At4eWDUu-tQX)0dAU!f56EY(k zvLhFABOmgk5DKFxenAP8L>ZJt1yn>8R7DNcL><&c12jYvG(`)vL>sh42XsUibVU#J zL?86U01U)n48d@Wz-WxYcuc@#Ou;lv$4vZ&*_eZQn2%sA#R{y%YOKL}Y`|u0!FKGx zZv2IPIE1742Pbe6XK)r5a1mGVFRtSTZsR}P!+ku$V?4uiyuxd|!+U(fXMDqVgy<0< zB*GvpA|N87ASz-YCgLD25+EUxASqHHCDI@*G9V+eAS-epC-NXK3ZNj0peTx?1WKa} z%A*1*qYA2{25O@Y>Z1V~qY0X$1zMvG+M@$HqYJvD2YRCq`eOhFV+e+01V&>F#$y5| zV+y8WI%eWG%*Gtd!+Zo|5td*nR$wJoV-41012$s|wqpl&<1g&P-#CavID(@%juSYA z(>RCoxP;5Nifg!uTeyR}cz}m^f~Rc#jYGj4$|(9|+kqKq!PoI7CDwL`5{j zL@dNbJS0RSBtkJo8C}pFJsUZ2!k;U!!Zh@F%FY471J;SGZBQ@n2UK>h+r(n z5-i6Gtio!n!+LDOW^BWD?80vB#XcOsK^(zR9LEWq#u=Q)1zg4zT*GzT!fo8eJv_uC zJjFA-#4EhTJAA|^e8E?I#}9<;9Uv6KAS@yvBBCHFVjw1BBM#yt0TLq#k|PCDBMs6c z12Q8EvLgp_BMKUh1#fx`e=m4Xolu!h1O_` zcIb#s=!$OWiC*Z7ei(>B7>Z#SiBTAfahQln_!U#}Kg_@^1mSng#R4qEA6SfKSdNwW z6Kk**8?X^uuoXM76Mtb3{>FYB!eRV_V>pRZIE!<*h)ehvS8)S3@gMHsJ|5sPp5QrN z;5FXhJwD(wzTi84AY`8ap%50~5D}3O710nAu@D#WkPwNG6v>bhsgM@wkP(@X71@vz zxsVt6P!NSs6u+PZN}>$Pq5>+S3aX+8YN8J6q5&GB37Vn>TA~fwq60dj3%a5QdZG{d zVgLqW2!>(=Mq&)cVge>&GNxb}reg+XA_%iF7xS#z}q#~~cXKRAYyIEAw~hl{v`e{mHza1;OG4({PT9^o;b;W=L6HQwPpKH)RI z;X6X~4GhZ&fKApDNGSb&B21BGBt;6OL>i<;24qAQWJM0-L>}ZteiT4q6hSc*M=6v>S(HNs zR77P|L3PwXZPY=1G(clCL36Y~Yji*-bVfIHM=$h7KlH~S48|}F$0&@(Sd7C&Ov102 zivM8-e#0!x!S9%l1z3bXuoTO%5`SV1)?x!TVhgrn2X^8w?7`pIk3%?&e{c*ZaSCT~ z4i|9=|Kcic;3odV9o)wQJjN3|#|ym18@$7Ne8OjZ!*_(}A0Q;cAS@yvBBCHFVjw2s zATAOhA(9{|QXnPLAT2T=BeEbXav&%2ATJ7_Ac~+UilYQdqYTQU0xF{ls-p&Kp*HHF zJ{qAhnxQ#bp*7l}JvyQjx}qC;q8Iw29|mF&hGG~-Vid+=942BCe#H#TLJ)q(Tr9vs z{DH+-hUNGZtFRX9uo0WE72B{AyRZj)u^$I;7)Njn$8id$aSrEk372sd*KiZJa0hqs z01xp5Pw@gT@dj`40Uz-NU-1J!5pqC)PzZ}~h=7QQf~bgrn23Y8h>rwFj3h{o6iAIU zNRJH2j4a5G9LSA4$d3Xjj3Ow8;wXtyD2sBah)Sr6YN&}?sEc}Nh(>6NW@w34Xp45} zh)(E=Zs>uY=!3o(fPol-p%{UY7=y7Gj|rHJDVT=on2Fyo8*?xZ^AU_iSc0Wkft6T| zHCT@g*o-aMjvd&IzpxK~;~);Vj~{nBM}lK8ImIvQX?JGBNH+s8?qx8 zaw8w|qYw(?7ZgKDltNjQLq$|VRa8Sw)Iwd_s z!$1tePz=LJjKWxq!$eHNub7JeVFqR)2)|=47GNR%z+x=Ja{P%^ScA3LfQ{IKt=NH` z_zQdRH}>NY4&xsj!%3XNS)9W~T*AM&iW|6z|8NKQ@c@tU1kdpTuki-&@d2Ol1>f-l zAqNErg|G;Rh=_!!h=!Pmg}8`^gh+&>NQRV1g|tYAjL3wn$cCKAg}lgzf+&Qd_yr|U z5@k>p6;KgXP!%;$6LnA*4bTux&=f7u5^c~H9ncY7&=oz<6MfJZ127OnFcc#&5@RqH z6EG2zF$L2w9WyW!L70uXn1_W3#$qhNa;(5Atj0R5$0lsXHf+Z(?8aW~!vP$`5gf&F zoWNc75N~0XgqY^5k8mglf zYNHqZ2x#8@i(xdZQouV-N;o7=~jMMq?btV-hA~DyCruW+Di) zF&Fc&5W!fCC0LFXScTPChxOQm&De(R*oEELi+wnNgE)etIF1uIjWalp3%HCcxQ6Sv zh1Cl^v_fmN zLwj^WXLLh%^g?g+Lw^jyU<|`>jKXM)!+1=>WK6|0%)m?pVK(Ms9u^`Pi?IaDu>z~G z8tbqgo3I(%upPUw8+)-22XGKaa1_UJ0;g~q=WrgEa2Z!|4L5NMcW@UE@DNY%6ff`+ zZ}1i$@DX3|6+iG3p@s$sjc^E$NQjJRh>lo@jd+NUL`aNeNRCuUjdVzlOvsFE$c|jd zjeN+DLMV)1Pz)te3T03h7v(9lg*S z{m>r+F$hC33?nfLV=)dBF$uq7D*lHVn1vwB!S9%l1z3bXuoTO%5`SV1)?x!TVhgrn z2X^8w?7`pIk3%?&e{c*ZaSCT~4i|9=|Kcic;3odV9o)wQJjN3|!*jgCYrMmIe8OjZ z!*_%j79b?TAS@yvBBCHFVjw2sATAOhA(9{|k|PCDBMs6aJu)FPvLQQiAvf|NKMJ8R zenBymL@AU-IaEX?R7Ew^L@m@sJv2lkG(|JCL@TsKJ9I=RbVWDxL@)G3KMcem48<^v z#3+oxSd7O6OvV&U#Weg6GcXH5_#Jbx01NR47GoKf<4>%@TCBrHY{FJ-!%pnN9_+<_ z9Kc~5!7&`iDV)YRoW~_x##LOyP29pA+{FVt#1lNlbG*Q7yuo{Xz-N5HH+)Bk;Q>M- z48kG;A|eW+A_ih24&ovK5+VtbA_Y<+4bmb5G9nAIA_sCJ5Avb_3Ze*#qBu&RG|Hen zDxfl|pgL-xHtL{08lW+npgCHgHQJy(I-oPUpgVe?H~OGI24FCTU^qr#G{#^&CSWqA zU>c@lCVsZ1V~qY0X$1zMvG+M@$HqYJvD2YRCq`eOhFV+e+01V&>F#$y5|V+y8WI%eWG%*Gtd z#XKxTFcxD8mSY80VKvrb9X4VUwqhH0Vi)#cFZSaA4&w-p;W$p=G|u5XF5xn+;u>z^ z7Vh9K9^fIK;3;0R$Rju?oIIEaq~NQ@*% zjuc3ZG)RvO$c!w=jvUC1Jjjm%D2yT~hThU%z^TBwV9XoyB=ie_ku zR%nZM=!j0}if-tMUg(Q{7>Gd_ieVUuQ5cJHn21UE6;ts)%)l%JVGe%Bd@R5s{DGxd zhL!jeYp@m@un}9Z6+5sKe_;>)#(o^aVf=$*IEhm@i*vY$OZXR8aRWE;A0FT_p5QrN z;5FXhJwD(wzTi84Ampe3p%50~5D}3O710nAu@D#WkPwNG6v>bhsgM@wkP(@X71@vz zxsVt6P!NSs6f<50n1vwxj=7kR1z3bXuoTO%5`SV1)?x!TVhgrn2X^8w?7`pIk3%?& ze{c*ZaSCT~4i|9=|Kcic;3odV9o)wQJi=oNM?ATAOhA(9{|QXnPLAT2T=BeEbXav&%2ATJ7_Ac~+UilYQdqYTQU z0xF{ls-p&KqYmn$0UDzTnxh3;qYc`l13IG%x}yhrqYwIH00v_ShGPUqV+_V)0w!Y$ zreQi};y2939L&Rf1Y;4FU@2B$C01h%)?))UV+*!p2X^Bx?8DzUh(kDve{cdPaRz5` z0T*!v|Kd7s;5PolJ>175JjOFT$1A+XJG{pye8x9?M~F88LLv;pA_5{J3ZfzgVj>RW zA^{R236dfOQX&n~A_Foa3$h{yav~4%q5uk_2#TUON}x2#pgby|GOD0DYM?gipgtO) zF`A$`TA(%BpglUEGrFKVdZ0J@pg#s+Fos|_Mqo6?U_2&ZGNxb}reh|4!)(mKJj_Qh z7GVjNVg*)WHP&D~HefThU^{kTH~zvt{EdS+groQeCvXyHa26ME5m)dpuHy!7<3HTP zeLTWrJi~Lm!fU+4dwjxYe8YEycpD%j!XPXnAR?k5Dq$w@*pn?pdgB%D2k&5N}~+QqXH_U3aX<9YNHP7qX8PD37Vq?TB8lxqXRml z3%a8RdZQ2eV*mzY2!>+>Mq>=dV*(~)3Z`K?X5u%@#vIJUd<0_=mS8DXU?o;#4c21= zHe(C6V+VHQFYLqLIEX_yihpndCvgU6aRC=`1^?nYZs0cl!#&)`BRs}4JjW}%#yh;n zCw#^?d`F0P0YV}S!Xg49A_}4+24W%(;vxYOA_YzRvpfQ@DIa;7K+Mqo;pfkFlJ9?lu`k+4sU@(SY zI7VPJ#$Y@qU^1p)8m40=e#30c!92`IFcx76mSP1~Vl~!aJvLx7wqQGUU^o84KKzY? zIE1742Pbe6XK)r5a1mGVFRtSTZsR}P!+ku$V?4uiyuxd|!+U(fXMDqVgm@nyB*Gvp zA|N87ASz-YCgLD25+EUxASqHHCDI@*G9V+eAS-epC-NXK3ZNj0peTx?1WKa}%A*1* zqYA2{25O@Y>Z1V~qY0X$1zMvG+M@$HqYJvD2YRCq`eOhFV+e+01V&>F#$y5|V+y8W zI%eWG%*Gtd!+Zo|5td*nR$wJoV-41012$s|wqpl&<1g&P-#CavIEsI80w-|>XK?`+ zaRvY4I&R=L{=+@o$0Iz(Gd#yDyv94c$0vNoH+)Bk4*^0V48kG;A|eW+A_ih24&ovK z5+VtbA_Y<+4bmb5G9nAIA_sCJ5Avb_3Ze*#qBu&RG|HenDxeZ7qZ+EC7HXp&>Z1`F zqZyi`6nl#$ysDV=AU$24*4%voRO*un@sm zj3ro(6lt4%drBhuo~;I9-FWk z+przGup4`^4+n4%M{pF!aRR4t2Ip}BmvIHxa2>aB8+UOJ5Ag_3@eD8V3UBcaAMpua z@eMx_;!}Xo2!rs5fXIk~=!k*Xh=ce@fW%0Gr>Uj!_tmaTt$D zn2f2Ih8dWNAk4;G%)>$iV=5E)Sr9Wf9a zaS$H~kQhmj94U|*X^6jrBM#$Q3;h%4b@Q#wNVfC z(Fl#v49(FBt zh+r(n5-i6Gtio!n!+LDOW^BWD?80vB#XcOsK^(zR9LEWq#u=Q)1zg4zT*GzT!fo8e zJv_uCJjFA-#4EhTJAA|^e8o5XM2If|LL&^qBLX5L3Zf$hVj}?(BMFit1yUmo(jx;h zBMY)42XZ41@}mF>qX>$jI7*>3%Aq_ep)#tWI%=Ud>Y+Xwp)s1FIa;AL+MzuBRGoVIDykRgY&q6%eaDTxQ<)6jk~yqhj@gic!rmFg|~QzkNAYI z_=cYd@ijnbgh6;jKx9Ngbi_bx#6f%{Kw>08a-=|Nq(ORQKxSk?cH}^AP zaU3Ub8fS1G7jPL@a1GaS3%79>_wW#p@D$JR60h(U@9+_y@D<bXij|51JBuI`FNR2c|j||9+EXa-=$c;S6j{+!+A}EI9D237}hw`X|%BY6w zsD;|7hx%xQ#%PA-Xoc2jhxX`%&gh2j=!M?shyECZ!5D_&7=_Uohw+$%$(V|1n1PuH z!fedNJS;>o7GnvPV+B@WHP&H0HeoZiVLNtVH}+y54&We;;3$sc1Ww}&&f@|u;|i|f zI&R@M?&2OE;t`(W8D8QQ-r^lT;uF5&8-60h_W+?02H_C_kr4&a5d*Oi2l0^riID`! zkpiia2I-LjnUMwAkpsDr2l-I|g;4~>P#mRD8s$(Pl~5VgP#v{U8}(2hjnEj)&>XGM z8tu>?ozNNG&>g+d8~xB9gD@DwFdU;W8sjh?lQ0=mF%2^?6G51bxtNEA2*zS8!E&s? zDy+sjtj8v7#x`unF6_o$?85;Z#1S0Dah$+uoWXfqz-3&)HC)Fn+{Rtp!$Um6Q#`{< zyuw?&!$*9=SA4@yg!mC4G{PV}A|NuNAUa|oHsT;Y5+E^BAT`n;Ju)COvLHKhAUE$rv6xQlyuh(~yeXLyNMc#C)Vh;R6b5I+NiMi_)g z1Vly@L`Mw7MjXUP0whKfBu5IQMjE6?24qGSWJeC8LTQvkc~nAW zR6}*tLT%JTeKbO2G(&T=LTj``dvro)bVGOaLT~g#e+THs)d;79tpnu>{Mp0;{kZ>#!c1uo>I19lNj_d$A7(a1cju6vuG_r*Q`7aRHZc z1=nyLw{RPGaSspi2v6}0FYyX*@eUvH319IIKM^8CsKD`uFbIzbh>R$Rju?oIIEaq~ zNQ@*%juc3ZG)RvO$c!w=jvUC1Jjjm%D2yT~hThU%z=+Ng*6XoSXS zhURF6)@XPVLdisGqzznc40U6Vjm6!2#kn3sE^<%j^hMQ;|$K@0xshUuHiav;WqB# z9vJ1=*1UxseC?Q2>Qe1jSGsrBE8>P#%>~8P!l7wNM-NP#=xZ7|qZeto%8 z8Qstwz0e!|&>w>^7{f3eqc9rdFdmaI8B;M0GcXfDn2ouZhlL2nVl2UOtiUR)#yYIW zCTzwwY{xF_#$N2h0UX2;9K~^*z-gSpc|@NbI5EXSVkE=O-~j*O0UqNCp5qI?;|D@6 z3XA~lI3=*&keL}ePPP64%VU}GHZJ1f()<94R8l0vLXS(O(jpx)A``MA8*(BSRs;pe zrwZa19PunART-2;1yn>8RK;!U)>L&+7Y)!5P0$oA&=PIX79ng_U>^m>0H7;+peOp^ z_|gEUa2n@u3wLlA5AYCA@Dwj_&5Lsrx3I|;JycKd6uZI%cGg?<0Uz-NU-1J!5o$qz z&9y8XF)q!XZ2&Au^&NI$|L<;vqf~Au*C6 zIZ`1t(jh%EAv3ZeJ8~g6@*zJ8p)h_yF_c6pltnpIL?u*3HPl2c)I~isL?bjsGqgl2 zv_(5~L??7bH}pg=^hG}m#2^gCFpR_~jKw%i#3cNRsrVmeU>1V#JLX~m7UB;q#xg9& zpIC*pSci?+gss?yo!Esv*o*x*fWtU~V>pgeIE`~Sk4w0WtGI@nxP?0behU>MWC*v8 zcP)B=hj@agc!8IAgSYsAk9Zh5aM*uUPt{KqYFvQO2#4^9gvf}7=!k{bh==${gv3aO z?8t@O$cOwWgu?g*#ZVHZP!{D-5tUFC)ld_)FvFX>o@$6jXo_ZN ziB@QfcGzT%PO2-qp(lEwFZy9124N_MVI)RjEXH9XCgE31#s4q^vk-*eF&7K45Px7X zmSH*m#44=CI&8!yY{fS0#4hZ?UhKyK9L5nG!*QI#X`I7(T*75s#Wmc-E!@FfJitRd z!Bf1zOT58be85M1!B_miPlOsDAT+`uJR%`7q9HnBAvWS6J`y1@k|8-#AvMw=Ju)FP zvLQQiAvf|NKMJ8RenBymL@AU-IaEX?R7Ew^L@m@sJv2lkG(|JCL@TsKI|QzJ0>>Y^ zq8oam7y6$cGcXH5_#Jbx01NR47GoKf<4>%@TCBrH zY{FJ-!%pnN9_+<_9Kc~5!7&`iDV)YRoW~_x##LOyP29pA+{FVt#1lNl3%tY|yu}B6 z#20+U5Bx-^2?0VQ9Ks_KA|o22BNk#K9^xYr5+fOsBNb939nvEcG9w$ZBNuWbAM&FR z3gZ_PLrIiES(HOXR6jAiB(vOb=Zha*otk~iCx%(z1WWf zIE*7WhT}N(e=OZov>?f{0MMTHwC!ozwx(@s+O}=mwr$(CZQC~9*>}C4omu%^xuPl} zsuE{#9v5&KS8yFSa2t1U9}n;tPw*Ts@EULM9v|=-U+^72@Ed;+cz6Io5F8;83ZW4W z;SmXu5e?B13$YOw@sJRSkQB*~5~+|D>5vhbkQLdG6S3CO9X-$+eb65RFc?EH93wCqV=x{QFd0)Y z9WyW+b1)wZuoz3Q94oLIYp@<0uo+vh9Xqfad$1n|a2Q8$94BxZXK)@Da2Z!{9XD_r zcW@sM@EA|<953)1Z}1);@EKq59Y63Je-L;?06`EOArK0o5f0%I36T*E(Gd%=5f|~0 z5Q&f!$&eDMkQV8X5t)z`*^m>tkQez-00mJ5MNtAJQ3hpE0TodNRZ$%^P#bkn9}UnL zO%RZ92)O^y8g0-X9ncwF&>cO{8-36p127mvFdQQ=8e=dX6EGQ5FdZ{68*?xp3$PeV zupBF}8f&l~8?YH$upK+F8+))H2XGiia2zLa8fS1G7jPL@a2+>r8+ULY5AYaI@EkAj z8gK9(AMhDp@Et$!8-EaZWB@@B93c=2p%D(@5ebnI4bc$`u@M*XkPwNG6v>bhsgM@w zkP(@X71@vzxsVt6Pyhu{1VvE-B~b=tQ2`ZE1yxZUHBcLMP#+D@7)=n6>k7F4&>C&f z9v#pbUCMZw9|JHLLogg8FdAbp9uqJbQ!pJfFdK6)9}BP;ORyX(uo`Qy9viS3 zTd*BFup4`@9|v$4M{pb`a2jWD9v5&KH*gzwa32rw7*FsVFYp>~@E#xV8DH=nKkyrW z5O`DoK@c1v5DK9Y4&f0Akr55i5eu;q7x9n~iI6FHz`JBJvy@1Mv`B}H$b_uOhMdTS zyvTcFP1WU03 zE3pP^u>l*g1zWKLJFy3QaR3K#1V?cKCvgU6aRC=`1y^wcH*p7d@c=LJ25<2JAMpiW z@dH2c2Z1C~f*>eDAS6N~48kJ&U?%2ZE*4-RmS8DXU?tXIC-z`34&We;;3!VuB+lS0F5n`r z;3{t5Chp)a9^fIK;3;0_S zpe`DqA)25mTA(G`pe;I}Bf6j~dY~uzpf3hsAckNlMqnhyU@RtJBBo#}W?&}fU@jJ5 zA(mh%R$wL8U@bOaBeq~Gc3>y=U@s2fAdcWDPT(ZY;4CiSBCg;nZr~>F;4U8EA)eqV zUf?C(;4MDjBfj7(e&8qmAdsLQ1VIr3ArTs35FQZ_8Bq`&F%TPZ5D)Q@2#Jvl$&m`F zkq()W4cUu>?!80xPiw8?gmju>(7?2S;%NCvgU6aRC=`1y^w+fKJVW22^>~ zcY_Cv%|jv3q5y&-7(yT#AHmtG)%`#%)%VZ#e6KlA}q#I zEW-+{#A>X;I;_V=Y{C|7#dhq#F6_o$?85;Z#917bJi-$^#dEyCE4;>Ayu$~4#AkfLH+;uW{K6ju${s*q1VJzaM@amQ&h>d>`7x9q*iI5mckqjx25~+~}>5v{7kqKFl71@ykxsV%qkq`f( z01BZnilP`wpd?D849cNADxwmqpep`Db<{*H)InX;M*}oMV>CrGv_MO=MjNz4dvru6 zbU{~iM-TKuZ}de!48TAP#t;m{aE!z#jKNrp#{^8mWK6|0%)m^{#vIJUd@RHwEWuJN z#|o^%YOKXNY`{ir#ujYDcI?D1?7?2_#{nF|VI0LVoWMz(#u=Q$d0fOLT)|ab#|_-V zZQR8@JitRd#uGflbG*bWyun+%#|M1EXMDvs{J>BA#vlBZBY?mNieLzVkO+m)2#aut zfQX2UD2RsWh>2K;gMSbY@sSXTkOWDQ94U|rsgV}xkO3Ky8Cj4G*^v{ukOz5@AOE5t z3ZV#!qBu&R6iTBk%Ao=(qB5$W8va8K)I@F6K|Rz*Lo`AYG(~f?Kr6IHTeL$5bVO%# zK{s?qPxL|`^hJLRz#t69Pz=KejKpY+!8nY^L`=dIOvQA}z%0zhT+G7)EW~0g!7?nz zO02>fti^h4z$R?QR&2u#?8I*D!9MKAK^(#n9K~^*z$u)@S)9WKT*PHu!8KgRP29pA z+{Jx7z#}}yQ#`{9yu@p~!8^RiM|{E;e8qSCz%Tqppqv5xg&+uu;0S@g5ei`t7U2;A zkq{YC5e+dA6R{BoaS;y*kPwNH1j&#bDUk|kkQV8Y0hy2)S&St%3T@C9?a=|9&>3CP z4L#5kz0n8#&>sUa2tzOw!!ZJ*FdAbq4ihjDlQ9L;FdZ{73v)0R^RWPnuoz3R3@fk_ ztFZ>_upS$+30trg+pz5+Wliq9F!iA~xb6F5)2p5+X5@AQ_S)B~l>`(jq-FAQLhpE3zR6aw0eKARqFh z01Bcoil7*Zqa;e949cQBDxeZ7qbjPQI%=R6YNIadp#d7AF`A$mnxiFJp$*!iJvyKh zI-@JPp$B@RH~OF-`ePslVF-p|I7VO;Mq@0-VFD&%GNxb}reh{%VGibEJ{DjR7Go)v zVFgxVHP&Dq)?*_!VGFimJ9c0fc4II0;Q$WeFpl6Dj^iXw;SA2=JSL9~U^-@C7G`5E z=3xOAVlkFr8J1%uR$&d+Vm&rs6ELhg5J0Eqq5nU95LV_OJR%?xA|ooIAqHY1HsT;I z;voSNA~BL68ImIXLyd6c!f83i}y(K zDxe`Z8ImITsqb};90UDw)nxGk)qa|9Q4cekTI-nCeqbs_h2YRA6`k){BV;}}$2!>)f zMqm_1V=TsD0w!WIreGSTVBF zV=wmM01o0Xj^G%M<0MYu49?;_F5nU_<0`J<25#au?%*Eo;~^g537+CPUf>m8<1OCd z13uz2zTg|a<0pRM4+6aoATWX;7=j}t{zhnoK{$j*L_|UqL`8JOKrF<@KZuL?NPt90 zjHF106iA8GNP~1pkBrEKEXa!N$bnqQjl9T*e^CI1P#8r~3?)z!rBMduP#zUg2~|)P z|Dif+q893)F6yHJ8lf?oq8VDCC0e5m+MzuRyhG95H zVid+;EXHF3CSfwBVj5;(CT3#}=3zb-ViA^LDVAdeR$(>PVjVVMBQ|3TwqZMVVi)#c zFZSaA4&gA4;uucgBu?WD&fz>R;u5alDz4)OZs9iW;vOF0As*uip5ZxO;uYTDE#Bh; zKH)RI;v0V8Cw}7({(2KYU<5@lgg{7yLTH3VI7C21L`D=uLv+MMEX2V-h==${h(t(& zq)3hwNQKl$i*(3Z2hVp$VEI;1kY(ZG~27jkaiq4(N!^=z?zOj-Kd+KIn`77=S?-jG-8Y z5g3Wl7=v*bkBOLsDVU1sn1NZCjk%bI1z3p1Sb}9(j+I!2HCT)F*nmygjIG#)9oUK8 z*n@r8kApabBRGoVIDu0*jk7q13%H2OxPoiAj+?lJJGhJccz{QEjHh^p7kG)+c!PI% zkB|6-FZhb@_<>*ejX-Y$_zOW06u}V!e$p*TvS6w071%A*1*p)#tX z8mglPYN0mjq8=KcAsV9znjzq$=zu_lR%nB^Xpau)gwE)SZs>uY=#4(;hyECdK^TIe z7>*Gbh0z#`ahQOKn2afyhUu7zy>9{@%J<^{4&gA4;uucgBu?WD&fz>R;u5alDz4)O zZs9iW;vOF0As*uip5ZxO;uYTDE#Bh;KH)RI;v0V8Cw}7({(2igU<5@lgg{7yLTH3V zI7C21L`D=uLv+MMEX2V-h==${h(t(&q)3hwNQKl$i*(3Z2hVp$VFzIa;6Y_dxpb;9QDVm`LTB0@DpdH$yBRZiAx}rOJpci_hFZy8s24XOVU>JsDBt~Hj#$r4s zU=k){DyCruW@0wxU>@dUAr@f?mSQzlE!JTJHexfjU>mk$Cw5^E_F_K{;7|aa zny=p%=zpCM8w1AX+prxwu?u^!7yEGlhj182aSSJL5~pzn=WreuaS2y&71wbCw{RPG zaSsph5RdT$&+r^C@d|J77Vq%^pYR!9@eM!l6Tk5Xf9($-FoGf&LLekUAvD4w93mhh zA|nc-Av$6r7UJL^#6x@}L?R?XQY1$Tq(W+>MLJ|aMr1}7WJ7l3L@wk(UgXEWD2PHR zf}$vn5-5ezD2sBafQqP$DyWA4Py;nl8+A|*_0bTG&;(7<94*iat8+))1`*9G5a0Ewj94BxJr*RhNZ~+%_8CP%(*KrfKa0hpB z9}n;dkMR`G@B%OK8gK9p@9`0z@C9G-9Y633zY*v_0DmC}f+9FV;BSON7=%T5L_j1& zMpQ&Y48%li#6eudLjoj3VkAK_Bu7f5LK>t+dSpN*WJXqGLk{FbZsb8ep%vPoE!v|4I-xVV zq8oakCwij~`k_AtVi1O4D28JMMqxC@VjL!5A|_)BreQi}Vix9LF6Lta7GW`#Vi{Io zC01h%)?qz1ViUGtE4E_?c40U6Vjm9RAP(aQj^Q{?;uOx{EY9NsF5xn+;u>z?CT`;n z?%_Tj;t`(UDW2m6Ug0&~;vGKVBR=B`zTrE5;uroP(7^x#BM5>aI6~rYghm*ILwH0) zBt$_}L`Mw7LTvnlxQLGgNQA^lieyNElt_&~Q4y6;1y%7Ms-q@qp$_VzJ{q7A8lx$ip#@r^HQJyZ+M^>np$odA zJ9?lOdZRD;VE_hVFos|lhGQf~VGPD%JSJcgCSxk5VFqSmHs)X+=3^liVF{LEIaXj5 zR%0#JVFNZ|GqzwGwqqxDVGs6VKMvp!4&x|};RH_NG|u20&f_93;R>$eI&R<=ZsRWQ z;Q=1vF`nQVp5rB6;SJv6JwD(QKI1FC;Rk-=H~!$SLjeRvPy|B=ghVKWMp%SH1Vlt+ zL_st}M@+;*9Q=cLh>wIwgd|9c8B;M0GcXggF$eQ79}BSvORyBn zu>z~G8f&o*8?X_Zu?5?(9XqiLd$1S#aR7&K7)NmoCvXy{aR%pb9v5*5S8x^AaRaw- z8+UOJ5AYC=@dVHC953+-Z}1lH@d2Ok8DH@YKkyU3@dtk$2_P_nA{as-BtjuH!Xg|Z zAR;0o3Zfx8Vj>pe;2*?8d?Z97BtcRnM+&4uYNSOvWI#q_Miyj4cH~4ZO(|~P-R%ng3Xon8y zh|cJOZs?Al=!HJ$i~bmZK^Tmo7={rTiP0E?aTt$@n1m^qis_hvS(uHvn1=;eh{aff zWmt}tScNrMi}l!mP1uaB*oGb0iQU+Peb|qKID{iOisLweQ#g&YIEM?kh|9QwYq*Y^ zxP?2oi~D$hM|g~)=!M?si+&h@ff$S-7>3~(iBTAXu^5jDn1sogifNdEnV5|^n1}gT zh(%a}rC5#?ScTPCi*?w5jo6GW*oN)ciCx%(z1WWfIE2GEieor|lQ@ktIEVANh)cMF ztGJFExP{xei+gy0hj@%9c!uYAiC1`ow|I{a_=L~+if{OVpZJYG`0H2zfe{qJ5CS0) z3ZW4e;Sd245gAbs4bc%3u@DFUARgi)Arc`8k|H@$AQe(0Ez%(aG9ojwARDqHCvqVV z@*+R}ML`ro5fnvnlt3wzMp=|Y1yn?3R6#ZThZ?Af+NgtisE>wdgeGW;=4gRdXpOdL zhYsk7&gg<}=#HM~g+Azu{uqEk7>uD9h7lNv(HMhq7>|jVgejPc>6n38n2ouZhXq)O z#aM!6SdNugg*8}<_1J(-*o>{%h8@_6-PnVD*pGuagd;eL<2Zp+IE}M7hYPrf%eaDT zxQ?5+g*&*5`*?syc#Nlbh8K8=*LZ_>c#n_xgfIAt@A!dV_>Dlv1NaL;5EQ`?0)HbE z!XPZdBLX5JGNK|HVjw1BBM#ys9ugoS5+ezcAvsba71AIr(jx;hAv3Zf8*(5gaw8A& zAwLSBAPS=hilI14q7=%YEXtz-Dxor}q8h5B25O-;>Y^SRpdlKg37VlfTA~%&pe@>? z13IBIx}qC;peK5x5Bi}$24WC~U?_%T1V&*r#$p^MU?L`C3Z`K?W?~lRU@qok0Ty8~ zmSP!JU?o;#4c1{jHewUDU@Nv`2XY{-tB$b~$}i~RT( z1yKk^P!z>c0;NzIWl;_lP!W|;1=a8$YM>@+qYmn!J{qDCnxH8Hj$R4aR%nIRXp45} zfR5;lF6f5t=!stFgTCmG0T_hA7>Z#Sfsq)EF&KyOn21T3f~lB}8JLCHn2UK>fQ49$ zC0K^#Scz3wgSA+X4cLUu*otk~ft}cmJ=ll+IEX_yf}=Q&6F7y_IE!<*fQz_{E4YU1 zxQSc1gS)to2Y7_Xc#3CuftPrVH+YBl_=r#Vg0J|FANYme2y`ldzYqjL5gZ}#H$ou{ z!Xi8(AQB=YDxx6Y)J|qA{AF8JeRdTA>ZvqCGmG z6FQ?Sx}gVpqBr`WANpe;24M(>VmL-%6h>n##$f^`Vlt*+8m40=W?>HIVm=mN5f)=9 zmSF`}Vl~!a9oAzbHen04Vmo$V7j|PW_Tc~y;xLZj7>?s4PT>sB;yfA&itNaNT*!^Q$cKMX z0EJK(MNteTP!gq42IWv56;TOQP!<27I%=X8>Yy&_qX8PBF`A+oTA(FbqYc`jJvyQj zx}Yn%qX&ASH~OL<24EltV+e*}I7VU=#$YVQV*(~&GNxi0W?&{}V-DtFJ{DpTmS8EC zV+B@WHP&JsHee$*V+*!nJ9c6h_Fyme;{XofFplCFPT(X?;|$K>JTBrAuHY)J;|6Zw zHtymc9^fG!;|ZSOIbPxw-rz0X;{!h7Grr;*e&8p5;}8Bi6F^`DMKFXwNQ6RYghe<+ zKtx1F6huRG#6&E_!9R$H_(+IENP?tDjuc3R)JThT$bgKu3Z+pNwF{A|_!9reZo~U>0U$F6LnY7Gg1$U>TNU zC01b#)?z(2U=ucDE4E<=c49a7U?2A5AP(UOj^a2@;1o{dEY9HqF5)t-;2N&uCT`&l z?&3Zk;1M33$2!${Ri|~km zNQjK6h=v%5iP(sPxQK@YNQlHpf@DaJlt_g%NQ?ByfK14YtjLBO$cfy@gM7%30w{>W zD1u@rj*=*aGAN7ksDMhSjH;-H>ZpNQsExX)hX!bf#%O|OXpWX>g*Ir5_UM34=!~xD zh92mN-sppV=#POIgdrG;;TVBY7>%(QhY6U7$(Vv^n2wp4g*lju`B;EOSd67uh80+e z)mVddSdWd^ge};L?bv}`*p0o|hXXi>!#ILtIF6Gzg)=yd^SFRZxQwf~h8wtv+qi>! zxQ~Z;geQ24=Xilvc#XGshY$FO&-j9G_>Q0Wg+B;%E`Y!Yf?x=akoX&+5eDH99uW}< zQ4kf;5d*Oh8~-3K;v)ePAu*C78B!o6QX>u0Aw4o86S5#HvLgp_Avf|OAO1xF6hdJX zMKP2>Nt8wzltXz`L?u)~Rs4tQsEJyrgSx1X255xFXo_ZNftF~EHfV?T=!j0}g0AR} z9_WSM=!Q9BgRvNo37CY*n2Kqbfti?%Ihcp}ScpYff~8oF60D%z{!4Lu=5elIZ7U2*95fK?t z5Dn206R{8n{~#XXBOwwY36df?QXmylBQ4S)12Q5rvLG9>BPVhp5Aq^E{zX9)LJ<^2 zag;zQltx*ULj_bsWmG{m{D&H-iQ1@xdZ>?vXoMzcisop6R%ng3Xon8yh|cJOZs?Al z=!HJ$i~bmZK^Tmo7={rTiP0E?aTt$@n1m^qis_hvS(uHvn1=;eh{affWmt}tScNrM zi}l!mP1uaB*oGb0iQU+Peb|qKID{iOisLweQ#g&YIEM?kh|9QwYq*Y^xP?2oi~D$h zM|g~qY0WJ;0W`8K!sLlgSKdo4(No==!$OW zfu87%KIn)37>Gd_f}t3W5g3Kh7>jY3fQgulDVT=on2A}KgSnWG1z3c|SQGOpqpZr~Y_dxpb;9QDVm`LTB0@DpdH$yBRZiA zx}rOJpci_hFZy8s24XOVU>JsDBt~Hj#$r4sU=k){DyCruW@0wxU>@dUAr@f?mSQ

zlE!JTJHexfjU>mk$Cw5^E_F_K{;1CYuD30L-PU1Aq;2h55A}-+yuHrgw;1+J< zF7Dw09^x^c;2ECdWdNO;zY0)G?Hfz)@E#xW319FP-|+*#@Ed_H1@ISwASi+(1pY=S zgh5z@M+8JdWJELvo}(26hm>8L@AU(S(HZwR6=D`MKx4M4b(zy)I~isKtnV}6Es6}v_vbkL0hy( z2XsPbbVWDxKu`2WAM`_i48$M|!B7mx2#msLjKw%iz(h>O6imZ(%)~6r!CcJ80xZH} zEX6Xcz)Gyf8mz;5Y{VvP!B%X?4(!5i?8QDDz(E|w5gfyDoWv=d!C9Qg1zf^qT*Woq zz)jr79o)lxJj5eB!BafP3%tT>yu~|wz(;(>7ktBa{KPN(L7>Y41V#`9LvVz|-w2H` z2#4^9h)9TnsECdjh=thr2XPS}36Kbhkrc_00x6LiX^;--krA1Y1zC|DIgksvkr(;! zFAAU#3Zp2Bp#(~zG|HeH%A+DGp$e+vKU7Ce)IuH9MSV0tBQ!=+G(!utL~FD`JG4hf zbV3(&MR)W-FZ4!V^uquQ#9$1;Fbu~?jKUa<#du7>BuvIsOv4P!#B9vLJj};JEW#2j z#d55`Dy+s@tiuLu#Aa;4Hf+aE?7|-G#eN*XAsoh09K#8m#A%$tIh@BuT*4Jx#dX}k zE!@Uk+`|Jr#A7_cGd#yjyuus2#e00fCw#_Ne8Ug?#Bcn;UsnPMjGzdH5D1A-2#v4^ zhX{y>$cTbyh>neSsgN3Jkq#M<5t)$%*^nJMkqdc{7y0oo z3Zf8-peTx?1WKVa%Ay=9pdu=x3aa5h)Id$tMjg~ceKbTPG(l4|M+>wbU;UR zMi+ELcl1Or^g&#|fOmX`ID5T);(K#uZ${b=<@) z+`(Pk#{)dVV?4z(yueGm#v8oDdwj$ve8E?I#}E9%Zv?s;z+VW0pa_l-_#2@R24N8% z5fBNH5f#x812GXBaS#{rkN^ph7)g)}$&nJNkOpay9vP4cnUNLQkOMi98+niq`B4A` zQ5Z!~48>6rrBDWCQ63dg36)V5)leNZPz$wD7xmBp4bd1)&6w9yz zE3q1Dunz075u30DTd^HGunW7f7yEDk2XPoja16(B5~pwmXK@}Ea0!=j71wYBH*p(x za1ZzK5RdQ#Pw^Zt@CvW-7Vq!@AMqJq@D1Pb6Tk2WfvyD*7(oyW!4VRFBQ(Mw9Ks_a zA|VQ*B06Fq7GmQc#6^50Kq4eYQY1qPq(o|@K{}*IMr1-3WJPx5KrZA)UgX2SD1bsJ zjG`!p5-5q%D1&k+kBX>-DyWM8P#rZ<3w2Nz_0a&0&=^h83@y+StkJp30=?? z-O&TR&>MZx4+Ag|gE0idFdQQ>3S%%9<1qn~Fd0)Z4KpwkvoQzrFdqxC2urXO%drBh zuo`Qz4jZr$o3RDkupK+G3wy8^`*8q=a2Q8%3@30Br*Q`7a2^+N30H6x*Kq^4a2t1V z4-fDVkMRW0@EkAk3UBZh@9_bj@EKq64L|S`zwrluT@N5If+83~AS6N|G{PbrA|N6n zBMPD+I$|Og;@}^|LwqDeA|ydlBu5IQLTaQ%I%GgbWJVTbLw4juF62R8VH80z z6h}#vLK&1rc~n3pR7O=)Lv_?ZE!0L`)I$R_L}N5TGc-p_v_c!SMSFBWCv-+vbVCpH zL~ry#KlH~y48jl$#c+(kD2&EfjKc&>#AHmtG)%`#%)%VZ#e6KlA}q#IEW-+{#A>X; zI;_V=Y{C|7#dhq#F6_o$?85;Z#917b zJi-$^#dEyCE4;>Ayu$~4#AkfLH+;uW{K6jux*0%V1VJzaM@amQ&h>d>`7x9q*iI5mckqjx25~+~}>5v{7kqKFl71@ykxsV%qkq`f(01BZnilP`w zpd?D849cNADxwmqpep`Db<{*H)InX;M*}oMV>CrGv_MO=MjNz4dvru6bU{~iM-TKu zZ}de!48TAP#t;m{aE!z#jKNrp#{^8mWK6|0%)m^{#vIJUd@RHwEWuJN#|o^%YOKXN zY`{ir#ujYDcI?D1?7?2_#{nF|VI0LVoWMz(#u=Q$d0fOLT)|ab#|_-VZQR8@JitRd z#uGflbG*bWyun+%#|M1EXMDvs{J>BA#vlB3D}cZVieLzVkO+m)2#autfQX2UD2RsW zh>2K;gMSbY@sSXTkOWDQ94U|rsgV}xkO3Ky8Cj4G*^v{ukOz5@AOE5t3ZV#!qBu&R z6iTBk%Ao=(qB5$W8va8K)I@F6K|Rz*Lo`AYG(~f?Kr6IHTeL$5bVO%#K{s?qPxL|` z^hJLRz#t69Pz=KejKpY+!8nY^L`=dIOvQA}z%0zhT+G7)EW~0g!7?nzO02>fti^h4 zz$R?QR&2u#?8I*D!9MKAK^(#n9K~^*z$u)@S)9WKT*PHu!8KgRP29pA+{Jx7z#}}y zQ#`{9yu@p~!8^RiM|{E;e8qSCz%TqppxXibg&+uu;0S@g5ei`t7U2;Akq{YC5e+dA z6R{BoaS;y*kPwNH1j&#bDUk|kkQV8Y0hy2)S&St%3T@C9?a=|9&>3CP4L#5kz0n8# z&>sUa2tzOw!!ZJ*FdAbq4ihjDlQ9L;FdZ{73v)0R^RWPnuoz3R3@fk_tFZ>_upS$+ z30trg+pzQb zD2MW>h)Sq}s`wApQ4_UL2X#>&4bTXU(G<vF0UNOy zTd)n=u@k$n2Yay}2XF|7aTLdJ0w-}AXK)VZaS@kr1y^w$H*gELaToXS01xpPPw))S z@e;4_25<2mAMgpE@fF|j13&Q_fAH7c00JW@f*}M#A{0U+EW#lIA|f)PAR3}0CSoBD z{y{v%M?xe*5+p@(q(Ca9Mp~pp24qBLWI;A$M^5BI9^^%S{ELDpgd!-4;wXVqD2=ix zhYF~O%BX^B_zyKu6SYwX^-v!T(Fje@6wT2BtTvoITTF%Ju{5Q_r{XsKOdz6{H;605KVYq1_1 zunC*772B`_JFy#kun+rj5QlICM{yh{a0;h!7UysQ7jYR^a1GaS6Sr^&cX1yN@Cc9b z6wmMiFYy|0@DA_s5ufk{U-2D3@C&~Y=w1MSAqavZI6~lWghCjEMR-I&Bt%A3L_-Y3 zL~O)CT*N~HBt&8)K{6yqN~A&>q(ypUKqh2HR%AmCCfCG)GIcLL0P2dvri2bVgTnLl5*sZ}dSw z^v6I9!VnC_aE!nxjK)}u!vsvkWK6*{Ovg;j!W_)Sd@R5sEXGnS!wRg#YOKLJtj9)d z!WL}BcI?0|?8aW~!vP$`VI09R9LGtV!Wo>!d0fCHT*g&g!wuZTZQQ{<+{Z&a!V^5j zbG*PSyvAF+!v}oCXMDjoe8*4x!XE^>A3$IPK`;bINc@e^2!n74kBEqb|0C%hgT~0Z zHGsypZQHhO+qP}nnq-nmCYji_ZQHhu`>y--kF`%dRbACpyZiJxf4ZX~I$|Og;vg>K zBLNa2F_Iz~QXnN#BMs6aJu)H_vLGw6BL{LJH}WDM3ZNhgqX>$jI7*@v%AhRDqXH_S zGOD5)YM>@+qYmn!J{qDCnxH9~qXk-_HQJ&bI-nyuqYJvBJ9?rQ`k*iRV*mzWFot3n zMqngHV+_V&JSJiireG?jV+LknHvYm~{Ehke2Mh5p7UMrG#d55`Dy+s@tiuLu#Aa;4 zHf+aE?7|-G#eN*XAsoh09K#8m#A%$tIh@BuT*4Jx#dX}kE!@Uk+`|Jr#A7_cGd#yj zyuus2#e00fCw#_Ne8Ug?#BcmT;0FN&K`;bINQ6QdghhBnKqN#)R767z#6)bwK|I7q zLL@>GBt>$hKq{n0TBJh;WJG3UK{jMZPUJ!!Cc7U5qk!GBnWRNBxPXhej4QZ?>$r(qxP!a6j|X^!$9Rfoc!8IA zjW>9Q_xOlU_=2zajvx4i-w5jSDh1iITcu0VR zNQ@*%hU7?zR7iugNRJH2gv`i_Y{-F}$c;S6hx{mrLMVcwD2@^+h0-XCa;SicsEjJ8 zhU%z^TBw7%sE-C{gvMx!W@v$yXpJ^#hxX`*PUwQJ=#C!fh2H3kei(p(7>pqphT#~A zQ5b`<7>@~2K;gSd!~1W1I$ zNQz`gfs{y%G)RZ^$cRkHf~?4n9LR;-$cua^fPyHDA}EI9D2Y-igR&@(3aEt2sETT+ zftsj|I;e;GXoyB=f~IJW7HEamXp45}fR5;lF6f5t=!stFgTCmG0T_hA7>Z#Sfsq)E zF&KyOn21T3f~lB}8JLCH_zQFKH|FCXEX2Q9jQ_9{%drBhuo`Qz4jZr$o3RDkupK+G z3wy8^`*8q=a2Q8%3@30Br*Q`7a2^+N30H6x*Kq^4a2t1V4-fDVkMRW0@EkAk3UBZh z@9_bj@EKq64L|S`zwrlw9|sTw!4MoF5ei`t7U2;Akq{YC5e+dA6R{Bo@em&gkqAkU z6v>eSsgN3Jkq#M<5t)$%*^nJMkqdc{7x_^Dg-{qpQ4A$e5~WcFr+F$hC26vHtBqc9p{ zF%A7v|w_EWkflgnzLF|6v)HVnp$odAJ9?lOdZRD;VE_hVFos|lhGQf~VGPD% zJSJcgCSxk5VFqSmHs)Y1=3zb-U?CP^F_vH{mSF`}Vl~!a9oAzbHen04Vmo$V7j|PW z_Tc~y;xLZj7>?s4PT>sB;yfpBQhZivLZWjAQy5YFY=)P3ZgKIpcsmyBub$S%A!0fpb{#hDypFdYN9sk zpdRX@AsV3xnxZ*cpcPu9E!v?2I-)bWpc}fQCwid|`l3GuU=RjlD28DKMq)I^U>wF{ zA|_!9reZo~U>0WMFU-Z?n2&$35dUH^{=-r%#|o^%YOKXNY`{ir#ujYDcI?D1?7?2_ z#{nF|VI0LVoWMz(#u=Q$d0fOLT)|ab#|_-VZQR8@JitRd#uGflbG*bWyun+%#|M1E zXMDvs{J>BA#vcTJ7C;aLLvVydD1<>+ghvEKLS#fmG{itm#6}#%LwqDeA|ydlBu5IQ zLTaQ%I%GgbWJVTbLw4juF62R82jfhhro4AELxQqLEfJb$b)>ykAf(KA}EUDD1lNajj||*3aE(6sDf&!j+&^2I;e~K zXn;m&jHYOY7HEmqXoGfWkB;bsF6fHx=z(77jlSrI0T_tE7=mFKj*%FJF&K;Sn1D%` zjH#H08JLOLn1i{Phxu55g;<2eSc0Wkh80+e)mVddSdWd^ge};L?bv}`*p0o|hXXi> z!#ILtIF6Gzg)=yd^SFRZxQwf~h8wtv+qi>!xQ~Z;geQ24=Xilvc#XGshY$FO&-j9G z_>Q0Wg+B=NB7h(Wir@%=Pza5%2!{xWh{%Y7Xo!xOh=n+ai}*-@L`aOJNQM+hiPT7g zbV!ek$b>A&itNaNT*!^Q$cF+bh{7m>VknN1D1|a8i}I*|N~nygsD>J-iQ1@xdZ>?v zXoMzcisop6R%ng3Xon8yh|cJOZs?Al=!HJ$i~bmZK^Tmo7={rTiP0E?aTt$@n1m^q zis_hvS(uH#Fc*JgKK{W%{ENl-FM#fCmImlUUdu%*u?lOj7VEJAo3I&Mu?;)06T7ho z`>-DeaR^6n6vuG_r*Il)aSj)75tnfV*Ki#-aSL~F7x(c1kMI~z@eD8U60h+F@9-WU z@d;n>72oj#zwjG@UIq{tK@kig5E7vg2H_AM5fKSd5Eao81F;YraS;y*kPwNH1j&#b zDUk|kkQV8Y0hy2)S&c0;NzIWl;_lP!W|;1=Ua;HBk$7 zP#5*l0FBTXP0-rX8+)-2 z2XGLFaRkS394B!KXK)thaRHZb8CP))H*gcTaR>Ks9}n>ePw*7a@dB^#8gKCqAMg>M z@de-T9Y664e-P+Z06`EG!4U$X5E@|-4iOL$kr4&a0_ff*dVr>|n4;K-gLsIKgh+%W z0d#M(qha9xKVeruZL_wWD@ z@fc6=4A1crukZ$M@g5)W37_#5-|z!J@f&{-xKRK>5DdW)5}^8B;M0GcXggF$Z%o5A(4A3$X}`u>?!83@fk_ ztFZ>_upS$+30trg+pz5v{7kqKFl71@ykxsV%qkq-q>5QR|$#ZVk2 zQ3_>H7UfX^l~5T~Q4KXv6SYwX^-v!T(Fje@6wT2BtTvoITfVJ`m0eEfrj_!o=uAC_V{R$vuY zV=dNU12$qawqP5!V<&cD5B6d|4&V?D<0y{d1Ww{K&fpx*<03BM3a;WhZr~Pf<1X&u z0UqKpp5Pgt<0W3<4c_8CKHw8R<14=52Y%u={vdFZ0D>SGf+HkCAq>JIJR%?xA|ooI zAqHY1HsT;2;v*pvAqkQqIZ_}MQX?(WAp#dFP7jxEW>iF#44=8 zTCB$gY{F)2#Ww7~PVB}W?8AN>#33BPQ5?q!oWg0G#W`HSMO?-eT*GzT#4X&xUEIe5 zJi=o<#WTFXOT5M#yu*8Z#3y{gSA540{K9VpY8pUb1Vu1}KuCl}7=%N3L_{P+K~zLX z48%fg#6>(LKtd!&5+p-%q(myDL0Y6o24q5JWJNaQKu+XF9^^xQ6ht8uK~WS(36w%< zltnpIKt)tW6;wlY)I=@RL0!~G12jToG(|JCKufen8?-}vbVMg~L05D~5A;HB^hG}m zz(5Sf5Ddd`jKnC6!B~vP1WdwYOvN9L&W$%*O&O#3C%l5-i0stiVdF#u}`{ zdThidY{6D+#}4emZtTTA9Kb;w#t|IDah${{oWWU~#|2!%Wn9HI+`vuT#vR&)J7fDLwz(vBQ!x%G)D`xLTj`|J9I!tbVe6+LwEEO6imZ(%)~6r!C#n%zp()SU=jYs68wi{SdNug zg*8}<_1J(-*o>{%h8@_6-PnVD*pGuagd;eL<2Zp+IE}M7hYPrf%eaDTxQ?5+g*&*5 z`*?syc#Nlbh8K8=*LZ_>c#n_xgfIAt@A!dV_>Dl#0|<{iO>jxa0rixh=eGJ zif%!I1iY+_Vj(u-A|4VTArd1Ak|8-#A{EjgEz%RyhG95HVid+;EXHF3CSfwBVj5;(CT3#}=3*W`>E!~Wg;<2eSc0Wk zh80+e)mVddSdWd^ge};L?bv}`*p0o|hXXi>!#ILtIF6Gzg)=yd^SFRZxQwf~h8wtv z+qi>!xQ~Z;geQ24=Xilvc#XGshY$FO&-j9G_>Q0Wg+BKs9}n>e zPw*7a@dB^#8gKCqAMg>M@de-T9Y664e-OwG7X(2O93c=2p%E705CIVp8Bq`o(Ge4| z5C?G)9|@2MiIEh^kOC=@8flOY>5&nckOf(h9XXH-xsez7Pyhu{7)4MF#ZeNaPzGgD z9u-gtl~EPdPy;nl8+A|*_0bTG&;(7<94*iat9Wo#zG9wGJAvp)iV~7)qcdN}~+Qp*$+05~`po zs-p&Kp*HHG9vYw_8lwrCp*dQj6$0j^fJX@J1L)qSz|j9KUJC`(Hbqbr#ZdyKP#R@X z4i!)ll~D!NP#rZ<3w2Nz_0a&0&=^h83@y+StkJp30=??-O&TR&>MZx4+Ag| zgE0idFdQQ>3S%%9<1qn~Fd0)Z4KpwkvoQyAF%R>x01L4Qi?IYtu?#D)605NW>#!ah zu?btS72B}`yRaL3u@47u5QlLD$8a1caSCT}7UyvRmv9+ZaSb4F%b)K z5Et>00Ev(oNs$aGkP@kp2I-I<8IcKD0_ff*Yk>B9*+n^#3we+i`B4CcP#8r~3?)z! zrBMduP#zUg2~|)P)lmbrP#bko4-L=|jnM?n&>St%3T@C9?a=|9&>3CP4L#5kz0n8# z&>sUa2tzOw!!ZJ*FdAbq4ihjDlQ9L;FdZ{73v=)n=HYKFz&}`of3XDrVHuWVC01b# z)?z(2U=ucDE4E<=c49a7U?2A5AP(UOj^a2@;1o{dEY9HqF5)t-;2N&uCT`&l?&3Zk z;1M36T7end$At}a0rKS6vuD^Cvh5Qa1Q5j5tncUS8*LTa0|C_ zH-PSK&W!)x#h(kPZ7$#O7Vh9K?&AR-;W3`#8D8KeUgHhk;XOX$6TaXp zzT*de;Wq+J2p}+mA{as-Btjz$!XZ2&A`+q?DxxC>Vj(u-A|4VTArd1Ak|8-#A{Ejg zEz%RyhG95HVid+;EXHF3CSfwB zVj5;(CT3#}=3*Y^V*wUo5f)e@BLqSrG{PbrA|N6nBMPD+I$|Og;vg>KBLNa2F_Iz~QXnN#BMs6a zJu)H_vLGw6BL{LJH}WDM3ZNhgqX>$jI7*@v%AhRDqXH_SGOD5)YM>@+qYmn!J{qDC znxH9~qXk-_HQJ&bI-nyuqYJvBJ9?rQ`k*iRV*mzWFot3nMqngHV+_V&JSJiireG?j zV+LknHvYm~{Ehke2Mh5p7UMrG#d55`Dy+s@tiuLu#Aa;4Hf+aE?7|-G#eN*XAsoh0 z9K#8m#A%$tIh@BuT*4Jx#dX}kE!@Uk+`|Jr#A7_cGd#yjyuus2#e00fCw#_Ne8Ug? z#BcmT;7I`lK`;bINQ6QdghhBnKqN#)R767z#6)bwK|I7qLL@>GBt>$hKq{n0TBJh; zWJG3UK{jMZPUJ!!y0^Kr z^nc5ydjYl013biIJi#+O$4k7z8@$DPe84As##em95B$V${6XMl0R%xX1V>1OLKuWa zctk)XL`GCZLkz@3Y{Wr4#79CTLJ}lJa-={iq()k#Lk46-W@JG&WJgZqLLTHreiT3< z6h=`LLkW~bX_P@Zlt)EWLKRd+b<{vD)J9#@LjyEKV>CfCG)GIcLL0P2dvri2bVgTn zLl5*sZ}dSw^v6I9!VnC_aE!nxjK)}u!vsvkWK6*{Ovg;j!W{gCdH5R(@DCQ@Uo63Y zScc_TiB(vGwOEf0*o4j4if!0|o!E^%*oXZ%h(kDnqd1NeIEB+Vi*vYui@1y{xQ6Sv ziCegXySR@Bc!bAzif4F%mw1ggc!&4+h)?)}ulSB1_=VpHv^;>o2#R0`fshD|FbIe6 zh=@ptf~bg&7>I?~h>LhgfP_elBuIwjNQqQPgS1GG49JAc$ck*pft<*VJjjRqD2PHR zf}$vn5-5ezD2sBafQqP$DyW9)sEJyrgSx1X255xFXo_ZNftF~EHfV?T=!j0}g0AR} z9_WSM=!Q9BgRvNo37CY*n2Kqbfti?%Ihc!in2!Zmh(%b8C0L4O zSb>#TjWt+@_1K6_*n+Ltjvd&A-PntLIDmsVj3YRP<2Z>^ID@k|j|;ej%eabbxPhCv zjXSu9`*?^)c!H;Rju&`^*LaI}_<)c2j4$|x@A!#d_=7+z0tkYj2#yd4h0q9#aEO42 zh>R$RhUkciScrqTh>rwFgv3Z1!1NpBQhZivLZWjAQy5Y zFY=)P3ZgKIpcsmyBub$S%A!0fpb{#hDypFdYN9skpdRX@AsV3xnxZ*cpcPu9E!v?2 zI-)bWpc}fQCwid|`l3GuU=RjlD28DKMq)I^U>wF{A|_!9reZo~U>0WMFU-Z?n2&$3 z5dUH^{=-r%#|o^%YOKXNY`{ir#ujYDcI?D1?7?2_#{nF|VI0LVoWMz(#u=Q$d0fOL zT)|ab#|_-VZQR8@JitRd#uGflbG*bWyun+%#|M1EXMDvs{J>BA#vcS;89)#OLvVyd zD1<>+ghvEKLS#fmG{itm#6}#%LwqDeA|ydlBu5IQLTaQ%I%GgbWJVTbLw4juF62R8 z2jfhhro4AELxQqLEfJbjGzdH5D1CT z2!n74kBEqbD2R&ah=Ev$jkt)11W1U)NP=WYj+97+G)Rl|$bd}9jI79p9LR~>$b)>y zkAf(KA}EUDD1lNajj||*3aE(6sDf&!j+&^2I;e~KXn;m&jHYOY7HEmqXoGfWkB;bs zF6fHx=z(77jlSrI0T_tE7=mFKj*%FJF&K;Sn1D%`jH#H08JLOLn1i{Phxu55g;<2e zSc0Wkh80+e)mVddSdWd^ge};L?bv}`*p0o|hXXi>!#ILtIF6Gzg)=yd^SFRZxQwf~ zh8wtv+qi>!xQ~Z;geQ24=Xilvc#XGshY$FO&-j9G_>Q0Wg+BA&itNaNT*!^Q$cF+b zh{7m>VknN1D1|a8i}I*|N~nygsD>J-iQ1@xdZ>?vXoMzcisop6R%ng3Xon8yh|cJO zZs?Al=!HJ$i~bmZK^Tmo7={rTiP0E?aTt$@n1m^qis_hvS(uH#Fc*JgKK{W%{ENl- z4@vF0UNOyTd)n=u@k$n2Yay}2XF|7aTLdJ0w-}AXK)VZaS@kr1y^w$ zH*gELaToXS01xpPPw))S@e;4_25<2mAMgpE@fF|j13&Q_e-L<006`E8!4VRn5C&lp z9uW`;kr5Tq5Cbt08*va1@sSXTkOWDQ94U|rsgV}xkO3Ky8Cj4G*^v{ukOz5@9|ced zg;5m6Py!`U8f8!pQX&=7AT81(12Q2qvLYLDASZGo5Aq>D3Zf8- zpeTx?1WKVa%Ay=9pdu=x3aX(xYN8hEpf2j80UDt(nxYw6pe0(P4cehSI-(Q0pewqg z2YR75`l25OU?2u#2!>%eMq(7kU@XRC0w!THreYdqU?yf`4(4JW=3@aCVi6W&36^3R zR$wJoV-40}JvL$!wqPr^V+VF&H}+y54&WdT;|Px7I8Nde&fqN0;{q<>GOpqpZr~SWf+GY%AvD4w93mhh zA|nc-Av$6r7UCc-;v)ePAu*C78B!o6QX>u0Aw4o86S5#HvLgp_Avf|O9}1u#3Zn>$ zp*TvS6w071%A*1*p)#tX8fu^>YNHP7p*|X-5t^VWnxh3;p*7l~9Xg;RI-?7^p*wn_ z7y6(t`eOhFVK9bb7)D?uMq>=dVLT>c5~g4(reg+XVK)B4T>Ops_y-H|FBaoJEX8uH zz$&c9TCBqcY{X`4!8UBiPVB-S?8SZ@z#$yQQ5?ewoWyCI!8x4AMO?xaT*Y!81I^OT5Axyv2Kbz$bjhSA4?{{KRkkLE!ZP1VJzaM@WQ17=%T5L_j1& zMpQ&Y48%li#6dj7M?xe*5+p@(q(Ca9Mp~pp24qBLWI;A$M^5BI9^^%S6hI*qMo|<) z36w->ltDR^M@3XZ6;wra)IcrNMqSiH12jZqG(j^oM@zIq8?;4xbU-I`Mptx05A;ND z^g%!L$3P6i5Ddj|jKC<2##oHQ1Wd$aOu;lv$4tz^9Q=iO_!|rG4;JBHEWv+RhUHj^ zRak?ySdR_Zgw5EBZPVATeyR} zxQ_>TgvWS_XLx~^c#SuBhxho1Pxykb_>Ld=h2IFYA%MULieLzVkO+-12#4^9h)9Tn zsECdjh=tgQi+D(Ygh-4eNQUG{iBw2~v`CK($b`(uifqV%oXCwl$cOwWh(aiWq9~3M zD237}i*l%dil~e#sD|pOiCU)=!M?s zi+&h@ff$S-7>3~(iBTAXu^5jDn1sogifNdEnV5|^n2ULsj|EtWMOcg_Sc+v>ft6T| zHCTuB*oaNog00w&9oU84*o%EQfP*-UBRGcRIEhm@gR?k~3%G>KxQc7Ift$FEJGh7Y zc!)=Mf~R8x%eCN@edZ_Uo6IdSc>IX zfmK+IwOEG@*oe*8f^FE2o!Esv*o*x*fI~Qpqd0~WIEm9ZgL62Ki@1aJ43h=X{DkAz5sBuI+nNP$#HjkHLI49JMg$bxLhj-1GaJjjduD1bsJjG`!p z5-5q%D1&k+kBX>-DyWL;sDWCjjk>6Z255-JXo6;Fj+SVJHfW3X=zvb>jIQX09_WeQ z=!1UfkAWD3AsC9`7=ck3jj5&nckOf(h9XXH-xsez7Pyhu{7)4MF#ZeNa zPzGgD9u-gtl~EPdPy;nl8+A|*_0bTG&;(7<94*iatP zVjVVMBQ|3TwqZMVVi)#cFZSaA4&gA4;uucgBu?WD&fz>R;u5alDz4)OZs9iW;vOF0 zAs*uip5ZxO;uYTDE#Bh;KH)RI;v0V8Cw}7(0&fi<2!bIvLLwBxAS}Wo0wN(Yq9Ph% zASPlX4&os`5+V_jASsd~1yUh3(jpx)AR{s(3$h_Qav~SY^SRpdlKg37VlfTA~%&pe@>?13IBIx}qC;peK5x5Bi}$ z24WC~U?_%T1V&*r#$p^MU?L`C3Z`K?W?~lR;4jR>-&lZuun7NR3I4+}EXPW$!Wyi_ zdThWZY{ph>!w&4kZtTH6?8iYI!Vw(Bah$*@oW@z4!v$Q#Wn95ET*pn^!X4bjeLTP; zJjPQz!wbB`YrMfbyvIj;!WVqScl^LF{6?T{0R%=+1VadfL}-LTID|(;L_!oqMRdeK zEW}1!#6tokL}DaCG9*Vzq(T~`MS5gFCS*odWJ3<*L~i6kKIBJ16haXcMRAlsDU?Q8 zltTqnL}gS#HB?7U)IuH9MSV0tBQ!=+G(!utL~FD`JG4hfbV3(&MR)W-FZ4!V^uquQ z#9$1;Fbu~?jKUa<#du7>BuvIsOv4P!#B9vLT+G9KEWko6!eT7JQY^y?ti)=p!8)wR zMr^_sY{ho$z%J~@UhKmG9K>N9!7&`iNu0tNoW*%uz$IM9Rb0aj+{A6%!9Co^Lp;J0 zJjHXoz$?7QTfD;ue8gvb!8d%zPyE6k1lk@z5ClbVgg_{SMp%SH1Vlt+L_st}M@+;* z9K=O@BtRl0Mp7h03Zz78q(M5QM@D2q7Gyp46IE^znhx53IOSpooxQ-jRh1DgZyd!`h2!`MYiBJfGun3O`h=j<9ifD*|n23!y zh==${h(t(&q)3hwNQKl$i*(3QbD2MW> zh)Sq}s;G_{sD;|7i+X5)hG>i?Xolu!iB@QXwrGzI=!DMbif-tEp6HD}=!gCoh(Q>F zp%{)47=_Uoi*cBMiI|Kjn1<qT~ z8C$UpJFpYGu?PFG9|v&=M{pF!aRR4s8fS417jO}maRt|K9XD|ccW@W?@c@tT7*FvG zFYpqt@doek9v|@uU+@**@dLl`8-aEP5Ewxb3?UE_p%Dh*5FQZ`2~iLg(Gdf&5F2q3 z4+)SEiID`!kQ^zI3TcoQ>5&1MkQrH#4LOh#xseC?kRJt62t`m7#ZdyKP#R@X4i!)l zl~D!NP#rZ<3w2Nz_0a&0&=^h83@y+StkJp30=??-O&TR&>MZx4+Ag|gE0id zFdQQ>3S%%9<1qn~Fd0)Z4KpwkvoQyAF%R>x01L4Qi?IYtu?#D)605NW>#!ahu?btS z72B}`yRaL3u@47u5QlLD$8a1caSCT}7UyvRmv9+ZaSb4F%b)K5Et>0 z0Ev(oNs$aGkP@kp2I-I<8IcKDkQLdH1G$hJd65qVP!NSt1jSGsB~c1xP!{D;0hLf0 zRZ$H!P!qLL2lY@N4bccq&=k$l0MjcJ<$t&&=>tN0D~|XLoo~^ zFcPCN2IDXu6EO)>Fcs4=1G6w2e_<~E#(eyPh4>eX@gJ6AIaXj5R%0#JVFNZ|GqzwG zwqqxDVGs6VKMvp!4&x|};RH_NG|u20&f_93;R>$eI&R<=ZsRWQ;Q=1vF`nQVp5rB6 z;SJv6JwD(QKI1FC;Rk-=H~t{-?f`-y7=j}tLLm&oB0M4>5+Wliq9F!iA~xb69^xY* z5+MnaA~{kZ6;dND(jfyfA~Uie8?qxOav=}$B0mbC5DKFxilGEbqBP2&9Ll32DxnIh zqB?4z7HXp|>Y)J|qA{AF8JeRdTA>ZvqCGmG6FQ?Sx}gVpqBr`WANpe;24M(>VmL-% z6h>n##$f^`Vlt*+8m40=W?>Hg!aV$q1^5Sx@Gq9&KP385B$P!1lkioU<5@lgg{7yMi_)cctk`bL_t(UM-0S5Y{W%8BtSwW zMiL}La->8mq(NGwM+RgkMio>; zb<{*H)InX;M*}oMV>CrGv_MO=MjNz4dvru6bU{~iM-TKuZ}de!48TAP#t;m{aE!z# zjKNrp#{^8mWK6|0%)m^{#vIJWJj}-eEW{!##u6;WGOWN#ti~Fw!+LDQCTzi0Y{w4l z!fx!vJ{-V79L5nG!*QI%DV)JsoW})R!ev~=HQc~W+{PW;!+ku&BRs)VJjV;X!fU+6 zJAA-Le8v}i!*~3|FZ@BEy#WM4Py|N^ghFV9ML0x2L_|guL_>7ML@dNXT*OBLBtl~R zUqyHR+H)KSaJ&s!L`39@%r(cx7<0{i&3%nAX5-6-eKDIeA|fKP5fPCqB8!NKxgwfe zSv0w_h=_=spT{qcp1ohad;bIP-tTBMLkqM-3|gZt+93|@5s!{YKxZVPE4rfxlF$o% z&=>tN0D~|X$ry^^7=cj%!Hu}ldMw5v1rv~pNl3#Kq+=Q~F&!byL>96!2Xhg|JS;#i z@{o_kSb}9(julvmRalKRSc`R7j}6#}P1uYr*oti^z;^7wPVB;N?7?2_!+spVK^(#n z9K|sl#|fOoDHP!}&fqN0;XE$jA}--FuHY)J;RbHv7H;DX?xFG zD8qBSz)QTw8@xq1-r+qy;3GcaGrr&}zTrE5;3t0JH~!)uB8medQ4y6;8BwT$s;GwQ zsDYZOh1#ftx~PZxXoyB=j3#J`Xf#I)v_cHppeo0p z&&m!jNe^e_gl42?hZlvydGm6Y7JB)+JR|#JH zfM5n(t`+qtPTYv@)J+?tiIcQV^J?0Yp0-ZhxH*aQ`lsh4&HFgbyH3(3={b3{J$2J0 zP5S$N_c3<{z$~y_QdUGC6Iu-BzP|gtzwdtc)t%q;r+;>X{4cpV>eR#5rLteEwc52H z>L+_@?P_l|XvO_+>>vG_{ww|2WUA}0MeSa<8uXJJ@J6*BHf!CW)qkmNchz^l)Ss(jL_n;KEyiT`W>&b4Gy%QIMmKQFwLD#DS zSG+Lt9(>?|d-0{)#X{zszJL(YW65@h@w@F+FAi4&FK)|!%ifFi_4j&@2UWip1zvzz zuE)T}6)$Mwd)T_zZe9#(GQASlQua;;UCa{yqBi=8!nh~+5_xNN{?ZA$%a}=X-CM>6 zt65gDsAk~TII03gNgx{?Q|NW@I@~6Oo2E3N`GP|8GxfVkO!c>eg6j8xW{=?Cz4$kS ze@8(b_517d^}FhGz~CK*Is}vVF7=wtAg(k+;J0BoF2|VSFO@J3R-K=dT3pBWHbc<4 z2P|F)PF`jmVuj&O+>;--ocmVQ|r@q5n*8Iqeh@qt}@PhcJP!o;AR<(`JR=k=Y z`wBnGiV4;^e@&3G4mP zxWM7dgTT4n2ODb!(Ru{zC%0V&t>o9+)9W4na=L`I$(OJXvx>%D0$(0n!fie_tXr#f z!;7HTt{>HdT7CtIUcu0J(*=BD@&)Y2oIXD80{HUa0uK2erF;M!)YzF~W_}^xr594z zCSB0?Ouis$7XN(Q1@Yy<1(khDb?6SO!skR3g6(;}*9@1ses^7@I7MtP0wc_?@rU&q zC+#L(_K!@y>|3ys&y2flzC5_>W33=wYj-bzleAh;5vXLgmxYb!eT919gTX+L@HE9y z7$W_#fGQZrbEX1VUwf@QzgjIHA8>H*zeD+215QZ3h8 zg;EuoD)`f+@50gXi};5c{21Klx^dSwF@9KXLKDenWB- ztSBmTl}j+mTwU={0iYE{P9?jW&@j7x(`i@#3(e|wsZDW){%d#Wtkyf5?2z%38$0VT zB0KBz+~t0d*M|QesO$e0kz%q7%YYr&PxfUD!9J{U{;=wYt$w2f^hkE&LA>69alS(a zOZMVHaEaD*822yB?`wXyg+He{>&JlOJ=ox9l0En$RxbW#r?KB%3F3Zo>mWu7ZT}xl z+qYrve*(Hbm~1OMP|0k_XqMsH0_t*xkYEl@OA zr8HK?;8GCNo{fUI*NI4D+$*=3|k+@lNdfXe7)dn=!rabih58?9%(4T3yMV<+4{1Xw4JpK~3`l3T-NnGVhX| zz@D(yPi`C1mZ;NsH|Klzsl#Rh#3W$QUSkLt578~=L2}y(x<9;U)HJ;3xg%ynhW?fU z=jn-n12w7fq-`N4>f19yYxTw(ZaAlSizn;zKzq$-jt&d)h=>>?%dd9B7#^&q2Nw%| zC&DfTFerl((G)I0_ui;fv8TlFxG0d6HJWaUP7hzY=VN}zG}4y(3B zUkM~j`vUEwxa>V&2c_WuYxQ*qM%cg@6+XP0QsTTt%s=j~mmaCdaVI*qun@`ja@byY zbg?4hiqygh2*J2gQkEQ*y{93uOa4VH-G_AbV532Di&JnueF{-ZpO&`>_3EiGKG|DJ z$6SG+?k$xuvjwmjH3K~nPJ-*j3jAgSMJzkaV!aI$s75&((K9t<8Bw^>>UCr_YxS^N zw;Th@mh~-ng8=G-f`h-Z(hXMNGKf4l^u+53|C9I}xow@e*Tqk?F==waSpXBji@Sc6 zE;5RAY(wdy-wg>0*k#!JTCmg;ict&-%d06BMvw(Y1hof1r4_8{k>GEdMApDab!*qpTy+P3~6%LITErlsx5uKQnQt;HmtL(6#yNhwvuz+1^C!G=e z+z45@?6SmUhxlm|(}#%KUN?l~8>A0mUlsO!NEXpsYP<*EET6h#7&bntrfK*kJkNr6 zecw37oG02vW+&0;qI<(L6S$}}kZS!?+w2^G950MZwp1I(CR_)g`7LWKy6b+|h<2U!sY zj(ogtym1@^{<$0i*Z;~g^8MNA7-A@;b9DOom0Ulgg$>Oe7<&zlEH=|^Ll)}vTrk5a z3lB57odO@H^&f72Ui))EPO&3DrSY(1E{h#g$v$mkSC*hZU2tXo+uz}J!j8p_6yhJ0 z^&y7DIPk$_!}rvjG4OWi>`_5LDw(>p+B_C@pwS_o-GS=GASoifQ04IGa16aV50>|_RuDWtbyAZ->eWEX6`UdcNigU$$qhm*C&KcMA;5+siL zq_~ryZku4_m@lWBb0;S-mfR#J8cXm?GIMR*h)yga{6jdh=t)!CPyum5O@+0belLfu zIDiY8Ueu^8d*taxvY@BapG%s4*bSP6@$Ae8o_*nL<%x4=Dko2zJux$fZBIKp{=s|) zvqxV#YWDw&aAp?c?%M$48VB$~<5qs$hL6jQ+wqy~>LB8cT#3d(d>g>1hcmmB`cad{ z^TIwekOY^!=r?--EQ|oA2QUn7({2D4WfiPfdr1QifYh7M(W zttS#m7#P!GHD8JuyNKto(gTZ&xv7~Q+?RRo^!8}3w~ZMp#}|hB!qr)KN@Dqyj>rEV z8MS$zd~BJHDlG{G%5##OAx0-t6~qz1aD+!n>bBrfI44OQDleu)hk@UN2MdjrLjd~> zl2syB?;;IV6W2~XXs{=$0fTYMq(s0YT-Hf9sl)4wc!ue&eC0$KV;J9iNA1egIp)8> z`CvJ*^CTU$wy9CypB?p4!)uM(D-DQ$*6beLAW^TwZH?fPh>>#z?~L+MsD1T42DE@l z@F4Vp((Ku8)#Va%{er1#{Zh!_@kM!vB?KIQ}*7hvG+E@EZ6+w>V?4{6i>$>uBB9&2h?~R z`UI%5CxeV$7?mcI!ov5v8YGxlO0<7_QM8u%s1sDlPDxIZLMcSyS$E||t6%AbNWs)O zfF!cgK=Aqe)f!6BA%kFz@8epP=6$$mfeyy}D-E9dUE_LjihEY*^YFOnlL4TMOW!-j zHX9Lf65ITpW4v$Bg72qjF&g#ie^mctqLT@c6P--pp|_N_n{Awc6~{!>2N5^anRK%{ zw!&~S<1#8lH6r2?7Kpa-vUj_Ng#LO~p7{|Sj^NR}_$_lE1_AE&hZ8)KsoSI6khui6%}z-KTaYkZwQ zf_c6uwij|+Wh(7zwTGw+grgue{q-I!ux`5pe|`+N#L4HMe~v!?xChCLgaAh{BJR>e zx^B0;+WrU<2>o)qyRv}n-51WOoZT0Lr3E%$I48|TP)c^~QUJ{hVTD#uD|-(;@WA{- z?|BcVP^0c;LJz5ut}+{uAz_jknIbpGfPuf%R>4upnlrz%(}&UN!$qBniObC2k{jL$ z5s7Ior)qwAGGIBh|KII4DB903ljPYg2CG4&Tk^Z*%;&($^ zYUaGIb4Ve(Z+q5|9*w1Bcm}f1kAUp?qhNTC83?ItSs0s))-Ly2D)CLSr4&2jb9lcx zaO5DRLZIt0mxOs#id}|LN##DxSyKX=#l1q}Q;2BhBz=Pks_g6+&OXD2FdM2!31xJd zUpqW=8tJZ{VWj53trw%<$NouknhqDm>B=XID~ z51%12sK}1Vb2a;bB0@c=?49;61f>XmD!u@X=_2eEdC}FM@&Z}06~%5yy$-{nf2!o0 zVQj+H_g&d^MMhqm38!5AH1^Tmu`Kes=?5+s|4??v3iRl`XH$V@bf3(#bSfX7Xe!j8 zKWJNs2ECL)p3j?+%|1nxuQj9?F#;ePY9$NZ%%x*EQ!(<|jcpJEojtE0@j&tHJ6LbOgL8C=C2nLPHL#iEK-ekl1aoKUIDom~^QQ z_i9=g>I|2ZZQipXMDpzNB0E#;a=#0@*`v;gmvSR!QO@O;%tPg-3}=`z`q?DI{3x0_ z40DGJG6~1LbD0q^o&D^tG{Y!sz)`|i80C~j9|sl%(7%5e^bIQIuq?k1-%1dxeYkUY zlgy5MJ6|6ej2nMPzD3rW-A|W=*yP|r5%#@kdPO@j?e56%HILq#4_#F=8yZevr2_MisJ{%nk812{2JUTqT0>|M~{^}{7*3( zZw9~NZ~5&WggasUmr6%qhR=z;Z_RndPnC6E9uD_ew4EC=qz#b1u@|AX7kl)Rz~Q3k z{bpjRVP@}B2T}6lN~ayR*%?K35#g96eJET^jZ%R!oTAC1ByvIAgk4WGBT6G!UC^Nz z`0iFA;8p_Wk;0mRacg!ywR2#xdb5j*X_rW$h1zxeI8kYFQEmRLqovP|yP`a|`_E)w zirbB$$)?o!Yiu_b+bdMuKZkBMDTjU!O&zXxwH5a+km(m?wulWK7(fh1F7YiFG|o2N zHy-}vH|a0gquQiWiWAO|f0Y|DD@I%)RJa>|F6+xS9#aPG*>PpNarZD{bk^$HP?@cG za%+gq0p`H|S(7$-+i03pdv-86m`>UyTBrZJ0V)?iM#GznW+IuzyKSy6n4jl(0+GN= z1){?g|L6=dT46A@YB;^?@-2ATw3%oa75p_Y2ZSZzu!B@`0Jno11{{vBUTC$~S|z;l zqH)I{s{x)lzcvRWLh3XiNUd2b4AYW2lQfq9CiR%R2B^#hQ-`xj`2Yng#EAvV0S5)G zKM1LK@HnOV|I4rAvK^%O(i~DaOym9upp)ku?_;-$bBy%CJf0gmi;phz!0EAhb$V>r z;kL%3=xCG7{24TLnE6gM$|P3B7}Cq-As0aggt?d(Pi+-arSdVqpW_iHXO$9XR$KjL zfe8tzw~T-@>tLLVVUMo_L$%h7BBRw)r9>cX^kt&0LMg%VC8_-49rtF=fO7RAB^;Gw z$DU+MmS;)~AB|E_hfK&StQhHNN%@k8PTXp-e=`?nwc9!{ZL780movEHF!Ilz1S3RF z5Oaul8qMmLVB0*l~K!lHV?HGX}B4b%IL=ERTN$2Z!8hdpuui551^M$o)FY# zuv1Nt=dY~dT|!s_1q>it5Hpe&Q|5hqqag~H>agES*dSLXJM4G!4)Bk%(+!yK*X0Ht z&3p?rw^z~4CRy(%(9~hQS6h$%7|@o`7RLLsv(Mc9Yl=iEv(E4Sc+8qBNtt!phEmH0 zBApW`xyLhUoh0OISSP;DET=!Vz%{%_5FZAkQ9IKI>9Rguh+D2=PsvE9@TY7GaSA7x zM4DFd4TxpGNPBguhgxvT3oPjrOr@}8+>ll5y_5M5@AOb?fd+3o{RC3d$uw6|eJeG?Hvz_#5~t z4&Joa_@3^H-r6?QaKPuG2OjoL%U7B3W9rS~DXaG}as9Rn8L5`RbICYaA*KMvM&!sk zP_Wq(XtJWf)1c5XCz>2|zp2t5I*})p1ow@HnGVbUDU0jcc|Vox306CGKMEuFq{=RZ z&4$o+aFd*F{!^}-ECbIGS>vbq_MryH76$kouQQSS&a2-(l1zT*)qhf&byhk6ur%7S zP~g`XMo)P&6OUKnPHxeVT*Rn zl~1@x^WO2<5%xF3kS5sEcNFZYFI-}t()c-j47Onw41m@7bo0cns&hodPv+>(FUL5ush1}$bbj}{MKAzHj+ z7+MUhcqDq@;D$~a)kUX@#i#?i0;YT=exuXr#*OqFJv;WUZQwULwfTMfKz84*zTYUr zi0>OyNl8`m{C1^QLs3d42Q{jBMkT))8AwV6U%>${ReXeL4*pVzlea8tr0@yzTvx_b z>IZd{NN856r}iZDMI4`>lZ*?aaEW1N+cHU+iOsqITB_emDKseguYacJ`Rkz3N5^#V zm`SiH9`*`pH>b7Q1k_KC!o%+d9*P34kWtRAG2-demL6%>;WV%$f-Z-scWnwB^*ScP zAhr#RJ#FSOWz@l3`m>1eG$7|xa=&yDdFX*ZD8mY&2qe8L?-A-Qq3j!iuH<3l-*g}%{?Bgsh3Uh~552eN<`de+PKO)C!Ny-{lH7XtYqhW-y zmY`F80yOQb!0t`Wr7yfWcgvxGugy__cO8xQ%4WJ`hxSHf_D(+V)lN$>-W2gw6KAB>vF_AK8z=sxvHU(`K^@9U{1j$sc{M> z2M-P1VT`b<6nCXqzuy+8JsT_|L9(ViPQvHJqcT^b-^(vxfccJe4``;n`6I?qB3=$z zTK<>sD>JE*%N^m}fnUiM8L-SLT_dy)VQ@U|L|#0YeEIebK;+Qtr*lN((Cb}=lg`^D zKgNy}g&rIZ7-!U<$c;LhR14h=KPrfyZR`r!0(Zktqp3rv6T9a}t2}v-koaPeuj1cUf4E!jM#3oZ`z@4)UGoW|QLTHZ;8wkdIp9NXXwlj5%J7 zjktf3jhNq>jX1jbjrg)_y%8t3Oz5QeoTsAkWIeg$P+9-wko6~Z6v{PDPz;b_ZwVE8 zaL$FG0AjvveriJJB`7ZBQs(D$3%L0^2Vb zwn%2i%aov1aU*6vsq70?+0@Et#O7TqKkZ59dMP=NWYdQvsKkB)2Ew9}lkX)z>yy>U zu#$lhf#SwC9f-O7v{X&Y$K^EL4*h>N)w}W z^5SAPe`b*h51^A4ez9v`#6c-bnn>O8QN*1T1Ud$N@w_fi?TLRyRY}KBEeVRNgVm~f zLu%(gx7Dj~MBqm(_;dg@&67PauvoK~BfZHV&Gj}~Gb7G2E0*Jn#yVvoIo|B{WdLqw zHf1-#>7~Exv=us*S9%akCkU6<#)j)f0ZF+k8tcvK6JjH{<>l2Z& zBUB7E&O!I6jMpWB_y`Y}qim>k0_kfZy*gUUH3#rqshm)CTEG-1R5YrO%;`!L$GxD8 z+LSm`ryk56)nn*_mZBLgwQIQTAjI`QoM@(lG7IJ)kD1Ub*Ltg+X!d1!fd})Z=}n(L zh9ShQo<3&@Bzew1=F;a*ZnXUDd{=M1qNZnNi+*vms})zIlE!gw+R@qJ3Wb-t>F$YW&Q3uoGuQ1v8mH-=-9`S2+PPdW@;2>1W)!l${Ul8j?Q6<3r(sk(gxLL_q1*tlI z{%Wnj*?TXy_YV1Q!U~?v^|mn^;P}D@o)xu?!No0tVv1P#HI9c^pUWUtR`I>hD85&s z;aX|1fp&XDii}x25oWLCfarUO%!au4RAJyO(nvDcsgKS%)g6M8G&_PL2y4X385os< z{}fd%9HLbN73DHa0(_T?!q>1J(pn`s&S3>8&Ht zalBb>LZ*IV^RvCv$y3UZ#8sQ@cWi#LZ?m8sB+FEm=aF(eS^oPOu9vn+-lpXiYcmFN zlzd(@hscQ*nYSGN=e$)MKVn#>AbxcF3)Z%?OwX2_9{ytrjGvka+Kd_fxNRXZqd&&v z>$GB_8@;m(FTxU0n?>M|FD4?Pvk+`m&`$+%W0iR(#h0?S0DncrOV*GVC!PBErpOa*o_YGly9Qux}4 zW`#I~TgthhQcY=Yl9f6XvVBk1>EP%+Zy7Ny%3QAuKOAl`P>AWs2&Xpo zkuiF4_Tk|iv>aT#bJSo48E+pp7pL#zxxP2XM$SgCF;ibTKgaRl{O6V%!_Xr zR*5RbhU1ejsn|U$u$!V>z||6>^EelSYVjzppl-H?kI(Q<=IFN+&w@|WrZ(3lCG# z)h`B_2K&uiD8u_!3Uu;Y-;YW{xIR+(0G?y=hoSaiKcx`8I1xmtk4Lrz_3_i&x4Bxx z`R{^H=3ILZ20#2oDZnrn{y+{_#JR|= zZeYo4-8LMCHg>Knbd*s!q#L7fM~sUN%#pS#+Mz)RCy=7|_0lmG!?qQ-ad4~~L&?uv z_aG0!`eApdd{Es%>Hw8nZfDRM5E5cc-FMVsYWj$~E#ZdA3(QUD zsXlX=jb!-<7ow|PkA+k?B*eMVbCi#XsU8U!mf^2nPj#WEwrH~)@$q#QK?V$o%~y8% z1UpsM#K?S{Z^#Xtm0PayPktHuK~m!I((C_LAe6-hSEnvG3-nnubvAT| z3^GZP#J$QGl*PHWUvBR{^M++4sVK?QeJTVC>`?^=BU4;alK4-^edLVs=)8PoE;64; zpI~m{6faXz#U-w9rlC@n%7AtW3RVxn<8>5tVm=~MgLMLi)vm6=NGX_ptq`kSymV5< zPv1mR9}1>l!NIKvSA?il3viZjf7%)#A z*$&%Z9~lR_?;6{3R6_-mAO$6>3Kew}r)SBIhg!KRSo<}7k#1HZiV zc`)Nq7}6Z{luTfh4@7Zc@qB0V-P^8tUv4uLkEoyx-bW%nZ)=w}pfJS4BjzbvC8*tN zqL^491>L;`je+kqsBydj)kdXL3R2Ean^&e)n3*qDbgNk%9X5@TeyE2jV+u@XoSinm zp*dr~M^tGy^Axr@^P2O^(7g}>QfR|x;dh)Xu!Y=AuKL+MU62sg8s$~|lV?_p#6iO4A7Iu0(C`7AD-gBo$*Te8>J*1~) zGa@rvKRc}YA&0~@hgAiq30HfRDM1j+{W!az;CVJ+i z4iNb?gFuzKNB~p2o4C@bg^NV#0g@PzswhbtTB1#^*fdG+^~L9$+Vj8guy1CN23#(9|*f zwsV+~cHe6axtMU&;+!Mzr{BdrB#^~q-*(Jdc^>rR*-z48Y8Yf`{tpLf{z+a1Ml~WM z{Y!Gs5)X|H(D(>-Ay2TXhbk%x$3X=+H;dyL%i&6e#s&=lt+(M9s6;Y}*@|3;U8yKF z2)~Rfcn^Lsmt#QYEQr$8Ivv9=-b5?5yyiU6X{&k7LnC?3G(!=p#*SwaD$}EE4C`76 zInJx8%&TJ=quo8DWZwI-6V2lP|9JUc%oV4EYLPeH^x-9qm3r&l`$`GFEj8Qls>Wdq zgZSQ8va*>?TQ&8D`?eg2!UNBHr2gQe**1?X;1Pf6Jo+Nn@5(ON&Q*uZ|;;$ERO@+3R(i5VYOd85qjJrJ1ANE3ZsHx&rqe+|p~3?a~UX z!6OU)qg;kFPeTW9!j)TkxVR~LC@~NC{zlkp`2EH~7|pNHU)R`%zf^_z(~oCSttcLI z%agsXD4Hh}rPyf9;14MQT%L#k7>oJ4wuQuE&SYXS$;Y2ZCWj*yI; zl6Xw6@uX7Ff3pRoidkf}j#0elIUVtnLW3SjC}HY~U&`aYvyP9PVy+yX*Hnve3~?Y(tjxRGuZ7Jh{=V z={jHrc(&zS-*c5X*SRdBI+nw;C|5zhF1UcTh2h(S<4I|V6k1?pDNVylE=YN>qW|0` z`rROvz}1yMy(xNqDGP?IuJD6{y7GXMJb30COiwu}C7A;u=nC9sC{3cSyxqu5W|qlh zX0lbtsZHTMqPQsK)EXhJE7{Fs!0X z{UGcHxketM<8ck?a0J&7HFl73JZ?$^mP&9Ptiac0pUlqi2`(p3{a%ciGF_}@?E*3_I#^b03vsZ# zmT|D0e*q>wlEVjC@|-H;pz@W>xjWDt3ZJaCyU62=0C!x)iOMYHlC3^Shmjm(gG&Y0 zIsAw4p;sZ+X@uEc=t5+8jR`dZHPBj|0q-hl9h*v`4fb2nXgc6HFTZg2hEiZ;;XvXsp7hIFCc)&`Ow@sB|$5)@(9c zBo{uU*HoJsEFsSpwWrF=KjO5c{KN}qpMh73$s=ic>UMzFky@ARb_}GJjwcvD$_@$z zI5rmxx#!tQRu(JpS?1{r<$|A903Ofam8bUur5E zin2Wg6Ae=ZHrkWC=bPZA&+BqjZpmZITTqz_8TnYEH;t1q(_~G!i-o!IWE^sDHXWE! z5fhxvUXN-I58|FlH1}}4kmm?5pq2>vD$?nZ5}J-8%+uD##7Q6=#9{iHT&=q7@zy6o z+T~i37AT<}c~g14+hEK=mDhvT!etci;ccSA!#QXacfn*=5RsRN5O}Cz+mV#AWeqPb ztAx_k%i$%K^TIpp@Yk->QwPsH>o}X@#qMfV9cYyafF|VYDx(jK8{Ga9*1pt$;ISie7snKizdyJ2 zDHZ3ZH69gz1La9d#Th^9`Mb9d%Qs~~#&8*8f54{-6G$E09YAAPMWWiF4RFR>6L04rz4#*BXop~HZ6VPZ55nW8Bo$FXhu$gDJ(YtqbmjW(lNOR zT@wPwKjL714cXwLB91k7e%PU~eOSSkXQ|pXfiBcSUUTetxRFMl9(*FR<;JNaSE?P= zNKW>#=bqje%zh^OTLazpB}t)S%CcT*g*D&g81R_wijx; zv$GFtBEL>4a%Ay3rCg^JTbC_QDb|1c$B<=P?K%18tQbpWUvj6_2ep60Sl>>Co%EfY z!9Czf$v8U1g;3z=IDA&lACR$uPby~zT!fL7UpDGN@k^H^oIH?G9^EBNwpATChBbtE6}@Y{v6p%kf!AnOaJD_(M>7 zGU8eIpe5BM>FAIV=;^S1z$L<}&z@9$ZZD%04^A5M%dy26sa^}r;#uTq%IgrUhOu0b z0)fwA@iRWvfm4@Uh3Ivyqzr%H8@96KHt6R%}DV$zu=Tq zi;T@rlfDf?XN=9guz6mPY-#E!5zn{9LABlrdH6|O@{%=0#LFIIrDjpq>cyfx6PFfp zPs^uL*&%X?Jqg!bt|R3Opc+aCTTmXe^J&DZ$`a!?R+r1~eAz@+e*F@fSB%CQ`xII*fj1+Y`dXWb)>C)ka0 z%uN~f?Wi-%leuBC_~@SPE%EN?ZuE&*$w`>1*fu?Wucqei5N|< zXeUOV%Fb@Vt%LMg1ZIoP$;~-3Hmr89L)=bJA1?%{i=GU3(kp4Pga>o31&2s^aUQ$I z&Tz_6?iv->sm7@i`G@i_c%FkH2rojrP5 ztp{+%>652Cx``v674^`ZJvF20vz_KEuFpu#S~VZy&xpgAbI_EcYB!V$j>mBsh;Bh8 zMUGfu3esI}0cJFND)TztT9&yG?&k}v4oX(_0#6R5Sv$QGqig^B~{ z3{Ud3fG(3QXXPOdST(BKuJusW-S=9EwGA|<-VCupZP(4z*1a%=%@Y{m1sI}Aa*PCsekA@OKued70AnN(0Sc=lv z#!A6}e(`2qe#$*RH4&@V6|7GG+(?9atBILl?<9fO1oUktZowPrw0?Y3)B5G?w6aY7 zKW^j))`bS-);<(QlOQmV_Js%@)7cZIOsjUZDy_95hjR28@?>hI61Kv)Qkji{ z<}zZNup-d|VnGPk^&)9-lxRQ$4P5qtZvd7F2V`nY;3r*T0(iiU*Y6)o!O8pN2XK4( zOk354K-WBV19yGx9wY8$skx#NT!QXf?WZ%|ID<*m8+LFH?m2MaejLW%a4mx`JNu>e z*YnqDn$)cRC-mb0lO*M!bmlcflGkaPp{naNt@z68Ow(2c{@JUb0)H;68l;IH$+tb` zNsbuRQr_pH>OYC5nySFc8)hy_(_#yCq;;uQ*7GWfHVT(-7kaH0dF&Gcz%W&vTnmwj z;vPP#6q$>QsF^P6MvJA?g0_yZum2*Mq~j#`t(=PHWDrc*wHQakZoN3C{eR1~&w5^x z9aOEd-rQtQ({HWxAk+KxUB>gkX^4MnuM4+Slgv+ZJoms~WYHyUlpI!S1mYp{5YQ?d z6V3b4JS}=B9Fx9>yv9(wU5Nntz0^ZpFVzoaLNXHMCb*A= zImPlG9A=j8u`MLfvh7CKL7mjjp;(>HD@DEmM;~>e0O|zO1jAcU{q>Cy$QRQ0^pqui+keC)%-tqdBPZRy((WG|QWFlMIKE$yKe5A{9j~#5k5!*?S30ZuFI^&<}s`>)sE7+zK&GH+Q z(n(PqL?&qPEtAB(+iZ_-+9%GV0+JDQEg+exCs;7sB^u{Rx}L8r#D!sGbI!I9ve}a* zn-4o=qbh1|OgO5vw+hq1#y}wy31G4)6x=AHp~Krk36jQ1@&r?}vl<|n1Dasc=?o#6 z7TYV5DJ|GH9ir*v2DlQUX`-)963s`@bW);m7vz#niDW~-3E4bdOg58jQi@*rZ5fYT zWMT%-GUPIqZcR!snTG`=LsU&CkQ_3}pb%>|SyhWSN37Y`n5}PfS{1h9wcL2yRbYms zaSFp_vBV{(WS4R`_v>@X?a-iF5$?qUinGk(3S7)l|CRo1vNLYSezSk-hNNWP32OM- z<34Un_E&pd=CxLIUuTk=%o8aAbtc(^pd$_VsGl4_1tr`I-;B!e^fQEy0#3WW(#LVB zG*q4JLV=b}FYceI-+U&SlB6~tm8<&rg1e>z*jK9^eA(M=qY# zuO<5tEeJdCBdwArMCkC4dJ?G8aZ!cZYDN55SPaI~4G`_aHJ*5I6E4(7weX50=k`zC zm>|EnX}|7Fa1kpUSlW8jFYQcr3bvv7{xx6DfZz?JRIK936t<%pa7mnB*aFNdK?@oj zVBJrqdhzo7yXR37y`LP;{+K=Kg&p8jt8qWMSwY_EWvBGgPwvY7lIx=J^W+Jtmi>^{ zhXqyb54pz4EnEX|FGA%T6gsa4{bZj}I>mF>Pi_oa{p7YTPsr6OH7N;HJ(C;L$E0}L*mt8z=P~-E)3B+Vy>Nk$zKYo<#<}2!#*~WK);v3(=k6%P_ zBzd#(3;gS6`SI0g(OBolKjX)@^W!J@@mYR!Q1`R3%8!48%bpwG&yQtXHQlK4<418B zR^x~HQRgcGKWfPQYxw;55I;V^kL@r*8#nM{C#P{EKc3^qX?}bgKfVPYy=02>W_Fke zG@1Ejne}TjQbAf%M|U(!`pKY?b}nC*QU&<(&*Mq{}7GcxDQ5mN4_up3p5mPdt6pc zjtq66+D1~9&=BPP?)U5G-$=y%Ev)*~w&-L1v*2KG{eTy0|B@QmGJp4ReF_YI9X9~3 znx{^FU4576?)EH`{(dld&q-ijmka;_SdynVE#h!qn_cs9yWNbYP231j9I<2}xkIu)?eVMcQRSE3p)a`R(_nXJ@8| z{@J&W0FiLv>^dEYVT^G?9EuQ|U~o~y#vxP^NJt>5GPX&%oJvewg^Mce5GQuoPC0QU z`Mz`ecHh2lrr*4$mDmNj(0E^W-+RwJfA`#T&OP_p%|G|@Z(Sk(m+TIQ9dB^1+Gw{2 ze%lR4$+ouNiu>*$8hvzh=(*ARMzhIG&{z)rIB2<}Uh0&;0{L5jFMgaJo0*B zHEq8&bX$?<53=T+&7Ccst!Yw+tJAEgE&MNoH!>O zZtPs$xhZ+m!c(CegbQtV$qgEvz8ft(z1LDcXDq0?^+R@CS0 zU%?m7IV*mQS1ZoIk1C7apzZhrSB<#nMIm1Y&cJosRp;0uo_nE#|3w|wX*EJuHE%Tr zPAhO5kt?59{N=%%(?D0lxY_f&Zs_;Uy6w^9S7HkLlTTd+)SW;8cOvRI-}%l> zojC~27A=pMZdIu?(C8bd$c9U?*LIy{uh(by`~#=$S0GXliNVsGl8h82 ze{g%`G{NCb$RR=U&$@vFN8!MtcdJvfbuNfT;LV7ur0XB;R@@`GrcO0Moi+llhQx66SC z%BQNT?S-v4gi7+FPO7M?&O_-#D!~etSZ`_Ifa$2Y^3R|!9V*E>zxIQ+^B~kU6t5pt z>W_NSV{udW1MM8vYq`Sv<;!GdhWcxpRPDSj6Up7y?6vybVIsxor)T!Fwi+#V(>a#h zp!F!}2BcS)mKKJMUeArfOkuV=kEeQa6NzDrK4}*F#u7}=W$$Wg8ht*uz8Q_{4D*`P z^I8If#my>ol%AJ1FceRcm&VNW%BlfUVVct^+{^$fDBR!37}XG^utR~fl<1rj`p|{6 zR|YGzBo-TeD7!`=5>tsoC`++0vW}c(QJ0IZ+hb=#kkIX|K#D2wl(Gga6W9$^N3{q9#laf#*fp1B?QyPfrjYi3iit{F#Mt(Uzi!>3iT7yF_@`PuQL?t zb}g&gq~D_-BwJ2^NP{KK=lail=+93-G#Ti#>T_AaZzwR*A0D+WP$z;R)Pm%$fOer% zuZtO7uVe9r*%&%Bqi8C^9EJ_$oued&@gn{u1}QAdWmwZ(yoF1gp4SW-!O9$MPM8I8 zuZ^Bsy%?qfxJbX2ZY$aXRh-ptoPn*4X3+0qTr0~=EZ2-%VKCE7P~W0MFQ^RT0E;># zfy)y3RM0q!W!+h8vWBRB#l$d-)2%QNuu zU6}x*FBke2ma23q`#VURBm4eJ=?G4{5q4DP^U^uCine4{GRdSMV-&R(5Emh3oC8qM zW${SAyixBOc+D7zGI43=j)mBtmMSgV!1_;$Y}gMv+>$;`5lqV<_pgZ28fg9 zw^nN-lRJNso%(SPGLG1iQ8dCXnxPtT45^F zskK|iskLO`F*rNKyCi#H_gsUvR;IJKsu`LkJgl*_?sggM-CNd$Q@!V(HNc-qwl`y1 z^)>jBa<``Gmz?378dl4`xmF&k*Ts7>57Wk_H6cn9>M*x4YE;3R8#3oY_jLqXe4e?C z?<)4DQB%o>FgWSRx@L`KxO*5aMB;ZA;57Q=7bbTa`UkLy6;PPY{-lyWH2Qh7)z6x$ zD1~i0#=8S^d9BQ)wBPQ%ghDxZ*yPnIP;s;S8vHZUtglIDHcvv$%c4|5$y)k>B2G@v zGwj`>=XK+H)>Pdim@@`7@Hb3B?cAi?h^6zSiPi0+MLBKx#RS@FIEA*w3GPo6oW?5y z&JS39P7CLBbiNbw@?>76{hD-UlSy>GM@!d(e!uCL2rLY*raxY4e~}ZmsC@01el?MI zE78qHG;sHi){VPQ3NB#rPn2JNF@eT_QivfWKUXZ>@hDp(y%(PywR4n;Tpvk9fD=lY>s?lt!Xxfx149IxWW z>0ur9avo%WP_|;n243VLoc12s&1ou3`+08a?7yl==~7HG%-Fp)YatVObzu+sDxm2o zc9OZ@0lqNqED?x)Rg7mfR@LX?mg>C?#uy<>zy zB)XSJQ7RHkRU-s0c5b0WM%Y^h8+K_3GA?>caq5JlEeV=7&U$_@ryPF>mtda+5NiMe z8UWGMj^C!coLRi)!C zb$a*@`Xg9kx(64Nhse-sF}bhE6q)&-{MTbpjd1JA{;#2xC6$Un*f0VinE6oDLvsl6 zGL(xzZ@n(0W}72yS+6S(nuH=E4+^=c!BXEHbfD|B5m0VLl}4-OV%4F_L-0~@RU1hG z@F|)SJg1_M%O2cexeptj!pdQ|92vK6EIw+S#dOE6ux8{A}!_;*UDG@ERaVUw$dD@eB*uFR7&N3NLw zqbYbnC^(tYk{W}gsZp{cGboTXHInq4w%Iw>WpDRUR~1 z&;fiN#qEVIzJ#w3fr$n) zwE{8l+DP^?LSI<1*olN3+TNmMQbkCqG3-D_VM9+x#K3HSa7oWHHOrpQJag0L%cTNj z3yOAqK33q5?!)LL^M>_0v|_OO6s?(ASRAxvRN504h1t~1;1Y90g4hDe9(Q0KTqT5LicU>&8&s)+ws>b3*mSH zw?;PEcaJuapT!I=Bu&-@H`t(L$|&1v;1N8{%nEC})V^4Qv2jUr$qcdNN(GCf?>3N! zAX_sPnN|vk?Q^jjszg$qP6k&HqK1fcOM0mmUkwtakGV^>;5yA-jI9}Vf+4nDv?(R- zNct;~b1PxHF;_#~{~i!#YBOV@N6OQ@VfMD*T!5{MOh^DPn|(2~!TwyiCG{4|n=otEP#fWfK*2@|l+!~Al7z^e zaOk$YMX#0m2u$xl)p-EsJ!}EWip1u*17Hpb(~l7JqLWQ_Ad;>`%r@j1BIO=7W9(A$ zo-?TMUED${lC?Oe@o8BFnT!a@tQ-`3<6xSul8fFZBFkWinX8L3*F6so$+Z3TlhA70 za@VpOWy|dm_o_hyW3+wNXhj*F?fyIl&&@fKbi6rt4f;Xu{lw(m%$)0fnmsbdS{rdU zqp4}c$sm)BxbA1sLHAeq^Ev#S=zg9ZuAZZ1vb_WRO4L%loZbl@{c+$!(Qsty0w;d= z*-r>Be)rjbka1(K4s8CLP8|@vxdofINnQospU>oFUM%f-tXT7OgBTvx+^@?PhWb~o z8m@7xT9o*G={7C#`|dv4<}L~PKzSpz%3k$6$IBz7l44tK^yEI6wGdBkt6S(|y8I7R4Ous|w;mZ|P`^A9VP*JBcG%6QoQ6cUs&e2wb?_y)61~-cu zG&-(Z9T&Bisr#@;RGd3r`MnbzZBY4j(bQ0Wo7GNqz1lCGnx*nw@F0;V78MrDsi-e1 z!$6XaeZvHt+7a?>DWYxBp?@a>dt1hSxg^>k<=UpqJxpw9i7ZIsUmYDE>frK!m@;;_ z{(iNB79F#7ngf|maw`&kp$CFyNrRz}0i=!R-_kU|ri(#Z8V=gK4U!8cUd&Q0;-B~D`s**b`QmWH_0IDmC)6HJ2k;(GC{XV z^T#=9u3R$u`@y;>G1-gz{f$%NFD*)};kzAg_G41kqF0cimrYW9`C?*=!gPxXM;W)6 z$j;)Z(y_h9dsgT(3w)}2Y%{?C_~R^3CpNOUsU4!Hq1!?OH&h7E&s8xwmw3df*de8Wao?JKNoe^13Luw((WQtHgTe2%7`$lU?OlyKd%bxBJ5Z*;Oom}&fcvch ziV|d60BdZy4vSzFn@?#1Jcg!*39!K}moYtS1qvY&M5M_54wJhKM3iItmZAkVh7WDT z*NIq#`0G}GUa-QN{PZGNVegVTZioauG&M-DF_ZdwWreMtt!)w%2(nE}a0xMt^s^y6OS@#IU7)oN50sH)%+a=#9f#>iwuFb&IBo=aJE-i~r9X>t!f<+_KX&9s_u z-VX6M^iYf(AV`n(2C+H6BCY_Wkg0V7@$gFzu$%_}G{fk)J)F(wI)MFNgBCc>aTkmO z9nwgT9T$#xoPG))6gg%Hd>XMIU=HCP2+s8kB7hRi6^;U#^f z9xqqYlr%7u8!(0@%_=G|mNg7h7RzMdB}9vL_(CC?r@ikg(syk>HWsFDTEb>5OxU=X z?5@=)!=0%N82$XV)z9QbTQ5!=nFh@11CYcYWm%HFm4wJ_X_8ITn(~xuMw?jqDqH53 zeioYX>w@f3qL_y)*yL*|MeVb3Ut7&>ne>m{;#6)0K8^HVJ+8Wx`FWl9*`2CR*M$khN&2<(kgRf`WG5r(3*HB|B=G9#*j z>iURd2=Jd-0&FM(Sg1J-wHnx_9~pi8Z>x_|ev>R)jw-vD3oj^dh@ef&9l5;OIGIk~ zej38_Co-?n`J3{_CX?jt|E!Os+G;`YMwci=t*|yu9iR$B14)~yn+PI^ylv(CK$?s= z&fH+hANYNh*@AOQEII}2Q8}>0+Nr~rfi6_uO1=J*ko>CN9>Fu14+8nq&z(j^R}X|U zQM@q)TO(5%Qii4J(o-TO{o1P}^~W9;l=0_&=nP?q{EeH7TYW=q>@4t&)*CZq8Q~?P zmseW7lnRb04vs5|W4pnSMvoVW%=MlrO|Hq55q2Zo0?|o}2sTec=EYP|BMA$5z5Xy* z1ihuf?V5ZA?ZRy|D&Qp~(zR2V@#O$;sW`;7keiBz`*}ZNY(-?i% zt-ecHUsMdC5f$@OmjdVILT_VfI-&m%B>2?&gq}?%3H`4>nF^PP8tjWySokM{Fg^~0 z(Co;qkg9WB2__f+qbHBS-(lt7qUah9H5ySIQem zTgC5*Yo*aXOV17BoT<7{^@&%V@c*^TaTc26FHhieKK{VEBvSkNJ_4qE|N8itO>#b- zEH2#{ru7Q@I%f6$MIQI6O3Wb3giLuF1~b?d?pQea z!2jH!X8vhqcc=WuIPy zASLNCUqn+QP_w~U*>(f>c5vonpdK+Px;#r#oQg0xv)ZJX%tiEXX=dfnV;SeCjxiMi zDR$T=!E4X|hrJVR4e{s~O(}Ri;ByOn9JE1QJyCG<^yjgGIfscCa*9}*vq!1dKnUt7{H;jaR^aYq0PHOjeqY_W?&ql+c6m3f{~ z#{wj42Tm%cR}&~4Ko5|Mz;YYl3V?XlL)mUbjqsN^+bgU;i>itl0e^HSnDfN%Z-^)U zet{=)nN6-QNZ5R?jE(4I@f$;7mxn1C0W1kq?t6&&yAP?;_YLQ*idFQQKH+VShrd`C z9vGnfv#f;#C_iN`V5h$X-}~E`o5G6ZYS$#|ml=kV`~oLU08AITrF?-?E?ID=N(+WJ z2f?krDp9I)|FuLEGRwFSqOySBI$V!pIHqt^!+C@L*Mg2--Os|LNGOI50@e2_`cqY5Z>h>8wQ62-hp9S-Rc60lU&20< z`c|LUQu1mZ+k*chy}`oi!@86{)#0s*9PYxj5R+AyOX)+^TGeRe7JEhAMHlcp&$0=2(S`0k?BqaqL2y*0 zzPV_Z7=v#_Q-gk2OLc}qv4!*UT8b^4SLgDs(bLIPhHU^A2sghjbz-2%mKwu3u?>1d zw2oHeoA{^E_Nh|zn#j@7(TvevyD?2>3|<2GW>I(=>Vh;cZ5-s!Tr3SLVVf6Hhvw_5 zjilUGC=0EUv-J9kIBB73!oRqc=^PT>WrjvtLtfS$nvU5rqK^MARcms%y~b6d=Cx5j z;qFT1RypXix|iZwP?1yMEKs7W4dK=pTB;}XVdIMK9^G26P{l#NtQuo$p190sp$H5r z{Y|j*#jfk{xdQcbx4`Ky!>Zy|o`wlH03L0c74QxqsIBt4O#6yvO$2t}!AtWwOPcVx zNE42Ep`Me}QQ;YO*8^-7BHVw$5IdM5J1=JJuB+LZ6l|1I2<6}yjG`F*>!3VN3&8M_zA6G3ncm!6 z>Dl3Q8Do)BwmpSHN?UQ~gYt-oT&A`%YSGKI)m+7ypKjs+suZ*55S%>@#4|k(_EXkm z&Do@1)^o#Zhe<+1pMKcVjK)GxqECO`YBhO%)Jp)z5nJO+mjLTP6|a|hN>Em`IA?V( z@>*=Blv3{7`W50-88!RHuw@}9`SYdtH+@~@C&T`UP-QapO01jTKvToI*;r2U&1)dZ zHh#VYC6#f~FVTr`=?m)AoO4?#=V+0(+2*%$wkbbN_&XPgXMS_zJo8^J2G86$mS;v>UwK)Lwh)-XqpU}^#is8+}VW}meUT-(6qJxkZs|sfz zj3bqt8WcXUfz5I&s7Vc}y&b!NG&@dhFVz_Z6-6K-+ak}5^Zr`SfYCZRgn$kZ8ZUTEPnT@YFbgRv|ff*EOjS^eUTLh*4C z%?B)!8zQhKyS&M2yEdzHG-37X`ed3>9GWc2aQjRXF>t5`$y%LL}Y zyUT+;a+$R8JDp5^bAn7JUwku;;Hvx+FmIagg=GcXKSVGXY7lNmcp#0yn5oTksboo7 zig37uK6E;&Fuq!-nyh?^{8&g(E)5ulfA9-cyB<=k?Ne!1eHyQ-jj+bQbRqhDzj>ep zc7vNDi<^pjsU7Alg(ogrefHHc1*6O(^VCfcVN+v9vtGQr}GmGf{CfJ1N5*;v;(cGA_jZ8xyO`Y}r$x^i0<{@hjWiUN; zu~|;EL&^M#%yOWFJ(WVs_u9Y4St`bvNm;nCzy4Aw7N*}{e^KaFWIYpyCHw2IqN%|+ z8{1#+6;3LMs=Y%hu+_NoQ8rgir_|W3-Z)s!wiw~u!uTj9a zi*t_N;>s+WRU^N~zh@7jP_P1?8;6H={B+`N2<@f;KtAhPy|fx{IkY&-@$Nyt7xxFV z$dc*f8rB+)IUYF`#BL5FKb9*cF`@i>{Od`al;BP316=sV;&w+KL9`eRv)Re?Ij5S& z9?6g+Z;cBVJkj_Vm90QLy#~xmZ%3@&Sys78M}1~2!bgt_CYJE5fIuMR5I(iaDf7$X zqtrHeiHU&ymzZdyOq7LEejjS~VuwoqU#U6*n>`A#SCe>-7I>bALL)#RTObT# z+-hLd!+poWP$F`?C}!#4Gu2#|XeiXOBcjTU)3J*-Z^Ih+fwe{()(-B1TZNufZzQ{| zH%58DlzWR(mg1g){g*? znX^+orEm{2M^3y%R5?5iQFPKEw-*jyxIXEY!6!%-mEEi;5vdjd0ul-_DQ0EOe*jsk z91GVLDwe3Ah%YO7B3qzdmrqQ!lW#mvT-+HO)PBICwxMv=cK29q*H$eYO;pRt)ZKH@ zkUia$P_w^;CR%!4KJgo4ly`1?^4F{)zR_<9L9ha>;t>t=ZtIQF<6z^E7J^GQWYbCU z|C}Jjr~d|=vqwWpm1KX0u9R_s>y!RXY+jHX(1d8HjP7$)=P62L6c3PK-&+w31}=-B z_&g-Yas&|eUM#hCS<(mLmH{diWY^Cit%7&nFL}&UMQ{m!wOxO4k*?PCzN8Au^oo!x z2Qj~bzZE&8DBV~%rX)aXy@Nh*jg9j}+&bd{FenzxA>@@j{vsk`s_IKRh&yPl(7Vg5 z2qw!)6?j-revF%_^Qa zs6T`vzkbl>8P2F)V{EDZs24pJHyyr-;SxjSqh8B&%jr`Wfezx-c!?4PN*EIO)0PBw zUZ=f%$!?2aTAp{9bTqp9kk!>>ottc8Dl)FlD)iJj)_E@ty`O+s3RsUnex+#SO=J~g zpc0t(jpZl}`QFv+W_0_hb;CcdKg{B1$IhalujEw8^u8%oM32re7EYLs=n(8 z$JNzUWEiMlb>7zTcuEHV@;RbqEnbU(GpVvnc(@lWs$fg0VUZK9QWsa28=U*m_?M$V z=o!Za0~fX8bY;?B&(PmlKbQzX#?5u8xIW~x{B{Eqg4G9DfHf*~LM5oEfcD`EN{;r? zH$fpbL)IWg1u}E$y{uT==?_jx4BYxLh8(y9@cu;FS=6mK4+Om-(76MiL{}CS&#=R$LbYL)u?_u{_HN)# zpXus`hlfU3^Q_9Q3$jxw%rg7qoY5!I$GO^EOgX4mb{`9 zMZ@s$!ordlb>b#!!Sok~sTgAYVmwYvOaWP&m?#kuya;@ft6&>pxiMFgPIP=LRq*$L zqO#~XCTLXOQEk4LqSda)_YrC-7~_)E&ulv$Rd()B>13IC$D<&3&yQ5lR zEij&DOdVLz*GN5t&4r?|NOfqP!KK)24f7LM+scuZHk{pya6z4^Wu}*0^@+2Wia|03 zmRzbJQr`ECMW4aWFP|xTim_;JbNf6K?uEu`nd}>jaxE*@j-iJ!$gS2OlVygiaSOjb z&?RJJcULyZ-Glft+Z65_%K{moWB9`W^fk{5(ARE^(Twr!sTm$cln5Hnk9um?jeBkM z{pfn;CMAM03KVvRHjL9LhMiOl`-G(B)V~)dn7SqUxU?x%44G`^hm~QCVV^L77l{>v zVS=?-F;iJPC*{_AXW4BU8wKnQR7NAuu)(@|;K_%m3yvQm1UFO3_o7%oK+_bZ)siGh}{J>I%lH7!SSd=FX7T_1}{n+Ys-+6OCAe`a`s%ap+k zSxRv4q1p~F;uO5U%=HP?HUg|GZorLmD?D7O%p)g5uRZ#*@vKfdc9Z(X@zB9JHo4gh zTh<6ehTL2$c9k>@EL^bJVYEMmRKG%W3$Yg##bi1;e5Prf6J0Y*BBceSJ!3N7QjDFD z+^2>u1~O|=ZDmq5wb8F~w1fQ1DiHnPNgJ(Ww@r<#k@3ur)GwgOF25t28i&jsiE2%8u99xX29j2Br zx-0<>;eAPs5M`nv+om5GeSBf#VBM#c)cW}@UoPx9OlOhoqfmZC@KcIMbE_h4J}hkt z_bns?%{?1Yl^ax(hL-HVsKW~{P-fnG@rO0o>f07u8FGW97%a+p9w62b&7ixAFO2^F zv(;ZI)kS&;fk@9xwn7>G+3-!rcGr{bz9k)(0${S8v{7s~d5}r<{f-OMs?}$5Yimy~ zE7k;05tSozJc*-X#R%gfj9d{L3c?}0@>jVCYKF|~FSnL~t=oR&slzm{f zLM%sVq$wK7`5S&w5D4x52Mp=ee1HN1p^7{p1i`c@xZn|lt5#^vD%iCc@scDhiD8=o zI{pM6j@-fEU$ry+aYh40^o`Gx4GaOf+Y%6Cl|qSlgIlz;&1BDvUJhHmlybX>8OIed zyK2r%JtzSO#%6(AH9*^qrv^w*Y#byzAEE>(NR*Zr4bK+!zyRf48wX{#C51+>B~Wcm zg;j%eHE3qE9Bv$*_=h9^xv^}|dOAgX6BTh)Sgw>cO+_qiCMn|29ffOda0cOgu^tM6 zOR7;F6@{-3!A;l$sT(f!k1(=X!AZ!59RA1m$^>b&`>Ct1*kM|EM>{UWTg@hYH?1y3 zx5S$l7rhqCH0r1&)NJ3)^1Tdm`|<;xO7CYcIg}eB^$|;?jQHFQlPRO+^JNogXAJQ7 ztN|vou}=P)*ePOo3p$23Tp4;*gyt4fhF#E6!zYKhs`uQy;-Q5ss3-H(LA`>7WMg1D z!Mufn`Jwd*rnH$PnEwF~7d)P(*{-b=W!1PS@k|F|(~s#whZG`Z8~Fz)aKRJA0i2+5 zuMs$s7l0hgP~vy04uBz%@Sf(KpwKE3AiNfxlL-2G{kU)CE9nByg=@UAjD+v*HB>#0 z`;WZ3iX#B4tezjWsZpr^S%F;Q+PpjnW{Bp$vP9D`p?Gk|rmGhE-PRkU$8T6YP8N0s z+j;(lFs$CS*pN*pldq&qer0_!DQzancjR_`t}S;U^hwx}T+_dJN`^&0~p z5H>W1Omo)hxHHC7pBbYSKTGGXhr3#pEtfL{SC!?|L4!%c%cwJ#Tql{rJ&E<#urFDH z0T7O$Uy{v{A2oWT$FE2#`WtA8$FGPv-j&HN9d=CnI+5(qPo(1di3H)lh~fQklw89t zHq!XRD$;#X%6EY3>06$bOT#nGm~26@+F=}xPIPvkNM@E?oKfH{og@4~+W|=k{UQF? z9{7F)P+g^i7e>i;1p>0R2WRj>CH*rFdiZN+mw?;^Uv-o!Ot zo=Z1Em=;dUW>Nkf$x4yCX!fKrC;T%FBssj}DFsD(nvxgfIW29ID<8AzX zl{*+E*HTP_cFo+Z01sPK9GDpK+L|G-KJP+ay^q4-`cZO~2X@=pj{Cz}#*#p+JkV9i zNxI$gM5WI2P;&NY7`k!Wubu0Yq4wZFGU`It%$C9>tq8?UB)gssYgi)~ox((zPJ>5V zYq{9%z+`x0M&u6fcBY@z=(G<d#YFrBM)aD1T0BLpym5L^Vi?+8)uCaS$V zhE#_@)V1=r`m@&aTa6U8H)Y9JO5T8FK_Ob7iH8_s7od~!IH?-A0PgWyyv`-l3wx<3 zP}k7<3_bGffsA1sjp)@H?KbtUKz$8+ zCdHXOp>*1XHUCgL^Wk(3g27-#^#onL{@zEYQ!4x=ey^Bopln zd_i|xBbIVjUR&VWN}$xgXS<8gG2Iq__V8A^o&5R9tMPM$KmQQ-OLsrPpZ|gDeY!v3 z&tId?TlcT{^EC|K{g?cC7dv1ls`}N=Slp;$qeC< zYX!J83PcwKnhOHS1%cv%KyX1uzaS%DkWnwli05Ur^D@$T8Rfi;a6azb!ag~{&JLMf z=d)^R*K(#ZwFfy%u}{5%q*>Rez^g&3r;#AWtEm{iff`L|7hPXFbfmo+GO|*f*%~c6$%VqN2o$b sLI{~v17^Cv@OXRnSj29-H)!?ZHpP62n!1wS^$mH0?SiXga8Bd@0}kosMF0Q* literal 0 HcmV?d00001 diff --git a/_build/.doctrees/extensions.doctree b/_build/.doctrees/extensions.doctree new file mode 100644 index 0000000000000000000000000000000000000000..c463e3148c50f477ff3afec49d41301d7408ceaa GIT binary patch literal 7814 zcmeHM&2J<}6}Q*l!wll(6*g}n0IJQs%8?qOI?{*7MI0>ctT8w zE9&Le8qRaPk}zuBiNhWYAzNX@gDs<5tAkk&TF_dyu*7`X%~)bN zS9dR@Z7hBc>$AJD9f_Ki?k$gxja7zXFad*r*k%!ww7XogMA!+#F0xJZ8!(_^-F!tffQ_8Puy>85K< z_T4aLjvX{4w_``JJA*s7HP$Pivb$Z#IP?<1_IC>0vh8i-QS8}h5P8;f`<4OYhFDX{ zIduBy!7oa!K6>yW=|xS2W@!41x@DDd_v*%_aDoWN5ik+Di*PQc)Ri+=Q*GmkCD&%U zSD)$8$WoI!YyuM}g{f(1m&RVEzABO=lH08oS+p6(-Im#u*0-FS<%>^U|N1TbKBbMP zA^Rrqv8QHZE<^u5ceCAb9Yd!RJMQv|z_8-kVzbQRM*TotEW;9QZ-)YAW*6Qegz(5i z4%Fue^D*L{Roc}u>zgFaGtx)&v>Iz_yje5X(8lm{IpSi0{L-lb@X>P3>yj1ZuNh4{t{2DzzONfLiJ>}PH;v6>!wy`QN^m8kVR5QSQa0IlcmVE3 z#MrE)OBSWR4^HJ?%)-N`HHa&;*#H6ltl z@HMFOn%2dJcQO}#07H9$mw2G=cTeGIETK{nk<0f-0-T}lHpe>AqX{z+p4{Hnpr`Qk z^V6;Q(Sx7;$L(43l@IIq5o2lrDHLTN))Bm}9>>>* zEO)Y|%J1u{3`e;QHL3Mc7oq_&%4o1fh{*UTul^1Y|IJzCtHU7BjD)wuHxh9Q-EN3{ zE6Bv3)C`^|Gs@JYo<_}61UjOW&P%d~y8qCQgX|b7c`rqZSl%``$% z%r_bgKRd6!YCV7J?#=bK{qFi^+4S0-Td&+)=iRPEBV=NNCWQbC!Z+}Dqu}EIGObLk zheiJ;&&Vp(+)>}(mdK|7+t~;-&ExxA!|bm)%)U_VO0|t@B_-B5o#9Mh6$pv_YFX?k zzY(FF!EcwIr?bcD6nAQ0#d3dtbZ8h20mO2j)>v+%&T{G>Z{a-6*}hId%bb$WPem2uPR-CbNxL0SCM|#H9-KPs(h#q?DFf6>G zT86r$OGS_5hO+zI^ngfQ6JO82Dt(7rN4RF97S>V0J0rXl1xm509z*FakmjIbMRC{# zHJSqDR1)F{lkJYFMlpuYwPPuvWLzydX-wr$t1Nad6fLIcsb(cls49m9auq-{rCFpj z0qT2jg6TJHKSi~(a4|I-QLX|1#93xAetfGjE`SKT#j8Rp0Pc6ip(l*N{_Q`fHsD`lp z@^MP7@*`wfSY49JV$hVDa(O%L;`Jp;rC~*k04w&x?W;>DbA+*Lxtva4n8wqFoi>ME zvWVvvfDqGa$xf5ds+!aV4{%#_(|%-?kc44%g9kLmf$h^yE$bEycG~@_DUv*OLklS+ zMy=qe6H0E?-_$5UDdxT>Jp_{WPgg{#2r7O)rz=g?McbpON)KZE6 zav`4T@dVie9ydLnbo3ku2rZHHeM~loay`7rO+>aktF8c(eLC(K=Pa`k%Ovl|YDEr^ zjUHJ7w*x-i5a1l@hXnlv*|*_n@1*c*2}51d&*ss>;mXcUd&LpB*>JG&#@}FNZ9=?# zkVZJR(oK@S9?HYOG0+n_UeEys^0;u30)3Bu!2@U@ zIO>7N>Tw674lI3(Vd1uf;;zU&GD-{fNGsJev2g8b5mbj;-^(c4cQkMtl-U@l(R&Boy#OELSo~0YB0lbU)Y733n?AmWk5tXkJNiUl$Iqv)q;BWw6w)KNVHCiC_reBB4C;piUq|u?N_Vy7BdbvZva)l z9r`8i^w7sf8q3jhLlWnTS@la7hvXxy#|etT>hV!oc@NkXk;(~EibJ3>CqymH6a-=8 z7xMNGV6XSHyYM>P$-#fIYg9ip6P5w1-i(6#k{n35ZqZs2ZE=NC-CvknQ6#p{yo|a| zOrT{3QtaBvYVXJ`(>58@C5|`v*mlCG5-TWu`;8FGf literal 0 HcmV?d00001 diff --git a/_build/.doctrees/index.doctree b/_build/.doctrees/index.doctree new file mode 100644 index 0000000000000000000000000000000000000000..8c3fea75d7250faf54f8ad01e94c85fee634e36b GIT binary patch literal 10461 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 B+@1gc literal 0 HcmV?d00001 diff --git a/_build/.doctrees/installation.doctree b/_build/.doctrees/installation.doctree new file mode 100644 index 0000000000000000000000000000000000000000..cd1e85161ffb29eafc327fda63bf1ab2e465794d GIT binary patch literal 22108 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 literal 0 HcmV?d00001 diff --git a/_build/.doctrees/lifecycle.doctree b/_build/.doctrees/lifecycle.doctree new file mode 100644 index 0000000000000000000000000000000000000000..d21786cf31023fbc63dbc91ae7e90046d5ecd913 GIT binary patch literal 46877 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�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 literal 0 HcmV?d00001 diff --git a/_build/.doctrees/patterns/appdispatch.doctree b/_build/.doctrees/patterns/appdispatch.doctree new file mode 100644 index 0000000000000000000000000000000000000000..2decb3a1cc9a13db0525d785449962072f84d1a7 GIT binary patch literal 19140 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 EA6+qEOaK4? literal 0 HcmV?d00001 diff --git a/_build/.doctrees/patterns/appfactories.doctree b/_build/.doctrees/patterns/appfactories.doctree new file mode 100644 index 0000000000000000000000000000000000000000..b7d9baa29c81bf014afeaea3fdc725ce1d8b4c3a GIT binary patch literal 17612 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 literal 0 HcmV?d00001 diff --git a/_build/.doctrees/patterns/celery.doctree b/_build/.doctrees/patterns/celery.doctree new file mode 100644 index 0000000000000000000000000000000000000000..d618887e6d86ffb6ebb9b157e2e7727a984f458c GIT binary patch literal 28395 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 D>>P02 literal 0 HcmV?d00001 diff --git a/_build/.doctrees/patterns/deferredcallbacks.doctree b/_build/.doctrees/patterns/deferredcallbacks.doctree new file mode 100644 index 0000000000000000000000000000000000000000..71145354d575276238f48a1aa69973204483782f GIT binary patch literal 7990 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 literal 0 HcmV?d00001 diff --git a/_build/.doctrees/patterns/favicon.doctree b/_build/.doctrees/patterns/favicon.doctree new file mode 100644 index 0000000000000000000000000000000000000000..644fca155c2605bcc8c9ada40bf1dce92297c87d GIT binary patch literal 8937 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 Sx1bUP(pL#8GBLXK%KrmXaK#S* literal 0 HcmV?d00001 diff --git a/_build/.doctrees/patterns/flashing.doctree b/_build/.doctrees/patterns/flashing.doctree new file mode 100644 index 0000000000000000000000000000000000000000..7e52d4c022b536b373946ca2642a6a90c5bd1f03 GIT binary patch literal 15861 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 literal 0 HcmV?d00001 diff --git a/_build/.doctrees/patterns/index.doctree b/_build/.doctrees/patterns/index.doctree new file mode 100644 index 0000000000000000000000000000000000000000..9434b44ac37fd245b6647f309b259e421029eb0d GIT binary patch literal 4748 zcmeHLOK&8%5!OmOl4kVQK4N57b{mG{H6qOfhz~&k9|8xyC>9op6XfEwIo<3gci3bv z$(CjeC$IzCSOvVfb2s2~{!4yRKC&M(8pMZO0tASFfrdr0s#yH$tKxhy`1_Zq8{y9# znUZliACokdDy61&yQxa5f=XL|Tfh5d{pb3b8)|Z6RHYMIyA7;J7#FFgvi_uYhkm)` z!i?MfJBB8fE7@;n1Gdd}KB=Fvp&M9k1znkPr_YJCR7(?ON=F|GVrI2pjm7srrgQJb zzg_cn-T1a$5_n>3cH)L{?>gIZ+pWh}?!MrX)>qY(xDkwLKCLWH>QA=CQ{zvulfbZn z5Z?!q6wSBYv?`Z_DM@CUW`0fOb}Y&LRLzdq6SmKuvMqMzelz*Kq1sGRno~_!LG9$% z)Xc0ZC(pHdfxwuFDyh6^e4AwcxD$A7CS@Cj3709IkF~*(UccO|rU=9kXC%2MC0mKy zA79+t*!X~IOSp_ON^GU6iHJ-iE)h@?E&&2fqeK;jk`a}v%2{L?vC%?R(G3?O%3yC~ z87;6aDwMI&4V^}$ECo-9zeh8UKE%z?IVnm(&!d9K#hv-6GBhG1O+{EwM3fRsro>C( z4Q6#jDwvSARXL76W^~cm_u+_0zh#stDH{Mqa1*B5McC=trgbliaQ@&BX#-;H{k z=E$*0lVexxb)U)X4Wuu76Fl)2K5ygm4nFT9HQ7(u1v_Ks$e#OMY9foq4VSTj`v<@W zY}!SMd;t);%mcC)02{zK7}SS41|)soWA{SZLd6L;8MK|{8nf83Pjf%KnUxs!gn1m*i% zsK2SN+@oF$cFe%9Ds1sn4_BvBZZJ$(*z~xcskA7yN~kePHwusYIrCC*OMf1AJXn{-St)E9ZW-3+JScJ@8pKYrO;*FhE5o{jy zdlM?CUcU!ZO+(+%x$;K8+(0C#&*0Tc3Z2yLbD4+=zTy&nFY%21iG9kZEM*yE>;)4{ zvXW_L*)^N9&)DbeFYF8USN0YAhP`5cqi(k#^OTmB)t8%STu2$ZEwnkgP}BO>Z8M&x zXwGikL2IfP?8>T`QiQ0!+;F4Niy0-w0&7R;@s?TOS@e0!qQ1fTXq|H1QJZ)dH|R@B zs%x^&!k1kZH+sO@v}bMC-{u9-cMcviyQE+Cbo7*P2^X!41$*0ovqERsbK$fhmF#u1KrlAcPG|% zy5qn|o-+|2fdkdmF!N)M<9U9oS zJ49!#;-$!Ka$xNst%@@4@rbAfL3kKQBD}(*APL#f@P8*N4XsiY&kK*HV>&O<{>H02 z14I%VUvtA7ydK48nGw2kC_QMG#T^B@$Nn3P;Hlur3>V|I zrMT}s&{99Vyys4QvH>KF&qJLhYwEpZss1OOdjE*&^hkBJMM@KR}EQ0tmTv$7Ufdna7OhOyC3X-WMpB zwc9rZL6*I&kkST$dJx9VFcu0m5MsP$&k}~mBRWjoBpad}LWte7s)PyufDe_R~fK`z-gm&w;sJ!;ib+_A4333-m#5hZb+t1n z{UD44Ej3Vqa?-v*5JJ?8oex_1w>bRQ^=|=w{Q7`2!fzrb^uhquY0n#X#CyFsT-jdR XegGo5hvKO1L173*55JgH)A7FmN994~ literal 0 HcmV?d00001 diff --git a/_build/.doctrees/patterns/javascript.doctree b/_build/.doctrees/patterns/javascript.doctree new file mode 100644 index 0000000000000000000000000000000000000000..9ef9ab30fff416395cc5ed3a502fbd2e4da65545 GIT binary patch literal 31284 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 NrzHe+yZ&PJ{{e(Zx*7lg literal 0 HcmV?d00001 diff --git a/_build/.doctrees/patterns/jquery.doctree b/_build/.doctrees/patterns/jquery.doctree new file mode 100644 index 0000000000000000000000000000000000000000..cfd15a9b9d5c8701a7a340b02386e523755b8c97 GIT binary patch literal 3061 zcmaJ@OK%%D5KdxCw)~LoJd6T~QwK$w1dXJkD9|=VQ3UNNM%)M5qL*Mp?NTCb?s7wN z9r+NTJp_mW-ojq`6ZBRogFBLbZfpnp|{2QN;5AV=;9csVYC4(0( zh#lWaW^Rim-)_7;^vg;XJRDX-=GT~WMh+{7C@HEXnOTZpB~{E?2=U!2SYCgvW>tB< z7_#)(@Db@$e#NmdZ3VFp08$F|qf>uJ2wv8=7r?1_gcaGO$&MDO~}d6nK%4gTIZ z$YO8KVgzJ0JU`&K*%6!ch-1APVS!O9DH-)%!@r0=?9F9y4K6O#)rc+wlOM`x!#nZN zUw4KTRxxS?Non-ha9i`P<+Nie99;5iQyrdRSy3RDeK)NPu{xP?cw;K5x$IXhcMhmT zv)VyD>h3c#x^O^i@a;dCszBl??tEKUuB==*6kCVBGv)>O>9h%0WDMQFvAo1$-DvIL zDj&&7@RtX{uh%Xlxc3+eYt6DU3ad@0(}em0?ZTB7d`9>3S4S{YXvgO^-}p`Hiba(t zlaV$#kkYkiMrD%foO-Q=!JD;&D;^~Y)hn6yCfwH?Xqwfb-!Qz?#wCiMaHR8!UlUBt zmMy=-ClXn7%vE-()bg#2534b*>k?#%+px=74oL^)NI8W>{>cJ4OL&oL>Hwfb3AkSdl4iPyuo^1qHV1%+FbAMJvJYE$l3q5dZpaZS>rM>CsykHx^F% zZ3+OuvjX{12q^eX#fovo#vJL+u)c!P<*yl@YLg`yrzVGMBrtR6+o>)_h!N?K*%S?; z?YpdUIyo2lD-u}S%&NRhW_Uzaqd)?RreKN;ZbeB%I+gxhR9aqTI+^5zrfu{SZFw?( zGD0ME$%(YG#_Lv+Ny~T>GnO}EqR$x`vXPOm@v$U5>SWl#0&qCaIUnE z1_Ov~zdUt97kzEUpwkV~j1E9EaXd$P9Lli@dGGG$Um~AfGfEfCljPj|r&IG_E+f1i zbJLgHjp7~X1_R-8h08jQ4MCyIiEyy$_W;N|nK5$~Kw?Wm$eG`^r-fsaM98sF_yu^E zl_uP8*qni7FDg*lB2m}kx?Uzqr>sfsUMeuCQxv`?8?qczh||Yai7V)(6rVp$4>$vQ zbSjGxFwiuGtJEcIHC#}WIbm06Rx^>_G{@-NJRkB5^gV?Kf@9>I`5P&;juVc_r4qd9 zsOd(pcbZoju&PFNLp$?Jyf~q^kzcJ_3AhU+N{oDP!zJ|~i|?WxI0a-m^jfs@j9x;o z(CRKo>(>&*ur``4Xvoq-3-T2b*54u*N7i>pK!cUGMSf<*9sEBM8`f{m*D9Xg#IUWW z2`ttUqU2Psc5_}rIEqr#HXmv=D}NMTUl7i;I~Oc=rnkmJS1;H{Yc(!_D>oKxH9MGa zXc(!ks2yOOq*^H?7AeHMSoxumzeVt`!><58UV5Mr9-tQWt}mSRjSJ%SnK+hgT^6aT WGJ?pMUa@N#wYH`U(D1H?{r>?Td%OPt literal 0 HcmV?d00001 diff --git a/_build/.doctrees/patterns/lazyloading.doctree b/_build/.doctrees/patterns/lazyloading.doctree new file mode 100644 index 0000000000000000000000000000000000000000..1e5a73157896bc76b54d5fc0625eae16f7ac8430 GIT binary patch literal 13246 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 literal 0 HcmV?d00001 diff --git a/_build/.doctrees/patterns/packages.doctree b/_build/.doctrees/patterns/packages.doctree new file mode 100644 index 0000000000000000000000000000000000000000..5bc20c52ed4274f207f72cd870818bad3df637af GIT binary patch literal 18030 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 T^of)_B>)RSZsOY~s15&Lc2gt_ literal 0 HcmV?d00001 diff --git a/_build/.doctrees/patterns/requestchecksum.doctree b/_build/.doctrees/patterns/requestchecksum.doctree new file mode 100644 index 0000000000000000000000000000000000000000..96de457ba7f569d15ca3b1d549095ca6e982e0c0 GIT binary patch literal 6899 zcmeHMTaO$^6<%L<*E4&u*NF|m7b=dz?h5Zrf_OkHS;8`b1dFv58)LAn-kR>3sq*x6 zb-Jqe0y39}h#1vdnrD6iKOs_n4lnr+e5d*{JsW%NLVvEm<&A${+iw)Pw_`cD37K*~nfg+SDjxv!H zj|;a-X zZnE=~iVWGb7{=TfEaLlo!YAdoGf|#S9|k-eXJSY+xm&b+M6U{YR$h|J^0GW7ueb;O zUmKB`ek4XB<8mTw|7XICtxo%QGyMc^GJTzjWUJJzKZMkAA6lD!3e7~8n0{7zC#;;( z%M6UWdi!KPfM+_emX9)?%9ckTJ~=Tr_kd?g=Z2+9gu*aAWFbzMg*?HR1l|?QO2I1b zEaH|koxoqyMt)Ad4f=h4-p(Vef*PpU+jsD;e!}ZlQc#k zA*v)#MuH6v**?-Qr3fm+Da~!yScLwhj*S02->L04zPas7&$aze_mK=k9mjf~Y!L_C zTiPTKC8S{YKD_xpOfT#6*HWk~BBra5!or#+|CzBmL*8Irl?CHB_kQsa6Um;+bV8kG zd%Maa_s9RO9>vtPx4*e-S6i;_xRqF;g!4EU#5x?e3-s2>xj949$trcDcV3l@9B@0dqKI(ZdC7&yd}AK zSBdW#$=~1DoQj~*U9le=qC2*@XM4o6C8FnvOS0!k>E$T`Lu_Pwo6Xxy*gQ*Ewl^!0 z8gp%w`n?DMOzcY~mzx^$Mnfqj}I%6dsu?nlJwO$puUR2}e zTUA=Ljt+E>*7waw^;Ckou>QF8z}J>%52k9XPK8ryWl(51g`|p)Nf# z$MiRc|gtkn&pPjl`_|X{bG*;5+Ne$ zlaZz-iZ4>@vF{;uOQAMXC67wF0|8Vui%EexGjx#>t`ar%7eKR(4@TQ;Kv)*=JC7L; z38I0ZySrOwD8bC#T?X{ZlS62R-5&69%h2EROn}esZYeaVHX+lJCS90f$y07lZ%Wbc=nC5M! z#{(~e=otfSU36EEKa>{xS)FYI(=HuzaJ9yt=hDNba>n|E~7_!)wU+p91mra6Lm;U+RM9%Y7m7 zJ++N)hAPIZX`A-XH5()>A^KDUQ~2#(0j!{e0Pa(ju~{Bk5%v6*8VG=&#}HB+L~4XN z1z-|^tg1^7uYE{JYM+~J_J?}U(`$9Ze(kMS@>bKO{&`%Nl1e_ITU_0e-kS#KG@0C6 zRkhl}k z24Ml_A0zbCa>g`owdHYfd(L%h8WG_!C(};2)iBR!*by}Is^xm6oLjjwMp%oEhEd&G zGkY82CIv&H!Yw@DG3IGaWp@imRG`mdN1okrohspUR^WkvIoj+b#lupjwS}r;s16Eu zqF=bBQiT9=#~{GWgC>AMp2c`tu{sQB21ak8$~<(=4hwgF2sY@CqV@7Kw?Z?)B%cHa z)R~LV+$yq7r2&R7bpJD8c&S_wvG6OwzOpi?=Wvi$ZKwuwI}TlmZcsst>p9$c(sd<| zo5y*#CJt~(f^{}GHPO7AkHjD!LEP#-&k}gCx+h_!gX0JVnMC^e>JkWyhaylFu9Ms0 z)=##K!uQLwF9VTfI;-IWPJmPmZQ;(Ao^NrP_go5h<;a^OEaX>iwPZR~px%0U_QjE% z?i?9_z%vs5i9MiOi7~6l(J0{V2mtRS2Dk2wOoTd%f=FNh89|If%2&ndrPPQ#(gA=csLqLl zR2zYd?R2LPkuT*4#Zv-^Uy-436 z1n|};rbvieg!5j)gd68nKHfgz)+pH!HpvK47^{i0#jnn-yVX>rz>9t!3DgN8%d|4! z(4F$aeOFqWn(clc%chqCd+Ma8vk}ti0#SMeKp9wp0SnTP@U}>|-hJ=K@aJka43Ds< zl_~ol)a(fhQ@oBv)>Fa`y$n=?zO<7V!a9}@kV27_#qBfh3IcKxG@02L5R{PrnLB3= z6Uz^9;~rrgF_H-0)3K(wUp5oK@ZggiDQ)1WH~e$?7+|o$(R0bQS1=KSJ~+NI+2CdG zLhK&rY4ObePT+_CRSkHC=+U7{hKPZxD4eG%Ve-KdGBu&tjWsVbk>>Z~0wFUQhzRL> z2o0nV7BVh`pc)5a!c`pL7Y!=9UhB2$HwnaQJS+>^Gj|FXarzy=oheI+pcp%+l1L#p zY=G+rjj_nMH7JG1viO|?5J(@|lru_}VTd2+5rxQzP79C|rLC$0)V%XS@897>*P#Fa literal 0 HcmV?d00001 diff --git a/_build/.doctrees/patterns/singlepageapplications.doctree b/_build/.doctrees/patterns/singlepageapplications.doctree new file mode 100644 index 0000000000000000000000000000000000000000..745860dca5d940a101b7848555c6b30c27a99333 GIT binary patch literal 4147 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

8azs3F%$N`cT$oAF}GTgigDW?za7F)a9O9 zgp)Qw@&=NKzET`qz_m_lB+YVj2uMM)VyIh44N~o-&C}bor*wSd$AH$7AF5h0J~}Uc z$V}Hal*IElOuc^nYQIgr?97DiG&SAFgp&kT{9bK;9$KRPIr>2@?b~Dc;e5^c7w22f zH+4|$Uq#77`xoiQ&(V)%9NXI#{rD`s{Tcf4D*bo`KazBsCZU3AwpcvP4W8nL^R?^F zx30I3jqliTo#9<)ST`8X4Tf<&aqdPlcgD-vE0FpGkov0gP3J$`ze&?m4+Me8&(KFk z?w9E|Mu}?N1xn<>GfM538Lxe+_%b>6q5n7Ub=orG30Kr*Hb`(zeImx8uRO%P(+IqL zNAS?wOAqtW({g4WHZ5o6Pq%6CxnnXqpu)Y;Cm>UVkS^JM=urHl0i@?(WSeL&37Lmf z!HP~ko;`mJ%x?b^R(*bF^zr`F&M;)X zoyhr_ho|^3-WcX%v9OrwcxLr?remTl{MfmRXP+dE1)beL-^u?a3ug|H+lz$9x*LEU tOqAZ1+a*awX6l~&F{^|0!g-`V{e}$VK70KuFNc|6m)Ulh1?*r_MVa(%q#10WN ztLr;sL+Sj8gRX2Gtf<9Sxsc$5nlI?zP>)ApEXEsohbxa~SsHfo4C|(Ko(O$OYdYD* z`z0Fjc`oKd^J&4)N7a`O?{21|M}2a2GUI)EG!D)L=Y!M1h2TVRQEfEekRp{$U-U)F zgQ3WpFA2GsC8Or6X)?ez$!0PV@w%a{*`rlALA7j-K$%Em*_3ZZ*q6(VRANz|xqUqE zU`H0QO5RWTC~$Z3o3~=KacnoqS(nF5a2ZCsEF6v^K^$dSAQ-)oc0B1ZpJ%+orC{A8 zjt$o&OJdI#LmvB#e!5Yj`Gb)|wjGFA&w>6Kn8N%}NLJ5f&Lg~sn->TS!{iv@rQ)qz z$ZWM?czI5Jq-iXK2pnu04sHaWAvpTkI4Pm^5pJ(t>!_O)hA3PhZ2N#1iaOQE# zcyOp;^d^{7*S{oE!9vM6lbQ`o>~LZS?NE?xm#oUcg?)73$`!kFFFfi@<7#SJ2ekd*kgT>wfs(f^@_*v&+ni+nn-Qy{WVr=*%7rhwvohQRd)*^ z*&W(+YBD3M(T#Ep=CayV$ba2ZW#&mmmZvf1^1K)LXw=9APyJ*&ZsALz0h&nC5z(r2 zs4jN8Vni5tM7rZ7dw}+aeoK9|kcS^_G`9D{-DsmPko#BU3=B|*GclOpOh7`skb55ONKVPRL=ZKJI1w%5yJ?E+{c)Dg5ipO%RZdSTr>B`aMn*RemC z`j=p3#1_^`7NmT!WbjV1G})!8oUL-k!gq)whW7!RhGC3l_{Q+mgLCTdKTdn?VEKI) z%i$ZGETGu|W#v`8vF2pnFw2>!?@lz^<_QS&eb~8kN`0hwU0Jw^T@eQ|;OF<#Qnh%) z*z3v=FW44m?|$vzduRQHr=8cmT>1+yXhV}Ga7pX6W^Gm5moWCljSEkrVt|n9;hj) zbKyB!1IsKlX)m-iw#?#+^x)+)Zjepv2m~O)Ut<7`m@tk51A0j+*6lO_=7|6(Jsw7Y z51`yOm!1I`I~>6CMbYJi#M*g<`>-tx)B?GNd{Z!)eW>Ya7(cizehl zxW``7;hwb&`#ht47VV?vZ}N+oPX7bix* z#!7ynT0-TVsFgx`*OPeNq+rI}rX0$Lq!8spCl65u83hiIy3Nr4r5jxCvajSK-G$Iv z-Jfc$^#0!t&L-0P?>l;b)z$mEdnW236%wTC6DFF{Qr5 z2@L?HF|JSmDt{+2sh6;~%eIqrlU|}_#iU!-823^LM-S0dlI~XT2f#qxdwE2#0iBmf z-55`U!MPx31HBRML$2Js^!QXNeT}^PdCXUpW+>K!2IxR5Q`-m2P=oaa?r^o(ZL-u zd!1xU6i7tD(dQ8y5e|Q1;+hyvCmrwny?VxqJ$zj@-5OXSvR568iV#1c{-c$!{d7KxPh!gHw|?* z?_TKd+`sp^`)h2AM|qKKq|BoIN4S7K#dEDtF^*DFWFqSHmQ^G*I}LnlS+u$85M+1w zBTuKbd4nc6e;BiO)8R`M4*l630yCYv(P0+BXOWm?!^F>#EO!_qHTr7&D>1gh`!$?V zP~wZ?!(omOao9De>I)ue+;6ZO6ekW5AR5E4i$Qb*LSQ(5rt^#0WQZ-iWdt z_`E3){*cd6oIkFv(|(+J``p-w9Q!KnJJ#yMV@jv?acJf(O0=(#l@L!24Qnrsw_FjQfJif z9-WBgNilUMok7aHk!DNF@z8h1{mIdZIlji6iDnS6G@(Y8j>S^7oLTnQX?UtULf6ma3%*NO5NSr=yd0?20qbG*t() zQm;BTp|VonxpwUuyTslsN;2pOOnZ-#QRM}KI+M79Q&^LXkjJ9|>AhOX{n~x+7m^^> z?U&e>)3q`*rpYwsms4rTFJ^eI7D{xOkygPLBOvw z3Y_(m1YtXzQ}P9n{@kL3DA)Gi$wlb%hHf(Kpma%kV0%V}o2;=7VoYv=T1mrtB14T< z(WP)Js>I{he&D1yx;A%wR_H(NVcHyE+u7qv*Z!0uJaV0O>2OSc0OF*5d9}W}22B%J zZ}JFfWK$D@t#eP(itLU%tSAH7LN|17=v@W-iqke~DvB~Z(v`xKtEXFt5h?wgZZUz^ znaUJu00pKc-LmTQ!$fka5l@0=hw+xX4!0_e_;c<4QBHi9;m{g&fo1YdC&Y}roAL*f z+@(<6ChFF7cJ--P)$W{%iBB@ITq@qb*Ks| ztpi^kuKo~GZg^LR<$wA}3K#Cn!V6z2%G;((*}|-XoAWa|IY7`n5?w=wt_leHWX=$N zQHr$!gc@pBQ02&en(2}>dM;}P7#KT8P4{Z_n=Ek+nVwp}^~o+U8Z~Cs^A^6}x5ZfM z|LuLH3SK>=3MS4zRVw(*m$5_UNK7k(J{RLii^P4Mb)n>T#mLVdq_@M-+ehMP>QGv7 z^zUfvfx{)b@5f9kP(@b9@($83gRcjF{){oClSfkJXw=$$ayWl9@UDE+zBs&%x=s1CIz<3izdI z$ldtC?Qk<32|whGB<(lp zTNAxoq3wOG-Kxso-v0z|q60y)Ld#Fq~~ckR?i+nET|-PkkHG|4`@4(np#xz8B{=2S3OX&-Z-4FnFZSl zd9{qZ(t0V1(mBAUC(uYM(s)vwUYE-myiH_*%3sI-3YP~8{`lkD$10-FsbdXiJEu8& zuvq<9D$uD0s3o|GyX)G-K!+XL^#fyj%!3&R?{wZhFkqKq5cag2-(hAH2?Ul#& z$HX*!rQ{$N5^(-L_@i=!F1>jhB$d#r{`EBxX|EawBGy?(>OmkGAq`DBwd{ZrrKB^Q znaCg<;kdkQx;4O1q=ivZ2M|L|jyYU5-jbacXnHF{Vq^b6*W;zf|L`f?JPF=Xyc_5G zgsiq&z@zIfKAnA|3pszN*l{w=FFfj!9fA9ca&HYcCUR)b&RE8JRhu)*Ur)_4i2{RV zn7Y??2VuiMfAt$bAVxUrp5DDm`(_>J{)QvdSa9VQ{tZR^AY9%{vY`Zz3OU-nYJv(Z4|i#b8=ko zHBffp*Kzzy{pcS~t`OZ0Llh`kG5Hv*q;vtl1Gzj*eqe8sy%khlv1wDdak0Icpxtm@ zLYE2V$Rl(s^2&Qtk1|CC!T&N-T_2XE`t8Ye;ocN3_u;Z(_Q1U<^?99yrJGVfF5K*^ zZhjPZrV1g~$=Xujt?(Ribjh&)+=pT6WI^m?;Z2e49Q-@&$OD$!GJl_ep>s;>*fS&{qj1g?z+BU=9p~LsVF3{_eyQ2Df4~8 zDObY{%SkMDnOj~X4c64BvXsZtSke|Uw|!uSxkfsdB^iŒLsJ_0_>V>vDDm|8~S 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 literal 0 HcmV?d00001 diff --git a/_build/.doctrees/patterns/wtforms.doctree b/_build/.doctrees/patterns/wtforms.doctree new file mode 100644 index 0000000000000000000000000000000000000000..a58f1fe46bbbf871057bcc5255e8a72f8a127885 GIT binary patch literal 19363 zcmeHPYiu0Xb=HH=)q|336G>&+V;jmY9qw-III&HTij_pNWZASTvxm>XwjlciardaZ=gVbrbU4i0n&cw zK4$I=#T6+fsB6fu*PJ`|o_p@O=XK9LXTCW3m9Jho!2e0+!h!90TQ$?NJl|sBD4DVR zcHC!PGV=4xmTdc3dl9-srVaa-6zHjvLnG`00?fBggmB z;r66GWlz60s@Sv1WaLCH(_SSHUi5>$aouzs%cNn(rW4u5XV$1W9ML!on^H?@7<>i@#>9c#u7`%=UV~I@BjlrX#aUuSWKqecC>1KWHDe&m^n$UkF(c)-Bd$ zfobG5G$KX%Nb?KqxAe*__OJBH&C7$bC|STGjgf*y|7 z1uEXK#3{PS2lkz=9T}UZ2fTfw>wsuZ1e!#_u*O-iV$Uak`o5v+NXiMAv@V!*)qV(~ zKs*Iz22DLkx{`i-GAU*IAS7}=nN|{-!FpDQW!euzmh49$zK`L*v-q!!{}v!i6I@0z z2+0&CjRR+tJZwkNAY7_v{0=6=CXz7J9KSw_?GM{e6WYm4z(U{MVAkl$L0~?g4FB&q zBqKqNoNQMT&@!s_8G8}3JfTztR#6lB78L*6l-WqMNPLNJb=8=YZ;OHV8Rvb2^R;1y zhE!jrjsvwpQUaNUAVal7Z^NW(fOTgTBo zl0RO9rD$Fx%UgwFgSmmf!Mu?C5v&^w4y#7?gshh^%8Khl!z^{!Cd^+1&juFB9l+WP z!Qdt@C%jTPAuxP0NLK*Sh&_nsXJN0~re}bZWPLh;-#409hgUC`mX%r@3h{mzS@#`c(B+4P2%6yX=Fc>ZrM?t3)ODSru(cxct?jYM(U-x)nM3{ zlSdRwbvVz%zpRl%cPm@_wtYpK*k65*NQFj(-N;zom*glqPms82(Enh6Bo@O#-NzJl z#|Uid%e>7M)09-AnZZatv^T*Q$SZFvnV>mGrt-SdXXSk8Pj=`CNo+YhtF+1tbCt6FYPQ9KKXcLmAIpZBM-QzZMtw3yG|Ivks}j0fXBDAq@?7TJB5&ORBvuyD^kAl zX|*ygGRI(YaiVq`E!S_aYhKx_j~+U3fZI>WONP@Q_(8-ey=Z*W_g!Xs7aitWi^eNB z`+Hsaa1{rB*lSBZZiuLaAB3e6_oj_&8d+%HD)h6kR5I{SjN>yMZHyHiXr)ZYe`+r; z8lTG`)?Q>@H?k{z$6I-75l7Okl_x*8@Y(_g#o&m!MK~9D<9Q2_moVHN*vAF1kEXx| za#4VnTVJKT3cp1)5kNjSEk#4~(})#ZV+aKV%&IIb-m1%m*JION^DE`H@8Ph~2PlLK zLNLurS%D96qJaO=H>0*)7K@Z?m4kL-ca04gP8SM-9A&oKY!EdfKg0-qD=X#8hIq-{ zowb)=DbOgtlGhd_Ki}gPu--jxxh=N{b!?yRJq+Cyjyq?~ZuQ-z5Qib0pJoP-Ru*h9 zviH3+r1r$Q|4gRKG9#JHk~JiC9O^a)ja)}lqqI4s=+mQ(1WAg1jIlX#SwzIHBf_V2 zd9E!pI7|Cd&oDT>r_&MK<~*LWIp^fe6k9ZK+TroxMJ}c>sR&22($2D=B8>>Az{*ZL6F>zsgmLJ-P@fJB7LAB0 zV+LboMZ)H1Q|eihikvC%%1%Ldl3A+oPRelAC@#FnH=)KYkZ4F%J`Gm?@PPwqS$IEz z6}`7w4TR0<@J!bV6#}2VB&W)*l-Cf!#V!L(N&=W+spAPqz@j+t@IMQdryW(|z-^#+ zrR@4$$15)gh-oj+VnHKfaAy#Es+1M^Yj)IkL32WPg?>`4e{aXkY*XIbJCyWZ> znzvU)hh7ao1!Y^yiLMrB{pzY8Ic-E(8CZtgM0Y6SC2%}Q>vD|+#T19s{L0V2c;0Q} zZUWaJI5Vl3X!yEoist6RqJfJf3^k*2Xm~!|B9N4Vhv`afku+VK-%udpbKWusQHiFZ z>lO;xdWHpS)h!5j<6d_fh8wJAX8h4FcD1k=y^1F8ZrF& zq?C2jpbrYr^IElH5B3tm?76gi%#@wY+1LAUBJ;WkI?}aVpY>ZTNKb3G ze3xPJ8)G-Ec;Hr;tmHA7P3D+~J7bFbTMZWnN9{DGPQAEXqBjj3+WOk-n}Ev4?t}_SZ8l-dn@tgO)fCG6U^R5v`N(ZIMHBqrE%1=0 zR!-lVzGR7;Lcz=?)AAgzF-7lN1X3uQ3F@rP_MO6PJJrmg!4MZEgJG5UX2(TI@7o06 zbno}@zdKPhe}ZwEqM6{6B)i>^Y~z}KxFjyoMyogu43~H$VYCVrbZRF@^RS>&MV|ng zL|m?ls{7(~jbO#?>HR)HDz%=>D5+3Kf(a55ZTLT;w{A4@^e$)!McfqYqq?wZP>V?2 zo@cmBawKyL==~?*Cs~F1Xp{WcSk%cP?TuA_2sn4bD*uCV`(Tyc-=Y6%?_K)c$sK%c zx}nN($C4c*L&?Wv!KM?k9rolsiXqvEhi^kXjc=YV z@Qo(zkL`iRw~+et1W|gUilmhVZOTs-rp&9Yob1yk?`kGK0XTOe`!8XfF8h3v-OWTn z_J3}7j>}nyPlCCLxZFaV9>a?oWr~}T*8s2wf@_run4m{(czY~icd-X4jvv@f7_=G2 zBRHFijlyt}i;)H(zAF@u=;D}p%0;a9rm$#(KFT*J&wxcbX$p&m?540TLgpyQjqEuj zyEz+5QW=y7q& znX@9&d*hA^*y^|T#~m~zIB z;-9I&6??^5YuspGq@ze#~6bupXH3`|1C zN;Z%JupwaJnCpaujL4KWEFYP-wu!`7r2&vhYMF=NC5lNqZ2 zYEm%1FSFfvl)ahB3C~jvW8`Z~9umbQ{K)!fG9@0=!~rQSFz zg;dCAg9~Sc|1KD3Z{X@?*^17+@rIDvnh@9o*_ze;Ila}F4q{44C5@TJ5rWL(z+*q#TSq+DJBnWDjdhF6G zz@_Bdj$BUNvd)!6n@~?@Z^*rW^&UaEz6L=A+ktoPKfKo)lVlRK$Bp&2=JzBex<31G z&+&RDDt&B}Nw`!h(crO&8^tT_YdL1s?CBqZQ+d*m*fEi%LAC@}A(Vdvv$4*Glz0Pk z(dETQGJ}?^2k-)OS}0VB{E{$t&`6xUw98~sAEL|@w}ISH5l6*jDA!=gz=dbHQdSM+ z1q1}hKejNJcuDIbgdJ~yyCdfEt0K&bn;!~`!}=;CF9Hh)a7Tz;Qz6dPAtKoxo+*hb zTr7pC^+6J{Ec=NVf)Ov!?ma2saJNClv!ye@ms@3F+ZIQW|c&EGc;%Q6cyQrk4@x5eL>iAAsE~@OeTo-Ft9-Lbi)|>(`E8;#{gy~kU z@f2bfoGUHYi45nI`+AR-BCq$ZXqkGxZ$hf}mMheI6kWG_kKs4x@b=E4WrvgN=A0NsJn>Woh9oLDLAxdKWWz;6}+=GC?CfT${81q|kjuWy9%n7x+y_Bj5k`Y0D} zEv{^Dn(XuWy~|2P7O7N3E;}m}QFk!K$|!#Cl$ME1%WhggRBMvKP?U(gKmpP3p+w|{ zh6N9^@+y%GnWr>l6xsHR)SN`Bs>q%d1gTdFH1JN5?0pLxtnmE8t?js=_Q>37 zGAjeTet^u9Ssd$-AdG?@JRAvpKLV;e*q*#=kB7M%Ifvj3Q9gF;S zgFaBh&yNr{m|KA!^H`5CBh$7I~Bn z8?-46S&vTh$pLgS#_Cp+qXDA=ora5GG{|`fdf0T+$I0X*+j2m~$c*Apb(%~jE!K*= z7=E0Jk#PV<56EgCEwk8;HlrmGe%ur{@Kpn!invki97mn%GgW+>0$&u#zijZxR6~4U zBESw1s%;cE&k4$FP$oH)QF5m6rU0ThKLNvXT)@q6P@^BrzbFh&PS6^_d!Y>yxxA#{ zn7Wq&#c^qs9KwfKlKZH(Kd>4Wie_-j;I;7~4$xtW`!PhLS;tZgf!m+sW*qsAtSLF< zfZdK+aesi^ZC;p1!;kX@d=P*tm|SX^<1L)ox%j6|gOJ6R-$3aDnogi-+7DSnAIZ6- z9W^!_*g4L!a}CQ0&6dls5EKp(meWd9Aa+Nwm=Gm`T<-AhnCu3x5FaFY3UzmhK zHzb?PBWM=3{0P2SlRjQKn4Bbe1Lsi56=VP(J{i4qqMRHbut5V-f@2sydBHi6T3RM> zC(%egpo#|39M%Rr+QKWaN67=!lOsT>=}O5_#RnTy&wk`7(DQiEX&1m#O9uW!3OvPR zh-KFiXmJ>-ajD813ZYH`IEe3TWVRqhD9{~UnMuxoC;RZWrEsPTXo#Yd?c_u_#QATl zkw)wg!FGLO{i9*ugrL11L#jg%>OTG~9vi5mGbL%ywDF-AvyF`x@&+n%5@PgvJV2C? zzWc*J<|Ea>Hn_)clk1b}g;S&`;QJQ3IenZ=F_$TXk-o&Uj&BlB+NuQ!9s&cK;d=tx z$pdZlT5oWtzJY)l>0OTXN%@T-@T%JpI&C{S%)AZyq7Qu=gtQ4GwRnQA$*F*#Aqs3c z-<$+e;H(Jh7F>fe4ASPwsaz{n?D1wm>!^oHlA3m0az1M&S~(~h-Z7IM*7dbfkGv)` z=AU1nPYYqHX#yzzuJryLuY3PSp4AWRckLhBKk7Y&Q&sN?`uR&-GxYwPe*T$y{R92{ z1^xUP{k%&*e}kVmnI(vH*x-hV!`!xiaMS+rO%83FL)zw0wmF2GeDuxOegxlX5z`;V z^nYdl$o>yLxBU|_F=ZT!iRsQ%O#DY`;@)@p?8kIo>r0!rb z+qjMe<6sRiiPN8w?QdcKzBIZ9;l_7PpeAIcqnI$&i@D|_X)|X@T$i`q*dh_=k`_Z9 N5LCC+aw1Eu_P>@~wmSd- literal 0 HcmV?d00001 diff --git a/_build/.doctrees/quickstart.doctree b/_build/.doctrees/quickstart.doctree new file mode 100644 index 0000000000000000000000000000000000000000..7436ad27fec205f78f7385df885db8a6bf3b8858 GIT binary patch literal 133167 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 literal 0 HcmV?d00001 diff --git a/_build/.doctrees/reqcontext.doctree b/_build/.doctrees/reqcontext.doctree new file mode 100644 index 0000000000000000000000000000000000000000..2561fb6d9d326f102cd97250f9ecd70c8c36514f GIT binary patch literal 43577 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 literal 0 HcmV?d00001 diff --git a/_build/.doctrees/server.doctree b/_build/.doctrees/server.doctree new file mode 100644 index 0000000000000000000000000000000000000000..c27b28f9e968891c0ba604b1b524dce7f27cb6e5 GIT binary patch literal 17555 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 BENlP( literal 0 HcmV?d00001 diff --git a/_build/.doctrees/shell.doctree b/_build/.doctrees/shell.doctree new file mode 100644 index 0000000000000000000000000000000000000000..28fde8b9cb05de7372e797fc22079814d53e87c1 GIT binary patch literal 17785 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 HbvFJ7pQkf3 literal 0 HcmV?d00001 diff --git a/_build/.doctrees/signals.doctree b/_build/.doctrees/signals.doctree new file mode 100644 index 0000000000000000000000000000000000000000..1ab3b4784a4c35ff0e23c7a84ec2f8b65927b0b6 GIT binary patch literal 26659 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 literal 0 HcmV?d00001 diff --git a/_build/.doctrees/templating.doctree b/_build/.doctrees/templating.doctree new file mode 100644 index 0000000000000000000000000000000000000000..50a32879d151891c14c35a25a68e0570e2e63e00 GIT binary patch literal 39300 zcmeHwYmgk*bshoi13OqeNvuJFpju0T7=*jCASKb}nxrI?q6k5P6cUsmDfCS5OwV>V zW~N8oJ=k5-plFpSapjg@8rf3WQe08VR;7|E%dt`=%Vr$MB|qYF*=5HmmyvyoGey`ZCCcc=;8+Bea>i;B3<1=A-BO z0+N}ojdA0?dpMb^YCzpR$&7^Wd@|MYI!^z5Z_Q3hb{vP^T8}!XdF=5T5y3oLZ`o0V zo4B6t*llsOx6$jSKi2H}rO;_on_e;-+w1hG?;doIyYuet?jH9<^4Q9gkrPHM4QJg6 zZMW^jD~~wQr8wxWyfX}Zpdnfbx=v?Vz_!xFsFzj%b+i(TNqe33N*G}}cbwbZTf^Mv zFh6@ew7af>ql*W3-E`BV^s?1*E@P;5C$iq^b$t6?%Z@BBjx5=qV>z95Ouu4T?+JPq zaAgH+m%X4DwYIEg=r~p!SiQ(8*;d1AHXXuc{@o=D2(z~EdW2A%mPYX5tMq~y@U9{ zeHEC%eKnZuPW*oo|DVGDr$ONE-R`n`!d(I#PALKhJyrz&yVDnM2L9n@n;WHqlI{ z8H8<{gb1yF?1KKJkSGcIJ{4KfRwuSMiTFWzOP1@{AQk{ZL`H7}&8AoP?3PuN1gqps z=@BX4!~hStaomkoS5|yts7e@Fl< zx`D9t)n`972A=vU**s{H4M`;kLXs7b|4Jvg)5$xoGiD`ACnpLQ%mDK(CYZyiJDFn9 zy`x_%LkRt32D9viUO!nHha{MJ-VCOBkOlZmY=`Sksyl(F6>B^i6L?U(nw((5ymwi# zz_L<%Ouv0wF|%r@dBw^%l-#Z->Ru$qe@{}<%iHLm+a;&6kSq)#^&xcPj3i#>4Dqs0 zi5F!b98x!ueM|$^6HeUgD!RzrOM$pN8Wqq~NqI-2Im^03ri@D-c(T)iqO$6}C=S}* z_c)CurF$T_>OrUJt@lC*uC*;os68m(X3%N{8_}u)^4dB{XZ4}cXQd?f5j8s|#C>Z$ zl4RAE2m2!BT7_ybH9e_%AS>f>@_D-#2ToMCyQFO~Z=tXoL<<(Fe?^A$q`_@ER;^ZX z<94f7TPlf5T+z)U?xm8^MHZ5u(pA7wW829`saXGP4qeg6$`zR7$~R#grRC+x9wr{|LHBW^p6l z>cVlJ;=z)Aq-;04Ef}Y9f196g*kK2kbKR}gHf(43$LEv1_`zN(uBlULRwUNdBqP}) z{w~6Uu;*{lJiDusV#>`d+GwhqdiqomPDn)jm@#ahmIC79lUg7&t|sy#`0Jf@=!o%E zLRGxGQ#1V24N6k|wG&J+T^Ij>90mKkaYN(p%%~iskdbGkN2z-Xvn(XXa*QNj$?(%- zIcT!#q3j>V^HI3z5wt6!9L-Js9n_=AMUT^s(YeTf4cedgPx9Zp=-pFS;}|*dJmY*D zqyVi3>pPQocC688>_h#12lto7VqW?v4nli(CkI`$wFQRA3<5uJb?r3|s-MFvL6_X; zl>iZ(3>|KGu}f{Cq@F&RK60#+S73l4y0ycedT|FLPI<#MPQ~DwP2km(`-WP+WzdY3 zUObdXhSBGFsiM2eqzEm8pYg-KI1Vc2JHt>%=5xmLHN!I5h=9c z$@IDi!39lgy%nq>LPCm(f-QK6h@0!Qx`=9u@C=cRbjRTU#faF!7HKp*Y7TFJX^u$n zvfb(-6coEQ2oJFl8K#4)RBAX)yVr^tmr4(E|S~`V9uk0(++f{LTxYd=UVE(W1EN zvK@L9;|4c@5$wyh*W!>jiC|Ahvy~$ol@LvkETV%5*T3Tw2me*iXpo7VS4N7Y77bhg z2R9|t9{ll5!@3uNg`qK^WEN5T(BqvJvQYn+z%cPEph3@5*oCU^=(vn02k1#P@~{;X zBM@V>NoGWNMi2oE2yV$?zclpW|8E*o7(c3gikEK{;-#GI#kk8Nkhqt6=gW-ikj%ls zT#dRmZIkU~2^d~>*sS=bnC&<87)(tk^Cl5?s4xm#3K}a|qaCEIcaqF#2Vq)x2kuO= zw~0s(gTpgSO4T^1SFw>4M}5BY9Q+c#mo}m$_&b6|I0+}Q6knIX@$$|y0$Jo68-eLg zUdjXy5);&WA*{(*2gzjYo@Zc{R~vS0uhxVe#zG%qb&96dPV<71F|c^`ZVcUg=kBb& z&sxd14IfYtNa|QFQ%8a%j_icb7;z;xV%8eSTf#Kq?8=dEL^i_R=qJDICesyI!uR7< z(-P)EhWnE{E#W~kBtkH}#WFx7tC{Ja*3P2CqO``rRi8>~%gV>^>EkDq) z*Yuo*$;3zB)M)U&5N#+?BkN4%z8!{XQLDLR#_RC@Z_4&b(F+U1o~DAqmf*W51_{iv z|0FHTG>jrlCL<3BwN-lgxc@%#oPSsD?*Do zwP9~T*C{=>WMPZC1MAW9+T9?ejXtgGcC6)#HALC3nKQX{=uDK=P|zZ!gl&zt0!o;z z3#<*Lh39lHjQwS1wflM7a3YkZ@TENq_=dA+GKAi~ZwG8yIcG{L{|Xu>2PAo^S^FQL zyHjT>_na9-YfGBeh66`@a|Z#E>LkT`*_X;9^f0wk+9oq92={XY&Mb5(Gl&00`pNp+ z{M`wbg*o$lGTRB%6%b)NXq*_J>M?J9ZOP5Obn5f^65_Qp=7Za zT~g*@GbH7ca;_suN;QkTq^wdW8A&Ny8Uxw6fhLxePobkcC780HKvG`9tJg(Rs_7B& z7?SdS5Dy`Ah@`yUYn?J(eigIw%ft>K){>IIeOxX}5k_g2Qc^0`m{3yw5JnS{@`ve) zB_&_Ij3wo+^#L;SbA(pG5qO?1)K5!vD|X9s!5DVrXLVOB9g&xp?`&i{lAsmRk*<_< zr0bk?d=M1#lXBdvNypESttKs|<+Y$kSK6M%uL#pCDnwov?iC7 zNd9BXpJI2kzaxBfvME=_gwt5f7bGgwYG%#MgPHi;dMz(Ce~sRj9*3|mO-lKVT;KV{ z&F)F>^bLv8$*}wi`pJ`qDG&<8tekw&Ryt+B z{DO@pCkfmy%jGCSr6DI3lT0Wlzk$(&ocss6VmZlIFJn15+Y4J&us*XvIqQ5Mm`Yhe zHA`3R5IwyALP-UB`8yXQ@L$8n;X9XaG@VWZ%!_V91k5))E{p z`+f%f6bXO=+4lloy(Zar+wi%v_A-paw_%|P?FE7`zbaXZ93}{<00zkxg9v#i1fRzmF&d{? zt3>olsq}72-D}|J4?T;lwu3XcY;OE9qkqh&#*M z+>`)jKCxOsa4E7{-X$Df1wt{cO2rZf!Rt6^zq)F1hFpn2MHXr^4BFPIs!YD*Gdiav zR;~6{Rg9e(;N%sdVcqo9+-(;yL2+{KVd2eN-{kh z$Uz|m&Yg!G`E$Gp0i}1%E|L%iSg)`fPBkcc7LJ3v@CtGU$s)s#`p2>8P;GR*a{wJC z+c%7W6PC}yjRaB3`K4)?VM9X-dCpfDe=^1RTyoIqpneFS@gH{jG(8ctNt!_M#rSfb zB>H3`UaW$aQ^`vV$ihnqK)U*`o@n(iV)akp&8ygs`fM1rzm3})N5f7MAzW44=2z`C zqr9aUt~{{uSD*a}Q?GvY*-snia>Y?PtCi3$u>^U4G$agB_Alj3fn)m}wo!AyoO{gB2pP4V9SE(;NDk@>KBbR9ZqNe}uz=Ay{yP;~3ef zA?hcP?ffRA?0}-Y;SEw!``B2dMn^h6s^8#fP$Ofl&ciu0K@mP2dsKA?XY1fZ(78G) zPE%(GOqWWCx(=6{K_X;`Y%L@(m!$gySK^5s50%S@Vn#5H(d}aw-u^bL42SFD+uw#W zR@fAb-Ckr}r2D5!97MNZ__J?Fo(l#rpsL#; zs`W6qsF1^s9{YmuK~=$!NS594LMzzluq!5wG}oCaruFls1B1t3eL2C@UlY$6F!XA{65g zek_&UAa(Ddf|Ne*D7!{Qt8|8pT0W^pg{-KSl-&ZDEvgU%Xi&ijRbFsh5;cC1Y~7B4 zta9WyrB#U1)tY*|yctEt`Gim2s8nHC%RjCuTOOv-=Nyu0CLYCDyY4dH`fTp4VqcGT zPH7wtLhW8MH$94n2hr-`A2Npj;`JC_0+p%9fGLAR^q3DAWB%%kI40OpkGW`!`3IAa zIdAf}(Pc5hAqF%cr;NA$Vq!op-Va~?r4TJJ(Ufq3dG<0DFUAt&7cLt-zj=Tl;+4!C zYVf~B>nH-|^QO=;#@RK4CPSS$nS{G1iW{hgfxpWTfY~i8G8*I&mTzLXA_Ko5NWKqX z7(wzqG|bR!iRb;hKxIjGN(9F)+?K{m(-cCPQ%ZTvW(}vDJ*0O6sXt{FnC3w8*G~l4 z`S!4-MP=-$_M%X19KS`Blk`c$i}-ve*#+7fpn$HbYgsAr;SN$nYpe*Nlb{iEO49Iw zQHYLm%Gn~|5_(3`eg1d!7gCsCKM~Av7UqwuJyBIAEDhBB#96UN@y;zAO6Y*@ z8qSinfl8%plra^F0xV>H*_Jv<@C?yfuN&D-r}B2btd-;*z?uVsMyUWq_Q?+PP>EEO zZd9BDRl}Tv?FjTKC>jOGP?8{YfH>3_rQ?D?rli_5m~-O;O9^(B@la|A_P6F1JF7sB z7a(7l1lln4FHlcHi_D1iF@||pZkViTIL0B4$I;P*%A7>Teb48hzr?FF|c1yV*>&lgy^r6xnq2#3kfmrTD z;q(pC|FA@!+5s~v%Als6#FDbFr}?+>_7CLV&N5D3fsju{<1zW&J3i`-feXOCb?6GI zX&fE6f=2H@Ir+3QR$3m)(Rg4BX!;P8`Z!nadF^2=i_hT5rl8c2Cz3?x$f6p6zZ%KrtJ=l(C^ z4~ZdF8-~QtK*RdI7gED{Fy^80m3)HfOW`Ckpk=%Vg6ip$C1bg`j1`B9g%L%({)THD z!yx?smcz9n4Y}R1c5@iE>(o~s%uV_-6NQ6 zSFV)MIm|cR3H7Xy_D?^sKqGMRkHGL~k$wL%aJB7k;BQi*s-Jg@sJ_32J3Auz&t~v! z=)&)QHwqnUzp_F0uSW?x2v!2ya2Mg0ah4AXZXp_M;<`SmJpy zP1|A!Yur5GU9$e%_n_4MM~zV_vXI#aIY!$la(7}`(&v9M3OAr<`w?}mH~prvlqpPE(qVG1f_63vON0l6GR zcAR%~FO#Fr>{5)sajn@&TR_rqi%-$C;%RnR%u&bSAu?&>p?S% zRh`b|n#$&~yHrV4mKzF{dMK?TYUAc!R@$U0V6LI+Rvkt_9LS&tsf?#z!U-Fy;SG9G zL?A!w-rZ4*8X-ng5AQ5>COo`3jX-0tbGgB?ddPJ0sA4Xy%8nQzpQm~Y`kBzjdlIi2 zKHd}$GBiTCz4HXYQISQPqmsOv_k*B!LM`jiS6zjK3=9=7$7@C*w)~>B3F%@{4(A9n zlj0muyQ@WTbva|A`oW8HiKm@iT2mMoL~pn7s<}8k$T*90++3X8WDA#QpUI-BkjpQ} zXr>M=z7lpBA@}ABP^U4{P}53&GRTTe)c_7JsoMxApm*GYnD@%Uac; zyGO1^ZwBpsqL2X0B{c22erB>+yY8pn2%)J;>pM~!mQTq!ojOegJJk%;)9Cann{*+{ zIffl8df)2m@;y(L#%M}oYUxvvYU6!+)TgWmb7LxN@Z|!owjn=@6&uZl#EO~e9zU8{ zv{VgWJO-}{p+ep@kXg)HcQJJ$eT2W*McE3d0L-;n^ZN_Zb1JE`Nfs3Yq>V-XS9UAb z1#0>olt!-9J$(ox?|_MxCFp&&1r%Fzq*gNw)IW{zR{m5KzS*Vdp z_bO~EmYWgSHQxSG?(M81Nv3Ew0CutQNhu@Y$(&?HB8F5Nd>*QUm?RU?_bT~9KCJLQsY&W~j`xyg_urkA-9MX|KsxENe-d5Nx9aYJ zE|*{GDrYc8K>to5Si0EQ}5pI?Is8gf5wpHcYpjZ0-pJH(THkwrOZ37#^ ztwJ+`Q8dGX7C19UD9H=SI2OK$M~6XzQ2R229;I6TuQ9-I%f}=&qAqe}{z|{WuFU66 zEr0P75D$n4$*t9nvtfA96GaL>k4`M`xik zutO|#IqsJl9+&^d7y5X|&A|~Ns^|z{WLa<44(K9nC^s`v=n*5Wi7Zc5V-;d7%WIs#PTa=~OP*~_poTI*c@JG%SyZ((=CC4+ zHw4vi=8Yn_YcgH5wq9dlVGLz3uHD(9kdF97C^qcn2Ov8ooHn%iOOF)4WVb02!AFX! zyl#>?8+3OZt6-`E!*-deF=~|MGDW|PH}A~7nYCN|Ujad1-D;uX*=kuHYXuB23MQ~u zEtHzVj9571?fb6lB+iUW5e6g$^VkEzQB%kib~<}qp?~bU5oc;?fnlPmKg6#_a{ndE?W)F2QvGa?47^eYNOA#Da; zn)H;QVeuV8olRqhR9GtQfP739$ftD2mj5Y)J}BdSO!R%i%*NDtCf43SDseQ zuPmBT6jozq_Yaysv{HK+Lay~^7wb4tEaZjEQX2a6y;s*Iqz7vzD${xvSylqeX!|)z zLkY=Uqm5zE>oYleH8j+LEGSAw&YJ)lJ$*RW(?lAJz+sIAH&~XUDVn)4e10OM$--aB ztX7usj$sejoNM_^<+ZOpjV)k>iQx@28U4#i$>>)zfEi@;8QzEDV<&t#ghDQjJk=m{ zl{$VZEyp-2qT*x5zGUsRu#MOZYB;Dr!N*rb{xD@zaUBD-DC`N@J3Y$ObUHc^PGiCT zZH`_hr@SxbdYXvx2pp!o;}rNCg1rLpvpZe4iA?xGcxLL!CdB^+O+f6a4BYljHU4iF zPIbJz_+R50XOU$psDho9-^Z)Q&dNx6@dIZ@fn*~+{?|eEdLbUYP86A9FHdr#$p`{U zMQAb`?MI{`w5$!G$k<|6PmNGY@u5Qs`xL~Z=AMW{$8OUez1kE_@1%45W+8=`>#L$q z|DfOC=+kcj484(l@n#B6i?e9R>41}hPxg>BAmdP!d*?X*h8rNYUs-s>K|zP&P?Yf> zJ2LNb3Em&FA#j*Yz6n2!c@2^VGefA}b6Wgm=BQ24@(}Iop@VGc*lx)_aORD@LU|?u z0ErJgi!R6?l!p&+aIn`w9TUKc6N6~g>%wisF+Y4Zj!q?@%!!TN0R&R1g-t#zgdS2> z_ye8-KG=L#{0*!?T$8H}Ek9{0^$4WAc|| z;fQUSl-!)ox(9NLdR_W%iwaAM)zdWD^_;rH^@iwTNgBM|2w!|bJb@A_C;$Oc!d(y= z$3%&JFC$36HGFbk`4&W%e%hNOkJ%5M=9;Llo2Kp!kso<{Y;qXv4U3( zjd!(AA`eaU$W1e!MezHedqOc=BGXJyBP0K0A@UXF3FVQl!CMHoVhxVvfE)B(-Luqu zs*b*-xXUF=@IIu3KXck2-d(_l9d-#JFe%os9pM(W^jQ{ z;3UA(kLHz|S*|l(KKa!joZCv1jS~3yT>oIDK!NS5G!Sci z+zfT@D7C?c<`H$vX={tWjEL98TQ6V&B$Om!^ zoE6}z{N*zu^GOm`W-fUFvP~Td0djOe`-~v}{@mbM{vTbCe+2zZD9As7SFcHW+&UCB zdC~DTP!^$^h57mGOarNi$*<^WB8GrVMNIlmGA9-hCXnIGWNw}sUN{BLgV~iLS<^3? zGjHa)+9Om8`ysoF7g!V|?7K_JE$Rz|$R46d=sI?Ws3uK0nT`W^4*hdTbXRTgsl#(O z^~luRl^hV!&A2N2I-ks|JNzZa^Z0bC`0iQMPYzRw5rkW#3gj=gpE}6Vo_QC4JX+WI zNoJ7bj>O>pdH3M?WKN!BMhQdwKskSGSRr8uKlX(IjuprPNXf1hoGBL|pz2uX5*n1` zPZXBMul@8@)HS<)iJk(KY4LTogUKg^6 z&Yj}Rs^^pA;*NtFB6O!J_#27J_y`J(CtuJv=21HZhIO@t>_MP&H_i>%M_14kffekzCfS$;nfS-pub6AeLLsKI7ybf@N=}v{$G$lI3W5>VNh@1 zo_&yeIXOggz}GJ$oQ~%5GJVv4lJ$~+apV>yyPXbayC7w|QEfO~I{VwH)AxkW>yQ5e zBVI!h1S(=3AXQUMZza2tyOQj0^xEC3CP^TcZ}4U)zG+S!9^^Yr?6msnt#0J>8bKA` z`9-TkNRJ63r)s{*RD#@^%U76z`qa!+n}DH?sb}=0Vx-bkf4ZqYq@4#8_^MrWeaAUVvz)r zX|JI~dK7N~0@rb3jB&J%R+p+|ue7T8Xe-HGhWaq|Oe-Eat)`G^+sPiBe(2*vY{_0B zO~AgOM0~Q+!o+KH!3SbQs}b& zn8Fb)8qM1%xqU#CAW?U?8aPyGVSiPRD4>bgG75KUTbkcydO2iMB<7T z0}WNB5f<2mQn5oLVq(Yre~xyA_RzG{&ASr$G3BYV=O29sDM%c6LLEN{Y~p06f9|8` n(|?EPFWIN@!R)vX0oPWqLF~UyoQQNLK4}DMflb3F@+SeGlTOycYJ1&lCY^UWv!Cz0(V0o7B6lMW+fmi)r1zjj)ejoA$ZK|9?W9Mjc@i|@ zlI(vl_Nqw`Hg$J@+@J6dzS^1br_%8xNE)8?Dt&Oti<6+a>O9?W<2C1MtJMgqE)5WO zs24hoEqR*+P2aX}bp)&vEfA}QZrB@yQsQ-|E*nikR z;Ga&PT6i(`qIjX^t$LB`uY1YDlU}@*gsp`eQCJ6};)Sr~HRlCv3oC?!1wb7y03t$5 zDT=X{_dmbCy$noDVR7zizgEJ?kpnqy({T-QOU{xX z#EwD`BfPL0qEC3oqfS-78NAk(V{C-c8qsJYNPMRjtgLv1V+YVA=&<4>zGn|!2%0=? zToNQamHxjBqU0QqZ9$Ojy8nJ+4*wBwgntGscozRVkN;i7|7JmL{{#NKf7+h|UB(o( zL7$Qk7k@nc=*u2()o3{F*kj~WT3bYiO4(V7z$JuFCkdU{OPqEKq^UVkyXip0Y`o3* zr_y8jkvaz4D>k^q9pFYH48&B4E?}9`b1Py@2w<#{p0P*jz3_C5Sv*w(q!XC29R;2A zeSVU(;>88#-I5r;6h^BHjI5`Cq$}xUSW}LX7oWv2Upi^o0mjW(~zY_Ohmvm}#y|Ea#TvDHt zEnvZm?%PA3~~bG7ZR;@Mb2sxCd^2djPq|4Yhlv`VUpc&;XSu8>*LM1m%s z(bgdOxl+j~iv=t?Jt@OWQ#`I|>MCxxo=Cp;U-oYk9Iu1#k0=-jrnI0ruhw}xBMJXw z394ZcYG$#Lw39Fj+=g>`LH%#c?-EJx&kqN}zRDmk}2uOR0J6lzi@l-kJ#grqYDAfz!}r{*PY(C}&nZ?gsB zuy&+LjW+trnR50Jl3tyaO}`)gbA-&967ysEL1)K9kIy9?kI#3&dZS z0&xsbeUVklD|eBTEL3KR`Ht56rQx_u5c12ayZ_sgdMC-ADhg_LwdVibKBV;j&OlWB zX9H2u|A!gsePeLy`Cqqb#^Tk3W>-fSI%6O*lo`xG5cjad1`ax;X(3(KW9mVA{J9!@ zo?vB*9HAvr7s{S?d1CA<^nAU^Ps8;vaoM$ApT z8myLZGb)Ve3hA*%&5PjW5un^@rQKw|JT4@@n>es?Q6e0=3im2kDswc>jjhCohFlM8 z?FQVxo{dWdF?N+4%SIeJ%bo*g0IVB1t5Mi)39zIi-DMo=Ua1Hdku>I618dI(S~Bom z8?o?y4ob^z>(VK)w761Hv>H#Ca+*H%{rm2@#~vxG7;_}5-$Sh*^1sW6iCyU3yw9*4g8Dx~ee}67)N@i3g(`OXLLj%ows5uPoMwp5usi$`zD^@pj@*cLk*or!C3Z7&P8?u^ zK`plmq>J1} z2H3^632?o8{0p{f!+$r1;Xl16J#ARW@LGBtu>obj=80Ny$N2j8OC}|~w6?o?%OO23 zGEIGK<>b@BX41w^M+ugBU=|k)wKy2Z`ikzs_VJu88n++COV}9U8ofmfhzE`$tGJP2~7 z!om+{90OaCK9YUt0LX2KW)YN%i2lZ~t?jB016g1C_610DE>Q*#q{*^NEpG@le` z`7fXQvW*yvsDD34RNw4YKPYyqL*Y*_lHRh`f1QS>F#W0YzAgh|6?71x8336+2z01~av-|CCB z?zZHNcM5PyLTui%TB;UAXalcVt0x>F$s-7(?6j|v zu#2KjAB;}Y+Q{gb&)7QV-Gsw`<{V|8gx5A8-p-T#dkBX)xY2{{S3$TD>&}L>A z3l9FnKbh#04^iI1$qCxFbBC~v=PTt}Yemd89r>9Ki zfUS+Xxjc-HqeO-JkLn)0qh88btKV7zTqH?y2kNZ5YuG(U3U&%LWjCz6oDh3r5*p#M zHiA1IHp4jaL^PTc6)whVJOqh=k68NgFMHA2r@i*7d4G9BK3XIw$a#-F3O$85Rma(p z$ZtUA3O4s)(`_K_0B-m?pVk@cRlhr{fXBUK9hR;7m`1GJLmRhyM!4O(FIVt^@wJy| zOzCT@-WC|v>@VeJ&lP`XiqL-8;UPBSAiKv8YcgC4F2q)j!~+q~b)2U>yR>veiH>SI zSCAV%JyZ!N`7^T^kbFBeeyJ74{FIV*5aLN7hLFYP7D7O)oT?QU=-hg_jkGM1I+|8W z>4%lm2nPm3(wmhwyh4Z%_Y_Cl0rt{-P_tP1tfB?m(9%=QJ3$mSe~gCqq6#3;XHT>n zm;Pm?g6+1C10+P7pxC0Va*VX9<|-X2RVqFL#K?l8A7WXwjl~)Pa-~v_!=@dN%AK3n zKa*qStkZ}26b+QtoDdHzY51w!5Ls#H;rh|M%yd^rCawia|J58*t5IyA)^u2`Nj$cO z`_f1&8)tG@!}W*mxQ0&gqXKVQf+wC^1Ac8J_&#+v`Q3stzicZ+a$zvBU_@j%v;JGO zbfK(|WQE9@`Jea259#Ustu0C#+L~wa+>wwW4kAj z&_9YH$LOck{Xg}^^KKeo|C}9u?GFk>II92^NQdpm7HEGmB4}2Q(Js33kfn(gR0pMQ zwg4JCklkeur!6OhjK??Om!3evAf z4hN;+sq^HkP7hs3JC~bY+(O2-S8l+HzBq3k0w{MUI!l$BLOB{b8zfksi>AE!B2BI4iDgh0Upd< zSf-Of4VkkHFA7+>6L=c{gijWn4HqfR0GV@ku{D`DwDxL#?Xw|Qs~I8v;v4zbBK(0Ld6BzaKuF!uf}~H9EvO#FZ+)_@vMiu4=C_3 zYShkLUci$g>+Q|bJ&YT@+coj&)A3EA3-mfhWg^okI$AIYgTO2 zrK5S}b!&7Lq1M#>S3O>-0QG87`#xfI{N_k7KiHd`)*StTJCY^5g0f(^!5Zq@BZ2!q zh2kAtWfXcI*uk_{*h{ef9$dH>5o||$+|F`{Tu6w4>)iOnttD~{Z@jn!y#rp0;Ze4P zB(kspUdV;;R@n)~ElW72$f>EaY-NdElcT=#)=KF!Je zIlf2jV#e_?cb#(^|&bNXs~y=W`?I`4tVOZ(fJKQ37uZ`t6S)K!iYt%v`2TD&;LB z%yA!RI1z}d zR5&O`XqlO%1+FY&Uc|>JtJLVD5A6-776ZMRW1t;6N?>0x=NSF8y8m>p`#?I1=42fe zylX_YK<>X{aN2IB3w30AB{5W?aF*GLm`Bq~Vp(mRnVRw$on#1R zMY1IgFjFoQOP9;DC3wkjsFD9z)QyS-PSd0j${rG&$`FTWx1boGzZVy%>B8d+)C~b0 za=fotshea_Dd5AoSVfV#$vK@^iFi|Uqc!^lE*sNjE_9mF@DZ@`d8yT0EzXwMQj&3+ z)#;!#EbU?umP1EAAS&VBang>&73c9wmn1vAhiyWa#_C-(Z0VHV@>zEb`6098j=P0AI4rLh(jK+nR{3MMK5;#}RW?tIHaIapM0kO>%ExsN z-YS3D_Mp=@;Lvikhvy=(QXVUA@`wa|7!#e*rg# z*09${g1gVYF^^v(mi>|)zXDNK+@In4%){lzR8g_e6ZODhoj86~g zKlWj|zLCyK89~M!@88HgF~6`1;~(9@B}}>_9^kb!9#lw6F z2)ZlM$49&G>5xhho4y zoJVkYK&B8N{D*h~1pw(B8@?=l@q=w zQW+x9s*WT@79PqvP{e_WV(ekiY;!b%p;3f%+9=u4zz9vSiyB*RrU)RFY-d7})pudN zmP!1&#(g*U@`0Y1QBj1GT`^}(@Y}fw2C}&X72DkUyGQ}U!g-_^VeRLH{S&AQ#mY7d z-`)pny-1~M7b{DM2;5YgX_RmkOfl;zDPV`i%-Ga!>gh~h_zAvM1t6*Lnb|cfW z)~4zu{7VBMokDYw>gvcS;UP0lVg26|w~4&Q6Pa~LJX(zTANw+<&Tl-3?0s5$&*c4o z$GqB`t#wVsY&E|6AETd@-Z;jSWOMhedWze*?8f5mJd;V<|4lIGw-{2yM3?RcGg+vm ziR`LuR>JBBhTyp_^xZe1>5EE~oR(qDdw||@?Pj6OvP2o2q~F^kNvARYE+n1rvC^YOaGbO%4vJIf-tuU1jkOjbpzIWL5$4aj9m$&BBk zH+2177`1`g8bN-tuR_eFJ+d!;Rrg?D{2R6-ll~h7FI@)K+y$qj{mldw)#Uzq4h}gg z8*kxSI5y9?k;+x^OQ^%eUb?4{X3ksdT>+lfO__}g^8fOCvyf(nvYJtA;?%TdW1 zClX*bP8Ntfnh5~$N#LWL&H5;92gs$@Ui(}@IN^j$Jq?!+cj)%IalA{p#fiJwJ(p*h zotqkG!t7Y)?o@Xybg^uoqCo_a4@zWNQ~X43iawT&(B9Ko`EiW1m%A7~`q`F^C&@Z1 zeJtB_h6gf!$?ro734iSEpX$yX79R4b&Uk+*QWk0JZ1QQx=%>~FvwhK+lLvJ>Q-k;6 z5!llLV#gXj2m7e1#H0r$BP)p?XTG+&|IAQpkOlel8cz2W5NnzpP|_|&L%A!a|JG1Y z%4&2P%EOK=p+=wOfihaV-^Pr1OzAc7nRZOl@A2_4Gp9NnmZE2!-wK6SmM^mY3a4ub zMJB58P{2$47T5lZ3&@1@$$tr&`ZSlriRvJiXD_1q4t1sf&ceZ9T}fG9q6m}#Awc+2 zx01e#Y$_s@Wdt@kIQf_=&SQ<#3~}2I>0GEhDa;KcUvSAl5^U<@W^dd^JP>4#~TnYxl z7M7l-@6ucoH*e&qWz_d=#$-BSlhyT7GN#Dy6)M!yb#&L$)J|1!iNhXoVVLc4OeN1? zW>GIj@NXzf4QGT|9fbbSUT|UQr+<}GF!hWUom5y;EIuKyXbteq+yGgVnzsc~kJ7Ac zsxD|f+KU|IKiE00d4Mf1;X`|)TNf|l4{1@ti#XYZ)HAad0{&}X1Y~y0#8y3hif=Pc zdZVvb0OU{5&-N*Jl7W4SdErwG$m1EG<3B(|H6f=n+;5>LPp=_ejmd-kVi9@vk_J#i z_43^kKVwVt>l@6L67IU$(%Vl!y$xbck%o-z&93HDZ5V7tB{F#>TN`^z29vZW9nv{L z4Vwd0@n_-7<#%n_=hs#({?ELwC))Yg%)eyZJJ-~eK<(F{yqVVb2nvuxN9hm1&FNkM=EemZ@owv-oY9h zwe-v|dXqyIPwE~VviMT~Z@jJ_g<4|&ht4I$2lleYmS1wUEUGvu>qYXxpQUy-ezCKd~s;UKT#c>c_%>kfP*BB~t z;BI;`jz25%u7oMXM|Jw3^ALZbP=@?a*EQ;jDtz+gWgd!4@L?!a;e&fdZd#8je1L

Ym{&2*UVn^?6=omWsBc)XS0ltLSIZVb?NPxpS9?`(dRwC7%3#2>f6Ke1Ctv(1mb+ z*AQ+(Xb)?qU-^C!?5leu*sqO7uoK<1V{bwgvwD-`x;f2hA*YW%J1wfirxkrk8D@&1GzU_zVI#e{Ux~9xZZ{*JnWp9j9$&+EQ z-3h5mDjM%2NkHc$mkmZOU&Wg_0`;%{$>5%3_JkAE@2}m*lc6yKt)LLga?a zRjIa|4KB<@R~d1^A6o_v5{lyo)-?ELg&Y81P(=Z7dZixF7a@(=y)O$jGmgbF-^sCz z6;YTQW_exo$N#3Gh2ozSNXS^;@8xFB>g>TS@1J9wy;$C<$&AJy8!mKkwx7b6G|zDK z{{dSOve^PZ^L^rmK7`DM8m5qhMG-u6tTE2NtpOeZK6;yA+lC^6K%Hyo6+N;WKN_*j zv)o`}N%*tGQU~B~e+u5YDtb@)1f||_KMYmnsrZBGrHqWVT}Lm;#kshIXMf-+pF8}g=>z!WFH(Y$#UnpiUMnwel}U{7 zvFrK^z(M^IfQZxkyEa4^1kDIc(F}UEPq^X25?!l>nM877&7%)5(?@ktvEZsW`M)O4 z=q0bGgElux?d4&#Cx;xCbPozSyl{fPh;CvIKLM@wNgVU6!z1ADz*rwjq(xADAn6;h z13+~wk*E}D0*SIg^!aKanN})u9Cm*3NhL&FrVnMwAIKF&bq&!rpE!X}YvGY;xa?J3 z#M#IPK|OMj+Cle!_<#wuF>xFuBSx}NCaOq_yVmrr5fsF9ZX%ZnF$hpce3u*SNu#Y( zkxrG1p^ivsjqFXxMry(0(>e4_F153zs!T*(WP>2GE8#7OWE}NrNxDw=;$6YBWm!E< z=^fz>`6U400j5g?ce;}!zat1~OyOK*zPcrQTeH8Gn|-IBHOQu59i!~U%X%ICtbO(F zn}S0Y7upWg3#Uk@5h~e(%2$8sgJZen+J%kt2!4mqCJ=ly*VRJq&r++taf?Ba``36? zS;E*3SFfPO-$1`1k!vKk4{}eUh{{fxww9g8cGlTEWJ$l$s9iE`f4wj6?Dbm?r)Gd` zN$y<%(i%tuq@vhHhyUJ40F868&w-J2G^Yg>T!$>(XbtuUBf*9e$3GYyYml3#knu^B zmtngL@_Ud%=#{0k4P^Qy+SiIi1ODCzm6cAl^6(Dg=qUefHl#|S=)fd4Z`z^uqT z*n1_4F-~y|0CSfzOSPu>v)mND6^bQL1Q%=6O^OQtKu~6wB#)%QnB+8B28&7b-Z1s_ z1=regnXayuagyaVtnYnwN2)m(rcQA9Ys=~|xkQxSnz@1JvwX<-nEEc*yEU6Y7nXc{ zYSewgnH=V{|C#<&PP{0%r7QGyl{4&)*yB^8LFL^G^r0FqzwX2o-!ipNkyTGID;idw zebaH196^N2`Uuk*tlT!cSz$sAWlh#za4V^LWS5qfc+KV}9Z0+gQWmeW5ih+?iN|3v zC4#?sTp20KV`nfax|rhyEk(BdBp0`TW#mMpH*yFSWCgaErKw?r^a5$E7%5q9GB2W(^SJcy;{P~G ziI6StZ>&5m(L~r z@Hvvb$LeyE?SOFBIJatl|1gp$k=OC((i5CtE>fQ8^Tw+<`G^tpok_=&FmW55=kG}i zs*P8}&o*6c-IpFwTWC4f_4KfMLT97&*)n8%(h}oNdYrz4hzbjF32{`Qw~6$+iI?04 zs4;3dbV8iA;3H>8ucuS1sFNGHxOR_`rpOnKeTTDC4-Z7U5%W_pV?V7#7cZ`F1*uJEKXny9Sjl0Ur`iyar!?i_7HOBJqj*8hSk~JLm_8AfmS+7qv8c)Y--g0{t;~k+d!U2o)sYlOU$CD|Lqw3L;2)>|+q_i>@ z^hT>rI@L~A=6_^94)E`XvoFhD6opY40pMB#d4K5yfm%&E=~01sYm{*wrIVh{y~zzx z|4j&LdPIzCU{Jju&c4WXPLI(VVj#)~iW*o`C!KDfl5rbOBv&r%r2D;QC%sRUFenSz z!!(Ei01p$8yA>=G7zt{MA^eH-2-P&l6&v*^-A~z^)3x?`3)#$)C4pFe5P%zz;oG1A zkMa{{cA~y{)QY`!Ei7-Y6GI(Cv>!QnWxFSH365Fr1aTl(_GlTd4%IQDc!_}WVA+V> zVJwE^pQF(jbXqp!T9t7JqJN63R>DuA&vc<~l-H!uY9RR`e852ee12bgoa7Dc)m#N5 zHc&<^>AZ04VtSE#@#ip$H6BXX>Qy^OK|%FD@+Laa_XZ%klN*QW&j5qE1pv z1^_LQJBv@nKmzFtiC$~|{G}fPK958z)!gv(#0-By4Nq4PiDlPdtO74t;W?lX7W`zr zfyt&4cNtPt!_9@~C)3m5$@Q`pPJM7yhT{kh*-nqeTc~QbS@wff6iZ$8!M|g4VXBiJ zj@MBKzx-MoQXKv)l;b(BUyqdm8n!0S^c-gc77=6r%T9yM-x^0Jcd0%%3*#88B(Ti-vR8uyZvg_|^AgN)67{p)wK83e zZIn?Jhx9H(eVj%nipO4KMd-Bc^nlmA)4ASWPA7#nf%t+GagCiT{*)8!`8{YSEbcgf z0%s*qw^VJ+TOnq5ezs=Lr2dM1Q_Qe}0bsJb}9< z^$*jZt8~iv1pVP-Nj`M^IO1mY=jhKDXr4Fmr=3pG{8XWw?G!_>?SJ8Io_w1p-sVZS zdBSa;Y?~+A=1I1Bg1755_%;u`-S*GGZLL8e?HicLL|BF_@QM7hCZSy!&W4anZQiyCIi+Dn+Otll_wV#M~ zAUb4XeK~AsvEimCau0QDR0tKOkDE=YS^3w!nekzjqND>Ib22}cd;{kIinbc!>NZ)F zLsgV#66_08d+?fk{tlSvt+4*NOB=o~9U~@%c6#pm)1M$~%XNv#=_0k@b)NqYMTpOc@o?LKF8Yz(Vc9+uG^>qv XjdaN>p$Q2uDB~l|1vz@{<rH~}=7A(X668nL#s=Aq5hI4N z$OFz}7rVgjcg}s(ts=YFY>w?QtU=7EtLol+?!D)I&OP^)@gH0LA%!Zrs(t7 zZ$%Z^{&3_rVn68U=H9qB;T?XdKjTd%x6Ojb3>-l1edLb{TSwfv6TU+LBDq-4i&=+}EOW=JzScijzbukFSQ7u{$h4!R3h!=Q-;i57yc+nE=zEv#YGjRim*EyTSz2z|S?P{%q{ z!U!{Z@XA=Pjy0IX6z%oU?t12eeeHcguiR=`y~wp<&$S{zW5sU6>-Zn&xskOM^sJU^ zhaK0k?0V3PtxeDESev0A`<-=aQnGva+ll>#O&ev^)#6)mz~70E383^{#ahK+{4DZ< zUdt)9{3y0;K++AOIGUq>2AdWdtz%@rLjZ;mb=e4AJ9hPF9l*t(Do}#Z3f3%}KcMej z$B!*MbljGUc79wDSaBx#N6h_8uYBy=ZT1r9fp7}~;a0o{39Y^F04{rHK`?K_|IXom zW&CdzcKk>S$Ba5akyoz2aIe1ck{xvX9*$r zt9lr0qASY=8h{!VPPR+HRK3ryQ|QutSl;_S95wdgsM-g`8BeMQ$#EjH96LOdf0_ca zGCUx}u&#*D88J>~5aRKR?i$!7?^ntYXqQ5F9h8nO165)dLA93M?Y0#6ShE}8U|V|c z_TN!DyY~-2JB9A2)GP%HZ3Laz#=Js%Hiw@?55Rw5H^L4iVZRX{w|JJvC0tdo=f;KsUGmp!VbHc1 zGz+92gt0YKvhbhAusMF~%~|Vn*lEWPA*|?M9mfr;u?zM9-c1ikxZq7MY*p8SuryoZ zt~cFqG+J)}#W@7pATlG73q z=NS>_H=(<9L3*|+o01&1zDm6}71ctSI=Qs&f?$DmBq46a7oZVA+8M&@cP|T6&TuE< zODW@Gfo-?!7($l1w?eOkGtzunmVI7J8l{)UG z)quKe*)j7&Pz$Lr=6Gwp4y(ad-NjN1mzF_g(Y-7V*T(S|7Kd%u$$#;f$;NBvk z=Ewb4`TZtTXi&&xcWbd7I6YV`AREFCqNJ@wHXQmZ+;I##apQjS=0VuQ6!a^Sg3e+V zp8-CfNxtW`$Ej58WDp`H*CJJsAY%;y&~4~Vmd0CGJxI=I30bZB9Y3yCE2)%Bk>jfp zIZg@YzhHc9pvC_jj21g>|5u8(pKwG;$8(s=mobkY(P00I+bie!}c6W+(YPu%f-QcEE3Q(2KC zw=%_H5;^};h#c={_9R@qPv>OGjncsb2VUs3{0*V{vWB810&E$UDyAW9IRUKfP7qrj znLc)@R-;XYa9#6n)gUIW3!|r2<2|j_*r>8LeORq^mKe3#LaipcuGNHbT&tDH^dfnJ zx9S;eY6zAnu!4?Ze)}-00TuBwYYmol57Gs~hj~vpSHkB|)Z6w3pp4uOdkLhNB8-Fz z4@}eG=$`m-Dw8hkZ%tAHZ@vi&Y|^-=IYcs*T{?yArF1=we!e5uPgaENz$ zjtTL=X#c|Kz)Wf?F#0Qi=cqv}3ZTQ1e2gB}M~5i4V7VrF8xa=Vk5c!|`4x$y zMNoX#+z=KXdG_GrYk_T{6WLw^QLzlQG$SarQf@xIP%FW28#H`a34$H!*^osDCMqQ= z*zcwfqmw4g^g{+LvDDbJW68QP{~0BK@jX^U@Fjkp&bB)k(BozhZp@XWsiO3H zcE*Zv$m!)`XgE$bZRs8%ZU4dIO)${*`*Ub(aLyq()DP!c@6Io2Jm#187a_oK0D`rr zE2lgtXOdF-(CFu5ql5ZgBVwR2`u>*rGo!iSxQ?2|0O8J-3VF5@5 zYQon>2jh5#Zw?2^8x1zf{GK?dTBVbu95;nd$GAB)E1~3kxTJY1Q1hggKezsF^rOQ z63$tX-}YNJ)FEZVc`ibgko(kl4NxOuFmeYweSC1GTEMf#@0TEL&{~Uh}>JZ{> zsj2noKIU)W#}m1oHnfF3*;$u!{p?PBG&1WAZyK-x!$CQOPV?gEu$>n=%^o&?Xs9KQ zD9$#{zm3-I(V;$>M?9n3f(;*HDZhVopvGyNOT$63Cq3}rjSf?JSgK2TSbqJ6<6)1b zJS=ShceCdr=%JEWI2uA?onNFJ3qC6&LSI5xGJ`}1WD6q0Eqp?i`Dfn5 z;>}jkh-WdMf8g)afW(bCsN;{<5s5_V3kL*dOBAADqEpccgu<6C5e1(Skpw0@Jap=a zxx2`{b45g-qWb0Qm!7@!)T-63_zs*rlxsH!Z-uipCj%dND(J6D9}rHEyQIt^3huyq z`r7l)iA=1nMR?91Sv~9d74)jxV*DP)FdII9?c$|t)|2m3BUu+OU4Ke^Fk4x3W26VQ zT5=9Dz>&)`5MliVo`1!Q+bu*$c(%*@R|Wa+uG?PMO;96HaO%*31N)1`q==jnGKFIv z-cvZn6g@H`Q$XV1spE|*A0^`490OC7U6~U7J1|vA^dkQyTo~Be;EVIrjFUQt$+1H~ zx;cv$MP3dwDEU5o|91Y~U<0S|;N^3OJI3%~Mpn6QN3KAB>)h>939n%GG&U^HwULuU z&n#=nJAXmHU^>V1tCWXHJ#`$>;@s_}1$>C_@zh_l)+6c$tNj`!gE5gHHp0#e@p1!c+ZZ0j@vQLbJZUIqtR0C+rzarg$p~hDb`hvSa z5f_|{-w-q*5>g@bB~0{knuekOmc-oEPdsq^o9Qq50PFEG_xNI&*Q5Lrz*W;1y@+ON z0M3n_zEIz?bVJP#sV#zT=^L>GPWh!u6o+fE-v+-v_rCda?fG*KFU-Pr0mJvH0j&?3(x~rb(gERuFV6EgQO_p3;&R>aR53FlOQxp#{Daz$xUF zy338b1VS5imq6|kNS;8nV1FDkWH`ZIBE{+*O~2E$`}stRR6J#c`y=}m?%J%pQH9R? zUOJCp3&j%24DjiR69XzGLa-xPfr1ghoexi%g~J>h(k};xn+iiq{|I+U9zqsyGDAXI znlMU4Ak)3e%P3Q3bCxXJhjgF370sA`IEG zZrV7;L58YnvPM3V1Z(f6)#k3KbyTZXtjlpZB48;jT5|jdanUU?Np!GA+18woPoqLJ zpwwD6o|&Zv9ccCNP~P;T9(3w0?ddFG1=^`&@xkJSHng4_hq79aVf|vQ)qW^jazZ>X z+ShXJi;W`EnrK9}fZsZJmyH360aVDK0Td66_TlINzGv?!CXT2`B>U1UpCB~*(knli zK{Nxn;>js|)RPkrjP@TIeR8LHa(OH_`YwR&c!n4hc$1nyj9z|xbO>kQAsLFwjN!Hc zjk8pohTwLP^{kGy;S|iN?WC#ZaUw^wM)#i{dN#=zpA}2Cb;hC3Ug-CehrBrMMvDsz z%#tfz5VRXdU3qG((g@my-SRf*Nfgm+{yc#os3% z?&McGl^aFgoh^W_oR5HbGMSJWw8qw4s#L6MZVwi%JueoUfa;i3a)K9m9;-OdoLI^= za@2}fDU(iJwax#C#cqBce`w`@pH}|CE3X(+puFCsq!G;NzuK#(3z5j&vD7E59~Ah4 z$r)SV3!Zq2&(tYoRX@{>`AY(GXgij?!GED!us8Ta06>fFA0Bu zfPAJ<3RrgXL;9SoX6nW6SV%X*KhT_f)}2%yj?p9xI{sTd<83})L&MN(yiKV5bFTgF zQjbPt5k;+K9Gdgu)ZP%;5TmrQ?$-+SxRO_ z{N{%Y^v|xCaO!p`)&I z)?!4F4^}_hJt%F6^=iddDr-o~MGK%QC&mHi@hjZ)#W~)slFATPr?67|X85cwj_C|W z=CipCHdHvc$n!H)s4|s(VIa(GuD{)pn;>B1{`l*8{Zd@Yuh?+7^x-Tn6}T;jh)g_9 zi@aN8;+Z|~#6{kT;vG|wiGPdvJRx@OM^v8KjgKKzVMZnd>w|}hPRj&Nv^-P(?n|rq zUB3GK_0{t1Z0YeVB5@!?v{I1_xSZr6!iwmHTwtQTIEX<`4&lmN)?bpO&<;Hvr65NX zA`q%O@saRO>2HJ(ShiMREs0YV)IWeA_Y@D4j!JLT_vKZJnh=$%qluMrroEOf)DiWb z?S~G#cr*Nwh}UrEttj`|_P7pxNB`{<*AZ_J-?_YU{nE8n>+;I#^DHZ^8J>y?@@QY; zY#N!-ZLRk_@$3tiu3IyY%~|w+v*kIxTI!>0cfwyR-HDlR)2UHQfDAnqCuL-KNA;$| zJmOgC%#P_)*)uOYhc*Nz38%OY1KmZ^yGV+_=Iazmg`5F%eG$xcIMBr7SuX zQ519gS9^2I84CXHF}HJrVr~X0ZV$TMB2gve*;#q&FBfz(nj6Z-2dUlA)(UB-H(6v2 zC*nSh?<4-+h`RkI9FY`m*mu+o0Ws?;%$98ILPVaj&jy9Xme?K=LUDPTOduKfT0-WF z+ahymd7AnB^aYkqOAGu$#$fzT7e!vk(V)JfK#*)eCR7hE5aY^CHO4E{MY+rm_~2v*jwt=NuLzBb;zqy zYTWQ#q$@zxrjBJ02AO_%EPNd>6^s&5$g0M{ zu$zJJlu&j{l$DXEujknOZos8O)vM5#rK>6+{DG_}3A%tnj1B*335GVO6zY;jso6ZK zXKaX{-_&cglOt$%2mJ5l+82u@5??eT+sfk%_0X`WUC|gK9vJPvFgh&a*w=u)Hijrz zF62sz%}@Z2(NCl8S4RhLjL^*JssM}$fsG1?dwj=e_kTwR0rk$l@%U|kUNGfdSAJ@I zuR4}S()$ZZE9Fjk@KSzRmtqzzhE4MNJUwNMIedf}&OPpZ}5Fayq2s9<( z7m)d$@QuJBz>e} zk-2J&nAG!&W$pWbDs&b(vz+TDd>5&QMh*9H*6Tn$NM>>4?oPe#cS@^^kAuvHQx^x> z)+w>3%!+L5@7kNHXlPm6DvW$LNPm$O7u21il4x`y9m-T_ljq;IRQ`xApa!J|`6j}5 zMn}l3XI59QT2YKjA5n>l(opsYa`36Z2i^u;bqxt9C|(*NL_om?KCGe7y|XjY3^&;1 zp0#m|Lbs7YjSAE_&?5A>wrh7HYkCDf&ZmQ3$C(y&5a{*8>UC-Q=^(88h{ScKE7lCX zJFnhZ(=T)cMfx9fsWob^vNorp8w4iw!xH2 zoOy(78LB%*8LIS*^Egi=bFBG`5I8p&4xH=$#OoQm3{{2zHdo(>R~?o}sMNPZKuM$J zE4h|~7oSqEIoU`p&ixXvk&~k_8;Lmrw~Zlo0}do$0Qa!b^52gR+*<^2B><=C3c!J~ zjQ)3n3fmb z+}CLRceCUEanGCd_l#!6=%^y&e}(z{4S#RgadgVojEpa#df%e&Tv!lZqP>R5MJrfN z+but$R(hcgDCNJu8$CzB*)WeYf$75N`3qMsKCueh6)S69zqG2e4G;~d00rB#ncgUn zUABb93%fLH@2V(wHfBycrryy1&;I(lN6H04nWrcDNRSSi-^Jf=;p~rZXZ+PR|B;FP z+WaYFPX!y<{O^42Z2mcj38R80C;XAxS4JTlie=zTBo(1svt=zlBmANjPqy$&PzjZ) zIwylHq*%fzMv5XbzqY}7_)@m><=1M3iN>6+`z5>uh8RW$pq#!Dql5@O^x_nfC zRAvLKu#nWY;ksb;7s@NCuI&3*s z0w__o%y3s6G@TXQ(V=>S!KC;Q4A@i=JgGDBn90q=qNTpX4-rJdAUQ<$RHfF^4;8|y z{fH-q>-4>Olw(a3KBMVl_(hwK-m9exTT(qG5Tq={STu9c``4>jBX3o z3?MDRkTgJ|pGMn1937*yXY&N~7X-c_ph+b~O?UkND4d=qBf1@8 zusiF71JS~BcwME(m0CNRWqKXkd_V{&IU(4KQ=?Du%+6|<(fKxfPS+ik>r8D;!Cy)r8vT6d z=s+IJ=z*zN$%B^KDg};kfqFZ7!k1D{IG-Jq+IFfMiepJQwFJWeMZ$5cTol8kMHJT! z;GnvwUWsdPpxWw^Zn-|lJq^Vd+BrX zaf93GC}4qfQZi~v>XH~?&tMGXv~uxJbpu{opRFJ4IA6-`z2P{=Tt&ij%GFhxV7k#4 zbM1GhVH%O;;kN9tVpw)J0^Tz^EQ_P#k3mTLoq#v`1da>zk;pq7OuNPrJ~%o&CvtQ% z97G0rDV8-M=*?)Kj1JZ59f{WHyLbl`ZEM)X1Ec*XM~CgB-%yUh#>Fl?Bc<~EvJA)0 zkC94lu=9eT%D@vFg6i2Ntk{s2a?Q`vY74Dwz=;i`xv@*XvFBa-99k5qW@L%T(93hD zXxhKV4UE{!ufwVKnjG1ndK?xVi6Hr;j~7yTv+RM5*UKRe8Bo~mCiquGcOMGs89ynJV%kTin@(ADeLL<3JfI zHjrh*WviKUl1YO?50DNx=fX8eL_DF?=podCDwdRoLy3+HA1 z4oBb}D9>e+%@GG3xW$oUMCHQPe383Zs|mhFwwSu0UYJ$H$N`SHhCuK*R!?Dma+0JN zQuHhAEjE+hjpAe18=+6-!ekmKs(cEDC2DOus8xoF74lY6apI1yJ524HYaF_GO;^lN z9KMoM91Lp-X-3(FRZ8M9^Rdy_-{tz+-EyMQ*>YMOebWp83MK`U=tLdth;WfBx!`I6w!M) zA5bj@p;YbOFgq3g1?2eo9WGuZx}z^jn_xXe)_{tu%Gh8iAW~KQkG&~y$s3^ZLIgZ*j^OrU+=+|2yIe-lEL^BL zW|T69W2*p7?TCTJZ_Qz`LDCQHb>kGR%VoTq3#cjPf506P?yNrg#%1BMeO3{vVUNgE|9*TFceEu0!qG|RXQZ}ugQ-sG=i zp`+4ARY@dI-hzEnJxC^meW=h>{Y!SaAuCcIC2{ZXx!~XLL@bi-{f}XOLclyB2*^ z&?Jczx+V11fw+>IbsAx0o!5h|i|iH>X0;j>i9!!Dah3h^ByH7EppsN`WxxerQod9w zcUE?sICI)jrf!h>$Mu45JNSJfw?b;4kM8Ub`>9+{yUQIKo8``_?TbGgh+1D(d!%5L z`m%Uz^!3@%fm|GY{|x{N)*Av(poyBq82vQb{{HB|pWPMpjByHJ9O7E7FOCl7ghcz4 zgXBR;d0LTH{V4Hf#Y%u-1wP{;O4R)mO-P8e!I$U!uRYKDAJC#mjG5lx$7w=;&ka&< zaPs9H)9?k(XVUPwMBUtg8g=6PGy&f@pDi-Cx2KvLDdy#ixNip;<>{q4*<5jp&qS+^ zvPIH{D~_h9;oD@k0{5}qM<<8%F%3A``<#I_DcvMvzH|Pey*Zc^DWS}7{%mjZ*{6ce zIx2{b|uLi)-|(xjoGMqd}jrDe7$ z&We6+C+Hzpk!<>ngP&EzJv3_}k2g<}&qgU-Mn~e?=^KkR@>$?F>ue5REa=ka!i>G9OlxFfE9y zv;nkStOFga7&FW-VoJV6Vvjpiw3;cvJs}k#L;u%L2J8Q31Mg8Pn>|PJ-BdVZc5?$2<%$ax()r^aD zq5Nb53<)*n`YYavm1I(;+@lgbe!z@`k!!cR_;EB00#r9aA$0#%KRLJntPmhn>Fy4E zP?A590)}75u+3sA=4VGps8VVXmh+yZge&Uw z&++75lpcwzqV|CLXgnEr+v&8If)u!B{^7f7gTOTm;-qb&@98B&ddIRQk)`5sE zWYfj{=T4TBsjl0t>gxg+6X^+6u&)wnByU#N9N=+O=|T+%I+Y+?2SuHxFBt&Jqg2Ls zKRJTu^XDFV1nW5!t~GMq)04FOx2x{S2Sg~l0jK4 zaqu0d{Q-F^B{E`ja0rmt9x=U8`g;T^R z;Iq$t=C=uVTY)Wzag13KP^MjX9Z>KVAn;r_#u%p?_-do-wsG@p755Af-({%prJiZW zBe%6Cc-o!hklVT0U+LB98V=$nxMdZXNT>Kg8*x=!Y{7VQFMtAOA?J|#K+OT-=Ex<0kI~zj{;}k9WAYJKWQ&+{+#A z;SRUH)APa%std!PiA_YRHJgEQ%=`L~H&6rhcUq{b2tZSOnaF uU^cR1kQi8V*UaOi`Y|K+QTYE_J%P%3Gqz{STtw{D5le^SN=Z;)+bZ| literal 0 HcmV?d00001 diff --git a/_build/.doctrees/tutorial/database.doctree b/_build/.doctrees/tutorial/database.doctree new file mode 100644 index 0000000000000000000000000000000000000000..aec4389deb690c2860f65ba95bf33f144cf78ea3 GIT binary patch literal 29278 zcmeHQe{3XIeZL?6x%bma&f&PbbO<4~6MId7LgEmLx$~vwa=wet7w&}6?(FXD&a7v5 zHZ!yK8H!2^h&y$PDzdbK{y?;#R;6mGP}8a^5)u)rXpyKQXc4Vcs;cy_Qd;#-nts0D z_ukB#@$P!<-0`C%(mA`c@5lGO@9!V)%?E}*e#PI%|3$}wmhCiezcU?;`{rigwf(ZyiT0sI*>>EDZ#6sb=|o4VdFZ%7UiKdita9jh z&A7WgY>(KZ@99k2e$EZQ}$u|w0+P%6J46W z8d!cXU$JVIZ`utjoIhs;>!H`0zwCQ;Y*;YwwXEixfNj2tS=Z+Qbub^cL(g|icfKNb zB<}}U)qNL++9mAEIF@PFe6wZioBG@uw$N;~T&HXjE{sjbb&Ym_heq+r(@!~}RV)~4 zL?iT!0JB)s!Vee~EiVXzeD3mAXrp`C!^$y8Xd9)rr1T`SL+oVF*UQ+b3ayI{cf$zZoESh!GbL5RG8Qw(oSJGjOY}XqVwDlnWPBgKN{yR(w6|Z4B&5m7;M$t6fYC$v|q{*T~_-@@G z(s#nnE&h4a^qcrN-rAxK05O7@nZ+Q>@Qiu9v%=$sreCu{Fuqzh!F$<0W6y%+MhMA_ z*RhzYdl0PEb8R%>oHiiK2n?DR!qy(XR@%RBpW>(hyw}{Ynhs={QL@S=F|iXG70(Kq zQ=#Eo&$b8hG|a%T z%(5-VupytUW&mI@LoxuWJl7Xk4VD>NOD6Uk~)Qh8&!%5(zTfGEnSnhnQw zOh3oE%?X)sl{zE+iy?wCECWn}iHfe-thLP=v}dBvyzL~_n zX@DxdIHq9N`hQaI-$xuv&6o^fFGr`lC`FngtrI_HUy!PBe_oq71^8gHazexZcr+pf zwPp&;@O1}hZH2r{64N8ME9Qc znoU@pN|2vRS=*Dne@{60#lc92;3G@;>!LZU(UZEii~f_?r|Q6}1&fgiBff>Au`QUb zp1)3ym^;mwFD10bG&v0oSgJV>-04eQmZ&AyDfy=FSiy_|t%q^Tz6G@ieEnGC~ zkDV}YEH<}tP(;+4)g;Vus8BS(R|pGygQ457DzK3mNC2G-G7E4W=o%-;m0d4DE3*od zie(0^fu@I-;{>)@f1TTJVKn zV!%EDdVqA2=hC`?S_pI0g~Wfp%o4Stb*S?ve%SU>yN@ z5VSxwu+qr3X@)Vre-c1VF!a6MW601j1b+?e0qxtgeBG~zBLSmjvy}-GM8}IoHp~6_ zN-5vkDi($AdY6)0^%2-=(lI%#w@frkeT23MJPouWPHk_B&|qG}t|senhV7dkvCI7TL#!{84?+<>Z4h+?I9G zme;2mN^`sbn|ao#<#M@-RW;zK6e^|ZnT4Ez|6sRIRZ3HA*1!?3iKp~SEng`aPZ$!C zycAp0+>3sv|Fj9HLDi|fd+OZc+TuGFuPjZyXExOqRuyDtft;@32{r2F#nmfIg>y@1 zpIW*#!F^=l(eq>{0056SJtM86S1|SCk0~LOz^G@yRYAX~!T61a zyAZTYic^lYAc)E9C12m8(B-Wtv7sn7L6I%QFKwr0yZ9Ft;QCYakNEx6HhxcxR05r~7OfFJd^QbtbPB*F6oB`XmfJpR_21u+TP0L6qb=i3n8qnK9` z5jYKS7RcLPDAtNZ+VJsPRvA9C;gu+S2yF(Xg&*2Y2UZLR<=EHOG#q};A$q{dPlWqu zMA5TB8vt+GFgXN^Mx`yI(RM?p--I|#EBQ=W|W*EGFxj-L0_8`E}4#I!~c)1qzb8q})49fR~!B^*+uxR&kd zQLOq3`e}izA)cXkB+G8w8}{akeS?-j)T9DbKL;*(E5m^0{p0^=5dP$%Mu5KeNZxi>+jk8C5lShC2BP&~enJ7ufmO~mUG+O&mUs@Yb%6tHW>_y6a z6#e!jWm1dL<;@c0%`Y%CkT+jqdGixYaT=azQ96I_R;GL=(|>1~5^v+$ognvqOG~uo zAT<6Lw6eZ5{+E5%J|K-hk3sfA<1e7!9i;IikU^S|NCbM8Um!s&2Xi?tAd9R3$lhr~wd&7k(>u(pK z_x4y9?ZH%!4=`nT|X7Lgba^+w`KYHV2NpFhdp9iM7 zggUY-AB-b`fG!;QK9M6%SP}t?B78O171b(fR+K>uggWR~_+=%FmX~v#b>vJP6njXX zgL^}5gwLf+p|a<;8;ClCd8r;@I~(284VWwsJxDl{VpWzF>(pKV=y@29i$O{IM_)Dj^@@`Z7_lZ)Y}Q} z8bvXSMHTxZv29!B^?-tWDZ#%9t5+GkAQ)~%goJi*eGo+}7IV}FE6eu) zIe(5Fh*);sIN$cken%DtNqfq&Q}s}e_EXsBy4fvKt3u0Y;Hrp$DhblMg|&v}zn=z>XmTC>0)xRR-2!KEH)B)*!#$j*XmMbXb2_psyI%ruTp3mWue3NZ@u zA;Oc^x030*3#jcM7P2*P`z&=}L~ZPS$rt13)NP@)gq^eN8jPJ+6LwBIME6Rbn+v@; z@CrwexVkaP@2Vy$HKmLx#1f}OeHzKSxClZfBPf;HC(k=^RwO)$Ki6P7qI^**g)YA& zOaH{K(1G-B{nz6joZ-Em3Q&+RLz+&c=4UxQORl1f5+Yae5Sg`B@DLlB4@m|15GhH7 zaE+!VVwNQ<7mGTPZX?-5_PB^ANEufBk;EwQ(ur7=}c=!wIyUQ#7V_QK1+m5{&T#uYZ~us;^|J{|U7|Rj2uZ&dF$) z(bEUA`sdL!3BksQQ~-@i%xXh?`DH;=y7MHW!MY6*Nt_WfT~Lx*>JWX^`hH_K>*TCt zyzM7@Ql~b4f7k>O$FR{?t?zgD4%<5gY`29m5;Dy$CK06lf}`)QE9e-$Ch>X-UK zNFntsIuU1@1K3OrGY_M3d%Ah(U~EKB$aHhkT-(7BYS%M&pyz@}hEvY@0DAN@o6%0s zITz98C7`KYs-M=DaqZLia&Gm~Wdn)Yr?v!cN6lURhgua%t7Lyt;gGarL@!Vd=WDcy;a4@(Q|KTv}P9WH5Cg@5ESJ zy0&IqU0Htm>XNZ?Y0X%<`qWd@poOw|RK8S11NBR8COb1hv#XiSHu83UK?76`PSYv{ zv9^41>B`#T#mg~J#<`{Qi&vjoGtORJUBxO2aTDst#}d-8(&Lg>+1mc}{H4{U0gct(9odk>a%Qn{^2J_Wt>CYVg z+^XmCH#!JG(y6~5AGalv6DCds8s(DTAacp|H>1-)iDS*$sy~iSnQU=%d9i|ADeMw? zdP6y5G8(~WLHstGKrpXT#)}9fBKIN-aM;jEjF!chJ+dY>AIV5f%|{xK0Z>Y7m;usy zKbGm;*OpdYe(4p=2!i}E!c43|*1<`;*C47gsk;(MI5d$_q(t6$o0Z5l zQeg`?sAw+~(=0q=yp`SRG-to9XiziCOK~R2w~z#KIE%#9LdxETFOB-FbsV8cYNpAW zthQYPh1K#{k38~Y(Q!}|aHDE>y@?V*B>uU`79n+1T#A#82qbVlK*egg-j)iYYw<>z zjnYbsP&PzWh6JnPS1l--hKsAEq*!8|s{DKmf_f&d>LgW5i{2ippWD?A3SAd_mGxVo zAE^rO;)pg3O+FlLy#l3I9^*hH{iK&)dUm^zknQBB$Dn_ZtCZiW+ zPC8{z6mjZ{4yB7MJDV5=ofTI>K2?ZREK0irSr$%ZP=S)j2#TLzD?#8X`UHQ&I3XODm{ZNm?loWKoW}N3mwTMxu+!4 zb}@9K>msw_=G%mMVSpY>ZAU8U{!e}BBPDJ)CEhh__$>^w7jg4l^wY%+&yW^3`ib8} z+#E?QC?#l~18IDN;enu;8W8gu!%^QJ66cUcAd2HgCCO+b{2(*J&N3&4_js1>v|)D! zjL9zuD^~(I8}cQ{hVJAd) z|IUlb%GP($Xo3Jw_wfq#>Za=%0Mg7iprE~qLH0tFW%SdCa%f;d`|94SOG(||0QJxo zb3o?ZvRLCz(7<3QeRXeA$)fUogcpIz2}MsaVQI6ypW5wgm+w$tv&DOq#=V|U=w+CH z1pPDw?xMb?%c68ylR}(+rkl~JFL*F9LgOW3Bnc?Ffr+Vkf zDIwh_Pkv@qMre>K#vM20&@Coa>q<>*u|GN|O+vk^ZUe9TN@zP1qL-tXHDpe|AkE-)Hje zOXhl_;j>uLe{h#nq9HQlECa;TH2%rZJwD}efY7IsL^=eGKsue2oK{7D;*>G9f^|=q z*(s`@&TxSWoc}Op5@^Rt$A)izAUN5({H9$8f)m}-HJkWR8N=*_f;b-B1wV)i za~W=qqkW`|gkL~K(XsI6@NF4kjV47g=mIOQ0Tn@78PG*!N!+TS#CBqhKk>5Q%UX92 z0#%YZPWD`}CQ7HN{mxci|LE%j7-TP2`Ww(sGx7$HzMd4(*De@K8R>rn+BFz9ghrme z{isajBF&<2V?xvYop_*JWu$`AlXv(_%U0I`&QptTN)$ zU3Js7m*-JLzdaGc&#h126G>A@dTA~2e2b>p3@&xj>z=U2m zGQE3mld|t(pvMzhNyf`UGZ_8TW^|?hUtAWKkC62%B`zKDlE?V9td+3N^TuTtmnN`{ zEY9Rt5L^y9ac5x&9Lyz`C~M2Zv*25AQj(giZ@~pX(2pFBWQRYxD~zcV*I!8QaDU5d zQYDz?3k5bi3SBR;`7}WyIQcG-f707)B>H>10-2nMPoYOYMFL{ft+40O<+r#?+6vns zD@?fGWNfJ$X7CYrw&e49PPV^RoDLM32ha;j6++x#A<95FFPc}k*WfZ2Dx*LN4{r+% ziGQe&pr?X*h-{SS@}rtw5DWI?dF;vUPTVJZo$xl@{u7Gs@YYqgV!qPq4S@ zCSWle$?+&|m;^o24g17XC_vFCo^pCQu8U#GaZa5KJ&!cGLUaE{3Fm%mS8PDhlyAm8 zIGXZ8$~O4T6$&wv1*&CdjQIKhwR(==T=qnM*pJxGIRewu}% zXjqLB#wIrs*LsMgIa>QhOI)Ik!?ivxL&Du+IkJ3U+&CLZ{V*I>bA##))pf488>ER# zKsd9`!AO_tmAt0R3~6^Sy|ORbzR>;c-xpLO;%`3{bfPi&BN-;w(t`JNBPW&>^#>8^ zQfE)BlfoKZ~%J7xyIkX_a?uql@$pfW#-blQw*uYdG)aHO8cD^2CZl`0jjti^6B%OA$Z295 z7;1x$2>(%nr;YaM%xF847R}G3btJV$ZOlFpA}^L~g#vC&J<`Vb!rtL}RnIL>Y@;lQ zgK@w=^rDHAXOU)bnz&C9CWnyj8;-RZ=;b4N6K$b?lUb;yCl2c)bvK-r>XMpQn^LyqG`?t= zni(xKlO7bhh8|=P-ioEdD^XauKR7Jz5VDROT?|C6WMg8rKPPBg>rEmg-0_I&ugPi=@ z_Fa5C5_;tVy?}{+1t`O~aNEbLXYQ(E81itmA8$rS=+#uscB62Ej?{E+Mn?l&7trEd zAvy*a@RWFBxo|e{q(Cu%f_e!Q=93+8uK>LjY9%`CTXfBH!NsKm*vU&;qr-4LlhKI?5I;iQsdZ*s}s&dgRdyeemiV z9D$m9bS`l48C0wPSg?E_2V?oZL!3Pa8DMQ?yvpX7*m-S~VIBn$pv*6sA?j}#1+yO& z<0deu-lx+)WI9L3X$_#gz{VC)c)5cMv*qhEu;UecKY&+=MR&tx!$IK!4sd{SFb!_t z$3Bc8#fw|0X-AxjA_#jVI*J3g9*+O2N6`TX@!*;nw&Yh4@xxyq3%Li1ZH!4HJy^Y#Ur1V59El z@8WBLjswZ9J%iW)-~svszhReo3(;pY3KPur0&W&?+yat{BzGC=3Hf$B z(5hP%GVNA$5Wxw04;{TfjHC(J7nJDWC0-QHD2P{`Fx^Z5C{Pw&ctcbJZ9~#Lx-0dR z&gJuCj8;`&rsH>-ph)g9Q@aWq-#=-#*$Lfl-*K?2o^-=t>zhr;W{+j*O z`g6F5p#E$0=MUi4);~*sUPPF%{&o6ufZD%A+C3Vlarl;adZ!+bbj$wIP5Wy%d5l}! z{}%VX#r;d(q0`G;`9iVKPXZ9o@} zo|Vs^!}iygfR_uy!G}Am;BLGg401vqJrNVff-&{@Q2dx_@(@nwx$O$^K#g9Bh|{)^ N-BQevfzmGJ{|_8oDgOWf literal 0 HcmV?d00001 diff --git a/_build/.doctrees/tutorial/deploy.doctree b/_build/.doctrees/tutorial/deploy.doctree new file mode 100644 index 0000000000000000000000000000000000000000..0b3bc5a84d05c8369428da8ee62fd20667c12bbd GIT binary patch literal 16383 zcmd^GYls}leb-~3v(ic{OY$8jUHYOs@9M0X(c@%EtMl1dzB9`Dh7v(?aa+eiV_nYw@i0e{p(-Khwlv6_+n)C;~;xX+LKmJJ;dcnX*0^_wPuv0mg#$))*8*H2K7&GeYLy6y9XabvL z=&bO?MuEO_kk4gU-{Lc#>$Bmlv}N*&nIw_hN)zmsc6ZRVW7^5Q<(YAem-s#Fn?3n! z!A?W<&@!#fh_z`<%I6caL!XAu5$7rAkaNm8=$z)S);}AwD6ZSA!y?n^v84V<7H=j& zSjPstAWmElLgrT`ZuK@+-K+!axSpg*5V@v@xkQs%6k|_MZyZQlpv59KX?7wrbTsna z{qg>N``&Qe*udAs2--&CFe8U!U_W4GYz%_baLg@cm#HX5ZGch{u7T}n^5n%R~%lfpI6ZDC1R>aH%t2(S=yRoD#O>Mg#R`hMd z_2b0!Ji|@S8KAq-5Bybt4DbQd(n@K}YR2cW z84H-iEHTm$Tk?So^S9h6@JVhBEKS?MmbRD|gyNkQ^g?hP8xM>m8W>nekcv=?q|n7i z3&Z;o#V`t5X3HB?VkbyFoAAZr*n!aoPEHUfuHV7h*t%zgX$$ny$yPINGges#SJ#^v zH!;5M`Zn8c3J|8@fmTGtp6L$^+ikZQ39->P2QgtuYsh_Q?5GW;CY`+d%Ri-z|HpTK z@u!US0^_|if0$V(n1;GE4Y!=9VSt={{1DXNhCDR3VM{b^<{um*F@o!`0duY|>{xD@ zVOp;XQ+bjfEsL49{>Sw7P3LD|^_*v5V9&rP^BI8zKNu%AY#{ztA+gM{?Pe3K98ql5aKX7D8?`0nQfEF zag*VW_zZ>jhxf$1#Ed#D8Sb({LhFii+BpXsIYVRyaZmCWA4fcI2IXry zl<_i8wEik+JrI(2pt7ccC?hiOxj27JPsd{+Ct!}q4AD~q^4;n2_;!KEsY&e6fRAGM zokBhq3zp?*%?cK3Q-A$I@LIWF0+e)*ATyo1t>jV;>M!!c8GRcqFR(UsDp#L1LN_eD z5V4mE-VG85u0pj3pM>@$i4rfF&fCm89(LibVujD>b8y<(yLg9Ut%t4Gw|%eJ%iiwHe4j~ zW(^wgPW5g0g)zK7{K^Om@A#cc^=-4|8uSzIJu{*C;!$b;lVg$91nx(=z&T1*KQ!Hj zazXyt_usv?=s)O-PPPK1eLoUbzPp`Yj+a;_F8?9u}uDrMxQ97gv5JnYOCd~nQ;6(-#o8Z9C~>E?}! z%bIgj_pm_4T|KPsK0uku$#OoYJ5}9f%+viUT7ZxERrfT%%J~96c0a3xUCI5a(-4uL z2zfp|k%5W=&L}UGiq2t*NzlM{p z?^3Xx`C=3b8@a7Ey#QgWP(3$^$?roX!hFkRnL7p*d>9agS?YdzPi)OS=;wCbRD9d@ zE%GMm9738viYpKF`RaR5v6p{xxSlJ?G_wQvxCS3A1W$SVc2G3woD4?<-sP% zMXR&}&t{RbNS7X9aV44EH%oNT&aNd5$6S`?GpscTtrCP$%d(4th&6@oUVgBxD=wC? zpH8(_H7+jlCE<`YzLW;ZNapWKt!7w(&8p)2`nr)I*;lC;`1hf;N#oXOninW zWq`wh*)142Cx`HrODi=J)|>^WWbS zF_H4<{$VjgAo&6aTWHkXWB7Pe+WHpjxV}#b+;YOaNQ-x5w%lfIGxZW<%k)wa{2-@` zgJZpU`{f(2zx+mH~gcYiiGwmbZ(PTxugP3ciZH!Go->}ioGx~ z*mMC3>Wx?q=OwmCIUH#^$RK3H1wQ~s>Fte2KpRaH{He}l?hcRDicW)fYK-#LMYyPPP~T)r1p5?z@!+oO!s_`*GKoL z9ILOW9GPXTy1g(!iBWDLzK)Or)w{Lqv6cjz%x^esd+qGm)kcvYftJPl3 z>GQvfgrqG9bOxk-m}m{CSe*I6&<+iXgj7bd#<1tPONKF>@6Kx5Ds_spO-1%oCsvU``H z%4p{mkma*tik5Wwj5_0uj~b88c06*pg*o^VwlJMJn3LJ?`yxd}2qjO{igH1E<@`ie z&XCb@wU5S+5Tax1N>Z+Q+@sL)HW6DH8+4=`eNkyWMXfKPse}sAg>TH`{4_JY7!4UX zqNpc9=6-!i{tU~=>u9bRbgl(`k`lm1j{Z&W|Aq^x#K(HPW zxH{U~kB0`DGX9`oNfrebXB3CmpphzY1g2IWsmP~Kk^Xwu)J*B?1dy8$dQvcH}9Bkf*N$( zY@9<;4()~_2_;+gNFT`c%<6l3hn);ws9bmbAy(Ho{7)qgQ@bNI1)(7hRdLnr#FsRb zbD3GlccB6NmlDA7B7^D*wQzC;MTGrnl;gq9z5@(f^S`c;W+3&dC z&*)fZeqAbHovLZw9}^l+b!mHi0fY{`EoKil_6ymp?UCk6gv#WaPK54^ija!)PL9^R z^3CM*9rsz{1E5O>r*(#8OG7zn{^lrR$}RZ;c?Nk=Ct)aR<*b&iqM|)gZ@bJ4CX8jk z;;d&Ao{1&1QaZ8@LMP}*7V;u?uUMoMqz+m$rjdnSG!!jr@R>%w z1}$ojQ0Dhj54W4V4Y8t$`BR|$7-t7*nrz!SA7{n0Hv3Fz_IM?s)D*cmw4RXNIY~R@_wh&!7q-Ay3)aoXVHu&jWJv{I1{LS37K0JCt|dY#1X>w z2E-5P6>_OW`WkLHOcX2>`grKS^{eNvp3fQnNMRP*{wi2BUFfsBwzoz}P-y$zlgJvP zYuXso11p@Psk){sgHjWFP1y}NQ{5Ej9CWof4K1`}i_YJQ^bF-#*=8ww)J3qL)%1Wb zrXj#`0$?H#5nIU58o^LHZfA%-n$o>hQWvcQW^yaB>T>B22$?IG&_djGODm1qic)*a zxCY`b1C$5JxW|~MW!&GVZ5Vm=`?sQJ*Byu;kxrPhfB*k1SjwK2MQJ*FMwHCsE>II4 z>RG$C=Cj>IoxhPE-0Q+%J*ZD51T}A8=L@;T)FNB`T~@#B{wLh8?tkGAxn$oWL4JCp zry)+MDPAf3O?!9`TPf@kr&=X$d!YV@b6y%JA6XQwY3-0cLQ~K0(OP;gLKVT5G(gf` zE0z2;nkH3phE~!b{zeJngQ?-K0?LD^;qPMJp43pHud7}Fx)WK1>gg?9;;l}s=>(AA zDFIY-_$h?oRZ2!w&8mut!2o}j=Kdm=H{0Q3$8b>ec{Y!cw=)o^1UujFGW z0@;@mQ}**^WC-ZiQKPshcPM`&FU;`;WCQ806K)2sz^==yeyA|`2|CAyeC~5p8CT8q zd`{N9P~ALoi!Wx0#~?!Ga}jk?hUlml;$bNYf&{3tw!1y#`|IddlqfW??j{CQvd1*? z@N_r{tOi}aqpv_^7C1*J@E&Ue46-9k`*@EZM&={&(_Uj6XL=9!NS5hVTG*h<945v9 z_>_FZJSN^WNKzX41wgEqO~`Hp-r|QMMh-y3qYTk-;{dNXNPXsyvwQ`W7Em!UlQdRu zXKmI>J6LX+F0_D(7y&=7hc}C0hs9`1grDo9PS`-Si<-XQ!G)PLX;-gSk?|SwQ==an zEQ*4tfsB>yA+3fxj@X-p3o=I}CGCxXt zfb7K%NaTse_QQD-J1A}=wmyKXqWlABJ_;hcq4yku4s$YHNfdGITp*k|zHH($WJA5; z2V98TVLR=GjY1?rSn&c?EEf4lUIWY#@kR(cabLX(W0u-M0}c2Xbrctl;A=JXnL=%z4`}qp#8zjf?KoC8*hpSMp9$n?jAqyMD(L|fU<*^Xb4%|sK_!D`K z0T~B`06mwZwp9X8Zxr|s<>0BwfkYM! zDm9lSZLtOnLfuJv9@KXcc}HlGojAjd1%4Vb*=rQaS!|#ouRiSXqwxUMu6Iia_h74qO;TRc;IBk`NxjkIKz*?qMM!Gw^i3@0~*J3s_cmND=0gCRbov<)! zv%zq+&1>KeHQ8ODcaN_SWa4i$0c`E7ERev|(EC4KlI{rM&O^IiN&`6A7y%X{K@5fFC7>>V+4N6gw0Gf<6s z1~(1G0?r`;-EkynYN?Q*>FgGuyT3q-e2pGOeUKm4rAOd?821C^5r+-SH)JI8aguQQ z8^FVBip&zmdIv51i>f0VBMzKmPjgb*Lq>`%rN3H-;q2g$s)|@_MOwEre+ajnZCf Wlkj%v9y{(p!{}!Ai9Cz6Rr_ze6(NfN literal 0 HcmV?d00001 diff --git a/_build/.doctrees/tutorial/factory.doctree b/_build/.doctrees/tutorial/factory.doctree new file mode 100644 index 0000000000000000000000000000000000000000..516ae9083e334e37e2472f50223c8447859fcca6 GIT binary patch literal 28426 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 YK&^(Pz8!S(H9{j0Ay(qM6eP9(0%RMGIsgCw literal 0 HcmV?d00001 diff --git a/_build/.doctrees/tutorial/install.doctree b/_build/.doctrees/tutorial/install.doctree new file mode 100644 index 0000000000000000000000000000000000000000..a4d71d8ac76781d949b17d048c425176646a8407 GIT binary patch literal 13549 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 D02hD3 literal 0 HcmV?d00001 diff --git a/_build/.doctrees/tutorial/next.doctree b/_build/.doctrees/tutorial/next.doctree new file mode 100644 index 0000000000000000000000000000000000000000..30d4d07e78bd26512f466b20972a47059e3cb99e GIT binary patch literal 9729 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 literal 0 HcmV?d00001 diff --git a/_build/.doctrees/tutorial/static.doctree b/_build/.doctrees/tutorial/static.doctree new file mode 100644 index 0000000000000000000000000000000000000000..b5ba1dca62b09db7ecc6a3b510c072d209c5a9f0 GIT binary patch literal 12733 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 literal 0 HcmV?d00001 diff --git a/_build/.doctrees/tutorial/templates.doctree b/_build/.doctrees/tutorial/templates.doctree new file mode 100644 index 0000000000000000000000000000000000000000..6e9e745db825423bbac9a30193817fe6cef208bc GIT binary patch literal 27181 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 literal 0 HcmV?d00001 diff --git a/_build/.doctrees/tutorial/tests.doctree b/_build/.doctrees/tutorial/tests.doctree new file mode 100644 index 0000000000000000000000000000000000000000..264e2ac0649aef4b4640ea637112679f1f5ce667 GIT binary patch literal 63338 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 b=nR@O7;H%_u3v! literal 0 HcmV?d00001 diff --git a/_build/.doctrees/views.doctree b/_build/.doctrees/views.doctree new file mode 100644 index 0000000000000000000000000000000000000000..32bbbbecb1a22103f0e13b94dea6c07ccb78b42b GIT binary patch literal 41083 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 V>djLVK`1uV_DI9!*%bGk{eM`t0JH!A literal 0 HcmV?d00001 diff --git a/_build/404/index.html b/_build/404/index.html new file mode 100644 index 00000000..c96a9c9c --- /dev/null +++ b/_build/404/index.html @@ -0,0 +1,82 @@ + + + + + + + + Page Not Found — Flask Documentation (3.1.x) + + + + + + + + + + +

+ +
+
+
+
+ +

Page Not Found

+

+ The page you requested does not exist. You may have followed a bad + link, or the page may have been moved or removed. + + +

+
+
+
+ + +
+
+ + + diff --git a/_build/_images/debugger.png b/_build/_images/debugger.png new file mode 100644 index 0000000000000000000000000000000000000000..7d4181f6a41dfe2ab698c18834c8d64f5ccb1a8f GIT binary patch literal 207889 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

E};U;Vfh@)}ZW{g4y6nuks2h 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 TDA80s!Z-|Xm|QQ_v48PDCmEx^ literal 0 HcmV?d00001 diff --git a/_build/_images/flask-horizontal.png b/_build/_images/flask-horizontal.png new file mode 100644 index 0000000000000000000000000000000000000000..a0df2c61093237a7ca98fa875e9a3163a4075d7f GIT binary patch literal 24796 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 literal 0 HcmV?d00001 diff --git a/_build/_images/flaskr_index.png b/_build/_images/flaskr_index.png new file mode 100644 index 0000000000000000000000000000000000000000..aa2b50f552ee094df735372fcf534a5c14d0c325 GIT binary patch literal 11675 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 literal 0 HcmV?d00001 diff --git a/_build/_images/pycharm-run-config.png b/_build/_images/pycharm-run-config.png new file mode 100644 index 0000000000000000000000000000000000000000..ad025545a7ff00c6366a6146d808d875c5eb6a0a GIT binary patch literal 99654 zcmd?Rg2lU2*nxoaZ7$T~+Qe4jIm!J9i!{$iLCJbLW26ojdmc z41~ef{tb=3V?d_x?0N|K7Pvb_esX z>pOQ8?~?z|wZ>hRzuREkxf5)4=ljcMFKwsua!ZenzQwGc*M|GCXYNAp(`XB#m(T@`g2Y5R|6H2j<| zIbYI=330uA#r5hH z2f77^le?X>u^We-6a9ZW`KO;ZW=^IbtsI=K?Cog&^lNNl@8T>*NB3u-|M~gPJe{q~ z|IbKvPJb^8y+E!%f8pZhe984ceWM>0{c~4X?W2_$dgMR-i*t+q)$)Jc`+FQwu0MnS zUz7RIO8>fxUaB~bDA)gxO&o{Ra1ray9mzWiZ=|%`?(Sq@rEAF?_WGuUC=I^L%{IC7 z$n8_|(NB*cP44xd3l6Sp&OHP&Lk^ij?<3y}-V0^P{gVBK0b6OX`t!iWUg{i~N7{+` z{LW9?r753z9T#mEm-apKlo_~>{T+UMn!Eo$Jd7|{+o*(Nr9QR9NhJs=e7Z0HUk42s zqX2@p_~pmb_uTof#@QliJ3~dM>HkeDKbY*Nz*50V7F_0$#hACwvf;N7)Q>XdPMGGi zN^xBFJEU*i{Dx&P7$pC7JQeVxgb70Po*RPeP!Sh5Pnd4$>Mp)Kjvr+qjdoHPH{Zdm z^-^l=q3_eU*gM$K|8+<{W>zN%li+hyaWv|I={zc_M3q#!FZzNifa0AR-rkU4SP7=MW>QG8DA`_(8>?Z*@!9TLq9Z(t1*F+(FdsLtJNKi zs{M=N>L=LabxR7`Rm^WujBIKehK_tqG|%?nOO(|2-9(+bc=*4=Nu>Yv7@BqJF_NM( zscty_H@bhe|ETUQ)=CPZqINU*SwkZtLmoTw>CedO>BN~w~DTiD_SL^vq+U!wkpeuwu> zSij#7i69~vp#H7A)JHHhoxL4K0wBPlNdQWl_0CArt$taFqc}K6x~MbXDh@svBRG5q zr+E>NKOQFxyq$5Bnk3|7(!0xO?JszbjmOulXSzR}cYbKyBB>?D>$pYg=*>E=FxT>J z?5un$?+jto5SPfx0+PrbVm3WUAT>(imYT%pD-_11Oh{>dWlHG3F#Tr6g^FuaK&}O1 zxNLQsa#ChUz6eazHAyI2NJcl#lpnRPd=nKC&lSy;m@A+C`EGzohQOp7FleDscgF`J z9Lz!AEqjPLVBGum)>ZB^J*|65z{(jrlrh0R+0V3W0&R9`@^1ICOFuS^m~u==l)|M; z$oy*hzTByYj7#%8;-Cf#>Yg6DE^2t@Y|CJj@3QTtc&moIzn}a39o<>0mmz;uf?GEx zR6)E-x60jCzueR$qG3JsU6jtF5Fz9EyO2R*n-=9gz8)xgV8`9f#^qU`d{IM)-L>v{ z$RKh5Y&he;8RWM`6TOieVkFMhY~yrcDB5CTkcLPSMUQn^&oRjj=|MPk=L5{{(oZ(w zKigaTGI`=p3{vK82dE;}A{)Hxsdxveq%&@jovl}X*_iR!jz4}xL_yKheV0P9OCpk$ zl)2+pC6os*EzN$mEqc(?yqtH07Dbc1Go(RjvuW3^+1M$KkI3X?-YV3zB<{aV*B^7F z!tm7QnamI^T#&0hNd;BnY-)nEp^AY-x-26N3_WU=Ti3!Z%SvC%47>aHY$`MzK#uvM zYn)qWXprbh}*ipgRK?$$%wWG+U%V&&|g?q?Onec>EtauA5o^fFt}PE zmx_qQBeRGKQE1&_{eW77+ALSkP-ZbCwKr1^M0d4AMlew2X!t4Ku7~nZ4((Y? zUDiu{sa$^ZAf&<6gtF|wM`*n2m1TNYFMiqCy}l1b4E}3R$e5W|df?vrC!yLjWJRM9 zP$ZgX{Ms3^9uW{zzVQgB3m-@8B8Gp9(Ovv6%3rI#EWz`RT!=&}^Jgs)wsSV&NC2>) zr_31%UYKN@N7_8$BIV_`OrN4?<8NOI-upyCA>{<%AEa6@LiA6NBrItH3&^X$0J!NK zH++iQ5K^zU3`{8|5#YMG#loqRW8Y^D*JA3SS}tPe;%bM#DXl!9nt01jWajAf1=w45= zPXwxV+f8JUOULxGr#S02tGI>ZCm;AsA}eXGpDEn7d5aC${z|(&Nh{5$JYy^Z>K)@e z#q8a_#urRZ&d@_i0L=tIMij!>84Yc%r`nPT(|9AaH!W~6^$)=5 zWu8afL=`hOUx<_>Zt=t8<`@aA;f@a`HTH ziOqxs_CFM!M%wnV7~bzAWsoJ>?wRqP(1tS?@dKw%a!J zrrcI^P2Y}UO#08@;`jUBrI1kOX{h#09<7Y8F;19AJx_ycd#sK&%5#Ga0j^FkpY|4E zPNL1VP_q}Nx5Qf6!e|aho>mM|+MHZD53H^N(iBB>Y(2irvCAU2G&d~(?TR5|<_Imo z=JPy$0L;{&{dYi@TLh|(5hnkP!Kj=Y+>*t~TqMp_!rzXz7Cvbi=UV5h)yQ0>G49m< z`Vua}jmv%1*$lEpl?{B`1SavnXx%?Rx4`s2*9sljCf{i>aS2zfBB?UKuQD|#5i)2- zBnets;_nQ1X~rQSPo37jt68FBv#OfYJKr z(n7v`%%_@vPPbX9cAfw__DUG|=6H*cN6VwVCxw)6k_&3uTYn0QaMzv^1ZXqpvWjBg-f(d0wdr1wRcTCGZG(-F^}olE zj=6|H2GYFc9YFzEuhAVhN@A_8Q+2xa;5CPzZF9QIjBm|)PB}k4xy2QIk(3N&gVgKx zo^~U^6Q(g_?Arj~hv*DdvgOE$wv3_4345iH0;}{21V4fk25?%QOSbe8m~Y71Sdz~7 zit&O;ipaVo;G6!L3SGd)E1gt*^-;)(7k<%%vZpF3vkGcj9GV~#fAz=&6$)``^e8{r zbvwR|EimjZy;FzfxwdpQhO|?(GLTM-vog&1AedqLmZQ2{Su3u+h=ck{2pzP<=)AP7 z4n(%ch;*Bx?pyDX-C>5QKVvmw$a*n)?73M#5D94hE)P5ZP_8fd(Hl-&0uzxvEFMa% z=j0wWNIM1@u~c6MBTqsdua0%A+@^-aZ_`aJjFC{PN(nuq!Li7HCaH}I zf4L}3%~hmHsAVU$H&S~JZS2{Q?mL1b&>2W+Sv-mU6nB023c6FL+d?kCR9Tu#|1V-X zE(sqq>npvXALJsTGn@LRW8r*vP9+Lm0@a6 zu@MLkAjRQ~B2MFt0gFS+hLB-%ASsg%;gsuZ4i}IvnCZ+d0h^!h!!C`kFN8K1wsVGI zAmTZsO*vuYZ&%YQL1;<5V`;zc2y)?Mf(dK|Pa=W#d8JC{w>}uF81AyKQtK@(e`-Kg zhH4aVZ_8NVV&ZI8eG0(mndXYh0e%h)VC6Sn1SrZ9LKpYJ7SXvv>9vZE$Vafi-{>?a$+HF$3z_=pazh1kEkQ6VY)_ z4HwpH`LVY1mh<|dNxtBvRsrB1DU=opM(j@N)psh zUcDv%RFzY4yjLlrn+a_XebJ74f$OKv?XoUhJONHlv=B4IfO z|2)ZEXPD#NoJebm7JXE)+QpKqzIs|DDplG$ArVZ=G|2#?sUpCRRqAaTr7Cm!G7yPs zeri4CM#-h&<q5{m;btwubkAzsseZ+Ni*b=T|0~uFE2;VxZC-T`X^G_=!Nbc8| z%533(WKWyq{GGFmU(_&ah3rUv%^w5rVpegQZs@k!t@(oVl||W0(A`ZeMcaGK70$VS zPJXeLC71A??=rDW-mTT6fVoJ`v|XRrMjVj#)@$4E>5&pOYwwM%gvEbse@^HomFHmP zm%~;J#XV5@K|$m6>YQIUr~s2y*J%8He=Sk%sg@su$So$dTACo5?DIHv{&xl#??pW; z#Okf03oAoz2q6`W`5`OVt{?VpGm0Oj=FMSce^`2 z%qHqtGlhv}Ru7rxJNB0%X=?>)U-3~3XlIoSdoMOwNSG#7BG2)vD#4#F|M_}e6svGS z;VNzKthE40Q!IaNeJQxkegrzCYB}2oDa^ZdUp4KBJ?-+a3M2k}qNtmWLr~$dbSeU% z|J~{;+HD}m9BqPHK9nCA3U$=KAu`T zbXtLlS*gLZ@m{tsR67sTwUaM4F68?KrYf=t8D)u96HLNJB=|t_mgAkL z$IW}C-Vp@_1&x=7?A0Gve^?vg690q4PAI$|OczS#HVxXt?_%b@n>J2aCz}(5D z=HPhzcx$RR(-RpI#??kLgWcwG>5t3R5lC$Csa5$JKb|rQt_LAx$%rOS1`&JNj(I(9dvmVQNlC#E9+SPH zj4S_S|ey1AW*89h`*vEba#3H}l58pfaH2L8d7pGA;2QsxmNI z;$xYhl5us|KM2?#xl&E-9wXh3LhA5BAQz=!KwLGpZe|tEI>Q|#31Rlrv;pVmJgF-}eVo0?{!$xiUHdbEA1R$)S6!TWbQ z4|c6)F&YRDXVhp}E~Wljh&nyCfhY22G2mpOlR!<>Z=!7SSCd7S%7*az)d3d2-L(3m zwEj%`-g47=R_Cv80glTm4Zkk-n6Waa#^p-$y|0e$&$>*_ouXpoOn#PCp^0qRp}?H+ zMW;fqTkIybK&jekp-o;zrDC!pF8w=N=&EgJ4jYF;u>Y24N$fWWzI;dSU8+%IgaYdW zpzGC9j&zth0<+t4W2(xic%MOrNu-D7rK&O7NbYPt3-#G(6GWqOxwT06b?cUL~ZjP2Nhf{3 zk@Jz>{T0m{?32|*h{A$OM~X#8plPJolZNE>Cu^WNvg5GBv-PayPm7(>GKn}(#$qUS z!0lv;xaU9%?F-byh%A+Ry*C^wD|RzK&^v5k6PyK+qd7T zKMWiipDrnJetX+XVRN18j(d&zJ?3`Moy4}16glg2+!d#`^z)g;(${-37X=s`$+kZn_0HtIs`b9Pw}k+>R#YGl4lTCrgfxs;_*$ z`D5ldCW!UME}4iPey0~)%y0i}NDeS^ddzP>Pw}IV`ag>9lJ#kqtR{?q_g$D8m`K4^ zR3%L6WX_Xo#UV`QU?q`KP2#FlH+wpzIcxJnY!^5$9NIHh@s1$p!P#~ z#Vb>j40;MKW&_}W_*+aS8%GyU@2xQi8nZ)+)&reeztcf!%!d5vP{?3?bzRd!%xTqSn$sHMe3^Zn_@a@4`8Y1Cpt($9^ z8@u`DtNhLSoNMf09*eq|JvZL}dqu-sKmz66h5^q;K!4x6aP2Z3$of1Z!)JR7cWLWtj z6EiR_wWDTg1ygmo#p~5%eKYYpZxdo~kq6|O^+8m;^E{?JsfC0=p=v-ZXm@;x=IiF{ zd=l++dvS^dw_10{y^woP1n(53u4|VAn|0P?VKYJ#d^Xssme6Od^PbBqacYrPIlWY#w#CK6jc@bRY0X29UhZf4W(M_`yK0{7&e5;g zPPV-Jp4H4vTx&7ZLx%G47!6^jo7j0Nyz(pHZFG`7SYiNYU2rWq@3lxws(?)pJ)Q*q zf?6u!v5ba!%4`~c$~rfduK|ne&D?pO@6C0lG{3Dbwa0bL&&7$gpBWaDO-yyFGuRUq z`T`WTljk!QS;3w35Ns?V#TPctK{^|mAAj_%38`{)HrII^Z3PZy2nT|*A5#c^CBy+} zeL30ca*9NXIDgvNI3F}1U##`K=@Rwrw8^N8`719mu8g5qHv*J~DK@;%Kh`ZUqH1?H z9ccG%xwPYA{H(~=eEoikVaFqoLC5GRkk~W|LR{p7&;gx;1Ctah8AkiIun`(ADT9;9 z&FAmY-$Fn>+64a~G2`+W=a-B#R&^7zubA=Dk8KLfnd1$_2}G`mWC>$_HX>bM-w(W_E}{zN~o0V z9lW>rBq1t-F?n4zvXs_YdGJ}R-1fsCWhBO6y*`lZl%cElh9d^qHuJJj?_h?=;%@U^ z(Cn`3vCw)@{(@-Tf3WCrAR0#cUiF@k{ce-DL8zWjL;DPBt6~i@m~#MI(;q;dH_U%@ zIwcZ4!iqno68EJHHFLSJt2ce4#sti`^pqi0}XR#Gz~12O*!_>aUF4l89(_wG(X|D)>-O9 zN;=+;%~<0A7}v=7hRz>vH#~8f+xZ(cmyDoy7@V|H%tEBQier`)ubdZo5{S>HHn-ETtn)w1TZNq*mdV7$A71ECiTe&+6jytW;Z}WDwhy3=pcQ0lu=1~=pc4V6}83@ouEA=8lGv?k!#EPXVLHF=xG9J zylLE80-24c(DqewftR_PHKalrg#a>cPhn_1YA)S557^R(iZ0~CtpI#caRHPLC8Cof z(>3$;ZPR6~m~&_G#eomRtOQhP;b1QGM!X&V+dot*t0H*F(MsXjAv%Uv(2a@tm^Q~T zHAe&+;MB6`rJ7N^MvH%7?{p|(=8C+6enfb9_u85I{7_hR?>~UG-xia@QqsK-5ig|b(D&08~Gs)}@f?tO9G30WgY{!UxXtvEsrwSV=)dVKOIZe3aI^jCYd z*){%*Ym$$-++gd*SdkiwPN?_|FJfa=f2XI#hwhbfyG2!I<4LCH>+7J$^4(+p<=mq}9s^=- z``4!*FVTUJe^E{fYckN|fbrCQYusU@q$u6Lm+Hc``044d0KCu0j~r~Ck=p}2wYxl1 z@4)?hyqN9uk%Ap9LFYkEe@DsF2M-x?H?$JQ>5!GNP9ctf1VWPh>+I%~H%Uw)L9bT> z)a~`Z$-`dBy7DD7ck&h^Ov2&vmTMH3y3o{bMnHoEggM)pmMQj81Tsd3(#5U zjq8P;kX8v~lo*(Qt_7Gmjlv8Q=e>3i@z_qAX7D}ZSpX;9jA4{FZM`L2Pmn+<7!tjO zqp0zE_Gt%VGW0?(XP2w3P~YCl4y*iAzM@Wf->zv@XQ%CgN^rN)wAA!m(rGe??}6~M z2mkSu(O;h^zAviGSmiQ1yraY_J`+qBQO7m$U_|Cej<`Nt9D?v3dmKfO#T(-TL%YH0 zokAhoG<3o~jmx}@R0UTNMurCYmQJ?IfCa$f8jxOc&6TjdykREyQ~Sih?#o;imYEWs zR51recoC?(ufjaX#p5nnvJHT%fG|b2FikpEDXz%mCr6)T)Le};pk-RLxX!TE>VD3YQ-5_;r-NruFz=k$yds;wd_<2^`ycefZ{z+>>Sv6X~7&k(;B#<)~GGH!<4#-sn~a3qjBJ&!J$e=v@f!P$S>vFQ(F_Ts(1^_ zo{#2N1^;#th~HQQJ9rR3QnU$!kfILkdJM|REOFFR(jXRyh-pUlDZ6)%&azea6IDMz^peQIq(IKlLe1We=NT|`_3nG_ls12tt8~fv46mr{{`fstF)34yDQh% z18dQUt(8JnR+6R$#3qO9Qc_1u*9NWlpH#bwZlFp0>1s4nQ@+(gVkzQU-Qf%mVUN&` zTB|xn?B>g_Oc*pD%fMiuF$3$kr8x2`Otzzt-?nQ?g(HlN}SGx z^NGgOTJb@=wLGP~E__>N126H2vcfpmNYyfMj^#Q#28)fR2}%kci=sy5|KZC2J@@L) zr`6kddI8ZU(ZH&w&4i9!=EP2QZN@*JFY&1soE9`)y(()5UMVE>wIEfAIGHK)XB;c- zPWY0h$17oqP47LpCki!?^;$qDd**_Ne1fgg8!I|W6JzQ8&JZ{*1BWJ9|2(H_9*6HVr5R`2Z#9w+2nP`W zQ`cCxK?{Ipb{DZqu}YsBYC)=@C0q4+PNA#!Xk9YUs-WBIo`A4Pb91B#B#8gT$Z-V> z)cTNIgWcTLO4C99|5`&f(bM7c&!P?nspBv5L*hLGMK|V+njz1>MoG;3k5&kDWi| zk#odtc{oW75hgzx7wjsJAYf;8UkT8*R4xu&p3#raXM&Wz7{=jp88TP!$DoBDGjguM zRuBMEtY3FrDrXO4gvusIxV2{5?IwI@UoG+qv z(G?gI$lyqX`|TxQ(UQ3j7o_@_KG-9Y`SVS0B;`o1Ojvam z&Mlc5t-E&{rWrJ?fv;VFL2wyG&3BXR7p(jok|l&u@c!KTtKYTuVe&OP+TF~=I{9tL zS{JDtZvagEpgFi}n%JP%l5-Qw8s=HdzxPz}7@iP=0h(_Ss%$w_%rEHU>@2k^DJjYE z*OZlgpi{2vm!3{RlvVmb%;MiA!_%^o+XNJLr*g);mJJMco0FbkB%TVaY9AOB<{$^3u z>nBx-#dJv-o<~~~(H)vM*H;kRnO83iTc*L9x78q&(xBmie5$wg(k2&rfj#aMtm8}? zVM;LYkyU$7U#gDRM?W+STY>xC(mP@V5|iJxTRl*=Pw)YtrGmxOaE{)5JQ*ug37GZh zmA%E)Oi0pbh;}rbUG3TJ zKI7c-gNB=oT$>4YO6bx-g0b=j8dB*ENFq6!fx)#()zHT1X_mcH7=vE2BeD$}Ll{4U z>sQ?{3Y#qJyI_V0>3W;vvh2@PzOs&wSWhT)bB3PWqAUz4pC+khJwB`2Ai4{^^@-D( z2^7&Ke7aTs@u#IwZNNd_15#|se8HoVc+paXhO-#2EIQZP)X87f5k(Xjd$-%B?Z?mB z4}JJAfUvrbVQQaK+Hw1ZHZeHVh8TvlL+fj@h%2XFgB_4I@wO~mF$RX+%gce>7HCq(H99%54!3PiQoD44xj*-beP?+X zusK-bU3GM}ipJ)pzpoNy=kMo>W9wGGzq_)yoFVLTs3aqD+q%QhTzv|>c$KwPKR0Af zoWvk|f%a7e?lV6`C-!+rheTru;_2m4p}6Rpt(Y_0KUDyrN~#YP;U#|e(W%vLCJ=bB zq_L3%z5jgTJ(e+zi-W@(ew(i;4gF-q(NU@LU5|Hg0_g(h_HnceH%iX{xVWlVM=4F# zWvC^Hk&>4`W=owr#>x~)oD=ekn}mF|3?Da2p;Y5!^Gu4Xu%E8J`>{WxZgZ?Cm?7(o zu;c6BNcsOQui8qI+j!^@N+%a4KLKjqfYvkCo_^>Iz5ktS5R+4AR#&9wXfwSMcyX*7 zF_)81^l7U@0U^UIM%^@_`sB9vVv5Z%z>i;V=CPz!k*zg$mnP3`>)bqBD*6SR_tt8?cPakHsCKgNKft4E3CI*uOG8)pSK=oNI+_5*_%ezA z@P6DG13X8or_vDt9U3?;0ixWWCwHxzO+ncB?4xxl3F4G{?)94LeIh7l-bt1Qa%D~1 zHdoj@L99Kuzi@f<5A^t7ubVLVOV;Uq1^_$io0eTvz~OK$*+VPkgg^EzmLTdrOYBe( zlcQbv+{qzg`TymS>98B251UnKQH|H~PR*vsX?byx${)W=Ux;^qJdF8tan`b9=mg_$ zFf!X0dUlHxM@wcf|C*$nZM)+D8bwDj>t<1F1nr2+!$wEPlenv&%&vYRqTKBUmB4e4 zX><&^Hk4)muL^OkyMBKFwUY(k-pLC6djmS{KHk4K$FK%c`EUt`vSDhUs&Zhy5pj+| zXJ=>8Q<1!9Ck*WD?4)CjLY;gM`*ZkXz)lxisM<0KBG#tZ<8WqIT5X_L?3rocbB_6b zE`EvT{yUeGQOM}wKRge9xSxjD8tz^x`9n`hN;H;JbobtaY&16KH)xB5Lr)KSsUdr9 z7Y{-$)aRJLPN~nKorYlN(e@NQGc$9%Fe4)-2wtbq!#ncveB#CBPRyZuLH@n%=RDc!f0fL-z`Y4Z#2zrKKlKWJFjYygC?l z4|!XY4Iw^l^2DR;c%VOeQ*DaR0t~T;vI$(fs`^Guz9SJ&XgVm}IkLQ@7HzcN7yo|I z$+r{8uG(qAEXK-TnrqRNeS#C5aF)TeE`?LrehxLN^I2A>(T z7Q$+Sj-;oKK_i9IT#p2I6kFP|r^}lNnYO|O6$zUNF zw!_ksEAesIcKGRUo9LhiDrDoO99=GFKlW$;Y#g#N{35az1M$+b?ORV~JE zg^f6WeZTV}3tB@?J8yycoS4{jbF?650xfme=qfhaR;hpo(bB2Y=wcreGv(OSNm?z~ z*y#*AxkXgmtP~2djGqgzI8ac_u3@IWZ%~J>6$YBVHZxXW&AhfEtvt1SBHMByGU&7C zYH&7U&~k<-{XE$D;SXP<-7p?IZhS8rHu-t8n7PM)kep|6$u)tyqFhU z{bmnQpG>sz7Y(s2swsJiEw$d5Wv|R##0}UCF9vH zij&vwLpen;PE0968Bp{w^m4(d!U{NX;ywO&+{bcma2D0G=wIo%e4JHrlD>BnId@?g zQ1yCG=d)(dN?E9#g!fQ3MX%4y|2aW7j!t1Ai_d9!kf*-^>|fNRK+$ecWpzdGf@Z zBV)vKZ`ol_KsARCZZm8FdOIX%59BK%-V_ZbN*i*Z56ZPqI<{OW5xD++;`%x(xP>Ih z(1(%z<#7$|h+#>(-4;i{fst?E0yFZXQ3(O3&Qyi&ey@Dx=r$^itIq5hm(yh_<(s ziIP-`VAy@UDBGYUx%nt+(VIR+nXuhX$6b1AQ+NmCDRP1ya`{bvfAsPY|Lr27=#d6@ zCB+5#$F=b8FPFXhQ=N9bKX?|t4uugdT_9jfD01qr7O~B4{8SPb7~x1S+_vOqlJ<7r zC-tJd7y{nLI0Bn0!w^^dopG2?!WH&?t6+}PLrjdTvL<-+aK;_RAZa~ zk63(Wj++CZ4@&91BW!;<)HhZ%n8W0hHf+E>XkjS6NqUc3}=RPFu! zeXnY8JjX8o zZ;=`0NNLwqRGUa+F$r+nJd}3yCzc*afiWh*soi>Q(JO1l;723Qx6)}W;h*9?n~Gs&Rz#C897`~rR3a@YAEyZw;B>SPanNB zIJo3;*qY5;R?-RYC2$oBsRF=mKDq^s{e`1Gxr<7IvcWtYC&y@I61KcIRun z9_(~H-9?VPwZ7V-`=lb5SQTL{@oEn0_P`?w+Xt- zOc7)!gnH^>8#weZ_0L8)yPkmMa@DM*=8z@b#epE7UxLDd;u6cyW7U<3f?n;P{{^to z96fdRe83COeh5JgFc6?X4hU2h@z0YMT_J7j&Q{F4VEmXFL64-1N{mbob!rce5s>8S zF{{R{uO?mxo63YK8E*;N-+gKg!V9{x2&{46GM=6xHhqulw5%>`^QdV}K2 zIx!)qK33Ord%nArf~`j2(}k-q2UN^N2j1iK;NOW9 zk%P}T$4KE4m0_FxZzT0{Hnu5etW;trB(wX0C&CR8e0V=7op>tSR6^CLe6P5>%VDSf z)8OmzKWM5fO&%U686SQ`CTYk>`wHN4TfI+F+3ggALcCf)xWPUcoDtO%ha09|ng!6P z87VC|`(QLbs+_}AV8z3m;2Wc&q@X01+60lZ>*adaM99wX?ceWeXI~$mW`KnK8V5|8 zDDC#JHBVI9YTxxqtyo&#lOT}30865FdMw9xXwd0l@Vu4x4c@Z&g$PXf5-aEk{#?%J zhRl4c5;Cey;BjOz!ujFk)t>LE=@o!rEw_tDo6Jv#yqFzy~#@4);<~ccH1CMV5;4Ps|5U_Ox2`Mu{|pFBpt^| zU#PRR*Hbl32T|`6I6q{w>8Was5_32Qn(iZiX6-MfY`QI%=Q%99?JYoaTfwheC^G%3 zls?;Jn%kkgwy$C~csIcmZR_HKXKM{Fl_c~(bH%=;Ykj~t2-J_iA>J8}8O+l?@?@-#BPT2Q+Fg?bMvnA%(Sf{~vcLW~Jb=&W1!S^1wPJEy zPdfKK`i12LYt!DyZq$%OJMgX|j+zOvZ#0uk(YD0Jy(m>fe2@9DZ5|z|NCETm@|U7z zZqKSW*xv8p3!N_XQZEhOO_5iz2}Viq`zFTd z{N}Nn;kd`TDdupUk@RZ?!A#fgz-9;Mqhw79a2VP{TocB`YJVopQ|*ufxTy1e0XPbVGqos8nFYbqJ)Mw-asfxBK` zbqY3}`$!!lZQajrIdSPG$}_a`PRFNQHzeI6@>_jW!!u2-6sLYU-_8=e@*eIXm2a^} zO>4)nD2KOlVta(VGph`;_uI{q3+%yXWNeE&t%*~PAP;%ohdr>RL znuK~CZzfBSsPjH)*h3`<&hZ)MG1XJvKGA4hKQCo` zB4W$TOXAEDlswc+on|tQM;T-+f4bm>YrFZNTvz+LX*OBOiJ0C(TC>hJGgNnhE1*lC zCwSa#UM{b7ov_@%5BhxGNtrUQ<08H}Rd0I8I;?f*jJT4r9*3a)qO-+5?L^y&3}MJ< zo@7urrFv$Cu=O`g`aUI!IpZDG`B=@{zhptw-%qou^9zEt z|ET-8{XD*kz>Cg95ZBG&X1zu6_7@r1RKx&19zl|QbuF$UYHgr1oRsHv@CF<$v`0BB z)@n8JNeNU3stLuS2bHGH2j?YjB65$pSp;K3EV+7tIF59 zcOY1B;U?;K!mQgUBfgmUzCU*J6jZ{BAXNU=9w|XVzaT)(gt4LsmXDcF70ZJHbvcbbSy-bb$6nc+@WL&dHP5&0s9|k z?7mce@z#G!+E(GH)%vwbs%_V`8k$SHRw9wvctVF%C~5L7ZWHbFb=$@+N2-_Hy+k|V zwTC~^ma{lf9mDAvPiog0zhoEw(B}C^_X7qupeLtu8@IXM1D8FM=G&q+4_3PsHYb~l znclkz+6(5KLsb**W|un~aa9X$T2$&D)az$VL=J544o6AhqT{dS-2}53WXuGwGMT`D3aY@Cq9-@OD%UmmpjZCIysu^9n7~t zj}I-83?;_s4ogi89xI%Y`p8yNP|uqg-Jip|Xb@hsNyH7EaZHc zYfqtXHyeeMg2YkdxC>Vcfph2PjB!a1|~ z>>EO%P>3#3VAJpYG3nS+x^Eh8e7_N4@=GDZ1TgoCbPX3{q-pK@uWb}*jE}KB2U)|M zZCOre3~_27&Yi>elySLkdR&t^etK#b#z%&f4SJoRPU@ zXR&!tU)@1@&iQM}9maLaB(4Pp3vZ@_XFIT1ybwVzS=WlHpt6K?$jQQmZZALkGzIz!=y*yr-OvPwP@>PW|OO z(rYzX=SA&NQhdjdBO6pL;Ngi4P}CkrCRk0I4p@_wTt}u%wxFbzrL~9Jzk;0k*rNS8*bXPY zL2ol8T)TI$MaLNa{N@w&E1T)_mdw$R^ceaw3=_-ncd~)Y246MG&WAblW;7fHqlhKi zWimn}+};wFe=r6(`Xl@ZIIP~rCf7#uq3$7X8_6|@Oc`_m@_L$?0`2UBVj?p|Pt71@ zpZdNwi62eaN`G`2e2 zqnlmu#oCZGItj~oGiQ))B;1g%O3k0;Fk^IwDm{e)Y`OUw3cK~L_#wC^xGskw{EDh8Z=$gHFZmadoMKC&G=qQ`ih7M?uo0jFR9OciAcjKl5}?88T5C9N?(hPBMecSkp9R`q zsp9c)DtrLA8PRU)FV)=b(aJ`O#RUrwlkcmLkids-f5(JGv!UMz78Sv;d|uS)R99sQ z2-v4bBy%_lX=>u2P^&BB%YCKR7_1zrmoHPOj!I6pNGX1GZa5 zX4I%`PK!TYmIrfA=3_0}f1JjjrGo@SP)Ov(#{(XPGV!zmsP#A4h&U2 z_^{dt`2o3!AmWQjWQqXIds&i5kV(K9EBSmj{{*XoI1NoV(>PPE88X>wlw5(cySoG| z7qBpkdknxKIfKp3?968^$^&*uG9CGW407!McVu_w5@Gd`?n z8@BQ7q_X3#xFz~VPNEpP>MoqbR@Glew?W~}{+Z+;g6C~GlrR;hAr8rDlp{(B-0c5$ zV1h+$*QL>YIHmSrL)MPtN^=oW+t$~r1Y`A!uG~Vk1w~Qk@^}4xWS@d&Iijkt0@mVs zS+@$6zOH`}v0@c2${{M=D9U}sdL-LzZQH^$h0@$QnKGg;Q+=GU#gPj^m^fYx zk_Vwixbfkz@va**Bp2ijN_163_4Z6!8;_UAP6rqKv{iZxSk@zEH!U7xHU=>DZUA;UL0<}{z(f%>L2)eN-~5`X%l+y z5q#;L(H50Ux>>|!Ew3NW4&Ex(5zHlL-!F(4N{N?8P1L}aZ<-I0ZBk`yEh{k;)2jDd zauWlYZZu4}X2hPo@pC3u;7IGzBG+<)(ioyVu${y=PEPO%_4aH#<+_+|^k=;|zTUW4 zQX{Y$77$OWM2^1%(fzO=B&LNM5HP%mIX952ebx?h!EuDr__+Kz9h`W&3l(7`=r1WB zks__dO2#}va*9%WUNHfq=P`@OE}yIT=ITSInklN@5{^$1DUy?rca^%&Rb{)E_u;!= z<8Qnr;g0y2r*;3?htqm7R7`z=6Ftt|yvq&S@>O*Lh(X9!S`50_Q*Jm1Feg|}~b zywAYHtmxx6)7S3sY}{vSuPjnI1=JtTTCK+}zchFDH3{p=wOk1XOTd|wPYJ18`f%sPre${`rcR^0n!_QbbRML-&6i?dO#sY+aX= zXdtjDCVA!he9mG{mss$>WdEfRzZo^6ocdH{4f}iP{aS-RF6={rLZs{ue9r9tBRlR_ zwqF`C!m5Simgz;arQ50*{nOquT^G3IAn!{`ugF_(7D=m=tU>XghgE;|G6reAE%*1* zjQ}hTsCD=b7$ub)GOXk8y#g|e5VcRq*a?OHD=7Z!Px(lo)LZ!v)=WCeqNY$7RfF#p zeeJRgvNE#1A!Q4;PA`I(Yes1y#`ZG(`sB}xgVooy=lLitKouA{ghZgT73rhBNLkrA z1Y8WrpVcP$4c(`a%}%qwkN?k{8j-Z&H`;y~C|dpUmFM}I8{*MOUo9O`^3ik1tL!;! zd%wt*LJo6fvkV_c_(e|@o=7OlnLF9iTP7;4bKylY6+=ETSHQ~--84MSdSFNRj|=~y z7JkhQAVU|xK&r-WbQP1lm3NiqGZXc0n--LPbaWuzEI8j_vy z-|(+~Y%aQqjtqMBya>+%+y6fC+tSH~rXU*27R#nT;ZRAQ2glm+5~saM!<)VDS|^_A?TaU&U8)?}*HEc;_xGgK= zJ=dgfp=ByvhLL;e!i6=RJr+sd^bIK0^Mv8!#8vlF7lX|#IHvSF!E_!oW3uTI%>bnp z&CuhoD0rE2N)OkK$=2-`si(Sy)V0~yDC+mCcH)Z(!B>ZvgsvLpaE$bzuKcks1(+31PWSdUZNBoh^Mx-GD^2X%e54z}bDJjN`Xwszod zrzaqT1)YQi4>{?7t1Kvj$M!N`a5L`=W5}bN<7!Pn)u3%mH*!ZCrjn$!JSN2kgu}a` zBjQ!js$-&i0$>rM8(*a04z;u^ysmhR8Ix3{20aAhTU$f}bK3*iez{#a+dJxFO4cf8 zHBM`5warEr?CX)sxfuQCh~t_Mo~wu7zjI`ePmkFt3dd@nWnqaA$B4>7dfXaNp&TpW zVh<{#q+-b*{D*$~H_a3F-3#vboZOnp(Qa-*&OXNOI@xzrr`HWA zt(DWs+4Sbk#Z8xk3&C2cYrZCL%Yx5crNKpA&x&f$Gw!g^BR9=PwuDF0`jAidPUSLZ zP$=Hm^in6~Kz~J6nGV9W0n?+Uw{vb#wNQ7Jru-OtdhY*o!``ntG zlvqvLa>7LeRzBa=)O7X|Jak;&5m8aVs({|cwN$@x&PU&2N#pWo2J24bGa0I&Bc*`n zDWz_+<|(ZqVmln_eH4NoYDG+sHQz7)8Kt>1P2@QlFB00pQ^8>By3Ms~PZ=77 zwes`3(L0h|Jo_$$)W-QnRLz8&+t~;OOk*DP`Y1KTwq-dKa>(g>hv4kxtj5WA z?rh~I7eej_2RaW<)(MJ)zh$W5d8>+~wZlpxOdtPi=n++2Y2?>D1-%%0J@^FFuKv-oo{Qb?Ou_&S(9aXd90e@4!6-mIw{ zZP>+ivVB5`t7{ep#eFHX0?6wIY^PzCOZA6wBqNo?KQ_vL3l@8u5`Rffc8^hMC$>e3 z!9ANgJrlqV9O$!h7gUiV$fto$TUogXY+<73T@vxF8(ifIqgCi!1?Jj5?cJmyt# ztsKzsepo-xF8|uC{<)AweA%-k8p+iW|2F9W7a{@(CHGVWbl=3kRQ*Zei;FHn#H%Ye z!AYT(_~(hC|9m5l@b%3gi7md-5)0+YclBy>74cJVM20UfdsC!<_T9zqhyKBDe@e#7 z^_v&z5Hym<&j1wUK)yTp69@cxeFK0TeW|cq|NZ?>GHu=hAc>?G*58T`zkIVQ<<&*v z$$ar=n}1$+egII%3jC4v@7(#~#RI@Z4|Ah`RXHzokN}>qzwTZ8-v;;u(C%kO{P6!v z`@Bgn@DmX);4j50e`wwRn;GytvYZSgpm693^bChbPLOy|7>JoyOA}Q0-G?ketS%?N zPQlPH{z_bKVv_OeUTM6+<+nli;)}X$6V)7{y5k}rFUUZs!NKPgZ|GOUFnF(EI&vTN_D;7+(k+Q0wv`IhI+aA`|=JH&28MO1L?Sh}1{Q@xVnzE^lKE3r><=jp2(AU~G z&Tu@Tn8AL}YC+Az!Rtt>owf>r+>NhD-d6gODRAiU<=3PKO2k$g`Ri$78r3>Eb*Nz= zo}QU;A(GHfnNumdpn*Nx5d8Jtp29I)UuXBITY11O|)0U-B4|Udn*Ndu*9RRbX^*e?T8cxqhFB z5u2^)UQY4tqP=%0w~RDPwmf7UN&Da|bb>tg{cq~EK|qpj^+9}FiC?%(tL6ZuH0!AfrPR&@!c&W9(qsi>0lOBZ3Iq;hShbOE4Xa=_2u1(#RUpnw&}`vw$S>Rpi_DskDDo2 z`o^rnjh&lq=-ea39>+>r={1D8=ev-Vo*evTv__c(f1;`Dk0E5U6^?K&EG0o+G7DdV z?H-y8k?I+Xp|zxFCf!}IrnMx&ay-H+FDAftfpd(k3QexuG!B^zYCb{ZsMcnV^oY?-=0YyBxk1Y) zDW&IDDS}Fkmu9jd&=vdi8_MP0pC;@~^k4@#JOvk>$gxWvFG3e;K8}hv9Q&D^`69-# ze58{VI&AGy+b&DrCK6A5&=Np4`~oHCVRMFt!SQNFac?Aqj>Q4bqY=qBj{>}GJ?83! zA^>qcn7_xC?5F&CaRY;;Ui6)?{t#&-HQr0Bw~>d*GW;VF%jlj*ol*)~t^1D;*&N%H zIxBWqnupfNYS)XOh#&M7a7V(AK%~fOb-vG|FD3Hub{6ZKJOw=wZH%N^k3NAmVr;>h z?Rut+gm$C}&5w~iZofYaF8e@}S>6O%L>?rh)><{kV7ws*8;c@oypRt`zp?SfFb{ZK zg=mcCRk26KI|IgPxRVj*ExFcSDv?;R@m&wxs{0G??et_;;tZ)>qcYo6CYMVKkk6LQ zXQnNU*w^3B&WahH7K1fVUY&G9SIJDZgL!v=Wvu19-!SC@-%65pY4Gb^kG57R%;gd% zl^%8Z^DBK(oI<5aEdWAd&g)YJJ1{pcq8IW>?>+mt(Ws%D4QV6%ych;E`cGt*JS1X40!Xg@5Wl(8(ifJT0 zL0z-C>P!-Ao!Zksg{cz9;b`K73QJ*G_+#)|`H+%$&;bTUgE(MmWXCd;xht@Ax-$a} zsWo}Axmtc;vG|z&i+H3rAa~23%{HpkNWsvp`mwCQ{RfRNyK<@1UbLLsk_WS zJsy76ZkIF?pYuRrA;`40S3oN;EflesKn^4i@-R_S!&s<;Q>{|D%e=PrU~RltdT74) zEQ54~gS{9uonYTDml(jHwl?8J2DdT*ZO+KhwdOEH?Y@hCTzJc`XJoK5AGzh}%*}-( z=J*(-m&(|6%Cg+*SYBTe*2C)bd&`Pz;+<<5U~tuS_yQo37ZjyzH&m&oL3bb#@$@^c z%_!%TNWA}S;6lPSn1bmty!&Kgx!Zs}r*xt9@!`U zESMex$wRtpKqL)lNgR%-4+l7BU=H?%4R+GrpC| zhIl|UJY%C+HT&EXTzz$hpBY&a2#(c}>32PAl=bTu*Eck5iWWsKf>DoBfKgWqw@m5A z9j8i1H>H>rt68m6Ho()k&u}^uIurk`E{_1aH~BSxFWisq#sJuiG2!7Ab7;Pggx-8w zP5=q#V?x^TV#laBYr#C&vBx9a!OWH5D;^$3*IPiH;aiZ6z25Vblr*cU2EE~DuJGA- z{5%B)w8v>h;f2__5x0T|#^swd=n_c_;AfX&x|h$6yC2O)J-d$ou*ouVpLX> z@Q)Di?O^!Zr!ukLXlFu7>WRxR9}GObmAfYk)wD(F%f@z-71B|lVPR!sGtp!M z(d>ApgjJ6ME1@#j#A&=Yf3>TI&?J+)KrWxai0RvO!#p6OL=o~+7}AoUk**BEG;S}j zqryX~8mZzoA0NzaljD`QS5Tb0IMke}#=k!nk+c~ehUl#mjdzj2IBRVp(3I0y4eXvZ z7poR)5@*}Kw5A;kvbMH%a(&G*(2QIlS0F;xI*PoV^Jyc>DEO|*+^@hpp1c64v^bdk z?11GTHIya-;^5$5B|;L&qYzAXy-tJ!g8y`o+f>>_l^epguB+x@vK1Eg3bl?(`%$Q_ktUsV$Y_yZA3*(Q3f>pxW24vMR z0DBd8LR)U~2ORz5^1A|Wiiy1D!ia<1@9%!n1km+yWdLAH%*kqw@l*Bx@i7wV@e7i; zM$o_iwP*g;l4)L$(6l%D?Y1P%5BcXj{%*+Sbd0ipg{`57@}ah!iQfJ*C@C z=#BPCA4DLf&(BZCQ6V59$sR>j2!9gRg~IA^pzLiB*eWM0`*v@-7@C8lK^HtkfR=)d z4PB{3eQfe@eO*=?Gp@}Er15arDV8$mFUy4xA`o4w%528JsmZ(qyYij6edHUpt~X%VC*w<>(vY;4d|WpB?*6Z|DUf%%XvpS zQOkXZR*`fTtC|C}O3p&@KVJi^VPr9{w%lN*8_@A^ zaX#sdUDgPhz({&YZI=x^aW>tg(rqe%&x5kvAbYMPC#PQBCy~wX=PHMkLm>)6SUjBD zPe*QGj~QXw)ml)tbSXB%DqVijru||b#-FT~{Sf;8WG{9cv-|qi;a##p=#jx0Hzvzx zMLXuxq+)YGzG6VlFW}4 zv_ComDoD?fdduv7&4FWLn`fyz;ON;=tO$GZHJlly<}*o}z~*OC)^FwkyqIFMvkNDx z3^>$czX7BaW$X2`lz0!~5Aoow@xqX}yXOC%yt3B&xQG?M&8*F@P6K0X5$`HJ-yb+1 z;_S;Wy)uKS`Sclq-3E4eQEq$l14j)UVgp!PPY34Zd(CzuPcE-2&cyFyQfO+GOj}7q z$-*%g_LhKY4_XHp-1w)wHyRFpA+Di`AnMk;hg8j$*Fjjevi-dZ>aZaX;LX zPC;@qmv;qmcIjo*1n2axqS&Z~SrNq(G0&ji3r){<~K1h=_CmH6~w*+75pe zL39??o#U#)6!O6K&SM&B>&PbVelBuvNP>!J$jP)?z`LoN@v5}4<$NA1Kd@;CvygL5 z4=Tk>(%_USbVlRmOo%KEGF`m4pk|-i_W|{MXQTyvTVeh6w`B0<0>qqM#pwmV0fDBd z^FqFcZO6M#E%!KHI)L8|Ke@jfYK7(>n|x1!_r)1*Knp9t9oW|9L==XggGJkTj~*tz z5&M)NF3JNcM5x)fB}FxehcM&hy1LxyWP@6O=L4gVGdhKESQpNU3ab+n6slv``}uJM zr(^9WJYRXMZnB~W0!Ts+){wwF=-E*coPnI;ZZ?U~0T3n-cD;+>)YF+_pR9H0SXewNt98*u5T8YNj+>2fyRj`|dTclnUJXkWK^12y zdE_p?+YE|y0gj<(3X1^W2CYZ2Tn>a9G{20sc zfg-(h1C|N)i28(U)%GAM`Q4JUzd!NvH$qVXC=?YRvmg3|Hp2@-XbjvcsCj zB-3j45oF2Yon)B8HLFt4_Jpyt2BAPX68?5EW?P@REL~ip&DT^jZ(}>Op#OD}#x?R)_kN%QIw`*-{cO$! zrdPFw{8^)|EMZR6QDI7mourhapCL5v!Pm6Em*8l=pmCwqk}-xobprrmWP{{ax*P*h)@I8ZKj zyp(E|{Z&^S{J`johZ%14RX5tEUv_F*3h(}6f88`SD0M9~|6Dr>nu?+jNUc)7;~lmg z*&f7YSgls}#1A(fDq6LH@xn1`I`i{vdA8P!2{$)se5KjFZaVK&dq*OwVLIb(qt08W16;mfb@_NwIOUlXsm*$4Hs!H3-|08?=FQlE zh^KFB1i4SY$-Wq;?u7>rx>_DVcBh&$%c#zsVg~~YAL|>f3Ka{#e%Mui!S-?4yiQK6 z508%_ODr;yDl6;?2a;t#l?ZQUGRX$>=rN@oKK--tN(X}g>iYWOAKfot8!ed9_n)!+*Yp3x z1OH*Mcvm2O!HLkj*b~bT&tw^gf!6Y_^kC?k7+ zX#PJM{6}Mv@}>c**VMXP77zm&gwBa(z#uri{pTaEn{Jk0vnQRl2pMQqu=dlz@8t}| z%E4jA?r?i%kd>Q@nH{Cu9Rm3a6W6BAln_NZxjcd`~0P+mHhRJ{F z<==Kx8m}ON_DOz5DC7Nye+d3Q(DNF_{2b{YKw3I2;{`g%2qirJVO9SA z9x&!rIrOwj(cdHe-G#KwYc#h4QobcEsWo#s!9 z&>@s#_>zkvfAIoI43CquQF;4Z|K~`^s{#DB?gAtIzRYkV-@jTE_VeWph)y?wFm{Ps%8>|$${;@e5fVE@L9R&jtiOF!XlQ1h2nl;%YSV3j^pW-Ifb4E*I! zU_b_}dU5dBrQfE-AARKD0rLJ5|Cf$ABU*=gNf$#yhixr;s*BGLY;(;)S^vo`o0S!#XV3P8Z$4Jcju z5i>m{Ju8NDo&#luW2H%vq?PMAH6{6Wr4$R}le0Us{iNEg+C7j=k%Bo44Rd;qUMLzR zvA((a5UBKllF7YMW}>I?U9e%i&|3giB3~#0DH(uOp$|;)E#;geLr)LE{T9{jZGxAS zf6Hf!52kFskR@`~t5N8)A5+>$5V5eB^GQLbN7f5p6HWG;DUVl=Zy2FOKi!~n{wrLh zs34MXaAg(iLmD~k$^aX2ueVI&rHet{*7j~_3t@PHkbtk&bfRRJB7S*G476$Pw5G0N zm6;%_dZUpWwG`{J=p?jF01Jez0>R1w(x*lWwE}svn5n$&zSxX9G}QOgNz;zs1bAD55Q2f zR_^+Mpg>jbiq{(C)nK?qsXa~0*VAVbssK(0HKnypi z9QtS?J2hTR_cvonTHzCwW&oK)LHc&TS>WfUpsGiU%Wa-G0%T&U+j;hbv$x`NTHv^k z9?<0x+cw%$NStad7}^H#$1a!B16AZaNrrv#4;i>4hi*<=2a+uUm&z$(~H{rxnAAZ!L;0Pl=LjpGkhROH`3PxKv zzoiNMxbq1^@xzjaV=xLDA>F&r7IE{Hbd3jvZGhUnlpN0RA1MUOK@-H<3T_@5#!CHg zu`CW`&P|HVGSWOk&Z5F}PN9d^ER3i?ak6=1om6JES5Y=To6$Krk-vy;6pB-HN(m$< z=rpXC`{kbONl?vd{JIz2jec-uJM)X*g>(iao|UZ)%OslqsGNJzLfbkX{ z*G7)2`zHrDuX;Yu(BoC&Y~_vySC-d2p#lOKQ1PhMx*fO7ajeA@jfKjsIaj=)a6_#l z98%v0L;Fnyrbhs^Ce6$Yc*t5Wj;&@JH{NB87q&H+Z~$y5cI_pYD3<5IE}aq>Zj)DE zCmp)!8dV0!_d6OM@HJJH4)3uU&*z{-zi#DrC9``+J3O~-wODRw9?%V1-(ZwdbAuxA zj8VqRN?&Rd!QAgT3UogOWy5;5QIxs`LEN?(f@TkV-%%^nJ$a1ef{3$yJr<;NBGD5P z$7Llv4a0Y7VUETE=4#sFOJ$UGMfC6)mS(wYQ6_cu;}s8~dl$-HEt0&(sMTwai)3&2 z8AOEhdr`ZVC+ha)8-!<5VLce6oW{ntdN~1^UEufD8%G-I3v|G+P_C!~-70RJ7A$*% zQ)7d0F(5exzSWhYd~du8eM7y)?XjaZw;C`0vaxFSgPbv>Y*sBQ zI%{bT^rYHp%*|s+V1k-}NPR>n0P5=c_8RJ5vGtqk&=2tZ;;;@h;!f@iM|8_}mb^vT zMXAXguZ-C$y$9XSh>A#8#D9!n5E{TWMGiYTcP$qR{aFjZwik9BDQ*RhdbkdEm@?Zd zw!IAjZtl8;l(JZx%>9%62R>j0H<)$VYhB$m65_rgSu&j|2DWSd95;1U%wa9$-WkP# zyHdRYNv(&K3bvi{9j(_*w8*wOm%>d4X^Dzsi~DgtG@H5dpnx_(zCV97P4b%ARu8XBdd>RUsA$C*%++Hj_|WQmN@gB65^C0t zvc|xoo>WD4V=dwW0Y9CYrPX9C@ljg|_Odc9%6@}o_i3onY0=I{;1Jch*H#ucuL(6O zpYiKaawg{d$PY#xpSIcWkMc^bKtG!R@2a>Td0)fB3+as+eN91oG6$Mo8Z?b!F9))< zkwL>aH}@|Zw|g8Ea9h-;QHCw8ZT14bdwP1O+`f80-VrZY^$|uq$&$9^!i~J#xJF^#S3_D$Tx|)}iYTeG zB7&b*_XCiJd+7(o*7vqxo^g#{m0L`K{yChr39KozL6d5aBoV_40X5K=Yg!VIaZc(4M2>=PvTHaw6YTG7_al7wgA9~L9>C0>x=tXVCl6whKPA^8X z2aM-wAruOc*21yC`i*4!pwK*KWGn0|?S25nJZ+HvNhHoZ;-#?dZA#FTx7H3zO0$?W zD}@)VLNez(n(vPg3e!B$kgUTceY0?tD?%vaK@*L8E7E z?v4wbOh=_J;PU-MBc4096QBECh$9wR?V-X-pHW(RvhkVrl-$maFy3)4z)SUMQ7cK; zs}CaCu&qz@UmB zQuckfn_x^>5(ILe92CNX?LCr&ed95v?pCplMQx4)I;3}&Qme!n0RS^zw~zoR>kq-( z=bh^UT!rRDF5EG=D#wOF$^7C#;dMsM!?{B-tY-BMY8z*1pNeYEr%vbTwlD8Xd3EY^ z9Gvic`u1CxGU$4hm13sRAjk#GnRmd&q04?|n*J-nI&EW(_f) z1!;?7`B@J88d@x@RS1w2i__$8m=uFndqrQdG#LXr-Au`<;W{B$sy?NhrjlvM49||2 zr=}IeHpb=X`J>?3Z3ii&Xw9T2G4D`( zt;4n?_8!`%5FV@o*Nj86g*U~Dn@!DG3-41Cui!YDuYGcTS>~k{efH;NaNKue613-I zOGgjy%ty3@bl$w7MEv7s5-Trc-BUU?U?1kzGrhRmP)7xZo^#PiC z%UOX#d)V=~-QXNLZ(}nkHwR1j(UK}Vx7&cmkFKU5q}u+udoYY?4V_cGo_M*hi5Tjj z284N7;k2jd$ap55FvWBSl0!}DH8%%lz$W<8fW=zE3*$ji-vH;e3~POY;GD9y%Ui|x zUU*->Ex@x3{yW?&8hw3U`W-0lpK$L2*AK@89jeMQY7f965z<1}cTW)R6y)x#Ci(T+ zV#@TAo-7&q1?W^FLBPWY07^%d-xK#k!og8Huu*z}bia8sqbDK~NEb}5ik@JlzaLt7 ztktt;$+i}>NDn1CGSo)}r4N~xQMNlo)Ejq(;C~ZXlWVH~;EHkH;MnGuUp_mUS`&35 z`x02@Pphq2>f46?oWQNgRd~i5@Tk6h9b<)LjvYh6XA_T4%de)kL;lLJz>Y9J0|V{KL8=_u;*y z9Zd3sh$61`-mZG5uV^p0RPBB`?|)2J9qT5?E9j+-`(pH?q0kzh^jk}aQ$fB2?cT>2 z{4~0?Q$S+v=`L%~9^ENOHJ;T65=FYikKF{{8s>35cQ2#)S%xFyXMDxtrssX zJksex|8!sUlDxsfN;-yc{CNXl`H3rd0c`W1cHplL{&fqq!T_8N^uB!hsQ>-s#RB)r zhXUB<1%w?Ae+%#fGrV}DV89|YetS0lw9Ux@Ve0%an1#Q`>;di*5(YE@2k+kmy>$7{ zxZ(-`j+q>GdUMpjc{ylb0p@B@`^_BaU)f&p!uJ11@c*9~=Iw*hfAS;JS)zLm4~;Ai z$o?~FB+Unq?jhes1LW|M(Bahw(4ytlrO;R!i+~J*h{rR&*#b3bIFDr=0x{hWdUMA9(fmh10TES1RJ7d(6q;7A8zz|s5Ftb| z>tpra9ZK!;v7n&K(R<^T9WMi145m9aCXg5NwXD{c<<0{ex=KCh3@X;)?0xB!jC7DK zCb&+2gdMM(3@ZD|@9`RzmQ7YLi>M8E2$xI^JUjr+?xEtdWA4(`vRzgFw+UpkBMOSRqWWsbN= zg}CPW=n@FEMmV_ydH#`@nKziOh-UW-hRGeNKPCTVeb52}FFP3h%KugZmXeZ!!DdHV z@wlgo7R}B{jE#*=&?6{55hIoyHU}+b3oeqQe4zE{kr_0lbf8FI$_p~yCiYREHlA;w zFfC~ggUAMTxxoIU2tBQLKlGKZJQnKNd?_r>Xt}MDT9)mj7ipmY?=Ry&P?i39*}HgV zUZ+27_@syuI}a-me?oYDKytsFW|s}75|L!D5YssC_B@Q~y?;}vAzZBN@*Tt>mY1L6 zBVDs^;-qZri*KN%4h|uRTz`4tM|^i2USmx|(3J1c8x5Nse#0TFmU0DdZw@ev6SlpI6h z8gY9&GNbrU$kXPZkms9pYCknJu$t7*QZ*U?UqG(zK$z(j*IEL$rP;b}sl@V!ojnJi`#)B#5|La6Ik6Njnnl<&`n6oB80|B;(STMf|V-6#gm zKc@I34&Yy=m6ffq#6?`_)r z%kcFR-=O<0PQ!t53_bf>IuvSa+uDnDJL?!>nQjWeWn zX0%ZH5gQY)z>~yz8Y(vTyzt|7Z zQ|5M>7`BuXiyQF1Iq}-Pfjd49y1_*k`I}PrN(?SNlr*C+@SIszJ!Z_>%vVCl1ULT; z@lnpzUVmO@LlOC7L=m7+_g5-P-0nS_8@g0h(0a~1&#G`yJlQ2$@)o-__C0&GM!1M20N-5`HV1*x^+OwTU>f*hR;tv5abFBi`5<>8X~r?_xr4mL25ImYPId+I9L6QljU4 z*4viC30}wlo0i|x4(L|zCCUIJ82ggX{u^ifyiAh=ppj%s&ObQu$Jg300K5^J-b?@I z@P9wI1AwHgC_nH&K-V8HhT;QY5FL^V*q`h0*K;pPK+|>=CwPB0#XSk+Ln{2$@|0HwObEcIRk`uPnEnV}Kv3ZAH1_#(FRAcnX73!7 zX{wFaIV^DP(S*D8m>SacN0m-5`9c4X5gq6iH zeGp+(M*tu7Tio7M@1e-E#iwX@6wu`y%!fFtDZ2PXNgN_E$x2#vhCye)5n-UHc^{U^ z4p-Qq2xMgIl1EloD_jj(qH? z^e{o4S7%`2DqjM&__Dvd$N!|nCyI&OZ2@#S|`Xc9GH&dPN#`FVTeFdn{y zNoF-yrAZIdH(N)a-{C7QyWn2$mdZXI?`x!KM6uq(lrK6srPfDJXgZc{-UiLu&471oHwE`=HHBLdR&=BnptCs7_+pUiaxz?R@So?C80VT6^NHzBog_}h-d#Z`5cCdiw!`W$ir|({@GvJ zp##-w5_m#D7Zi2Hd+=^V831v=AL)?N6f`27JH zq`MoWySt@JB&9>Td(quUcXxL;XMr2H`~CL5&Uc;P=ih>7%{B9xbKK*;$C#{W$AY3H zMVf}h)Thcg5K-r*8gW4NU3YkhLz&2{I@fDW+aEBPQqHvI7SP)_PA$ESv>%BJn=u{Z z0#a-E5&v(@;r{RN;s0U{hcL^=FwmP!teV9F2oY+D!9UTr8fmXakE*tMVgLBRELE$o z$$g_adLFG815w_Q^1joOIcwg9iaFGHPF#OcbqJLI{kvqvFU_XgEiu>Xr4cS->|3A zsgQieJ1S^h!bp2VrU0~Xw`7)X7ba)~Sy1gAza6769hz~$)q}}coQ&7cy1TcV1|jt; zDAuN21%VCH-H}lVk_XAB`B2uWAhrw6G;$A!SRc-JusPUl+JaB&4(RoM57&j=XvWGg z=JC0?P^H!Dd`q#p>e1r+CTN^w{nw_b1G8DP*B`r9MzQh;-Bl%`1)dH(U+^D@>*S4} zTKw_)2?(}9nN9;bOAYfZ#nqq&5RJab#M{3mbN(23JS=ZgKaaqhbmHWK=5kq~{WnYO9BN>0;m zdnrB?>?rhR@DRCMhelPJ<^4?(p#C%3_*|Dj@4<4$opFPQbyWD}Rt#Az!5J6XGF-!^ z1;~S=;oJMJhCC6owA6+yylZHg^ND7`#)Xe2tB%-;j1U9kMUaY9t+nbLqgDmVJ$T!4 z4h|dacGS0^opV4+9%oC$4HW^})tq(PBtB#eol5IxKHlOT^lWVq9dPt+Eob=ESugV>?$GOc zw(98PON{;SW4Cv1SEt4ar%sTGJDgMK4CL6gX%F;hELMy5DI+kdBGG!40aK>RMPCjy zJPJ^p;IOZm)L{y#=H`hX1Y0d`Vt*Z_y5wKo$7Q4%UKW|CsM8uxxG5;pLQMXpy)5N^ zf=bj^-zC&dX;kiuL!OnTBRmv1gXQ)Lqro+gILYM(;bUGSv(Ake(x>h=E|n_6_3zCN zesJ{&t!YxAY#f%s#zsoO+c{8 z!tVy-im^-m9DW@tR-0a+!k%WPKLFFcp&b?0zgQiZyUAdMtvvdbb5+5Lr)y_ri1S?k z)AS{H@Y8wtZ?*9uB06k+z}tHD$wli^~blD^VFJvr?Z1 z+`@Mz%H?Vp1>d7){g&wVxnT}<5=o104A|>Q?PEKzVqBlaW1GX9`8i(?@cTv_U zxBV|=?ml0L3zcIo>EY~lwiNFyVRXH$rKif7d-&JLy%^U?$pzFijn3#qnMG@D1SbY# zZ%_KFMQKa@lde6|VP!WeNtpc(^_HU$ycBn}f*{_wwc*{6E$DzS{=6LXH2(c!bjcvq z!tuWE&RH~hLi_pHu$^x#_z3p9CKBxez6X2)=))3s&fdnY3iCL)j@eAQ-M@*xJtJ8t zt7>H;CqY${*Sl(JFTAVf z*4RR7pX^DX;R+0cKjw|h@`U4DTUtbT!U&P&9{q^DY0^)anSZy^6q>6VqLz-2hD^Vv zRp;k0Rp-ZRJC0wH;Tt41Oq>7=SW=JW1Yk1nn}kjn6tO|n&EfE&mMM5D@w>w@#;err zVb&*UuqU?ih(`43k~$fERmK$=&EnVd#tT{_egdaLRxc4L=|m(InrZqf_q2DeXJ`(E zte8jkGHG_S}f@=6zbX?KUZ(bShqxLo^W0x#@d9INL%{ zk(YaUp!E+k<~QwaPUbgdx`@}gh^b69bHZe!$u% zOUiHP45T~n3*>$5|5O6A8`cajuG!vl=O3LU z^+UMY;|#B`eb3B$=x51Sqzr=7u74_9Livs; zjdO4OFLgf%)K}uT9n|@`G1{m_L`fcu$vI^8WW_d6u`&<-u;4FRQnPezm(6F#%(}{C z*X@zpO*rDTtA_8;#PQ6hpyOEMSkK|>iNaAVBLr<|hSxGb`fX>Pi%W2d+;D&)OE`$%v;A}G(-kD5z9MJ1BQKLRPf z9(oWh4H;v})l(pPM9g0Cy9ByMR`4+vmCid{`&1q(%d0Le%bdg z2QgN7UgLVDhPRzbzJmyVn zg_AAI_^y}Zkk;iv|91mJ67IY*_U7EP*&jxBhx;^G;i(#$L8tkZ!ow?f$$*BBVX^Xe zapsBEZS>@3tB|u+JyK1iyRM?Y?D3%c)l!+B)_RVEXNKPT;b#b0zJ8jx9~0P4VN3S)@MFU(s2AIx!xr z;07XCq3Fd&_V}0E;Lo1{mUUT=7!p##f7?0rg|GC4(bYs3HPh#1p@#0SA*3%|kKgTXx5;&rA*-Lu*|K`2q-hw&wT=`S~Pr~mB7xiW#p+4jgAUo^)fMwb%+WKD$5FFzutWk zaqIkpg#&D&voyw=@k-P+zbeC-+x372?W_<{Uqxlq zfax_aXyB0fl05N?h|tJmhbSt{=g{NWipQnRQMZfzczTt-D*m|hp^=c432i9Gy_q=m z<>lwgnaSuMR4KHiEI{Ji5icryV)znHO{DtaygJHr2g7Fi=o$hekj!{5ese;wTLU`hN|8}Qr@EmINf7%)*XX&Fx!5aiLD<*2;rzJ$1N%^f*?lX z%ROW0aCZhlwDz!K9)0OdQ>lej_pkxBl>$@MkQC}@$y>~Ik4ta?@0n*)n|_4OxWA7R zCQzWiWG}8w&q*!vmj@a{3i##|YL}8ct;;TQO|2E5%5n#VxIk3OY77Ko?b6&R;I7uUx$P ze0%M6&2O_0c3x6HbU-HpAocfkvjS(%pM6?_a~m7wiZ^Inyc zNDEth3w^Pq^4UaTgW5yvZ!$9B*w!!_r#0U12PE2vT%{5ckRwXWyJv>?Ty>FMK6aS4 zDfhWVZ&gOd z)FJ_aU0WYk#nI5T`cV6BOu3xj^#ZQ)fIY~4?I9L}^-c;!9Opw=tF;Q?j0vUyEv zOW6pnYMTUBC}HKIVVVy~zJ-z%{OG58JMbB1vzGBaKg;(^EfE#`r&=rKfPyT<4`&&e zo5r5wjyKUV>&R0ZSXFcw-gWg$xQ~0#32N5~ZmUaechVEf&AkPieMqxJ;HG}fC|<)E zVrRRvc!eafG;7ZV)FEf_t*sSIx?GXMZOx$6qZhSC5{(U7uQ9fD%(qS7S1O6g3xVWt zTpSK(mihbFc)+_Zm+U5vT@uR(_p|%`hr8;^`_nUBKFI1mZIpn#fu($!m}SEsTUbd( zt+UouGP%MA3soerwA?TCNre^k07tYtm)|LK^!NfHW$PFjV5>tf;3(ASMK8XR2M;4U zZ;dO3lvPr?rxANT40`*v6Y4m5#Zt~5$1nFymRLjRVW9$Ig=$_JA5kvGF_ZRmgRwoV zoHD$K;d(^f>>Q=}mYT{R{>NHdOuQ;KdmGndYo{Wu0)C76jE zFzcC>AY24!YL93Y2Vo(3vXp&L2V%rwx3p=p#srK;2Zo zV)6UO6RnRAADLLc(rW@6BHx5VvdC0}V&)i)b@Ed(gHz*|eQUj?n=*4vJ8OvhsTx$N z#CZW~W>T>OKPK{WtgAOkc4g5n`9qIRHdR-6BYZdr)-UihGb-W*Re~ek3=w)L@^ja4oJ@ zp6YvMv>r2kdd;-kUh?;G)U#;aXkDiYelc>?A`v6Na#ElQm5G->3=B+b-$Q~Yx~~@G z;49yy3pdV@x?aZt$NmdZx|2S~1*AqBg+s%tkQ+7NrFV5H&i2|c<6?yYpSQ;_Oad-n z*K*Wq8A%d;;hcF{#;N8Ri$2enT@ZVKd;%ulZqouQQQ0ARF~(vKU_6(o^-A^yUKCE! zsT%K}JTcd_tudhGGh@1Yr+{}FcZ~vln&N(t)TPpty4d9{P! z1(pO{+yxsp13WEHJvQwLYigWmTz#C1Jc@@(Ym&o#P|Q$$HF4>Aqc>-Lmd+M(EzMdV z)MaNTJ_T0^2nPDZSi|n4;r~6Iq0nKT!Rbr ztp~*s_zcnZ2_GZ^E%CzMt54e^j!aO%ssL|rbGt#ai zaM}U>Kd#4ZMlXchyJ5c{8eNdE>)5aKo!O|WRzV8Z&n%Y=%9_l6^C@mFSR%+B&cN#| z3jc1vRZcl;QX1}HK#ri=047!$%fCL15@rMItCI?-_|#a8SR49oxex;lt5aZevijvL zL)u=~XF$z7kJUEi5B=OF^63MNuRer&+6TyA12=Jo{C}dL2Dt0v#Gf`1Hn&hMG@%_q z*)MMkL#vCLh80-OCT+z!fy5EgS4+&k5JpWr%H700>u zp|kKVg9{c`haSr@e6x)(mgQTLxF4vvRc=2&-)>!!8zCd8BHPXuAh<8h@GK;u8M^QN z#6gx4mg_~QWUb<!99{@E@I=Sb-QKXmqZ|*0^g$l|rzo zZw96J<=5~h*u|}j{Pn_R+7CYBE=b)-=0YkM=a`77(7)x>Z%6ZNdS~;5$NZ%1<>v`G zgu_?#mXZ9rdA{8WGT$tI&SND(_-T<-X`GB^;$OvGM!t`bICfz^@+30v=HSX& z6|vbrVmGw{{bt6mE$q*nNfu&gow6T8q>T!aoABzDq=Vi|S=*&$f(WDPpdRtr?74d) z>7otY<=}qO2KbCHqDMvoyw!0GoIzL^7WuL_5y@^8KGUENm!k?j7&0_`gZmPiO}Z$Xwoc;B2Z+uUz>T(Mt9M$k)DE-=OV} zm+}_4NTBW-1@XlJz>g~XWVSAh!(FZ!%$P7d1u|R|l=3X8;Uu*U<`5G(8U;Fl37^EvImT*QfLfS&I3f~zbVJyR*MVg6nY0bt!cwVZ6 z<1k?q=vGqD|HL;MIbv$O*B^2!L$(^|4Q@@M?35}qRbLj`r8JPJvuJzpstIPu_J-6+ z5o9#@cA;~3&U@&VM#v7Y9G#bWGxNGX?ac~nMUK#*4TcwpmeFV8y>?cmjR>4qlf?*3 z35{NrN%O^H@0N?ep};Gxcm^>Z7`WrVNfh>nNCe#W~mUD$cT!VvRjaB2f1_7 z-%p2X*mpE#n3HTrzsiz|0RV%uBf~v}U2+(VMoEtJx6rh;VH)^g5D>->Vmhl8L%B&8 zh!n+}f`5hZla+D9mt)a`_P4q7uvs@xD7}uyO^QxlPpU5uU>$c?uuNk*s zf(z_HxATHv?7Qf(4Ng^-T=l9}Ig&$HE^^KSiDdSiSEh(H+GEY_mgm-Oi?=&vPaiI6 z@BFmO#sYq1X6ZM>^69D+;D3*EfgnX_IHY2MQ!(dq2$;eVA|;4_AAx-A66R%Mynm(l zEr-!pQ%M*ydTmzVHZ}QhoL-IgbRE~k5U1p zH#7mp%SRiYypwhJZc&fJEJO-ECOy|yZ7OT zgyg^9SoKin<*o<$o}IjwxN;V$P7`ZgYrV0gIM4Lw^T}7SU&@duMombLzz!ofB%Qny zQKus&#`?fnb@t$%XXMnZk?aCK8rq*7?<&?8`ud`g4%wNp5#OQx))Sr$E6vj2)pm7H z)x(>2u?!^sZ{2^2)-j5Wk>9+%S7R$VW2Xa!N^1kYvw+jZ^qfc3%S+)7(t^be;pH21hxe-7UNT_i z;ndpUr;O^dj2vQ@FeR&es`kdvjddpZi4VLMA*|j%c4t>3u2@1;7J)pUWHe}HWhDle z8$0kaEC0z!#mlR!t*SLQs_6HUhrm5=S)1X>38R?-TG=eIv?ahsyHT$pr8D`dT!u4# zlBH=%$gj*Vlt7KxEWe=pq0LzSBMu!LA=W{=S6C&!y377(W^zj)V$8B|QTV3r`8tJO z9{C*za!D?)pElp(!R2T9cT~DvhSbWR+wfYuzi69Lz1N%HRV;;emT4nqvh?0GwdUfD zT+rFX(!Q=u)t(^;2{Rq-qAn zH?vNyo(ISc^BA)XUqI^ph{csI1e56lu5p>4_HKHQt~Nh%WVLPJo!&PFCR}xkTBIPB zBM?<3t7R&}`3{^UvmO6vxT}_+%!DB_9y+$+EpyaO=*fq(%Ta2*5ZwE+Y+MVlAE*p6 z`w>YjChFE&tRHHZhq=9!=w~GverJ{ABgpx|pQCK{Xl&BL%7Z8Ww5tef#A{ zX5JvYet~q$M{UsTLqo*OTY7|g?qvM!K|(KERd;h)5mS2?c{Xn)8Q<-yhiQcU;8qFt zl&&~7p;C`H3yiR_H%qSx!z=Cgr-qDl9*H-i#uGH`?koF#-|{)pH)=aYhRGNrC3OZh zA#8xJ#fJ|7d5!fR7k-*)BB_BY<6}nMpaNvmtfR0LC(t{JDEgQZB$mPO^=dHj6-8CG zViNaIqg^yQA>l9oo$>49qvql)l||`bdR)AD+1YSXbE)c-hf(yUtC>&Wj!-%+aiiam z@hd}UuHxTgU~nOGym4x+>W)w}V@4$>^lcKm;!YXWh#tt)mh)R|H%Cv`XfZj3MJLxp2es8YuM%w-Ojw(BKSu`iW=WcIS7NgX2a2_r?2C`{g;8@pz4)3Mq{8mHS6{3Rj?$HiHn)M|Tm*ab)w(ieH zae$2x=b-RGdpKP3uJcF&0a~oB0m?~-Lpn3PZp7ZHPaF-eAC#;iC|Q{V&+_kL=c>r> z-&Tfj31i8d-3-18HYf!{In>2JvRPt}y2+Ol#w6)zcHUxlA?aQTND)DTu#x~LA&fa7vS>iCCe&^Ie$BMD1x58nt zFVi$W_`;fIw71s_aH-g2j2oM+UrKNhxb4wYC$3OR+g}zCVFD(FF&$Ssg2_e@T<9=Z zm`1mMUAU}=f)LFwm>zg}79>15CM4kY8a-rTzD%|>au69SfO|DkVeDP3S z-e;*L`?$%HWqI`Atc(+BtCkD}G4Czw&zMe!wnV_gzXn_0(aEAR*PaV!hVQp)_7iNc zcZ5Tm8Js8~uhjG_(6_H6(i5(eFV52}P`-IRFhH%EZ6dVsJy1@SX>|-|Nh3(mEu%+x z==xO9Myc5RffcRMY;vQ{8m2vcR7MqxW=TQS5t(+%wzE@k0F^;LVB$^nBoC*>&qZgZ zaPXFjgZ7ZEoz}5bX0L>JZSxi;o1>kexub_x<2}ym3*4DYt;(sr&qTa4eq61woSd;;dd19Pcq!oyeBMXQEVA-F5kE%U4Xak1@0Sm zS6AX`eBlbp5`Vu`n9FM9?7KXqFRyhK1g{xi0b!{xvGP&aOuN%$tP=jPWg>Zb*jfi^ zHP*xA<`tZS@%#A$)l2P)ZByqonQ5p=3b&7?GAGLm%F`F_V0iiN2m=t)g!OtaaKB%_ zRo}G+N9RAVQLtZ5&*JLX7g=V_iKBvcvU$z0la+G7H1BXb@_us25~V|+obR&( z^5=uVHnSK(8p_GTg$OShm?GWf;VZ1=nA5s8^B3z>HRTbP3)DvjG<smN$l=RA@%tPs_p%p3`T^;-#zC7K(oTF9l!JE+8Gs4vnK}Z zWC;g|+Zy6@O_jM&fv;1A3Uj9scK<$TR-<8B#9(OJa$Ktk(O_m-RSv!QmgefoE8#)WY z(Wzn)oU9 zKe0V}l9A?;NKU&`iAB*@NlZ~EN7)+YnP72|AHb}Y9o0~fKkSkZ90N)z7wAc5tdd>2 zOs^_pN-2B0{AT6HqgHzCa1zDQ--iB5{2cX|G>iA{`s~4O;WG#DX63t?v)K@}pqx8> z{Edfm%@P3Ir+YAs_vn@b8JGo~gvLuqF2np+?_}S<-_IL4KEpsmlRvJmx&YG;rpkhi zgHMC9l@b_<|OLeg;h707>AqgEA^J-%a9|*LGrR zl01w(utw1mKH$V%eORnoQ&{Vz%d5OtcCLcN$RYdSTckRzOBhXzZ-&-jS%1m@(Q?EJ zS%EIlfgY*M5T}sI5j)X!t@8zt!{(Ml^A8NH$-1a;zi=(CufOYUQE{nFYm8IvM~#+I zSv!@eE;PX^B=1~1Rje*#U#+Ad&eG~}?XlEV;p}xiev7_h>o_~gt1-D4J1gHq+8L=| zz2HDwQ6%}D>kH;5@-D>%oS~B@tCkvcx-sNZD~Kk~9aWq?DvU)X9JFEv)D16i zBYHWHgcfx{ezt;5u;BtM4p70PcW!!Xb1lODn&wmEf%=2>#jsJ`NjK@K>lP`v?3BG+ z#n9dyH2Za@vp)*~bsbp|zaN$gS5w`OfY^uE$P#NAWc4ETFFB<15_ktGacBX@?Gq!qFaWNSMHhs*PoFe=9Z1IjFH)k-KW1gPl zLDqwsYS20^PH<>+an1*?2iP57M4g1e`}Pb)V666b|1z>H*@WBWvSQ=w!Jg}4m{1P1 zWs9)V!k9CqD35(sag(V~t|A3N&8#Ggm)6u;uQ|g7!eJom_)O3Ex!y=mkFYSr z<&_mA931$>!q{X0nRlfk#4}wx{uapXYMPrPUU7PfT*1&>$u`WJgggso=w3MCY{{?geV!eoMz|g z_L)D*J$;l@1db6I`{gd{a|@q4^61iX7z7pN`#g|; zR(+TP5$obK*pmOR3BzTzfUU|sTrAu9v%bHYEV;-7OLKLa;-kd%Z>`F10k%qRsab#G z-)L^&U`cXqLMr}Ul*HImr!zFlHYz{td7#PO4VD{@kd4j+9*{*ypmIS5KZ_+iZ(c#e z!q$eBIlw&EEvJT0MwXk49O?YvIHgt{QO5Ic{gt!@k9Emq)%lt9hiv1w9OM67?|=3? zoAt3ri6wdx|JEb!YS=^Hl{N8x$bWfCLhcz!c{B(smcklK>=25?^yxnD3`6xZU1-`}mp6D2;cwq0 zqR}EU+GU1gkAGd^@;G=T8lL5+DlCrc*tiIWZJ3g4A{yJ{u`XncsIX7N+{6L<`Jg>m zK1}O;n%|*Nh2*xr?$x9n%ld8&WFi%2qv(zg>CU&qomFlJ$FWwxSkAc^>mfmrox4gmr#e?F+0u%Y|Ko~?w_np4crM=hW$x>HlBUA|m#ZA&iQ<-K%@f*EmR3jp-`6=$zViMs1CAbJD#?<(DJLp!~U!Hl3TAt9FDUMTw(SpI!em0~1!$oAOK@{*+M zvd~LWq7;B)v`2HT4lqJ{=;_7ssDPH`%{r19>`rIZ-0?>Pb52vA)c}~RyGh2$7#DAU zb{73UkKDj$syU&_LUh{Qk$E;WIB+tgn?CjBg0`lF!(?nMMP4W?Zj;H3ZW`dfbDLM4 z-b?<#9rHzO(n0vM!m73ng0`>$;YI%K!@P!Qb(XPsL2KMe;^FX4SW_*erVKN9x?Zri z;3|xXxLm2k`?h2}p`obZF>^OKlRJK|tq$DVax=W;Qlr)?eq#1rGReHEw(?}A#TAf! zeylaz-`j{}GpPN+djE?UtuAmB^jcK184UpoZ0Ww z$1@P=>&xtPVx7|fVszrpz?WVH^D)2^`=Y%g;%TF9isZiCjybyYbN=dR10o=y>TA7T zSRf-V|35w)+0D_n4o5TXn=v$4cOUN-*VGUx@gC3#Rsw}Mr>;{M(m(ibqQl@d%Eww2 zqpnlA!WY04w#g{>xl$E|lm-eJ4pkx%xtD>1t>~u-@|s^VIlk`Q%hc9wdj%k+ZwU-q zkYyL1JFaFp!-{5Bp2*;Pt1T)B?&RE*r)7RCcmhX|S;5aJ_U3hea(laRkJ?O#`05`^ z?}cYV0``xEo;#ma7=t9S`7Dp)%BmkDeOk4VQj-oDT!x--i3%C@qU z@`AK8Z>^x$R7rpnZUTsNN?2JFsXj(N<+g1ig9yc8^SwUXdDv^{c8X&%y{_6JJ%MS< zaG+NX6FhH8zXSx`5;uIKjN-V5S&lC1EG{mFF-rXTJp7XLpp6If3fbLGZk&Jxjf$Xu z0u2I(@3avMnLU2Df%2kL)a9lQq93TJ!M^VF@S62n9T%cnC0nUZ0WU3#LGVXK-Z=*3 z_%#$a(^eNm%7l^*ST!DL8)>A{(SbY*TP3$3Y_1!_qN=cf?dc&O=z2C4vf)7ISS$13 zwCDurL3>0A>HVsIW!wC11^ia6UQjoEm$)$Rq<<>g^cp<3qSH@MLiyvn3v^!Hu!no6 zpJjiP%KiF6pHnWiSx@1)u4nV@(U#(N1e$QN^UEgBHrGEaNZGd_>UIh~knw6y!Hgg< ziV+^S8E>9+#eY>1P2IE_u@;6z_#6=3^eM$~BvZioktBMyt2A>!>vsF41${05%(3xU z|5LBXUjcVgnE%RY6HNxJAtMxSVL^%Ddar5iA8WQJN`8vPChsADfxfp z!%@ryzJ<}Obiw~Bsa5m@K9&D3No}z#&~B!%{fzOixpay_flu@QGnY;dsF4VK@E=2E z{Rrmi?fw705QsYf6o~05OW`2Wx}34#6WetrX`VU)&*?QT#5d`l|)Zzd}C-?lkx7WxvhkyPtvkN2gH3g$P@IZcQ~Z zh@9beVfDI}zn8V-5-2)#r-B0qzPwVJnwZ3w#!smN-hOV{UOEVqa6 z*cX`Kbs*z5L$&9>xGx)ot+8CHD6nMiw3@hJ0Az zo8o+EZ-!6XJ)669*tKXg7DT5czrg4WwpJW9CvY=9`cRp;1F``?jb+fJm`9imxl*In zX^sV6+IgpK!Z`<~KK-t3uH3Kjrq!Qq8UpIU5@7+ptk-lSsosddaLmBw_SiYW@thHS z2K0me_+l14&f%=4`($=eGcyS^*@bfEO>_P4m#)bRT$$mekGHEDY@mN?q&(0~F)Up2 zsKo}pa}<&Vn7CV?y%p@S`R!t`Cd+4_I5ga$?-`xbn+36oIZQEd=TUtkE2&fJyX+0_ zRs9$@*aAe(a6RqerCdW^1;^1MXxM6a{><^FomSr+`HcrokwZ>j5@Bspx%ugHsd_qD zPb}S;^;dTW@+rb6c1Z9LBZhB&v@OS&L_R}%@ag@)eYmA@)Vo&bz*t8?ACz^uIQd3thII{Q90*u zBaYF3=l;z#&;ck*NxPQ?-|^Gp?~`3I!6PCaY}AO+Zg&bXk;?qq;iVKS>twp)%GcMz zM;4CIho!a0l6qK=+a%jR~ZFXoeal-cDU$w6M%z zo&)Zj;38E_sD;tl+~JLAT?uMTg`<(oR~O2IkF-(9prF{W#4$Fcms@vJlZoocW`*Z8 zH=UwuFA$ks1q8W3$y69kDn4A-g`O+ZN#np&sg2Bmg%XjCWM(ecf5qmmsbl++& zl&~qQ2DjMnT%?Vs*AFT7msG&>9n2?9qE~~ng)#G072;lh2@i=URyFS+T(WDfQuuIG z@~PO;+t0W;nM5v}Pl(dyPLsH@VaHcDV!mnJ7-9qKB6YL6`n^el+EQ%vmmjqd`Ub;h zi+1-v!(q;6SgM ztY}-5=$h!7QicQo^L!VGxKrk0ku2sf!76u^Lo`aEv}Grzg$Z5$PNafHy|}yz9_3&i z_06e%w1k!ILrW?Z^$A4X0 z5(*3s>s+xT%kBz`_D3)s?N;53KZW`siJnp6ZL~r?x^#`I; ztvNM`Gvyl%iYeb&6_0q9W`h`38xjHV`%noz{$*+3KE=O)6oaH6LffK8q9Thu+iP6{ ziW}DcLX8G zFYQDG6RiJ@8;Y?#fp)p}xQt7VK1Vm-7;nPa=MP{c1X{=4X};dgkLD%NmYQ+eoNmY5 z+BVyq6PWKJwU^?Wh2q$r<*N{%v(o47p8HQ?yP(S?t1b{O*`$udbG{Z*YEoT8YQ_L94B~tJ0EyL!>#hlE9rq2%PZejS#2l;jbJCl&veLrQ z)LnWP`T6x;{S{j!aW{@a_TH7A%DS(-Q_(l8Kr|Bu+EYo9-ndA3pai5+qI7KAe)bTw zxjotX`O=G%B|6y}jrR-t@%dRm``*14SEO*Uf4$q`636`Zv~$LQ=s{TVXBz+Px3`<+ z=d`=Gy034e8Y`m!?!U;S0OzK`X8=M{&=iiGWwDZ(bG4OeY%p@GHCowwQ=y5>pO%)k zzva5O0KDPF-29;wnpZpyeSv)&&#J%S789q{wAFSEkU&R05#=`s@?{RKt>QM;O^>itrTC*Q!U z8UtE*jqhT)D4+Ld}3C&Z# zPHSLWbP4g@{~7eS21JLSuXNg=pQn!IwZU|G&Jgb3{tF-|%zZ&!TQ(Z5rTTk6{|)Vc z7g@sq9qy%G|CQ}D14yoX&LM0C{0pc^@jwOQhR+cH6)-7+3dD{7KdSs|PXAv~%ekyZ-WDBrW2KeKaMqqgW zI1~>g6v$UHZ$A=Jys@3h`OjjbD zLu1$yaIlw_-}cAYUUGSw7rhH`svp!J(lvnZ=kGUknQez9bO-1bUrHNWd2sSU1n;cj%_5 zbe1EjGy4pxfzmHNpt%jz(j)xT%|*|bKTMlTHE>=jpXgKE%+b&uHYroI2L6JUuBG|k zBy`m@3~QVkP3I3BeQ9%s%+}r7h=~a9`w%F0BfNZc)LW;qI5DpJ`9?3z(BwPTGQO4v zTpFG$bYVWcl*jcKOk*KFTCQ@KrG51<`6|BF^-3`KOcIkxvabd$z*wDoVS~BVbeL|p z(E%dhh<1{_7He4#v1J9R(>g-<`b}=@{#3+_)oN#2}zdPA2Ltje3E0R zy;_o*vjpj-=J2Z|hb>z#87)<4oJ|zIKsvO}P(vp!Ooq;+aoefB&UclPldnh=4X_+v8h1O{lbiixr z$}r)#3w!B!tyzu`S!Q{QG-?LTdEJUnYp`FpJl%8fWeXLH4bLWl2D{)OK|oX$A(z<| z#QcIS$lsCebS1JxpOf>$G?=-Vq34^-JU~_bl;6=+en>X+9k~ll`AgN@pb^vEMXYmn z&YKJFwt-}CjpGP`iXpaJT|mAQYS~4Xf>?KurMuMt$^DtSRRP6wf`Jzh6udy+S1$&X zz^{M(KkU7AP+UvbKAI4LKp?nFfCQJ|!AWp;*M#8i4uJ%>B)Gc{4ueYw0fIY&ThPJX z;WtA9;hguJ`hB^-}?_v+QF*R!70-5Dr9s@@Yto%_@2K1@3<>NBkI zz!|1s(kw}3Fqq)ADr+Lauf_NMX+ln7(?sv5T#!MvQu*dI7ER^FBD?996GEJHE9t== z5=~M+lKtDuvn=vAHZ!Lq_N;e{Ta{*W)KRcm)(xIfix&M4h_L3)xIh(-ypT%V)yJ5@ zaemWh)6L~JR(`6yggCn`bL(bKHu@Vto+kGnc3rZa9xl{sozsEhSnl5(d*quBQ!07B z*%FnM_Xr+E`b5`UqN3_bzg=CLb)>1ZfAx%NU@4`t9KFX&?eTC~WfB5p+?IK)zWLj~i zO8=aI%~aH8#{ddH<+BbyT1aA;u5+Qx==sLWuNE!3lGpB?kZxfP7@2~7bOwX0w)`|a zyN*k>a#IG5D3|AnGh0SDQk%afW@8;<(RDnPq`9Wx`YQD9)jVusNReh`g&^F>`m?$r z<@86Itg(`gL}_^AO-i&nZv!?zWGcAPOa$b6AQM&>!}8{j`&Qg;??(DLxUnK+XX2>IoFBDYxRV5jN zaSrqp=iC|9Zx6P;UJXo%G)um0Y*t|G7>1n7QDJrNLss~jmKj(5W9kRLaWN& zy6kYJWH{BHYGl5E#2I1`(#0#H zqKysObQf3Od-NWDkvWu=vorTL#~z4=LZGc>=V`2<`Zp{7yJljj1?-MZrIE8*d=1m} zTkh&s{z+M^586QA(WzZzwK~6UTLNM{Qm+`l5S~|&4FfuYaq;id)jvn0&IRYRyUS`# z(o0U&k>DKV!cYT+l&oM`*)cp(m(J|CP= zMqY9R7G#k;R}3l*lhue-&=3b8k_)F*C=PjTy9&HyJwRyvcDLcJpBT=A40WV2b%RmU;f(>a$Itgu(tncRDWyNLPI6mDme9ucZ}Onwi)$*>T_YF%UQ5`NvF!A` zLeJ5CWmwT}Vpet>si44a&nj{w?~C~8kvDPY(lb^eExIov5|_H97rl0TAk4S=F@18h zB4;Gpl?0I=Jwj}#oYJ!UX`k0ki7O+BU&qn;?sgzkIA)pRY`^%u<;43(cellLdFh)D zl2NcH`w<8U39FtY6=0u!q-Lc%MP&0jO|Ce#r%@|{r6gHRslp7Vk2L*YJ#JzrvfYY^ zr+5o5Zw8Q#f~+=N85M3}_-1#r6Uw|JOUi;hTz{=hx>m+Kg@W;0YYFJP`d>lz=q82n zXeBQtv7+SHZ!i1d$LkaJ$XlMRMRBD44-JGP&OOvUdv{YRhMETajR%V7=RQe%4!g$z_;`?>pT7E*#e^kk=er zbbk@<()@09e5_{yV(lzO@53Hfybq@1LeXbksE>n^{0R~3X2<76X)59ZB2f5e^r<#= zRI)Ub|EK(@*k@Np#U!h^mhmgyA{!gb{0DXu!wBm`^LMA}FJp`^>*kcrW>{=dSly@a zlzEAQhxfT=SI~mAnB0A*_w0_Wz)i=8Sk$P1>br>vhwu}+f!(oGa!MN%U8|aB#>9Wl z#tjs89b+pvr$+gD~*;4giJ?;f! z%fihM!MY_C6&|WGRNYP$s{DyRTbdVD=@}$Z1^l>L&wn>NsjfcFr zd~fZo17$HZp#TKrSi%N{CNx4{+uHm~qiOV+v7w2vH{g~^im$3Oe~v__U>LN8L8)$Dh%5YqdrNfxNgl~_kleo9BL z)7|$&@Y(t02ESidA^Yq8DhLG)?L%j0r(ClvK#BG~ENoL-Th2crJIL#VSiKF0Hi;_X zy#yD~d=j_2yE`L*n}r3VudfdR2>El`OOgK~D;f6tj-#3j*yKV`S~pNl=lch66O9F+xUazG zxDf{s%(vopWLpv5y?et6jA1~g@g)cjEPVYx!GVUntINL28ikxb<=buCtsMm2NFkQn z$V(j@XGvcxl)nhnX)Tv7GnPGEB3WYQ*_iYG%sat2;(`@LvNSU~MT@db`*Ta!a0$gx zcYz^&1-^AVvzawv6-ibms!*x6h zl6w2sB;7Mw&oWw-1Hir4CKo|^4R~aT7fShDRiF4c%IRDY0Mb(?J1g!zOr{#a_DqMQ zJPat?2KG8{lF(`JcX5ZOwigb?ne&@HD%M`CsHZcT!Fb%5| zPC%8r-zdkewE}+eLqMvBC=GtrZ&9bcC2A9E#J$q{JLG9!w z4awqq@9Dd>m{94EgRkoHYRNt^92-Us2X93V=)Nov2GrYdKBy-=I zZl+bwBef&C(U8ZKd2B=5hozk+I?u2Z=TI7dy$BALzIFC!%>T#47Q$S_YMvNJK^bvk z=|91&@*fWqzWxgW#Cz8GIG3tAmp$Ov!a^_*av=Q5H)-rmCwPPwE?-0*i#NL~j^7if zJQw808tIn)8UB$ijz(vfj=T(9g`HrS`MCgRp@nyjnSfR5OZRrAh+|PQoG@1+$>CC8 zZ9>$)G1F;UC&|UY*7&JAso=tU!pq0PGxVj!dwZ%halnW51NzCKVXu5-{g-$WfmSsr z7(@X)+~+!H4|Akch-|+RuD#6bd{}dDou6LEy%J67V^6bZ&=*|hJ|ZVED~L#Q=Wk^L zh~5vHR#*H|g!7BQP!Rk#e3xJ^ptbyu_zs5wg75aq_Md#?XFHh5vO7hNQpBsL<(Pe= z9AT(SFdV=6F-pth{?yytV9CiVf|T$xbrHLVP|zDmvSGVXL)KZhAam0v>Oi=?!JeaS zQ|wHs%}3L*R3l?fBwss_*t3RphT0%Z^0dV*u;&vmplHZYz?6CPax;r)Q3AgC&D)<- z7e4q92+jW7B|s^5CaWG>P%{6?2EQ3p7wnxTOgz_OSj$P4ERy;|0Q+r} zoW)dK^4?)MIAFAO0YL81_n%mf5g^&AGB83i?|lsCpyIRT*W|q+m@%l@Td)Gbai*G3c-RDIA9!>oC)Gs`kC0%sE|6*E z{UVW)ry`i+CuhaYvPKr~~hA$airjIvVPApmdGrKwcumC-F|2jF;cx(l)ul228T zf`haCh?=1^ydqO6RXagy!!#7NyZYEfsKS z99a!e!=uotC{!Kuq3{hMDY-$opT{(M&4MgP;a-=PrewGiUllP1cj0`wbx&>7WiGg~ zDXpA9LvwYWe0yWT)ke?k>>Ki;4JsZf{i?wLPNeuBI9DF~&u}jDZ*UH>xTS5U)eq&D zQxLrxcC^cA`UKarkG5_Ga=g~*)=EIJbmiNhCDWFql~5|QHT8kZClW@ISd+e^w{5Hx z4Zc}Oloyr6*4+#Dj?TYhyz_G&w5y$2QoHBCxbcz&};$opx*0ZkvoZQnTOJ>Fu^W z5smgwqtvvFbD^{EUeDS}e}->HvU_9|X^YQ_WNF_&yOxqB0&45%uzg`5NAXH;t`>Ei zamX`ZEXzDZ)MBrBfgNpYF_!l;RiVY8{?m<6K}X^<*nIY|vk*v1=hBK;K=alaymo~rs8?|0$jL(E+?81kwEHnj z`h|1X5rO*vXtp)y$F@q0zRu-!%?`Y{raI%^uJ|RKePRiJr3bGGQUkbmkT!aDf&D;+`7va8N>*}Ad zhO|vhUFa1{OZ|wNCTaJr75#AbNb?uVdPXKzK>ehOwxg|W>35PVbj@M2qb4ESelHg5 zOR|ax>vo0()eSZ+iFIlPAu^rH-*Bm21F|uyN|Ho-Cv$bo=a@+2q1*>fNPkc-6y1ES zhO&YM+wUx(21_LfdcK+ggKDSY3*_7FREU3X9i!eX_%-sHfV_=S?mYM}X1gtq|0`yL zkf}iaj*veAtv|B%41limn`?cKatrkS`3itit=Fp&Z^6@FUojv_!1B$ZcS&!z<_7=% z7nJ{zBLuttKLO>*8uyunx7*%NMcX~C(TLS0y$$5EO`#^Z97VVG$^^&0r^6BVt!!-T zLetXHa(cr1_~;C^Y{5K*|0D$x?+$;JDmwXiwn1Pnn02U~8<+L=xm%v?Pm>ECzhV@+ zQiyCYjB#09)e}6j)3mn@ETXN$-WG2pFE6mszrB-J^iV9hyw!{hwCs_?t&G6W8CR|c zBnvk^GxP1i+Nk4deuV_jJcH`u1r|ZU1;-=F*R8r{U!=4p?K@xZne`HshQ0$=usniL zbqd(H$IeZ>Wt?QRJRi#@QhUGq>+05!Fn`6Ha))fA(PBSQUxR|S3T)~mjXf(WIjr+s zOexf9oqTtjp?jPM0aquOpX#ufV!cUR4V26u|0m#M+r^F0Q|I;>HNl##GEdpUVyc1} zM{14N1btE_Y0xaV-BVxHpf)P<^E=)v8x{S&w3MkO2p5??H|!>m=+e|u*~E| zI-NEnGrO3qNg={(D+DS$83bzq2to@XcZukQ9e2l;E0(!X(deOo#=8f3zZ;r!3R@p) zW`Kt5Vv3Pijo~Rf;4W11MYBDmC6!*D;oy|C65jzH@bEe5+mpBP6h9m=3c}QHbrX8_ zJd{)a^5kg~bcLx-8_d+ylp{DNtH^YeaejV&nI8xQ4sC|DiZvJ(Z6=g&#pJYeHkH(k3%DcP>01 zWsk_#cM*wjpJK9Vtj{m7x^nDPZ0gazfw*BdaZ?j?FB;A18FoS^1&#x>%9OxBIq?LpGredR=@78tvmOjanC!(dJ#S_ z`csRzn6tkZ%FbLofVp>%!F1%s+0oC?6S4V|%TfoTEm=h;yw)Vq*N>h*Bfg6YhioJ& z6QGj<7vM+1`d#rZMst08YRPJDA%-&6culyS>^v~9vYINJf+`?;ginT;N|5g(vmdh9 z)9`0Zo7`ahCK~^m;l$RtO&l~dadEh5y*L!Fd zieGRlB?MgR+vpn@k575We!?&Gx7Y1{?HxRl_HBKOa&pGYC_}SO9s4nyAe2; zLes)fgA-_Fu6%&By1h(xG;f$PT)g2IRr6ZdF#2`AJBIh7Yege0$uwO$$@@Dna8IEh z_kHg)X3a#CJNrX_0Qo`*xx?d3CO7oW7GHjfV_K!1w#b z`mGu@>&aWm({1+Pt?Hx#odqhv4Xwib#XgygL_ES&WM2%p9l!eo?Ngcf2Jft*2pCNY z+u?=1RT_R^m7bF8ZIp@$VCMHzb&AOAi{z=bhEJ?)P_)B8yJtsy)3B#9CJ)4T9)ZT_ z`Wfyc^WE{Re)>Y^>zx>7zKUQPQiU1~ryjlcXS>NZe+uyU=87syXHV1uzN2wl*%e<|5OqFvcMbxlIgIE<^7Cih~Q0iLIyeuRsF(;F^Tm(m{u6u&Td0~^@ zaJ8rp7gO+ij>>0(-|~F=o{t;t>5)PYS^O+i%8isVXPxA$pxL>J!utuAorP+bX9AK^ zMENU+d&&d7j=|1n7U1F;*7Kg%tDv9XzSymbmok&s1PG-+qoAu#ld7F3rj@8jT$?P4 zBCF%l{4hL`-(ERxu4sx;*DU0EUBmMjIe^Hj(^j~VyxpF~!1JnBw{bmm=XkKVlx4(C(kg%uVM zn9%oJ18OZE26uIE%@a?rPB8U!vvnMH6`wOMWyY(zTlB9%YFi78JX43|36ZQXjH)RT zPGqm>7_4?2^F2j|xt|1+B0}&>=dTq1=7Z+}9MADP zVwB%)`tNhUO~e1UBUm;{URV z6_XEIx%$K*YWj5ferEu=$31C%%gnq6Kzc3#sYlMnMog-xIFh1^Jj)ngBNeyZ#i+Bb zllxFCZ3nr`zH+|9{w}y=G2Pwxh4C*#Zs-c1^%F~EsZ@F)?lnrYGzM5@=JSnTO^Z@AAKcvrQH^>_Ez& zszl^l9?O92w~dpmeaz$c>kcZB*q*BbDyiJ^U4oWOTE2knT6@uf;*~O`tZtfBRxVSq z3k91Rl1?U>1-#sX>-j_P5~S)SLOqK41vP1PClY^dVShO-lG~4}f642XLWsl7C%XP~ zh_yJ&M>;y6$R3MLY08y=rm3I1{*AL`_fK3KV`X5VNmh6Y+TKo&lOQ6IWI{$wo|mmj zVk@GOn6G0qx$S__p=++2QjB%0+-H{yvN|`AAb30{e?QT<&^#+>P*)qXuCP5HRAYfr z2V2)}6L77Y3R#d@7d)6@ex(etXg@BcN*B?M=e&l*)EoGIBJt!GH<44H=CYMpcj(i) zWT!#4h7zTv3gJGQE=C5fF$;jCE@c3$28R0p(z5*=Smvb)?1amCd`a+-0;#@vnbO*mFt=F_tA(@t z&v7-6U}e3DV`}EzD*WKnO))c3?KBWw=kQ>S{)&NvL_v_1MecXWkcDCGZz*0$EbHxf z`?6WSKu5RCemU)dkve&n#e<3nO|7C11=+}qwvJ1!o`%KV^o82aKD23bC8aTA zx1G*s32}o85sW)a+=ihaxNj8y9&}{gi6OhP4lvJUlJyRg^2!gGlExBqeU(NkYFP%~ zQx^>Qe@?Mxmh9gmPM8Pth_NA>=lcv_jwNtQa3iG~b%coBmky{QNaPY&+6#b8%rb)e zJnHA_2GnjQDLt<+@?x?;N=dno91=3@gZT&3clE069qW1G8&VC2B6PmVG8Cv&u{pP)ww}6o)1Hkl0EbB#8N(k-5OQF(HDSn^e6d@KM%O`c2+A2DOGku z7R~Upc_-Ngwu93@Ew9I_bKZDF{D%ggSy6*PnDi=`SC^%DmBPpqaN<})vcs54XS z^1BsfzH5#v1e}RdtDKilsqpflP42GA7>2QekwF69?!g(RQN0I~wi5*wdyAYM;qKWv zWBY{JXm9azgJhjHNj+MGaDJO6zNft~!&wZ_=^8S5dI^5z+BJ%qYN&EsS>lR03L|}8 z%%C)%>WBb@5e)f3Ay|EnS;-#iPzr}}b_8%&wZmDfRDj&xaD!I**ppV5g1Flq*zJ~e zf(mF$9W%?6mx*Ou|l9Fhdiy(hS{pmF+H+7=69L>#5M)36G9}Z! zW@q=ba~WHc23mEa9_{QeFG5$w`!rWgg6jL*@#+k;R6&uv<~_LWymSEf9>D87?H56# z2`Qa!&%b!%7_~q4S6s!`)$DU6Fj^^?2C9#{PkU5SDw|jL+Y3{XRl`Hx6cd#o?Z>3* zn3`N2XVzRXx}r>ZAU_HvsU0ZK`((Cbg=58+lVu|(!dl7D)-jrDlUqeDfb_cilNax= zN%ydTNN9g~-1GBU7k}ds8OfF!)w6*#TA!e&)Q*>19A+kDi!8xxKug}Imm2O z-kUI0*`WyDs8<*uQcr)p>Ll?OzgkZaojR7DC~||Y8VS5R$^^8n0W#Bh05EyC>D?kM z3%W(iG2MyG5}I|Nh*$Ap*{P)BNW13J>^{ypOBgF+P!9=ck@M7?ja)ccTgq=Qor0VX zIv1{!zsUK?fiEQ@8?A);1k4{PO^o-vZW1h2~>W0lHvAs} z%If{DKDi~yT17L=Af<|>N_LLDrN|GFOnWbnO<_K7+#?fmuSPRw>I`hA6!>D4E5<#B#~8+3uyNazmNYF-CC4 zGMMplb?hP{Q)@^&VNRX8pkwsJpm8YH`LxYgCdT>P?MdV)0^=`#3*xSPg+Frn;8kd? zmod7cZ$T8NHNG_E!g)uj>|wp3>%lc3usxmNDs1OrGqSHg2J0lnF)r$Luj_J7^H?le zS7oXln?ePffG#2_srdHo+lW?u@Je5r@ASUwZWkMPyrK{ig+8w)BPSQ8R?3rUa6dnz zk|w_2j`2e~x8^iN`65Ws+4@sx_S-6~Feq5Pa^S<^6b@`G+ad&oQBY7SRE1sgqmDr$ zyNpjfUP#mKa~*P(?{+ad+n6?VR#6%xD(YP0h^c?a5e#>+f15%Wx=-QZ^GIat)0_J; z@r-KlPo6|o`5=1o!Bhj;sFIG%07TcupL0y&%Yu9x(Xka+W- z+W&mJpXB)D20;C}45ttW8AHZt8E>y`%S~~RD!im?VXrmnb_;SPAz}gc$uZn|(VH?G z$*1n!{J8apAu@<0#td_?Zh$5-DTL=09zo zfhD*j&6JlaspQ!nM)al9T))>}I|_zsrhOQJR2KtdT*%7GD!{}g-Z{}JnDF!&|AV_` z*{BiT`-ABYSm4AkTotUU@YC~EX9Gzb&+LHQeM0S;ZZOl?L&;MT_3nUzeB*J9;Z5ng zS@tv@S`HVp%o$}Bi{x}#1T{&SeFOE1iM&zr4{u&9xf>qYHMdm0<10j-p4Ak{net>F zfS^1YJ@XSKdQE$op3nyQ-SQgaMje~qctZAJ(gZ05j&=)ul1aVX=nS}H{w+Uxg!&)189>QzkZ7C*1gHzZFEU3)e|k)~ zQR#lu##=;>ItgC{_x{qux;&wZ+VmxJoIIqi*UyDXo1Z16Fu4e|zro0nQ$LQ|JJ7_+ zvB)ZqG;^`z)JrEkE%{L~;cV79=k{umL=uOIPjkE(;MR^)Z8dy2CU3k`M>q4wDm;A( z4S0MLd44r?SZHOUqYCJg+ytrTU`=EUcs+PYJ-qdKqSCA`HFIcJO!mgSM`N8qH0K(q zg(Y5O3>@o0==qvEK>OIQ-|Ol3F8a&CQ}ax;XMN~2gDv#+{fX}Uw$?xAWI5m3U4+>% z=P1huM_0+Jsy3{6%XS4YCMfY4H=1jn`v}K*BxEFUjnfolzFQjfTsPUD<<%N2QOYvX z0nwc_Rl1)X^Ii_oE5&!2dN*_q#5L>k=* za$6=Y%1hSY2k~ktX~*M;mpSSxYchi!S*#DcS9ujpS9`Oh4f|8+oae^7+QroKr4wV) zZNg&JUeWWm=s09-VRh9mKBP6ge2-}%0vbF18F3hDRc&Eapy_o3Cf@V0Jc1}cnM$r8 z)O2MddBV`vT)qPao20RtN%!tgC#Eb-yQ$oZI~rHIhltPn>Yh4V_-oRkQ?JrNhI3^z zN~C4IQY2mg#jlSU zJ(wB$esZBAJ5>I9++o0~roJz3lScj|CDRz>k}TzC^`pT#&=h{SbHD^3J@m1rTdt;s z*tq|gQInHPo2Xk`7L#!0k0ri~x^+&;z!xEp_-pWbViYC$hvzJWA`V{Uod*~i5gur^ zES5xVp)YZ&W!vS|X|$=$qvK}E7^DCrbM`PJxm2>eJplA_HbB$Hr2x)d(*&D?r|V}& zy64pjg8UDGw$oBdCt^efnO#cHrMan$2UM+3HFCt)w)H5@&JWf0`rWFFY_@@2 zJ%g2>AH<%vE01{?W-QhN<(pdL^Rsu}N-vbHPt;3tlFSWdrklVAn`E(eueVRhp847E z*1aZ48~O%Jo3EDBE%B09G^HM_ZnoMu6BSc|9D@<>m`hjVQ8273&2R{qnyY_V$^kS3+ow9&Xe9t!3a{D zI8;lQBKk}5@xb9H`}3iOb=*2mj}JZCgn7>DNP_7>gPNt7U|;&I)pVkb z!OAS9_LU{<$Fd?4Ce1?Hc}r~isuhBm4dr^&>&FOzaL4q2j5Y94xNCJ@Ia&6vN!ZgE z*>FM_Z4<8mQJO2eqFnWEc+vgmW}qg(fpYjyz#ujQ z@PPhsZWi6}y|TDH(CGQ_>H?1V;Bwi(P?s1L(7Q~=He7tQK|4buO8&uv=dTjv7IH07 zW0{qd?KM+diCm?Fg@T7E4@e5q3^{3>!i5~Pb5}xX*RSA`-4?Ex9hI-C&n(g@w>6(esWf>cTb8mxFJ=;&5D4XwPHY7kruMVY0}4 zwG^M;scp@oBO*;8o1d1^9p?xbqruKM-xjU5*OFS%?xU_@xU_jaW;_^C2XrzkqpQjj z79|SFT<0Y;xzv(oGy=0zwN9vqie`p`az7n!H79h-p? zBhO6o{FT)B6cfjs+!o>piYvQ=(xLhpy>)5o7GTNi>JpS#c-^CIU6SIa5JJ_snXY3B8 z<>Jy<#4Rs*fRtI6*3hMrReEudiVDXSfhdS{Ev5H-`KS=02$1=q8|q5i2}Aa!4N#Qu zjP3SP;C3IbI+@lcvFi_J+COuW&4|Q=&BX!VA~%vb?n89Vm&)!Jm4__iSwvX9J77DB z^MfPjDrWJ^_4dR?)#-Cbd^Pa+rrv9LJe47WhKyTP4LbkW_3LkZh|qbE*f921o!8Dh zI1S?EpS)ZR!nyGouWun|6GQxbmiv-S*9G0w_MXoT9rC_J1_=z%X#C&qvpj?N^FGN& zf85YNMTSD08Su|MCjA>zdsA<+4@3+@$jn{;fJXLZA-KXV-mWF+KWc*;`~-OgT(8WV z7}!m1e91iUABS3B-P8tW?g`mM?ZM%lU#>PFbe5wk)4Ne@;n7)n2%R{`ybz?|9B2KRrUn-xZ*Tz&+1ov=^RP^=_wB92{eX z^-J^fhRp#O5EeY?KM@e5vPK5!JyeKr;W+M=&b3W{4a142T-~I~;nTraV-%(2-W=|C z1(bU!I)l$j_m{10MDPm=sm!(=2lNHh&e zf`lImHNoERsnzKIxtV$*y;i!xCgRu@~TY1eAXtAq}+ATE>8?-+O7#7YU5V>U!_=C~XERoL5RdIJ=)E z#8yl$l~Qv}qH8VkhV4Gltk{T50tC{=V)*KAo=*M-UjXjM}5`g2(8z*5$i< zgG=i{iF1_-Q$04!vw7&xzXRnf?kcaYC=P=OP3}gxbUQ55 zJeHKL`G~+m-IcQgrW2_cBVbdZB$&fU>Xpoz+>M;7b&DpeEtTAyoDj9LBCzY4sA~?6 z7+S1~-5Hk9^l%OsQ?IDE<2YvIzGz0Os@dEac)|U0$tsu~2pCh<6~WDsbZT-s%qejgo@JZA_`1aXzrEyK$4ljCF-1&b5 zJUR|UJ$>O-11#ozY{0?u;Bp{&&?@XGdw@O~bt?a7C$p_j*kktN}WIb;dFqF9&H zi%o8eHwwL_tRrn+&>4_jqIEIMUlj`-FHGHKUeFPStmFBu*4FKKjam(bSLFkTI@=`1 zMQRLaBKg5OQSTh$iW;X!?al>*)FEwm1X6zQPtchn;G}ENLA`(fr#hSA<>@9>ld4cw z-V%dk%_iD@V!1*bTV2k!6<&Km&5VI$1K7E4`asLAjE>)El?N36$iQUq?|27;2BAkg zC8lS=aKb~`So{RH&i+k#<`j!K@A!85+2;P43DRV}4zRz%wJ_#fd8Gi5Wq91k*rG$u zskU;qbAsBhMw(e$Xi#VfH~=-|)2goS@4Z+}=E{zhk)ZKE)AO}|iO-yNxz^*X`1Q&kh z@eQw?7_`A3@&@*oI3MOjI7P|=E~@vd2lfkn+p)8$wYdx3RFrK)KdIs?nokyMuLkem z+gqxTtjVlr1?%h!3kDWTcqOS{gQ&80Hib=uZn;*~2ID}*p6v|}D&xF?!YWmAAhU;E zMSn74R zFsdkB{De0-SwTgIxk-!TON(K@E$)qQ_eDy?ig~dP!=C-l? z&;zazOk;x85UncCWjI9n?4iph1{z@qIx>3wQZOz}6t7uuO{u$^G18)HZ9(J!BVxh@ zFWO2doX{ZK?o|61De~nJ4?77uo-T>Jpt_-9HvVVX02+OV&^G7Fs?s33aZs`F^{}da zpjPJh>DY9;%YphiFYl6o0JHL8K|&p1?hG3)e82b<+t!=xSGaIX`KbUwp);TI5^tJ| z_Sig9@5gIWLpRbcPJP=%y}UoML1tE#cIa&ns~M+^oX5om{yHr=+#H3!e9lC5nl5@3 zr?~oI)S#yAyd`WQ6&lQr=|Bx@mA%RM=JVi6>w$=JPC16Y#ljtA@0WReL$e|gc3E!@ zSQqdKwHHp`jvcN^iTn2_o`*hsAK`)2K?*|m>BuiSWCG9%3^+_~xh%3(10 zKBp+w^ug@WF2JY06Vc!nljv^$8L8DDrZ?(#+R^aK1PJ6S?#?B0$oqMA*`Lx&J$4c{=^eQ}eBO~agBvZ-8F z1R;RB>z9IrDEYk(JB*6O8i9YMFjRFLF8anXE*n+sET&c6=o53#7}#H z5=wHA?#10cQK{9ip1th9QqL}O70H1Zxf9Y}x&mN-X?fei-X_s5J~0x|U`RgS`NPqv zRiAQIN&lK{X+>yP^197t9l;$YmrY&yVJ_g{6g1K47q0=~GrEM$PA9?{=xxl2#*Yu2 zn4&sZhT0AIpkZk3 zdP(`%S&;&oM#8Ce%%rr^_R3x$N9z$j!wA&VoOg2*XnywF67l7ujg&eRx@*-;ZMq8z z3+Ae4mGE9F9oPt5VHxHtEYn3(&DNl6sGeZ6Y8MaX&-JKKT;dUyKh z@j=xn)+CG$!O=_B<9e-)Z-h>Z6Lbbkqb^|^b;n}ViY@nbMt%(sxJo`qG7V>RnTJQ4 zO+dTJvuiA)p{UNOXx}`4<7xv{p3>R?rt54}#g!e0!=^P@ls?VK2g?pXNe`KZ`;dej zm1c#8%=o?==XQwXEB&w{f=RHF*jA2EmC@rXPu?>P`4WJL;+ry@a5=jDGGi#ea$z*%g8& zy)3$y|AB5oW`^GT?{haJ{I?eVS1$ic`XU3kZ*6TIBI=>x5@`h1a~ou!lOm9E5un}y zHPnuVhQBLV+&7dyXyz`vxkz$yiK0IIszT`G7Ju?EKu{l^b%AmP&gOr~9zDO(6 zmlqXs^75hX8X;uHoHL9Gu&oZYMaIm?&P_Xu5&fLz^$J zQTCxqm*9hyVaLCv4U#pXWZvWL?gxHw)iwwyx@F~L)S-d7;g}StCFJ|`2ptm>9LzS= ztE}y2XUpxdNcpqla=C7ghr>Z858u1NaFK=0@YN}7nInJoa5qt5tw+#+TM|p3ALZui zDD_zG`M!mT_^>lKx9x|2CDnA~8mazT5Zl#DfRH={*t)e-_zjR~1Qm)F z3A)B#%7jhfq#g+=DW$y&t~$j%pT;R%PKyt;75o^n*sk1TLNtsqN&0Rm(<`YRaQT>p zX6SXBsN)WDg1qZk+2JU7+PR>=0#nRPygl4)kndirbnn;U%mbgRWWJZH%4WrM(rSlS z`F9@f<3XUoULgXB`L^??`!5h{7nKr}z}3MUt5Os{Ep{NTU5wao9}DWgz&!mF9gY27 z4Qzp-=lU+c;b{;)bPk(YzWSqA!lL1^bkchXrR_LN z=ILgjaFm6N`rz3iwpuu0(=52tE??}SvTedHoNv=Y{ymGI zw1EBintTu;8<(rtfd_NoNsW_#m@lnTnb-|fCAkA8UgcxpxfN%gAH@q*ZgTJDjn&~V zTfX+&4|HOv@sL~Op&mgq8fFpw!(wrE5(uhpoPCPk0Xtx^&+$4D@n&xiI2g{YiZd5F zn0RBk=Wx1AYiQ635F=54dPgGKJf5;<)@~&+qM@;sW8*&2b{RZum1AEqmoWxx)ksoV?+hw7&sm}?|QVWtBnwKDam7?@W^5{?X)ip z*jaLJzcp$9&3?d5ST-RBgog6APhs-zww)|gRI-{4t;bV}5pnR_T#N}L{>!=(UdE&J zzmQ24UdmC%Qepnic3_d_lMrsvh@1vT+b-Wr)x*Q{S7^>VC$(LoKefh2_ zZPovT;X)N9c#3fk`qQJbOnPH$SSoF5=Q!fi0orQndq2pNus+>N;^(u3#3MdW)Ew5g zM?~mn#nri)f=heq4(;!BuGNJ~j`q%(bWP2VFD*vCI-P(3okd*;ZPOkd#aZXy;}lc_5t;by1pHOXHexhmnm&;3^}x1r5{ z_2qwM92LiN?694sH-_d7J9sM*FPU@i78bIYl>*|ab9p=LAgAHRoySO>tipm%6>oGun~s?!r)`I?Cwfezsv(VZUXNbcTlIpFgRHIz^H;+fF262DT%%p0m1j|GP`#OD#O ztnPhnRXtg8FsXebIcTx<$k|jxo;I##PvirkOF(eIiM(Z*?)rp`FDOhEFvR0LAgmtg zFuO6mUkHimf={>z;4LzV4e$$39}4AG4Fu`s$3C&h-w$M6=^&5-N~~qW3b!mrJ@FVu zSUoV7{-BS`lUhN@lM{nmISI<1jmh6zHE1w03X$*nImbNPzft|Ho3qj|pXbyn|B`Is zfJvID{xt1kds51*%OP7;A-zSTU%0}S>Rc-~%wq%_{jc*5pA6g;MEzqMW!YOR`4`kS;9W1AK%HI^fq^U?|j%WqU0okMF_9=+uLb$es{ z`Gf6FGODLd=;j%`yK`c+D}(Abt<6;BPnCDIv?U!X zON>&K=rl3`(OeaO5eqk4*|KjEz3<$u4&fbEN2BsD$PfFzsY_fs zEU#cinh3r*or7^-%QIm8Ki$3gUy|wfKVDYTs zsi=TpO_R=4YUM(yNRGL)d*m3 zQ>6_A$MC+2X<8B-uXOam02U(r@C|0KS=~i(I3fC zG%}4rs*{-cTwGxCj;kTJ^iDSWynC68;zu&o~Tj@z?vUZ9RC$OS2W$t^cN> z{s|Q%mp60pKzsOx!<1X1+qMcX2%8n*@cQ)f0^DxZ-}Ym%iGZ@+jxO^ zpW+dzLw){QOlM>Ig_}3sBF`+re6Gq|A3Np=U&bJt_mjPiCE=xzB#tJsRQ$uo*8L?@ zi0Ha*N@C?HKa8I4?LFPA$cJxkDBr#^h55lQ^2uiaa);hti2FyYAAJTcyNU1nTgqay zD#8nA4kW(|>I*yn!1JMJ+&(^+auE}AZn^Bnx5ovSEHO{Iy$Cb$DdNsglx#Dn!c31T zX+{MDbtj=jC3E#67O`HqY#r&gOzSGG$16@`VL*q5TAyXG-N9a#&>n1o!e`7Y9{_6STrU4|+spEc`nkJOtQQs+|C$qjBIjL>jmJZe z^1xZh=Q_oUC>$AJvj@m~jyP(Y;#!=1>Niss^h}@I+LsmHypE#>cTZf8WQhvan$n^# zJ;4a-Y$C>|!>Vovt0PI=n&5jLwGC$Kn3N)9J+M*x##rj6TsyDN7lYCsHOI$(LyMDd?p@NADcwDFF8a=7 z(Jg+f)ryJBl)hD=tTSdgA4a~a;gFKJS50KYj_|x7+y0SCy?|vLD*LyY2RauCOVpWl zjd#h2wug1qm0G0hDkDCTg_rs_H;oKY?5)In)9K=qZdUXCKgu^|@BXg}|Nq5NYmbEJ z?4lh`_1i4E@IL=G9(t;33_jAe&5x1e^OXvOE6e#L274`j)A1)h6E{3LH%*TOFN+yv zT7C?685lV10Iv_6nTgX*qg}j8wf55=^~s4(dDK@ruioSDkB<>97C(1iZ3FR-vez}& zJEaVxV-I)DTkbfgNK9qU2dKY2zC}vo5Q(_H&R9Q<*{fd-El`)5W*!jtI$VCSB*j4d zdN|4F%gAGtD)ylh%`7$0`}*2X6{;Jihs^^wf4s@IG!8MOrkfn4yE$ z9<;2X42;zP^oxu#x(0e24@sgMn@(;27nk@i?j`ktwteQbz-P9tc$xg;c9HG3!;~X? z&ef*6vIg0SpFcBJZ#3e11Tk(9^By+*;yQE)QrPL|vR=kZ^u6(gt*5Jcf5lBaFu6J+ z-z-MTbc~t6Gs(kq8jf&{ck*HrQHs<*tp7F7?m%S9+{7D&&y|w=r>T;cVDksQw9bQi z_0e+@mmRWZ({z$XCb62XI&PKvfK^Dj#tcE+-n6~lO8$<14pV>pUSrgr-PY%X`scgP zu5LfHpYLClK_?FsdvT?;`Xu79*DBp}otbCrGjBdn9~u^1az9h`CWYzikIWVu&??`k zPQEoYNhId#Bxj#KJyPbXE)#b+*tD!8c|FBOOW>`{?fpl?WZm*MC!63lT5eynwnvfI zCWvw)P4ycMb5iA#gtWW62SV#I=FAYokCrt@) zPaghv%cd3(WoLf=i%f*P*3MAX5nGUv=_DKd-bw8Yl{Ibid8%K_wSVx5ZEj|}+v&B8 zcHYb9=-!63@1Mr7J@?{+0xEW6SXYsu3X1L0=vmb=DH9{sR%afuZZ~+&!lPgJCpu~N zom*gL+V(I%&HJRI6?a_wSa`OJ#aN9|##kk46rWGt8OL%y^ zvdaKm%Fgq}dd}X)Yl!tba5Yb~FTc*4x2@uo6)%`d`qleRPU)}Ep<$c9M?io1-L*^q z;)1R`9sW*Mz83e_XaB$c-qp99$)j?6D=VwV%u9bUl^4ZJts^*IV%3S{e_-c7Iat(+ z?&dG)v}^zat))oC&Eb~k{ueja9{Eux@Aiu50AdXp-iL844LLM60Jo`=i7;(f{;Tr) ze|KDAzE~1}A88a&Fi}toJvejXaZB1C#VZypQ1`jJcAMEHrf-Ywwi@Cx6W0v?PZ+CR zM6cSTm_MLPArmcmckDLn;>P35W&de{`WLVIdF4{*ww*n{x?9J7rnn9tSnyLnuhsTZ zK1^BaIkER*d2WNr-ixvyzGz%F{qHXR`C{`@hXFm_!9U8@FspcF-JWCYByYrOZ^+M& z)33qTAKu_;Wli|^px?jLco(pLZOP1UhBhm`kj&#g{=QDV@!p2jKzDrJZ)JK<|9vjQ zzsmqW?^&j^rS_G$47!$NHRH9Zr1gq#QMkA218Jc|&dc^~K$M*CebIq)ds|$lqef5~ z1;2)@A6ZC^F1>%J@!-ltTBg--Ss=)Vaym1xPkSm6cK}ol6ocWzx4auLcJ90Koan4%HO?vcMj<9yE-{3sSG9^dhqBGuDaNG_gvGS zSu^43^k%}Dh!sv-KDBB}_e@QJb@uJ^yoAaO3DI^~aH_y*@^NnYufOUDgu?P;_kLKl zdbOvP@!GgF*G~d~m*p8)g_fOS#pzg=epcmGTSwGBYUi7~ zmu~!HrGsE_umr*;j7xknb!)uJDt_J*{_E)>wNTr_!KI|6q~N`XapV1arG~5kwwCx3 zt2T}I9s4(-sRacE<(-8OuIXPdiof*lbU1fv*y#l`qaw1CeavY zc8?6Pq;Evdvu|t_?(WIR%q(1M`XKU8`sC!~p>;Q;ht|QQhZ0}a-sJ8pmRT5S2LZ>g zcx7%a`saw_Ka8k^q|^9P;!!YBv})HxOnmC2lLZsI4_Rk&+a45~1IZ;PAO4t0slJe9 z^VTM)qb?d8x2UZ0t%=l;6|lj`D9{AC&wkH9=>E2SmHfncO4(bJdYHZ5RmoTk0^~!+ zL`pPfV6+V)y1gSn=+}J7*qHXE>rxy!cQx((ep8DpGrJAKe!VcHAEAByw6?2FLggIW zQ#G}B`}Vh#6VtVPRP=J}`L$)#(_#wc$iExVv@`XD6&p9&ZMw-_`PK*UbN8XWJ^sqR zwe8NL4e|RTLg|lMI{K4t+$33==JlLg{Zsm){-j~k@ryo>-o?CVXy`Ot^R%j!>xBqk zE`U^y8f9jJi~A6asom}NTsm=@w=~Z>k~fO-l#7@&@Rt_f!jRyMy^*}OA-Jdh-$rY@ z9Tz)^(T>HZA@7}e#-V^s>Du}9>+Ygc=N7q*{`8vyjZ*jX5brZHZ?r z%|-{YEOY3&L{U-KPH$*iwOdkBq9ol>N`=O#;hZ`X<*%#FZ#kRss}@HCwT4n1B{&xc z9IA2n=N$7tZNx=qeAx2^RgbxSv*pI|MWsO-T5lz+n0aulCp1J-2gCNkf(!eUnZ3&^ z39I_>Enm{NJZqeHhqPvS^XO8eTw+Z65Cv8Y!y?eciGG~VAx8Wm(`ODg8{*-k70nrF zbleeTy@cA8Z3UTTH_pj^UzAbD>khivXnAbk-vzPP@t*s3DRfoxFMXuWVH7^bBOvJH zZ+4mW5NuX)$gs2XU>F+K_O##+b4q3Xspi2E!De4bV5)2C#2Kzb&BG*X=Mw!P4X!t5 zwP`@?r4a%Qcu{H{Xjo!atOSju4j#0d>4!TaPrc`KmUGzpLLa15b#0R#Ibg{^+DBbr z=I%+Ja7~zTLo+@{UHk_$C`5WDik~3%h@_sg;IuG>pQ8lgO;*#Xp?&oF!oa$L$ zP2Vbq=RbLq6pCkrgs3oeCsns==r;Bw-t`8~ZZ_TSQ8WPZhjpk+L?FQLIf0uLK(s9A<>T{4vk?sVvKOp7?m zI1CavO2;6xJV|d=aa;1k$evekfeZl}G#)6}xMj=U=x}R$2J)NCc*C7TvdaI?p^tLc zm2}KJ*byLH6INKm3M+>4aUE`~vLXaXbJnKuX%SZHvN7@auk@5j>cNlsGl74Q^C2#V zpV~fGN6JMF1sI(fep;3zz8? zhH@iyHyNtRSs{bIswumeV<#(CfNrm39F~Y93>b%Evndu940F#QwMfq?bJ-x|PVn0d z@8mcbBbpJ^l_jjRl{+bz#*LkARe9$xwy>>XQ`fb0EZz%s^CqGG2F#gxLu9$&;U;F+ zdvFV)PE=ov+z`;p$1AA(xFf&EOen%B3dr4!1_Yj=K^ENn+`S&_>?5B5>!4R^165bb zaVOoaYM3wGN{?-N8P7CFU zTk?M|sj<7=*?fpUz3Pxtx62O1UZ+FHI}9&$yiPP{j|U}PJh$_O2`q=TZwI;lg6kh% z9CCXyKRJqTZ3E&H)Pcqn+tU`*i9hG0^!0dJ1urM0d{1LZhO8Zx<{@k>QJ`8K!_C<@ z3#rmSd9w3WG~;@Ta5Ote63xg{=72#1KrH5_JP!&hLKvfcljC{|?1 zu6qCm<^?;ZX-b=k)Xf_=mRu@0h03(LTWrINe-DiP^5$-EV9XZnTGhJs3ouc7;Ecl<5+)UYwT!+&ZW)!#FDs?`zb>qCm=LXQK-A* zGgQhp1+#yoScc^oHI89b9SIoInM>|-U(dC>Kf_sA#zMfVRqdE=klSi@7)Rh6ifTSh ziV>R^CMFcf9b=!5&z7WeHP@CUS>yWhXI>6$j1KT6@oIdwD&PsgxDZG?JQI(bDG}dp=Sm_yaarMlk2@0t znal`DWpHLy*Tdk^uAnL+U903J`^$4JE=nr%f*Yjamn7PgH>802@Ipn%GS7QI=~`&*u);|BESJo2w(YdBW*IoPKsK`*OubG*k>! zuOB%SOW1bW^do7Xy8L#$;;LPvyT4Tx>gRoA$qEcBB&V}-bj4X0UFz+p zKh#zj=@}UmQVWty4@MNAsw!8b;4briHfIv4^V@bEj@?ron!A1=r))wvFA`vX7}hhT zAP3f3jll2Ubdo&g< zgtqbu_k{ODJy*i-9sFQ@<$>3#FhEAq$HqSL7$pt6 z7m0W@nR;-@rV$*mAOF@40z!Dg1T~4t$+w5r{5h9G43dO6BE$hrgxZk4LiL(qNF*rdcI~nYVeFk zQXUsc)X<$1a}s~QrQpS{y|ZZP&x;nXIJ!t@?VUFvEA~@wCRifa^?9&qFI!uL1!}r; zK)`WKJUn)zPX1xp$;4vy;0||2m`mpWaHUPcyL6lS zuBWHno_?@FFeSW@C0XqQ!6;G6{zhfp6pIb?4@~GCrF|mCBb54aPM)z&CD6f>0ug!~ zW!e2inwlx4JJ`=(?|p9E54sSD0@f87{F+-g&x@Kb!0v0Dh(gvWcU6f$3NXfrFB~R^ z(_%qsEI++W`FSPJhU#qupOsHN=g*!{elS7RC&>HUGnO~P5DAkr6;ZSCvma-IHlrV= zV)nU@C3N&$oZJ6+HNlh!lSK;{jY`T?+w*koKghCx#4eh>Q%gdLbNEhVuRce338In6?x2!v^)n=Sr(l9CM z2k>NsxOQUV#5i^z(OxwcrKWFAa|Y(cA1ZNn9GIBCFKCV}%5#BXWeroEIg$G}^N^?O zgw)<*I=%nmO>*oE$fOS8>ND@z*}3fPZ434nL;IP1WzxJ*Z<`uxHC!_b za*O<$^%TGSycyE4r6OEKXJ*GV_TY1;(zA9m^_?Bm%R82c-y6?O%+j>}LM6J}dWi3? zuKaJ6FS;9@e1|FxogV3o6T#+n!X($S76DG2GN9A-4uBn&&&W~5OiayxAsHabOBCXCKI1zy0$-BvztM0vwXqjH?e$Lm2|#X*t#=4a9TOXEtW zKh0Swb2e8v*2VV}U*H|w`qaTM@44<|Uc(?cN~-IdX^fC33s%pM6bQN$>gY8;uxo_# z_pxRYxByIRoc|1NMQS@JN0!rU8fBWOL0N5+8*P>sR6e=VeJA%ro|k#z7NVu)O={Ck437XXyIFa5|FPdiBf^%-+TUhUlaOKF4>8xNh(8nnL z%iXtm`Uzi_oMb;M)Kpun)}qUQfaXZtif{yVs)x%rYn-;{?@gS*^bQVGKBSqk11_gJ zO%+T%XK({iBUNc_^CFIP#L0Jj?p+*B!k|)=fBFV^qQ;AY{FR+U5mmj&@m^<_1W7YZ z=rma+m;@z)VDCpC63wYvMB&&_Y7+(%ojuHv&C6-Yb5omJEgDpnQ6r>Cv&O0S+O<-b zK5RNz_r)Spe@-}md9KMfv7%u_L~Gq;66kwVLn3B&3HctV$@IocJQ#zR(FoIQ5_HlC z`)%gO^t0TN!fjie+UGd^hWweUuogGsKJ=*4tLI77$29(B^G3;5fu3gF%no#hn1~?E zj!5Qwls(Pb_aO~0_sy(r7)uEjiffam>Mgz{5Pi7`!LaH40Rht{&`%Ee{N!|50%Olk zHi~X`2*eJ)fTC1V>A?;)<_I6TVs_v3D64F1XGWYGK+Kv(JjqU&Cw#Ia_69epJa#hA zDGD1B1Rh=BagVq_)k$YnM;a<31Rba{fwDn~NZZ@rP6&;R9FT)Mj7M;nj^8WRrd{>@ z@dGIo=+5o`as_`a*4_6fzeH-L=J)tgN6GJ@!)6%ypkjP);tY{zJ#rH?H-)D8^QN-S zI$C6WV86=>*@;UPLpfMx0An{JA#UoZN6Vmz2hwOA@hne=QBFL?m zfqsHqM*MDxa&2l9-Bj4a%EreKr;Eb~SbyECth$(2`RF=tPY86>@|+?n#j1B&_REbg zJKdM%?}3pPuj^wz@4u z2UQ#O413iRoZMdY$!Hjv94OCkFdpx19^XGNq3NU1^B?-yPVrNYtSgQVoj&lxplsin zOI>k1SttZlfmVnf6tb-dZuUjH#Rv^l9}ADPb`?#?Zk4e_@i*KBx`n|=XF;ywz&?b) zg7jlz{+Fjw>akihn<^*W1MT6F|CmduQc--%f6)E=25ML;A48<*Ek4wE zPlOKN(fM}uNto^#R$VnT1+SFqCfIlv{sBME7b2<%7?b!H5)LM>!1y zV>tICCLSeC5gg%vHcWz1)P|19A4c~%3>-m9e{ZY%IG_GgkT@Hz->eSXI{!Kf#ONZ| z9SfmnM_{Ct%W*wuULZYbgox-qN#^PuAj8xHK&W1#i+UWwp$!^|0dnW zrF47A4O>n1+~^k5mB0Vda~`-k;MOtN;FHruH5jSv+Ar3gXkNOLtlQJGkFJCt98tkB zEA=JMf5Qpah1KSvh6)j|*sBm=O<^#KuhGm7rhnn2`Rj>g^N9}P4Z92+993VI2xK-f^OHpc z{tC_8V*ByeL37R7)9iPk;rY|lc>3HkR_F`((kcD!M<5?Lj zEtI@{OnvK5z6N?wXwO<}W+jL@>zktK#sd$jjfb1TRuE8{^W4mA;;g|bM`@d-V0xrW z&{Gj4n3XcH^HU<{$D2V3lN<>x>A%x9)6n(v2M{MAPSA_ju*CM9O*d#_ivlLwq&9U4??&~bFLc9H3Hqsb|WOb*sCbjAAcPz z)mF{Tb1Z(FZL0&fDogJF=l=iku|X@kEmtshMfp6j;&fF#aB>tU=qYTCf{01tLk`86I)bWU;)GA>&7K0AC2j6+lho>$lw+bLSW$NtJL{zuHa z(Df7j$5_(ey9e!y)iqHpOA|A6bgAKr#Ps*Y`N{MK&34lpgo8&v$^>LU91%(x&UX5H zME9?(W%r7~;yh8^Z^8{VC?gQvLDfSn}U}$v^Mvv;DDgQj1pB zAG6(u%c5nD7Xc5lef$qs%g3Ud zzFzjR0z8ky;-kx|b~~dL747{#nutVUx>1j@O*-Be6jF?JR(_*mYxb)i>*NdS3{)w|zEC5&@K2i@V@2 zrjKm!8&PinR0=VUxCHiDPfBO zlW|diQqnirrEVGXHH(F?Z#urfxUElKx$)&|1D^f_)x?5`kEKE~6@|H3L4IsD>)xNZ zCn4M=JDWxB^WFPdCVA7|&aKKQ9Dq#|Ik6HL-S|*rGexU{Hw6TPZmYHwQ%eBTeYMcE z0j)6$m!Qd^ITd<626wv2LA@L{48QVqk~N|0VSfIT8188}^>RSCuQ`#!rPt z{-H*vdW&|0(D2S8V!#mi>jiv*pt^qtKO13ail&kAQ6pe8rv*^;<;A+sh*%4C4J)Eh z{dCCAuTdh=hMPoW?=&S1s*l*%SL=;WI#=VDuDDH+3?M%36LOx{3%B5CVYW5Sn;CPr z+`{l=yT*>o_c9~Q7Js_>dyqe-Kv0}z)rqMhHUyr~jTGfx6T~Dn1p#r8pZ`xXX5tr!LN3gGlTu>U`w3;<|hAd=O#bC!;kJ0 ztsAYyRht7TaO{|YR^qJo+~lLILs=5I|CqOao`^Rp-4ZYmU(-%k)<=~wD}g8KZ;Q;F zNh~K`KfI_&l6{STs5tJY>TH; z0AAcWGm%3;8D4$~B+hFc@kqmEk)|Q-b=6b;G%cESCQSjgZ#7&1dZkOJd9Nc=+Uw2n z2_W+6F|i|+l*Lphip%g80tb^%x$5hMU`&G060Oy&RdW?f8CcWV#ZXn18V+y_^P|X9 zKseLMv43zPv^8}0j#1L}T&mm)X9|)10-vyqjtlD-8!a@qW=b3aNqd z3*ZBl7+q5~`Q@w{_GyqpDQ1j21_Mn&GQfBh)`yA~Zz`5J{I~$6Z>?Q9tf}@@k%j`O z^B3AB8g6k9Og-M-6TLVTR%#ujpAEJ9j&4EMCf9dzOY(x z@Qu%fqm>LQ&Vm{5*A*z2{Sx|kN4X%NX-?33H{-B=a(6Mjs*?wxCWmE4?=Oe*Y4>(Q zItxn~s66m)$u!M3B`aJNJvpi`UR6JftHqL7uNErRZS915gg~+63(DEHz0(*-D4ZX` zrK*Dq3-c=GtTM8!DA>5P`4&ucsCNMe=gU(-@rp_()85jve3+jY%*BACb6LpJUPWN4 z%{9l1y`P3s++-JnelUV!uD%RZlQD;Z@WoJLAjvvCHiijXyORPbJ=J)z(!e8B>GS|o zRisvVy2E}Hm$tB{U=g0$JQ(l~19PsQ=B{#B0E2Jd{`^AGjSuFstRCP=v*vCZqZM^c z)=+IsR+tNgXz#ci!bQoIMt+eIEV3o|RY-Ym)-?;EhbJKw2GTk1As}sIYg33RQb7Ihu|XqhYLgxoklcQ^+0OWcqLpG;%+w_8W^&N7Oe@sl zLRek1%P!qJ)3jf9tCn?C?k

nekoJMMYJYqtk-0$H)oJ1>$WC4||v5Zd`46*pz=c z&(+Ed&wRMhr(Vvy!%r4Enc+<(91b~~Q9{csEWD}HYR9V(h+Bn~pMGxCPXfo> z=rp{98w~Cn&t+J#I$PNu?L{mPM4F+Kt|7;Un7pNw=IdlN1_7c7h{d7eMuZBkEDnC1RGyF*jj_jP72A4h_penl^-d8Mm0siF6vyyj-P|(2aAzgYQmV>)4?3V|VynI2@ z6T_(y-icROC_U`bcT3i}TnbPV)*TiOf+IxoU})(D3##Ha&*JrRcjZbGh{3+ly3;<0 zy^$cR&g)1Efi!{eyd|1TO7+gkmQ|BL%_u6s7niBL|IU4(dCsk$P>(sB3hGk4Tg)Rhk>!q*7*% znMIjPO1df7<;Tl>@mUH_9LR_XPYiuP@dYU9jDBSl9;bLp6!dF-6U(0k4W+OjXTcVR zjBjdIc1r}%`K+O6TXrxPtK`Iu0uljd;bMP{P`C zj(g%7vc#Q?{)RoMBbz&ixSF4wMvnQvf5Pe_TYtSCDH=goKq}!+9QS(!F4+!wAV5Sa z_R1~pFZXC|@x4GrgpBvcU8q1x@Bp9|d063vp?g{9Ac;?U)m0X?wNW;JB5>_i{RQsw zK;9ibBu&y|SXm9P#wu`l5vEpV1W&tZhL14|C0q*UlTw4n?2ES?m;3u-vcPMm#DVNs zKUsWm%HfYe>?`_QNsyEpkqV{utQT9gN)v^wa5 zj^C~+XOP9#A#BHl&bP&D4g+LnZi~Y9kkhObM_8)|w?7dLLX`KT=`1kaP62cONN%WA zL}R2i9GbAQ$Vdq=>+AfH`49``*@}S`(ESTQ^2>`26Y5*oDpRA*%s4kJ6ocbQ!MWM= zf&^f}d|o{FeX(PXjgBGJD5C^dD7?pV zq@P7gdJuvy#dP&Y`rC9Qvo)?!-sRZ6qukXt@%#m^3yQvqPlwT|46 zN(s`x>ou^Mmo46;9*CO4L-awc!{Huy*>ihPYD862_9_9yFS_BPVhD(4K}mSUZK`XW z(ZVFQ$66~SRx#cQ97sU7+cB#}I52_b;Cw3u`~$}sGFBdl_L1)cHM6{OG+SJWXh62<-x0R}58AErOr zFSC6{t3HXMG;J73XnW(v%FgK)6K)qcdj33T%K=+7faNEtY7H%Q*XDs{C>Fr*yXnr) z8%p?mb_M-rJBu;!nnw18fr1W8B<@avx$F(s_wxZNm@(t042D5-O>cU(b}I*txHDBE zjMl+ln>j2vpp$;@sSi%$74$olG6nFfy7;5B>|y?~Cs|<*4o`{4(&cXL;ECd_kP)Rb zk#^aN(B&i(F$Y$2{ zF|avQh$n^1FKqdxl%*CJW&2<6FME2FEvEzot^?XM&vHDSIgp7#8LuNi}`G@g)U>+)>$~sz}iN^YJ2Lj5qK`frU z7vPJRaYQ`Xxpry)X7R$Al zakR0EIwU~-KrG-@z=7;761EA}PXDm$@Kvkp6;S;4BPQJUKM4cG+VU9@B6U(NO%IC# zHM?X>MpXT53cb#UWeRy|OOU2Q{Mqj9Y}tqJAh_0WYuSpNZ0(+;XuX;#wj!aK?pKv} z+m+^S&qQ?Jma}a?0;r%dMmktZ_p@Ic+nDUGBg{XmO6n@!Tb!v`9h_gshC=Bu1x>Ws z#o9s^j2GkgO5ki(w$$mN;uG2D0*pv*hDTHp=*-Cs4jKK^LbrGS4quTvGE&|ipsI@$ zX~PH7b5{_odEBk9wUFiOFTs$Y7b>z8+S0&4vSLN4^m$c?=^Qyp-$gwwuw+kpZrIoy zI%Y4qY^`Za>!>P{OA&buT4Ml+t6E`93W>MLzj5*dt7KrfKI-$Zi;2bAVKL0 zhLds&*bSX$HAN!J{jP6z7Hj&2213K)F&a~Soqr>-(OEf|Jn`nEKJGFK;OvD5rzz5* zkz=Mt^$8YCHcGR1FLTCr)IN(u%=KxKM~G(|@>Ner-eC+LGCb$L zt$_Nep*%8Ps*OpAPos%=MRn$QaJvs&h3}yNYsMvIF3Af5$8BCZNS7z9=VH~PvA&Q- zEypI#ZtL}R zJZnMz*nHL|e;UO@n?qFp+N1g#BG&-$&OkV)BxuK0xeyZYkXX9!k z#mi&*gT2|Uel#Smg@f(ndy5f0HF7%72SW-D=S4n8!50>o#JgV+7N4fLHvy^Gk4p0# zDAKAmm^YV!Vv>n9b?z*ga=a9;AjlpycV9;qC$6R5YLMP?T&XR5Js2=A#{)hGNGKu$ zp>z)`JTtmc+>i$C^T8ix*E@^xEwLjmwgNHYOwht2x!$3>R7EAQ&K$@X$&Em>I=Mmi zg-wnmrV)S?*!-}JYuB9oPOfX2g}ieRVeUC#aFsODy zUPTQL5^fA#2qBu?U*6IV2}=-`<5Nhi4=+0cXv($i3x;$H9m6TUL!Csi=!klZSl*=8 z<+!cc+cauhbSjxBK2#H#qYuH?01;%m@)2IfYT;ZLe16cSqB%8q3yy<@v6zIwxch{TVB&_ zOoS1IeYIm{?FlNp;~^}H&8s^N)H?hcc_cFx50N>!_YF>5YvTol#SD|p2h92U;)aNE zG{Bbv2?wIpFR{>(IGG>T!@hgqd&M%s+TpFg#|Qv$*9`^TV|^@`C6r1do2!9+g>}W= zXh*yq#4JZmn(A!oj*-QRfJ@ToNh|-TKv?*rkwBCY+p4Cuw>E+q$4nV(K}q-`C_NTv z#rqCDainc&)0$IRr7d~pd@b{kH3at)M$}jPxU*O&Q@Ud(15q5P4ibx~y!f^|1#$QC z274&YtPvk*MAJxZ7}AT~t1Tt49sP2kBlRW_JQE7-_XZm-j3DnEb-qhjd=9Vwk?P9o zt@U^c^Ru+4-vN z=j&naKxZp!EzS|a)(HF&MLr6!xuyczdryBs z7@=@B%}rO6X5HAe*wwcyVErV=*$fj`}cUS~Ze{tgAp=H(W?%EYgY42}(9aLXmYU z0-lpqL@k9QiFV^0A|cv=#6!CFX=Vn~_3dMS8i4l(!~6NndULKKw3mRW4(nLx3D#at zd6Ti2mI1()m4ks~Nf)?&oHU+C)tnN@wR!szbIT0BB9p7rvN!>GIvBg1@tt+J^9H_h zzvZ(L`(u1T3bTqR>4C5XZHkNfH`kahbddVUAbadhYt~9eKc&0CVixHj zR^kpl^DB&#>?Id?ODe(=6)irWwk0k8M5ezcAe+AN)8q`}0fwfMTFPHBP$B_V=_OdHh9-bO>ip9PM2Zi$4c<33=0Vki_l1 zYrg|BOO9RXa>;j-G{*ieeD^rmpYaN>#%WH5xGZpWi;<>E6S09 z;>PW0+!(%Ufx7R!(YvcLm>p#!{v=~Ip+Cri_@% literal 0 HcmV?d00001 diff --git a/_build/_sources/api.rst.txt b/_build/_sources/api.rst.txt new file mode 100644 index 00000000..1aa8048f --- /dev/null +++ b/_build/_sources/api.rst.txt @@ -0,0 +1,717 @@ +API +=== + +.. module:: flask + +This part of the documentation covers all the interfaces of Flask. For +parts where Flask depends on external libraries, we document the most +important right here and provide links to the canonical documentation. + + +Application Object +------------------ + +.. autoclass:: Flask + :members: + :inherited-members: + + +Blueprint Objects +----------------- + +.. autoclass:: Blueprint + :members: + :inherited-members: + +Incoming Request Data +--------------------- + +.. autoclass:: Request + :members: + :inherited-members: + :exclude-members: json_module + +.. attribute:: request + + To access incoming request data, you can use the global `request` + object. Flask parses incoming request data for you and gives you + access to it through that global object. Internally Flask makes + sure that you always get the correct data for the active thread if you + are in a multithreaded environment. + + This is a proxy. See :ref:`notes-on-proxies` for more information. + + The request object is an instance of a :class:`~flask.Request`. + + +Response Objects +---------------- + +.. autoclass:: flask.Response + :members: + :inherited-members: + :exclude-members: json_module + +Sessions +-------- + +If you have set :attr:`Flask.secret_key` (or configured it from +:data:`SECRET_KEY`) you can use sessions in Flask applications. A session makes +it possible to remember information from one request to another. The way Flask +does this is by using a signed cookie. The user can look at the session +contents, but can't modify it unless they know the secret key, so make sure to +set that to something complex and unguessable. + +To access the current session you can use the :class:`session` object: + +.. class:: session + + The session object works pretty much like an ordinary dict, with the + difference that it keeps track of modifications. + + This is a proxy. See :ref:`notes-on-proxies` for more information. + + The following attributes are interesting: + + .. attribute:: new + + ``True`` if the session is new, ``False`` otherwise. + + .. attribute:: modified + + ``True`` if the session object detected a modification. Be advised + that modifications on mutable structures are not picked up + automatically, in that situation you have to explicitly set the + attribute to ``True`` yourself. Here an example:: + + # this change is not picked up because a mutable object (here + # a list) is changed. + session['objects'].append(42) + # so mark it as modified yourself + session.modified = True + + .. attribute:: permanent + + If set to ``True`` the session lives for + :attr:`~flask.Flask.permanent_session_lifetime` seconds. The + default is 31 days. If set to ``False`` (which is the default) the + session will be deleted when the user closes the browser. + + +Session Interface +----------------- + +.. versionadded:: 0.8 + +The session interface provides a simple way to replace the session +implementation that Flask is using. + +.. currentmodule:: flask.sessions + +.. autoclass:: SessionInterface + :members: + +.. autoclass:: SecureCookieSessionInterface + :members: + +.. autoclass:: SecureCookieSession + :members: + +.. autoclass:: NullSession + :members: + +.. autoclass:: SessionMixin + :members: + +.. admonition:: Notice + + The :data:`PERMANENT_SESSION_LIFETIME` config can be an integer or ``timedelta``. + The :attr:`~flask.Flask.permanent_session_lifetime` attribute is always a + ``timedelta``. + + +Test Client +----------- + +.. currentmodule:: flask.testing + +.. autoclass:: FlaskClient + :members: + + +Test CLI Runner +--------------- + +.. currentmodule:: flask.testing + +.. autoclass:: FlaskCliRunner + :members: + + +Application Globals +------------------- + +.. currentmodule:: flask + +To share data that is valid for one request only from one function to +another, a global variable is not good enough because it would break in +threaded environments. Flask provides you with a special object that +ensures it is only valid for the active request and that will return +different values for each request. In a nutshell: it does the right +thing, like it does for :class:`request` and :class:`session`. + +.. data:: g + + A namespace object that can store data during an + :doc:`application context `. This is an instance of + :attr:`Flask.app_ctx_globals_class`, which defaults to + :class:`ctx._AppCtxGlobals`. + + This is a good place to store resources during a request. For + example, a ``before_request`` function could load a user object from + a session id, then set ``g.user`` to be used in the view function. + + This is a proxy. See :ref:`notes-on-proxies` for more information. + + .. versionchanged:: 0.10 + Bound to the application context instead of the request context. + +.. autoclass:: flask.ctx._AppCtxGlobals + :members: + + +Useful Functions and Classes +---------------------------- + +.. data:: current_app + + A proxy to the application handling the current request. This is + useful to access the application without needing to import it, or if + it can't be imported, such as when using the application factory + pattern or in blueprints and extensions. + + This is only available when an + :doc:`application context ` is pushed. This happens + automatically during requests and CLI commands. It can be controlled + manually with :meth:`~flask.Flask.app_context`. + + This is a proxy. See :ref:`notes-on-proxies` for more information. + +.. autofunction:: has_request_context + +.. autofunction:: copy_current_request_context + +.. autofunction:: has_app_context + +.. autofunction:: url_for + +.. autofunction:: abort + +.. autofunction:: redirect + +.. autofunction:: make_response + +.. autofunction:: after_this_request + +.. autofunction:: send_file + +.. autofunction:: send_from_directory + + +Message Flashing +---------------- + +.. autofunction:: flash + +.. autofunction:: get_flashed_messages + + +JSON Support +------------ + +.. module:: flask.json + +Flask uses Python's built-in :mod:`json` module for handling JSON by +default. The JSON implementation can be changed by assigning a different +provider to :attr:`flask.Flask.json_provider_class` or +:attr:`flask.Flask.json`. The functions provided by ``flask.json`` will +use methods on ``app.json`` if an app context is active. + +Jinja's ``|tojson`` filter is configured to use the app's JSON provider. +The filter marks the output with ``|safe``. Use it to render data inside +HTML `` + +.. autofunction:: jsonify + +.. autofunction:: dumps + +.. autofunction:: dump + +.. autofunction:: loads + +.. autofunction:: load + +.. autoclass:: flask.json.provider.JSONProvider + :members: + :member-order: bysource + +.. autoclass:: flask.json.provider.DefaultJSONProvider + :members: + :member-order: bysource + +.. automodule:: flask.json.tag + + +Template Rendering +------------------ + +.. currentmodule:: flask + +.. autofunction:: render_template + +.. autofunction:: render_template_string + +.. autofunction:: stream_template + +.. autofunction:: stream_template_string + +.. autofunction:: get_template_attribute + +Configuration +------------- + +.. autoclass:: Config + :members: + + +Stream Helpers +-------------- + +.. autofunction:: stream_with_context + +Useful Internals +---------------- + +.. autoclass:: flask.ctx.RequestContext + :members: + +.. data:: flask.globals.request_ctx + + The current :class:`~flask.ctx.RequestContext`. If a request context + is not active, accessing attributes on this proxy will raise a + ``RuntimeError``. + + This is an internal object that is essential to how Flask handles + requests. Accessing this should not be needed in most cases. Most + likely you want :data:`request` and :data:`session` instead. + +.. autoclass:: flask.ctx.AppContext + :members: + +.. data:: flask.globals.app_ctx + + The current :class:`~flask.ctx.AppContext`. If an app context is not + active, accessing attributes on this proxy will raise a + ``RuntimeError``. + + This is an internal object that is essential to how Flask handles + requests. Accessing this should not be needed in most cases. Most + likely you want :data:`current_app` and :data:`g` instead. + +.. autoclass:: flask.blueprints.BlueprintSetupState + :members: + +.. _core-signals-list: + +Signals +------- + +Signals are provided by the `Blinker`_ library. See :doc:`signals` for an introduction. + +.. _blinker: https://blinker.readthedocs.io/ + +.. data:: template_rendered + + This signal is sent when a template was successfully rendered. The + signal is invoked with the instance of the template as `template` + and the context as dictionary (named `context`). + + Example subscriber:: + + def log_template_renders(sender, template, context, **extra): + sender.logger.debug('Rendering template "%s" with context %s', + template.name or 'string template', + context) + + from flask import template_rendered + template_rendered.connect(log_template_renders, app) + +.. data:: flask.before_render_template + :noindex: + + This signal is sent before template rendering process. The + signal is invoked with the instance of the template as `template` + and the context as dictionary (named `context`). + + Example subscriber:: + + def log_template_renders(sender, template, context, **extra): + sender.logger.debug('Rendering template "%s" with context %s', + template.name or 'string template', + context) + + from flask import before_render_template + before_render_template.connect(log_template_renders, app) + +.. data:: request_started + + This signal is sent when the request context is set up, before + any request processing happens. Because the request context is already + bound, the subscriber can access the request with the standard global + proxies such as :class:`~flask.request`. + + Example subscriber:: + + def log_request(sender, **extra): + sender.logger.debug('Request context is set up') + + from flask import request_started + request_started.connect(log_request, app) + +.. data:: request_finished + + This signal is sent right before the response is sent to the client. + It is passed the response to be sent named `response`. + + Example subscriber:: + + def log_response(sender, response, **extra): + sender.logger.debug('Request context is about to close down. ' + 'Response: %s', response) + + from flask import request_finished + request_finished.connect(log_response, app) + +.. data:: got_request_exception + + This signal is sent when an unhandled exception happens during + request processing, including when debugging. The exception is + passed to the subscriber as ``exception``. + + This signal is not sent for + :exc:`~werkzeug.exceptions.HTTPException`, or other exceptions that + have error handlers registered, unless the exception was raised from + an error handler. + + This example shows how to do some extra logging if a theoretical + ``SecurityException`` was raised: + + .. code-block:: python + + from flask import got_request_exception + + def log_security_exception(sender, exception, **extra): + if not isinstance(exception, SecurityException): + return + + security_logger.exception( + f"SecurityException at {request.url!r}", + exc_info=exception, + ) + + got_request_exception.connect(log_security_exception, app) + +.. data:: request_tearing_down + + This signal is sent when the request is tearing down. This is always + called, even if an exception is caused. Currently functions listening + to this signal are called after the regular teardown handlers, but this + is not something you can rely on. + + Example subscriber:: + + def close_db_connection(sender, **extra): + session.close() + + from flask import request_tearing_down + request_tearing_down.connect(close_db_connection, app) + + As of Flask 0.9, this will also be passed an `exc` keyword argument + that has a reference to the exception that caused the teardown if + there was one. + +.. data:: appcontext_tearing_down + + This signal is sent when the app context is tearing down. This is always + called, even if an exception is caused. Currently functions listening + to this signal are called after the regular teardown handlers, but this + is not something you can rely on. + + Example subscriber:: + + def close_db_connection(sender, **extra): + session.close() + + from flask import appcontext_tearing_down + appcontext_tearing_down.connect(close_db_connection, app) + + This will also be passed an `exc` keyword argument that has a reference + to the exception that caused the teardown if there was one. + +.. data:: appcontext_pushed + + This signal is sent when an application context is pushed. The sender + is the application. This is usually useful for unittests in order to + temporarily hook in information. For instance it can be used to + set a resource early onto the `g` object. + + Example usage:: + + from contextlib import contextmanager + from flask import appcontext_pushed + + @contextmanager + def user_set(app, user): + def handler(sender, **kwargs): + g.user = user + with appcontext_pushed.connected_to(handler, app): + yield + + And in the testcode:: + + def test_user_me(self): + with user_set(app, 'john'): + c = app.test_client() + resp = c.get('/users/me') + assert resp.data == 'username=john' + + .. versionadded:: 0.10 + +.. data:: appcontext_popped + + This signal is sent when an application context is popped. The sender + is the application. This usually falls in line with the + :data:`appcontext_tearing_down` signal. + + .. versionadded:: 0.10 + +.. data:: message_flashed + + This signal is sent when the application is flashing a message. The + messages is sent as `message` keyword argument and the category as + `category`. + + Example subscriber:: + + recorded = [] + def record(sender, message, category, **extra): + recorded.append((message, category)) + + from flask import message_flashed + message_flashed.connect(record, app) + + .. versionadded:: 0.10 + + +Class-Based Views +----------------- + +.. versionadded:: 0.7 + +.. currentmodule:: None + +.. autoclass:: flask.views.View + :members: + +.. autoclass:: flask.views.MethodView + :members: + +.. _url-route-registrations: + +URL Route Registrations +----------------------- + +Generally there are three ways to define rules for the routing system: + +1. You can use the :meth:`flask.Flask.route` decorator. +2. You can use the :meth:`flask.Flask.add_url_rule` function. +3. You can directly access the underlying Werkzeug routing system + which is exposed as :attr:`flask.Flask.url_map`. + +Variable parts in the route can be specified with angular brackets +(``/user/``). By default a variable part in the URL accepts any +string without a slash however a different converter can be specified as +well by using ````. + +Variable parts are passed to the view function as keyword arguments. + +The following converters are available: + +=========== =============================================== +`string` accepts any text without a slash (the default) +`int` accepts integers +`float` like `int` but for floating point values +`path` like the default but also accepts slashes +`any` matches one of the items provided +`uuid` accepts UUID strings +=========== =============================================== + +Custom converters can be defined using :attr:`flask.Flask.url_map`. + +Here are some examples:: + + @app.route('/') + def index(): + pass + + @app.route('/') + def show_user(username): + pass + + @app.route('/post/') + def show_post(post_id): + pass + +An important detail to keep in mind is how Flask deals with trailing +slashes. The idea is to keep each URL unique so the following rules +apply: + +1. If a rule ends with a slash and is requested without a slash by the + user, the user is automatically redirected to the same page with a + trailing slash attached. +2. If a rule does not end with a trailing slash and the user requests the + page with a trailing slash, a 404 not found is raised. + +This is consistent with how web servers deal with static files. This +also makes it possible to use relative link targets safely. + +You can also define multiple rules for the same function. They have to be +unique however. Defaults can also be specified. Here for example is a +definition for a URL that accepts an optional page:: + + @app.route('/users/', defaults={'page': 1}) + @app.route('/users/page/') + def show_users(page): + pass + +This specifies that ``/users/`` will be the URL for page one and +``/users/page/N`` will be the URL for page ``N``. + +If a URL contains a default value, it will be redirected to its simpler +form with a 301 redirect. In the above example, ``/users/page/1`` will +be redirected to ``/users/``. If your route handles ``GET`` and ``POST`` +requests, make sure the default route only handles ``GET``, as redirects +can't preserve form data. :: + + @app.route('/region/', defaults={'id': 1}) + @app.route('/region/', methods=['GET', 'POST']) + def region(id): + pass + +Here are the parameters that :meth:`~flask.Flask.route` and +:meth:`~flask.Flask.add_url_rule` accept. The only difference is that +with the route parameter the view function is defined with the decorator +instead of the `view_func` parameter. + +=============== ========================================================== +`rule` the URL rule as string +`endpoint` the endpoint for the registered URL rule. Flask itself + assumes that the name of the view function is the name + of the endpoint if not explicitly stated. +`view_func` the function to call when serving a request to the + provided endpoint. If this is not provided one can + specify the function later by storing it in the + :attr:`~flask.Flask.view_functions` dictionary with the + endpoint as key. +`defaults` A dictionary with defaults for this rule. See the + example above for how defaults work. +`subdomain` specifies the rule for the subdomain in case subdomain + matching is in use. If not specified the default + subdomain is assumed. +`**options` the options to be forwarded to the underlying + :class:`~werkzeug.routing.Rule` object. A change to + Werkzeug is handling of method options. methods is a list + of methods this rule should be limited to (``GET``, ``POST`` + etc.). By default a rule just listens for ``GET`` (and + implicitly ``HEAD``). Starting with Flask 0.6, ``OPTIONS`` is + implicitly added and handled by the standard request + handling. They have to be specified as keyword arguments. +=============== ========================================================== + + +View Function Options +--------------------- + +For internal usage the view functions can have some attributes attached to +customize behavior the view function would normally not have control over. +The following attributes can be provided optionally to either override +some defaults to :meth:`~flask.Flask.add_url_rule` or general behavior: + +- `__name__`: The name of a function is by default used as endpoint. If + endpoint is provided explicitly this value is used. Additionally this + will be prefixed with the name of the blueprint by default which + cannot be customized from the function itself. + +- `methods`: If methods are not provided when the URL rule is added, + Flask will look on the view function object itself if a `methods` + attribute exists. If it does, it will pull the information for the + methods from there. + +- `provide_automatic_options`: if this attribute is set Flask will + either force enable or disable the automatic implementation of the + HTTP ``OPTIONS`` response. This can be useful when working with + decorators that want to customize the ``OPTIONS`` response on a per-view + basis. + +- `required_methods`: if this attribute is set, Flask will always add + these methods when registering a URL rule even if the methods were + explicitly overridden in the ``route()`` call. + +Full example:: + + def index(): + if request.method == 'OPTIONS': + # custom options handling here + ... + return 'Hello World!' + index.provide_automatic_options = False + index.methods = ['GET', 'OPTIONS'] + + app.add_url_rule('/', index) + +.. versionadded:: 0.8 + The `provide_automatic_options` functionality was added. + +Command Line Interface +---------------------- + +.. currentmodule:: flask.cli + +.. autoclass:: FlaskGroup + :members: + +.. autoclass:: AppGroup + :members: + +.. autoclass:: ScriptInfo + :members: + +.. autofunction:: load_dotenv + +.. autofunction:: with_appcontext + +.. autofunction:: pass_script_info + + Marks a function so that an instance of :class:`ScriptInfo` is passed + as first argument to the click callback. + +.. autodata:: run_command + +.. autodata:: shell_command diff --git a/_build/_sources/appcontext.rst.txt b/_build/_sources/appcontext.rst.txt new file mode 100644 index 00000000..5509a9a7 --- /dev/null +++ b/_build/_sources/appcontext.rst.txt @@ -0,0 +1,147 @@ +.. currentmodule:: flask + +The Application Context +======================= + +The application context keeps track of the application-level data during +a request, CLI command, or other activity. Rather than passing the +application around to each function, the :data:`current_app` and +:data:`g` proxies are accessed instead. + +This is similar to :doc:`/reqcontext`, which keeps track of +request-level data during a request. A corresponding application context +is pushed when a request context is pushed. + +Purpose of the Context +---------------------- + +The :class:`Flask` application object has attributes, such as +:attr:`~Flask.config`, that are useful to access within views and +:doc:`CLI commands `. However, importing the ``app`` instance +within the modules in your project is prone to circular import issues. +When using the :doc:`app factory pattern ` or +writing reusable :doc:`blueprints ` or +:doc:`extensions ` there won't be an ``app`` instance to +import at all. + +Flask solves this issue with the *application context*. Rather than +referring to an ``app`` directly, you use the :data:`current_app` +proxy, which points to the application handling the current activity. + +Flask automatically *pushes* an application context when handling a +request. View functions, error handlers, and other functions that run +during a request will have access to :data:`current_app`. + +Flask will also automatically push an app context when running CLI +commands registered with :attr:`Flask.cli` using ``@app.cli.command()``. + + +Lifetime of the Context +----------------------- + +The application context is created and destroyed as necessary. When a +Flask application begins handling a request, it pushes an application +context and a :doc:`request context `. When the request +ends it pops the request context then the application context. +Typically, an application context will have the same lifetime as a +request. + +See :doc:`/reqcontext` for more information about how the contexts work +and the full life cycle of a request. + + +Manually Push a Context +----------------------- + +If you try to access :data:`current_app`, or anything that uses it, +outside an application context, you'll get this error message: + +.. code-block:: pytb + + RuntimeError: Working outside of application context. + + This typically means that you attempted to use functionality that + needed to interface with the current application object in some way. + To solve this, set up an application context with app.app_context(). + +If you see that error while configuring your application, such as when +initializing an extension, you can push a context manually since you +have direct access to the ``app``. Use :meth:`~Flask.app_context` in a +``with`` block, and everything that runs in the block will have access +to :data:`current_app`. :: + + def create_app(): + app = Flask(__name__) + + with app.app_context(): + init_db() + + return app + +If you see that error somewhere else in your code not related to +configuring the application, it most likely indicates that you should +move that code into a view function or CLI command. + + +Storing Data +------------ + +The application context is a good place to store common data during a +request or CLI command. Flask provides the :data:`g object ` for this +purpose. It is a simple namespace object that has the same lifetime as +an application context. + +.. note:: + The ``g`` name stands for "global", but that is referring to the + data being global *within a context*. The data on ``g`` is lost + after the context ends, and it is not an appropriate place to store + data between requests. Use the :data:`session` or a database to + store data across requests. + +A common use for :data:`g` is to manage resources during a request. + +1. ``get_X()`` creates resource ``X`` if it does not exist, caching it + as ``g.X``. +2. ``teardown_X()`` closes or otherwise deallocates the resource if it + exists. It is registered as a :meth:`~Flask.teardown_appcontext` + handler. + +For example, you can manage a database connection using this pattern:: + + from flask import g + + def get_db(): + if 'db' not in g: + g.db = connect_to_database() + + return g.db + + @app.teardown_appcontext + def teardown_db(exception): + db = g.pop('db', None) + + if db is not None: + db.close() + +During a request, every call to ``get_db()`` will return the same +connection, and it will be closed automatically at the end of the +request. + +You can use :class:`~werkzeug.local.LocalProxy` to make a new context +local from ``get_db()``:: + + from werkzeug.local import LocalProxy + db = LocalProxy(get_db) + +Accessing ``db`` will call ``get_db`` internally, in the same way that +:data:`current_app` works. + + +Events and Signals +------------------ + +The application will call functions registered with :meth:`~Flask.teardown_appcontext` +when the application context is popped. + +The following signals are sent: :data:`appcontext_pushed`, +:data:`appcontext_tearing_down`, and :data:`appcontext_popped`. diff --git a/_build/_sources/async-await.rst.txt b/_build/_sources/async-await.rst.txt new file mode 100644 index 00000000..16b61945 --- /dev/null +++ b/_build/_sources/async-await.rst.txt @@ -0,0 +1,125 @@ +.. _async_await: + +Using ``async`` and ``await`` +============================= + +.. versionadded:: 2.0 + +Routes, error handlers, before request, after request, and teardown +functions can all be coroutine functions if Flask is installed with the +``async`` extra (``pip install flask[async]``). This allows views to be +defined with ``async def`` and use ``await``. + +.. code-block:: python + + @app.route("/get-data") + async def get_data(): + data = await async_db_query(...) + return jsonify(data) + +Pluggable class-based views also support handlers that are implemented as +coroutines. This applies to the :meth:`~flask.views.View.dispatch_request` +method in views that inherit from the :class:`flask.views.View` class, as +well as all the HTTP method handlers in views that inherit from the +:class:`flask.views.MethodView` class. + +.. admonition:: Using ``async`` with greenlet + + When using gevent or eventlet to serve an application or patch the + runtime, greenlet>=1.0 is required. When using PyPy, PyPy>=7.3.7 is + required. + + +Performance +----------- + +Async functions require an event loop to run. Flask, as a WSGI +application, uses one worker to handle one request/response cycle. +When a request comes in to an async view, Flask will start an event loop +in a thread, run the view function there, then return the result. + +Each request still ties up one worker, even for async views. The upside +is that you can run async code within a view, for example to make +multiple concurrent database queries, HTTP requests to an external API, +etc. However, the number of requests your application can handle at one +time will remain the same. + +**Async is not inherently faster than sync code.** Async is beneficial +when performing concurrent IO-bound tasks, but will probably not improve +CPU-bound tasks. Traditional Flask views will still be appropriate for +most use cases, but Flask's async support enables writing and using +code that wasn't possible natively before. + + +Background tasks +---------------- + +Async functions will run in an event loop until they complete, at +which stage the event loop will stop. This means any additional +spawned tasks that haven't completed when the async function completes +will be cancelled. Therefore you cannot spawn background tasks, for +example via ``asyncio.create_task``. + +If you wish to use background tasks it is best to use a task queue to +trigger background work, rather than spawn tasks in a view +function. With that in mind you can spawn asyncio tasks by serving +Flask with an ASGI server and utilising the asgiref WsgiToAsgi adapter +as described in :doc:`deploying/asgi`. This works as the adapter creates +an event loop that runs continually. + + +When to use Quart instead +------------------------- + +Flask's async support is less performant than async-first frameworks due +to the way it is implemented. If you have a mainly async codebase it +would make sense to consider `Quart`_. Quart is a reimplementation of +Flask based on the `ASGI`_ standard instead of WSGI. This allows it to +handle many concurrent requests, long running requests, and websockets +without requiring multiple worker processes or threads. + +It has also already been possible to run Flask with Gevent or Eventlet +to get many of the benefits of async request handling. These libraries +patch low-level Python functions to accomplish this, whereas ``async``/ +``await`` and ASGI use standard, modern Python capabilities. Deciding +whether you should use Flask, Quart, or something else is ultimately up +to understanding the specific needs of your project. + +.. _Quart: https://github.com/pallets/quart +.. _ASGI: https://asgi.readthedocs.io/en/latest/ + + +Extensions +---------- + +Flask extensions predating Flask's async support do not expect async views. +If they provide decorators to add functionality to views, those will probably +not work with async views because they will not await the function or be +awaitable. Other functions they provide will not be awaitable either and +will probably be blocking if called within an async view. + +Extension authors can support async functions by utilising the +:meth:`flask.Flask.ensure_sync` method. For example, if the extension +provides a view function decorator add ``ensure_sync`` before calling +the decorated function, + +.. code-block:: python + + def extension(func): + @wraps(func) + def wrapper(*args, **kwargs): + ... # Extension logic + return current_app.ensure_sync(func)(*args, **kwargs) + + return wrapper + +Check the changelog of the extension you want to use to see if they've +implemented async support, or make a feature request or PR to them. + + +Other event loops +----------------- + +At the moment Flask only supports :mod:`asyncio`. It's possible to +override :meth:`flask.Flask.ensure_sync` to change how async functions +are wrapped to use a different library. diff --git a/_build/_sources/blueprints.rst.txt b/_build/_sources/blueprints.rst.txt new file mode 100644 index 00000000..d5cf3d82 --- /dev/null +++ b/_build/_sources/blueprints.rst.txt @@ -0,0 +1,315 @@ +Modular Applications with Blueprints +==================================== + +.. currentmodule:: flask + +.. versionadded:: 0.7 + +Flask uses a concept of *blueprints* for making application components and +supporting common patterns within an application or across applications. +Blueprints can greatly simplify how large applications work and provide a +central means for Flask extensions to register operations on applications. +A :class:`Blueprint` object works similarly to a :class:`Flask` +application object, but it is not actually an application. Rather it is a +*blueprint* of how to construct or extend an application. + +Why Blueprints? +--------------- + +Blueprints in Flask are intended for these cases: + +* Factor an application into a set of blueprints. This is ideal for + larger applications; a project could instantiate an application object, + initialize several extensions, and register a collection of blueprints. +* Register a blueprint on an application at a URL prefix and/or subdomain. + Parameters in the URL prefix/subdomain become common view arguments + (with defaults) across all view functions in the blueprint. +* Register a blueprint multiple times on an application with different URL + rules. +* Provide template filters, static files, templates, and other utilities + through blueprints. A blueprint does not have to implement applications + or view functions. +* Register a blueprint on an application for any of these cases when + initializing a Flask extension. + +A blueprint in Flask is not a pluggable app because it is not actually an +application -- it's a set of operations which can be registered on an +application, even multiple times. Why not have multiple application +objects? You can do that (see :doc:`/patterns/appdispatch`), but your +applications will have separate configs and will be managed at the WSGI +layer. + +Blueprints instead provide separation at the Flask level, share +application config, and can change an application object as necessary with +being registered. The downside is that you cannot unregister a blueprint +once an application was created without having to destroy the whole +application object. + +The Concept of Blueprints +------------------------- + +The basic concept of blueprints is that they record operations to execute +when registered on an application. Flask associates view functions with +blueprints when dispatching requests and generating URLs from one endpoint +to another. + +My First Blueprint +------------------ + +This is what a very basic blueprint looks like. In this case we want to +implement a blueprint that does simple rendering of static templates:: + + from flask import Blueprint, render_template, abort + from jinja2 import TemplateNotFound + + simple_page = Blueprint('simple_page', __name__, + template_folder='templates') + + @simple_page.route('/', defaults={'page': 'index'}) + @simple_page.route('/') + def show(page): + try: + return render_template(f'pages/{page}.html') + except TemplateNotFound: + abort(404) + +When you bind a function with the help of the ``@simple_page.route`` +decorator, the blueprint will record the intention of registering the +function ``show`` on the application when it's later registered. +Additionally it will prefix the endpoint of the function with the +name of the blueprint which was given to the :class:`Blueprint` +constructor (in this case also ``simple_page``). The blueprint's name +does not modify the URL, only the endpoint. + +Registering Blueprints +---------------------- + +So how do you register that blueprint? Like this:: + + from flask import Flask + from yourapplication.simple_page import simple_page + + app = Flask(__name__) + app.register_blueprint(simple_page) + +If you check the rules registered on the application, you will find +these:: + + >>> app.url_map + Map([' (HEAD, OPTIONS, GET) -> static>, + ' (HEAD, OPTIONS, GET) -> simple_page.show>, + simple_page.show>]) + +The first one is obviously from the application itself for the static +files. The other two are for the `show` function of the ``simple_page`` +blueprint. As you can see, they are also prefixed with the name of the +blueprint and separated by a dot (``.``). + +Blueprints however can also be mounted at different locations:: + + app.register_blueprint(simple_page, url_prefix='/pages') + +And sure enough, these are the generated rules:: + + >>> app.url_map + Map([' (HEAD, OPTIONS, GET) -> static>, + ' (HEAD, OPTIONS, GET) -> simple_page.show>, + simple_page.show>]) + +On top of that you can register blueprints multiple times though not every +blueprint might respond properly to that. In fact it depends on how the +blueprint is implemented if it can be mounted more than once. + +Nesting Blueprints +------------------ + +It is possible to register a blueprint on another blueprint. + +.. code-block:: python + + parent = Blueprint('parent', __name__, url_prefix='/parent') + child = Blueprint('child', __name__, url_prefix='/child') + parent.register_blueprint(child) + app.register_blueprint(parent) + +The child blueprint will gain the parent's name as a prefix to its +name, and child URLs will be prefixed with the parent's URL prefix. + +.. code-block:: python + + url_for('parent.child.create') + /parent/child/create + +In addition a child blueprint's will gain their parent's subdomain, +with their subdomain as prefix if present i.e. + +.. code-block:: python + + parent = Blueprint('parent', __name__, subdomain='parent') + child = Blueprint('child', __name__, subdomain='child') + parent.register_blueprint(child) + app.register_blueprint(parent) + + url_for('parent.child.create', _external=True) + "child.parent.domain.tld" + +Blueprint-specific before request functions, etc. registered with the +parent will trigger for the child. If a child does not have an error +handler that can handle a given exception, the parent's will be tried. + + +Blueprint Resources +------------------- + +Blueprints can provide resources as well. Sometimes you might want to +introduce a blueprint only for the resources it provides. + +Blueprint Resource Folder +````````````````````````` + +Like for regular applications, blueprints are considered to be contained +in a folder. While multiple blueprints can originate from the same folder, +it does not have to be the case and it's usually not recommended. + +The folder is inferred from the second argument to :class:`Blueprint` which +is usually `__name__`. This argument specifies what logical Python +module or package corresponds to the blueprint. If it points to an actual +Python package that package (which is a folder on the filesystem) is the +resource folder. If it's a module, the package the module is contained in +will be the resource folder. You can access the +:attr:`Blueprint.root_path` property to see what the resource folder is:: + + >>> simple_page.root_path + '/Users/username/TestProject/yourapplication' + +To quickly open sources from this folder you can use the +:meth:`~Blueprint.open_resource` function:: + + with simple_page.open_resource('static/style.css') as f: + code = f.read() + +Static Files +```````````` + +A blueprint can expose a folder with static files by providing the path +to the folder on the filesystem with the ``static_folder`` argument. +It is either an absolute path or relative to the blueprint's location:: + + admin = Blueprint('admin', __name__, static_folder='static') + +By default the rightmost part of the path is where it is exposed on the +web. This can be changed with the ``static_url_path`` argument. Because the +folder is called ``static`` here it will be available at the +``url_prefix`` of the blueprint + ``/static``. If the blueprint +has the prefix ``/admin``, the static URL will be ``/admin/static``. + +The endpoint is named ``blueprint_name.static``. You can generate URLs +to it with :func:`url_for` like you would with the static folder of the +application:: + + url_for('admin.static', filename='style.css') + +However, if the blueprint does not have a ``url_prefix``, it is not +possible to access the blueprint's static folder. This is because the +URL would be ``/static`` in this case, and the application's ``/static`` +route takes precedence. Unlike template folders, blueprint static +folders are not searched if the file does not exist in the application +static folder. + +Templates +````````` + +If you want the blueprint to expose templates you can do that by providing +the `template_folder` parameter to the :class:`Blueprint` constructor:: + + admin = Blueprint('admin', __name__, template_folder='templates') + +For static files, the path can be absolute or relative to the blueprint +resource folder. + +The template folder is added to the search path of templates but with a lower +priority than the actual application's template folder. That way you can +easily override templates that a blueprint provides in the actual application. +This also means that if you don't want a blueprint template to be accidentally +overridden, make sure that no other blueprint or actual application template +has the same relative path. When multiple blueprints provide the same relative +template path the first blueprint registered takes precedence over the others. + + +So if you have a blueprint in the folder ``yourapplication/admin`` and you +want to render the template ``'admin/index.html'`` and you have provided +``templates`` as a `template_folder` you will have to create a file like +this: :file:`yourapplication/admin/templates/admin/index.html`. The reason +for the extra ``admin`` folder is to avoid getting our template overridden +by a template named ``index.html`` in the actual application template +folder. + +To further reiterate this: if you have a blueprint named ``admin`` and you +want to render a template called :file:`index.html` which is specific to this +blueprint, the best idea is to lay out your templates like this:: + + yourpackage/ + blueprints/ + admin/ + templates/ + admin/ + index.html + __init__.py + +And then when you want to render the template, use :file:`admin/index.html` as +the name to look up the template by. If you encounter problems loading +the correct templates enable the ``EXPLAIN_TEMPLATE_LOADING`` config +variable which will instruct Flask to print out the steps it goes through +to locate templates on every ``render_template`` call. + +Building URLs +------------- + +If you want to link from one page to another you can use the +:func:`url_for` function just like you normally would do just that you +prefix the URL endpoint with the name of the blueprint and a dot (``.``):: + + url_for('admin.index') + +Additionally if you are in a view function of a blueprint or a rendered +template and you want to link to another endpoint of the same blueprint, +you can use relative redirects by prefixing the endpoint with a dot only:: + + url_for('.index') + +This will link to ``admin.index`` for instance in case the current request +was dispatched to any other admin blueprint endpoint. + + +Blueprint Error Handlers +------------------------ + +Blueprints support the ``errorhandler`` decorator just like the :class:`Flask` +application object, so it is easy to make Blueprint-specific custom error +pages. + +Here is an example for a "404 Page Not Found" exception:: + + @simple_page.errorhandler(404) + def page_not_found(e): + return render_template('pages/404.html') + +Most errorhandlers will simply work as expected; however, there is a caveat +concerning handlers for 404 and 405 exceptions. These errorhandlers are only +invoked from an appropriate ``raise`` statement or a call to ``abort`` in another +of the blueprint's view functions; they are not invoked by, e.g., an invalid URL +access. This is because the blueprint does not "own" a certain URL space, so +the application instance has no way of knowing which blueprint error handler it +should run if given an invalid URL. If you would like to execute different +handling strategies for these errors based on URL prefixes, they may be defined +at the application level using the ``request`` proxy object:: + + @app.errorhandler(404) + @app.errorhandler(405) + def _handle_api_error(ex): + if request.path.startswith('/api/'): + return jsonify(error=str(ex)), ex.code + else: + return ex + +See :doc:`/errorhandling`. diff --git a/_build/_sources/changes.rst.txt b/_build/_sources/changes.rst.txt new file mode 100644 index 00000000..955deaf2 --- /dev/null +++ b/_build/_sources/changes.rst.txt @@ -0,0 +1,4 @@ +Changes +======= + +.. include:: ../CHANGES.rst diff --git a/_build/_sources/cli.rst.txt b/_build/_sources/cli.rst.txt new file mode 100644 index 00000000..a72e6d51 --- /dev/null +++ b/_build/_sources/cli.rst.txt @@ -0,0 +1,556 @@ +.. currentmodule:: flask + +Command Line Interface +====================== + +Installing Flask installs the ``flask`` script, a `Click`_ command line +interface, in your virtualenv. Executed from the terminal, this script gives +access to built-in, extension, and application-defined commands. The ``--help`` +option will give more information about any commands and options. + +.. _Click: https://click.palletsprojects.com/ + + +Application Discovery +--------------------- + +The ``flask`` command is installed by Flask, not your application; it must be +told where to find your application in order to use it. The ``--app`` +option is used to specify how to load the application. + +While ``--app`` supports a variety of options for specifying your +application, most use cases should be simple. Here are the typical values: + +(nothing) + The name "app" or "wsgi" is imported (as a ".py" file, or package), + automatically detecting an app (``app`` or ``application``) or + factory (``create_app`` or ``make_app``). + +``--app hello`` + The given name is imported, automatically detecting an app (``app`` + or ``application``) or factory (``create_app`` or ``make_app``). + +---- + +``--app`` has three parts: an optional path that sets the current working +directory, a Python file or dotted import path, and an optional variable +name of the instance or factory. If the name is a factory, it can optionally +be followed by arguments in parentheses. The following values demonstrate these +parts: + +``--app src/hello`` + Sets the current working directory to ``src`` then imports ``hello``. + +``--app hello.web`` + Imports the path ``hello.web``. + +``--app hello:app2`` + Uses the ``app2`` Flask instance in ``hello``. + +``--app 'hello:create_app("dev")'`` + The ``create_app`` factory in ``hello`` is called with the string ``'dev'`` + as the argument. + +If ``--app`` is not set, the command will try to import "app" or +"wsgi" (as a ".py" file, or package) and try to detect an application +instance or factory. + +Within the given import, the command looks for an application instance named +``app`` or ``application``, then any application instance. If no instance is +found, the command looks for a factory function named ``create_app`` or +``make_app`` that returns an instance. + +If parentheses follow the factory name, their contents are parsed as +Python literals and passed as arguments and keyword arguments to the +function. This means that strings must still be in quotes. + + +Run the Development Server +-------------------------- + +The :func:`run ` command will start the development server. It +replaces the :meth:`Flask.run` method in most cases. :: + + $ flask --app hello run + * Serving Flask app "hello" + * Running on http://127.0.0.1:5000/ (Press CTRL+C to quit) + +.. warning:: Do not use this command to run your application in production. + Only use the development server during development. The development server + is provided for convenience, but is not designed to be particularly secure, + stable, or efficient. See :doc:`/deploying/index` for how to run in production. + +If another program is already using port 5000, you'll see +``OSError: [Errno 98]`` or ``OSError: [WinError 10013]`` when the +server tries to start. See :ref:`address-already-in-use` for how to +handle that. + + +Debug Mode +~~~~~~~~~~ + +In debug mode, the ``flask run`` command will enable the interactive debugger and the +reloader by default, and make errors easier to see and debug. To enable debug mode, use +the ``--debug`` option. + +.. code-block:: console + + $ flask --app hello run --debug + * Serving Flask app "hello" + * Debug mode: on + * Running on http://127.0.0.1:5000/ (Press CTRL+C to quit) + * Restarting with inotify reloader + * Debugger is active! + * Debugger PIN: 223-456-919 + +The ``--debug`` option can also be passed to the top level ``flask`` command to enable +debug mode for any command. The following two ``run`` calls are equivalent. + +.. code-block:: console + + $ flask --app hello --debug run + $ flask --app hello run --debug + + +Watch and Ignore Files with the Reloader +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +When using debug mode, the reloader will trigger whenever your Python code or imported +modules change. The reloader can watch additional files with the ``--extra-files`` +option. Multiple paths are separated with ``:``, or ``;`` on Windows. + +.. code-block:: text + + $ flask run --extra-files file1:dirA/file2:dirB/ + * Running on http://127.0.0.1:8000/ + * Detected change in '/path/to/file1', reloading + +The reloader can also ignore files using :mod:`fnmatch` patterns with the +``--exclude-patterns`` option. Multiple patterns are separated with ``:``, or ``;`` on +Windows. + + +Open a Shell +------------ + +To explore the data in your application, you can start an interactive Python +shell with the :func:`shell ` command. An application +context will be active, and the app instance will be imported. :: + + $ flask shell + Python 3.10.0 (default, Oct 27 2021, 06:59:51) [GCC 11.1.0] on linux + App: example [production] + Instance: /home/david/Projects/pallets/flask/instance + >>> + +Use :meth:`~Flask.shell_context_processor` to add other automatic imports. + + +.. _dotenv: + +Environment Variables From dotenv +--------------------------------- + +The ``flask`` command supports setting any option for any command with +environment variables. The variables are named like ``FLASK_OPTION`` or +``FLASK_COMMAND_OPTION``, for example ``FLASK_APP`` or +``FLASK_RUN_PORT``. + +Rather than passing options every time you run a command, or environment +variables every time you open a new terminal, you can use Flask's dotenv +support to set environment variables automatically. + +If `python-dotenv`_ is installed, running the ``flask`` command will set +environment variables defined in the files ``.env`` and ``.flaskenv``. +You can also specify an extra file to load with the ``--env-file`` +option. Dotenv files can be used to avoid having to set ``--app`` or +``FLASK_APP`` manually, and to set configuration using environment +variables similar to how some deployment services work. + +Variables set on the command line are used over those set in :file:`.env`, +which are used over those set in :file:`.flaskenv`. :file:`.flaskenv` should be +used for public variables, such as ``FLASK_APP``, while :file:`.env` should not +be committed to your repository so that it can set private variables. + +Directories are scanned upwards from the directory you call ``flask`` +from to locate the files. + +The files are only loaded by the ``flask`` command or calling +:meth:`~Flask.run`. If you would like to load these files when running in +production, you should call :func:`~cli.load_dotenv` manually. + +.. _python-dotenv: https://github.com/theskumar/python-dotenv#readme + + +Setting Command Options +~~~~~~~~~~~~~~~~~~~~~~~ + +Click is configured to load default values for command options from +environment variables. The variables use the pattern +``FLASK_COMMAND_OPTION``. For example, to set the port for the run +command, instead of ``flask run --port 8000``: + +.. tabs:: + + .. group-tab:: Bash + + .. code-block:: text + + $ export FLASK_RUN_PORT=8000 + $ flask run + * Running on http://127.0.0.1:8000/ + + .. group-tab:: Fish + + .. code-block:: text + + $ set -x FLASK_RUN_PORT 8000 + $ flask run + * Running on http://127.0.0.1:8000/ + + .. group-tab:: CMD + + .. code-block:: text + + > set FLASK_RUN_PORT=8000 + > flask run + * Running on http://127.0.0.1:8000/ + + .. group-tab:: Powershell + + .. code-block:: text + + > $env:FLASK_RUN_PORT = 8000 + > flask run + * Running on http://127.0.0.1:8000/ + +These can be added to the ``.flaskenv`` file just like ``FLASK_APP`` to +control default command options. + + +Disable dotenv +~~~~~~~~~~~~~~ + +The ``flask`` command will show a message if it detects dotenv files but +python-dotenv is not installed. + +.. code-block:: bash + + $ flask run + * Tip: There are .env files present. Do "pip install python-dotenv" to use them. + +You can tell Flask not to load dotenv files even when python-dotenv is +installed by setting the ``FLASK_SKIP_DOTENV`` environment variable. +This can be useful if you want to load them manually, or if you're using +a project runner that loads them already. Keep in mind that the +environment variables must be set before the app loads or it won't +configure as expected. + +.. tabs:: + + .. group-tab:: Bash + + .. code-block:: text + + $ export FLASK_SKIP_DOTENV=1 + $ flask run + + .. group-tab:: Fish + + .. code-block:: text + + $ set -x FLASK_SKIP_DOTENV 1 + $ flask run + + .. group-tab:: CMD + + .. code-block:: text + + > set FLASK_SKIP_DOTENV=1 + > flask run + + .. group-tab:: Powershell + + .. code-block:: text + + > $env:FLASK_SKIP_DOTENV = 1 + > flask run + + +Environment Variables From virtualenv +------------------------------------- + +If you do not want to install dotenv support, you can still set environment +variables by adding them to the end of the virtualenv's :file:`activate` +script. Activating the virtualenv will set the variables. + +.. tabs:: + + .. group-tab:: Bash + + Unix Bash, :file:`.venv/bin/activate`:: + + $ export FLASK_APP=hello + + .. group-tab:: Fish + + Fish, :file:`.venv/bin/activate.fish`:: + + $ set -x FLASK_APP hello + + .. group-tab:: CMD + + Windows CMD, :file:`.venv\\Scripts\\activate.bat`:: + + > set FLASK_APP=hello + + .. group-tab:: Powershell + + Windows Powershell, :file:`.venv\\Scripts\\activate.ps1`:: + + > $env:FLASK_APP = "hello" + +It is preferred to use dotenv support over this, since :file:`.flaskenv` can be +committed to the repository so that it works automatically wherever the project +is checked out. + + +Custom Commands +--------------- + +The ``flask`` command is implemented using `Click`_. See that project's +documentation for full information about writing commands. + +This example adds the command ``create-user`` that takes the argument +``name``. :: + + import click + from flask import Flask + + app = Flask(__name__) + + @app.cli.command("create-user") + @click.argument("name") + def create_user(name): + ... + +:: + + $ flask create-user admin + +This example adds the same command, but as ``user create``, a command in a +group. This is useful if you want to organize multiple related commands. :: + + import click + from flask import Flask + from flask.cli import AppGroup + + app = Flask(__name__) + user_cli = AppGroup('user') + + @user_cli.command('create') + @click.argument('name') + def create_user(name): + ... + + app.cli.add_command(user_cli) + +:: + + $ flask user create demo + +See :ref:`testing-cli` for an overview of how to test your custom +commands. + + +Registering Commands with Blueprints +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +If your application uses blueprints, you can optionally register CLI +commands directly onto them. When your blueprint is registered onto your +application, the associated commands will be available to the ``flask`` +command. By default, those commands will be nested in a group matching +the name of the blueprint. + +.. code-block:: python + + from flask import Blueprint + + bp = Blueprint('students', __name__) + + @bp.cli.command('create') + @click.argument('name') + def create(name): + ... + + app.register_blueprint(bp) + +.. code-block:: text + + $ flask students create alice + +You can alter the group name by specifying the ``cli_group`` parameter +when creating the :class:`Blueprint` object, or later with +:meth:`app.register_blueprint(bp, cli_group='...') `. +The following are equivalent: + +.. code-block:: python + + bp = Blueprint('students', __name__, cli_group='other') + # or + app.register_blueprint(bp, cli_group='other') + +.. code-block:: text + + $ flask other create alice + +Specifying ``cli_group=None`` will remove the nesting and merge the +commands directly to the application's level: + +.. code-block:: python + + bp = Blueprint('students', __name__, cli_group=None) + # or + app.register_blueprint(bp, cli_group=None) + +.. code-block:: text + + $ flask create alice + + +Application Context +~~~~~~~~~~~~~~~~~~~ + +Commands added using the Flask app's :attr:`~Flask.cli` or +:class:`~flask.cli.FlaskGroup` :meth:`~cli.AppGroup.command` decorator +will be executed with an application context pushed, so your custom +commands and parameters have access to the app and its configuration. The +:func:`~cli.with_appcontext` decorator can be used to get the same +behavior, but is not needed in most cases. + +.. code-block:: python + + import click + from flask.cli import with_appcontext + + @click.command() + @with_appcontext + def do_work(): + ... + + app.cli.add_command(do_work) + + +Plugins +------- + +Flask will automatically load commands specified in the ``flask.commands`` +`entry point`_. This is useful for extensions that want to add commands when +they are installed. Entry points are specified in :file:`pyproject.toml`: + +.. code-block:: toml + + [project.entry-points."flask.commands"] + my-command = "my_extension.commands:cli" + +.. _entry point: https://packaging.python.org/tutorials/packaging-projects/#entry-points + +Inside :file:`my_extension/commands.py` you can then export a Click +object:: + + import click + + @click.command() + def cli(): + ... + +Once that package is installed in the same virtualenv as your Flask project, +you can run ``flask my-command`` to invoke the command. + + +.. _custom-scripts: + +Custom Scripts +-------------- + +When you are using the app factory pattern, it may be more convenient to define +your own Click script. Instead of using ``--app`` and letting Flask load +your application, you can create your own Click object and export it as a +`console script`_ entry point. + +Create an instance of :class:`~cli.FlaskGroup` and pass it the factory:: + + import click + from flask import Flask + from flask.cli import FlaskGroup + + def create_app(): + app = Flask('wiki') + # other setup + return app + + @click.group(cls=FlaskGroup, create_app=create_app) + def cli(): + """Management script for the Wiki application.""" + +Define the entry point in :file:`pyproject.toml`: + +.. code-block:: toml + + [project.scripts] + wiki = "wiki:cli" + +Install the application in the virtualenv in editable mode and the custom +script is available. Note that you don't need to set ``--app``. :: + + $ pip install -e . + $ wiki run + +.. admonition:: Errors in Custom Scripts + + When using a custom script, if you introduce an error in your + module-level code, the reloader will fail because it can no longer + load the entry point. + + The ``flask`` command, being separate from your code, does not have + this issue and is recommended in most cases. + +.. _console script: https://packaging.python.org/tutorials/packaging-projects/#console-scripts + + +PyCharm Integration +------------------- + +PyCharm Professional provides a special Flask run configuration to run the development +server. For the Community Edition, and for other commands besides ``run``, you need to +create a custom run configuration. These instructions should be similar for any other +IDE you use. + +In PyCharm, with your project open, click on *Run* from the menu bar and go to *Edit +Configurations*. You'll see a screen similar to this: + +.. image:: _static/pycharm-run-config.png + :align: center + :class: screenshot + :alt: Screenshot of PyCharm run configuration. + +Once you create a configuration for the ``flask run``, you can copy and change it to +call any other command. + +Click the *+ (Add New Configuration)* button and select *Python*. Give the configuration +a name such as "flask run". + +Click the *Script path* dropdown and change it to *Module name*, then input ``flask``. + +The *Parameters* field is set to the CLI command to execute along with any arguments. +This example uses ``--app hello run --debug``, which will run the development server in +debug mode. ``--app hello`` should be the import or file with your Flask app. + +If you installed your project as a package in your virtualenv, you may uncheck the +*PYTHONPATH* options. This will more accurately match how you deploy later. + +Click *OK* to save and close the configuration. Select the configuration in the main +PyCharm window and click the play button next to it to run the server. + +Now that you have a configuration for ``flask run``, you can copy that configuration and +change the *Parameters* argument to run a different CLI command. diff --git a/_build/_sources/config.rst.txt b/_build/_sources/config.rst.txt new file mode 100644 index 00000000..5695bbd0 --- /dev/null +++ b/_build/_sources/config.rst.txt @@ -0,0 +1,836 @@ +Configuration Handling +====================== + +Applications need some kind of configuration. There are different settings +you might want to change depending on the application environment like +toggling the debug mode, setting the secret key, and other such +environment-specific things. + +The way Flask is designed usually requires the configuration to be +available when the application starts up. You can hard code the +configuration in the code, which for many small applications is not +actually that bad, but there are better ways. + +Independent of how you load your config, there is a config object +available which holds the loaded configuration values: +The :attr:`~flask.Flask.config` attribute of the :class:`~flask.Flask` +object. This is the place where Flask itself puts certain configuration +values and also where extensions can put their configuration values. But +this is also where you can have your own configuration. + + +Configuration Basics +-------------------- + +The :attr:`~flask.Flask.config` is actually a subclass of a dictionary and +can be modified just like any dictionary:: + + app = Flask(__name__) + app.config['TESTING'] = True + +Certain configuration values are also forwarded to the +:attr:`~flask.Flask` object so you can read and write them from there:: + + app.testing = True + +To update multiple keys at once you can use the :meth:`dict.update` +method:: + + app.config.update( + TESTING=True, + SECRET_KEY='192b9bdd22ab9ed4d12e236c78afcb9a393ec15f71bbf5dc987d54727823bcbf' + ) + + +Debug Mode +---------- + +The :data:`DEBUG` config value is special because it may behave inconsistently if +changed after the app has begun setting up. In order to set debug mode reliably, use the +``--debug`` option on the ``flask`` or ``flask run`` command. ``flask run`` will use the +interactive debugger and reloader by default in debug mode. + +.. code-block:: text + + $ flask --app hello run --debug + +Using the option is recommended. While it is possible to set :data:`DEBUG` in your +config or code, this is strongly discouraged. It can't be read early by the +``flask run`` command, and some systems or extensions may have already configured +themselves based on a previous value. + + +Builtin Configuration Values +---------------------------- + +The following configuration values are used internally by Flask: + +.. py:data:: DEBUG + + Whether debug mode is enabled. When using ``flask run`` to start the development + server, an interactive debugger will be shown for unhandled exceptions, and the + server will be reloaded when code changes. The :attr:`~flask.Flask.debug` attribute + maps to this config key. This is set with the ``FLASK_DEBUG`` environment variable. + It may not behave as expected if set in code. + + **Do not enable debug mode when deploying in production.** + + Default: ``False`` + +.. py:data:: TESTING + + Enable testing mode. Exceptions are propagated rather than handled by the + the app's error handlers. Extensions may also change their behavior to + facilitate easier testing. You should enable this in your own tests. + + Default: ``False`` + +.. py:data:: PROPAGATE_EXCEPTIONS + + Exceptions are re-raised rather than being handled by the app's error + handlers. If not set, this is implicitly true if ``TESTING`` or ``DEBUG`` + is enabled. + + Default: ``None`` + +.. py:data:: TRAP_HTTP_EXCEPTIONS + + If there is no handler for an ``HTTPException``-type exception, re-raise it + to be handled by the interactive debugger instead of returning it as a + simple error response. + + Default: ``False`` + +.. py:data:: TRAP_BAD_REQUEST_ERRORS + + Trying to access a key that doesn't exist from request dicts like ``args`` + and ``form`` will return a 400 Bad Request error page. Enable this to treat + the error as an unhandled exception instead so that you get the interactive + debugger. This is a more specific version of ``TRAP_HTTP_EXCEPTIONS``. If + unset, it is enabled in debug mode. + + Default: ``None`` + +.. py:data:: SECRET_KEY + + A secret key that will be used for securely signing the session cookie + and can be used for any other security related needs by extensions or your + application. It should be a long random ``bytes`` or ``str``. For + example, copy the output of this to your config:: + + $ python -c 'import secrets; print(secrets.token_hex())' + '192b9bdd22ab9ed4d12e236c78afcb9a393ec15f71bbf5dc987d54727823bcbf' + + **Do not reveal the secret key when posting questions or committing code.** + + Default: ``None`` + +.. py:data:: SECRET_KEY_FALLBACKS + + A list of old secret keys that can still be used for unsigning, most recent + first. This allows a project to implement key rotation without invalidating + active sessions or other recently-signed secrets. + + Keys should be removed after an appropriate period of time, as checking each + additional key adds some overhead. + + Flask's built-in secure cookie session supports this. Extensions that use + :data:`SECRET_KEY` may not support this yet. + + Default: ``None`` + + .. versionadded:: 3.1 + +.. py:data:: SESSION_COOKIE_NAME + + The name of the session cookie. Can be changed in case you already have a + cookie with the same name. + + Default: ``'session'`` + +.. py:data:: SESSION_COOKIE_DOMAIN + + The value of the ``Domain`` parameter on the session cookie. If not set, browsers + will only send the cookie to the exact domain it was set from. Otherwise, they + will send it to any subdomain of the given value as well. + + Not setting this value is more restricted and secure than setting it. + + Default: ``None`` + + .. warning:: + If this is changed after the browser created a cookie is created with + one setting, it may result in another being created. Browsers may send + send both in an undefined order. In that case, you may want to change + :data:`SESSION_COOKIE_NAME` as well or otherwise invalidate old sessions. + + .. versionchanged:: 2.3 + Not set by default, does not fall back to ``SERVER_NAME``. + +.. py:data:: SESSION_COOKIE_PATH + + The path that the session cookie will be valid for. If not set, the cookie + will be valid underneath ``APPLICATION_ROOT`` or ``/`` if that is not set. + + Default: ``None`` + +.. py:data:: SESSION_COOKIE_HTTPONLY + + Browsers will not allow JavaScript access to cookies marked as "HTTP only" + for security. + + Default: ``True`` + +.. py:data:: SESSION_COOKIE_SECURE + + Browsers will only send cookies with requests over HTTPS if the cookie is + marked "secure". The application must be served over HTTPS for this to make + sense. + + Default: ``False`` + +.. py:data:: SESSION_COOKIE_PARTITIONED + + Browsers will send cookies based on the top-level document's domain, rather + than only the domain of the document setting the cookie. This prevents third + party cookies set in iframes from "leaking" between separate sites. + + Browsers are beginning to disallow non-partitioned third party cookies, so + you need to mark your cookies partitioned if you expect them to work in such + embedded situations. + + Enabling this implicitly enables :data:`SESSION_COOKIE_SECURE` as well, as + it is only valid when served over HTTPS. + + Default: ``False`` + + .. versionadded:: 3.1 + +.. py:data:: SESSION_COOKIE_SAMESITE + + Restrict how cookies are sent with requests from external sites. Can + be set to ``'Lax'`` (recommended) or ``'Strict'``. + See :ref:`security-cookie`. + + Default: ``None`` + + .. versionadded:: 1.0 + +.. py:data:: PERMANENT_SESSION_LIFETIME + + If ``session.permanent`` is true, the cookie's expiration will be set this + number of seconds in the future. Can either be a + :class:`datetime.timedelta` or an ``int``. + + Flask's default cookie implementation validates that the cryptographic + signature is not older than this value. + + Default: ``timedelta(days=31)`` (``2678400`` seconds) + +.. py:data:: SESSION_REFRESH_EACH_REQUEST + + Control whether the cookie is sent with every response when + ``session.permanent`` is true. Sending the cookie every time (the default) + can more reliably keep the session from expiring, but uses more bandwidth. + Non-permanent sessions are not affected. + + Default: ``True`` + +.. py:data:: USE_X_SENDFILE + + When serving files, set the ``X-Sendfile`` header instead of serving the + data with Flask. Some web servers, such as Apache, recognize this and serve + the data more efficiently. This only makes sense when using such a server. + + Default: ``False`` + +.. py:data:: SEND_FILE_MAX_AGE_DEFAULT + + When serving files, set the cache control max age to this number of + seconds. Can be a :class:`datetime.timedelta` or an ``int``. + Override this value on a per-file basis using + :meth:`~flask.Flask.get_send_file_max_age` on the application or + blueprint. + + If ``None``, ``send_file`` tells the browser to use conditional + requests will be used instead of a timed cache, which is usually + preferable. + + Default: ``None`` + +.. py:data:: TRUSTED_HOSTS + + Validate :attr:`.Request.host` and other attributes that use it against + these trusted values. Raise a :exc:`~werkzeug.exceptions.SecurityError` if + the host is invalid, which results in a 400 error. If it is ``None``, all + hosts are valid. Each value is either an exact match, or can start with + a dot ``.`` to match any subdomain. + + Validation is done during routing against this value. ``before_request`` and + ``after_request`` callbacks will still be called. + + Default: ``None`` + + .. versionadded:: 3.1 + +.. py:data:: SERVER_NAME + + Inform the application what host and port it is bound to. + + Must be set if ``subdomain_matching`` is enabled, to be able to extract the + subdomain from the request. + + Must be set for ``url_for`` to generate external URLs outside of a + request context. + + Default: ``None`` + + .. versionchanged:: 3.1 + Does not restrict requests to only this domain, for both + ``subdomain_matching`` and ``host_matching``. + + .. versionchanged:: 1.0 + Does not implicitly enable ``subdomain_matching``. + + .. versionchanged:: 2.3 + Does not affect ``SESSION_COOKIE_DOMAIN``. + +.. py:data:: APPLICATION_ROOT + + Inform the application what path it is mounted under by the application / + web server. This is used for generating URLs outside the context of a + request (inside a request, the dispatcher is responsible for setting + ``SCRIPT_NAME`` instead; see :doc:`/patterns/appdispatch` + for examples of dispatch configuration). + + Will be used for the session cookie path if ``SESSION_COOKIE_PATH`` is not + set. + + Default: ``'/'`` + +.. py:data:: PREFERRED_URL_SCHEME + + Use this scheme for generating external URLs when not in a request context. + + Default: ``'http'`` + +.. py:data:: MAX_CONTENT_LENGTH + + The maximum number of bytes that will be read during this request. If + this limit is exceeded, a 413 :exc:`~werkzeug.exceptions.RequestEntityTooLarge` + error is raised. If it is set to ``None``, no limit is enforced at the + Flask application level. However, if it is ``None`` and the request has no + ``Content-Length`` header and the WSGI server does not indicate that it + terminates the stream, then no data is read to avoid an infinite stream. + + Each request defaults to this config. It can be set on a specific + :attr:`.Request.max_content_length` to apply the limit to that specific + view. This should be set appropriately based on an application's or view's + specific needs. + + Default: ``None`` + + .. versionadded:: 0.6 + +.. py:data:: MAX_FORM_MEMORY_SIZE + + The maximum size in bytes any non-file form field may be in a + ``multipart/form-data`` body. If this limit is exceeded, a 413 + :exc:`~werkzeug.exceptions.RequestEntityTooLarge` error is raised. If it is + set to ``None``, no limit is enforced at the Flask application level. + + Each request defaults to this config. It can be set on a specific + :attr:`.Request.max_form_memory_parts` to apply the limit to that specific + view. This should be set appropriately based on an application's or view's + specific needs. + + Default: ``500_000`` + + .. versionadded:: 3.1 + +.. py:data:: MAX_FORM_PARTS + + The maximum number of fields that may be present in a + ``multipart/form-data`` body. If this limit is exceeded, a 413 + :exc:`~werkzeug.exceptions.RequestEntityTooLarge` error is raised. If it + is set to ``None``, no limit is enforced at the Flask application level. + + Each request defaults to this config. It can be set on a specific + :attr:`.Request.max_form_parts` to apply the limit to that specific view. + This should be set appropriately based on an application's or view's + specific needs. + + Default: ``1_000`` + + .. versionadded:: 3.1 + +.. py:data:: TEMPLATES_AUTO_RELOAD + + Reload templates when they are changed. If not set, it will be enabled in + debug mode. + + Default: ``None`` + +.. py:data:: EXPLAIN_TEMPLATE_LOADING + + Log debugging information tracing how a template file was loaded. This can + be useful to figure out why a template was not loaded or the wrong file + appears to be loaded. + + Default: ``False`` + +.. py:data:: MAX_COOKIE_SIZE + + Warn if cookie headers are larger than this many bytes. Defaults to + ``4093``. Larger cookies may be silently ignored by browsers. Set to + ``0`` to disable the warning. + +.. py:data:: PROVIDE_AUTOMATIC_OPTIONS + + Set to ``False`` to disable the automatic addition of OPTIONS + responses. This can be overridden per route by altering the + ``provide_automatic_options`` attribute. + +.. versionadded:: 0.4 + ``LOGGER_NAME`` + +.. versionadded:: 0.5 + ``SERVER_NAME`` + +.. versionadded:: 0.6 + ``MAX_CONTENT_LENGTH`` + +.. versionadded:: 0.7 + ``PROPAGATE_EXCEPTIONS``, ``PRESERVE_CONTEXT_ON_EXCEPTION`` + +.. versionadded:: 0.8 + ``TRAP_BAD_REQUEST_ERRORS``, ``TRAP_HTTP_EXCEPTIONS``, + ``APPLICATION_ROOT``, ``SESSION_COOKIE_DOMAIN``, + ``SESSION_COOKIE_PATH``, ``SESSION_COOKIE_HTTPONLY``, + ``SESSION_COOKIE_SECURE`` + +.. versionadded:: 0.9 + ``PREFERRED_URL_SCHEME`` + +.. versionadded:: 0.10 + ``JSON_AS_ASCII``, ``JSON_SORT_KEYS``, ``JSONIFY_PRETTYPRINT_REGULAR`` + +.. versionadded:: 0.11 + ``SESSION_REFRESH_EACH_REQUEST``, ``TEMPLATES_AUTO_RELOAD``, + ``LOGGER_HANDLER_POLICY``, ``EXPLAIN_TEMPLATE_LOADING`` + +.. versionchanged:: 1.0 + ``LOGGER_NAME`` and ``LOGGER_HANDLER_POLICY`` were removed. See + :doc:`/logging` for information about configuration. + + Added :data:`ENV` to reflect the :envvar:`FLASK_ENV` environment + variable. + + Added :data:`SESSION_COOKIE_SAMESITE` to control the session + cookie's ``SameSite`` option. + + Added :data:`MAX_COOKIE_SIZE` to control a warning from Werkzeug. + +.. versionchanged:: 2.2 + Removed ``PRESERVE_CONTEXT_ON_EXCEPTION``. + +.. versionchanged:: 2.3 + ``JSON_AS_ASCII``, ``JSON_SORT_KEYS``, ``JSONIFY_MIMETYPE``, and + ``JSONIFY_PRETTYPRINT_REGULAR`` were removed. The default ``app.json`` provider has + equivalent attributes instead. + +.. versionchanged:: 2.3 + ``ENV`` was removed. + +.. versionadded:: 3.10 + Added :data:`PROVIDE_AUTOMATIC_OPTIONS` to control the default + addition of autogenerated OPTIONS responses. + + +Configuring from Python Files +----------------------------- + +Configuration becomes more useful if you can store it in a separate file, ideally +located outside the actual application package. You can deploy your application, then +separately configure it for the specific deployment. + +A common pattern is this:: + + app = Flask(__name__) + app.config.from_object('yourapplication.default_settings') + app.config.from_envvar('YOURAPPLICATION_SETTINGS') + +This first loads the configuration from the +`yourapplication.default_settings` module and then overrides the values +with the contents of the file the :envvar:`YOURAPPLICATION_SETTINGS` +environment variable points to. This environment variable can be set +in the shell before starting the server: + +.. tabs:: + + .. group-tab:: Bash + + .. code-block:: text + + $ export YOURAPPLICATION_SETTINGS=/path/to/settings.cfg + $ flask run + * Running on http://127.0.0.1:5000/ + + .. group-tab:: Fish + + .. code-block:: text + + $ set -x YOURAPPLICATION_SETTINGS /path/to/settings.cfg + $ flask run + * Running on http://127.0.0.1:5000/ + + .. group-tab:: CMD + + .. code-block:: text + + > set YOURAPPLICATION_SETTINGS=\path\to\settings.cfg + > flask run + * Running on http://127.0.0.1:5000/ + + .. group-tab:: Powershell + + .. code-block:: text + + > $env:YOURAPPLICATION_SETTINGS = "\path\to\settings.cfg" + > flask run + * Running on http://127.0.0.1:5000/ + +The configuration files themselves are actual Python files. Only values +in uppercase are actually stored in the config object later on. So make +sure to use uppercase letters for your config keys. + +Here is an example of a configuration file:: + + # Example configuration + SECRET_KEY = '192b9bdd22ab9ed4d12e236c78afcb9a393ec15f71bbf5dc987d54727823bcbf' + +Make sure to load the configuration very early on, so that extensions have +the ability to access the configuration when starting up. There are other +methods on the config object as well to load from individual files. For a +complete reference, read the :class:`~flask.Config` object's +documentation. + + +Configuring from Data Files +--------------------------- + +It is also possible to load configuration from a file in a format of +your choice using :meth:`~flask.Config.from_file`. For example to load +from a TOML file: + +.. code-block:: python + + import tomllib + app.config.from_file("config.toml", load=tomllib.load, text=False) + +Or from a JSON file: + +.. code-block:: python + + import json + app.config.from_file("config.json", load=json.load) + + +Configuring from Environment Variables +-------------------------------------- + +In addition to pointing to configuration files using environment +variables, you may find it useful (or necessary) to control your +configuration values directly from the environment. Flask can be +instructed to load all environment variables starting with a specific +prefix into the config using :meth:`~flask.Config.from_prefixed_env`. + +Environment variables can be set in the shell before starting the +server: + +.. tabs:: + + .. group-tab:: Bash + + .. code-block:: text + + $ export FLASK_SECRET_KEY="5f352379324c22463451387a0aec5d2f" + $ export FLASK_MAIL_ENABLED=false + $ flask run + * Running on http://127.0.0.1:5000/ + + .. group-tab:: Fish + + .. code-block:: text + + $ set -x FLASK_SECRET_KEY "5f352379324c22463451387a0aec5d2f" + $ set -x FLASK_MAIL_ENABLED false + $ flask run + * Running on http://127.0.0.1:5000/ + + .. group-tab:: CMD + + .. code-block:: text + + > set FLASK_SECRET_KEY="5f352379324c22463451387a0aec5d2f" + > set FLASK_MAIL_ENABLED=false + > flask run + * Running on http://127.0.0.1:5000/ + + .. group-tab:: Powershell + + .. code-block:: text + + > $env:FLASK_SECRET_KEY = "5f352379324c22463451387a0aec5d2f" + > $env:FLASK_MAIL_ENABLED = "false" + > flask run + * Running on http://127.0.0.1:5000/ + +The variables can then be loaded and accessed via the config with a key +equal to the environment variable name without the prefix i.e. + +.. code-block:: python + + app.config.from_prefixed_env() + app.config["SECRET_KEY"] # Is "5f352379324c22463451387a0aec5d2f" + +The prefix is ``FLASK_`` by default. This is configurable via the +``prefix`` argument of :meth:`~flask.Config.from_prefixed_env`. + +Values will be parsed to attempt to convert them to a more specific type +than strings. By default :func:`json.loads` is used, so any valid JSON +value is possible, including lists and dicts. This is configurable via +the ``loads`` argument of :meth:`~flask.Config.from_prefixed_env`. + +When adding a boolean value with the default JSON parsing, only "true" +and "false", lowercase, are valid values. Keep in mind that any +non-empty string is considered ``True`` by Python. + +It is possible to set keys in nested dictionaries by separating the +keys with double underscore (``__``). Any intermediate keys that don't +exist on the parent dict will be initialized to an empty dict. + +.. code-block:: text + + $ export FLASK_MYAPI__credentials__username=user123 + +.. code-block:: python + + app.config["MYAPI"]["credentials"]["username"] # Is "user123" + +On Windows, environment variable keys are always uppercase, therefore +the above example would end up as ``MYAPI__CREDENTIALS__USERNAME``. + +For even more config loading features, including merging and +case-insensitive Windows support, try a dedicated library such as +Dynaconf_, which includes integration with Flask. + +.. _Dynaconf: https://www.dynaconf.com/ + + +Configuration Best Practices +---------------------------- + +The downside with the approach mentioned earlier is that it makes testing +a little harder. There is no single 100% solution for this problem in +general, but there are a couple of things you can keep in mind to improve +that experience: + +1. Create your application in a function and register blueprints on it. + That way you can create multiple instances of your application with + different configurations attached which makes unit testing a lot + easier. You can use this to pass in configuration as needed. + +2. Do not write code that needs the configuration at import time. If you + limit yourself to request-only accesses to the configuration you can + reconfigure the object later on as needed. + +3. Make sure to load the configuration very early on, so that + extensions can access the configuration when calling ``init_app``. + + +.. _config-dev-prod: + +Development / Production +------------------------ + +Most applications need more than one configuration. There should be at +least separate configurations for the production server and the one used +during development. The easiest way to handle this is to use a default +configuration that is always loaded and part of the version control, and a +separate configuration that overrides the values as necessary as mentioned +in the example above:: + + app = Flask(__name__) + app.config.from_object('yourapplication.default_settings') + app.config.from_envvar('YOURAPPLICATION_SETTINGS') + +Then you just have to add a separate :file:`config.py` file and export +``YOURAPPLICATION_SETTINGS=/path/to/config.py`` and you are done. However +there are alternative ways as well. For example you could use imports or +subclassing. + +What is very popular in the Django world is to make the import explicit in +the config file by adding ``from yourapplication.default_settings +import *`` to the top of the file and then overriding the changes by hand. +You could also inspect an environment variable like +``YOURAPPLICATION_MODE`` and set that to `production`, `development` etc +and import different hard-coded files based on that. + +An interesting pattern is also to use classes and inheritance for +configuration:: + + class Config(object): + TESTING = False + + class ProductionConfig(Config): + DATABASE_URI = 'mysql://user@localhost/foo' + + class DevelopmentConfig(Config): + DATABASE_URI = "sqlite:////tmp/foo.db" + + class TestingConfig(Config): + DATABASE_URI = 'sqlite:///:memory:' + TESTING = True + +To enable such a config you just have to call into +:meth:`~flask.Config.from_object`:: + + app.config.from_object('configmodule.ProductionConfig') + +Note that :meth:`~flask.Config.from_object` does not instantiate the class +object. If you need to instantiate the class, such as to access a property, +then you must do so before calling :meth:`~flask.Config.from_object`:: + + from configmodule import ProductionConfig + app.config.from_object(ProductionConfig()) + + # Alternatively, import via string: + from werkzeug.utils import import_string + cfg = import_string('configmodule.ProductionConfig')() + app.config.from_object(cfg) + +Instantiating the configuration object allows you to use ``@property`` in +your configuration classes:: + + class Config(object): + """Base config, uses staging database server.""" + TESTING = False + DB_SERVER = '192.168.1.56' + + @property + def DATABASE_URI(self): # Note: all caps + return f"mysql://user@{self.DB_SERVER}/foo" + + class ProductionConfig(Config): + """Uses production database server.""" + DB_SERVER = '192.168.19.32' + + class DevelopmentConfig(Config): + DB_SERVER = 'localhost' + + class TestingConfig(Config): + DB_SERVER = 'localhost' + DATABASE_URI = 'sqlite:///:memory:' + +There are many different ways and it's up to you how you want to manage +your configuration files. However here a list of good recommendations: + +- Keep a default configuration in version control. Either populate the + config with this default configuration or import it in your own + configuration files before overriding values. +- Use an environment variable to switch between the configurations. + This can be done from outside the Python interpreter and makes + development and deployment much easier because you can quickly and + easily switch between different configs without having to touch the + code at all. If you are working often on different projects you can + even create your own script for sourcing that activates a virtualenv + and exports the development configuration for you. +- Use a tool like `fabric`_ to push code and configuration separately + to the production server(s). + +.. _fabric: https://www.fabfile.org/ + + +.. _instance-folders: + +Instance Folders +---------------- + +.. versionadded:: 0.8 + +Flask 0.8 introduces instance folders. Flask for a long time made it +possible to refer to paths relative to the application's folder directly +(via :attr:`Flask.root_path`). This was also how many developers loaded +configurations stored next to the application. Unfortunately however this +only works well if applications are not packages in which case the root +path refers to the contents of the package. + +With Flask 0.8 a new attribute was introduced: +:attr:`Flask.instance_path`. It refers to a new concept called the +“instance folder”. The instance folder is designed to not be under +version control and be deployment specific. It's the perfect place to +drop things that either change at runtime or configuration files. + +You can either explicitly provide the path of the instance folder when +creating the Flask application or you can let Flask autodetect the +instance folder. For explicit configuration use the `instance_path` +parameter:: + + app = Flask(__name__, instance_path='/path/to/instance/folder') + +Please keep in mind that this path *must* be absolute when provided. + +If the `instance_path` parameter is not provided the following default +locations are used: + +- Uninstalled module:: + + /myapp.py + /instance + +- Uninstalled package:: + + /myapp + /__init__.py + /instance + +- Installed module or package:: + + $PREFIX/lib/pythonX.Y/site-packages/myapp + $PREFIX/var/myapp-instance + + ``$PREFIX`` is the prefix of your Python installation. This can be + ``/usr`` or the path to your virtualenv. You can print the value of + ``sys.prefix`` to see what the prefix is set to. + +Since the config object provided loading of configuration files from +relative filenames we made it possible to change the loading via filenames +to be relative to the instance path if wanted. The behavior of relative +paths in config files can be flipped between “relative to the application +root” (the default) to “relative to instance folder” via the +`instance_relative_config` switch to the application constructor:: + + app = Flask(__name__, instance_relative_config=True) + +Here is a full example of how to configure Flask to preload the config +from a module and then override the config from a file in the instance +folder if it exists:: + + app = Flask(__name__, instance_relative_config=True) + app.config.from_object('yourapplication.default_settings') + app.config.from_pyfile('application.cfg', silent=True) + +The path to the instance folder can be found via the +:attr:`Flask.instance_path`. Flask also provides a shortcut to open a +file from the instance folder with :meth:`Flask.open_instance_resource`. + +Example usage for both:: + + filename = os.path.join(app.instance_path, 'application.cfg') + with open(filename) as f: + config = f.read() + + # or via open_instance_resource: + with app.open_instance_resource('application.cfg') as f: + config = f.read() diff --git a/_build/_sources/contributing.rst.txt b/_build/_sources/contributing.rst.txt new file mode 100644 index 00000000..d44f865f --- /dev/null +++ b/_build/_sources/contributing.rst.txt @@ -0,0 +1,8 @@ +Contributing +============ + +See the Pallets `detailed contributing documentation <_contrib>`_ for many ways +to contribute, including reporting issues, requesting features, asking or +answering questions, and making PRs. + +.. _contrib: https://palletsprojects.com/contributing/ diff --git a/_build/_sources/debugging.rst.txt b/_build/_sources/debugging.rst.txt new file mode 100644 index 00000000..f6b56cab --- /dev/null +++ b/_build/_sources/debugging.rst.txt @@ -0,0 +1,99 @@ +Debugging Application Errors +============================ + + +In Production +------------- + +**Do not run the development server, or enable the built-in debugger, in +a production environment.** The debugger allows executing arbitrary +Python code from the browser. It's protected by a pin, but that should +not be relied on for security. + +Use an error logging tool, such as Sentry, as described in +:ref:`error-logging-tools`, or enable logging and notifications as +described in :doc:`/logging`. + +If you have access to the server, you could add some code to start an +external debugger if ``request.remote_addr`` matches your IP. Some IDE +debuggers also have a remote mode so breakpoints on the server can be +interacted with locally. Only enable a debugger temporarily. + + +The Built-In Debugger +--------------------- + +The built-in Werkzeug development server provides a debugger which shows +an interactive traceback in the browser when an unhandled error occurs +during a request. This debugger should only be used during development. + +.. image:: _static/debugger.png + :align: center + :class: screenshot + :alt: screenshot of debugger in action + +.. warning:: + + The debugger allows executing arbitrary Python code from the + browser. It is protected by a pin, but still represents a major + security risk. Do not run the development server or debugger in a + production environment. + +The debugger is enabled by default when the development server is run in debug mode. + +.. code-block:: text + + $ flask --app hello run --debug + +When running from Python code, passing ``debug=True`` enables debug mode, which is +mostly equivalent. + +.. code-block:: python + + app.run(debug=True) + +:doc:`/server` and :doc:`/cli` have more information about running the debugger and +debug mode. More information about the debugger can be found in the `Werkzeug +documentation `__. + + +External Debuggers +------------------ + +External debuggers, such as those provided by IDEs, can offer a more +powerful debugging experience than the built-in debugger. They can also +be used to step through code during a request before an error is raised, +or if no error is raised. Some even have a remote mode so you can debug +code running on another machine. + +When using an external debugger, the app should still be in debug mode, otherwise Flask +turns unhandled errors into generic 500 error pages. However, the built-in debugger and +reloader should be disabled so they don't interfere with the external debugger. + +.. code-block:: text + + $ flask --app hello run --debug --no-debugger --no-reload + +When running from Python: + +.. code-block:: python + + app.run(debug=True, use_debugger=False, use_reloader=False) + +Disabling these isn't required, an external debugger will continue to work with the +following caveats. + +- If the built-in debugger is not disabled, it will catch unhandled exceptions before + the external debugger can. +- If the reloader is not disabled, it could cause an unexpected reload if code changes + during a breakpoint. +- The development server will still catch unhandled exceptions if the built-in + debugger is disabled, otherwise it would crash on any error. If you want that (and + usually you don't) pass ``passthrough_errors=True`` to ``app.run``. + + .. code-block:: python + + app.run( + debug=True, passthrough_errors=True, + use_debugger=False, use_reloader=False + ) diff --git a/_build/_sources/deploying/apache-httpd.rst.txt b/_build/_sources/deploying/apache-httpd.rst.txt new file mode 100644 index 00000000..bdeaf626 --- /dev/null +++ b/_build/_sources/deploying/apache-httpd.rst.txt @@ -0,0 +1,66 @@ +Apache httpd +============ + +`Apache httpd`_ is a fast, production level HTTP server. When serving +your application with one of the WSGI servers listed in :doc:`index`, it +is often good or necessary to put a dedicated HTTP server in front of +it. This "reverse proxy" can handle incoming requests, TLS, and other +security and performance concerns better than the WSGI server. + +httpd can be installed using your system package manager, or a pre-built +executable for Windows. Installing and running httpd itself is outside +the scope of this doc. This page outlines the basics of configuring +httpd to proxy your application. Be sure to read its documentation to +understand what features are available. + +.. _Apache httpd: https://httpd.apache.org/ + + +Domain Name +----------- + +Acquiring and configuring a domain name is outside the scope of this +doc. In general, you will buy a domain name from a registrar, pay for +server space with a hosting provider, and then point your registrar +at the hosting provider's name servers. + +To simulate this, you can also edit your ``hosts`` file, located at +``/etc/hosts`` on Linux. Add a line that associates a name with the +local IP. + +Modern Linux systems may be configured to treat any domain name that +ends with ``.localhost`` like this without adding it to the ``hosts`` +file. + +.. code-block:: python + :caption: ``/etc/hosts`` + + 127.0.0.1 hello.localhost + + +Configuration +------------- + +The httpd configuration is located at ``/etc/httpd/conf/httpd.conf`` on +Linux. It may be different depending on your operating system. Check the +docs and look for ``httpd.conf``. + +Remove or comment out any existing ``DocumentRoot`` directive. Add the +config lines below. We'll assume the WSGI server is listening locally at +``http://127.0.0.1:8000``. + +.. code-block:: apache + :caption: ``/etc/httpd/conf/httpd.conf`` + + LoadModule proxy_module modules/mod_proxy.so + LoadModule proxy_http_module modules/mod_proxy_http.so + ProxyPass / http://127.0.0.1:8000/ + RequestHeader set X-Forwarded-Proto http + RequestHeader set X-Forwarded-Prefix / + +The ``LoadModule`` lines might already exist. If so, make sure they are +uncommented instead of adding them manually. + +Then :doc:`proxy_fix` so that your application uses the ``X-Forwarded`` +headers. ``X-Forwarded-For`` and ``X-Forwarded-Host`` are automatically +set by ``ProxyPass``. diff --git a/_build/_sources/deploying/asgi.rst.txt b/_build/_sources/deploying/asgi.rst.txt new file mode 100644 index 00000000..1dc0aa24 --- /dev/null +++ b/_build/_sources/deploying/asgi.rst.txt @@ -0,0 +1,27 @@ +ASGI +==== + +If you'd like to use an ASGI server you will need to utilise WSGI to +ASGI middleware. The asgiref +`WsgiToAsgi `_ +adapter is recommended as it integrates with the event loop used for +Flask's :ref:`async_await` support. You can use the adapter by +wrapping the Flask app, + +.. code-block:: python + + from asgiref.wsgi import WsgiToAsgi + from flask import Flask + + app = Flask(__name__) + + ... + + asgi_app = WsgiToAsgi(app) + +and then serving the ``asgi_app`` with the ASGI server, e.g. using +`Hypercorn `_, + +.. sourcecode:: text + + $ hypercorn module:asgi_app diff --git a/_build/_sources/deploying/eventlet.rst.txt b/_build/_sources/deploying/eventlet.rst.txt new file mode 100644 index 00000000..8a718b22 --- /dev/null +++ b/_build/_sources/deploying/eventlet.rst.txt @@ -0,0 +1,80 @@ +eventlet +======== + +Prefer using :doc:`gunicorn` with eventlet workers rather than using +`eventlet`_ directly. Gunicorn provides a much more configurable and +production-tested server. + +`eventlet`_ allows writing asynchronous, coroutine-based code that looks +like standard synchronous Python. It uses `greenlet`_ to enable task +switching without writing ``async/await`` or using ``asyncio``. + +:doc:`gevent` is another library that does the same thing. Certain +dependencies you have, or other considerations, may affect which of the +two you choose to use. + +eventlet provides a WSGI server that can handle many connections at once +instead of one per worker process. You must actually use eventlet in +your own code to see any benefit to using the server. + +.. _eventlet: https://eventlet.net/ +.. _greenlet: https://greenlet.readthedocs.io/en/latest/ + + +Installing +---------- + +When using eventlet, greenlet>=1.0 is required, otherwise context locals +such as ``request`` will not work as expected. When using PyPy, +PyPy>=7.3.7 is required. + +Create a virtualenv, install your application, then install +``eventlet``. + +.. code-block:: text + + $ cd hello-app + $ python -m venv .venv + $ . .venv/bin/activate + $ pip install . # install your application + $ pip install eventlet + + +Running +------- + +To use eventlet to serve your application, write a script that imports +its ``wsgi.server``, as well as your app or app factory. + +.. code-block:: python + :caption: ``wsgi.py`` + + import eventlet + from eventlet import wsgi + from hello import create_app + + app = create_app() + wsgi.server(eventlet.listen(("127.0.0.1", 8000)), app) + +.. code-block:: text + + $ python wsgi.py + (x) wsgi starting up on http://127.0.0.1:8000 + + +Binding Externally +------------------ + +eventlet should not be run as root because it would cause your +application code to run as root, which is not secure. However, this +means it will not be possible to bind to port 80 or 443. Instead, a +reverse proxy such as :doc:`nginx` or :doc:`apache-httpd` should be used +in front of eventlet. + +You can bind to all external IPs on a non-privileged port by using +``0.0.0.0`` in the server arguments shown in the previous section. +Don't do this when using a reverse proxy setup, otherwise it will be +possible to bypass the proxy. + +``0.0.0.0`` is not a valid address to navigate to, you'd use a specific +IP address in your browser. diff --git a/_build/_sources/deploying/gevent.rst.txt b/_build/_sources/deploying/gevent.rst.txt new file mode 100644 index 00000000..448b93e7 --- /dev/null +++ b/_build/_sources/deploying/gevent.rst.txt @@ -0,0 +1,80 @@ +gevent +====== + +Prefer using :doc:`gunicorn` or :doc:`uwsgi` with gevent workers rather +than using `gevent`_ directly. Gunicorn and uWSGI provide much more +configurable and production-tested servers. + +`gevent`_ allows writing asynchronous, coroutine-based code that looks +like standard synchronous Python. It uses `greenlet`_ to enable task +switching without writing ``async/await`` or using ``asyncio``. + +:doc:`eventlet` is another library that does the same thing. Certain +dependencies you have, or other considerations, may affect which of the +two you choose to use. + +gevent provides a WSGI server that can handle many connections at once +instead of one per worker process. You must actually use gevent in your +own code to see any benefit to using the server. + +.. _gevent: https://www.gevent.org/ +.. _greenlet: https://greenlet.readthedocs.io/en/latest/ + + +Installing +---------- + +When using gevent, greenlet>=1.0 is required, otherwise context locals +such as ``request`` will not work as expected. When using PyPy, +PyPy>=7.3.7 is required. + +Create a virtualenv, install your application, then install ``gevent``. + +.. code-block:: text + + $ cd hello-app + $ python -m venv .venv + $ . .venv/bin/activate + $ pip install . # install your application + $ pip install gevent + + +Running +------- + +To use gevent to serve your application, write a script that imports its +``WSGIServer``, as well as your app or app factory. + +.. code-block:: python + :caption: ``wsgi.py`` + + from gevent.pywsgi import WSGIServer + from hello import create_app + + app = create_app() + http_server = WSGIServer(("127.0.0.1", 8000), app) + http_server.serve_forever() + +.. code-block:: text + + $ python wsgi.py + +No output is shown when the server starts. + + +Binding Externally +------------------ + +gevent should not be run as root because it would cause your +application code to run as root, which is not secure. However, this +means it will not be possible to bind to port 80 or 443. Instead, a +reverse proxy such as :doc:`nginx` or :doc:`apache-httpd` should be used +in front of gevent. + +You can bind to all external IPs on a non-privileged port by using +``0.0.0.0`` in the server arguments shown in the previous section. Don't +do this when using a reverse proxy setup, otherwise it will be possible +to bypass the proxy. + +``0.0.0.0`` is not a valid address to navigate to, you'd use a specific +IP address in your browser. diff --git a/_build/_sources/deploying/gunicorn.rst.txt b/_build/_sources/deploying/gunicorn.rst.txt new file mode 100644 index 00000000..c50edc23 --- /dev/null +++ b/_build/_sources/deploying/gunicorn.rst.txt @@ -0,0 +1,130 @@ +Gunicorn +======== + +`Gunicorn`_ is a pure Python WSGI server with simple configuration and +multiple worker implementations for performance tuning. + +* It tends to integrate easily with hosting platforms. +* It does not support Windows (but does run on WSL). +* It is easy to install as it does not require additional dependencies + or compilation. +* It has built-in async worker support using gevent or eventlet. + +This page outlines the basics of running Gunicorn. Be sure to read its +`documentation`_ and use ``gunicorn --help`` to understand what features +are available. + +.. _Gunicorn: https://gunicorn.org/ +.. _documentation: https://docs.gunicorn.org/ + + +Installing +---------- + +Gunicorn is easy to install, as it does not require external +dependencies or compilation. It runs on Windows only under WSL. + +Create a virtualenv, install your application, then install +``gunicorn``. + +.. code-block:: text + + $ cd hello-app + $ python -m venv .venv + $ . .venv/bin/activate + $ pip install . # install your application + $ pip install gunicorn + + +Running +------- + +The only required argument to Gunicorn tells it how to load your Flask +application. The syntax is ``{module_import}:{app_variable}``. +``module_import`` is the dotted import name to the module with your +application. ``app_variable`` is the variable with the application. It +can also be a function call (with any arguments) if you're using the +app factory pattern. + +.. code-block:: text + + # equivalent to 'from hello import app' + $ gunicorn -w 4 'hello:app' + + # equivalent to 'from hello import create_app; create_app()' + $ gunicorn -w 4 'hello:create_app()' + + Starting gunicorn 20.1.0 + Listening at: http://127.0.0.1:8000 (x) + Using worker: sync + Booting worker with pid: x + Booting worker with pid: x + Booting worker with pid: x + Booting worker with pid: x + +The ``-w`` option specifies the number of processes to run; a starting +value could be ``CPU * 2``. The default is only 1 worker, which is +probably not what you want for the default worker type. + +Logs for each request aren't shown by default, only worker info and +errors are shown. To show access logs on stdout, use the +``--access-logfile=-`` option. + + +Binding Externally +------------------ + +Gunicorn should not be run as root because it would cause your +application code to run as root, which is not secure. However, this +means it will not be possible to bind to port 80 or 443. Instead, a +reverse proxy such as :doc:`nginx` or :doc:`apache-httpd` should be used +in front of Gunicorn. + +You can bind to all external IPs on a non-privileged port using the +``-b 0.0.0.0`` option. Don't do this when using a reverse proxy setup, +otherwise it will be possible to bypass the proxy. + +.. code-block:: text + + $ gunicorn -w 4 -b 0.0.0.0 'hello:create_app()' + Listening at: http://0.0.0.0:8000 (x) + +``0.0.0.0`` is not a valid address to navigate to, you'd use a specific +IP address in your browser. + + +Async with gevent or eventlet +----------------------------- + +The default sync worker is appropriate for many use cases. If you need +asynchronous support, Gunicorn provides workers using either `gevent`_ +or `eventlet`_. This is not the same as Python's ``async/await``, or the +ASGI server spec. You must actually use gevent/eventlet in your own code +to see any benefit to using the workers. + +When using either gevent or eventlet, greenlet>=1.0 is required, +otherwise context locals such as ``request`` will not work as expected. +When using PyPy, PyPy>=7.3.7 is required. + +To use gevent: + +.. code-block:: text + + $ gunicorn -k gevent 'hello:create_app()' + Starting gunicorn 20.1.0 + Listening at: http://127.0.0.1:8000 (x) + Using worker: gevent + Booting worker with pid: x + +To use eventlet: + +.. code-block:: text + + $ gunicorn -k eventlet 'hello:create_app()' + Starting gunicorn 20.1.0 + Listening at: http://127.0.0.1:8000 (x) + Using worker: eventlet + Booting worker with pid: x + +.. _gevent: https://www.gevent.org/ +.. _eventlet: https://eventlet.net/ diff --git a/_build/_sources/deploying/index.rst.txt b/_build/_sources/deploying/index.rst.txt new file mode 100644 index 00000000..4135596a --- /dev/null +++ b/_build/_sources/deploying/index.rst.txt @@ -0,0 +1,79 @@ +Deploying to Production +======================= + +After developing your application, you'll want to make it available +publicly to other users. When you're developing locally, you're probably +using the built-in development server, debugger, and reloader. These +should not be used in production. Instead, you should use a dedicated +WSGI server or hosting platform, some of which will be described here. + +"Production" means "not development", which applies whether you're +serving your application publicly to millions of users or privately / +locally to a single user. **Do not use the development server when +deploying to production. It is intended for use only during local +development. It is not designed to be particularly secure, stable, or +efficient.** + +Self-Hosted Options +------------------- + +Flask is a WSGI *application*. A WSGI *server* is used to run the +application, converting incoming HTTP requests to the standard WSGI +environ, and converting outgoing WSGI responses to HTTP responses. + +The primary goal of these docs is to familiarize you with the concepts +involved in running a WSGI application using a production WSGI server +and HTTP server. There are many WSGI servers and HTTP servers, with many +configuration possibilities. The pages below discuss the most common +servers, and show the basics of running each one. The next section +discusses platforms that can manage this for you. + +.. toctree:: + :maxdepth: 1 + + gunicorn + waitress + mod_wsgi + uwsgi + gevent + eventlet + asgi + +WSGI servers have HTTP servers built-in. However, a dedicated HTTP +server may be safer, more efficient, or more capable. Putting an HTTP +server in front of the WSGI server is called a "reverse proxy." + +.. toctree:: + :maxdepth: 1 + + proxy_fix + nginx + apache-httpd + +This list is not exhaustive, and you should evaluate these and other +servers based on your application's needs. Different servers will have +different capabilities, configuration, and support. + + +Hosting Platforms +----------------- + +There are many services available for hosting web applications without +needing to maintain your own server, networking, domain, etc. Some +services may have a free tier up to a certain time or bandwidth. Many of +these services use one of the WSGI servers described above, or a similar +interface. The links below are for some of the most common platforms, +which have instructions for Flask, WSGI, or Python. + +- `PythonAnywhere `_ +- `Google App Engine `_ +- `Google Cloud Run `_ +- `AWS Elastic Beanstalk `_ +- `Microsoft Azure `_ + +This list is not exhaustive, and you should evaluate these and other +services based on your application's needs. Different services will have +different capabilities, configuration, pricing, and support. + +You'll probably need to :doc:`proxy_fix` when using most hosting +platforms. diff --git a/_build/_sources/deploying/mod_wsgi.rst.txt b/_build/_sources/deploying/mod_wsgi.rst.txt new file mode 100644 index 00000000..23e82279 --- /dev/null +++ b/_build/_sources/deploying/mod_wsgi.rst.txt @@ -0,0 +1,94 @@ +mod_wsgi +======== + +`mod_wsgi`_ is a WSGI server integrated with the `Apache httpd`_ server. +The modern `mod_wsgi-express`_ command makes it easy to configure and +start the server without needing to write Apache httpd configuration. + +* Tightly integrated with Apache httpd. +* Supports Windows directly. +* Requires a compiler and the Apache development headers to install. +* Does not require a reverse proxy setup. + +This page outlines the basics of running mod_wsgi-express, not the more +complex installation and configuration with httpd. Be sure to read the +`mod_wsgi-express`_, `mod_wsgi`_, and `Apache httpd`_ documentation to +understand what features are available. + +.. _mod_wsgi-express: https://pypi.org/project/mod-wsgi/ +.. _mod_wsgi: https://modwsgi.readthedocs.io/ +.. _Apache httpd: https://httpd.apache.org/ + + +Installing +---------- + +Installing mod_wsgi requires a compiler and the Apache server and +development headers installed. You will get an error if they are not. +How to install them depends on the OS and package manager that you use. + +Create a virtualenv, install your application, then install +``mod_wsgi``. + +.. code-block:: text + + $ cd hello-app + $ python -m venv .venv + $ . .venv/bin/activate + $ pip install . # install your application + $ pip install mod_wsgi + + +Running +------- + +The only argument to ``mod_wsgi-express`` specifies a script containing +your Flask application, which must be called ``application``. You can +write a small script to import your app with this name, or to create it +if using the app factory pattern. + +.. code-block:: python + :caption: ``wsgi.py`` + + from hello import app + + application = app + +.. code-block:: python + :caption: ``wsgi.py`` + + from hello import create_app + + application = create_app() + +Now run the ``mod_wsgi-express start-server`` command. + +.. code-block:: text + + $ mod_wsgi-express start-server wsgi.py --processes 4 + +The ``--processes`` option specifies the number of worker processes to +run; a starting value could be ``CPU * 2``. + +Logs for each request aren't show in the terminal. If an error occurs, +its information is written to the error log file shown when starting the +server. + + +Binding Externally +------------------ + +Unlike the other WSGI servers in these docs, mod_wsgi can be run as +root to bind to privileged ports like 80 and 443. However, it must be +configured to drop permissions to a different user and group for the +worker processes. + +For example, if you created a ``hello`` user and group, you should +install your virtualenv and application as that user, then tell +mod_wsgi to drop to that user after starting. + +.. code-block:: text + + $ sudo /home/hello/.venv/bin/mod_wsgi-express start-server \ + /home/hello/wsgi.py \ + --user hello --group hello --port 80 --processes 4 diff --git a/_build/_sources/deploying/nginx.rst.txt b/_build/_sources/deploying/nginx.rst.txt new file mode 100644 index 00000000..6b25c073 --- /dev/null +++ b/_build/_sources/deploying/nginx.rst.txt @@ -0,0 +1,69 @@ +nginx +===== + +`nginx`_ is a fast, production level HTTP server. When serving your +application with one of the WSGI servers listed in :doc:`index`, it is +often good or necessary to put a dedicated HTTP server in front of it. +This "reverse proxy" can handle incoming requests, TLS, and other +security and performance concerns better than the WSGI server. + +Nginx can be installed using your system package manager, or a pre-built +executable for Windows. Installing and running Nginx itself is outside +the scope of this doc. This page outlines the basics of configuring +Nginx to proxy your application. Be sure to read its documentation to +understand what features are available. + +.. _nginx: https://nginx.org/ + + +Domain Name +----------- + +Acquiring and configuring a domain name is outside the scope of this +doc. In general, you will buy a domain name from a registrar, pay for +server space with a hosting provider, and then point your registrar +at the hosting provider's name servers. + +To simulate this, you can also edit your ``hosts`` file, located at +``/etc/hosts`` on Linux. Add a line that associates a name with the +local IP. + +Modern Linux systems may be configured to treat any domain name that +ends with ``.localhost`` like this without adding it to the ``hosts`` +file. + +.. code-block:: python + :caption: ``/etc/hosts`` + + 127.0.0.1 hello.localhost + + +Configuration +------------- + +The nginx configuration is located at ``/etc/nginx/nginx.conf`` on +Linux. It may be different depending on your operating system. Check the +docs and look for ``nginx.conf``. + +Remove or comment out any existing ``server`` section. Add a ``server`` +section and use the ``proxy_pass`` directive to point to the address the +WSGI server is listening on. We'll assume the WSGI server is listening +locally at ``http://127.0.0.1:8000``. + +.. code-block:: nginx + :caption: ``/etc/nginx.conf`` + + server { + listen 80; + server_name _; + + location / { + proxy_pass http://127.0.0.1:8000/; + proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; + proxy_set_header X-Forwarded-Proto $scheme; + proxy_set_header X-Forwarded-Host $host; + proxy_set_header X-Forwarded-Prefix /; + } + } + +Then :doc:`proxy_fix` so that your application uses these headers. diff --git a/_build/_sources/deploying/proxy_fix.rst.txt b/_build/_sources/deploying/proxy_fix.rst.txt new file mode 100644 index 00000000..e2c42e82 --- /dev/null +++ b/_build/_sources/deploying/proxy_fix.rst.txt @@ -0,0 +1,33 @@ +Tell Flask it is Behind a Proxy +=============================== + +When using a reverse proxy, or many Python hosting platforms, the proxy +will intercept and forward all external requests to the local WSGI +server. + +From the WSGI server and Flask application's perspectives, requests are +now coming from the HTTP server to the local address, rather than from +the remote address to the external server address. + +HTTP servers should set ``X-Forwarded-`` headers to pass on the real +values to the application. The application can then be told to trust and +use those values by wrapping it with the +:doc:`werkzeug:middleware/proxy_fix` middleware provided by Werkzeug. + +This middleware should only be used if the application is actually +behind a proxy, and should be configured with the number of proxies that +are chained in front of it. Not all proxies set all the headers. Since +incoming headers can be faked, you must set how many proxies are setting +each header so the middleware knows what to trust. + +.. code-block:: python + + from werkzeug.middleware.proxy_fix import ProxyFix + + app.wsgi_app = ProxyFix( + app.wsgi_app, x_for=1, x_proto=1, x_host=1, x_prefix=1 + ) + +Remember, only apply this middleware if you are behind a proxy, and set +the correct number of proxies that set each header. It can be a security +issue if you get this configuration wrong. diff --git a/_build/_sources/deploying/uwsgi.rst.txt b/_build/_sources/deploying/uwsgi.rst.txt new file mode 100644 index 00000000..1f9d5eca --- /dev/null +++ b/_build/_sources/deploying/uwsgi.rst.txt @@ -0,0 +1,145 @@ +uWSGI +===== + +`uWSGI`_ is a fast, compiled server suite with extensive configuration +and capabilities beyond a basic server. + +* It can be very performant due to being a compiled program. +* It is complex to configure beyond the basic application, and has so + many options that it can be difficult for beginners to understand. +* It does not support Windows (but does run on WSL). +* It requires a compiler to install in some cases. + +This page outlines the basics of running uWSGI. Be sure to read its +documentation to understand what features are available. + +.. _uWSGI: https://uwsgi-docs.readthedocs.io/en/latest/ + + +Installing +---------- + +uWSGI has multiple ways to install it. The most straightforward is to +install the ``pyuwsgi`` package, which provides precompiled wheels for +common platforms. However, it does not provide SSL support, which can be +provided with a reverse proxy instead. + +Create a virtualenv, install your application, then install ``pyuwsgi``. + +.. code-block:: text + + $ cd hello-app + $ python -m venv .venv + $ . .venv/bin/activate + $ pip install . # install your application + $ pip install pyuwsgi + +If you have a compiler available, you can install the ``uwsgi`` package +instead. Or install the ``pyuwsgi`` package from sdist instead of wheel. +Either method will include SSL support. + +.. code-block:: text + + $ pip install uwsgi + + # or + $ pip install --no-binary pyuwsgi pyuwsgi + + +Running +------- + +The most basic way to run uWSGI is to tell it to start an HTTP server +and import your application. + +.. code-block:: text + + $ uwsgi --http 127.0.0.1:8000 --master -p 4 -w hello:app + + *** Starting uWSGI 2.0.20 (64bit) on [x] *** + *** Operational MODE: preforking *** + mounting hello:app on / + spawned uWSGI master process (pid: x) + spawned uWSGI worker 1 (pid: x, cores: 1) + spawned uWSGI worker 2 (pid: x, cores: 1) + spawned uWSGI worker 3 (pid: x, cores: 1) + spawned uWSGI worker 4 (pid: x, cores: 1) + spawned uWSGI http 1 (pid: x) + +If you're using the app factory pattern, you'll need to create a small +Python file to create the app, then point uWSGI at that. + +.. code-block:: python + :caption: ``wsgi.py`` + + from hello import create_app + + app = create_app() + +.. code-block:: text + + $ uwsgi --http 127.0.0.1:8000 --master -p 4 -w wsgi:app + +The ``--http`` option starts an HTTP server at 127.0.0.1 port 8000. The +``--master`` option specifies the standard worker manager. The ``-p`` +option starts 4 worker processes; a starting value could be ``CPU * 2``. +The ``-w`` option tells uWSGI how to import your application + + +Binding Externally +------------------ + +uWSGI should not be run as root with the configuration shown in this doc +because it would cause your application code to run as root, which is +not secure. However, this means it will not be possible to bind to port +80 or 443. Instead, a reverse proxy such as :doc:`nginx` or +:doc:`apache-httpd` should be used in front of uWSGI. It is possible to +run uWSGI as root securely, but that is beyond the scope of this doc. + +uWSGI has optimized integration with `Nginx uWSGI`_ and +`Apache mod_proxy_uwsgi`_, and possibly other servers, instead of using +a standard HTTP proxy. That configuration is beyond the scope of this +doc, see the links for more information. + +.. _Nginx uWSGI: https://uwsgi-docs.readthedocs.io/en/latest/Nginx.html +.. _Apache mod_proxy_uwsgi: https://uwsgi-docs.readthedocs.io/en/latest/Apache.html#mod-proxy-uwsgi + +You can bind to all external IPs on a non-privileged port using the +``--http 0.0.0.0:8000`` option. Don't do this when using a reverse proxy +setup, otherwise it will be possible to bypass the proxy. + +.. code-block:: text + + $ uwsgi --http 0.0.0.0:8000 --master -p 4 -w wsgi:app + +``0.0.0.0`` is not a valid address to navigate to, you'd use a specific +IP address in your browser. + + +Async with gevent +----------------- + +The default sync worker is appropriate for many use cases. If you need +asynchronous support, uWSGI provides a `gevent`_ worker. This is not the +same as Python's ``async/await``, or the ASGI server spec. You must +actually use gevent in your own code to see any benefit to using the +worker. + +When using gevent, greenlet>=1.0 is required, otherwise context locals +such as ``request`` will not work as expected. When using PyPy, +PyPy>=7.3.7 is required. + +.. code-block:: text + + $ uwsgi --http 127.0.0.1:8000 --master --gevent 100 -w wsgi:app + + *** Starting uWSGI 2.0.20 (64bit) on [x] *** + *** Operational MODE: async *** + mounting hello:app on / + spawned uWSGI master process (pid: x) + spawned uWSGI worker 1 (pid: x, cores: 100) + spawned uWSGI http 1 (pid: x) + *** running gevent loop engine [addr:x] *** + + +.. _gevent: https://www.gevent.org/ diff --git a/_build/_sources/deploying/waitress.rst.txt b/_build/_sources/deploying/waitress.rst.txt new file mode 100644 index 00000000..7bdd695b --- /dev/null +++ b/_build/_sources/deploying/waitress.rst.txt @@ -0,0 +1,75 @@ +Waitress +======== + +`Waitress`_ is a pure Python WSGI server. + +* It is easy to configure. +* It supports Windows directly. +* It is easy to install as it does not require additional dependencies + or compilation. +* It does not support streaming requests, full request data is always + buffered. +* It uses a single process with multiple thread workers. + +This page outlines the basics of running Waitress. Be sure to read its +documentation and ``waitress-serve --help`` to understand what features +are available. + +.. _Waitress: https://docs.pylonsproject.org/projects/waitress/ + + +Installing +---------- + +Create a virtualenv, install your application, then install +``waitress``. + +.. code-block:: text + + $ cd hello-app + $ python -m venv .venv + $ . .venv/bin/activate + $ pip install . # install your application + $ pip install waitress + + +Running +------- + +The only required argument to ``waitress-serve`` tells it how to load +your Flask application. The syntax is ``{module}:{app}``. ``module`` is +the dotted import name to the module with your application. ``app`` is +the variable with the application. If you're using the app factory +pattern, use ``--call {module}:{factory}`` instead. + +.. code-block:: text + + # equivalent to 'from hello import app' + $ waitress-serve --host 127.0.0.1 hello:app + + # equivalent to 'from hello import create_app; create_app()' + $ waitress-serve --host 127.0.0.1 --call hello:create_app + + Serving on http://127.0.0.1:8080 + +The ``--host`` option binds the server to local ``127.0.0.1`` only. + +Logs for each request aren't shown, only errors are shown. Logging can +be configured through the Python interface instead of the command line. + + +Binding Externally +------------------ + +Waitress should not be run as root because it would cause your +application code to run as root, which is not secure. However, this +means it will not be possible to bind to port 80 or 443. Instead, a +reverse proxy such as :doc:`nginx` or :doc:`apache-httpd` should be used +in front of Waitress. + +You can bind to all external IPs on a non-privileged port by not +specifying the ``--host`` option. Don't do this when using a reverse +proxy setup, otherwise it will be possible to bypass the proxy. + +``0.0.0.0`` is not a valid address to navigate to, you'd use a specific +IP address in your browser. diff --git a/_build/_sources/design.rst.txt b/_build/_sources/design.rst.txt new file mode 100644 index 00000000..066cf107 --- /dev/null +++ b/_build/_sources/design.rst.txt @@ -0,0 +1,228 @@ +Design Decisions in Flask +========================= + +If you are curious why Flask does certain things the way it does and not +differently, this section is for you. This should give you an idea about +some of the design decisions that may appear arbitrary and surprising at +first, especially in direct comparison with other frameworks. + + +The Explicit Application Object +------------------------------- + +A Python web application based on WSGI has to have one central callable +object that implements the actual application. In Flask this is an +instance of the :class:`~flask.Flask` class. Each Flask application has +to create an instance of this class itself and pass it the name of the +module, but why can't Flask do that itself? + +Without such an explicit application object the following code:: + + from flask import Flask + app = Flask(__name__) + + @app.route('/') + def index(): + return 'Hello World!' + +Would look like this instead:: + + from hypothetical_flask import route + + @route('/') + def index(): + return 'Hello World!' + +There are three major reasons for this. The most important one is that +implicit application objects require that there may only be one instance at +the time. There are ways to fake multiple applications with a single +application object, like maintaining a stack of applications, but this +causes some problems I won't outline here in detail. Now the question is: +when does a microframework need more than one application at the same +time? A good example for this is unit testing. When you want to test +something it can be very helpful to create a minimal application to test +specific behavior. When the application object is deleted everything it +allocated will be freed again. + +Another thing that becomes possible when you have an explicit object lying +around in your code is that you can subclass the base class +(:class:`~flask.Flask`) to alter specific behavior. This would not be +possible without hacks if the object were created ahead of time for you +based on a class that is not exposed to you. + +But there is another very important reason why Flask depends on an +explicit instantiation of that class: the package name. Whenever you +create a Flask instance you usually pass it `__name__` as package name. +Flask depends on that information to properly load resources relative +to your module. With Python's outstanding support for reflection it can +then access the package to figure out where the templates and static files +are stored (see :meth:`~flask.Flask.open_resource`). Now obviously there +are frameworks around that do not need any configuration and will still be +able to load templates relative to your application module. But they have +to use the current working directory for that, which is a very unreliable +way to determine where the application is. The current working directory +is process-wide and if you are running multiple applications in one +process (which could happen in a webserver without you knowing) the paths +will be off. Worse: many webservers do not set the working directory to +the directory of your application but to the document root which does not +have to be the same folder. + +The third reason is "explicit is better than implicit". That object is +your WSGI application, you don't have to remember anything else. If you +want to apply a WSGI middleware, just wrap it and you're done (though +there are better ways to do that so that you do not lose the reference +to the application object :meth:`~flask.Flask.wsgi_app`). + +Furthermore this design makes it possible to use a factory function to +create the application which is very helpful for unit testing and similar +things (:doc:`/patterns/appfactories`). + +The Routing System +------------------ + +Flask uses the Werkzeug routing system which was designed to +automatically order routes by complexity. This means that you can declare +routes in arbitrary order and they will still work as expected. This is a +requirement if you want to properly implement decorator based routing +since decorators could be fired in undefined order when the application is +split into multiple modules. + +Another design decision with the Werkzeug routing system is that routes +in Werkzeug try to ensure that URLs are unique. Werkzeug will go quite far +with that in that it will automatically redirect to a canonical URL if a route +is ambiguous. + + +One Template Engine +------------------- + +Flask decides on one template engine: Jinja2. Why doesn't Flask have a +pluggable template engine interface? You can obviously use a different +template engine, but Flask will still configure Jinja2 for you. While +that limitation that Jinja2 is *always* configured will probably go away, +the decision to bundle one template engine and use that will not. + +Template engines are like programming languages and each of those engines +has a certain understanding about how things work. On the surface they +all work the same: you tell the engine to evaluate a template with a set +of variables and take the return value as string. + +But that's about where similarities end. Jinja2 for example has an +extensive filter system, a certain way to do template inheritance, +support for reusable blocks (macros) that can be used from inside +templates and also from Python code, supports iterative template +rendering, configurable syntax and more. On the other hand an engine +like Genshi is based on XML stream evaluation, template inheritance by +taking the availability of XPath into account and more. Mako on the +other hand treats templates similar to Python modules. + +When it comes to connecting a template engine with an application or +framework there is more than just rendering templates. For instance, +Flask uses Jinja2's extensive autoescaping support. Also it provides +ways to access macros from Jinja2 templates. + +A template abstraction layer that would not take the unique features of +the template engines away is a science on its own and a too large +undertaking for a microframework like Flask. + +Furthermore extensions can then easily depend on one template language +being present. You can easily use your own templating language, but an +extension could still depend on Jinja itself. + + +What does "micro" mean? +----------------------- + +“Micro” does not mean that your whole web application has to fit into a single +Python file (although it certainly can), nor does it mean that Flask is lacking +in functionality. The "micro" in microframework means Flask aims to keep the +core simple but extensible. Flask won't make many decisions for you, such as +what database to use. Those decisions that it does make, such as what +templating engine to use, are easy to change. Everything else is up to you, so +that Flask can be everything you need and nothing you don't. + +By default, Flask does not include a database abstraction layer, form +validation or anything else where different libraries already exist that can +handle that. Instead, Flask supports extensions to add such functionality to +your application as if it was implemented in Flask itself. Numerous extensions +provide database integration, form validation, upload handling, various open +authentication technologies, and more. Flask may be "micro", but it's ready for +production use on a variety of needs. + +Why does Flask call itself a microframework and yet it depends on two +libraries (namely Werkzeug and Jinja2). Why shouldn't it? If we look +over to the Ruby side of web development there we have a protocol very +similar to WSGI. Just that it's called Rack there, but besides that it +looks very much like a WSGI rendition for Ruby. But nearly all +applications in Ruby land do not work with Rack directly, but on top of a +library with the same name. This Rack library has two equivalents in +Python: WebOb (formerly Paste) and Werkzeug. Paste is still around but +from my understanding it's sort of deprecated in favour of WebOb. The +development of WebOb and Werkzeug started side by side with similar ideas +in mind: be a good implementation of WSGI for other applications to take +advantage. + +Flask is a framework that takes advantage of the work already done by +Werkzeug to properly interface WSGI (which can be a complex task at +times). Thanks to recent developments in the Python package +infrastructure, packages with dependencies are no longer an issue and +there are very few reasons against having libraries that depend on others. + + +Thread Locals +------------- + +Flask uses thread local objects (context local objects in fact, they +support greenlet contexts as well) for request, session and an extra +object you can put your own things on (:data:`~flask.g`). Why is that and +isn't that a bad idea? + +Yes it is usually not such a bright idea to use thread locals. They cause +troubles for servers that are not based on the concept of threads and make +large applications harder to maintain. However Flask is just not designed +for large applications or asynchronous servers. Flask wants to make it +quick and easy to write a traditional web application. + + +Async/await and ASGI support +---------------------------- + +Flask supports ``async`` coroutines for view functions by executing the +coroutine on a separate thread instead of using an event loop on the +main thread as an async-first (ASGI) framework would. This is necessary +for Flask to remain backwards compatible with extensions and code built +before ``async`` was introduced into Python. This compromise introduces +a performance cost compared with the ASGI frameworks, due to the +overhead of the threads. + +Due to how tied to WSGI Flask's code is, it's not clear if it's possible +to make the ``Flask`` class support ASGI and WSGI at the same time. Work +is currently being done in Werkzeug to work with ASGI, which may +eventually enable support in Flask as well. + +See :doc:`/async-await` for more discussion. + + +What Flask is, What Flask is Not +-------------------------------- + +Flask will never have a database layer. It will not have a form library +or anything else in that direction. Flask itself just bridges to Werkzeug +to implement a proper WSGI application and to Jinja2 to handle templating. +It also binds to a few common standard library packages such as logging. +Everything else is up for extensions. + +Why is this the case? Because people have different preferences and +requirements and Flask could not meet those if it would force any of this +into the core. The majority of web applications will need a template +engine in some sort. However not every application needs a SQL database. + +As your codebase grows, you are free to make the design decisions appropriate +for your project. Flask will continue to provide a very simple glue layer to +the best that Python has to offer. You can implement advanced patterns in +SQLAlchemy or another database tool, introduce non-relational data persistence +as appropriate, and take advantage of framework-agnostic tools built for WSGI, +the Python web interface. + +The idea of Flask is to build a good foundation for all applications. +Everything else is up to you or extensions. diff --git a/_build/_sources/errorhandling.rst.txt b/_build/_sources/errorhandling.rst.txt new file mode 100644 index 00000000..faca58c2 --- /dev/null +++ b/_build/_sources/errorhandling.rst.txt @@ -0,0 +1,523 @@ +Handling Application Errors +=========================== + +Applications fail, servers fail. Sooner or later you will see an exception +in production. Even if your code is 100% correct, you will still see +exceptions from time to time. Why? Because everything else involved will +fail. Here are some situations where perfectly fine code can lead to server +errors: + +- the client terminated the request early and the application was still + reading from the incoming data +- the database server was overloaded and could not handle the query +- a filesystem is full +- a harddrive crashed +- a backend server overloaded +- a programming error in a library you are using +- network connection of the server to another system failed + +And that's just a small sample of issues you could be facing. So how do we +deal with that sort of problem? By default if your application runs in +production mode, and an exception is raised Flask will display a very simple +page for you and log the exception to the :attr:`~flask.Flask.logger`. + +But there is more you can do, and we will cover some better setups to deal +with errors including custom exceptions and 3rd party tools. + + +.. _error-logging-tools: + +Error Logging Tools +------------------- + +Sending error mails, even if just for critical ones, can become +overwhelming if enough users are hitting the error and log files are +typically never looked at. This is why we recommend using `Sentry +`_ for dealing with application errors. It's +available as a source-available project `on GitHub +`_ and is also available as a `hosted version +`_ which you can try for free. Sentry +aggregates duplicate errors, captures the full stack trace and local +variables for debugging, and sends you mails based on new errors or +frequency thresholds. + +To use Sentry you need to install the ``sentry-sdk`` client with extra +``flask`` dependencies. + +.. code-block:: text + + $ pip install sentry-sdk[flask] + +And then add this to your Flask app: + +.. code-block:: python + + import sentry_sdk + from sentry_sdk.integrations.flask import FlaskIntegration + + sentry_sdk.init('YOUR_DSN_HERE', integrations=[FlaskIntegration()]) + +The ``YOUR_DSN_HERE`` value needs to be replaced with the DSN value you +get from your Sentry installation. + +After installation, failures leading to an Internal Server Error +are automatically reported to Sentry and from there you can +receive error notifications. + +See also: + +- Sentry also supports catching errors from a worker queue + (RQ, Celery, etc.) in a similar fashion. See the `Python SDK docs + `__ for more information. +- `Flask-specific documentation `__ + + +Error Handlers +-------------- + +When an error occurs in Flask, an appropriate `HTTP status code +`__ will be +returned. 400-499 indicate errors with the client's request data, or +about the data requested. 500-599 indicate errors with the server or +application itself. + +You might want to show custom error pages to the user when an error occurs. +This can be done by registering error handlers. + +An error handler is a function that returns a response when a type of error is +raised, similar to how a view is a function that returns a response when a +request URL is matched. It is passed the instance of the error being handled, +which is most likely a :exc:`~werkzeug.exceptions.HTTPException`. + +The status code of the response will not be set to the handler's code. Make +sure to provide the appropriate HTTP status code when returning a response from +a handler. + + +Registering +``````````` + +Register handlers by decorating a function with +:meth:`~flask.Flask.errorhandler`. Or use +:meth:`~flask.Flask.register_error_handler` to register the function later. +Remember to set the error code when returning the response. + +.. code-block:: python + + @app.errorhandler(werkzeug.exceptions.BadRequest) + def handle_bad_request(e): + return 'bad request!', 400 + + # or, without the decorator + app.register_error_handler(400, handle_bad_request) + +:exc:`werkzeug.exceptions.HTTPException` subclasses like +:exc:`~werkzeug.exceptions.BadRequest` and their HTTP codes are interchangeable +when registering handlers. (``BadRequest.code == 400``) + +Non-standard HTTP codes cannot be registered by code because they are not known +by Werkzeug. Instead, define a subclass of +:class:`~werkzeug.exceptions.HTTPException` with the appropriate code and +register and raise that exception class. + +.. code-block:: python + + class InsufficientStorage(werkzeug.exceptions.HTTPException): + code = 507 + description = 'Not enough storage space.' + + app.register_error_handler(InsufficientStorage, handle_507) + + raise InsufficientStorage() + +Handlers can be registered for any exception class, not just +:exc:`~werkzeug.exceptions.HTTPException` subclasses or HTTP status +codes. Handlers can be registered for a specific class, or for all subclasses +of a parent class. + + +Handling +```````` + +When building a Flask application you *will* run into exceptions. If some part +of your code breaks while handling a request (and you have no error handlers +registered), a "500 Internal Server Error" +(:exc:`~werkzeug.exceptions.InternalServerError`) will be returned by default. +Similarly, "404 Not Found" +(:exc:`~werkzeug.exceptions.NotFound`) error will occur if a request is sent to an unregistered route. +If a route receives an unallowed request method, a "405 Method Not Allowed" +(:exc:`~werkzeug.exceptions.MethodNotAllowed`) will be raised. These are all +subclasses of :class:`~werkzeug.exceptions.HTTPException` and are provided by +default in Flask. + +Flask gives you the ability to raise any HTTP exception registered by +Werkzeug. However, the default HTTP exceptions return simple exception +pages. You might want to show custom error pages to the user when an error occurs. +This can be done by registering error handlers. + +When Flask catches an exception while handling a request, it is first looked up by code. +If no handler is registered for the code, Flask looks up the error by its class hierarchy; the most specific handler is chosen. +If no handler is registered, :class:`~werkzeug.exceptions.HTTPException` subclasses show a +generic message about their code, while other exceptions are converted to a +generic "500 Internal Server Error". + +For example, if an instance of :exc:`ConnectionRefusedError` is raised, +and a handler is registered for :exc:`ConnectionError` and +:exc:`ConnectionRefusedError`, the more specific :exc:`ConnectionRefusedError` +handler is called with the exception instance to generate the response. + +Handlers registered on the blueprint take precedence over those registered +globally on the application, assuming a blueprint is handling the request that +raises the exception. However, the blueprint cannot handle 404 routing errors +because the 404 occurs at the routing level before the blueprint can be +determined. + + +Generic Exception Handlers +`````````````````````````` + +It is possible to register error handlers for very generic base classes +such as ``HTTPException`` or even ``Exception``. However, be aware that +these will catch more than you might expect. + +For example, an error handler for ``HTTPException`` might be useful for turning +the default HTML errors pages into JSON. However, this +handler will trigger for things you don't cause directly, such as 404 +and 405 errors during routing. Be sure to craft your handler carefully +so you don't lose information about the HTTP error. + +.. code-block:: python + + from flask import json + from werkzeug.exceptions import HTTPException + + @app.errorhandler(HTTPException) + def handle_exception(e): + """Return JSON instead of HTML for HTTP errors.""" + # start with the correct headers and status code from the error + response = e.get_response() + # replace the body with JSON + response.data = json.dumps({ + "code": e.code, + "name": e.name, + "description": e.description, + }) + response.content_type = "application/json" + return response + +An error handler for ``Exception`` might seem useful for changing how +all errors, even unhandled ones, are presented to the user. However, +this is similar to doing ``except Exception:`` in Python, it will +capture *all* otherwise unhandled errors, including all HTTP status +codes. + +In most cases it will be safer to register handlers for more +specific exceptions. Since ``HTTPException`` instances are valid WSGI +responses, you could also pass them through directly. + +.. code-block:: python + + from werkzeug.exceptions import HTTPException + + @app.errorhandler(Exception) + def handle_exception(e): + # pass through HTTP errors + if isinstance(e, HTTPException): + return e + + # now you're handling non-HTTP exceptions only + return render_template("500_generic.html", e=e), 500 + +Error handlers still respect the exception class hierarchy. If you +register handlers for both ``HTTPException`` and ``Exception``, the +``Exception`` handler will not handle ``HTTPException`` subclasses +because the ``HTTPException`` handler is more specific. + + +Unhandled Exceptions +```````````````````` + +When there is no error handler registered for an exception, a 500 +Internal Server Error will be returned instead. See +:meth:`flask.Flask.handle_exception` for information about this +behavior. + +If there is an error handler registered for ``InternalServerError``, +this will be invoked. As of Flask 1.1.0, this error handler will always +be passed an instance of ``InternalServerError``, not the original +unhandled error. + +The original error is available as ``e.original_exception``. + +An error handler for "500 Internal Server Error" will be passed uncaught +exceptions in addition to explicit 500 errors. In debug mode, a handler +for "500 Internal Server Error" will not be used. Instead, the +interactive debugger will be shown. + + +Custom Error Pages +------------------ + +Sometimes when building a Flask application, you might want to raise a +:exc:`~werkzeug.exceptions.HTTPException` to signal to the user that +something is wrong with the request. Fortunately, Flask comes with a handy +:func:`~flask.abort` function that aborts a request with a HTTP error from +werkzeug as desired. It will also provide a plain black and white error page +for you with a basic description, but nothing fancy. + +Depending on the error code it is less or more likely for the user to +actually see such an error. + +Consider the code below, we might have a user profile route, and if the user +fails to pass a username we can raise a "400 Bad Request". If the user passes a +username and we can't find it, we raise a "404 Not Found". + +.. code-block:: python + + from flask import abort, render_template, request + + # a username needs to be supplied in the query args + # a successful request would be like /profile?username=jack + @app.route("/profile") + def user_profile(): + username = request.arg.get("username") + # if a username isn't supplied in the request, return a 400 bad request + if username is None: + abort(400) + + user = get_user(username=username) + # if a user can't be found by their username, return 404 not found + if user is None: + abort(404) + + return render_template("profile.html", user=user) + +Here is another example implementation for a "404 Page Not Found" exception: + +.. code-block:: python + + from flask import render_template + + @app.errorhandler(404) + def page_not_found(e): + # note that we set the 404 status explicitly + return render_template('404.html'), 404 + +When using :doc:`/patterns/appfactories`: + +.. code-block:: python + + from flask import Flask, render_template + + def page_not_found(e): + return render_template('404.html'), 404 + + def create_app(config_filename): + app = Flask(__name__) + app.register_error_handler(404, page_not_found) + return app + +An example template might be this: + +.. code-block:: html+jinja + + {% extends "layout.html" %} + {% block title %}Page Not Found{% endblock %} + {% block body %} +

Page Not Found

+

What you were looking for is just not there. +

go somewhere nice + {% endblock %} + + +Further Examples +```````````````` + +The above examples wouldn't actually be an improvement on the default +exception pages. We can create a custom 500.html template like this: + +.. code-block:: html+jinja + + {% extends "layout.html" %} + {% block title %}Internal Server Error{% endblock %} + {% block body %} +

Internal Server Error

+

Oops... we seem to have made a mistake, sorry!

+

Go somewhere nice instead + {% endblock %} + +It can be implemented by rendering the template on "500 Internal Server Error": + +.. code-block:: python + + from flask import render_template + + @app.errorhandler(500) + def internal_server_error(e): + # note that we set the 500 status explicitly + return render_template('500.html'), 500 + +When using :doc:`/patterns/appfactories`: + +.. code-block:: python + + from flask import Flask, render_template + + def internal_server_error(e): + return render_template('500.html'), 500 + + def create_app(): + app = Flask(__name__) + app.register_error_handler(500, internal_server_error) + return app + +When using :doc:`/blueprints`: + +.. code-block:: python + + from flask import Blueprint + + blog = Blueprint('blog', __name__) + + # as a decorator + @blog.errorhandler(500) + def internal_server_error(e): + return render_template('500.html'), 500 + + # or with register_error_handler + blog.register_error_handler(500, internal_server_error) + + +Blueprint Error Handlers +------------------------ + +In :doc:`/blueprints`, most error handlers will work as expected. +However, there is a caveat concerning handlers for 404 and 405 +exceptions. These error handlers are only invoked from an appropriate +``raise`` statement or a call to ``abort`` in another of the blueprint's +view functions; they are not invoked by, e.g., an invalid URL access. + +This is because the blueprint does not "own" a certain URL space, so +the application instance has no way of knowing which blueprint error +handler it should run if given an invalid URL. If you would like to +execute different handling strategies for these errors based on URL +prefixes, they may be defined at the application level using the +``request`` proxy object. + +.. code-block:: python + + from flask import jsonify, render_template + + # at the application level + # not the blueprint level + @app.errorhandler(404) + def page_not_found(e): + # if a request is in our blog URL space + if request.path.startswith('/blog/'): + # we return a custom blog 404 page + return render_template("blog/404.html"), 404 + else: + # otherwise we return our generic site-wide 404 page + return render_template("404.html"), 404 + + @app.errorhandler(405) + def method_not_allowed(e): + # if a request has the wrong method to our API + if request.path.startswith('/api/'): + # we return a json saying so + return jsonify(message="Method Not Allowed"), 405 + else: + # otherwise we return a generic site-wide 405 page + return render_template("405.html"), 405 + + +Returning API Errors as JSON +---------------------------- + +When building APIs in Flask, some developers realise that the built-in +exceptions are not expressive enough for APIs and that the content type of +:mimetype:`text/html` they are emitting is not very useful for API consumers. + +Using the same techniques as above and :func:`~flask.json.jsonify` we can return JSON +responses to API errors. :func:`~flask.abort` is called +with a ``description`` parameter. The error handler will +use that as the JSON error message, and set the status code to 404. + +.. code-block:: python + + from flask import abort, jsonify + + @app.errorhandler(404) + def resource_not_found(e): + return jsonify(error=str(e)), 404 + + @app.route("/cheese") + def get_one_cheese(): + resource = get_resource() + + if resource is None: + abort(404, description="Resource not found") + + return jsonify(resource) + +We can also create custom exception classes. For instance, we can +introduce a new custom exception for an API that can take a proper human readable message, +a status code for the error and some optional payload to give more context +for the error. + +This is a simple example: + +.. code-block:: python + + from flask import jsonify, request + + class InvalidAPIUsage(Exception): + status_code = 400 + + def __init__(self, message, status_code=None, payload=None): + super().__init__() + self.message = message + if status_code is not None: + self.status_code = status_code + self.payload = payload + + def to_dict(self): + rv = dict(self.payload or ()) + rv['message'] = self.message + return rv + + @app.errorhandler(InvalidAPIUsage) + def invalid_api_usage(e): + return jsonify(e.to_dict()), e.status_code + + # an API app route for getting user information + # a correct request might be /api/user?user_id=420 + @app.route("/api/user") + def user_api(user_id): + user_id = request.arg.get("user_id") + if not user_id: + raise InvalidAPIUsage("No user id provided!") + + user = get_user(user_id=user_id) + if not user: + raise InvalidAPIUsage("No such user!", status_code=404) + + return jsonify(user.to_dict()) + +A view can now raise that exception with an error message. Additionally +some extra payload can be provided as a dictionary through the `payload` +parameter. + + +Logging +------- + +See :doc:`/logging` for information about how to log exceptions, such as +by emailing them to admins. + + +Debugging +--------- + +See :doc:`/debugging` for information about how to debug errors in +development and production. diff --git a/_build/_sources/extensiondev.rst.txt b/_build/_sources/extensiondev.rst.txt new file mode 100644 index 00000000..0c74ad92 --- /dev/null +++ b/_build/_sources/extensiondev.rst.txt @@ -0,0 +1,304 @@ +Flask Extension Development +=========================== + +.. currentmodule:: flask + +Extensions are extra packages that add functionality to a Flask +application. While `PyPI`_ contains many Flask extensions, you may not +find one that fits your need. If this is the case, you can create your +own, and publish it for others to use as well. + +This guide will show how to create a Flask extension, and some of the +common patterns and requirements involved. Since extensions can do +anything, this guide won't be able to cover every possibility. + +The best ways to learn about extensions are to look at how other +extensions you use are written, and discuss with others. Discuss your +design ideas with others on our `Discord Chat`_ or +`GitHub Discussions`_. + +The best extensions share common patterns, so that anyone familiar with +using one extension won't feel completely lost with another. This can +only work if collaboration happens early. + + +Naming +------ + +A Flask extension typically has ``flask`` in its name as a prefix or +suffix. If it wraps another library, it should include the library name +as well. This makes it easy to search for extensions, and makes their +purpose clearer. + +A general Python packaging recommendation is that the install name from +the package index and the name used in ``import`` statements should be +related. The import name is lowercase, with words separated by +underscores (``_``). The install name is either lower case or title +case, with words separated by dashes (``-``). If it wraps another +library, prefer using the same case as that library's name. + +Here are some example install and import names: + +- ``Flask-Name`` imported as ``flask_name`` +- ``flask-name-lower`` imported as ``flask_name_lower`` +- ``Flask-ComboName`` imported as ``flask_comboname`` +- ``Name-Flask`` imported as ``name_flask`` + + +The Extension Class and Initialization +-------------------------------------- + +All extensions will need some entry point that initializes the +extension with the application. The most common pattern is to create a +class that represents the extension's configuration and behavior, with +an ``init_app`` method to apply the extension instance to the given +application instance. + +.. code-block:: python + + class HelloExtension: + def __init__(self, app=None): + if app is not None: + self.init_app(app) + + def init_app(self, app): + app.before_request(...) + +It is important that the app is not stored on the extension, don't do +``self.app = app``. The only time the extension should have direct +access to an app is during ``init_app``, otherwise it should use +:data:`current_app`. + +This allows the extension to support the application factory pattern, +avoids circular import issues when importing the extension instance +elsewhere in a user's code, and makes testing with different +configurations easier. + +.. code-block:: python + + hello = HelloExtension() + + def create_app(): + app = Flask(__name__) + hello.init_app(app) + return app + +Above, the ``hello`` extension instance exists independently of the +application. This means that other modules in a user's project can do +``from project import hello`` and use the extension in blueprints before +the app exists. + +The :attr:`Flask.extensions` dict can be used to store a reference to +the extension on the application, or some other state specific to the +application. Be aware that this is a single namespace, so use a name +unique to your extension, such as the extension's name without the +"flask" prefix. + + +Adding Behavior +--------------- + +There are many ways that an extension can add behavior. Any setup +methods that are available on the :class:`Flask` object can be used +during an extension's ``init_app`` method. + +A common pattern is to use :meth:`~Flask.before_request` to initialize +some data or a connection at the beginning of each request, then +:meth:`~Flask.teardown_request` to clean it up at the end. This can be +stored on :data:`g`, discussed more below. + +A more lazy approach is to provide a method that initializes and caches +the data or connection. For example, a ``ext.get_db`` method could +create a database connection the first time it's called, so that a view +that doesn't use the database doesn't create a connection. + +Besides doing something before and after every view, your extension +might want to add some specific views as well. In this case, you could +define a :class:`Blueprint`, then call :meth:`~Flask.register_blueprint` +during ``init_app`` to add the blueprint to the app. + + +Configuration Techniques +------------------------ + +There can be multiple levels and sources of configuration for an +extension. You should consider what parts of your extension fall into +each one. + +- Configuration per application instance, through ``app.config`` + values. This is configuration that could reasonably change for each + deployment of an application. A common example is a URL to an + external resource, such as a database. Configuration keys should + start with the extension's name so that they don't interfere with + other extensions. +- Configuration per extension instance, through ``__init__`` + arguments. This configuration usually affects how the extension + is used, such that it wouldn't make sense to change it per + deployment. +- Configuration per extension instance, through instance attributes + and decorator methods. It might be more ergonomic to assign to + ``ext.value``, or use a ``@ext.register`` decorator to register a + function, after the extension instance has been created. +- Global configuration through class attributes. Changing a class + attribute like ``Ext.connection_class`` can customize default + behavior without making a subclass. This could be combined + per-extension configuration to override defaults. +- Subclassing and overriding methods and attributes. Making the API of + the extension itself something that can be overridden provides a + very powerful tool for advanced customization. + +The :class:`~flask.Flask` object itself uses all of these techniques. + +It's up to you to decide what configuration is appropriate for your +extension, based on what you need and what you want to support. + +Configuration should not be changed after the application setup phase is +complete and the server begins handling requests. Configuration is +global, any changes to it are not guaranteed to be visible to other +workers. + + +Data During a Request +--------------------- + +When writing a Flask application, the :data:`~flask.g` object is used to +store information during a request. For example the +:doc:`tutorial ` stores a connection to a SQLite +database as ``g.db``. Extensions can also use this, with some care. +Since ``g`` is a single global namespace, extensions must use unique +names that won't collide with user data. For example, use the extension +name as a prefix, or as a namespace. + +.. code-block:: python + + # an internal prefix with the extension name + g._hello_user_id = 2 + + # or an internal prefix as a namespace + from types import SimpleNamespace + g._hello = SimpleNamespace() + g._hello.user_id = 2 + +The data in ``g`` lasts for an application context. An application +context is active when a request context is, or when a CLI command is +run. If you're storing something that should be closed, use +:meth:`~flask.Flask.teardown_appcontext` to ensure that it gets closed +when the application context ends. If it should only be valid during a +request, or would not be used in the CLI outside a request, use +:meth:`~flask.Flask.teardown_request`. + + +Views and Models +---------------- + +Your extension views might want to interact with specific models in your +database, or some other extension or data connected to your application. +For example, let's consider a ``Flask-SimpleBlog`` extension that works +with Flask-SQLAlchemy to provide a ``Post`` model and views to write +and read posts. + +The ``Post`` model needs to subclass the Flask-SQLAlchemy ``db.Model`` +object, but that's only available once you've created an instance of +that extension, not when your extension is defining its views. So how +can the view code, defined before the model exists, access the model? + +One method could be to use :doc:`views`. During ``__init__``, create +the model, then create the views by passing the model to the view +class's :meth:`~views.View.as_view` method. + +.. code-block:: python + + class PostAPI(MethodView): + def __init__(self, model): + self.model = model + + def get(self, id): + post = self.model.query.get(id) + return jsonify(post.to_json()) + + class BlogExtension: + def __init__(self, db): + class Post(db.Model): + id = db.Column(primary_key=True) + title = db.Column(db.String, nullable=False) + + self.post_model = Post + + def init_app(self, app): + api_view = PostAPI.as_view(model=self.post_model) + + db = SQLAlchemy() + blog = BlogExtension(db) + db.init_app(app) + blog.init_app(app) + +Another technique could be to use an attribute on the extension, such as +``self.post_model`` from above. Add the extension to ``app.extensions`` +in ``init_app``, then access +``current_app.extensions["simple_blog"].post_model`` from views. + +You may also want to provide base classes so that users can provide +their own ``Post`` model that conforms to the API your extension +expects. So they could implement ``class Post(blog.BasePost)``, then +set it as ``blog.post_model``. + +As you can see, this can get a bit complex. Unfortunately, there's no +perfect solution here, only different strategies and tradeoffs depending +on your needs and how much customization you want to offer. Luckily, +this sort of resource dependency is not a common need for most +extensions. Remember, if you need help with design, ask on our +`Discord Chat`_ or `GitHub Discussions`_. + + +Recommended Extension Guidelines +-------------------------------- + +Flask previously had the concept of "approved extensions", where the +Flask maintainers evaluated the quality, support, and compatibility of +the extensions before listing them. While the list became too difficult +to maintain over time, the guidelines are still relevant to all +extensions maintained and developed today, as they help the Flask +ecosystem remain consistent and compatible. + +1. An extension requires a maintainer. In the event an extension author + would like to move beyond the project, the project should find a new + maintainer and transfer access to the repository, documentation, + PyPI, and any other services. The `Pallets-Eco`_ organization on + GitHub allows for community maintenance with oversight from the + Pallets maintainers. +2. The naming scheme is *Flask-ExtensionName* or *ExtensionName-Flask*. + It must provide exactly one package or module named + ``flask_extension_name``. +3. The extension must use an open source license. The Python web + ecosystem tends to prefer BSD or MIT. It must be open source and + publicly available. +4. The extension's API must have the following characteristics: + + - It must support multiple applications running in the same Python + process. Use ``current_app`` instead of ``self.app``, store + configuration and state per application instance. + - It must be possible to use the factory pattern for creating + applications. Use the ``ext.init_app()`` pattern. + +5. From a clone of the repository, an extension with its dependencies + must be installable in editable mode with ``pip install -e .``. +6. It must ship tests that can be invoked with a common tool like + ``tox -e py``, ``nox -s test`` or ``pytest``. If not using ``tox``, + the test dependencies should be specified in a requirements file. + The tests must be part of the sdist distribution. +7. A link to the documentation or project website must be in the PyPI + metadata or the readme. The documentation should use the Flask theme + from the `Official Pallets Themes`_. +8. The extension's dependencies should not use upper bounds or assume + any particular version scheme, but should use lower bounds to + indicate minimum compatibility support. For example, + ``sqlalchemy>=1.4``. +9. Indicate the versions of Python supported using ``python_requires=">=version"``. + Flask itself supports Python >=3.9 as of October 2024, and this will update + over time. + +.. _PyPI: https://pypi.org/search/?c=Framework+%3A%3A+Flask +.. _Discord Chat: https://discord.gg/pallets +.. _GitHub Discussions: https://github.com/pallets/flask/discussions +.. _Official Pallets Themes: https://pypi.org/project/Pallets-Sphinx-Themes/ +.. _Pallets-Eco: https://github.com/pallets-eco diff --git a/_build/_sources/extensions.rst.txt b/_build/_sources/extensions.rst.txt new file mode 100644 index 00000000..4713ec8e --- /dev/null +++ b/_build/_sources/extensions.rst.txt @@ -0,0 +1,48 @@ +Extensions +========== + +Extensions are extra packages that add functionality to a Flask +application. For example, an extension might add support for sending +email or connecting to a database. Some extensions add entire new +frameworks to help build certain types of applications, like a REST API. + + +Finding Extensions +------------------ + +Flask extensions are usually named "Flask-Foo" or "Foo-Flask". You can +search PyPI for packages tagged with `Framework :: Flask `_. + + +Using Extensions +---------------- + +Consult each extension's documentation for installation, configuration, +and usage instructions. Generally, extensions pull their own +configuration from :attr:`app.config ` and are +passed an application instance during initialization. For example, +an extension called "Flask-Foo" might be used like this:: + + from flask_foo import Foo + + foo = Foo() + + app = Flask(__name__) + app.config.update( + FOO_BAR='baz', + FOO_SPAM='eggs', + ) + + foo.init_app(app) + + +Building Extensions +------------------- + +While `PyPI `_ contains many Flask extensions, you may not find +an extension that fits your need. If this is the case, you can create +your own, and publish it for others to use as well. Read +:doc:`extensiondev` to develop your own Flask extension. + + +.. _pypi: https://pypi.org/search/?c=Framework+%3A%3A+Flask diff --git a/_build/_sources/index.rst.txt b/_build/_sources/index.rst.txt new file mode 100644 index 00000000..f9ab9bd9 --- /dev/null +++ b/_build/_sources/index.rst.txt @@ -0,0 +1,88 @@ +.. rst-class:: hide-header + +Welcome to Flask +================ + +.. image:: _static/flask-horizontal.png + :align: center + +Welcome to Flask's documentation. Flask is a lightweight WSGI web application framework. +It is designed to make getting started quick and easy, with the ability to scale up to +complex applications. + +Get started with :doc:`installation` +and then get an overview with the :doc:`quickstart`. There is also a +more detailed :doc:`tutorial/index` that shows how to create a small but +complete application with Flask. Common patterns are described in the +:doc:`patterns/index` section. The rest of the docs describe each +component of Flask in detail, with a full reference in the :doc:`api` +section. + +Flask depends on the `Werkzeug`_ WSGI toolkit, the `Jinja`_ template engine, and the +`Click`_ CLI toolkit. Be sure to check their documentation as well as Flask's when +looking for information. + +.. _Werkzeug: https://werkzeug.palletsprojects.com +.. _Jinja: https://jinja.palletsprojects.com +.. _Click: https://click.palletsprojects.com + + +User's Guide +------------ + +Flask provides configuration and conventions, with sensible defaults, to get started. +This section of the documentation explains the different parts of the Flask framework +and how they can be used, customized, and extended. Beyond Flask itself, look for +community-maintained extensions to add even more functionality. + +.. toctree:: + :maxdepth: 2 + + installation + quickstart + tutorial/index + templating + testing + errorhandling + debugging + logging + config + signals + views + lifecycle + appcontext + reqcontext + blueprints + extensions + cli + server + shell + patterns/index + web-security + deploying/index + async-await + + +API Reference +------------- + +If you are looking for information on a specific function, class or +method, this part of the documentation is for you. + +.. toctree:: + :maxdepth: 2 + + api + + +Additional Notes +---------------- + +.. toctree:: + :maxdepth: 2 + + design + extensiondev + contributing + license + changes diff --git a/_build/_sources/installation.rst.txt b/_build/_sources/installation.rst.txt new file mode 100644 index 00000000..90a314bf --- /dev/null +++ b/_build/_sources/installation.rst.txt @@ -0,0 +1,144 @@ +Installation +============ + + +Python Version +-------------- + +We recommend using the latest version of Python. Flask supports Python 3.9 and newer. + + +Dependencies +------------ + +These distributions will be installed automatically when installing Flask. + +* `Werkzeug`_ implements WSGI, the standard Python interface between + applications and servers. +* `Jinja`_ is a template language that renders the pages your application + serves. +* `MarkupSafe`_ comes with Jinja. It escapes untrusted input when rendering + templates to avoid injection attacks. +* `ItsDangerous`_ securely signs data to ensure its integrity. This is used + to protect Flask's session cookie. +* `Click`_ is a framework for writing command line applications. It provides + the ``flask`` command and allows adding custom management commands. +* `Blinker`_ provides support for :doc:`signals`. + +.. _Werkzeug: https://palletsprojects.com/p/werkzeug/ +.. _Jinja: https://palletsprojects.com/p/jinja/ +.. _MarkupSafe: https://palletsprojects.com/p/markupsafe/ +.. _ItsDangerous: https://palletsprojects.com/p/itsdangerous/ +.. _Click: https://palletsprojects.com/p/click/ +.. _Blinker: https://blinker.readthedocs.io/ + + +Optional dependencies +~~~~~~~~~~~~~~~~~~~~~ + +These distributions will not be installed automatically. Flask will detect and +use them if you install them. + +* `python-dotenv`_ enables support for :ref:`dotenv` when running ``flask`` + commands. +* `Watchdog`_ provides a faster, more efficient reloader for the development + server. + +.. _python-dotenv: https://github.com/theskumar/python-dotenv#readme +.. _watchdog: https://pythonhosted.org/watchdog/ + + +greenlet +~~~~~~~~ + +You may choose to use gevent or eventlet with your application. In this +case, greenlet>=1.0 is required. When using PyPy, PyPy>=7.3.7 is +required. + +These are not minimum supported versions, they only indicate the first +versions that added necessary features. You should use the latest +versions of each. + + +Virtual environments +-------------------- + +Use a virtual environment to manage the dependencies for your project, both in +development and in production. + +What problem does a virtual environment solve? The more Python projects you +have, the more likely it is that you need to work with different versions of +Python libraries, or even Python itself. Newer versions of libraries for one +project can break compatibility in another project. + +Virtual environments are independent groups of Python libraries, one for each +project. Packages installed for one project will not affect other projects or +the operating system's packages. + +Python comes bundled with the :mod:`venv` module to create virtual +environments. + + +.. _install-create-env: + +Create an environment +~~~~~~~~~~~~~~~~~~~~~ + +Create a project folder and a :file:`.venv` folder within: + +.. tabs:: + + .. group-tab:: macOS/Linux + + .. code-block:: text + + $ mkdir myproject + $ cd myproject + $ python3 -m venv .venv + + .. group-tab:: Windows + + .. code-block:: text + + > mkdir myproject + > cd myproject + > py -3 -m venv .venv + + +.. _install-activate-env: + +Activate the environment +~~~~~~~~~~~~~~~~~~~~~~~~ + +Before you work on your project, activate the corresponding environment: + +.. tabs:: + + .. group-tab:: macOS/Linux + + .. code-block:: text + + $ . .venv/bin/activate + + .. group-tab:: Windows + + .. code-block:: text + + > .venv\Scripts\activate + +Your shell prompt will change to show the name of the activated +environment. + + +Install Flask +------------- + +Within the activated environment, use the following command to install +Flask: + +.. code-block:: sh + + $ pip install Flask + +Flask is now installed. Check out the :doc:`/quickstart` or go to the +:doc:`Documentation Overview `. diff --git a/_build/_sources/license.rst.txt b/_build/_sources/license.rst.txt new file mode 100644 index 00000000..2a445f9c --- /dev/null +++ b/_build/_sources/license.rst.txt @@ -0,0 +1,5 @@ +BSD-3-Clause License +==================== + +.. literalinclude:: ../LICENSE.txt + :language: text diff --git a/_build/_sources/lifecycle.rst.txt b/_build/_sources/lifecycle.rst.txt new file mode 100644 index 00000000..2344d98a --- /dev/null +++ b/_build/_sources/lifecycle.rst.txt @@ -0,0 +1,168 @@ +Application Structure and Lifecycle +=================================== + +Flask makes it pretty easy to write a web application. But there are quite a few +different parts to an application and to each request it handles. Knowing what happens +during application setup, serving, and handling requests will help you know what's +possible in Flask and how to structure your application. + + +Application Setup +----------------- + +The first step in creating a Flask application is creating the application object. Each +Flask application is an instance of the :class:`.Flask` class, which collects all +configuration, extensions, and views. + +.. code-block:: python + + from flask import Flask + + app = Flask(__name__) + app.config.from_mapping( + SECRET_KEY="dev", + ) + app.config.from_prefixed_env() + + @app.route("/") + def index(): + return "Hello, World!" + +This is known as the "application setup phase", it's the code you write that's outside +any view functions or other handlers. It can be split up between different modules and +sub-packages, but all code that you want to be part of your application must be imported +in order for it to be registered. + +All application setup must be completed before you start serving your application and +handling requests. This is because WSGI servers divide work between multiple workers, or +can be distributed across multiple machines. If the configuration changed in one worker, +there's no way for Flask to ensure consistency between other workers. + +Flask tries to help developers catch some of these setup ordering issues by showing an +error if setup-related methods are called after requests are handled. In that case +you'll see this error: + + The setup method 'route' can no longer be called on the application. It has already + handled its first request, any changes will not be applied consistently. + Make sure all imports, decorators, functions, etc. needed to set up the application + are done before running it. + +However, it is not possible for Flask to detect all cases of out-of-order setup. In +general, don't do anything to modify the ``Flask`` app object and ``Blueprint`` objects +from within view functions that run during requests. This includes: + +- Adding routes, view functions, and other request handlers with ``@app.route``, + ``@app.errorhandler``, ``@app.before_request``, etc. +- Registering blueprints. +- Loading configuration with ``app.config``. +- Setting up the Jinja template environment with ``app.jinja_env``. +- Setting a session interface, instead of the default itsdangerous cookie. +- Setting a JSON provider with ``app.json``, instead of the default provider. +- Creating and initializing Flask extensions. + + +Serving the Application +----------------------- + +Flask is a WSGI application framework. The other half of WSGI is the WSGI server. During +development, Flask, through Werkzeug, provides a development WSGI server with the +``flask run`` CLI command. When you are done with development, use a production server +to serve your application, see :doc:`deploying/index`. + +Regardless of what server you're using, it will follow the :pep:`3333` WSGI spec. The +WSGI server will be told how to access your Flask application object, which is the WSGI +application. Then it will start listening for HTTP requests, translate the request data +into a WSGI environ, and call the WSGI application with that data. The WSGI application +will return data that is translated into an HTTP response. + +#. Browser or other client makes HTTP request. +#. WSGI server receives request. +#. WSGI server converts HTTP data to WSGI ``environ`` dict. +#. WSGI server calls WSGI application with the ``environ``. +#. Flask, the WSGI application, does all its internal processing to route the request + to a view function, handle errors, etc. +#. Flask translates View function return into WSGI response data, passes it to WSGI + server. +#. WSGI server creates and send an HTTP response. +#. Client receives the HTTP response. + + +Middleware +~~~~~~~~~~ + +The WSGI application above is a callable that behaves in a certain way. Middleware +is a WSGI application that wraps another WSGI application. It's a similar concept to +Python decorators. The outermost middleware will be called by the server. It can modify +the data passed to it, then call the WSGI application (or further middleware) that it +wraps, and so on. And it can take the return value of that call and modify it further. + +From the WSGI server's perspective, there is one WSGI application, the one it calls +directly. Typically, Flask is the "real" application at the end of the chain of +middleware. But even Flask can call further WSGI applications, although that's an +advanced, uncommon use case. + +A common middleware you'll see used with Flask is Werkzeug's +:class:`~werkzeug.middleware.proxy_fix.ProxyFix`, which modifies the request to look +like it came directly from a client even if it passed through HTTP proxies on the way. +There are other middleware that can handle serving static files, authentication, etc. + + +How a Request is Handled +------------------------ + +For us, the interesting part of the steps above is when Flask gets called by the WSGI +server (or middleware). At that point, it will do quite a lot to handle the request and +generate the response. At the most basic, it will match the URL to a view function, call +the view function, and pass the return value back to the server. But there are many more +parts that you can use to customize its behavior. + +#. WSGI server calls the Flask object, which calls :meth:`.Flask.wsgi_app`. +#. A :class:`.RequestContext` object is created. This converts the WSGI ``environ`` + dict into a :class:`.Request` object. It also creates an :class:`AppContext` object. +#. The :doc:`app context ` is pushed, which makes :data:`.current_app` and + :data:`.g` available. +#. The :data:`.appcontext_pushed` signal is sent. +#. The :doc:`request context ` is pushed, which makes :attr:`.request` and + :class:`.session` available. +#. The session is opened, loading any existing session data using the app's + :attr:`~.Flask.session_interface`, an instance of :class:`.SessionInterface`. +#. The URL is matched against the URL rules registered with the :meth:`~.Flask.route` + decorator during application setup. If there is no match, the error - usually a 404, + 405, or redirect - is stored to be handled later. +#. The :data:`.request_started` signal is sent. +#. Any :meth:`~.Flask.url_value_preprocessor` decorated functions are called. +#. Any :meth:`~.Flask.before_request` decorated functions are called. If any of + these function returns a value it is treated as the response immediately. +#. If the URL didn't match a route a few steps ago, that error is raised now. +#. The :meth:`~.Flask.route` decorated view function associated with the matched URL + is called and returns a value to be used as the response. +#. If any step so far raised an exception, and there is an :meth:`~.Flask.errorhandler` + decorated function that matches the exception class or HTTP error code, it is + called to handle the error and return a response. +#. Whatever returned a response value - a before request function, the view, or an + error handler, that value is converted to a :class:`.Response` object. +#. Any :func:`~.after_this_request` decorated functions are called, then cleared. +#. Any :meth:`~.Flask.after_request` decorated functions are called, which can modify + the response object. +#. The session is saved, persisting any modified session data using the app's + :attr:`~.Flask.session_interface`. +#. The :data:`.request_finished` signal is sent. +#. If any step so far raised an exception, and it was not handled by an error handler + function, it is handled now. HTTP exceptions are treated as responses with their + corresponding status code, other exceptions are converted to a generic 500 response. + The :data:`.got_request_exception` signal is sent. +#. The response object's status, headers, and body are returned to the WSGI server. +#. Any :meth:`~.Flask.teardown_request` decorated functions are called. +#. The :data:`.request_tearing_down` signal is sent. +#. The request context is popped, :attr:`.request` and :class:`.session` are no longer + available. +#. Any :meth:`~.Flask.teardown_appcontext` decorated functions are called. +#. The :data:`.appcontext_tearing_down` signal is sent. +#. The app context is popped, :data:`.current_app` and :data:`.g` are no longer + available. +#. The :data:`.appcontext_popped` signal is sent. + +There are even more decorators and customization points than this, but that aren't part +of every request lifecycle. They're more specific to certain things you might use during +a request, such as templates, building URLs, or handling JSON data. See the rest of this +documentation, as well as the :doc:`api` to explore further. diff --git a/_build/_sources/logging.rst.txt b/_build/_sources/logging.rst.txt new file mode 100644 index 00000000..39588242 --- /dev/null +++ b/_build/_sources/logging.rst.txt @@ -0,0 +1,183 @@ +Logging +======= + +Flask uses standard Python :mod:`logging`. Messages about your Flask +application are logged with :meth:`app.logger `, +which takes the same name as :attr:`app.name `. This +logger can also be used to log your own messages. + +.. code-block:: python + + @app.route('/login', methods=['POST']) + def login(): + user = get_user(request.form['username']) + + if user.check_password(request.form['password']): + login_user(user) + app.logger.info('%s logged in successfully', user.username) + return redirect(url_for('index')) + else: + app.logger.info('%s failed to log in', user.username) + abort(401) + +If you don't configure logging, Python's default log level is usually +'warning'. Nothing below the configured level will be visible. + + +Basic Configuration +------------------- + +When you want to configure logging for your project, you should do it as soon +as possible when the program starts. If :meth:`app.logger ` +is accessed before logging is configured, it will add a default handler. If +possible, configure logging before creating the application object. + +This example uses :func:`~logging.config.dictConfig` to create a logging +configuration similar to Flask's default, except for all logs:: + + from logging.config import dictConfig + + dictConfig({ + 'version': 1, + 'formatters': {'default': { + 'format': '[%(asctime)s] %(levelname)s in %(module)s: %(message)s', + }}, + 'handlers': {'wsgi': { + 'class': 'logging.StreamHandler', + 'stream': 'ext://flask.logging.wsgi_errors_stream', + 'formatter': 'default' + }}, + 'root': { + 'level': 'INFO', + 'handlers': ['wsgi'] + } + }) + + app = Flask(__name__) + + +Default Configuration +````````````````````` + +If you do not configure logging yourself, Flask will add a +:class:`~logging.StreamHandler` to :meth:`app.logger ` +automatically. During requests, it will write to the stream specified by the +WSGI server in ``environ['wsgi.errors']`` (which is usually +:data:`sys.stderr`). Outside a request, it will log to :data:`sys.stderr`. + + +Removing the Default Handler +```````````````````````````` + +If you configured logging after accessing +:meth:`app.logger `, and need to remove the default +handler, you can import and remove it:: + + from flask.logging import default_handler + + app.logger.removeHandler(default_handler) + + +Email Errors to Admins +---------------------- + +When running the application on a remote server for production, you probably +won't be looking at the log messages very often. The WSGI server will probably +send log messages to a file, and you'll only check that file if a user tells +you something went wrong. + +To be proactive about discovering and fixing bugs, you can configure a +:class:`logging.handlers.SMTPHandler` to send an email when errors and higher +are logged. :: + + import logging + from logging.handlers import SMTPHandler + + mail_handler = SMTPHandler( + mailhost='127.0.0.1', + fromaddr='server-error@example.com', + toaddrs=['admin@example.com'], + subject='Application Error' + ) + mail_handler.setLevel(logging.ERROR) + mail_handler.setFormatter(logging.Formatter( + '[%(asctime)s] %(levelname)s in %(module)s: %(message)s' + )) + + if not app.debug: + app.logger.addHandler(mail_handler) + +This requires that you have an SMTP server set up on the same server. See the +Python docs for more information about configuring the handler. + + +Injecting Request Information +----------------------------- + +Seeing more information about the request, such as the IP address, may help +debugging some errors. You can subclass :class:`logging.Formatter` to inject +your own fields that can be used in messages. You can change the formatter for +Flask's default handler, the mail handler defined above, or any other +handler. :: + + from flask import has_request_context, request + from flask.logging import default_handler + + class RequestFormatter(logging.Formatter): + def format(self, record): + if has_request_context(): + record.url = request.url + record.remote_addr = request.remote_addr + else: + record.url = None + record.remote_addr = None + + return super().format(record) + + formatter = RequestFormatter( + '[%(asctime)s] %(remote_addr)s requested %(url)s\n' + '%(levelname)s in %(module)s: %(message)s' + ) + default_handler.setFormatter(formatter) + mail_handler.setFormatter(formatter) + + +Other Libraries +--------------- + +Other libraries may use logging extensively, and you want to see relevant +messages from those logs too. The simplest way to do this is to add handlers +to the root logger instead of only the app logger. :: + + from flask.logging import default_handler + + root = logging.getLogger() + root.addHandler(default_handler) + root.addHandler(mail_handler) + +Depending on your project, it may be more useful to configure each logger you +care about separately, instead of configuring only the root logger. :: + + for logger in ( + logging.getLogger(app.name), + logging.getLogger('sqlalchemy'), + logging.getLogger('other_package'), + ): + logger.addHandler(default_handler) + logger.addHandler(mail_handler) + + +Werkzeug +```````` + +Werkzeug logs basic request/response information to the ``'werkzeug'`` logger. +If the root logger has no handlers configured, Werkzeug adds a +:class:`~logging.StreamHandler` to its logger. + + +Flask Extensions +```````````````` + +Depending on the situation, an extension may choose to log to +:meth:`app.logger ` or its own named logger. Consult each +extension's documentation for details. diff --git a/_build/_sources/patterns/appdispatch.rst.txt b/_build/_sources/patterns/appdispatch.rst.txt new file mode 100644 index 00000000..f22c8060 --- /dev/null +++ b/_build/_sources/patterns/appdispatch.rst.txt @@ -0,0 +1,189 @@ +Application Dispatching +======================= + +Application dispatching is the process of combining multiple Flask +applications on the WSGI level. You can combine not only Flask +applications but any WSGI application. This would allow you to run a +Django and a Flask application in the same interpreter side by side if +you want. The usefulness of this depends on how the applications work +internally. + +The fundamental difference from :doc:`packages` is that in this case you +are running the same or different Flask applications that are entirely +isolated from each other. They run different configurations and are +dispatched on the WSGI level. + + +Working with this Document +-------------------------- + +Each of the techniques and examples below results in an ``application`` +object that can be run with any WSGI server. For development, use the +``flask run`` command to start a development server. For production, see +:doc:`/deploying/index`. + +.. code-block:: python + + from flask import Flask + + app = Flask(__name__) + + @app.route('/') + def hello_world(): + return 'Hello World!' + + +Combining Applications +---------------------- + +If you have entirely separated applications and you want them to work next +to each other in the same Python interpreter process you can take +advantage of the :class:`werkzeug.wsgi.DispatcherMiddleware`. The idea +here is that each Flask application is a valid WSGI application and they +are combined by the dispatcher middleware into a larger one that is +dispatched based on prefix. + +For example you could have your main application run on ``/`` and your +backend interface on ``/backend``. + +.. code-block:: python + + from werkzeug.middleware.dispatcher import DispatcherMiddleware + from frontend_app import application as frontend + from backend_app import application as backend + + application = DispatcherMiddleware(frontend, { + '/backend': backend + }) + + +Dispatch by Subdomain +--------------------- + +Sometimes you might want to use multiple instances of the same application +with different configurations. Assuming the application is created inside +a function and you can call that function to instantiate it, that is +really easy to implement. In order to develop your application to support +creating new instances in functions have a look at the +:doc:`appfactories` pattern. + +A very common example would be creating applications per subdomain. For +instance you configure your webserver to dispatch all requests for all +subdomains to your application and you then use the subdomain information +to create user-specific instances. Once you have your server set up to +listen on all subdomains you can use a very simple WSGI application to do +the dynamic application creation. + +The perfect level for abstraction in that regard is the WSGI layer. You +write your own WSGI application that looks at the request that comes and +delegates it to your Flask application. If that application does not +exist yet, it is dynamically created and remembered. + +.. code-block:: python + + from threading import Lock + + class SubdomainDispatcher: + + def __init__(self, domain, create_app): + self.domain = domain + self.create_app = create_app + self.lock = Lock() + self.instances = {} + + def get_application(self, host): + host = host.split(':')[0] + assert host.endswith(self.domain), 'Configuration error' + subdomain = host[:-len(self.domain)].rstrip('.') + with self.lock: + app = self.instances.get(subdomain) + if app is None: + app = self.create_app(subdomain) + self.instances[subdomain] = app + return app + + def __call__(self, environ, start_response): + app = self.get_application(environ['HTTP_HOST']) + return app(environ, start_response) + + +This dispatcher can then be used like this: + +.. code-block:: python + + from myapplication import create_app, get_user_for_subdomain + from werkzeug.exceptions import NotFound + + def make_app(subdomain): + user = get_user_for_subdomain(subdomain) + if user is None: + # if there is no user for that subdomain we still have + # to return a WSGI application that handles that request. + # We can then just return the NotFound() exception as + # application which will render a default 404 page. + # You might also redirect the user to the main page then + return NotFound() + + # otherwise create the application for the specific user + return create_app(user) + + application = SubdomainDispatcher('example.com', make_app) + + +Dispatch by Path +---------------- + +Dispatching by a path on the URL is very similar. Instead of looking at +the ``Host`` header to figure out the subdomain one simply looks at the +request path up to the first slash. + +.. code-block:: python + + from threading import Lock + from wsgiref.util import shift_path_info + + class PathDispatcher: + + def __init__(self, default_app, create_app): + self.default_app = default_app + self.create_app = create_app + self.lock = Lock() + self.instances = {} + + def get_application(self, prefix): + with self.lock: + app = self.instances.get(prefix) + if app is None: + app = self.create_app(prefix) + if app is not None: + self.instances[prefix] = app + return app + + def __call__(self, environ, start_response): + app = self.get_application(_peek_path_info(environ)) + if app is not None: + shift_path_info(environ) + else: + app = self.default_app + return app(environ, start_response) + + def _peek_path_info(environ): + segments = environ.get("PATH_INFO", "").lstrip("/").split("/", 1) + if segments: + return segments[0] + + return None + +The big difference between this and the subdomain one is that this one +falls back to another application if the creator function returns ``None``. + +.. code-block:: python + + from myapplication import create_app, default_app, get_user_for_prefix + + def make_app(prefix): + user = get_user_for_prefix(prefix) + if user is not None: + return create_app(user) + + application = PathDispatcher(default_app, make_app) diff --git a/_build/_sources/patterns/appfactories.rst.txt b/_build/_sources/patterns/appfactories.rst.txt new file mode 100644 index 00000000..32fd062b --- /dev/null +++ b/_build/_sources/patterns/appfactories.rst.txt @@ -0,0 +1,118 @@ +Application Factories +===================== + +If you are already using packages and blueprints for your application +(:doc:`/blueprints`) there are a couple of really nice ways to further improve +the experience. A common pattern is creating the application object when +the blueprint is imported. But if you move the creation of this object +into a function, you can then create multiple instances of this app later. + +So why would you want to do this? + +1. Testing. You can have instances of the application with different + settings to test every case. +2. Multiple instances. Imagine you want to run different versions of the + same application. Of course you could have multiple instances with + different configs set up in your webserver, but if you use factories, + you can have multiple instances of the same application running in the + same application process which can be handy. + +So how would you then actually implement that? + +Basic Factories +--------------- + +The idea is to set up the application in a function. Like this:: + + def create_app(config_filename): + app = Flask(__name__) + app.config.from_pyfile(config_filename) + + from yourapplication.model import db + db.init_app(app) + + from yourapplication.views.admin import admin + from yourapplication.views.frontend import frontend + app.register_blueprint(admin) + app.register_blueprint(frontend) + + return app + +The downside is that you cannot use the application object in the blueprints +at import time. You can however use it from within a request. How do you +get access to the application with the config? Use +:data:`~flask.current_app`:: + + from flask import current_app, Blueprint, render_template + admin = Blueprint('admin', __name__, url_prefix='/admin') + + @admin.route('/') + def index(): + return render_template(current_app.config['INDEX_TEMPLATE']) + +Here we look up the name of a template in the config. + +Factories & Extensions +---------------------- + +It's preferable to create your extensions and app factories so that the +extension object does not initially get bound to the application. + +Using `Flask-SQLAlchemy `_, +as an example, you should not do something along those lines:: + + def create_app(config_filename): + app = Flask(__name__) + app.config.from_pyfile(config_filename) + + db = SQLAlchemy(app) + +But, rather, in model.py (or equivalent):: + + db = SQLAlchemy() + +and in your application.py (or equivalent):: + + def create_app(config_filename): + app = Flask(__name__) + app.config.from_pyfile(config_filename) + + from yourapplication.model import db + db.init_app(app) + +Using this design pattern, no application-specific state is stored on the +extension object, so one extension object can be used for multiple apps. +For more information about the design of extensions refer to :doc:`/extensiondev`. + +Using Applications +------------------ + +To run such an application, you can use the :command:`flask` command: + +.. code-block:: text + + $ flask --app hello run + +Flask will automatically detect the factory if it is named +``create_app`` or ``make_app`` in ``hello``. You can also pass arguments +to the factory like this: + +.. code-block:: text + + $ flask --app hello:create_app(local_auth=True) run + +Then the ``create_app`` factory in ``myapp`` is called with the keyword +argument ``local_auth=True``. See :doc:`/cli` for more detail. + +Factory Improvements +-------------------- + +The factory function above is not very clever, but you can improve it. +The following changes are straightforward to implement: + +1. Make it possible to pass in configuration values for unit tests so that + you don't have to create config files on the filesystem. +2. Call a function from a blueprint when the application is setting up so + that you have a place to modify attributes of the application (like + hooking in before/after request handlers etc.) +3. Add in WSGI middlewares when the application is being created if necessary. diff --git a/_build/_sources/patterns/caching.rst.txt b/_build/_sources/patterns/caching.rst.txt new file mode 100644 index 00000000..9bf7b72a --- /dev/null +++ b/_build/_sources/patterns/caching.rst.txt @@ -0,0 +1,16 @@ +Caching +======= + +When your application runs slow, throw some caches in. Well, at least +it's the easiest way to speed up things. What does a cache do? Say you +have a function that takes some time to complete but the results would +still be good enough if they were 5 minutes old. So then the idea is that +you actually put the result of that calculation into a cache for some +time. + +Flask itself does not provide caching for you, but `Flask-Caching`_, an +extension for Flask does. Flask-Caching supports various backends, and it is +even possible to develop your own caching backend. + + +.. _Flask-Caching: https://flask-caching.readthedocs.io/en/latest/ diff --git a/_build/_sources/patterns/celery.rst.txt b/_build/_sources/patterns/celery.rst.txt new file mode 100644 index 00000000..2e9a43a7 --- /dev/null +++ b/_build/_sources/patterns/celery.rst.txt @@ -0,0 +1,242 @@ +Background Tasks with Celery +============================ + +If your application has a long running task, such as processing some uploaded data or +sending email, you don't want to wait for it to finish during a request. Instead, use a +task queue to send the necessary data to another process that will run the task in the +background while the request returns immediately. + +`Celery`_ is a powerful task queue that can be used for simple background tasks as well +as complex multi-stage programs and schedules. This guide will show you how to configure +Celery using Flask. Read Celery's `First Steps with Celery`_ guide to learn how to use +Celery itself. + +.. _Celery: https://celery.readthedocs.io +.. _First Steps with Celery: https://celery.readthedocs.io/en/latest/getting-started/first-steps-with-celery.html + +The Flask repository contains `an example `_ +based on the information on this page, which also shows how to use JavaScript to submit +tasks and poll for progress and results. + + +Install +------- + +Install Celery from PyPI, for example using pip: + +.. code-block:: text + + $ pip install celery + + +Integrate Celery with Flask +--------------------------- + +You can use Celery without any integration with Flask, but it's convenient to configure +it through Flask's config, and to let tasks access the Flask application. + +Celery uses similar ideas to Flask, with a ``Celery`` app object that has configuration +and registers tasks. While creating a Flask app, use the following code to create and +configure a Celery app as well. + +.. code-block:: python + + from celery import Celery, Task + + def celery_init_app(app: Flask) -> Celery: + class FlaskTask(Task): + def __call__(self, *args: object, **kwargs: object) -> object: + with app.app_context(): + return self.run(*args, **kwargs) + + celery_app = Celery(app.name, task_cls=FlaskTask) + celery_app.config_from_object(app.config["CELERY"]) + celery_app.set_default() + app.extensions["celery"] = celery_app + return celery_app + +This creates and returns a ``Celery`` app object. Celery `configuration`_ is taken from +the ``CELERY`` key in the Flask configuration. The Celery app is set as the default, so +that it is seen during each request. The ``Task`` subclass automatically runs task +functions with a Flask app context active, so that services like your database +connections are available. + +.. _configuration: https://celery.readthedocs.io/en/stable/userguide/configuration.html + +Here's a basic ``example.py`` that configures Celery to use Redis for communication. We +enable a result backend, but ignore results by default. This allows us to store results +only for tasks where we care about the result. + +.. code-block:: python + + from flask import Flask + + app = Flask(__name__) + app.config.from_mapping( + CELERY=dict( + broker_url="redis://localhost", + result_backend="redis://localhost", + task_ignore_result=True, + ), + ) + celery_app = celery_init_app(app) + +Point the ``celery worker`` command at this and it will find the ``celery_app`` object. + +.. code-block:: text + + $ celery -A example worker --loglevel INFO + +You can also run the ``celery beat`` command to run tasks on a schedule. See Celery's +docs for more information about defining schedules. + +.. code-block:: text + + $ celery -A example beat --loglevel INFO + + +Application Factory +------------------- + +When using the Flask application factory pattern, call the ``celery_init_app`` function +inside the factory. It sets ``app.extensions["celery"]`` to the Celery app object, which +can be used to get the Celery app from the Flask app returned by the factory. + +.. code-block:: python + + def create_app() -> Flask: + app = Flask(__name__) + app.config.from_mapping( + CELERY=dict( + broker_url="redis://localhost", + result_backend="redis://localhost", + task_ignore_result=True, + ), + ) + app.config.from_prefixed_env() + celery_init_app(app) + return app + +To use ``celery`` commands, Celery needs an app object, but that's no longer directly +available. Create a ``make_celery.py`` file that calls the Flask app factory and gets +the Celery app from the returned Flask app. + +.. code-block:: python + + from example import create_app + + flask_app = create_app() + celery_app = flask_app.extensions["celery"] + +Point the ``celery`` command to this file. + +.. code-block:: text + + $ celery -A make_celery worker --loglevel INFO + $ celery -A make_celery beat --loglevel INFO + + +Defining Tasks +-------------- + +Using ``@celery_app.task`` to decorate task functions requires access to the +``celery_app`` object, which won't be available when using the factory pattern. It also +means that the decorated tasks are tied to the specific Flask and Celery app instances, +which could be an issue during testing if you change configuration for a test. + +Instead, use Celery's ``@shared_task`` decorator. This creates task objects that will +access whatever the "current app" is, which is a similar concept to Flask's blueprints +and app context. This is why we called ``celery_app.set_default()`` above. + +Here's an example task that adds two numbers together and returns the result. + +.. code-block:: python + + from celery import shared_task + + @shared_task(ignore_result=False) + def add_together(a: int, b: int) -> int: + return a + b + +Earlier, we configured Celery to ignore task results by default. Since we want to know +the return value of this task, we set ``ignore_result=False``. On the other hand, a task +that didn't need a result, such as sending an email, wouldn't set this. + + +Calling Tasks +------------- + +The decorated function becomes a task object with methods to call it in the background. +The simplest way is to use the ``delay(*args, **kwargs)`` method. See Celery's docs for +more methods. + +A Celery worker must be running to run the task. Starting a worker is shown in the +previous sections. + +.. code-block:: python + + from flask import request + + @app.post("/add") + def start_add() -> dict[str, object]: + a = request.form.get("a", type=int) + b = request.form.get("b", type=int) + result = add_together.delay(a, b) + return {"result_id": result.id} + +The route doesn't get the task's result immediately. That would defeat the purpose by +blocking the response. Instead, we return the running task's result id, which we can use +later to get the result. + + +Getting Results +--------------- + +To fetch the result of the task we started above, we'll add another route that takes the +result id we returned before. We return whether the task is finished (ready), whether it +finished successfully, and what the return value (or error) was if it is finished. + +.. code-block:: python + + from celery.result import AsyncResult + + @app.get("/result/") + def task_result(id: str) -> dict[str, object]: + result = AsyncResult(id) + return { + "ready": result.ready(), + "successful": result.successful(), + "value": result.result if result.ready() else None, + } + +Now you can start the task using the first route, then poll for the result using the +second route. This keeps the Flask request workers from being blocked waiting for tasks +to finish. + +The Flask repository contains `an example `_ +using JavaScript to submit tasks and poll for progress and results. + + +Passing Data to Tasks +--------------------- + +The "add" task above took two integers as arguments. To pass arguments to tasks, Celery +has to serialize them to a format that it can pass to other processes. Therefore, +passing complex objects is not recommended. For example, it would be impossible to pass +a SQLAlchemy model object, since that object is probably not serializable and is tied to +the session that queried it. + +Pass the minimal amount of data necessary to fetch or recreate any complex data within +the task. Consider a task that will run when the logged in user asks for an archive of +their data. The Flask request knows the logged in user, and has the user object queried +from the database. It got that by querying the database for a given id, so the task can +do the same thing. Pass the user's id rather than the user object. + +.. code-block:: python + + @shared_task + def generate_user_archive(user_id: str) -> None: + user = db.session.get(User, user_id) + ... + + generate_user_archive.delay(current_user.id) diff --git a/_build/_sources/patterns/deferredcallbacks.rst.txt b/_build/_sources/patterns/deferredcallbacks.rst.txt new file mode 100644 index 00000000..4ff8814b --- /dev/null +++ b/_build/_sources/patterns/deferredcallbacks.rst.txt @@ -0,0 +1,44 @@ +Deferred Request Callbacks +========================== + +One of the design principles of Flask is that response objects are created and +passed down a chain of potential callbacks that can modify them or replace +them. When the request handling starts, there is no response object yet. It is +created as necessary either by a view function or by some other component in +the system. + +What happens if you want to modify the response at a point where the response +does not exist yet? A common example for that would be a +:meth:`~flask.Flask.before_request` callback that wants to set a cookie on the +response object. + +One way is to avoid the situation. Very often that is possible. For instance +you can try to move that logic into a :meth:`~flask.Flask.after_request` +callback instead. However, sometimes moving code there makes it +more complicated or awkward to reason about. + +As an alternative, you can use :func:`~flask.after_this_request` to register +callbacks that will execute after only the current request. This way you can +defer code execution from anywhere in the application, based on the current +request. + +At any time during a request, we can register a function to be called at the +end of the request. For example you can remember the current language of the +user in a cookie in a :meth:`~flask.Flask.before_request` callback:: + + from flask import request, after_this_request + + @app.before_request + def detect_user_language(): + language = request.cookies.get('user_lang') + + if language is None: + language = guess_language_from_request() + + # when the response exists, set a cookie with the language + @after_this_request + def remember_language(response): + response.set_cookie('user_lang', language) + return response + + g.language = language diff --git a/_build/_sources/patterns/favicon.rst.txt b/_build/_sources/patterns/favicon.rst.txt new file mode 100644 index 00000000..21ea767f --- /dev/null +++ b/_build/_sources/patterns/favicon.rst.txt @@ -0,0 +1,53 @@ +Adding a favicon +================ + +A "favicon" is an icon used by browsers for tabs and bookmarks. This helps +to distinguish your website and to give it a unique brand. + +A common question is how to add a favicon to a Flask application. First, of +course, you need an icon. It should be 16 × 16 pixels and in the ICO file +format. This is not a requirement but a de-facto standard supported by all +relevant browsers. Put the icon in your static directory as +:file:`favicon.ico`. + +Now, to get browsers to find your icon, the correct way is to add a link +tag in your HTML. So, for example: + +.. sourcecode:: html+jinja + + + +That's all you need for most browsers, however some really old ones do not +support this standard. The old de-facto standard is to serve this file, +with this name, at the website root. If your application is not mounted at +the root path of the domain you either need to configure the web server to +serve the icon at the root or if you can't do that you're out of luck. If +however your application is the root you can simply route a redirect:: + + app.add_url_rule('/favicon.ico', + redirect_to=url_for('static', filename='favicon.ico')) + +If you want to save the extra redirect request you can also write a view +using :func:`~flask.send_from_directory`:: + + import os + from flask import send_from_directory + + @app.route('/favicon.ico') + def favicon(): + return send_from_directory(os.path.join(app.root_path, 'static'), + 'favicon.ico', mimetype='image/vnd.microsoft.icon') + +We can leave out the explicit mimetype and it will be guessed, but we may +as well specify it to avoid the extra guessing, as it will always be the +same. + +The above will serve the icon via your application and if possible it's +better to configure your dedicated web server to serve it; refer to the +web server's documentation. + +See also +-------- + +* The `Favicon `_ article on + Wikipedia diff --git a/_build/_sources/patterns/fileuploads.rst.txt b/_build/_sources/patterns/fileuploads.rst.txt new file mode 100644 index 00000000..304f57dc --- /dev/null +++ b/_build/_sources/patterns/fileuploads.rst.txt @@ -0,0 +1,182 @@ +Uploading Files +=============== + +Ah yes, the good old problem of file uploads. The basic idea of file +uploads is actually quite simple. It basically works like this: + +1. A ``

`` tag is marked with ``enctype=multipart/form-data`` + and an ```` is placed in that form. +2. The application accesses the file from the :attr:`~flask.request.files` + dictionary on the request object. +3. use the :meth:`~werkzeug.datastructures.FileStorage.save` method of the file to save + the file permanently somewhere on the filesystem. + +A Gentle Introduction +--------------------- + +Let's start with a very basic application that uploads a file to a +specific upload folder and displays a file to the user. Let's look at the +bootstrapping code for our application:: + + import os + from flask import Flask, flash, request, redirect, url_for + from werkzeug.utils import secure_filename + + UPLOAD_FOLDER = '/path/to/the/uploads' + ALLOWED_EXTENSIONS = {'txt', 'pdf', 'png', 'jpg', 'jpeg', 'gif'} + + app = Flask(__name__) + app.config['UPLOAD_FOLDER'] = UPLOAD_FOLDER + +So first we need a couple of imports. Most should be straightforward, the +:func:`werkzeug.secure_filename` is explained a little bit later. The +``UPLOAD_FOLDER`` is where we will store the uploaded files and the +``ALLOWED_EXTENSIONS`` is the set of allowed file extensions. + +Why do we limit the extensions that are allowed? You probably don't want +your users to be able to upload everything there if the server is directly +sending out the data to the client. That way you can make sure that users +are not able to upload HTML files that would cause XSS problems (see +:ref:`security-xss`). Also make sure to disallow ``.php`` files if the server +executes them, but who has PHP installed on their server, right? :) + +Next the functions that check if an extension is valid and that uploads +the file and redirects the user to the URL for the uploaded file:: + + def allowed_file(filename): + return '.' in filename and \ + filename.rsplit('.', 1)[1].lower() in ALLOWED_EXTENSIONS + + @app.route('/', methods=['GET', 'POST']) + def upload_file(): + if request.method == 'POST': + # check if the post request has the file part + if 'file' not in request.files: + flash('No file part') + return redirect(request.url) + file = request.files['file'] + # If the user does not select a file, the browser submits an + # empty file without a filename. + if file.filename == '': + flash('No selected file') + return redirect(request.url) + if file and allowed_file(file.filename): + filename = secure_filename(file.filename) + file.save(os.path.join(app.config['UPLOAD_FOLDER'], filename)) + return redirect(url_for('download_file', name=filename)) + return ''' + + Upload new File +

Upload new File

+ + + +
+ ''' + +So what does that :func:`~werkzeug.utils.secure_filename` function actually do? +Now the problem is that there is that principle called "never trust user +input". This is also true for the filename of an uploaded file. All +submitted form data can be forged, and filenames can be dangerous. For +the moment just remember: always use that function to secure a filename +before storing it directly on the filesystem. + +.. admonition:: Information for the Pros + + So you're interested in what that :func:`~werkzeug.utils.secure_filename` + function does and what the problem is if you're not using it? So just + imagine someone would send the following information as `filename` to + your application:: + + filename = "../../../../home/username/.bashrc" + + Assuming the number of ``../`` is correct and you would join this with + the ``UPLOAD_FOLDER`` the user might have the ability to modify a file on + the server's filesystem he or she should not modify. This does require some + knowledge about how the application looks like, but trust me, hackers + are patient :) + + Now let's look how that function works: + + >>> secure_filename('../../../../home/username/.bashrc') + 'home_username_.bashrc' + +We want to be able to serve the uploaded files so they can be downloaded +by users. We'll define a ``download_file`` view to serve files in the +upload folder by name. ``url_for("download_file", name=name)`` generates +download URLs. + +.. code-block:: python + + from flask import send_from_directory + + @app.route('/uploads/') + def download_file(name): + return send_from_directory(app.config["UPLOAD_FOLDER"], name) + +If you're using middleware or the HTTP server to serve files, you can +register the ``download_file`` endpoint as ``build_only`` so ``url_for`` +will work without a view function. + +.. code-block:: python + + app.add_url_rule( + "/uploads/", endpoint="download_file", build_only=True + ) + + +Improving Uploads +----------------- + +.. versionadded:: 0.6 + +So how exactly does Flask handle uploads? Well it will store them in the +webserver's memory if the files are reasonably small, otherwise in a +temporary location (as returned by :func:`tempfile.gettempdir`). But how +do you specify the maximum file size after which an upload is aborted? By +default Flask will happily accept file uploads with an unlimited amount of +memory, but you can limit that by setting the ``MAX_CONTENT_LENGTH`` +config key:: + + from flask import Flask, Request + + app = Flask(__name__) + app.config['MAX_CONTENT_LENGTH'] = 16 * 1000 * 1000 + +The code above will limit the maximum allowed payload to 16 megabytes. +If a larger file is transmitted, Flask will raise a +:exc:`~werkzeug.exceptions.RequestEntityTooLarge` exception. + +.. admonition:: Connection Reset Issue + + When using the local development server, you may get a connection + reset error instead of a 413 response. You will get the correct + status response when running the app with a production WSGI server. + +This feature was added in Flask 0.6 but can be achieved in older versions +as well by subclassing the request object. For more information on that +consult the Werkzeug documentation on file handling. + + +Upload Progress Bars +-------------------- + +A while ago many developers had the idea to read the incoming file in +small chunks and store the upload progress in the database to be able to +poll the progress with JavaScript from the client. The client asks the +server every 5 seconds how much it has transmitted, but this is +something it should already know. + +An Easier Solution +------------------ + +Now there are better solutions that work faster and are more reliable. There +are JavaScript libraries like jQuery_ that have form plugins to ease the +construction of progress bar. + +Because the common pattern for file uploads exists almost unchanged in all +applications dealing with uploads, there are also some Flask extensions that +implement a full fledged upload mechanism that allows controlling which +file extensions are allowed to be uploaded. + +.. _jQuery: https://jquery.com/ diff --git a/_build/_sources/patterns/flashing.rst.txt b/_build/_sources/patterns/flashing.rst.txt new file mode 100644 index 00000000..8eb6b3ac --- /dev/null +++ b/_build/_sources/patterns/flashing.rst.txt @@ -0,0 +1,148 @@ +Message Flashing +================ + +Good applications and user interfaces are all about feedback. If the user +does not get enough feedback they will probably end up hating the +application. Flask provides a really simple way to give feedback to a +user with the flashing system. The flashing system basically makes it +possible to record a message at the end of a request and access it next +request and only next request. This is usually combined with a layout +template that does this. Note that browsers and sometimes web servers enforce +a limit on cookie sizes. This means that flashing messages that are too +large for session cookies causes message flashing to fail silently. + +Simple Flashing +--------------- + +So here is a full example:: + + from flask import Flask, flash, redirect, render_template, \ + request, url_for + + app = Flask(__name__) + app.secret_key = b'_5#y2L"F4Q8z\n\xec]/' + + @app.route('/') + def index(): + return render_template('index.html') + + @app.route('/login', methods=['GET', 'POST']) + def login(): + error = None + if request.method == 'POST': + if request.form['username'] != 'admin' or \ + request.form['password'] != 'secret': + error = 'Invalid credentials' + else: + flash('You were successfully logged in') + return redirect(url_for('index')) + return render_template('login.html', error=error) + +And here is the :file:`layout.html` template which does the magic: + +.. sourcecode:: html+jinja + + + My Application + {% with messages = get_flashed_messages() %} + {% if messages %} +
    + {% for message in messages %} +
  • {{ message }}
  • + {% endfor %} +
+ {% endif %} + {% endwith %} + {% block body %}{% endblock %} + +Here is the :file:`index.html` template which inherits from :file:`layout.html`: + +.. sourcecode:: html+jinja + + {% extends "layout.html" %} + {% block body %} +

Overview

+

Do you want to log in? + {% endblock %} + +And here is the :file:`login.html` template which also inherits from +:file:`layout.html`: + +.. sourcecode:: html+jinja + + {% extends "layout.html" %} + {% block body %} +

Login

+ {% if error %} +

Error: {{ error }} + {% endif %} +

+
+
Username: +
+
Password: +
+
+

+

+ {% endblock %} + +Flashing With Categories +------------------------ + +.. versionadded:: 0.3 + +It is also possible to provide categories when flashing a message. The +default category if nothing is provided is ``'message'``. Alternative +categories can be used to give the user better feedback. For example +error messages could be displayed with a red background. + +To flash a message with a different category, just use the second argument +to the :func:`~flask.flash` function:: + + flash('Invalid password provided', 'error') + +Inside the template you then have to tell the +:func:`~flask.get_flashed_messages` function to also return the +categories. The loop looks slightly different in that situation then: + +.. sourcecode:: html+jinja + + {% with messages = get_flashed_messages(with_categories=true) %} + {% if messages %} +
    + {% for category, message in messages %} +
  • {{ message }}
  • + {% endfor %} +
+ {% endif %} + {% endwith %} + +This is just one example of how to render these flashed messages. One +might also use the category to add a prefix such as +``Error:`` to the message. + +Filtering Flash Messages +------------------------ + +.. versionadded:: 0.9 + +Optionally you can pass a list of categories which filters the results of +:func:`~flask.get_flashed_messages`. This is useful if you wish to +render each category in a separate block. + +.. sourcecode:: html+jinja + + {% with errors = get_flashed_messages(category_filter=["error"]) %} + {% if errors %} +
+ × +
    + {%- for msg in errors %} +
  • {{ msg }}
  • + {% endfor -%} +
+
+ {% endif %} + {% endwith %} diff --git a/_build/_sources/patterns/index.rst.txt b/_build/_sources/patterns/index.rst.txt new file mode 100644 index 00000000..1f2c07dd --- /dev/null +++ b/_build/_sources/patterns/index.rst.txt @@ -0,0 +1,40 @@ +Patterns for Flask +================== + +Certain features and interactions are common enough that you will find +them in most web applications. For example, many applications use a +relational database and user authentication. They will open a database +connection at the beginning of the request and get the information for +the logged in user. At the end of the request, the database connection +is closed. + +These types of patterns may be a bit outside the scope of Flask itself, +but Flask makes it easy to implement them. Some common patterns are +collected in the following pages. + +.. toctree:: + :maxdepth: 2 + + packages + appfactories + appdispatch + urlprocessors + sqlite3 + sqlalchemy + fileuploads + caching + viewdecorators + wtforms + templateinheritance + flashing + javascript + lazyloading + mongoengine + favicon + streaming + deferredcallbacks + methodoverrides + requestchecksum + celery + subclassing + singlepageapplications diff --git a/_build/_sources/patterns/javascript.rst.txt b/_build/_sources/patterns/javascript.rst.txt new file mode 100644 index 00000000..d58a3eb6 --- /dev/null +++ b/_build/_sources/patterns/javascript.rst.txt @@ -0,0 +1,259 @@ +JavaScript, ``fetch``, and JSON +=============================== + +You may want to make your HTML page dynamic, by changing data without +reloading the entire page. Instead of submitting an HTML ``
`` and +performing a redirect to re-render the template, you can add +`JavaScript`_ that calls |fetch|_ and replaces content on the page. + +|fetch|_ is the modern, built-in JavaScript solution to making +requests from a page. You may have heard of other "AJAX" methods and +libraries, such as |XHR|_ or `jQuery`_. These are no longer needed in +modern browsers, although you may choose to use them or another library +depending on your application's requirements. These docs will only focus +on built-in JavaScript features. + +.. _JavaScript: https://developer.mozilla.org/Web/JavaScript +.. |fetch| replace:: ``fetch()`` +.. _fetch: https://developer.mozilla.org/Web/API/Fetch_API +.. |XHR| replace:: ``XMLHttpRequest()`` +.. _XHR: https://developer.mozilla.org/Web/API/XMLHttpRequest +.. _jQuery: https://jquery.com/ + + +Rendering Templates +------------------- + +It is important to understand the difference between templates and +JavaScript. Templates are rendered on the server, before the response is +sent to the user's browser. JavaScript runs in the user's browser, after +the template is rendered and sent. Therefore, it is impossible to use +JavaScript to affect how the Jinja template is rendered, but it is +possible to render data into the JavaScript that will run. + +To provide data to JavaScript when rendering the template, use the +:func:`~jinja-filters.tojson` filter in a `` + +A less common pattern is to add the data to a ``data-`` attribute on an +HTML tag. In this case, you must use single quotes around the value, not +double quotes, otherwise you will produce invalid or unsafe HTML. + +.. code-block:: jinja + +
+ + +Generating URLs +--------------- + +The other way to get data from the server to JavaScript is to make a +request for it. First, you need to know the URL to request. + +The simplest way to generate URLs is to continue to use +:func:`~flask.url_for` when rendering the template. For example: + +.. code-block:: javascript + + const user_url = {{ url_for("user", id=current_user.id)|tojson }} + fetch(user_url).then(...) + +However, you might need to generate a URL based on information you only +know in JavaScript. As discussed above, JavaScript runs in the user's +browser, not as part of the template rendering, so you can't use +``url_for`` at that point. + +In this case, you need to know the "root URL" under which your +application is served. In simple setups, this is ``/``, but it might +also be something else, like ``https://example.com/myapp/``. + +A simple way to tell your JavaScript code about this root is to set it +as a global variable when rendering the template. Then you can use it +when generating URLs from JavaScript. + +.. code-block:: javascript + + const SCRIPT_ROOT = {{ request.script_root|tojson }} + let user_id = ... // do something to get a user id from the page + let user_url = `${SCRIPT_ROOT}/user/${user_id}` + fetch(user_url).then(...) + + +Making a Request with ``fetch`` +------------------------------- + +|fetch|_ takes two arguments, a URL and an object with other options, +and returns a |Promise|_. We won't cover all the available options, and +will only use ``then()`` on the promise, not other callbacks or +``await`` syntax. Read the linked MDN docs for more information about +those features. + +By default, the GET method is used. If the response contains JSON, it +can be used with a ``then()`` callback chain. + +.. code-block:: javascript + + const room_url = {{ url_for("room_detail", id=room.id)|tojson }} + fetch(room_url) + .then(response => response.json()) + .then(data => { + // data is a parsed JSON object + }) + +To send data, use a data method such as POST, and pass the ``body`` +option. The most common types for data are form data or JSON data. + +To send form data, pass a populated |FormData|_ object. This uses the +same format as an HTML form, and would be accessed with ``request.form`` +in a Flask view. + +.. code-block:: javascript + + let data = new FormData() + data.append("name", "Flask Room") + data.append("description", "Talk about Flask here.") + fetch(room_url, { + "method": "POST", + "body": data, + }).then(...) + +In general, prefer sending request data as form data, as would be used +when submitting an HTML form. JSON can represent more complex data, but +unless you need that it's better to stick with the simpler format. When +sending JSON data, the ``Content-Type: application/json`` header must be +sent as well, otherwise Flask will return a 400 error. + +.. code-block:: javascript + + let data = { + "name": "Flask Room", + "description": "Talk about Flask here.", + } + fetch(room_url, { + "method": "POST", + "headers": {"Content-Type": "application/json"}, + "body": JSON.stringify(data), + }).then(...) + +.. |Promise| replace:: ``Promise`` +.. _Promise: https://developer.mozilla.org/Web/JavaScript/Reference/Global_Objects/Promise +.. |FormData| replace:: ``FormData`` +.. _FormData: https://developer.mozilla.org/en-US/docs/Web/API/FormData + + +Following Redirects +------------------- + +A response might be a redirect, for example if you logged in with +JavaScript instead of a traditional HTML form, and your view returned +a redirect instead of JSON. JavaScript requests do follow redirects, but +they don't change the page. If you want to make the page change you can +inspect the response and apply the redirect manually. + +.. code-block:: javascript + + fetch("/login", {"body": ...}).then( + response => { + if (response.redirected) { + window.location = response.url + } else { + showLoginError() + } + } + ) + + +Replacing Content +----------------- + +A response might be new HTML, either a new section of the page to add or +replace, or an entirely new page. In general, if you're returning the +entire page, it would be better to handle that with a redirect as shown +in the previous section. The following example shows how to replace a +``
`` with the HTML returned by a request. + +.. code-block:: html + +
+ {{ include "geology_fact.html" }} +
+ + + +Return JSON from Views +---------------------- + +To return a JSON object from your API view, you can directly return a +dict from the view. It will be serialized to JSON automatically. + +.. code-block:: python + + @app.route("/user/") + def user_detail(id): + user = User.query.get_or_404(id) + return { + "username": User.username, + "email": User.email, + "picture": url_for("static", filename=f"users/{id}/profile.png"), + } + +If you want to return another JSON type, use the +:func:`~flask.json.jsonify` function, which creates a response object +with the given data serialized to JSON. + +.. code-block:: python + + from flask import jsonify + + @app.route("/users") + def user_list(): + users = User.query.order_by(User.name).all() + return jsonify([u.to_json() for u in users]) + +It is usually not a good idea to return file data in a JSON response. +JSON cannot represent binary data directly, so it must be base64 +encoded, which can be slow, takes more bandwidth to send, and is not as +easy to cache. Instead, serve files using one view, and generate a URL +to the desired file to include in the JSON. Then the client can make a +separate request to get the linked resource after getting the JSON. + + +Receiving JSON in Views +----------------------- + +Use the :attr:`~flask.Request.json` property of the +:data:`~flask.request` object to decode the request's body as JSON. If +the body is not valid JSON, or the ``Content-Type`` header is not set to +``application/json``, a 400 Bad Request error will be raised. + +.. code-block:: python + + from flask import request + + @app.post("/user/") + def user_update(id): + user = User.query.get_or_404(id) + user.update_from_json(request.json) + db.session.commit() + return user.to_json() diff --git a/_build/_sources/patterns/jquery.rst.txt b/_build/_sources/patterns/jquery.rst.txt new file mode 100644 index 00000000..7ac6856e --- /dev/null +++ b/_build/_sources/patterns/jquery.rst.txt @@ -0,0 +1,6 @@ +:orphan: + +AJAX with jQuery +================ + +Obsolete, see :doc:`/patterns/javascript` instead. diff --git a/_build/_sources/patterns/lazyloading.rst.txt b/_build/_sources/patterns/lazyloading.rst.txt new file mode 100644 index 00000000..658a1cd4 --- /dev/null +++ b/_build/_sources/patterns/lazyloading.rst.txt @@ -0,0 +1,109 @@ +Lazily Loading Views +==================== + +Flask is usually used with the decorators. Decorators are simple and you +have the URL right next to the function that is called for that specific +URL. However there is a downside to this approach: it means all your code +that uses decorators has to be imported upfront or Flask will never +actually find your function. + +This can be a problem if your application has to import quick. It might +have to do that on systems like Google's App Engine or other systems. So +if you suddenly notice that your application outgrows this approach you +can fall back to a centralized URL mapping. + +The system that enables having a central URL map is the +:meth:`~flask.Flask.add_url_rule` function. Instead of using decorators, +you have a file that sets up the application with all URLs. + +Converting to Centralized URL Map +--------------------------------- + +Imagine the current application looks somewhat like this:: + + from flask import Flask + app = Flask(__name__) + + @app.route('/') + def index(): + pass + + @app.route('/user/') + def user(username): + pass + +Then, with the centralized approach you would have one file with the views +(:file:`views.py`) but without any decorator:: + + def index(): + pass + + def user(username): + pass + +And then a file that sets up an application which maps the functions to +URLs:: + + from flask import Flask + from yourapplication import views + app = Flask(__name__) + app.add_url_rule('/', view_func=views.index) + app.add_url_rule('/user/', view_func=views.user) + +Loading Late +------------ + +So far we only split up the views and the routing, but the module is still +loaded upfront. The trick is to actually load the view function as needed. +This can be accomplished with a helper class that behaves just like a +function but internally imports the real function on first use:: + + from werkzeug.utils import import_string, cached_property + + class LazyView(object): + + def __init__(self, import_name): + self.__module__, self.__name__ = import_name.rsplit('.', 1) + self.import_name = import_name + + @cached_property + def view(self): + return import_string(self.import_name) + + def __call__(self, *args, **kwargs): + return self.view(*args, **kwargs) + +What's important here is is that `__module__` and `__name__` are properly +set. This is used by Flask internally to figure out how to name the +URL rules in case you don't provide a name for the rule yourself. + +Then you can define your central place to combine the views like this:: + + from flask import Flask + from yourapplication.helpers import LazyView + app = Flask(__name__) + app.add_url_rule('/', + view_func=LazyView('yourapplication.views.index')) + app.add_url_rule('/user/', + view_func=LazyView('yourapplication.views.user')) + +You can further optimize this in terms of amount of keystrokes needed to +write this by having a function that calls into +:meth:`~flask.Flask.add_url_rule` by prefixing a string with the project +name and a dot, and by wrapping `view_func` in a `LazyView` as needed. :: + + def url(import_name, url_rules=[], **options): + view = LazyView(f"yourapplication.{import_name}") + for url_rule in url_rules: + app.add_url_rule(url_rule, view_func=view, **options) + + # add a single route to the index view + url('views.index', ['/']) + + # add two routes to a single function endpoint + url_rules = ['/user/','/user/'] + url('views.user', url_rules) + +One thing to keep in mind is that before and after request handlers have +to be in a file that is imported upfront to work properly on the first +request. The same goes for any kind of remaining decorator. diff --git a/_build/_sources/patterns/methodoverrides.rst.txt b/_build/_sources/patterns/methodoverrides.rst.txt new file mode 100644 index 00000000..45dbb87e --- /dev/null +++ b/_build/_sources/patterns/methodoverrides.rst.txt @@ -0,0 +1,42 @@ +Adding HTTP Method Overrides +============================ + +Some HTTP proxies do not support arbitrary HTTP methods or newer HTTP +methods (such as PATCH). In that case it's possible to "proxy" HTTP +methods through another HTTP method in total violation of the protocol. + +The way this works is by letting the client do an HTTP POST request and +set the ``X-HTTP-Method-Override`` header. Then the method is replaced +with the header value before being passed to Flask. + +This can be accomplished with an HTTP middleware:: + + class HTTPMethodOverrideMiddleware(object): + allowed_methods = frozenset([ + 'GET', + 'HEAD', + 'POST', + 'DELETE', + 'PUT', + 'PATCH', + 'OPTIONS' + ]) + bodyless_methods = frozenset(['GET', 'HEAD', 'OPTIONS', 'DELETE']) + + def __init__(self, app): + self.app = app + + def __call__(self, environ, start_response): + method = environ.get('HTTP_X_HTTP_METHOD_OVERRIDE', '').upper() + if method in self.allowed_methods: + environ['REQUEST_METHOD'] = method + if method in self.bodyless_methods: + environ['CONTENT_LENGTH'] = '0' + return self.app(environ, start_response) + +To use this with Flask, wrap the app object with the middleware:: + + from flask import Flask + + app = Flask(__name__) + app.wsgi_app = HTTPMethodOverrideMiddleware(app.wsgi_app) diff --git a/_build/_sources/patterns/mongoengine.rst.txt b/_build/_sources/patterns/mongoengine.rst.txt new file mode 100644 index 00000000..015e7b61 --- /dev/null +++ b/_build/_sources/patterns/mongoengine.rst.txt @@ -0,0 +1,103 @@ +MongoDB with MongoEngine +======================== + +Using a document database like MongoDB is a common alternative to +relational SQL databases. This pattern shows how to use +`MongoEngine`_, a document mapper library, to integrate with MongoDB. + +A running MongoDB server and `Flask-MongoEngine`_ are required. :: + + pip install flask-mongoengine + +.. _MongoEngine: http://mongoengine.org +.. _Flask-MongoEngine: https://flask-mongoengine.readthedocs.io + + +Configuration +------------- + +Basic setup can be done by defining ``MONGODB_SETTINGS`` on +``app.config`` and creating a ``MongoEngine`` instance. :: + + from flask import Flask + from flask_mongoengine import MongoEngine + + app = Flask(__name__) + app.config['MONGODB_SETTINGS'] = { + "db": "myapp", + } + db = MongoEngine(app) + + +Mapping Documents +----------------- + +To declare a model that represents a Mongo document, create a class that +inherits from ``Document`` and declare each of the fields. :: + + import mongoengine as me + + class Movie(me.Document): + title = me.StringField(required=True) + year = me.IntField() + rated = me.StringField() + director = me.StringField() + actors = me.ListField() + +If the document has nested fields, use ``EmbeddedDocument`` to +defined the fields of the embedded document and +``EmbeddedDocumentField`` to declare it on the parent document. :: + + class Imdb(me.EmbeddedDocument): + imdb_id = me.StringField() + rating = me.DecimalField() + votes = me.IntField() + + class Movie(me.Document): + ... + imdb = me.EmbeddedDocumentField(Imdb) + + +Creating Data +------------- + +Instantiate your document class with keyword arguments for the fields. +You can also assign values to the field attributes after instantiation. +Then call ``doc.save()``. :: + + bttf = Movie(title="Back To The Future", year=1985) + bttf.actors = [ + "Michael J. Fox", + "Christopher Lloyd" + ] + bttf.imdb = Imdb(imdb_id="tt0088763", rating=8.5) + bttf.save() + + +Queries +------- + +Use the class ``objects`` attribute to make queries. A keyword argument +looks for an equal value on the field. :: + + bttf = Movies.objects(title="Back To The Future").get_or_404() + +Query operators may be used by concatenating them with the field name +using a double-underscore. ``objects``, and queries returned by +calling it, are iterable. :: + + some_theron_movie = Movie.objects(actors__in=["Charlize Theron"]).first() + + for recents in Movie.objects(year__gte=2017): + print(recents.title) + + +Documentation +------------- + +There are many more ways to define and query documents with MongoEngine. +For more information, check out the `official documentation +`_. + +Flask-MongoEngine adds helpful utilities on top of MongoEngine. Check +out their `documentation `_ as well. diff --git a/_build/_sources/patterns/packages.rst.txt b/_build/_sources/patterns/packages.rst.txt new file mode 100644 index 00000000..90fa8a8f --- /dev/null +++ b/_build/_sources/patterns/packages.rst.txt @@ -0,0 +1,133 @@ +Large Applications as Packages +============================== + +Imagine a simple flask application structure that looks like this:: + + /yourapplication + yourapplication.py + /static + style.css + /templates + layout.html + index.html + login.html + ... + +While this is fine for small applications, for larger applications +it's a good idea to use a package instead of a module. +The :doc:`/tutorial/index` is structured to use the package pattern, +see the :gh:`example code `. + +Simple Packages +--------------- + +To convert that into a larger one, just create a new folder +:file:`yourapplication` inside the existing one and move everything below it. +Then rename :file:`yourapplication.py` to :file:`__init__.py`. (Make sure to delete +all ``.pyc`` files first, otherwise things would most likely break) + +You should then end up with something like that:: + + /yourapplication + /yourapplication + __init__.py + /static + style.css + /templates + layout.html + index.html + login.html + ... + +But how do you run your application now? The naive ``python +yourapplication/__init__.py`` will not work. Let's just say that Python +does not want modules in packages to be the startup file. But that is not +a big problem, just add a new file called :file:`pyproject.toml` next to the inner +:file:`yourapplication` folder with the following contents: + +.. code-block:: toml + + [project] + name = "yourapplication" + dependencies = [ + "flask", + ] + + [build-system] + requires = ["flit_core<4"] + build-backend = "flit_core.buildapi" + +Install your application so it is importable: + +.. code-block:: text + + $ pip install -e . + +To use the ``flask`` command and run your application you need to set +the ``--app`` option that tells Flask where to find the application +instance: + +.. code-block:: text + + $ flask --app yourapplication run + +What did we gain from this? Now we can restructure the application a bit +into multiple modules. The only thing you have to remember is the +following quick checklist: + +1. the `Flask` application object creation has to be in the + :file:`__init__.py` file. That way each module can import it safely and the + `__name__` variable will resolve to the correct package. +2. all the view functions (the ones with a :meth:`~flask.Flask.route` + decorator on top) have to be imported in the :file:`__init__.py` file. + Not the object itself, but the module it is in. Import the view module + **after the application object is created**. + +Here's an example :file:`__init__.py`:: + + from flask import Flask + app = Flask(__name__) + + import yourapplication.views + +And this is what :file:`views.py` would look like:: + + from yourapplication import app + + @app.route('/') + def index(): + return 'Hello World!' + +You should then end up with something like that:: + + /yourapplication + pyproject.toml + /yourapplication + __init__.py + views.py + /static + style.css + /templates + layout.html + index.html + login.html + ... + +.. admonition:: Circular Imports + + Every Python programmer hates them, and yet we just added some: + circular imports (That's when two modules depend on each other. In this + case :file:`views.py` depends on :file:`__init__.py`). Be advised that this is a + bad idea in general but here it is actually fine. The reason for this is + that we are not actually using the views in :file:`__init__.py` and just + ensuring the module is imported and we are doing that at the bottom of + the file. + + +Working with Blueprints +----------------------- + +If you have larger applications it's recommended to divide them into +smaller groups where each group is implemented with the help of a +blueprint. For a gentle introduction into this topic refer to the +:doc:`/blueprints` chapter of the documentation. diff --git a/_build/_sources/patterns/requestchecksum.rst.txt b/_build/_sources/patterns/requestchecksum.rst.txt new file mode 100644 index 00000000..25bc38b2 --- /dev/null +++ b/_build/_sources/patterns/requestchecksum.rst.txt @@ -0,0 +1,55 @@ +Request Content Checksums +========================= + +Various pieces of code can consume the request data and preprocess it. +For instance JSON data ends up on the request object already read and +processed, form data ends up there as well but goes through a different +code path. This seems inconvenient when you want to calculate the +checksum of the incoming request data. This is necessary sometimes for +some APIs. + +Fortunately this is however very simple to change by wrapping the input +stream. + +The following example calculates the SHA1 checksum of the incoming data as +it gets read and stores it in the WSGI environment:: + + import hashlib + + class ChecksumCalcStream(object): + + def __init__(self, stream): + self._stream = stream + self._hash = hashlib.sha1() + + def read(self, bytes): + rv = self._stream.read(bytes) + self._hash.update(rv) + return rv + + def readline(self, size_hint): + rv = self._stream.readline(size_hint) + self._hash.update(rv) + return rv + + def generate_checksum(request): + env = request.environ + stream = ChecksumCalcStream(env['wsgi.input']) + env['wsgi.input'] = stream + return stream._hash + +To use this, all you need to do is to hook the calculating stream in +before the request starts consuming data. (Eg: be careful accessing +``request.form`` or anything of that nature. ``before_request_handlers`` +for instance should be careful not to access it). + +Example usage:: + + @app.route('/special-api', methods=['POST']) + def special_api(): + hash = generate_checksum(request) + # Accessing this parses the input stream + files = request.files + # At this point the hash is fully constructed. + checksum = hash.hexdigest() + return f"Hash was: {checksum}" diff --git a/_build/_sources/patterns/singlepageapplications.rst.txt b/_build/_sources/patterns/singlepageapplications.rst.txt new file mode 100644 index 00000000..1cb779b3 --- /dev/null +++ b/_build/_sources/patterns/singlepageapplications.rst.txt @@ -0,0 +1,24 @@ +Single-Page Applications +======================== + +Flask can be used to serve Single-Page Applications (SPA) by placing static +files produced by your frontend framework in a subfolder inside of your +project. You will also need to create a catch-all endpoint that routes all +requests to your SPA. + +The following example demonstrates how to serve an SPA along with an API:: + + from flask import Flask, jsonify + + app = Flask(__name__, static_folder='app', static_url_path="/app") + + + @app.route("/heartbeat") + def heartbeat(): + return jsonify({"status": "healthy"}) + + + @app.route('/', defaults={'path': ''}) + @app.route('/') + def catch_all(path): + return app.send_static_file("index.html") diff --git a/_build/_sources/patterns/sqlalchemy.rst.txt b/_build/_sources/patterns/sqlalchemy.rst.txt new file mode 100644 index 00000000..7e4108d0 --- /dev/null +++ b/_build/_sources/patterns/sqlalchemy.rst.txt @@ -0,0 +1,214 @@ +SQLAlchemy in Flask +=================== + +Many people prefer `SQLAlchemy`_ for database access. In this case it's +encouraged to use a package instead of a module for your flask application +and drop the models into a separate module (:doc:`packages`). While that +is not necessary, it makes a lot of sense. + +There are four very common ways to use SQLAlchemy. I will outline each +of them here: + +Flask-SQLAlchemy Extension +-------------------------- + +Because SQLAlchemy is a common database abstraction layer and object +relational mapper that requires a little bit of configuration effort, +there is a Flask extension that handles that for you. This is recommended +if you want to get started quickly. + +You can download `Flask-SQLAlchemy`_ from `PyPI +`_. + +.. _Flask-SQLAlchemy: https://flask-sqlalchemy.palletsprojects.com/ + + +Declarative +----------- + +The declarative extension in SQLAlchemy is the most recent method of using +SQLAlchemy. It allows you to define tables and models in one go, similar +to how Django works. In addition to the following text I recommend the +official documentation on the `declarative`_ extension. + +Here's the example :file:`database.py` module for your application:: + + from sqlalchemy import create_engine + from sqlalchemy.orm import scoped_session, sessionmaker, declarative_base + + engine = create_engine('sqlite:////tmp/test.db') + db_session = scoped_session(sessionmaker(autocommit=False, + autoflush=False, + bind=engine)) + Base = declarative_base() + Base.query = db_session.query_property() + + def init_db(): + # import all modules here that might define models so that + # they will be registered properly on the metadata. Otherwise + # you will have to import them first before calling init_db() + import yourapplication.models + Base.metadata.create_all(bind=engine) + +To define your models, just subclass the `Base` class that was created by +the code above. If you are wondering why we don't have to care about +threads here (like we did in the SQLite3 example above with the +:data:`~flask.g` object): that's because SQLAlchemy does that for us +already with the :class:`~sqlalchemy.orm.scoped_session`. + +To use SQLAlchemy in a declarative way with your application, you just +have to put the following code into your application module. Flask will +automatically remove database sessions at the end of the request or +when the application shuts down:: + + from yourapplication.database import db_session + + @app.teardown_appcontext + def shutdown_session(exception=None): + db_session.remove() + +Here is an example model (put this into :file:`models.py`, e.g.):: + + from sqlalchemy import Column, Integer, String + from yourapplication.database import Base + + class User(Base): + __tablename__ = 'users' + id = Column(Integer, primary_key=True) + name = Column(String(50), unique=True) + email = Column(String(120), unique=True) + + def __init__(self, name=None, email=None): + self.name = name + self.email = email + + def __repr__(self): + return f'' + +To create the database you can use the `init_db` function: + +>>> from yourapplication.database import init_db +>>> init_db() + +You can insert entries into the database like this: + +>>> from yourapplication.database import db_session +>>> from yourapplication.models import User +>>> u = User('admin', 'admin@localhost') +>>> db_session.add(u) +>>> db_session.commit() + +Querying is simple as well: + +>>> User.query.all() +[] +>>> User.query.filter(User.name == 'admin').first() + + +.. _SQLAlchemy: https://www.sqlalchemy.org/ +.. _declarative: https://docs.sqlalchemy.org/en/latest/orm/extensions/declarative/ + +Manual Object Relational Mapping +-------------------------------- + +Manual object relational mapping has a few upsides and a few downsides +versus the declarative approach from above. The main difference is that +you define tables and classes separately and map them together. It's more +flexible but a little more to type. In general it works like the +declarative approach, so make sure to also split up your application into +multiple modules in a package. + +Here is an example :file:`database.py` module for your application:: + + from sqlalchemy import create_engine, MetaData + from sqlalchemy.orm import scoped_session, sessionmaker + + engine = create_engine('sqlite:////tmp/test.db') + metadata = MetaData() + db_session = scoped_session(sessionmaker(autocommit=False, + autoflush=False, + bind=engine)) + def init_db(): + metadata.create_all(bind=engine) + +As in the declarative approach, you need to close the session after +each request or application context shutdown. Put this into your +application module:: + + from yourapplication.database import db_session + + @app.teardown_appcontext + def shutdown_session(exception=None): + db_session.remove() + +Here is an example table and model (put this into :file:`models.py`):: + + from sqlalchemy import Table, Column, Integer, String + from sqlalchemy.orm import mapper + from yourapplication.database import metadata, db_session + + class User(object): + query = db_session.query_property() + + def __init__(self, name=None, email=None): + self.name = name + self.email = email + + def __repr__(self): + return f'' + + users = Table('users', metadata, + Column('id', Integer, primary_key=True), + Column('name', String(50), unique=True), + Column('email', String(120), unique=True) + ) + mapper(User, users) + +Querying and inserting works exactly the same as in the example above. + + +SQL Abstraction Layer +--------------------- + +If you just want to use the database system (and SQL) abstraction layer +you basically only need the engine:: + + from sqlalchemy import create_engine, MetaData, Table + + engine = create_engine('sqlite:////tmp/test.db') + metadata = MetaData(bind=engine) + +Then you can either declare the tables in your code like in the examples +above, or automatically load them:: + + from sqlalchemy import Table + + users = Table('users', metadata, autoload=True) + +To insert data you can use the `insert` method. We have to get a +connection first so that we can use a transaction: + +>>> con = engine.connect() +>>> con.execute(users.insert(), name='admin', email='admin@localhost') + +SQLAlchemy will automatically commit for us. + +To query your database, you use the engine directly or use a connection: + +>>> users.select(users.c.id == 1).execute().first() +(1, 'admin', 'admin@localhost') + +These results are also dict-like tuples: + +>>> r = users.select(users.c.id == 1).execute().first() +>>> r['name'] +'admin' + +You can also pass strings of SQL statements to the +:meth:`~sqlalchemy.engine.base.Connection.execute` method: + +>>> engine.execute('select * from users where id = :1', [1]).first() +(1, 'admin', 'admin@localhost') + +For more information about SQLAlchemy, head over to the +`website `_. diff --git a/_build/_sources/patterns/sqlite3.rst.txt b/_build/_sources/patterns/sqlite3.rst.txt new file mode 100644 index 00000000..5932589f --- /dev/null +++ b/_build/_sources/patterns/sqlite3.rst.txt @@ -0,0 +1,147 @@ +Using SQLite 3 with Flask +========================= + +In Flask you can easily implement the opening of database connections on +demand and closing them when the context dies (usually at the end of the +request). + +Here is a simple example of how you can use SQLite 3 with Flask:: + + import sqlite3 + from flask import g + + DATABASE = '/path/to/database.db' + + def get_db(): + db = getattr(g, '_database', None) + if db is None: + db = g._database = sqlite3.connect(DATABASE) + return db + + @app.teardown_appcontext + def close_connection(exception): + db = getattr(g, '_database', None) + if db is not None: + db.close() + +Now, to use the database, the application must either have an active +application context (which is always true if there is a request in flight) +or create an application context itself. At that point the ``get_db`` +function can be used to get the current database connection. Whenever the +context is destroyed the database connection will be terminated. + +Example:: + + @app.route('/') + def index(): + cur = get_db().cursor() + ... + + +.. note:: + + Please keep in mind that the teardown request and appcontext functions + are always executed, even if a before-request handler failed or was + never executed. Because of this we have to make sure here that the + database is there before we close it. + +Connect on Demand +----------------- + +The upside of this approach (connecting on first use) is that this will +only open the connection if truly necessary. If you want to use this +code outside a request context you can use it in a Python shell by opening +the application context by hand:: + + with app.app_context(): + # now you can use get_db() + + +Easy Querying +------------- + +Now in each request handling function you can access `get_db()` to get the +current open database connection. To simplify working with SQLite, a +row factory function is useful. It is executed for every result returned +from the database to convert the result. For instance, in order to get +dictionaries instead of tuples, this could be inserted into the ``get_db`` +function we created above:: + + def make_dicts(cursor, row): + return dict((cursor.description[idx][0], value) + for idx, value in enumerate(row)) + + db.row_factory = make_dicts + +This will make the sqlite3 module return dicts for this database connection, which are much nicer to deal with. Even more simply, we could place this in ``get_db`` instead:: + + db.row_factory = sqlite3.Row + +This would use Row objects rather than dicts to return the results of queries. These are ``namedtuple`` s, so we can access them either by index or by key. For example, assuming we have a ``sqlite3.Row`` called ``r`` for the rows ``id``, ``FirstName``, ``LastName``, and ``MiddleInitial``:: + + >>> # You can get values based on the row's name + >>> r['FirstName'] + John + >>> # Or, you can get them based on index + >>> r[1] + John + # Row objects are also iterable: + >>> for value in r: + ... print(value) + 1 + John + Doe + M + +Additionally, it is a good idea to provide a query function that combines +getting the cursor, executing and fetching the results:: + + def query_db(query, args=(), one=False): + cur = get_db().execute(query, args) + rv = cur.fetchall() + cur.close() + return (rv[0] if rv else None) if one else rv + +This handy little function, in combination with a row factory, makes +working with the database much more pleasant than it is by just using the +raw cursor and connection objects. + +Here is how you can use it:: + + for user in query_db('select * from users'): + print(user['username'], 'has the id', user['user_id']) + +Or if you just want a single result:: + + user = query_db('select * from users where username = ?', + [the_username], one=True) + if user is None: + print('No such user') + else: + print(the_username, 'has the id', user['user_id']) + +To pass variable parts to the SQL statement, use a question mark in the +statement and pass in the arguments as a list. Never directly add them to +the SQL statement with string formatting because this makes it possible +to attack the application using `SQL Injections +`_. + +Initial Schemas +--------------- + +Relational databases need schemas, so applications often ship a +`schema.sql` file that creates the database. It's a good idea to provide +a function that creates the database based on that schema. This function +can do that for you:: + + def init_db(): + with app.app_context(): + db = get_db() + with app.open_resource('schema.sql', mode='r') as f: + db.cursor().executescript(f.read()) + db.commit() + +You can then create such a database from the Python shell: + +>>> from yourapplication import init_db +>>> init_db() diff --git a/_build/_sources/patterns/streaming.rst.txt b/_build/_sources/patterns/streaming.rst.txt new file mode 100644 index 00000000..c9e6ef22 --- /dev/null +++ b/_build/_sources/patterns/streaming.rst.txt @@ -0,0 +1,85 @@ +Streaming Contents +================== + +Sometimes you want to send an enormous amount of data to the client, much +more than you want to keep in memory. When you are generating the data on +the fly though, how do you send that back to the client without the +roundtrip to the filesystem? + +The answer is by using generators and direct responses. + +Basic Usage +----------- + +This is a basic view function that generates a lot of CSV data on the fly. +The trick is to have an inner function that uses a generator to generate +data and to then invoke that function and pass it to a response object:: + + @app.route('/large.csv') + def generate_large_csv(): + def generate(): + for row in iter_all_rows(): + yield f"{','.join(row)}\n" + return generate(), {"Content-Type": "text/csv"} + +Each ``yield`` expression is directly sent to the browser. Note though +that some WSGI middlewares might break streaming, so be careful there in +debug environments with profilers and other things you might have enabled. + +Streaming from Templates +------------------------ + +The Jinja2 template engine supports rendering a template piece by +piece, returning an iterator of strings. Flask provides the +:func:`~flask.stream_template` and :func:`~flask.stream_template_string` +functions to make this easier to use. + +.. code-block:: python + + from flask import stream_template + + @app.get("/timeline") + def timeline(): + return stream_template("timeline.html") + +The parts yielded by the render stream tend to match statement blocks in +the template. + + +Streaming with Context +---------------------- + +The :data:`~flask.request` will not be active while the generator is +running, because the view has already returned at that point. If you try +to access ``request``, you'll get a ``RuntimeError``. + +If your generator function relies on data in ``request``, use the +:func:`~flask.stream_with_context` wrapper. This will keep the request +context active during the generator. + +.. code-block:: python + + from flask import stream_with_context, request + from markupsafe import escape + + @app.route('/stream') + def streamed_response(): + def generate(): + yield '

Hello ' + yield escape(request.args['name']) + yield '!

' + return stream_with_context(generate()) + +It can also be used as a decorator. + +.. code-block:: python + + @stream_with_context + def generate(): + ... + + return generate() + +The :func:`~flask.stream_template` and +:func:`~flask.stream_template_string` functions automatically +use :func:`~flask.stream_with_context` if a request is active. diff --git a/_build/_sources/patterns/subclassing.rst.txt b/_build/_sources/patterns/subclassing.rst.txt new file mode 100644 index 00000000..d8de2335 --- /dev/null +++ b/_build/_sources/patterns/subclassing.rst.txt @@ -0,0 +1,17 @@ +Subclassing Flask +================= + +The :class:`~flask.Flask` class is designed for subclassing. + +For example, you may want to override how request parameters are handled to preserve their order:: + + from flask import Flask, Request + from werkzeug.datastructures import ImmutableOrderedMultiDict + class MyRequest(Request): + """Request subclass to override request parameter storage""" + parameter_storage_class = ImmutableOrderedMultiDict + class MyFlask(Flask): + """Flask subclass using the custom request class""" + request_class = MyRequest + +This is the recommended approach for overriding or augmenting Flask's internal functionality. diff --git a/_build/_sources/patterns/templateinheritance.rst.txt b/_build/_sources/patterns/templateinheritance.rst.txt new file mode 100644 index 00000000..bb5cba27 --- /dev/null +++ b/_build/_sources/patterns/templateinheritance.rst.txt @@ -0,0 +1,68 @@ +Template Inheritance +==================== + +The most powerful part of Jinja is template inheritance. Template inheritance +allows you to build a base "skeleton" template that contains all the common +elements of your site and defines **blocks** that child templates can override. + +Sounds complicated but is very basic. It's easiest to understand it by starting +with an example. + + +Base Template +------------- + +This template, which we'll call :file:`layout.html`, defines a simple HTML skeleton +document that you might use for a simple two-column page. It's the job of +"child" templates to fill the empty blocks with content: + +.. sourcecode:: html+jinja + + + + + {% block head %} + + {% block title %}{% endblock %} - My Webpage + {% endblock %} + + +
{% block content %}{% endblock %}
+ + + + +In this example, the ``{% block %}`` tags define four blocks that child templates +can fill in. All the `block` tag does is tell the template engine that a +child template may override those portions of the template. + +Child Template +-------------- + +A child template might look like this: + +.. sourcecode:: html+jinja + + {% extends "layout.html" %} + {% block title %}Index{% endblock %} + {% block head %} + {{ super() }} + + {% endblock %} + {% block content %} +

Index

+

+ Welcome on my awesome homepage. + {% endblock %} + +The ``{% extends %}`` tag is the key here. It tells the template engine that +this template "extends" another template. When the template system evaluates +this template, first it locates the parent. The extends tag must be the +first tag in the template. To render the contents of a block defined in +the parent template, use ``{{ super() }}``. diff --git a/_build/_sources/patterns/urlprocessors.rst.txt b/_build/_sources/patterns/urlprocessors.rst.txt new file mode 100644 index 00000000..0d743205 --- /dev/null +++ b/_build/_sources/patterns/urlprocessors.rst.txt @@ -0,0 +1,126 @@ +Using URL Processors +==================== + +.. versionadded:: 0.7 + +Flask 0.7 introduces the concept of URL processors. The idea is that you +might have a bunch of resources with common parts in the URL that you +don't always explicitly want to provide. For instance you might have a +bunch of URLs that have the language code in it but you don't want to have +to handle it in every single function yourself. + +URL processors are especially helpful when combined with blueprints. We +will handle both application specific URL processors here as well as +blueprint specifics. + +Internationalized Application URLs +---------------------------------- + +Consider an application like this:: + + from flask import Flask, g + + app = Flask(__name__) + + @app.route('//') + def index(lang_code): + g.lang_code = lang_code + ... + + @app.route('//about') + def about(lang_code): + g.lang_code = lang_code + ... + +This is an awful lot of repetition as you have to handle the language code +setting on the :data:`~flask.g` object yourself in every single function. +Sure, a decorator could be used to simplify this, but if you want to +generate URLs from one function to another you would have to still provide +the language code explicitly which can be annoying. + +For the latter, this is where :func:`~flask.Flask.url_defaults` functions +come in. They can automatically inject values into a call to +:func:`~flask.url_for`. The code below checks if the +language code is not yet in the dictionary of URL values and if the +endpoint wants a value named ``'lang_code'``:: + + @app.url_defaults + def add_language_code(endpoint, values): + if 'lang_code' in values or not g.lang_code: + return + if app.url_map.is_endpoint_expecting(endpoint, 'lang_code'): + values['lang_code'] = g.lang_code + +The method :meth:`~werkzeug.routing.Map.is_endpoint_expecting` of the URL +map can be used to figure out if it would make sense to provide a language +code for the given endpoint. + +The reverse of that function are +:meth:`~flask.Flask.url_value_preprocessor`\s. They are executed right +after the request was matched and can execute code based on the URL +values. The idea is that they pull information out of the values +dictionary and put it somewhere else:: + + @app.url_value_preprocessor + def pull_lang_code(endpoint, values): + g.lang_code = values.pop('lang_code', None) + +That way you no longer have to do the `lang_code` assignment to +:data:`~flask.g` in every function. You can further improve that by +writing your own decorator that prefixes URLs with the language code, but +the more beautiful solution is using a blueprint. Once the +``'lang_code'`` is popped from the values dictionary and it will no longer +be forwarded to the view function reducing the code to this:: + + from flask import Flask, g + + app = Flask(__name__) + + @app.url_defaults + def add_language_code(endpoint, values): + if 'lang_code' in values or not g.lang_code: + return + if app.url_map.is_endpoint_expecting(endpoint, 'lang_code'): + values['lang_code'] = g.lang_code + + @app.url_value_preprocessor + def pull_lang_code(endpoint, values): + g.lang_code = values.pop('lang_code', None) + + @app.route('//') + def index(): + ... + + @app.route('//about') + def about(): + ... + +Internationalized Blueprint URLs +-------------------------------- + +Because blueprints can automatically prefix all URLs with a common string +it's easy to automatically do that for every function. Furthermore +blueprints can have per-blueprint URL processors which removes a whole lot +of logic from the :meth:`~flask.Flask.url_defaults` function because it no +longer has to check if the URL is really interested in a ``'lang_code'`` +parameter:: + + from flask import Blueprint, g + + bp = Blueprint('frontend', __name__, url_prefix='/') + + @bp.url_defaults + def add_language_code(endpoint, values): + values.setdefault('lang_code', g.lang_code) + + @bp.url_value_preprocessor + def pull_lang_code(endpoint, values): + g.lang_code = values.pop('lang_code') + + @bp.route('/') + def index(): + ... + + @bp.route('/about') + def about(): + ... diff --git a/_build/_sources/patterns/viewdecorators.rst.txt b/_build/_sources/patterns/viewdecorators.rst.txt new file mode 100644 index 00000000..0b0479ef --- /dev/null +++ b/_build/_sources/patterns/viewdecorators.rst.txt @@ -0,0 +1,171 @@ +View Decorators +=============== + +Python has a really interesting feature called function decorators. This +allows some really neat things for web applications. Because each view in +Flask is a function, decorators can be used to inject additional +functionality to one or more functions. The :meth:`~flask.Flask.route` +decorator is the one you probably used already. But there are use cases +for implementing your own decorator. For instance, imagine you have a +view that should only be used by people that are logged in. If a user +goes to the site and is not logged in, they should be redirected to the +login page. This is a good example of a use case where a decorator is an +excellent solution. + +Login Required Decorator +------------------------ + +So let's implement such a decorator. A decorator is a function that +wraps and replaces another function. Since the original function is +replaced, you need to remember to copy the original function's information +to the new function. Use :func:`functools.wraps` to handle this for you. + +This example assumes that the login page is called ``'login'`` and that +the current user is stored in ``g.user`` and is ``None`` if there is no-one +logged in. :: + + from functools import wraps + from flask import g, request, redirect, url_for + + def login_required(f): + @wraps(f) + def decorated_function(*args, **kwargs): + if g.user is None: + return redirect(url_for('login', next=request.url)) + return f(*args, **kwargs) + return decorated_function + +To use the decorator, apply it as innermost decorator to a view function. +When applying further decorators, always remember +that the :meth:`~flask.Flask.route` decorator is the outermost. :: + + @app.route('/secret_page') + @login_required + def secret_page(): + pass + +.. note:: + The ``next`` value will exist in ``request.args`` after a ``GET`` request for + the login page. You'll have to pass it along when sending the ``POST`` request + from the login form. You can do this with a hidden input tag, then retrieve it + from ``request.form`` when logging the user in. :: + + + + +Caching Decorator +----------------- + +Imagine you have a view function that does an expensive calculation and +because of that you would like to cache the generated results for a +certain amount of time. A decorator would be nice for that. We're +assuming you have set up a cache like mentioned in :doc:`caching`. + +Here is an example cache function. It generates the cache key from a +specific prefix (actually a format string) and the current path of the +request. Notice that we are using a function that first creates the +decorator that then decorates the function. Sounds awful? Unfortunately +it is a little bit more complex, but the code should still be +straightforward to read. + +The decorated function will then work as follows + +1. get the unique cache key for the current request based on the current + path. +2. get the value for that key from the cache. If the cache returned + something we will return that value. +3. otherwise the original function is called and the return value is + stored in the cache for the timeout provided (by default 5 minutes). + +Here the code:: + + from functools import wraps + from flask import request + + def cached(timeout=5 * 60, key='view/{}'): + def decorator(f): + @wraps(f) + def decorated_function(*args, **kwargs): + cache_key = key.format(request.path) + rv = cache.get(cache_key) + if rv is not None: + return rv + rv = f(*args, **kwargs) + cache.set(cache_key, rv, timeout=timeout) + return rv + return decorated_function + return decorator + +Notice that this assumes an instantiated ``cache`` object is available, see +:doc:`caching`. + + +Templating Decorator +-------------------- + +A common pattern invented by the TurboGears guys a while back is a +templating decorator. The idea of that decorator is that you return a +dictionary with the values passed to the template from the view function +and the template is automatically rendered. With that, the following +three examples do exactly the same:: + + @app.route('/') + def index(): + return render_template('index.html', value=42) + + @app.route('/') + @templated('index.html') + def index(): + return dict(value=42) + + @app.route('/') + @templated() + def index(): + return dict(value=42) + +As you can see, if no template name is provided it will use the endpoint +of the URL map with dots converted to slashes + ``'.html'``. Otherwise +the provided template name is used. When the decorated function returns, +the dictionary returned is passed to the template rendering function. If +``None`` is returned, an empty dictionary is assumed, if something else than +a dictionary is returned we return it from the function unchanged. That +way you can still use the redirect function or return simple strings. + +Here is the code for that decorator:: + + from functools import wraps + from flask import request, render_template + + def templated(template=None): + def decorator(f): + @wraps(f) + def decorated_function(*args, **kwargs): + template_name = template + if template_name is None: + template_name = f"{request.endpoint.replace('.', '/')}.html" + ctx = f(*args, **kwargs) + if ctx is None: + ctx = {} + elif not isinstance(ctx, dict): + return ctx + return render_template(template_name, **ctx) + return decorated_function + return decorator + + +Endpoint Decorator +------------------ + +When you want to use the werkzeug routing system for more flexibility you +need to map the endpoint as defined in the :class:`~werkzeug.routing.Rule` +to a view function. This is possible with this decorator. For example:: + + from flask import Flask + from werkzeug.routing import Rule + + app = Flask(__name__) + app.url_map.add(Rule('/', endpoint='index')) + + @app.endpoint('index') + def my_index(): + return "Hello world" diff --git a/_build/_sources/patterns/wtforms.rst.txt b/_build/_sources/patterns/wtforms.rst.txt new file mode 100644 index 00000000..3d626f50 --- /dev/null +++ b/_build/_sources/patterns/wtforms.rst.txt @@ -0,0 +1,126 @@ +Form Validation with WTForms +============================ + +When you have to work with form data submitted by a browser view, code +quickly becomes very hard to read. There are libraries out there designed +to make this process easier to manage. One of them is `WTForms`_ which we +will handle here. If you find yourself in the situation of having many +forms, you might want to give it a try. + +When you are working with WTForms you have to define your forms as classes +first. I recommend breaking up the application into multiple modules +(:doc:`packages`) for that and adding a separate module for the +forms. + +.. admonition:: Getting the most out of WTForms with an Extension + + The `Flask-WTF`_ extension expands on this pattern and adds a + few little helpers that make working with forms and Flask more + fun. You can get it from `PyPI + `_. + +.. _Flask-WTF: https://flask-wtf.readthedocs.io/ + +The Forms +--------- + +This is an example form for a typical registration page:: + + from wtforms import Form, BooleanField, StringField, PasswordField, validators + + class RegistrationForm(Form): + username = StringField('Username', [validators.Length(min=4, max=25)]) + email = StringField('Email Address', [validators.Length(min=6, max=35)]) + password = PasswordField('New Password', [ + validators.DataRequired(), + validators.EqualTo('confirm', message='Passwords must match') + ]) + confirm = PasswordField('Repeat Password') + accept_tos = BooleanField('I accept the TOS', [validators.DataRequired()]) + +In the View +----------- + +In the view function, the usage of this form looks like this:: + + @app.route('/register', methods=['GET', 'POST']) + def register(): + form = RegistrationForm(request.form) + if request.method == 'POST' and form.validate(): + user = User(form.username.data, form.email.data, + form.password.data) + db_session.add(user) + flash('Thanks for registering') + return redirect(url_for('login')) + return render_template('register.html', form=form) + +Notice we're implying that the view is using SQLAlchemy here +(:doc:`sqlalchemy`), but that's not a requirement, of course. Adapt +the code as necessary. + +Things to remember: + +1. create the form from the request :attr:`~flask.request.form` value if + the data is submitted via the HTTP ``POST`` method and + :attr:`~flask.request.args` if the data is submitted as ``GET``. +2. to validate the data, call the :func:`~wtforms.form.Form.validate` + method, which will return ``True`` if the data validates, ``False`` + otherwise. +3. to access individual values from the form, access `form..data`. + +Forms in Templates +------------------ + +Now to the template side. When you pass the form to the templates, you can +easily render them there. Look at the following example template to see +how easy this is. WTForms does half the form generation for us already. +To make it even nicer, we can write a macro that renders a field with +label and a list of errors if there are any. + +Here's an example :file:`_formhelpers.html` template with such a macro: + +.. sourcecode:: html+jinja + + {% macro render_field(field) %} +

{{ field.label }} +
{{ field(**kwargs)|safe }} + {% if field.errors %} +
    + {% for error in field.errors %} +
  • {{ error }}
  • + {% endfor %} +
+ {% endif %} +
+ {% endmacro %} + +This macro accepts a couple of keyword arguments that are forwarded to +WTForm's field function, which renders the field for us. The keyword +arguments will be inserted as HTML attributes. So, for example, you can +call ``render_field(form.username, class='username')`` to add a class to +the input element. Note that WTForms returns standard Python strings, +so we have to tell Jinja2 that this data is already HTML-escaped with +the ``|safe`` filter. + +Here is the :file:`register.html` template for the function we used above, which +takes advantage of the :file:`_formhelpers.html` template: + +.. sourcecode:: html+jinja + + {% from "_formhelpers.html" import render_field %} + +
+ {{ render_field(form.username) }} + {{ render_field(form.email) }} + {{ render_field(form.password) }} + {{ render_field(form.confirm) }} + {{ render_field(form.accept_tos) }} +
+

+

+ +For more information about WTForms, head over to the `WTForms +website`_. + +.. _WTForms: https://wtforms.readthedocs.io/ +.. _WTForms website: https://wtforms.readthedocs.io/ diff --git a/_build/_sources/quickstart.rst.txt b/_build/_sources/quickstart.rst.txt new file mode 100644 index 00000000..f763bb1e --- /dev/null +++ b/_build/_sources/quickstart.rst.txt @@ -0,0 +1,907 @@ +Quickstart +========== + +Eager to get started? This page gives a good introduction to Flask. +Follow :doc:`installation` to set up a project and install Flask first. + + +A Minimal Application +--------------------- + +A minimal Flask application looks something like this: + +.. code-block:: python + + from flask import Flask + + app = Flask(__name__) + + @app.route("/") + def hello_world(): + return "

Hello, World!

" + +So what did that code do? + +1. First we imported the :class:`~flask.Flask` class. An instance of + this class will be our WSGI application. +2. Next we create an instance of this class. The first argument is the + name of the application's module or package. ``__name__`` is a + convenient shortcut for this that is appropriate for most cases. + This is needed so that Flask knows where to look for resources such + as templates and static files. +3. We then use the :meth:`~flask.Flask.route` decorator to tell Flask + what URL should trigger our function. +4. The function returns the message we want to display in the user's + browser. The default content type is HTML, so HTML in the string + will be rendered by the browser. + +Save it as :file:`hello.py` or something similar. Make sure to not call +your application :file:`flask.py` because this would conflict with Flask +itself. + +To run the application, use the ``flask`` command or +``python -m flask``. You need to tell the Flask where your application +is with the ``--app`` option. + +.. code-block:: text + + $ flask --app hello run + * Serving Flask app 'hello' + * Running on http://127.0.0.1:5000 (Press CTRL+C to quit) + +.. admonition:: Application Discovery Behavior + + As a shortcut, if the file is named ``app.py`` or ``wsgi.py``, you + don't have to use ``--app``. See :doc:`/cli` for more details. + +This launches a very simple builtin server, which is good enough for +testing but probably not what you want to use in production. For +deployment options see :doc:`deploying/index`. + +Now head over to http://127.0.0.1:5000/, and you should see your hello +world greeting. + +If another program is already using port 5000, you'll see +``OSError: [Errno 98]`` or ``OSError: [WinError 10013]`` when the +server tries to start. See :ref:`address-already-in-use` for how to +handle that. + +.. _public-server: + +.. admonition:: Externally Visible Server + + If you run the server you will notice that the server is only accessible + from your own computer, not from any other in the network. This is the + default because in debugging mode a user of the application can execute + arbitrary Python code on your computer. + + If you have the debugger disabled or trust the users on your network, + you can make the server publicly available simply by adding + ``--host=0.0.0.0`` to the command line:: + + $ flask run --host=0.0.0.0 + + This tells your operating system to listen on all public IPs. + + +Debug Mode +---------- + +The ``flask run`` command can do more than just start the development +server. By enabling debug mode, the server will automatically reload if +code changes, and will show an interactive debugger in the browser if an +error occurs during a request. + +.. image:: _static/debugger.png + :align: center + :class: screenshot + :alt: The interactive debugger in action. + +.. warning:: + + The debugger allows executing arbitrary Python code from the + browser. It is protected by a pin, but still represents a major + security risk. Do not run the development server or debugger in a + production environment. + +To enable debug mode, use the ``--debug`` option. + +.. code-block:: text + + $ flask --app hello run --debug + * Serving Flask app 'hello' + * Debug mode: on + * Running on http://127.0.0.1:5000 (Press CTRL+C to quit) + * Restarting with stat + * Debugger is active! + * Debugger PIN: nnn-nnn-nnn + +See also: + +- :doc:`/server` and :doc:`/cli` for information about running in debug mode. +- :doc:`/debugging` for information about using the built-in debugger + and other debuggers. +- :doc:`/logging` and :doc:`/errorhandling` to log errors and display + nice error pages. + + +HTML Escaping +------------- + +When returning HTML (the default response type in Flask), any +user-provided values rendered in the output must be escaped to protect +from injection attacks. HTML templates rendered with Jinja, introduced +later, will do this automatically. + +:func:`~markupsafe.escape`, shown here, can be used manually. It is +omitted in most examples for brevity, but you should always be aware of +how you're using untrusted data. + +.. code-block:: python + + from markupsafe import escape + + @app.route("/") + def hello(name): + return f"Hello, {escape(name)}!" + +If a user managed to submit the name ````, +escaping causes it to be rendered as text, rather than running the +script in the user's browser. + +```` in the route captures a value from the URL and passes it to +the view function. These variable rules are explained below. + + +Routing +------- + +Modern web applications use meaningful URLs to help users. Users are more +likely to like a page and come back if the page uses a meaningful URL they can +remember and use to directly visit a page. + +Use the :meth:`~flask.Flask.route` decorator to bind a function to a URL. :: + + @app.route('/') + def index(): + return 'Index Page' + + @app.route('/hello') + def hello(): + return 'Hello, World' + +You can do more! You can make parts of the URL dynamic and attach multiple +rules to a function. + +Variable Rules +`````````````` + +You can add variable sections to a URL by marking sections with +````. Your function then receives the ```` +as a keyword argument. Optionally, you can use a converter to specify the type +of the argument like ````. :: + + from markupsafe import escape + + @app.route('/user/') + def show_user_profile(username): + # show the user profile for that user + return f'User {escape(username)}' + + @app.route('/post/') + def show_post(post_id): + # show the post with the given id, the id is an integer + return f'Post {post_id}' + + @app.route('/path/') + def show_subpath(subpath): + # show the subpath after /path/ + return f'Subpath {escape(subpath)}' + +Converter types: + +========== ========================================== +``string`` (default) accepts any text without a slash +``int`` accepts positive integers +``float`` accepts positive floating point values +``path`` like ``string`` but also accepts slashes +``uuid`` accepts UUID strings +========== ========================================== + + +Unique URLs / Redirection Behavior +`````````````````````````````````` + +The following two rules differ in their use of a trailing slash. :: + + @app.route('/projects/') + def projects(): + return 'The project page' + + @app.route('/about') + def about(): + return 'The about page' + +The canonical URL for the ``projects`` endpoint has a trailing slash. +It's similar to a folder in a file system. If you access the URL without +a trailing slash (``/projects``), Flask redirects you to the canonical URL +with the trailing slash (``/projects/``). + +The canonical URL for the ``about`` endpoint does not have a trailing +slash. It's similar to the pathname of a file. Accessing the URL with a +trailing slash (``/about/``) produces a 404 "Not Found" error. This helps +keep URLs unique for these resources, which helps search engines avoid +indexing the same page twice. + + +.. _url-building: + +URL Building +```````````` + +To build a URL to a specific function, use the :func:`~flask.url_for` function. +It accepts the name of the function as its first argument and any number of +keyword arguments, each corresponding to a variable part of the URL rule. +Unknown variable parts are appended to the URL as query parameters. + +Why would you want to build URLs using the URL reversing function +:func:`~flask.url_for` instead of hard-coding them into your templates? + +1. Reversing is often more descriptive than hard-coding the URLs. +2. You can change your URLs in one go instead of needing to remember to + manually change hard-coded URLs. +3. URL building handles escaping of special characters transparently. +4. The generated paths are always absolute, avoiding unexpected behavior + of relative paths in browsers. +5. If your application is placed outside the URL root, for example, in + ``/myapplication`` instead of ``/``, :func:`~flask.url_for` properly + handles that for you. + +For example, here we use the :meth:`~flask.Flask.test_request_context` method +to try out :func:`~flask.url_for`. :meth:`~flask.Flask.test_request_context` +tells Flask to behave as though it's handling a request even while we use a +Python shell. See :ref:`context-locals`. + +.. code-block:: python + + from flask import url_for + + @app.route('/') + def index(): + return 'index' + + @app.route('/login') + def login(): + return 'login' + + @app.route('/user/') + def profile(username): + return f'{username}\'s profile' + + with app.test_request_context(): + print(url_for('index')) + print(url_for('login')) + print(url_for('login', next='/')) + print(url_for('profile', username='John Doe')) + +.. code-block:: text + + / + /login + /login?next=/ + /user/John%20Doe + + +HTTP Methods +```````````` + +Web applications use different HTTP methods when accessing URLs. You should +familiarize yourself with the HTTP methods as you work with Flask. By default, +a route only answers to ``GET`` requests. You can use the ``methods`` argument +of the :meth:`~flask.Flask.route` decorator to handle different HTTP methods. +:: + + from flask import request + + @app.route('/login', methods=['GET', 'POST']) + def login(): + if request.method == 'POST': + return do_the_login() + else: + return show_the_login_form() + +The example above keeps all methods for the route within one function, +which can be useful if each part uses some common data. + +You can also separate views for different methods into different +functions. Flask provides a shortcut for decorating such routes with +:meth:`~flask.Flask.get`, :meth:`~flask.Flask.post`, etc. for each +common HTTP method. + +.. code-block:: python + + @app.get('/login') + def login_get(): + return show_the_login_form() + + @app.post('/login') + def login_post(): + return do_the_login() + +If ``GET`` is present, Flask automatically adds support for the ``HEAD`` method +and handles ``HEAD`` requests according to the `HTTP RFC`_. Likewise, +``OPTIONS`` is automatically implemented for you. + +.. _HTTP RFC: https://www.ietf.org/rfc/rfc2068.txt + +Static Files +------------ + +Dynamic web applications also need static files. That's usually where +the CSS and JavaScript files are coming from. Ideally your web server is +configured to serve them for you, but during development Flask can do that +as well. Just create a folder called :file:`static` in your package or next to +your module and it will be available at ``/static`` on the application. + +To generate URLs for static files, use the special ``'static'`` endpoint name:: + + url_for('static', filename='style.css') + +The file has to be stored on the filesystem as :file:`static/style.css`. + +Rendering Templates +------------------- + +Generating HTML from within Python is not fun, and actually pretty +cumbersome because you have to do the HTML escaping on your own to keep +the application secure. Because of that Flask configures the `Jinja2 +`_ template engine for you automatically. + +Templates can be used to generate any type of text file. For web applications, you'll +primarily be generating HTML pages, but you can also generate markdown, plain text for +emails, and anything else. + +For a reference to HTML, CSS, and other web APIs, use the `MDN Web Docs`_. + +.. _MDN Web Docs: https://developer.mozilla.org/ + +To render a template you can use the :func:`~flask.render_template` +method. All you have to do is provide the name of the template and the +variables you want to pass to the template engine as keyword arguments. +Here's a simple example of how to render a template:: + + from flask import render_template + + @app.route('/hello/') + @app.route('/hello/') + def hello(name=None): + return render_template('hello.html', person=name) + +Flask will look for templates in the :file:`templates` folder. So if your +application is a module, this folder is next to that module, if it's a +package it's actually inside your package: + +**Case 1**: a module:: + + /application.py + /templates + /hello.html + +**Case 2**: a package:: + + /application + /__init__.py + /templates + /hello.html + +For templates you can use the full power of Jinja2 templates. Head over +to the official `Jinja2 Template Documentation +`_ for more information. + +Here is an example template: + +.. sourcecode:: html+jinja + + + Hello from Flask + {% if person %} +

Hello {{ person }}!

+ {% else %} +

Hello, World!

+ {% endif %} + +Inside templates you also have access to the :data:`~flask.Flask.config`, +:class:`~flask.request`, :class:`~flask.session` and :class:`~flask.g` [#]_ objects +as well as the :func:`~flask.url_for` and :func:`~flask.get_flashed_messages` functions. + +Templates are especially useful if inheritance is used. If you want to +know how that works, see :doc:`patterns/templateinheritance`. Basically +template inheritance makes it possible to keep certain elements on each +page (like header, navigation and footer). + +Automatic escaping is enabled, so if ``person`` contains HTML it will be escaped +automatically. If you can trust a variable and you know that it will be +safe HTML (for example because it came from a module that converts wiki +markup to HTML) you can mark it as safe by using the +:class:`~markupsafe.Markup` class or by using the ``|safe`` filter in the +template. Head over to the Jinja 2 documentation for more examples. + +Here is a basic introduction to how the :class:`~markupsafe.Markup` class works:: + + >>> from markupsafe import Markup + >>> Markup('Hello %s!') % 'hacker' + Markup('Hello <blink>hacker</blink>!') + >>> Markup.escape('hacker') + Markup('<blink>hacker</blink>') + >>> Markup('Marked up » HTML').striptags() + 'Marked up » HTML' + +.. versionchanged:: 0.5 + + Autoescaping is no longer enabled for all templates. The following + extensions for templates trigger autoescaping: ``.html``, ``.htm``, + ``.xml``, ``.xhtml``. Templates loaded from a string will have + autoescaping disabled. + +.. [#] Unsure what that :class:`~flask.g` object is? It's something in which + you can store information for your own needs. See the documentation + for :class:`flask.g` and :doc:`patterns/sqlite3`. + + +Accessing Request Data +---------------------- + +For web applications it's crucial to react to the data a client sends to +the server. In Flask this information is provided by the global +:class:`~flask.request` object. If you have some experience with Python +you might be wondering how that object can be global and how Flask +manages to still be threadsafe. The answer is context locals: + + +.. _context-locals: + +Context Locals +`````````````` + +.. admonition:: Insider Information + + If you want to understand how that works and how you can implement + tests with context locals, read this section, otherwise just skip it. + +Certain objects in Flask are global objects, but not of the usual kind. +These objects are actually proxies to objects that are local to a specific +context. What a mouthful. But that is actually quite easy to understand. + +Imagine the context being the handling thread. A request comes in and the +web server decides to spawn a new thread (or something else, the +underlying object is capable of dealing with concurrency systems other +than threads). When Flask starts its internal request handling it +figures out that the current thread is the active context and binds the +current application and the WSGI environments to that context (thread). +It does that in an intelligent way so that one application can invoke another +application without breaking. + +So what does this mean to you? Basically you can completely ignore that +this is the case unless you are doing something like unit testing. You +will notice that code which depends on a request object will suddenly break +because there is no request object. The solution is creating a request +object yourself and binding it to the context. The easiest solution for +unit testing is to use the :meth:`~flask.Flask.test_request_context` +context manager. In combination with the ``with`` statement it will bind a +test request so that you can interact with it. Here is an example:: + + from flask import request + + with app.test_request_context('/hello', method='POST'): + # now you can do something with the request until the + # end of the with block, such as basic assertions: + assert request.path == '/hello' + assert request.method == 'POST' + +The other possibility is passing a whole WSGI environment to the +:meth:`~flask.Flask.request_context` method:: + + with app.request_context(environ): + assert request.method == 'POST' + +The Request Object +`````````````````` + +The request object is documented in the API section and we will not cover +it here in detail (see :class:`~flask.Request`). Here is a broad overview of +some of the most common operations. First of all you have to import it from +the ``flask`` module:: + + from flask import request + +The current request method is available by using the +:attr:`~flask.Request.method` attribute. To access form data (data +transmitted in a ``POST`` or ``PUT`` request) you can use the +:attr:`~flask.Request.form` attribute. Here is a full example of the two +attributes mentioned above:: + + @app.route('/login', methods=['POST', 'GET']) + def login(): + error = None + if request.method == 'POST': + if valid_login(request.form['username'], + request.form['password']): + return log_the_user_in(request.form['username']) + else: + error = 'Invalid username/password' + # the code below is executed if the request method + # was GET or the credentials were invalid + return render_template('login.html', error=error) + +What happens if the key does not exist in the ``form`` attribute? In that +case a special :exc:`KeyError` is raised. You can catch it like a +standard :exc:`KeyError` but if you don't do that, a HTTP 400 Bad Request +error page is shown instead. So for many situations you don't have to +deal with that problem. + +To access parameters submitted in the URL (``?key=value``) you can use the +:attr:`~flask.Request.args` attribute:: + + searchword = request.args.get('key', '') + +We recommend accessing URL parameters with `get` or by catching the +:exc:`KeyError` because users might change the URL and presenting them a 400 +bad request page in that case is not user friendly. + +For a full list of methods and attributes of the request object, head over +to the :class:`~flask.Request` documentation. + + +File Uploads +```````````` + +You can handle uploaded files with Flask easily. Just make sure not to +forget to set the ``enctype="multipart/form-data"`` attribute on your HTML +form, otherwise the browser will not transmit your files at all. + +Uploaded files are stored in memory or at a temporary location on the +filesystem. You can access those files by looking at the +:attr:`~flask.request.files` attribute on the request object. Each +uploaded file is stored in that dictionary. It behaves just like a +standard Python :class:`file` object, but it also has a +:meth:`~werkzeug.datastructures.FileStorage.save` method that +allows you to store that file on the filesystem of the server. +Here is a simple example showing how that works:: + + from flask import request + + @app.route('/upload', methods=['GET', 'POST']) + def upload_file(): + if request.method == 'POST': + f = request.files['the_file'] + f.save('/var/www/uploads/uploaded_file.txt') + ... + +If you want to know how the file was named on the client before it was +uploaded to your application, you can access the +:attr:`~werkzeug.datastructures.FileStorage.filename` attribute. +However please keep in mind that this value can be forged +so never ever trust that value. If you want to use the filename +of the client to store the file on the server, pass it through the +:func:`~werkzeug.utils.secure_filename` function that +Werkzeug provides for you:: + + from werkzeug.utils import secure_filename + + @app.route('/upload', methods=['GET', 'POST']) + def upload_file(): + if request.method == 'POST': + file = request.files['the_file'] + file.save(f"/var/www/uploads/{secure_filename(file.filename)}") + ... + +For some better examples, see :doc:`patterns/fileuploads`. + +Cookies +``````` + +To access cookies you can use the :attr:`~flask.Request.cookies` +attribute. To set cookies you can use the +:attr:`~flask.Response.set_cookie` method of response objects. The +:attr:`~flask.Request.cookies` attribute of request objects is a +dictionary with all the cookies the client transmits. If you want to use +sessions, do not use the cookies directly but instead use the +:ref:`sessions` in Flask that add some security on top of cookies for you. + +Reading cookies:: + + from flask import request + + @app.route('/') + def index(): + username = request.cookies.get('username') + # use cookies.get(key) instead of cookies[key] to not get a + # KeyError if the cookie is missing. + +Storing cookies:: + + from flask import make_response + + @app.route('/') + def index(): + resp = make_response(render_template(...)) + resp.set_cookie('username', 'the username') + return resp + +Note that cookies are set on response objects. Since you normally +just return strings from the view functions Flask will convert them into +response objects for you. If you explicitly want to do that you can use +the :meth:`~flask.make_response` function and then modify it. + +Sometimes you might want to set a cookie at a point where the response +object does not exist yet. This is possible by utilizing the +:doc:`patterns/deferredcallbacks` pattern. + +For this also see :ref:`about-responses`. + +Redirects and Errors +-------------------- + +To redirect a user to another endpoint, use the :func:`~flask.redirect` +function; to abort a request early with an error code, use the +:func:`~flask.abort` function:: + + from flask import abort, redirect, url_for + + @app.route('/') + def index(): + return redirect(url_for('login')) + + @app.route('/login') + def login(): + abort(401) + this_is_never_executed() + +This is a rather pointless example because a user will be redirected from +the index to a page they cannot access (401 means access denied) but it +shows how that works. + +By default a black and white error page is shown for each error code. If +you want to customize the error page, you can use the +:meth:`~flask.Flask.errorhandler` decorator:: + + from flask import render_template + + @app.errorhandler(404) + def page_not_found(error): + return render_template('page_not_found.html'), 404 + +Note the ``404`` after the :func:`~flask.render_template` call. This +tells Flask that the status code of that page should be 404 which means +not found. By default 200 is assumed which translates to: all went well. + +See :doc:`errorhandling` for more details. + +.. _about-responses: + +About Responses +--------------- + +The return value from a view function is automatically converted into +a response object for you. If the return value is a string it's +converted into a response object with the string as response body, a +``200 OK`` status code and a :mimetype:`text/html` mimetype. If the +return value is a dict or list, :func:`jsonify` is called to produce a +response. The logic that Flask applies to converting return values into +response objects is as follows: + +1. If a response object of the correct type is returned it's directly + returned from the view. +2. If it's a string, a response object is created with that data and + the default parameters. +3. If it's an iterator or generator returning strings or bytes, it is + treated as a streaming response. +4. If it's a dict or list, a response object is created using + :func:`~flask.json.jsonify`. +5. If a tuple is returned the items in the tuple can provide extra + information. Such tuples have to be in the form + ``(response, status)``, ``(response, headers)``, or + ``(response, status, headers)``. The ``status`` value will override + the status code and ``headers`` can be a list or dictionary of + additional header values. +6. If none of that works, Flask will assume the return value is a + valid WSGI application and convert that into a response object. + +If you want to get hold of the resulting response object inside the view +you can use the :func:`~flask.make_response` function. + +Imagine you have a view like this:: + + from flask import render_template + + @app.errorhandler(404) + def not_found(error): + return render_template('error.html'), 404 + +You just need to wrap the return expression with +:func:`~flask.make_response` and get the response object to modify it, then +return it:: + + from flask import make_response + + @app.errorhandler(404) + def not_found(error): + resp = make_response(render_template('error.html'), 404) + resp.headers['X-Something'] = 'A value' + return resp + + +APIs with JSON +`````````````` + +A common response format when writing an API is JSON. It's easy to get +started writing such an API with Flask. If you return a ``dict`` or +``list`` from a view, it will be converted to a JSON response. + +.. code-block:: python + + @app.route("/me") + def me_api(): + user = get_current_user() + return { + "username": user.username, + "theme": user.theme, + "image": url_for("user_image", filename=user.image), + } + + @app.route("/users") + def users_api(): + users = get_all_users() + return [user.to_json() for user in users] + +This is a shortcut to passing the data to the +:func:`~flask.json.jsonify` function, which will serialize any supported +JSON data type. That means that all the data in the dict or list must be +JSON serializable. + +For complex types such as database models, you'll want to use a +serialization library to convert the data to valid JSON types first. +There are many serialization libraries and Flask API extensions +maintained by the community that support more complex applications. + + +.. _sessions: + +Sessions +-------- + +In addition to the request object there is also a second object called +:class:`~flask.session` which allows you to store information specific to a +user from one request to the next. This is implemented on top of cookies +for you and signs the cookies cryptographically. What this means is that +the user could look at the contents of your cookie but not modify it, +unless they know the secret key used for signing. + +In order to use sessions you have to set a secret key. Here is how +sessions work:: + + from flask import session + + # Set the secret key to some random bytes. Keep this really secret! + app.secret_key = b'_5#y2L"F4Q8z\n\xec]/' + + @app.route('/') + def index(): + if 'username' in session: + return f'Logged in as {session["username"]}' + return 'You are not logged in' + + @app.route('/login', methods=['GET', 'POST']) + def login(): + if request.method == 'POST': + session['username'] = request.form['username'] + return redirect(url_for('index')) + return ''' +
+

+

+

+ ''' + + @app.route('/logout') + def logout(): + # remove the username from the session if it's there + session.pop('username', None) + return redirect(url_for('index')) + +.. admonition:: How to generate good secret keys + + A secret key should be as random as possible. Your operating system has + ways to generate pretty random data based on a cryptographic random + generator. Use the following command to quickly generate a value for + :attr:`Flask.secret_key` (or :data:`SECRET_KEY`):: + + $ python -c 'import secrets; print(secrets.token_hex())' + '192b9bdd22ab9ed4d12e236c78afcb9a393ec15f71bbf5dc987d54727823bcbf' + +A note on cookie-based sessions: Flask will take the values you put into the +session object and serialize them into a cookie. If you are finding some +values do not persist across requests, cookies are indeed enabled, and you are +not getting a clear error message, check the size of the cookie in your page +responses compared to the size supported by web browsers. + +Besides the default client-side based sessions, if you want to handle +sessions on the server-side instead, there are several +Flask extensions that support this. + +Message Flashing +---------------- + +Good applications and user interfaces are all about feedback. If the user +does not get enough feedback they will probably end up hating the +application. Flask provides a really simple way to give feedback to a +user with the flashing system. The flashing system basically makes it +possible to record a message at the end of a request and access it on the next +(and only the next) request. This is usually combined with a layout +template to expose the message. + +To flash a message use the :func:`~flask.flash` method, to get hold of the +messages you can use :func:`~flask.get_flashed_messages` which is also +available in the templates. See :doc:`patterns/flashing` for a full +example. + +Logging +------- + +.. versionadded:: 0.3 + +Sometimes you might be in a situation where you deal with data that +should be correct, but actually is not. For example you may have +some client-side code that sends an HTTP request to the server +but it's obviously malformed. This might be caused by a user tampering +with the data, or the client code failing. Most of the time it's okay +to reply with ``400 Bad Request`` in that situation, but sometimes +that won't do and the code has to continue working. + +You may still want to log that something fishy happened. This is where +loggers come in handy. As of Flask 0.3 a logger is preconfigured for you +to use. + +Here are some example log calls:: + + app.logger.debug('A value for debugging') + app.logger.warning('A warning occurred (%d apples)', 42) + app.logger.error('An error occurred') + +The attached :attr:`~flask.Flask.logger` is a standard logging +:class:`~logging.Logger`, so head over to the official :mod:`logging` +docs for more information. + +See :doc:`errorhandling`. + + +Hooking in WSGI Middleware +-------------------------- + +To add WSGI middleware to your Flask application, wrap the application's +``wsgi_app`` attribute. For example, to apply Werkzeug's +:class:`~werkzeug.middleware.proxy_fix.ProxyFix` middleware for running +behind Nginx: + +.. code-block:: python + + from werkzeug.middleware.proxy_fix import ProxyFix + app.wsgi_app = ProxyFix(app.wsgi_app) + +Wrapping ``app.wsgi_app`` instead of ``app`` means that ``app`` still +points at your Flask application, not at the middleware, so you can +continue to use and configure ``app`` directly. + +Using Flask Extensions +---------------------- + +Extensions are packages that help you accomplish common tasks. For +example, Flask-SQLAlchemy provides SQLAlchemy support that makes it simple +and easy to use with Flask. + +For more on Flask extensions, see :doc:`extensions`. + +Deploying to a Web Server +------------------------- + +Ready to deploy your new Flask app? See :doc:`deploying/index`. diff --git a/_build/_sources/reqcontext.rst.txt b/_build/_sources/reqcontext.rst.txt new file mode 100644 index 00000000..4f1846a3 --- /dev/null +++ b/_build/_sources/reqcontext.rst.txt @@ -0,0 +1,243 @@ +.. currentmodule:: flask + +The Request Context +=================== + +The request context keeps track of the request-level data during a +request. Rather than passing the request object to each function that +runs during a request, the :data:`request` and :data:`session` proxies +are accessed instead. + +This is similar to :doc:`/appcontext`, which keeps track of the +application-level data independent of a request. A corresponding +application context is pushed when a request context is pushed. + + +Purpose of the Context +---------------------- + +When the :class:`Flask` application handles a request, it creates a +:class:`Request` object based on the environment it received from the +WSGI server. Because a *worker* (thread, process, or coroutine depending +on the server) handles only one request at a time, the request data can +be considered global to that worker during that request. Flask uses the +term *context local* for this. + +Flask automatically *pushes* a request context when handling a request. +View functions, error handlers, and other functions that run during a +request will have access to the :data:`request` proxy, which points to +the request object for the current request. + + +Lifetime of the Context +----------------------- + +When a Flask application begins handling a request, it pushes a request +context, which also pushes an :doc:`app context `. When the +request ends it pops the request context then the application context. + +The context is unique to each thread (or other worker type). +:data:`request` cannot be passed to another thread, the other thread has +a different context space and will not know about the request the parent +thread was pointing to. + +Context locals are implemented using Python's :mod:`contextvars` and +Werkzeug's :class:`~werkzeug.local.LocalProxy`. Python manages the +lifetime of context vars automatically, and local proxy wraps that +low-level interface to make the data easier to work with. + + +Manually Push a Context +----------------------- + +If you try to access :data:`request`, or anything that uses it, outside +a request context, you'll get this error message: + +.. code-block:: pytb + + RuntimeError: Working outside of request context. + + This typically means that you attempted to use functionality that + needed an active HTTP request. Consult the documentation on testing + for information about how to avoid this problem. + +This should typically only happen when testing code that expects an +active request. One option is to use the +:meth:`test client ` to simulate a full request. Or +you can use :meth:`~Flask.test_request_context` in a ``with`` block, and +everything that runs in the block will have access to :data:`request`, +populated with your test data. :: + + def generate_report(year): + format = request.args.get("format") + ... + + with app.test_request_context( + "/make_report/2017", query_string={"format": "short"} + ): + generate_report() + +If you see that error somewhere else in your code not related to +testing, it most likely indicates that you should move that code into a +view function. + +For information on how to use the request context from the interactive +Python shell, see :doc:`/shell`. + + +How the Context Works +--------------------- + +The :meth:`Flask.wsgi_app` method is called to handle each request. It +manages the contexts during the request. Internally, the request and +application contexts work like stacks. When contexts are pushed, the +proxies that depend on them are available and point at information from +the top item. + +When the request starts, a :class:`~ctx.RequestContext` is created and +pushed, which creates and pushes an :class:`~ctx.AppContext` first if +a context for that application is not already the top context. While +these contexts are pushed, the :data:`current_app`, :data:`g`, +:data:`request`, and :data:`session` proxies are available to the +original thread handling the request. + +Other contexts may be pushed to change the proxies during a request. +While this is not a common pattern, it can be used in advanced +applications to, for example, do internal redirects or chain different +applications together. + +After the request is dispatched and a response is generated and sent, +the request context is popped, which then pops the application context. +Immediately before they are popped, the :meth:`~Flask.teardown_request` +and :meth:`~Flask.teardown_appcontext` functions are executed. These +execute even if an unhandled exception occurred during dispatch. + + +.. _callbacks-and-errors: + +Callbacks and Errors +-------------------- + +Flask dispatches a request in multiple stages which can affect the +request, response, and how errors are handled. The contexts are active +during all of these stages. + +A :class:`Blueprint` can add handlers for these events that are specific +to the blueprint. The handlers for a blueprint will run if the blueprint +owns the route that matches the request. + +#. Before each request, :meth:`~Flask.before_request` functions are + called. If one of these functions return a value, the other + functions are skipped. The return value is treated as the response + and the view function is not called. + +#. If the :meth:`~Flask.before_request` functions did not return a + response, the view function for the matched route is called and + returns a response. + +#. The return value of the view is converted into an actual response + object and passed to the :meth:`~Flask.after_request` + functions. Each function returns a modified or new response object. + +#. After the response is returned, the contexts are popped, which calls + the :meth:`~Flask.teardown_request` and + :meth:`~Flask.teardown_appcontext` functions. These functions are + called even if an unhandled exception was raised at any point above. + +If an exception is raised before the teardown functions, Flask tries to +match it with an :meth:`~Flask.errorhandler` function to handle the +exception and return a response. If no error handler is found, or the +handler itself raises an exception, Flask returns a generic +``500 Internal Server Error`` response. The teardown functions are still +called, and are passed the exception object. + +If debug mode is enabled, unhandled exceptions are not converted to a +``500`` response and instead are propagated to the WSGI server. This +allows the development server to present the interactive debugger with +the traceback. + + +Teardown Callbacks +~~~~~~~~~~~~~~~~~~ + +The teardown callbacks are independent of the request dispatch, and are +instead called by the contexts when they are popped. The functions are +called even if there is an unhandled exception during dispatch, and for +manually pushed contexts. This means there is no guarantee that any +other parts of the request dispatch have run first. Be sure to write +these functions in a way that does not depend on other callbacks and +will not fail. + +During testing, it can be useful to defer popping the contexts after the +request ends, so that their data can be accessed in the test function. +Use the :meth:`~Flask.test_client` as a ``with`` block to preserve the +contexts until the ``with`` block exits. + +.. code-block:: python + + from flask import Flask, request + + app = Flask(__name__) + + @app.route('/') + def hello(): + print('during view') + return 'Hello, World!' + + @app.teardown_request + def show_teardown(exception): + print('after with block') + + with app.test_request_context(): + print('during with block') + + # teardown functions are called after the context with block exits + + with app.test_client() as client: + client.get('/') + # the contexts are not popped even though the request ended + print(request.path) + + # the contexts are popped and teardown functions are called after + # the client with block exits + +Signals +~~~~~~~ + +The following signals are sent: + +#. :data:`request_started` is sent before the :meth:`~Flask.before_request` functions + are called. +#. :data:`request_finished` is sent after the :meth:`~Flask.after_request` functions + are called. +#. :data:`got_request_exception` is sent when an exception begins to be handled, but + before an :meth:`~Flask.errorhandler` is looked up or called. +#. :data:`request_tearing_down` is sent after the :meth:`~Flask.teardown_request` + functions are called. + + +.. _notes-on-proxies: + +Notes On Proxies +---------------- + +Some of the objects provided by Flask are proxies to other objects. The +proxies are accessed in the same way for each worker thread, but +point to the unique object bound to each worker behind the scenes as +described on this page. + +Most of the time you don't have to care about that, but there are some +exceptions where it is good to know that this object is actually a proxy: + +- The proxy objects cannot fake their type as the actual object types. + If you want to perform instance checks, you have to do that on the + object being proxied. +- The reference to the proxied object is needed in some situations, + such as sending :doc:`signals` or passing data to a background + thread. + +If you need to access the underlying object that is proxied, use the +:meth:`~werkzeug.local.LocalProxy._get_current_object` method:: + + app = current_app._get_current_object() + my_signal.send(app) diff --git a/_build/_sources/server.rst.txt b/_build/_sources/server.rst.txt new file mode 100644 index 00000000..11e976bc --- /dev/null +++ b/_build/_sources/server.rst.txt @@ -0,0 +1,115 @@ +.. currentmodule:: flask + +Development Server +================== + +Flask provides a ``run`` command to run the application with a development server. In +debug mode, this server provides an interactive debugger and will reload when code is +changed. + +.. warning:: + + Do not use the development server when deploying to production. It + is intended for use only during local development. It is not + designed to be particularly efficient, stable, or secure. + + See :doc:`/deploying/index` for deployment options. + +Command Line +------------ + +The ``flask run`` CLI command is the recommended way to run the development server. Use +the ``--app`` option to point to your application, and the ``--debug`` option to enable +debug mode. + +.. code-block:: text + + $ flask --app hello run --debug + +This enables debug mode, including the interactive debugger and reloader, and then +starts the server on http://localhost:5000/. Use ``flask run --help`` to see the +available options, and :doc:`/cli` for detailed instructions about configuring and using +the CLI. + + +.. _address-already-in-use: + +Address already in use +~~~~~~~~~~~~~~~~~~~~~~ + +If another program is already using port 5000, you'll see an ``OSError`` +when the server tries to start. It may have one of the following +messages: + +- ``OSError: [Errno 98] Address already in use`` +- ``OSError: [WinError 10013] An attempt was made to access a socket + in a way forbidden by its access permissions`` + +Either identify and stop the other program, or use +``flask run --port 5001`` to pick a different port. + +You can use ``netstat`` or ``lsof`` to identify what process id is using +a port, then use other operating system tools stop that process. The +following example shows that process id 6847 is using port 5000. + +.. tabs:: + + .. tab:: ``netstat`` (Linux) + + .. code-block:: text + + $ netstat -nlp | grep 5000 + tcp 0 0 127.0.0.1:5000 0.0.0.0:* LISTEN 6847/python + + .. tab:: ``lsof`` (macOS / Linux) + + .. code-block:: text + + $ lsof -P -i :5000 + Python 6847 IPv4 TCP localhost:5000 (LISTEN) + + .. tab:: ``netstat`` (Windows) + + .. code-block:: text + + > netstat -ano | findstr 5000 + TCP 127.0.0.1:5000 0.0.0.0:0 LISTENING 6847 + +macOS Monterey and later automatically starts a service that uses port +5000. You can choose to disable this service instead of using a different port by +searching for "AirPlay Receiver" in System Preferences and toggling it off. + + +Deferred Errors on Reload +~~~~~~~~~~~~~~~~~~~~~~~~~ + +When using the ``flask run`` command with the reloader, the server will +continue to run even if you introduce syntax errors or other +initialization errors into the code. Accessing the site will show the +interactive debugger for the error, rather than crashing the server. + +If a syntax error is already present when calling ``flask run``, it will +fail immediately and show the traceback rather than waiting until the +site is accessed. This is intended to make errors more visible initially +while still allowing the server to handle errors on reload. + + +In Code +------- + +The development server can also be started from Python with the :meth:`Flask.run` +method. This method takes arguments similar to the CLI options to control the server. +The main difference from the CLI command is that the server will crash if there are +errors when reloading. ``debug=True`` can be passed to enable debug mode. + +Place the call in a main block, otherwise it will interfere when trying to import and +run the application with a production server later. + +.. code-block:: python + + if __name__ == "__main__": + app.run(debug=True) + +.. code-block:: text + + $ python hello.py diff --git a/_build/_sources/shell.rst.txt b/_build/_sources/shell.rst.txt new file mode 100644 index 00000000..7e42e285 --- /dev/null +++ b/_build/_sources/shell.rst.txt @@ -0,0 +1,100 @@ +Working with the Shell +====================== + +.. versionadded:: 0.3 + +One of the reasons everybody loves Python is the interactive shell. It +basically allows you to execute Python commands in real time and +immediately get results back. Flask itself does not come with an +interactive shell, because it does not require any specific setup upfront, +just import your application and start playing around. + +There are however some handy helpers to make playing around in the shell a +more pleasant experience. The main issue with interactive console +sessions is that you're not triggering a request like a browser does which +means that :data:`~flask.g`, :data:`~flask.request` and others are not +available. But the code you want to test might depend on them, so what +can you do? + +This is where some helper functions come in handy. Keep in mind however +that these functions are not only there for interactive shell usage, but +also for unit testing and other situations that require a faked request +context. + +Generally it's recommended that you read :doc:`reqcontext` first. + +Command Line Interface +---------------------- + +Starting with Flask 0.11 the recommended way to work with the shell is the +``flask shell`` command which does a lot of this automatically for you. +For instance the shell is automatically initialized with a loaded +application context. + +For more information see :doc:`/cli`. + +Creating a Request Context +-------------------------- + +The easiest way to create a proper request context from the shell is by +using the :attr:`~flask.Flask.test_request_context` method which creates +us a :class:`~flask.ctx.RequestContext`: + +>>> ctx = app.test_request_context() + +Normally you would use the ``with`` statement to make this request object +active, but in the shell it's easier to use the +:meth:`~flask.ctx.RequestContext.push` and +:meth:`~flask.ctx.RequestContext.pop` methods by hand: + +>>> ctx.push() + +From that point onwards you can work with the request object until you +call `pop`: + +>>> ctx.pop() + +Firing Before/After Request +--------------------------- + +By just creating a request context, you still don't have run the code that +is normally run before a request. This might result in your database +being unavailable if you are connecting to the database in a +before-request callback or the current user not being stored on the +:data:`~flask.g` object etc. + +This however can easily be done yourself. Just call +:meth:`~flask.Flask.preprocess_request`: + +>>> ctx = app.test_request_context() +>>> ctx.push() +>>> app.preprocess_request() + +Keep in mind that the :meth:`~flask.Flask.preprocess_request` function +might return a response object, in that case just ignore it. + +To shutdown a request, you need to trick a bit before the after request +functions (triggered by :meth:`~flask.Flask.process_response`) operate on +a response object: + +>>> app.process_response(app.response_class()) + +>>> ctx.pop() + +The functions registered as :meth:`~flask.Flask.teardown_request` are +automatically called when the context is popped. So this is the perfect +place to automatically tear down resources that were needed by the request +context (such as database connections). + + +Further Improving the Shell Experience +-------------------------------------- + +If you like the idea of experimenting in a shell, create yourself a module +with stuff you want to star import into your interactive session. There +you could also define some more helper methods for common things such as +initializing the database, dropping tables etc. + +Just put them into a module (like `shelltools`) and import from there: + +>>> from shelltools import * diff --git a/_build/_sources/signals.rst.txt b/_build/_sources/signals.rst.txt new file mode 100644 index 00000000..739bb0b5 --- /dev/null +++ b/_build/_sources/signals.rst.txt @@ -0,0 +1,167 @@ +Signals +======= + +Signals are a lightweight way to notify subscribers of certain events during the +lifecycle of the application and each request. When an event occurs, it emits the +signal, which calls each subscriber. + +Signals are implemented by the `Blinker`_ library. See its documentation for detailed +information. Flask provides some built-in signals. Extensions may provide their own. + +Many signals mirror Flask's decorator-based callbacks with similar names. For example, +the :data:`.request_started` signal is similar to the :meth:`~.Flask.before_request` +decorator. The advantage of signals over handlers is that they can be subscribed to +temporarily, and can't directly affect the application. This is useful for testing, +metrics, auditing, and more. For example, if you want to know what templates were +rendered at what parts of what requests, there is a signal that will notify you of that +information. + + +Core Signals +------------ + +See :ref:`core-signals-list` for a list of all built-in signals. The :doc:`lifecycle` +page also describes the order that signals and decorators execute. + + +Subscribing to Signals +---------------------- + +To subscribe to a signal, you can use the +:meth:`~blinker.base.Signal.connect` method of a signal. The first +argument is the function that should be called when the signal is emitted, +the optional second argument specifies a sender. To unsubscribe from a +signal, you can use the :meth:`~blinker.base.Signal.disconnect` method. + +For all core Flask signals, the sender is the application that issued the +signal. When you subscribe to a signal, be sure to also provide a sender +unless you really want to listen for signals from all applications. This is +especially true if you are developing an extension. + +For example, here is a helper context manager that can be used in a unit test +to determine which templates were rendered and what variables were passed +to the template:: + + from flask import template_rendered + from contextlib import contextmanager + + @contextmanager + def captured_templates(app): + recorded = [] + def record(sender, template, context, **extra): + recorded.append((template, context)) + template_rendered.connect(record, app) + try: + yield recorded + finally: + template_rendered.disconnect(record, app) + +This can now easily be paired with a test client:: + + with captured_templates(app) as templates: + rv = app.test_client().get('/') + assert rv.status_code == 200 + assert len(templates) == 1 + template, context = templates[0] + assert template.name == 'index.html' + assert len(context['items']) == 10 + +Make sure to subscribe with an extra ``**extra`` argument so that your +calls don't fail if Flask introduces new arguments to the signals. + +All the template rendering in the code issued by the application `app` +in the body of the ``with`` block will now be recorded in the `templates` +variable. Whenever a template is rendered, the template object as well as +context are appended to it. + +Additionally there is a convenient helper method +(:meth:`~blinker.base.Signal.connected_to`) that allows you to +temporarily subscribe a function to a signal with a context manager on +its own. Because the return value of the context manager cannot be +specified that way, you have to pass the list in as an argument:: + + from flask import template_rendered + + def captured_templates(app, recorded, **extra): + def record(sender, template, context): + recorded.append((template, context)) + return template_rendered.connected_to(record, app) + +The example above would then look like this:: + + templates = [] + with captured_templates(app, templates, **extra): + ... + template, context = templates[0] + +Creating Signals +---------------- + +If you want to use signals in your own application, you can use the +blinker library directly. The most common use case are named signals in a +custom :class:`~blinker.base.Namespace`. This is what is recommended +most of the time:: + + from blinker import Namespace + my_signals = Namespace() + +Now you can create new signals like this:: + + model_saved = my_signals.signal('model-saved') + +The name for the signal here makes it unique and also simplifies +debugging. You can access the name of the signal with the +:attr:`~blinker.base.NamedSignal.name` attribute. + +.. _signals-sending: + +Sending Signals +--------------- + +If you want to emit a signal, you can do so by calling the +:meth:`~blinker.base.Signal.send` method. It accepts a sender as first +argument and optionally some keyword arguments that are forwarded to the +signal subscribers:: + + class Model(object): + ... + + def save(self): + model_saved.send(self) + +Try to always pick a good sender. If you have a class that is emitting a +signal, pass ``self`` as sender. If you are emitting a signal from a random +function, you can pass ``current_app._get_current_object()`` as sender. + +.. admonition:: Passing Proxies as Senders + + Never pass :data:`~flask.current_app` as sender to a signal. Use + ``current_app._get_current_object()`` instead. The reason for this is + that :data:`~flask.current_app` is a proxy and not the real application + object. + + +Signals and Flask's Request Context +----------------------------------- + +Signals fully support :doc:`reqcontext` when receiving signals. +Context-local variables are consistently available between +:data:`~flask.request_started` and :data:`~flask.request_finished`, so you can +rely on :class:`flask.g` and others as needed. Note the limitations described +in :ref:`signals-sending` and the :data:`~flask.request_tearing_down` signal. + + +Decorator Based Signal Subscriptions +------------------------------------ + +You can also easily subscribe to signals by using the +:meth:`~blinker.base.NamedSignal.connect_via` decorator:: + + from flask import template_rendered + + @template_rendered.connect_via(app) + def when_template_rendered(sender, template, context, **extra): + print(f'Template {template.name} is rendered with {context}') + + +.. _blinker: https://pypi.org/project/blinker/ diff --git a/_build/_sources/templating.rst.txt b/_build/_sources/templating.rst.txt new file mode 100644 index 00000000..23cfee4c --- /dev/null +++ b/_build/_sources/templating.rst.txt @@ -0,0 +1,229 @@ +Templates +========= + +Flask leverages Jinja2 as its template engine. You are obviously free to use +a different template engine, but you still have to install Jinja2 to run +Flask itself. This requirement is necessary to enable rich extensions. +An extension can depend on Jinja2 being present. + +This section only gives a very quick introduction into how Jinja2 +is integrated into Flask. If you want information on the template +engine's syntax itself, head over to the official `Jinja2 Template +Documentation `_ for +more information. + +Jinja Setup +----------- + +Unless customized, Jinja2 is configured by Flask as follows: + +- autoescaping is enabled for all templates ending in ``.html``, + ``.htm``, ``.xml``, ``.xhtml``, as well as ``.svg`` when using + :func:`~flask.templating.render_template`. +- autoescaping is enabled for all strings when using + :func:`~flask.templating.render_template_string`. +- a template has the ability to opt in/out autoescaping with the + ``{% autoescape %}`` tag. +- Flask inserts a couple of global functions and helpers into the + Jinja2 context, additionally to the values that are present by + default. + +Standard Context +---------------- + +The following global variables are available within Jinja2 templates +by default: + +.. data:: config + :noindex: + + The current configuration object (:data:`flask.Flask.config`) + + .. versionadded:: 0.6 + + .. versionchanged:: 0.10 + This is now always available, even in imported templates. + +.. data:: request + :noindex: + + The current request object (:class:`flask.request`). This variable is + unavailable if the template was rendered without an active request + context. + +.. data:: session + :noindex: + + The current session object (:class:`flask.session`). This variable + is unavailable if the template was rendered without an active request + context. + +.. data:: g + :noindex: + + The request-bound object for global variables (:data:`flask.g`). This + variable is unavailable if the template was rendered without an active + request context. + +.. function:: url_for + :noindex: + + The :func:`flask.url_for` function. + +.. function:: get_flashed_messages + :noindex: + + The :func:`flask.get_flashed_messages` function. + +.. admonition:: The Jinja Context Behavior + + These variables are added to the context of variables, they are not + global variables. The difference is that by default these will not + show up in the context of imported templates. This is partially caused + by performance considerations, partially to keep things explicit. + + What does this mean for you? If you have a macro you want to import, + that needs to access the request object you have two possibilities: + + 1. you explicitly pass the request to the macro as parameter, or + the attribute of the request object you are interested in. + 2. you import the macro "with context". + + Importing with context looks like this: + + .. sourcecode:: jinja + + {% from '_helpers.html' import my_macro with context %} + + +Controlling Autoescaping +------------------------ + +Autoescaping is the concept of automatically escaping special characters +for you. Special characters in the sense of HTML (or XML, and thus XHTML) +are ``&``, ``>``, ``<``, ``"`` as well as ``'``. Because these characters +carry specific meanings in documents on their own you have to replace them +by so called "entities" if you want to use them for text. Not doing so +would not only cause user frustration by the inability to use these +characters in text, but can also lead to security problems. (see +:ref:`security-xss`) + +Sometimes however you will need to disable autoescaping in templates. +This can be the case if you want to explicitly inject HTML into pages, for +example if they come from a system that generates secure HTML like a +markdown to HTML converter. + +There are three ways to accomplish that: + +- In the Python code, wrap the HTML string in a :class:`~markupsafe.Markup` + object before passing it to the template. This is in general the + recommended way. +- Inside the template, use the ``|safe`` filter to explicitly mark a + string as safe HTML (``{{ myvariable|safe }}``) +- Temporarily disable the autoescape system altogether. + +To disable the autoescape system in templates, you can use the ``{% +autoescape %}`` block: + +.. sourcecode:: html+jinja + + {% autoescape false %} +

autoescaping is disabled here +

{{ will_not_be_escaped }} + {% endautoescape %} + +Whenever you do this, please be very cautious about the variables you are +using in this block. + +.. _registering-filters: + +Registering Filters +------------------- + +If you want to register your own filters in Jinja2 you have two ways to do +that. You can either put them by hand into the +:attr:`~flask.Flask.jinja_env` of the application or use the +:meth:`~flask.Flask.template_filter` decorator. + +The two following examples work the same and both reverse an object:: + + @app.template_filter('reverse') + def reverse_filter(s): + return s[::-1] + + def reverse_filter(s): + return s[::-1] + app.jinja_env.filters['reverse'] = reverse_filter + +In case of the decorator the argument is optional if you want to use the +function name as name of the filter. Once registered, you can use the filter +in your templates in the same way as Jinja2's builtin filters, for example if +you have a Python list in context called `mylist`:: + + {% for x in mylist | reverse %} + {% endfor %} + + +Context Processors +------------------ + +To inject new variables automatically into the context of a template, +context processors exist in Flask. Context processors run before the +template is rendered and have the ability to inject new values into the +template context. A context processor is a function that returns a +dictionary. The keys and values of this dictionary are then merged with +the template context, for all templates in the app:: + + @app.context_processor + def inject_user(): + return dict(user=g.user) + +The context processor above makes a variable called `user` available in +the template with the value of `g.user`. This example is not very +interesting because `g` is available in templates anyways, but it gives an +idea how this works. + +Variables are not limited to values; a context processor can also make +functions available to templates (since Python allows passing around +functions):: + + @app.context_processor + def utility_processor(): + def format_price(amount, currency="€"): + return f"{amount:.2f}{currency}" + return dict(format_price=format_price) + +The context processor above makes the `format_price` function available to all +templates:: + + {{ format_price(0.33) }} + +You could also build `format_price` as a template filter (see +:ref:`registering-filters`), but this demonstrates how to pass functions in a +context processor. + +Streaming +--------- + +It can be useful to not render the whole template as one complete +string, instead render it as a stream, yielding smaller incremental +strings. This can be used for streaming HTML in chunks to speed up +initial page load, or to save memory when rendering a very large +template. + +The Jinja2 template engine supports rendering a template piece +by piece, returning an iterator of strings. Flask provides the +:func:`~flask.stream_template` and :func:`~flask.stream_template_string` +functions to make this easier to use. + +.. code-block:: python + + from flask import stream_template + + @app.get("/timeline") + def timeline(): + return stream_template("timeline.html") + +These functions automatically apply the +:func:`~flask.stream_with_context` wrapper if a request is active, so +that it remains available in the template. diff --git a/_build/_sources/testing.rst.txt b/_build/_sources/testing.rst.txt new file mode 100644 index 00000000..b1d52f9a --- /dev/null +++ b/_build/_sources/testing.rst.txt @@ -0,0 +1,319 @@ +Testing Flask Applications +========================== + +Flask provides utilities for testing an application. This documentation +goes over techniques for working with different parts of the application +in tests. + +We will use the `pytest`_ framework to set up and run our tests. + +.. code-block:: text + + $ pip install pytest + +.. _pytest: https://docs.pytest.org/ + +The :doc:`tutorial ` goes over how to write tests for +100% coverage of the sample Flaskr blog application. See +:doc:`the tutorial on tests ` for a detailed +explanation of specific tests for an application. + + +Identifying Tests +----------------- + +Tests are typically located in the ``tests`` folder. Tests are functions +that start with ``test_``, in Python modules that start with ``test_``. +Tests can also be further grouped in classes that start with ``Test``. + +It can be difficult to know what to test. Generally, try to test the +code that you write, not the code of libraries that you use, since they +are already tested. Try to extract complex behaviors as separate +functions to test individually. + + +Fixtures +-------- + +Pytest *fixtures* allow writing pieces of code that are reusable across +tests. A simple fixture returns a value, but a fixture can also do +setup, yield a value, then do teardown. Fixtures for the application, +test client, and CLI runner are shown below, they can be placed in +``tests/conftest.py``. + +If you're using an +:doc:`application factory `, define an ``app`` +fixture to create and configure an app instance. You can add code before +and after the ``yield`` to set up and tear down other resources, such as +creating and clearing a database. + +If you're not using a factory, you already have an app object you can +import and configure directly. You can still use an ``app`` fixture to +set up and tear down resources. + +.. code-block:: python + + import pytest + from my_project import create_app + + @pytest.fixture() + def app(): + app = create_app() + app.config.update({ + "TESTING": True, + }) + + # other setup can go here + + yield app + + # clean up / reset resources here + + + @pytest.fixture() + def client(app): + return app.test_client() + + + @pytest.fixture() + def runner(app): + return app.test_cli_runner() + + +Sending Requests with the Test Client +------------------------------------- + +The test client makes requests to the application without running a live +server. Flask's client extends +:doc:`Werkzeug's client `, see those docs for additional +information. + +The ``client`` has methods that match the common HTTP request methods, +such as ``client.get()`` and ``client.post()``. They take many arguments +for building the request; you can find the full documentation in +:class:`~werkzeug.test.EnvironBuilder`. Typically you'll use ``path``, +``query_string``, ``headers``, and ``data`` or ``json``. + +To make a request, call the method the request should use with the path +to the route to test. A :class:`~werkzeug.test.TestResponse` is returned +to examine the response data. It has all the usual properties of a +response object. You'll usually look at ``response.data``, which is the +bytes returned by the view. If you want to use text, Werkzeug 2.1 +provides ``response.text``, or use ``response.get_data(as_text=True)``. + +.. code-block:: python + + def test_request_example(client): + response = client.get("/posts") + assert b"

Hello, World!

" in response.data + + +Pass a dict ``query_string={"key": "value", ...}`` to set arguments in +the query string (after the ``?`` in the URL). Pass a dict +``headers={}`` to set request headers. + +To send a request body in a POST or PUT request, pass a value to +``data``. If raw bytes are passed, that exact body is used. Usually, +you'll pass a dict to set form data. + + +Form Data +~~~~~~~~~ + +To send form data, pass a dict to ``data``. The ``Content-Type`` header +will be set to ``multipart/form-data`` or +``application/x-www-form-urlencoded`` automatically. + +If a value is a file object opened for reading bytes (``"rb"`` mode), it +will be treated as an uploaded file. To change the detected filename and +content type, pass a ``(file, filename, content_type)`` tuple. File +objects will be closed after making the request, so they do not need to +use the usual ``with open() as f:`` pattern. + +It can be useful to store files in a ``tests/resources`` folder, then +use ``pathlib.Path`` to get files relative to the current test file. + +.. code-block:: python + + from pathlib import Path + + # get the resources folder in the tests folder + resources = Path(__file__).parent / "resources" + + def test_edit_user(client): + response = client.post("/user/2/edit", data={ + "name": "Flask", + "theme": "dark", + "picture": (resources / "picture.png").open("rb"), + }) + assert response.status_code == 200 + + +JSON Data +~~~~~~~~~ + +To send JSON data, pass an object to ``json``. The ``Content-Type`` +header will be set to ``application/json`` automatically. + +Similarly, if the response contains JSON data, the ``response.json`` +attribute will contain the deserialized object. + +.. code-block:: python + + def test_json_data(client): + response = client.post("/graphql", json={ + "query": """ + query User($id: String!) { + user(id: $id) { + name + theme + picture_url + } + } + """, + variables={"id": 2}, + }) + assert response.json["data"]["user"]["name"] == "Flask" + + +Following Redirects +------------------- + +By default, the client does not make additional requests if the response +is a redirect. By passing ``follow_redirects=True`` to a request method, +the client will continue to make requests until a non-redirect response +is returned. + +:attr:`TestResponse.history ` is +a tuple of the responses that led up to the final response. Each +response has a :attr:`~werkzeug.test.TestResponse.request` attribute +which records the request that produced that response. + +.. code-block:: python + + def test_logout_redirect(client): + response = client.get("/logout", follow_redirects=True) + # Check that there was one redirect response. + assert len(response.history) == 1 + # Check that the second request was to the index page. + assert response.request.path == "/index" + + +Accessing and Modifying the Session +----------------------------------- + +To access Flask's context variables, mainly +:data:`~flask.session`, use the client in a ``with`` statement. +The app and request context will remain active *after* making a request, +until the ``with`` block ends. + +.. code-block:: python + + from flask import session + + def test_access_session(client): + with client: + client.post("/auth/login", data={"username": "flask"}) + # session is still accessible + assert session["user_id"] == 1 + + # session is no longer accessible + +If you want to access or set a value in the session *before* making a +request, use the client's +:meth:`~flask.testing.FlaskClient.session_transaction` method in a +``with`` statement. It returns a session object, and will save the +session once the block ends. + +.. code-block:: python + + from flask import session + + def test_modify_session(client): + with client.session_transaction() as session: + # set a user id without going through the login route + session["user_id"] = 1 + + # session is saved now + + response = client.get("/users/me") + assert response.json["username"] == "flask" + + +.. _testing-cli: + +Running Commands with the CLI Runner +------------------------------------ + +Flask provides :meth:`~flask.Flask.test_cli_runner` to create a +:class:`~flask.testing.FlaskCliRunner`, which runs CLI commands in +isolation and captures the output in a :class:`~click.testing.Result` +object. Flask's runner extends :doc:`Click's runner `, +see those docs for additional information. + +Use the runner's :meth:`~flask.testing.FlaskCliRunner.invoke` method to +call commands in the same way they would be called with the ``flask`` +command from the command line. + +.. code-block:: python + + import click + + @app.cli.command("hello") + @click.option("--name", default="World") + def hello_command(name): + click.echo(f"Hello, {name}!") + + def test_hello_command(runner): + result = runner.invoke(args="hello") + assert "World" in result.output + + result = runner.invoke(args=["hello", "--name", "Flask"]) + assert "Flask" in result.output + + +Tests that depend on an Active Context +-------------------------------------- + +You may have functions that are called from views or commands, that +expect an active :doc:`application context ` or +:doc:`request context ` because they access ``request``, +``session``, or ``current_app``. Rather than testing them by making a +request or invoking the command, you can create and activate a context +directly. + +Use ``with app.app_context()`` to push an application context. For +example, database extensions usually require an active app context to +make queries. + +.. code-block:: python + + def test_db_post_model(app): + with app.app_context(): + post = db.session.query(Post).get(1) + +Use ``with app.test_request_context()`` to push a request context. It +takes the same arguments as the test client's request methods. + +.. code-block:: python + + def test_validate_user_edit(app): + with app.test_request_context( + "/user/2/edit", method="POST", data={"name": ""} + ): + # call a function that accesses `request` + messages = validate_edit_user() + + assert messages["name"][0] == "Name cannot be empty." + +Creating a test request context doesn't run any of the Flask dispatching +code, so ``before_request`` functions are not called. If you need to +call these, usually it's better to make a full request instead. However, +it's possible to call them manually. + +.. code-block:: python + + def test_auth_token(app): + with app.test_request_context("/user/2/edit", headers={"X-Auth-Token": "1"}): + app.preprocess_request() + assert g.user.name == "Flask" diff --git a/_build/_sources/tutorial/blog.rst.txt b/_build/_sources/tutorial/blog.rst.txt new file mode 100644 index 00000000..b06329ea --- /dev/null +++ b/_build/_sources/tutorial/blog.rst.txt @@ -0,0 +1,336 @@ +.. currentmodule:: flask + +Blog Blueprint +============== + +You'll use the same techniques you learned about when writing the +authentication blueprint to write the blog blueprint. The blog should +list all posts, allow logged in users to create posts, and allow the +author of a post to edit or delete it. + +As you implement each view, keep the development server running. As you +save your changes, try going to the URL in your browser and testing them +out. + +The Blueprint +------------- + +Define the blueprint and register it in the application factory. + +.. code-block:: python + :caption: ``flaskr/blog.py`` + + from flask import ( + Blueprint, flash, g, redirect, render_template, request, url_for + ) + from werkzeug.exceptions import abort + + from flaskr.auth import login_required + from flaskr.db import get_db + + bp = Blueprint('blog', __name__) + +Import and register the blueprint from the factory using +:meth:`app.register_blueprint() `. Place the +new code at the end of the factory function before returning the app. + +.. code-block:: python + :caption: ``flaskr/__init__.py`` + + def create_app(): + app = ... + # existing code omitted + + from . import blog + app.register_blueprint(blog.bp) + app.add_url_rule('/', endpoint='index') + + return app + + +Unlike the auth blueprint, the blog blueprint does not have a +``url_prefix``. So the ``index`` view will be at ``/``, the ``create`` +view at ``/create``, and so on. The blog is the main feature of Flaskr, +so it makes sense that the blog index will be the main index. + +However, the endpoint for the ``index`` view defined below will be +``blog.index``. Some of the authentication views referred to a plain +``index`` endpoint. :meth:`app.add_url_rule() ` +associates the endpoint name ``'index'`` with the ``/`` url so that +``url_for('index')`` or ``url_for('blog.index')`` will both work, +generating the same ``/`` URL either way. + +In another application you might give the blog blueprint a +``url_prefix`` and define a separate ``index`` view in the application +factory, similar to the ``hello`` view. Then the ``index`` and +``blog.index`` endpoints and URLs would be different. + + +Index +----- + +The index will show all of the posts, most recent first. A ``JOIN`` is +used so that the author information from the ``user`` table is +available in the result. + +.. code-block:: python + :caption: ``flaskr/blog.py`` + + @bp.route('/') + def index(): + db = get_db() + posts = db.execute( + 'SELECT p.id, title, body, created, author_id, username' + ' FROM post p JOIN user u ON p.author_id = u.id' + ' ORDER BY created DESC' + ).fetchall() + return render_template('blog/index.html', posts=posts) + +.. code-block:: html+jinja + :caption: ``flaskr/templates/blog/index.html`` + + {% extends 'base.html' %} + + {% block header %} +

{% block title %}Posts{% endblock %}

+ {% if g.user %} + New + {% endif %} + {% endblock %} + + {% block content %} + {% for post in posts %} +
+
+
+

{{ post['title'] }}

+
by {{ post['username'] }} on {{ post['created'].strftime('%Y-%m-%d') }}
+
+ {% if g.user['id'] == post['author_id'] %} + Edit + {% endif %} +
+

{{ post['body'] }}

+
+ {% if not loop.last %} +
+ {% endif %} + {% endfor %} + {% endblock %} + +When a user is logged in, the ``header`` block adds a link to the +``create`` view. When the user is the author of a post, they'll see an +"Edit" link to the ``update`` view for that post. ``loop.last`` is a +special variable available inside `Jinja for loops`_. It's used to +display a line after each post except the last one, to visually separate +them. + +.. _Jinja for loops: https://jinja.palletsprojects.com/templates/#for + + +Create +------ + +The ``create`` view works the same as the auth ``register`` view. Either +the form is displayed, or the posted data is validated and the post is +added to the database or an error is shown. + +The ``login_required`` decorator you wrote earlier is used on the blog +views. A user must be logged in to visit these views, otherwise they +will be redirected to the login page. + +.. code-block:: python + :caption: ``flaskr/blog.py`` + + @bp.route('/create', methods=('GET', 'POST')) + @login_required + def create(): + if request.method == 'POST': + title = request.form['title'] + body = request.form['body'] + error = None + + if not title: + error = 'Title is required.' + + if error is not None: + flash(error) + else: + db = get_db() + db.execute( + 'INSERT INTO post (title, body, author_id)' + ' VALUES (?, ?, ?)', + (title, body, g.user['id']) + ) + db.commit() + return redirect(url_for('blog.index')) + + return render_template('blog/create.html') + +.. code-block:: html+jinja + :caption: ``flaskr/templates/blog/create.html`` + + {% extends 'base.html' %} + + {% block header %} +

{% block title %}New Post{% endblock %}

+ {% endblock %} + + {% block content %} +
+ + + + + +
+ {% endblock %} + + +Update +------ + +Both the ``update`` and ``delete`` views will need to fetch a ``post`` +by ``id`` and check if the author matches the logged in user. To avoid +duplicating code, you can write a function to get the ``post`` and call +it from each view. + +.. code-block:: python + :caption: ``flaskr/blog.py`` + + def get_post(id, check_author=True): + post = get_db().execute( + 'SELECT p.id, title, body, created, author_id, username' + ' FROM post p JOIN user u ON p.author_id = u.id' + ' WHERE p.id = ?', + (id,) + ).fetchone() + + if post is None: + abort(404, f"Post id {id} doesn't exist.") + + if check_author and post['author_id'] != g.user['id']: + abort(403) + + return post + +:func:`abort` will raise a special exception that returns an HTTP status +code. It takes an optional message to show with the error, otherwise a +default message is used. ``404`` means "Not Found", and ``403`` means +"Forbidden". (``401`` means "Unauthorized", but you redirect to the +login page instead of returning that status.) + +The ``check_author`` argument is defined so that the function can be +used to get a ``post`` without checking the author. This would be useful +if you wrote a view to show an individual post on a page, where the user +doesn't matter because they're not modifying the post. + +.. code-block:: python + :caption: ``flaskr/blog.py`` + + @bp.route('//update', methods=('GET', 'POST')) + @login_required + def update(id): + post = get_post(id) + + if request.method == 'POST': + title = request.form['title'] + body = request.form['body'] + error = None + + if not title: + error = 'Title is required.' + + if error is not None: + flash(error) + else: + db = get_db() + db.execute( + 'UPDATE post SET title = ?, body = ?' + ' WHERE id = ?', + (title, body, id) + ) + db.commit() + return redirect(url_for('blog.index')) + + return render_template('blog/update.html', post=post) + +Unlike the views you've written so far, the ``update`` function takes +an argument, ``id``. That corresponds to the ```` in the route. +A real URL will look like ``/1/update``. Flask will capture the ``1``, +ensure it's an :class:`int`, and pass it as the ``id`` argument. If you +don't specify ``int:`` and instead do ````, it will be a string. +To generate a URL to the update page, :func:`url_for` needs to be passed +the ``id`` so it knows what to fill in: +``url_for('blog.update', id=post['id'])``. This is also in the +``index.html`` file above. + +The ``create`` and ``update`` views look very similar. The main +difference is that the ``update`` view uses a ``post`` object and an +``UPDATE`` query instead of an ``INSERT``. With some clever refactoring, +you could use one view and template for both actions, but for the +tutorial it's clearer to keep them separate. + +.. code-block:: html+jinja + :caption: ``flaskr/templates/blog/update.html`` + + {% extends 'base.html' %} + + {% block header %} +

{% block title %}Edit "{{ post['title'] }}"{% endblock %}

+ {% endblock %} + + {% block content %} +
+ + + + + +
+
+
+ +
+ {% endblock %} + +This template has two forms. The first posts the edited data to the +current page (``//update``). The other form contains only a button +and specifies an ``action`` attribute that posts to the delete view +instead. The button uses some JavaScript to show a confirmation dialog +before submitting. + +The pattern ``{{ request.form['title'] or post['title'] }}`` is used to +choose what data appears in the form. When the form hasn't been +submitted, the original ``post`` data appears, but if invalid form data +was posted you want to display that so the user can fix the error, so +``request.form`` is used instead. :data:`request` is another variable +that's automatically available in templates. + + +Delete +------ + +The delete view doesn't have its own template, the delete button is part +of ``update.html`` and posts to the ``//delete`` URL. Since there +is no template, it will only handle the ``POST`` method and then redirect +to the ``index`` view. + +.. code-block:: python + :caption: ``flaskr/blog.py`` + + @bp.route('//delete', methods=('POST',)) + @login_required + def delete(id): + get_post(id) + db = get_db() + db.execute('DELETE FROM post WHERE id = ?', (id,)) + db.commit() + return redirect(url_for('blog.index')) + +Congratulations, you've now finished writing your application! Take some +time to try out everything in the browser. However, there's still more +to do before the project is complete. + +Continue to :doc:`install`. diff --git a/_build/_sources/tutorial/database.rst.txt b/_build/_sources/tutorial/database.rst.txt new file mode 100644 index 00000000..93abf93a --- /dev/null +++ b/_build/_sources/tutorial/database.rst.txt @@ -0,0 +1,219 @@ +.. currentmodule:: flask + +Define and Access the Database +============================== + +The application will use a `SQLite`_ database to store users and posts. +Python comes with built-in support for SQLite in the :mod:`sqlite3` +module. + +SQLite is convenient because it doesn't require setting up a separate +database server and is built-in to Python. However, if concurrent +requests try to write to the database at the same time, they will slow +down as each write happens sequentially. Small applications won't notice +this. Once you become big, you may want to switch to a different +database. + +The tutorial doesn't go into detail about SQL. If you are not familiar +with it, the SQLite docs describe the `language`_. + +.. _SQLite: https://sqlite.org/about.html +.. _language: https://sqlite.org/lang.html + + +Connect to the Database +----------------------- + +The first thing to do when working with a SQLite database (and most +other Python database libraries) is to create a connection to it. Any +queries and operations are performed using the connection, which is +closed after the work is finished. + +In web applications this connection is typically tied to the request. It +is created at some point when handling a request, and closed before the +response is sent. + +.. code-block:: python + :caption: ``flaskr/db.py`` + + import sqlite3 + from datetime import datetime + + import click + from flask import current_app, g + + + def get_db(): + if 'db' not in g: + g.db = sqlite3.connect( + current_app.config['DATABASE'], + detect_types=sqlite3.PARSE_DECLTYPES + ) + g.db.row_factory = sqlite3.Row + + return g.db + + + def close_db(e=None): + db = g.pop('db', None) + + if db is not None: + db.close() + +:data:`g` is a special object that is unique for each request. It is +used to store data that might be accessed by multiple functions during +the request. The connection is stored and reused instead of creating a +new connection if ``get_db`` is called a second time in the same +request. + +:data:`current_app` is another special object that points to the Flask +application handling the request. Since you used an application factory, +there is no application object when writing the rest of your code. +``get_db`` will be called when the application has been created and is +handling a request, so :data:`current_app` can be used. + +:func:`sqlite3.connect` establishes a connection to the file pointed at +by the ``DATABASE`` configuration key. This file doesn't have to exist +yet, and won't until you initialize the database later. + +:class:`sqlite3.Row` tells the connection to return rows that behave +like dicts. This allows accessing the columns by name. + +``close_db`` checks if a connection was created by checking if ``g.db`` +was set. If the connection exists, it is closed. Further down you will +tell your application about the ``close_db`` function in the application +factory so that it is called after each request. + + +Create the Tables +----------------- + +In SQLite, data is stored in *tables* and *columns*. These need to be +created before you can store and retrieve data. Flaskr will store users +in the ``user`` table, and posts in the ``post`` table. Create a file +with the SQL commands needed to create empty tables: + +.. code-block:: sql + :caption: ``flaskr/schema.sql`` + + DROP TABLE IF EXISTS user; + DROP TABLE IF EXISTS post; + + CREATE TABLE user ( + id INTEGER PRIMARY KEY AUTOINCREMENT, + username TEXT UNIQUE NOT NULL, + password TEXT NOT NULL + ); + + CREATE TABLE post ( + id INTEGER PRIMARY KEY AUTOINCREMENT, + author_id INTEGER NOT NULL, + created TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP, + title TEXT NOT NULL, + body TEXT NOT NULL, + FOREIGN KEY (author_id) REFERENCES user (id) + ); + +Add the Python functions that will run these SQL commands to the +``db.py`` file: + +.. code-block:: python + :caption: ``flaskr/db.py`` + + def init_db(): + db = get_db() + + with current_app.open_resource('schema.sql') as f: + db.executescript(f.read().decode('utf8')) + + + @click.command('init-db') + def init_db_command(): + """Clear the existing data and create new tables.""" + init_db() + click.echo('Initialized the database.') + + + sqlite3.register_converter( + "timestamp", lambda v: datetime.fromisoformat(v.decode()) + ) + +:meth:`open_resource() ` opens a file relative to +the ``flaskr`` package, which is useful since you won't necessarily know +where that location is when deploying the application later. ``get_db`` +returns a database connection, which is used to execute the commands +read from the file. + +:func:`click.command` defines a command line command called ``init-db`` +that calls the ``init_db`` function and shows a success message to the +user. You can read :doc:`/cli` to learn more about writing commands. + +The call to :func:`sqlite3.register_converter` tells Python how to +interpret timestamp values in the database. We convert the value to a +:class:`datetime.datetime`. + + +Register with the Application +----------------------------- + +The ``close_db`` and ``init_db_command`` functions need to be registered +with the application instance; otherwise, they won't be used by the +application. However, since you're using a factory function, that +instance isn't available when writing the functions. Instead, write a +function that takes an application and does the registration. + +.. code-block:: python + :caption: ``flaskr/db.py`` + + def init_app(app): + app.teardown_appcontext(close_db) + app.cli.add_command(init_db_command) + +:meth:`app.teardown_appcontext() ` tells +Flask to call that function when cleaning up after returning the +response. + +:meth:`app.cli.add_command() ` adds a new +command that can be called with the ``flask`` command. + +Import and call this function from the factory. Place the new code at +the end of the factory function before returning the app. + +.. code-block:: python + :caption: ``flaskr/__init__.py`` + + def create_app(): + app = ... + # existing code omitted + + from . import db + db.init_app(app) + + return app + + +Initialize the Database File +---------------------------- + +Now that ``init-db`` has been registered with the app, it can be called +using the ``flask`` command, similar to the ``run`` command from the +previous page. + +.. note:: + + If you're still running the server from the previous page, you can + either stop the server, or run this command in a new terminal. If + you use a new terminal, remember to change to your project directory + and activate the env as described in :doc:`/installation`. + +Run the ``init-db`` command: + +.. code-block:: none + + $ flask --app flaskr init-db + Initialized the database. + +There will now be a ``flaskr.sqlite`` file in the ``instance`` folder in +your project. + +Continue to :doc:`views`. diff --git a/_build/_sources/tutorial/deploy.rst.txt b/_build/_sources/tutorial/deploy.rst.txt new file mode 100644 index 00000000..eb3a53ac --- /dev/null +++ b/_build/_sources/tutorial/deploy.rst.txt @@ -0,0 +1,111 @@ +Deploy to Production +==================== + +This part of the tutorial assumes you have a server that you want to +deploy your application to. It gives an overview of how to create the +distribution file and install it, but won't go into specifics about +what server or software to use. You can set up a new environment on your +development computer to try out the instructions below, but probably +shouldn't use it for hosting a real public application. See +:doc:`/deploying/index` for a list of many different ways to host your +application. + + +Build and Install +----------------- + +When you want to deploy your application elsewhere, you build a *wheel* +(``.whl``) file. Install and use the ``build`` tool to do this. + +.. code-block:: none + + $ pip install build + $ python -m build --wheel + +You can find the file in ``dist/flaskr-1.0.0-py3-none-any.whl``. The +file name is in the format of {project name}-{version}-{python tag} +-{abi tag}-{platform tag}. + +Copy this file to another machine, +:ref:`set up a new virtualenv `, then install the +file with ``pip``. + +.. code-block:: none + + $ pip install flaskr-1.0.0-py3-none-any.whl + +Pip will install your project along with its dependencies. + +Since this is a different machine, you need to run ``init-db`` again to +create the database in the instance folder. + + .. code-block:: text + + $ flask --app flaskr init-db + +When Flask detects that it's installed (not in editable mode), it uses +a different directory for the instance folder. You can find it at +``.venv/var/flaskr-instance`` instead. + + +Configure the Secret Key +------------------------ + +In the beginning of the tutorial that you gave a default value for +:data:`SECRET_KEY`. This should be changed to some random bytes in +production. Otherwise, attackers could use the public ``'dev'`` key to +modify the session cookie, or anything else that uses the secret key. + +You can use the following command to output a random secret key: + +.. code-block:: none + + $ python -c 'import secrets; print(secrets.token_hex())' + + '192b9bdd22ab9ed4d12e236c78afcb9a393ec15f71bbf5dc987d54727823bcbf' + +Create the ``config.py`` file in the instance folder, which the factory +will read from if it exists. Copy the generated value into it. + +.. code-block:: python + :caption: ``.venv/var/flaskr-instance/config.py`` + + SECRET_KEY = '192b9bdd22ab9ed4d12e236c78afcb9a393ec15f71bbf5dc987d54727823bcbf' + +You can also set any other necessary configuration here, although +``SECRET_KEY`` is the only one needed for Flaskr. + + +Run with a Production Server +---------------------------- + +When running publicly rather than in development, you should not use the +built-in development server (``flask run``). The development server is +provided by Werkzeug for convenience, but is not designed to be +particularly efficient, stable, or secure. + +Instead, use a production WSGI server. For example, to use `Waitress`_, +first install it in the virtual environment: + +.. code-block:: none + + $ pip install waitress + +You need to tell Waitress about your application, but it doesn't use +``--app`` like ``flask run`` does. You need to tell it to import and +call the application factory to get an application object. + +.. code-block:: none + + $ waitress-serve --call 'flaskr:create_app' + + Serving on http://0.0.0.0:8080 + +See :doc:`/deploying/index` for a list of many different ways to host +your application. Waitress is just an example, chosen for the tutorial +because it supports both Windows and Linux. There are many more WSGI +servers and deployment options that you may choose for your project. + +.. _Waitress: https://docs.pylonsproject.org/projects/waitress/en/stable/ + +Continue to :doc:`next`. diff --git a/_build/_sources/tutorial/factory.rst.txt b/_build/_sources/tutorial/factory.rst.txt new file mode 100644 index 00000000..39febd13 --- /dev/null +++ b/_build/_sources/tutorial/factory.rst.txt @@ -0,0 +1,162 @@ +.. currentmodule:: flask + +Application Setup +================= + +A Flask application is an instance of the :class:`Flask` class. +Everything about the application, such as configuration and URLs, will +be registered with this class. + +The most straightforward way to create a Flask application is to create +a global :class:`Flask` instance directly at the top of your code, like +how the "Hello, World!" example did on the previous page. While this is +simple and useful in some cases, it can cause some tricky issues as the +project grows. + +Instead of creating a :class:`Flask` instance globally, you will create +it inside a function. This function is known as the *application +factory*. Any configuration, registration, and other setup the +application needs will happen inside the function, then the application +will be returned. + + +The Application Factory +----------------------- + +It's time to start coding! Create the ``flaskr`` directory and add the +``__init__.py`` file. The ``__init__.py`` serves double duty: it will +contain the application factory, and it tells Python that the ``flaskr`` +directory should be treated as a package. + +.. code-block:: none + + $ mkdir flaskr + +.. code-block:: python + :caption: ``flaskr/__init__.py`` + + import os + + from flask import Flask + + + def create_app(test_config=None): + # create and configure the app + app = Flask(__name__, instance_relative_config=True) + app.config.from_mapping( + SECRET_KEY='dev', + DATABASE=os.path.join(app.instance_path, 'flaskr.sqlite'), + ) + + if test_config is None: + # load the instance config, if it exists, when not testing + app.config.from_pyfile('config.py', silent=True) + else: + # load the test config if passed in + app.config.from_mapping(test_config) + + # ensure the instance folder exists + try: + os.makedirs(app.instance_path) + except OSError: + pass + + # a simple page that says hello + @app.route('/hello') + def hello(): + return 'Hello, World!' + + return app + +``create_app`` is the application factory function. You'll add to it +later in the tutorial, but it already does a lot. + +#. ``app = Flask(__name__, instance_relative_config=True)`` creates the + :class:`Flask` instance. + + * ``__name__`` is the name of the current Python module. The app + needs to know where it's located to set up some paths, and + ``__name__`` is a convenient way to tell it that. + + * ``instance_relative_config=True`` tells the app that + configuration files are relative to the + :ref:`instance folder `. The instance folder + is located outside the ``flaskr`` package and can hold local + data that shouldn't be committed to version control, such as + configuration secrets and the database file. + +#. :meth:`app.config.from_mapping() ` sets + some default configuration that the app will use: + + * :data:`SECRET_KEY` is used by Flask and extensions to keep data + safe. It's set to ``'dev'`` to provide a convenient value + during development, but it should be overridden with a random + value when deploying. + + * ``DATABASE`` is the path where the SQLite database file will be + saved. It's under + :attr:`app.instance_path `, which is the + path that Flask has chosen for the instance folder. You'll learn + more about the database in the next section. + +#. :meth:`app.config.from_pyfile() ` overrides + the default configuration with values taken from the ``config.py`` + file in the instance folder if it exists. For example, when + deploying, this can be used to set a real ``SECRET_KEY``. + + * ``test_config`` can also be passed to the factory, and will be + used instead of the instance configuration. This is so the tests + you'll write later in the tutorial can be configured + independently of any development values you have configured. + +#. :func:`os.makedirs` ensures that + :attr:`app.instance_path ` exists. Flask + doesn't create the instance folder automatically, but it needs to be + created because your project will create the SQLite database file + there. + +#. :meth:`@app.route() ` creates a simple route so you can + see the application working before getting into the rest of the + tutorial. It creates a connection between the URL ``/hello`` and a + function that returns a response, the string ``'Hello, World!'`` in + this case. + + +Run The Application +------------------- + +Now you can run your application using the ``flask`` command. From the +terminal, tell Flask where to find your application, then run it in +debug mode. Remember, you should still be in the top-level +``flask-tutorial`` directory, not the ``flaskr`` package. + +Debug mode shows an interactive debugger whenever a page raises an +exception, and restarts the server whenever you make changes to the +code. You can leave it running and just reload the browser page as you +follow the tutorial. + +.. code-block:: text + + $ flask --app flaskr run --debug + +You'll see output similar to this: + +.. code-block:: text + + * Serving Flask app "flaskr" + * Debug mode: on + * Running on http://127.0.0.1:5000/ (Press CTRL+C to quit) + * Restarting with stat + * Debugger is active! + * Debugger PIN: nnn-nnn-nnn + +Visit http://127.0.0.1:5000/hello in a browser and you should see the +"Hello, World!" message. Congratulations, you're now running your Flask +web application! + +If another program is already using port 5000, you'll see +``OSError: [Errno 98]`` or ``OSError: [WinError 10013]`` when the +server tries to start. See :ref:`address-already-in-use` for how to +handle that. + +Continue to :doc:`database`. diff --git a/_build/_sources/tutorial/index.rst.txt b/_build/_sources/tutorial/index.rst.txt new file mode 100644 index 00000000..d5dc5b3c --- /dev/null +++ b/_build/_sources/tutorial/index.rst.txt @@ -0,0 +1,64 @@ +Tutorial +======== + +.. toctree:: + :caption: Contents: + :maxdepth: 1 + + layout + factory + database + views + templates + static + blog + install + tests + deploy + next + +This tutorial will walk you through creating a basic blog application +called Flaskr. Users will be able to register, log in, create posts, +and edit or delete their own posts. You will be able to package and +install the application on other computers. + +.. image:: flaskr_index.png + :align: center + :class: screenshot + :alt: screenshot of index page + +It's assumed that you're already familiar with Python. The `official +tutorial`_ in the Python docs is a great way to learn or review first. + +.. _official tutorial: https://docs.python.org/3/tutorial/ + +While it's designed to give a good starting point, the tutorial doesn't +cover all of Flask's features. Check out the :doc:`/quickstart` for an +overview of what Flask can do, then dive into the docs to find out more. +The tutorial only uses what's provided by Flask and Python. In another +project, you might decide to use :doc:`/extensions` or other libraries +to make some tasks simpler. + +.. image:: flaskr_login.png + :align: center + :class: screenshot + :alt: screenshot of login page + +Flask is flexible. It doesn't require you to use any particular project +or code layout. However, when first starting, it's helpful to use a more +structured approach. This means that the tutorial will require a bit of +boilerplate up front, but it's done to avoid many common pitfalls that +new developers encounter, and it creates a project that's easy to expand +on. Once you become more comfortable with Flask, you can step out of +this structure and take full advantage of Flask's flexibility. + +.. image:: flaskr_edit.png + :align: center + :class: screenshot + :alt: screenshot of edit page + +:gh:`The tutorial project is available as an example in the Flask +repository `, if you want to compare your project +with the final product as you follow the tutorial. + +Continue to :doc:`layout`. diff --git a/_build/_sources/tutorial/install.rst.txt b/_build/_sources/tutorial/install.rst.txt new file mode 100644 index 00000000..db83e106 --- /dev/null +++ b/_build/_sources/tutorial/install.rst.txt @@ -0,0 +1,89 @@ +Make the Project Installable +============================ + +Making your project installable means that you can build a *wheel* file and install that +in another environment, just like you installed Flask in your project's environment. +This makes deploying your project the same as installing any other library, so you're +using all the standard Python tools to manage everything. + +Installing also comes with other benefits that might not be obvious from +the tutorial or as a new Python user, including: + +* Currently, Python and Flask understand how to use the ``flaskr`` + package only because you're running from your project's directory. + Installing means you can import it no matter where you run from. + +* You can manage your project's dependencies just like other packages + do, so ``pip install yourproject.whl`` installs them. + +* Test tools can isolate your test environment from your development + environment. + +.. note:: + This is being introduced late in the tutorial, but in your future + projects you should always start with this. + + +Describe the Project +-------------------- + +The ``pyproject.toml`` file describes your project and how to build it. + +.. code-block:: toml + :caption: ``pyproject.toml`` + + [project] + name = "flaskr" + version = "1.0.0" + description = "The basic blog app built in the Flask tutorial." + dependencies = [ + "flask", + ] + + [build-system] + requires = ["flit_core<4"] + build-backend = "flit_core.buildapi" + +See the official `Packaging tutorial `_ for more +explanation of the files and options used. + +.. _packaging tutorial: https://packaging.python.org/tutorials/packaging-projects/ + + +Install the Project +------------------- + +Use ``pip`` to install your project in the virtual environment. + +.. code-block:: none + + $ pip install -e . + +This tells pip to find ``pyproject.toml`` in the current directory and install the +project in *editable* or *development* mode. Editable mode means that as you make +changes to your local code, you'll only need to re-install if you change the metadata +about the project, such as its dependencies. + +You can observe that the project is now installed with ``pip list``. + +.. code-block:: none + + $ pip list + + Package Version Location + -------------- --------- ---------------------------------- + click 6.7 + Flask 1.0 + flaskr 1.0.0 /home/user/Projects/flask-tutorial + itsdangerous 0.24 + Jinja2 2.10 + MarkupSafe 1.0 + pip 9.0.3 + Werkzeug 0.14.1 + +Nothing changes from how you've been running your project so far. +``--app`` is still set to ``flaskr`` and ``flask run`` still runs +the application, but you can call it from anywhere, not just the +``flask-tutorial`` directory. + +Continue to :doc:`tests`. diff --git a/_build/_sources/tutorial/layout.rst.txt b/_build/_sources/tutorial/layout.rst.txt new file mode 100644 index 00000000..6f8e59f4 --- /dev/null +++ b/_build/_sources/tutorial/layout.rst.txt @@ -0,0 +1,110 @@ +Project Layout +============== + +Create a project directory and enter it: + +.. code-block:: none + + $ mkdir flask-tutorial + $ cd flask-tutorial + +Then follow the :doc:`installation instructions ` to set +up a Python virtual environment and install Flask for your project. + +The tutorial will assume you're working from the ``flask-tutorial`` +directory from now on. The file names at the top of each code block are +relative to this directory. + +---- + +A Flask application can be as simple as a single file. + +.. code-block:: python + :caption: ``hello.py`` + + from flask import Flask + + app = Flask(__name__) + + + @app.route('/') + def hello(): + return 'Hello, World!' + +However, as a project gets bigger, it becomes overwhelming to keep all +the code in one file. Python projects use *packages* to organize code +into multiple modules that can be imported where needed, and the +tutorial will do this as well. + +The project directory will contain: + +* ``flaskr/``, a Python package containing your application code and + files. +* ``tests/``, a directory containing test modules. +* ``.venv/``, a Python virtual environment where Flask and other + dependencies are installed. +* Installation files telling Python how to install your project. +* Version control config, such as `git`_. You should make a habit of + using some type of version control for all your projects, no matter + the size. +* Any other project files you might add in the future. + +.. _git: https://git-scm.com/ + +By the end, your project layout will look like this: + +.. code-block:: none + + /home/user/Projects/flask-tutorial + ├── flaskr/ + │ ├── __init__.py + │ ├── db.py + │ ├── schema.sql + │ ├── auth.py + │ ├── blog.py + │ ├── templates/ + │ │ ├── base.html + │ │ ├── auth/ + │ │ │ ├── login.html + │ │ │ └── register.html + │ │ └── blog/ + │ │ ├── create.html + │ │ ├── index.html + │ │ └── update.html + │ └── static/ + │ └── style.css + ├── tests/ + │ ├── conftest.py + │ ├── data.sql + │ ├── test_factory.py + │ ├── test_db.py + │ ├── test_auth.py + │ └── test_blog.py + ├── .venv/ + ├── pyproject.toml + └── MANIFEST.in + +If you're using version control, the following files that are generated +while running your project should be ignored. There may be other files +based on the editor you use. In general, ignore files that you didn't +write. For example, with git: + +.. code-block:: none + :caption: ``.gitignore`` + + .venv/ + + *.pyc + __pycache__/ + + instance/ + + .pytest_cache/ + .coverage + htmlcov/ + + dist/ + build/ + *.egg-info/ + +Continue to :doc:`factory`. diff --git a/_build/_sources/tutorial/next.rst.txt b/_build/_sources/tutorial/next.rst.txt new file mode 100644 index 00000000..d41e8ef2 --- /dev/null +++ b/_build/_sources/tutorial/next.rst.txt @@ -0,0 +1,38 @@ +Keep Developing! +================ + +You've learned about quite a few Flask and Python concepts throughout +the tutorial. Go back and review the tutorial and compare your code with +the steps you took to get there. Compare your project to the +:gh:`example project `, which might look a bit +different due to the step-by-step nature of the tutorial. + +There's a lot more to Flask than what you've seen so far. Even so, +you're now equipped to start developing your own web applications. Check +out the :doc:`/quickstart` for an overview of what Flask can do, then +dive into the docs to keep learning. Flask uses `Jinja`_, `Click`_, +`Werkzeug`_, and `ItsDangerous`_ behind the scenes, and they all have +their own documentation too. You'll also be interested in +:doc:`/extensions` which make tasks like working with the database or +validating form data easier and more powerful. + +If you want to keep developing your Flaskr project, here are some ideas +for what to try next: + +* A detail view to show a single post. Click a post's title to go to + its page. +* Like / unlike a post. +* Comments. +* Tags. Clicking a tag shows all the posts with that tag. +* A search box that filters the index page by name. +* Paged display. Only show 5 posts per page. +* Upload an image to go along with a post. +* Format posts using Markdown. +* An RSS feed of new posts. + +Have fun and make awesome applications! + +.. _Jinja: https://palletsprojects.com/p/jinja/ +.. _Click: https://palletsprojects.com/p/click/ +.. _Werkzeug: https://palletsprojects.com/p/werkzeug/ +.. _ItsDangerous: https://palletsprojects.com/p/itsdangerous/ diff --git a/_build/_sources/tutorial/static.rst.txt b/_build/_sources/tutorial/static.rst.txt new file mode 100644 index 00000000..8e76c409 --- /dev/null +++ b/_build/_sources/tutorial/static.rst.txt @@ -0,0 +1,72 @@ +Static Files +============ + +The authentication views and templates work, but they look very plain +right now. Some `CSS`_ can be added to add style to the HTML layout you +constructed. The style won't change, so it's a *static* file rather than +a template. + +Flask automatically adds a ``static`` view that takes a path relative +to the ``flaskr/static`` directory and serves it. The ``base.html`` +template already has a link to the ``style.css`` file: + +.. code-block:: html+jinja + + {{ url_for('static', filename='style.css') }} + +Besides CSS, other types of static files might be files with JavaScript +functions, or a logo image. They are all placed under the +``flaskr/static`` directory and referenced with +``url_for('static', filename='...')``. + +This tutorial isn't focused on how to write CSS, so you can just copy +the following into the ``flaskr/static/style.css`` file: + +.. code-block:: css + :caption: ``flaskr/static/style.css`` + + html { font-family: sans-serif; background: #eee; padding: 1rem; } + body { max-width: 960px; margin: 0 auto; background: white; } + h1 { font-family: serif; color: #377ba8; margin: 1rem 0; } + a { color: #377ba8; } + hr { border: none; border-top: 1px solid lightgray; } + nav { background: lightgray; display: flex; align-items: center; padding: 0 0.5rem; } + nav h1 { flex: auto; margin: 0; } + nav h1 a { text-decoration: none; padding: 0.25rem 0.5rem; } + nav ul { display: flex; list-style: none; margin: 0; padding: 0; } + nav ul li a, nav ul li span, header .action { display: block; padding: 0.5rem; } + .content { padding: 0 1rem 1rem; } + .content > header { border-bottom: 1px solid lightgray; display: flex; align-items: flex-end; } + .content > header h1 { flex: auto; margin: 1rem 0 0.25rem 0; } + .flash { margin: 1em 0; padding: 1em; background: #cae6f6; border: 1px solid #377ba8; } + .post > header { display: flex; align-items: flex-end; font-size: 0.85em; } + .post > header > div:first-of-type { flex: auto; } + .post > header h1 { font-size: 1.5em; margin-bottom: 0; } + .post .about { color: slategray; font-style: italic; } + .post .body { white-space: pre-line; } + .content:last-child { margin-bottom: 0; } + .content form { margin: 1em 0; display: flex; flex-direction: column; } + .content label { font-weight: bold; margin-bottom: 0.5em; } + .content input, .content textarea { margin-bottom: 1em; } + .content textarea { min-height: 12em; resize: vertical; } + input.danger { color: #cc2f2e; } + input[type=submit] { align-self: start; min-width: 10em; } + +You can find a less compact version of ``style.css`` in the +:gh:`example code `. + +Go to http://127.0.0.1:5000/auth/login and the page should look like the +screenshot below. + +.. image:: flaskr_login.png + :align: center + :class: screenshot + :alt: screenshot of login page + +You can read more about CSS from `Mozilla's documentation `_. If +you change a static file, refresh the browser page. If the change +doesn't show up, try clearing your browser's cache. + +.. _CSS: https://developer.mozilla.org/docs/Web/CSS + +Continue to :doc:`blog`. diff --git a/_build/_sources/tutorial/templates.rst.txt b/_build/_sources/tutorial/templates.rst.txt new file mode 100644 index 00000000..1a5535cc --- /dev/null +++ b/_build/_sources/tutorial/templates.rst.txt @@ -0,0 +1,187 @@ +.. currentmodule:: flask + +Templates +========= + +You've written the authentication views for your application, but if +you're running the server and try to go to any of the URLs, you'll see a +``TemplateNotFound`` error. That's because the views are calling +:func:`render_template`, but you haven't written the templates yet. +The template files will be stored in the ``templates`` directory inside +the ``flaskr`` package. + +Templates are files that contain static data as well as placeholders +for dynamic data. A template is rendered with specific data to produce a +final document. Flask uses the `Jinja`_ template library to render +templates. + +In your application, you will use templates to render `HTML`_ which +will display in the user's browser. In Flask, Jinja is configured to +*autoescape* any data that is rendered in HTML templates. This means +that it's safe to render user input; any characters they've entered that +could mess with the HTML, such as ``<`` and ``>`` will be *escaped* with +*safe* values that look the same in the browser but don't cause unwanted +effects. + +Jinja looks and behaves mostly like Python. Special delimiters are used +to distinguish Jinja syntax from the static data in the template. +Anything between ``{{`` and ``}}`` is an expression that will be output +to the final document. ``{%`` and ``%}`` denotes a control flow +statement like ``if`` and ``for``. Unlike Python, blocks are denoted +by start and end tags rather than indentation since static text within +a block could change indentation. + +.. _Jinja: https://jinja.palletsprojects.com/templates/ +.. _HTML: https://developer.mozilla.org/docs/Web/HTML + + +The Base Layout +--------------- + +Each page in the application will have the same basic layout around a +different body. Instead of writing the entire HTML structure in each +template, each template will *extend* a base template and override +specific sections. + +.. code-block:: html+jinja + :caption: ``flaskr/templates/base.html`` + + + {% block title %}{% endblock %} - Flaskr + + +
+
+ {% block header %}{% endblock %} +
+ {% for message in get_flashed_messages() %} +
{{ message }}
+ {% endfor %} + {% block content %}{% endblock %} +
+ +:data:`g` is automatically available in templates. Based on if +``g.user`` is set (from ``load_logged_in_user``), either the username +and a log out link are displayed, or links to register and log in +are displayed. :func:`url_for` is also automatically available, and is +used to generate URLs to views instead of writing them out manually. + +After the page title, and before the content, the template loops over +each message returned by :func:`get_flashed_messages`. You used +:func:`flash` in the views to show error messages, and this is the code +that will display them. + +There are three blocks defined here that will be overridden in the other +templates: + +#. ``{% block title %}`` will change the title displayed in the + browser's tab and window title. + +#. ``{% block header %}`` is similar to ``title`` but will change the + title displayed on the page. + +#. ``{% block content %}`` is where the content of each page goes, such + as the login form or a blog post. + +The base template is directly in the ``templates`` directory. To keep +the others organized, the templates for a blueprint will be placed in a +directory with the same name as the blueprint. + + +Register +-------- + +.. code-block:: html+jinja + :caption: ``flaskr/templates/auth/register.html`` + + {% extends 'base.html' %} + + {% block header %} +

{% block title %}Register{% endblock %}

+ {% endblock %} + + {% block content %} +
+ + + + + +
+ {% endblock %} + +``{% extends 'base.html' %}`` tells Jinja that this template should +replace the blocks from the base template. All the rendered content must +appear inside ``{% block %}`` tags that override blocks from the base +template. + +A useful pattern used here is to place ``{% block title %}`` inside +``{% block header %}``. This will set the title block and then output +the value of it into the header block, so that both the window and page +share the same title without writing it twice. + +The ``input`` tags are using the ``required`` attribute here. This tells +the browser not to submit the form until those fields are filled in. If +the user is using an older browser that doesn't support that attribute, +or if they are using something besides a browser to make requests, you +still want to validate the data in the Flask view. It's important to +always fully validate the data on the server, even if the client does +some validation as well. + + +Log In +------ + +This is identical to the register template except for the title and +submit button. + +.. code-block:: html+jinja + :caption: ``flaskr/templates/auth/login.html`` + + {% extends 'base.html' %} + + {% block header %} +

{% block title %}Log In{% endblock %}

+ {% endblock %} + + {% block content %} +
+ + + + + +
+ {% endblock %} + + +Register A User +--------------- + +Now that the authentication templates are written, you can register a +user. Make sure the server is still running (``flask run`` if it's not), +then go to http://127.0.0.1:5000/auth/register. + +Try clicking the "Register" button without filling out the form and see +that the browser shows an error message. Try removing the ``required`` +attributes from the ``register.html`` template and click "Register" +again. Instead of the browser showing an error, the page will reload and +the error from :func:`flash` in the view will be shown. + +Fill out a username and password and you'll be redirected to the login +page. Try entering an incorrect username, or the correct username and +incorrect password. If you log in you'll get an error because there's +no ``index`` view to redirect to yet. + +Continue to :doc:`static`. diff --git a/_build/_sources/tutorial/tests.rst.txt b/_build/_sources/tutorial/tests.rst.txt new file mode 100644 index 00000000..f4744cda --- /dev/null +++ b/_build/_sources/tutorial/tests.rst.txt @@ -0,0 +1,559 @@ +.. currentmodule:: flask + +Test Coverage +============= + +Writing unit tests for your application lets you check that the code +you wrote works the way you expect. Flask provides a test client that +simulates requests to the application and returns the response data. + +You should test as much of your code as possible. Code in functions only +runs when the function is called, and code in branches, such as ``if`` +blocks, only runs when the condition is met. You want to make sure that +each function is tested with data that covers each branch. + +The closer you get to 100% coverage, the more comfortable you can be +that making a change won't unexpectedly change other behavior. However, +100% coverage doesn't guarantee that your application doesn't have bugs. +In particular, it doesn't test how the user interacts with the +application in the browser. Despite this, test coverage is an important +tool to use during development. + +.. note:: + This is being introduced late in the tutorial, but in your future + projects you should test as you develop. + +You'll use `pytest`_ and `coverage`_ to test and measure your code. +Install them both: + +.. code-block:: none + + $ pip install pytest coverage + +.. _pytest: https://pytest.readthedocs.io/ +.. _coverage: https://coverage.readthedocs.io/ + + +Setup and Fixtures +------------------ + +The test code is located in the ``tests`` directory. This directory is +*next to* the ``flaskr`` package, not inside it. The +``tests/conftest.py`` file contains setup functions called *fixtures* +that each test will use. Tests are in Python modules that start with +``test_``, and each test function in those modules also starts with +``test_``. + +Each test will create a new temporary database file and populate some +data that will be used in the tests. Write a SQL file to insert that +data. + +.. code-block:: sql + :caption: ``tests/data.sql`` + + INSERT INTO user (username, password) + VALUES + ('test', 'pbkdf2:sha256:50000$TCI4GzcX$0de171a4f4dac32e3364c7ddc7c14f3e2fa61f2d17574483f7ffbb431b4acb2f'), + ('other', 'pbkdf2:sha256:50000$kJPKsz6N$d2d4784f1b030a9761f5ccaeeaca413f27f2ecb76d6168407af962ddce849f79'); + + INSERT INTO post (title, body, author_id, created) + VALUES + ('test title', 'test' || x'0a' || 'body', 1, '2018-01-01 00:00:00'); + +The ``app`` fixture will call the factory and pass ``test_config`` to +configure the application and database for testing instead of using your +local development configuration. + +.. code-block:: python + :caption: ``tests/conftest.py`` + + import os + import tempfile + + import pytest + from flaskr import create_app + from flaskr.db import get_db, init_db + + with open(os.path.join(os.path.dirname(__file__), 'data.sql'), 'rb') as f: + _data_sql = f.read().decode('utf8') + + + @pytest.fixture + def app(): + db_fd, db_path = tempfile.mkstemp() + + app = create_app({ + 'TESTING': True, + 'DATABASE': db_path, + }) + + with app.app_context(): + init_db() + get_db().executescript(_data_sql) + + yield app + + os.close(db_fd) + os.unlink(db_path) + + + @pytest.fixture + def client(app): + return app.test_client() + + + @pytest.fixture + def runner(app): + return app.test_cli_runner() + +:func:`tempfile.mkstemp` creates and opens a temporary file, returning +the file descriptor and the path to it. The ``DATABASE`` path is +overridden so it points to this temporary path instead of the instance +folder. After setting the path, the database tables are created and the +test data is inserted. After the test is over, the temporary file is +closed and removed. + +:data:`TESTING` tells Flask that the app is in test mode. Flask changes +some internal behavior so it's easier to test, and other extensions can +also use the flag to make testing them easier. + +The ``client`` fixture calls +:meth:`app.test_client() ` with the application +object created by the ``app`` fixture. Tests will use the client to make +requests to the application without running the server. + +The ``runner`` fixture is similar to ``client``. +:meth:`app.test_cli_runner() ` creates a runner +that can call the Click commands registered with the application. + +Pytest uses fixtures by matching their function names with the names +of arguments in the test functions. For example, the ``test_hello`` +function you'll write next takes a ``client`` argument. Pytest matches +that with the ``client`` fixture function, calls it, and passes the +returned value to the test function. + + +Factory +------- + +There's not much to test about the factory itself. Most of the code will +be executed for each test already, so if something fails the other tests +will notice. + +The only behavior that can change is passing test config. If config is +not passed, there should be some default configuration, otherwise the +configuration should be overridden. + +.. code-block:: python + :caption: ``tests/test_factory.py`` + + from flaskr import create_app + + + def test_config(): + assert not create_app().testing + assert create_app({'TESTING': True}).testing + + + def test_hello(client): + response = client.get('/hello') + assert response.data == b'Hello, World!' + +You added the ``hello`` route as an example when writing the factory at +the beginning of the tutorial. It returns "Hello, World!", so the test +checks that the response data matches. + + +Database +-------- + +Within an application context, ``get_db`` should return the same +connection each time it's called. After the context, the connection +should be closed. + +.. code-block:: python + :caption: ``tests/test_db.py`` + + import sqlite3 + + import pytest + from flaskr.db import get_db + + + def test_get_close_db(app): + with app.app_context(): + db = get_db() + assert db is get_db() + + with pytest.raises(sqlite3.ProgrammingError) as e: + db.execute('SELECT 1') + + assert 'closed' in str(e.value) + +The ``init-db`` command should call the ``init_db`` function and output +a message. + +.. code-block:: python + :caption: ``tests/test_db.py`` + + def test_init_db_command(runner, monkeypatch): + class Recorder(object): + called = False + + def fake_init_db(): + Recorder.called = True + + monkeypatch.setattr('flaskr.db.init_db', fake_init_db) + result = runner.invoke(args=['init-db']) + assert 'Initialized' in result.output + assert Recorder.called + +This test uses Pytest's ``monkeypatch`` fixture to replace the +``init_db`` function with one that records that it's been called. The +``runner`` fixture you wrote above is used to call the ``init-db`` +command by name. + + +Authentication +-------------- + +For most of the views, a user needs to be logged in. The easiest way to +do this in tests is to make a ``POST`` request to the ``login`` view +with the client. Rather than writing that out every time, you can write +a class with methods to do that, and use a fixture to pass it the client +for each test. + +.. code-block:: python + :caption: ``tests/conftest.py`` + + class AuthActions(object): + def __init__(self, client): + self._client = client + + def login(self, username='test', password='test'): + return self._client.post( + '/auth/login', + data={'username': username, 'password': password} + ) + + def logout(self): + return self._client.get('/auth/logout') + + + @pytest.fixture + def auth(client): + return AuthActions(client) + +With the ``auth`` fixture, you can call ``auth.login()`` in a test to +log in as the ``test`` user, which was inserted as part of the test +data in the ``app`` fixture. + +The ``register`` view should render successfully on ``GET``. On ``POST`` +with valid form data, it should redirect to the login URL and the user's +data should be in the database. Invalid data should display error +messages. + +.. code-block:: python + :caption: ``tests/test_auth.py`` + + import pytest + from flask import g, session + from flaskr.db import get_db + + + def test_register(client, app): + assert client.get('/auth/register').status_code == 200 + response = client.post( + '/auth/register', data={'username': 'a', 'password': 'a'} + ) + assert response.headers["Location"] == "/auth/login" + + with app.app_context(): + assert get_db().execute( + "SELECT * FROM user WHERE username = 'a'", + ).fetchone() is not None + + + @pytest.mark.parametrize(('username', 'password', 'message'), ( + ('', '', b'Username is required.'), + ('a', '', b'Password is required.'), + ('test', 'test', b'already registered'), + )) + def test_register_validate_input(client, username, password, message): + response = client.post( + '/auth/register', + data={'username': username, 'password': password} + ) + assert message in response.data + +:meth:`client.get() ` makes a ``GET`` request +and returns the :class:`Response` object returned by Flask. Similarly, +:meth:`client.post() ` makes a ``POST`` +request, converting the ``data`` dict into form data. + +To test that the page renders successfully, a simple request is made and +checked for a ``200 OK`` :attr:`~Response.status_code`. If +rendering failed, Flask would return a ``500 Internal Server Error`` +code. + +:attr:`~Response.headers` will have a ``Location`` header with the login +URL when the register view redirects to the login view. + +:attr:`~Response.data` contains the body of the response as bytes. If +you expect a certain value to render on the page, check that it's in +``data``. Bytes must be compared to bytes. If you want to compare text, +use :meth:`get_data(as_text=True) ` +instead. + +``pytest.mark.parametrize`` tells Pytest to run the same test function +with different arguments. You use it here to test different invalid +input and error messages without writing the same code three times. + +The tests for the ``login`` view are very similar to those for +``register``. Rather than testing the data in the database, +:data:`session` should have ``user_id`` set after logging in. + +.. code-block:: python + :caption: ``tests/test_auth.py`` + + def test_login(client, auth): + assert client.get('/auth/login').status_code == 200 + response = auth.login() + assert response.headers["Location"] == "/" + + with client: + client.get('/') + assert session['user_id'] == 1 + assert g.user['username'] == 'test' + + + @pytest.mark.parametrize(('username', 'password', 'message'), ( + ('a', 'test', b'Incorrect username.'), + ('test', 'a', b'Incorrect password.'), + )) + def test_login_validate_input(auth, username, password, message): + response = auth.login(username, password) + assert message in response.data + +Using ``client`` in a ``with`` block allows accessing context variables +such as :data:`session` after the response is returned. Normally, +accessing ``session`` outside of a request would raise an error. + +Testing ``logout`` is the opposite of ``login``. :data:`session` should +not contain ``user_id`` after logging out. + +.. code-block:: python + :caption: ``tests/test_auth.py`` + + def test_logout(client, auth): + auth.login() + + with client: + auth.logout() + assert 'user_id' not in session + + +Blog +---- + +All the blog views use the ``auth`` fixture you wrote earlier. Call +``auth.login()`` and subsequent requests from the client will be logged +in as the ``test`` user. + +The ``index`` view should display information about the post that was +added with the test data. When logged in as the author, there should be +a link to edit the post. + +You can also test some more authentication behavior while testing the +``index`` view. When not logged in, each page shows links to log in or +register. When logged in, there's a link to log out. + +.. code-block:: python + :caption: ``tests/test_blog.py`` + + import pytest + from flaskr.db import get_db + + + def test_index(client, auth): + response = client.get('/') + assert b"Log In" in response.data + assert b"Register" in response.data + + auth.login() + response = client.get('/') + assert b'Log Out' in response.data + assert b'test title' in response.data + assert b'by test on 2018-01-01' in response.data + assert b'test\nbody' in response.data + assert b'href="/1/update"' in response.data + +A user must be logged in to access the ``create``, ``update``, and +``delete`` views. The logged in user must be the author of the post to +access ``update`` and ``delete``, otherwise a ``403 Forbidden`` status +is returned. If a ``post`` with the given ``id`` doesn't exist, +``update`` and ``delete`` should return ``404 Not Found``. + +.. code-block:: python + :caption: ``tests/test_blog.py`` + + @pytest.mark.parametrize('path', ( + '/create', + '/1/update', + '/1/delete', + )) + def test_login_required(client, path): + response = client.post(path) + assert response.headers["Location"] == "/auth/login" + + + def test_author_required(app, client, auth): + # change the post author to another user + with app.app_context(): + db = get_db() + db.execute('UPDATE post SET author_id = 2 WHERE id = 1') + db.commit() + + auth.login() + # current user can't modify other user's post + assert client.post('/1/update').status_code == 403 + assert client.post('/1/delete').status_code == 403 + # current user doesn't see edit link + assert b'href="/1/update"' not in client.get('/').data + + + @pytest.mark.parametrize('path', ( + '/2/update', + '/2/delete', + )) + def test_exists_required(client, auth, path): + auth.login() + assert client.post(path).status_code == 404 + +The ``create`` and ``update`` views should render and return a +``200 OK`` status for a ``GET`` request. When valid data is sent in a +``POST`` request, ``create`` should insert the new post data into the +database, and ``update`` should modify the existing data. Both pages +should show an error message on invalid data. + +.. code-block:: python + :caption: ``tests/test_blog.py`` + + def test_create(client, auth, app): + auth.login() + assert client.get('/create').status_code == 200 + client.post('/create', data={'title': 'created', 'body': ''}) + + with app.app_context(): + db = get_db() + count = db.execute('SELECT COUNT(id) FROM post').fetchone()[0] + assert count == 2 + + + def test_update(client, auth, app): + auth.login() + assert client.get('/1/update').status_code == 200 + client.post('/1/update', data={'title': 'updated', 'body': ''}) + + with app.app_context(): + db = get_db() + post = db.execute('SELECT * FROM post WHERE id = 1').fetchone() + assert post['title'] == 'updated' + + + @pytest.mark.parametrize('path', ( + '/create', + '/1/update', + )) + def test_create_update_validate(client, auth, path): + auth.login() + response = client.post(path, data={'title': '', 'body': ''}) + assert b'Title is required.' in response.data + +The ``delete`` view should redirect to the index URL and the post should +no longer exist in the database. + +.. code-block:: python + :caption: ``tests/test_blog.py`` + + def test_delete(client, auth, app): + auth.login() + response = client.post('/1/delete') + assert response.headers["Location"] == "/" + + with app.app_context(): + db = get_db() + post = db.execute('SELECT * FROM post WHERE id = 1').fetchone() + assert post is None + + +Running the Tests +----------------- + +Some extra configuration, which is not required but makes running tests with coverage +less verbose, can be added to the project's ``pyproject.toml`` file. + +.. code-block:: toml + :caption: ``pyproject.toml`` + + [tool.pytest.ini_options] + testpaths = ["tests"] + + [tool.coverage.run] + branch = true + source = ["flaskr"] + +To run the tests, use the ``pytest`` command. It will find and run all +the test functions you've written. + +.. code-block:: none + + $ pytest + + ========================= test session starts ========================== + platform linux -- Python 3.6.4, pytest-3.5.0, py-1.5.3, pluggy-0.6.0 + rootdir: /home/user/Projects/flask-tutorial + collected 23 items + + tests/test_auth.py ........ [ 34%] + tests/test_blog.py ............ [ 86%] + tests/test_db.py .. [ 95%] + tests/test_factory.py .. [100%] + + ====================== 24 passed in 0.64 seconds ======================= + +If any tests fail, pytest will show the error that was raised. You can +run ``pytest -v`` to get a list of each test function rather than dots. + +To measure the code coverage of your tests, use the ``coverage`` command +to run pytest instead of running it directly. + +.. code-block:: none + + $ coverage run -m pytest + +You can either view a simple coverage report in the terminal: + +.. code-block:: none + + $ coverage report + + Name Stmts Miss Branch BrPart Cover + ------------------------------------------------------ + flaskr/__init__.py 21 0 2 0 100% + flaskr/auth.py 54 0 22 0 100% + flaskr/blog.py 54 0 16 0 100% + flaskr/db.py 24 0 4 0 100% + ------------------------------------------------------ + TOTAL 153 0 44 0 100% + +An HTML report allows you to see which lines were covered in each file: + +.. code-block:: none + + $ coverage html + +This generates files in the ``htmlcov`` directory. Open +``htmlcov/index.html`` in your browser to see the report. + +Continue to :doc:`deploy`. diff --git a/_build/_sources/tutorial/views.rst.txt b/_build/_sources/tutorial/views.rst.txt new file mode 100644 index 00000000..7092dbc2 --- /dev/null +++ b/_build/_sources/tutorial/views.rst.txt @@ -0,0 +1,305 @@ +.. currentmodule:: flask + +Blueprints and Views +==================== + +A view function is the code you write to respond to requests to your +application. Flask uses patterns to match the incoming request URL to +the view that should handle it. The view returns data that Flask turns +into an outgoing response. Flask can also go the other direction and +generate a URL to a view based on its name and arguments. + + +Create a Blueprint +------------------ + +A :class:`Blueprint` is a way to organize a group of related views and +other code. Rather than registering views and other code directly with +an application, they are registered with a blueprint. Then the blueprint +is registered with the application when it is available in the factory +function. + +Flaskr will have two blueprints, one for authentication functions and +one for the blog posts functions. The code for each blueprint will go +in a separate module. Since the blog needs to know about authentication, +you'll write the authentication one first. + +.. code-block:: python + :caption: ``flaskr/auth.py`` + + import functools + + from flask import ( + Blueprint, flash, g, redirect, render_template, request, session, url_for + ) + from werkzeug.security import check_password_hash, generate_password_hash + + from flaskr.db import get_db + + bp = Blueprint('auth', __name__, url_prefix='/auth') + +This creates a :class:`Blueprint` named ``'auth'``. Like the application +object, the blueprint needs to know where it's defined, so ``__name__`` +is passed as the second argument. The ``url_prefix`` will be prepended +to all the URLs associated with the blueprint. + +Import and register the blueprint from the factory using +:meth:`app.register_blueprint() `. Place the +new code at the end of the factory function before returning the app. + +.. code-block:: python + :caption: ``flaskr/__init__.py`` + + def create_app(): + app = ... + # existing code omitted + + from . import auth + app.register_blueprint(auth.bp) + + return app + +The authentication blueprint will have views to register new users and +to log in and log out. + + +The First View: Register +------------------------ + +When the user visits the ``/auth/register`` URL, the ``register`` view +will return `HTML`_ with a form for them to fill out. When they submit +the form, it will validate their input and either show the form again +with an error message or create the new user and go to the login page. + +.. _HTML: https://developer.mozilla.org/docs/Web/HTML + +For now you will just write the view code. On the next page, you'll +write templates to generate the HTML form. + +.. code-block:: python + :caption: ``flaskr/auth.py`` + + @bp.route('/register', methods=('GET', 'POST')) + def register(): + if request.method == 'POST': + username = request.form['username'] + password = request.form['password'] + db = get_db() + error = None + + if not username: + error = 'Username is required.' + elif not password: + error = 'Password is required.' + + if error is None: + try: + db.execute( + "INSERT INTO user (username, password) VALUES (?, ?)", + (username, generate_password_hash(password)), + ) + db.commit() + except db.IntegrityError: + error = f"User {username} is already registered." + else: + return redirect(url_for("auth.login")) + + flash(error) + + return render_template('auth/register.html') + +Here's what the ``register`` view function is doing: + +#. :meth:`@bp.route ` associates the URL ``/register`` + with the ``register`` view function. When Flask receives a request + to ``/auth/register``, it will call the ``register`` view and use + the return value as the response. + +#. If the user submitted the form, + :attr:`request.method ` will be ``'POST'``. In this + case, start validating the input. + +#. :attr:`request.form ` is a special type of + :class:`dict` mapping submitted form keys and values. The user will + input their ``username`` and ``password``. + +#. Validate that ``username`` and ``password`` are not empty. + +#. If validation succeeds, insert the new user data into the database. + + - :meth:`db.execute ` takes a SQL + query with ``?`` placeholders for any user input, and a tuple of + values to replace the placeholders with. The database library + will take care of escaping the values so you are not vulnerable + to a *SQL injection attack*. + + - For security, passwords should never be stored in the database + directly. Instead, + :func:`~werkzeug.security.generate_password_hash` is used to + securely hash the password, and that hash is stored. Since this + query modifies data, + :meth:`db.commit() ` needs to be + called afterwards to save the changes. + + - An :exc:`sqlite3.IntegrityError` will occur if the username + already exists, which should be shown to the user as another + validation error. + +#. After storing the user, they are redirected to the login page. + :func:`url_for` generates the URL for the login view based on its + name. This is preferable to writing the URL directly as it allows + you to change the URL later without changing all code that links to + it. :func:`redirect` generates a redirect response to the generated + URL. + +#. If validation fails, the error is shown to the user. :func:`flash` + stores messages that can be retrieved when rendering the template. + +#. When the user initially navigates to ``auth/register``, or + there was a validation error, an HTML page with the registration + form should be shown. :func:`render_template` will render a template + containing the HTML, which you'll write in the next step of the + tutorial. + + +Login +----- + +This view follows the same pattern as the ``register`` view above. + +.. code-block:: python + :caption: ``flaskr/auth.py`` + + @bp.route('/login', methods=('GET', 'POST')) + def login(): + if request.method == 'POST': + username = request.form['username'] + password = request.form['password'] + db = get_db() + error = None + user = db.execute( + 'SELECT * FROM user WHERE username = ?', (username,) + ).fetchone() + + if user is None: + error = 'Incorrect username.' + elif not check_password_hash(user['password'], password): + error = 'Incorrect password.' + + if error is None: + session.clear() + session['user_id'] = user['id'] + return redirect(url_for('index')) + + flash(error) + + return render_template('auth/login.html') + +There are a few differences from the ``register`` view: + +#. The user is queried first and stored in a variable for later use. + + :meth:`~sqlite3.Cursor.fetchone` returns one row from the query. + If the query returned no results, it returns ``None``. Later, + :meth:`~sqlite3.Cursor.fetchall` will be used, which returns a list + of all results. + +#. :func:`~werkzeug.security.check_password_hash` hashes the submitted + password in the same way as the stored hash and securely compares + them. If they match, the password is valid. + +#. :data:`session` is a :class:`dict` that stores data across requests. + When validation succeeds, the user's ``id`` is stored in a new + session. The data is stored in a *cookie* that is sent to the + browser, and the browser then sends it back with subsequent requests. + Flask securely *signs* the data so that it can't be tampered with. + +Now that the user's ``id`` is stored in the :data:`session`, it will be +available on subsequent requests. At the beginning of each request, if +a user is logged in their information should be loaded and made +available to other views. + +.. code-block:: python + :caption: ``flaskr/auth.py`` + + @bp.before_app_request + def load_logged_in_user(): + user_id = session.get('user_id') + + if user_id is None: + g.user = None + else: + g.user = get_db().execute( + 'SELECT * FROM user WHERE id = ?', (user_id,) + ).fetchone() + +:meth:`bp.before_app_request() ` registers +a function that runs before the view function, no matter what URL is +requested. ``load_logged_in_user`` checks if a user id is stored in the +:data:`session` and gets that user's data from the database, storing it +on :data:`g.user `, which lasts for the length of the request. If +there is no user id, or if the id doesn't exist, ``g.user`` will be +``None``. + + +Logout +------ + +To log out, you need to remove the user id from the :data:`session`. +Then ``load_logged_in_user`` won't load a user on subsequent requests. + +.. code-block:: python + :caption: ``flaskr/auth.py`` + + @bp.route('/logout') + def logout(): + session.clear() + return redirect(url_for('index')) + + +Require Authentication in Other Views +------------------------------------- + +Creating, editing, and deleting blog posts will require a user to be +logged in. A *decorator* can be used to check this for each view it's +applied to. + +.. code-block:: python + :caption: ``flaskr/auth.py`` + + def login_required(view): + @functools.wraps(view) + def wrapped_view(**kwargs): + if g.user is None: + return redirect(url_for('auth.login')) + + return view(**kwargs) + + return wrapped_view + +This decorator returns a new view function that wraps the original view +it's applied to. The new function checks if a user is loaded and +redirects to the login page otherwise. If a user is loaded the original +view is called and continues normally. You'll use this decorator when +writing the blog views. + +Endpoints and URLs +------------------ + +The :func:`url_for` function generates the URL to a view based on a name +and arguments. The name associated with a view is also called the +*endpoint*, and by default it's the same as the name of the view +function. + +For example, the ``hello()`` view that was added to the app +factory earlier in the tutorial has the name ``'hello'`` and can be +linked to with ``url_for('hello')``. If it took an argument, which +you'll see later, it would be linked to using +``url_for('hello', who='World')``. + +When using a blueprint, the name of the blueprint is prepended to the +name of the function, so the endpoint for the ``login`` function you +wrote above is ``'auth.login'`` because you added it to the ``'auth'`` +blueprint. + +Continue to :doc:`templates`. diff --git a/_build/_sources/views.rst.txt b/_build/_sources/views.rst.txt new file mode 100644 index 00000000..f2210270 --- /dev/null +++ b/_build/_sources/views.rst.txt @@ -0,0 +1,324 @@ +Class-based Views +================= + +.. currentmodule:: flask.views + +This page introduces using the :class:`View` and :class:`MethodView` +classes to write class-based views. + +A class-based view is a class that acts as a view function. Because it +is a class, different instances of the class can be created with +different arguments, to change the behavior of the view. This is also +known as generic, reusable, or pluggable views. + +An example of where this is useful is defining a class that creates an +API based on the database model it is initialized with. + +For more complex API behavior and customization, look into the various +API extensions for Flask. + + +Basic Reusable View +------------------- + +Let's walk through an example converting a view function to a view +class. We start with a view function that queries a list of users then +renders a template to show the list. + +.. code-block:: python + + @app.route("/users/") + def user_list(): + users = User.query.all() + return render_template("users.html", users=users) + +This works for the user model, but let's say you also had more models +that needed list pages. You'd need to write another view function for +each model, even though the only thing that would change is the model +and template name. + +Instead, you can write a :class:`View` subclass that will query a model +and render a template. As the first step, we'll convert the view to a +class without any customization. + +.. code-block:: python + + from flask.views import View + + class UserList(View): + def dispatch_request(self): + users = User.query.all() + return render_template("users.html", objects=users) + + app.add_url_rule("/users/", view_func=UserList.as_view("user_list")) + +The :meth:`View.dispatch_request` method is the equivalent of the view +function. Calling :meth:`View.as_view` method will create a view +function that can be registered on the app with its +:meth:`~flask.Flask.add_url_rule` method. The first argument to +``as_view`` is the name to use to refer to the view with +:func:`~flask.url_for`. + +.. note:: + + You can't decorate the class with ``@app.route()`` the way you'd + do with a basic view function. + +Next, we need to be able to register the same view class for different +models and templates, to make it more useful than the original function. +The class will take two arguments, the model and template, and store +them on ``self``. Then ``dispatch_request`` can reference these instead +of hard-coded values. + +.. code-block:: python + + class ListView(View): + def __init__(self, model, template): + self.model = model + self.template = template + + def dispatch_request(self): + items = self.model.query.all() + return render_template(self.template, items=items) + +Remember, we create the view function with ``View.as_view()`` instead of +creating the class directly. Any extra arguments passed to ``as_view`` +are then passed when creating the class. Now we can register the same +view to handle multiple models. + +.. code-block:: python + + app.add_url_rule( + "/users/", + view_func=ListView.as_view("user_list", User, "users.html"), + ) + app.add_url_rule( + "/stories/", + view_func=ListView.as_view("story_list", Story, "stories.html"), + ) + + +URL Variables +------------- + +Any variables captured by the URL are passed as keyword arguments to the +``dispatch_request`` method, as they would be for a regular view +function. + +.. code-block:: python + + class DetailView(View): + def __init__(self, model): + self.model = model + self.template = f"{model.__name__.lower()}/detail.html" + + def dispatch_request(self, id) + item = self.model.query.get_or_404(id) + return render_template(self.template, item=item) + + app.add_url_rule( + "/users/", + view_func=DetailView.as_view("user_detail", User) + ) + + +View Lifetime and ``self`` +-------------------------- + +By default, a new instance of the view class is created every time a +request is handled. This means that it is safe to write other data to +``self`` during the request, since the next request will not see it, +unlike other forms of global state. + +However, if your view class needs to do a lot of complex initialization, +doing it for every request is unnecessary and can be inefficient. To +avoid this, set :attr:`View.init_every_request` to ``False``, which will +only create one instance of the class and use it for every request. In +this case, writing to ``self`` is not safe. If you need to store data +during the request, use :data:`~flask.g` instead. + +In the ``ListView`` example, nothing writes to ``self`` during the +request, so it is more efficient to create a single instance. + +.. code-block:: python + + class ListView(View): + init_every_request = False + + def __init__(self, model, template): + self.model = model + self.template = template + + def dispatch_request(self): + items = self.model.query.all() + return render_template(self.template, items=items) + +Different instances will still be created each for each ``as_view`` +call, but not for each request to those views. + + +View Decorators +--------------- + +The view class itself is not the view function. View decorators need to +be applied to the view function returned by ``as_view``, not the class +itself. Set :attr:`View.decorators` to a list of decorators to apply. + +.. code-block:: python + + class UserList(View): + decorators = [cache(minutes=2), login_required] + + app.add_url_rule('/users/', view_func=UserList.as_view()) + +If you didn't set ``decorators``, you could apply them manually instead. +This is equivalent to: + +.. code-block:: python + + view = UserList.as_view("users_list") + view = cache(minutes=2)(view) + view = login_required(view) + app.add_url_rule('/users/', view_func=view) + +Keep in mind that order matters. If you're used to ``@decorator`` style, +this is equivalent to: + +.. code-block:: python + + @app.route("/users/") + @login_required + @cache(minutes=2) + def user_list(): + ... + + +Method Hints +------------ + +A common pattern is to register a view with ``methods=["GET", "POST"]``, +then check ``request.method == "POST"`` to decide what to do. Setting +:attr:`View.methods` is equivalent to passing the list of methods to +``add_url_rule`` or ``route``. + +.. code-block:: python + + class MyView(View): + methods = ["GET", "POST"] + + def dispatch_request(self): + if request.method == "POST": + ... + ... + + app.add_url_rule('/my-view', view_func=MyView.as_view('my-view')) + +This is equivalent to the following, except further subclasses can +inherit or change the methods. + +.. code-block:: python + + app.add_url_rule( + "/my-view", + view_func=MyView.as_view("my-view"), + methods=["GET", "POST"], + ) + + +Method Dispatching and APIs +--------------------------- + +For APIs it can be helpful to use a different function for each HTTP +method. :class:`MethodView` extends the basic :class:`View` to dispatch +to different methods of the class based on the request method. Each HTTP +method maps to a method of the class with the same (lowercase) name. + +:class:`MethodView` automatically sets :attr:`View.methods` based on the +methods defined by the class. It even knows how to handle subclasses +that override or define other methods. + +We can make a generic ``ItemAPI`` class that provides get (detail), +patch (edit), and delete methods for a given model. A ``GroupAPI`` can +provide get (list) and post (create) methods. + +.. code-block:: python + + from flask.views import MethodView + + class ItemAPI(MethodView): + init_every_request = False + + def __init__(self, model): + self.model = model + self.validator = generate_validator(model) + + def _get_item(self, id): + return self.model.query.get_or_404(id) + + def get(self, id): + item = self._get_item(id) + return jsonify(item.to_json()) + + def patch(self, id): + item = self._get_item(id) + errors = self.validator.validate(item, request.json) + + if errors: + return jsonify(errors), 400 + + item.update_from_json(request.json) + db.session.commit() + return jsonify(item.to_json()) + + def delete(self, id): + item = self._get_item(id) + db.session.delete(item) + db.session.commit() + return "", 204 + + class GroupAPI(MethodView): + init_every_request = False + + def __init__(self, model): + self.model = model + self.validator = generate_validator(model, create=True) + + def get(self): + items = self.model.query.all() + return jsonify([item.to_json() for item in items]) + + def post(self): + errors = self.validator.validate(request.json) + + if errors: + return jsonify(errors), 400 + + db.session.add(self.model.from_json(request.json)) + db.session.commit() + return jsonify(item.to_json()) + + def register_api(app, model, name): + item = ItemAPI.as_view(f"{name}-item", model) + group = GroupAPI.as_view(f"{name}-group", model) + app.add_url_rule(f"/{name}/", view_func=item) + app.add_url_rule(f"/{name}/", view_func=group) + + register_api(app, User, "users") + register_api(app, Story, "stories") + +This produces the following views, a standard REST API! + +================= ========== =================== +URL Method Description +----------------- ---------- ------------------- +``/users/`` ``GET`` List all users +``/users/`` ``POST`` Create a new user +``/users/`` ``GET`` Show a single user +``/users/`` ``PATCH`` Update a user +``/users/`` ``DELETE`` Delete a user +``/stories/`` ``GET`` List all stories +``/stories/`` ``POST`` Create a new story +``/stories/`` ``GET`` Show a single story +``/stories/`` ``PATCH`` Update a story +``/stories/`` ``DELETE`` Delete a story +================= ========== =================== diff --git a/_build/_sources/web-security.rst.txt b/_build/_sources/web-security.rst.txt new file mode 100644 index 00000000..f13bb7b8 --- /dev/null +++ b/_build/_sources/web-security.rst.txt @@ -0,0 +1,308 @@ +Security Considerations +======================= + +Web applications face many types of potential security problems, and it can be +hard to get everything right, or even to know what "right" is in general. Flask +tries to solve a few of these things by default, but there are other parts you +may have to take care of yourself. Many of these solutions are tradeoffs, and +will depend on each application's specific needs and threat model. Many hosting +platforms may take care of certain types of problems without the need for the +Flask application to handle them. + +Resource Use +------------ + +A common category of attacks is "Denial of Service" (DoS or DDoS). This is a +very broad category, and different variants target different layers in a +deployed application. In general, something is done to increase how much +processing time or memory is used to handle each request, to the point where +there are not enough resources to handle legitimate requests. + +Flask provides a few configuration options to handle resource use. They can +also be set on individual requests to customize only that request. The +documentation for each goes into more detail. + +- :data:`MAX_CONTENT_LENGTH` or :attr:`.Request.max_content_length` controls + how much data will be read from a request. It is not set by default, + although it will still block truly unlimited streams unless the WSGI server + indicates support. +- :data:`MAX_FORM_MEMORY_SIZE` or :attr:`.Request.max_form_memory_size` + controls how large any non-file ``multipart/form-data`` field can be. It is + set to 500kB by default. +- :data:`MAX_FORM_PARTS` or :attr:`.Request.max_form_parts` controls how many + ``multipart/form-data`` fields can be parsed. It is set to 1000 by default. + Combined with the default `max_form_memory_size`, this means that a form + will occupy at most 500MB of memory. + +Regardless of these settings, you should also review what settings are available +from your operating system, container deployment (Docker etc), WSGI server, HTTP +server, and hosting platform. They typically have ways to set process resource +limits, timeouts, and other checks regardless of how Flask is configured. + +.. _security-xss: + +Cross-Site Scripting (XSS) +-------------------------- + +Cross site scripting is the concept of injecting arbitrary HTML (and with +it JavaScript) into the context of a website. To remedy this, developers +have to properly escape text so that it cannot include arbitrary HTML +tags. For more information on that have a look at the Wikipedia article +on `Cross-Site Scripting +`_. + +Flask configures Jinja2 to automatically escape all values unless +explicitly told otherwise. This should rule out all XSS problems caused +in templates, but there are still other places where you have to be +careful: + +- generating HTML without the help of Jinja2 +- calling :class:`~markupsafe.Markup` on data submitted by users +- sending out HTML from uploaded files, never do that, use the + ``Content-Disposition: attachment`` header to prevent that problem. +- sending out textfiles from uploaded files. Some browsers are using + content-type guessing based on the first few bytes so users could + trick a browser to execute HTML. + +Another thing that is very important are unquoted attributes. While +Jinja2 can protect you from XSS issues by escaping HTML, there is one +thing it cannot protect you from: XSS by attribute injection. To counter +this possible attack vector, be sure to always quote your attributes with +either double or single quotes when using Jinja expressions in them: + +.. sourcecode:: html+jinja + + + +Why is this necessary? Because if you would not be doing that, an +attacker could easily inject custom JavaScript handlers. For example an +attacker could inject this piece of HTML+JavaScript: + +.. sourcecode:: html + + onmouseover=alert(document.cookie) + +When the user would then move with the mouse over the input, the cookie +would be presented to the user in an alert window. But instead of showing +the cookie to the user, a good attacker might also execute any other +JavaScript code. In combination with CSS injections the attacker might +even make the element fill out the entire page so that the user would +just have to have the mouse anywhere on the page to trigger the attack. + +There is one class of XSS issues that Jinja's escaping does not protect +against. The ``a`` tag's ``href`` attribute can contain a `javascript:` URI, +which the browser will execute when clicked if not secured properly. + +.. sourcecode:: html + + click here + click here + +To prevent this, you'll need to set the :ref:`security-csp` response header. + +Cross-Site Request Forgery (CSRF) +--------------------------------- + +Another big problem is CSRF. This is a very complex topic and I won't +outline it here in detail just mention what it is and how to theoretically +prevent it. + +If your authentication information is stored in cookies, you have implicit +state management. The state of "being logged in" is controlled by a +cookie, and that cookie is sent with each request to a page. +Unfortunately that includes requests triggered by 3rd party sites. If you +don't keep that in mind, some people might be able to trick your +application's users with social engineering to do stupid things without +them knowing. + +Say you have a specific URL that, when you sent ``POST`` requests to will +delete a user's profile (say ``http://example.com/user/delete``). If an +attacker now creates a page that sends a post request to that page with +some JavaScript they just have to trick some users to load that page and +their profiles will end up being deleted. + +Imagine you were to run Facebook with millions of concurrent users and +someone would send out links to images of little kittens. When users +would go to that page, their profiles would get deleted while they are +looking at images of fluffy cats. + +How can you prevent that? Basically for each request that modifies +content on the server you would have to either use a one-time token and +store that in the cookie **and** also transmit it with the form data. +After receiving the data on the server again, you would then have to +compare the two tokens and ensure they are equal. + +Why does Flask not do that for you? The ideal place for this to happen is +the form validation framework, which does not exist in Flask. + +.. _security-json: + +JSON Security +------------- + +In Flask 0.10 and lower, :func:`~flask.jsonify` did not serialize top-level +arrays to JSON. This was because of a security vulnerability in ECMAScript 4. + +ECMAScript 5 closed this vulnerability, so only extremely old browsers are +still vulnerable. All of these browsers have `other more serious +vulnerabilities +`_, so +this behavior was changed and :func:`~flask.jsonify` now supports serializing +arrays. + +Security Headers +---------------- + +Browsers recognize various response headers in order to control security. We +recommend reviewing each of the headers below for use in your application. +The `Flask-Talisman`_ extension can be used to manage HTTPS and the security +headers for you. + +.. _Flask-Talisman: https://github.com/GoogleCloudPlatform/flask-talisman + +HTTP Strict Transport Security (HSTS) +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +Tells the browser to convert all HTTP requests to HTTPS, preventing +man-in-the-middle (MITM) attacks. :: + + response.headers['Strict-Transport-Security'] = 'max-age=31536000; includeSubDomains' + +- https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Strict-Transport-Security + +.. _security-csp: + +Content Security Policy (CSP) +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +Tell the browser where it can load various types of resource from. This header +should be used whenever possible, but requires some work to define the correct +policy for your site. A very strict policy would be:: + + response.headers['Content-Security-Policy'] = "default-src 'self'" + +- https://csp.withgoogle.com/docs/index.html +- https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Content-Security-Policy + +X-Content-Type-Options +~~~~~~~~~~~~~~~~~~~~~~ + +Forces the browser to honor the response content type instead of trying to +detect it, which can be abused to generate a cross-site scripting (XSS) +attack. :: + + response.headers['X-Content-Type-Options'] = 'nosniff' + +- https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/X-Content-Type-Options + +X-Frame-Options +~~~~~~~~~~~~~~~ + +Prevents external sites from embedding your site in an ``iframe``. This +prevents a class of attacks where clicks in the outer frame can be translated +invisibly to clicks on your page's elements. This is also known as +"clickjacking". :: + + response.headers['X-Frame-Options'] = 'SAMEORIGIN' + +- https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/X-Frame-Options + +.. _security-cookie: + +Set-Cookie options +~~~~~~~~~~~~~~~~~~ + +These options can be added to a ``Set-Cookie`` header to improve their +security. Flask has configuration options to set these on the session cookie. +They can be set on other cookies too. + +- ``Secure`` limits cookies to HTTPS traffic only. +- ``HttpOnly`` protects the contents of cookies from being read with + JavaScript. +- ``SameSite`` restricts how cookies are sent with requests from + external sites. Can be set to ``'Lax'`` (recommended) or ``'Strict'``. + ``Lax`` prevents sending cookies with CSRF-prone requests from + external sites, such as submitting a form. ``Strict`` prevents sending + cookies with all external requests, including following regular links. + +:: + + app.config.update( + SESSION_COOKIE_SECURE=True, + SESSION_COOKIE_HTTPONLY=True, + SESSION_COOKIE_SAMESITE='Lax', + ) + + response.set_cookie('username', 'flask', secure=True, httponly=True, samesite='Lax') + +Specifying ``Expires`` or ``Max-Age`` options, will remove the cookie after +the given time, or the current time plus the age, respectively. If neither +option is set, the cookie will be removed when the browser is closed. :: + + # cookie expires after 10 minutes + response.set_cookie('snakes', '3', max_age=600) + +For the session cookie, if :attr:`session.permanent ` +is set, then :data:`PERMANENT_SESSION_LIFETIME` is used to set the expiration. +Flask's default cookie implementation validates that the cryptographic +signature is not older than this value. Lowering this value may help mitigate +replay attacks, where intercepted cookies can be sent at a later time. :: + + app.config.update( + PERMANENT_SESSION_LIFETIME=600 + ) + + @app.route('/login', methods=['POST']) + def login(): + ... + session.clear() + session['user_id'] = user.id + session.permanent = True + ... + +Use :class:`itsdangerous.TimedSerializer` to sign and validate other cookie +values (or any values that need secure signatures). + +- https://developer.mozilla.org/en-US/docs/Web/HTTP/Cookies +- https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Set-Cookie + +.. _samesite_support: https://caniuse.com/#feat=same-site-cookie-attribute + + +HTTP Public Key Pinning (HPKP) +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +This tells the browser to authenticate with the server using only the specific +certificate key to prevent MITM attacks. + +.. warning:: + Be careful when enabling this, as it is very difficult to undo if you set up + or upgrade your key incorrectly. + +- https://developer.mozilla.org/en-US/docs/Web/HTTP/Public_Key_Pinning + + +Copy/Paste to Terminal +---------------------- + +Hidden characters such as the backspace character (``\b``, ``^H``) can +cause text to render differently in HTML than how it is interpreted if +`pasted into a terminal `__. + +For example, ``import y\bose\bm\bi\bt\be\b`` renders as +``import yosemite`` in HTML, but the backspaces are applied when pasted +into a terminal, and it becomes ``import os``. + +If you expect users to copy and paste untrusted code from your site, +such as from comments posted by users on a technical blog, consider +applying extra filtering, such as replacing all ``\b`` characters. + +.. code-block:: python + + body = body.replace("\b", "") + +Most modern terminals will warn about and remove hidden characters when +pasting, so this isn't strictly necessary. It's also possible to craft +dangerous commands in other ways that aren't possible to filter. +Depending on your site's use case, it may be good to show a warning +about copying code in general. diff --git a/_build/_static/basic.css b/_build/_static/basic.css new file mode 100644 index 00000000..93a4776b --- /dev/null +++ b/_build/_static/basic.css @@ -0,0 +1,914 @@ +/* + * Sphinx stylesheet -- basic theme. + */ + +/* -- main layout ----------------------------------------------------------- */ + +div.clearer { + clear: both; +} + +div.section::after { + display: block; + content: ''; + clear: left; +} + +/* -- relbar ---------------------------------------------------------------- */ + +div.related { + width: 100%; + font-size: 90%; +} + +div.related h3 { + display: none; +} + +div.related ul { + margin: 0; + padding: 0 0 0 10px; + list-style: none; +} + +div.related li { + display: inline; +} + +div.related li.right { + float: right; + margin-right: 5px; +} + +/* -- sidebar --------------------------------------------------------------- */ + +div.sphinxsidebarwrapper { + padding: 10px 5px 0 10px; +} + +div.sphinxsidebar { + float: left; + width: 230px; + margin-left: -100%; + font-size: 90%; + word-wrap: break-word; + overflow-wrap : break-word; +} + +div.sphinxsidebar ul { + list-style: none; +} + +div.sphinxsidebar ul ul, +div.sphinxsidebar ul.want-points { + margin-left: 20px; + list-style: square; +} + +div.sphinxsidebar ul ul { + margin-top: 0; + margin-bottom: 0; +} + +div.sphinxsidebar form { + margin-top: 10px; +} + +div.sphinxsidebar input { + border: 1px solid #98dbcc; + font-family: sans-serif; + font-size: 1em; +} + +div.sphinxsidebar #searchbox form.search { + overflow: hidden; +} + +div.sphinxsidebar #searchbox input[type="text"] { + float: left; + width: 80%; + padding: 0.25em; + box-sizing: border-box; +} + +div.sphinxsidebar #searchbox input[type="submit"] { + float: left; + width: 20%; + border-left: none; + padding: 0.25em; + box-sizing: border-box; +} + + +img { + border: 0; + max-width: 100%; +} + +/* -- search page ----------------------------------------------------------- */ + +ul.search { + margin-top: 10px; +} + +ul.search li { + padding: 5px 0; +} + +ul.search li a { + font-weight: bold; +} + +ul.search li p.context { + color: #888; + margin: 2px 0 0 30px; + text-align: left; +} + +ul.keywordmatches li.goodmatch a { + font-weight: bold; +} + +/* -- index page ------------------------------------------------------------ */ + +table.contentstable { + width: 90%; + margin-left: auto; + margin-right: auto; +} + +table.contentstable p.biglink { + line-height: 150%; +} + +a.biglink { + font-size: 1.3em; +} + +span.linkdescr { + font-style: italic; + padding-top: 5px; + font-size: 90%; +} + +/* -- general index --------------------------------------------------------- */ + +table.indextable { + width: 100%; +} + +table.indextable td { + text-align: left; + vertical-align: top; +} + +table.indextable ul { + margin-top: 0; + margin-bottom: 0; + list-style-type: none; +} + +table.indextable > tbody > tr > td > ul { + padding-left: 0em; +} + +table.indextable tr.pcap { + height: 10px; +} + +table.indextable tr.cap { + margin-top: 10px; + background-color: #f2f2f2; +} + +img.toggler { + margin-right: 3px; + margin-top: 3px; + cursor: pointer; +} + +div.modindex-jumpbox { + border-top: 1px solid #ddd; + border-bottom: 1px solid #ddd; + margin: 1em 0 1em 0; + padding: 0.4em; +} + +div.genindex-jumpbox { + border-top: 1px solid #ddd; + border-bottom: 1px solid #ddd; + margin: 1em 0 1em 0; + padding: 0.4em; +} + +/* -- domain module index --------------------------------------------------- */ + +table.modindextable td { + padding: 2px; + border-collapse: collapse; +} + +/* -- general body styles --------------------------------------------------- */ + +div.body { + min-width: 360px; + max-width: 800px; +} + +div.body p, div.body dd, div.body li, div.body blockquote { + -moz-hyphens: auto; + -ms-hyphens: auto; + -webkit-hyphens: auto; + hyphens: auto; +} + +a.headerlink { + visibility: hidden; +} + +a:visited { + color: #551A8B; +} + +h1:hover > a.headerlink, +h2:hover > a.headerlink, +h3:hover > a.headerlink, +h4:hover > a.headerlink, +h5:hover > a.headerlink, +h6:hover > a.headerlink, +dt:hover > a.headerlink, +caption:hover > a.headerlink, +p.caption:hover > a.headerlink, +div.code-block-caption:hover > a.headerlink { + visibility: visible; +} + +div.body p.caption { + text-align: inherit; +} + +div.body td { + text-align: left; +} + +.first { + margin-top: 0 !important; +} + +p.rubric { + margin-top: 30px; + font-weight: bold; +} + +img.align-left, figure.align-left, .figure.align-left, object.align-left { + clear: left; + float: left; + margin-right: 1em; +} + +img.align-right, figure.align-right, .figure.align-right, object.align-right { + clear: right; + float: right; + margin-left: 1em; +} + +img.align-center, figure.align-center, .figure.align-center, object.align-center { + display: block; + margin-left: auto; + margin-right: auto; +} + +img.align-default, figure.align-default, .figure.align-default { + display: block; + margin-left: auto; + margin-right: auto; +} + +.align-left { + text-align: left; +} + +.align-center { + text-align: center; +} + +.align-default { + text-align: center; +} + +.align-right { + text-align: right; +} + +/* -- sidebars -------------------------------------------------------------- */ + +div.sidebar, +aside.sidebar { + margin: 0 0 0.5em 1em; + border: 1px solid #ddb; + padding: 7px; + background-color: #ffe; + width: 40%; + float: right; + clear: right; + overflow-x: auto; +} + +p.sidebar-title { + font-weight: bold; +} + +nav.contents, +aside.topic, +div.admonition, div.topic, blockquote { + clear: left; +} + +/* -- topics ---------------------------------------------------------------- */ + +nav.contents, +aside.topic, +div.topic { + border: 1px solid #ccc; + padding: 7px; + margin: 10px 0 10px 0; +} + +p.topic-title { + font-size: 1.1em; + font-weight: bold; + margin-top: 10px; +} + +/* -- admonitions ----------------------------------------------------------- */ + +div.admonition { + margin-top: 10px; + margin-bottom: 10px; + padding: 7px; +} + +div.admonition dt { + font-weight: bold; +} + +p.admonition-title { + margin: 0px 10px 5px 0px; + font-weight: bold; +} + +div.body p.centered { + text-align: center; + margin-top: 25px; +} + +/* -- content of sidebars/topics/admonitions -------------------------------- */ + +div.sidebar > :last-child, +aside.sidebar > :last-child, +nav.contents > :last-child, +aside.topic > :last-child, +div.topic > :last-child, +div.admonition > :last-child { + margin-bottom: 0; +} + +div.sidebar::after, +aside.sidebar::after, +nav.contents::after, +aside.topic::after, +div.topic::after, +div.admonition::after, +blockquote::after { + display: block; + content: ''; + clear: both; +} + +/* -- tables ---------------------------------------------------------------- */ + +table.docutils { + margin-top: 10px; + margin-bottom: 10px; + border: 0; + border-collapse: collapse; +} + +table.align-center { + margin-left: auto; + margin-right: auto; +} + +table.align-default { + margin-left: auto; + margin-right: auto; +} + +table caption span.caption-number { + font-style: italic; +} + +table caption span.caption-text { +} + +table.docutils td, table.docutils th { + padding: 1px 8px 1px 5px; + border-top: 0; + border-left: 0; + border-right: 0; + border-bottom: 1px solid #aaa; +} + +th { + text-align: left; + padding-right: 5px; +} + +table.citation { + border-left: solid 1px gray; + margin-left: 1px; +} + +table.citation td { + border-bottom: none; +} + +th > :first-child, +td > :first-child { + margin-top: 0px; +} + +th > :last-child, +td > :last-child { + margin-bottom: 0px; +} + +/* -- figures --------------------------------------------------------------- */ + +div.figure, figure { + margin: 0.5em; + padding: 0.5em; +} + +div.figure p.caption, figcaption { + padding: 0.3em; +} + +div.figure p.caption span.caption-number, +figcaption span.caption-number { + font-style: italic; +} + +div.figure p.caption span.caption-text, +figcaption span.caption-text { +} + +/* -- field list styles ----------------------------------------------------- */ + +table.field-list td, table.field-list th { + border: 0 !important; +} + +.field-list ul { + margin: 0; + padding-left: 1em; +} + +.field-list p { + margin: 0; +} + +.field-name { + -moz-hyphens: manual; + -ms-hyphens: manual; + -webkit-hyphens: manual; + hyphens: manual; +} + +/* -- hlist styles ---------------------------------------------------------- */ + +table.hlist { + margin: 1em 0; +} + +table.hlist td { + vertical-align: top; +} + +/* -- object description styles --------------------------------------------- */ + +.sig { + font-family: 'Consolas', 'Menlo', 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', monospace; +} + +.sig-name, code.descname { + background-color: transparent; + font-weight: bold; +} + +.sig-name { + font-size: 1.1em; +} + +code.descname { + font-size: 1.2em; +} + +.sig-prename, code.descclassname { + background-color: transparent; +} + +.optional { + font-size: 1.3em; +} + +.sig-paren { + font-size: larger; +} + +.sig-param.n { + font-style: italic; +} + +/* C++ specific styling */ + +.sig-inline.c-texpr, +.sig-inline.cpp-texpr { + font-family: unset; +} + +.sig.c .k, .sig.c .kt, +.sig.cpp .k, .sig.cpp .kt { + color: #0033B3; +} + +.sig.c .m, +.sig.cpp .m { + color: #1750EB; +} + +.sig.c .s, .sig.c .sc, +.sig.cpp .s, .sig.cpp .sc { + color: #067D17; +} + + +/* -- other body styles ----------------------------------------------------- */ + +ol.arabic { + list-style: decimal; +} + +ol.loweralpha { + list-style: lower-alpha; +} + +ol.upperalpha { + list-style: upper-alpha; +} + +ol.lowerroman { + list-style: lower-roman; +} + +ol.upperroman { + list-style: upper-roman; +} + +:not(li) > ol > li:first-child > :first-child, +:not(li) > ul > li:first-child > :first-child { + margin-top: 0px; +} + +:not(li) > ol > li:last-child > :last-child, +:not(li) > ul > li:last-child > :last-child { + margin-bottom: 0px; +} + +ol.simple ol p, +ol.simple ul p, +ul.simple ol p, +ul.simple ul p { + margin-top: 0; +} + +ol.simple > li:not(:first-child) > p, +ul.simple > li:not(:first-child) > p { + margin-top: 0; +} + +ol.simple p, +ul.simple p { + margin-bottom: 0; +} + +aside.footnote > span, +div.citation > span { + float: left; +} +aside.footnote > span:last-of-type, +div.citation > span:last-of-type { + padding-right: 0.5em; +} +aside.footnote > p { + margin-left: 2em; +} +div.citation > p { + margin-left: 4em; +} +aside.footnote > p:last-of-type, +div.citation > p:last-of-type { + margin-bottom: 0em; +} +aside.footnote > p:last-of-type:after, +div.citation > p:last-of-type:after { + content: ""; + clear: both; +} + +dl.field-list { + display: grid; + grid-template-columns: fit-content(30%) auto; +} + +dl.field-list > dt { + font-weight: bold; + word-break: break-word; + padding-left: 0.5em; + padding-right: 5px; +} + +dl.field-list > dd { + padding-left: 0.5em; + margin-top: 0em; + margin-left: 0em; + margin-bottom: 0em; +} + +dl { + margin-bottom: 15px; +} + +dd > :first-child { + margin-top: 0px; +} + +dd ul, dd table { + margin-bottom: 10px; +} + +dd { + margin-top: 3px; + margin-bottom: 10px; + margin-left: 30px; +} + +.sig dd { + margin-top: 0px; + margin-bottom: 0px; +} + +.sig dl { + margin-top: 0px; + margin-bottom: 0px; +} + +dl > dd:last-child, +dl > dd:last-child > :last-child { + margin-bottom: 0; +} + +dt:target, span.highlighted { + background-color: #fbe54e; +} + +rect.highlighted { + fill: #fbe54e; +} + +dl.glossary dt { + font-weight: bold; + font-size: 1.1em; +} + +.versionmodified { + font-style: italic; +} + +.system-message { + background-color: #fda; + padding: 5px; + border: 3px solid red; +} + +.footnote:target { + background-color: #ffa; +} + +.line-block { + display: block; + margin-top: 1em; + margin-bottom: 1em; +} + +.line-block .line-block { + margin-top: 0; + margin-bottom: 0; + margin-left: 1.5em; +} + +.guilabel, .menuselection { + font-family: sans-serif; +} + +.accelerator { + text-decoration: underline; +} + +.classifier { + font-style: oblique; +} + +.classifier:before { + font-style: normal; + margin: 0 0.5em; + content: ":"; + display: inline-block; +} + +abbr, acronym { + border-bottom: dotted 1px; + cursor: help; +} + +.translated { + background-color: rgba(207, 255, 207, 0.2) +} + +.untranslated { + background-color: rgba(255, 207, 207, 0.2) +} + +/* -- code displays --------------------------------------------------------- */ + +pre { + overflow: auto; + overflow-y: hidden; /* fixes display issues on Chrome browsers */ +} + +pre, div[class*="highlight-"] { + clear: both; +} + +span.pre { + -moz-hyphens: none; + -ms-hyphens: none; + -webkit-hyphens: none; + hyphens: none; + white-space: nowrap; +} + +div[class*="highlight-"] { + margin: 1em 0; +} + +td.linenos pre { + border: 0; + background-color: transparent; + color: #aaa; +} + +table.highlighttable { + display: block; +} + +table.highlighttable tbody { + display: block; +} + +table.highlighttable tr { + display: flex; +} + +table.highlighttable td { + margin: 0; + padding: 0; +} + +table.highlighttable td.linenos { + padding-right: 0.5em; +} + +table.highlighttable td.code { + flex: 1; + overflow: hidden; +} + +.highlight .hll { + display: block; +} + +div.highlight pre, +table.highlighttable pre { + margin: 0; +} + +div.code-block-caption + div { + margin-top: 0; +} + +div.code-block-caption { + margin-top: 1em; + padding: 2px 5px; + font-size: small; +} + +div.code-block-caption code { + background-color: transparent; +} + +table.highlighttable td.linenos, +span.linenos, +div.highlight span.gp { /* gp: Generic.Prompt */ + user-select: none; + -webkit-user-select: text; /* Safari fallback only */ + -webkit-user-select: none; /* Chrome/Safari */ + -moz-user-select: none; /* Firefox */ + -ms-user-select: none; /* IE10+ */ +} + +div.code-block-caption span.caption-number { + padding: 0.1em 0.3em; + font-style: italic; +} + +div.code-block-caption span.caption-text { +} + +div.literal-block-wrapper { + margin: 1em 0; +} + +code.xref, a code { + background-color: transparent; + font-weight: bold; +} + +h1 code, h2 code, h3 code, h4 code, h5 code, h6 code { + background-color: transparent; +} + +.viewcode-link { + float: right; +} + +.viewcode-back { + float: right; + font-family: sans-serif; +} + +div.viewcode-block:target { + margin: -1px -10px; + padding: 0 10px; +} + +/* -- math display ---------------------------------------------------------- */ + +img.math { + vertical-align: middle; +} + +div.body div.math p { + text-align: center; +} + +span.eqno { + float: right; +} + +span.eqno a.headerlink { + position: absolute; + z-index: 1; +} + +div.math:hover a.headerlink { + visibility: visible; +} + +/* -- printout stylesheet --------------------------------------------------- */ + +@media print { + div.document, + div.documentwrapper, + div.bodywrapper { + margin: 0 !important; + width: 100%; + } + + div.sphinxsidebar, + div.related, + div.footer, + #top-link { + display: none; + } +} diff --git a/_build/_static/debugger.png b/_build/_static/debugger.png new file mode 100644 index 0000000000000000000000000000000000000000..7d4181f6a41dfe2ab698c18834c8d64f5ccb1a8f GIT binary patch literal 207889 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

E};U;Vfh@)}ZW{g4y6nuks2h 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 TDA80s!Z-|Xm|QQ_v48PDCmEx^ literal 0 HcmV?d00001 diff --git a/_build/_static/describe_version.js b/_build/_static/describe_version.js new file mode 100644 index 00000000..19cd8d41 --- /dev/null +++ b/_build/_static/describe_version.js @@ -0,0 +1,198 @@ +/** + * Match a PEP 440 version string. The full regex given in PEP 440 is not used. + * This subset covers what we expect to encounter in our projects. + */ +const versionRe = new RegExp([ + "^", + "(?:(?[1-9][0-9]*)!)?", + "(?(?:0|[1-9][0-9]*)(?:\\.(?:0|[1-9][0-9]*))*)", + "(?:(?a|b|rc)(?0|[1-9][0-9]*))?", + "(?:\\.post(?0|[1-9][0-9]*))?", + "(?:\\.dev(?0|[1-9][0-9]*))?", + "$", +].join("")) + +/** + * Parse a PEP 440 version string into an object. + * + * @param {string} value + * @returns {Object} parsed version information + */ +function parseVersion(value) { + let {groups: {epoch, version, preL, preN, postN, devN}} = versionRe.exec(value) + return { + value: value, + parts: [ + parseInt(epoch) || 0, ...version.split(".").map(p => parseInt(p)) + ], + isPre: Boolean(preL), + preL: preL || "", + preN: parseInt(preN) || 0, + isPost: Boolean(postN), + postN: parseInt(postN) || 0, + isDev: Boolean(devN), + devN: parseInt(devN) || 0, + } +} + +/** + * Compare two version objects. + * + * @param {Object} a left side of comparison + * @param {Object} b right side of comparison + * @returns {number} -1 less than, 0 equal to, 1 greater than + */ +function compareVersions(a, b) { + for (let [i, an] of a.parts.entries()) { + let bn = i < b.parts.length ? b.parts[i] : 0 + + if (an < bn) { + return -1 + } else if (an > bn) { + return 1 + } + } + + if (a.parts.length < b.parts.length) { + return -1 + } + + return 0 +} + +/** + * Get the list of released versions for the project from PyPI. Prerelease and + * development versions are discarded. The list is sorted in descending order, + * highest version first. + * + * This will be called on every page load. To avoid making excessive requests to + * PyPI, the result is cached for 1 day. PyPI also sends cache headers, so a + * subsequent request may still be more efficient, but it only specifies caching + * the full response for 5 minutes. + * + * @param {string} name The normalized PyPI project name to query. + * @returns {Promise} A sorted list of version objects. + */ +async function getReleasedVersions(name) { + // The response from PyPI is only cached for 5 minutes. Extend that to 1 day. + let cacheTime = localStorage.getItem("describeVersion-time") + let cacheResult = localStorage.getItem("describeVersion-result") + + // if there is a cached value + if (cacheTime && cacheResult) { + // if the cache is younger than 1 day + if (Number(cacheTime) >= Date.now() - 86400000) { + // Use the cached value instead of making another request. + return JSON.parse(cacheResult) + } + } + + let response = await fetch( + `https://pypi.org/simple/${name}/`, + {"headers": {"Accept": "application/vnd.pypi.simple.v1+json"}} + ) + let data = await response.json() + let result = data["versions"] + .map(parseVersion) + .filter(v => !(v.isPre || v.isDev)) + .sort(compareVersions) + .reverse() + localStorage.setItem("describeVersion-time", Date.now().toString()) + localStorage.setItem("describeVersion-result", JSON.stringify(result)) + return result +} + +/** + * Get the highest released version of the project from PyPI, and compare the + * version being documented. Returns a list of two values, the comparison + * result and the highest version. + * + * @param name The normalized PyPI project name. + * @param value The version being documented. + * @returns {Promise<[number, Object|null]>} + */ +async function describeVersion(name, value) { + if (value.endsWith(".x")) { + value = value.slice(0, -2) + } + + let currentVersion = parseVersion(value) + let releasedVersions = await getReleasedVersions(name) + + if (releasedVersions.length === 0) { + return [1, null] + } + + let highestVersion = releasedVersions[0] + let compared = compareVersions(currentVersion, highestVersion) + + if (compared === 1) { + return [1, highestVersion] + } + + // If the current version including trailing zeros is a prefix of the highest + // version, then these are the stable docs. For example, 2.0.x becomes 2.0, + // which is a prefix of 2.0.3. If we were just looking at the compare result, + // it would incorrectly be marked as an old version. + if (currentVersion.parts.every((n, i) => n === highestVersion.parts[i])) { + return [0, highestVersion] + } + + return [-1, highestVersion] +} + +/** + * Compare the version being documented to the highest released version, and + * display a warning banner if it is not the highest version. + * + * @param project The normalized PyPI project name. + * @param version The version being documented. + * @returns {Promise} + */ +async function createBanner(project, version) { + let [compared, stable] = await describeVersion(project, version) + + // No banner if this is the highest version or there are no other versions. + if (compared === 0 || stable === null) { + return + } + + let banner = document.createElement("p") + banner.className = "version-warning" + + if (compared === 1) { + banner.textContent = "This is the development version. The stable version is " + } else if (compared === -1) { + banner.textContent = "This is an old version. The current version is " + } + + let canonical = document.querySelector('link[rel="canonical"]') + + if (canonical !== null) { + // If a canonical URL is available, the version is a link to it. + let link = document.createElement("a") + link.href = canonical.href + link.textContent = stable.value + banner.append(link, ".") + } else { + // Otherwise, the version is text only. + banner.append(stable.value, ".") + } + + document.getElementsByClassName("document")[0].prepend(banner) + // Set scroll-padding-top to prevent the banner from overlapping anchors. + // It's also set in CSS assuming the banner text is only 1 line. + let bannerStyle = window.getComputedStyle(banner) + let bannerMarginTop = parseFloat(bannerStyle["margin-top"]) + let bannerMarginBottom = parseFloat(bannerStyle["margin-bottom"]) + let height = banner.offsetHeight + bannerMarginTop + bannerMarginBottom + document.documentElement.style["scroll-padding-top"] = `${height}px` +} + +(() => { + // currentScript is only available during init, not during callbacks. + let {project, version} = document.currentScript.dataset + document.addEventListener("DOMContentLoaded", async () => { + await createBanner(project, version) + }) +})() diff --git a/_build/_static/doctools.js b/_build/_static/doctools.js new file mode 100644 index 00000000..0398ebb9 --- /dev/null +++ b/_build/_static/doctools.js @@ -0,0 +1,149 @@ +/* + * Base JavaScript utilities for all Sphinx HTML documentation. + */ +"use strict"; + +const BLACKLISTED_KEY_CONTROL_ELEMENTS = new Set([ + "TEXTAREA", + "INPUT", + "SELECT", + "BUTTON", +]); + +const _ready = (callback) => { + if (document.readyState !== "loading") { + callback(); + } else { + document.addEventListener("DOMContentLoaded", callback); + } +}; + +/** + * Small JavaScript module for the documentation. + */ +const Documentation = { + init: () => { + Documentation.initDomainIndexTable(); + Documentation.initOnKeyListeners(); + }, + + /** + * i18n support + */ + TRANSLATIONS: {}, + PLURAL_EXPR: (n) => (n === 1 ? 0 : 1), + LOCALE: "unknown", + + // gettext and ngettext don't access this so that the functions + // can safely bound to a different name (_ = Documentation.gettext) + gettext: (string) => { + const translated = Documentation.TRANSLATIONS[string]; + switch (typeof translated) { + case "undefined": + return string; // no translation + case "string": + return translated; // translation exists + default: + return translated[0]; // (singular, plural) translation tuple exists + } + }, + + ngettext: (singular, plural, n) => { + const translated = Documentation.TRANSLATIONS[singular]; + if (typeof translated !== "undefined") + return translated[Documentation.PLURAL_EXPR(n)]; + return n === 1 ? singular : plural; + }, + + addTranslations: (catalog) => { + Object.assign(Documentation.TRANSLATIONS, catalog.messages); + Documentation.PLURAL_EXPR = new Function( + "n", + `return (${catalog.plural_expr})` + ); + Documentation.LOCALE = catalog.locale; + }, + + /** + * helper function to focus on search bar + */ + focusSearchBar: () => { + document.querySelectorAll("input[name=q]")[0]?.focus(); + }, + + /** + * Initialise the domain index toggle buttons + */ + initDomainIndexTable: () => { + const toggler = (el) => { + const idNumber = el.id.substr(7); + const toggledRows = document.querySelectorAll(`tr.cg-${idNumber}`); + if (el.src.substr(-9) === "minus.png") { + el.src = `${el.src.substr(0, el.src.length - 9)}plus.png`; + toggledRows.forEach((el) => (el.style.display = "none")); + } else { + el.src = `${el.src.substr(0, el.src.length - 8)}minus.png`; + toggledRows.forEach((el) => (el.style.display = "")); + } + }; + + const togglerElements = document.querySelectorAll("img.toggler"); + togglerElements.forEach((el) => + el.addEventListener("click", (event) => toggler(event.currentTarget)) + ); + togglerElements.forEach((el) => (el.style.display = "")); + if (DOCUMENTATION_OPTIONS.COLLAPSE_INDEX) togglerElements.forEach(toggler); + }, + + initOnKeyListeners: () => { + // only install a listener if it is really needed + if ( + !DOCUMENTATION_OPTIONS.NAVIGATION_WITH_KEYS && + !DOCUMENTATION_OPTIONS.ENABLE_SEARCH_SHORTCUTS + ) + return; + + document.addEventListener("keydown", (event) => { + // bail for input elements + if (BLACKLISTED_KEY_CONTROL_ELEMENTS.has(document.activeElement.tagName)) return; + // bail with special keys + if (event.altKey || event.ctrlKey || event.metaKey) return; + + if (!event.shiftKey) { + switch (event.key) { + case "ArrowLeft": + if (!DOCUMENTATION_OPTIONS.NAVIGATION_WITH_KEYS) break; + + const prevLink = document.querySelector('link[rel="prev"]'); + if (prevLink && prevLink.href) { + window.location.href = prevLink.href; + event.preventDefault(); + } + break; + case "ArrowRight": + if (!DOCUMENTATION_OPTIONS.NAVIGATION_WITH_KEYS) break; + + const nextLink = document.querySelector('link[rel="next"]'); + if (nextLink && nextLink.href) { + window.location.href = nextLink.href; + event.preventDefault(); + } + break; + } + } + + // some keyboard layouts may need Shift to get / + switch (event.key) { + case "/": + if (!DOCUMENTATION_OPTIONS.ENABLE_SEARCH_SHORTCUTS) break; + Documentation.focusSearchBar(); + event.preventDefault(); + } + }); + }, +}; + +// quick alias for translations +const _ = Documentation.gettext; + +_ready(Documentation.init); diff --git a/_build/_static/documentation_options.js b/_build/_static/documentation_options.js new file mode 100644 index 00000000..59bfa93b --- /dev/null +++ b/_build/_static/documentation_options.js @@ -0,0 +1,13 @@ +const DOCUMENTATION_OPTIONS = { + VERSION: '3.1.1.dev0', + LANGUAGE: 'en', + COLLAPSE_INDEX: false, + BUILDER: 'dirhtml', + FILE_SUFFIX: '.html', + LINK_SUFFIX: '.html', + HAS_SOURCE: true, + SOURCELINK_SUFFIX: '.txt', + NAVIGATION_WITH_KEYS: false, + SHOW_SEARCH_SUMMARY: true, + ENABLE_SEARCH_SHORTCUTS: true, +}; diff --git a/_build/_static/file.png b/_build/_static/file.png new file mode 100644 index 0000000000000000000000000000000000000000..a858a410e4faa62ce324d814e4b816fff83a6fb3 GIT binary patch literal 286 zcmV+(0pb3MP)s`hMrGg#P~ix$^RISR_I47Y|r1 z_CyJOe}D1){SET-^Amu_i71Lt6eYfZjRyw@I6OQAIXXHDfiX^GbOlHe=Ae4>0m)d(f|Me07*qoM6N<$f}vM^LjV8( literal 0 HcmV?d00001 diff --git a/_build/_static/flask-horizontal.png b/_build/_static/flask-horizontal.png new file mode 100644 index 0000000000000000000000000000000000000000..a0df2c61093237a7ca98fa875e9a3163a4075d7f GIT binary patch literal 24796 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 literal 0 HcmV?d00001 diff --git a/_build/_static/flask.css b/_build/_static/flask.css new file mode 100644 index 00000000..e37830da --- /dev/null +++ b/_build/_static/flask.css @@ -0,0 +1,15 @@ +@import url("pocoo.css"); + +a, a.reference, a.footnote-reference { + color: #004b6b; + text-decoration-color: #004b6b; +} + +a:hover { + color: #6d4100; + text-decoration-color: #6d4100; +} + +p.version-warning { + background-color: #004b6b; +} diff --git a/_build/_static/language_data.js b/_build/_static/language_data.js new file mode 100644 index 00000000..a5ea78e1 --- /dev/null +++ b/_build/_static/language_data.js @@ -0,0 +1,191 @@ +/* + * This script contains the language-specific data used by searchtools.js, + * namely the list of stopwords, stemmer, scorer and splitter. + */ + +var stopwords = ["a", "and", "are", "as", "at", "be", "but", "by", "for", "if", "in", "into", "is", "it", "near", "no", "not", "of", "on", "or", "such", "that", "the", "their", "then", "there", "these", "they", "this", "to", "was", "will", "with"]; + + +/* Non-minified version is copied as a separate JS file, if available */ + +/** + * Porter Stemmer + */ +var Stemmer = function() { + + var step2list = { + ational: 'ate', + tional: 'tion', + enci: 'ence', + anci: 'ance', + izer: 'ize', + bli: 'ble', + alli: 'al', + entli: 'ent', + eli: 'e', + ousli: 'ous', + ization: 'ize', + ation: 'ate', + ator: 'ate', + alism: 'al', + iveness: 'ive', + fulness: 'ful', + ousness: 'ous', + aliti: 'al', + iviti: 'ive', + biliti: 'ble', + logi: 'log' + }; + + var step3list = { + icate: 'ic', + ative: '', + alize: 'al', + iciti: 'ic', + ical: 'ic', + ful: '', + ness: '' + }; + + var c = "[^aeiou]"; // consonant + var v = "[aeiouy]"; // vowel + var C = c + "[^aeiouy]*"; // consonant sequence + var V = v + "[aeiou]*"; // vowel sequence + + var mgr0 = "^(" + C + ")?" + V + C; // [C]VC... is m>0 + var meq1 = "^(" + C + ")?" + V + C + "(" + V + ")?$"; // [C]VC[V] is m=1 + var mgr1 = "^(" + C + ")?" + V + C + V + C; // [C]VCVC... is m>1 + var s_v = "^(" + C + ")?" + v; // vowel in stem + + this.stemWord = function (w) { + var stem; + var suffix; + var firstch; + var origword = w; + + if (w.length < 3) + return w; + + var re; + var re2; + var re3; + var re4; + + firstch = w.substr(0,1); + if (firstch == "y") + w = firstch.toUpperCase() + w.substr(1); + + // Step 1a + re = /^(.+?)(ss|i)es$/; + re2 = /^(.+?)([^s])s$/; + + if (re.test(w)) + w = w.replace(re,"$1$2"); + else if (re2.test(w)) + w = w.replace(re2,"$1$2"); + + // Step 1b + re = /^(.+?)eed$/; + re2 = /^(.+?)(ed|ing)$/; + if (re.test(w)) { + var fp = re.exec(w); + re = new RegExp(mgr0); + if (re.test(fp[1])) { + re = /.$/; + w = w.replace(re,""); + } + } + else if (re2.test(w)) { + var fp = re2.exec(w); + stem = fp[1]; + re2 = new RegExp(s_v); + if (re2.test(stem)) { + w = stem; + re2 = /(at|bl|iz)$/; + re3 = new RegExp("([^aeiouylsz])\\1$"); + re4 = new RegExp("^" + C + v + "[^aeiouwxy]$"); + if (re2.test(w)) + w = w + "e"; + else if (re3.test(w)) { + re = /.$/; + w = w.replace(re,""); + } + else if (re4.test(w)) + w = w + "e"; + } + } + + // Step 1c + re = /^(.+?)y$/; + if (re.test(w)) { + var fp = re.exec(w); + stem = fp[1]; + re = new RegExp(s_v); + if (re.test(stem)) + w = stem + "i"; + } + + // Step 2 + re = /^(.+?)(ational|tional|enci|anci|izer|bli|alli|entli|eli|ousli|ization|ation|ator|alism|iveness|fulness|ousness|aliti|iviti|biliti|logi)$/; + if (re.test(w)) { + var fp = re.exec(w); + stem = fp[1]; + suffix = fp[2]; + re = new RegExp(mgr0); + if (re.test(stem)) + w = stem + step2list[suffix]; + } + + // Step 3 + re = /^(.+?)(icate|ative|alize|iciti|ical|ful|ness)$/; + if (re.test(w)) { + var fp = re.exec(w); + stem = fp[1]; + suffix = fp[2]; + re = new RegExp(mgr0); + if (re.test(stem)) + w = stem + step3list[suffix]; + } + + // Step 4 + re = /^(.+?)(al|ance|ence|er|ic|able|ible|ant|ement|ment|ent|ou|ism|ate|iti|ous|ive|ize)$/; + re2 = /^(.+?)(s|t)(ion)$/; + if (re.test(w)) { + var fp = re.exec(w); + stem = fp[1]; + re = new RegExp(mgr1); + if (re.test(stem)) + w = stem; + } + else if (re2.test(w)) { + var fp = re2.exec(w); + stem = fp[1] + fp[2]; + re2 = new RegExp(mgr1); + if (re2.test(stem)) + w = stem; + } + + // Step 5 + re = /^(.+?)e$/; + if (re.test(w)) { + var fp = re.exec(w); + stem = fp[1]; + re = new RegExp(mgr1); + re2 = new RegExp(meq1); + re3 = new RegExp("^" + C + v + "[^aeiouwxy]$"); + if (re.test(stem) || (re2.test(stem) && !(re3.test(stem)))) + w = stem; + } + re = /ll$/; + re2 = new RegExp(mgr1); + if (re.test(w) && re2.test(w)) { + re = /.$/; + w = w.replace(re,""); + } + + // and turn initial Y back to y + if (firstch == "y") + w = firstch.toLowerCase() + w.substr(1); + return w; + } +} diff --git a/_build/_static/minus.png b/_build/_static/minus.png new file mode 100644 index 0000000000000000000000000000000000000000..d96755fdaf8bb2214971e0db9c1fd3077d7c419d GIT binary patch literal 90 zcmeAS@N?(olHy`uVBq!ia0vp^+#t*WBp7;*Yy1LIik>cxAr*|t7R?Mi>2?kWtu=nj kDsEF_5m^0CR;1wuP-*O&G^0G}KYk!hp00i_>zopr08q^qX#fBK literal 0 HcmV?d00001 diff --git a/_build/_static/plus.png b/_build/_static/plus.png new file mode 100644 index 0000000000000000000000000000000000000000..7107cec93a979b9a5f64843235a16651d563ce2d GIT binary patch literal 90 zcmeAS@N?(olHy`uVBq!ia0vp^+#t*WBp7;*Yy1LIik>cxAr*|t7R?Mi>2?kWtu>-2 m3q%Vub%g%s<8sJhVPMczOq}xhg9DJoz~JfX=d#Wzp$Pyb1r*Kz literal 0 HcmV?d00001 diff --git a/_build/_static/pocoo.css b/_build/_static/pocoo.css new file mode 100644 index 00000000..7a01d1d5 --- /dev/null +++ b/_build/_static/pocoo.css @@ -0,0 +1,515 @@ +@import url("basic.css"); + +/* -- page layout --------------------------------------------------- */ + +html { + scroll-padding-top: calc(30px + 1em); + /* see .version-warning selector for banner positioning */ +} + +body { + font-family: 'Garamond', 'Georgia', serif; + font-size: 17px; + background-color: #fff; + color: #3e4349; + margin: 0; + padding: 0; +} + +div.related { + max-width: 1140px; + margin: 10px auto; + + /* displayed on mobile */ + display: none; +} + +div.document { + max-width: 1140px; + margin: 10px auto; +} + +div.documentwrapper { + float: left; + width: 100%; +} + +div.bodywrapper { + margin: 0 0 0 220px; +} + +div.body { + min-width: initial; + max-width: initial; + padding: 0 30px; +} + +div.sphinxsidebarwrapper { + padding: 10px; +} + +div.sphinxsidebar { + width: 220px; + font-size: 14px; + line-height: 1.5; + color: #444; +} + +div.sphinxsidebar li { + overflow: hidden; + text-overflow: ellipsis; +} + +div.sphinxsidebar li:hover { + overflow: visible; +} + +div.sphinxsidebar a, +div.sphinxsidebar a code { + color: #444; + border-color: #444; +} + +div.sphinxsidebar a:hover { + background-color:#fff; +} + +div.sphinxsidebar p.logo { + margin: 0; + text-align: center; +} + +div.sphinxsidebar h3, +div.sphinxsidebar h4 { + font-size: 24px; + color: #444; +} + +div.sphinxsidebar p.logo a, +div.sphinxsidebar h3 a, +div.sphinxsidebar p.logo a:hover, +div.sphinxsidebar h3 a:hover { + border: none; +} + +div.sphinxsidebar p, +div.sphinxsidebar h3, +div.sphinxsidebar h4 { + margin: 10px 0; +} + +div.sphinxsidebar ul { + margin: 10px 0; + padding: 0; +} + +div.sphinxsidebar input { + border: 1px solid #999; + font-size: 1em; +} + +div.footer { + max-width: 1140px; + margin: 20px auto; + font-size: 14px; + text-align: right; + color: #888; +} + +div.footer a { + color: #888; + border-color: #888; +} + +/* -- quick search -------------------------------------------------- */ + +div.sphinxsidebar #searchbox form { + display: flex; +} + +div.sphinxsidebar #searchbox form > div { + display: flex; + flex: 1 1 auto; +} + +div.sphinxsidebar #searchbox input[type=text] { + flex: 1 1 auto; + width: 1% !important; +} + +div.sphinxsidebar #searchbox input[type=submit] { + border-left-width: 0; +} + +/* -- version warning ----------------------------------------------- */ + +/* see html selector for scroll offset */ + +p.version-warning { + top: 10px; + position: sticky; + + margin: 10px 0; + padding: 5px 10px; + border-radius: 4px; + + letter-spacing: 1px; + color: #fff; + text-shadow: 0 0 2px #000; + text-align: center; + + background: #d40 repeating-linear-gradient( + 135deg, + transparent, + transparent 56px, + rgba(255, 255, 255, 0.2) 56px, + rgba(255, 255, 255, 0.2) 112px + ); +} + +p.version-warning a { + color: #fff; + border-color: #fff; +} + +/* -- body styles --------------------------------------------------- */ + +a { + text-decoration: underline; + text-decoration-style: dotted; + text-decoration-color: #000; + text-decoration-thickness: 1px; +} + +a:hover { + text-decoration-style: solid; +} + +h1, h2, h3, h4, h5, h6 { + font-weight: normal; + margin: 30px 0 10px; + padding: 0; + color: black; +} + +div.body h1 { + font-size: 240%; +} + +div.body h2 { + font-size: 180%; +} + +div.body h3 { + font-size: 150%; +} + +div.body h4 { + font-size: 130%; +} + +div.body h5 { + font-size: 100%; +} + +div.body h6 { + font-size: 100%; +} + +div.body h1:first-of-type { + margin-top: 0; +} + +a.headerlink { + color: #ddd; + margin: 0 0.2em; + padding: 0 0.2em; + border: none; +} + +a.headerlink:hover { + color: #444; +} + +div.body p, +div.body dd, +div.body li { + line-height: 1.4; +} + +img.screenshot { + box-shadow: 2px 2px 4px #eee; +} + +hr { + border: 1px solid #999; +} + +blockquote { + margin: 0 0 0 30px; + padding: 0; +} + +ul, ol { + margin: 10px 0 10px 30px; + padding: 0; +} + +a.footnote-reference { + font-size: 0.7em; + vertical-align: top; +} + +/* -- admonitions --------------------------------------------------- */ + +div.admonition, +div.topic { + background-color: #fafafa; + margin: 10px -10px; + padding: 10px; + border-top: 1px solid #ccc; + border-right: none; + border-bottom: 1px solid #ccc; + border-left: none; +} + +div.admonition p.admonition-title, +div.topic p.topic-title { + font-weight: normal; + font-size: 24px; + margin: 0 0 10px 0; + padding: 0; + line-height: 1; + display: inline; +} + +p.admonition-title::after { + content: ":"; +} + +div.admonition p.last, +div.topic p:last-child { + margin-bottom: 0; +} + +div.danger, div.error { + background-color: #fff0f0; + border-color: #ffb0b0; +} + +div.seealso { + background-color: #fffff0; + border-color: #f0f0a8; +} + +/* -- changelog ----------------------------------------------------- */ + +details.changelog summary { + cursor: pointer; + font-style: italic; + margin-bottom: 10px; +} + +/* -- search highlight ---------------------------------------------- */ + +dt:target, +.footnote:target, +span.highlighted { + background-color: #ffdf80; +} + +rect.highlighted { + fill: #ffdf80; +} + +/* -- code displays ------------------------------------------------- */ + +pre, code { + font-family: 'Consolas', 'Menlo', 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', monospace; + font-size: 0.9em; +} + +pre { + margin: 0; + padding: 0; + line-height: 1.3; +} + +div.literal-block-wrapper { + padding: 10px 0 0; +} + +div.code-block-caption { + padding: 0; +} + +div.highlight, div.literal-block-wrapper div.highlight { + margin: 10px -10px; + padding: 10px; +} + +code { + color: #222; + background: #e8eff0; +} + +/* -- tables -------------------------------------------------------- */ + +table.docutils { + border: 1px solid #888; + box-shadow: 2px 2px 4px #eee; +} + +table.docutils td, +table.docutils th { + border: 1px solid #888; + padding: 0.25em 0.7em; +} + +table.field-list, +table.footnote { + border: none; + box-shadow: none; +} + +table.footnote { + margin: 15px 0; + width: 100%; + border: 1px solid #eee; + background-color: #fafafa; + font-size: 0.9em; +} + +table.footnote + table.footnote { + margin-top: -15px; + border-top: none; +} + +table.field-list th { + padding: 0 0.8em 0 0; +} + +table.field-list td { + padding: 0; +} + +table.footnote td.label { + width: 0; + padding: 0.3em 0 0.3em 0.5em; +} + +table.footnote td { + padding: 0.3em 0.5em; +} + +/* -- responsive screen --------------------------------------------- */ + +@media screen and (max-width: 1139px) { + p.version-warning { + margin: 10px; + } + + div.footer { + margin: 20px 10px; + } +} + +/* -- small screen -------------------------------------------------- */ + +@media screen and (max-width: 767px) { + body { + padding: 0 20px; + } + + div.related { + display: block; + } + + p.version-warning { + margin: 10px 0; + } + + div.documentwrapper { + float: none; + } + + div.bodywrapper { + margin: 0; + } + + div.body { + min-height: 0; + padding: 0; + } + + div.sphinxsidebar { + float: none; + width: 100%; + margin: 0 -20px -10px; + padding: 0 20px; + background-color: #333; + color: #ccc; + } + + div.sphinxsidebar a, + div.sphinxsidebar a code, + div.sphinxsidebar h3, + div.sphinxsidebar h4, + div.footer a { + color: #ccc; + border-color: #ccc; + } + + div.sphinxsidebar p.logo { + display: none; + } + + div.footer { + text-align: left; + margin: 0 -20px; + padding: 20px; + background-color: #333; + color: #ccc; + } +} + +/* https://github.com/twbs/bootstrap/blob + /0e8831505ac845f3102fa2c5996a7141c9ab01ee + /scss/mixins/_screen-reader.scss */ +.hide-header > h1:first-child { + position: absolute; + width: 1px; + height: 1px; + padding: 0; + overflow: hidden; + clip: rect(0, 0, 0, 0); + white-space: nowrap; + border: 0; +} + +/* -- sphinx-tabs -------------------------------------------------- */ + +.sphinx-tabs { + margin-bottom: 0; +} + +.sphinx-tabs .ui.menu { + font-family: 'Garamond', 'Georgia', serif !important; +} + +.sphinx-tabs .ui.attached.menu { + border-bottom: none +} + +.sphinx-tabs .ui.tabular.menu .item { + border-bottom: 2px solid transparent; + border-left: none; + border-right: none; + border-top: none; + padding: .3em 0.6em; +} + +.sphinx-tabs .ui.attached.segment, .ui.segment { + border: 0; + padding: 0; +} diff --git a/_build/_static/pycharm-run-config.png b/_build/_static/pycharm-run-config.png new file mode 100644 index 0000000000000000000000000000000000000000..ad025545a7ff00c6366a6146d808d875c5eb6a0a GIT binary patch literal 99654 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 literal 0 HcmV?d00001 diff --git a/_build/_static/pygments.css b/_build/_static/pygments.css new file mode 100644 index 00000000..809cf3f0 --- /dev/null +++ b/_build/_static/pygments.css @@ -0,0 +1,84 @@ +pre { line-height: 125%; } +td.linenos .normal { color: inherit; background-color: transparent; padding-left: 5px; padding-right: 5px; } +span.linenos { color: inherit; background-color: transparent; padding-left: 5px; padding-right: 5px; } +td.linenos .special { color: #000000; background-color: #ffffc0; padding-left: 5px; padding-right: 5px; } +span.linenos.special { color: #000000; background-color: #ffffc0; padding-left: 5px; padding-right: 5px; } +.highlight .hll { background-color: #ffffcc } +.highlight { background: #f8f8f8; } +.highlight .c { color: #8f5902; font-style: italic } /* Comment */ +.highlight .err { color: #a40000; border: 1px solid #ef2929 } /* Error */ +.highlight .g { color: #000000 } /* Generic */ +.highlight .k { color: #004461; font-weight: bold } /* Keyword */ +.highlight .l { color: #000000 } /* Literal */ +.highlight .n { color: #000000 } /* Name */ +.highlight .o { color: #582800 } /* Operator */ +.highlight .x { color: #000000 } /* Other */ +.highlight .p { color: #000000; font-weight: bold } /* Punctuation */ +.highlight .ch { color: #8f5902; font-style: italic } /* Comment.Hashbang */ +.highlight .cm { color: #8f5902; font-style: italic } /* Comment.Multiline */ +.highlight .cp { color: #8f5902 } /* Comment.Preproc */ +.highlight .cpf { color: #8f5902; font-style: italic } /* Comment.PreprocFile */ +.highlight .c1 { color: #8f5902; font-style: italic } /* Comment.Single */ +.highlight .cs { color: #8f5902; font-style: italic } /* Comment.Special */ +.highlight .gd { color: #a40000 } /* Generic.Deleted */ +.highlight .ge { color: #000000; font-style: italic } /* Generic.Emph */ +.highlight .ges { color: #000000 } /* Generic.EmphStrong */ +.highlight .gr { color: #ef2929 } /* Generic.Error */ +.highlight .gh { color: #000080; font-weight: bold } /* Generic.Heading */ +.highlight .gi { color: #00A000 } /* Generic.Inserted */ +.highlight .go { color: #888888 } /* Generic.Output */ +.highlight .gp { color: #745334 } /* Generic.Prompt */ +.highlight .gs { color: #000000; font-weight: bold } /* Generic.Strong */ +.highlight .gu { color: #800080; font-weight: bold } /* Generic.Subheading */ +.highlight .gt { color: #a40000; font-weight: bold } /* Generic.Traceback */ +.highlight .kc { color: #004461; font-weight: bold } /* Keyword.Constant */ +.highlight .kd { color: #004461; font-weight: bold } /* Keyword.Declaration */ +.highlight .kn { color: #004461; font-weight: bold } /* Keyword.Namespace */ +.highlight .kp { color: #004461; font-weight: bold } /* Keyword.Pseudo */ +.highlight .kr { color: #004461; font-weight: bold } /* Keyword.Reserved */ +.highlight .kt { color: #004461; font-weight: bold } /* Keyword.Type */ +.highlight .ld { color: #000000 } /* Literal.Date */ +.highlight .m { color: #990000 } /* Literal.Number */ +.highlight .s { color: #4e9a06 } /* Literal.String */ +.highlight .na { color: #c4a000 } /* Name.Attribute */ +.highlight .nb { color: #004461 } /* Name.Builtin */ +.highlight .nc { color: #000000 } /* Name.Class */ +.highlight .no { color: #000000 } /* Name.Constant */ +.highlight .nd { color: #888888 } /* Name.Decorator */ +.highlight .ni { color: #ce5c00 } /* Name.Entity */ +.highlight .ne { color: #cc0000; font-weight: bold } /* Name.Exception */ +.highlight .nf { color: #000000 } /* Name.Function */ +.highlight .nl { color: #f57900 } /* Name.Label */ +.highlight .nn { color: #000000 } /* Name.Namespace */ +.highlight .nx { color: #000000 } /* Name.Other */ +.highlight .py { color: #000000 } /* Name.Property */ +.highlight .nt { color: #004461; font-weight: bold } /* Name.Tag */ +.highlight .nv { color: #000000 } /* Name.Variable */ +.highlight .ow { color: #004461; font-weight: bold } /* Operator.Word */ +.highlight .pm { color: #000000; font-weight: bold } /* Punctuation.Marker */ +.highlight .w { color: #f8f8f8; text-decoration: underline } /* Text.Whitespace */ +.highlight .mb { color: #990000 } /* Literal.Number.Bin */ +.highlight .mf { color: #990000 } /* Literal.Number.Float */ +.highlight .mh { color: #990000 } /* Literal.Number.Hex */ +.highlight .mi { color: #990000 } /* Literal.Number.Integer */ +.highlight .mo { color: #990000 } /* Literal.Number.Oct */ +.highlight .sa { color: #4e9a06 } /* Literal.String.Affix */ +.highlight .sb { color: #4e9a06 } /* Literal.String.Backtick */ +.highlight .sc { color: #4e9a06 } /* Literal.String.Char */ +.highlight .dl { color: #4e9a06 } /* Literal.String.Delimiter */ +.highlight .sd { color: #8f5902; font-style: italic } /* Literal.String.Doc */ +.highlight .s2 { color: #4e9a06 } /* Literal.String.Double */ +.highlight .se { color: #4e9a06 } /* Literal.String.Escape */ +.highlight .sh { color: #4e9a06 } /* Literal.String.Heredoc */ +.highlight .si { color: #4e9a06 } /* Literal.String.Interpol */ +.highlight .sx { color: #4e9a06 } /* Literal.String.Other */ +.highlight .sr { color: #4e9a06 } /* Literal.String.Regex */ +.highlight .s1 { color: #4e9a06 } /* Literal.String.Single */ +.highlight .ss { color: #4e9a06 } /* Literal.String.Symbol */ +.highlight .bp { color: #3465a4 } /* Name.Builtin.Pseudo */ +.highlight .fm { color: #000000 } /* Name.Function.Magic */ +.highlight .vc { color: #000000 } /* Name.Variable.Class */ +.highlight .vg { color: #000000 } /* Name.Variable.Global */ +.highlight .vi { color: #000000 } /* Name.Variable.Instance */ +.highlight .vm { color: #000000 } /* Name.Variable.Magic */ +.highlight .il { color: #990000 } /* Literal.Number.Integer.Long */ diff --git a/_build/_static/searchtools.js b/_build/_static/searchtools.js new file mode 100644 index 00000000..2c774d17 --- /dev/null +++ b/_build/_static/searchtools.js @@ -0,0 +1,632 @@ +/* + * Sphinx JavaScript utilities for the full-text search. + */ +"use strict"; + +/** + * Simple result scoring code. + */ +if (typeof Scorer === "undefined") { + var Scorer = { + // Implement the following function to further tweak the score for each result + // The function takes a result array [docname, title, anchor, descr, score, filename] + // and returns the new score. + /* + score: result => { + const [docname, title, anchor, descr, score, filename, kind] = result + return score + }, + */ + + // query matches the full name of an object + objNameMatch: 11, + // or matches in the last dotted part of the object name + objPartialMatch: 6, + // Additive scores depending on the priority of the object + objPrio: { + 0: 15, // used to be importantResults + 1: 5, // used to be objectResults + 2: -5, // used to be unimportantResults + }, + // Used when the priority is not in the mapping. + objPrioDefault: 0, + + // query found in title + title: 15, + partialTitle: 7, + // query found in terms + term: 5, + partialTerm: 2, + }; +} + +// Global search result kind enum, used by themes to style search results. +class SearchResultKind { + static get index() { return "index"; } + static get object() { return "object"; } + static get text() { return "text"; } + static get title() { return "title"; } +} + +const _removeChildren = (element) => { + while (element && element.lastChild) element.removeChild(element.lastChild); +}; + +/** + * See https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Regular_Expressions#escaping + */ +const _escapeRegExp = (string) => + string.replace(/[.*+\-?^${}()|[\]\\]/g, "\\$&"); // $& means the whole matched string + +const _displayItem = (item, searchTerms, highlightTerms) => { + const docBuilder = DOCUMENTATION_OPTIONS.BUILDER; + const docFileSuffix = DOCUMENTATION_OPTIONS.FILE_SUFFIX; + const docLinkSuffix = DOCUMENTATION_OPTIONS.LINK_SUFFIX; + const showSearchSummary = DOCUMENTATION_OPTIONS.SHOW_SEARCH_SUMMARY; + const contentRoot = document.documentElement.dataset.content_root; + + const [docName, title, anchor, descr, score, _filename, kind] = item; + + let listItem = document.createElement("li"); + // Add a class representing the item's type: + // can be used by a theme's CSS selector for styling + // See SearchResultKind for the class names. + listItem.classList.add(`kind-${kind}`); + let requestUrl; + let linkUrl; + if (docBuilder === "dirhtml") { + // dirhtml builder + let dirname = docName + "/"; + if (dirname.match(/\/index\/$/)) + dirname = dirname.substring(0, dirname.length - 6); + else if (dirname === "index/") dirname = ""; + requestUrl = contentRoot + dirname; + linkUrl = requestUrl; + } else { + // normal html builders + requestUrl = contentRoot + docName + docFileSuffix; + linkUrl = docName + docLinkSuffix; + } + let linkEl = listItem.appendChild(document.createElement("a")); + linkEl.href = linkUrl + anchor; + linkEl.dataset.score = score; + linkEl.innerHTML = title; + if (descr) { + listItem.appendChild(document.createElement("span")).innerHTML = + " (" + descr + ")"; + // highlight search terms in the description + if (SPHINX_HIGHLIGHT_ENABLED) // set in sphinx_highlight.js + highlightTerms.forEach((term) => _highlightText(listItem, term, "highlighted")); + } + else if (showSearchSummary) + fetch(requestUrl) + .then((responseData) => responseData.text()) + .then((data) => { + if (data) + listItem.appendChild( + Search.makeSearchSummary(data, searchTerms, anchor) + ); + // highlight search terms in the summary + if (SPHINX_HIGHLIGHT_ENABLED) // set in sphinx_highlight.js + highlightTerms.forEach((term) => _highlightText(listItem, term, "highlighted")); + }); + Search.output.appendChild(listItem); +}; +const _finishSearch = (resultCount) => { + Search.stopPulse(); + Search.title.innerText = _("Search Results"); + if (!resultCount) + Search.status.innerText = Documentation.gettext( + "Your search did not match any documents. Please make sure that all words are spelled correctly and that you've selected enough categories." + ); + else + Search.status.innerText = Documentation.ngettext( + "Search finished, found one page matching the search query.", + "Search finished, found ${resultCount} pages matching the search query.", + resultCount, + ).replace('${resultCount}', resultCount); +}; +const _displayNextItem = ( + results, + resultCount, + searchTerms, + highlightTerms, +) => { + // results left, load the summary and display it + // this is intended to be dynamic (don't sub resultsCount) + if (results.length) { + _displayItem(results.pop(), searchTerms, highlightTerms); + setTimeout( + () => _displayNextItem(results, resultCount, searchTerms, highlightTerms), + 5 + ); + } + // search finished, update title and status message + else _finishSearch(resultCount); +}; +// Helper function used by query() to order search results. +// Each input is an array of [docname, title, anchor, descr, score, filename, kind]. +// Order the results by score (in opposite order of appearance, since the +// `_displayNextItem` function uses pop() to retrieve items) and then alphabetically. +const _orderResultsByScoreThenName = (a, b) => { + const leftScore = a[4]; + const rightScore = b[4]; + if (leftScore === rightScore) { + // same score: sort alphabetically + const leftTitle = a[1].toLowerCase(); + const rightTitle = b[1].toLowerCase(); + if (leftTitle === rightTitle) return 0; + return leftTitle > rightTitle ? -1 : 1; // inverted is intentional + } + return leftScore > rightScore ? 1 : -1; +}; + +/** + * Default splitQuery function. Can be overridden in ``sphinx.search`` with a + * custom function per language. + * + * The regular expression works by splitting the string on consecutive characters + * that are not Unicode letters, numbers, underscores, or emoji characters. + * This is the same as ``\W+`` in Python, preserving the surrogate pair area. + */ +if (typeof splitQuery === "undefined") { + var splitQuery = (query) => query + .split(/[^\p{Letter}\p{Number}_\p{Emoji_Presentation}]+/gu) + .filter(term => term) // remove remaining empty strings +} + +/** + * Search Module + */ +const Search = { + _index: null, + _queued_query: null, + _pulse_status: -1, + + htmlToText: (htmlString, anchor) => { + const htmlElement = new DOMParser().parseFromString(htmlString, 'text/html'); + for (const removalQuery of [".headerlink", "script", "style"]) { + htmlElement.querySelectorAll(removalQuery).forEach((el) => { el.remove() }); + } + if (anchor) { + const anchorContent = htmlElement.querySelector(`[role="main"] ${anchor}`); + if (anchorContent) return anchorContent.textContent; + + console.warn( + `Anchored content block not found. Sphinx search tries to obtain it via DOM query '[role=main] ${anchor}'. Check your theme or template.` + ); + } + + // if anchor not specified or not found, fall back to main content + const docContent = htmlElement.querySelector('[role="main"]'); + if (docContent) return docContent.textContent; + + console.warn( + "Content block not found. Sphinx search tries to obtain it via DOM query '[role=main]'. Check your theme or template." + ); + return ""; + }, + + init: () => { + const query = new URLSearchParams(window.location.search).get("q"); + document + .querySelectorAll('input[name="q"]') + .forEach((el) => (el.value = query)); + if (query) Search.performSearch(query); + }, + + loadIndex: (url) => + (document.body.appendChild(document.createElement("script")).src = url), + + setIndex: (index) => { + Search._index = index; + if (Search._queued_query !== null) { + const query = Search._queued_query; + Search._queued_query = null; + Search.query(query); + } + }, + + hasIndex: () => Search._index !== null, + + deferQuery: (query) => (Search._queued_query = query), + + stopPulse: () => (Search._pulse_status = -1), + + startPulse: () => { + if (Search._pulse_status >= 0) return; + + const pulse = () => { + Search._pulse_status = (Search._pulse_status + 1) % 4; + Search.dots.innerText = ".".repeat(Search._pulse_status); + if (Search._pulse_status >= 0) window.setTimeout(pulse, 500); + }; + pulse(); + }, + + /** + * perform a search for something (or wait until index is loaded) + */ + performSearch: (query) => { + // create the required interface elements + const searchText = document.createElement("h2"); + searchText.textContent = _("Searching"); + const searchSummary = document.createElement("p"); + searchSummary.classList.add("search-summary"); + searchSummary.innerText = ""; + const searchList = document.createElement("ul"); + searchList.setAttribute("role", "list"); + searchList.classList.add("search"); + + const out = document.getElementById("search-results"); + Search.title = out.appendChild(searchText); + Search.dots = Search.title.appendChild(document.createElement("span")); + Search.status = out.appendChild(searchSummary); + Search.output = out.appendChild(searchList); + + const searchProgress = document.getElementById("search-progress"); + // Some themes don't use the search progress node + if (searchProgress) { + searchProgress.innerText = _("Preparing search..."); + } + Search.startPulse(); + + // index already loaded, the browser was quick! + if (Search.hasIndex()) Search.query(query); + else Search.deferQuery(query); + }, + + _parseQuery: (query) => { + // stem the search terms and add them to the correct list + const stemmer = new Stemmer(); + const searchTerms = new Set(); + const excludedTerms = new Set(); + const highlightTerms = new Set(); + const objectTerms = new Set(splitQuery(query.toLowerCase().trim())); + splitQuery(query.trim()).forEach((queryTerm) => { + const queryTermLower = queryTerm.toLowerCase(); + + // maybe skip this "word" + // stopwords array is from language_data.js + if ( + stopwords.indexOf(queryTermLower) !== -1 || + queryTerm.match(/^\d+$/) + ) + return; + + // stem the word + let word = stemmer.stemWord(queryTermLower); + // select the correct list + if (word[0] === "-") excludedTerms.add(word.substr(1)); + else { + searchTerms.add(word); + highlightTerms.add(queryTermLower); + } + }); + + if (SPHINX_HIGHLIGHT_ENABLED) { // set in sphinx_highlight.js + localStorage.setItem("sphinx_highlight_terms", [...highlightTerms].join(" ")) + } + + // console.debug("SEARCH: searching for:"); + // console.info("required: ", [...searchTerms]); + // console.info("excluded: ", [...excludedTerms]); + + return [query, searchTerms, excludedTerms, highlightTerms, objectTerms]; + }, + + /** + * execute search (requires search index to be loaded) + */ + _performSearch: (query, searchTerms, excludedTerms, highlightTerms, objectTerms) => { + const filenames = Search._index.filenames; + const docNames = Search._index.docnames; + const titles = Search._index.titles; + const allTitles = Search._index.alltitles; + const indexEntries = Search._index.indexentries; + + // Collect multiple result groups to be sorted separately and then ordered. + // Each is an array of [docname, title, anchor, descr, score, filename, kind]. + const normalResults = []; + const nonMainIndexResults = []; + + _removeChildren(document.getElementById("search-progress")); + + const queryLower = query.toLowerCase().trim(); + for (const [title, foundTitles] of Object.entries(allTitles)) { + if (title.toLowerCase().trim().includes(queryLower) && (queryLower.length >= title.length/2)) { + for (const [file, id] of foundTitles) { + const score = Math.round(Scorer.title * queryLower.length / title.length); + const boost = titles[file] === title ? 1 : 0; // add a boost for document titles + normalResults.push([ + docNames[file], + titles[file] !== title ? `${titles[file]} > ${title}` : title, + id !== null ? "#" + id : "", + null, + score + boost, + filenames[file], + SearchResultKind.title, + ]); + } + } + } + + // search for explicit entries in index directives + for (const [entry, foundEntries] of Object.entries(indexEntries)) { + if (entry.includes(queryLower) && (queryLower.length >= entry.length/2)) { + for (const [file, id, isMain] of foundEntries) { + const score = Math.round(100 * queryLower.length / entry.length); + const result = [ + docNames[file], + titles[file], + id ? "#" + id : "", + null, + score, + filenames[file], + SearchResultKind.index, + ]; + if (isMain) { + normalResults.push(result); + } else { + nonMainIndexResults.push(result); + } + } + } + } + + // lookup as object + objectTerms.forEach((term) => + normalResults.push(...Search.performObjectSearch(term, objectTerms)) + ); + + // lookup as search terms in fulltext + normalResults.push(...Search.performTermsSearch(searchTerms, excludedTerms)); + + // let the scorer override scores with a custom scoring function + if (Scorer.score) { + normalResults.forEach((item) => (item[4] = Scorer.score(item))); + nonMainIndexResults.forEach((item) => (item[4] = Scorer.score(item))); + } + + // Sort each group of results by score and then alphabetically by name. + normalResults.sort(_orderResultsByScoreThenName); + nonMainIndexResults.sort(_orderResultsByScoreThenName); + + // Combine the result groups in (reverse) order. + // Non-main index entries are typically arbitrary cross-references, + // so display them after other results. + let results = [...nonMainIndexResults, ...normalResults]; + + // remove duplicate search results + // note the reversing of results, so that in the case of duplicates, the highest-scoring entry is kept + let seen = new Set(); + results = results.reverse().reduce((acc, result) => { + let resultStr = result.slice(0, 4).concat([result[5]]).map(v => String(v)).join(','); + if (!seen.has(resultStr)) { + acc.push(result); + seen.add(resultStr); + } + return acc; + }, []); + + return results.reverse(); + }, + + query: (query) => { + const [searchQuery, searchTerms, excludedTerms, highlightTerms, objectTerms] = Search._parseQuery(query); + const results = Search._performSearch(searchQuery, searchTerms, excludedTerms, highlightTerms, objectTerms); + + // for debugging + //Search.lastresults = results.slice(); // a copy + // console.info("search results:", Search.lastresults); + + // print the results + _displayNextItem(results, results.length, searchTerms, highlightTerms); + }, + + /** + * search for object names + */ + performObjectSearch: (object, objectTerms) => { + const filenames = Search._index.filenames; + const docNames = Search._index.docnames; + const objects = Search._index.objects; + const objNames = Search._index.objnames; + const titles = Search._index.titles; + + const results = []; + + const objectSearchCallback = (prefix, match) => { + const name = match[4] + const fullname = (prefix ? prefix + "." : "") + name; + const fullnameLower = fullname.toLowerCase(); + if (fullnameLower.indexOf(object) < 0) return; + + let score = 0; + const parts = fullnameLower.split("."); + + // check for different match types: exact matches of full name or + // "last name" (i.e. last dotted part) + if (fullnameLower === object || parts.slice(-1)[0] === object) + score += Scorer.objNameMatch; + else if (parts.slice(-1)[0].indexOf(object) > -1) + score += Scorer.objPartialMatch; // matches in last name + + const objName = objNames[match[1]][2]; + const title = titles[match[0]]; + + // If more than one term searched for, we require other words to be + // found in the name/title/description + const otherTerms = new Set(objectTerms); + otherTerms.delete(object); + if (otherTerms.size > 0) { + const haystack = `${prefix} ${name} ${objName} ${title}`.toLowerCase(); + if ( + [...otherTerms].some((otherTerm) => haystack.indexOf(otherTerm) < 0) + ) + return; + } + + let anchor = match[3]; + if (anchor === "") anchor = fullname; + else if (anchor === "-") anchor = objNames[match[1]][1] + "-" + fullname; + + const descr = objName + _(", in ") + title; + + // add custom score for some objects according to scorer + if (Scorer.objPrio.hasOwnProperty(match[2])) + score += Scorer.objPrio[match[2]]; + else score += Scorer.objPrioDefault; + + results.push([ + docNames[match[0]], + fullname, + "#" + anchor, + descr, + score, + filenames[match[0]], + SearchResultKind.object, + ]); + }; + Object.keys(objects).forEach((prefix) => + objects[prefix].forEach((array) => + objectSearchCallback(prefix, array) + ) + ); + return results; + }, + + /** + * search for full-text terms in the index + */ + performTermsSearch: (searchTerms, excludedTerms) => { + // prepare search + const terms = Search._index.terms; + const titleTerms = Search._index.titleterms; + const filenames = Search._index.filenames; + const docNames = Search._index.docnames; + const titles = Search._index.titles; + + const scoreMap = new Map(); + const fileMap = new Map(); + + // perform the search on the required terms + searchTerms.forEach((word) => { + const files = []; + const arr = [ + { files: terms[word], score: Scorer.term }, + { files: titleTerms[word], score: Scorer.title }, + ]; + // add support for partial matches + if (word.length > 2) { + const escapedWord = _escapeRegExp(word); + if (!terms.hasOwnProperty(word)) { + Object.keys(terms).forEach((term) => { + if (term.match(escapedWord)) + arr.push({ files: terms[term], score: Scorer.partialTerm }); + }); + } + if (!titleTerms.hasOwnProperty(word)) { + Object.keys(titleTerms).forEach((term) => { + if (term.match(escapedWord)) + arr.push({ files: titleTerms[term], score: Scorer.partialTitle }); + }); + } + } + + // no match but word was a required one + if (arr.every((record) => record.files === undefined)) return; + + // found search word in contents + arr.forEach((record) => { + if (record.files === undefined) return; + + let recordFiles = record.files; + if (recordFiles.length === undefined) recordFiles = [recordFiles]; + files.push(...recordFiles); + + // set score for the word in each file + recordFiles.forEach((file) => { + if (!scoreMap.has(file)) scoreMap.set(file, {}); + scoreMap.get(file)[word] = record.score; + }); + }); + + // create the mapping + files.forEach((file) => { + if (!fileMap.has(file)) fileMap.set(file, [word]); + else if (fileMap.get(file).indexOf(word) === -1) fileMap.get(file).push(word); + }); + }); + + // now check if the files don't contain excluded terms + const results = []; + for (const [file, wordList] of fileMap) { + // check if all requirements are matched + + // as search terms with length < 3 are discarded + const filteredTermCount = [...searchTerms].filter( + (term) => term.length > 2 + ).length; + if ( + wordList.length !== searchTerms.size && + wordList.length !== filteredTermCount + ) + continue; + + // ensure that none of the excluded terms is in the search result + if ( + [...excludedTerms].some( + (term) => + terms[term] === file || + titleTerms[term] === file || + (terms[term] || []).includes(file) || + (titleTerms[term] || []).includes(file) + ) + ) + break; + + // select one (max) score for the file. + const score = Math.max(...wordList.map((w) => scoreMap.get(file)[w])); + // add result to the result list + results.push([ + docNames[file], + titles[file], + "", + null, + score, + filenames[file], + SearchResultKind.text, + ]); + } + return results; + }, + + /** + * helper function to return a node containing the + * search summary for a given text. keywords is a list + * of stemmed words. + */ + makeSearchSummary: (htmlText, keywords, anchor) => { + const text = Search.htmlToText(htmlText, anchor); + if (text === "") return null; + + const textLower = text.toLowerCase(); + const actualStartPosition = [...keywords] + .map((k) => textLower.indexOf(k.toLowerCase())) + .filter((i) => i > -1) + .slice(-1)[0]; + const startWithContext = Math.max(actualStartPosition - 120, 0); + + const top = startWithContext === 0 ? "" : "..."; + const tail = startWithContext + 240 < text.length ? "..." : ""; + + let summary = document.createElement("p"); + summary.classList.add("context"); + summary.textContent = top + text.substr(startWithContext, 240).trim() + tail; + + return summary; + }, +}; + +_ready(Search.init); diff --git a/_build/_static/shortcut-icon.png b/_build/_static/shortcut-icon.png new file mode 100644 index 0000000000000000000000000000000000000000..4d3e6c377414f47b8f935407a18d174c8199539c GIT binary patch literal 4027 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 NFw`}HS8KaO{tNcto^SvF literal 0 HcmV?d00001 diff --git a/_build/_static/sphinx_highlight.js b/_build/_static/sphinx_highlight.js new file mode 100644 index 00000000..8a96c69a --- /dev/null +++ b/_build/_static/sphinx_highlight.js @@ -0,0 +1,154 @@ +/* Highlighting utilities for Sphinx HTML documentation. */ +"use strict"; + +const SPHINX_HIGHLIGHT_ENABLED = true + +/** + * highlight a given string on a node by wrapping it in + * span elements with the given class name. + */ +const _highlight = (node, addItems, text, className) => { + if (node.nodeType === Node.TEXT_NODE) { + const val = node.nodeValue; + const parent = node.parentNode; + const pos = val.toLowerCase().indexOf(text); + if ( + pos >= 0 && + !parent.classList.contains(className) && + !parent.classList.contains("nohighlight") + ) { + let span; + + const closestNode = parent.closest("body, svg, foreignObject"); + const isInSVG = closestNode && closestNode.matches("svg"); + if (isInSVG) { + span = document.createElementNS("http://www.w3.org/2000/svg", "tspan"); + } else { + span = document.createElement("span"); + span.classList.add(className); + } + + span.appendChild(document.createTextNode(val.substr(pos, text.length))); + const rest = document.createTextNode(val.substr(pos + text.length)); + parent.insertBefore( + span, + parent.insertBefore( + rest, + node.nextSibling + ) + ); + node.nodeValue = val.substr(0, pos); + /* There may be more occurrences of search term in this node. So call this + * function recursively on the remaining fragment. + */ + _highlight(rest, addItems, text, className); + + if (isInSVG) { + const rect = document.createElementNS( + "http://www.w3.org/2000/svg", + "rect" + ); + const bbox = parent.getBBox(); + rect.x.baseVal.value = bbox.x; + rect.y.baseVal.value = bbox.y; + rect.width.baseVal.value = bbox.width; + rect.height.baseVal.value = bbox.height; + rect.setAttribute("class", className); + addItems.push({ parent: parent, target: rect }); + } + } + } else if (node.matches && !node.matches("button, select, textarea")) { + node.childNodes.forEach((el) => _highlight(el, addItems, text, className)); + } +}; +const _highlightText = (thisNode, text, className) => { + let addItems = []; + _highlight(thisNode, addItems, text, className); + addItems.forEach((obj) => + obj.parent.insertAdjacentElement("beforebegin", obj.target) + ); +}; + +/** + * Small JavaScript module for the documentation. + */ +const SphinxHighlight = { + + /** + * highlight the search words provided in localstorage in the text + */ + highlightSearchWords: () => { + if (!SPHINX_HIGHLIGHT_ENABLED) return; // bail if no highlight + + // get and clear terms from localstorage + const url = new URL(window.location); + const highlight = + localStorage.getItem("sphinx_highlight_terms") + || url.searchParams.get("highlight") + || ""; + localStorage.removeItem("sphinx_highlight_terms") + url.searchParams.delete("highlight"); + window.history.replaceState({}, "", url); + + // get individual terms from highlight string + const terms = highlight.toLowerCase().split(/\s+/).filter(x => x); + if (terms.length === 0) return; // nothing to do + + // There should never be more than one element matching "div.body" + const divBody = document.querySelectorAll("div.body"); + const body = divBody.length ? divBody[0] : document.querySelector("body"); + window.setTimeout(() => { + terms.forEach((term) => _highlightText(body, term, "highlighted")); + }, 10); + + const searchBox = document.getElementById("searchbox"); + if (searchBox === null) return; + searchBox.appendChild( + document + .createRange() + .createContextualFragment( + '

" + ) + ); + }, + + /** + * helper function to hide the search marks again + */ + hideSearchWords: () => { + document + .querySelectorAll("#searchbox .highlight-link") + .forEach((el) => el.remove()); + document + .querySelectorAll("span.highlighted") + .forEach((el) => el.classList.remove("highlighted")); + localStorage.removeItem("sphinx_highlight_terms") + }, + + initEscapeListener: () => { + // only install a listener if it is really needed + if (!DOCUMENTATION_OPTIONS.ENABLE_SEARCH_SHORTCUTS) return; + + document.addEventListener("keydown", (event) => { + // bail for input elements + if (BLACKLISTED_KEY_CONTROL_ELEMENTS.has(document.activeElement.tagName)) return; + // bail with special keys + if (event.shiftKey || event.altKey || event.ctrlKey || event.metaKey) return; + if (DOCUMENTATION_OPTIONS.ENABLE_SEARCH_SHORTCUTS && (event.key === "Escape")) { + SphinxHighlight.hideSearchWords(); + event.preventDefault(); + } + }); + }, +}; + +_ready(() => { + /* Do not call highlightSearchWords() when we are on the search page. + * It will highlight words from the *previous* search query. + */ + if (typeof Search === "undefined") SphinxHighlight.highlightSearchWords(); + SphinxHighlight.initEscapeListener(); +}); diff --git a/_build/_static/tabs.css b/_build/_static/tabs.css new file mode 100644 index 00000000..957ba60d --- /dev/null +++ b/_build/_static/tabs.css @@ -0,0 +1,89 @@ +.sphinx-tabs { + margin-bottom: 1rem; +} + +[role="tablist"] { + border-bottom: 1px solid #a0b3bf; +} + +.sphinx-tabs-tab { + position: relative; + font-family: Lato,'Helvetica Neue',Arial,Helvetica,sans-serif; + color: #1D5C87; + line-height: 24px; + margin: 0; + font-size: 16px; + font-weight: 400; + background-color: rgba(255, 255, 255, 0); + border-radius: 5px 5px 0 0; + border: 0; + padding: 1rem 1.5rem; + margin-bottom: 0; +} + +.sphinx-tabs-tab[aria-selected="true"] { + font-weight: 700; + border: 1px solid #a0b3bf; + border-bottom: 1px solid white; + margin: -1px; + background-color: white; +} + +.sphinx-tabs-tab:focus { + z-index: 1; + outline-offset: 1px; +} + +.sphinx-tabs-panel { + position: relative; + padding: 1rem; + border: 1px solid #a0b3bf; + margin: 0px -1px -1px -1px; + border-radius: 0 0 5px 5px; + border-top: 0; + background: white; +} + +.sphinx-tabs-panel.code-tab { + padding: 0.4rem; +} + +.sphinx-tab img { + margin-bottom: 24 px; +} + +/* Dark theme preference styling */ + +@media (prefers-color-scheme: dark) { + body[data-theme="auto"] .sphinx-tabs-panel { + color: white; + background-color: rgb(50, 50, 50); + } + + body[data-theme="auto"] .sphinx-tabs-tab { + color: white; + background-color: rgba(255, 255, 255, 0.05); + } + + body[data-theme="auto"] .sphinx-tabs-tab[aria-selected="true"] { + border-bottom: 1px solid rgb(50, 50, 50); + background-color: rgb(50, 50, 50); + } +} + +/* Explicit dark theme styling */ + +body[data-theme="dark"] .sphinx-tabs-panel { + color: white; + background-color: rgb(50, 50, 50); +} + +body[data-theme="dark"] .sphinx-tabs-tab { + color: white; + background-color: rgba(255, 255, 255, 0.05); +} + +body[data-theme="dark"] .sphinx-tabs-tab[aria-selected="true"] { + border-bottom: 2px solid rgb(50, 50, 50); + background-color: rgb(50, 50, 50); +} diff --git a/_build/_static/tabs.js b/_build/_static/tabs.js new file mode 100644 index 00000000..48dc303c --- /dev/null +++ b/_build/_static/tabs.js @@ -0,0 +1,145 @@ +try { + var session = window.sessionStorage || {}; +} catch (e) { + var session = {}; +} + +window.addEventListener("DOMContentLoaded", () => { + const allTabs = document.querySelectorAll('.sphinx-tabs-tab'); + const tabLists = document.querySelectorAll('[role="tablist"]'); + + allTabs.forEach(tab => { + tab.addEventListener("click", changeTabs); + }); + + tabLists.forEach(tabList => { + tabList.addEventListener("keydown", keyTabs); + }); + + // Restore group tab selection from session + const lastSelected = session.getItem('sphinx-tabs-last-selected'); + if (lastSelected != null) selectNamedTabs(lastSelected); +}); + +/** + * Key focus left and right between sibling elements using arrows + * @param {Node} e the element in focus when key was pressed + */ +function keyTabs(e) { + const tab = e.target; + let nextTab = null; + if (e.keyCode === 39 || e.keyCode === 37) { + tab.setAttribute("tabindex", -1); + // Move right + if (e.keyCode === 39) { + nextTab = tab.nextElementSibling; + if (nextTab === null) { + nextTab = tab.parentNode.firstElementChild; + } + // Move left + } else if (e.keyCode === 37) { + nextTab = tab.previousElementSibling; + if (nextTab === null) { + nextTab = tab.parentNode.lastElementChild; + } + } + } + + if (nextTab !== null) { + nextTab.setAttribute("tabindex", 0); + nextTab.focus(); + } +} + +/** + * Select or deselect clicked tab. If a group tab + * is selected, also select tab in other tabLists. + * @param {Node} e the element that was clicked + */ +function changeTabs(e) { + // Use this instead of the element that was clicked, in case it's a child + const notSelected = this.getAttribute("aria-selected") === "false"; + const positionBefore = this.parentNode.getBoundingClientRect().top; + const notClosable = !this.parentNode.classList.contains("closeable"); + + deselectTabList(this); + + if (notSelected || notClosable) { + selectTab(this); + const name = this.getAttribute("name"); + selectNamedTabs(name, this.id); + + if (this.classList.contains("group-tab")) { + // Persist during session + session.setItem('sphinx-tabs-last-selected', name); + } + } + + const positionAfter = this.parentNode.getBoundingClientRect().top; + const positionDelta = positionAfter - positionBefore; + // Scroll to offset content resizing + window.scrollTo(0, window.scrollY + positionDelta); +} + +/** + * Select tab and show associated panel. + * @param {Node} tab tab to select + */ +function selectTab(tab) { + tab.setAttribute("aria-selected", true); + + // Show the associated panel + document + .getElementById(tab.getAttribute("aria-controls")) + .removeAttribute("hidden"); +} + +/** + * Hide the panels associated with all tabs within the + * tablist containing this tab. + * @param {Node} tab a tab within the tablist to deselect + */ +function deselectTabList(tab) { + const parent = tab.parentNode; + const grandparent = parent.parentNode; + + Array.from(parent.children) + .forEach(t => t.setAttribute("aria-selected", false)); + + Array.from(grandparent.children) + .slice(1) // Skip tablist + .forEach(panel => panel.setAttribute("hidden", true)); +} + +/** + * Select grouped tabs with the same name, but no the tab + * with the given id. + * @param {Node} name name of grouped tab to be selected + * @param {Node} clickedId id of clicked tab + */ +function selectNamedTabs(name, clickedId=null) { + const groupedTabs = document.querySelectorAll(`.sphinx-tabs-tab[name="${name}"]`); + const tabLists = Array.from(groupedTabs).map(tab => tab.parentNode); + + tabLists + .forEach(tabList => { + // Don't want to change the tabList containing the clicked tab + const clickedTab = tabList.querySelector(`[id="${clickedId}"]`); + if (clickedTab === null ) { + // Select first tab with matching name + const tab = tabList.querySelector(`.sphinx-tabs-tab[name="${name}"]`); + deselectTabList(tab); + selectTab(tab); + } + }) +} + +if (typeof exports === 'undefined') { + exports = {}; +} + +exports.keyTabs = keyTabs; +exports.changeTabs = changeTabs; +exports.selectTab = selectTab; +exports.deselectTabList = deselectTabList; +exports.selectNamedTabs = selectNamedTabs; diff --git a/_build/api/index.html b/_build/api/index.html new file mode 100644 index 00000000..19ada33b --- /dev/null +++ b/_build/api/index.html @@ -0,0 +1,9831 @@ + + + + + + + + API — Flask Documentation (3.1.x) + + + + + + + + + + + + + + +
+
+
+
+ +
+

API

+

This part of the documentation covers all the interfaces of Flask. For +parts where Flask depends on external libraries, we document the most +important right here and provide links to the canonical documentation.

+
+

Application Object

+
+
+class flask.Flask(import_name, static_url_path=None, static_folder='static', static_host=None, host_matching=False, subdomain_matching=False, template_folder='templates', instance_path=None, instance_relative_config=False, root_path=None)
+

The flask object implements a WSGI application and acts as the central +object. It is passed the name of the module or package of the +application. Once it is created it will act as a central registry for +the view functions, the URL rules, template configuration and much more.

+

The name of the package is used to resolve resources from inside the +package or the folder the module is contained in depending on if the +package parameter resolves to an actual python package (a folder with +an __init__.py file inside) or a standard module (just a .py file).

+

For more information about resource loading, see open_resource().

+

Usually you create a Flask instance in your main module or +in the __init__.py file of your package like this:

+
from flask import Flask
+app = Flask(__name__)
+
+
+
+

About the First Parameter

+

The idea of the first parameter is to give Flask an idea of what +belongs to your application. This name is used to find resources +on the filesystem, can be used by extensions to improve debugging +information and a lot more.

+

So it’s important what you provide there. If you are using a single +module, __name__ is always the correct value. If you however are +using a package, it’s usually recommended to hardcode the name of +your package there.

+

For example if your application is defined in yourapplication/app.py +you should create it with one of the two versions below:

+
app = Flask('yourapplication')
+app = Flask(__name__.split('.')[0])
+
+
+

Why is that? The application will work even with __name__, thanks +to how resources are looked up. However it will make debugging more +painful. Certain extensions can make assumptions based on the +import name of your application. For example the Flask-SQLAlchemy +extension will look for the code in your application that triggered +an SQL query in debug mode. If the import name is not properly set +up, that debugging information is lost. (For example it would only +pick up SQL queries in yourapplication.app and not +yourapplication.views.frontend)

+
+
+Changelog
+

Added in version 1.0: The host_matching and static_host parameters were added.

+
+
+

Added in version 1.0: The subdomain_matching parameter was added. Subdomain +matching needs to be enabled manually now. Setting +SERVER_NAME does not implicitly enable it.

+
+
+

Added in version 0.11: The root_path parameter was added.

+
+
+

Added in version 0.8: The instance_path and instance_relative_config parameters were +added.

+
+
+

Added in version 0.7: The static_url_path, static_folder, and template_folder +parameters were added.

+
+
+
Parameters:
+
    +
  • import_name (str) – the name of the application package

  • +
  • static_url_path (str | None) – can be used to specify a different path for the +static files on the web. Defaults to the name +of the static_folder folder.

  • +
  • static_folder (str | os.PathLike[str] | None) – The folder with static files that is served at +static_url_path. Relative to the application root_path +or an absolute path. Defaults to 'static'.

  • +
  • static_host (str | None) – the host to use when adding the static route. +Defaults to None. Required when using host_matching=True +with a static_folder configured.

  • +
  • host_matching (bool) – set url_map.host_matching attribute. +Defaults to False.

  • +
  • subdomain_matching (bool) – consider the subdomain relative to +SERVER_NAME when matching routes. Defaults to False.

  • +
  • template_folder (str | os.PathLike[str] | None) – the folder that contains the templates that should +be used by the application. Defaults to +'templates' folder in the root path of the +application.

  • +
  • instance_path (str | None) – An alternative instance path for the application. +By default the folder 'instance' next to the +package or module is assumed to be the instance +path.

  • +
  • instance_relative_config (bool) – if set to True relative filenames +for loading the config are assumed to +be relative to the instance path instead +of the application root.

  • +
  • root_path (str | None) – The path to the root of the application files. +This should only be set manually when it can’t be detected +automatically, such as for namespace packages.

  • +
+
+
+
+
+request_class
+

alias of Request

+
+ +
+
+response_class
+

alias of Response

+
+ +
+
+session_interface: SessionInterface = <flask.sessions.SecureCookieSessionInterface object>
+

the session interface to use. By default an instance of +SecureCookieSessionInterface is used here.

+
+Changelog
+

Added in version 0.8.

+
+
+ +
+
+cli: Group
+

The Click command group for registering CLI commands for this +object. The commands are available from the flask command +once the application has been discovered and blueprints have +been registered.

+
+ +
+
+get_send_file_max_age(filename)
+

Used by send_file() to determine the max_age cache +value for a given file path if it wasn’t passed.

+

By default, this returns SEND_FILE_MAX_AGE_DEFAULT from +the configuration of current_app. This defaults +to None, which tells the browser to use conditional requests +instead of a timed cache, which is usually preferable.

+

Note this is a duplicate of the same method in the Flask +class.

+
+Changelog
+

Changed in version 2.0: The default configuration is None instead of 12 hours.

+
+
+

Added in version 0.9.

+
+
+
Parameters:
+

filename (str | None)

+
+
Return type:
+

int | None

+
+
+
+ +
+
+send_static_file(filename)
+

The view function used to serve files from +static_folder. A route is automatically registered for +this view at static_url_path if static_folder is +set.

+

Note this is a duplicate of the same method in the Flask +class.

+
+Changelog
+

Added in version 0.5.

+
+
+
Parameters:
+

filename (str)

+
+
Return type:
+

Response

+
+
+
+ +
+
+open_resource(resource, mode='rb', encoding=None)
+

Open a resource file relative to root_path for reading.

+

For example, if the file schema.sql is next to the file +app.py where the Flask app is defined, it can be opened +with:

+
with app.open_resource("schema.sql") as f:
+    conn.executescript(f.read())
+
+
+
+
Parameters:
+
    +
  • resource (str) – Path to the resource relative to root_path.

  • +
  • mode (str) – Open the file in this mode. Only reading is supported, +valid values are "r" (or "rt") and "rb".

  • +
  • encoding (str | None) – Open the file with this encoding when opening in text +mode. This is ignored when opening in binary mode.

  • +
+
+
Return type:
+

IO

+
+
+
+

Changed in version 3.1: Added the encoding parameter.

+
+
+ +
+
+open_instance_resource(resource, mode='rb', encoding='utf-8')
+

Open a resource file relative to the application’s instance folder +instance_path. Unlike open_resource(), files in the +instance folder can be opened for writing.

+
+
Parameters:
+
    +
  • resource (str) – Path to the resource relative to instance_path.

  • +
  • mode (str) – Open the file in this mode.

  • +
  • encoding (str | None) – Open the file with this encoding when opening in text +mode. This is ignored when opening in binary mode.

  • +
+
+
Return type:
+

IO

+
+
+
+

Changed in version 3.1: Added the encoding parameter.

+
+
+ +
+
+create_jinja_environment()
+

Create the Jinja environment based on jinja_options +and the various Jinja-related methods of the app. Changing +jinja_options after this will have no effect. Also adds +Flask-related globals and filters to the environment.

+
+Changelog
+

Changed in version 0.11: Environment.auto_reload set in accordance with +TEMPLATES_AUTO_RELOAD configuration option.

+
+
+

Added in version 0.5.

+
+
+
Return type:
+

Environment

+
+
+
+ +
+
+create_url_adapter(request)
+

Creates a URL adapter for the given request. The URL adapter +is created at a point where the request context is not yet set +up so the request is passed explicitly.

+
+

Changed in version 3.1: If SERVER_NAME is set, it does not restrict requests to +only that domain, for both subdomain_matching and +host_matching.

+
+
+Changelog
+

Changed in version 1.0: SERVER_NAME no longer implicitly enables subdomain +matching. Use subdomain_matching instead.

+
+
+

Changed in version 0.9: This can be called outside a request when the URL adapter is created +for an application context.

+
+
+

Added in version 0.6.

+
+
+
Parameters:
+

request (Request | None)

+
+
Return type:
+

MapAdapter | None

+
+
+
+ +
+
+update_template_context(context)
+

Update the template context with some commonly used variables. +This injects request, session, config and g into the template +context as well as everything template context processors want +to inject. Note that the as of Flask 0.6, the original values +in the context will not be overridden if a context processor +decides to return a value with the same key.

+
+
Parameters:
+

context (dict[str, Any]) – the context as a dictionary that is updated in place +to add extra variables.

+
+
Return type:
+

None

+
+
+
+ +
+
+make_shell_context()
+

Returns the shell context for an interactive shell for this +application. This runs all the registered shell context +processors.

+
+Changelog
+

Added in version 0.11.

+
+
+
Return type:
+

dict[str, Any]

+
+
+
+ +
+
+run(host=None, port=None, debug=None, load_dotenv=True, **options)
+

Runs the application on a local development server.

+

Do not use run() in a production setting. It is not intended to +meet security and performance requirements for a production server. +Instead, see Deploying to Production for WSGI server recommendations.

+

If the debug flag is set the server will automatically reload +for code changes and show a debugger in case an exception happened.

+

If you want to run the application in debug mode, but disable the +code execution on the interactive debugger, you can pass +use_evalex=False as parameter. This will keep the debugger’s +traceback screen active, but disable code execution.

+

It is not recommended to use this function for development with +automatic reloading as this is badly supported. Instead you should +be using the flask command line script’s run support.

+
+

Keep in Mind

+

Flask will suppress any server error with a generic error page +unless it is in debug mode. As such to enable just the +interactive debugger without the code reloading, you have to +invoke run() with debug=True and use_reloader=False. +Setting use_debugger to True without being in debug mode +won’t catch any exceptions because there won’t be any to +catch.

+
+
+
Parameters:
+
    +
  • host (str | None) – the hostname to listen on. Set this to '0.0.0.0' to +have the server available externally as well. Defaults to +'127.0.0.1' or the host in the SERVER_NAME config variable +if present.

  • +
  • port (int | None) – the port of the webserver. Defaults to 5000 or the +port defined in the SERVER_NAME config variable if present.

  • +
  • debug (bool | None) – if given, enable or disable debug mode. See +debug.

  • +
  • load_dotenv (bool) – Load the nearest .env and .flaskenv +files to set environment variables. Will also change the working +directory to the directory containing the first file found.

  • +
  • options (Any) – the options to be forwarded to the underlying Werkzeug +server. See werkzeug.serving.run_simple() for more +information.

  • +
+
+
Return type:
+

None

+
+
+
+Changelog
+

Changed in version 1.0: If installed, python-dotenv will be used to load environment +variables from .env and .flaskenv files.

+

The FLASK_DEBUG environment variable will override debug.

+

Threaded mode is enabled by default.

+
+
+

Changed in version 0.10: The default port is now picked from the SERVER_NAME +variable.

+
+
+ +
+
+test_client(use_cookies=True, **kwargs)
+

Creates a test client for this application. For information +about unit testing head over to Testing Flask Applications.

+

Note that if you are testing for assertions or exceptions in your +application code, you must set app.testing = True in order for the +exceptions to propagate to the test client. Otherwise, the exception +will be handled by the application (not visible to the test client) and +the only indication of an AssertionError or other exception will be a +500 status code response to the test client. See the testing +attribute. For example:

+
app.testing = True
+client = app.test_client()
+
+
+

The test client can be used in a with block to defer the closing down +of the context until the end of the with block. This is useful if +you want to access the context locals for testing:

+
with app.test_client() as c:
+    rv = c.get('/?vodka=42')
+    assert request.args['vodka'] == '42'
+
+
+

Additionally, you may pass optional keyword arguments that will then +be passed to the application’s test_client_class constructor. +For example:

+
from flask.testing import FlaskClient
+
+class CustomClient(FlaskClient):
+    def __init__(self, *args, **kwargs):
+        self._authentication = kwargs.pop("authentication")
+        super(CustomClient,self).__init__( *args, **kwargs)
+
+app.test_client_class = CustomClient
+client = app.test_client(authentication='Basic ....')
+
+
+

See FlaskClient for more information.

+
+Changelog
+

Changed in version 0.11: Added **kwargs to support passing additional keyword arguments to +the constructor of test_client_class.

+
+
+

Added in version 0.7: The use_cookies parameter was added as well as the ability +to override the client to be used by setting the +test_client_class attribute.

+
+
+

Changed in version 0.4: added support for with block usage for the client.

+
+
+
Parameters:
+
    +
  • use_cookies (bool)

  • +
  • kwargs (t.Any)

  • +
+
+
Return type:
+

FlaskClient

+
+
+
+ +
+
+test_cli_runner(**kwargs)
+

Create a CLI runner for testing CLI commands. +See Running Commands with the CLI Runner.

+

Returns an instance of test_cli_runner_class, by default +FlaskCliRunner. The Flask app object is +passed as the first argument.

+
+Changelog
+

Added in version 1.0.

+
+
+
Parameters:
+

kwargs (t.Any)

+
+
Return type:
+

FlaskCliRunner

+
+
+
+ +
+
+handle_http_exception(e)
+

Handles an HTTP exception. By default this will invoke the +registered error handlers and fall back to returning the +exception as response.

+
+Changelog
+

Changed in version 1.0.3: RoutingException, used internally for actions such as + slash redirects during routing, is not passed to error + handlers.

+
+
+

Changed in version 1.0: Exceptions are looked up by code and by MRO, so +HTTPException subclasses can be handled with a catch-all +handler for the base HTTPException.

+
+
+

Added in version 0.3.

+
+
+
Parameters:
+

e (HTTPException)

+
+
Return type:
+

HTTPException | ft.ResponseReturnValue

+
+
+
+ +
+
+handle_user_exception(e)
+

This method is called whenever an exception occurs that +should be handled. A special case is HTTPException which is forwarded to the +handle_http_exception() method. This function will either +return a response value or reraise the exception with the same +traceback.

+
+Changelog
+

Changed in version 1.0: Key errors raised from request data like form show the +bad key in debug mode rather than a generic bad request +message.

+
+
+

Added in version 0.7.

+
+
+
Parameters:
+

e (Exception)

+
+
Return type:
+

HTTPException | ft.ResponseReturnValue

+
+
+
+ +
+
+handle_exception(e)
+

Handle an exception that did not have an error handler +associated with it, or that was raised from an error handler. +This always causes a 500 InternalServerError.

+

Always sends the got_request_exception signal.

+

If PROPAGATE_EXCEPTIONS is True, such as in debug +mode, the error will be re-raised so that the debugger can +display it. Otherwise, the original exception is logged, and +an InternalServerError is returned.

+

If an error handler is registered for InternalServerError or +500, it will be used. For consistency, the handler will +always receive the InternalServerError. The original +unhandled exception is available as e.original_exception.

+
+Changelog
+

Changed in version 1.1.0: Always passes the InternalServerError instance to the +handler, setting original_exception to the unhandled +error.

+
+
+

Changed in version 1.1.0: after_request functions and other finalization is done +even for the default 500 response when there is no handler.

+
+
+

Added in version 0.3.

+
+
+
Parameters:
+

e (Exception)

+
+
Return type:
+

Response

+
+
+
+ +
+
+log_exception(exc_info)
+

Logs an exception. This is called by handle_exception() +if debugging is disabled and right before the handler is called. +The default implementation logs the exception as error on the +logger.

+
+Changelog
+

Added in version 0.8.

+
+
+
Parameters:
+

exc_info (tuple[type, BaseException, TracebackType] | tuple[None, None, None])

+
+
Return type:
+

None

+
+
+
+ +
+
+dispatch_request()
+

Does the request dispatching. Matches the URL and returns the +return value of the view or error handler. This does not have to +be a response object. In order to convert the return value to a +proper response object, call make_response().

+
+Changelog
+

Changed in version 0.7: This no longer does the exception handling, this code was +moved to the new full_dispatch_request().

+
+
+
Return type:
+

ft.ResponseReturnValue

+
+
+
+ +
+
+full_dispatch_request()
+

Dispatches the request and on top of that performs request +pre and postprocessing as well as HTTP exception catching and +error handling.

+
+Changelog
+

Added in version 0.7.

+
+
+
Return type:
+

Response

+
+
+
+ +
+
+make_default_options_response()
+

This method is called to create the default OPTIONS response. +This can be changed through subclassing to change the default +behavior of OPTIONS responses.

+
+Changelog
+

Added in version 0.7.

+
+
+
Return type:
+

Response

+
+
+
+ +
+
+ensure_sync(func)
+

Ensure that the function is synchronous for WSGI workers. +Plain def functions are returned as-is. async def +functions are wrapped to run and wait for the response.

+

Override this method to change how the app runs async views.

+
+Changelog
+

Added in version 2.0.

+
+
+
Parameters:
+

func (Callable[[...], Any])

+
+
Return type:
+

Callable[[…], Any]

+
+
+
+ +
+
+async_to_sync(func)
+

Return a sync function that will run the coroutine function.

+
result = app.async_to_sync(func)(*args, **kwargs)
+
+
+

Override this method to change how the app converts async code +to be synchronously callable.

+
+Changelog
+

Added in version 2.0.

+
+
+
Parameters:
+

func (Callable[[...], Coroutine[Any, Any, Any]])

+
+
Return type:
+

Callable[[…], Any]

+
+
+
+ +
+
+url_for(endpoint, *, _anchor=None, _method=None, _scheme=None, _external=None, **values)
+

Generate a URL to the given endpoint with the given values.

+

This is called by flask.url_for(), and can be called +directly as well.

+

An endpoint is the name of a URL rule, usually added with +@app.route(), and usually the same name as the +view function. A route defined in a Blueprint +will prepend the blueprint’s name separated by a . to the +endpoint.

+

In some cases, such as email messages, you want URLs to include +the scheme and domain, like https://example.com/hello. When +not in an active request, URLs will be external by default, but +this requires setting SERVER_NAME so Flask knows what +domain to use. APPLICATION_ROOT and +PREFERRED_URL_SCHEME should also be configured as +needed. This config is only used when not in an active request.

+

Functions can be decorated with url_defaults() to modify +keyword arguments before the URL is built.

+

If building fails for some reason, such as an unknown endpoint +or incorrect values, the app’s handle_url_build_error() +method is called. If that returns a string, that is returned, +otherwise a BuildError is raised.

+
+
Parameters:
+
    +
  • endpoint (str) – The endpoint name associated with the URL to +generate. If this starts with a ., the current blueprint +name (if any) will be used.

  • +
  • _anchor (str | None) – If given, append this as #anchor to the URL.

  • +
  • _method (str | None) – If given, generate the URL associated with this +method for the endpoint.

  • +
  • _scheme (str | None) – If given, the URL will have this scheme if it +is external.

  • +
  • _external (bool | None) – If given, prefer the URL to be internal +(False) or require it to be external (True). External URLs +include the scheme and domain. When not in an active +request, URLs are external by default.

  • +
  • values (Any) – Values to use for the variable parts of the URL +rule. Unknown keys are appended as query string arguments, +like ?a=b&c=d.

  • +
+
+
Return type:
+

str

+
+
+
+Changelog
+

Added in version 2.2: Moved from flask.url_for, which calls this method.

+
+
+ +
+
+make_response(rv)
+

Convert the return value from a view function to an instance of +response_class.

+
+
Parameters:
+

rv (ft.ResponseReturnValue) –

the return value from the view function. The view function +must return a response. Returning None, or the view ending +without returning, is not allowed. The following types are allowed +for view_rv:

+
+
str

A response object is created with the string encoded to UTF-8 +as the body.

+
+
bytes

A response object is created with the bytes as the body.

+
+
dict

A dictionary that will be jsonify’d before being returned.

+
+
list

A list that will be jsonify’d before being returned.

+
+
generator or iterator

A generator that returns str or bytes to be +streamed as the response.

+
+
tuple

Either (body, status, headers), (body, status), or +(body, headers), where body is any of the other types +allowed here, status is a string or an integer, and +headers is a dictionary or a list of (key, value) +tuples. If body is a response_class instance, +status overwrites the exiting value and headers are +extended.

+
+
response_class

The object is returned unchanged.

+
+
other Response class

The object is coerced to response_class.

+
+
callable()

The function is called as a WSGI application. The result is +used to create a response object.

+
+
+

+
+
Return type:
+

Response

+
+
+
+Changelog
+

Changed in version 2.2: A generator will be converted to a streaming response. +A list will be converted to a JSON response.

+
+
+

Changed in version 1.1: A dict will be converted to a JSON response.

+
+
+

Changed in version 0.9: Previously a tuple was interpreted as the arguments for the +response object.

+
+
+ +
+
+preprocess_request()
+

Called before the request is dispatched. Calls +url_value_preprocessors registered with the app and the +current blueprint (if any). Then calls before_request_funcs +registered with the app and the blueprint.

+

If any before_request() handler returns a non-None value, the +value is handled as if it was the return value from the view, and +further request handling is stopped.

+
+
Return type:
+

ft.ResponseReturnValue | None

+
+
+
+ +
+
+process_response(response)
+

Can be overridden in order to modify the response object +before it’s sent to the WSGI server. By default this will +call all the after_request() decorated functions.

+
+Changelog
+

Changed in version 0.5: As of Flask 0.5 the functions registered for after request +execution are called in reverse order of registration.

+
+
+
Parameters:
+

response (Response) – a response_class object.

+
+
Returns:
+

a new response object or the same, has to be an +instance of response_class.

+
+
Return type:
+

Response

+
+
+
+ +
+
+do_teardown_request(exc=_sentinel)
+

Called after the request is dispatched and the response is +returned, right before the request context is popped.

+

This calls all functions decorated with +teardown_request(), and Blueprint.teardown_request() +if a blueprint handled the request. Finally, the +request_tearing_down signal is sent.

+

This is called by +RequestContext.pop(), +which may be delayed during testing to maintain access to +resources.

+
+
Parameters:
+

exc (BaseException | None) – An unhandled exception raised while dispatching the +request. Detected from the current exception information if +not passed. Passed to each teardown function.

+
+
Return type:
+

None

+
+
+
+Changelog
+

Changed in version 0.9: Added the exc argument.

+
+
+ +
+
+do_teardown_appcontext(exc=_sentinel)
+

Called right before the application context is popped.

+

When handling a request, the application context is popped +after the request context. See do_teardown_request().

+

This calls all functions decorated with +teardown_appcontext(). Then the +appcontext_tearing_down signal is sent.

+

This is called by +AppContext.pop().

+
+Changelog
+

Added in version 0.9.

+
+
+
Parameters:
+

exc (BaseException | None)

+
+
Return type:
+

None

+
+
+
+ +
+
+app_context()
+

Create an AppContext. Use as a with +block to push the context, which will make current_app +point at this application.

+

An application context is automatically pushed by +RequestContext.push() +when handling a request, and when running a CLI command. Use +this to manually create a context outside of these situations.

+
with app.app_context():
+    init_db()
+
+
+

See The Application Context.

+
+Changelog
+

Added in version 0.9.

+
+
+
Return type:
+

AppContext

+
+
+
+ +
+
+request_context(environ)
+

Create a RequestContext representing a +WSGI environment. Use a with block to push the context, +which will make request point at this request.

+

See The Request Context.

+

Typically you should not call this from your own code. A request +context is automatically pushed by the wsgi_app() when +handling a request. Use test_request_context() to create +an environment and context instead of this method.

+
+
Parameters:
+

environ (WSGIEnvironment) – a WSGI environment

+
+
Return type:
+

RequestContext

+
+
+
+ +
+
+test_request_context(*args, **kwargs)
+

Create a RequestContext for a WSGI +environment created from the given values. This is mostly useful +during testing, where you may want to run a function that uses +request data without dispatching a full request.

+

See The Request Context.

+

Use a with block to push the context, which will make +request point at the request for the created +environment.

+
with app.test_request_context(...):
+    generate_report()
+
+
+

When using the shell, it may be easier to push and pop the +context manually to avoid indentation.

+
ctx = app.test_request_context(...)
+ctx.push()
+...
+ctx.pop()
+
+
+

Takes the same arguments as Werkzeug’s +EnvironBuilder, with some defaults from +the application. See the linked Werkzeug docs for most of the +available arguments. Flask-specific behavior is listed here.

+
+
Parameters:
+
    +
  • path – URL path being requested.

  • +
  • base_url – Base URL where the app is being served, which +path is relative to. If not given, built from +PREFERRED_URL_SCHEME, subdomain, +SERVER_NAME, and APPLICATION_ROOT.

  • +
  • subdomain – Subdomain name to append to +SERVER_NAME.

  • +
  • url_scheme – Scheme to use instead of +PREFERRED_URL_SCHEME.

  • +
  • data – The request body, either as a string or a dict of +form keys and values.

  • +
  • json – If given, this is serialized as JSON and passed as +data. Also defaults content_type to +application/json.

  • +
  • args (Any) – other positional arguments passed to +EnvironBuilder.

  • +
  • kwargs (Any) – other keyword arguments passed to +EnvironBuilder.

  • +
+
+
Return type:
+

RequestContext

+
+
+
+ +
+
+wsgi_app(environ, start_response)
+

The actual WSGI application. This is not implemented in +__call__() so that middlewares can be applied without +losing a reference to the app object. Instead of doing this:

+
app = MyMiddleware(app)
+
+
+

It’s a better idea to do this instead:

+
app.wsgi_app = MyMiddleware(app.wsgi_app)
+
+
+

Then you still have the original application object around and +can continue to call methods on it.

+
+Changelog
+

Changed in version 0.7: Teardown events for the request and app contexts are called +even if an unhandled error occurs. Other events may not be +called depending on when an error occurs during dispatch. +See Callbacks and Errors.

+
+
+
Parameters:
+
    +
  • environ (WSGIEnvironment) – A WSGI environment.

  • +
  • start_response (StartResponse) – A callable accepting a status code, +a list of headers, and an optional exception context to +start the response.

  • +
+
+
Return type:
+

cabc.Iterable[bytes]

+
+
+
+ +
+
+aborter_class
+

alias of Aborter

+
+ +
+
+add_template_filter(f, name=None)
+

Register a custom template filter. Works exactly like the +template_filter() decorator.

+
+
Parameters:
+
    +
  • name (str | None) – the optional name of the filter, otherwise the +function name will be used.

  • +
  • f (Callable[[...], Any])

  • +
+
+
Return type:
+

None

+
+
+
+ +
+
+add_template_global(f, name=None)
+

Register a custom template global function. Works exactly like the +template_global() decorator.

+
+Changelog
+

Added in version 0.10.

+
+
+
Parameters:
+
    +
  • name (str | None) – the optional name of the global function, otherwise the +function name will be used.

  • +
  • f (Callable[[...], Any])

  • +
+
+
Return type:
+

None

+
+
+
+ +
+
+add_template_test(f, name=None)
+

Register a custom template test. Works exactly like the +template_test() decorator.

+
+Changelog
+

Added in version 0.10.

+
+
+
Parameters:
+
    +
  • name (str | None) – the optional name of the test, otherwise the +function name will be used.

  • +
  • f (Callable[[...], bool])

  • +
+
+
Return type:
+

None

+
+
+
+ +
+
+add_url_rule(rule, endpoint=None, view_func=None, provide_automatic_options=None, **options)
+

Register a rule for routing incoming requests and building +URLs. The route() decorator is a shortcut to call this +with the view_func argument. These are equivalent:

+
@app.route("/")
+def index():
+    ...
+
+
+
def index():
+    ...
+
+app.add_url_rule("/", view_func=index)
+
+
+

See URL Route Registrations.

+

The endpoint name for the route defaults to the name of the view +function if the endpoint parameter isn’t passed. An error +will be raised if a function has already been registered for the +endpoint.

+

The methods parameter defaults to ["GET"]. HEAD is +always added automatically, and OPTIONS is added +automatically by default.

+

view_func does not necessarily need to be passed, but if the +rule should participate in routing an endpoint name must be +associated with a view function at some point with the +endpoint() decorator.

+
app.add_url_rule("/", endpoint="index")
+
+@app.endpoint("index")
+def index():
+    ...
+
+
+

If view_func has a required_methods attribute, those +methods are added to the passed and automatic methods. If it +has a provide_automatic_methods attribute, it is used as the +default if the parameter is not passed.

+
+
Parameters:
+
    +
  • rule (str) – The URL rule string.

  • +
  • endpoint (str | None) – The endpoint name to associate with the rule +and view function. Used when routing and building URLs. +Defaults to view_func.__name__.

  • +
  • view_func (ft.RouteCallable | None) – The view function to associate with the +endpoint name.

  • +
  • provide_automatic_options (bool | None) – Add the OPTIONS method and +respond to OPTIONS requests automatically.

  • +
  • options (t.Any) – Extra options passed to the +Rule object.

  • +
+
+
Return type:
+

None

+
+
+
+ +
+
+after_request(f)
+

Register a function to run after each request to this object.

+

The function is called with the response object, and must return +a response object. This allows the functions to modify or +replace the response before it is sent.

+

If a function raises an exception, any remaining +after_request functions will not be called. Therefore, this +should not be used for actions that must execute, such as to +close resources. Use teardown_request() for that.

+

This is available on both app and blueprint objects. When used on an app, this +executes after every request. When used on a blueprint, this executes after +every request that the blueprint handles. To register with a blueprint and +execute after every request, use Blueprint.after_app_request().

+
+
Parameters:
+

f (T_after_request)

+
+
Return type:
+

T_after_request

+
+
+
+ +
+
+app_ctx_globals_class
+

alias of _AppCtxGlobals

+
+ +
+
+auto_find_instance_path()
+

Tries to locate the instance path if it was not provided to the +constructor of the application class. It will basically calculate +the path to a folder named instance next to your main file or +the package.

+
+Changelog
+

Added in version 0.8.

+
+
+
Return type:
+

str

+
+
+
+ +
+
+before_request(f)
+

Register a function to run before each request.

+

For example, this can be used to open a database connection, or +to load the logged in user from the session.

+
@app.before_request
+def load_user():
+    if "user_id" in session:
+        g.user = db.session.get(session["user_id"])
+
+
+

The function will be called without any arguments. If it returns +a non-None value, the value is handled as if it was the +return value from the view, and further request handling is +stopped.

+

This is available on both app and blueprint objects. When used on an app, this +executes before every request. When used on a blueprint, this executes before +every request that the blueprint handles. To register with a blueprint and +execute before every request, use Blueprint.before_app_request().

+
+
Parameters:
+

f (T_before_request)

+
+
Return type:
+

T_before_request

+
+
+
+ +
+
+config_class
+

alias of Config

+
+ +
+
+context_processor(f)
+

Registers a template context processor function. These functions run before +rendering a template. The keys of the returned dict are added as variables +available in the template.

+

This is available on both app and blueprint objects. When used on an app, this +is called for every rendered template. When used on a blueprint, this is called +for templates rendered from the blueprint’s views. To register with a blueprint +and affect every template, use Blueprint.app_context_processor().

+
+
Parameters:
+

f (T_template_context_processor)

+
+
Return type:
+

T_template_context_processor

+
+
+
+ +
+
+create_global_jinja_loader()
+

Creates the loader for the Jinja2 environment. Can be used to +override just the loader and keeping the rest unchanged. It’s +discouraged to override this function. Instead one should override +the jinja_loader() function instead.

+

The global loader dispatches between the loaders of the application +and the individual blueprints.

+
+Changelog
+

Added in version 0.7.

+
+
+
Return type:
+

DispatchingJinjaLoader

+
+
+
+ +
+
+property debug: bool
+

Whether debug mode is enabled. When using flask run to start the +development server, an interactive debugger will be shown for unhandled +exceptions, and the server will be reloaded when code changes. This maps to the +DEBUG config key. It may not behave as expected if set late.

+

Do not enable debug mode when deploying in production.

+

Default: False

+
+ +
+
+delete(rule, **options)
+

Shortcut for route() with methods=["DELETE"].

+
+Changelog
+

Added in version 2.0.

+
+
+
Parameters:
+
+
+
Return type:
+

Callable[[T_route], T_route]

+
+
+
+ +
+
+endpoint(endpoint)
+

Decorate a view function to register it for the given +endpoint. Used if a rule is added without a view_func with +add_url_rule().

+
app.add_url_rule("/ex", endpoint="example")
+
+@app.endpoint("example")
+def example():
+    ...
+
+
+
+
Parameters:
+

endpoint (str) – The endpoint name to associate with the view +function.

+
+
Return type:
+

Callable[[F], F]

+
+
+
+ +
+
+errorhandler(code_or_exception)
+

Register a function to handle errors by code or exception class.

+

A decorator that is used to register a function given an +error code. Example:

+
@app.errorhandler(404)
+def page_not_found(error):
+    return 'This page does not exist', 404
+
+
+

You can also register handlers for arbitrary exceptions:

+
@app.errorhandler(DatabaseError)
+def special_exception_handler(error):
+    return 'Database connection failed', 500
+
+
+

This is available on both app and blueprint objects. When used on an app, this +can handle errors from every request. When used on a blueprint, this can handle +errors from requests that the blueprint handles. To register with a blueprint +and affect every request, use Blueprint.app_errorhandler().

+
+Changelog
+

Added in version 0.7: Use register_error_handler() instead of modifying +error_handler_spec directly, for application wide error +handlers.

+
+
+

Added in version 0.7: One can now additionally also register custom exception types +that do not necessarily have to be a subclass of the +HTTPException class.

+
+
+
Parameters:
+

code_or_exception (type[Exception] | int) – the code as integer for the handler, or +an arbitrary exception

+
+
Return type:
+

Callable[[T_error_handler], T_error_handler]

+
+
+
+ +
+
+get(rule, **options)
+

Shortcut for route() with methods=["GET"].

+
+Changelog
+

Added in version 2.0.

+
+
+
Parameters:
+
+
+
Return type:
+

Callable[[T_route], T_route]

+
+
+
+ +
+
+handle_url_build_error(error, endpoint, values)
+

Called by url_for() if a +BuildError was raised. If this returns +a value, it will be returned by url_for, otherwise the error +will be re-raised.

+

Each function in url_build_error_handlers is called with +error, endpoint and values. If a function returns +None or raises a BuildError, it is skipped. Otherwise, +its return value is returned by url_for.

+
+
Parameters:
+
    +
  • error (BuildError) – The active BuildError being handled.

  • +
  • endpoint (str) – The endpoint being built.

  • +
  • values (dict[str, Any]) – The keyword arguments passed to url_for.

  • +
+
+
Return type:
+

str

+
+
+
+ +
+
+property has_static_folder: bool
+

True if static_folder is set.

+
+Changelog
+

Added in version 0.5.

+
+
+ +
+
+inject_url_defaults(endpoint, values)
+

Injects the URL defaults for the given endpoint directly into +the values dictionary passed. This is used internally and +automatically called on URL building.

+
+Changelog
+

Added in version 0.7.

+
+
+
Parameters:
+
+
+
Return type:
+

None

+
+
+
+ +
+
+iter_blueprints()
+

Iterates over all blueprints by the order they were registered.

+
+Changelog
+

Added in version 0.11.

+
+
+
Return type:
+

t.ValuesView[Blueprint]

+
+
+
+ +
+
+property jinja_env: Environment
+

The Jinja environment used to load templates.

+

The environment is created the first time this property is +accessed. Changing jinja_options after that will have no +effect.

+
+ +
+
+jinja_environment
+

alias of Environment

+
+ +
+
+property jinja_loader: BaseLoader | None
+

The Jinja loader for this object’s templates. By default this +is a class jinja2.loaders.FileSystemLoader to +template_folder if it is set.

+
+Changelog
+

Added in version 0.5.

+
+
+ +
+
+jinja_options: dict[str, t.Any] = {}
+

Options that are passed to the Jinja environment in +create_jinja_environment(). Changing these options after +the environment is created (accessing jinja_env) will +have no effect.

+
+Changelog
+

Changed in version 1.1.0: This is a dict instead of an ImmutableDict to allow +easier configuration.

+
+
+ +
+
+json_provider_class
+

alias of DefaultJSONProvider

+
+ +
+
+property logger: Logger
+

A standard Python Logger for the app, with +the same name as name.

+

In debug mode, the logger’s level will +be set to DEBUG.

+

If there are no handlers configured, a default handler will be +added. See Logging for more information.

+
+Changelog
+

Changed in version 1.1.0: The logger takes the same name as name rather than +hard-coding "flask.app".

+
+
+

Changed in version 1.0.0: Behavior was simplified. The logger is always named +"flask.app". The level is only set during configuration, +it doesn’t check app.debug each time. Only one format is +used, not different ones depending on app.debug. No +handlers are removed, and a handler is only added if no +handlers are already configured.

+
+
+

Added in version 0.3.

+
+
+ +
+
+make_aborter()
+

Create the object to assign to aborter. That object +is called by flask.abort() to raise HTTP errors, and can +be called directly as well.

+

By default, this creates an instance of aborter_class, +which defaults to werkzeug.exceptions.Aborter.

+
+Changelog
+

Added in version 2.2.

+
+
+
Return type:
+

Aborter

+
+
+
+ +
+
+make_config(instance_relative=False)
+

Used to create the config attribute by the Flask constructor. +The instance_relative parameter is passed in from the constructor +of Flask (there named instance_relative_config) and indicates if +the config should be relative to the instance path or the root path +of the application.

+
+Changelog
+

Added in version 0.8.

+
+
+
Parameters:
+

instance_relative (bool)

+
+
Return type:
+

Config

+
+
+
+ +
+
+property name: str
+

The name of the application. This is usually the import name +with the difference that it’s guessed from the run file if the +import name is main. This name is used as a display name when +Flask needs the name of the application. It can be set and overridden +to change the value.

+
+Changelog
+

Added in version 0.8.

+
+
+ +
+
+patch(rule, **options)
+

Shortcut for route() with methods=["PATCH"].

+
+Changelog
+

Added in version 2.0.

+
+
+
Parameters:
+
+
+
Return type:
+

Callable[[T_route], T_route]

+
+
+
+ +
+
+permanent_session_lifetime
+

A timedelta which is used to set the expiration +date of a permanent session. The default is 31 days which makes a +permanent session survive for roughly one month.

+

This attribute can also be configured from the config with the +PERMANENT_SESSION_LIFETIME configuration key. Defaults to +timedelta(days=31)

+
+ +
+
+post(rule, **options)
+

Shortcut for route() with methods=["POST"].

+
+Changelog
+

Added in version 2.0.

+
+
+
Parameters:
+
+
+
Return type:
+

Callable[[T_route], T_route]

+
+
+
+ +
+
+put(rule, **options)
+

Shortcut for route() with methods=["PUT"].

+
+Changelog
+

Added in version 2.0.

+
+
+
Parameters:
+
+
+
Return type:
+

Callable[[T_route], T_route]

+
+
+
+ +
+
+redirect(location, code=302)
+

Create a redirect response object.

+

This is called by flask.redirect(), and can be called +directly as well.

+
+
Parameters:
+
    +
  • location (str) – The URL to redirect to.

  • +
  • code (int) – The status code for the redirect.

  • +
+
+
Return type:
+

BaseResponse

+
+
+
+Changelog
+

Added in version 2.2: Moved from flask.redirect, which calls this method.

+
+
+ +
+
+register_blueprint(blueprint, **options)
+

Register a Blueprint on the application. Keyword +arguments passed to this method will override the defaults set on the +blueprint.

+

Calls the blueprint’s register() method after +recording the blueprint in the application’s blueprints.

+
+
Parameters:
+
    +
  • blueprint (Blueprint) – The blueprint to register.

  • +
  • url_prefix – Blueprint routes will be prefixed with this.

  • +
  • subdomain – Blueprint routes will match on this subdomain.

  • +
  • url_defaults – Blueprint routes will use these default values for +view arguments.

  • +
  • options (t.Any) – Additional keyword arguments are passed to +BlueprintSetupState. They can be +accessed in record() callbacks.

  • +
+
+
Return type:
+

None

+
+
+
+Changelog
+

Changed in version 2.0.1: The name option can be used to change the (pre-dotted) +name the blueprint is registered with. This allows the same +blueprint to be registered multiple times with unique names +for url_for.

+
+
+

Added in version 0.7.

+
+
+ +
+
+register_error_handler(code_or_exception, f)
+

Alternative error attach function to the errorhandler() +decorator that is more straightforward to use for non decorator +usage.

+
+Changelog
+

Added in version 0.7.

+
+
+
Parameters:
+
+
+
Return type:
+

None

+
+
+
+ +
+
+route(rule, **options)
+

Decorate a view function to register it with the given URL +rule and options. Calls add_url_rule(), which has more +details about the implementation.

+
@app.route("/")
+def index():
+    return "Hello, World!"
+
+
+

See URL Route Registrations.

+

The endpoint name for the route defaults to the name of the view +function if the endpoint parameter isn’t passed.

+

The methods parameter defaults to ["GET"]. HEAD and +OPTIONS are added automatically.

+
+
Parameters:
+
    +
  • rule (str) – The URL rule string.

  • +
  • options (Any) – Extra options passed to the +Rule object.

  • +
+
+
Return type:
+

Callable[[T_route], T_route]

+
+
+
+ +
+
+secret_key
+

If a secret key is set, cryptographic components can use this to +sign cookies and other things. Set this to a complex random value +when you want to use the secure cookie for instance.

+

This attribute can also be configured from the config with the +SECRET_KEY configuration key. Defaults to None.

+
+ +
+
+select_jinja_autoescape(filename)
+

Returns True if autoescaping should be active for the given +template name. If no template name is given, returns True.

+
+Changelog
+

Changed in version 2.2: Autoescaping is now enabled by default for .svg files.

+
+
+

Added in version 0.5.

+
+
+
Parameters:
+

filename (str)

+
+
Return type:
+

bool

+
+
+
+ +
+
+shell_context_processor(f)
+

Registers a shell context processor function.

+
+Changelog
+

Added in version 0.11.

+
+
+
Parameters:
+

f (T_shell_context_processor)

+
+
Return type:
+

T_shell_context_processor

+
+
+
+ +
+
+should_ignore_error(error)
+

This is called to figure out if an error should be ignored +or not as far as the teardown system is concerned. If this +function returns True then the teardown handlers will not be +passed the error.

+
+Changelog
+

Added in version 0.10.

+
+
+
Parameters:
+

error (BaseException | None)

+
+
Return type:
+

bool

+
+
+
+ +
+
+property static_folder: str | None
+

The absolute path to the configured static folder. None +if no static folder is set.

+
+ +
+
+property static_url_path: str | None
+

The URL prefix that the static route will be accessible from.

+

If it was not configured during init, it is derived from +static_folder.

+
+ +
+
+teardown_appcontext(f)
+

Registers a function to be called when the application +context is popped. The application context is typically popped +after the request context for each request, at the end of CLI +commands, or after a manually pushed context ends.

+
with app.app_context():
+    ...
+
+
+

When the with block exits (or ctx.pop() is called), the +teardown functions are called just before the app context is +made inactive. Since a request context typically also manages an +application context it would also be called when you pop a +request context.

+

When a teardown function was called because of an unhandled +exception it will be passed an error object. If an +errorhandler() is registered, it will handle the exception +and the teardown will not receive it.

+

Teardown functions must avoid raising exceptions. If they +execute code that might fail they must surround that code with a +try/except block and log any errors.

+

The return values of teardown functions are ignored.

+
+Changelog
+

Added in version 0.9.

+
+
+
Parameters:
+

f (T_teardown)

+
+
Return type:
+

T_teardown

+
+
+
+ +
+
+teardown_request(f)
+

Register a function to be called when the request context is +popped. Typically this happens at the end of each request, but +contexts may be pushed manually as well during testing.

+
with app.test_request_context():
+    ...
+
+
+

When the with block exits (or ctx.pop() is called), the +teardown functions are called just before the request context is +made inactive.

+

When a teardown function was called because of an unhandled +exception it will be passed an error object. If an +errorhandler() is registered, it will handle the exception +and the teardown will not receive it.

+

Teardown functions must avoid raising exceptions. If they +execute code that might fail they must surround that code with a +try/except block and log any errors.

+

The return values of teardown functions are ignored.

+

This is available on both app and blueprint objects. When used on an app, this +executes after every request. When used on a blueprint, this executes after +every request that the blueprint handles. To register with a blueprint and +execute after every request, use Blueprint.teardown_app_request().

+
+
Parameters:
+

f (T_teardown)

+
+
Return type:
+

T_teardown

+
+
+
+ +
+
+template_filter(name=None)
+

A decorator that is used to register custom template filter. +You can specify a name for the filter, otherwise the function +name will be used. Example:

+
@app.template_filter()
+def reverse(s):
+    return s[::-1]
+
+
+
+
Parameters:
+

name (str | None) – the optional name of the filter, otherwise the +function name will be used.

+
+
Return type:
+

Callable[[T_template_filter], T_template_filter]

+
+
+
+ +
+
+template_global(name=None)
+

A decorator that is used to register a custom template global function. +You can specify a name for the global function, otherwise the function +name will be used. Example:

+
@app.template_global()
+def double(n):
+    return 2 * n
+
+
+
+Changelog
+

Added in version 0.10.

+
+
+
Parameters:
+

name (str | None) – the optional name of the global function, otherwise the +function name will be used.

+
+
Return type:
+

Callable[[T_template_global], T_template_global]

+
+
+
+ +
+
+template_test(name=None)
+

A decorator that is used to register custom template test. +You can specify a name for the test, otherwise the function +name will be used. Example:

+
@app.template_test()
+def is_prime(n):
+    if n == 2:
+        return True
+    for i in range(2, int(math.ceil(math.sqrt(n))) + 1):
+        if n % i == 0:
+            return False
+    return True
+
+
+
+Changelog
+

Added in version 0.10.

+
+
+
Parameters:
+

name (str | None) – the optional name of the test, otherwise the +function name will be used.

+
+
Return type:
+

Callable[[T_template_test], T_template_test]

+
+
+
+ +
+
+test_cli_runner_class: type[FlaskCliRunner] | None = None
+

The CliRunner subclass, by default +FlaskCliRunner that is used by +test_cli_runner(). Its __init__ method should take a +Flask app object as the first argument.

+
+Changelog
+

Added in version 1.0.

+
+
+ +
+
+test_client_class: type[FlaskClient] | None = None
+

The test_client() method creates an instance of this test +client class. Defaults to FlaskClient.

+
+Changelog
+

Added in version 0.7.

+
+
+ +
+
+testing
+

The testing flag. Set this to True to enable the test mode of +Flask extensions (and in the future probably also Flask itself). +For example this might activate test helpers that have an +additional runtime cost which should not be enabled by default.

+

If this is enabled and PROPAGATE_EXCEPTIONS is not changed from the +default it’s implicitly enabled.

+

This attribute can also be configured from the config with the +TESTING configuration key. Defaults to False.

+
+ +
+
+trap_http_exception(e)
+

Checks if an HTTP exception should be trapped or not. By default +this will return False for all exceptions except for a bad request +key error if TRAP_BAD_REQUEST_ERRORS is set to True. It +also returns True if TRAP_HTTP_EXCEPTIONS is set to True.

+

This is called for all HTTP exceptions raised by a view function. +If it returns True for any exception the error handler for this +exception is not called and it shows up as regular exception in the +traceback. This is helpful for debugging implicitly raised HTTP +exceptions.

+
+Changelog
+

Changed in version 1.0: Bad request errors are not trapped by default in debug mode.

+
+
+

Added in version 0.8.

+
+
+
Parameters:
+

e (Exception)

+
+
Return type:
+

bool

+
+
+
+ +
+
+url_defaults(f)
+

Callback function for URL defaults for all view functions of the +application. It’s called with the endpoint and values and should +update the values passed in place.

+

This is available on both app and blueprint objects. When used on an app, this +is called for every request. When used on a blueprint, this is called for +requests that the blueprint handles. To register with a blueprint and affect +every request, use Blueprint.app_url_defaults().

+
+
Parameters:
+

f (T_url_defaults)

+
+
Return type:
+

T_url_defaults

+
+
+
+ +
+
+url_map_class
+

alias of Map

+
+ +
+
+url_rule_class
+

alias of Rule

+
+ +
+
+url_value_preprocessor(f)
+

Register a URL value preprocessor function for all view +functions in the application. These functions will be called before the +before_request() functions.

+

The function can modify the values captured from the matched url before +they are passed to the view. For example, this can be used to pop a +common language code value and place it in g rather than pass it to +every view.

+

The function is passed the endpoint name and values dict. The return +value is ignored.

+

This is available on both app and blueprint objects. When used on an app, this +is called for every request. When used on a blueprint, this is called for +requests that the blueprint handles. To register with a blueprint and affect +every request, use Blueprint.app_url_value_preprocessor().

+
+
Parameters:
+

f (T_url_value_preprocessor)

+
+
Return type:
+

T_url_value_preprocessor

+
+
+
+ +
+
+instance_path
+

Holds the path to the instance folder.

+
+Changelog
+

Added in version 0.8.

+
+
+ +
+
+config
+

The configuration dictionary as Config. This behaves +exactly like a regular dictionary but supports additional methods +to load a config from files.

+
+ +
+
+aborter
+

An instance of aborter_class created by +make_aborter(). This is called by flask.abort() +to raise HTTP errors, and can be called directly as well.

+
+Changelog
+

Added in version 2.2: Moved from flask.abort, which calls this object.

+
+
+ +
+
+json: JSONProvider
+

Provides access to JSON methods. Functions in flask.json +will call methods on this provider when the application context +is active. Used for handling JSON requests and responses.

+

An instance of json_provider_class. Can be customized by +changing that attribute on a subclass, or by assigning to this +attribute afterwards.

+

The default, DefaultJSONProvider, +uses Python’s built-in json library. A different provider +can use a different JSON library.

+
+Changelog
+

Added in version 2.2.

+
+
+ +
+
+url_build_error_handlers: list[t.Callable[[Exception, str, dict[str, t.Any]], str]]
+

A list of functions that are called by +handle_url_build_error() when url_for() raises a +BuildError. Each function is called +with error, endpoint and values. If a function +returns None or raises a BuildError, it is skipped. +Otherwise, its return value is returned by url_for.

+
+Changelog
+

Added in version 0.9.

+
+
+ +
+
+teardown_appcontext_funcs: list[ft.TeardownCallable]
+

A list of functions that are called when the application context +is destroyed. Since the application context is also torn down +if the request ends this is the place to store code that disconnects +from databases.

+
+Changelog
+

Added in version 0.9.

+
+
+ +
+
+shell_context_processors: list[ft.ShellContextProcessorCallable]
+

A list of shell context processor functions that should be run +when a shell context is created.

+
+Changelog
+

Added in version 0.11.

+
+
+ +
+
+blueprints: dict[str, Blueprint]
+

Maps registered blueprint names to blueprint objects. The +dict retains the order the blueprints were registered in. +Blueprints can be registered multiple times, this dict does +not track how often they were attached.

+
+Changelog
+

Added in version 0.7.

+
+
+ +
+
+extensions: dict[str, t.Any]
+

a place where extensions can store application specific state. For +example this is where an extension could store database engines and +similar things.

+

The key must match the name of the extension module. For example in +case of a “Flask-Foo” extension in flask_foo, the key would be +'foo'.

+
+Changelog
+

Added in version 0.7.

+
+
+ +
+
+url_map
+

The Map for this instance. You can use +this to change the routing converters after the class was created +but before any routes are connected. Example:

+
from werkzeug.routing import BaseConverter
+
+class ListConverter(BaseConverter):
+    def to_python(self, value):
+        return value.split(',')
+    def to_url(self, values):
+        return ','.join(super(ListConverter, self).to_url(value)
+                        for value in values)
+
+app = Flask(__name__)
+app.url_map.converters['list'] = ListConverter
+
+
+
+ +
+
+import_name
+

The name of the package or module that this object belongs +to. Do not change this once it is set by the constructor.

+
+ +
+
+template_folder
+

The path to the templates folder, relative to +root_path, to add to the template loader. None if +templates should not be added.

+
+ +
+
+root_path
+

Absolute path to the package on the filesystem. Used to look +up resources contained in the package.

+
+ +
+
+view_functions: dict[str, ft.RouteCallable]
+

A dictionary mapping endpoint names to view functions.

+

To register a view function, use the route() decorator.

+

This data structure is internal. It should not be modified +directly and its format may change at any time.

+
+ +
+
+error_handler_spec: dict[ft.AppOrBlueprintKey, dict[int | None, dict[type[Exception], ft.ErrorHandlerCallable]]]
+

A data structure of registered error handlers, in the format +{scope: {code: {class: handler}}}. The scope key is +the name of a blueprint the handlers are active for, or +None for all requests. The code key is the HTTP +status code for HTTPException, or None for +other exceptions. The innermost dictionary maps exception +classes to handler functions.

+

To register an error handler, use the errorhandler() +decorator.

+

This data structure is internal. It should not be modified +directly and its format may change at any time.

+
+ +
+
+before_request_funcs: dict[ft.AppOrBlueprintKey, list[ft.BeforeRequestCallable]]
+

A data structure of functions to call at the beginning of +each request, in the format {scope: [functions]}. The +scope key is the name of a blueprint the functions are +active for, or None for all requests.

+

To register a function, use the before_request() +decorator.

+

This data structure is internal. It should not be modified +directly and its format may change at any time.

+
+ +
+
+after_request_funcs: dict[ft.AppOrBlueprintKey, list[ft.AfterRequestCallable[t.Any]]]
+

A data structure of functions to call at the end of each +request, in the format {scope: [functions]}. The +scope key is the name of a blueprint the functions are +active for, or None for all requests.

+

To register a function, use the after_request() +decorator.

+

This data structure is internal. It should not be modified +directly and its format may change at any time.

+
+ +
+
+teardown_request_funcs: dict[ft.AppOrBlueprintKey, list[ft.TeardownCallable]]
+

A data structure of functions to call at the end of each +request even if an exception is raised, in the format +{scope: [functions]}. The scope key is the name of a +blueprint the functions are active for, or None for all +requests.

+

To register a function, use the teardown_request() +decorator.

+

This data structure is internal. It should not be modified +directly and its format may change at any time.

+
+ +
+
+template_context_processors: dict[ft.AppOrBlueprintKey, list[ft.TemplateContextProcessorCallable]]
+

A data structure of functions to call to pass extra context +values when rendering templates, in the format +{scope: [functions]}. The scope key is the name of a +blueprint the functions are active for, or None for all +requests.

+

To register a function, use the context_processor() +decorator.

+

This data structure is internal. It should not be modified +directly and its format may change at any time.

+
+ +
+
+url_value_preprocessors: dict[ft.AppOrBlueprintKey, list[ft.URLValuePreprocessorCallable]]
+

A data structure of functions to call to modify the keyword +arguments passed to the view function, in the format +{scope: [functions]}. The scope key is the name of a +blueprint the functions are active for, or None for all +requests.

+

To register a function, use the +url_value_preprocessor() decorator.

+

This data structure is internal. It should not be modified +directly and its format may change at any time.

+
+ +
+
+url_default_functions: dict[ft.AppOrBlueprintKey, list[ft.URLDefaultCallable]]
+

A data structure of functions to call to modify the keyword +arguments when generating URLs, in the format +{scope: [functions]}. The scope key is the name of a +blueprint the functions are active for, or None for all +requests.

+

To register a function, use the url_defaults() +decorator.

+

This data structure is internal. It should not be modified +directly and its format may change at any time.

+
+ +
+ +
+
+

Blueprint Objects

+
+
+class flask.Blueprint(name, import_name, static_folder=None, static_url_path=None, template_folder=None, url_prefix=None, subdomain=None, url_defaults=None, root_path=None, cli_group=_sentinel)
+
+
Parameters:
+
+
+
+
+
+cli: Group
+

The Click command group for registering CLI commands for this +object. The commands are available from the flask command +once the application has been discovered and blueprints have +been registered.

+
+ +
+
+get_send_file_max_age(filename)
+

Used by send_file() to determine the max_age cache +value for a given file path if it wasn’t passed.

+

By default, this returns SEND_FILE_MAX_AGE_DEFAULT from +the configuration of current_app. This defaults +to None, which tells the browser to use conditional requests +instead of a timed cache, which is usually preferable.

+

Note this is a duplicate of the same method in the Flask +class.

+
+Changelog
+

Changed in version 2.0: The default configuration is None instead of 12 hours.

+
+
+

Added in version 0.9.

+
+
+
Parameters:
+

filename (str | None)

+
+
Return type:
+

int | None

+
+
+
+ +
+
+send_static_file(filename)
+

The view function used to serve files from +static_folder. A route is automatically registered for +this view at static_url_path if static_folder is +set.

+

Note this is a duplicate of the same method in the Flask +class.

+
+Changelog
+

Added in version 0.5.

+
+
+
Parameters:
+

filename (str)

+
+
Return type:
+

Response

+
+
+
+ +
+
+open_resource(resource, mode='rb', encoding='utf-8')
+

Open a resource file relative to root_path for reading. The +blueprint-relative equivalent of the app’s open_resource() +method.

+
+
Parameters:
+
    +
  • resource (str) – Path to the resource relative to root_path.

  • +
  • mode (str) – Open the file in this mode. Only reading is supported, +valid values are "r" (or "rt") and "rb".

  • +
  • encoding (str | None) – Open the file with this encoding when opening in text +mode. This is ignored when opening in binary mode.

  • +
+
+
Return type:
+

IO

+
+
+
+

Changed in version 3.1: Added the encoding parameter.

+
+
+ +
+
+add_app_template_filter(f, name=None)
+

Register a template filter, available in any template rendered by the +application. Works like the app_template_filter() decorator. Equivalent to +Flask.add_template_filter().

+
+
Parameters:
+
    +
  • name (str | None) – the optional name of the filter, otherwise the +function name will be used.

  • +
  • f (Callable[[...], Any])

  • +
+
+
Return type:
+

None

+
+
+
+ +
+
+add_app_template_global(f, name=None)
+

Register a template global, available in any template rendered by the +application. Works like the app_template_global() decorator. Equivalent to +Flask.add_template_global().

+
+Changelog
+

Added in version 0.10.

+
+
+
Parameters:
+
    +
  • name (str | None) – the optional name of the global, otherwise the +function name will be used.

  • +
  • f (Callable[[...], Any])

  • +
+
+
Return type:
+

None

+
+
+
+ +
+
+add_app_template_test(f, name=None)
+

Register a template test, available in any template rendered by the +application. Works like the app_template_test() decorator. Equivalent to +Flask.add_template_test().

+
+Changelog
+

Added in version 0.10.

+
+
+
Parameters:
+
    +
  • name (str | None) – the optional name of the test, otherwise the +function name will be used.

  • +
  • f (Callable[[...], bool])

  • +
+
+
Return type:
+

None

+
+
+
+ +
+
+add_url_rule(rule, endpoint=None, view_func=None, provide_automatic_options=None, **options)
+

Register a URL rule with the blueprint. See Flask.add_url_rule() for +full documentation.

+

The URL rule is prefixed with the blueprint’s URL prefix. The endpoint name, +used with url_for(), is prefixed with the blueprint’s name.

+
+
Parameters:
+
    +
  • rule (str)

  • +
  • endpoint (str | None)

  • +
  • view_func (ft.RouteCallable | None)

  • +
  • provide_automatic_options (bool | None)

  • +
  • options (t.Any)

  • +
+
+
Return type:
+

None

+
+
+
+ +
+
+after_app_request(f)
+

Like after_request(), but after every request, not only those handled +by the blueprint. Equivalent to Flask.after_request().

+
+
Parameters:
+

f (T_after_request)

+
+
Return type:
+

T_after_request

+
+
+
+ +
+
+after_request(f)
+

Register a function to run after each request to this object.

+

The function is called with the response object, and must return +a response object. This allows the functions to modify or +replace the response before it is sent.

+

If a function raises an exception, any remaining +after_request functions will not be called. Therefore, this +should not be used for actions that must execute, such as to +close resources. Use teardown_request() for that.

+

This is available on both app and blueprint objects. When used on an app, this +executes after every request. When used on a blueprint, this executes after +every request that the blueprint handles. To register with a blueprint and +execute after every request, use Blueprint.after_app_request().

+
+
Parameters:
+

f (T_after_request)

+
+
Return type:
+

T_after_request

+
+
+
+ +
+
+app_context_processor(f)
+

Like context_processor(), but for templates rendered by every view, not +only by the blueprint. Equivalent to Flask.context_processor().

+
+
Parameters:
+

f (T_template_context_processor)

+
+
Return type:
+

T_template_context_processor

+
+
+
+ +
+
+app_errorhandler(code)
+

Like errorhandler(), but for every request, not only those handled by +the blueprint. Equivalent to Flask.errorhandler().

+
+
Parameters:
+

code (type[Exception] | int)

+
+
Return type:
+

Callable[[T_error_handler], T_error_handler]

+
+
+
+ +
+
+app_template_filter(name=None)
+

Register a template filter, available in any template rendered by the +application. Equivalent to Flask.template_filter().

+
+
Parameters:
+

name (str | None) – the optional name of the filter, otherwise the +function name will be used.

+
+
Return type:
+

Callable[[T_template_filter], T_template_filter]

+
+
+
+ +
+
+app_template_global(name=None)
+

Register a template global, available in any template rendered by the +application. Equivalent to Flask.template_global().

+
+Changelog
+

Added in version 0.10.

+
+
+
Parameters:
+

name (str | None) – the optional name of the global, otherwise the +function name will be used.

+
+
Return type:
+

Callable[[T_template_global], T_template_global]

+
+
+
+ +
+
+app_template_test(name=None)
+

Register a template test, available in any template rendered by the +application. Equivalent to Flask.template_test().

+
+Changelog
+

Added in version 0.10.

+
+
+
Parameters:
+

name (str | None) – the optional name of the test, otherwise the +function name will be used.

+
+
Return type:
+

Callable[[T_template_test], T_template_test]

+
+
+
+ +
+
+app_url_defaults(f)
+

Like url_defaults(), but for every request, not only those handled by +the blueprint. Equivalent to Flask.url_defaults().

+
+
Parameters:
+

f (T_url_defaults)

+
+
Return type:
+

T_url_defaults

+
+
+
+ +
+
+app_url_value_preprocessor(f)
+

Like url_value_preprocessor(), but for every request, not only those +handled by the blueprint. Equivalent to Flask.url_value_preprocessor().

+
+
Parameters:
+

f (T_url_value_preprocessor)

+
+
Return type:
+

T_url_value_preprocessor

+
+
+
+ +
+
+before_app_request(f)
+

Like before_request(), but before every request, not only those handled +by the blueprint. Equivalent to Flask.before_request().

+
+
Parameters:
+

f (T_before_request)

+
+
Return type:
+

T_before_request

+
+
+
+ +
+
+before_request(f)
+

Register a function to run before each request.

+

For example, this can be used to open a database connection, or +to load the logged in user from the session.

+
@app.before_request
+def load_user():
+    if "user_id" in session:
+        g.user = db.session.get(session["user_id"])
+
+
+

The function will be called without any arguments. If it returns +a non-None value, the value is handled as if it was the +return value from the view, and further request handling is +stopped.

+

This is available on both app and blueprint objects. When used on an app, this +executes before every request. When used on a blueprint, this executes before +every request that the blueprint handles. To register with a blueprint and +execute before every request, use Blueprint.before_app_request().

+
+
Parameters:
+

f (T_before_request)

+
+
Return type:
+

T_before_request

+
+
+
+ +
+
+context_processor(f)
+

Registers a template context processor function. These functions run before +rendering a template. The keys of the returned dict are added as variables +available in the template.

+

This is available on both app and blueprint objects. When used on an app, this +is called for every rendered template. When used on a blueprint, this is called +for templates rendered from the blueprint’s views. To register with a blueprint +and affect every template, use Blueprint.app_context_processor().

+
+
Parameters:
+

f (T_template_context_processor)

+
+
Return type:
+

T_template_context_processor

+
+
+
+ +
+
+delete(rule, **options)
+

Shortcut for route() with methods=["DELETE"].

+
+Changelog
+

Added in version 2.0.

+
+
+
Parameters:
+
+
+
Return type:
+

Callable[[T_route], T_route]

+
+
+
+ +
+
+endpoint(endpoint)
+

Decorate a view function to register it for the given +endpoint. Used if a rule is added without a view_func with +add_url_rule().

+
app.add_url_rule("/ex", endpoint="example")
+
+@app.endpoint("example")
+def example():
+    ...
+
+
+
+
Parameters:
+

endpoint (str) – The endpoint name to associate with the view +function.

+
+
Return type:
+

Callable[[F], F]

+
+
+
+ +
+
+errorhandler(code_or_exception)
+

Register a function to handle errors by code or exception class.

+

A decorator that is used to register a function given an +error code. Example:

+
@app.errorhandler(404)
+def page_not_found(error):
+    return 'This page does not exist', 404
+
+
+

You can also register handlers for arbitrary exceptions:

+
@app.errorhandler(DatabaseError)
+def special_exception_handler(error):
+    return 'Database connection failed', 500
+
+
+

This is available on both app and blueprint objects. When used on an app, this +can handle errors from every request. When used on a blueprint, this can handle +errors from requests that the blueprint handles. To register with a blueprint +and affect every request, use Blueprint.app_errorhandler().

+
+Changelog
+

Added in version 0.7: Use register_error_handler() instead of modifying +error_handler_spec directly, for application wide error +handlers.

+
+
+

Added in version 0.7: One can now additionally also register custom exception types +that do not necessarily have to be a subclass of the +HTTPException class.

+
+
+
Parameters:
+

code_or_exception (type[Exception] | int) – the code as integer for the handler, or +an arbitrary exception

+
+
Return type:
+

Callable[[T_error_handler], T_error_handler]

+
+
+
+ +
+
+get(rule, **options)
+

Shortcut for route() with methods=["GET"].

+
+Changelog
+

Added in version 2.0.

+
+
+
Parameters:
+
+
+
Return type:
+

Callable[[T_route], T_route]

+
+
+
+ +
+
+property has_static_folder: bool
+

True if static_folder is set.

+
+Changelog
+

Added in version 0.5.

+
+
+ +
+
+property jinja_loader: BaseLoader | None
+

The Jinja loader for this object’s templates. By default this +is a class jinja2.loaders.FileSystemLoader to +template_folder if it is set.

+
+Changelog
+

Added in version 0.5.

+
+
+ +
+
+make_setup_state(app, options, first_registration=False)
+

Creates an instance of BlueprintSetupState() +object that is later passed to the register callback functions. +Subclasses can override this to return a subclass of the setup state.

+
+
Parameters:
+
    +
  • app (App)

  • +
  • options (dict[str, t.Any])

  • +
  • first_registration (bool)

  • +
+
+
Return type:
+

BlueprintSetupState

+
+
+
+ +
+
+patch(rule, **options)
+

Shortcut for route() with methods=["PATCH"].

+
+Changelog
+

Added in version 2.0.

+
+
+
Parameters:
+
+
+
Return type:
+

Callable[[T_route], T_route]

+
+
+
+ +
+
+post(rule, **options)
+

Shortcut for route() with methods=["POST"].

+
+Changelog
+

Added in version 2.0.

+
+
+
Parameters:
+
+
+
Return type:
+

Callable[[T_route], T_route]

+
+
+
+ +
+
+put(rule, **options)
+

Shortcut for route() with methods=["PUT"].

+
+Changelog
+

Added in version 2.0.

+
+
+
Parameters:
+
+
+
Return type:
+

Callable[[T_route], T_route]

+
+
+
+ +
+
+record(func)
+

Registers a function that is called when the blueprint is +registered on the application. This function is called with the +state as argument as returned by the make_setup_state() +method.

+
+
Parameters:
+

func (Callable[[BlueprintSetupState], None])

+
+
Return type:
+

None

+
+
+
+ +
+
+record_once(func)
+

Works like record() but wraps the function in another +function that will ensure the function is only called once. If the +blueprint is registered a second time on the application, the +function passed is not called.

+
+
Parameters:
+

func (Callable[[BlueprintSetupState], None])

+
+
Return type:
+

None

+
+
+
+ +
+
+register(app, options)
+

Called by Flask.register_blueprint() to register all +views and callbacks registered on the blueprint with the +application. Creates a BlueprintSetupState and calls +each record() callback with it.

+
+
Parameters:
+
    +
  • app (App) – The application this blueprint is being registered +with.

  • +
  • options (dict[str, t.Any]) – Keyword arguments forwarded from +register_blueprint().

  • +
+
+
Return type:
+

None

+
+
+
+Changelog
+

Changed in version 2.3: Nested blueprints now correctly apply subdomains.

+
+
+

Changed in version 2.1: Registering the same blueprint with the same name multiple +times is an error.

+
+
+

Changed in version 2.0.1: Nested blueprints are registered with their dotted name. +This allows different blueprints with the same name to be +nested at different locations.

+
+
+

Changed in version 2.0.1: The name option can be used to change the (pre-dotted) +name the blueprint is registered with. This allows the same +blueprint to be registered multiple times with unique names +for url_for.

+
+
+ +
+
+register_blueprint(blueprint, **options)
+

Register a Blueprint on this blueprint. Keyword +arguments passed to this method will override the defaults set +on the blueprint.

+
+Changelog
+

Changed in version 2.0.1: The name option can be used to change the (pre-dotted) +name the blueprint is registered with. This allows the same +blueprint to be registered multiple times with unique names +for url_for.

+
+
+

Added in version 2.0.

+
+
+
Parameters:
+
    +
  • blueprint (Blueprint)

  • +
  • options (Any)

  • +
+
+
Return type:
+

None

+
+
+
+ +
+
+register_error_handler(code_or_exception, f)
+

Alternative error attach function to the errorhandler() +decorator that is more straightforward to use for non decorator +usage.

+
+Changelog
+

Added in version 0.7.

+
+
+
Parameters:
+
+
+
Return type:
+

None

+
+
+
+ +
+
+route(rule, **options)
+

Decorate a view function to register it with the given URL +rule and options. Calls add_url_rule(), which has more +details about the implementation.

+
@app.route("/")
+def index():
+    return "Hello, World!"
+
+
+

See URL Route Registrations.

+

The endpoint name for the route defaults to the name of the view +function if the endpoint parameter isn’t passed.

+

The methods parameter defaults to ["GET"]. HEAD and +OPTIONS are added automatically.

+
+
Parameters:
+
    +
  • rule (str) – The URL rule string.

  • +
  • options (Any) – Extra options passed to the +Rule object.

  • +
+
+
Return type:
+

Callable[[T_route], T_route]

+
+
+
+ +
+
+property static_folder: str | None
+

The absolute path to the configured static folder. None +if no static folder is set.

+
+ +
+
+property static_url_path: str | None
+

The URL prefix that the static route will be accessible from.

+

If it was not configured during init, it is derived from +static_folder.

+
+ +
+
+teardown_app_request(f)
+

Like teardown_request(), but after every request, not only those +handled by the blueprint. Equivalent to Flask.teardown_request().

+
+
Parameters:
+

f (T_teardown)

+
+
Return type:
+

T_teardown

+
+
+
+ +
+
+teardown_request(f)
+

Register a function to be called when the request context is +popped. Typically this happens at the end of each request, but +contexts may be pushed manually as well during testing.

+
with app.test_request_context():
+    ...
+
+
+

When the with block exits (or ctx.pop() is called), the +teardown functions are called just before the request context is +made inactive.

+

When a teardown function was called because of an unhandled +exception it will be passed an error object. If an +errorhandler() is registered, it will handle the exception +and the teardown will not receive it.

+

Teardown functions must avoid raising exceptions. If they +execute code that might fail they must surround that code with a +try/except block and log any errors.

+

The return values of teardown functions are ignored.

+

This is available on both app and blueprint objects. When used on an app, this +executes after every request. When used on a blueprint, this executes after +every request that the blueprint handles. To register with a blueprint and +execute after every request, use Blueprint.teardown_app_request().

+
+
Parameters:
+

f (T_teardown)

+
+
Return type:
+

T_teardown

+
+
+
+ +
+
+url_defaults(f)
+

Callback function for URL defaults for all view functions of the +application. It’s called with the endpoint and values and should +update the values passed in place.

+

This is available on both app and blueprint objects. When used on an app, this +is called for every request. When used on a blueprint, this is called for +requests that the blueprint handles. To register with a blueprint and affect +every request, use Blueprint.app_url_defaults().

+
+
Parameters:
+

f (T_url_defaults)

+
+
Return type:
+

T_url_defaults

+
+
+
+ +
+
+url_value_preprocessor(f)
+

Register a URL value preprocessor function for all view +functions in the application. These functions will be called before the +before_request() functions.

+

The function can modify the values captured from the matched url before +they are passed to the view. For example, this can be used to pop a +common language code value and place it in g rather than pass it to +every view.

+

The function is passed the endpoint name and values dict. The return +value is ignored.

+

This is available on both app and blueprint objects. When used on an app, this +is called for every request. When used on a blueprint, this is called for +requests that the blueprint handles. To register with a blueprint and affect +every request, use Blueprint.app_url_value_preprocessor().

+
+
Parameters:
+

f (T_url_value_preprocessor)

+
+
Return type:
+

T_url_value_preprocessor

+
+
+
+ +
+
+import_name
+

The name of the package or module that this object belongs +to. Do not change this once it is set by the constructor.

+
+ +
+
+template_folder
+

The path to the templates folder, relative to +root_path, to add to the template loader. None if +templates should not be added.

+
+ +
+
+root_path
+

Absolute path to the package on the filesystem. Used to look +up resources contained in the package.

+
+ +
+
+view_functions: dict[str, ft.RouteCallable]
+

A dictionary mapping endpoint names to view functions.

+

To register a view function, use the route() decorator.

+

This data structure is internal. It should not be modified +directly and its format may change at any time.

+
+ +
+
+error_handler_spec: dict[ft.AppOrBlueprintKey, dict[int | None, dict[type[Exception], ft.ErrorHandlerCallable]]]
+

A data structure of registered error handlers, in the format +{scope: {code: {class: handler}}}. The scope key is +the name of a blueprint the handlers are active for, or +None for all requests. The code key is the HTTP +status code for HTTPException, or None for +other exceptions. The innermost dictionary maps exception +classes to handler functions.

+

To register an error handler, use the errorhandler() +decorator.

+

This data structure is internal. It should not be modified +directly and its format may change at any time.

+
+ +
+
+before_request_funcs: dict[ft.AppOrBlueprintKey, list[ft.BeforeRequestCallable]]
+

A data structure of functions to call at the beginning of +each request, in the format {scope: [functions]}. The +scope key is the name of a blueprint the functions are +active for, or None for all requests.

+

To register a function, use the before_request() +decorator.

+

This data structure is internal. It should not be modified +directly and its format may change at any time.

+
+ +
+
+after_request_funcs: dict[ft.AppOrBlueprintKey, list[ft.AfterRequestCallable[t.Any]]]
+

A data structure of functions to call at the end of each +request, in the format {scope: [functions]}. The +scope key is the name of a blueprint the functions are +active for, or None for all requests.

+

To register a function, use the after_request() +decorator.

+

This data structure is internal. It should not be modified +directly and its format may change at any time.

+
+ +
+
+teardown_request_funcs: dict[ft.AppOrBlueprintKey, list[ft.TeardownCallable]]
+

A data structure of functions to call at the end of each +request even if an exception is raised, in the format +{scope: [functions]}. The scope key is the name of a +blueprint the functions are active for, or None for all +requests.

+

To register a function, use the teardown_request() +decorator.

+

This data structure is internal. It should not be modified +directly and its format may change at any time.

+
+ +
+
+template_context_processors: dict[ft.AppOrBlueprintKey, list[ft.TemplateContextProcessorCallable]]
+

A data structure of functions to call to pass extra context +values when rendering templates, in the format +{scope: [functions]}. The scope key is the name of a +blueprint the functions are active for, or None for all +requests.

+

To register a function, use the context_processor() +decorator.

+

This data structure is internal. It should not be modified +directly and its format may change at any time.

+
+ +
+
+url_value_preprocessors: dict[ft.AppOrBlueprintKey, list[ft.URLValuePreprocessorCallable]]
+

A data structure of functions to call to modify the keyword +arguments passed to the view function, in the format +{scope: [functions]}. The scope key is the name of a +blueprint the functions are active for, or None for all +requests.

+

To register a function, use the +url_value_preprocessor() decorator.

+

This data structure is internal. It should not be modified +directly and its format may change at any time.

+
+ +
+
+url_default_functions: dict[ft.AppOrBlueprintKey, list[ft.URLDefaultCallable]]
+

A data structure of functions to call to modify the keyword +arguments when generating URLs, in the format +{scope: [functions]}. The scope key is the name of a +blueprint the functions are active for, or None for all +requests.

+

To register a function, use the url_defaults() +decorator.

+

This data structure is internal. It should not be modified +directly and its format may change at any time.

+
+ +
+ +
+
+

Incoming Request Data

+
+
+class flask.Request(environ, populate_request=True, shallow=False)
+

The request object used by default in Flask. Remembers the +matched endpoint and view arguments.

+

It is what ends up as request. If you want to replace +the request object used you can subclass this and set +request_class to your subclass.

+

The request object is a Request subclass and +provides all of the attributes Werkzeug defines plus a few Flask +specific ones.

+
+
Parameters:
+
    +
  • environ (WSGIEnvironment)

  • +
  • populate_request (bool)

  • +
  • shallow (bool)

  • +
+
+
+
+
+url_rule: Rule | None = None
+

The internal URL rule that matched the request. This can be +useful to inspect which methods are allowed for the URL from +a before/after handler (request.url_rule.methods) etc. +Though if the request’s method was invalid for the URL rule, +the valid list is available in routing_exception.valid_methods +instead (an attribute of the Werkzeug exception +MethodNotAllowed) +because the request was never internally bound.

+
+Changelog
+

Added in version 0.6.

+
+
+ +
+
+view_args: dict[str, t.Any] | None = None
+

A dict of view arguments that matched the request. If an exception +happened when matching, this will be None.

+
+ +
+
+routing_exception: HTTPException | None = None
+

If matching the URL failed, this is the exception that will be +raised / was raised as part of the request handling. This is +usually a NotFound exception or +something similar.

+
+ +
+
+property max_content_length: int | None
+

The maximum number of bytes that will be read during this request. If +this limit is exceeded, a 413 RequestEntityTooLarge +error is raised. If it is set to None, no limit is enforced at the +Flask application level. However, if it is None and the request has +no Content-Length header and the WSGI server does not indicate that +it terminates the stream, then no data is read to avoid an infinite +stream.

+

Each request defaults to the MAX_CONTENT_LENGTH config, which +defaults to None. It can be set on a specific request to apply +the limit to that specific view. This should be set appropriately based +on an application’s or view’s specific needs.

+
+

Changed in version 3.1: This can be set per-request.

+
+
+Changelog
+

Changed in version 0.6: This is configurable through Flask config.

+
+
+ +
+
+property max_form_memory_size: int | None
+

The maximum size in bytes any non-file form field may be in a +multipart/form-data body. If this limit is exceeded, a 413 +RequestEntityTooLarge error is raised. If it +is set to None, no limit is enforced at the Flask application level.

+

Each request defaults to the MAX_FORM_MEMORY_SIZE config, which +defaults to 500_000. It can be set on a specific request to +apply the limit to that specific view. This should be set appropriately +based on an application’s or view’s specific needs.

+
+

Changed in version 3.1: This is configurable through Flask config.

+
+
+ +
+
+property max_form_parts: int | None
+

The maximum number of fields that may be present in a +multipart/form-data body. If this limit is exceeded, a 413 +RequestEntityTooLarge error is raised. If it +is set to None, no limit is enforced at the Flask application level.

+

Each request defaults to the MAX_FORM_PARTS config, which +defaults to 1_000. It can be set on a specific request to apply +the limit to that specific view. This should be set appropriately based +on an application’s or view’s specific needs.

+
+

Changed in version 3.1: This is configurable through Flask config.

+
+
+ +
+
+property endpoint: str | None
+

The endpoint that matched the request URL.

+

This will be None if matching failed or has not been +performed yet.

+

This in combination with view_args can be used to +reconstruct the same URL or a modified URL.

+
+ +
+
+property blueprint: str | None
+

The registered name of the current blueprint.

+

This will be None if the endpoint is not part of a +blueprint, or if URL matching failed or has not been performed +yet.

+

This does not necessarily match the name the blueprint was +created with. It may have been nested, or registered with a +different name.

+
+ +
+
+property blueprints: list[str]
+

The registered names of the current blueprint upwards through +parent blueprints.

+

This will be an empty list if there is no current blueprint, or +if URL matching failed.

+
+Changelog
+

Added in version 2.0.1.

+
+
+ +
+
+on_json_loading_failed(e)
+

Called if get_json() fails and isn’t silenced.

+

If this method returns a value, it is used as the return value +for get_json(). The default implementation raises +BadRequest.

+
+
Parameters:
+

e (ValueError | None) – If parsing failed, this is the exception. It will be +None if the content type wasn’t application/json.

+
+
Return type:
+

Any

+
+
+
+Changelog
+

Changed in version 2.3: Raise a 415 error instead of 400.

+
+
+ +
+
+property accept_charsets: CharsetAccept
+

List of charsets this client supports as +CharsetAccept object.

+
+ +
+
+property accept_encodings: Accept
+

List of encodings this client accepts. Encodings in a HTTP term +are compression encodings such as gzip. For charsets have a look at +accept_charset.

+
+ +
+
+property accept_languages: LanguageAccept
+

List of languages this client accepts as +LanguageAccept object.

+
+ +
+
+property accept_mimetypes: MIMEAccept
+

List of mimetypes this client supports as +MIMEAccept object.

+
+ +
+
+access_control_request_headers
+

Sent with a preflight request to indicate which headers will be sent with the cross origin request. Set access_control_allow_headers on the response to indicate which headers are allowed.

+
+ +
+
+access_control_request_method
+

Sent with a preflight request to indicate which method will be used for the cross origin request. Set access_control_allow_methods on the response to indicate which methods are allowed.

+
+ +
+
+property access_route: list[str]
+

If a forwarded header exists this is a list of all ip addresses +from the client ip to the last proxy server.

+
+ +
+
+classmethod application(f)
+

Decorate a function as responder that accepts the request as +the last argument. This works like the responder() +decorator but the function is passed the request object as the +last argument and the request object will be closed +automatically:

+
@Request.application
+def my_wsgi_app(request):
+    return Response('Hello World!')
+
+
+

As of Werkzeug 0.14 HTTP exceptions are automatically caught and +converted to responses instead of failing.

+
+
Parameters:
+

f (t.Callable[[Request], WSGIApplication]) – the WSGI callable to decorate

+
+
Returns:
+

a new WSGI callable

+
+
Return type:
+

WSGIApplication

+
+
+
+ +
+
+property args: MultiDict[str, str]
+

The parsed URL parameters (the part in the URL after the question +mark).

+

By default an +ImmutableMultiDict +is returned from this function. This can be changed by setting +parameter_storage_class to a different type. This might +be necessary if the order of the form data is important.

+
+Changelog
+

Changed in version 2.3: Invalid bytes remain percent encoded.

+
+
+ +
+
+property authorization: Authorization | None
+

The Authorization header parsed into an Authorization object. +None if the header is not present.

+
+Changelog
+

Changed in version 2.3: Authorization is no longer a dict. The token attribute +was added for auth schemes that use a token instead of parameters.

+
+
+ +
+
+property base_url: str
+

Like url but without the query string.

+
+ +
+
+property cache_control: RequestCacheControl
+

A RequestCacheControl object +for the incoming cache control headers.

+
+ +
+
+close()
+

Closes associated resources of this request object. This +closes all file handles explicitly. You can also use the request +object in a with statement which will automatically close it.

+
+Changelog
+

Added in version 0.9.

+
+
+
Return type:
+

None

+
+
+
+ +
+
+content_encoding
+

The Content-Encoding entity-header field is used as a +modifier to the media-type. When present, its value indicates +what additional content codings have been applied to the +entity-body, and thus what decoding mechanisms must be applied +in order to obtain the media-type referenced by the Content-Type +header field.

+
+Changelog
+

Added in version 0.9.

+
+
+ +
+
+property content_length: int | None
+

The Content-Length entity-header field indicates the size of the +entity-body in bytes or, in the case of the HEAD method, the size of +the entity-body that would have been sent had the request been a +GET.

+
+ +
+
+content_md5
+

The Content-MD5 entity-header field, as defined in +RFC 1864, is an MD5 digest of the entity-body for the purpose of +providing an end-to-end message integrity check (MIC) of the +entity-body. (Note: a MIC is good for detecting accidental +modification of the entity-body in transit, but is not proof +against malicious attacks.)

+
+Changelog
+

Added in version 0.9.

+
+
+ +
+
+content_type
+

The Content-Type entity-header field indicates the media +type of the entity-body sent to the recipient or, in the case of +the HEAD method, the media type that would have been sent had +the request been a GET.

+
+ +
+
+property cookies: ImmutableMultiDict[str, str]
+

A dict with the contents of all cookies transmitted with +the request.

+
+ +
+
+property data: bytes
+

The raw data read from stream. Will be empty if the request +represents form data.

+

To get the raw data even if it represents form data, use get_data().

+
+ +
+
+date
+

The Date general-header field represents the date and +time at which the message was originated, having the same +semantics as orig-date in RFC 822.

+
+Changelog
+

Changed in version 2.0: The datetime object is timezone-aware.

+
+
+ +
+
+dict_storage_class
+

alias of ImmutableMultiDict

+
+ +
+
+property files: ImmutableMultiDict[str, FileStorage]
+

MultiDict object containing +all uploaded files. Each key in files is the name from the +<input type="file" name="">. Each value in files is a +Werkzeug FileStorage object.

+

It basically behaves like a standard file object you know from Python, +with the difference that it also has a +save() function that can +store the file on the filesystem.

+

Note that files will only contain data if the request method was +POST, PUT or PATCH and the <form> that posted to the request had +enctype="multipart/form-data". It will be empty otherwise.

+

See the MultiDict / +FileStorage documentation for +more details about the used data structure.

+
+ +
+
+property form: ImmutableMultiDict[str, str]
+

The form parameters. By default an +ImmutableMultiDict +is returned from this function. This can be changed by setting +parameter_storage_class to a different type. This might +be necessary if the order of the form data is important.

+

Please keep in mind that file uploads will not end up here, but instead +in the files attribute.

+
+Changelog
+

Changed in version 0.9: Previous to Werkzeug 0.9 this would only contain form data for POST +and PUT requests.

+
+
+ +
+
+form_data_parser_class
+

alias of FormDataParser

+
+ +
+
+classmethod from_values(*args, **kwargs)
+

Create a new request object based on the values provided. If +environ is given missing values are filled from there. This method is +useful for small scripts when you need to simulate a request from an URL. +Do not use this method for unittesting, there is a full featured client +object (Client) that allows to create multipart requests, +support for cookies etc.

+

This accepts the same options as the +EnvironBuilder.

+
+Changelog
+

Changed in version 0.5: This method now accepts the same arguments as +EnvironBuilder. Because of this the +environ parameter is now called environ_overrides.

+
+
+
Returns:
+

request object

+
+
Parameters:
+
+
+
Return type:
+

Request

+
+
+
+ +
+
+property full_path: str
+

Requested path, including the query string.

+
+ +
+
+get_data(cache=True, as_text=False, parse_form_data=False)
+

This reads the buffered incoming data from the client into one +bytes object. By default this is cached but that behavior can be +changed by setting cache to False.

+

Usually it’s a bad idea to call this method without checking the +content length first as a client could send dozens of megabytes or more +to cause memory problems on the server.

+

Note that if the form data was already parsed this method will not +return anything as form data parsing does not cache the data like +this method does. To implicitly invoke form data parsing function +set parse_form_data to True. When this is done the return value +of this method will be an empty string if the form parser handles +the data. This generally is not necessary as if the whole data is +cached (which is the default) the form parser will used the cached +data to parse the form data. Please be generally aware of checking +the content length first in any case before calling this method +to avoid exhausting server memory.

+

If as_text is set to True the return value will be a decoded +string.

+
+Changelog
+

Added in version 0.9.

+
+
+
Parameters:
+
+
+
Return type:
+

bytes | str

+
+
+
+ +
+
+get_json(force=False, silent=False, cache=True)
+

Parse data as JSON.

+

If the mimetype does not indicate JSON +(application/json, see is_json), or parsing +fails, on_json_loading_failed() is called and +its return value is used as the return value. By default this +raises a 415 Unsupported Media Type resp.

+
+
Parameters:
+
    +
  • force (bool) – Ignore the mimetype and always try to parse JSON.

  • +
  • silent (bool) – Silence mimetype and parsing errors, and +return None instead.

  • +
  • cache (bool) – Store the parsed JSON to return for subsequent +calls.

  • +
+
+
Return type:
+

Any | None

+
+
+
+Changelog
+

Changed in version 2.3: Raise a 415 error instead of 400.

+
+
+

Changed in version 2.1: Raise a 400 error if the content type is incorrect.

+
+
+ +
+
+property host: str
+

The host name the request was made to, including the port if +it’s non-standard. Validated with trusted_hosts.

+
+ +
+
+property host_url: str
+

The request URL scheme and host only.

+
+ +
+
+property if_match: ETags
+

An object containing all the etags in the If-Match header.

+
+
Return type:
+

ETags

+
+
+
+ +
+
+property if_modified_since: datetime | None
+

The parsed If-Modified-Since header as a datetime object.

+
+Changelog
+

Changed in version 2.0: The datetime object is timezone-aware.

+
+
+ +
+
+property if_none_match: ETags
+

An object containing all the etags in the If-None-Match header.

+
+
Return type:
+

ETags

+
+
+
+ +
+
+property if_range: IfRange
+

The parsed If-Range header.

+
+Changelog
+

Changed in version 2.0: IfRange.date is timezone-aware.

+
+
+

Added in version 0.7.

+
+
+ +
+
+property if_unmodified_since: datetime | None
+

The parsed If-Unmodified-Since header as a datetime object.

+
+Changelog
+

Changed in version 2.0: The datetime object is timezone-aware.

+
+
+ +
+
+input_stream
+

The raw WSGI input stream, without any safety checks.

+

This is dangerous to use. It does not guard against infinite streams or reading +past content_length or max_content_length.

+

Use stream instead.

+
+ +
+
+property is_json: bool
+

Check if the mimetype indicates JSON data, either +application/json or application/*+json.

+
+ +
+
+is_multiprocess
+

boolean that is True if the application is served by a +WSGI server that spawns multiple processes.

+
+ +
+
+is_multithread
+

boolean that is True if the application is served by a +multithreaded WSGI server.

+
+ +
+
+is_run_once
+

boolean that is True if the application will be +executed only once in a process lifetime. This is the case for +CGI for example, but it’s not guaranteed that the execution only +happens one time.

+
+ +
+
+property is_secure: bool
+

True if the request was made with a secure protocol +(HTTPS or WSS).

+
+ +
+
+property json: Any | None
+

The parsed JSON data if mimetype indicates JSON +(application/json, see is_json).

+

Calls get_json() with default arguments.

+

If the request content type is not application/json, this +will raise a 415 Unsupported Media Type error.

+
+Changelog
+

Changed in version 2.3: Raise a 415 error instead of 400.

+
+
+

Changed in version 2.1: Raise a 400 error if the content type is incorrect.

+
+
+ +
+
+list_storage_class
+

alias of ImmutableList

+
+ +
+
+make_form_data_parser()
+

Creates the form data parser. Instantiates the +form_data_parser_class with some parameters.

+
+Changelog
+

Added in version 0.8.

+
+
+
Return type:
+

FormDataParser

+
+
+
+ +
+
+max_forwards
+

The Max-Forwards request-header field provides a +mechanism with the TRACE and OPTIONS methods to limit the number +of proxies or gateways that can forward the request to the next +inbound server.

+
+ +
+
+property mimetype: str
+

Like content_type, but without parameters (eg, without +charset, type etc.) and always lowercase. For example if the content +type is text/HTML; charset=utf-8 the mimetype would be +'text/html'.

+
+ +
+
+property mimetype_params: dict[str, str]
+

The mimetype parameters as dict. For example if the content +type is text/html; charset=utf-8 the params would be +{'charset': 'utf-8'}.

+
+ +
+
+origin
+

The host that the request originated from. Set access_control_allow_origin on the response to indicate which origins are allowed.

+
+ +
+
+parameter_storage_class
+

alias of ImmutableMultiDict

+
+ +
+
+property pragma: HeaderSet
+

The Pragma general-header field is used to include +implementation-specific directives that might apply to any recipient +along the request/response chain. All pragma directives specify +optional behavior from the viewpoint of the protocol; however, some +systems MAY require that behavior be consistent with the directives.

+
+ +
+
+property range: Range | None
+

The parsed Range header.

+
+Changelog
+

Added in version 0.7.

+
+
+
Return type:
+

Range

+
+
+
+ +
+
+referrer
+

The Referer[sic] request-header field allows the client +to specify, for the server’s benefit, the address (URI) of the +resource from which the Request-URI was obtained (the +“referrer”, although the header field is misspelled).

+
+ +
+
+remote_user
+

If the server supports user authentication, and the +script is protected, this attribute contains the username the +user has authenticated as.

+
+ +
+
+property root_url: str
+

The request URL scheme, host, and root path. This is the root +that the application is accessed from.

+
+ +
+
+property script_root: str
+

Alias for self.root_path. environ["SCRIPT_ROOT"] +without a trailing slash.

+
+ +
+
+property stream: IO[bytes]
+

The WSGI input stream, with safety checks. This stream can only be consumed +once.

+

Use get_data() to get the full data as bytes or text. The data +attribute will contain the full bytes only if they do not represent form data. +The form attribute will contain the parsed form data in that case.

+

Unlike input_stream, this stream guards against infinite streams or +reading past content_length or max_content_length.

+

If max_content_length is set, it can be enforced on streams if +wsgi.input_terminated is set. Otherwise, an empty stream is returned.

+

If the limit is reached before the underlying stream is exhausted (such as a +file that is too large, or an infinite stream), the remaining contents of the +stream cannot be read safely. Depending on how the server handles this, clients +may show a “connection reset” failure instead of seeing the 413 response.

+
+Changelog
+

Changed in version 2.3: Check max_content_length preemptively and while reading.

+
+
+

Changed in version 0.9: The stream is always set (but may be consumed) even if form parsing was +accessed first.

+
+
+ +
+
+trusted_hosts: list[str] | None = None
+

Valid host names when handling requests. By default all hosts are +trusted, which means that whatever the client says the host is +will be accepted.

+

Because Host and X-Forwarded-Host headers can be set to +any value by a malicious client, it is recommended to either set +this property or implement similar validation in the proxy (if +the application is being run behind one).

+
+Changelog
+

Added in version 0.9.

+
+
+ +
+
+property url: str
+

The full request URL with the scheme, host, root path, path, +and query string.

+
+ +
+
+property url_root: str
+

Alias for root_url. The URL with scheme, host, and +root path. For example, https://example.com/app/.

+
+ +
+
+property user_agent: UserAgent
+

The user agent. Use user_agent.string to get the header +value. Set user_agent_class to a subclass of +UserAgent to provide parsing for +the other properties or other extended data.

+
+Changelog
+

Changed in version 2.1: The built-in parser was removed. Set user_agent_class to a UserAgent +subclass to parse data from the string.

+
+
+ +
+
+user_agent_class
+

alias of UserAgent

+
+ +
+
+property values: CombinedMultiDict[str, str]
+

A werkzeug.datastructures.CombinedMultiDict that +combines args and form.

+

For GET requests, only args are present, not form.

+
+Changelog
+

Changed in version 2.0: For GET requests, only args are present, not form.

+
+
+ +
+
+property want_form_data_parsed: bool
+

True if the request method carries content. By default +this is true if a Content-Type is sent.

+
+Changelog
+

Added in version 0.8.

+
+
+ +
+
+environ: WSGIEnvironment
+

The WSGI environment containing HTTP headers and information from +the WSGI server.

+
+ +
+
+shallow: bool
+

Set when creating the request object. If True, reading from +the request body will cause a RuntimeException. Useful to +prevent modifying the stream from middleware.

+
+ +
+
+method
+

The method the request was made with, such as GET.

+
+ +
+
+scheme
+

The URL scheme of the protocol the request used, such as +https or wss.

+
+ +
+
+server
+

The address of the server. (host, port), (path, None) +for unix sockets, or None if not known.

+
+ +
+
+root_path
+

The prefix that the application is mounted under, without a +trailing slash. path comes after this.

+
+ +
+
+path
+

The path part of the URL after root_path. This is the +path used for routing within the application.

+
+ +
+
+query_string
+

The part of the URL after the “?”. This is the raw value, use +args for the parsed values.

+
+ +
+
+headers
+

The headers received with the request.

+
+ +
+
+remote_addr
+

The address of the client sending the request.

+
+ +
+ +
+
+flask.request
+

To access incoming request data, you can use the global request +object. Flask parses incoming request data for you and gives you +access to it through that global object. Internally Flask makes +sure that you always get the correct data for the active thread if you +are in a multithreaded environment.

+

This is a proxy. See Notes On Proxies for more information.

+

The request object is an instance of a Request.

+
+ +
+
+

Response Objects

+
+
+class flask.Response(response=None, status=None, headers=None, mimetype=None, content_type=None, direct_passthrough=False)
+

The response object that is used by default in Flask. Works like the +response object from Werkzeug but is set to have an HTML mimetype by +default. Quite often you don’t have to create this object yourself because +make_response() will take care of that for you.

+

If you want to replace the response object used you can subclass this and +set response_class to your subclass.

+
+Changelog
+

Changed in version 1.0: JSON support is added to the response, like the request. This is useful +when testing to get the test client response data as JSON.

+
+
+

Changed in version 1.0: Added max_cookie_size.

+
+
+
Parameters:
+
+
+
+
+
+default_mimetype: str | None = 'text/html'
+

the default mimetype if none is provided.

+
+ +
+
+accept_ranges
+

The Accept-Ranges header. Even though the name would +indicate that multiple values are supported, it must be one +string token only.

+

The values 'bytes' and 'none' are common.

+
+Changelog
+

Added in version 0.7.

+
+
+ +
+
+property access_control_allow_credentials: bool
+

Whether credentials can be shared by the browser to +JavaScript code. As part of the preflight request it indicates +whether credentials can be used on the cross origin request.

+
+ +
+
+access_control_allow_headers
+

Which headers can be sent with the cross origin request.

+
+ +
+
+access_control_allow_methods
+

Which methods can be used for the cross origin request.

+
+ +
+
+access_control_allow_origin
+

The origin or ‘*’ for any origin that may make cross origin requests.

+
+ +
+
+access_control_expose_headers
+

Which headers can be shared by the browser to JavaScript code.

+
+ +
+
+access_control_max_age
+

The maximum age in seconds the access control settings can be cached for.

+
+ +
+
+add_etag(overwrite=False, weak=False)
+

Add an etag for the current response if there is none yet.

+
+Changelog
+

Changed in version 2.0: SHA-1 is used to generate the value. MD5 may not be +available in some environments.

+
+
+
Parameters:
+
+
+
Return type:
+

None

+
+
+
+ +
+
+age
+

The Age response-header field conveys the sender’s +estimate of the amount of time since the response (or its +revalidation) was generated at the origin server.

+

Age values are non-negative decimal integers, representing time +in seconds.

+
+ +
+
+property allow: HeaderSet
+

The Allow entity-header field lists the set of methods +supported by the resource identified by the Request-URI. The +purpose of this field is strictly to inform the recipient of +valid methods associated with the resource. An Allow header +field MUST be present in a 405 (Method Not Allowed) +response.

+
+ +
+
+automatically_set_content_length = True
+

Should this response object automatically set the content-length +header if possible? This is true by default.

+
+Changelog
+

Added in version 0.8.

+
+
+ +
+
+property cache_control: ResponseCacheControl
+

The Cache-Control general-header field is used to specify +directives that MUST be obeyed by all caching mechanisms along the +request/response chain.

+
+ +
+
+calculate_content_length()
+

Returns the content length if available or None otherwise.

+
+
Return type:
+

int | None

+
+
+
+ +
+
+call_on_close(func)
+

Adds a function to the internal list of functions that should +be called as part of closing down the response. Since 0.7 this +function also returns the function that was passed so that this +can be used as a decorator.

+
+Changelog
+

Added in version 0.6.

+
+
+
Parameters:
+

func (Callable[[], Any])

+
+
Return type:
+

Callable[[], Any]

+
+
+
+ +
+
+close()
+

Close the wrapped response if possible. You can also use the object +in a with statement which will automatically close it.

+
+Changelog
+

Added in version 0.9: Can now be used in a with statement.

+
+
+
Return type:
+

None

+
+
+
+ +
+
+content_encoding
+

The Content-Encoding entity-header field is used as a +modifier to the media-type. When present, its value indicates +what additional content codings have been applied to the +entity-body, and thus what decoding mechanisms must be applied +in order to obtain the media-type referenced by the Content-Type +header field.

+
+ +
+
+property content_language: HeaderSet
+

The Content-Language entity-header field describes the +natural language(s) of the intended audience for the enclosed +entity. Note that this might not be equivalent to all the +languages used within the entity-body.

+
+ +
+
+content_length
+

The Content-Length entity-header field indicates the size +of the entity-body, in decimal number of OCTETs, sent to the +recipient or, in the case of the HEAD method, the size of the +entity-body that would have been sent had the request been a +GET.

+
+ +
+
+content_location
+

The Content-Location entity-header field MAY be used to +supply the resource location for the entity enclosed in the +message when that entity is accessible from a location separate +from the requested resource’s URI.

+
+ +
+
+content_md5
+

The Content-MD5 entity-header field, as defined in +RFC 1864, is an MD5 digest of the entity-body for the purpose of +providing an end-to-end message integrity check (MIC) of the +entity-body. (Note: a MIC is good for detecting accidental +modification of the entity-body in transit, but is not proof +against malicious attacks.)

+
+ +
+
+property content_range: ContentRange
+

The Content-Range header as a +ContentRange object. Available +even if the header is not set.

+
+Changelog
+

Added in version 0.7.

+
+
+ +
+
+property content_security_policy: ContentSecurityPolicy
+

The Content-Security-Policy header as a +ContentSecurityPolicy object. Available +even if the header is not set.

+

The Content-Security-Policy header adds an additional layer of +security to help detect and mitigate certain types of attacks.

+
+ +
+
+property content_security_policy_report_only: ContentSecurityPolicy
+

The Content-Security-policy-report-only header as a +ContentSecurityPolicy object. Available +even if the header is not set.

+

The Content-Security-Policy-Report-Only header adds a csp policy +that is not enforced but is reported thereby helping detect +certain types of attacks.

+
+ +
+
+content_type
+

The Content-Type entity-header field indicates the media +type of the entity-body sent to the recipient or, in the case of +the HEAD method, the media type that would have been sent had +the request been a GET.

+
+ +
+
+cross_origin_embedder_policy
+

Prevents a document from loading any cross-origin resources that do not +explicitly grant the document permission. Values must be a member of the +werkzeug.http.COEP enum.

+
+ +
+
+cross_origin_opener_policy
+

Allows control over sharing of browsing context group with cross-origin +documents. Values must be a member of the werkzeug.http.COOP enum.

+
+ +
+
+property data: bytes | str
+

A descriptor that calls get_data() and set_data().

+
+ +
+
+date
+

The Date general-header field represents the date and +time at which the message was originated, having the same +semantics as orig-date in RFC 822.

+
+Changelog
+

Changed in version 2.0: The datetime object is timezone-aware.

+
+
+ +
+
+default_status = 200
+

the default status if none is provided.

+
+ +
+ +

Delete a cookie. Fails silently if key doesn’t exist.

+
+
Parameters:
+
    +
  • key (str) – the key (name) of the cookie to be deleted.

  • +
  • path (str | None) – if the cookie that should be deleted was limited to a +path, the path has to be defined here.

  • +
  • domain (str | None) – if the cookie that should be deleted was limited to a +domain, that domain has to be defined here.

  • +
  • secure (bool) – If True, the cookie will only be available +via HTTPS.

  • +
  • httponly (bool) – Disallow JavaScript access to the cookie.

  • +
  • samesite (str | None) – Limit the scope of the cookie to only be +attached to requests that are “same-site”.

  • +
  • partitioned (bool) – If True, the cookie will be partitioned.

  • +
+
+
Return type:
+

None

+
+
+
+ +
+
+expires
+

The Expires entity-header field gives the date/time after +which the response is considered stale. A stale cache entry may +not normally be returned by a cache.

+
+Changelog
+

Changed in version 2.0: The datetime object is timezone-aware.

+
+
+ +
+
+classmethod force_type(response, environ=None)
+

Enforce that the WSGI response is a response object of the current +type. Werkzeug will use the Response internally in many +situations like the exceptions. If you call get_response() on an +exception you will get back a regular Response object, even +if you are using a custom subclass.

+

This method can enforce a given response type, and it will also +convert arbitrary WSGI callables into response objects if an environ +is provided:

+
# convert a Werkzeug response object into an instance of the
+# MyResponseClass subclass.
+response = MyResponseClass.force_type(response)
+
+# convert any WSGI application into a response object
+response = MyResponseClass.force_type(response, environ)
+
+
+

This is especially useful if you want to post-process responses in +the main dispatcher and use functionality provided by your subclass.

+

Keep in mind that this will modify response objects in place if +possible!

+
+
Parameters:
+
    +
  • response (Response) – a response object or wsgi application.

  • +
  • environ (WSGIEnvironment | None) – a WSGI environment object.

  • +
+
+
Returns:
+

a response object.

+
+
Return type:
+

Response

+
+
+
+ +
+
+freeze()
+

Make the response object ready to be pickled. Does the +following:

+
    +
  • Buffer the response into a list, ignoring +implicity_sequence_conversion and +direct_passthrough.

  • +
  • Set the Content-Length header.

  • +
  • Generate an ETag header if one is not already set.

  • +
+
+Changelog
+

Changed in version 2.1: Removed the no_etag parameter.

+
+
+

Changed in version 2.0: An ETag header is always added.

+
+
+

Changed in version 0.6: The Content-Length header is set.

+
+
+
Return type:
+

None

+
+
+
+ +
+
+classmethod from_app(app, environ, buffered=False)
+

Create a new response object from an application output. This +works best if you pass it an application that returns a generator all +the time. Sometimes applications may use the write() callable +returned by the start_response function. This tries to resolve such +edge cases automatically. But if you don’t get the expected output +you should set buffered to True which enforces buffering.

+
+
Parameters:
+
    +
  • app (WSGIApplication) – the WSGI application to execute.

  • +
  • environ (WSGIEnvironment) – the WSGI environment to execute against.

  • +
  • buffered (bool) – set to True to enforce buffering.

  • +
+
+
Returns:
+

a response object.

+
+
Return type:
+

Response

+
+
+
+ +
+
+get_app_iter(environ)
+

Returns the application iterator for the given environ. Depending +on the request method and the current status code the return value +might be an empty response rather than the one from the response.

+

If the request method is HEAD or the status code is in a range +where the HTTP specification requires an empty response, an empty +iterable is returned.

+
+Changelog
+

Added in version 0.6.

+
+
+
Parameters:
+

environ (WSGIEnvironment) – the WSGI environment of the request.

+
+
Returns:
+

a response iterable.

+
+
Return type:
+

t.Iterable[bytes]

+
+
+
+ +
+
+get_data(as_text=False)
+

The string representation of the response body. Whenever you call +this property the response iterable is encoded and flattened. This +can lead to unwanted behavior if you stream big data.

+

This behavior can be disabled by setting +implicit_sequence_conversion to False.

+

If as_text is set to True the return value will be a decoded +string.

+
+Changelog
+

Added in version 0.9.

+
+
+
Parameters:
+

as_text (bool)

+
+
Return type:
+

bytes | str

+
+
+
+ +
+
+get_etag()
+

Return a tuple in the form (etag, is_weak). If there is no +ETag the return value is (None, None).

+
+
Return type:
+

tuple[str, bool] | tuple[None, None]

+
+
+
+ +
+
+get_json(force=False, silent=False)
+

Parse data as JSON. Useful during testing.

+

If the mimetype does not indicate JSON +(application/json, see is_json), this +returns None.

+

Unlike Request.get_json(), the result is not cached.

+
+
Parameters:
+
    +
  • force (bool) – Ignore the mimetype and always try to parse JSON.

  • +
  • silent (bool) – Silence parsing errors and return None +instead.

  • +
+
+
Return type:
+

Any | None

+
+
+
+ +
+
+get_wsgi_headers(environ)
+

This is automatically called right before the response is started +and returns headers modified for the given environment. It returns a +copy of the headers from the response with some modifications applied +if necessary.

+

For example the location header (if present) is joined with the root +URL of the environment. Also the content length is automatically set +to zero here for certain status codes.

+
+Changelog
+

Changed in version 0.6: Previously that function was called fix_headers and modified +the response object in place. Also since 0.6, IRIs in location +and content-location headers are handled properly.

+

Also starting with 0.6, Werkzeug will attempt to set the content +length if it is able to figure it out on its own. This is the +case if all the strings in the response iterable are already +encoded and the iterable is buffered.

+
+
+
Parameters:
+

environ (WSGIEnvironment) – the WSGI environment of the request.

+
+
Returns:
+

returns a new Headers +object.

+
+
Return type:
+

Headers

+
+
+
+ +
+
+get_wsgi_response(environ)
+

Returns the final WSGI response as tuple. The first item in +the tuple is the application iterator, the second the status and +the third the list of headers. The response returned is created +specially for the given environment. For example if the request +method in the WSGI environment is 'HEAD' the response will +be empty and only the headers and status code will be present.

+
+Changelog
+

Added in version 0.6.

+
+
+
Parameters:
+

environ (WSGIEnvironment) – the WSGI environment of the request.

+
+
Returns:
+

an (app_iter, status, headers) tuple.

+
+
Return type:
+

tuple[t.Iterable[bytes], str, list[tuple[str, str]]]

+
+
+
+ +
+
+implicit_sequence_conversion = True
+

if set to False accessing properties on the response object will +not try to consume the response iterator and convert it into a list.

+
+Changelog
+

Added in version 0.6.2: That attribute was previously called implicit_seqence_conversion. +(Notice the typo). If you did use this feature, you have to adapt +your code to the name change.

+
+
+ +
+
+property is_json: bool
+

Check if the mimetype indicates JSON data, either +application/json or application/*+json.

+
+ +
+
+property is_sequence: bool
+

If the iterator is buffered, this property will be True. A +response object will consider an iterator to be buffered if the +response attribute is a list or tuple.

+
+Changelog
+

Added in version 0.6.

+
+
+ +
+
+property is_streamed: bool
+

If the response is streamed (the response is not an iterable with +a length information) this property is True. In this case streamed +means that there is no information about the number of iterations. +This is usually True if a generator is passed to the response object.

+

This is useful for checking before applying some sort of post +filtering that should not take place for streamed responses.

+
+ +
+
+iter_encoded()
+

Iter the response encoded with the encoding of the response. +If the response object is invoked as WSGI application the return +value of this method is used as application iterator unless +direct_passthrough was activated.

+
+
Return type:
+

Iterator[bytes]

+
+
+
+ +
+
+property json: Any | None
+

The parsed JSON data if mimetype indicates JSON +(application/json, see is_json).

+

Calls get_json() with default arguments.

+
+ +
+
+last_modified
+

The Last-Modified entity-header field indicates the date +and time at which the origin server believes the variant was +last modified.

+
+Changelog
+

Changed in version 2.0: The datetime object is timezone-aware.

+
+
+ +
+
+location
+

The Location response-header field is used to redirect +the recipient to a location other than the Request-URI for +completion of the request or identification of a new +resource.

+
+ +
+
+make_conditional(request_or_environ, accept_ranges=False, complete_length=None)
+

Make the response conditional to the request. This method works +best if an etag was defined for the response already. The add_etag +method can be used to do that. If called without etag just the date +header is set.

+

This does nothing if the request method in the request or environ is +anything but GET or HEAD.

+

For optimal performance when handling range requests, it’s recommended +that your response data object implements seekable, seek and tell +methods as described by io.IOBase. Objects returned by +wrap_file() automatically implement those methods.

+

It does not remove the body of the response because that’s something +the __call__() function does for us automatically.

+

Returns self so that you can do return resp.make_conditional(req) +but modifies the object in-place.

+
+
Parameters:
+
    +
  • request_or_environ (WSGIEnvironment | Request) – a request object or WSGI environment to be +used to make the response conditional +against.

  • +
  • accept_ranges (bool | str) – This parameter dictates the value of +Accept-Ranges header. If False (default), +the header is not set. If True, it will be set +to "bytes". If it’s a string, it will use this +value.

  • +
  • complete_length (int | None) – Will be used only in valid Range Requests. +It will set Content-Range complete length +value and compute Content-Length real value. +This parameter is mandatory for successful +Range Requests completion.

  • +
+
+
Raises:
+

RequestedRangeNotSatisfiable +if Range header could not be parsed or satisfied.

+
+
Return type:
+

Response

+
+
+
+Changelog
+

Changed in version 2.0: Range processing is skipped if length is 0 instead of +raising a 416 Range Not Satisfiable error.

+
+
+ +
+
+make_sequence()
+

Converts the response iterator in a list. By default this happens +automatically if required. If implicit_sequence_conversion is +disabled, this method is not automatically called and some properties +might raise exceptions. This also encodes all the items.

+
+Changelog
+

Added in version 0.6.

+
+
+
Return type:
+

None

+
+
+
+ +
+
+property mimetype: str | None
+

The mimetype (content type without charset etc.)

+
+ +
+
+property mimetype_params: dict[str, str]
+

The mimetype parameters as dict. For example if the +content type is text/html; charset=utf-8 the params would be +{'charset': 'utf-8'}.

+
+Changelog
+

Added in version 0.5.

+
+
+ +
+
+property retry_after: datetime | None
+

The Retry-After response-header field can be used with a +503 (Service Unavailable) response to indicate how long the +service is expected to be unavailable to the requesting client.

+

Time in seconds until expiration or date.

+
+Changelog
+

Changed in version 2.0: The datetime object is timezone-aware.

+
+
+ +
+ +

Sets a cookie.

+

A warning is raised if the size of the cookie header exceeds +max_cookie_size, but the header will still be set.

+
+
Parameters:
+
    +
  • key (str) – the key (name) of the cookie to be set.

  • +
  • value (str) – the value of the cookie.

  • +
  • max_age (timedelta | int | None) – should be a number of seconds, or None (default) if +the cookie should last only as long as the client’s +browser session.

  • +
  • expires (str | datetime | int | float | None) – should be a datetime object or UNIX timestamp.

  • +
  • path (str | None) – limits the cookie to a given path, per default it will +span the whole domain.

  • +
  • domain (str | None) – if you want to set a cross-domain cookie. For example, +domain="example.com" will set a cookie that is +readable by the domain www.example.com, +foo.example.com etc. Otherwise, a cookie will only +be readable by the domain that set it.

  • +
  • secure (bool) – If True, the cookie will only be available +via HTTPS.

  • +
  • httponly (bool) – Disallow JavaScript access to the cookie.

  • +
  • samesite (str | None) – Limit the scope of the cookie to only be +attached to requests that are “same-site”.

  • +
  • partitioned (bool) – If True, the cookie will be partitioned.

  • +
+
+
Return type:
+

None

+
+
+
+

Changed in version 3.1: The partitioned parameter was added.

+
+
+ +
+
+set_data(value)
+

Sets a new string as response. The value must be a string or +bytes. If a string is set it’s encoded to the charset of the +response (utf-8 by default).

+
+Changelog
+

Added in version 0.9.

+
+
+
Parameters:
+

value (bytes | str)

+
+
Return type:
+

None

+
+
+
+ +
+
+set_etag(etag, weak=False)
+

Set the etag, and override the old one if there was one.

+
+
Parameters:
+
+
+
Return type:
+

None

+
+
+
+ +
+
+property status: str
+

The HTTP status code as a string.

+
+ +
+
+property status_code: int
+

The HTTP status code as a number.

+
+ +
+
+property stream: ResponseStream
+

The response iterable as write-only stream.

+
+ +
+
+property vary: HeaderSet
+

The Vary field value indicates the set of request-header +fields that fully determines, while the response is fresh, +whether a cache is permitted to use the response to reply to a +subsequent request without revalidation.

+
+ +
+
+property www_authenticate: WWWAuthenticate
+

The WWW-Authenticate header parsed into a WWWAuthenticate +object. Modifying the object will modify the header value.

+

This header is not set by default. To set this header, assign an instance of +WWWAuthenticate to this attribute.

+
response.www_authenticate = WWWAuthenticate(
+    "basic", {"realm": "Authentication Required"}
+)
+
+
+

Multiple values for this header can be sent to give the client multiple options. +Assign a list to set multiple headers. However, modifying the items in the list +will not automatically update the header values, and accessing this attribute +will only ever return the first value.

+

To unset this header, assign None or use del.

+
+Changelog
+

Changed in version 2.3: This attribute can be assigned to to set the header. A list can be assigned +to set multiple header values. Use del to unset the header.

+
+
+

Changed in version 2.3: WWWAuthenticate is no longer a dict. The token attribute +was added for auth challenges that use a token instead of parameters.

+
+
+ +
+
+response: t.Iterable[str] | t.Iterable[bytes]
+

The response body to send as the WSGI iterable. A list of strings +or bytes represents a fixed-length response, any other iterable +is a streaming response. Strings are encoded to bytes as UTF-8.

+

Do not set to a plain string or bytes, that will cause sending +the response to be very inefficient as it will iterate one byte +at a time.

+
+ +
+
+direct_passthrough
+

Pass the response body directly through as the WSGI iterable. +This can be used when the body is a binary file or other +iterator of bytes, to skip some unnecessary checks. Use +send_file() instead of setting this +manually.

+
+ +
+
+autocorrect_location_header = False
+

If a redirect Location header is a relative URL, make it an +absolute URL, including scheme and domain.

+
+Changelog
+

Changed in version 2.1: This is disabled by default, so responses will send relative +redirects.

+
+
+

Added in version 0.8.

+
+
+ +
+ +

Read-only view of the MAX_COOKIE_SIZE config key.

+

See max_cookie_size in +Werkzeug’s docs.

+
+ +
+ +
+
+

Sessions

+

If you have set Flask.secret_key (or configured it from +SECRET_KEY) you can use sessions in Flask applications. A session makes +it possible to remember information from one request to another. The way Flask +does this is by using a signed cookie. The user can look at the session +contents, but can’t modify it unless they know the secret key, so make sure to +set that to something complex and unguessable.

+

To access the current session you can use the session object:

+
+
+class flask.session
+

The session object works pretty much like an ordinary dict, with the +difference that it keeps track of modifications.

+

This is a proxy. See Notes On Proxies for more information.

+

The following attributes are interesting:

+
+
+new
+

True if the session is new, False otherwise.

+
+ +
+
+modified
+

True if the session object detected a modification. Be advised +that modifications on mutable structures are not picked up +automatically, in that situation you have to explicitly set the +attribute to True yourself. Here an example:

+
# this change is not picked up because a mutable object (here
+# a list) is changed.
+session['objects'].append(42)
+# so mark it as modified yourself
+session.modified = True
+
+
+
+ +
+
+permanent
+

If set to True the session lives for +permanent_session_lifetime seconds. The +default is 31 days. If set to False (which is the default) the +session will be deleted when the user closes the browser.

+
+ +
+ +
+
+

Session Interface

+
+Changelog
+

Added in version 0.8.

+
+

The session interface provides a simple way to replace the session +implementation that Flask is using.

+
+
+class flask.sessions.SessionInterface
+

The basic interface you have to implement in order to replace the +default session interface which uses werkzeug’s securecookie +implementation. The only methods you have to implement are +open_session() and save_session(), the others have +useful defaults which you don’t need to change.

+

The session object returned by the open_session() method has to +provide a dictionary like interface plus the properties and methods +from the SessionMixin. We recommend just subclassing a dict +and adding that mixin:

+
class Session(dict, SessionMixin):
+    pass
+
+
+

If open_session() returns None Flask will call into +make_null_session() to create a session that acts as replacement +if the session support cannot work because some requirement is not +fulfilled. The default NullSession class that is created +will complain that the secret key was not set.

+

To replace the session interface on an application all you have to do +is to assign flask.Flask.session_interface:

+
app = Flask(__name__)
+app.session_interface = MySessionInterface()
+
+
+

Multiple requests with the same session may be sent and handled +concurrently. When implementing a new session interface, consider +whether reads or writes to the backing store must be synchronized. +There is no guarantee on the order in which the session for each +request is opened or saved, it will occur in the order that requests +begin and end processing.

+
+Changelog
+

Added in version 0.8.

+
+
+
+null_session_class
+

make_null_session() will look here for the class that should +be created when a null session is requested. Likewise the +is_null_session() method will perform a typecheck against +this type.

+

alias of NullSession

+
+ +
+
+pickle_based = False
+

A flag that indicates if the session interface is pickle based. +This can be used by Flask extensions to make a decision in regards +to how to deal with the session object.

+
+Changelog
+

Added in version 0.10.

+
+
+ +
+
+make_null_session(app)
+

Creates a null session which acts as a replacement object if the +real session support could not be loaded due to a configuration +error. This mainly aids the user experience because the job of the +null session is to still support lookup without complaining but +modifications are answered with a helpful error message of what +failed.

+

This creates an instance of null_session_class by default.

+
+
Parameters:
+

app (Flask)

+
+
Return type:
+

NullSession

+
+
+
+ +
+
+is_null_session(obj)
+

Checks if a given object is a null session. Null sessions are +not asked to be saved.

+

This checks if the object is an instance of null_session_class +by default.

+
+
Parameters:
+

obj (object)

+
+
Return type:
+

bool

+
+
+
+ +
+ +

The name of the session cookie. Uses``app.config[“SESSION_COOKIE_NAME”]``.

+
+
Parameters:
+

app (Flask)

+
+
Return type:
+

str

+
+
+
+ +
+ +

The value of the Domain parameter on the session cookie. If not set, +browsers will only send the cookie to the exact domain it was set from. +Otherwise, they will send it to any subdomain of the given value as well.

+

Uses the SESSION_COOKIE_DOMAIN config.

+
+Changelog
+

Changed in version 2.3: Not set by default, does not fall back to SERVER_NAME.

+
+
+
Parameters:
+

app (Flask)

+
+
Return type:
+

str | None

+
+
+
+ +
+ +

Returns the path for which the cookie should be valid. The +default implementation uses the value from the SESSION_COOKIE_PATH +config var if it’s set, and falls back to APPLICATION_ROOT or +uses / if it’s None.

+
+
Parameters:
+

app (Flask)

+
+
Return type:
+

str

+
+
+
+ +
+ +

Returns True if the session cookie should be httponly. This +currently just returns the value of the SESSION_COOKIE_HTTPONLY +config var.

+
+
Parameters:
+

app (Flask)

+
+
Return type:
+

bool

+
+
+
+ +
+ +

Returns True if the cookie should be secure. This currently +just returns the value of the SESSION_COOKIE_SECURE setting.

+
+
Parameters:
+

app (Flask)

+
+
Return type:
+

bool

+
+
+
+ +
+ +

Return 'Strict' or 'Lax' if the cookie should use the +SameSite attribute. This currently just returns the value of +the SESSION_COOKIE_SAMESITE setting.

+
+
Parameters:
+

app (Flask)

+
+
Return type:
+

str | None

+
+
+
+ +
+ +

Returns True if the cookie should be partitioned. By default, uses +the value of SESSION_COOKIE_PARTITIONED.

+
+

Added in version 3.1.

+
+
+
Parameters:
+

app (Flask)

+
+
Return type:
+

bool

+
+
+
+ +
+
+get_expiration_time(app, session)
+

A helper method that returns an expiration date for the session +or None if the session is linked to the browser session. The +default implementation returns now + the permanent session +lifetime configured on the application.

+
+
Parameters:
+
+
+
Return type:
+

datetime | None

+
+
+
+ +
+ +

Used by session backends to determine if a Set-Cookie header +should be set for this session cookie for this response. If the session +has been modified, the cookie is set. If the session is permanent and +the SESSION_REFRESH_EACH_REQUEST config is true, the cookie is +always set.

+

This check is usually skipped if the session was deleted.

+
+Changelog
+

Added in version 0.11.

+
+
+
Parameters:
+
+
+
Return type:
+

bool

+
+
+
+ +
+
+open_session(app, request)
+

This is called at the beginning of each request, after +pushing the request context, before matching the URL.

+

This must return an object which implements a dictionary-like +interface as well as the SessionMixin interface.

+

This will return None to indicate that loading failed in +some way that is not immediately an error. The request +context will fall back to using make_null_session() +in this case.

+
+
Parameters:
+
+
+
Return type:
+

SessionMixin | None

+
+
+
+ +
+
+save_session(app, session, response)
+

This is called at the end of each request, after generating +a response, before removing the request context. It is skipped +if is_null_session() returns True.

+
+
Parameters:
+
+
+
Return type:
+

None

+
+
+
+ +
+ +
+
+class flask.sessions.SecureCookieSessionInterface
+

The default session interface that stores sessions in signed cookies +through the itsdangerous module.

+
+
+salt = 'cookie-session'
+

the salt that should be applied on top of the secret key for the +signing of cookie based sessions.

+
+ +
+
+static digest_method(string=b'')
+

the hash function to use for the signature. The default is sha1

+
+
Parameters:
+

string (bytes)

+
+
Return type:
+

Any

+
+
+
+ +
+
+key_derivation = 'hmac'
+

the name of the itsdangerous supported key derivation. The default +is hmac.

+
+ +
+
+serializer = <flask.json.tag.TaggedJSONSerializer object>
+

A python serializer for the payload. The default is a compact +JSON derived serializer with support for some extra Python types +such as datetime objects or tuples.

+
+ +
+
+session_class
+

alias of SecureCookieSession

+
+ +
+
+open_session(app, request)
+

This is called at the beginning of each request, after +pushing the request context, before matching the URL.

+

This must return an object which implements a dictionary-like +interface as well as the SessionMixin interface.

+

This will return None to indicate that loading failed in +some way that is not immediately an error. The request +context will fall back to using make_null_session() +in this case.

+
+
Parameters:
+
+
+
Return type:
+

SecureCookieSession | None

+
+
+
+ +
+
+save_session(app, session, response)
+

This is called at the end of each request, after generating +a response, before removing the request context. It is skipped +if is_null_session() returns True.

+
+
Parameters:
+
+
+
Return type:
+

None

+
+
+
+ +
+ +
+
+class flask.sessions.SecureCookieSession(initial=None)
+

Base class for sessions based on signed cookies.

+

This session backend will set the modified and +accessed attributes. It cannot reliably track whether a +session is new (vs. empty), so new remains hard coded to +False.

+
+
Parameters:
+

initial (c.Mapping[str, t.Any] | c.Iterable[tuple[str, t.Any]] | None)

+
+
+
+
+modified = False
+

When data is changed, this is set to True. Only the session +dictionary itself is tracked; if the session contains mutable +data (for example a nested dict) then this must be set to +True manually when modifying that data. The session cookie +will only be written to the response if this is True.

+
+ +
+
+accessed = False
+

header, which allows caching proxies to cache different pages for +different users.

+
+ +
+
+get(key, default=None)
+

Return the value for key if key is in the dictionary, else default.

+
+
Parameters:
+
+
+
Return type:
+

Any

+
+
+
+ +
+
+setdefault(key, default=None)
+

Insert key with a value of default if key is not in the dictionary.

+

Return the value for key if key is in the dictionary, else default.

+
+
Parameters:
+
+
+
Return type:
+

Any

+
+
+
+ +
+ +
+
+class flask.sessions.NullSession(initial=None)
+

Class used to generate nicer error messages if sessions are not +available. Will still allow read-only access to the empty session +but fail on setting.

+
+
Parameters:
+

initial (c.Mapping[str, t.Any] | c.Iterable[tuple[str, t.Any]] | None)

+
+
+
+
+clear() None.  Remove all items from D.
+
+
Parameters:
+
+
+
Return type:
+

NoReturn

+
+
+
+ +
+
+pop(k[, d]) v, remove specified key and return the corresponding value.
+

If the key is not found, return the default if given; otherwise, +raise a KeyError.

+
+
Parameters:
+
+
+
Return type:
+

NoReturn

+
+
+
+ +
+
+popitem(*args, **kwargs)
+

Remove and return a (key, value) pair as a 2-tuple.

+

Pairs are returned in LIFO (last-in, first-out) order. +Raises KeyError if the dict is empty.

+
+
Parameters:
+
+
+
Return type:
+

NoReturn

+
+
+
+ +
+
+update([E, ]**F) None.  Update D from dict/iterable E and F.
+

If E is present and has a .keys() method, then does: for k in E: D[k] = E[k] +If E is present and lacks a .keys() method, then does: for k, v in E: D[k] = v +In either case, this is followed by: for k in F: D[k] = F[k]

+
+
Parameters:
+
+
+
Return type:
+

NoReturn

+
+
+
+ +
+
+setdefault(*args, **kwargs)
+

Insert key with a value of default if key is not in the dictionary.

+

Return the value for key if key is in the dictionary, else default.

+
+
Parameters:
+
+
+
Return type:
+

NoReturn

+
+
+
+ +
+ +
+
+class flask.sessions.SessionMixin
+

Expands a basic dictionary with session attributes.

+
+
+property permanent: bool
+

This reflects the '_permanent' key in the dict.

+
+ +
+
+modified = True
+

Some implementations can detect changes to the session and set +this when that happens. The mixin default is hard coded to +True.

+
+ +
+
+accessed = True
+

Some implementations can detect when session data is read or +written and set this when that happens. The mixin default is hard +coded to True.

+
+ +
+ +
+

Notice

+

The PERMANENT_SESSION_LIFETIME config can be an integer or timedelta. +The permanent_session_lifetime attribute is always a +timedelta.

+
+
+
+

Test Client

+
+
+class flask.testing.FlaskClient(*args, **kwargs)
+

Works like a regular Werkzeug test client but has knowledge about +Flask’s contexts to defer the cleanup of the request context until +the end of a with block. For general information about how to +use this class refer to werkzeug.test.Client.

+
+Changelog
+

Changed in version 0.12: app.test_client() includes preset default environment, which can be +set after instantiation of the app.test_client() object in +client.environ_base.

+
+

Basic usage is outlined in the Testing Flask Applications chapter.

+
+
Parameters:
+
    +
  • args (t.Any)

  • +
  • kwargs (t.Any)

  • +
+
+
+
+
+session_transaction(*args, **kwargs)
+

When used in combination with a with statement this opens a +session transaction. This can be used to modify the session that +the test client uses. Once the with block is left the session is +stored back.

+
with client.session_transaction() as session:
+    session['value'] = 42
+
+
+

Internally this is implemented by going through a temporary test +request context and since session handling could depend on +request variables this function accepts the same arguments as +test_request_context() which are directly +passed through.

+
+
Parameters:
+
+
+
Return type:
+

Iterator[SessionMixin]

+
+
+
+ +
+
+open(*args, buffered=False, follow_redirects=False, **kwargs)
+

Generate an environ dict from the given arguments, make a +request to the application using it, and return the response.

+
+
Parameters:
+
    +
  • args (t.Any) – Passed to EnvironBuilder to create the +environ for the request. If a single arg is passed, it can +be an existing EnvironBuilder or an environ dict.

  • +
  • buffered (bool) – Convert the iterator returned by the app into +a list. If the iterator has a close() method, it is +called automatically.

  • +
  • follow_redirects (bool) – Make additional requests to follow HTTP +redirects until a non-redirect status is returned. +TestResponse.history lists the intermediate +responses.

  • +
  • kwargs (t.Any)

  • +
+
+
Return type:
+

TestResponse

+
+
+
+Changelog
+

Changed in version 2.1: Removed the as_tuple parameter.

+
+
+

Changed in version 2.0: The request input stream is closed when calling +response.close(). Input streams for redirects are +automatically closed.

+
+
+

Changed in version 0.5: If a dict is provided as file in the dict for the data +parameter the content type has to be called content_type +instead of mimetype. This change was made for +consistency with werkzeug.FileWrapper.

+
+
+

Changed in version 0.5: Added the follow_redirects parameter.

+
+
+ +
+ +
+
+

Test CLI Runner

+
+
+class flask.testing.FlaskCliRunner(app, **kwargs)
+

A CliRunner for testing a Flask app’s +CLI commands. Typically created using +test_cli_runner(). See Running Commands with the CLI Runner.

+
+
Parameters:
+
    +
  • app (Flask)

  • +
  • kwargs (t.Any)

  • +
+
+
+
+
+invoke(cli=None, args=None, **kwargs)
+

Invokes a CLI command in an isolated environment. See +CliRunner.invoke for +full method documentation. See Running Commands with the CLI Runner for examples.

+

If the obj argument is not given, passes an instance of +ScriptInfo that knows how to load the Flask +app being tested.

+
+
Parameters:
+
    +
  • cli (Any) – Command object to invoke. Default is the app’s +cli group.

  • +
  • args (Any) – List of strings to invoke the command with.

  • +
  • kwargs (Any)

  • +
+
+
Returns:
+

a Result object.

+
+
Return type:
+

Result

+
+
+
+ +
+ +
+
+

Application Globals

+

To share data that is valid for one request only from one function to +another, a global variable is not good enough because it would break in +threaded environments. Flask provides you with a special object that +ensures it is only valid for the active request and that will return +different values for each request. In a nutshell: it does the right +thing, like it does for request and session.

+
+
+flask.g
+

A namespace object that can store data during an +application context. This is an instance of +Flask.app_ctx_globals_class, which defaults to +ctx._AppCtxGlobals.

+

This is a good place to store resources during a request. For +example, a before_request function could load a user object from +a session id, then set g.user to be used in the view function.

+

This is a proxy. See Notes On Proxies for more information.

+
+Changelog
+

Changed in version 0.10: Bound to the application context instead of the request context.

+
+
+ +
+
+class flask.ctx._AppCtxGlobals
+

A plain object. Used as a namespace for storing data during an +application context.

+

Creating an app context automatically creates this object, which is +made available as the g proxy.

+
+
+'key' in g
+

Check whether an attribute is present.

+
+Changelog
+

Added in version 0.10.

+
+
+ +
+
+iter(g)
+

Return an iterator over the attribute names.

+
+Changelog
+

Added in version 0.10.

+
+
+ +
+
+get(name, default=None)
+

Get an attribute by name, or a default value. Like +dict.get().

+
+
Parameters:
+
    +
  • name (str) – Name of attribute to get.

  • +
  • default (Any | None) – Value to return if the attribute is not present.

  • +
+
+
Return type:
+

Any

+
+
+
+Changelog
+

Added in version 0.10.

+
+
+ +
+
+pop(name, default=_sentinel)
+

Get and remove an attribute by name. Like dict.pop().

+
+
Parameters:
+
    +
  • name (str) – Name of attribute to pop.

  • +
  • default (Any) – Value to return if the attribute is not present, +instead of raising a KeyError.

  • +
+
+
Return type:
+

Any

+
+
+
+Changelog
+

Added in version 0.11.

+
+
+ +
+
+setdefault(name, default=None)
+

Get the value of an attribute if it is present, otherwise +set and return a default value. Like dict.setdefault().

+
+
Parameters:
+
    +
  • name (str) – Name of attribute to get.

  • +
  • default (Any) – Value to set and return if the attribute is not +present.

  • +
+
+
Return type:
+

Any

+
+
+
+Changelog
+

Added in version 0.11.

+
+
+ +
+ +
+
+

Useful Functions and Classes

+
+
+flask.current_app
+

A proxy to the application handling the current request. This is +useful to access the application without needing to import it, or if +it can’t be imported, such as when using the application factory +pattern or in blueprints and extensions.

+

This is only available when an +application context is pushed. This happens +automatically during requests and CLI commands. It can be controlled +manually with app_context().

+

This is a proxy. See Notes On Proxies for more information.

+
+ +
+
+flask.has_request_context()
+

If you have code that wants to test if a request context is there or +not this function can be used. For instance, you may want to take advantage +of request information if the request object is available, but fail +silently if it is unavailable.

+
class User(db.Model):
+
+    def __init__(self, username, remote_addr=None):
+        self.username = username
+        if remote_addr is None and has_request_context():
+            remote_addr = request.remote_addr
+        self.remote_addr = remote_addr
+
+
+

Alternatively you can also just test any of the context bound objects +(such as request or g) for truthness:

+
class User(db.Model):
+
+    def __init__(self, username, remote_addr=None):
+        self.username = username
+        if remote_addr is None and request:
+            remote_addr = request.remote_addr
+        self.remote_addr = remote_addr
+
+
+
+Changelog
+

Added in version 0.7.

+
+
+
Return type:
+

bool

+
+
+
+ +
+
+flask.copy_current_request_context(f)
+

A helper function that decorates a function to retain the current +request context. This is useful when working with greenlets. The moment +the function is decorated a copy of the request context is created and +then pushed when the function is called. The current session is also +included in the copied request context.

+

Example:

+
import gevent
+from flask import copy_current_request_context
+
+@app.route('/')
+def index():
+    @copy_current_request_context
+    def do_some_work():
+        # do some work here, it can access flask.request or
+        # flask.session like you would otherwise in the view function.
+        ...
+    gevent.spawn(do_some_work)
+    return 'Regular response'
+
+
+
+Changelog
+

Added in version 0.10.

+
+
+
Parameters:
+

f (F)

+
+
Return type:
+

F

+
+
+
+ +
+
+flask.has_app_context()
+

Works like has_request_context() but for the application +context. You can also just do a boolean check on the +current_app object instead.

+
+Changelog
+

Added in version 0.9.

+
+
+
Return type:
+

bool

+
+
+
+ +
+
+flask.url_for(endpoint, *, _anchor=None, _method=None, _scheme=None, _external=None, **values)
+

Generate a URL to the given endpoint with the given values.

+

This requires an active request or application context, and calls +current_app.url_for(). See that method +for full documentation.

+
+
Parameters:
+
    +
  • endpoint (str) – The endpoint name associated with the URL to +generate. If this starts with a ., the current blueprint +name (if any) will be used.

  • +
  • _anchor (str | None) – If given, append this as #anchor to the URL.

  • +
  • _method (str | None) – If given, generate the URL associated with this +method for the endpoint.

  • +
  • _scheme (str | None) – If given, the URL will have this scheme if it is +external.

  • +
  • _external (bool | None) – If given, prefer the URL to be internal (False) or +require it to be external (True). External URLs include the +scheme and domain. When not in an active request, URLs are +external by default.

  • +
  • values (Any) – Values to use for the variable parts of the URL rule. +Unknown keys are appended as query string arguments, like +?a=b&c=d.

  • +
+
+
Return type:
+

str

+
+
+
+Changelog
+

Changed in version 2.2: Calls current_app.url_for, allowing an app to override the +behavior.

+
+
+

Changed in version 0.10: The _scheme parameter was added.

+
+
+

Changed in version 0.9: The _anchor and _method parameters were added.

+
+
+

Changed in version 0.9: Calls app.handle_url_build_error on build errors.

+
+
+ +
+
+flask.abort(code, *args, **kwargs)
+

Raise an HTTPException for the given +status code.

+

If current_app is available, it will call its +aborter object, otherwise it will use +werkzeug.exceptions.abort().

+
+
Parameters:
+
    +
  • code (int | Response) – The status code for the exception, which must be +registered in app.aborter.

  • +
  • args (Any) – Passed to the exception.

  • +
  • kwargs (Any) – Passed to the exception.

  • +
+
+
Return type:
+

NoReturn

+
+
+
+Changelog
+

Added in version 2.2: Calls current_app.aborter if available instead of always +using Werkzeug’s default abort.

+
+
+ +
+
+flask.redirect(location, code=302, Response=None)
+

Create a redirect response object.

+

If current_app is available, it will use its +redirect() method, otherwise it will use +werkzeug.utils.redirect().

+
+
Parameters:
+
    +
  • location (str) – The URL to redirect to.

  • +
  • code (int) – The status code for the redirect.

  • +
  • Response (type[Response] | None) – The response class to use. Not used when +current_app is active, which uses app.response_class.

  • +
+
+
Return type:
+

Response

+
+
+
+Changelog
+

Added in version 2.2: Calls current_app.redirect if available instead of always +using Werkzeug’s default redirect.

+
+
+ +
+
+flask.make_response(*args)
+

Sometimes it is necessary to set additional headers in a view. Because +views do not have to return response objects but can return a value that +is converted into a response object by Flask itself, it becomes tricky to +add headers to it. This function can be called instead of using a return +and you will get a response object which you can use to attach headers.

+

If view looked like this and you want to add a new header:

+
def index():
+    return render_template('index.html', foo=42)
+
+
+

You can now do something like this:

+
def index():
+    response = make_response(render_template('index.html', foo=42))
+    response.headers['X-Parachutes'] = 'parachutes are cool'
+    return response
+
+
+

This function accepts the very same arguments you can return from a +view function. This for example creates a response with a 404 error +code:

+
response = make_response(render_template('not_found.html'), 404)
+
+
+

The other use case of this function is to force the return value of a +view function into a response which is helpful with view +decorators:

+
response = make_response(view_function())
+response.headers['X-Parachutes'] = 'parachutes are cool'
+
+
+

Internally this function does the following things:

+ +
+Changelog
+

Added in version 0.6.

+
+
+
Parameters:
+

args (t.Any)

+
+
Return type:
+

Response

+
+
+
+ +
+
+flask.after_this_request(f)
+

Executes a function after this request. This is useful to modify +response objects. The function is passed the response object and has +to return the same or a new one.

+

Example:

+
@app.route('/')
+def index():
+    @after_this_request
+    def add_header(response):
+        response.headers['X-Foo'] = 'Parachute'
+        return response
+    return 'Hello World!'
+
+
+

This is more useful if a function other than the view function wants to +modify a response. For instance think of a decorator that wants to add +some headers without converting the return value into a response object.

+
+Changelog
+

Added in version 0.9.

+
+
+
Parameters:
+

f (Callable[[Any], Any] | Callable[[Any], Awaitable[Any]])

+
+
Return type:
+

Callable[[Any], Any] | Callable[[Any], Awaitable[Any]]

+
+
+
+ +
+
+flask.send_file(path_or_file, mimetype=None, as_attachment=False, download_name=None, conditional=True, etag=True, last_modified=None, max_age=None)
+

Send the contents of a file to the client.

+

The first argument can be a file path or a file-like object. Paths +are preferred in most cases because Werkzeug can manage the file and +get extra information from the path. Passing a file-like object +requires that the file is opened in binary mode, and is mostly +useful when building a file in memory with io.BytesIO.

+

Never pass file paths provided by a user. The path is assumed to be +trusted, so a user could craft a path to access a file you didn’t +intend. Use send_from_directory() to safely serve +user-requested paths from within a directory.

+

If the WSGI server sets a file_wrapper in environ, it is +used, otherwise Werkzeug’s built-in wrapper is used. Alternatively, +if the HTTP server supports X-Sendfile, configuring Flask with +USE_X_SENDFILE = True will tell the server to send the given +path, which is much more efficient than reading it in Python.

+
+
Parameters:
+
    +
  • path_or_file (os.PathLike[t.AnyStr] | str | t.BinaryIO) – The path to the file to send, relative to the +current working directory if a relative path is given. +Alternatively, a file-like object opened in binary mode. Make +sure the file pointer is seeked to the start of the data.

  • +
  • mimetype (str | None) – The MIME type to send for the file. If not +provided, it will try to detect it from the file name.

  • +
  • as_attachment (bool) – Indicate to a browser that it should offer to +save the file instead of displaying it.

  • +
  • download_name (str | None) – The default name browsers will use when saving +the file. Defaults to the passed file name.

  • +
  • conditional (bool) – Enable conditional and range responses based on +request headers. Requires passing a file path and environ.

  • +
  • etag (bool | str) – Calculate an ETag for the file, which requires passing +a file path. Can also be a string to use instead.

  • +
  • last_modified (datetime | int | float | None) – The last modified time to send for the file, +in seconds. If not provided, it will try to detect it from the +file path.

  • +
  • max_age (None | (int | t.Callable[[str | None], int | None])) – How long the client should cache the file, in +seconds. If set, Cache-Control will be public, otherwise +it will be no-cache to prefer conditional caching.

  • +
+
+
Return type:
+

Response

+
+
+
+Changelog
+

Changed in version 2.0: download_name replaces the attachment_filename +parameter. If as_attachment=False, it is passed with +Content-Disposition: inline instead.

+
+
+

Changed in version 2.0: max_age replaces the cache_timeout parameter. +conditional is enabled and max_age is not set by +default.

+
+
+

Changed in version 2.0: etag replaces the add_etags parameter. It can be a +string to use instead of generating one.

+
+
+

Changed in version 2.0: Passing a file-like object that inherits from +TextIOBase will raise a ValueError rather +than sending an empty file.

+
+
+

Added in version 2.0: Moved the implementation to Werkzeug. This is now a wrapper to +pass some Flask-specific arguments.

+
+
+

Changed in version 1.1: filename may be a PathLike object.

+
+
+

Changed in version 1.1: Passing a BytesIO object supports range requests.

+
+
+

Changed in version 1.0.3: Filenames are encoded with ASCII instead of Latin-1 for broader +compatibility with WSGI servers.

+
+
+

Changed in version 1.0: UTF-8 filenames as specified in RFC 2231 are supported.

+
+
+

Changed in version 0.12: The filename is no longer automatically inferred from file +objects. If you want to use automatic MIME and etag support, +pass a filename via filename_or_fp or +attachment_filename.

+
+
+

Changed in version 0.12: attachment_filename is preferred over filename for MIME +detection.

+
+
+

Changed in version 0.9: cache_timeout defaults to +Flask.get_send_file_max_age().

+
+
+

Changed in version 0.7: MIME guessing and etag support for file-like objects was +removed because it was unreliable. Pass a filename if you are +able to, otherwise attach an etag yourself.

+
+
+

Changed in version 0.5: The add_etags, cache_timeout and conditional +parameters were added. The default behavior is to add etags.

+
+
+

Added in version 0.2.

+
+
+ +
+
+flask.send_from_directory(directory, path, **kwargs)
+

Send a file from within a directory using send_file().

+
@app.route("/uploads/<path:name>")
+def download_file(name):
+    return send_from_directory(
+        app.config['UPLOAD_FOLDER'], name, as_attachment=True
+    )
+
+
+

This is a secure way to serve files from a folder, such as static +files or uploads. Uses safe_join() to +ensure the path coming from the client is not maliciously crafted to +point outside the specified directory.

+

If the final path does not point to an existing regular file, +raises a 404 NotFound error.

+
+
Parameters:
+
    +
  • directory (os.PathLike[str] | str) – The directory that path must be located under, +relative to the current application’s root path. This must not +be a value provided by the client, otherwise it becomes insecure.

  • +
  • path (os.PathLike[str] | str) – The path to the file to send, relative to +directory.

  • +
  • kwargs (t.Any) – Arguments to pass to send_file().

  • +
+
+
Return type:
+

Response

+
+
+
+Changelog
+

Changed in version 2.0: path replaces the filename parameter.

+
+
+

Added in version 2.0: Moved the implementation to Werkzeug. This is now a wrapper to +pass some Flask-specific arguments.

+
+
+

Added in version 0.5.

+
+
+ +
+
+

Message Flashing

+
+
+flask.flash(message, category='message')
+

Flashes a message to the next request. In order to remove the +flashed message from the session and to display it to the user, +the template has to call get_flashed_messages().

+
+Changelog
+

Changed in version 0.3: category parameter added.

+
+
+
Parameters:
+
    +
  • message (str) – the message to be flashed.

  • +
  • category (str) – the category for the message. The following values +are recommended: 'message' for any kind of message, +'error' for errors, 'info' for information +messages and 'warning' for warnings. However any +kind of string can be used as category.

  • +
+
+
Return type:
+

None

+
+
+
+ +
+
+flask.get_flashed_messages(with_categories=False, category_filter=())
+

Pulls all flashed messages from the session and returns them. +Further calls in the same request to the function will return +the same messages. By default just the messages are returned, +but when with_categories is set to True, the return value will +be a list of tuples in the form (category, message) instead.

+

Filter the flashed messages to one or more categories by providing those +categories in category_filter. This allows rendering categories in +separate html blocks. The with_categories and category_filter +arguments are distinct:

+
    +
  • with_categories controls whether categories are returned with message +text (True gives a tuple, where False gives just the message text).

  • +
  • category_filter filters the messages down to only those matching the +provided categories.

  • +
+

See Message Flashing for examples.

+
+Changelog
+

Changed in version 0.9: category_filter parameter added.

+
+
+

Changed in version 0.3: with_categories parameter added.

+
+
+
Parameters:
+
    +
  • with_categories (bool) – set to True to also receive categories.

  • +
  • category_filter (Iterable[str]) – filter of categories to limit return values. Only +categories in the list will be returned.

  • +
+
+
Return type:
+

list[str] | list[tuple[str, str]]

+
+
+
+ +
+
+

JSON Support

+

Flask uses Python’s built-in json module for handling JSON by +default. The JSON implementation can be changed by assigning a different +provider to flask.Flask.json_provider_class or +flask.Flask.json. The functions provided by flask.json will +use methods on app.json if an app context is active.

+

Jinja’s |tojson filter is configured to use the app’s JSON provider. +The filter marks the output with |safe. Use it to render data inside +HTML <script> tags.

+
<script>
+    const names = {{ names|tojson }};
+    renderChart(names, {{ axis_data|tojson }});
+</script>
+
+
+
+
+flask.json.jsonify(*args, **kwargs)
+

Serialize the given arguments as JSON, and return a +Response object with the application/json +mimetype. A dict or list returned from a view will be converted to a +JSON response automatically without needing to call this.

+

This requires an active request or application context, and calls +app.json.response().

+

In debug mode, the output is formatted with indentation to make it +easier to read. This may also be controlled by the provider.

+

Either positional or keyword arguments can be given, not both. +If no arguments are given, None is serialized.

+
+
Parameters:
+
    +
  • args (t.Any) – A single value to serialize, or multiple values to +treat as a list to serialize.

  • +
  • kwargs (t.Any) – Treat as a dict to serialize.

  • +
+
+
Return type:
+

Response

+
+
+
+Changelog
+

Changed in version 2.2: Calls current_app.json.response, allowing an app to override +the behavior.

+
+
+

Changed in version 2.0.2: decimal.Decimal is supported by converting to a string.

+
+
+

Changed in version 0.11: Added support for serializing top-level arrays. This was a +security risk in ancient browsers. See JSON Security.

+
+
+

Added in version 0.2.

+
+
+ +
+
+flask.json.dumps(obj, **kwargs)
+

Serialize data as JSON.

+

If current_app is available, it will use its +app.json.dumps() +method, otherwise it will use json.dumps().

+
+
Parameters:
+
    +
  • obj (Any) – The data to serialize.

  • +
  • kwargs (Any) – Arguments passed to the dumps implementation.

  • +
+
+
Return type:
+

str

+
+
+
+Changelog
+

Changed in version 2.3: The app parameter was removed.

+
+
+

Changed in version 2.2: Calls current_app.json.dumps, allowing an app to override +the behavior.

+
+
+

Changed in version 2.0.2: decimal.Decimal is supported by converting to a string.

+
+
+

Changed in version 2.0: encoding will be removed in Flask 2.1.

+
+
+

Changed in version 1.0.3: app can be passed directly, rather than requiring an app +context for configuration.

+
+
+ +
+
+flask.json.dump(obj, fp, **kwargs)
+

Serialize data as JSON and write to a file.

+

If current_app is available, it will use its +app.json.dump() +method, otherwise it will use json.dump().

+
+
Parameters:
+
    +
  • obj (Any) – The data to serialize.

  • +
  • fp (IO[str]) – A file opened for writing text. Should use the UTF-8 +encoding to be valid JSON.

  • +
  • kwargs (Any) – Arguments passed to the dump implementation.

  • +
+
+
Return type:
+

None

+
+
+
+Changelog
+

Changed in version 2.3: The app parameter was removed.

+
+
+

Changed in version 2.2: Calls current_app.json.dump, allowing an app to override +the behavior.

+
+
+

Changed in version 2.0: Writing to a binary file, and the encoding argument, will be +removed in Flask 2.1.

+
+
+ +
+
+flask.json.loads(s, **kwargs)
+

Deserialize data as JSON.

+

If current_app is available, it will use its +app.json.loads() +method, otherwise it will use json.loads().

+
+
Parameters:
+
    +
  • s (str | bytes) – Text or UTF-8 bytes.

  • +
  • kwargs (Any) – Arguments passed to the loads implementation.

  • +
+
+
Return type:
+

Any

+
+
+
+Changelog
+

Changed in version 2.3: The app parameter was removed.

+
+
+

Changed in version 2.2: Calls current_app.json.loads, allowing an app to override +the behavior.

+
+
+

Changed in version 2.0: encoding will be removed in Flask 2.1. The data must be a +string or UTF-8 bytes.

+
+
+

Changed in version 1.0.3: app can be passed directly, rather than requiring an app +context for configuration.

+
+
+ +
+
+flask.json.load(fp, **kwargs)
+

Deserialize data as JSON read from a file.

+

If current_app is available, it will use its +app.json.load() +method, otherwise it will use json.load().

+
+
Parameters:
+
    +
  • fp (IO) – A file opened for reading text or UTF-8 bytes.

  • +
  • kwargs (Any) – Arguments passed to the load implementation.

  • +
+
+
Return type:
+

Any

+
+
+
+Changelog
+

Changed in version 2.3: The app parameter was removed.

+
+
+

Changed in version 2.2: Calls current_app.json.load, allowing an app to override +the behavior.

+
+
+

Changed in version 2.2: The app parameter will be removed in Flask 2.3.

+
+
+

Changed in version 2.0: encoding will be removed in Flask 2.1. The file must be text +mode, or binary mode with UTF-8 bytes.

+
+
+ +
+
+class flask.json.provider.JSONProvider(app)
+

A standard set of JSON operations for an application. Subclasses +of this can be used to customize JSON behavior or use different +JSON libraries.

+

To implement a provider for a specific library, subclass this base +class and implement at least dumps() and loads(). All +other methods have default implementations.

+

To use a different provider, either subclass Flask and set +json_provider_class to a provider class, or set +app.json to an instance of the class.

+
+
Parameters:
+

app (App) – An application instance. This will be stored as a +weakref.proxy on the _app attribute.

+
+
+
+Changelog
+

Added in version 2.2.

+
+
+
+dumps(obj, **kwargs)
+

Serialize data as JSON.

+
+
Parameters:
+
    +
  • obj (Any) – The data to serialize.

  • +
  • kwargs (Any) – May be passed to the underlying JSON library.

  • +
+
+
Return type:
+

str

+
+
+
+ +
+
+dump(obj, fp, **kwargs)
+

Serialize data as JSON and write to a file.

+
+
Parameters:
+
    +
  • obj (Any) – The data to serialize.

  • +
  • fp (IO[str]) – A file opened for writing text. Should use the UTF-8 +encoding to be valid JSON.

  • +
  • kwargs (Any) – May be passed to the underlying JSON library.

  • +
+
+
Return type:
+

None

+
+
+
+ +
+
+loads(s, **kwargs)
+

Deserialize data as JSON.

+
+
Parameters:
+
    +
  • s (str | bytes) – Text or UTF-8 bytes.

  • +
  • kwargs (Any) – May be passed to the underlying JSON library.

  • +
+
+
Return type:
+

Any

+
+
+
+ +
+
+load(fp, **kwargs)
+

Deserialize data as JSON read from a file.

+
+
Parameters:
+
    +
  • fp (IO) – A file opened for reading text or UTF-8 bytes.

  • +
  • kwargs (Any) – May be passed to the underlying JSON library.

  • +
+
+
Return type:
+

Any

+
+
+
+ +
+
+response(*args, **kwargs)
+

Serialize the given arguments as JSON, and return a +Response object with the application/json +mimetype.

+

The jsonify() function calls this method for +the current application.

+

Either positional or keyword arguments can be given, not both. +If no arguments are given, None is serialized.

+
+
Parameters:
+
    +
  • args (t.Any) – A single value to serialize, or multiple values to +treat as a list to serialize.

  • +
  • kwargs (t.Any) – Treat as a dict to serialize.

  • +
+
+
Return type:
+

Response

+
+
+
+ +
+ +
+
+class flask.json.provider.DefaultJSONProvider(app)
+

Provide JSON operations using Python’s built-in json +library. Serializes the following additional data types:

+ +
+
Parameters:
+

app (App)

+
+
+
+
+static default(o)
+

Apply this function to any object that json.dumps() does +not know how to serialize. It should return a valid JSON type or +raise a TypeError.

+
+
Parameters:
+

o (Any)

+
+
Return type:
+

Any

+
+
+
+ +
+
+ensure_ascii = True
+

Replace non-ASCII characters with escape sequences. This may be +more compatible with some clients, but can be disabled for better +performance and size.

+
+ +
+
+sort_keys = True
+

Sort the keys in any serialized dicts. This may be useful for +some caching situations, but can be disabled for better performance. +When enabled, keys must all be strings, they are not converted +before sorting.

+
+ +
+
+compact: bool | None = None
+

If True, or None out of debug mode, the response() +output will not add indentation, newlines, or spaces. If False, +or None in debug mode, it will use a non-compact representation.

+
+ +
+
+mimetype = 'application/json'
+

The mimetype set in response().

+
+ +
+
+dumps(obj, **kwargs)
+

Serialize data as JSON to a string.

+

Keyword arguments are passed to json.dumps(). Sets some +parameter defaults from the default, +ensure_ascii, and sort_keys attributes.

+
+
Parameters:
+
+
+
Return type:
+

str

+
+
+
+ +
+
+loads(s, **kwargs)
+

Deserialize data as JSON from a string or bytes.

+
+
Parameters:
+
+
+
Return type:
+

Any

+
+
+
+ +
+
+response(*args, **kwargs)
+

Serialize the given arguments as JSON, and return a +Response object with it. The response mimetype +will be “application/json” and can be changed with +mimetype.

+

If compact is False or debug mode is enabled, the +output will be formatted to be easier to read.

+

Either positional or keyword arguments can be given, not both. +If no arguments are given, None is serialized.

+
+
Parameters:
+
    +
  • args (t.Any) – A single value to serialize, or multiple values to +treat as a list to serialize.

  • +
  • kwargs (t.Any) – Treat as a dict to serialize.

  • +
+
+
Return type:
+

Response

+
+
+
+ +
+ +
+

Tagged JSON

+

A compact representation for lossless serialization of non-standard JSON +types. SecureCookieSessionInterface uses this +to serialize the session data, but it may be useful in other places. It +can be extended to support other types.

+
+
+class flask.json.tag.TaggedJSONSerializer
+

Serializer that uses a tag system to compactly represent objects that +are not JSON types. Passed as the intermediate serializer to +itsdangerous.Serializer.

+

The following extra types are supported:

+ +
+
+
+
+default_tags = [<class 'flask.json.tag.TagDict'>, <class 'flask.json.tag.PassDict'>, <class 'flask.json.tag.TagTuple'>, <class 'flask.json.tag.PassList'>, <class 'flask.json.tag.TagBytes'>, <class 'flask.json.tag.TagMarkup'>, <class 'flask.json.tag.TagUUID'>, <class 'flask.json.tag.TagDateTime'>]
+

Tag classes to bind when creating the serializer. Other tags can be +added later using register().

+
+ +
+
+register(tag_class, force=False, index=None)
+

Register a new tag with this serializer.

+
+
Parameters:
+
    +
  • tag_class (type[JSONTag]) – tag class to register. Will be instantiated with this +serializer instance.

  • +
  • force (bool) – overwrite an existing tag. If false (default), a +KeyError is raised.

  • +
  • index (int | None) – index to insert the new tag in the tag order. Useful when +the new tag is a special case of an existing tag. If None +(default), the tag is appended to the end of the order.

  • +
+
+
Raises:
+

KeyError – if the tag key is already registered and force is +not true.

+
+
Return type:
+

None

+
+
+
+ +
+
+tag(value)
+

Convert a value to a tagged representation if necessary.

+
+
Parameters:
+

value (Any)

+
+
Return type:
+

Any

+
+
+
+ +
+
+untag(value)
+

Convert a tagged representation back to the original type.

+
+
Parameters:
+

value (dict[str, Any])

+
+
Return type:
+

Any

+
+
+
+ +
+
+dumps(value)
+

Tag the value and dump it to a compact JSON string.

+
+
Parameters:
+

value (Any)

+
+
Return type:
+

str

+
+
+
+ +
+
+loads(value)
+

Load data from a JSON string and deserialized any tagged objects.

+
+
Parameters:
+

value (str)

+
+
Return type:
+

Any

+
+
+
+ +
+ +
+
+class flask.json.tag.JSONTag(serializer)
+

Base class for defining type tags for TaggedJSONSerializer.

+
+
Parameters:
+

serializer (TaggedJSONSerializer)

+
+
+
+
+key: str = ''
+

The tag to mark the serialized object with. If empty, this tag is +only used as an intermediate step during tagging.

+
+ +
+
+check(value)
+

Check if the given value should be tagged by this tag.

+
+
Parameters:
+

value (Any)

+
+
Return type:
+

bool

+
+
+
+ +
+
+to_json(value)
+

Convert the Python object to an object that is a valid JSON type. +The tag will be added later.

+
+
Parameters:
+

value (Any)

+
+
Return type:
+

Any

+
+
+
+ +
+
+to_python(value)
+

Convert the JSON representation back to the correct type. The tag +will already be removed.

+
+
Parameters:
+

value (Any)

+
+
Return type:
+

Any

+
+
+
+ +
+
+tag(value)
+

Convert the value to a valid JSON type and add the tag structure +around it.

+
+
Parameters:
+

value (Any)

+
+
Return type:
+

dict[str, Any]

+
+
+
+ +
+ +

Let’s see an example that adds support for +OrderedDict. Dicts don’t have an order in JSON, so +to handle this we will dump the items as a list of [key, value] +pairs. Subclass JSONTag and give it the new key ' od' to +identify the type. The session serializer processes dicts first, so +insert the new tag at the front of the order since OrderedDict must +be processed before dict.

+
from flask.json.tag import JSONTag
+
+class TagOrderedDict(JSONTag):
+    __slots__ = ('serializer',)
+    key = ' od'
+
+    def check(self, value):
+        return isinstance(value, OrderedDict)
+
+    def to_json(self, value):
+        return [[k, self.serializer.tag(v)] for k, v in iteritems(value)]
+
+    def to_python(self, value):
+        return OrderedDict(value)
+
+app.session_interface.serializer.register(TagOrderedDict, index=0)
+
+
+
+
+
+

Template Rendering

+
+
+flask.render_template(template_name_or_list, **context)
+

Render a template by name with the given context.

+
+
Parameters:
+
    +
  • template_name_or_list (str | Template | list[str | Template]) – The name of the template to render. If +a list is given, the first name to exist will be rendered.

  • +
  • context (Any) – The variables to make available in the template.

  • +
+
+
Return type:
+

str

+
+
+
+ +
+
+flask.render_template_string(source, **context)
+

Render a template from the given source string with the given +context.

+
+
Parameters:
+
    +
  • source (str) – The source code of the template to render.

  • +
  • context (Any) – The variables to make available in the template.

  • +
+
+
Return type:
+

str

+
+
+
+ +
+
+flask.stream_template(template_name_or_list, **context)
+

Render a template by name with the given context as a stream. +This returns an iterator of strings, which can be used as a +streaming response from a view.

+
+
Parameters:
+
    +
  • template_name_or_list (str | Template | list[str | Template]) – The name of the template to render. If +a list is given, the first name to exist will be rendered.

  • +
  • context (Any) – The variables to make available in the template.

  • +
+
+
Return type:
+

Iterator[str]

+
+
+
+Changelog
+

Added in version 2.2.

+
+
+ +
+
+flask.stream_template_string(source, **context)
+

Render a template from the given source string with the given +context as a stream. This returns an iterator of strings, which can +be used as a streaming response from a view.

+
+
Parameters:
+
    +
  • source (str) – The source code of the template to render.

  • +
  • context (Any) – The variables to make available in the template.

  • +
+
+
Return type:
+

Iterator[str]

+
+
+
+Changelog
+

Added in version 2.2.

+
+
+ +
+
+flask.get_template_attribute(template_name, attribute)
+

Loads a macro (or variable) a template exports. This can be used to +invoke a macro from within Python code. If you for example have a +template named _cider.html with the following contents:

+
{% macro hello(name) %}Hello {{ name }}!{% endmacro %}
+
+
+

You can access this from Python code like this:

+
hello = get_template_attribute('_cider.html', 'hello')
+return hello('World')
+
+
+
+Changelog
+

Added in version 0.2.

+
+
+
Parameters:
+
    +
  • template_name (str) – the name of the template

  • +
  • attribute (str) – the name of the variable of macro to access

  • +
+
+
Return type:
+

Any

+
+
+
+ +
+
+

Configuration

+
+
+class flask.Config(root_path, defaults=None)
+

Works exactly like a dict but provides ways to fill it from files +or special dictionaries. There are two common patterns to populate the +config.

+

Either you can fill the config from a config file:

+
app.config.from_pyfile('yourconfig.cfg')
+
+
+

Or alternatively you can define the configuration options in the +module that calls from_object() or provide an import path to +a module that should be loaded. It is also possible to tell it to +use the same module and with that provide the configuration values +just before the call:

+
DEBUG = True
+SECRET_KEY = 'development key'
+app.config.from_object(__name__)
+
+
+

In both cases (loading from any Python file or loading from modules), +only uppercase keys are added to the config. This makes it possible to use +lowercase values in the config file for temporary values that are not added +to the config or to define the config keys in the same file that implements +the application.

+

Probably the most interesting way to load configurations is from an +environment variable pointing to a file:

+
app.config.from_envvar('YOURAPPLICATION_SETTINGS')
+
+
+

In this case before launching the application you have to set this +environment variable to the file you want to use. On Linux and OS X +use the export statement:

+
export YOURAPPLICATION_SETTINGS='/path/to/config/file'
+
+
+

On windows use set instead.

+
+
Parameters:
+
    +
  • root_path (str | os.PathLike[str]) – path to which files are read relative from. When the +config object is created by the application, this is +the application’s root_path.

  • +
  • defaults (dict[str, t.Any] | None) – an optional dictionary of default values

  • +
+
+
+
+
+from_envvar(variable_name, silent=False)
+

Loads a configuration from an environment variable pointing to +a configuration file. This is basically just a shortcut with nicer +error messages for this line of code:

+
app.config.from_pyfile(os.environ['YOURAPPLICATION_SETTINGS'])
+
+
+
+
Parameters:
+
    +
  • variable_name (str) – name of the environment variable

  • +
  • silent (bool) – set to True if you want silent failure for missing +files.

  • +
+
+
Returns:
+

True if the file was loaded successfully.

+
+
Return type:
+

bool

+
+
+
+ +
+
+from_prefixed_env(prefix='FLASK', *, loads=json.loads)
+

Load any environment variables that start with FLASK_, +dropping the prefix from the env key for the config key. Values +are passed through a loading function to attempt to convert them +to more specific types than strings.

+

Keys are loaded in sorted() order.

+

The default loading function attempts to parse values as any +valid JSON type, including dicts and lists.

+

Specific items in nested dicts can be set by separating the +keys with double underscores (__). If an intermediate key +doesn’t exist, it will be initialized to an empty dict.

+
+
Parameters:
+
    +
  • prefix (str) – Load env vars that start with this prefix, +separated with an underscore (_).

  • +
  • loads (Callable[[str], Any]) – Pass each string value to this function and use +the returned value as the config value. If any error is +raised it is ignored and the value remains a string. The +default is json.loads().

  • +
+
+
Return type:
+

bool

+
+
+
+Changelog
+

Added in version 2.1.

+
+
+ +
+
+from_pyfile(filename, silent=False)
+

Updates the values in the config from a Python file. This function +behaves as if the file was imported as module with the +from_object() function.

+
+
Parameters:
+
    +
  • filename (str | PathLike[str]) – the filename of the config. This can either be an +absolute filename or a filename relative to the +root path.

  • +
  • silent (bool) – set to True if you want silent failure for missing +files.

  • +
+
+
Returns:
+

True if the file was loaded successfully.

+
+
Return type:
+

bool

+
+
+
+Changelog
+

Added in version 0.7: silent parameter.

+
+
+ +
+
+from_object(obj)
+

Updates the values from the given object. An object can be of one +of the following two types:

+
    +
  • a string: in this case the object with that name will be imported

  • +
  • an actual object reference: that object is used directly

  • +
+

Objects are usually either modules or classes. from_object() +loads only the uppercase attributes of the module/class. A dict +object will not work with from_object() because the keys of a +dict are not attributes of the dict class.

+

Example of module-based configuration:

+
app.config.from_object('yourapplication.default_config')
+from yourapplication import default_config
+app.config.from_object(default_config)
+
+
+

Nothing is done to the object before loading. If the object is a +class and has @property attributes, it needs to be +instantiated before being passed to this method.

+

You should not use this function to load the actual configuration but +rather configuration defaults. The actual config should be loaded +with from_pyfile() and ideally from a location not within the +package because the package might be installed system wide.

+

See Development / Production for an example of class-based configuration +using from_object().

+
+
Parameters:
+

obj (object | str) – an import name or object

+
+
Return type:
+

None

+
+
+
+ +
+
+from_file(filename, load, silent=False, text=True)
+

Update the values in the config from a file that is loaded +using the load parameter. The loaded data is passed to the +from_mapping() method.

+
import json
+app.config.from_file("config.json", load=json.load)
+
+import tomllib
+app.config.from_file("config.toml", load=tomllib.load, text=False)
+
+
+
+
Parameters:
+
    +
  • filename (str | PathLike[str]) – The path to the data file. This can be an +absolute path or relative to the config root path.

  • +
  • load (Callable[[Reader], Mapping] where Reader +implements a read method.) – A callable that takes a file handle and returns a +mapping of loaded data from the file.

  • +
  • silent (bool) – Ignore the file if it doesn’t exist.

  • +
  • text (bool) – Open the file in text or binary mode.

  • +
+
+
Returns:
+

True if the file was loaded successfully.

+
+
Return type:
+

bool

+
+
+
+Changelog
+

Changed in version 2.3: The text parameter was added.

+
+
+

Added in version 2.0.

+
+
+ +
+
+from_mapping(mapping=None, **kwargs)
+

Updates the config like update() ignoring items with +non-upper keys.

+
+
Returns:
+

Always returns True.

+
+
Parameters:
+
+
+
Return type:
+

bool

+
+
+
+Changelog
+

Added in version 0.11.

+
+
+ +
+
+get_namespace(namespace, lowercase=True, trim_namespace=True)
+

Returns a dictionary containing a subset of configuration options +that match the specified namespace/prefix. Example usage:

+
app.config['IMAGE_STORE_TYPE'] = 'fs'
+app.config['IMAGE_STORE_PATH'] = '/var/app/images'
+app.config['IMAGE_STORE_BASE_URL'] = 'http://img.website.com'
+image_store_config = app.config.get_namespace('IMAGE_STORE_')
+
+
+

The resulting dictionary image_store_config would look like:

+
{
+    'type': 'fs',
+    'path': '/var/app/images',
+    'base_url': 'http://img.website.com'
+}
+
+
+

This is often useful when configuration options map directly to +keyword arguments in functions or class constructors.

+
+
Parameters:
+
    +
  • namespace (str) – a configuration namespace

  • +
  • lowercase (bool) – a flag indicating if the keys of the resulting +dictionary should be lowercase

  • +
  • trim_namespace (bool) – a flag indicating if the keys of the resulting +dictionary should not include the namespace

  • +
+
+
Return type:
+

dict[str, Any]

+
+
+
+Changelog
+

Added in version 0.11.

+
+
+ +
+ +
+
+

Stream Helpers

+
+
+flask.stream_with_context(generator_or_function: Iterator) Iterator
+
+flask.stream_with_context(generator_or_function: Callable[[...], Iterator]) Callable[[Iterator], Iterator]
+

Request contexts disappear when the response is started on the server. +This is done for efficiency reasons and to make it less likely to encounter +memory leaks with badly written WSGI middlewares. The downside is that if +you are using streamed responses, the generator cannot access request bound +information any more.

+

This function however can help you keep the context around for longer:

+
from flask import stream_with_context, request, Response
+
+@app.route('/stream')
+def streamed_response():
+    @stream_with_context
+    def generate():
+        yield 'Hello '
+        yield request.args['name']
+        yield '!'
+    return Response(generate())
+
+
+

Alternatively it can also be used around a specific generator:

+
from flask import stream_with_context, request, Response
+
+@app.route('/stream')
+def streamed_response():
+    def generate():
+        yield 'Hello '
+        yield request.args['name']
+        yield '!'
+    return Response(stream_with_context(generate()))
+
+
+
+Changelog
+

Added in version 0.9.

+
+
+ +
+
+

Useful Internals

+
+
+class flask.ctx.RequestContext(app, environ, request=None, session=None)
+

The request context contains per-request information. The Flask +app creates and pushes it at the beginning of the request, then pops +it at the end of the request. It will create the URL adapter and +request object for the WSGI environment provided.

+

Do not attempt to use this class directly, instead use +test_request_context() and +request_context() to create this object.

+

When the request context is popped, it will evaluate all the +functions registered on the application for teardown execution +(teardown_request()).

+

The request context is automatically popped at the end of the +request. When using the interactive debugger, the context will be +restored so request is still accessible. Similarly, the test +client can preserve the context after the request ends. However, +teardown functions may already have closed some resources such as +database connections.

+
+
Parameters:
+
+
+
+
+
+copy()
+

Creates a copy of this request context with the same request object. +This can be used to move a request context to a different greenlet. +Because the actual request object is the same this cannot be used to +move a request context to a different thread unless access to the +request object is locked.

+
+Changelog
+

Changed in version 1.1: The current session object is used instead of reloading the original +data. This prevents flask.session pointing to an out-of-date object.

+
+
+

Added in version 0.10.

+
+
+
Return type:
+

RequestContext

+
+
+
+ +
+
+match_request()
+

Can be overridden by a subclass to hook into the matching +of the request.

+
+
Return type:
+

None

+
+
+
+ +
+
+pop(exc=_sentinel)
+

Pops the request context and unbinds it by doing that. This will +also trigger the execution of functions registered by the +teardown_request() decorator.

+
+Changelog
+

Changed in version 0.9: Added the exc argument.

+
+
+
Parameters:
+

exc (BaseException | None)

+
+
Return type:
+

None

+
+
+
+ +
+ +
+
+flask.globals.request_ctx
+

The current RequestContext. If a request context +is not active, accessing attributes on this proxy will raise a +RuntimeError.

+

This is an internal object that is essential to how Flask handles +requests. Accessing this should not be needed in most cases. Most +likely you want request and session instead.

+
+ +
+
+class flask.ctx.AppContext(app)
+

The app context contains application-specific information. An app +context is created and pushed at the beginning of each request if +one is not already active. An app context is also pushed when +running CLI commands.

+
+
Parameters:
+

app (Flask)

+
+
+
+
+push()
+

Binds the app context to the current context.

+
+
Return type:
+

None

+
+
+
+ +
+
+pop(exc=_sentinel)
+

Pops the app context.

+
+
Parameters:
+

exc (BaseException | None)

+
+
Return type:
+

None

+
+
+
+ +
+ +
+
+flask.globals.app_ctx
+

The current AppContext. If an app context is not +active, accessing attributes on this proxy will raise a +RuntimeError.

+

This is an internal object that is essential to how Flask handles +requests. Accessing this should not be needed in most cases. Most +likely you want current_app and g instead.

+
+ +
+
+class flask.blueprints.BlueprintSetupState(blueprint, app, options, first_registration)
+

Temporary holder object for registering a blueprint with the +application. An instance of this class is created by the +make_setup_state() method and later passed +to all register callback functions.

+
+
Parameters:
+
    +
  • blueprint (Blueprint)

  • +
  • app (App)

  • +
  • options (t.Any)

  • +
  • first_registration (bool)

  • +
+
+
+
+
+app
+

a reference to the current application

+
+ +
+
+blueprint
+

a reference to the blueprint that created this setup state.

+
+ +
+
+options
+

a dictionary with all options that were passed to the +register_blueprint() method.

+
+ +
+
+first_registration
+

as blueprints can be registered multiple times with the +application and not everything wants to be registered +multiple times on it, this attribute can be used to figure +out if the blueprint was registered in the past already.

+
+ +
+
+subdomain
+

The subdomain that the blueprint should be active for, None +otherwise.

+
+ +
+
+url_prefix
+

The prefix that should be used for all URLs defined on the +blueprint.

+
+ +
+
+url_defaults
+

A dictionary with URL defaults that is added to each and every +URL that was defined with the blueprint.

+
+ +
+
+add_url_rule(rule, endpoint=None, view_func=None, **options)
+

A helper method to register a rule (and optionally a view function) +to the application. The endpoint is automatically prefixed with the +blueprint’s name.

+
+
Parameters:
+
    +
  • rule (str)

  • +
  • endpoint (str | None)

  • +
  • view_func (ft.RouteCallable | None)

  • +
  • options (t.Any)

  • +
+
+
Return type:
+

None

+
+
+
+ +
+ +
+
+

Signals

+

Signals are provided by the Blinker library. See Signals for an introduction.

+
+
+flask.template_rendered
+

This signal is sent when a template was successfully rendered. The +signal is invoked with the instance of the template as template +and the context as dictionary (named context).

+

Example subscriber:

+
def log_template_renders(sender, template, context, **extra):
+    sender.logger.debug('Rendering template "%s" with context %s',
+                        template.name or 'string template',
+                        context)
+
+from flask import template_rendered
+template_rendered.connect(log_template_renders, app)
+
+
+
+ +
+
+flask.before_render_template
+

This signal is sent before template rendering process. The +signal is invoked with the instance of the template as template +and the context as dictionary (named context).

+

Example subscriber:

+
def log_template_renders(sender, template, context, **extra):
+    sender.logger.debug('Rendering template "%s" with context %s',
+                        template.name or 'string template',
+                        context)
+
+from flask import before_render_template
+before_render_template.connect(log_template_renders, app)
+
+
+
+ +
+
+flask.request_started
+

This signal is sent when the request context is set up, before +any request processing happens. Because the request context is already +bound, the subscriber can access the request with the standard global +proxies such as request.

+

Example subscriber:

+
def log_request(sender, **extra):
+    sender.logger.debug('Request context is set up')
+
+from flask import request_started
+request_started.connect(log_request, app)
+
+
+
+ +
+
+flask.request_finished
+

This signal is sent right before the response is sent to the client. +It is passed the response to be sent named response.

+

Example subscriber:

+
def log_response(sender, response, **extra):
+    sender.logger.debug('Request context is about to close down. '
+                        'Response: %s', response)
+
+from flask import request_finished
+request_finished.connect(log_response, app)
+
+
+
+ +
+
+flask.got_request_exception
+

This signal is sent when an unhandled exception happens during +request processing, including when debugging. The exception is +passed to the subscriber as exception.

+

This signal is not sent for +HTTPException, or other exceptions that +have error handlers registered, unless the exception was raised from +an error handler.

+

This example shows how to do some extra logging if a theoretical +SecurityException was raised:

+
from flask import got_request_exception
+
+def log_security_exception(sender, exception, **extra):
+    if not isinstance(exception, SecurityException):
+        return
+
+    security_logger.exception(
+        f"SecurityException at {request.url!r}",
+        exc_info=exception,
+    )
+
+got_request_exception.connect(log_security_exception, app)
+
+
+
+ +
+
+flask.request_tearing_down
+

This signal is sent when the request is tearing down. This is always +called, even if an exception is caused. Currently functions listening +to this signal are called after the regular teardown handlers, but this +is not something you can rely on.

+

Example subscriber:

+
def close_db_connection(sender, **extra):
+    session.close()
+
+from flask import request_tearing_down
+request_tearing_down.connect(close_db_connection, app)
+
+
+

As of Flask 0.9, this will also be passed an exc keyword argument +that has a reference to the exception that caused the teardown if +there was one.

+
+ +
+
+flask.appcontext_tearing_down
+

This signal is sent when the app context is tearing down. This is always +called, even if an exception is caused. Currently functions listening +to this signal are called after the regular teardown handlers, but this +is not something you can rely on.

+

Example subscriber:

+
def close_db_connection(sender, **extra):
+    session.close()
+
+from flask import appcontext_tearing_down
+appcontext_tearing_down.connect(close_db_connection, app)
+
+
+

This will also be passed an exc keyword argument that has a reference +to the exception that caused the teardown if there was one.

+
+ +
+
+flask.appcontext_pushed
+

This signal is sent when an application context is pushed. The sender +is the application. This is usually useful for unittests in order to +temporarily hook in information. For instance it can be used to +set a resource early onto the g object.

+

Example usage:

+
from contextlib import contextmanager
+from flask import appcontext_pushed
+
+@contextmanager
+def user_set(app, user):
+    def handler(sender, **kwargs):
+        g.user = user
+    with appcontext_pushed.connected_to(handler, app):
+        yield
+
+
+

And in the testcode:

+
def test_user_me(self):
+    with user_set(app, 'john'):
+        c = app.test_client()
+        resp = c.get('/users/me')
+        assert resp.data == 'username=john'
+
+
+
+Changelog
+

Added in version 0.10.

+
+
+ +
+
+flask.appcontext_popped
+

This signal is sent when an application context is popped. The sender +is the application. This usually falls in line with the +appcontext_tearing_down signal.

+
+Changelog
+

Added in version 0.10.

+
+
+ +
+
+flask.message_flashed
+

This signal is sent when the application is flashing a message. The +messages is sent as message keyword argument and the category as +category.

+

Example subscriber:

+
recorded = []
+def record(sender, message, category, **extra):
+    recorded.append((message, category))
+
+from flask import message_flashed
+message_flashed.connect(record, app)
+
+
+
+Changelog
+

Added in version 0.10.

+
+
+ +
+
+

Class-Based Views

+
+Changelog
+

Added in version 0.7.

+
+
+
+class flask.views.View
+

Subclass this class and override dispatch_request() to +create a generic class-based view. Call as_view() to create a +view function that creates an instance of the class with the given +arguments and calls its dispatch_request method with any URL +variables.

+

See Class-based Views for a detailed guide.

+
class Hello(View):
+    init_every_request = False
+
+    def dispatch_request(self, name):
+        return f"Hello, {name}!"
+
+app.add_url_rule(
+    "/hello/<name>", view_func=Hello.as_view("hello")
+)
+
+
+

Set methods on the class to change what methods the view +accepts.

+

Set decorators on the class to apply a list of decorators to +the generated view function. Decorators applied to the class itself +will not be applied to the generated view function!

+

Set init_every_request to False for efficiency, unless +you need to store request-global data on self.

+
+
+methods: ClassVar[Collection[str] | None] = None
+

The methods this view is registered for. Uses the same default +(["GET", "HEAD", "OPTIONS"]) as route and +add_url_rule by default.

+
+ +
+
+provide_automatic_options: ClassVar[bool | None] = None
+

Control whether the OPTIONS method is handled automatically. +Uses the same default (True) as route and +add_url_rule by default.

+
+ +
+
+decorators: ClassVar[list[Callable[[...], Any]]] = []
+

A list of decorators to apply, in order, to the generated view +function. Remember that @decorator syntax is applied bottom +to top, so the first decorator in the list would be the bottom +decorator.

+
+Changelog
+

Added in version 0.8.

+
+
+ +
+
+init_every_request: ClassVar[bool] = True
+

Create a new instance of this view class for every request by +default. If a view subclass sets this to False, the same +instance is used for every request.

+

A single instance is more efficient, especially if complex setup +is done during init. However, storing data on self is no +longer safe across requests, and g should be used +instead.

+
+Changelog
+

Added in version 2.2.

+
+
+ +
+
+dispatch_request()
+

The actual view function behavior. Subclasses must override +this and return a valid response. Any variables from the URL +rule are passed as keyword arguments.

+
+
Return type:
+

ft.ResponseReturnValue

+
+
+
+ +
+
+classmethod as_view(name, *class_args, **class_kwargs)
+

Convert the class into a view function that can be registered +for a route.

+

By default, the generated view will create a new instance of the +view class for every request and call its +dispatch_request() method. If the view class sets +init_every_request to False, the same instance will +be used for every request.

+

Except for name, all other arguments passed to this method +are forwarded to the view class __init__ method.

+
+Changelog
+

Changed in version 2.2: Added the init_every_request class attribute.

+
+
+
Parameters:
+
    +
  • name (str)

  • +
  • class_args (t.Any)

  • +
  • class_kwargs (t.Any)

  • +
+
+
Return type:
+

ft.RouteCallable

+
+
+
+ +
+ +
+
+class flask.views.MethodView
+

Dispatches request methods to the corresponding instance methods. +For example, if you implement a get method, it will be used to +handle GET requests.

+

This can be useful for defining a REST API.

+

methods is automatically set based on the methods defined on +the class.

+

See Class-based Views for a detailed guide.

+
class CounterAPI(MethodView):
+    def get(self):
+        return str(session.get("counter", 0))
+
+    def post(self):
+        session["counter"] = session.get("counter", 0) + 1
+        return redirect(url_for("counter"))
+
+app.add_url_rule(
+    "/counter", view_func=CounterAPI.as_view("counter")
+)
+
+
+
+
+dispatch_request(**kwargs)
+

The actual view function behavior. Subclasses must override +this and return a valid response. Any variables from the URL +rule are passed as keyword arguments.

+
+
Parameters:
+

kwargs (t.Any)

+
+
Return type:
+

ft.ResponseReturnValue

+
+
+
+ +
+ +
+
+

URL Route Registrations

+

Generally there are three ways to define rules for the routing system:

+
    +
  1. You can use the flask.Flask.route() decorator.

  2. +
  3. You can use the flask.Flask.add_url_rule() function.

  4. +
  5. You can directly access the underlying Werkzeug routing system +which is exposed as flask.Flask.url_map.

  6. +
+

Variable parts in the route can be specified with angular brackets +(/user/<username>). By default a variable part in the URL accepts any +string without a slash however a different converter can be specified as +well by using <converter:name>.

+

Variable parts are passed to the view function as keyword arguments.

+

The following converters are available:

+ + + + + + + + + + + + + + + + + + + + + +

string

accepts any text without a slash (the default)

int

accepts integers

float

like int but for floating point values

path

like the default but also accepts slashes

any

matches one of the items provided

uuid

accepts UUID strings

+

Custom converters can be defined using flask.Flask.url_map.

+

Here are some examples:

+
@app.route('/')
+def index():
+    pass
+
+@app.route('/<username>')
+def show_user(username):
+    pass
+
+@app.route('/post/<int:post_id>')
+def show_post(post_id):
+    pass
+
+
+

An important detail to keep in mind is how Flask deals with trailing +slashes. The idea is to keep each URL unique so the following rules +apply:

+
    +
  1. If a rule ends with a slash and is requested without a slash by the +user, the user is automatically redirected to the same page with a +trailing slash attached.

  2. +
  3. If a rule does not end with a trailing slash and the user requests the +page with a trailing slash, a 404 not found is raised.

  4. +
+

This is consistent with how web servers deal with static files. This +also makes it possible to use relative link targets safely.

+

You can also define multiple rules for the same function. They have to be +unique however. Defaults can also be specified. Here for example is a +definition for a URL that accepts an optional page:

+
@app.route('/users/', defaults={'page': 1})
+@app.route('/users/page/<int:page>')
+def show_users(page):
+    pass
+
+
+

This specifies that /users/ will be the URL for page one and +/users/page/N will be the URL for page N.

+

If a URL contains a default value, it will be redirected to its simpler +form with a 301 redirect. In the above example, /users/page/1 will +be redirected to /users/. If your route handles GET and POST +requests, make sure the default route only handles GET, as redirects +can’t preserve form data.

+
@app.route('/region/', defaults={'id': 1})
+@app.route('/region/<int:id>', methods=['GET', 'POST'])
+def region(id):
+   pass
+
+
+

Here are the parameters that route() and +add_url_rule() accept. The only difference is that +with the route parameter the view function is defined with the decorator +instead of the view_func parameter.

+ + + + + + + + + + + + + + + + + + + + + +

rule

the URL rule as string

endpoint

the endpoint for the registered URL rule. Flask itself +assumes that the name of the view function is the name +of the endpoint if not explicitly stated.

view_func

the function to call when serving a request to the +provided endpoint. If this is not provided one can +specify the function later by storing it in the +view_functions dictionary with the +endpoint as key.

defaults

A dictionary with defaults for this rule. See the +example above for how defaults work.

subdomain

specifies the rule for the subdomain in case subdomain +matching is in use. If not specified the default +subdomain is assumed.

**options

the options to be forwarded to the underlying +Rule object. A change to +Werkzeug is handling of method options. methods is a list +of methods this rule should be limited to (GET, POST +etc.). By default a rule just listens for GET (and +implicitly HEAD). Starting with Flask 0.6, OPTIONS is +implicitly added and handled by the standard request +handling. They have to be specified as keyword arguments.

+
+
+

View Function Options

+

For internal usage the view functions can have some attributes attached to +customize behavior the view function would normally not have control over. +The following attributes can be provided optionally to either override +some defaults to add_url_rule() or general behavior:

+
    +
  • __name__: The name of a function is by default used as endpoint. If +endpoint is provided explicitly this value is used. Additionally this +will be prefixed with the name of the blueprint by default which +cannot be customized from the function itself.

  • +
  • methods: If methods are not provided when the URL rule is added, +Flask will look on the view function object itself if a methods +attribute exists. If it does, it will pull the information for the +methods from there.

  • +
  • provide_automatic_options: if this attribute is set Flask will +either force enable or disable the automatic implementation of the +HTTP OPTIONS response. This can be useful when working with +decorators that want to customize the OPTIONS response on a per-view +basis.

  • +
  • required_methods: if this attribute is set, Flask will always add +these methods when registering a URL rule even if the methods were +explicitly overridden in the route() call.

  • +
+

Full example:

+
def index():
+    if request.method == 'OPTIONS':
+        # custom options handling here
+        ...
+    return 'Hello World!'
+index.provide_automatic_options = False
+index.methods = ['GET', 'OPTIONS']
+
+app.add_url_rule('/', index)
+
+
+
+Changelog
+

Added in version 0.8: The provide_automatic_options functionality was added.

+
+
+
+

Command Line Interface

+
+
+class flask.cli.FlaskGroup(add_default_commands=True, create_app=None, add_version_option=True, load_dotenv=True, set_debug_flag=True, **extra)
+

Special subclass of the AppGroup group that supports +loading more commands from the configured Flask app. Normally a +developer does not have to interface with this class but there are +some very advanced use cases for which it makes sense to create an +instance of this. see Custom Scripts.

+
+
Parameters:
+
    +
  • add_default_commands (bool) – if this is True then the default run and +shell commands will be added.

  • +
  • add_version_option (bool) – adds the --version option.

  • +
  • create_app (t.Callable[..., Flask] | None) – an optional callback that is passed the script info and +returns the loaded app.

  • +
  • load_dotenv (bool) – Load the nearest .env and .flaskenv +files to set environment variables. Will also change the working +directory to the directory containing the first file found.

  • +
  • set_debug_flag (bool) – Set the app’s debug flag.

  • +
  • extra (t.Any)

  • +
+
+
+
+

Changed in version 3.1: -e path takes precedence over default .env and .flaskenv files.

+
+
+Changelog
+

Changed in version 2.2: Added the -A/--app, --debug/--no-debug, -e/--env-file options.

+
+
+

Changed in version 2.2: An app context is pushed when running app.cli commands, so +@with_appcontext is no longer required for those commands.

+
+
+

Changed in version 1.0: If installed, python-dotenv will be used to load environment variables +from .env and .flaskenv files.

+
+
+
+get_command(ctx, name)
+

Given a context and a command name, this returns a +Command object if it exists or returns None.

+
+
Parameters:
+
+
+
Return type:
+

Command | None

+
+
+
+ +
+
+list_commands(ctx)
+

Returns a list of subcommand names in the order they should +appear.

+
+
Parameters:
+

ctx (Context)

+
+
Return type:
+

list[str]

+
+
+
+ +
+
+make_context(info_name, args, parent=None, **extra)
+

This function when given an info name and arguments will kick +off the parsing and create a new Context. It does not +invoke the actual command callback though.

+

To quickly customize the context class used without overriding +this method, set the context_class attribute.

+
+
Parameters:
+
    +
  • info_name (str | None) – the info name for this invocation. Generally this +is the most descriptive name for the script or +command. For the toplevel script it’s usually +the name of the script, for commands below it’s +the name of the command.

  • +
  • args (list[str]) – the arguments to parse as list of strings.

  • +
  • parent (Context | None) – the parent context if available.

  • +
  • extra (Any) – extra keyword arguments forwarded to the context +constructor.

  • +
+
+
Return type:
+

Context

+
+
+
+

Changed in version 8.0: Added the context_class attribute.

+
+
+ +
+
+parse_args(ctx, args)
+

Given a context and a list of arguments this creates the parser +and parses the arguments, then modifies the context as necessary. +This is automatically invoked by make_context().

+
+
Parameters:
+
+
+
Return type:
+

list[str]

+
+
+
+ +
+ +
+
+class flask.cli.AppGroup(name=None, commands=None, **attrs)
+

This works similar to a regular click Group but it +changes the behavior of the command() decorator so that it +automatically wraps the functions in with_appcontext().

+

Not to be confused with FlaskGroup.

+
+
Parameters:
+
+
+
+
+
+command(*args, **kwargs)
+

This works exactly like the method of the same name on a regular +click.Group but it wraps callbacks in with_appcontext() +unless it’s disabled by passing with_appcontext=False.

+
+
Parameters:
+
+
+
Return type:
+

Callable[[Callable[[…], Any]], Command]

+
+
+
+ +
+
+group(*args, **kwargs)
+

This works exactly like the method of the same name on a regular +click.Group but it defaults the group class to +AppGroup.

+
+
Parameters:
+
+
+
Return type:
+

Callable[[Callable[[…], Any]], Group]

+
+
+
+ +
+ +
+
+class flask.cli.ScriptInfo(app_import_path=None, create_app=None, set_debug_flag=True, load_dotenv_defaults=True)
+

Helper object to deal with Flask applications. This is usually not +necessary to interface with as it’s used internally in the dispatching +to click. In future versions of Flask this object will most likely play +a bigger role. Typically it’s created automatically by the +FlaskGroup but you can also manually create it and pass it +onwards as click object.

+
+

Changed in version 3.1: Added the load_dotenv_defaults parameter and attribute.

+
+
+
Parameters:
+
    +
  • app_import_path (str | None)

  • +
  • create_app (t.Callable[..., Flask] | None)

  • +
  • set_debug_flag (bool)

  • +
  • load_dotenv_defaults (bool)

  • +
+
+
+
+
+app_import_path
+

Optionally the import path for the Flask application.

+
+ +
+
+create_app
+

Optionally a function that is passed the script info to create +the instance of the application.

+
+ +
+
+data: dict[t.Any, t.Any]
+

A dictionary with arbitrary data that can be associated with +this script info.

+
+ +
+
+load_dotenv_defaults
+

Whether default .flaskenv and .env files should be loaded.

+

ScriptInfo doesn’t load anything, this is for reference when doing +the load elsewhere during processing.

+
+

Added in version 3.1.

+
+
+ +
+
+load_app()
+

Loads the Flask app (if not yet loaded) and returns it. Calling +this multiple times will just result in the already loaded app to +be returned.

+
+
Return type:
+

Flask

+
+
+
+ +
+ +
+
+flask.cli.load_dotenv(path=None, load_defaults=True)
+

Load “dotenv” files to set environment variables. A given path takes +precedence over .env, which takes precedence over .flaskenv. After +loading and combining these files, values are only set if the key is not +already set in os.environ.

+

This is a no-op if python-dotenv is not installed.

+
+
Parameters:
+
    +
  • path (str | PathLike[str] | None) – Load the file at this location.

  • +
  • load_defaults (bool) – Search for and load the default .flaskenv and +.env files.

  • +
+
+
Returns:
+

True if at least one env var was loaded.

+
+
Return type:
+

bool

+
+
+
+

Changed in version 3.1: Added the load_defaults parameter. A given path takes precedence +over default files.

+
+
+Changelog
+

Changed in version 2.0: The current directory is not changed to the location of the +loaded file.

+
+
+

Changed in version 2.0: When loading the env files, set the default encoding to UTF-8.

+
+
+

Changed in version 1.1.0: Returns False when python-dotenv is not installed, or when +the given path isn’t a file.

+
+
+

Added in version 1.0.

+
+
+ +
+
+flask.cli.with_appcontext(f)
+

Wraps a callback so that it’s guaranteed to be executed with the +script’s application context.

+

Custom commands (and their options) registered under app.cli or +blueprint.cli will always have an app context available, this +decorator is not required in that case.

+
+Changelog
+

Changed in version 2.2: The app context is active for subcommands as well as the +decorated callback. The app context is always available to +app.cli command and parameter callbacks.

+
+
+
Parameters:
+

f (F)

+
+
Return type:
+

F

+
+
+
+ +
+
+flask.cli.pass_script_info(f)
+

Marks a function so that an instance of ScriptInfo is passed +as first argument to the click callback.

+
+
Parameters:
+

f (t.Callable[te.Concatenate[T, P], R])

+
+
Return type:
+

t.Callable[P, R]

+
+
+
+ +
+
+flask.cli.run_command = <Command run>
+

Run a local development server.

+

This server is for development purposes only. It does not provide +the stability, security, or performance of production WSGI servers.

+

The reloader and debugger are enabled by default with the ‘–debug’ +option.

+
+
Parameters:
+
+
+
Return type:
+

Any

+
+
+
+ +
+
+flask.cli.shell_command = <Command shell>
+

Run an interactive Python shell in the context of a given +Flask application. The application will populate the default +namespace of this shell according to its configuration.

+

This is useful for executing small snippets of management code +without having to manually configure the application.

+
+
Parameters:
+
+
+
Return type:
+

Any

+
+
+
+ +
+
+ + +
+
+
+
+ + +
+
+ + + diff --git a/_build/appcontext/index.html b/_build/appcontext/index.html new file mode 100644 index 00000000..525d6e4c --- /dev/null +++ b/_build/appcontext/index.html @@ -0,0 +1,228 @@ + + + + + + + + The Application Context — Flask Documentation (3.1.x) + + + + + + + + + + + + + + +
+
+
+
+ +
+

The Application Context

+

The application context keeps track of the application-level data during +a request, CLI command, or other activity. Rather than passing the +application around to each function, the current_app and +g proxies are accessed instead.

+

This is similar to The Request Context, which keeps track of +request-level data during a request. A corresponding application context +is pushed when a request context is pushed.

+
+

Purpose of the Context

+

The Flask application object has attributes, such as +config, that are useful to access within views and +CLI commands. However, importing the app instance +within the modules in your project is prone to circular import issues. +When using the app factory pattern or +writing reusable blueprints or +extensions there won’t be an app instance to +import at all.

+

Flask solves this issue with the application context. Rather than +referring to an app directly, you use the current_app +proxy, which points to the application handling the current activity.

+

Flask automatically pushes an application context when handling a +request. View functions, error handlers, and other functions that run +during a request will have access to current_app.

+

Flask will also automatically push an app context when running CLI +commands registered with Flask.cli using @app.cli.command().

+
+
+

Lifetime of the Context

+

The application context is created and destroyed as necessary. When a +Flask application begins handling a request, it pushes an application +context and a request context. When the request +ends it pops the request context then the application context. +Typically, an application context will have the same lifetime as a +request.

+

See The Request Context for more information about how the contexts work +and the full life cycle of a request.

+
+
+

Manually Push a Context

+

If you try to access current_app, or anything that uses it, +outside an application context, you’ll get this error message:

+
RuntimeError: Working outside of application context.
+
+This typically means that you attempted to use functionality that
+needed to interface with the current application object in some way.
+To solve this, set up an application context with app.app_context().
+
+
+

If you see that error while configuring your application, such as when +initializing an extension, you can push a context manually since you +have direct access to the app. Use app_context() in a +with block, and everything that runs in the block will have access +to current_app.

+
def create_app():
+    app = Flask(__name__)
+
+    with app.app_context():
+        init_db()
+
+    return app
+
+
+

If you see that error somewhere else in your code not related to +configuring the application, it most likely indicates that you should +move that code into a view function or CLI command.

+
+
+

Storing Data

+

The application context is a good place to store common data during a +request or CLI command. Flask provides the g object for this +purpose. It is a simple namespace object that has the same lifetime as +an application context.

+
+

Note

+

The g name stands for “global”, but that is referring to the +data being global within a context. The data on g is lost +after the context ends, and it is not an appropriate place to store +data between requests. Use the session or a database to +store data across requests.

+
+

A common use for g is to manage resources during a request.

+
    +
  1. get_X() creates resource X if it does not exist, caching it +as g.X.

  2. +
  3. teardown_X() closes or otherwise deallocates the resource if it +exists. It is registered as a teardown_appcontext() +handler.

  4. +
+

For example, you can manage a database connection using this pattern:

+
from flask import g
+
+def get_db():
+    if 'db' not in g:
+        g.db = connect_to_database()
+
+    return g.db
+
+@app.teardown_appcontext
+def teardown_db(exception):
+    db = g.pop('db', None)
+
+    if db is not None:
+        db.close()
+
+
+

During a request, every call to get_db() will return the same +connection, and it will be closed automatically at the end of the +request.

+

You can use LocalProxy to make a new context +local from get_db():

+
from werkzeug.local import LocalProxy
+db = LocalProxy(get_db)
+
+
+

Accessing db will call get_db internally, in the same way that +current_app works.

+
+
+

Events and Signals

+

The application will call functions registered with teardown_appcontext() +when the application context is popped.

+

The following signals are sent: appcontext_pushed, +appcontext_tearing_down, and appcontext_popped.

+
+
+ + +
+
+
+
+ + +
+
+ + + diff --git a/_build/async-await/index.html b/_build/async-await/index.html new file mode 100644 index 00000000..04184507 --- /dev/null +++ b/_build/async-await/index.html @@ -0,0 +1,204 @@ + + + + + + + + Using async and await — Flask Documentation (3.1.x) + + + + + + + + + + + + + + +
+
+
+
+ +
+

Using async and await

+
+Changelog
+

Added in version 2.0.

+
+

Routes, error handlers, before request, after request, and teardown +functions can all be coroutine functions if Flask is installed with the +async extra (pip install flask[async]). This allows views to be +defined with async def and use await.

+
@app.route("/get-data")
+async def get_data():
+    data = await async_db_query(...)
+    return jsonify(data)
+
+
+

Pluggable class-based views also support handlers that are implemented as +coroutines. This applies to the dispatch_request() +method in views that inherit from the flask.views.View class, as +well as all the HTTP method handlers in views that inherit from the +flask.views.MethodView class.

+
+

Using async with greenlet

+

When using gevent or eventlet to serve an application or patch the +runtime, greenlet>=1.0 is required. When using PyPy, PyPy>=7.3.7 is +required.

+
+
+

Performance

+

Async functions require an event loop to run. Flask, as a WSGI +application, uses one worker to handle one request/response cycle. +When a request comes in to an async view, Flask will start an event loop +in a thread, run the view function there, then return the result.

+

Each request still ties up one worker, even for async views. The upside +is that you can run async code within a view, for example to make +multiple concurrent database queries, HTTP requests to an external API, +etc. However, the number of requests your application can handle at one +time will remain the same.

+

Async is not inherently faster than sync code. Async is beneficial +when performing concurrent IO-bound tasks, but will probably not improve +CPU-bound tasks. Traditional Flask views will still be appropriate for +most use cases, but Flask’s async support enables writing and using +code that wasn’t possible natively before.

+
+
+

Background tasks

+

Async functions will run in an event loop until they complete, at +which stage the event loop will stop. This means any additional +spawned tasks that haven’t completed when the async function completes +will be cancelled. Therefore you cannot spawn background tasks, for +example via asyncio.create_task.

+

If you wish to use background tasks it is best to use a task queue to +trigger background work, rather than spawn tasks in a view +function. With that in mind you can spawn asyncio tasks by serving +Flask with an ASGI server and utilising the asgiref WsgiToAsgi adapter +as described in ASGI. This works as the adapter creates +an event loop that runs continually.

+
+
+

When to use Quart instead

+

Flask’s async support is less performant than async-first frameworks due +to the way it is implemented. If you have a mainly async codebase it +would make sense to consider Quart. Quart is a reimplementation of +Flask based on the ASGI standard instead of WSGI. This allows it to +handle many concurrent requests, long running requests, and websockets +without requiring multiple worker processes or threads.

+

It has also already been possible to run Flask with Gevent or Eventlet +to get many of the benefits of async request handling. These libraries +patch low-level Python functions to accomplish this, whereas async/ +await and ASGI use standard, modern Python capabilities. Deciding +whether you should use Flask, Quart, or something else is ultimately up +to understanding the specific needs of your project.

+
+
+

Extensions

+

Flask extensions predating Flask’s async support do not expect async views. +If they provide decorators to add functionality to views, those will probably +not work with async views because they will not await the function or be +awaitable. Other functions they provide will not be awaitable either and +will probably be blocking if called within an async view.

+

Extension authors can support async functions by utilising the +flask.Flask.ensure_sync() method. For example, if the extension +provides a view function decorator add ensure_sync before calling +the decorated function,

+
def extension(func):
+    @wraps(func)
+    def wrapper(*args, **kwargs):
+        ...  # Extension logic
+        return current_app.ensure_sync(func)(*args, **kwargs)
+
+    return wrapper
+
+
+

Check the changelog of the extension you want to use to see if they’ve +implemented async support, or make a feature request or PR to them.

+
+
+

Other event loops

+

At the moment Flask only supports asyncio. It’s possible to +override flask.Flask.ensure_sync() to change how async functions +are wrapped to use a different library.

+
+
+ + +
+
+
+
+ + +
+
+ + + diff --git a/_build/blueprints/index.html b/_build/blueprints/index.html new file mode 100644 index 00000000..0439f5a1 --- /dev/null +++ b/_build/blueprints/index.html @@ -0,0 +1,397 @@ + + + + + + + + Modular Applications with Blueprints — Flask Documentation (3.1.x) + + + + + + + + + + + + + + +
+
+
+
+ +
+

Modular Applications with Blueprints

+
+Changelog
+

Added in version 0.7.

+
+

Flask uses a concept of blueprints for making application components and +supporting common patterns within an application or across applications. +Blueprints can greatly simplify how large applications work and provide a +central means for Flask extensions to register operations on applications. +A Blueprint object works similarly to a Flask +application object, but it is not actually an application. Rather it is a +blueprint of how to construct or extend an application.

+
+

Why Blueprints?

+

Blueprints in Flask are intended for these cases:

+
    +
  • Factor an application into a set of blueprints. This is ideal for +larger applications; a project could instantiate an application object, +initialize several extensions, and register a collection of blueprints.

  • +
  • Register a blueprint on an application at a URL prefix and/or subdomain. +Parameters in the URL prefix/subdomain become common view arguments +(with defaults) across all view functions in the blueprint.

  • +
  • Register a blueprint multiple times on an application with different URL +rules.

  • +
  • Provide template filters, static files, templates, and other utilities +through blueprints. A blueprint does not have to implement applications +or view functions.

  • +
  • Register a blueprint on an application for any of these cases when +initializing a Flask extension.

  • +
+

A blueprint in Flask is not a pluggable app because it is not actually an +application – it’s a set of operations which can be registered on an +application, even multiple times. Why not have multiple application +objects? You can do that (see Application Dispatching), but your +applications will have separate configs and will be managed at the WSGI +layer.

+

Blueprints instead provide separation at the Flask level, share +application config, and can change an application object as necessary with +being registered. The downside is that you cannot unregister a blueprint +once an application was created without having to destroy the whole +application object.

+
+
+

The Concept of Blueprints

+

The basic concept of blueprints is that they record operations to execute +when registered on an application. Flask associates view functions with +blueprints when dispatching requests and generating URLs from one endpoint +to another.

+
+
+

My First Blueprint

+

This is what a very basic blueprint looks like. In this case we want to +implement a blueprint that does simple rendering of static templates:

+
from flask import Blueprint, render_template, abort
+from jinja2 import TemplateNotFound
+
+simple_page = Blueprint('simple_page', __name__,
+                        template_folder='templates')
+
+@simple_page.route('/', defaults={'page': 'index'})
+@simple_page.route('/<page>')
+def show(page):
+    try:
+        return render_template(f'pages/{page}.html')
+    except TemplateNotFound:
+        abort(404)
+
+
+

When you bind a function with the help of the @simple_page.route +decorator, the blueprint will record the intention of registering the +function show on the application when it’s later registered. +Additionally it will prefix the endpoint of the function with the +name of the blueprint which was given to the Blueprint +constructor (in this case also simple_page). The blueprint’s name +does not modify the URL, only the endpoint.

+
+
+

Registering Blueprints

+

So how do you register that blueprint? Like this:

+
from flask import Flask
+from yourapplication.simple_page import simple_page
+
+app = Flask(__name__)
+app.register_blueprint(simple_page)
+
+
+

If you check the rules registered on the application, you will find +these:

+
>>> app.url_map
+Map([<Rule '/static/<filename>' (HEAD, OPTIONS, GET) -> static>,
+ <Rule '/<page>' (HEAD, OPTIONS, GET) -> simple_page.show>,
+ <Rule '/' (HEAD, OPTIONS, GET) -> simple_page.show>])
+
+
+

The first one is obviously from the application itself for the static +files. The other two are for the show function of the simple_page +blueprint. As you can see, they are also prefixed with the name of the +blueprint and separated by a dot (.).

+

Blueprints however can also be mounted at different locations:

+
app.register_blueprint(simple_page, url_prefix='/pages')
+
+
+

And sure enough, these are the generated rules:

+
>>> app.url_map
+Map([<Rule '/static/<filename>' (HEAD, OPTIONS, GET) -> static>,
+ <Rule '/pages/<page>' (HEAD, OPTIONS, GET) -> simple_page.show>,
+ <Rule '/pages/' (HEAD, OPTIONS, GET) -> simple_page.show>])
+
+
+

On top of that you can register blueprints multiple times though not every +blueprint might respond properly to that. In fact it depends on how the +blueprint is implemented if it can be mounted more than once.

+
+
+

Nesting Blueprints

+

It is possible to register a blueprint on another blueprint.

+
parent = Blueprint('parent', __name__, url_prefix='/parent')
+child = Blueprint('child', __name__, url_prefix='/child')
+parent.register_blueprint(child)
+app.register_blueprint(parent)
+
+
+

The child blueprint will gain the parent’s name as a prefix to its +name, and child URLs will be prefixed with the parent’s URL prefix.

+
url_for('parent.child.create')
+/parent/child/create
+
+
+

In addition a child blueprint’s will gain their parent’s subdomain, +with their subdomain as prefix if present i.e.

+
parent = Blueprint('parent', __name__, subdomain='parent')
+child = Blueprint('child', __name__, subdomain='child')
+parent.register_blueprint(child)
+app.register_blueprint(parent)
+
+url_for('parent.child.create', _external=True)
+"child.parent.domain.tld"
+
+
+

Blueprint-specific before request functions, etc. registered with the +parent will trigger for the child. If a child does not have an error +handler that can handle a given exception, the parent’s will be tried.

+
+
+

Blueprint Resources

+

Blueprints can provide resources as well. Sometimes you might want to +introduce a blueprint only for the resources it provides.

+
+

Blueprint Resource Folder

+

Like for regular applications, blueprints are considered to be contained +in a folder. While multiple blueprints can originate from the same folder, +it does not have to be the case and it’s usually not recommended.

+

The folder is inferred from the second argument to Blueprint which +is usually __name__. This argument specifies what logical Python +module or package corresponds to the blueprint. If it points to an actual +Python package that package (which is a folder on the filesystem) is the +resource folder. If it’s a module, the package the module is contained in +will be the resource folder. You can access the +Blueprint.root_path property to see what the resource folder is:

+
>>> simple_page.root_path
+'/Users/username/TestProject/yourapplication'
+
+
+

To quickly open sources from this folder you can use the +open_resource() function:

+
with simple_page.open_resource('static/style.css') as f:
+    code = f.read()
+
+
+
+
+

Static Files

+

A blueprint can expose a folder with static files by providing the path +to the folder on the filesystem with the static_folder argument. +It is either an absolute path or relative to the blueprint’s location:

+
admin = Blueprint('admin', __name__, static_folder='static')
+
+
+

By default the rightmost part of the path is where it is exposed on the +web. This can be changed with the static_url_path argument. Because the +folder is called static here it will be available at the +url_prefix of the blueprint + /static. If the blueprint +has the prefix /admin, the static URL will be /admin/static.

+

The endpoint is named blueprint_name.static. You can generate URLs +to it with url_for() like you would with the static folder of the +application:

+
url_for('admin.static', filename='style.css')
+
+
+

However, if the blueprint does not have a url_prefix, it is not +possible to access the blueprint’s static folder. This is because the +URL would be /static in this case, and the application’s /static +route takes precedence. Unlike template folders, blueprint static +folders are not searched if the file does not exist in the application +static folder.

+
+
+

Templates

+

If you want the blueprint to expose templates you can do that by providing +the template_folder parameter to the Blueprint constructor:

+
admin = Blueprint('admin', __name__, template_folder='templates')
+
+
+

For static files, the path can be absolute or relative to the blueprint +resource folder.

+

The template folder is added to the search path of templates but with a lower +priority than the actual application’s template folder. That way you can +easily override templates that a blueprint provides in the actual application. +This also means that if you don’t want a blueprint template to be accidentally +overridden, make sure that no other blueprint or actual application template +has the same relative path. When multiple blueprints provide the same relative +template path the first blueprint registered takes precedence over the others.

+

So if you have a blueprint in the folder yourapplication/admin and you +want to render the template 'admin/index.html' and you have provided +templates as a template_folder you will have to create a file like +this: yourapplication/admin/templates/admin/index.html. The reason +for the extra admin folder is to avoid getting our template overridden +by a template named index.html in the actual application template +folder.

+

To further reiterate this: if you have a blueprint named admin and you +want to render a template called index.html which is specific to this +blueprint, the best idea is to lay out your templates like this:

+
yourpackage/
+    blueprints/
+        admin/
+            templates/
+                admin/
+                    index.html
+            __init__.py
+
+
+

And then when you want to render the template, use admin/index.html as +the name to look up the template by. If you encounter problems loading +the correct templates enable the EXPLAIN_TEMPLATE_LOADING config +variable which will instruct Flask to print out the steps it goes through +to locate templates on every render_template call.

+
+
+
+

Building URLs

+

If you want to link from one page to another you can use the +url_for() function just like you normally would do just that you +prefix the URL endpoint with the name of the blueprint and a dot (.):

+
url_for('admin.index')
+
+
+

Additionally if you are in a view function of a blueprint or a rendered +template and you want to link to another endpoint of the same blueprint, +you can use relative redirects by prefixing the endpoint with a dot only:

+
url_for('.index')
+
+
+

This will link to admin.index for instance in case the current request +was dispatched to any other admin blueprint endpoint.

+
+
+

Blueprint Error Handlers

+

Blueprints support the errorhandler decorator just like the Flask +application object, so it is easy to make Blueprint-specific custom error +pages.

+

Here is an example for a “404 Page Not Found” exception:

+
@simple_page.errorhandler(404)
+def page_not_found(e):
+    return render_template('pages/404.html')
+
+
+

Most errorhandlers will simply work as expected; however, there is a caveat +concerning handlers for 404 and 405 exceptions. These errorhandlers are only +invoked from an appropriate raise statement or a call to abort in another +of the blueprint’s view functions; they are not invoked by, e.g., an invalid URL +access. This is because the blueprint does not “own” a certain URL space, so +the application instance has no way of knowing which blueprint error handler it +should run if given an invalid URL. If you would like to execute different +handling strategies for these errors based on URL prefixes, they may be defined +at the application level using the request proxy object:

+
@app.errorhandler(404)
+@app.errorhandler(405)
+def _handle_api_error(ex):
+    if request.path.startswith('/api/'):
+        return jsonify(error=str(ex)), ex.code
+    else:
+        return ex
+
+
+

See Handling Application Errors.

+
+
+ + +
+
+
+
+ + +
+
+ + + diff --git a/_build/changes/index.html b/_build/changes/index.html new file mode 100644 index 00000000..617bcce5 --- /dev/null +++ b/_build/changes/index.html @@ -0,0 +1,1711 @@ + + + + + + + + Changes — Flask Documentation (3.1.x) + + + + + + + + + + + + + +
+
+
+
+ +
+

Changes

+
+

Version 3.1.1

+

Unreleased

+
    +
  • Fix type hint for cli_runner.invoke. #5645

  • +
+
+
+

Version 3.1.0

+

Released 2024-11-13

+
    +
  • Drop support for Python 3.8. #5623

  • +
  • Update minimum dependency versions to latest feature releases. +Werkzeug >= 3.1, ItsDangerous >= 2.2, Blinker >= 1.9. #5624,5633

  • +
  • Provide a configuration option to control automatic option +responses. #5496

  • +
  • Flask.open_resource/open_instance_resource and +Blueprint.open_resource take an encoding parameter to use when +opening in text mode. It defaults to utf-8. #5504

  • +
  • Request.max_content_length can be customized per-request instead of only +through the MAX_CONTENT_LENGTH config. Added +MAX_FORM_MEMORY_SIZE and MAX_FORM_PARTS config. Added documentation +about resource limits to the security page. #5625

  • +
  • Add support for the Partitioned cookie attribute (CHIPS), with the +SESSION_COOKIE_PARTITIONED config. #5472

  • +
  • -e path takes precedence over default .env and .flaskenv files. +load_dotenv loads default files in addition to a path unless +load_defaults=False is passed. #5628

  • +
  • Support key rotation with the SECRET_KEY_FALLBACKS config, a list of old +secret keys that can still be used for unsigning. Extensions will need to +add support. #5621

  • +
  • Fix how setting host_matching=True or subdomain_matching=False +interacts with SERVER_NAME. Setting SERVER_NAME no longer restricts +requests to only that domain. #5553

  • +
  • Request.trusted_hosts is checked during routing, and can be set through +the TRUSTED_HOSTS config. #5636

  • +
+
+
+

Version 3.0.3

+

Released 2024-04-07

+
    +
  • The default hashlib.sha1 may not be available in FIPS builds. Don’t +access it at import time so the developer has time to change the default. +#5448

  • +
  • Don’t initialize the cli attribute in the sansio scaffold, but rather in +the Flask concrete class. #5270

  • +
+
+
+

Version 3.0.2

+

Released 2024-02-03

+
    +
  • Correct type for jinja_loader property. #5388

  • +
  • Fix error with --extra-files and --exclude-patterns CLI options. +#5391

  • +
+
+
+

Version 3.0.1

+

Released 2024-01-18

+
    +
  • Correct type for path argument to send_file. #5336

  • +
  • Fix a typo in an error message for the flask run --key option. #5344

  • +
  • Session data is untagged without relying on the built-in json.loads +object_hook. This allows other JSON providers that don’t implement that. +#5381

  • +
  • Address more type findings when using mypy strict mode. #5383

  • +
+
+
+

Version 3.0.0

+

Released 2023-09-30

+
    +
  • Remove previously deprecated code. #5223

  • +
  • Deprecate the __version__ attribute. Use feature detection, or +importlib.metadata.version("flask"), instead. #5230

  • +
  • Restructure the code such that the Flask (app) and Blueprint +classes have Sans-IO bases. #5127

  • +
  • Allow self as an argument to url_for. #5264

  • +
  • Require Werkzeug >= 3.0.0.

  • +
+
+
+

Version 2.3.3

+

Released 2023-08-21

+
    +
  • Python 3.12 compatibility.

  • +
  • Require Werkzeug >= 2.3.7.

  • +
  • Use flit_core instead of setuptools as build backend.

  • +
  • Refactor how an app’s root and instance paths are determined. #5160

  • +
+
+
+

Version 2.3.2

+

Released 2023-05-01

+
    +
  • Set Vary: Cookie header when the session is accessed, modified, or refreshed.

  • +
  • Update Werkzeug requirement to >=2.3.3 to apply recent bug fixes.

  • +
+
+
+

Version 2.3.1

+

Released 2023-04-25

+
    +
  • Restore deprecated from flask import Markup. #5084

  • +
+
+
+

Version 2.3.0

+

Released 2023-04-25

+
    +
  • Drop support for Python 3.7. #5072

  • +
  • Update minimum requirements to the latest versions: Werkzeug>=2.3.0, Jinja2>3.1.2, +itsdangerous>=2.1.2, click>=8.1.3.

  • +
  • Remove previously deprecated code. #4995

    +
      +
    • The push and pop methods of the deprecated _app_ctx_stack and +_request_ctx_stack objects are removed. top still exists to give +extensions more time to update, but it will be removed.

    • +
    • The FLASK_ENV environment variable, ENV config key, and app.env +property are removed.

    • +
    • The session_cookie_name, send_file_max_age_default, use_x_sendfile, +propagate_exceptions, and templates_auto_reload properties on app +are removed.

    • +
    • The JSON_AS_ASCII, JSON_SORT_KEYS, JSONIFY_MIMETYPE, and +JSONIFY_PRETTYPRINT_REGULAR config keys are removed.

    • +
    • The app.before_first_request and bp.before_app_first_request decorators +are removed.

    • +
    • json_encoder and json_decoder attributes on app and blueprint, and the +corresponding json.JSONEncoder and JSONDecoder classes, are removed.

    • +
    • The json.htmlsafe_dumps and htmlsafe_dump functions are removed.

    • +
    • Calling setup methods on blueprints after registration is an error instead of a +warning. #4997

    • +
    +
  • +
  • Importing escape and Markup from flask is deprecated. Import them +directly from markupsafe instead. #4996

  • +
  • The app.got_first_request property is deprecated. #4997

  • +
  • The locked_cached_property decorator is deprecated. Use a lock inside the +decorated function if locking is needed. #4993

  • +
  • Signals are always available. blinker>=1.6.2 is a required dependency. The +signals_available attribute is deprecated. #5056

  • +
  • Signals support async subscriber functions. #5049

  • +
  • Remove uses of locks that could cause requests to block each other very briefly. +#4993

  • +
  • Use modern packaging metadata with pyproject.toml instead of setup.cfg. +#4947

  • +
  • Ensure subdomains are applied with nested blueprints. #4834

  • +
  • config.from_file can use text=False to indicate that the parser wants a +binary file instead. #4989

  • +
  • If a blueprint is created with an empty name it raises a ValueError. +#5010

  • +
  • SESSION_COOKIE_DOMAIN does not fall back to SERVER_NAME. The default is not +to set the domain, which modern browsers interpret as an exact match rather than +a subdomain match. Warnings about localhost and IP addresses are also removed. +#5051

  • +
  • The routes command shows each rule’s subdomain or host when domain +matching is in use. #5004

  • +
  • Use postponed evaluation of annotations. #5071

  • +
+
+
+

Version 2.2.5

+

Released 2023-05-02

+
    +
  • Update for compatibility with Werkzeug 2.3.3.

  • +
  • Set Vary: Cookie header when the session is accessed, modified, or refreshed.

  • +
+
+
+

Version 2.2.4

+

Released 2023-04-25

+
    +
  • Update for compatibility with Werkzeug 2.3.

  • +
+
+
+

Version 2.2.3

+

Released 2023-02-15

+
    +
  • Autoescape is enabled by default for .svg template files. #4831

  • +
  • Fix the type of template_folder to accept pathlib.Path. #4892

  • +
  • Add --debug option to the flask run command. #4777

  • +
+
+
+

Version 2.2.2

+

Released 2022-08-08

+
    +
  • Update Werkzeug dependency to >= 2.2.2. This includes fixes related +to the new faster router, header parsing, and the development +server. #4754

  • +
  • Fix the default value for app.env to be "production". This +attribute remains deprecated. #4740

  • +
+
+
+

Version 2.2.1

+

Released 2022-08-03

+
    +
  • Setting or accessing json_encoder or json_decoder raises a +deprecation warning. #4732

  • +
+
+
+

Version 2.2.0

+

Released 2022-08-01

+
    +
  • Remove previously deprecated code. #4667

    +
      +
    • Old names for some send_file parameters have been removed. +download_name replaces attachment_filename, max_age +replaces cache_timeout, and etag replaces add_etags. +Additionally, path replaces filename in +send_from_directory.

    • +
    • The RequestContext.g property returning AppContext.g is +removed.

    • +
    +
  • +
  • Update Werkzeug dependency to >= 2.2.

  • +
  • The app and request contexts are managed using Python context vars +directly rather than Werkzeug’s LocalStack. This should result +in better performance and memory use. #4682

    +
      +
    • Extension maintainers, be aware that _app_ctx_stack.top +and _request_ctx_stack.top are deprecated. Store data on +g instead using a unique prefix, like +g._extension_name_attr.

    • +
    +
  • +
  • The FLASK_ENV environment variable and app.env attribute are +deprecated, removing the distinction between development and debug +mode. Debug mode should be controlled directly using the --debug +option or app.run(debug=True). #4714

  • +
  • Some attributes that proxied config keys on app are deprecated: +session_cookie_name, send_file_max_age_default, +use_x_sendfile, propagate_exceptions, and +templates_auto_reload. Use the relevant config keys instead. +#4716

  • +
  • Add new customization points to the Flask app object for many +previously global behaviors.

    +
      +
    • flask.url_for will call app.url_for. #4568

    • +
    • flask.abort will call app.aborter. +Flask.aborter_class and Flask.make_aborter can be used +to customize this aborter. #4567

    • +
    • flask.redirect will call app.redirect. #4569

    • +
    • flask.json is an instance of JSONProvider. A different +provider can be set to use a different JSON library. +flask.jsonify will call app.json.response, other +functions in flask.json will call corresponding functions in +app.json. #4692

    • +
    +
  • +
  • JSON configuration is moved to attributes on the default +app.json provider. JSON_AS_ASCII, JSON_SORT_KEYS, +JSONIFY_MIMETYPE, and JSONIFY_PRETTYPRINT_REGULAR are +deprecated. #4692

  • +
  • Setting custom json_encoder and json_decoder classes on the +app or a blueprint, and the corresponding json.JSONEncoder and +JSONDecoder classes, are deprecated. JSON behavior can now be +overridden using the app.json provider interface. #4692

  • +
  • json.htmlsafe_dumps and json.htmlsafe_dump are deprecated, +the function is built-in to Jinja now. #4692

  • +
  • Refactor register_error_handler to consolidate error checking. +Rewrite some error messages to be more consistent. #4559

  • +
  • Use Blueprint decorators and functions intended for setup after +registering the blueprint will show a warning. In the next version, +this will become an error just like the application setup methods. +#4571

  • +
  • before_first_request is deprecated. Run setup code when creating +the application instead. #4605

  • +
  • Added the View.init_every_request class attribute. If a view +subclass sets this to False, the view will not create a new +instance on every request. #2520.

  • +
  • A flask.cli.FlaskGroup Click group can be nested as a +sub-command in a custom CLI. #3263

  • +
  • Add --app and --debug options to the flask CLI, instead +of requiring that they are set through environment variables. +#2836

  • +
  • Add --env-file option to the flask CLI. This allows +specifying a dotenv file to load in addition to .env and +.flaskenv. #3108

  • +
  • It is no longer required to decorate custom CLI commands on +app.cli or blueprint.cli with @with_appcontext, an app +context will already be active at that point. #2410

  • +
  • SessionInterface.get_expiration_time uses a timezone-aware +value. #4645

  • +
  • View functions can return generators directly instead of wrapping +them in a Response. #4629

  • +
  • Add stream_template and stream_template_string functions to +render a template as a stream of pieces. #4629

  • +
  • A new implementation of context preservation during debugging and +testing. #4666

    +
      +
    • request, g, and other context-locals point to the +correct data when running code in the interactive debugger +console. #2836

    • +
    • Teardown functions are always run at the end of the request, +even if the context is preserved. They are also run after the +preserved context is popped.

    • +
    • stream_with_context preserves context separately from a +with client block. It will be cleaned up when +response.get_data() or response.close() is called.

    • +
    +
  • +
  • Allow returning a list from a view function, to convert it to a +JSON response like a dict is. #4672

  • +
  • When type checking, allow TypedDict to be returned from view +functions. #4695

  • +
  • Remove the --eager-loading/--lazy-loading options from the +flask run command. The app is always eager loaded the first +time, then lazily loaded in the reloader. The reloader always prints +errors immediately but continues serving. Remove the internal +DispatchingApp middleware used by the previous implementation. +#4715

  • +
+
+
+

Version 2.1.3

+

Released 2022-07-13

+
    +
  • Inline some optional imports that are only used for certain CLI +commands. #4606

  • +
  • Relax type annotation for after_request functions. #4600

  • +
  • instance_path for namespace packages uses the path closest to +the imported submodule. #4610

  • +
  • Clearer error message when render_template and +render_template_string are used outside an application context. +#4693

  • +
+
+
+

Version 2.1.2

+

Released 2022-04-28

+
    +
  • Fix type annotation for json.loads, it accepts str or bytes. +#4519

  • +
  • The --cert and --key options on flask run can be given +in either order. #4459

  • +
+
+
+

Version 2.1.1

+

Released on 2022-03-30

+
    +
  • Set the minimum required version of importlib_metadata to 3.6.0, +which is required on Python < 3.10. #4502

  • +
+
+
+

Version 2.1.0

+

Released 2022-03-28

+
    +
  • Drop support for Python 3.6. #4335

  • +
  • Update Click dependency to >= 8.0. #4008

  • +
  • Remove previously deprecated code. #4337

    +
      +
    • The CLI does not pass script_info to app factory functions.

    • +
    • config.from_json is replaced by +config.from_file(name, load=json.load).

    • +
    • json functions no longer take an encoding parameter.

    • +
    • safe_join is removed, use werkzeug.utils.safe_join +instead.

    • +
    • total_seconds is removed, use timedelta.total_seconds +instead.

    • +
    • The same blueprint cannot be registered with the same name. Use +name= when registering to specify a unique name.

    • +
    • The test client’s as_tuple parameter is removed. Use +response.request.environ instead. #4417

    • +
    +
  • +
  • Some parameters in send_file and send_from_directory were +renamed in 2.0. The deprecation period for the old names is extended +to 2.2. Be sure to test with deprecation warnings visible.

    +
      +
    • attachment_filename is renamed to download_name.

    • +
    • cache_timeout is renamed to max_age.

    • +
    • add_etags is renamed to etag.

    • +
    • filename is renamed to path.

    • +
    +
  • +
  • The RequestContext.g property is deprecated. Use g directly +or AppContext.g instead. #3898

  • +
  • copy_current_request_context can decorate async functions. +#4303

  • +
  • The CLI uses importlib.metadata instead of pkg_resources to +load command entry points. #4419

  • +
  • Overriding FlaskClient.open will not cause an error on redirect. +#3396

  • +
  • Add an --exclude-patterns option to the flask run CLI +command to specify patterns that will be ignored by the reloader. +#4188

  • +
  • When using lazy loading (the default with the debugger), the Click +context from the flask run command remains available in the +loader thread. #4460

  • +
  • Deleting the session cookie uses the httponly flag. +#4485

  • +
  • Relax typing for errorhandler to allow the user to use more +precise types and decorate the same function multiple times. +#4095, 4295, 4297

  • +
  • Fix typing for __exit__ methods for better compatibility with +ExitStack. #4474

  • +
  • From Werkzeug, for redirect responses the Location header URL +will remain relative, and exclude the scheme and domain, by default. +#4496

  • +
  • Add Config.from_prefixed_env() to load config values from +environment variables that start with FLASK_ or another prefix. +This parses values as JSON by default, and allows setting keys in +nested dicts. #4479

  • +
+
+
+

Version 2.0.3

+

Released 2022-02-14

+
    +
  • The test client’s as_tuple parameter is deprecated and will be +removed in Werkzeug 2.1. It is now also deprecated in Flask, to be +removed in Flask 2.1, while remaining compatible with both in +2.0.x. Use response.request.environ instead. #4341

  • +
  • Fix type annotation for errorhandler decorator. #4295

  • +
  • Revert a change to the CLI that caused it to hide ImportError +tracebacks when importing the application. #4307

  • +
  • app.json_encoder and json_decoder are only passed to +dumps and loads if they have custom behavior. This improves +performance, mainly on PyPy. #4349

  • +
  • Clearer error message when after_this_request is used outside a +request context. #4333

  • +
+
+
+

Version 2.0.2

+

Released 2021-10-04

+
    +
  • Fix type annotation for teardown_* methods. #4093

  • +
  • Fix type annotation for before_request and before_app_request +decorators. #4104

  • +
  • Fixed the issue where typing requires template global +decorators to accept functions with no arguments. #4098

  • +
  • Support View and MethodView instances with async handlers. #4112

  • +
  • Enhance typing of app.errorhandler decorator. #4095

  • +
  • Fix registering a blueprint twice with differing names. #4124

  • +
  • Fix the type of static_folder to accept pathlib.Path. +#4150

  • +
  • jsonify handles decimal.Decimal by encoding to str. +#4157

  • +
  • Correctly handle raising deferred errors in CLI lazy loading. +#4096

  • +
  • The CLI loader handles **kwargs in a create_app function. +#4170

  • +
  • Fix the order of before_request and other callbacks that trigger +before the view returns. They are called from the app down to the +closest nested blueprint. #4229

  • +
+
+
+

Version 2.0.1

+

Released 2021-05-21

+
    +
  • Re-add the filename parameter in send_from_directory. The +filename parameter has been renamed to path, the old name +is deprecated. #4019

  • +
  • Mark top-level names as exported so type checking understands +imports in user projects. #4024

  • +
  • Fix type annotation for g and inform mypy that it is a namespace +object that has arbitrary attributes. #4020

  • +
  • Fix some types that weren’t available in Python 3.6.0. #4040

  • +
  • Improve typing for send_file, send_from_directory, and +get_send_file_max_age. #4044, #4026

  • +
  • Show an error when a blueprint name contains a dot. The . has +special meaning, it is used to separate (nested) blueprint names and +the endpoint name. #4041

  • +
  • Combine URL prefixes when nesting blueprints that were created with +a url_prefix value. #4037

  • +
  • Revert a change to the order that URL matching was done. The +URL is again matched after the session is loaded, so the session is +available in custom URL converters. #4053

  • +
  • Re-add deprecated Config.from_json, which was accidentally +removed early. #4078

  • +
  • Improve typing for some functions using Callable in their type +signatures, focusing on decorator factories. #4060

  • +
  • Nested blueprints are registered with their dotted name. This allows +different blueprints with the same name to be nested at different +locations. #4069

  • +
  • register_blueprint takes a name option to change the +(pre-dotted) name the blueprint is registered with. This allows the +same blueprint to be registered multiple times with unique names for +url_for. Registering the same blueprint with the same name +multiple times is deprecated. #1091

  • +
  • Improve typing for stream_with_context. #4052

  • +
+
+
+

Version 2.0.0

+

Released 2021-05-11

+
    +
  • Drop support for Python 2 and 3.5.

  • +
  • Bump minimum versions of other Pallets projects: Werkzeug >= 2, +Jinja2 >= 3, MarkupSafe >= 2, ItsDangerous >= 2, Click >= 8. Be sure +to check the change logs for each project. For better compatibility +with other applications (e.g. Celery) that still require Click 7, +there is no hard dependency on Click 8 yet, but using Click 7 will +trigger a DeprecationWarning and Flask 2.1 will depend on Click 8.

  • +
  • JSON support no longer uses simplejson. To use another JSON module, +override app.json_encoder and json_decoder. #3555

  • +
  • The encoding option to JSON functions is deprecated. #3562

  • +
  • Passing script_info to app factory functions is deprecated. This +was not portable outside the flask command. Use +click.get_current_context().obj if it’s needed. #3552

  • +
  • The CLI shows better error messages when the app failed to load +when looking up commands. #2741

  • +
  • Add SessionInterface.get_cookie_name to allow setting the +session cookie name dynamically. #3369

  • +
  • Add Config.from_file to load config using arbitrary file +loaders, such as toml.load or json.load. +Config.from_json is deprecated in favor of this. #3398

  • +
  • The flask run command will only defer errors on reload. Errors +present during the initial call will cause the server to exit with +the traceback immediately. #3431

  • +
  • send_file raises a ValueError when passed an io object +in text mode. Previously, it would respond with 200 OK and an empty +file. #3358

  • +
  • When using ad-hoc certificates, check for the cryptography library +instead of PyOpenSSL. #3492

  • +
  • When specifying a factory function with FLASK_APP, keyword +argument can be passed. #3553

  • +
  • When loading a .env or .flaskenv file, the current working +directory is no longer changed to the location of the file. +#3560

  • +
  • When returning a (response, headers) tuple from a view, the +headers replace rather than extend existing headers on the response. +For example, this allows setting the Content-Type for +jsonify(). Use response.headers.extend() if extending is +desired. #3628

  • +
  • The Scaffold class provides a common API for the Flask and +Blueprint classes. Blueprint information is stored in +attributes just like Flask, rather than opaque lambda functions. +This is intended to improve consistency and maintainability. +#3215

  • +
  • Include samesite and secure options when removing the +session cookie. #3726

  • +
  • Support passing a pathlib.Path to static_folder. #3579

  • +
  • send_file and send_from_directory are wrappers around the +implementations in werkzeug.utils. #3828

  • +
  • Some send_file parameters have been renamed, the old names are +deprecated. attachment_filename is renamed to download_name. +cache_timeout is renamed to max_age. add_etags is +renamed to etag. #3828, 3883

  • +
  • send_file passes download_name even if +as_attachment=False by using Content-Disposition: inline. +#3828

  • +
  • send_file sets conditional=True and max_age=None by +default. Cache-Control is set to no-cache if max_age is +not set, otherwise public. This tells browsers to validate +conditional requests instead of using a timed cache. #3828

  • +
  • helpers.safe_join is deprecated. Use +werkzeug.utils.safe_join instead. #3828

  • +
  • The request context does route matching before opening the session. +This could allow a session interface to change behavior based on +request.endpoint. #3776

  • +
  • Use Jinja’s implementation of the |tojson filter. #3881

  • +
  • Add route decorators for common HTTP methods. For example, +@app.post("/login") is a shortcut for +@app.route("/login", methods=["POST"]). #3907

  • +
  • Support async views, error handlers, before and after request, and +teardown functions. #3412

  • +
  • Support nesting blueprints. #593, 1548, #3923

  • +
  • Set the default encoding to “UTF-8” when loading .env and +.flaskenv files to allow to use non-ASCII characters. #3931

  • +
  • flask shell sets up tab and history completion like the default +python shell if readline is installed. #3941

  • +
  • helpers.total_seconds() is deprecated. Use +timedelta.total_seconds() instead. #3962

  • +
  • Add type hinting. #3973.

  • +
+
+
+

Version 1.1.4

+

Released 2021-05-13

+
    +
  • Update static_folder to use _compat.fspath instead of +os.fspath to continue supporting Python < 3.6 #4050

  • +
+
+
+

Version 1.1.3

+

Released 2021-05-13

+
    +
  • Set maximum versions of Werkzeug, Jinja, Click, and ItsDangerous. +#4043

  • +
  • Re-add support for passing a pathlib.Path for static_folder. +#3579

  • +
+
+
+

Version 1.1.2

+

Released 2020-04-03

+
    +
  • Work around an issue when running the flask command with an +external debugger on Windows. #3297

  • +
  • The static route will not catch all URLs if the Flask +static_folder argument ends with a slash. #3452

  • +
+
+
+

Version 1.1.1

+

Released 2019-07-08

+
    +
  • The flask.json_available flag was added back for compatibility +with some extensions. It will raise a deprecation warning when used, +and will be removed in version 2.0.0. #3288

  • +
+
+
+

Version 1.1.0

+

Released 2019-07-04

+
    +
  • Bump minimum Werkzeug version to >= 0.15.

  • +
  • Drop support for Python 3.4.

  • +
  • Error handlers for InternalServerError or 500 will always be +passed an instance of InternalServerError. If they are invoked +due to an unhandled exception, that original exception is now +available as e.original_exception rather than being passed +directly to the handler. The same is true if the handler is for the +base HTTPException. This makes error handler behavior more +consistent. #3266

    +
      +
    • Flask.finalize_request is called for all unhandled +exceptions even if there is no 500 error handler.

    • +
    +
  • +
  • Flask.logger takes the same name as Flask.name (the value +passed as Flask(import_name). This reverts 1.0’s behavior of +always logging to "flask.app", in order to support multiple apps +in the same process. A warning will be shown if old configuration is +detected that needs to be moved. #2866

  • +
  • RequestContext.copy includes the current session object in the +request context copy. This prevents session pointing to an +out-of-date object. #2935

  • +
  • Using built-in RequestContext, unprintable Unicode characters in +Host header will result in a HTTP 400 response and not HTTP 500 as +previously. #2994

  • +
  • send_file supports PathLike objects as described in +PEP 519, to support pathlib in Python 3. #3059

  • +
  • send_file supports BytesIO partial content. +#2957

  • +
  • open_resource accepts the “rt” file mode. This still does the +same thing as “r”. #3163

  • +
  • The MethodView.methods attribute set in a base class is used by +subclasses. #3138

  • +
  • Flask.jinja_options is a dict instead of an +ImmutableDict to allow easier configuration. Changes must still +be made before creating the environment. #3190

  • +
  • Flask’s JSONMixin for the request and response wrappers was +moved into Werkzeug. Use Werkzeug’s version with Flask-specific +support. This bumps the Werkzeug dependency to >= 0.15. +#3125

  • +
  • The flask command entry point is simplified to take advantage +of Werkzeug 0.15’s better reloader support. This bumps the Werkzeug +dependency to >= 0.15. #3022

  • +
  • Support static_url_path that ends with a forward slash. +#3134

  • +
  • Support empty static_folder without requiring setting an empty +static_url_path as well. #3124

  • +
  • jsonify supports dataclass objects. #3195

  • +
  • Allow customizing the Flask.url_map_class used for routing. +#3069

  • +
  • The development server port can be set to 0, which tells the OS to +pick an available port. #2926

  • +
  • The return value from cli.load_dotenv is more consistent with +the documentation. It will return False if python-dotenv is not +installed, or if the given path isn’t a file. #2937

  • +
  • Signaling support has a stub for the connect_via method when +the Blinker library is not installed. #3208

  • +
  • Add an --extra-files option to the flask run CLI command to +specify extra files that will trigger the reloader on change. +#2897

  • +
  • Allow returning a dictionary from a view function. Similar to how +returning a string will produce a text/html response, returning +a dict will call jsonify to produce a application/json +response. #3111

  • +
  • Blueprints have a cli Click group like app.cli. CLI commands +registered with a blueprint will be available as a group under the +flask command. #1357.

  • +
  • When using the test client as a context manager (with client:), +all preserved request contexts are popped when the block exits, +ensuring nested contexts are cleaned up correctly. #3157

  • +
  • Show a better error message when the view return type is not +supported. #3214

  • +
  • flask.testing.make_test_environ_builder() has been deprecated in +favour of a new class flask.testing.EnvironBuilder. #3232

  • +
  • The flask run command no longer fails if Python is not built +with SSL support. Using the --cert option will show an +appropriate error message. #3211

  • +
  • URL matching now occurs after the request context is pushed, rather +than when it’s created. This allows custom URL converters to access +the app and request contexts, such as to query a database for an id. +#3088

  • +
+
+
+

Version 1.0.4

+

Released 2019-07-04

+
    +
  • The key information for BadRequestKeyError is no longer cleared +outside debug mode, so error handlers can still access it. This +requires upgrading to Werkzeug 0.15.5. #3249

  • +
  • send_file url quotes the “:” and “/” characters for more +compatible UTF-8 filename support in some browsers. #3074

  • +
  • Fixes for PEP 451 import loaders and pytest 5.x. #3275

  • +
  • Show message about dotenv on stderr instead of stdout. #3285

  • +
+
+
+

Version 1.0.3

+

Released 2019-05-17

+
    +
  • send_file encodes filenames as ASCII instead of Latin-1 +(ISO-8859-1). This fixes compatibility with Gunicorn, which is +stricter about header encodings than PEP 3333. #2766

  • +
  • Allow custom CLIs using FlaskGroup to set the debug flag without +it always being overwritten based on environment variables. +#2765

  • +
  • flask --version outputs Werkzeug’s version and simplifies the +Python version. #2825

  • +
  • send_file handles an attachment_filename that is a native +Python 2 string (bytes) with UTF-8 coded bytes. #2933

  • +
  • A catch-all error handler registered for HTTPException will not +handle RoutingException, which is used internally during +routing. This fixes the unexpected behavior that had been introduced +in 1.0. #2986

  • +
  • Passing the json argument to app.test_client does not +push/pop an extra app context. #2900

  • +
+
+
+

Version 1.0.2

+

Released 2018-05-02

+
    +
  • Fix more backwards compatibility issues with merging slashes between +a blueprint prefix and route. #2748

  • +
  • Fix error with flask routes command when there are no routes. +#2751

  • +
+
+
+

Version 1.0.1

+

Released 2018-04-29

+
    +
  • Fix registering partials (with no __name__) as view functions. +#2730

  • +
  • Don’t treat lists returned from view functions the same as tuples. +Only tuples are interpreted as response data. #2736

  • +
  • Extra slashes between a blueprint’s url_prefix and a route URL +are merged. This fixes some backwards compatibility issues with the +change in 1.0. #2731, #2742

  • +
  • Only trap BadRequestKeyError errors in debug mode, not all +BadRequest errors. This allows abort(400) to continue +working as expected. #2735

  • +
  • The FLASK_SKIP_DOTENV environment variable can be set to 1 +to skip automatically loading dotenv files. #2722

  • +
+
+
+

Version 1.0

+

Released 2018-04-26

+
    +
  • Python 2.6 and 3.3 are no longer supported.

  • +
  • Bump minimum dependency versions to the latest stable versions: +Werkzeug >= 0.14, Jinja >= 2.10, itsdangerous >= 0.24, Click >= 5.1. +#2586

  • +
  • Skip app.run when a Flask application is run from the command +line. This avoids some behavior that was confusing to debug.

  • +
  • Change the default for JSONIFY_PRETTYPRINT_REGULAR to +False. ~json.jsonify returns a compact format by default, +and an indented format in debug mode. #2193

  • +
  • Flask.__init__ accepts the host_matching argument and sets +it on Flask.url_map. #1559

  • +
  • Flask.__init__ accepts the static_host argument and passes +it as the host argument when defining the static route. +#1559

  • +
  • send_file supports Unicode in attachment_filename. +#2223

  • +
  • Pass _scheme argument from url_for to +Flask.handle_url_build_error. #2017

  • +
  • Flask.add_url_rule accepts the provide_automatic_options +argument to disable adding the OPTIONS method. #1489

  • +
  • MethodView subclasses inherit method handlers from base classes. +#1936

  • +
  • Errors caused while opening the session at the beginning of the +request are handled by the app’s error handlers. #2254

  • +
  • Blueprints gained Blueprint.json_encoder and +Blueprint.json_decoder attributes to override the app’s +encoder and decoder. #1898

  • +
  • Flask.make_response raises TypeError instead of +ValueError for bad response types. The error messages have been +improved to describe why the type is invalid. #2256

  • +
  • Add routes CLI command to output routes registered on the +application. #2259

  • +
  • Show warning when session cookie domain is a bare hostname or an IP +address, as these may not behave properly in some browsers, such as +Chrome. #2282

  • +
  • Allow IP address as exact session cookie domain. #2282

  • +
  • SESSION_COOKIE_DOMAIN is set if it is detected through +SERVER_NAME. #2282

  • +
  • Auto-detect zero-argument app factory called create_app or +make_app from FLASK_APP. #2297

  • +
  • Factory functions are not required to take a script_info +parameter to work with the flask command. If they take a single +parameter or a parameter named script_info, the ScriptInfo +object will be passed. #2319

  • +
  • FLASK_APP can be set to an app factory, with arguments if +needed, for example FLASK_APP=myproject.app:create_app('dev'). +#2326

  • +
  • FLASK_APP can point to local packages that are not installed in +editable mode, although pip install -e is still preferred. +#2414

  • +
  • The View class attribute +View.provide_automatic_options is set in View.as_view, to be +detected by Flask.add_url_rule. #2316

  • +
  • Error handling will try handlers registered for blueprint, code, +app, code, blueprint, exception, app, exception. +#2314

  • +
  • Cookie is added to the response’s Vary header if the session +is accessed at all during the request (and not deleted). #2288

  • +
  • Flask.test_request_context accepts subdomain and +url_scheme arguments for use when building the base URL. +#1621

  • +
  • Set APPLICATION_ROOT to '/' by default. This was already the +implicit default when it was set to None.

  • +
  • TRAP_BAD_REQUEST_ERRORS is enabled by default in debug mode. +BadRequestKeyError has a message with the bad key in debug mode +instead of the generic bad request message. #2348

  • +
  • Allow registering new tags with TaggedJSONSerializer to support +storing other types in the session cookie. #2352

  • +
  • Only open the session if the request has not been pushed onto the +context stack yet. This allows stream_with_context generators to +access the same session that the containing view uses. #2354

  • +
  • Add json keyword argument for the test client request methods. +This will dump the given object as JSON and set the appropriate +content type. #2358

  • +
  • Extract JSON handling to a mixin applied to both the Request and +Response classes. This adds the Response.is_json and +Response.get_json methods to the response to make testing JSON +response much easier. #2358

  • +
  • Removed error handler caching because it caused unexpected results +for some exception inheritance hierarchies. Register handlers +explicitly for each exception if you want to avoid traversing the +MRO. #2362

  • +
  • Fix incorrect JSON encoding of aware, non-UTC datetimes. #2374

  • +
  • Template auto reloading will honor debug mode even if +Flask.jinja_env was already accessed. #2373

  • +
  • The following old deprecated code was removed. #2385

    +
      +
    • flask.ext - import extensions directly by their name instead +of through the flask.ext namespace. For example, +import flask.ext.sqlalchemy becomes +import flask_sqlalchemy.

    • +
    • Flask.init_jinja_globals - extend +Flask.create_jinja_environment instead.

    • +
    • Flask.error_handlers - tracked by +Flask.error_handler_spec, use Flask.errorhandler +to register handlers.

    • +
    • Flask.request_globals_class - use +Flask.app_ctx_globals_class instead.

    • +
    • Flask.static_path - use Flask.static_url_path instead.

    • +
    • Request.module - use Request.blueprint instead.

    • +
    +
  • +
  • The Request.json property is no longer deprecated. #1421

  • +
  • Support passing a EnvironBuilder or dict to +test_client.open. #2412

  • +
  • The flask command and Flask.run will load environment +variables from .env and .flaskenv files if python-dotenv is +installed. #2416

  • +
  • When passing a full URL to the test client, the scheme in the URL is +used instead of PREFERRED_URL_SCHEME. #2430

  • +
  • Flask.logger has been simplified. LOGGER_NAME and +LOGGER_HANDLER_POLICY config was removed. The logger is always +named flask.app. The level is only set on first access, it +doesn’t check Flask.debug each time. Only one format is used, +not different ones depending on Flask.debug. No handlers are +removed, and a handler is only added if no handlers are already +configured. #2436

  • +
  • Blueprint view function names may not contain dots. #2450

  • +
  • Fix a ValueError caused by invalid Range requests in some +cases. #2526

  • +
  • The development server uses threads by default. #2529

  • +
  • Loading config files with silent=True will ignore ENOTDIR +errors. #2581

  • +
  • Pass --cert and --key options to flask run to run the +development server over HTTPS. #2606

  • +
  • Added SESSION_COOKIE_SAMESITE to control the SameSite +attribute on the session cookie. #2607

  • +
  • Added Flask.test_cli_runner to create a Click runner that can +invoke Flask CLI commands for testing. #2636

  • +
  • Subdomain matching is disabled by default and setting +SERVER_NAME does not implicitly enable it. It can be enabled by +passing subdomain_matching=True to the Flask constructor. +#2635

  • +
  • A single trailing slash is stripped from the blueprint +url_prefix when it is registered with the app. #2629

  • +
  • Request.get_json doesn’t cache the result if parsing fails when +silent is true. #2651

  • +
  • Request.get_json no longer accepts arbitrary encodings. Incoming +JSON should be encoded using UTF-8 per RFC 8259, but Flask will +autodetect UTF-8, -16, or -32. #2691

  • +
  • Added MAX_COOKIE_SIZE and Response.max_cookie_size to +control when Werkzeug warns about large cookies that browsers may +ignore. #2693

  • +
  • Updated documentation theme to make docs look better in small +windows. #2709

  • +
  • Rewrote the tutorial docs and example project to take a more +structured approach to help new users avoid common pitfalls. +#2676

  • +
+
+
+

Version 0.12.5

+

Released 2020-02-10

+
    +
  • Pin Werkzeug to < 1.0.0. #3497

  • +
+
+
+

Version 0.12.4

+

Released 2018-04-29

+
    +
  • Repackage 0.12.3 to fix package layout issue. #2728

  • +
+
+
+

Version 0.12.3

+

Released 2018-04-26

+
    +
  • Request.get_json no longer accepts arbitrary encodings. +Incoming JSON should be encoded using UTF-8 per RFC 8259, but +Flask will autodetect UTF-8, -16, or -32. #2692

  • +
  • Fix a Python warning about imports when using python -m flask. +#2666

  • +
  • Fix a ValueError caused by invalid Range requests in some +cases.

  • +
+
+
+

Version 0.12.2

+

Released 2017-05-16

+
    +
  • Fix a bug in safe_join on Windows.

  • +
+
+
+

Version 0.12.1

+

Released 2017-03-31

+
    +
  • Prevent flask run from showing a NoAppException when an +ImportError occurs within the imported application module.

  • +
  • Fix encoding behavior of app.config.from_pyfile for Python 3. +#2118

  • +
  • Use the SERVER_NAME config if it is present as default values +for app.run. #2109, #2152

  • +
  • Call ctx.auto_pop with the exception object instead of None, +in the event that a BaseException such as KeyboardInterrupt +is raised in a request handler.

  • +
+
+
+

Version 0.12

+

Released 2016-12-21, codename Punsch

+
    +
  • The cli command now responds to --version.

  • +
  • Mimetype guessing and ETag generation for file-like objects in +send_file has been removed. #104, :pr`1849`

  • +
  • Mimetype guessing in send_file now fails loudly and doesn’t fall +back to application/octet-stream. #1988

  • +
  • Make flask.safe_join able to join multiple paths like +os.path.join #1730

  • +
  • Revert a behavior change that made the dev server crash instead of +returning an Internal Server Error. #2006

  • +
  • Correctly invoke response handlers for both regular request +dispatching as well as error handlers.

  • +
  • Disable logger propagation by default for the app logger.

  • +
  • Add support for range requests in send_file.

  • +
  • app.test_client includes preset default environment, which can +now be directly set, instead of per client.get.

  • +
  • Fix crash when running under PyPy3. #1814

  • +
+
+
+

Version 0.11.1

+

Released 2016-06-07

+
    +
  • Fixed a bug that prevented FLASK_APP=foobar/__init__.py from +working. #1872

  • +
+
+
+

Version 0.11

+

Released 2016-05-29, codename Absinthe

+
    +
  • Added support to serializing top-level arrays to jsonify. This +introduces a security risk in ancient browsers.

  • +
  • Added before_render_template signal.

  • +
  • Added **kwargs to Flask.test_client to support passing +additional keyword arguments to the constructor of +Flask.test_client_class.

  • +
  • Added SESSION_REFRESH_EACH_REQUEST config key that controls the +set-cookie behavior. If set to True a permanent session will be +refreshed each request and get their lifetime extended, if set to +False it will only be modified if the session actually modifies. +Non permanent sessions are not affected by this and will always +expire if the browser window closes.

  • +
  • Made Flask support custom JSON mimetypes for incoming data.

  • +
  • Added support for returning tuples in the form (response, +headers) from a view function.

  • +
  • Added Config.from_json.

  • +
  • Added Flask.config_class.

  • +
  • Added Config.get_namespace.

  • +
  • Templates are no longer automatically reloaded outside of debug +mode. This can be configured with the new TEMPLATES_AUTO_RELOAD +config key.

  • +
  • Added a workaround for a limitation in Python 3.3’s namespace +loader.

  • +
  • Added support for explicit root paths when using Python 3.3’s +namespace packages.

  • +
  • Added flask and the flask.cli module to start the +local debug server through the click CLI system. This is recommended +over the old flask.run() method as it works faster and more +reliable due to a different design and also replaces +Flask-Script.

  • +
  • Error handlers that match specific classes are now checked first, +thereby allowing catching exceptions that are subclasses of HTTP +exceptions (in werkzeug.exceptions). This makes it possible for +an extension author to create exceptions that will by default result +in the HTTP error of their choosing, but may be caught with a custom +error handler if desired.

  • +
  • Added Config.from_mapping.

  • +
  • Flask will now log by default even if debug is disabled. The log +format is now hardcoded but the default log handling can be disabled +through the LOGGER_HANDLER_POLICY configuration key.

  • +
  • Removed deprecated module functionality.

  • +
  • Added the EXPLAIN_TEMPLATE_LOADING config flag which when +enabled will instruct Flask to explain how it locates templates. +This should help users debug when the wrong templates are loaded.

  • +
  • Enforce blueprint handling in the order they were registered for +template loading.

  • +
  • Ported test suite to py.test.

  • +
  • Deprecated request.json in favour of request.get_json().

  • +
  • Add “pretty” and “compressed” separators definitions in jsonify() +method. Reduces JSON response size when +JSONIFY_PRETTYPRINT_REGULAR=False by removing unnecessary white +space included by default after separators.

  • +
  • JSON responses are now terminated with a newline character, because +it is a convention that UNIX text files end with a newline and some +clients don’t deal well when this newline is missing. #1262

  • +
  • The automatically provided OPTIONS method is now correctly +disabled if the user registered an overriding rule with the +lowercase-version options. #1288

  • +
  • flask.json.jsonify now supports the datetime.date type. +#1326

  • +
  • Don’t leak exception info of already caught exceptions to context +teardown handlers. #1393

  • +
  • Allow custom Jinja environment subclasses. #1422

  • +
  • Updated extension dev guidelines.

  • +
  • flask.g now has pop() and setdefault methods.

  • +
  • Turn on autoescape for flask.templating.render_template_string +by default. #1515

  • +
  • flask.ext is now deprecated. #1484

  • +
  • send_from_directory now raises BadRequest if the filename is +invalid on the server OS. #1763

  • +
  • Added the JSONIFY_MIMETYPE configuration variable. #1728

  • +
  • Exceptions during teardown handling will no longer leave bad +application contexts lingering around.

  • +
  • Fixed broken test_appcontext_signals() test case.

  • +
  • Raise an AttributeError in helpers.find_package with a +useful message explaining why it is raised when a PEP 302 import +hook is used without an is_package() method.

  • +
  • Fixed an issue causing exceptions raised before entering a request +or app context to be passed to teardown handlers.

  • +
  • Fixed an issue with query parameters getting removed from requests +in the test client when absolute URLs were requested.

  • +
  • Made @before_first_request into a decorator as intended.

  • +
  • Fixed an etags bug when sending a file streams with a name.

  • +
  • Fixed send_from_directory not expanding to the application root +path correctly.

  • +
  • Changed logic of before first request handlers to flip the flag +after invoking. This will allow some uses that are potentially +dangerous but should probably be permitted.

  • +
  • Fixed Python 3 bug when a handler from +app.url_build_error_handlers reraises the BuildError.

  • +
+
+
+

Version 0.10.1

+

Released 2013-06-14

+
    +
  • Fixed an issue where |tojson was not quoting single quotes which +made the filter not work properly in HTML attributes. Now it’s +possible to use that filter in single quoted attributes. This should +make using that filter with angular.js easier.

  • +
  • Added support for byte strings back to the session system. This +broke compatibility with the common case of people putting binary +data for token verification into the session.

  • +
  • Fixed an issue where registering the same method twice for the same +endpoint would trigger an exception incorrectly.

  • +
+
+
+

Version 0.10

+

Released 2013-06-13, codename Limoncello

+
    +
  • Changed default cookie serialization format from pickle to JSON to +limit the impact an attacker can do if the secret key leaks.

  • +
  • Added template_test methods in addition to the already existing +template_filter method family.

  • +
  • Added template_global methods in addition to the already +existing template_filter method family.

  • +
  • Set the content-length header for x-sendfile.

  • +
  • tojson filter now does not escape script blocks in HTML5 +parsers.

  • +
  • tojson used in templates is now safe by default. This was +allowed due to the different escaping behavior.

  • +
  • Flask will now raise an error if you attempt to register a new +function on an already used endpoint.

  • +
  • Added wrapper module around simplejson and added default +serialization of datetime objects. This allows much easier +customization of how JSON is handled by Flask or any Flask +extension.

  • +
  • Removed deprecated internal flask.session module alias. Use +flask.sessions instead to get the session module. This is not to +be confused with flask.session the session proxy.

  • +
  • Templates can now be rendered without request context. The behavior +is slightly different as the request, session and g +objects will not be available and blueprint’s context processors are +not called.

  • +
  • The config object is now available to the template as a real global +and not through a context processor which makes it available even in +imported templates by default.

  • +
  • Added an option to generate non-ascii encoded JSON which should +result in less bytes being transmitted over the network. It’s +disabled by default to not cause confusion with existing libraries +that might expect flask.json.dumps to return bytes by default.

  • +
  • flask.g is now stored on the app context instead of the request +context.

  • +
  • flask.g now gained a get() method for not erroring out on +non existing items.

  • +
  • flask.g now can be used with the in operator to see what’s +defined and it now is iterable and will yield all attributes stored.

  • +
  • flask.Flask.request_globals_class got renamed to +flask.Flask.app_ctx_globals_class which is a better name to what +it does since 0.10.

  • +
  • request, session and g are now also added as proxies to +the template context which makes them available in imported +templates. One has to be very careful with those though because +usage outside of macros might cause caching.

  • +
  • Flask will no longer invoke the wrong error handlers if a proxy +exception is passed through.

  • +
  • Added a workaround for chrome’s cookies in localhost not working as +intended with domain names.

  • +
  • Changed logic for picking defaults for cookie values from sessions +to work better with Google Chrome.

  • +
  • Added message_flashed signal that simplifies flashing testing.

  • +
  • Added support for copying of request contexts for better working +with greenlets.

  • +
  • Removed custom JSON HTTP exception subclasses. If you were relying +on them you can reintroduce them again yourself trivially. Using +them however is strongly discouraged as the interface was flawed.

  • +
  • Python requirements changed: requiring Python 2.6 or 2.7 now to +prepare for Python 3.3 port.

  • +
  • Changed how the teardown system is informed about exceptions. This +is now more reliable in case something handles an exception halfway +through the error handling process.

  • +
  • Request context preservation in debug mode now keeps the exception +information around which means that teardown handlers are able to +distinguish error from success cases.

  • +
  • Added the JSONIFY_PRETTYPRINT_REGULAR configuration variable.

  • +
  • Flask now orders JSON keys by default to not trash HTTP caches due +to different hash seeds between different workers.

  • +
  • Added appcontext_pushed and appcontext_popped signals.

  • +
  • The builtin run method now takes the SERVER_NAME into account +when picking the default port to run on.

  • +
  • Added flask.request.get_json() as a replacement for the old +flask.request.json property.

  • +
+
+
+

Version 0.9

+

Released 2012-07-01, codename Campari

+
    +
  • The Request.on_json_loading_failed now returns a JSON formatted +response by default.

  • +
  • The url_for function now can generate anchors to the generated +links.

  • +
  • The url_for function now can also explicitly generate URL rules +specific to a given HTTP method.

  • +
  • Logger now only returns the debug log setting if it was not set +explicitly.

  • +
  • Unregister a circular dependency between the WSGI environment and +the request object when shutting down the request. This means that +environ werkzeug.request will be None after the response was +returned to the WSGI server but has the advantage that the garbage +collector is not needed on CPython to tear down the request unless +the user created circular dependencies themselves.

  • +
  • Session is now stored after callbacks so that if the session payload +is stored in the session you can still modify it in an after request +callback.

  • +
  • The Flask class will avoid importing the provided import name if +it can (the required first parameter), to benefit tools which build +Flask instances programmatically. The Flask class will fall back to +using import on systems with custom module hooks, e.g. Google App +Engine, or when the import name is inside a zip archive (usually an +egg) prior to Python 2.7.

  • +
  • Blueprints now have a decorator to add custom template filters +application wide, Blueprint.app_template_filter.

  • +
  • The Flask and Blueprint classes now have a non-decorator method for +adding custom template filters application wide, +Flask.add_template_filter and +Blueprint.add_app_template_filter.

  • +
  • The get_flashed_messages function now allows rendering flashed +message categories in separate blocks, through a category_filter +argument.

  • +
  • The Flask.run method now accepts None for host and +port arguments, using default values when None. This allows +for calling run using configuration values, e.g. +app.run(app.config.get('MYHOST'), app.config.get('MYPORT')), +with proper behavior whether or not a config file is provided.

  • +
  • The render_template method now accepts a either an iterable of +template names or a single template name. Previously, it only +accepted a single template name. On an iterable, the first template +found is rendered.

  • +
  • Added Flask.app_context which works very similar to the request +context but only provides access to the current application. This +also adds support for URL generation without an active request +context.

  • +
  • View functions can now return a tuple with the first instance being +an instance of Response. This allows for returning +jsonify(error="error msg"), 400 from a view function.

  • +
  • Flask and Blueprint now provide a get_send_file_max_age +hook for subclasses to override behavior of serving static files +from Flask when using Flask.send_static_file (used for the +default static file handler) and helpers.send_file. This hook is +provided a filename, which for example allows changing cache +controls by file extension. The default max-age for send_file +and static files can be configured through a new +SEND_FILE_MAX_AGE_DEFAULT configuration variable, which is used +in the default get_send_file_max_age implementation.

  • +
  • Fixed an assumption in sessions implementation which could break +message flashing on sessions implementations which use external +storage.

  • +
  • Changed the behavior of tuple return values from functions. They are +no longer arguments to the response object, they now have a defined +meaning.

  • +
  • Added Flask.request_globals_class to allow a specific class to +be used on creation of the g instance of each request.

  • +
  • Added required_methods attribute to view functions to force-add +methods on registration.

  • +
  • Added flask.after_this_request.

  • +
  • Added flask.stream_with_context and the ability to push contexts +multiple times without producing unexpected behavior.

  • +
+
+
+

Version 0.8.1

+

Released 2012-07-01

+
    +
  • Fixed an issue with the undocumented flask.session module to not +work properly on Python 2.5. It should not be used but did cause +some problems for package managers.

  • +
+
+
+

Version 0.8

+

Released 2011-09-29, codename Rakija

+
    +
  • Refactored session support into a session interface so that the +implementation of the sessions can be changed without having to +override the Flask class.

  • +
  • Empty session cookies are now deleted properly automatically.

  • +
  • View functions can now opt out of getting the automatic OPTIONS +implementation.

  • +
  • HTTP exceptions and Bad Request errors can now be trapped so that +they show up normally in the traceback.

  • +
  • Flask in debug mode is now detecting some common problems and tries +to warn you about them.

  • +
  • Flask in debug mode will now complain with an assertion error if a +view was attached after the first request was handled. This gives +earlier feedback when users forget to import view code ahead of +time.

  • +
  • Added the ability to register callbacks that are only triggered once +at the beginning of the first request with +Flask.before_first_request.

  • +
  • Malformed JSON data will now trigger a bad request HTTP exception +instead of a value error which usually would result in a 500 +internal server error if not handled. This is a backwards +incompatible change.

  • +
  • Applications now not only have a root path where the resources and +modules are located but also an instance path which is the +designated place to drop files that are modified at runtime (uploads +etc.). Also this is conceptually only instance depending and outside +version control so it’s the perfect place to put configuration files +etc.

  • +
  • Added the APPLICATION_ROOT configuration variable.

  • +
  • Implemented TestClient.session_transaction to easily modify +sessions from the test environment.

  • +
  • Refactored test client internally. The APPLICATION_ROOT +configuration variable as well as SERVER_NAME are now properly +used by the test client as defaults.

  • +
  • Added View.decorators to support simpler decorating of pluggable +(class-based) views.

  • +
  • Fixed an issue where the test client if used with the “with” +statement did not trigger the execution of the teardown handlers.

  • +
  • Added finer control over the session cookie parameters.

  • +
  • HEAD requests to a method view now automatically dispatch to the +get method if no handler was implemented.

  • +
  • Implemented the virtual flask.ext package to import extensions +from.

  • +
  • The context preservation on exceptions is now an integral component +of Flask itself and no longer of the test client. This cleaned up +some internal logic and lowers the odds of runaway request contexts +in unittests.

  • +
  • Fixed the Jinja2 environment’s list_templates method not +returning the correct names when blueprints or modules were +involved.

  • +
+
+
+

Version 0.7.2

+

Released 2011-07-06

+
    +
  • Fixed an issue with URL processors not properly working on +blueprints.

  • +
+
+
+

Version 0.7.1

+

Released 2011-06-29

+
    +
  • Added missing future import that broke 2.5 compatibility.

  • +
  • Fixed an infinite redirect issue with blueprints.

  • +
+
+
+

Version 0.7

+

Released 2011-06-28, codename Grappa

+
    +
  • Added Flask.make_default_options_response which can be used by +subclasses to alter the default behavior for OPTIONS responses.

  • +
  • Unbound locals now raise a proper RuntimeError instead of an +AttributeError.

  • +
  • Mimetype guessing and etag support based on file objects is now +deprecated for send_file because it was unreliable. Pass +filenames instead or attach your own etags and provide a proper +mimetype by hand.

  • +
  • Static file handling for modules now requires the name of the static +folder to be supplied explicitly. The previous autodetection was not +reliable and caused issues on Google’s App Engine. Until 1.0 the old +behavior will continue to work but issue dependency warnings.

  • +
  • Fixed a problem for Flask to run on jython.

  • +
  • Added a PROPAGATE_EXCEPTIONS configuration variable that can be +used to flip the setting of exception propagation which previously +was linked to DEBUG alone and is now linked to either DEBUG +or TESTING.

  • +
  • Flask no longer internally depends on rules being added through the +add_url_rule function and can now also accept regular werkzeug +rules added to the url map.

  • +
  • Added an endpoint method to the flask application object which +allows one to register a callback to an arbitrary endpoint with a +decorator.

  • +
  • Use Last-Modified for static file sending instead of Date which was +incorrectly introduced in 0.6.

  • +
  • Added create_jinja_loader to override the loader creation +process.

  • +
  • Implemented a silent flag for config.from_pyfile.

  • +
  • Added teardown_request decorator, for functions that should run +at the end of a request regardless of whether an exception occurred. +Also the behavior for after_request was changed. It’s now no +longer executed when an exception is raised.

  • +
  • Implemented has_request_context.

  • +
  • Deprecated init_jinja_globals. Override the +Flask.create_jinja_environment method instead to achieve the +same functionality.

  • +
  • Added safe_join.

  • +
  • The automatic JSON request data unpacking now looks at the charset +mimetype parameter.

  • +
  • Don’t modify the session on get_flashed_messages if there are no +messages in the session.

  • +
  • before_request handlers are now able to abort requests with +errors.

  • +
  • It is not possible to define user exception handlers. That way you +can provide custom error messages from a central hub for certain +errors that might occur during request processing (for instance +database connection errors, timeouts from remote resources etc.).

  • +
  • Blueprints can provide blueprint specific error handlers.

  • +
  • Implemented generic class-based views.

  • +
+
+
+

Version 0.6.1

+

Released 2010-12-31

+
    +
  • Fixed an issue where the default OPTIONS response was not +exposing all valid methods in the Allow header.

  • +
  • Jinja2 template loading syntax now allows “./” in front of a +template load path. Previously this caused issues with module +setups.

  • +
  • Fixed an issue where the subdomain setting for modules was ignored +for the static folder.

  • +
  • Fixed a security problem that allowed clients to download arbitrary +files if the host server was a windows based operating system and +the client uses backslashes to escape the directory the files where +exposed from.

  • +
+
+
+

Version 0.6

+

Released 2010-07-27, codename Whisky

+
    +
  • After request functions are now called in reverse order of +registration.

  • +
  • OPTIONS is now automatically implemented by Flask unless the +application explicitly adds ‘OPTIONS’ as method to the URL rule. In +this case no automatic OPTIONS handling kicks in.

  • +
  • Static rules are now even in place if there is no static folder for +the module. This was implemented to aid GAE which will remove the +static folder if it’s part of a mapping in the .yml file.

  • +
  • Flask.config is now available in the templates as config.

  • +
  • Context processors will no longer override values passed directly to +the render function.

  • +
  • Added the ability to limit the incoming request data with the new +MAX_CONTENT_LENGTH configuration value.

  • +
  • The endpoint for the Module.add_url_rule method is now optional +to be consistent with the function of the same name on the +application object.

  • +
  • Added a make_response function that simplifies creating response +object instances in views.

  • +
  • Added signalling support based on blinker. This feature is currently +optional and supposed to be used by extensions and applications. If +you want to use it, make sure to have blinker installed.

  • +
  • Refactored the way URL adapters are created. This process is now +fully customizable with the Flask.create_url_adapter method.

  • +
  • Modules can now register for a subdomain instead of just an URL +prefix. This makes it possible to bind a whole module to a +configurable subdomain.

  • +
+
+
+

Version 0.5.2

+

Released 2010-07-15

+
    +
  • Fixed another issue with loading templates from directories when +modules were used.

  • +
+
+
+

Version 0.5.1

+

Released 2010-07-06

+
    +
  • Fixes an issue with template loading from directories when modules +where used.

  • +
+
+
+

Version 0.5

+

Released 2010-07-06, codename Calvados

+
    +
  • Fixed a bug with subdomains that was caused by the inability to +specify the server name. The server name can now be set with the +SERVER_NAME config key. This key is now also used to set the +session cookie cross-subdomain wide.

  • +
  • Autoescaping is no longer active for all templates. Instead it is +only active for .html, .htm, .xml and .xhtml. Inside +templates this behavior can be changed with the autoescape tag.

  • +
  • Refactored Flask internally. It now consists of more than a single +file.

  • +
  • send_file now emits etags and has the ability to do conditional +responses builtin.

  • +
  • (temporarily) dropped support for zipped applications. This was a +rarely used feature and led to some confusing behavior.

  • +
  • Added support for per-package template and static-file directories.

  • +
  • Removed support for create_jinja_loader which is no longer used +in 0.5 due to the improved module support.

  • +
  • Added a helper function to expose files from any directory.

  • +
+
+
+

Version 0.4

+

Released 2010-06-18, codename Rakia

+
    +
  • Added the ability to register application wide error handlers from +modules.

  • +
  • Flask.after_request handlers are now also invoked if the request +dies with an exception and an error handling page kicks in.

  • +
  • Test client has not the ability to preserve the request context for +a little longer. This can also be used to trigger custom requests +that do not pop the request stack for testing.

  • +
  • Because the Python standard library caches loggers, the name of the +logger is configurable now to better support unittests.

  • +
  • Added TESTING switch that can activate unittesting helpers.

  • +
  • The logger switches to DEBUG mode now if debug is enabled.

  • +
+
+
+

Version 0.3.1

+

Released 2010-05-28

+
    +
  • Fixed a error reporting bug with Config.from_envvar.

  • +
  • Removed some unused code.

  • +
  • Release does no longer include development leftover files (.git +folder for themes, built documentation in zip and pdf file and some +.pyc files)

  • +
+
+
+

Version 0.3

+

Released 2010-05-28, codename Schnaps

+
    +
  • Added support for categories for flashed messages.

  • +
  • The application now configures a logging.Handler and will log +request handling exceptions to that logger when not in debug mode. +This makes it possible to receive mails on server errors for +example.

  • +
  • Added support for context binding that does not require the use of +the with statement for playing in the console.

  • +
  • The request context is now available within the with statement +making it possible to further push the request context or pop it.

  • +
  • Added support for configurations.

  • +
+
+
+

Version 0.2

+

Released 2010-05-12, codename J?germeister

+
    +
  • Various bugfixes

  • +
  • Integrated JSON support

  • +
  • Added get_template_attribute helper function.

  • +
  • Flask.add_url_rule can now also register a view function.

  • +
  • Refactored internal request dispatching.

  • +
  • Server listens on 127.0.0.1 by default now to fix issues with +chrome.

  • +
  • Added external URL support.

  • +
  • Added support for send_file.

  • +
  • Module support and internal request handling refactoring to better +support pluggable applications.

  • +
  • Sessions can be set to be permanent now on a per-session basis.

  • +
  • Better error reporting on missing secret keys.

  • +
  • Added support for Google Appengine.

  • +
+
+
+

Version 0.1

+

Released 2010-04-16

+
    +
  • First public preview release.

  • +
+
+
+ + +
+
+
+
+ + +
+
+ + + diff --git a/_build/cli/index.html b/_build/cli/index.html new file mode 100644 index 00000000..592f47eb --- /dev/null +++ b/_build/cli/index.html @@ -0,0 +1,550 @@ + + + + + + + + Command Line Interface — Flask Documentation (3.1.x) + + + + + + + + + + + + + + + + +
+
+
+
+ +
+

Command Line Interface

+

Installing Flask installs the flask script, a Click command line +interface, in your virtualenv. Executed from the terminal, this script gives +access to built-in, extension, and application-defined commands. The --help +option will give more information about any commands and options.

+
+

Application Discovery

+

The flask command is installed by Flask, not your application; it must be +told where to find your application in order to use it. The --app +option is used to specify how to load the application.

+

While --app supports a variety of options for specifying your +application, most use cases should be simple. Here are the typical values:

+
+
(nothing)

The name “app” or “wsgi” is imported (as a “.py” file, or package), +automatically detecting an app (app or application) or +factory (create_app or make_app).

+
+
--app hello

The given name is imported, automatically detecting an app (app +or application) or factory (create_app or make_app).

+
+
+
+

--app has three parts: an optional path that sets the current working +directory, a Python file or dotted import path, and an optional variable +name of the instance or factory. If the name is a factory, it can optionally +be followed by arguments in parentheses. The following values demonstrate these +parts:

+
+
--app src/hello

Sets the current working directory to src then imports hello.

+
+
--app hello.web

Imports the path hello.web.

+
+
--app hello:app2

Uses the app2 Flask instance in hello.

+
+
--app 'hello:create_app("dev")'

The create_app factory in hello is called with the string 'dev' +as the argument.

+
+
+

If --app is not set, the command will try to import “app” or +“wsgi” (as a “.py” file, or package) and try to detect an application +instance or factory.

+

Within the given import, the command looks for an application instance named +app or application, then any application instance. If no instance is +found, the command looks for a factory function named create_app or +make_app that returns an instance.

+

If parentheses follow the factory name, their contents are parsed as +Python literals and passed as arguments and keyword arguments to the +function. This means that strings must still be in quotes.

+
+
+

Run the Development Server

+

The run command will start the development server. It +replaces the Flask.run() method in most cases.

+
$ flask --app hello run
+ * Serving Flask app "hello"
+ * Running on http://127.0.0.1:5000/ (Press CTRL+C to quit)
+
+
+
+

Warning

+

Do not use this command to run your application in production. +Only use the development server during development. The development server +is provided for convenience, but is not designed to be particularly secure, +stable, or efficient. See Deploying to Production for how to run in production.

+
+

If another program is already using port 5000, you’ll see +OSError: [Errno 98] or OSError: [WinError 10013] when the +server tries to start. See Address already in use for how to +handle that.

+
+

Debug Mode

+

In debug mode, the flask run command will enable the interactive debugger and the +reloader by default, and make errors easier to see and debug. To enable debug mode, use +the --debug option.

+
$ flask --app hello run --debug
+ * Serving Flask app "hello"
+ * Debug mode: on
+ * Running on http://127.0.0.1:5000/ (Press CTRL+C to quit)
+ * Restarting with inotify reloader
+ * Debugger is active!
+ * Debugger PIN: 223-456-919
+
+
+

The --debug option can also be passed to the top level flask command to enable +debug mode for any command. The following two run calls are equivalent.

+
$ flask --app hello --debug run
+$ flask --app hello run --debug
+
+
+
+
+

Watch and Ignore Files with the Reloader

+

When using debug mode, the reloader will trigger whenever your Python code or imported +modules change. The reloader can watch additional files with the --extra-files +option. Multiple paths are separated with :, or ; on Windows.

+
$ flask run --extra-files file1:dirA/file2:dirB/
+ * Running on http://127.0.0.1:8000/
+ * Detected change in '/path/to/file1', reloading
+
+
+

The reloader can also ignore files using fnmatch patterns with the +--exclude-patterns option. Multiple patterns are separated with :, or ; on +Windows.

+
+
+
+

Open a Shell

+

To explore the data in your application, you can start an interactive Python +shell with the shell command. An application +context will be active, and the app instance will be imported.

+
$ flask shell
+Python 3.10.0 (default, Oct 27 2021, 06:59:51) [GCC 11.1.0] on linux
+App: example [production]
+Instance: /home/david/Projects/pallets/flask/instance
+>>>
+
+
+

Use shell_context_processor() to add other automatic imports.

+
+
+

Environment Variables From dotenv

+

The flask command supports setting any option for any command with +environment variables. The variables are named like FLASK_OPTION or +FLASK_COMMAND_OPTION, for example FLASK_APP or +FLASK_RUN_PORT.

+

Rather than passing options every time you run a command, or environment +variables every time you open a new terminal, you can use Flask’s dotenv +support to set environment variables automatically.

+

If python-dotenv is installed, running the flask command will set +environment variables defined in the files .env and .flaskenv. +You can also specify an extra file to load with the --env-file +option. Dotenv files can be used to avoid having to set --app or +FLASK_APP manually, and to set configuration using environment +variables similar to how some deployment services work.

+

Variables set on the command line are used over those set in .env, +which are used over those set in .flaskenv. .flaskenv should be +used for public variables, such as FLASK_APP, while .env should not +be committed to your repository so that it can set private variables.

+

Directories are scanned upwards from the directory you call flask +from to locate the files.

+

The files are only loaded by the flask command or calling +run(). If you would like to load these files when running in +production, you should call load_dotenv() manually.

+
+

Setting Command Options

+

Click is configured to load default values for command options from +environment variables. The variables use the pattern +FLASK_COMMAND_OPTION. For example, to set the port for the run +command, instead of flask run --port 8000:

+
+
$ export FLASK_RUN_PORT=8000
+$ flask run
+ * Running on http://127.0.0.1:8000/
+
+
+
+

These can be added to the .flaskenv file just like FLASK_APP to +control default command options.

+
+
+

Disable dotenv

+

The flask command will show a message if it detects dotenv files but +python-dotenv is not installed.

+
$ flask run
+ * Tip: There are .env files present. Do "pip install python-dotenv" to use them.
+
+
+

You can tell Flask not to load dotenv files even when python-dotenv is +installed by setting the FLASK_SKIP_DOTENV environment variable. +This can be useful if you want to load them manually, or if you’re using +a project runner that loads them already. Keep in mind that the +environment variables must be set before the app loads or it won’t +configure as expected.

+
+
$ export FLASK_SKIP_DOTENV=1
+$ flask run
+
+
+
+
+
+
+

Environment Variables From virtualenv

+

If you do not want to install dotenv support, you can still set environment +variables by adding them to the end of the virtualenv’s activate +script. Activating the virtualenv will set the variables.

+
+

Unix Bash, .venv/bin/activate:

+
$ export FLASK_APP=hello
+
+
+
+

It is preferred to use dotenv support over this, since .flaskenv can be +committed to the repository so that it works automatically wherever the project +is checked out.

+
+
+

Custom Commands

+

The flask command is implemented using Click. See that project’s +documentation for full information about writing commands.

+

This example adds the command create-user that takes the argument +name.

+
import click
+from flask import Flask
+
+app = Flask(__name__)
+
+@app.cli.command("create-user")
+@click.argument("name")
+def create_user(name):
+    ...
+
+
+
$ flask create-user admin
+
+
+

This example adds the same command, but as user create, a command in a +group. This is useful if you want to organize multiple related commands.

+
import click
+from flask import Flask
+from flask.cli import AppGroup
+
+app = Flask(__name__)
+user_cli = AppGroup('user')
+
+@user_cli.command('create')
+@click.argument('name')
+def create_user(name):
+    ...
+
+app.cli.add_command(user_cli)
+
+
+
$ flask user create demo
+
+
+

See Running Commands with the CLI Runner for an overview of how to test your custom +commands.

+
+

Registering Commands with Blueprints

+

If your application uses blueprints, you can optionally register CLI +commands directly onto them. When your blueprint is registered onto your +application, the associated commands will be available to the flask +command. By default, those commands will be nested in a group matching +the name of the blueprint.

+
from flask import Blueprint
+
+bp = Blueprint('students', __name__)
+
+@bp.cli.command('create')
+@click.argument('name')
+def create(name):
+    ...
+
+app.register_blueprint(bp)
+
+
+
$ flask students create alice
+
+
+

You can alter the group name by specifying the cli_group parameter +when creating the Blueprint object, or later with +app.register_blueprint(bp, cli_group='...'). +The following are equivalent:

+
bp = Blueprint('students', __name__, cli_group='other')
+# or
+app.register_blueprint(bp, cli_group='other')
+
+
+
$ flask other create alice
+
+
+

Specifying cli_group=None will remove the nesting and merge the +commands directly to the application’s level:

+
bp = Blueprint('students', __name__, cli_group=None)
+# or
+app.register_blueprint(bp, cli_group=None)
+
+
+
$ flask create alice
+
+
+
+
+

Application Context

+

Commands added using the Flask app’s cli or +FlaskGroup command() decorator +will be executed with an application context pushed, so your custom +commands and parameters have access to the app and its configuration. The +with_appcontext() decorator can be used to get the same +behavior, but is not needed in most cases.

+
import click
+from flask.cli import with_appcontext
+
+@click.command()
+@with_appcontext
+def do_work():
+    ...
+
+app.cli.add_command(do_work)
+
+
+
+
+
+

Plugins

+

Flask will automatically load commands specified in the flask.commands +entry point. This is useful for extensions that want to add commands when +they are installed. Entry points are specified in pyproject.toml:

+
[project.entry-points."flask.commands"]
+my-command = "my_extension.commands:cli"
+
+
+

Inside my_extension/commands.py you can then export a Click +object:

+
import click
+
+@click.command()
+def cli():
+    ...
+
+
+

Once that package is installed in the same virtualenv as your Flask project, +you can run flask my-command to invoke the command.

+
+
+

Custom Scripts

+

When you are using the app factory pattern, it may be more convenient to define +your own Click script. Instead of using --app and letting Flask load +your application, you can create your own Click object and export it as a +console script entry point.

+

Create an instance of FlaskGroup and pass it the factory:

+
import click
+from flask import Flask
+from flask.cli import FlaskGroup
+
+def create_app():
+    app = Flask('wiki')
+    # other setup
+    return app
+
+@click.group(cls=FlaskGroup, create_app=create_app)
+def cli():
+    """Management script for the Wiki application."""
+
+
+

Define the entry point in pyproject.toml:

+
[project.scripts]
+wiki = "wiki:cli"
+
+
+

Install the application in the virtualenv in editable mode and the custom +script is available. Note that you don’t need to set --app.

+
$ pip install -e .
+$ wiki run
+
+
+
+

Errors in Custom Scripts

+

When using a custom script, if you introduce an error in your +module-level code, the reloader will fail because it can no longer +load the entry point.

+

The flask command, being separate from your code, does not have +this issue and is recommended in most cases.

+
+
+
+

PyCharm Integration

+

PyCharm Professional provides a special Flask run configuration to run the development +server. For the Community Edition, and for other commands besides run, you need to +create a custom run configuration. These instructions should be similar for any other +IDE you use.

+

In PyCharm, with your project open, click on Run from the menu bar and go to Edit +Configurations. You’ll see a screen similar to this:

+Screenshot of PyCharm run configuration. +

Once you create a configuration for the flask run, you can copy and change it to +call any other command.

+

Click the + (Add New Configuration) button and select Python. Give the configuration +a name such as “flask run”.

+

Click the Script path dropdown and change it to Module name, then input flask.

+

The Parameters field is set to the CLI command to execute along with any arguments. +This example uses --app hello run --debug, which will run the development server in +debug mode. --app hello should be the import or file with your Flask app.

+

If you installed your project as a package in your virtualenv, you may uncheck the +PYTHONPATH options. This will more accurately match how you deploy later.

+

Click OK to save and close the configuration. Select the configuration in the main +PyCharm window and click the play button next to it to run the server.

+

Now that you have a configuration for flask run, you can copy that configuration and +change the Parameters argument to run a different CLI command.

+
+
+ + +
+
+
+
+ + +
+
+ + + diff --git a/_build/config/index.html b/_build/config/index.html new file mode 100644 index 00000000..752a62f6 --- /dev/null +++ b/_build/config/index.html @@ -0,0 +1,930 @@ + + + + + + + + Configuration Handling — Flask Documentation (3.1.x) + + + + + + + + + + + + + + + + +
+
+
+
+ +
+

Configuration Handling

+

Applications need some kind of configuration. There are different settings +you might want to change depending on the application environment like +toggling the debug mode, setting the secret key, and other such +environment-specific things.

+

The way Flask is designed usually requires the configuration to be +available when the application starts up. You can hard code the +configuration in the code, which for many small applications is not +actually that bad, but there are better ways.

+

Independent of how you load your config, there is a config object +available which holds the loaded configuration values: +The config attribute of the Flask +object. This is the place where Flask itself puts certain configuration +values and also where extensions can put their configuration values. But +this is also where you can have your own configuration.

+
+

Configuration Basics

+

The config is actually a subclass of a dictionary and +can be modified just like any dictionary:

+
app = Flask(__name__)
+app.config['TESTING'] = True
+
+
+

Certain configuration values are also forwarded to the +Flask object so you can read and write them from there:

+
app.testing = True
+
+
+

To update multiple keys at once you can use the dict.update() +method:

+
app.config.update(
+    TESTING=True,
+    SECRET_KEY='192b9bdd22ab9ed4d12e236c78afcb9a393ec15f71bbf5dc987d54727823bcbf'
+)
+
+
+
+
+

Debug Mode

+

The DEBUG config value is special because it may behave inconsistently if +changed after the app has begun setting up. In order to set debug mode reliably, use the +--debug option on the flask or flask run command. flask run will use the +interactive debugger and reloader by default in debug mode.

+
$ flask --app hello run --debug
+
+
+

Using the option is recommended. While it is possible to set DEBUG in your +config or code, this is strongly discouraged. It can’t be read early by the +flask run command, and some systems or extensions may have already configured +themselves based on a previous value.

+
+
+

Builtin Configuration Values

+

The following configuration values are used internally by Flask:

+
+
+DEBUG
+

Whether debug mode is enabled. When using flask run to start the development +server, an interactive debugger will be shown for unhandled exceptions, and the +server will be reloaded when code changes. The debug attribute +maps to this config key. This is set with the FLASK_DEBUG environment variable. +It may not behave as expected if set in code.

+

Do not enable debug mode when deploying in production.

+

Default: False

+
+ +
+
+TESTING
+

Enable testing mode. Exceptions are propagated rather than handled by the +the app’s error handlers. Extensions may also change their behavior to +facilitate easier testing. You should enable this in your own tests.

+

Default: False

+
+ +
+
+PROPAGATE_EXCEPTIONS
+

Exceptions are re-raised rather than being handled by the app’s error +handlers. If not set, this is implicitly true if TESTING or DEBUG +is enabled.

+

Default: None

+
+ +
+
+TRAP_HTTP_EXCEPTIONS
+

If there is no handler for an HTTPException-type exception, re-raise it +to be handled by the interactive debugger instead of returning it as a +simple error response.

+

Default: False

+
+ +
+
+TRAP_BAD_REQUEST_ERRORS
+

Trying to access a key that doesn’t exist from request dicts like args +and form will return a 400 Bad Request error page. Enable this to treat +the error as an unhandled exception instead so that you get the interactive +debugger. This is a more specific version of TRAP_HTTP_EXCEPTIONS. If +unset, it is enabled in debug mode.

+

Default: None

+
+ +
+
+SECRET_KEY
+

A secret key that will be used for securely signing the session cookie +and can be used for any other security related needs by extensions or your +application. It should be a long random bytes or str. For +example, copy the output of this to your config:

+
$ python -c 'import secrets; print(secrets.token_hex())'
+'192b9bdd22ab9ed4d12e236c78afcb9a393ec15f71bbf5dc987d54727823bcbf'
+
+
+

Do not reveal the secret key when posting questions or committing code.

+

Default: None

+
+ +
+
+SECRET_KEY_FALLBACKS
+

A list of old secret keys that can still be used for unsigning, most recent +first. This allows a project to implement key rotation without invalidating +active sessions or other recently-signed secrets.

+

Keys should be removed after an appropriate period of time, as checking each +additional key adds some overhead.

+

Flask’s built-in secure cookie session supports this. Extensions that use +SECRET_KEY may not support this yet.

+

Default: None

+
+

Added in version 3.1.

+
+
+ +
+ +

The name of the session cookie. Can be changed in case you already have a +cookie with the same name.

+

Default: 'session'

+
+ +
+ +

The value of the Domain parameter on the session cookie. If not set, browsers +will only send the cookie to the exact domain it was set from. Otherwise, they +will send it to any subdomain of the given value as well.

+

Not setting this value is more restricted and secure than setting it.

+

Default: None

+
+

Warning

+

If this is changed after the browser created a cookie is created with +one setting, it may result in another being created. Browsers may send +send both in an undefined order. In that case, you may want to change +SESSION_COOKIE_NAME as well or otherwise invalidate old sessions.

+
+
+Changelog
+

Changed in version 2.3: Not set by default, does not fall back to SERVER_NAME.

+
+
+ +
+ +

The path that the session cookie will be valid for. If not set, the cookie +will be valid underneath APPLICATION_ROOT or / if that is not set.

+

Default: None

+
+ +
+ +

Browsers will not allow JavaScript access to cookies marked as “HTTP only” +for security.

+

Default: True

+
+ +
+ +

Browsers will only send cookies with requests over HTTPS if the cookie is +marked “secure”. The application must be served over HTTPS for this to make +sense.

+

Default: False

+
+ +
+ +

Browsers will send cookies based on the top-level document’s domain, rather +than only the domain of the document setting the cookie. This prevents third +party cookies set in iframes from “leaking” between separate sites.

+

Browsers are beginning to disallow non-partitioned third party cookies, so +you need to mark your cookies partitioned if you expect them to work in such +embedded situations.

+

Enabling this implicitly enables SESSION_COOKIE_SECURE as well, as +it is only valid when served over HTTPS.

+

Default: False

+
+

Added in version 3.1.

+
+
+ +
+ +

Restrict how cookies are sent with requests from external sites. Can +be set to 'Lax' (recommended) or 'Strict'. +See Set-Cookie options.

+

Default: None

+
+Changelog
+

Added in version 1.0.

+
+
+ +
+
+PERMANENT_SESSION_LIFETIME
+

If session.permanent is true, the cookie’s expiration will be set this +number of seconds in the future. Can either be a +datetime.timedelta or an int.

+

Flask’s default cookie implementation validates that the cryptographic +signature is not older than this value.

+

Default: timedelta(days=31) (2678400 seconds)

+
+ +
+
+SESSION_REFRESH_EACH_REQUEST
+

Control whether the cookie is sent with every response when +session.permanent is true. Sending the cookie every time (the default) +can more reliably keep the session from expiring, but uses more bandwidth. +Non-permanent sessions are not affected.

+

Default: True

+
+ +
+
+USE_X_SENDFILE
+

When serving files, set the X-Sendfile header instead of serving the +data with Flask. Some web servers, such as Apache, recognize this and serve +the data more efficiently. This only makes sense when using such a server.

+

Default: False

+
+ +
+
+SEND_FILE_MAX_AGE_DEFAULT
+

When serving files, set the cache control max age to this number of +seconds. Can be a datetime.timedelta or an int. +Override this value on a per-file basis using +get_send_file_max_age() on the application or +blueprint.

+

If None, send_file tells the browser to use conditional +requests will be used instead of a timed cache, which is usually +preferable.

+

Default: None

+
+ +
+
+TRUSTED_HOSTS
+

Validate Request.host and other attributes that use it against +these trusted values. Raise a SecurityError if +the host is invalid, which results in a 400 error. If it is None, all +hosts are valid. Each value is either an exact match, or can start with +a dot . to match any subdomain.

+

Validation is done during routing against this value. before_request and +after_request callbacks will still be called.

+

Default: None

+
+

Added in version 3.1.

+
+
+ +
+
+SERVER_NAME
+

Inform the application what host and port it is bound to.

+

Must be set if subdomain_matching is enabled, to be able to extract the +subdomain from the request.

+

Must be set for url_for to generate external URLs outside of a +request context.

+

Default: None

+
+

Changed in version 3.1: Does not restrict requests to only this domain, for both +subdomain_matching and host_matching.

+
+
+Changelog
+

Changed in version 2.3: Does not affect SESSION_COOKIE_DOMAIN.

+
+
+

Changed in version 1.0: Does not implicitly enable subdomain_matching.

+
+
+ +
+
+APPLICATION_ROOT
+

Inform the application what path it is mounted under by the application / +web server. This is used for generating URLs outside the context of a +request (inside a request, the dispatcher is responsible for setting +SCRIPT_NAME instead; see Application Dispatching +for examples of dispatch configuration).

+

Will be used for the session cookie path if SESSION_COOKIE_PATH is not +set.

+

Default: '/'

+
+ +
+
+PREFERRED_URL_SCHEME
+

Use this scheme for generating external URLs when not in a request context.

+

Default: 'http'

+
+ +
+
+MAX_CONTENT_LENGTH
+

The maximum number of bytes that will be read during this request. If +this limit is exceeded, a 413 RequestEntityTooLarge +error is raised. If it is set to None, no limit is enforced at the +Flask application level. However, if it is None and the request has no +Content-Length header and the WSGI server does not indicate that it +terminates the stream, then no data is read to avoid an infinite stream.

+

Each request defaults to this config. It can be set on a specific +Request.max_content_length to apply the limit to that specific +view. This should be set appropriately based on an application’s or view’s +specific needs.

+

Default: None

+
+Changelog
+

Added in version 0.6.

+
+
+ +
+
+MAX_FORM_MEMORY_SIZE
+

The maximum size in bytes any non-file form field may be in a +multipart/form-data body. If this limit is exceeded, a 413 +RequestEntityTooLarge error is raised. If it is +set to None, no limit is enforced at the Flask application level.

+

Each request defaults to this config. It can be set on a specific +Request.max_form_memory_parts to apply the limit to that specific +view. This should be set appropriately based on an application’s or view’s +specific needs.

+

Default: 500_000

+
+

Added in version 3.1.

+
+
+ +
+
+MAX_FORM_PARTS
+

The maximum number of fields that may be present in a +multipart/form-data body. If this limit is exceeded, a 413 +RequestEntityTooLarge error is raised. If it +is set to None, no limit is enforced at the Flask application level.

+

Each request defaults to this config. It can be set on a specific +Request.max_form_parts to apply the limit to that specific view. +This should be set appropriately based on an application’s or view’s +specific needs.

+

Default: 1_000

+
+

Added in version 3.1.

+
+
+ +
+
+TEMPLATES_AUTO_RELOAD
+

Reload templates when they are changed. If not set, it will be enabled in +debug mode.

+

Default: None

+
+ +
+
+EXPLAIN_TEMPLATE_LOADING
+

Log debugging information tracing how a template file was loaded. This can +be useful to figure out why a template was not loaded or the wrong file +appears to be loaded.

+

Default: False

+
+ +
+ +

Warn if cookie headers are larger than this many bytes. Defaults to +4093. Larger cookies may be silently ignored by browsers. Set to +0 to disable the warning.

+
+ +
+
+PROVIDE_AUTOMATIC_OPTIONS
+

Set to False to disable the automatic addition of OPTIONS +responses. This can be overridden per route by altering the +provide_automatic_options attribute.

+
+ +
+

Added in version 3.10: Added PROVIDE_AUTOMATIC_OPTIONS to control the default +addition of autogenerated OPTIONS responses.

+
+
+Changelog
+

Changed in version 2.3: JSON_AS_ASCII, JSON_SORT_KEYS, JSONIFY_MIMETYPE, and +JSONIFY_PRETTYPRINT_REGULAR were removed. The default app.json provider has +equivalent attributes instead.

+
+
+

Changed in version 2.3: ENV was removed.

+
+
+

Changed in version 2.2: Removed PRESERVE_CONTEXT_ON_EXCEPTION.

+
+
+

Changed in version 1.0: LOGGER_NAME and LOGGER_HANDLER_POLICY were removed. See +Logging for information about configuration.

+

Added ENV to reflect the FLASK_ENV environment +variable.

+

Added SESSION_COOKIE_SAMESITE to control the session +cookie’s SameSite option.

+

Added MAX_COOKIE_SIZE to control a warning from Werkzeug.

+
+
+

Added in version 0.11: SESSION_REFRESH_EACH_REQUEST, TEMPLATES_AUTO_RELOAD, +LOGGER_HANDLER_POLICY, EXPLAIN_TEMPLATE_LOADING

+
+
+

Added in version 0.10: JSON_AS_ASCII, JSON_SORT_KEYS, JSONIFY_PRETTYPRINT_REGULAR

+
+
+

Added in version 0.9: PREFERRED_URL_SCHEME

+
+
+

Added in version 0.8: TRAP_BAD_REQUEST_ERRORS, TRAP_HTTP_EXCEPTIONS, +APPLICATION_ROOT, SESSION_COOKIE_DOMAIN, +SESSION_COOKIE_PATH, SESSION_COOKIE_HTTPONLY, +SESSION_COOKIE_SECURE

+
+
+

Added in version 0.7: PROPAGATE_EXCEPTIONS, PRESERVE_CONTEXT_ON_EXCEPTION

+
+
+

Added in version 0.6: MAX_CONTENT_LENGTH

+
+
+

Added in version 0.5: SERVER_NAME

+
+
+

Added in version 0.4: LOGGER_NAME

+
+
+
+

Configuring from Python Files

+

Configuration becomes more useful if you can store it in a separate file, ideally +located outside the actual application package. You can deploy your application, then +separately configure it for the specific deployment.

+

A common pattern is this:

+
app = Flask(__name__)
+app.config.from_object('yourapplication.default_settings')
+app.config.from_envvar('YOURAPPLICATION_SETTINGS')
+
+
+

This first loads the configuration from the +yourapplication.default_settings module and then overrides the values +with the contents of the file the YOURAPPLICATION_SETTINGS +environment variable points to. This environment variable can be set +in the shell before starting the server:

+
+
$ export YOURAPPLICATION_SETTINGS=/path/to/settings.cfg
+$ flask run
+ * Running on http://127.0.0.1:5000/
+
+
+
+

The configuration files themselves are actual Python files. Only values +in uppercase are actually stored in the config object later on. So make +sure to use uppercase letters for your config keys.

+

Here is an example of a configuration file:

+
# Example configuration
+SECRET_KEY = '192b9bdd22ab9ed4d12e236c78afcb9a393ec15f71bbf5dc987d54727823bcbf'
+
+
+

Make sure to load the configuration very early on, so that extensions have +the ability to access the configuration when starting up. There are other +methods on the config object as well to load from individual files. For a +complete reference, read the Config object’s +documentation.

+
+
+

Configuring from Data Files

+

It is also possible to load configuration from a file in a format of +your choice using from_file(). For example to load +from a TOML file:

+
import tomllib
+app.config.from_file("config.toml", load=tomllib.load, text=False)
+
+
+

Or from a JSON file:

+
import json
+app.config.from_file("config.json", load=json.load)
+
+
+
+
+

Configuring from Environment Variables

+

In addition to pointing to configuration files using environment +variables, you may find it useful (or necessary) to control your +configuration values directly from the environment. Flask can be +instructed to load all environment variables starting with a specific +prefix into the config using from_prefixed_env().

+

Environment variables can be set in the shell before starting the +server:

+
+
$ export FLASK_SECRET_KEY="5f352379324c22463451387a0aec5d2f"
+$ export FLASK_MAIL_ENABLED=false
+$ flask run
+ * Running on http://127.0.0.1:5000/
+
+
+
+

The variables can then be loaded and accessed via the config with a key +equal to the environment variable name without the prefix i.e.

+
app.config.from_prefixed_env()
+app.config["SECRET_KEY"]  # Is "5f352379324c22463451387a0aec5d2f"
+
+
+

The prefix is FLASK_ by default. This is configurable via the +prefix argument of from_prefixed_env().

+

Values will be parsed to attempt to convert them to a more specific type +than strings. By default json.loads() is used, so any valid JSON +value is possible, including lists and dicts. This is configurable via +the loads argument of from_prefixed_env().

+

When adding a boolean value with the default JSON parsing, only “true” +and “false”, lowercase, are valid values. Keep in mind that any +non-empty string is considered True by Python.

+

It is possible to set keys in nested dictionaries by separating the +keys with double underscore (__). Any intermediate keys that don’t +exist on the parent dict will be initialized to an empty dict.

+
$ export FLASK_MYAPI__credentials__username=user123
+
+
+
app.config["MYAPI"]["credentials"]["username"]  # Is "user123"
+
+
+

On Windows, environment variable keys are always uppercase, therefore +the above example would end up as MYAPI__CREDENTIALS__USERNAME.

+

For even more config loading features, including merging and +case-insensitive Windows support, try a dedicated library such as +Dynaconf, which includes integration with Flask.

+
+
+

Configuration Best Practices

+

The downside with the approach mentioned earlier is that it makes testing +a little harder. There is no single 100% solution for this problem in +general, but there are a couple of things you can keep in mind to improve +that experience:

+
    +
  1. Create your application in a function and register blueprints on it. +That way you can create multiple instances of your application with +different configurations attached which makes unit testing a lot +easier. You can use this to pass in configuration as needed.

  2. +
  3. Do not write code that needs the configuration at import time. If you +limit yourself to request-only accesses to the configuration you can +reconfigure the object later on as needed.

  4. +
  5. Make sure to load the configuration very early on, so that +extensions can access the configuration when calling init_app.

  6. +
+
+
+

Development / Production

+

Most applications need more than one configuration. There should be at +least separate configurations for the production server and the one used +during development. The easiest way to handle this is to use a default +configuration that is always loaded and part of the version control, and a +separate configuration that overrides the values as necessary as mentioned +in the example above:

+
app = Flask(__name__)
+app.config.from_object('yourapplication.default_settings')
+app.config.from_envvar('YOURAPPLICATION_SETTINGS')
+
+
+

Then you just have to add a separate config.py file and export +YOURAPPLICATION_SETTINGS=/path/to/config.py and you are done. However +there are alternative ways as well. For example you could use imports or +subclassing.

+

What is very popular in the Django world is to make the import explicit in +the config file by adding from yourapplication.default_settings +import * to the top of the file and then overriding the changes by hand. +You could also inspect an environment variable like +YOURAPPLICATION_MODE and set that to production, development etc +and import different hard-coded files based on that.

+

An interesting pattern is also to use classes and inheritance for +configuration:

+
class Config(object):
+    TESTING = False
+
+class ProductionConfig(Config):
+    DATABASE_URI = 'mysql://user@localhost/foo'
+
+class DevelopmentConfig(Config):
+    DATABASE_URI = "sqlite:////tmp/foo.db"
+
+class TestingConfig(Config):
+    DATABASE_URI = 'sqlite:///:memory:'
+    TESTING = True
+
+
+

To enable such a config you just have to call into +from_object():

+
app.config.from_object('configmodule.ProductionConfig')
+
+
+

Note that from_object() does not instantiate the class +object. If you need to instantiate the class, such as to access a property, +then you must do so before calling from_object():

+
from configmodule import ProductionConfig
+app.config.from_object(ProductionConfig())
+
+# Alternatively, import via string:
+from werkzeug.utils import import_string
+cfg = import_string('configmodule.ProductionConfig')()
+app.config.from_object(cfg)
+
+
+

Instantiating the configuration object allows you to use @property in +your configuration classes:

+
class Config(object):
+    """Base config, uses staging database server."""
+    TESTING = False
+    DB_SERVER = '192.168.1.56'
+
+    @property
+    def DATABASE_URI(self):  # Note: all caps
+        return f"mysql://user@{self.DB_SERVER}/foo"
+
+class ProductionConfig(Config):
+    """Uses production database server."""
+    DB_SERVER = '192.168.19.32'
+
+class DevelopmentConfig(Config):
+    DB_SERVER = 'localhost'
+
+class TestingConfig(Config):
+    DB_SERVER = 'localhost'
+    DATABASE_URI = 'sqlite:///:memory:'
+
+
+

There are many different ways and it’s up to you how you want to manage +your configuration files. However here a list of good recommendations:

+
    +
  • Keep a default configuration in version control. Either populate the +config with this default configuration or import it in your own +configuration files before overriding values.

  • +
  • Use an environment variable to switch between the configurations. +This can be done from outside the Python interpreter and makes +development and deployment much easier because you can quickly and +easily switch between different configs without having to touch the +code at all. If you are working often on different projects you can +even create your own script for sourcing that activates a virtualenv +and exports the development configuration for you.

  • +
  • Use a tool like fabric to push code and configuration separately +to the production server(s).

  • +
+
+
+

Instance Folders

+
+Changelog
+

Added in version 0.8.

+
+

Flask 0.8 introduces instance folders. Flask for a long time made it +possible to refer to paths relative to the application’s folder directly +(via Flask.root_path). This was also how many developers loaded +configurations stored next to the application. Unfortunately however this +only works well if applications are not packages in which case the root +path refers to the contents of the package.

+

With Flask 0.8 a new attribute was introduced: +Flask.instance_path. It refers to a new concept called the +“instance folder”. The instance folder is designed to not be under +version control and be deployment specific. It’s the perfect place to +drop things that either change at runtime or configuration files.

+

You can either explicitly provide the path of the instance folder when +creating the Flask application or you can let Flask autodetect the +instance folder. For explicit configuration use the instance_path +parameter:

+
app = Flask(__name__, instance_path='/path/to/instance/folder')
+
+
+

Please keep in mind that this path must be absolute when provided.

+

If the instance_path parameter is not provided the following default +locations are used:

+
    +
  • Uninstalled module:

    +
    /myapp.py
    +/instance
    +
    +
    +
  • +
  • Uninstalled package:

    +
    /myapp
    +    /__init__.py
    +/instance
    +
    +
    +
  • +
  • Installed module or package:

    +
    $PREFIX/lib/pythonX.Y/site-packages/myapp
    +$PREFIX/var/myapp-instance
    +
    +
    +

    $PREFIX is the prefix of your Python installation. This can be +/usr or the path to your virtualenv. You can print the value of +sys.prefix to see what the prefix is set to.

    +
  • +
+

Since the config object provided loading of configuration files from +relative filenames we made it possible to change the loading via filenames +to be relative to the instance path if wanted. The behavior of relative +paths in config files can be flipped between “relative to the application +root” (the default) to “relative to instance folder” via the +instance_relative_config switch to the application constructor:

+
app = Flask(__name__, instance_relative_config=True)
+
+
+

Here is a full example of how to configure Flask to preload the config +from a module and then override the config from a file in the instance +folder if it exists:

+
app = Flask(__name__, instance_relative_config=True)
+app.config.from_object('yourapplication.default_settings')
+app.config.from_pyfile('application.cfg', silent=True)
+
+
+

The path to the instance folder can be found via the +Flask.instance_path. Flask also provides a shortcut to open a +file from the instance folder with Flask.open_instance_resource().

+

Example usage for both:

+
filename = os.path.join(app.instance_path, 'application.cfg')
+with open(filename) as f:
+    config = f.read()
+
+# or via open_instance_resource:
+with app.open_instance_resource('application.cfg') as f:
+    config = f.read()
+
+
+
+
+ + +
+
+
+
+ + +
+
+ + + diff --git a/_build/contributing/index.html b/_build/contributing/index.html new file mode 100644 index 00000000..ed0173ed --- /dev/null +++ b/_build/contributing/index.html @@ -0,0 +1,95 @@ + + + + + + + + Contributing — Flask Documentation (3.1.x) + + + + + + + + + + + + + + +
+
+
+
+ +
+

Contributing

+

See the Pallets detailed contributing documentation for many ways +to contribute, including reporting issues, requesting features, asking or +answering questions, and making PRs.

+
+ + +
+
+
+
+ + +
+
+ + + diff --git a/_build/debugging/index.html b/_build/debugging/index.html new file mode 100644 index 00000000..9ad11729 --- /dev/null +++ b/_build/debugging/index.html @@ -0,0 +1,178 @@ + + + + + + + + Debugging Application Errors — Flask Documentation (3.1.x) + + + + + + + + + + + + + + +
+
+
+
+ +
+

Debugging Application Errors

+
+

In Production

+

Do not run the development server, or enable the built-in debugger, in +a production environment. The debugger allows executing arbitrary +Python code from the browser. It’s protected by a pin, but that should +not be relied on for security.

+

Use an error logging tool, such as Sentry, as described in +Error Logging Tools, or enable logging and notifications as +described in Logging.

+

If you have access to the server, you could add some code to start an +external debugger if request.remote_addr matches your IP. Some IDE +debuggers also have a remote mode so breakpoints on the server can be +interacted with locally. Only enable a debugger temporarily.

+
+
+

The Built-In Debugger

+

The built-in Werkzeug development server provides a debugger which shows +an interactive traceback in the browser when an unhandled error occurs +during a request. This debugger should only be used during development.

+screenshot of debugger in action +
+

Warning

+

The debugger allows executing arbitrary Python code from the +browser. It is protected by a pin, but still represents a major +security risk. Do not run the development server or debugger in a +production environment.

+
+

The debugger is enabled by default when the development server is run in debug mode.

+
$ flask --app hello run --debug
+
+
+

When running from Python code, passing debug=True enables debug mode, which is +mostly equivalent.

+
app.run(debug=True)
+
+
+

Development Server and Command Line Interface have more information about running the debugger and +debug mode. More information about the debugger can be found in the Werkzeug +documentation.

+
+
+

External Debuggers

+

External debuggers, such as those provided by IDEs, can offer a more +powerful debugging experience than the built-in debugger. They can also +be used to step through code during a request before an error is raised, +or if no error is raised. Some even have a remote mode so you can debug +code running on another machine.

+

When using an external debugger, the app should still be in debug mode, otherwise Flask +turns unhandled errors into generic 500 error pages. However, the built-in debugger and +reloader should be disabled so they don’t interfere with the external debugger.

+
$ flask --app hello run --debug --no-debugger --no-reload
+
+
+

When running from Python:

+
app.run(debug=True, use_debugger=False, use_reloader=False)
+
+
+

Disabling these isn’t required, an external debugger will continue to work with the +following caveats.

+
    +
  • If the built-in debugger is not disabled, it will catch unhandled exceptions before +the external debugger can.

  • +
  • If the reloader is not disabled, it could cause an unexpected reload if code changes +during a breakpoint.

  • +
  • The development server will still catch unhandled exceptions if the built-in +debugger is disabled, otherwise it would crash on any error. If you want that (and +usually you don’t) pass passthrough_errors=True to app.run.

    +
    app.run(
    +    debug=True, passthrough_errors=True,
    +    use_debugger=False, use_reloader=False
    +)
    +
    +
    +
  • +
+
+
+ + +
+
+
+
+ + +
+
+ + + diff --git a/_build/deploying/apache-httpd/index.html b/_build/deploying/apache-httpd/index.html new file mode 100644 index 00000000..f11353c1 --- /dev/null +++ b/_build/deploying/apache-httpd/index.html @@ -0,0 +1,158 @@ + + + + + + + + Apache httpd — Flask Documentation (3.1.x) + + + + + + + + + + + + + + +
+
+
+
+ +
+

Apache httpd

+

Apache httpd is a fast, production level HTTP server. When serving +your application with one of the WSGI servers listed in Deploying to Production, it +is often good or necessary to put a dedicated HTTP server in front of +it. This “reverse proxy” can handle incoming requests, TLS, and other +security and performance concerns better than the WSGI server.

+

httpd can be installed using your system package manager, or a pre-built +executable for Windows. Installing and running httpd itself is outside +the scope of this doc. This page outlines the basics of configuring +httpd to proxy your application. Be sure to read its documentation to +understand what features are available.

+
+

Domain Name

+

Acquiring and configuring a domain name is outside the scope of this +doc. In general, you will buy a domain name from a registrar, pay for +server space with a hosting provider, and then point your registrar +at the hosting provider’s name servers.

+

To simulate this, you can also edit your hosts file, located at +/etc/hosts on Linux. Add a line that associates a name with the +local IP.

+

Modern Linux systems may be configured to treat any domain name that +ends with .localhost like this without adding it to the hosts +file.

+
+
/etc/hosts
+
127.0.0.1 hello.localhost
+
+
+
+
+
+

Configuration

+

The httpd configuration is located at /etc/httpd/conf/httpd.conf on +Linux. It may be different depending on your operating system. Check the +docs and look for httpd.conf.

+

Remove or comment out any existing DocumentRoot directive. Add the +config lines below. We’ll assume the WSGI server is listening locally at +http://127.0.0.1:8000.

+
+
/etc/httpd/conf/httpd.conf
+
LoadModule proxy_module modules/mod_proxy.so
+LoadModule proxy_http_module modules/mod_proxy_http.so
+ProxyPass / http://127.0.0.1:8000/
+RequestHeader set X-Forwarded-Proto http
+RequestHeader set X-Forwarded-Prefix /
+
+
+
+

The LoadModule lines might already exist. If so, make sure they are +uncommented instead of adding them manually.

+

Then Tell Flask it is Behind a Proxy so that your application uses the X-Forwarded +headers. X-Forwarded-For and X-Forwarded-Host are automatically +set by ProxyPass.

+
+
+ + +
+
+
+
+ + +
+
+ + + diff --git a/_build/deploying/asgi/index.html b/_build/deploying/asgi/index.html new file mode 100644 index 00000000..0f84d871 --- /dev/null +++ b/_build/deploying/asgi/index.html @@ -0,0 +1,117 @@ + + + + + + + + ASGI — Flask Documentation (3.1.x) + + + + + + + + + + + + + + +
+
+
+
+ +
+

ASGI

+

If you’d like to use an ASGI server you will need to utilise WSGI to +ASGI middleware. The asgiref +WsgiToAsgi +adapter is recommended as it integrates with the event loop used for +Flask’s Using async and await support. You can use the adapter by +wrapping the Flask app,

+
from asgiref.wsgi import WsgiToAsgi
+from flask import Flask
+
+app = Flask(__name__)
+
+...
+
+asgi_app = WsgiToAsgi(app)
+
+
+

and then serving the asgi_app with the ASGI server, e.g. using +Hypercorn,

+
$ hypercorn module:asgi_app
+
+
+
+ + +
+
+
+
+ + +
+
+ + + diff --git a/_build/deploying/eventlet/index.html b/_build/deploying/eventlet/index.html new file mode 100644 index 00000000..d1f8a1b5 --- /dev/null +++ b/_build/deploying/eventlet/index.html @@ -0,0 +1,167 @@ + + + + + + + + eventlet — Flask Documentation (3.1.x) + + + + + + + + + + + + + + +
+
+
+
+ +
+

eventlet

+

Prefer using Gunicorn with eventlet workers rather than using +eventlet directly. Gunicorn provides a much more configurable and +production-tested server.

+

eventlet allows writing asynchronous, coroutine-based code that looks +like standard synchronous Python. It uses greenlet to enable task +switching without writing async/await or using asyncio.

+

gevent is another library that does the same thing. Certain +dependencies you have, or other considerations, may affect which of the +two you choose to use.

+

eventlet provides a WSGI server that can handle many connections at once +instead of one per worker process. You must actually use eventlet in +your own code to see any benefit to using the server.

+
+

Installing

+

When using eventlet, greenlet>=1.0 is required, otherwise context locals +such as request will not work as expected. When using PyPy, +PyPy>=7.3.7 is required.

+

Create a virtualenv, install your application, then install +eventlet.

+
$ cd hello-app
+$ python -m venv .venv
+$ . .venv/bin/activate
+$ pip install .  # install your application
+$ pip install eventlet
+
+
+
+
+

Running

+

To use eventlet to serve your application, write a script that imports +its wsgi.server, as well as your app or app factory.

+
+
wsgi.py
+
import eventlet
+from eventlet import wsgi
+from hello import create_app
+
+app = create_app()
+wsgi.server(eventlet.listen(("127.0.0.1", 8000)), app)
+
+
+
+
$ python wsgi.py
+(x) wsgi starting up on http://127.0.0.1:8000
+
+
+
+
+

Binding Externally

+

eventlet should not be run as root because it would cause your +application code to run as root, which is not secure. However, this +means it will not be possible to bind to port 80 or 443. Instead, a +reverse proxy such as nginx or Apache httpd should be used +in front of eventlet.

+

You can bind to all external IPs on a non-privileged port by using +0.0.0.0 in the server arguments shown in the previous section. +Don’t do this when using a reverse proxy setup, otherwise it will be +possible to bypass the proxy.

+

0.0.0.0 is not a valid address to navigate to, you’d use a specific +IP address in your browser.

+
+
+ + +
+
+
+
+ + +
+
+ + + diff --git a/_build/deploying/gevent/index.html b/_build/deploying/gevent/index.html new file mode 100644 index 00000000..246b7ff3 --- /dev/null +++ b/_build/deploying/gevent/index.html @@ -0,0 +1,166 @@ + + + + + + + + gevent — Flask Documentation (3.1.x) + + + + + + + + + + + + + + +
+
+
+
+ +
+

gevent

+

Prefer using Gunicorn or uWSGI with gevent workers rather +than using gevent directly. Gunicorn and uWSGI provide much more +configurable and production-tested servers.

+

gevent allows writing asynchronous, coroutine-based code that looks +like standard synchronous Python. It uses greenlet to enable task +switching without writing async/await or using asyncio.

+

eventlet is another library that does the same thing. Certain +dependencies you have, or other considerations, may affect which of the +two you choose to use.

+

gevent provides a WSGI server that can handle many connections at once +instead of one per worker process. You must actually use gevent in your +own code to see any benefit to using the server.

+
+

Installing

+

When using gevent, greenlet>=1.0 is required, otherwise context locals +such as request will not work as expected. When using PyPy, +PyPy>=7.3.7 is required.

+

Create a virtualenv, install your application, then install gevent.

+
$ cd hello-app
+$ python -m venv .venv
+$ . .venv/bin/activate
+$ pip install .  # install your application
+$ pip install gevent
+
+
+
+
+

Running

+

To use gevent to serve your application, write a script that imports its +WSGIServer, as well as your app or app factory.

+
+
wsgi.py
+
from gevent.pywsgi import WSGIServer
+from hello import create_app
+
+app = create_app()
+http_server = WSGIServer(("127.0.0.1", 8000), app)
+http_server.serve_forever()
+
+
+
+
$ python wsgi.py
+
+
+

No output is shown when the server starts.

+
+
+

Binding Externally

+

gevent should not be run as root because it would cause your +application code to run as root, which is not secure. However, this +means it will not be possible to bind to port 80 or 443. Instead, a +reverse proxy such as nginx or Apache httpd should be used +in front of gevent.

+

You can bind to all external IPs on a non-privileged port by using +0.0.0.0 in the server arguments shown in the previous section. Don’t +do this when using a reverse proxy setup, otherwise it will be possible +to bypass the proxy.

+

0.0.0.0 is not a valid address to navigate to, you’d use a specific +IP address in your browser.

+
+
+ + +
+
+
+
+ + +
+
+ + + diff --git a/_build/deploying/gunicorn/index.html b/_build/deploying/gunicorn/index.html new file mode 100644 index 00000000..6b285abb --- /dev/null +++ b/_build/deploying/gunicorn/index.html @@ -0,0 +1,207 @@ + + + + + + + + Gunicorn — Flask Documentation (3.1.x) + + + + + + + + + + + + + + +
+
+
+
+ +
+

Gunicorn

+

Gunicorn is a pure Python WSGI server with simple configuration and +multiple worker implementations for performance tuning.

+
    +
  • It tends to integrate easily with hosting platforms.

  • +
  • It does not support Windows (but does run on WSL).

  • +
  • It is easy to install as it does not require additional dependencies +or compilation.

  • +
  • It has built-in async worker support using gevent or eventlet.

  • +
+

This page outlines the basics of running Gunicorn. Be sure to read its +documentation and use gunicorn --help to understand what features +are available.

+
+

Installing

+

Gunicorn is easy to install, as it does not require external +dependencies or compilation. It runs on Windows only under WSL.

+

Create a virtualenv, install your application, then install +gunicorn.

+
$ cd hello-app
+$ python -m venv .venv
+$ . .venv/bin/activate
+$ pip install .  # install your application
+$ pip install gunicorn
+
+
+
+
+

Running

+

The only required argument to Gunicorn tells it how to load your Flask +application. The syntax is {module_import}:{app_variable}. +module_import is the dotted import name to the module with your +application. app_variable is the variable with the application. It +can also be a function call (with any arguments) if you’re using the +app factory pattern.

+
# equivalent to 'from hello import app'
+$ gunicorn -w 4 'hello:app'
+
+# equivalent to 'from hello import create_app; create_app()'
+$ gunicorn -w 4 'hello:create_app()'
+
+Starting gunicorn 20.1.0
+Listening at: http://127.0.0.1:8000 (x)
+Using worker: sync
+Booting worker with pid: x
+Booting worker with pid: x
+Booting worker with pid: x
+Booting worker with pid: x
+
+
+

The -w option specifies the number of processes to run; a starting +value could be CPU * 2. The default is only 1 worker, which is +probably not what you want for the default worker type.

+

Logs for each request aren’t shown by default, only worker info and +errors are shown. To show access logs on stdout, use the +--access-logfile=- option.

+
+
+

Binding Externally

+

Gunicorn should not be run as root because it would cause your +application code to run as root, which is not secure. However, this +means it will not be possible to bind to port 80 or 443. Instead, a +reverse proxy such as nginx or Apache httpd should be used +in front of Gunicorn.

+

You can bind to all external IPs on a non-privileged port using the +-b 0.0.0.0 option. Don’t do this when using a reverse proxy setup, +otherwise it will be possible to bypass the proxy.

+
$ gunicorn -w 4 -b 0.0.0.0 'hello:create_app()'
+Listening at: http://0.0.0.0:8000 (x)
+
+
+

0.0.0.0 is not a valid address to navigate to, you’d use a specific +IP address in your browser.

+
+
+

Async with gevent or eventlet

+

The default sync worker is appropriate for many use cases. If you need +asynchronous support, Gunicorn provides workers using either gevent +or eventlet. This is not the same as Python’s async/await, or the +ASGI server spec. You must actually use gevent/eventlet in your own code +to see any benefit to using the workers.

+

When using either gevent or eventlet, greenlet>=1.0 is required, +otherwise context locals such as request will not work as expected. +When using PyPy, PyPy>=7.3.7 is required.

+

To use gevent:

+
$ gunicorn -k gevent 'hello:create_app()'
+Starting gunicorn 20.1.0
+Listening at: http://127.0.0.1:8000 (x)
+Using worker: gevent
+Booting worker with pid: x
+
+
+

To use eventlet:

+
$ gunicorn -k eventlet 'hello:create_app()'
+Starting gunicorn 20.1.0
+Listening at: http://127.0.0.1:8000 (x)
+Using worker: eventlet
+Booting worker with pid: x
+
+
+
+
+ + +
+
+
+
+ + +
+
+ + + diff --git a/_build/deploying/index.html b/_build/deploying/index.html new file mode 100644 index 00000000..ed6dd3a0 --- /dev/null +++ b/_build/deploying/index.html @@ -0,0 +1,171 @@ + + + + + + + + Deploying to Production — Flask Documentation (3.1.x) + + + + + + + + + + + + + + +
+
+
+
+ +
+

Deploying to Production

+

After developing your application, you’ll want to make it available +publicly to other users. When you’re developing locally, you’re probably +using the built-in development server, debugger, and reloader. These +should not be used in production. Instead, you should use a dedicated +WSGI server or hosting platform, some of which will be described here.

+

“Production” means “not development”, which applies whether you’re +serving your application publicly to millions of users or privately / +locally to a single user. Do not use the development server when +deploying to production. It is intended for use only during local +development. It is not designed to be particularly secure, stable, or +efficient.

+
+

Self-Hosted Options

+

Flask is a WSGI application. A WSGI server is used to run the +application, converting incoming HTTP requests to the standard WSGI +environ, and converting outgoing WSGI responses to HTTP responses.

+

The primary goal of these docs is to familiarize you with the concepts +involved in running a WSGI application using a production WSGI server +and HTTP server. There are many WSGI servers and HTTP servers, with many +configuration possibilities. The pages below discuss the most common +servers, and show the basics of running each one. The next section +discusses platforms that can manage this for you.

+ +

WSGI servers have HTTP servers built-in. However, a dedicated HTTP +server may be safer, more efficient, or more capable. Putting an HTTP +server in front of the WSGI server is called a “reverse proxy.”

+ +

This list is not exhaustive, and you should evaluate these and other +servers based on your application’s needs. Different servers will have +different capabilities, configuration, and support.

+
+
+

Hosting Platforms

+

There are many services available for hosting web applications without +needing to maintain your own server, networking, domain, etc. Some +services may have a free tier up to a certain time or bandwidth. Many of +these services use one of the WSGI servers described above, or a similar +interface. The links below are for some of the most common platforms, +which have instructions for Flask, WSGI, or Python.

+ +

This list is not exhaustive, and you should evaluate these and other +services based on your application’s needs. Different services will have +different capabilities, configuration, pricing, and support.

+

You’ll probably need to Tell Flask it is Behind a Proxy when using most hosting +platforms.

+
+
+ + +
+
+
+
+ + +
+
+ + + diff --git a/_build/deploying/mod_wsgi/index.html b/_build/deploying/mod_wsgi/index.html new file mode 100644 index 00000000..994faba8 --- /dev/null +++ b/_build/deploying/mod_wsgi/index.html @@ -0,0 +1,181 @@ + + + + + + + + mod_wsgi — Flask Documentation (3.1.x) + + + + + + + + + + + + + + +
+
+
+
+ +
+

mod_wsgi

+

mod_wsgi is a WSGI server integrated with the Apache httpd server. +The modern mod_wsgi-express command makes it easy to configure and +start the server without needing to write Apache httpd configuration.

+
    +
  • Tightly integrated with Apache httpd.

  • +
  • Supports Windows directly.

  • +
  • Requires a compiler and the Apache development headers to install.

  • +
  • Does not require a reverse proxy setup.

  • +
+

This page outlines the basics of running mod_wsgi-express, not the more +complex installation and configuration with httpd. Be sure to read the +mod_wsgi-express, mod_wsgi, and Apache httpd documentation to +understand what features are available.

+
+

Installing

+

Installing mod_wsgi requires a compiler and the Apache server and +development headers installed. You will get an error if they are not. +How to install them depends on the OS and package manager that you use.

+

Create a virtualenv, install your application, then install +mod_wsgi.

+
$ cd hello-app
+$ python -m venv .venv
+$ . .venv/bin/activate
+$ pip install .  # install your application
+$ pip install mod_wsgi
+
+
+
+
+

Running

+

The only argument to mod_wsgi-express specifies a script containing +your Flask application, which must be called application. You can +write a small script to import your app with this name, or to create it +if using the app factory pattern.

+
+
wsgi.py
+
from hello import app
+
+application = app
+
+
+
+
+
wsgi.py
+
from hello import create_app
+
+application = create_app()
+
+
+
+

Now run the mod_wsgi-express start-server command.

+
$ mod_wsgi-express start-server wsgi.py --processes 4
+
+
+

The --processes option specifies the number of worker processes to +run; a starting value could be CPU * 2.

+

Logs for each request aren’t show in the terminal. If an error occurs, +its information is written to the error log file shown when starting the +server.

+
+
+

Binding Externally

+

Unlike the other WSGI servers in these docs, mod_wsgi can be run as +root to bind to privileged ports like 80 and 443. However, it must be +configured to drop permissions to a different user and group for the +worker processes.

+

For example, if you created a hello user and group, you should +install your virtualenv and application as that user, then tell +mod_wsgi to drop to that user after starting.

+
$ sudo /home/hello/.venv/bin/mod_wsgi-express start-server \
+    /home/hello/wsgi.py \
+    --user hello --group hello --port 80 --processes 4
+
+
+
+
+ + +
+
+
+
+ + +
+
+ + + diff --git a/_build/deploying/nginx/index.html b/_build/deploying/nginx/index.html new file mode 100644 index 00000000..400904f4 --- /dev/null +++ b/_build/deploying/nginx/index.html @@ -0,0 +1,162 @@ + + + + + + + + nginx — Flask Documentation (3.1.x) + + + + + + + + + + + + + + +
+
+
+
+ +
+

nginx

+

nginx is a fast, production level HTTP server. When serving your +application with one of the WSGI servers listed in Deploying to Production, it is +often good or necessary to put a dedicated HTTP server in front of it. +This “reverse proxy” can handle incoming requests, TLS, and other +security and performance concerns better than the WSGI server.

+

Nginx can be installed using your system package manager, or a pre-built +executable for Windows. Installing and running Nginx itself is outside +the scope of this doc. This page outlines the basics of configuring +Nginx to proxy your application. Be sure to read its documentation to +understand what features are available.

+
+

Domain Name

+

Acquiring and configuring a domain name is outside the scope of this +doc. In general, you will buy a domain name from a registrar, pay for +server space with a hosting provider, and then point your registrar +at the hosting provider’s name servers.

+

To simulate this, you can also edit your hosts file, located at +/etc/hosts on Linux. Add a line that associates a name with the +local IP.

+

Modern Linux systems may be configured to treat any domain name that +ends with .localhost like this without adding it to the hosts +file.

+
+
/etc/hosts
+
127.0.0.1 hello.localhost
+
+
+
+
+
+

Configuration

+

The nginx configuration is located at /etc/nginx/nginx.conf on +Linux. It may be different depending on your operating system. Check the +docs and look for nginx.conf.

+

Remove or comment out any existing server section. Add a server +section and use the proxy_pass directive to point to the address the +WSGI server is listening on. We’ll assume the WSGI server is listening +locally at http://127.0.0.1:8000.

+
+
/etc/nginx.conf
+
server {
+    listen 80;
+    server_name _;
+
+    location / {
+        proxy_pass http://127.0.0.1:8000/;
+        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
+        proxy_set_header X-Forwarded-Proto $scheme;
+        proxy_set_header X-Forwarded-Host $host;
+        proxy_set_header X-Forwarded-Prefix /;
+    }
+}
+
+
+
+

Then Tell Flask it is Behind a Proxy so that your application uses these headers.

+
+
+ + +
+
+
+
+ + +
+
+ + + diff --git a/_build/deploying/proxy_fix/index.html b/_build/deploying/proxy_fix/index.html new file mode 100644 index 00000000..04342c2e --- /dev/null +++ b/_build/deploying/proxy_fix/index.html @@ -0,0 +1,121 @@ + + + + + + + + Tell Flask it is Behind a Proxy — Flask Documentation (3.1.x) + + + + + + + + + + + + + + +
+
+
+
+ +
+

Tell Flask it is Behind a Proxy

+

When using a reverse proxy, or many Python hosting platforms, the proxy +will intercept and forward all external requests to the local WSGI +server.

+

From the WSGI server and Flask application’s perspectives, requests are +now coming from the HTTP server to the local address, rather than from +the remote address to the external server address.

+

HTTP servers should set X-Forwarded- headers to pass on the real +values to the application. The application can then be told to trust and +use those values by wrapping it with the +X-Forwarded-For Proxy Fix middleware provided by Werkzeug.

+

This middleware should only be used if the application is actually +behind a proxy, and should be configured with the number of proxies that +are chained in front of it. Not all proxies set all the headers. Since +incoming headers can be faked, you must set how many proxies are setting +each header so the middleware knows what to trust.

+
from werkzeug.middleware.proxy_fix import ProxyFix
+
+app.wsgi_app = ProxyFix(
+    app.wsgi_app, x_for=1, x_proto=1, x_host=1, x_prefix=1
+)
+
+
+

Remember, only apply this middleware if you are behind a proxy, and set +the correct number of proxies that set each header. It can be a security +issue if you get this configuration wrong.

+
+ + +
+
+
+
+ + +
+
+ + + diff --git a/_build/deploying/uwsgi/index.html b/_build/deploying/uwsgi/index.html new file mode 100644 index 00000000..82df015e --- /dev/null +++ b/_build/deploying/uwsgi/index.html @@ -0,0 +1,220 @@ + + + + + + + + uWSGI — Flask Documentation (3.1.x) + + + + + + + + + + + + + + +
+
+
+
+ +
+

uWSGI

+

uWSGI is a fast, compiled server suite with extensive configuration +and capabilities beyond a basic server.

+
    +
  • It can be very performant due to being a compiled program.

  • +
  • It is complex to configure beyond the basic application, and has so +many options that it can be difficult for beginners to understand.

  • +
  • It does not support Windows (but does run on WSL).

  • +
  • It requires a compiler to install in some cases.

  • +
+

This page outlines the basics of running uWSGI. Be sure to read its +documentation to understand what features are available.

+
+

Installing

+

uWSGI has multiple ways to install it. The most straightforward is to +install the pyuwsgi package, which provides precompiled wheels for +common platforms. However, it does not provide SSL support, which can be +provided with a reverse proxy instead.

+

Create a virtualenv, install your application, then install pyuwsgi.

+
$ cd hello-app
+$ python -m venv .venv
+$ . .venv/bin/activate
+$ pip install .  # install your application
+$ pip install pyuwsgi
+
+
+

If you have a compiler available, you can install the uwsgi package +instead. Or install the pyuwsgi package from sdist instead of wheel. +Either method will include SSL support.

+
$ pip install uwsgi
+
+# or
+$ pip install --no-binary pyuwsgi pyuwsgi
+
+
+
+
+

Running

+

The most basic way to run uWSGI is to tell it to start an HTTP server +and import your application.

+
$ uwsgi --http 127.0.0.1:8000 --master -p 4 -w hello:app
+
+*** Starting uWSGI 2.0.20 (64bit) on [x] ***
+*** Operational MODE: preforking ***
+mounting hello:app on /
+spawned uWSGI master process (pid: x)
+spawned uWSGI worker 1 (pid: x, cores: 1)
+spawned uWSGI worker 2 (pid: x, cores: 1)
+spawned uWSGI worker 3 (pid: x, cores: 1)
+spawned uWSGI worker 4 (pid: x, cores: 1)
+spawned uWSGI http 1 (pid: x)
+
+
+

If you’re using the app factory pattern, you’ll need to create a small +Python file to create the app, then point uWSGI at that.

+
+
wsgi.py
+
from hello import create_app
+
+app = create_app()
+
+
+
+
$ uwsgi --http 127.0.0.1:8000 --master -p 4 -w wsgi:app
+
+
+

The --http option starts an HTTP server at 127.0.0.1 port 8000. The +--master option specifies the standard worker manager. The -p +option starts 4 worker processes; a starting value could be CPU * 2. +The -w option tells uWSGI how to import your application

+
+
+

Binding Externally

+

uWSGI should not be run as root with the configuration shown in this doc +because it would cause your application code to run as root, which is +not secure. However, this means it will not be possible to bind to port +80 or 443. Instead, a reverse proxy such as nginx or +Apache httpd should be used in front of uWSGI. It is possible to +run uWSGI as root securely, but that is beyond the scope of this doc.

+

uWSGI has optimized integration with Nginx uWSGI and +Apache mod_proxy_uwsgi, and possibly other servers, instead of using +a standard HTTP proxy. That configuration is beyond the scope of this +doc, see the links for more information.

+

You can bind to all external IPs on a non-privileged port using the +--http 0.0.0.0:8000 option. Don’t do this when using a reverse proxy +setup, otherwise it will be possible to bypass the proxy.

+
$ uwsgi --http 0.0.0.0:8000 --master -p 4 -w wsgi:app
+
+
+

0.0.0.0 is not a valid address to navigate to, you’d use a specific +IP address in your browser.

+
+
+

Async with gevent

+

The default sync worker is appropriate for many use cases. If you need +asynchronous support, uWSGI provides a gevent worker. This is not the +same as Python’s async/await, or the ASGI server spec. You must +actually use gevent in your own code to see any benefit to using the +worker.

+

When using gevent, greenlet>=1.0 is required, otherwise context locals +such as request will not work as expected. When using PyPy, +PyPy>=7.3.7 is required.

+
$ uwsgi --http 127.0.0.1:8000 --master --gevent 100 -w wsgi:app
+
+*** Starting uWSGI 2.0.20 (64bit) on [x] ***
+*** Operational MODE: async ***
+mounting hello:app on /
+spawned uWSGI master process (pid: x)
+spawned uWSGI worker 1 (pid: x, cores: 100)
+spawned uWSGI http 1 (pid: x)
+*** running gevent loop engine [addr:x] ***
+
+
+
+
+ + +
+
+
+
+ + +
+
+ + + diff --git a/_build/deploying/waitress/index.html b/_build/deploying/waitress/index.html new file mode 100644 index 00000000..3d3e9b80 --- /dev/null +++ b/_build/deploying/waitress/index.html @@ -0,0 +1,164 @@ + + + + + + + + Waitress — Flask Documentation (3.1.x) + + + + + + + + + + + + + + +
+
+
+
+ +
+

Waitress

+

Waitress is a pure Python WSGI server.

+
    +
  • It is easy to configure.

  • +
  • It supports Windows directly.

  • +
  • It is easy to install as it does not require additional dependencies +or compilation.

  • +
  • It does not support streaming requests, full request data is always +buffered.

  • +
  • It uses a single process with multiple thread workers.

  • +
+

This page outlines the basics of running Waitress. Be sure to read its +documentation and waitress-serve --help to understand what features +are available.

+
+

Installing

+

Create a virtualenv, install your application, then install +waitress.

+
$ cd hello-app
+$ python -m venv .venv
+$ . .venv/bin/activate
+$ pip install .  # install your application
+$ pip install waitress
+
+
+
+
+

Running

+

The only required argument to waitress-serve tells it how to load +your Flask application. The syntax is {module}:{app}. module is +the dotted import name to the module with your application. app is +the variable with the application. If you’re using the app factory +pattern, use --call {module}:{factory} instead.

+
# equivalent to 'from hello import app'
+$ waitress-serve --host 127.0.0.1 hello:app
+
+# equivalent to 'from hello import create_app; create_app()'
+$ waitress-serve --host 127.0.0.1 --call hello:create_app
+
+Serving on http://127.0.0.1:8080
+
+
+

The --host option binds the server to local 127.0.0.1 only.

+

Logs for each request aren’t shown, only errors are shown. Logging can +be configured through the Python interface instead of the command line.

+
+
+

Binding Externally

+

Waitress should not be run as root because it would cause your +application code to run as root, which is not secure. However, this +means it will not be possible to bind to port 80 or 443. Instead, a +reverse proxy such as nginx or Apache httpd should be used +in front of Waitress.

+

You can bind to all external IPs on a non-privileged port by not +specifying the --host option. Don’t do this when using a reverse +proxy setup, otherwise it will be possible to bypass the proxy.

+

0.0.0.0 is not a valid address to navigate to, you’d use a specific +IP address in your browser.

+
+
+ + +
+
+
+
+ + +
+
+ + + diff --git a/_build/design/index.html b/_build/design/index.html new file mode 100644 index 00000000..ede4b16d --- /dev/null +++ b/_build/design/index.html @@ -0,0 +1,298 @@ + + + + + + + + Design Decisions in Flask — Flask Documentation (3.1.x) + + + + + + + + + + + + + + +
+
+
+
+ +
+

Design Decisions in Flask

+

If you are curious why Flask does certain things the way it does and not +differently, this section is for you. This should give you an idea about +some of the design decisions that may appear arbitrary and surprising at +first, especially in direct comparison with other frameworks.

+
+

The Explicit Application Object

+

A Python web application based on WSGI has to have one central callable +object that implements the actual application. In Flask this is an +instance of the Flask class. Each Flask application has +to create an instance of this class itself and pass it the name of the +module, but why can’t Flask do that itself?

+

Without such an explicit application object the following code:

+
from flask import Flask
+app = Flask(__name__)
+
+@app.route('/')
+def index():
+    return 'Hello World!'
+
+
+

Would look like this instead:

+
from hypothetical_flask import route
+
+@route('/')
+def index():
+    return 'Hello World!'
+
+
+

There are three major reasons for this. The most important one is that +implicit application objects require that there may only be one instance at +the time. There are ways to fake multiple applications with a single +application object, like maintaining a stack of applications, but this +causes some problems I won’t outline here in detail. Now the question is: +when does a microframework need more than one application at the same +time? A good example for this is unit testing. When you want to test +something it can be very helpful to create a minimal application to test +specific behavior. When the application object is deleted everything it +allocated will be freed again.

+

Another thing that becomes possible when you have an explicit object lying +around in your code is that you can subclass the base class +(Flask) to alter specific behavior. This would not be +possible without hacks if the object were created ahead of time for you +based on a class that is not exposed to you.

+

But there is another very important reason why Flask depends on an +explicit instantiation of that class: the package name. Whenever you +create a Flask instance you usually pass it __name__ as package name. +Flask depends on that information to properly load resources relative +to your module. With Python’s outstanding support for reflection it can +then access the package to figure out where the templates and static files +are stored (see open_resource()). Now obviously there +are frameworks around that do not need any configuration and will still be +able to load templates relative to your application module. But they have +to use the current working directory for that, which is a very unreliable +way to determine where the application is. The current working directory +is process-wide and if you are running multiple applications in one +process (which could happen in a webserver without you knowing) the paths +will be off. Worse: many webservers do not set the working directory to +the directory of your application but to the document root which does not +have to be the same folder.

+

The third reason is “explicit is better than implicit”. That object is +your WSGI application, you don’t have to remember anything else. If you +want to apply a WSGI middleware, just wrap it and you’re done (though +there are better ways to do that so that you do not lose the reference +to the application object wsgi_app()).

+

Furthermore this design makes it possible to use a factory function to +create the application which is very helpful for unit testing and similar +things (Application Factories).

+
+
+

The Routing System

+

Flask uses the Werkzeug routing system which was designed to +automatically order routes by complexity. This means that you can declare +routes in arbitrary order and they will still work as expected. This is a +requirement if you want to properly implement decorator based routing +since decorators could be fired in undefined order when the application is +split into multiple modules.

+

Another design decision with the Werkzeug routing system is that routes +in Werkzeug try to ensure that URLs are unique. Werkzeug will go quite far +with that in that it will automatically redirect to a canonical URL if a route +is ambiguous.

+
+
+

One Template Engine

+

Flask decides on one template engine: Jinja2. Why doesn’t Flask have a +pluggable template engine interface? You can obviously use a different +template engine, but Flask will still configure Jinja2 for you. While +that limitation that Jinja2 is always configured will probably go away, +the decision to bundle one template engine and use that will not.

+

Template engines are like programming languages and each of those engines +has a certain understanding about how things work. On the surface they +all work the same: you tell the engine to evaluate a template with a set +of variables and take the return value as string.

+

But that’s about where similarities end. Jinja2 for example has an +extensive filter system, a certain way to do template inheritance, +support for reusable blocks (macros) that can be used from inside +templates and also from Python code, supports iterative template +rendering, configurable syntax and more. On the other hand an engine +like Genshi is based on XML stream evaluation, template inheritance by +taking the availability of XPath into account and more. Mako on the +other hand treats templates similar to Python modules.

+

When it comes to connecting a template engine with an application or +framework there is more than just rendering templates. For instance, +Flask uses Jinja2’s extensive autoescaping support. Also it provides +ways to access macros from Jinja2 templates.

+

A template abstraction layer that would not take the unique features of +the template engines away is a science on its own and a too large +undertaking for a microframework like Flask.

+

Furthermore extensions can then easily depend on one template language +being present. You can easily use your own templating language, but an +extension could still depend on Jinja itself.

+
+
+

What does “micro” mean?

+

“Micro” does not mean that your whole web application has to fit into a single +Python file (although it certainly can), nor does it mean that Flask is lacking +in functionality. The “micro” in microframework means Flask aims to keep the +core simple but extensible. Flask won’t make many decisions for you, such as +what database to use. Those decisions that it does make, such as what +templating engine to use, are easy to change. Everything else is up to you, so +that Flask can be everything you need and nothing you don’t.

+

By default, Flask does not include a database abstraction layer, form +validation or anything else where different libraries already exist that can +handle that. Instead, Flask supports extensions to add such functionality to +your application as if it was implemented in Flask itself. Numerous extensions +provide database integration, form validation, upload handling, various open +authentication technologies, and more. Flask may be “micro”, but it’s ready for +production use on a variety of needs.

+

Why does Flask call itself a microframework and yet it depends on two +libraries (namely Werkzeug and Jinja2). Why shouldn’t it? If we look +over to the Ruby side of web development there we have a protocol very +similar to WSGI. Just that it’s called Rack there, but besides that it +looks very much like a WSGI rendition for Ruby. But nearly all +applications in Ruby land do not work with Rack directly, but on top of a +library with the same name. This Rack library has two equivalents in +Python: WebOb (formerly Paste) and Werkzeug. Paste is still around but +from my understanding it’s sort of deprecated in favour of WebOb. The +development of WebOb and Werkzeug started side by side with similar ideas +in mind: be a good implementation of WSGI for other applications to take +advantage.

+

Flask is a framework that takes advantage of the work already done by +Werkzeug to properly interface WSGI (which can be a complex task at +times). Thanks to recent developments in the Python package +infrastructure, packages with dependencies are no longer an issue and +there are very few reasons against having libraries that depend on others.

+
+
+

Thread Locals

+

Flask uses thread local objects (context local objects in fact, they +support greenlet contexts as well) for request, session and an extra +object you can put your own things on (g). Why is that and +isn’t that a bad idea?

+

Yes it is usually not such a bright idea to use thread locals. They cause +troubles for servers that are not based on the concept of threads and make +large applications harder to maintain. However Flask is just not designed +for large applications or asynchronous servers. Flask wants to make it +quick and easy to write a traditional web application.

+
+
+

Async/await and ASGI support

+

Flask supports async coroutines for view functions by executing the +coroutine on a separate thread instead of using an event loop on the +main thread as an async-first (ASGI) framework would. This is necessary +for Flask to remain backwards compatible with extensions and code built +before async was introduced into Python. This compromise introduces +a performance cost compared with the ASGI frameworks, due to the +overhead of the threads.

+

Due to how tied to WSGI Flask’s code is, it’s not clear if it’s possible +to make the Flask class support ASGI and WSGI at the same time. Work +is currently being done in Werkzeug to work with ASGI, which may +eventually enable support in Flask as well.

+

See Using async and await for more discussion.

+
+
+

What Flask is, What Flask is Not

+

Flask will never have a database layer. It will not have a form library +or anything else in that direction. Flask itself just bridges to Werkzeug +to implement a proper WSGI application and to Jinja2 to handle templating. +It also binds to a few common standard library packages such as logging. +Everything else is up for extensions.

+

Why is this the case? Because people have different preferences and +requirements and Flask could not meet those if it would force any of this +into the core. The majority of web applications will need a template +engine in some sort. However not every application needs a SQL database.

+

As your codebase grows, you are free to make the design decisions appropriate +for your project. Flask will continue to provide a very simple glue layer to +the best that Python has to offer. You can implement advanced patterns in +SQLAlchemy or another database tool, introduce non-relational data persistence +as appropriate, and take advantage of framework-agnostic tools built for WSGI, +the Python web interface.

+

The idea of Flask is to build a good foundation for all applications. +Everything else is up to you or extensions.

+
+
+ + +
+
+
+
+ + +
+
+ + + diff --git a/_build/errorhandling/index.html b/_build/errorhandling/index.html new file mode 100644 index 00000000..918f72b6 --- /dev/null +++ b/_build/errorhandling/index.html @@ -0,0 +1,552 @@ + + + + + + + + Handling Application Errors — Flask Documentation (3.1.x) + + + + + + + + + + + + + + +
+
+
+
+ +
+

Handling Application Errors

+

Applications fail, servers fail. Sooner or later you will see an exception +in production. Even if your code is 100% correct, you will still see +exceptions from time to time. Why? Because everything else involved will +fail. Here are some situations where perfectly fine code can lead to server +errors:

+
    +
  • the client terminated the request early and the application was still +reading from the incoming data

  • +
  • the database server was overloaded and could not handle the query

  • +
  • a filesystem is full

  • +
  • a harddrive crashed

  • +
  • a backend server overloaded

  • +
  • a programming error in a library you are using

  • +
  • network connection of the server to another system failed

  • +
+

And that’s just a small sample of issues you could be facing. So how do we +deal with that sort of problem? By default if your application runs in +production mode, and an exception is raised Flask will display a very simple +page for you and log the exception to the logger.

+

But there is more you can do, and we will cover some better setups to deal +with errors including custom exceptions and 3rd party tools.

+
+

Error Logging Tools

+

Sending error mails, even if just for critical ones, can become +overwhelming if enough users are hitting the error and log files are +typically never looked at. This is why we recommend using Sentry for dealing with application errors. It’s +available as a source-available project on GitHub and is also available as a hosted version which you can try for free. Sentry +aggregates duplicate errors, captures the full stack trace and local +variables for debugging, and sends you mails based on new errors or +frequency thresholds.

+

To use Sentry you need to install the sentry-sdk client with extra +flask dependencies.

+
$ pip install sentry-sdk[flask]
+
+
+

And then add this to your Flask app:

+
import sentry_sdk
+from sentry_sdk.integrations.flask import FlaskIntegration
+
+sentry_sdk.init('YOUR_DSN_HERE', integrations=[FlaskIntegration()])
+
+
+

The YOUR_DSN_HERE value needs to be replaced with the DSN value you +get from your Sentry installation.

+

After installation, failures leading to an Internal Server Error +are automatically reported to Sentry and from there you can +receive error notifications.

+

See also:

+ +
+
+

Error Handlers

+

When an error occurs in Flask, an appropriate HTTP status code will be +returned. 400-499 indicate errors with the client’s request data, or +about the data requested. 500-599 indicate errors with the server or +application itself.

+

You might want to show custom error pages to the user when an error occurs. +This can be done by registering error handlers.

+

An error handler is a function that returns a response when a type of error is +raised, similar to how a view is a function that returns a response when a +request URL is matched. It is passed the instance of the error being handled, +which is most likely a HTTPException.

+

The status code of the response will not be set to the handler’s code. Make +sure to provide the appropriate HTTP status code when returning a response from +a handler.

+
+

Registering

+

Register handlers by decorating a function with +errorhandler(). Or use +register_error_handler() to register the function later. +Remember to set the error code when returning the response.

+
@app.errorhandler(werkzeug.exceptions.BadRequest)
+def handle_bad_request(e):
+    return 'bad request!', 400
+
+# or, without the decorator
+app.register_error_handler(400, handle_bad_request)
+
+
+

werkzeug.exceptions.HTTPException subclasses like +BadRequest and their HTTP codes are interchangeable +when registering handlers. (BadRequest.code == 400)

+

Non-standard HTTP codes cannot be registered by code because they are not known +by Werkzeug. Instead, define a subclass of +HTTPException with the appropriate code and +register and raise that exception class.

+
class InsufficientStorage(werkzeug.exceptions.HTTPException):
+    code = 507
+    description = 'Not enough storage space.'
+
+app.register_error_handler(InsufficientStorage, handle_507)
+
+raise InsufficientStorage()
+
+
+

Handlers can be registered for any exception class, not just +HTTPException subclasses or HTTP status +codes. Handlers can be registered for a specific class, or for all subclasses +of a parent class.

+
+
+

Handling

+

When building a Flask application you will run into exceptions. If some part +of your code breaks while handling a request (and you have no error handlers +registered), a “500 Internal Server Error” +(InternalServerError) will be returned by default. +Similarly, “404 Not Found” +(NotFound) error will occur if a request is sent to an unregistered route. +If a route receives an unallowed request method, a “405 Method Not Allowed” +(MethodNotAllowed) will be raised. These are all +subclasses of HTTPException and are provided by +default in Flask.

+

Flask gives you the ability to raise any HTTP exception registered by +Werkzeug. However, the default HTTP exceptions return simple exception +pages. You might want to show custom error pages to the user when an error occurs. +This can be done by registering error handlers.

+

When Flask catches an exception while handling a request, it is first looked up by code. +If no handler is registered for the code, Flask looks up the error by its class hierarchy; the most specific handler is chosen. +If no handler is registered, HTTPException subclasses show a +generic message about their code, while other exceptions are converted to a +generic “500 Internal Server Error”.

+

For example, if an instance of ConnectionRefusedError is raised, +and a handler is registered for ConnectionError and +ConnectionRefusedError, the more specific ConnectionRefusedError +handler is called with the exception instance to generate the response.

+

Handlers registered on the blueprint take precedence over those registered +globally on the application, assuming a blueprint is handling the request that +raises the exception. However, the blueprint cannot handle 404 routing errors +because the 404 occurs at the routing level before the blueprint can be +determined.

+
+
+

Generic Exception Handlers

+

It is possible to register error handlers for very generic base classes +such as HTTPException or even Exception. However, be aware that +these will catch more than you might expect.

+

For example, an error handler for HTTPException might be useful for turning +the default HTML errors pages into JSON. However, this +handler will trigger for things you don’t cause directly, such as 404 +and 405 errors during routing. Be sure to craft your handler carefully +so you don’t lose information about the HTTP error.

+
from flask import json
+from werkzeug.exceptions import HTTPException
+
+@app.errorhandler(HTTPException)
+def handle_exception(e):
+    """Return JSON instead of HTML for HTTP errors."""
+    # start with the correct headers and status code from the error
+    response = e.get_response()
+    # replace the body with JSON
+    response.data = json.dumps({
+        "code": e.code,
+        "name": e.name,
+        "description": e.description,
+    })
+    response.content_type = "application/json"
+    return response
+
+
+

An error handler for Exception might seem useful for changing how +all errors, even unhandled ones, are presented to the user. However, +this is similar to doing except Exception: in Python, it will +capture all otherwise unhandled errors, including all HTTP status +codes.

+

In most cases it will be safer to register handlers for more +specific exceptions. Since HTTPException instances are valid WSGI +responses, you could also pass them through directly.

+
from werkzeug.exceptions import HTTPException
+
+@app.errorhandler(Exception)
+def handle_exception(e):
+    # pass through HTTP errors
+    if isinstance(e, HTTPException):
+        return e
+
+    # now you're handling non-HTTP exceptions only
+    return render_template("500_generic.html", e=e), 500
+
+
+

Error handlers still respect the exception class hierarchy. If you +register handlers for both HTTPException and Exception, the +Exception handler will not handle HTTPException subclasses +because the HTTPException handler is more specific.

+
+
+

Unhandled Exceptions

+

When there is no error handler registered for an exception, a 500 +Internal Server Error will be returned instead. See +flask.Flask.handle_exception() for information about this +behavior.

+

If there is an error handler registered for InternalServerError, +this will be invoked. As of Flask 1.1.0, this error handler will always +be passed an instance of InternalServerError, not the original +unhandled error.

+

The original error is available as e.original_exception.

+

An error handler for “500 Internal Server Error” will be passed uncaught +exceptions in addition to explicit 500 errors. In debug mode, a handler +for “500 Internal Server Error” will not be used. Instead, the +interactive debugger will be shown.

+
+
+
+

Custom Error Pages

+

Sometimes when building a Flask application, you might want to raise a +HTTPException to signal to the user that +something is wrong with the request. Fortunately, Flask comes with a handy +abort() function that aborts a request with a HTTP error from +werkzeug as desired. It will also provide a plain black and white error page +for you with a basic description, but nothing fancy.

+

Depending on the error code it is less or more likely for the user to +actually see such an error.

+

Consider the code below, we might have a user profile route, and if the user +fails to pass a username we can raise a “400 Bad Request”. If the user passes a +username and we can’t find it, we raise a “404 Not Found”.

+
from flask import abort, render_template, request
+
+# a username needs to be supplied in the query args
+# a successful request would be like /profile?username=jack
+@app.route("/profile")
+def user_profile():
+    username = request.arg.get("username")
+    # if a username isn't supplied in the request, return a 400 bad request
+    if username is None:
+        abort(400)
+
+    user = get_user(username=username)
+    # if a user can't be found by their username, return 404 not found
+    if user is None:
+        abort(404)
+
+    return render_template("profile.html", user=user)
+
+
+

Here is another example implementation for a “404 Page Not Found” exception:

+
from flask import render_template
+
+@app.errorhandler(404)
+def page_not_found(e):
+    # note that we set the 404 status explicitly
+    return render_template('404.html'), 404
+
+
+

When using Application Factories:

+
from flask import Flask, render_template
+
+def page_not_found(e):
+  return render_template('404.html'), 404
+
+def create_app(config_filename):
+    app = Flask(__name__)
+    app.register_error_handler(404, page_not_found)
+    return app
+
+
+

An example template might be this:

+
{% extends "layout.html" %}
+{% block title %}Page Not Found{% endblock %}
+{% block body %}
+  <h1>Page Not Found</h1>
+  <p>What you were looking for is just not there.
+  <p><a href="{{ url_for('index') }}">go somewhere nice</a>
+{% endblock %}
+
+
+
+

Further Examples

+

The above examples wouldn’t actually be an improvement on the default +exception pages. We can create a custom 500.html template like this:

+
{% extends "layout.html" %}
+{% block title %}Internal Server Error{% endblock %}
+{% block body %}
+  <h1>Internal Server Error</h1>
+  <p>Oops... we seem to have made a mistake, sorry!</p>
+  <p><a href="{{ url_for('index') }}">Go somewhere nice instead</a>
+{% endblock %}
+
+
+

It can be implemented by rendering the template on “500 Internal Server Error”:

+
from flask import render_template
+
+@app.errorhandler(500)
+def internal_server_error(e):
+    # note that we set the 500 status explicitly
+    return render_template('500.html'), 500
+
+
+

When using Application Factories:

+
from flask import Flask, render_template
+
+def internal_server_error(e):
+  return render_template('500.html'), 500
+
+def create_app():
+    app = Flask(__name__)
+    app.register_error_handler(500, internal_server_error)
+    return app
+
+
+

When using Modular Applications with Blueprints:

+
from flask import Blueprint
+
+blog = Blueprint('blog', __name__)
+
+# as a decorator
+@blog.errorhandler(500)
+def internal_server_error(e):
+    return render_template('500.html'), 500
+
+# or with register_error_handler
+blog.register_error_handler(500, internal_server_error)
+
+
+
+
+
+

Blueprint Error Handlers

+

In Modular Applications with Blueprints, most error handlers will work as expected. +However, there is a caveat concerning handlers for 404 and 405 +exceptions. These error handlers are only invoked from an appropriate +raise statement or a call to abort in another of the blueprint’s +view functions; they are not invoked by, e.g., an invalid URL access.

+

This is because the blueprint does not “own” a certain URL space, so +the application instance has no way of knowing which blueprint error +handler it should run if given an invalid URL. If you would like to +execute different handling strategies for these errors based on URL +prefixes, they may be defined at the application level using the +request proxy object.

+
from flask import jsonify, render_template
+
+# at the application level
+# not the blueprint level
+@app.errorhandler(404)
+def page_not_found(e):
+    # if a request is in our blog URL space
+    if request.path.startswith('/blog/'):
+        # we return a custom blog 404 page
+        return render_template("blog/404.html"), 404
+    else:
+        # otherwise we return our generic site-wide 404 page
+        return render_template("404.html"), 404
+
+@app.errorhandler(405)
+def method_not_allowed(e):
+    # if a request has the wrong method to our API
+    if request.path.startswith('/api/'):
+        # we return a json saying so
+        return jsonify(message="Method Not Allowed"), 405
+    else:
+        # otherwise we return a generic site-wide 405 page
+        return render_template("405.html"), 405
+
+
+
+
+

Returning API Errors as JSON

+

When building APIs in Flask, some developers realise that the built-in +exceptions are not expressive enough for APIs and that the content type of +text/html they are emitting is not very useful for API consumers.

+

Using the same techniques as above and jsonify() we can return JSON +responses to API errors. abort() is called +with a description parameter. The error handler will +use that as the JSON error message, and set the status code to 404.

+
from flask import abort, jsonify
+
+@app.errorhandler(404)
+def resource_not_found(e):
+    return jsonify(error=str(e)), 404
+
+@app.route("/cheese")
+def get_one_cheese():
+    resource = get_resource()
+
+    if resource is None:
+        abort(404, description="Resource not found")
+
+    return jsonify(resource)
+
+
+

We can also create custom exception classes. For instance, we can +introduce a new custom exception for an API that can take a proper human readable message, +a status code for the error and some optional payload to give more context +for the error.

+

This is a simple example:

+
from flask import jsonify, request
+
+class InvalidAPIUsage(Exception):
+    status_code = 400
+
+    def __init__(self, message, status_code=None, payload=None):
+        super().__init__()
+        self.message = message
+        if status_code is not None:
+            self.status_code = status_code
+        self.payload = payload
+
+    def to_dict(self):
+        rv = dict(self.payload or ())
+        rv['message'] = self.message
+        return rv
+
+@app.errorhandler(InvalidAPIUsage)
+def invalid_api_usage(e):
+    return jsonify(e.to_dict()), e.status_code
+
+# an API app route for getting user information
+# a correct request might be /api/user?user_id=420
+@app.route("/api/user")
+def user_api(user_id):
+    user_id = request.arg.get("user_id")
+    if not user_id:
+        raise InvalidAPIUsage("No user id provided!")
+
+    user = get_user(user_id=user_id)
+    if not user:
+        raise InvalidAPIUsage("No such user!", status_code=404)
+
+    return jsonify(user.to_dict())
+
+
+

A view can now raise that exception with an error message. Additionally +some extra payload can be provided as a dictionary through the payload +parameter.

+
+
+

Logging

+

See Logging for information about how to log exceptions, such as +by emailing them to admins.

+
+
+

Debugging

+

See Debugging Application Errors for information about how to debug errors in +development and production.

+
+
+ + +
+
+
+
+ + +
+
+ + + diff --git a/_build/extensiondev/index.html b/_build/extensiondev/index.html new file mode 100644 index 00000000..720a9769 --- /dev/null +++ b/_build/extensiondev/index.html @@ -0,0 +1,364 @@ + + + + + + + + Flask Extension Development — Flask Documentation (3.1.x) + + + + + + + + + + + + + + +
+
+
+
+ +
+

Flask Extension Development

+

Extensions are extra packages that add functionality to a Flask +application. While PyPI contains many Flask extensions, you may not +find one that fits your need. If this is the case, you can create your +own, and publish it for others to use as well.

+

This guide will show how to create a Flask extension, and some of the +common patterns and requirements involved. Since extensions can do +anything, this guide won’t be able to cover every possibility.

+

The best ways to learn about extensions are to look at how other +extensions you use are written, and discuss with others. Discuss your +design ideas with others on our Discord Chat or +GitHub Discussions.

+

The best extensions share common patterns, so that anyone familiar with +using one extension won’t feel completely lost with another. This can +only work if collaboration happens early.

+
+

Naming

+

A Flask extension typically has flask in its name as a prefix or +suffix. If it wraps another library, it should include the library name +as well. This makes it easy to search for extensions, and makes their +purpose clearer.

+

A general Python packaging recommendation is that the install name from +the package index and the name used in import statements should be +related. The import name is lowercase, with words separated by +underscores (_). The install name is either lower case or title +case, with words separated by dashes (-). If it wraps another +library, prefer using the same case as that library’s name.

+

Here are some example install and import names:

+
    +
  • Flask-Name imported as flask_name

  • +
  • flask-name-lower imported as flask_name_lower

  • +
  • Flask-ComboName imported as flask_comboname

  • +
  • Name-Flask imported as name_flask

  • +
+
+
+

The Extension Class and Initialization

+

All extensions will need some entry point that initializes the +extension with the application. The most common pattern is to create a +class that represents the extension’s configuration and behavior, with +an init_app method to apply the extension instance to the given +application instance.

+
class HelloExtension:
+    def __init__(self, app=None):
+        if app is not None:
+            self.init_app(app)
+
+    def init_app(self, app):
+        app.before_request(...)
+
+
+

It is important that the app is not stored on the extension, don’t do +self.app = app. The only time the extension should have direct +access to an app is during init_app, otherwise it should use +current_app.

+

This allows the extension to support the application factory pattern, +avoids circular import issues when importing the extension instance +elsewhere in a user’s code, and makes testing with different +configurations easier.

+
hello = HelloExtension()
+
+def create_app():
+    app = Flask(__name__)
+    hello.init_app(app)
+    return app
+
+
+

Above, the hello extension instance exists independently of the +application. This means that other modules in a user’s project can do +from project import hello and use the extension in blueprints before +the app exists.

+

The Flask.extensions dict can be used to store a reference to +the extension on the application, or some other state specific to the +application. Be aware that this is a single namespace, so use a name +unique to your extension, such as the extension’s name without the +“flask” prefix.

+
+
+

Adding Behavior

+

There are many ways that an extension can add behavior. Any setup +methods that are available on the Flask object can be used +during an extension’s init_app method.

+

A common pattern is to use before_request() to initialize +some data or a connection at the beginning of each request, then +teardown_request() to clean it up at the end. This can be +stored on g, discussed more below.

+

A more lazy approach is to provide a method that initializes and caches +the data or connection. For example, a ext.get_db method could +create a database connection the first time it’s called, so that a view +that doesn’t use the database doesn’t create a connection.

+

Besides doing something before and after every view, your extension +might want to add some specific views as well. In this case, you could +define a Blueprint, then call register_blueprint() +during init_app to add the blueprint to the app.

+
+
+

Configuration Techniques

+

There can be multiple levels and sources of configuration for an +extension. You should consider what parts of your extension fall into +each one.

+
    +
  • Configuration per application instance, through app.config +values. This is configuration that could reasonably change for each +deployment of an application. A common example is a URL to an +external resource, such as a database. Configuration keys should +start with the extension’s name so that they don’t interfere with +other extensions.

  • +
  • Configuration per extension instance, through __init__ +arguments. This configuration usually affects how the extension +is used, such that it wouldn’t make sense to change it per +deployment.

  • +
  • Configuration per extension instance, through instance attributes +and decorator methods. It might be more ergonomic to assign to +ext.value, or use a @ext.register decorator to register a +function, after the extension instance has been created.

  • +
  • Global configuration through class attributes. Changing a class +attribute like Ext.connection_class can customize default +behavior without making a subclass. This could be combined +per-extension configuration to override defaults.

  • +
  • Subclassing and overriding methods and attributes. Making the API of +the extension itself something that can be overridden provides a +very powerful tool for advanced customization.

  • +
+

The Flask object itself uses all of these techniques.

+

It’s up to you to decide what configuration is appropriate for your +extension, based on what you need and what you want to support.

+

Configuration should not be changed after the application setup phase is +complete and the server begins handling requests. Configuration is +global, any changes to it are not guaranteed to be visible to other +workers.

+
+
+

Data During a Request

+

When writing a Flask application, the g object is used to +store information during a request. For example the +tutorial stores a connection to a SQLite +database as g.db. Extensions can also use this, with some care. +Since g is a single global namespace, extensions must use unique +names that won’t collide with user data. For example, use the extension +name as a prefix, or as a namespace.

+
# an internal prefix with the extension name
+g._hello_user_id = 2
+
+# or an internal prefix as a namespace
+from types import SimpleNamespace
+g._hello = SimpleNamespace()
+g._hello.user_id = 2
+
+
+

The data in g lasts for an application context. An application +context is active when a request context is, or when a CLI command is +run. If you’re storing something that should be closed, use +teardown_appcontext() to ensure that it gets closed +when the application context ends. If it should only be valid during a +request, or would not be used in the CLI outside a request, use +teardown_request().

+
+
+

Views and Models

+

Your extension views might want to interact with specific models in your +database, or some other extension or data connected to your application. +For example, let’s consider a Flask-SimpleBlog extension that works +with Flask-SQLAlchemy to provide a Post model and views to write +and read posts.

+

The Post model needs to subclass the Flask-SQLAlchemy db.Model +object, but that’s only available once you’ve created an instance of +that extension, not when your extension is defining its views. So how +can the view code, defined before the model exists, access the model?

+

One method could be to use Class-based Views. During __init__, create +the model, then create the views by passing the model to the view +class’s as_view() method.

+
class PostAPI(MethodView):
+    def __init__(self, model):
+        self.model = model
+
+    def get(self, id):
+        post = self.model.query.get(id)
+        return jsonify(post.to_json())
+
+class BlogExtension:
+    def __init__(self, db):
+        class Post(db.Model):
+            id = db.Column(primary_key=True)
+            title = db.Column(db.String, nullable=False)
+
+        self.post_model = Post
+
+    def init_app(self, app):
+        api_view = PostAPI.as_view(model=self.post_model)
+
+db = SQLAlchemy()
+blog = BlogExtension(db)
+db.init_app(app)
+blog.init_app(app)
+
+
+

Another technique could be to use an attribute on the extension, such as +self.post_model from above. Add the extension to app.extensions +in init_app, then access +current_app.extensions["simple_blog"].post_model from views.

+

You may also want to provide base classes so that users can provide +their own Post model that conforms to the API your extension +expects. So they could implement class Post(blog.BasePost), then +set it as blog.post_model.

+

As you can see, this can get a bit complex. Unfortunately, there’s no +perfect solution here, only different strategies and tradeoffs depending +on your needs and how much customization you want to offer. Luckily, +this sort of resource dependency is not a common need for most +extensions. Remember, if you need help with design, ask on our +Discord Chat or GitHub Discussions.

+
+ +
+ + +
+
+
+
+ + +
+
+ + + diff --git a/_build/extensions/index.html b/_build/extensions/index.html new file mode 100644 index 00000000..0b4d985b --- /dev/null +++ b/_build/extensions/index.html @@ -0,0 +1,139 @@ + + + + + + + + Extensions — Flask Documentation (3.1.x) + + + + + + + + + + + + + + +
+
+
+
+ +
+

Extensions

+

Extensions are extra packages that add functionality to a Flask +application. For example, an extension might add support for sending +email or connecting to a database. Some extensions add entire new +frameworks to help build certain types of applications, like a REST API.

+
+

Finding Extensions

+

Flask extensions are usually named “Flask-Foo” or “Foo-Flask”. You can +search PyPI for packages tagged with Framework :: Flask.

+
+
+

Using Extensions

+

Consult each extension’s documentation for installation, configuration, +and usage instructions. Generally, extensions pull their own +configuration from app.config and are +passed an application instance during initialization. For example, +an extension called “Flask-Foo” might be used like this:

+
from flask_foo import Foo
+
+foo = Foo()
+
+app = Flask(__name__)
+app.config.update(
+    FOO_BAR='baz',
+    FOO_SPAM='eggs',
+)
+
+foo.init_app(app)
+
+
+
+
+

Building Extensions

+

While PyPI contains many Flask extensions, you may not find +an extension that fits your need. If this is the case, you can create +your own, and publish it for others to use as well. Read +Flask Extension Development to develop your own Flask extension.

+
+
+ + +
+
+
+
+ + +
+
+ + + diff --git a/_build/genindex/index.html b/_build/genindex/index.html new file mode 100644 index 00000000..1821e126 --- /dev/null +++ b/_build/genindex/index.html @@ -0,0 +1,1550 @@ + + + + + + + + Index — Flask Documentation (3.1.x) + + + + + + + + + + + + +
+
+
+
+ + +

Index

+ +
+ _ + | A + | B + | C + | D + | E + | F + | G + | H + | I + | J + | K + | L + | M + | N + | O + | P + | Q + | R + | S + | T + | U + | V + | W + | Y + +
+

_

+ + +
+ +

A

+ + + +
+ +

B

+ + + +
+ +

C

+ + + +
+ +

D

+ + + +
+ +

E

+ + + +
+ +

F

+ + + +
+ +

G

+ + + +
+ +

H

+ + + +
+ +

I

+ + + +
+ +

J

+ + + +
+ +

K

+ + + +
+ +

L

+ + + +
+ +

M

+ + + +
+ +

N

+ + + +
+ +

O

+ + + +
+ +

P

+ + + +
+ +

Q

+ + +
+ +

R

+ + + +
+ +

S

+ + + +
+ +

T

+ + + +
+ +

U

+ + + +
+ +

V

+ + + +
+ +

W

+ + + +
+ +

Y

+ + +
+ + + +
+
+
+
+ + +
+
+ + + diff --git a/_build/index.html b/_build/index.html new file mode 100644 index 00000000..5e283a05 --- /dev/null +++ b/_build/index.html @@ -0,0 +1,470 @@ + + + + + + + + Welcome to Flask — Flask Documentation (3.1.x) + + + + + + + + + + + + + +
+
+
+
+ +
+

Welcome to Flask

+_images/flask-horizontal.png +

Welcome to Flask’s documentation. Flask is a lightweight WSGI web application framework. +It is designed to make getting started quick and easy, with the ability to scale up to +complex applications.

+

Get started with Installation +and then get an overview with the Quickstart. There is also a +more detailed Tutorial that shows how to create a small but +complete application with Flask. Common patterns are described in the +Patterns for Flask section. The rest of the docs describe each +component of Flask in detail, with a full reference in the API +section.

+

Flask depends on the Werkzeug WSGI toolkit, the Jinja template engine, and the +Click CLI toolkit. Be sure to check their documentation as well as Flask’s when +looking for information.

+
+

User’s Guide

+

Flask provides configuration and conventions, with sensible defaults, to get started. +This section of the documentation explains the different parts of the Flask framework +and how they can be used, customized, and extended. Beyond Flask itself, look for +community-maintained extensions to add even more functionality.

+
+ +
+
+
+

API Reference

+

If you are looking for information on a specific function, class or +method, this part of the documentation is for you.

+ +
+
+

Additional Notes

+ +
+
+ + +
+
+
+
+ + +
+
+ + + diff --git a/_build/installation/index.html b/_build/installation/index.html new file mode 100644 index 00000000..075ae1ce --- /dev/null +++ b/_build/installation/index.html @@ -0,0 +1,208 @@ + + + + + + + + Installation — Flask Documentation (3.1.x) + + + + + + + + + + + + + + + + +
+
+
+
+ +
+

Installation

+
+

Python Version

+

We recommend using the latest version of Python. Flask supports Python 3.9 and newer.

+
+
+

Dependencies

+

These distributions will be installed automatically when installing Flask.

+
    +
  • Werkzeug implements WSGI, the standard Python interface between +applications and servers.

  • +
  • Jinja is a template language that renders the pages your application +serves.

  • +
  • MarkupSafe comes with Jinja. It escapes untrusted input when rendering +templates to avoid injection attacks.

  • +
  • ItsDangerous securely signs data to ensure its integrity. This is used +to protect Flask’s session cookie.

  • +
  • Click is a framework for writing command line applications. It provides +the flask command and allows adding custom management commands.

  • +
  • Blinker provides support for Signals.

  • +
+
+

Optional dependencies

+

These distributions will not be installed automatically. Flask will detect and +use them if you install them.

+ +
+
+

greenlet

+

You may choose to use gevent or eventlet with your application. In this +case, greenlet>=1.0 is required. When using PyPy, PyPy>=7.3.7 is +required.

+

These are not minimum supported versions, they only indicate the first +versions that added necessary features. You should use the latest +versions of each.

+
+
+
+

Virtual environments

+

Use a virtual environment to manage the dependencies for your project, both in +development and in production.

+

What problem does a virtual environment solve? The more Python projects you +have, the more likely it is that you need to work with different versions of +Python libraries, or even Python itself. Newer versions of libraries for one +project can break compatibility in another project.

+

Virtual environments are independent groups of Python libraries, one for each +project. Packages installed for one project will not affect other projects or +the operating system’s packages.

+

Python comes bundled with the venv module to create virtual +environments.

+
+

Create an environment

+

Create a project folder and a .venv folder within:

+
+
$ mkdir myproject
+$ cd myproject
+$ python3 -m venv .venv
+
+
+
+
+
+

Activate the environment

+

Before you work on your project, activate the corresponding environment:

+
+
$ . .venv/bin/activate
+
+
+
+

Your shell prompt will change to show the name of the activated +environment.

+
+
+
+

Install Flask

+

Within the activated environment, use the following command to install +Flask:

+
$ pip install Flask
+
+
+

Flask is now installed. Check out the Quickstart or go to the +Documentation Overview.

+
+
+ + +
+
+
+
+ + +
+
+ + + diff --git a/_build/license/index.html b/_build/license/index.html new file mode 100644 index 00000000..4ff055cb --- /dev/null +++ b/_build/license/index.html @@ -0,0 +1,122 @@ + + + + + + + + BSD-3-Clause License — Flask Documentation (3.1.x) + + + + + + + + + + + + + + +
+
+
+
+ +
+

BSD-3-Clause License

+
Copyright 2010 Pallets
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are
+met:
+
+1.  Redistributions of source code must retain the above copyright
+    notice, this list of conditions and the following disclaimer.
+
+2.  Redistributions in binary form must reproduce the above copyright
+    notice, this list of conditions and the following disclaimer in the
+    documentation and/or other materials provided with the distribution.
+
+3.  Neither the name of the copyright holder nor the names of its
+    contributors may be used to endorse or promote products derived from
+    this software without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
+PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED
+TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
+LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+
+
+ + +
+
+
+
+ + +
+
+ + + diff --git a/_build/lifecycle/index.html b/_build/lifecycle/index.html new file mode 100644 index 00000000..779334d7 --- /dev/null +++ b/_build/lifecycle/index.html @@ -0,0 +1,257 @@ + + + + + + + + Application Structure and Lifecycle — Flask Documentation (3.1.x) + + + + + + + + + + + + + + +
+
+
+
+ +
+

Application Structure and Lifecycle

+

Flask makes it pretty easy to write a web application. But there are quite a few +different parts to an application and to each request it handles. Knowing what happens +during application setup, serving, and handling requests will help you know what’s +possible in Flask and how to structure your application.

+
+

Application Setup

+

The first step in creating a Flask application is creating the application object. Each +Flask application is an instance of the Flask class, which collects all +configuration, extensions, and views.

+
from flask import Flask
+
+app = Flask(__name__)
+app.config.from_mapping(
+    SECRET_KEY="dev",
+)
+app.config.from_prefixed_env()
+
+@app.route("/")
+def index():
+    return "Hello, World!"
+
+
+

This is known as the “application setup phase”, it’s the code you write that’s outside +any view functions or other handlers. It can be split up between different modules and +sub-packages, but all code that you want to be part of your application must be imported +in order for it to be registered.

+

All application setup must be completed before you start serving your application and +handling requests. This is because WSGI servers divide work between multiple workers, or +can be distributed across multiple machines. If the configuration changed in one worker, +there’s no way for Flask to ensure consistency between other workers.

+

Flask tries to help developers catch some of these setup ordering issues by showing an +error if setup-related methods are called after requests are handled. In that case +you’ll see this error:

+
+

The setup method ‘route’ can no longer be called on the application. It has already +handled its first request, any changes will not be applied consistently. +Make sure all imports, decorators, functions, etc. needed to set up the application +are done before running it.

+
+

However, it is not possible for Flask to detect all cases of out-of-order setup. In +general, don’t do anything to modify the Flask app object and Blueprint objects +from within view functions that run during requests. This includes:

+
    +
  • Adding routes, view functions, and other request handlers with @app.route, +@app.errorhandler, @app.before_request, etc.

  • +
  • Registering blueprints.

  • +
  • Loading configuration with app.config.

  • +
  • Setting up the Jinja template environment with app.jinja_env.

  • +
  • Setting a session interface, instead of the default itsdangerous cookie.

  • +
  • Setting a JSON provider with app.json, instead of the default provider.

  • +
  • Creating and initializing Flask extensions.

  • +
+
+
+

Serving the Application

+

Flask is a WSGI application framework. The other half of WSGI is the WSGI server. During +development, Flask, through Werkzeug, provides a development WSGI server with the +flask run CLI command. When you are done with development, use a production server +to serve your application, see Deploying to Production.

+

Regardless of what server you’re using, it will follow the PEP 3333 WSGI spec. The +WSGI server will be told how to access your Flask application object, which is the WSGI +application. Then it will start listening for HTTP requests, translate the request data +into a WSGI environ, and call the WSGI application with that data. The WSGI application +will return data that is translated into an HTTP response.

+
    +
  1. Browser or other client makes HTTP request.

  2. +
  3. WSGI server receives request.

  4. +
  5. WSGI server converts HTTP data to WSGI environ dict.

  6. +
  7. WSGI server calls WSGI application with the environ.

  8. +
  9. Flask, the WSGI application, does all its internal processing to route the request +to a view function, handle errors, etc.

  10. +
  11. Flask translates View function return into WSGI response data, passes it to WSGI +server.

  12. +
  13. WSGI server creates and send an HTTP response.

  14. +
  15. Client receives the HTTP response.

  16. +
+
+

Middleware

+

The WSGI application above is a callable that behaves in a certain way. Middleware +is a WSGI application that wraps another WSGI application. It’s a similar concept to +Python decorators. The outermost middleware will be called by the server. It can modify +the data passed to it, then call the WSGI application (or further middleware) that it +wraps, and so on. And it can take the return value of that call and modify it further.

+

From the WSGI server’s perspective, there is one WSGI application, the one it calls +directly. Typically, Flask is the “real” application at the end of the chain of +middleware. But even Flask can call further WSGI applications, although that’s an +advanced, uncommon use case.

+

A common middleware you’ll see used with Flask is Werkzeug’s +ProxyFix, which modifies the request to look +like it came directly from a client even if it passed through HTTP proxies on the way. +There are other middleware that can handle serving static files, authentication, etc.

+
+
+
+

How a Request is Handled

+

For us, the interesting part of the steps above is when Flask gets called by the WSGI +server (or middleware). At that point, it will do quite a lot to handle the request and +generate the response. At the most basic, it will match the URL to a view function, call +the view function, and pass the return value back to the server. But there are many more +parts that you can use to customize its behavior.

+
    +
  1. WSGI server calls the Flask object, which calls Flask.wsgi_app().

  2. +
  3. A RequestContext object is created. This converts the WSGI environ +dict into a Request object. It also creates an AppContext object.

  4. +
  5. The app context is pushed, which makes current_app and +g available.

  6. +
  7. The appcontext_pushed signal is sent.

  8. +
  9. The request context is pushed, which makes request and +session available.

  10. +
  11. The session is opened, loading any existing session data using the app’s +session_interface, an instance of SessionInterface.

  12. +
  13. The URL is matched against the URL rules registered with the route() +decorator during application setup. If there is no match, the error - usually a 404, +405, or redirect - is stored to be handled later.

  14. +
  15. The request_started signal is sent.

  16. +
  17. Any url_value_preprocessor() decorated functions are called.

  18. +
  19. Any before_request() decorated functions are called. If any of +these function returns a value it is treated as the response immediately.

  20. +
  21. If the URL didn’t match a route a few steps ago, that error is raised now.

  22. +
  23. The route() decorated view function associated with the matched URL +is called and returns a value to be used as the response.

  24. +
  25. If any step so far raised an exception, and there is an errorhandler() +decorated function that matches the exception class or HTTP error code, it is +called to handle the error and return a response.

  26. +
  27. Whatever returned a response value - a before request function, the view, or an +error handler, that value is converted to a Response object.

  28. +
  29. Any after_this_request() decorated functions are called, then cleared.

  30. +
  31. Any after_request() decorated functions are called, which can modify +the response object.

  32. +
  33. The session is saved, persisting any modified session data using the app’s +session_interface.

  34. +
  35. The request_finished signal is sent.

  36. +
  37. If any step so far raised an exception, and it was not handled by an error handler +function, it is handled now. HTTP exceptions are treated as responses with their +corresponding status code, other exceptions are converted to a generic 500 response. +The got_request_exception signal is sent.

  38. +
  39. The response object’s status, headers, and body are returned to the WSGI server.

  40. +
  41. Any teardown_request() decorated functions are called.

  42. +
  43. The request_tearing_down signal is sent.

  44. +
  45. The request context is popped, request and session are no longer +available.

  46. +
  47. Any teardown_appcontext() decorated functions are called.

  48. +
  49. The appcontext_tearing_down signal is sent.

  50. +
  51. The app context is popped, current_app and g are no longer +available.

  52. +
  53. The appcontext_popped signal is sent.

  54. +
+

There are even more decorators and customization points than this, but that aren’t part +of every request lifecycle. They’re more specific to certain things you might use during +a request, such as templates, building URLs, or handling JSON data. See the rest of this +documentation, as well as the API to explore further.

+
+
+ + +
+
+
+
+ + +
+
+ + + diff --git a/_build/logging/index.html b/_build/logging/index.html new file mode 100644 index 00000000..df0b0ef9 --- /dev/null +++ b/_build/logging/index.html @@ -0,0 +1,275 @@ + + + + + + + + Logging — Flask Documentation (3.1.x) + + + + + + + + + + + + + + +
+
+
+
+ +
+

Logging

+

Flask uses standard Python logging. Messages about your Flask +application are logged with app.logger, +which takes the same name as app.name. This +logger can also be used to log your own messages.

+
@app.route('/login', methods=['POST'])
+def login():
+    user = get_user(request.form['username'])
+
+    if user.check_password(request.form['password']):
+        login_user(user)
+        app.logger.info('%s logged in successfully', user.username)
+        return redirect(url_for('index'))
+    else:
+        app.logger.info('%s failed to log in', user.username)
+        abort(401)
+
+
+

If you don’t configure logging, Python’s default log level is usually +‘warning’. Nothing below the configured level will be visible.

+
+

Basic Configuration

+

When you want to configure logging for your project, you should do it as soon +as possible when the program starts. If app.logger +is accessed before logging is configured, it will add a default handler. If +possible, configure logging before creating the application object.

+

This example uses dictConfig() to create a logging +configuration similar to Flask’s default, except for all logs:

+
from logging.config import dictConfig
+
+dictConfig({
+    'version': 1,
+    'formatters': {'default': {
+        'format': '[%(asctime)s] %(levelname)s in %(module)s: %(message)s',
+    }},
+    'handlers': {'wsgi': {
+        'class': 'logging.StreamHandler',
+        'stream': 'ext://flask.logging.wsgi_errors_stream',
+        'formatter': 'default'
+    }},
+    'root': {
+        'level': 'INFO',
+        'handlers': ['wsgi']
+    }
+})
+
+app = Flask(__name__)
+
+
+
+

Default Configuration

+

If you do not configure logging yourself, Flask will add a +StreamHandler to app.logger +automatically. During requests, it will write to the stream specified by the +WSGI server in environ['wsgi.errors'] (which is usually +sys.stderr). Outside a request, it will log to sys.stderr.

+
+
+

Removing the Default Handler

+

If you configured logging after accessing +app.logger, and need to remove the default +handler, you can import and remove it:

+
from flask.logging import default_handler
+
+app.logger.removeHandler(default_handler)
+
+
+
+
+
+

Email Errors to Admins

+

When running the application on a remote server for production, you probably +won’t be looking at the log messages very often. The WSGI server will probably +send log messages to a file, and you’ll only check that file if a user tells +you something went wrong.

+

To be proactive about discovering and fixing bugs, you can configure a +logging.handlers.SMTPHandler to send an email when errors and higher +are logged.

+
import logging
+from logging.handlers import SMTPHandler
+
+mail_handler = SMTPHandler(
+    mailhost='127.0.0.1',
+    fromaddr='server-error@example.com',
+    toaddrs=['admin@example.com'],
+    subject='Application Error'
+)
+mail_handler.setLevel(logging.ERROR)
+mail_handler.setFormatter(logging.Formatter(
+    '[%(asctime)s] %(levelname)s in %(module)s: %(message)s'
+))
+
+if not app.debug:
+    app.logger.addHandler(mail_handler)
+
+
+

This requires that you have an SMTP server set up on the same server. See the +Python docs for more information about configuring the handler.

+
+
+

Injecting Request Information

+

Seeing more information about the request, such as the IP address, may help +debugging some errors. You can subclass logging.Formatter to inject +your own fields that can be used in messages. You can change the formatter for +Flask’s default handler, the mail handler defined above, or any other +handler.

+
from flask import has_request_context, request
+from flask.logging import default_handler
+
+class RequestFormatter(logging.Formatter):
+    def format(self, record):
+        if has_request_context():
+            record.url = request.url
+            record.remote_addr = request.remote_addr
+        else:
+            record.url = None
+            record.remote_addr = None
+
+        return super().format(record)
+
+formatter = RequestFormatter(
+    '[%(asctime)s] %(remote_addr)s requested %(url)s\n'
+    '%(levelname)s in %(module)s: %(message)s'
+)
+default_handler.setFormatter(formatter)
+mail_handler.setFormatter(formatter)
+
+
+
+
+

Other Libraries

+

Other libraries may use logging extensively, and you want to see relevant +messages from those logs too. The simplest way to do this is to add handlers +to the root logger instead of only the app logger.

+
from flask.logging import default_handler
+
+root = logging.getLogger()
+root.addHandler(default_handler)
+root.addHandler(mail_handler)
+
+
+

Depending on your project, it may be more useful to configure each logger you +care about separately, instead of configuring only the root logger.

+
for logger in (
+    logging.getLogger(app.name),
+    logging.getLogger('sqlalchemy'),
+    logging.getLogger('other_package'),
+):
+    logger.addHandler(default_handler)
+    logger.addHandler(mail_handler)
+
+
+
+

Werkzeug

+

Werkzeug logs basic request/response information to the 'werkzeug' logger. +If the root logger has no handlers configured, Werkzeug adds a +StreamHandler to its logger.

+
+
+

Flask Extensions

+

Depending on the situation, an extension may choose to log to +app.logger or its own named logger. Consult each +extension’s documentation for details.

+
+
+
+ + +
+
+
+
+ + +
+
+ + + diff --git a/_build/objects.inv b/_build/objects.inv new file mode 100644 index 0000000000000000000000000000000000000000..d5f96467bdd20a137adc6edffc12883160a32217 GIT binary patch literal 5779 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 + + + + + + + Application Dispatching — Flask Documentation (3.1.x) + + + + + + + + + + + + + + +
+
+
+
+ +
+

Application Dispatching

+

Application dispatching is the process of combining multiple Flask +applications on the WSGI level. You can combine not only Flask +applications but any WSGI application. This would allow you to run a +Django and a Flask application in the same interpreter side by side if +you want. The usefulness of this depends on how the applications work +internally.

+

The fundamental difference from Large Applications as Packages is that in this case you +are running the same or different Flask applications that are entirely +isolated from each other. They run different configurations and are +dispatched on the WSGI level.

+
+

Working with this Document

+

Each of the techniques and examples below results in an application +object that can be run with any WSGI server. For development, use the +flask run command to start a development server. For production, see +Deploying to Production.

+
from flask import Flask
+
+app = Flask(__name__)
+
+@app.route('/')
+def hello_world():
+    return 'Hello World!'
+
+
+
+
+

Combining Applications

+

If you have entirely separated applications and you want them to work next +to each other in the same Python interpreter process you can take +advantage of the werkzeug.wsgi.DispatcherMiddleware. The idea +here is that each Flask application is a valid WSGI application and they +are combined by the dispatcher middleware into a larger one that is +dispatched based on prefix.

+

For example you could have your main application run on / and your +backend interface on /backend.

+
from werkzeug.middleware.dispatcher import DispatcherMiddleware
+from frontend_app import application as frontend
+from backend_app import application as backend
+
+application = DispatcherMiddleware(frontend, {
+    '/backend': backend
+})
+
+
+
+
+

Dispatch by Subdomain

+

Sometimes you might want to use multiple instances of the same application +with different configurations. Assuming the application is created inside +a function and you can call that function to instantiate it, that is +really easy to implement. In order to develop your application to support +creating new instances in functions have a look at the +Application Factories pattern.

+

A very common example would be creating applications per subdomain. For +instance you configure your webserver to dispatch all requests for all +subdomains to your application and you then use the subdomain information +to create user-specific instances. Once you have your server set up to +listen on all subdomains you can use a very simple WSGI application to do +the dynamic application creation.

+

The perfect level for abstraction in that regard is the WSGI layer. You +write your own WSGI application that looks at the request that comes and +delegates it to your Flask application. If that application does not +exist yet, it is dynamically created and remembered.

+
from threading import Lock
+
+class SubdomainDispatcher:
+
+    def __init__(self, domain, create_app):
+        self.domain = domain
+        self.create_app = create_app
+        self.lock = Lock()
+        self.instances = {}
+
+    def get_application(self, host):
+        host = host.split(':')[0]
+        assert host.endswith(self.domain), 'Configuration error'
+        subdomain = host[:-len(self.domain)].rstrip('.')
+        with self.lock:
+            app = self.instances.get(subdomain)
+            if app is None:
+                app = self.create_app(subdomain)
+                self.instances[subdomain] = app
+            return app
+
+    def __call__(self, environ, start_response):
+        app = self.get_application(environ['HTTP_HOST'])
+        return app(environ, start_response)
+
+
+

This dispatcher can then be used like this:

+
from myapplication import create_app, get_user_for_subdomain
+from werkzeug.exceptions import NotFound
+
+def make_app(subdomain):
+    user = get_user_for_subdomain(subdomain)
+    if user is None:
+        # if there is no user for that subdomain we still have
+        # to return a WSGI application that handles that request.
+        # We can then just return the NotFound() exception as
+        # application which will render a default 404 page.
+        # You might also redirect the user to the main page then
+        return NotFound()
+
+    # otherwise create the application for the specific user
+    return create_app(user)
+
+application = SubdomainDispatcher('example.com', make_app)
+
+
+
+
+

Dispatch by Path

+

Dispatching by a path on the URL is very similar. Instead of looking at +the Host header to figure out the subdomain one simply looks at the +request path up to the first slash.

+
from threading import Lock
+from wsgiref.util import shift_path_info
+
+class PathDispatcher:
+
+    def __init__(self, default_app, create_app):
+        self.default_app = default_app
+        self.create_app = create_app
+        self.lock = Lock()
+        self.instances = {}
+
+    def get_application(self, prefix):
+        with self.lock:
+            app = self.instances.get(prefix)
+            if app is None:
+                app = self.create_app(prefix)
+                if app is not None:
+                    self.instances[prefix] = app
+            return app
+
+    def __call__(self, environ, start_response):
+        app = self.get_application(_peek_path_info(environ))
+        if app is not None:
+            shift_path_info(environ)
+        else:
+            app = self.default_app
+        return app(environ, start_response)
+
+def _peek_path_info(environ):
+    segments = environ.get("PATH_INFO", "").lstrip("/").split("/", 1)
+    if segments:
+        return segments[0]
+
+    return None
+
+
+

The big difference between this and the subdomain one is that this one +falls back to another application if the creator function returns None.

+
from myapplication import create_app, default_app, get_user_for_prefix
+
+def make_app(prefix):
+    user = get_user_for_prefix(prefix)
+    if user is not None:
+        return create_app(user)
+
+application = PathDispatcher(default_app, make_app)
+
+
+
+
+ + +
+
+
+
+ + +
+
+ + + diff --git a/_build/patterns/appfactories/index.html b/_build/patterns/appfactories/index.html new file mode 100644 index 00000000..f882d17c --- /dev/null +++ b/_build/patterns/appfactories/index.html @@ -0,0 +1,213 @@ + + + + + + + + Application Factories — Flask Documentation (3.1.x) + + + + + + + + + + + + + + +
+
+
+
+ +
+

Application Factories

+

If you are already using packages and blueprints for your application +(Modular Applications with Blueprints) there are a couple of really nice ways to further improve +the experience. A common pattern is creating the application object when +the blueprint is imported. But if you move the creation of this object +into a function, you can then create multiple instances of this app later.

+

So why would you want to do this?

+
    +
  1. Testing. You can have instances of the application with different +settings to test every case.

  2. +
  3. Multiple instances. Imagine you want to run different versions of the +same application. Of course you could have multiple instances with +different configs set up in your webserver, but if you use factories, +you can have multiple instances of the same application running in the +same application process which can be handy.

  4. +
+

So how would you then actually implement that?

+
+

Basic Factories

+

The idea is to set up the application in a function. Like this:

+
def create_app(config_filename):
+    app = Flask(__name__)
+    app.config.from_pyfile(config_filename)
+
+    from yourapplication.model import db
+    db.init_app(app)
+
+    from yourapplication.views.admin import admin
+    from yourapplication.views.frontend import frontend
+    app.register_blueprint(admin)
+    app.register_blueprint(frontend)
+
+    return app
+
+
+

The downside is that you cannot use the application object in the blueprints +at import time. You can however use it from within a request. How do you +get access to the application with the config? Use +current_app:

+
from flask import current_app, Blueprint, render_template
+admin = Blueprint('admin', __name__, url_prefix='/admin')
+
+@admin.route('/')
+def index():
+    return render_template(current_app.config['INDEX_TEMPLATE'])
+
+
+

Here we look up the name of a template in the config.

+
+
+

Factories & Extensions

+

It’s preferable to create your extensions and app factories so that the +extension object does not initially get bound to the application.

+

Using Flask-SQLAlchemy, +as an example, you should not do something along those lines:

+
def create_app(config_filename):
+    app = Flask(__name__)
+    app.config.from_pyfile(config_filename)
+
+    db = SQLAlchemy(app)
+
+
+

But, rather, in model.py (or equivalent):

+
db = SQLAlchemy()
+
+
+

and in your application.py (or equivalent):

+
def create_app(config_filename):
+    app = Flask(__name__)
+    app.config.from_pyfile(config_filename)
+
+    from yourapplication.model import db
+    db.init_app(app)
+
+
+

Using this design pattern, no application-specific state is stored on the +extension object, so one extension object can be used for multiple apps. +For more information about the design of extensions refer to Flask Extension Development.

+
+
+

Using Applications

+

To run such an application, you can use the flask command:

+
$ flask --app hello run
+
+
+

Flask will automatically detect the factory if it is named +create_app or make_app in hello. You can also pass arguments +to the factory like this:

+
$ flask --app hello:create_app(local_auth=True) run
+
+
+

Then the create_app factory in myapp is called with the keyword +argument local_auth=True. See Command Line Interface for more detail.

+
+
+

Factory Improvements

+

The factory function above is not very clever, but you can improve it. +The following changes are straightforward to implement:

+
    +
  1. Make it possible to pass in configuration values for unit tests so that +you don’t have to create config files on the filesystem.

  2. +
  3. Call a function from a blueprint when the application is setting up so +that you have a place to modify attributes of the application (like +hooking in before/after request handlers etc.)

  4. +
  5. Add in WSGI middlewares when the application is being created if necessary.

  6. +
+
+
+ + +
+
+
+
+ + +
+
+ + + diff --git a/_build/patterns/caching/index.html b/_build/patterns/caching/index.html new file mode 100644 index 00000000..75d1651f --- /dev/null +++ b/_build/patterns/caching/index.html @@ -0,0 +1,105 @@ + + + + + + + + Caching — Flask Documentation (3.1.x) + + + + + + + + + + + + + + +
+
+
+
+ +
+

Caching

+

When your application runs slow, throw some caches in. Well, at least +it’s the easiest way to speed up things. What does a cache do? Say you +have a function that takes some time to complete but the results would +still be good enough if they were 5 minutes old. So then the idea is that +you actually put the result of that calculation into a cache for some +time.

+

Flask itself does not provide caching for you, but Flask-Caching, an +extension for Flask does. Flask-Caching supports various backends, and it is +even possible to develop your own caching backend.

+
+ + +
+
+
+
+ + +
+
+ + + diff --git a/_build/patterns/celery/index.html b/_build/patterns/celery/index.html new file mode 100644 index 00000000..58077fa9 --- /dev/null +++ b/_build/patterns/celery/index.html @@ -0,0 +1,301 @@ + + + + + + + + Background Tasks with Celery — Flask Documentation (3.1.x) + + + + + + + + + + + + + + +
+
+
+
+ +
+

Background Tasks with Celery

+

If your application has a long running task, such as processing some uploaded data or +sending email, you don’t want to wait for it to finish during a request. Instead, use a +task queue to send the necessary data to another process that will run the task in the +background while the request returns immediately.

+

Celery is a powerful task queue that can be used for simple background tasks as well +as complex multi-stage programs and schedules. This guide will show you how to configure +Celery using Flask. Read Celery’s First Steps with Celery guide to learn how to use +Celery itself.

+

The Flask repository contains an example +based on the information on this page, which also shows how to use JavaScript to submit +tasks and poll for progress and results.

+
+

Install

+

Install Celery from PyPI, for example using pip:

+
$ pip install celery
+
+
+
+
+

Integrate Celery with Flask

+

You can use Celery without any integration with Flask, but it’s convenient to configure +it through Flask’s config, and to let tasks access the Flask application.

+

Celery uses similar ideas to Flask, with a Celery app object that has configuration +and registers tasks. While creating a Flask app, use the following code to create and +configure a Celery app as well.

+
from celery import Celery, Task
+
+def celery_init_app(app: Flask) -> Celery:
+    class FlaskTask(Task):
+        def __call__(self, *args: object, **kwargs: object) -> object:
+            with app.app_context():
+                return self.run(*args, **kwargs)
+
+    celery_app = Celery(app.name, task_cls=FlaskTask)
+    celery_app.config_from_object(app.config["CELERY"])
+    celery_app.set_default()
+    app.extensions["celery"] = celery_app
+    return celery_app
+
+
+

This creates and returns a Celery app object. Celery configuration is taken from +the CELERY key in the Flask configuration. The Celery app is set as the default, so +that it is seen during each request. The Task subclass automatically runs task +functions with a Flask app context active, so that services like your database +connections are available.

+

Here’s a basic example.py that configures Celery to use Redis for communication. We +enable a result backend, but ignore results by default. This allows us to store results +only for tasks where we care about the result.

+
from flask import Flask
+
+app = Flask(__name__)
+app.config.from_mapping(
+    CELERY=dict(
+        broker_url="redis://localhost",
+        result_backend="redis://localhost",
+        task_ignore_result=True,
+    ),
+)
+celery_app = celery_init_app(app)
+
+
+

Point the celery worker command at this and it will find the celery_app object.

+
$ celery -A example worker --loglevel INFO
+
+
+

You can also run the celery beat command to run tasks on a schedule. See Celery’s +docs for more information about defining schedules.

+
$ celery -A example beat --loglevel INFO
+
+
+
+
+

Application Factory

+

When using the Flask application factory pattern, call the celery_init_app function +inside the factory. It sets app.extensions["celery"] to the Celery app object, which +can be used to get the Celery app from the Flask app returned by the factory.

+
def create_app() -> Flask:
+    app = Flask(__name__)
+    app.config.from_mapping(
+        CELERY=dict(
+            broker_url="redis://localhost",
+            result_backend="redis://localhost",
+            task_ignore_result=True,
+        ),
+    )
+    app.config.from_prefixed_env()
+    celery_init_app(app)
+    return app
+
+
+

To use celery commands, Celery needs an app object, but that’s no longer directly +available. Create a make_celery.py file that calls the Flask app factory and gets +the Celery app from the returned Flask app.

+
from example import create_app
+
+flask_app = create_app()
+celery_app = flask_app.extensions["celery"]
+
+
+

Point the celery command to this file.

+
$ celery -A make_celery worker --loglevel INFO
+$ celery -A make_celery beat --loglevel INFO
+
+
+
+
+

Defining Tasks

+

Using @celery_app.task to decorate task functions requires access to the +celery_app object, which won’t be available when using the factory pattern. It also +means that the decorated tasks are tied to the specific Flask and Celery app instances, +which could be an issue during testing if you change configuration for a test.

+

Instead, use Celery’s @shared_task decorator. This creates task objects that will +access whatever the “current app” is, which is a similar concept to Flask’s blueprints +and app context. This is why we called celery_app.set_default() above.

+

Here’s an example task that adds two numbers together and returns the result.

+
from celery import shared_task
+
+@shared_task(ignore_result=False)
+def add_together(a: int, b: int) -> int:
+    return a + b
+
+
+

Earlier, we configured Celery to ignore task results by default. Since we want to know +the return value of this task, we set ignore_result=False. On the other hand, a task +that didn’t need a result, such as sending an email, wouldn’t set this.

+
+
+

Calling Tasks

+

The decorated function becomes a task object with methods to call it in the background. +The simplest way is to use the delay(*args, **kwargs) method. See Celery’s docs for +more methods.

+

A Celery worker must be running to run the task. Starting a worker is shown in the +previous sections.

+
from flask import request
+
+@app.post("/add")
+def start_add() -> dict[str, object]:
+    a = request.form.get("a", type=int)
+    b = request.form.get("b", type=int)
+    result = add_together.delay(a, b)
+    return {"result_id": result.id}
+
+
+

The route doesn’t get the task’s result immediately. That would defeat the purpose by +blocking the response. Instead, we return the running task’s result id, which we can use +later to get the result.

+
+
+

Getting Results

+

To fetch the result of the task we started above, we’ll add another route that takes the +result id we returned before. We return whether the task is finished (ready), whether it +finished successfully, and what the return value (or error) was if it is finished.

+
from celery.result import AsyncResult
+
+@app.get("/result/<id>")
+def task_result(id: str) -> dict[str, object]:
+    result = AsyncResult(id)
+    return {
+        "ready": result.ready(),
+        "successful": result.successful(),
+        "value": result.result if result.ready() else None,
+    }
+
+
+

Now you can start the task using the first route, then poll for the result using the +second route. This keeps the Flask request workers from being blocked waiting for tasks +to finish.

+

The Flask repository contains an example +using JavaScript to submit tasks and poll for progress and results.

+
+
+

Passing Data to Tasks

+

The “add” task above took two integers as arguments. To pass arguments to tasks, Celery +has to serialize them to a format that it can pass to other processes. Therefore, +passing complex objects is not recommended. For example, it would be impossible to pass +a SQLAlchemy model object, since that object is probably not serializable and is tied to +the session that queried it.

+

Pass the minimal amount of data necessary to fetch or recreate any complex data within +the task. Consider a task that will run when the logged in user asks for an archive of +their data. The Flask request knows the logged in user, and has the user object queried +from the database. It got that by querying the database for a given id, so the task can +do the same thing. Pass the user’s id rather than the user object.

+
@shared_task
+def generate_user_archive(user_id: str) -> None:
+    user = db.session.get(User, user_id)
+    ...
+
+generate_user_archive.delay(current_user.id)
+
+
+
+
+ + +
+
+
+
+ + +
+
+ + + diff --git a/_build/patterns/deferredcallbacks/index.html b/_build/patterns/deferredcallbacks/index.html new file mode 100644 index 00000000..bfb19459 --- /dev/null +++ b/_build/patterns/deferredcallbacks/index.html @@ -0,0 +1,134 @@ + + + + + + + + Deferred Request Callbacks — Flask Documentation (3.1.x) + + + + + + + + + + + + + + +
+
+
+
+ +
+

Deferred Request Callbacks

+

One of the design principles of Flask is that response objects are created and +passed down a chain of potential callbacks that can modify them or replace +them. When the request handling starts, there is no response object yet. It is +created as necessary either by a view function or by some other component in +the system.

+

What happens if you want to modify the response at a point where the response +does not exist yet? A common example for that would be a +before_request() callback that wants to set a cookie on the +response object.

+

One way is to avoid the situation. Very often that is possible. For instance +you can try to move that logic into a after_request() +callback instead. However, sometimes moving code there makes it +more complicated or awkward to reason about.

+

As an alternative, you can use after_this_request() to register +callbacks that will execute after only the current request. This way you can +defer code execution from anywhere in the application, based on the current +request.

+

At any time during a request, we can register a function to be called at the +end of the request. For example you can remember the current language of the +user in a cookie in a before_request() callback:

+
from flask import request, after_this_request
+
+@app.before_request
+def detect_user_language():
+    language = request.cookies.get('user_lang')
+
+    if language is None:
+        language = guess_language_from_request()
+
+        # when the response exists, set a cookie with the language
+        @after_this_request
+        def remember_language(response):
+            response.set_cookie('user_lang', language)
+            return response
+
+    g.language = language
+
+
+
+ + +
+
+
+
+ + +
+
+ + + diff --git a/_build/patterns/favicon/index.html b/_build/patterns/favicon/index.html new file mode 100644 index 00000000..355b5c1e --- /dev/null +++ b/_build/patterns/favicon/index.html @@ -0,0 +1,150 @@ + + + + + + + + Adding a favicon — Flask Documentation (3.1.x) + + + + + + + + + + + + + + +
+
+
+
+ +
+

Adding a favicon

+

A “favicon” is an icon used by browsers for tabs and bookmarks. This helps +to distinguish your website and to give it a unique brand.

+

A common question is how to add a favicon to a Flask application. First, of +course, you need an icon. It should be 16 × 16 pixels and in the ICO file +format. This is not a requirement but a de-facto standard supported by all +relevant browsers. Put the icon in your static directory as +favicon.ico.

+

Now, to get browsers to find your icon, the correct way is to add a link +tag in your HTML. So, for example:

+
<link rel="shortcut icon" href="{{ url_for('static', filename='favicon.ico') }}">
+
+
+

That’s all you need for most browsers, however some really old ones do not +support this standard. The old de-facto standard is to serve this file, +with this name, at the website root. If your application is not mounted at +the root path of the domain you either need to configure the web server to +serve the icon at the root or if you can’t do that you’re out of luck. If +however your application is the root you can simply route a redirect:

+
app.add_url_rule('/favicon.ico',
+                 redirect_to=url_for('static', filename='favicon.ico'))
+
+
+

If you want to save the extra redirect request you can also write a view +using send_from_directory():

+
import os
+from flask import send_from_directory
+
+@app.route('/favicon.ico')
+def favicon():
+    return send_from_directory(os.path.join(app.root_path, 'static'),
+                               'favicon.ico', mimetype='image/vnd.microsoft.icon')
+
+
+

We can leave out the explicit mimetype and it will be guessed, but we may +as well specify it to avoid the extra guessing, as it will always be the +same.

+

The above will serve the icon via your application and if possible it’s +better to configure your dedicated web server to serve it; refer to the +web server’s documentation.

+
+

See also

+
    +
  • The Favicon article on +Wikipedia

  • +
+
+
+ + +
+
+
+
+ + +
+
+ + + diff --git a/_build/patterns/fileuploads/index.html b/_build/patterns/fileuploads/index.html new file mode 100644 index 00000000..74cf5d74 --- /dev/null +++ b/_build/patterns/fileuploads/index.html @@ -0,0 +1,273 @@ + + + + + + + + Uploading Files — Flask Documentation (3.1.x) + + + + + + + + + + + + + + +
+
+
+
+ +
+

Uploading Files

+

Ah yes, the good old problem of file uploads. The basic idea of file +uploads is actually quite simple. It basically works like this:

+
    +
  1. A <form> tag is marked with enctype=multipart/form-data +and an <input type=file> is placed in that form.

  2. +
  3. The application accesses the file from the files +dictionary on the request object.

  4. +
  5. use the save() method of the file to save +the file permanently somewhere on the filesystem.

  6. +
+
+

A Gentle Introduction

+

Let’s start with a very basic application that uploads a file to a +specific upload folder and displays a file to the user. Let’s look at the +bootstrapping code for our application:

+
import os
+from flask import Flask, flash, request, redirect, url_for
+from werkzeug.utils import secure_filename
+
+UPLOAD_FOLDER = '/path/to/the/uploads'
+ALLOWED_EXTENSIONS = {'txt', 'pdf', 'png', 'jpg', 'jpeg', 'gif'}
+
+app = Flask(__name__)
+app.config['UPLOAD_FOLDER'] = UPLOAD_FOLDER
+
+
+

So first we need a couple of imports. Most should be straightforward, the +werkzeug.secure_filename() is explained a little bit later. The +UPLOAD_FOLDER is where we will store the uploaded files and the +ALLOWED_EXTENSIONS is the set of allowed file extensions.

+

Why do we limit the extensions that are allowed? You probably don’t want +your users to be able to upload everything there if the server is directly +sending out the data to the client. That way you can make sure that users +are not able to upload HTML files that would cause XSS problems (see +Cross-Site Scripting (XSS)). Also make sure to disallow .php files if the server +executes them, but who has PHP installed on their server, right? :)

+

Next the functions that check if an extension is valid and that uploads +the file and redirects the user to the URL for the uploaded file:

+
def allowed_file(filename):
+    return '.' in filename and \
+           filename.rsplit('.', 1)[1].lower() in ALLOWED_EXTENSIONS
+
+@app.route('/', methods=['GET', 'POST'])
+def upload_file():
+    if request.method == 'POST':
+        # check if the post request has the file part
+        if 'file' not in request.files:
+            flash('No file part')
+            return redirect(request.url)
+        file = request.files['file']
+        # If the user does not select a file, the browser submits an
+        # empty file without a filename.
+        if file.filename == '':
+            flash('No selected file')
+            return redirect(request.url)
+        if file and allowed_file(file.filename):
+            filename = secure_filename(file.filename)
+            file.save(os.path.join(app.config['UPLOAD_FOLDER'], filename))
+            return redirect(url_for('download_file', name=filename))
+    return '''
+    <!doctype html>
+    <title>Upload new File</title>
+    <h1>Upload new File</h1>
+    <form method=post enctype=multipart/form-data>
+      <input type=file name=file>
+      <input type=submit value=Upload>
+    </form>
+    '''
+
+
+

So what does that secure_filename() function actually do? +Now the problem is that there is that principle called “never trust user +input”. This is also true for the filename of an uploaded file. All +submitted form data can be forged, and filenames can be dangerous. For +the moment just remember: always use that function to secure a filename +before storing it directly on the filesystem.

+
+

Information for the Pros

+

So you’re interested in what that secure_filename() +function does and what the problem is if you’re not using it? So just +imagine someone would send the following information as filename to +your application:

+
filename = "../../../../home/username/.bashrc"
+
+
+

Assuming the number of ../ is correct and you would join this with +the UPLOAD_FOLDER the user might have the ability to modify a file on +the server’s filesystem he or she should not modify. This does require some +knowledge about how the application looks like, but trust me, hackers +are patient :)

+

Now let’s look how that function works:

+
>>> secure_filename('../../../../home/username/.bashrc')
+'home_username_.bashrc'
+
+
+
+

We want to be able to serve the uploaded files so they can be downloaded +by users. We’ll define a download_file view to serve files in the +upload folder by name. url_for("download_file", name=name) generates +download URLs.

+
from flask import send_from_directory
+
+@app.route('/uploads/<name>')
+def download_file(name):
+    return send_from_directory(app.config["UPLOAD_FOLDER"], name)
+
+
+

If you’re using middleware or the HTTP server to serve files, you can +register the download_file endpoint as build_only so url_for +will work without a view function.

+
app.add_url_rule(
+    "/uploads/<name>", endpoint="download_file", build_only=True
+)
+
+
+
+
+

Improving Uploads

+
+Changelog
+

Added in version 0.6.

+
+

So how exactly does Flask handle uploads? Well it will store them in the +webserver’s memory if the files are reasonably small, otherwise in a +temporary location (as returned by tempfile.gettempdir()). But how +do you specify the maximum file size after which an upload is aborted? By +default Flask will happily accept file uploads with an unlimited amount of +memory, but you can limit that by setting the MAX_CONTENT_LENGTH +config key:

+
from flask import Flask, Request
+
+app = Flask(__name__)
+app.config['MAX_CONTENT_LENGTH'] = 16 * 1000 * 1000
+
+
+

The code above will limit the maximum allowed payload to 16 megabytes. +If a larger file is transmitted, Flask will raise a +RequestEntityTooLarge exception.

+
+

Connection Reset Issue

+

When using the local development server, you may get a connection +reset error instead of a 413 response. You will get the correct +status response when running the app with a production WSGI server.

+
+

This feature was added in Flask 0.6 but can be achieved in older versions +as well by subclassing the request object. For more information on that +consult the Werkzeug documentation on file handling.

+
+
+

Upload Progress Bars

+

A while ago many developers had the idea to read the incoming file in +small chunks and store the upload progress in the database to be able to +poll the progress with JavaScript from the client. The client asks the +server every 5 seconds how much it has transmitted, but this is +something it should already know.

+
+
+

An Easier Solution

+

Now there are better solutions that work faster and are more reliable. There +are JavaScript libraries like jQuery that have form plugins to ease the +construction of progress bar.

+

Because the common pattern for file uploads exists almost unchanged in all +applications dealing with uploads, there are also some Flask extensions that +implement a full fledged upload mechanism that allows controlling which +file extensions are allowed to be uploaded.

+
+
+ + +
+
+
+
+ + +
+
+ + + diff --git a/_build/patterns/flashing/index.html b/_build/patterns/flashing/index.html new file mode 100644 index 00000000..0e49f8ef --- /dev/null +++ b/_build/patterns/flashing/index.html @@ -0,0 +1,243 @@ + + + + + + + + Message Flashing — Flask Documentation (3.1.x) + + + + + + + + + + + + + + +
+
+
+
+ +
+

Message Flashing

+

Good applications and user interfaces are all about feedback. If the user +does not get enough feedback they will probably end up hating the +application. Flask provides a really simple way to give feedback to a +user with the flashing system. The flashing system basically makes it +possible to record a message at the end of a request and access it next +request and only next request. This is usually combined with a layout +template that does this. Note that browsers and sometimes web servers enforce +a limit on cookie sizes. This means that flashing messages that are too +large for session cookies causes message flashing to fail silently.

+
+

Simple Flashing

+

So here is a full example:

+
from flask import Flask, flash, redirect, render_template, \
+     request, url_for
+
+app = Flask(__name__)
+app.secret_key = b'_5#y2L"F4Q8z\n\xec]/'
+
+@app.route('/')
+def index():
+    return render_template('index.html')
+
+@app.route('/login', methods=['GET', 'POST'])
+def login():
+    error = None
+    if request.method == 'POST':
+        if request.form['username'] != 'admin' or \
+                request.form['password'] != 'secret':
+            error = 'Invalid credentials'
+        else:
+            flash('You were successfully logged in')
+            return redirect(url_for('index'))
+    return render_template('login.html', error=error)
+
+
+

And here is the layout.html template which does the magic:

+
<!doctype html>
+<title>My Application</title>
+{% with messages = get_flashed_messages() %}
+  {% if messages %}
+    <ul class=flashes>
+    {% for message in messages %}
+      <li>{{ message }}</li>
+    {% endfor %}
+    </ul>
+  {% endif %}
+{% endwith %}
+{% block body %}{% endblock %}
+
+
+

Here is the index.html template which inherits from layout.html:

+
{% extends "layout.html" %}
+{% block body %}
+  <h1>Overview</h1>
+  <p>Do you want to <a href="{{ url_for('login') }}">log in?</a>
+{% endblock %}
+
+
+

And here is the login.html template which also inherits from +layout.html:

+
{% extends "layout.html" %}
+{% block body %}
+  <h1>Login</h1>
+  {% if error %}
+    <p class=error><strong>Error:</strong> {{ error }}
+  {% endif %}
+  <form method=post>
+    <dl>
+      <dt>Username:
+      <dd><input type=text name=username value="{{
+          request.form.username }}">
+      <dt>Password:
+      <dd><input type=password name=password>
+    </dl>
+    <p><input type=submit value=Login>
+  </form>
+{% endblock %}
+
+
+
+
+

Flashing With Categories

+
+Changelog
+

Added in version 0.3.

+
+

It is also possible to provide categories when flashing a message. The +default category if nothing is provided is 'message'. Alternative +categories can be used to give the user better feedback. For example +error messages could be displayed with a red background.

+

To flash a message with a different category, just use the second argument +to the flash() function:

+
flash('Invalid password provided', 'error')
+
+
+

Inside the template you then have to tell the +get_flashed_messages() function to also return the +categories. The loop looks slightly different in that situation then:

+
{% with messages = get_flashed_messages(with_categories=true) %}
+  {% if messages %}
+    <ul class=flashes>
+    {% for category, message in messages %}
+      <li class="{{ category }}">{{ message }}</li>
+    {% endfor %}
+    </ul>
+  {% endif %}
+{% endwith %}
+
+
+

This is just one example of how to render these flashed messages. One +might also use the category to add a prefix such as +<strong>Error:</strong> to the message.

+
+
+

Filtering Flash Messages

+
+Changelog
+

Added in version 0.9.

+
+

Optionally you can pass a list of categories which filters the results of +get_flashed_messages(). This is useful if you wish to +render each category in a separate block.

+
{% with errors = get_flashed_messages(category_filter=["error"]) %}
+{% if errors %}
+<div class="alert-message block-message error">
+  <a class="close" href="#">×</a>
+  <ul>
+    {%- for msg in errors %}
+    <li>{{ msg }}</li>
+    {% endfor -%}
+  </ul>
+</div>
+{% endif %}
+{% endwith %}
+
+
+
+
+ + +
+
+
+
+ + +
+
+ + + diff --git a/_build/patterns/index.html b/_build/patterns/index.html new file mode 100644 index 00000000..df8c42d8 --- /dev/null +++ b/_build/patterns/index.html @@ -0,0 +1,222 @@ + + + + + + + + Patterns for Flask — Flask Documentation (3.1.x) + + + + + + + + + + + + + + +
+
+
+
+ +
+

Patterns for Flask

+

Certain features and interactions are common enough that you will find +them in most web applications. For example, many applications use a +relational database and user authentication. They will open a database +connection at the beginning of the request and get the information for +the logged in user. At the end of the request, the database connection +is closed.

+

These types of patterns may be a bit outside the scope of Flask itself, +but Flask makes it easy to implement them. Some common patterns are +collected in the following pages.

+
+ +
+
+ + +
+
+
+
+ + +
+
+ + + diff --git a/_build/patterns/javascript/index.html b/_build/patterns/javascript/index.html new file mode 100644 index 00000000..0690dfb1 --- /dev/null +++ b/_build/patterns/javascript/index.html @@ -0,0 +1,314 @@ + + + + + + + + JavaScript, fetch, and JSON — Flask Documentation (3.1.x) + + + + + + + + + + + + + + +
+
+
+
+ +
+

JavaScript, fetch, and JSON

+

You may want to make your HTML page dynamic, by changing data without +reloading the entire page. Instead of submitting an HTML <form> and +performing a redirect to re-render the template, you can add +JavaScript that calls fetch() and replaces content on the page.

+

fetch() is the modern, built-in JavaScript solution to making +requests from a page. You may have heard of other “AJAX” methods and +libraries, such as XMLHttpRequest() or jQuery. These are no longer needed in +modern browsers, although you may choose to use them or another library +depending on your application’s requirements. These docs will only focus +on built-in JavaScript features.

+
+

Rendering Templates

+

It is important to understand the difference between templates and +JavaScript. Templates are rendered on the server, before the response is +sent to the user’s browser. JavaScript runs in the user’s browser, after +the template is rendered and sent. Therefore, it is impossible to use +JavaScript to affect how the Jinja template is rendered, but it is +possible to render data into the JavaScript that will run.

+

To provide data to JavaScript when rendering the template, use the +tojson() filter in a <script> block. This will +convert the data to a valid JavaScript object, and ensure that any +unsafe HTML characters are rendered safely. If you do not use the +tojson filter, you will get a SyntaxError in the browser +console.

+
data = generate_report()
+return render_template("report.html", chart_data=data)
+
+
+
<script>
+    const chart_data = {{ chart_data|tojson }}
+    chartLib.makeChart(chart_data)
+</script>
+
+
+

A less common pattern is to add the data to a data- attribute on an +HTML tag. In this case, you must use single quotes around the value, not +double quotes, otherwise you will produce invalid or unsafe HTML.

+
<div data-chart='{{ chart_data|tojson }}'></div>
+
+
+
+
+

Generating URLs

+

The other way to get data from the server to JavaScript is to make a +request for it. First, you need to know the URL to request.

+

The simplest way to generate URLs is to continue to use +url_for() when rendering the template. For example:

+
const user_url = {{ url_for("user", id=current_user.id)|tojson }}
+fetch(user_url).then(...)
+
+
+

However, you might need to generate a URL based on information you only +know in JavaScript. As discussed above, JavaScript runs in the user’s +browser, not as part of the template rendering, so you can’t use +url_for at that point.

+

In this case, you need to know the “root URL” under which your +application is served. In simple setups, this is /, but it might +also be something else, like https://example.com/myapp/.

+

A simple way to tell your JavaScript code about this root is to set it +as a global variable when rendering the template. Then you can use it +when generating URLs from JavaScript.

+
const SCRIPT_ROOT = {{ request.script_root|tojson }}
+let user_id = ...  // do something to get a user id from the page
+let user_url = `${SCRIPT_ROOT}/user/${user_id}`
+fetch(user_url).then(...)
+
+
+
+
+

Making a Request with fetch

+

fetch() takes two arguments, a URL and an object with other options, +and returns a Promise. We won’t cover all the available options, and +will only use then() on the promise, not other callbacks or +await syntax. Read the linked MDN docs for more information about +those features.

+

By default, the GET method is used. If the response contains JSON, it +can be used with a then() callback chain.

+
const room_url = {{ url_for("room_detail", id=room.id)|tojson }}
+fetch(room_url)
+    .then(response => response.json())
+    .then(data => {
+        // data is a parsed JSON object
+    })
+
+
+

To send data, use a data method such as POST, and pass the body +option. The most common types for data are form data or JSON data.

+

To send form data, pass a populated FormData object. This uses the +same format as an HTML form, and would be accessed with request.form +in a Flask view.

+
let data = new FormData()
+data.append("name", "Flask Room")
+data.append("description", "Talk about Flask here.")
+fetch(room_url, {
+    "method": "POST",
+    "body": data,
+}).then(...)
+
+
+

In general, prefer sending request data as form data, as would be used +when submitting an HTML form. JSON can represent more complex data, but +unless you need that it’s better to stick with the simpler format. When +sending JSON data, the Content-Type: application/json header must be +sent as well, otherwise Flask will return a 400 error.

+
let data = {
+    "name": "Flask Room",
+    "description": "Talk about Flask here.",
+}
+fetch(room_url, {
+    "method": "POST",
+    "headers": {"Content-Type": "application/json"},
+    "body": JSON.stringify(data),
+}).then(...)
+
+
+
+
+

Following Redirects

+

A response might be a redirect, for example if you logged in with +JavaScript instead of a traditional HTML form, and your view returned +a redirect instead of JSON. JavaScript requests do follow redirects, but +they don’t change the page. If you want to make the page change you can +inspect the response and apply the redirect manually.

+
fetch("/login", {"body": ...}).then(
+    response => {
+        if (response.redirected) {
+            window.location = response.url
+        } else {
+            showLoginError()
+        }
+    }
+)
+
+
+
+
+

Replacing Content

+

A response might be new HTML, either a new section of the page to add or +replace, or an entirely new page. In general, if you’re returning the +entire page, it would be better to handle that with a redirect as shown +in the previous section. The following example shows how to replace a +<div> with the HTML returned by a request.

+
<div id="geology-fact">
+    {{ include "geology_fact.html" }}
+</div>
+<script>
+    const geology_url = {{ url_for("geology_fact")|tojson }}
+    const geology_div = getElementById("geology-fact")
+    fetch(geology_url)
+        .then(response => response.text)
+        .then(text => geology_div.innerHTML = text)
+</script>
+
+
+
+
+

Return JSON from Views

+

To return a JSON object from your API view, you can directly return a +dict from the view. It will be serialized to JSON automatically.

+
@app.route("/user/<int:id>")
+def user_detail(id):
+    user = User.query.get_or_404(id)
+    return {
+        "username": User.username,
+        "email": User.email,
+        "picture": url_for("static", filename=f"users/{id}/profile.png"),
+    }
+
+
+

If you want to return another JSON type, use the +jsonify() function, which creates a response object +with the given data serialized to JSON.

+
from flask import jsonify
+
+@app.route("/users")
+def user_list():
+    users = User.query.order_by(User.name).all()
+    return jsonify([u.to_json() for u in users])
+
+
+

It is usually not a good idea to return file data in a JSON response. +JSON cannot represent binary data directly, so it must be base64 +encoded, which can be slow, takes more bandwidth to send, and is not as +easy to cache. Instead, serve files using one view, and generate a URL +to the desired file to include in the JSON. Then the client can make a +separate request to get the linked resource after getting the JSON.

+
+
+

Receiving JSON in Views

+

Use the json property of the +request object to decode the request’s body as JSON. If +the body is not valid JSON, or the Content-Type header is not set to +application/json, a 400 Bad Request error will be raised.

+
from flask import request
+
+@app.post("/user/<int:id>")
+def user_update(id):
+    user = User.query.get_or_404(id)
+    user.update_from_json(request.json)
+    db.session.commit()
+    return user.to_json()
+
+
+
+
+ + +
+
+
+
+ + +
+
+ + + diff --git a/_build/patterns/jquery/index.html b/_build/patterns/jquery/index.html new file mode 100644 index 00000000..ecb42036 --- /dev/null +++ b/_build/patterns/jquery/index.html @@ -0,0 +1,82 @@ + + + + + + + + AJAX with jQuery — Flask Documentation (3.1.x) + + + + + + + + + + + + +
+
+
+
+ +
+

AJAX with jQuery

+

Obsolete, see JavaScript, fetch, and JSON instead.

+
+ + +
+
+
+
+ + +
+
+ + + diff --git a/_build/patterns/lazyloading/index.html b/_build/patterns/lazyloading/index.html new file mode 100644 index 00000000..a9ac2036 --- /dev/null +++ b/_build/patterns/lazyloading/index.html @@ -0,0 +1,207 @@ + + + + + + + + Lazily Loading Views — Flask Documentation (3.1.x) + + + + + + + + + + + + + + +
+
+
+
+ +
+

Lazily Loading Views

+

Flask is usually used with the decorators. Decorators are simple and you +have the URL right next to the function that is called for that specific +URL. However there is a downside to this approach: it means all your code +that uses decorators has to be imported upfront or Flask will never +actually find your function.

+

This can be a problem if your application has to import quick. It might +have to do that on systems like Google’s App Engine or other systems. So +if you suddenly notice that your application outgrows this approach you +can fall back to a centralized URL mapping.

+

The system that enables having a central URL map is the +add_url_rule() function. Instead of using decorators, +you have a file that sets up the application with all URLs.

+
+

Converting to Centralized URL Map

+

Imagine the current application looks somewhat like this:

+
from flask import Flask
+app = Flask(__name__)
+
+@app.route('/')
+def index():
+    pass
+
+@app.route('/user/<username>')
+def user(username):
+    pass
+
+
+

Then, with the centralized approach you would have one file with the views +(views.py) but without any decorator:

+
def index():
+    pass
+
+def user(username):
+    pass
+
+
+

And then a file that sets up an application which maps the functions to +URLs:

+
from flask import Flask
+from yourapplication import views
+app = Flask(__name__)
+app.add_url_rule('/', view_func=views.index)
+app.add_url_rule('/user/<username>', view_func=views.user)
+
+
+
+
+

Loading Late

+

So far we only split up the views and the routing, but the module is still +loaded upfront. The trick is to actually load the view function as needed. +This can be accomplished with a helper class that behaves just like a +function but internally imports the real function on first use:

+
from werkzeug.utils import import_string, cached_property
+
+class LazyView(object):
+
+    def __init__(self, import_name):
+        self.__module__, self.__name__ = import_name.rsplit('.', 1)
+        self.import_name = import_name
+
+    @cached_property
+    def view(self):
+        return import_string(self.import_name)
+
+    def __call__(self, *args, **kwargs):
+        return self.view(*args, **kwargs)
+
+
+

What’s important here is is that __module__ and __name__ are properly +set. This is used by Flask internally to figure out how to name the +URL rules in case you don’t provide a name for the rule yourself.

+

Then you can define your central place to combine the views like this:

+
from flask import Flask
+from yourapplication.helpers import LazyView
+app = Flask(__name__)
+app.add_url_rule('/',
+                 view_func=LazyView('yourapplication.views.index'))
+app.add_url_rule('/user/<username>',
+                 view_func=LazyView('yourapplication.views.user'))
+
+
+

You can further optimize this in terms of amount of keystrokes needed to +write this by having a function that calls into +add_url_rule() by prefixing a string with the project +name and a dot, and by wrapping view_func in a LazyView as needed.

+
def url(import_name, url_rules=[], **options):
+    view = LazyView(f"yourapplication.{import_name}")
+    for url_rule in url_rules:
+        app.add_url_rule(url_rule, view_func=view, **options)
+
+# add a single route to the index view
+url('views.index', ['/'])
+
+# add two routes to a single function endpoint
+url_rules = ['/user/','/user/<username>']
+url('views.user', url_rules)
+
+
+

One thing to keep in mind is that before and after request handlers have +to be in a file that is imported upfront to work properly on the first +request. The same goes for any kind of remaining decorator.

+
+
+ + +
+
+
+
+ + +
+
+ + + diff --git a/_build/patterns/methodoverrides/index.html b/_build/patterns/methodoverrides/index.html new file mode 100644 index 00000000..430ea134 --- /dev/null +++ b/_build/patterns/methodoverrides/index.html @@ -0,0 +1,134 @@ + + + + + + + + Adding HTTP Method Overrides — Flask Documentation (3.1.x) + + + + + + + + + + + + + + +
+
+
+
+ +
+

Adding HTTP Method Overrides

+

Some HTTP proxies do not support arbitrary HTTP methods or newer HTTP +methods (such as PATCH). In that case it’s possible to “proxy” HTTP +methods through another HTTP method in total violation of the protocol.

+

The way this works is by letting the client do an HTTP POST request and +set the X-HTTP-Method-Override header. Then the method is replaced +with the header value before being passed to Flask.

+

This can be accomplished with an HTTP middleware:

+
class HTTPMethodOverrideMiddleware(object):
+    allowed_methods = frozenset([
+        'GET',
+        'HEAD',
+        'POST',
+        'DELETE',
+        'PUT',
+        'PATCH',
+        'OPTIONS'
+    ])
+    bodyless_methods = frozenset(['GET', 'HEAD', 'OPTIONS', 'DELETE'])
+
+    def __init__(self, app):
+        self.app = app
+
+    def __call__(self, environ, start_response):
+        method = environ.get('HTTP_X_HTTP_METHOD_OVERRIDE', '').upper()
+        if method in self.allowed_methods:
+            environ['REQUEST_METHOD'] = method
+        if method in self.bodyless_methods:
+            environ['CONTENT_LENGTH'] = '0'
+        return self.app(environ, start_response)
+
+
+

To use this with Flask, wrap the app object with the middleware:

+
from flask import Flask
+
+app = Flask(__name__)
+app.wsgi_app = HTTPMethodOverrideMiddleware(app.wsgi_app)
+
+
+
+ + +
+
+
+
+ + +
+
+ + + diff --git a/_build/patterns/mongoengine/index.html b/_build/patterns/mongoengine/index.html new file mode 100644 index 00000000..eedc1234 --- /dev/null +++ b/_build/patterns/mongoengine/index.html @@ -0,0 +1,197 @@ + + + + + + + + MongoDB with MongoEngine — Flask Documentation (3.1.x) + + + + + + + + + + + + + + +
+
+
+
+ +
+

MongoDB with MongoEngine

+

Using a document database like MongoDB is a common alternative to +relational SQL databases. This pattern shows how to use +MongoEngine, a document mapper library, to integrate with MongoDB.

+

A running MongoDB server and Flask-MongoEngine are required.

+
pip install flask-mongoengine
+
+
+
+

Configuration

+

Basic setup can be done by defining MONGODB_SETTINGS on +app.config and creating a MongoEngine instance.

+
from flask import Flask
+from flask_mongoengine import MongoEngine
+
+app = Flask(__name__)
+app.config['MONGODB_SETTINGS'] = {
+    "db": "myapp",
+}
+db = MongoEngine(app)
+
+
+
+
+

Mapping Documents

+

To declare a model that represents a Mongo document, create a class that +inherits from Document and declare each of the fields.

+
import mongoengine as me
+
+class Movie(me.Document):
+    title = me.StringField(required=True)
+    year = me.IntField()
+    rated = me.StringField()
+    director = me.StringField()
+    actors = me.ListField()
+
+
+

If the document has nested fields, use EmbeddedDocument to +defined the fields of the embedded document and +EmbeddedDocumentField to declare it on the parent document.

+
class Imdb(me.EmbeddedDocument):
+    imdb_id = me.StringField()
+    rating = me.DecimalField()
+    votes = me.IntField()
+
+class Movie(me.Document):
+    ...
+    imdb = me.EmbeddedDocumentField(Imdb)
+
+
+
+
+

Creating Data

+

Instantiate your document class with keyword arguments for the fields. +You can also assign values to the field attributes after instantiation. +Then call doc.save().

+
bttf = Movie(title="Back To The Future", year=1985)
+bttf.actors = [
+    "Michael J. Fox",
+    "Christopher Lloyd"
+]
+bttf.imdb = Imdb(imdb_id="tt0088763", rating=8.5)
+bttf.save()
+
+
+
+
+

Queries

+

Use the class objects attribute to make queries. A keyword argument +looks for an equal value on the field.

+
bttf = Movies.objects(title="Back To The Future").get_or_404()
+
+
+

Query operators may be used by concatenating them with the field name +using a double-underscore. objects, and queries returned by +calling it, are iterable.

+
some_theron_movie = Movie.objects(actors__in=["Charlize Theron"]).first()
+
+for recents in Movie.objects(year__gte=2017):
+    print(recents.title)
+
+
+
+
+

Documentation

+

There are many more ways to define and query documents with MongoEngine. +For more information, check out the official documentation.

+

Flask-MongoEngine adds helpful utilities on top of MongoEngine. Check +out their documentation as well.

+
+
+ + +
+
+
+
+ + +
+
+ + + diff --git a/_build/patterns/packages/index.html b/_build/patterns/packages/index.html new file mode 100644 index 00000000..c723d1a2 --- /dev/null +++ b/_build/patterns/packages/index.html @@ -0,0 +1,226 @@ + + + + + + + + Large Applications as Packages — Flask Documentation (3.1.x) + + + + + + + + + + + + + + +
+
+
+
+ +
+

Large Applications as Packages

+

Imagine a simple flask application structure that looks like this:

+
/yourapplication
+    yourapplication.py
+    /static
+        style.css
+    /templates
+        layout.html
+        index.html
+        login.html
+        ...
+
+
+

While this is fine for small applications, for larger applications +it’s a good idea to use a package instead of a module. +The Tutorial is structured to use the package pattern, +see the example code.

+
+

Simple Packages

+

To convert that into a larger one, just create a new folder +yourapplication inside the existing one and move everything below it. +Then rename yourapplication.py to __init__.py. (Make sure to delete +all .pyc files first, otherwise things would most likely break)

+

You should then end up with something like that:

+
/yourapplication
+    /yourapplication
+        __init__.py
+        /static
+            style.css
+        /templates
+            layout.html
+            index.html
+            login.html
+            ...
+
+
+

But how do you run your application now? The naive python +yourapplication/__init__.py will not work. Let’s just say that Python +does not want modules in packages to be the startup file. But that is not +a big problem, just add a new file called pyproject.toml next to the inner +yourapplication folder with the following contents:

+
[project]
+name = "yourapplication"
+dependencies = [
+    "flask",
+]
+
+[build-system]
+requires = ["flit_core<4"]
+build-backend = "flit_core.buildapi"
+
+
+

Install your application so it is importable:

+
$ pip install -e .
+
+
+

To use the flask command and run your application you need to set +the --app option that tells Flask where to find the application +instance:

+
$ flask --app yourapplication run
+
+
+

What did we gain from this? Now we can restructure the application a bit +into multiple modules. The only thing you have to remember is the +following quick checklist:

+
    +
  1. the Flask application object creation has to be in the +__init__.py file. That way each module can import it safely and the +__name__ variable will resolve to the correct package.

  2. +
  3. all the view functions (the ones with a route() +decorator on top) have to be imported in the __init__.py file. +Not the object itself, but the module it is in. Import the view module +after the application object is created.

  4. +
+

Here’s an example __init__.py:

+
from flask import Flask
+app = Flask(__name__)
+
+import yourapplication.views
+
+
+

And this is what views.py would look like:

+
from yourapplication import app
+
+@app.route('/')
+def index():
+    return 'Hello World!'
+
+
+

You should then end up with something like that:

+
/yourapplication
+    pyproject.toml
+    /yourapplication
+        __init__.py
+        views.py
+        /static
+            style.css
+        /templates
+            layout.html
+            index.html
+            login.html
+            ...
+
+
+
+

Circular Imports

+

Every Python programmer hates them, and yet we just added some: +circular imports (That’s when two modules depend on each other. In this +case views.py depends on __init__.py). Be advised that this is a +bad idea in general but here it is actually fine. The reason for this is +that we are not actually using the views in __init__.py and just +ensuring the module is imported and we are doing that at the bottom of +the file.

+
+
+
+

Working with Blueprints

+

If you have larger applications it’s recommended to divide them into +smaller groups where each group is implemented with the help of a +blueprint. For a gentle introduction into this topic refer to the +Modular Applications with Blueprints chapter of the documentation.

+
+
+ + +
+
+
+
+ + +
+
+ + + diff --git a/_build/patterns/requestchecksum/index.html b/_build/patterns/requestchecksum/index.html new file mode 100644 index 00000000..84ac1563 --- /dev/null +++ b/_build/patterns/requestchecksum/index.html @@ -0,0 +1,146 @@ + + + + + + + + Request Content Checksums — Flask Documentation (3.1.x) + + + + + + + + + + + + + + +
+
+
+
+ +
+

Request Content Checksums

+

Various pieces of code can consume the request data and preprocess it. +For instance JSON data ends up on the request object already read and +processed, form data ends up there as well but goes through a different +code path. This seems inconvenient when you want to calculate the +checksum of the incoming request data. This is necessary sometimes for +some APIs.

+

Fortunately this is however very simple to change by wrapping the input +stream.

+

The following example calculates the SHA1 checksum of the incoming data as +it gets read and stores it in the WSGI environment:

+
import hashlib
+
+class ChecksumCalcStream(object):
+
+    def __init__(self, stream):
+        self._stream = stream
+        self._hash = hashlib.sha1()
+
+    def read(self, bytes):
+        rv = self._stream.read(bytes)
+        self._hash.update(rv)
+        return rv
+
+    def readline(self, size_hint):
+        rv = self._stream.readline(size_hint)
+        self._hash.update(rv)
+        return rv
+
+def generate_checksum(request):
+    env = request.environ
+    stream = ChecksumCalcStream(env['wsgi.input'])
+    env['wsgi.input'] = stream
+    return stream._hash
+
+
+

To use this, all you need to do is to hook the calculating stream in +before the request starts consuming data. (Eg: be careful accessing +request.form or anything of that nature. before_request_handlers +for instance should be careful not to access it).

+

Example usage:

+
@app.route('/special-api', methods=['POST'])
+def special_api():
+    hash = generate_checksum(request)
+    # Accessing this parses the input stream
+    files = request.files
+    # At this point the hash is fully constructed.
+    checksum = hash.hexdigest()
+    return f"Hash was: {checksum}"
+
+
+
+ + +
+
+
+
+ + +
+
+ + + diff --git a/_build/patterns/singlepageapplications/index.html b/_build/patterns/singlepageapplications/index.html new file mode 100644 index 00000000..3499e732 --- /dev/null +++ b/_build/patterns/singlepageapplications/index.html @@ -0,0 +1,117 @@ + + + + + + + + Single-Page Applications — Flask Documentation (3.1.x) + + + + + + + + + + + + + + +
+
+
+
+ +
+

Single-Page Applications

+

Flask can be used to serve Single-Page Applications (SPA) by placing static +files produced by your frontend framework in a subfolder inside of your +project. You will also need to create a catch-all endpoint that routes all +requests to your SPA.

+

The following example demonstrates how to serve an SPA along with an API:

+
from flask import Flask, jsonify
+
+app = Flask(__name__, static_folder='app', static_url_path="/app")
+
+
+@app.route("/heartbeat")
+def heartbeat():
+    return jsonify({"status": "healthy"})
+
+
+@app.route('/', defaults={'path': ''})
+@app.route('/<path:path>')
+def catch_all(path):
+    return app.send_static_file("index.html")
+
+
+
+ + +
+
+
+
+ + +
+
+ + + diff --git a/_build/patterns/sqlalchemy/index.html b/_build/patterns/sqlalchemy/index.html new file mode 100644 index 00000000..85cd3a8f --- /dev/null +++ b/_build/patterns/sqlalchemy/index.html @@ -0,0 +1,301 @@ + + + + + + + + SQLAlchemy in Flask — Flask Documentation (3.1.x) + + + + + + + + + + + + + + +
+
+
+
+ +
+

SQLAlchemy in Flask

+

Many people prefer SQLAlchemy for database access. In this case it’s +encouraged to use a package instead of a module for your flask application +and drop the models into a separate module (Large Applications as Packages). While that +is not necessary, it makes a lot of sense.

+

There are four very common ways to use SQLAlchemy. I will outline each +of them here:

+
+

Flask-SQLAlchemy Extension

+

Because SQLAlchemy is a common database abstraction layer and object +relational mapper that requires a little bit of configuration effort, +there is a Flask extension that handles that for you. This is recommended +if you want to get started quickly.

+

You can download Flask-SQLAlchemy from PyPI.

+
+
+

Declarative

+

The declarative extension in SQLAlchemy is the most recent method of using +SQLAlchemy. It allows you to define tables and models in one go, similar +to how Django works. In addition to the following text I recommend the +official documentation on the declarative extension.

+

Here’s the example database.py module for your application:

+
from sqlalchemy import create_engine
+from sqlalchemy.orm import scoped_session, sessionmaker, declarative_base
+
+engine = create_engine('sqlite:////tmp/test.db')
+db_session = scoped_session(sessionmaker(autocommit=False,
+                                         autoflush=False,
+                                         bind=engine))
+Base = declarative_base()
+Base.query = db_session.query_property()
+
+def init_db():
+    # import all modules here that might define models so that
+    # they will be registered properly on the metadata.  Otherwise
+    # you will have to import them first before calling init_db()
+    import yourapplication.models
+    Base.metadata.create_all(bind=engine)
+
+
+

To define your models, just subclass the Base class that was created by +the code above. If you are wondering why we don’t have to care about +threads here (like we did in the SQLite3 example above with the +g object): that’s because SQLAlchemy does that for us +already with the scoped_session.

+

To use SQLAlchemy in a declarative way with your application, you just +have to put the following code into your application module. Flask will +automatically remove database sessions at the end of the request or +when the application shuts down:

+
from yourapplication.database import db_session
+
+@app.teardown_appcontext
+def shutdown_session(exception=None):
+    db_session.remove()
+
+
+

Here is an example model (put this into models.py, e.g.):

+
from sqlalchemy import Column, Integer, String
+from yourapplication.database import Base
+
+class User(Base):
+    __tablename__ = 'users'
+    id = Column(Integer, primary_key=True)
+    name = Column(String(50), unique=True)
+    email = Column(String(120), unique=True)
+
+    def __init__(self, name=None, email=None):
+        self.name = name
+        self.email = email
+
+    def __repr__(self):
+        return f'<User {self.name!r}>'
+
+
+

To create the database you can use the init_db function:

+
>>> from yourapplication.database import init_db
+>>> init_db()
+
+
+

You can insert entries into the database like this:

+
>>> from yourapplication.database import db_session
+>>> from yourapplication.models import User
+>>> u = User('admin', 'admin@localhost')
+>>> db_session.add(u)
+>>> db_session.commit()
+
+
+

Querying is simple as well:

+
>>> User.query.all()
+[<User 'admin'>]
+>>> User.query.filter(User.name == 'admin').first()
+<User 'admin'>
+
+
+
+
+

Manual Object Relational Mapping

+

Manual object relational mapping has a few upsides and a few downsides +versus the declarative approach from above. The main difference is that +you define tables and classes separately and map them together. It’s more +flexible but a little more to type. In general it works like the +declarative approach, so make sure to also split up your application into +multiple modules in a package.

+

Here is an example database.py module for your application:

+
from sqlalchemy import create_engine, MetaData
+from sqlalchemy.orm import scoped_session, sessionmaker
+
+engine = create_engine('sqlite:////tmp/test.db')
+metadata = MetaData()
+db_session = scoped_session(sessionmaker(autocommit=False,
+                                         autoflush=False,
+                                         bind=engine))
+def init_db():
+    metadata.create_all(bind=engine)
+
+
+

As in the declarative approach, you need to close the session after +each request or application context shutdown. Put this into your +application module:

+
from yourapplication.database import db_session
+
+@app.teardown_appcontext
+def shutdown_session(exception=None):
+    db_session.remove()
+
+
+

Here is an example table and model (put this into models.py):

+
from sqlalchemy import Table, Column, Integer, String
+from sqlalchemy.orm import mapper
+from yourapplication.database import metadata, db_session
+
+class User(object):
+    query = db_session.query_property()
+
+    def __init__(self, name=None, email=None):
+        self.name = name
+        self.email = email
+
+    def __repr__(self):
+        return f'<User {self.name!r}>'
+
+users = Table('users', metadata,
+    Column('id', Integer, primary_key=True),
+    Column('name', String(50), unique=True),
+    Column('email', String(120), unique=True)
+)
+mapper(User, users)
+
+
+

Querying and inserting works exactly the same as in the example above.

+
+
+

SQL Abstraction Layer

+

If you just want to use the database system (and SQL) abstraction layer +you basically only need the engine:

+
from sqlalchemy import create_engine, MetaData, Table
+
+engine = create_engine('sqlite:////tmp/test.db')
+metadata = MetaData(bind=engine)
+
+
+

Then you can either declare the tables in your code like in the examples +above, or automatically load them:

+
from sqlalchemy import Table
+
+users = Table('users', metadata, autoload=True)
+
+
+

To insert data you can use the insert method. We have to get a +connection first so that we can use a transaction:

+
>>> con = engine.connect()
+>>> con.execute(users.insert(), name='admin', email='admin@localhost')
+
+
+

SQLAlchemy will automatically commit for us.

+

To query your database, you use the engine directly or use a connection:

+
>>> users.select(users.c.id == 1).execute().first()
+(1, 'admin', 'admin@localhost')
+
+
+

These results are also dict-like tuples:

+
>>> r = users.select(users.c.id == 1).execute().first()
+>>> r['name']
+'admin'
+
+
+

You can also pass strings of SQL statements to the +execute() method:

+
>>> engine.execute('select * from users where id = :1', [1]).first()
+(1, 'admin', 'admin@localhost')
+
+
+

For more information about SQLAlchemy, head over to the +website.

+
+
+ + +
+
+
+
+ + +
+
+ + + diff --git a/_build/patterns/sqlite3/index.html b/_build/patterns/sqlite3/index.html new file mode 100644 index 00000000..148cdb90 --- /dev/null +++ b/_build/patterns/sqlite3/index.html @@ -0,0 +1,244 @@ + + + + + + + + Using SQLite 3 with Flask — Flask Documentation (3.1.x) + + + + + + + + + + + + + + +
+
+
+
+ +
+

Using SQLite 3 with Flask

+

In Flask you can easily implement the opening of database connections on +demand and closing them when the context dies (usually at the end of the +request).

+

Here is a simple example of how you can use SQLite 3 with Flask:

+
import sqlite3
+from flask import g
+
+DATABASE = '/path/to/database.db'
+
+def get_db():
+    db = getattr(g, '_database', None)
+    if db is None:
+        db = g._database = sqlite3.connect(DATABASE)
+    return db
+
+@app.teardown_appcontext
+def close_connection(exception):
+    db = getattr(g, '_database', None)
+    if db is not None:
+        db.close()
+
+
+

Now, to use the database, the application must either have an active +application context (which is always true if there is a request in flight) +or create an application context itself. At that point the get_db +function can be used to get the current database connection. Whenever the +context is destroyed the database connection will be terminated.

+

Example:

+
@app.route('/')
+def index():
+    cur = get_db().cursor()
+    ...
+
+
+
+

Note

+

Please keep in mind that the teardown request and appcontext functions +are always executed, even if a before-request handler failed or was +never executed. Because of this we have to make sure here that the +database is there before we close it.

+
+
+

Connect on Demand

+

The upside of this approach (connecting on first use) is that this will +only open the connection if truly necessary. If you want to use this +code outside a request context you can use it in a Python shell by opening +the application context by hand:

+
with app.app_context():
+    # now you can use get_db()
+
+
+
+
+

Easy Querying

+

Now in each request handling function you can access get_db() to get the +current open database connection. To simplify working with SQLite, a +row factory function is useful. It is executed for every result returned +from the database to convert the result. For instance, in order to get +dictionaries instead of tuples, this could be inserted into the get_db +function we created above:

+
def make_dicts(cursor, row):
+    return dict((cursor.description[idx][0], value)
+                for idx, value in enumerate(row))
+
+db.row_factory = make_dicts
+
+
+

This will make the sqlite3 module return dicts for this database connection, which are much nicer to deal with. Even more simply, we could place this in get_db instead:

+
db.row_factory = sqlite3.Row
+
+
+

This would use Row objects rather than dicts to return the results of queries. These are namedtuple s, so we can access them either by index or by key. For example, assuming we have a sqlite3.Row called r for the rows id, FirstName, LastName, and MiddleInitial:

+
>>> # You can get values based on the row's name
+>>> r['FirstName']
+John
+>>> # Or, you can get them based on index
+>>> r[1]
+John
+# Row objects are also iterable:
+>>> for value in r:
+...     print(value)
+1
+John
+Doe
+M
+
+
+

Additionally, it is a good idea to provide a query function that combines +getting the cursor, executing and fetching the results:

+
def query_db(query, args=(), one=False):
+    cur = get_db().execute(query, args)
+    rv = cur.fetchall()
+    cur.close()
+    return (rv[0] if rv else None) if one else rv
+
+
+

This handy little function, in combination with a row factory, makes +working with the database much more pleasant than it is by just using the +raw cursor and connection objects.

+

Here is how you can use it:

+
for user in query_db('select * from users'):
+    print(user['username'], 'has the id', user['user_id'])
+
+
+

Or if you just want a single result:

+
user = query_db('select * from users where username = ?',
+                [the_username], one=True)
+if user is None:
+    print('No such user')
+else:
+    print(the_username, 'has the id', user['user_id'])
+
+
+

To pass variable parts to the SQL statement, use a question mark in the +statement and pass in the arguments as a list. Never directly add them to +the SQL statement with string formatting because this makes it possible +to attack the application using SQL Injections.

+
+
+

Initial Schemas

+

Relational databases need schemas, so applications often ship a +schema.sql file that creates the database. It’s a good idea to provide +a function that creates the database based on that schema. This function +can do that for you:

+
def init_db():
+    with app.app_context():
+        db = get_db()
+        with app.open_resource('schema.sql', mode='r') as f:
+            db.cursor().executescript(f.read())
+        db.commit()
+
+
+

You can then create such a database from the Python shell:

+
>>> from yourapplication import init_db
+>>> init_db()
+
+
+
+
+ + +
+
+
+
+ + +
+
+ + + diff --git a/_build/patterns/streaming/index.html b/_build/patterns/streaming/index.html new file mode 100644 index 00000000..758eb5c0 --- /dev/null +++ b/_build/patterns/streaming/index.html @@ -0,0 +1,176 @@ + + + + + + + + Streaming Contents — Flask Documentation (3.1.x) + + + + + + + + + + + + + + +
+
+
+
+ +
+

Streaming Contents

+

Sometimes you want to send an enormous amount of data to the client, much +more than you want to keep in memory. When you are generating the data on +the fly though, how do you send that back to the client without the +roundtrip to the filesystem?

+

The answer is by using generators and direct responses.

+
+

Basic Usage

+

This is a basic view function that generates a lot of CSV data on the fly. +The trick is to have an inner function that uses a generator to generate +data and to then invoke that function and pass it to a response object:

+
@app.route('/large.csv')
+def generate_large_csv():
+    def generate():
+        for row in iter_all_rows():
+            yield f"{','.join(row)}\n"
+    return generate(), {"Content-Type": "text/csv"}
+
+
+

Each yield expression is directly sent to the browser. Note though +that some WSGI middlewares might break streaming, so be careful there in +debug environments with profilers and other things you might have enabled.

+
+
+

Streaming from Templates

+

The Jinja2 template engine supports rendering a template piece by +piece, returning an iterator of strings. Flask provides the +stream_template() and stream_template_string() +functions to make this easier to use.

+
from flask import stream_template
+
+@app.get("/timeline")
+def timeline():
+    return stream_template("timeline.html")
+
+
+

The parts yielded by the render stream tend to match statement blocks in +the template.

+
+
+

Streaming with Context

+

The request will not be active while the generator is +running, because the view has already returned at that point. If you try +to access request, you’ll get a RuntimeError.

+

If your generator function relies on data in request, use the +stream_with_context() wrapper. This will keep the request +context active during the generator.

+
from flask import stream_with_context, request
+from markupsafe import escape
+
+@app.route('/stream')
+def streamed_response():
+    def generate():
+        yield '<p>Hello '
+        yield escape(request.args['name'])
+        yield '!</p>'
+    return stream_with_context(generate())
+
+
+

It can also be used as a decorator.

+
@stream_with_context
+def generate():
+    ...
+
+return generate()
+
+
+

The stream_template() and +stream_template_string() functions automatically +use stream_with_context() if a request is active.

+
+
+ + +
+
+
+
+ + +
+
+ + + diff --git a/_build/patterns/subclassing/index.html b/_build/patterns/subclassing/index.html new file mode 100644 index 00000000..7963daff --- /dev/null +++ b/_build/patterns/subclassing/index.html @@ -0,0 +1,109 @@ + + + + + + + + Subclassing Flask — Flask Documentation (3.1.x) + + + + + + + + + + + + + + +
+
+
+
+ +
+

Subclassing Flask

+

The Flask class is designed for subclassing.

+

For example, you may want to override how request parameters are handled to preserve their order:

+
from flask import Flask, Request
+from werkzeug.datastructures import ImmutableOrderedMultiDict
+class MyRequest(Request):
+    """Request subclass to override request parameter storage"""
+    parameter_storage_class = ImmutableOrderedMultiDict
+class MyFlask(Flask):
+    """Flask subclass using the custom request class"""
+    request_class = MyRequest
+
+
+

This is the recommended approach for overriding or augmenting Flask’s internal functionality.

+
+ + +
+
+
+
+ + +
+
+ + + diff --git a/_build/patterns/templateinheritance/index.html b/_build/patterns/templateinheritance/index.html new file mode 100644 index 00000000..fc48f9e4 --- /dev/null +++ b/_build/patterns/templateinheritance/index.html @@ -0,0 +1,162 @@ + + + + + + + + Template Inheritance — Flask Documentation (3.1.x) + + + + + + + + + + + + + + +
+
+
+
+ +
+

Template Inheritance

+

The most powerful part of Jinja is template inheritance. Template inheritance +allows you to build a base “skeleton” template that contains all the common +elements of your site and defines blocks that child templates can override.

+

Sounds complicated but is very basic. It’s easiest to understand it by starting +with an example.

+
+

Base Template

+

This template, which we’ll call layout.html, defines a simple HTML skeleton +document that you might use for a simple two-column page. It’s the job of +“child” templates to fill the empty blocks with content:

+
<!doctype html>
+<html>
+  <head>
+    {% block head %}
+    <link rel="stylesheet" href="{{ url_for('static', filename='style.css') }}">
+    <title>{% block title %}{% endblock %} - My Webpage</title>
+    {% endblock %}
+  </head>
+  <body>
+    <div id="content">{% block content %}{% endblock %}</div>
+    <div id="footer">
+      {% block footer %}
+      &copy; Copyright 2010 by <a href="http://domain.invalid/">you</a>.
+      {% endblock %}
+    </div>
+  </body>
+</html>
+
+
+

In this example, the {% block %} tags define four blocks that child templates +can fill in. All the block tag does is tell the template engine that a +child template may override those portions of the template.

+
+
+

Child Template

+

A child template might look like this:

+
{% extends "layout.html" %}
+{% block title %}Index{% endblock %}
+{% block head %}
+  {{ super() }}
+  <style type="text/css">
+    .important { color: #336699; }
+  </style>
+{% endblock %}
+{% block content %}
+  <h1>Index</h1>
+  <p class="important">
+    Welcome on my awesome homepage.
+{% endblock %}
+
+
+

The {% extends %} tag is the key here. It tells the template engine that +this template “extends” another template. When the template system evaluates +this template, first it locates the parent. The extends tag must be the +first tag in the template. To render the contents of a block defined in +the parent template, use {{ super() }}.

+
+
+ + +
+
+
+
+ + +
+
+ + + diff --git a/_build/patterns/urlprocessors/index.html b/_build/patterns/urlprocessors/index.html new file mode 100644 index 00000000..ada40a8a --- /dev/null +++ b/_build/patterns/urlprocessors/index.html @@ -0,0 +1,227 @@ + + + + + + + + Using URL Processors — Flask Documentation (3.1.x) + + + + + + + + + + + + + + +
+
+
+
+ +
+

Using URL Processors

+
+Changelog
+

Added in version 0.7.

+
+

Flask 0.7 introduces the concept of URL processors. The idea is that you +might have a bunch of resources with common parts in the URL that you +don’t always explicitly want to provide. For instance you might have a +bunch of URLs that have the language code in it but you don’t want to have +to handle it in every single function yourself.

+

URL processors are especially helpful when combined with blueprints. We +will handle both application specific URL processors here as well as +blueprint specifics.

+
+

Internationalized Application URLs

+

Consider an application like this:

+
from flask import Flask, g
+
+app = Flask(__name__)
+
+@app.route('/<lang_code>/')
+def index(lang_code):
+    g.lang_code = lang_code
+    ...
+
+@app.route('/<lang_code>/about')
+def about(lang_code):
+    g.lang_code = lang_code
+    ...
+
+
+

This is an awful lot of repetition as you have to handle the language code +setting on the g object yourself in every single function. +Sure, a decorator could be used to simplify this, but if you want to +generate URLs from one function to another you would have to still provide +the language code explicitly which can be annoying.

+

For the latter, this is where url_defaults() functions +come in. They can automatically inject values into a call to +url_for(). The code below checks if the +language code is not yet in the dictionary of URL values and if the +endpoint wants a value named 'lang_code':

+
@app.url_defaults
+def add_language_code(endpoint, values):
+    if 'lang_code' in values or not g.lang_code:
+        return
+    if app.url_map.is_endpoint_expecting(endpoint, 'lang_code'):
+        values['lang_code'] = g.lang_code
+
+
+

The method is_endpoint_expecting() of the URL +map can be used to figure out if it would make sense to provide a language +code for the given endpoint.

+

The reverse of that function are +url_value_preprocessor()s. They are executed right +after the request was matched and can execute code based on the URL +values. The idea is that they pull information out of the values +dictionary and put it somewhere else:

+
@app.url_value_preprocessor
+def pull_lang_code(endpoint, values):
+    g.lang_code = values.pop('lang_code', None)
+
+
+

That way you no longer have to do the lang_code assignment to +g in every function. You can further improve that by +writing your own decorator that prefixes URLs with the language code, but +the more beautiful solution is using a blueprint. Once the +'lang_code' is popped from the values dictionary and it will no longer +be forwarded to the view function reducing the code to this:

+
from flask import Flask, g
+
+app = Flask(__name__)
+
+@app.url_defaults
+def add_language_code(endpoint, values):
+    if 'lang_code' in values or not g.lang_code:
+        return
+    if app.url_map.is_endpoint_expecting(endpoint, 'lang_code'):
+        values['lang_code'] = g.lang_code
+
+@app.url_value_preprocessor
+def pull_lang_code(endpoint, values):
+    g.lang_code = values.pop('lang_code', None)
+
+@app.route('/<lang_code>/')
+def index():
+    ...
+
+@app.route('/<lang_code>/about')
+def about():
+    ...
+
+
+
+
+

Internationalized Blueprint URLs

+

Because blueprints can automatically prefix all URLs with a common string +it’s easy to automatically do that for every function. Furthermore +blueprints can have per-blueprint URL processors which removes a whole lot +of logic from the url_defaults() function because it no +longer has to check if the URL is really interested in a 'lang_code' +parameter:

+
from flask import Blueprint, g
+
+bp = Blueprint('frontend', __name__, url_prefix='/<lang_code>')
+
+@bp.url_defaults
+def add_language_code(endpoint, values):
+    values.setdefault('lang_code', g.lang_code)
+
+@bp.url_value_preprocessor
+def pull_lang_code(endpoint, values):
+    g.lang_code = values.pop('lang_code')
+
+@bp.route('/')
+def index():
+    ...
+
+@bp.route('/about')
+def about():
+    ...
+
+
+
+
+ + +
+
+
+
+ + +
+
+ + + diff --git a/_build/patterns/viewdecorators/index.html b/_build/patterns/viewdecorators/index.html new file mode 100644 index 00000000..d1664250 --- /dev/null +++ b/_build/patterns/viewdecorators/index.html @@ -0,0 +1,269 @@ + + + + + + + + View Decorators — Flask Documentation (3.1.x) + + + + + + + + + + + + + + +
+
+
+
+ +
+

View Decorators

+

Python has a really interesting feature called function decorators. This +allows some really neat things for web applications. Because each view in +Flask is a function, decorators can be used to inject additional +functionality to one or more functions. The route() +decorator is the one you probably used already. But there are use cases +for implementing your own decorator. For instance, imagine you have a +view that should only be used by people that are logged in. If a user +goes to the site and is not logged in, they should be redirected to the +login page. This is a good example of a use case where a decorator is an +excellent solution.

+
+

Login Required Decorator

+

So let’s implement such a decorator. A decorator is a function that +wraps and replaces another function. Since the original function is +replaced, you need to remember to copy the original function’s information +to the new function. Use functools.wraps() to handle this for you.

+

This example assumes that the login page is called 'login' and that +the current user is stored in g.user and is None if there is no-one +logged in.

+
from functools import wraps
+from flask import g, request, redirect, url_for
+
+def login_required(f):
+    @wraps(f)
+    def decorated_function(*args, **kwargs):
+        if g.user is None:
+            return redirect(url_for('login', next=request.url))
+        return f(*args, **kwargs)
+    return decorated_function
+
+
+

To use the decorator, apply it as innermost decorator to a view function. +When applying further decorators, always remember +that the route() decorator is the outermost.

+
@app.route('/secret_page')
+@login_required
+def secret_page():
+    pass
+
+
+
+

Note

+

The next value will exist in request.args after a GET request for +the login page. You’ll have to pass it along when sending the POST request +from the login form. You can do this with a hidden input tag, then retrieve it +from request.form when logging the user in.

+
<input type="hidden" value="{{ request.args.get('next', '') }}"/>
+
+
+
+
+
+

Caching Decorator

+

Imagine you have a view function that does an expensive calculation and +because of that you would like to cache the generated results for a +certain amount of time. A decorator would be nice for that. We’re +assuming you have set up a cache like mentioned in Caching.

+

Here is an example cache function. It generates the cache key from a +specific prefix (actually a format string) and the current path of the +request. Notice that we are using a function that first creates the +decorator that then decorates the function. Sounds awful? Unfortunately +it is a little bit more complex, but the code should still be +straightforward to read.

+

The decorated function will then work as follows

+
    +
  1. get the unique cache key for the current request based on the current +path.

  2. +
  3. get the value for that key from the cache. If the cache returned +something we will return that value.

  4. +
  5. otherwise the original function is called and the return value is +stored in the cache for the timeout provided (by default 5 minutes).

  6. +
+

Here the code:

+
from functools import wraps
+from flask import request
+
+def cached(timeout=5 * 60, key='view/{}'):
+    def decorator(f):
+        @wraps(f)
+        def decorated_function(*args, **kwargs):
+            cache_key = key.format(request.path)
+            rv = cache.get(cache_key)
+            if rv is not None:
+                return rv
+            rv = f(*args, **kwargs)
+            cache.set(cache_key, rv, timeout=timeout)
+            return rv
+        return decorated_function
+    return decorator
+
+
+

Notice that this assumes an instantiated cache object is available, see +Caching.

+
+
+

Templating Decorator

+

A common pattern invented by the TurboGears guys a while back is a +templating decorator. The idea of that decorator is that you return a +dictionary with the values passed to the template from the view function +and the template is automatically rendered. With that, the following +three examples do exactly the same:

+
@app.route('/')
+def index():
+    return render_template('index.html', value=42)
+
+@app.route('/')
+@templated('index.html')
+def index():
+    return dict(value=42)
+
+@app.route('/')
+@templated()
+def index():
+    return dict(value=42)
+
+
+

As you can see, if no template name is provided it will use the endpoint +of the URL map with dots converted to slashes + '.html'. Otherwise +the provided template name is used. When the decorated function returns, +the dictionary returned is passed to the template rendering function. If +None is returned, an empty dictionary is assumed, if something else than +a dictionary is returned we return it from the function unchanged. That +way you can still use the redirect function or return simple strings.

+

Here is the code for that decorator:

+
from functools import wraps
+from flask import request, render_template
+
+def templated(template=None):
+    def decorator(f):
+        @wraps(f)
+        def decorated_function(*args, **kwargs):
+            template_name = template
+            if template_name is None:
+                template_name = f"{request.endpoint.replace('.', '/')}.html"
+            ctx = f(*args, **kwargs)
+            if ctx is None:
+                ctx = {}
+            elif not isinstance(ctx, dict):
+                return ctx
+            return render_template(template_name, **ctx)
+        return decorated_function
+    return decorator
+
+
+
+
+

Endpoint Decorator

+

When you want to use the werkzeug routing system for more flexibility you +need to map the endpoint as defined in the Rule +to a view function. This is possible with this decorator. For example:

+
from flask import Flask
+from werkzeug.routing import Rule
+
+app = Flask(__name__)
+app.url_map.add(Rule('/', endpoint='index'))
+
+@app.endpoint('index')
+def my_index():
+    return "Hello world"
+
+
+
+
+ + +
+
+
+
+ + +
+
+ + + diff --git a/_build/patterns/wtforms/index.html b/_build/patterns/wtforms/index.html new file mode 100644 index 00000000..c167eb20 --- /dev/null +++ b/_build/patterns/wtforms/index.html @@ -0,0 +1,214 @@ + + + + + + + + Form Validation with WTForms — Flask Documentation (3.1.x) + + + + + + + + + + + + + + +
+
+
+
+ +
+

Form Validation with WTForms

+

When you have to work with form data submitted by a browser view, code +quickly becomes very hard to read. There are libraries out there designed +to make this process easier to manage. One of them is WTForms which we +will handle here. If you find yourself in the situation of having many +forms, you might want to give it a try.

+

When you are working with WTForms you have to define your forms as classes +first. I recommend breaking up the application into multiple modules +(Large Applications as Packages) for that and adding a separate module for the +forms.

+
+

Getting the most out of WTForms with an Extension

+

The Flask-WTF extension expands on this pattern and adds a +few little helpers that make working with forms and Flask more +fun. You can get it from PyPI.

+
+
+

The Forms

+

This is an example form for a typical registration page:

+
from wtforms import Form, BooleanField, StringField, PasswordField, validators
+
+class RegistrationForm(Form):
+    username = StringField('Username', [validators.Length(min=4, max=25)])
+    email = StringField('Email Address', [validators.Length(min=6, max=35)])
+    password = PasswordField('New Password', [
+        validators.DataRequired(),
+        validators.EqualTo('confirm', message='Passwords must match')
+    ])
+    confirm = PasswordField('Repeat Password')
+    accept_tos = BooleanField('I accept the TOS', [validators.DataRequired()])
+
+
+
+
+

In the View

+

In the view function, the usage of this form looks like this:

+
@app.route('/register', methods=['GET', 'POST'])
+def register():
+    form = RegistrationForm(request.form)
+    if request.method == 'POST' and form.validate():
+        user = User(form.username.data, form.email.data,
+                    form.password.data)
+        db_session.add(user)
+        flash('Thanks for registering')
+        return redirect(url_for('login'))
+    return render_template('register.html', form=form)
+
+
+

Notice we’re implying that the view is using SQLAlchemy here +(SQLAlchemy in Flask), but that’s not a requirement, of course. Adapt +the code as necessary.

+

Things to remember:

+
    +
  1. create the form from the request form value if +the data is submitted via the HTTP POST method and +args if the data is submitted as GET.

  2. +
  3. to validate the data, call the validate() +method, which will return True if the data validates, False +otherwise.

  4. +
  5. to access individual values from the form, access form.<NAME>.data.

  6. +
+
+
+

Forms in Templates

+

Now to the template side. When you pass the form to the templates, you can +easily render them there. Look at the following example template to see +how easy this is. WTForms does half the form generation for us already. +To make it even nicer, we can write a macro that renders a field with +label and a list of errors if there are any.

+

Here’s an example _formhelpers.html template with such a macro:

+
{% macro render_field(field) %}
+  <dt>{{ field.label }}
+  <dd>{{ field(**kwargs)|safe }}
+  {% if field.errors %}
+    <ul class=errors>
+    {% for error in field.errors %}
+      <li>{{ error }}</li>
+    {% endfor %}
+    </ul>
+  {% endif %}
+  </dd>
+{% endmacro %}
+
+
+

This macro accepts a couple of keyword arguments that are forwarded to +WTForm’s field function, which renders the field for us. The keyword +arguments will be inserted as HTML attributes. So, for example, you can +call render_field(form.username, class='username') to add a class to +the input element. Note that WTForms returns standard Python strings, +so we have to tell Jinja2 that this data is already HTML-escaped with +the |safe filter.

+

Here is the register.html template for the function we used above, which +takes advantage of the _formhelpers.html template:

+
{% from "_formhelpers.html" import render_field %}
+<form method=post>
+  <dl>
+    {{ render_field(form.username) }}
+    {{ render_field(form.email) }}
+    {{ render_field(form.password) }}
+    {{ render_field(form.confirm) }}
+    {{ render_field(form.accept_tos) }}
+  </dl>
+  <p><input type=submit value=Register>
+</form>
+
+
+

For more information about WTForms, head over to the WTForms +website.

+
+
+ + +
+
+
+
+ + +
+
+ + + diff --git a/_build/py-modindex/index.html b/_build/py-modindex/index.html new file mode 100644 index 00000000..2cc2d0bb --- /dev/null +++ b/_build/py-modindex/index.html @@ -0,0 +1,109 @@ + + + + + + + + Python Module Index — Flask Documentation (3.1.x) + + + + + + + + + + + + + + + +
+
+
+
+ + +

Python Module Index

+ +
+ f +
+ + + + + + + + + + + + + +
 
+ f
+ flask +
    + flask.json +
    + flask.json.tag +
+ + +
+
+
+
+ + +
+
+ + + diff --git a/_build/quickstart/index.html b/_build/quickstart/index.html new file mode 100644 index 00000000..5e4d5cd0 --- /dev/null +++ b/_build/quickstart/index.html @@ -0,0 +1,940 @@ + + + + + + + + Quickstart — Flask Documentation (3.1.x) + + + + + + + + + + + + + + +
+
+
+
+ +
+

Quickstart

+

Eager to get started? This page gives a good introduction to Flask. +Follow Installation to set up a project and install Flask first.

+
+

A Minimal Application

+

A minimal Flask application looks something like this:

+
from flask import Flask
+
+app = Flask(__name__)
+
+@app.route("/")
+def hello_world():
+    return "<p>Hello, World!</p>"
+
+
+

So what did that code do?

+
    +
  1. First we imported the Flask class. An instance of +this class will be our WSGI application.

  2. +
  3. Next we create an instance of this class. The first argument is the +name of the application’s module or package. __name__ is a +convenient shortcut for this that is appropriate for most cases. +This is needed so that Flask knows where to look for resources such +as templates and static files.

  4. +
  5. We then use the route() decorator to tell Flask +what URL should trigger our function.

  6. +
  7. The function returns the message we want to display in the user’s +browser. The default content type is HTML, so HTML in the string +will be rendered by the browser.

  8. +
+

Save it as hello.py or something similar. Make sure to not call +your application flask.py because this would conflict with Flask +itself.

+

To run the application, use the flask command or +python -m flask. You need to tell the Flask where your application +is with the --app option.

+
$ flask --app hello run
+ * Serving Flask app 'hello'
+ * Running on http://127.0.0.1:5000 (Press CTRL+C to quit)
+
+
+
+

Application Discovery Behavior

+

As a shortcut, if the file is named app.py or wsgi.py, you +don’t have to use --app. See Command Line Interface for more details.

+
+

This launches a very simple builtin server, which is good enough for +testing but probably not what you want to use in production. For +deployment options see Deploying to Production.

+

Now head over to http://127.0.0.1:5000/, and you should see your hello +world greeting.

+

If another program is already using port 5000, you’ll see +OSError: [Errno 98] or OSError: [WinError 10013] when the +server tries to start. See Address already in use for how to +handle that.

+
+

Externally Visible Server

+

If you run the server you will notice that the server is only accessible +from your own computer, not from any other in the network. This is the +default because in debugging mode a user of the application can execute +arbitrary Python code on your computer.

+

If you have the debugger disabled or trust the users on your network, +you can make the server publicly available simply by adding +--host=0.0.0.0 to the command line:

+
$ flask run --host=0.0.0.0
+
+
+

This tells your operating system to listen on all public IPs.

+
+
+
+

Debug Mode

+

The flask run command can do more than just start the development +server. By enabling debug mode, the server will automatically reload if +code changes, and will show an interactive debugger in the browser if an +error occurs during a request.

+The interactive debugger in action. +
+

Warning

+

The debugger allows executing arbitrary Python code from the +browser. It is protected by a pin, but still represents a major +security risk. Do not run the development server or debugger in a +production environment.

+
+

To enable debug mode, use the --debug option.

+
$ flask --app hello run --debug
+ * Serving Flask app 'hello'
+ * Debug mode: on
+ * Running on http://127.0.0.1:5000 (Press CTRL+C to quit)
+ * Restarting with stat
+ * Debugger is active!
+ * Debugger PIN: nnn-nnn-nnn
+
+
+

See also:

+ +
+
+

HTML Escaping

+

When returning HTML (the default response type in Flask), any +user-provided values rendered in the output must be escaped to protect +from injection attacks. HTML templates rendered with Jinja, introduced +later, will do this automatically.

+

escape(), shown here, can be used manually. It is +omitted in most examples for brevity, but you should always be aware of +how you’re using untrusted data.

+
from markupsafe import escape
+
+@app.route("/<name>")
+def hello(name):
+    return f"Hello, {escape(name)}!"
+
+
+

If a user managed to submit the name <script>alert("bad")</script>, +escaping causes it to be rendered as text, rather than running the +script in the user’s browser.

+

<name> in the route captures a value from the URL and passes it to +the view function. These variable rules are explained below.

+
+
+

Routing

+

Modern web applications use meaningful URLs to help users. Users are more +likely to like a page and come back if the page uses a meaningful URL they can +remember and use to directly visit a page.

+

Use the route() decorator to bind a function to a URL.

+
@app.route('/')
+def index():
+    return 'Index Page'
+
+@app.route('/hello')
+def hello():
+    return 'Hello, World'
+
+
+

You can do more! You can make parts of the URL dynamic and attach multiple +rules to a function.

+
+

Variable Rules

+

You can add variable sections to a URL by marking sections with +<variable_name>. Your function then receives the <variable_name> +as a keyword argument. Optionally, you can use a converter to specify the type +of the argument like <converter:variable_name>.

+
from markupsafe import escape
+
+@app.route('/user/<username>')
+def show_user_profile(username):
+    # show the user profile for that user
+    return f'User {escape(username)}'
+
+@app.route('/post/<int:post_id>')
+def show_post(post_id):
+    # show the post with the given id, the id is an integer
+    return f'Post {post_id}'
+
+@app.route('/path/<path:subpath>')
+def show_subpath(subpath):
+    # show the subpath after /path/
+    return f'Subpath {escape(subpath)}'
+
+
+

Converter types:

+ + + + + + + + + + + + + + + + + + +

string

(default) accepts any text without a slash

int

accepts positive integers

float

accepts positive floating point values

path

like string but also accepts slashes

uuid

accepts UUID strings

+
+
+

Unique URLs / Redirection Behavior

+

The following two rules differ in their use of a trailing slash.

+
@app.route('/projects/')
+def projects():
+    return 'The project page'
+
+@app.route('/about')
+def about():
+    return 'The about page'
+
+
+

The canonical URL for the projects endpoint has a trailing slash. +It’s similar to a folder in a file system. If you access the URL without +a trailing slash (/projects), Flask redirects you to the canonical URL +with the trailing slash (/projects/).

+

The canonical URL for the about endpoint does not have a trailing +slash. It’s similar to the pathname of a file. Accessing the URL with a +trailing slash (/about/) produces a 404 “Not Found” error. This helps +keep URLs unique for these resources, which helps search engines avoid +indexing the same page twice.

+
+
+

URL Building

+

To build a URL to a specific function, use the url_for() function. +It accepts the name of the function as its first argument and any number of +keyword arguments, each corresponding to a variable part of the URL rule. +Unknown variable parts are appended to the URL as query parameters.

+

Why would you want to build URLs using the URL reversing function +url_for() instead of hard-coding them into your templates?

+
    +
  1. Reversing is often more descriptive than hard-coding the URLs.

  2. +
  3. You can change your URLs in one go instead of needing to remember to +manually change hard-coded URLs.

  4. +
  5. URL building handles escaping of special characters transparently.

  6. +
  7. The generated paths are always absolute, avoiding unexpected behavior +of relative paths in browsers.

  8. +
  9. If your application is placed outside the URL root, for example, in +/myapplication instead of /, url_for() properly +handles that for you.

  10. +
+

For example, here we use the test_request_context() method +to try out url_for(). test_request_context() +tells Flask to behave as though it’s handling a request even while we use a +Python shell. See Context Locals.

+
from flask import url_for
+
+@app.route('/')
+def index():
+    return 'index'
+
+@app.route('/login')
+def login():
+    return 'login'
+
+@app.route('/user/<username>')
+def profile(username):
+    return f'{username}\'s profile'
+
+with app.test_request_context():
+    print(url_for('index'))
+    print(url_for('login'))
+    print(url_for('login', next='/'))
+    print(url_for('profile', username='John Doe'))
+
+
+
/
+/login
+/login?next=/
+/user/John%20Doe
+
+
+
+
+

HTTP Methods

+

Web applications use different HTTP methods when accessing URLs. You should +familiarize yourself with the HTTP methods as you work with Flask. By default, +a route only answers to GET requests. You can use the methods argument +of the route() decorator to handle different HTTP methods.

+
from flask import request
+
+@app.route('/login', methods=['GET', 'POST'])
+def login():
+    if request.method == 'POST':
+        return do_the_login()
+    else:
+        return show_the_login_form()
+
+
+

The example above keeps all methods for the route within one function, +which can be useful if each part uses some common data.

+

You can also separate views for different methods into different +functions. Flask provides a shortcut for decorating such routes with +get(), post(), etc. for each +common HTTP method.

+
@app.get('/login')
+def login_get():
+    return show_the_login_form()
+
+@app.post('/login')
+def login_post():
+    return do_the_login()
+
+
+

If GET is present, Flask automatically adds support for the HEAD method +and handles HEAD requests according to the HTTP RFC. Likewise, +OPTIONS is automatically implemented for you.

+
+
+
+

Static Files

+

Dynamic web applications also need static files. That’s usually where +the CSS and JavaScript files are coming from. Ideally your web server is +configured to serve them for you, but during development Flask can do that +as well. Just create a folder called static in your package or next to +your module and it will be available at /static on the application.

+

To generate URLs for static files, use the special 'static' endpoint name:

+
url_for('static', filename='style.css')
+
+
+

The file has to be stored on the filesystem as static/style.css.

+
+
+

Rendering Templates

+

Generating HTML from within Python is not fun, and actually pretty +cumbersome because you have to do the HTML escaping on your own to keep +the application secure. Because of that Flask configures the Jinja2 template engine for you automatically.

+

Templates can be used to generate any type of text file. For web applications, you’ll +primarily be generating HTML pages, but you can also generate markdown, plain text for +emails, and anything else.

+

For a reference to HTML, CSS, and other web APIs, use the MDN Web Docs.

+

To render a template you can use the render_template() +method. All you have to do is provide the name of the template and the +variables you want to pass to the template engine as keyword arguments. +Here’s a simple example of how to render a template:

+
from flask import render_template
+
+@app.route('/hello/')
+@app.route('/hello/<name>')
+def hello(name=None):
+    return render_template('hello.html', person=name)
+
+
+

Flask will look for templates in the templates folder. So if your +application is a module, this folder is next to that module, if it’s a +package it’s actually inside your package:

+

Case 1: a module:

+
/application.py
+/templates
+    /hello.html
+
+
+

Case 2: a package:

+
/application
+    /__init__.py
+    /templates
+        /hello.html
+
+
+

For templates you can use the full power of Jinja2 templates. Head over +to the official Jinja2 Template Documentation for more information.

+

Here is an example template:

+
<!doctype html>
+<title>Hello from Flask</title>
+{% if person %}
+  <h1>Hello {{ person }}!</h1>
+{% else %}
+  <h1>Hello, World!</h1>
+{% endif %}
+
+
+

Inside templates you also have access to the config, +request, session and g [1] objects +as well as the url_for() and get_flashed_messages() functions.

+

Templates are especially useful if inheritance is used. If you want to +know how that works, see Template Inheritance. Basically +template inheritance makes it possible to keep certain elements on each +page (like header, navigation and footer).

+

Automatic escaping is enabled, so if person contains HTML it will be escaped +automatically. If you can trust a variable and you know that it will be +safe HTML (for example because it came from a module that converts wiki +markup to HTML) you can mark it as safe by using the +Markup class or by using the |safe filter in the +template. Head over to the Jinja 2 documentation for more examples.

+

Here is a basic introduction to how the Markup class works:

+
>>> from markupsafe import Markup
+>>> Markup('<strong>Hello %s!</strong>') % '<blink>hacker</blink>'
+Markup('<strong>Hello &lt;blink&gt;hacker&lt;/blink&gt;!</strong>')
+>>> Markup.escape('<blink>hacker</blink>')
+Markup('&lt;blink&gt;hacker&lt;/blink&gt;')
+>>> Markup('<em>Marked up</em> &raquo; HTML').striptags()
+'Marked up » HTML'
+
+
+
+Changelog
+

Changed in version 0.5: Autoescaping is no longer enabled for all templates. The following +extensions for templates trigger autoescaping: .html, .htm, +.xml, .xhtml. Templates loaded from a string will have +autoescaping disabled.

+
+
+
+
+

Accessing Request Data

+

For web applications it’s crucial to react to the data a client sends to +the server. In Flask this information is provided by the global +request object. If you have some experience with Python +you might be wondering how that object can be global and how Flask +manages to still be threadsafe. The answer is context locals:

+
+

Context Locals

+
+

Insider Information

+

If you want to understand how that works and how you can implement +tests with context locals, read this section, otherwise just skip it.

+
+

Certain objects in Flask are global objects, but not of the usual kind. +These objects are actually proxies to objects that are local to a specific +context. What a mouthful. But that is actually quite easy to understand.

+

Imagine the context being the handling thread. A request comes in and the +web server decides to spawn a new thread (or something else, the +underlying object is capable of dealing with concurrency systems other +than threads). When Flask starts its internal request handling it +figures out that the current thread is the active context and binds the +current application and the WSGI environments to that context (thread). +It does that in an intelligent way so that one application can invoke another +application without breaking.

+

So what does this mean to you? Basically you can completely ignore that +this is the case unless you are doing something like unit testing. You +will notice that code which depends on a request object will suddenly break +because there is no request object. The solution is creating a request +object yourself and binding it to the context. The easiest solution for +unit testing is to use the test_request_context() +context manager. In combination with the with statement it will bind a +test request so that you can interact with it. Here is an example:

+
from flask import request
+
+with app.test_request_context('/hello', method='POST'):
+    # now you can do something with the request until the
+    # end of the with block, such as basic assertions:
+    assert request.path == '/hello'
+    assert request.method == 'POST'
+
+
+

The other possibility is passing a whole WSGI environment to the +request_context() method:

+
with app.request_context(environ):
+    assert request.method == 'POST'
+
+
+
+
+

The Request Object

+

The request object is documented in the API section and we will not cover +it here in detail (see Request). Here is a broad overview of +some of the most common operations. First of all you have to import it from +the flask module:

+
from flask import request
+
+
+

The current request method is available by using the +method attribute. To access form data (data +transmitted in a POST or PUT request) you can use the +form attribute. Here is a full example of the two +attributes mentioned above:

+
@app.route('/login', methods=['POST', 'GET'])
+def login():
+    error = None
+    if request.method == 'POST':
+        if valid_login(request.form['username'],
+                       request.form['password']):
+            return log_the_user_in(request.form['username'])
+        else:
+            error = 'Invalid username/password'
+    # the code below is executed if the request method
+    # was GET or the credentials were invalid
+    return render_template('login.html', error=error)
+
+
+

What happens if the key does not exist in the form attribute? In that +case a special KeyError is raised. You can catch it like a +standard KeyError but if you don’t do that, a HTTP 400 Bad Request +error page is shown instead. So for many situations you don’t have to +deal with that problem.

+

To access parameters submitted in the URL (?key=value) you can use the +args attribute:

+
searchword = request.args.get('key', '')
+
+
+

We recommend accessing URL parameters with get or by catching the +KeyError because users might change the URL and presenting them a 400 +bad request page in that case is not user friendly.

+

For a full list of methods and attributes of the request object, head over +to the Request documentation.

+
+
+

File Uploads

+

You can handle uploaded files with Flask easily. Just make sure not to +forget to set the enctype="multipart/form-data" attribute on your HTML +form, otherwise the browser will not transmit your files at all.

+

Uploaded files are stored in memory or at a temporary location on the +filesystem. You can access those files by looking at the +files attribute on the request object. Each +uploaded file is stored in that dictionary. It behaves just like a +standard Python file object, but it also has a +save() method that +allows you to store that file on the filesystem of the server. +Here is a simple example showing how that works:

+
from flask import request
+
+@app.route('/upload', methods=['GET', 'POST'])
+def upload_file():
+    if request.method == 'POST':
+        f = request.files['the_file']
+        f.save('/var/www/uploads/uploaded_file.txt')
+    ...
+
+
+

If you want to know how the file was named on the client before it was +uploaded to your application, you can access the +filename attribute. +However please keep in mind that this value can be forged +so never ever trust that value. If you want to use the filename +of the client to store the file on the server, pass it through the +secure_filename() function that +Werkzeug provides for you:

+
from werkzeug.utils import secure_filename
+
+@app.route('/upload', methods=['GET', 'POST'])
+def upload_file():
+    if request.method == 'POST':
+        file = request.files['the_file']
+        file.save(f"/var/www/uploads/{secure_filename(file.filename)}")
+    ...
+
+
+

For some better examples, see Uploading Files.

+
+
+

Cookies

+

To access cookies you can use the cookies +attribute. To set cookies you can use the +set_cookie method of response objects. The +cookies attribute of request objects is a +dictionary with all the cookies the client transmits. If you want to use +sessions, do not use the cookies directly but instead use the +Sessions in Flask that add some security on top of cookies for you.

+

Reading cookies:

+
from flask import request
+
+@app.route('/')
+def index():
+    username = request.cookies.get('username')
+    # use cookies.get(key) instead of cookies[key] to not get a
+    # KeyError if the cookie is missing.
+
+
+

Storing cookies:

+
from flask import make_response
+
+@app.route('/')
+def index():
+    resp = make_response(render_template(...))
+    resp.set_cookie('username', 'the username')
+    return resp
+
+
+

Note that cookies are set on response objects. Since you normally +just return strings from the view functions Flask will convert them into +response objects for you. If you explicitly want to do that you can use +the make_response() function and then modify it.

+

Sometimes you might want to set a cookie at a point where the response +object does not exist yet. This is possible by utilizing the +Deferred Request Callbacks pattern.

+

For this also see About Responses.

+
+
+
+

Redirects and Errors

+

To redirect a user to another endpoint, use the redirect() +function; to abort a request early with an error code, use the +abort() function:

+
from flask import abort, redirect, url_for
+
+@app.route('/')
+def index():
+    return redirect(url_for('login'))
+
+@app.route('/login')
+def login():
+    abort(401)
+    this_is_never_executed()
+
+
+

This is a rather pointless example because a user will be redirected from +the index to a page they cannot access (401 means access denied) but it +shows how that works.

+

By default a black and white error page is shown for each error code. If +you want to customize the error page, you can use the +errorhandler() decorator:

+
from flask import render_template
+
+@app.errorhandler(404)
+def page_not_found(error):
+    return render_template('page_not_found.html'), 404
+
+
+

Note the 404 after the render_template() call. This +tells Flask that the status code of that page should be 404 which means +not found. By default 200 is assumed which translates to: all went well.

+

See Handling Application Errors for more details.

+
+
+

About Responses

+

The return value from a view function is automatically converted into +a response object for you. If the return value is a string it’s +converted into a response object with the string as response body, a +200 OK status code and a text/html mimetype. If the +return value is a dict or list, jsonify() is called to produce a +response. The logic that Flask applies to converting return values into +response objects is as follows:

+
    +
  1. If a response object of the correct type is returned it’s directly +returned from the view.

  2. +
  3. If it’s a string, a response object is created with that data and +the default parameters.

  4. +
  5. If it’s an iterator or generator returning strings or bytes, it is +treated as a streaming response.

  6. +
  7. If it’s a dict or list, a response object is created using +jsonify().

  8. +
  9. If a tuple is returned the items in the tuple can provide extra +information. Such tuples have to be in the form +(response, status), (response, headers), or +(response, status, headers). The status value will override +the status code and headers can be a list or dictionary of +additional header values.

  10. +
  11. If none of that works, Flask will assume the return value is a +valid WSGI application and convert that into a response object.

  12. +
+

If you want to get hold of the resulting response object inside the view +you can use the make_response() function.

+

Imagine you have a view like this:

+
from flask import render_template
+
+@app.errorhandler(404)
+def not_found(error):
+    return render_template('error.html'), 404
+
+
+

You just need to wrap the return expression with +make_response() and get the response object to modify it, then +return it:

+
from flask import make_response
+
+@app.errorhandler(404)
+def not_found(error):
+    resp = make_response(render_template('error.html'), 404)
+    resp.headers['X-Something'] = 'A value'
+    return resp
+
+
+
+

APIs with JSON

+

A common response format when writing an API is JSON. It’s easy to get +started writing such an API with Flask. If you return a dict or +list from a view, it will be converted to a JSON response.

+
@app.route("/me")
+def me_api():
+    user = get_current_user()
+    return {
+        "username": user.username,
+        "theme": user.theme,
+        "image": url_for("user_image", filename=user.image),
+    }
+
+@app.route("/users")
+def users_api():
+    users = get_all_users()
+    return [user.to_json() for user in users]
+
+
+

This is a shortcut to passing the data to the +jsonify() function, which will serialize any supported +JSON data type. That means that all the data in the dict or list must be +JSON serializable.

+

For complex types such as database models, you’ll want to use a +serialization library to convert the data to valid JSON types first. +There are many serialization libraries and Flask API extensions +maintained by the community that support more complex applications.

+
+
+
+

Sessions

+

In addition to the request object there is also a second object called +session which allows you to store information specific to a +user from one request to the next. This is implemented on top of cookies +for you and signs the cookies cryptographically. What this means is that +the user could look at the contents of your cookie but not modify it, +unless they know the secret key used for signing.

+

In order to use sessions you have to set a secret key. Here is how +sessions work:

+
from flask import session
+
+# Set the secret key to some random bytes. Keep this really secret!
+app.secret_key = b'_5#y2L"F4Q8z\n\xec]/'
+
+@app.route('/')
+def index():
+    if 'username' in session:
+        return f'Logged in as {session["username"]}'
+    return 'You are not logged in'
+
+@app.route('/login', methods=['GET', 'POST'])
+def login():
+    if request.method == 'POST':
+        session['username'] = request.form['username']
+        return redirect(url_for('index'))
+    return '''
+        <form method="post">
+            <p><input type=text name=username>
+            <p><input type=submit value=Login>
+        </form>
+    '''
+
+@app.route('/logout')
+def logout():
+    # remove the username from the session if it's there
+    session.pop('username', None)
+    return redirect(url_for('index'))
+
+
+
+

How to generate good secret keys

+

A secret key should be as random as possible. Your operating system has +ways to generate pretty random data based on a cryptographic random +generator. Use the following command to quickly generate a value for +Flask.secret_key (or SECRET_KEY):

+
$ python -c 'import secrets; print(secrets.token_hex())'
+'192b9bdd22ab9ed4d12e236c78afcb9a393ec15f71bbf5dc987d54727823bcbf'
+
+
+
+

A note on cookie-based sessions: Flask will take the values you put into the +session object and serialize them into a cookie. If you are finding some +values do not persist across requests, cookies are indeed enabled, and you are +not getting a clear error message, check the size of the cookie in your page +responses compared to the size supported by web browsers.

+

Besides the default client-side based sessions, if you want to handle +sessions on the server-side instead, there are several +Flask extensions that support this.

+
+
+

Message Flashing

+

Good applications and user interfaces are all about feedback. If the user +does not get enough feedback they will probably end up hating the +application. Flask provides a really simple way to give feedback to a +user with the flashing system. The flashing system basically makes it +possible to record a message at the end of a request and access it on the next +(and only the next) request. This is usually combined with a layout +template to expose the message.

+

To flash a message use the flash() method, to get hold of the +messages you can use get_flashed_messages() which is also +available in the templates. See Message Flashing for a full +example.

+
+
+

Logging

+
+Changelog
+

Added in version 0.3.

+
+

Sometimes you might be in a situation where you deal with data that +should be correct, but actually is not. For example you may have +some client-side code that sends an HTTP request to the server +but it’s obviously malformed. This might be caused by a user tampering +with the data, or the client code failing. Most of the time it’s okay +to reply with 400 Bad Request in that situation, but sometimes +that won’t do and the code has to continue working.

+

You may still want to log that something fishy happened. This is where +loggers come in handy. As of Flask 0.3 a logger is preconfigured for you +to use.

+

Here are some example log calls:

+
app.logger.debug('A value for debugging')
+app.logger.warning('A warning occurred (%d apples)', 42)
+app.logger.error('An error occurred')
+
+
+

The attached logger is a standard logging +Logger, so head over to the official logging +docs for more information.

+

See Handling Application Errors.

+
+
+

Hooking in WSGI Middleware

+

To add WSGI middleware to your Flask application, wrap the application’s +wsgi_app attribute. For example, to apply Werkzeug’s +ProxyFix middleware for running +behind Nginx:

+
from werkzeug.middleware.proxy_fix import ProxyFix
+app.wsgi_app = ProxyFix(app.wsgi_app)
+
+
+

Wrapping app.wsgi_app instead of app means that app still +points at your Flask application, not at the middleware, so you can +continue to use and configure app directly.

+
+
+

Using Flask Extensions

+

Extensions are packages that help you accomplish common tasks. For +example, Flask-SQLAlchemy provides SQLAlchemy support that makes it simple +and easy to use with Flask.

+

For more on Flask extensions, see Extensions.

+
+
+

Deploying to a Web Server

+

Ready to deploy your new Flask app? See Deploying to Production.

+
+
+ + +
+
+
+
+ + +
+
+ + + diff --git a/_build/reqcontext/index.html b/_build/reqcontext/index.html new file mode 100644 index 00000000..69f7e5b2 --- /dev/null +++ b/_build/reqcontext/index.html @@ -0,0 +1,312 @@ + + + + + + + + The Request Context — Flask Documentation (3.1.x) + + + + + + + + + + + + + + +
+
+
+
+ +
+

The Request Context

+

The request context keeps track of the request-level data during a +request. Rather than passing the request object to each function that +runs during a request, the request and session proxies +are accessed instead.

+

This is similar to The Application Context, which keeps track of the +application-level data independent of a request. A corresponding +application context is pushed when a request context is pushed.

+
+

Purpose of the Context

+

When the Flask application handles a request, it creates a +Request object based on the environment it received from the +WSGI server. Because a worker (thread, process, or coroutine depending +on the server) handles only one request at a time, the request data can +be considered global to that worker during that request. Flask uses the +term context local for this.

+

Flask automatically pushes a request context when handling a request. +View functions, error handlers, and other functions that run during a +request will have access to the request proxy, which points to +the request object for the current request.

+
+
+

Lifetime of the Context

+

When a Flask application begins handling a request, it pushes a request +context, which also pushes an app context. When the +request ends it pops the request context then the application context.

+

The context is unique to each thread (or other worker type). +request cannot be passed to another thread, the other thread has +a different context space and will not know about the request the parent +thread was pointing to.

+

Context locals are implemented using Python’s contextvars and +Werkzeug’s LocalProxy. Python manages the +lifetime of context vars automatically, and local proxy wraps that +low-level interface to make the data easier to work with.

+
+
+

Manually Push a Context

+

If you try to access request, or anything that uses it, outside +a request context, you’ll get this error message:

+
RuntimeError: Working outside of request context.
+
+This typically means that you attempted to use functionality that
+needed an active HTTP request. Consult the documentation on testing
+for information about how to avoid this problem.
+
+
+

This should typically only happen when testing code that expects an +active request. One option is to use the +test client to simulate a full request. Or +you can use test_request_context() in a with block, and +everything that runs in the block will have access to request, +populated with your test data.

+
def generate_report(year):
+    format = request.args.get("format")
+    ...
+
+with app.test_request_context(
+    "/make_report/2017", query_string={"format": "short"}
+):
+    generate_report()
+
+
+

If you see that error somewhere else in your code not related to +testing, it most likely indicates that you should move that code into a +view function.

+

For information on how to use the request context from the interactive +Python shell, see Working with the Shell.

+
+
+

How the Context Works

+

The Flask.wsgi_app() method is called to handle each request. It +manages the contexts during the request. Internally, the request and +application contexts work like stacks. When contexts are pushed, the +proxies that depend on them are available and point at information from +the top item.

+

When the request starts, a RequestContext is created and +pushed, which creates and pushes an AppContext first if +a context for that application is not already the top context. While +these contexts are pushed, the current_app, g, +request, and session proxies are available to the +original thread handling the request.

+

Other contexts may be pushed to change the proxies during a request. +While this is not a common pattern, it can be used in advanced +applications to, for example, do internal redirects or chain different +applications together.

+

After the request is dispatched and a response is generated and sent, +the request context is popped, which then pops the application context. +Immediately before they are popped, the teardown_request() +and teardown_appcontext() functions are executed. These +execute even if an unhandled exception occurred during dispatch.

+
+
+

Callbacks and Errors

+

Flask dispatches a request in multiple stages which can affect the +request, response, and how errors are handled. The contexts are active +during all of these stages.

+

A Blueprint can add handlers for these events that are specific +to the blueprint. The handlers for a blueprint will run if the blueprint +owns the route that matches the request.

+
    +
  1. Before each request, before_request() functions are +called. If one of these functions return a value, the other +functions are skipped. The return value is treated as the response +and the view function is not called.

  2. +
  3. If the before_request() functions did not return a +response, the view function for the matched route is called and +returns a response.

  4. +
  5. The return value of the view is converted into an actual response +object and passed to the after_request() +functions. Each function returns a modified or new response object.

  6. +
  7. After the response is returned, the contexts are popped, which calls +the teardown_request() and +teardown_appcontext() functions. These functions are +called even if an unhandled exception was raised at any point above.

  8. +
+

If an exception is raised before the teardown functions, Flask tries to +match it with an errorhandler() function to handle the +exception and return a response. If no error handler is found, or the +handler itself raises an exception, Flask returns a generic +500 Internal Server Error response. The teardown functions are still +called, and are passed the exception object.

+

If debug mode is enabled, unhandled exceptions are not converted to a +500 response and instead are propagated to the WSGI server. This +allows the development server to present the interactive debugger with +the traceback.

+
+

Teardown Callbacks

+

The teardown callbacks are independent of the request dispatch, and are +instead called by the contexts when they are popped. The functions are +called even if there is an unhandled exception during dispatch, and for +manually pushed contexts. This means there is no guarantee that any +other parts of the request dispatch have run first. Be sure to write +these functions in a way that does not depend on other callbacks and +will not fail.

+

During testing, it can be useful to defer popping the contexts after the +request ends, so that their data can be accessed in the test function. +Use the test_client() as a with block to preserve the +contexts until the with block exits.

+
from flask import Flask, request
+
+app = Flask(__name__)
+
+@app.route('/')
+def hello():
+    print('during view')
+    return 'Hello, World!'
+
+@app.teardown_request
+def show_teardown(exception):
+    print('after with block')
+
+with app.test_request_context():
+    print('during with block')
+
+# teardown functions are called after the context with block exits
+
+with app.test_client() as client:
+    client.get('/')
+    # the contexts are not popped even though the request ended
+    print(request.path)
+
+# the contexts are popped and teardown functions are called after
+# the client with block exits
+
+
+
+
+

Signals

+

The following signals are sent:

+
    +
  1. request_started is sent before the before_request() functions +are called.

  2. +
  3. request_finished is sent after the after_request() functions +are called.

  4. +
  5. got_request_exception is sent when an exception begins to be handled, but +before an errorhandler() is looked up or called.

  6. +
  7. request_tearing_down is sent after the teardown_request() +functions are called.

  8. +
+
+
+
+

Notes On Proxies

+

Some of the objects provided by Flask are proxies to other objects. The +proxies are accessed in the same way for each worker thread, but +point to the unique object bound to each worker behind the scenes as +described on this page.

+

Most of the time you don’t have to care about that, but there are some +exceptions where it is good to know that this object is actually a proxy:

+
    +
  • The proxy objects cannot fake their type as the actual object types. +If you want to perform instance checks, you have to do that on the +object being proxied.

  • +
  • The reference to the proxied object is needed in some situations, +such as sending Signals or passing data to a background +thread.

  • +
+

If you need to access the underlying object that is proxied, use the +_get_current_object() method:

+
app = current_app._get_current_object()
+my_signal.send(app)
+
+
+
+
+ + +
+
+
+
+ + +
+
+ + + diff --git a/_build/search/index.html b/_build/search/index.html new file mode 100644 index 00000000..a9b6b51a --- /dev/null +++ b/_build/search/index.html @@ -0,0 +1,101 @@ + + + + + + + + Search — Flask Documentation (3.1.x) + + + + + + + + + + + + + + + + + + + +
+
+
+
+ +

Search

+ + + + +

+ Searching for multiple words only shows matches that contain + all words. +

+ + +
+ + + +
+ + +
+ + +
+
+
+
+ + +
+
+ + + diff --git a/_build/searchindex.js b/_build/searchindex.js new file mode 100644 index 00000000..e73e466f --- /dev/null +++ b/_build/searchindex.js @@ -0,0 +1 @@ +Search.setIndex({"alltitles": {"A Gentle Introduction": [[35, "a-gentle-introduction"]], "A Minimal Application": [[54, "a-minimal-application"]], "AJAX with jQuery": [[39, null]], "API": [[0, null]], "API Reference": [[24, "api-reference"]], "APIs with JSON": [[54, "apis-with-json"]], "ASGI": [[10, null]], "About Responses": [[54, "about-responses"]], "About the First Parameter": [[0, null]], "Accessing Request Data": [[54, "accessing-request-data"]], "Accessing and Modifying the Session": [[60, "accessing-and-modifying-the-session"]], "Activate the environment": [[25, "activate-the-environment"]], "Adding Behavior": [[22, "adding-behavior"]], "Adding HTTP Method Overrides": [[41, null]], "Adding a favicon": [[34, null]], "Additional Notes": [[24, "additional-notes"]], "Address already in use": [[56, "address-already-in-use"]], "An Easier Solution": [[35, "an-easier-solution"]], "Apache httpd": [[9, null]], "Application Context": [[5, "application-context"]], "Application Discovery": [[5, "application-discovery"]], "Application Discovery Behavior": [[54, null]], "Application Dispatching": [[29, null]], "Application Factories": [[30, null]], "Application Factory": [[32, "application-factory"]], "Application Globals": [[0, "application-globals"]], "Application Object": [[0, "application-object"]], "Application Setup": [[27, "application-setup"], [64, null]], "Application Structure and Lifecycle": [[27, null]], "Async with gevent": [[18, "async-with-gevent"]], "Async with gevent or eventlet": [[13, "async-with-gevent-or-eventlet"]], "Async/await and ASGI support": [[20, "async-await-and-asgi-support"]], "Authentication": [[71, "authentication"]], "BSD-3-Clause License": [[26, null]], "Background Tasks with Celery": [[32, null]], "Background tasks": [[2, "background-tasks"]], "Base Template": [[50, "base-template"]], "Basic Configuration": [[28, "basic-configuration"]], "Basic Factories": [[30, "basic-factories"]], "Basic Reusable View": [[73, "basic-reusable-view"]], "Basic Usage": [[48, "basic-usage"]], "Binding Externally": [[11, "binding-externally"], [12, "binding-externally"], [13, "binding-externally"], [15, "binding-externally"], [18, "binding-externally"], [19, "binding-externally"]], "Blog": [[71, "blog"]], "Blog Blueprint": [[61, null]], "Blueprint Error Handlers": [[3, "blueprint-error-handlers"], [21, "blueprint-error-handlers"]], "Blueprint Objects": [[0, "blueprint-objects"]], "Blueprint Resource Folder": [[3, "blueprint-resource-folder"]], "Blueprint Resources": [[3, "blueprint-resources"]], "Blueprints and Views": [[72, null]], "Build and Install": [[63, "build-and-install"]], "Building Extensions": [[23, "building-extensions"]], "Building URLs": [[3, "building-urls"]], "Builtin Configuration Values": [[6, "builtin-configuration-values"]], "Caching": [[31, null]], "Caching Decorator": [[52, "caching-decorator"]], "Callbacks and Errors": [[55, "callbacks-and-errors"]], "Calling Tasks": [[32, "calling-tasks"]], "Changes": [[4, null]], "Child Template": [[50, "child-template"]], "Circular Imports": [[43, null]], "Class-Based Views": [[0, "class-based-views"]], "Class-based Views": [[73, null]], "Combining Applications": [[29, "combining-applications"]], "Command Line": [[56, "command-line"]], "Command Line Interface": [[0, "command-line-interface"], [5, null], [57, "command-line-interface"]], "Configuration": [[0, "configuration"], [9, "configuration"], [16, "configuration"], [42, "configuration"]], "Configuration Basics": [[6, "configuration-basics"]], "Configuration Best Practices": [[6, "configuration-best-practices"]], "Configuration Handling": [[6, null]], "Configuration Techniques": [[22, "configuration-techniques"]], "Configure the Secret Key": [[63, "configure-the-secret-key"]], "Configuring from Data Files": [[6, "configuring-from-data-files"]], "Configuring from Environment Variables": [[6, "configuring-from-environment-variables"]], "Configuring from Python Files": [[6, "configuring-from-python-files"]], "Connect on Demand": [[47, "connect-on-demand"]], "Connect to the Database": [[62, "connect-to-the-database"]], "Connection Reset Issue": [[35, null]], "Content Security Policy (CSP)": [[74, "content-security-policy-csp"]], "Contents:": [[65, null]], "Context Locals": [[54, "context-locals"]], "Context Processors": [[59, "context-processors"]], "Contributing": [[7, null]], "Controlling Autoescaping": [[59, "controlling-autoescaping"]], "Converting to Centralized URL Map": [[40, "converting-to-centralized-url-map"]], "Cookies": [[54, "cookies"]], "Copy/Paste to Terminal": [[74, "copy-paste-to-terminal"]], "Core Signals": [[58, "core-signals"]], "Create": [[61, "create"]], "Create a Blueprint": [[72, "create-a-blueprint"]], "Create an environment": [[25, "create-an-environment"]], "Create the Tables": [[62, "create-the-tables"]], "Creating Data": [[42, "creating-data"]], "Creating Signals": [[58, "creating-signals"]], "Creating a Request Context": [[57, "creating-a-request-context"]], "Cross-Site Request Forgery (CSRF)": [[74, "cross-site-request-forgery-csrf"]], "Cross-Site Scripting (XSS)": [[74, "cross-site-scripting-xss"]], "Custom Commands": [[5, "custom-commands"]], "Custom Error Pages": [[21, "custom-error-pages"]], "Custom Scripts": [[5, "custom-scripts"]], "Data During a Request": [[22, "data-during-a-request"]], "Database": [[71, "database"]], "Debug Mode": [[5, "debug-mode"], [6, "debug-mode"], [54, "debug-mode"]], "Debugging": [[21, "debugging"]], "Debugging Application Errors": [[8, null]], "Declarative": [[46, "declarative"]], "Decorator Based Signal Subscriptions": [[58, "decorator-based-signal-subscriptions"]], "Default Configuration": [[28, "default-configuration"]], "Deferred Errors on Reload": [[56, "deferred-errors-on-reload"]], "Deferred Request Callbacks": [[33, null]], "Define and Access the Database": [[62, null]], "Defining Tasks": [[32, "defining-tasks"]], "Delete": [[61, "delete"]], "Dependencies": [[25, "dependencies"]], "Deploy to Production": [[63, null]], "Deploying to Production": [[14, null]], "Deploying to a Web Server": [[54, "deploying-to-a-web-server"]], "Describe the Project": [[66, "describe-the-project"]], "Design Decisions in Flask": [[20, null]], "Development / Production": [[6, "development-production"]], "Development Server": [[56, null]], "Disable dotenv": [[5, "disable-dotenv"]], "Dispatch by Path": [[29, "dispatch-by-path"]], "Dispatch by Subdomain": [[29, "dispatch-by-subdomain"]], "Documentation": [[42, "documentation"]], "Domain Name": [[9, "domain-name"], [16, "domain-name"]], "Easy Querying": [[47, "easy-querying"]], "Email Errors to Admins": [[28, "email-errors-to-admins"]], "Endpoint Decorator": [[52, "endpoint-decorator"]], "Endpoints and URLs": [[72, "endpoints-and-urls"]], "Environment Variables From dotenv": [[5, "environment-variables-from-dotenv"]], "Environment Variables From virtualenv": [[5, "environment-variables-from-virtualenv"]], "Error Handlers": [[21, "error-handlers"]], "Error Logging Tools": [[21, "error-logging-tools"]], "Errors in Custom Scripts": [[5, null]], "Events and Signals": [[1, "events-and-signals"]], "Extensions": [[2, "extensions"], [23, null]], "External Debuggers": [[8, "external-debuggers"]], "Externally Visible Server": [[54, "public-server"]], "Factories & Extensions": [[30, "factories-extensions"]], "Factory": [[71, "factory"]], "Factory Improvements": [[30, "factory-improvements"]], "File Uploads": [[54, "file-uploads"]], "Filtering Flash Messages": [[36, "filtering-flash-messages"]], "Finding Extensions": [[23, "finding-extensions"]], "Firing Before/After Request": [[57, "firing-before-after-request"]], "Fixtures": [[60, "fixtures"]], "Flashing With Categories": [[36, "flashing-with-categories"]], "Flask Extension Development": [[22, null]], "Flask Extensions": [[28, "flask-extensions"]], "Flask-SQLAlchemy Extension": [[46, "flask-sqlalchemy-extension"]], "Following Redirects": [[38, "following-redirects"], [60, "following-redirects"]], "Form Data": [[60, "form-data"]], "Form Validation with WTForms": [[53, null]], "Forms in Templates": [[53, "forms-in-templates"]], "Further Examples": [[21, "further-examples"]], "Further Improving the Shell Experience": [[57, "further-improving-the-shell-experience"]], "Generating URLs": [[38, "generating-urls"]], "Generic Exception Handlers": [[21, "generic-exception-handlers"]], "Getting Results": [[32, "getting-results"]], "Getting the most out of WTForms with an Extension": [[53, null]], "Gunicorn": [[13, null]], "HTML Escaping": [[54, "html-escaping"]], "HTTP Methods": [[54, "http-methods"]], "HTTP Public Key Pinning (HPKP)": [[74, "http-public-key-pinning-hpkp"]], "HTTP Strict Transport Security (HSTS)": [[74, "http-strict-transport-security-hsts"]], "Handling": [[21, "handling"]], "Handling Application Errors": [[21, null]], "Hooking in WSGI Middleware": [[54, "hooking-in-wsgi-middleware"]], "Hosting Platforms": [[14, "hosting-platforms"]], "How a Request is Handled": [[27, "how-a-request-is-handled"]], "How the Context Works": [[55, "how-the-context-works"]], "How to generate good secret keys": [[54, null]], "Identifying Tests": [[60, "identifying-tests"]], "Improving Uploads": [[35, "improving-uploads"]], "In Code": [[56, "in-code"]], "In Production": [[8, "in-production"]], "In the View": [[53, "in-the-view"]], "Incoming Request Data": [[0, "incoming-request-data"]], "Index": [[61, "index"]], "Information for the Pros": [[35, null]], "Initial Schemas": [[47, "initial-schemas"]], "Initialize the Database File": [[62, "initialize-the-database-file"]], "Injecting Request Information": [[28, "injecting-request-information"]], "Insider Information": [[54, null]], "Install": [[32, "install"]], "Install Flask": [[25, "install-flask"]], "Install the Project": [[66, "install-the-project"]], "Installation": [[25, null]], "Installing": [[11, "installing"], [12, "installing"], [13, "installing"], [15, "installing"], [18, "installing"], [19, "installing"]], "Instance Folders": [[6, "instance-folders"]], "Integrate Celery with Flask": [[32, "integrate-celery-with-flask"]], "Internationalized Application URLs": [[51, "internationalized-application-urls"]], "Internationalized Blueprint URLs": [[51, "internationalized-blueprint-urls"]], "JSON Data": [[60, "json-data"]], "JSON Security": [[74, "json-security"]], "JSON Support": [[0, "module-flask.json"]], "JavaScript, fetch, and JSON": [[38, null]], "Jinja Setup": [[59, "jinja-setup"]], "Keep Developing!": [[68, null]], "Keep in Mind": [[0, null]], "Large Applications as Packages": [[43, null]], "Lazily Loading Views": [[40, null]], "Lifetime of the Context": [[1, "lifetime-of-the-context"], [55, "lifetime-of-the-context"]], "Loading Late": [[40, "loading-late"]], "Log In": [[70, "log-in"]], "Logging": [[21, "logging"], [28, null], [54, "logging"]], "Login": [[72, "login"]], "Login Required Decorator": [[52, "login-required-decorator"]], "Logout": [[72, "logout"]], "Make the Project Installable": [[66, null]], "Making a Request with fetch": [[38, "making-a-request-with-fetch"]], "Manual Object Relational Mapping": [[46, "manual-object-relational-mapping"]], "Manually Push a Context": [[1, "manually-push-a-context"], [55, "manually-push-a-context"]], "Mapping Documents": [[42, "mapping-documents"]], "Message Flashing": [[0, "message-flashing"], [36, null], [54, "message-flashing"]], "Method Dispatching and APIs": [[73, "method-dispatching-and-apis"]], "Method Hints": [[73, "method-hints"]], "Middleware": [[27, "middleware"]], "Modular Applications with Blueprints": [[3, null]], "MongoDB with MongoEngine": [[42, null]], "My First Blueprint": [[3, "my-first-blueprint"]], "Naming": [[22, "naming"]], "Nesting Blueprints": [[3, "nesting-blueprints"]], "Notes On Proxies": [[55, "notes-on-proxies"]], "Notice": [[0, null]], "One Template Engine": [[20, "one-template-engine"]], "Open a Shell": [[5, "open-a-shell"]], "Optional dependencies": [[25, "optional-dependencies"]], "Other Libraries": [[28, "other-libraries"]], "Other event loops": [[2, "other-event-loops"]], "Passing Data to Tasks": [[32, "passing-data-to-tasks"]], "Passing Proxies as Senders": [[58, null]], "Patterns for Flask": [[37, null]], "Performance": [[2, "performance"]], "Plugins": [[5, "plugins"]], "Project Layout": [[67, null]], "Purpose of the Context": [[1, "purpose-of-the-context"], [55, "purpose-of-the-context"]], "PyCharm Integration": [[5, "pycharm-integration"]], "Python Version": [[25, "python-version"]], "Queries": [[42, "queries"]], "Quickstart": [[54, null]], "Receiving JSON in Views": [[38, "receiving-json-in-views"]], "Recommended Extension Guidelines": [[22, "recommended-extension-guidelines"]], "Redirects and Errors": [[54, "redirects-and-errors"]], "Register": [[70, "register"]], "Register A User": [[70, "register-a-user"]], "Register with the Application": [[62, "register-with-the-application"]], "Registering": [[21, "registering"]], "Registering Blueprints": [[3, "registering-blueprints"]], "Registering Commands with Blueprints": [[5, "registering-commands-with-blueprints"]], "Registering Filters": [[59, "registering-filters"]], "Removing the Default Handler": [[28, "removing-the-default-handler"]], "Rendering Templates": [[38, "rendering-templates"], [54, "rendering-templates"]], "Replacing Content": [[38, "replacing-content"]], "Request Content Checksums": [[44, null]], "Require Authentication in Other Views": [[72, "require-authentication-in-other-views"]], "Resource Use": [[74, "resource-use"]], "Response Objects": [[0, "response-objects"]], "Return JSON from Views": [[38, "return-json-from-views"]], "Returning API Errors as JSON": [[21, "returning-api-errors-as-json"]], "Routing": [[54, "routing"]], "Run The Application": [[64, "run-the-application"]], "Run the Development Server": [[5, "run-the-development-server"]], "Run with a Production Server": [[63, "run-with-a-production-server"]], "Running": [[11, "running"], [12, "running"], [13, "running"], [15, "running"], [18, "running"], [19, "running"]], "Running Commands with the CLI Runner": [[60, "running-commands-with-the-cli-runner"]], "Running the Tests": [[71, "running-the-tests"]], "SQL Abstraction Layer": [[46, "sql-abstraction-layer"]], "SQLAlchemy in Flask": [[46, null]], "Security Considerations": [[74, null]], "Security Headers": [[74, "security-headers"]], "See also": [[34, "see-also"]], "Self-Hosted Options": [[14, "self-hosted-options"]], "Sending Requests with the Test Client": [[60, "sending-requests-with-the-test-client"]], "Sending Signals": [[58, "sending-signals"]], "Serving the Application": [[27, "serving-the-application"]], "Session Interface": [[0, "session-interface"]], "Sessions": [[0, "sessions"], [54, "sessions"]], "Set-Cookie options": [[74, "set-cookie-options"]], "Setting Command Options": [[5, "setting-command-options"]], "Setup and Fixtures": [[71, "setup-and-fixtures"]], "Signals": [[0, "signals"], [55, "signals"], [58, null]], "Signals and Flask\u2019s Request Context": [[58, "signals-and-flask-s-request-context"]], "Simple Flashing": [[36, "simple-flashing"]], "Simple Packages": [[43, "simple-packages"]], "Single-Page Applications": [[45, null]], "Standard Context": [[59, "standard-context"]], "Static Files": [[3, "static-files"], [54, "static-files"], [69, null]], "Storing Data": [[1, "storing-data"]], "Stream Helpers": [[0, "stream-helpers"]], "Streaming": [[59, "streaming"]], "Streaming Contents": [[48, null]], "Streaming from Templates": [[48, "streaming-from-templates"]], "Streaming with Context": [[48, "streaming-with-context"]], "Subclassing Flask": [[49, null]], "Subscribing to Signals": [[58, "subscribing-to-signals"]], "Tagged JSON": [[0, "tagged-json"]], "Teardown Callbacks": [[55, "teardown-callbacks"]], "Tell Flask it is Behind a Proxy": [[17, null]], "Template Inheritance": [[50, null]], "Template Rendering": [[0, "template-rendering"]], "Templates": [[3, "templates"], [59, null], [70, null]], "Templating Decorator": [[52, "templating-decorator"]], "Test CLI Runner": [[0, "test-cli-runner"]], "Test Client": [[0, "test-client"]], "Test Coverage": [[71, null]], "Testing Flask Applications": [[60, null]], "Tests that depend on an Active Context": [[60, "tests-that-depend-on-an-active-context"]], "The Application Context": [[1, null]], "The Application Factory": [[64, "the-application-factory"]], "The Base Layout": [[70, "the-base-layout"]], "The Blueprint": [[61, "the-blueprint"]], "The Built-In Debugger": [[8, "the-built-in-debugger"]], "The Concept of Blueprints": [[3, "the-concept-of-blueprints"]], "The Explicit Application Object": [[20, "the-explicit-application-object"]], "The Extension Class and Initialization": [[22, "the-extension-class-and-initialization"]], "The First View: Register": [[72, "the-first-view-register"]], "The Forms": [[53, "the-forms"]], "The Jinja Context Behavior": [[59, null]], "The Request Context": [[55, null]], "The Request Object": [[54, "the-request-object"]], "The Routing System": [[20, "the-routing-system"]], "Thread Locals": [[20, "thread-locals"]], "Tutorial": [[65, null]], "URL Building": [[54, "url-building"]], "URL Route Registrations": [[0, "url-route-registrations"]], "URL Variables": [[73, "url-variables"]], "Unhandled Exceptions": [[21, "unhandled-exceptions"]], "Unique URLs / Redirection Behavior": [[54, "unique-urls-redirection-behavior"]], "Update": [[61, "update"]], "Upload Progress Bars": [[35, "upload-progress-bars"]], "Uploading Files": [[35, null]], "Useful Functions and Classes": [[0, "useful-functions-and-classes"]], "Useful Internals": [[0, "useful-internals"]], "User\u2019s Guide": [[24, "user-s-guide"]], "Using Applications": [[30, "using-applications"]], "Using Extensions": [[23, "using-extensions"]], "Using Flask Extensions": [[54, "using-flask-extensions"]], "Using SQLite 3 with Flask": [[47, null]], "Using URL Processors": [[51, null]], "Using async and await": [[2, null]], "Using async with greenlet": [[2, null]], "Variable Rules": [[54, "variable-rules"]], "Version 0.1": [[4, "version-0-1"]], "Version 0.10": [[4, "version-0-10"]], "Version 0.10.1": [[4, "version-0-10-1"]], "Version 0.11": [[4, "version-0-11"]], "Version 0.11.1": [[4, "version-0-11-1"]], "Version 0.12": [[4, "version-0-12"]], "Version 0.12.1": [[4, "version-0-12-1"]], "Version 0.12.2": [[4, "version-0-12-2"]], "Version 0.12.3": [[4, "version-0-12-3"]], "Version 0.12.4": [[4, "version-0-12-4"]], "Version 0.12.5": [[4, "version-0-12-5"]], "Version 0.2": [[4, "version-0-2"]], "Version 0.3": [[4, "version-0-3"]], "Version 0.3.1": [[4, "version-0-3-1"]], "Version 0.4": [[4, "version-0-4"]], "Version 0.5": [[4, "version-0-5"]], "Version 0.5.1": [[4, "version-0-5-1"]], "Version 0.5.2": [[4, "version-0-5-2"]], "Version 0.6": [[4, "version-0-6"]], "Version 0.6.1": [[4, "version-0-6-1"]], "Version 0.7": [[4, "version-0-7"]], "Version 0.7.1": [[4, "version-0-7-1"]], "Version 0.7.2": [[4, "version-0-7-2"]], "Version 0.8": [[4, "version-0-8"]], "Version 0.8.1": [[4, "version-0-8-1"]], "Version 0.9": [[4, "version-0-9"]], "Version 1.0": [[4, "version-1-0"]], "Version 1.0.1": [[4, "version-1-0-1"]], "Version 1.0.2": [[4, "version-1-0-2"]], "Version 1.0.3": [[4, "version-1-0-3"]], "Version 1.0.4": [[4, "version-1-0-4"]], "Version 1.1.0": [[4, "version-1-1-0"]], "Version 1.1.1": [[4, "version-1-1-1"]], "Version 1.1.2": [[4, "version-1-1-2"]], "Version 1.1.3": [[4, "version-1-1-3"]], "Version 1.1.4": [[4, "version-1-1-4"]], "Version 2.0.0": [[4, "version-2-0-0"]], "Version 2.0.1": [[4, "version-2-0-1"]], "Version 2.0.2": [[4, "version-2-0-2"]], "Version 2.0.3": [[4, "version-2-0-3"]], "Version 2.1.0": [[4, "version-2-1-0"]], "Version 2.1.1": [[4, "version-2-1-1"]], "Version 2.1.2": [[4, "version-2-1-2"]], "Version 2.1.3": [[4, "version-2-1-3"]], "Version 2.2.0": [[4, "version-2-2-0"]], "Version 2.2.1": [[4, "version-2-2-1"]], "Version 2.2.2": [[4, "version-2-2-2"]], "Version 2.2.3": [[4, "version-2-2-3"]], "Version 2.2.4": [[4, "version-2-2-4"]], "Version 2.2.5": [[4, "version-2-2-5"]], "Version 2.3.0": [[4, "version-2-3-0"]], "Version 2.3.1": [[4, "version-2-3-1"]], "Version 2.3.2": [[4, "version-2-3-2"]], "Version 2.3.3": [[4, "version-2-3-3"]], "Version 3.0.0": [[4, "version-3-0-0"]], "Version 3.0.1": [[4, "version-3-0-1"]], "Version 3.0.2": [[4, "version-3-0-2"]], "Version 3.0.3": [[4, "version-3-0-3"]], "Version 3.1.0": [[4, "version-3-1-0"]], "Version 3.1.1": [[4, "version-3-1-1"]], "View Decorators": [[52, null], [73, "view-decorators"]], "View Function Options": [[0, "view-function-options"]], "View Lifetime and self": [[73, "view-lifetime-and-self"]], "Views and Models": [[22, "views-and-models"]], "Virtual environments": [[25, "virtual-environments"]], "Waitress": [[19, null]], "Watch and Ignore Files with the Reloader": [[5, "watch-and-ignore-files-with-the-reloader"]], "Welcome to Flask": [[24, null]], "Werkzeug": [[28, "werkzeug"]], "What Flask is, What Flask is Not": [[20, "what-flask-is-what-flask-is-not"]], "What does \u201cmicro\u201d mean?": [[20, "what-does-micro-mean"]], "When to use Quart instead": [[2, "when-to-use-quart-instead"]], "Why Blueprints?": [[3, "why-blueprints"]], "Working with Blueprints": [[43, "working-with-blueprints"]], "Working with the Shell": [[57, null]], "Working with this Document": [[29, "working-with-this-document"]], "X-Content-Type-Options": [[74, "x-content-type-options"]], "X-Frame-Options": [[74, "x-frame-options"]], "eventlet": [[11, null]], "gevent": [[12, null]], "greenlet": [[25, "greenlet"]], "mod_wsgi": [[15, null]], "nginx": [[16, null]], "uWSGI": [[18, null]]}, "docnames": ["api", "appcontext", "async-await", "blueprints", "changes", "cli", "config", "contributing", "debugging", "deploying/apache-httpd", "deploying/asgi", "deploying/eventlet", "deploying/gevent", "deploying/gunicorn", "deploying/index", "deploying/mod_wsgi", "deploying/nginx", "deploying/proxy_fix", "deploying/uwsgi", "deploying/waitress", "design", "errorhandling", "extensiondev", "extensions", "index", "installation", "license", "lifecycle", "logging", "patterns/appdispatch", "patterns/appfactories", "patterns/caching", "patterns/celery", "patterns/deferredcallbacks", "patterns/favicon", "patterns/fileuploads", "patterns/flashing", "patterns/index", "patterns/javascript", "patterns/jquery", "patterns/lazyloading", "patterns/methodoverrides", "patterns/mongoengine", "patterns/packages", "patterns/requestchecksum", "patterns/singlepageapplications", "patterns/sqlalchemy", "patterns/sqlite3", "patterns/streaming", "patterns/subclassing", "patterns/templateinheritance", "patterns/urlprocessors", "patterns/viewdecorators", "patterns/wtforms", "quickstart", "reqcontext", "server", "shell", "signals", "templating", "testing", "tutorial/blog", "tutorial/database", "tutorial/deploy", "tutorial/factory", "tutorial/index", "tutorial/install", "tutorial/layout", "tutorial/next", "tutorial/static", "tutorial/templates", "tutorial/tests", "tutorial/views", "views", "web-security"], "envversion": {"sphinx": 64, "sphinx.domains.c": 3, "sphinx.domains.changeset": 1, "sphinx.domains.citation": 1, "sphinx.domains.cpp": 9, "sphinx.domains.index": 1, "sphinx.domains.javascript": 3, "sphinx.domains.math": 2, "sphinx.domains.python": 4, "sphinx.domains.rst": 2, "sphinx.domains.std": 2, "sphinx.ext.intersphinx": 1}, "filenames": ["api.rst", "appcontext.rst", "async-await.rst", "blueprints.rst", "changes.rst", "cli.rst", "config.rst", "contributing.rst", "debugging.rst", "deploying/apache-httpd.rst", "deploying/asgi.rst", "deploying/eventlet.rst", "deploying/gevent.rst", "deploying/gunicorn.rst", "deploying/index.rst", "deploying/mod_wsgi.rst", "deploying/nginx.rst", "deploying/proxy_fix.rst", "deploying/uwsgi.rst", "deploying/waitress.rst", "design.rst", "errorhandling.rst", "extensiondev.rst", "extensions.rst", "index.rst", "installation.rst", "license.rst", "lifecycle.rst", "logging.rst", "patterns/appdispatch.rst", "patterns/appfactories.rst", "patterns/caching.rst", "patterns/celery.rst", "patterns/deferredcallbacks.rst", "patterns/favicon.rst", "patterns/fileuploads.rst", "patterns/flashing.rst", "patterns/index.rst", "patterns/javascript.rst", "patterns/jquery.rst", "patterns/lazyloading.rst", "patterns/methodoverrides.rst", "patterns/mongoengine.rst", "patterns/packages.rst", "patterns/requestchecksum.rst", "patterns/singlepageapplications.rst", "patterns/sqlalchemy.rst", "patterns/sqlite3.rst", "patterns/streaming.rst", "patterns/subclassing.rst", "patterns/templateinheritance.rst", "patterns/urlprocessors.rst", "patterns/viewdecorators.rst", "patterns/wtforms.rst", "quickstart.rst", "reqcontext.rst", "server.rst", "shell.rst", "signals.rst", "templating.rst", "testing.rst", "tutorial/blog.rst", "tutorial/database.rst", "tutorial/deploy.rst", "tutorial/factory.rst", "tutorial/index.rst", "tutorial/install.rst", "tutorial/layout.rst", "tutorial/next.rst", "tutorial/static.rst", "tutorial/templates.rst", "tutorial/tests.rst", "tutorial/views.rst", "views.rst", "web-security.rst"], "indexentries": {"_appctxglobals (class in flask.ctx)": [[0, "flask.ctx._AppCtxGlobals", false]], "abort() (in module flask)": [[0, "flask.abort", false]], "aborter (flask.flask attribute)": [[0, "flask.Flask.aborter", false]], "aborter_class (flask.flask attribute)": [[0, "flask.Flask.aborter_class", false]], "accept_charsets (flask.request property)": [[0, "flask.Request.accept_charsets", false]], "accept_encodings (flask.request property)": [[0, "flask.Request.accept_encodings", false]], "accept_languages (flask.request property)": [[0, "flask.Request.accept_languages", false]], "accept_mimetypes (flask.request property)": [[0, "flask.Request.accept_mimetypes", false]], "accept_ranges (flask.response attribute)": [[0, "flask.Response.accept_ranges", false]], "access_control_allow_credentials (flask.response property)": [[0, "flask.Response.access_control_allow_credentials", false]], "access_control_allow_headers (flask.response attribute)": [[0, "flask.Response.access_control_allow_headers", false]], "access_control_allow_methods (flask.response attribute)": [[0, "flask.Response.access_control_allow_methods", false]], "access_control_allow_origin (flask.response attribute)": [[0, "flask.Response.access_control_allow_origin", false]], "access_control_expose_headers (flask.response attribute)": [[0, "flask.Response.access_control_expose_headers", false]], "access_control_max_age (flask.response attribute)": [[0, "flask.Response.access_control_max_age", false]], "access_control_request_headers (flask.request attribute)": [[0, "flask.Request.access_control_request_headers", false]], "access_control_request_method (flask.request attribute)": [[0, "flask.Request.access_control_request_method", false]], "access_route (flask.request property)": [[0, "flask.Request.access_route", false]], "accessed (flask.sessions.securecookiesession attribute)": [[0, "flask.sessions.SecureCookieSession.accessed", false]], "accessed (flask.sessions.sessionmixin attribute)": [[0, "flask.sessions.SessionMixin.accessed", false]], "add_app_template_filter() (flask.blueprint method)": [[0, "flask.Blueprint.add_app_template_filter", false]], "add_app_template_global() (flask.blueprint method)": [[0, "flask.Blueprint.add_app_template_global", false]], "add_app_template_test() (flask.blueprint method)": [[0, "flask.Blueprint.add_app_template_test", false]], "add_etag() (flask.response method)": [[0, "flask.Response.add_etag", false]], "add_template_filter() (flask.flask method)": [[0, "flask.Flask.add_template_filter", false]], "add_template_global() (flask.flask method)": [[0, "flask.Flask.add_template_global", false]], "add_template_test() (flask.flask method)": [[0, "flask.Flask.add_template_test", false]], "add_url_rule() (flask.blueprint method)": [[0, "flask.Blueprint.add_url_rule", false]], "add_url_rule() (flask.blueprints.blueprintsetupstate method)": [[0, "flask.blueprints.BlueprintSetupState.add_url_rule", false]], "add_url_rule() (flask.flask method)": [[0, "flask.Flask.add_url_rule", false]], "after_app_request() (flask.blueprint method)": [[0, "flask.Blueprint.after_app_request", false]], "after_request() (flask.blueprint method)": [[0, "flask.Blueprint.after_request", false]], "after_request() (flask.flask method)": [[0, "flask.Flask.after_request", false]], "after_request_funcs (flask.blueprint attribute)": [[0, "flask.Blueprint.after_request_funcs", false]], "after_request_funcs (flask.flask attribute)": [[0, "flask.Flask.after_request_funcs", false]], "after_this_request() (in module flask)": [[0, "flask.after_this_request", false]], "age (flask.response attribute)": [[0, "flask.Response.age", false]], "allow (flask.response property)": [[0, "flask.Response.allow", false]], "app (flask.blueprints.blueprintsetupstate attribute)": [[0, "flask.blueprints.BlueprintSetupState.app", false]], "app_context() (flask.flask method)": [[0, "flask.Flask.app_context", false]], "app_context_processor() (flask.blueprint method)": [[0, "flask.Blueprint.app_context_processor", false]], "app_ctx_globals_class (flask.flask attribute)": [[0, "flask.Flask.app_ctx_globals_class", false]], "app_errorhandler() (flask.blueprint method)": [[0, "flask.Blueprint.app_errorhandler", false]], "app_import_path (flask.cli.scriptinfo attribute)": [[0, "flask.cli.ScriptInfo.app_import_path", false]], "app_template_filter() (flask.blueprint method)": [[0, "flask.Blueprint.app_template_filter", false]], "app_template_global() (flask.blueprint method)": [[0, "flask.Blueprint.app_template_global", false]], "app_template_test() (flask.blueprint method)": [[0, "flask.Blueprint.app_template_test", false]], "app_url_defaults() (flask.blueprint method)": [[0, "flask.Blueprint.app_url_defaults", false]], "app_url_value_preprocessor() (flask.blueprint method)": [[0, "flask.Blueprint.app_url_value_preprocessor", false]], "appcontext (class in flask.ctx)": [[0, "flask.ctx.AppContext", false]], "appcontext_popped (in module flask)": [[0, "flask.appcontext_popped", false]], "appcontext_pushed (in module flask)": [[0, "flask.appcontext_pushed", false]], "appcontext_tearing_down (in module flask)": [[0, "flask.appcontext_tearing_down", false]], "appgroup (class in flask.cli)": [[0, "flask.cli.AppGroup", false]], "application() (flask.request class method)": [[0, "flask.Request.application", false]], "application_root (built-in variable)": [[6, "APPLICATION_ROOT", false]], "args (flask.request property)": [[0, "flask.Request.args", false]], "as_view() (flask.views.view class method)": [[0, "flask.views.View.as_view", false]], "async_to_sync() (flask.flask method)": [[0, "flask.Flask.async_to_sync", false]], "authorization (flask.request property)": [[0, "flask.Request.authorization", false]], "auto_find_instance_path() (flask.flask method)": [[0, "flask.Flask.auto_find_instance_path", false]], "autocorrect_location_header (flask.response attribute)": [[0, "flask.Response.autocorrect_location_header", false]], "automatically_set_content_length (flask.response attribute)": [[0, "flask.Response.automatically_set_content_length", false]], "base_url (flask.request property)": [[0, "flask.Request.base_url", false]], "before_app_request() (flask.blueprint method)": [[0, "flask.Blueprint.before_app_request", false]], "before_request() (flask.blueprint method)": [[0, "flask.Blueprint.before_request", false]], "before_request() (flask.flask method)": [[0, "flask.Flask.before_request", false]], "before_request_funcs (flask.blueprint attribute)": [[0, "flask.Blueprint.before_request_funcs", false]], "before_request_funcs (flask.flask attribute)": [[0, "flask.Flask.before_request_funcs", false]], "blueprint (class in flask)": [[0, "flask.Blueprint", false]], "blueprint (flask.blueprints.blueprintsetupstate attribute)": [[0, "flask.blueprints.BlueprintSetupState.blueprint", false]], "blueprint (flask.request property)": [[0, "flask.Request.blueprint", false]], "blueprints (flask.flask attribute)": [[0, "flask.Flask.blueprints", false]], "blueprints (flask.request property)": [[0, "flask.Request.blueprints", false]], "blueprintsetupstate (class in flask.blueprints)": [[0, "flask.blueprints.BlueprintSetupState", false]], "cache_control (flask.request property)": [[0, "flask.Request.cache_control", false]], "cache_control (flask.response property)": [[0, "flask.Response.cache_control", false]], "calculate_content_length() (flask.response method)": [[0, "flask.Response.calculate_content_length", false]], "call_on_close() (flask.response method)": [[0, "flask.Response.call_on_close", false]], "check() (flask.json.tag.jsontag method)": [[0, "flask.json.tag.JSONTag.check", false]], "clear() (flask.sessions.nullsession method)": [[0, "flask.sessions.NullSession.clear", false]], "cli (flask.blueprint attribute)": [[0, "flask.Blueprint.cli", false]], "cli (flask.flask attribute)": [[0, "flask.Flask.cli", false]], "close() (flask.request method)": [[0, "flask.Request.close", false]], "close() (flask.response method)": [[0, "flask.Response.close", false]], "command() (flask.cli.appgroup method)": [[0, "flask.cli.AppGroup.command", false]], "compact (flask.json.provider.defaultjsonprovider attribute)": [[0, "flask.json.provider.DefaultJSONProvider.compact", false]], "config (class in flask)": [[0, "flask.Config", false]], "config (flask.flask attribute)": [[0, "flask.Flask.config", false]], "config_class (flask.flask attribute)": [[0, "flask.Flask.config_class", false]], "content_encoding (flask.request attribute)": [[0, "flask.Request.content_encoding", false]], "content_encoding (flask.response attribute)": [[0, "flask.Response.content_encoding", false]], "content_language (flask.response property)": [[0, "flask.Response.content_language", false]], "content_length (flask.request property)": [[0, "flask.Request.content_length", false]], "content_length (flask.response attribute)": [[0, "flask.Response.content_length", false]], "content_location (flask.response attribute)": [[0, "flask.Response.content_location", false]], "content_md5 (flask.request attribute)": [[0, "flask.Request.content_md5", false]], "content_md5 (flask.response attribute)": [[0, "flask.Response.content_md5", false]], "content_range (flask.response property)": [[0, "flask.Response.content_range", false]], "content_security_policy (flask.response property)": [[0, "flask.Response.content_security_policy", false]], "content_security_policy_report_only (flask.response property)": [[0, "flask.Response.content_security_policy_report_only", false]], "content_type (flask.request attribute)": [[0, "flask.Request.content_type", false]], "content_type (flask.response attribute)": [[0, "flask.Response.content_type", false]], "context_processor() (flask.blueprint method)": [[0, "flask.Blueprint.context_processor", false]], "context_processor() (flask.flask method)": [[0, "flask.Flask.context_processor", false]], "cookies (flask.request property)": [[0, "flask.Request.cookies", false]], "copy() (flask.ctx.requestcontext method)": [[0, "flask.ctx.RequestContext.copy", false]], "copy_current_request_context() (in module flask)": [[0, "flask.copy_current_request_context", false]], "create_app (flask.cli.scriptinfo attribute)": [[0, "flask.cli.ScriptInfo.create_app", false]], "create_global_jinja_loader() (flask.flask method)": [[0, "flask.Flask.create_global_jinja_loader", false]], "create_jinja_environment() (flask.flask method)": [[0, "flask.Flask.create_jinja_environment", false]], "create_url_adapter() (flask.flask method)": [[0, "flask.Flask.create_url_adapter", false]], "cross_origin_embedder_policy (flask.response attribute)": [[0, "flask.Response.cross_origin_embedder_policy", false]], "cross_origin_opener_policy (flask.response attribute)": [[0, "flask.Response.cross_origin_opener_policy", false]], "current_app (in module flask)": [[0, "flask.current_app", false]], "data (flask.cli.scriptinfo attribute)": [[0, "flask.cli.ScriptInfo.data", false]], "data (flask.request property)": [[0, "flask.Request.data", false]], "data (flask.response property)": [[0, "flask.Response.data", false]], "date (flask.request attribute)": [[0, "flask.Request.date", false]], "date (flask.response attribute)": [[0, "flask.Response.date", false]], "debug (built-in variable)": [[6, "DEBUG", false]], "debug (flask.flask property)": [[0, "flask.Flask.debug", false]], "decorators (flask.views.view attribute)": [[0, "flask.views.View.decorators", false]], "default() (flask.json.provider.defaultjsonprovider static method)": [[0, "flask.json.provider.DefaultJSONProvider.default", false]], "default_mimetype (flask.response attribute)": [[0, "flask.Response.default_mimetype", false]], "default_status (flask.response attribute)": [[0, "flask.Response.default_status", false]], "default_tags (flask.json.tag.taggedjsonserializer attribute)": [[0, "flask.json.tag.TaggedJSONSerializer.default_tags", false]], "defaultjsonprovider (class in flask.json.provider)": [[0, "flask.json.provider.DefaultJSONProvider", false]], "delete() (flask.blueprint method)": [[0, "flask.Blueprint.delete", false]], "delete() (flask.flask method)": [[0, "flask.Flask.delete", false]], "delete_cookie() (flask.response method)": [[0, "flask.Response.delete_cookie", false]], "dict_storage_class (flask.request attribute)": [[0, "flask.Request.dict_storage_class", false]], "digest_method() (flask.sessions.securecookiesessioninterface static method)": [[0, "flask.sessions.SecureCookieSessionInterface.digest_method", false]], "direct_passthrough (flask.response attribute)": [[0, "flask.Response.direct_passthrough", false]], "dispatch_request() (flask.flask method)": [[0, "flask.Flask.dispatch_request", false]], "dispatch_request() (flask.views.methodview method)": [[0, "flask.views.MethodView.dispatch_request", false]], "dispatch_request() (flask.views.view method)": [[0, "flask.views.View.dispatch_request", false]], "do_teardown_appcontext() (flask.flask method)": [[0, "flask.Flask.do_teardown_appcontext", false]], "do_teardown_request() (flask.flask method)": [[0, "flask.Flask.do_teardown_request", false]], "dump() (flask.json.provider.jsonprovider method)": [[0, "flask.json.provider.JSONProvider.dump", false]], "dump() (in module flask.json)": [[0, "flask.json.dump", false]], "dumps() (flask.json.provider.defaultjsonprovider method)": [[0, "flask.json.provider.DefaultJSONProvider.dumps", false]], "dumps() (flask.json.provider.jsonprovider method)": [[0, "flask.json.provider.JSONProvider.dumps", false]], "dumps() (flask.json.tag.taggedjsonserializer method)": [[0, "flask.json.tag.TaggedJSONSerializer.dumps", false]], "dumps() (in module flask.json)": [[0, "flask.json.dumps", false]], "endpoint (flask.request property)": [[0, "flask.Request.endpoint", false]], "endpoint() (flask.blueprint method)": [[0, "flask.Blueprint.endpoint", false]], "endpoint() (flask.flask method)": [[0, "flask.Flask.endpoint", false]], "ensure_ascii (flask.json.provider.defaultjsonprovider attribute)": [[0, "flask.json.provider.DefaultJSONProvider.ensure_ascii", false]], "ensure_sync() (flask.flask method)": [[0, "flask.Flask.ensure_sync", false]], "environ (flask.request attribute)": [[0, "flask.Request.environ", false]], "environment variable": [[0, "index-0", false], [6, "index-0", false], [6, "index-1", false]], "error_handler_spec (flask.blueprint attribute)": [[0, "flask.Blueprint.error_handler_spec", false]], "error_handler_spec (flask.flask attribute)": [[0, "flask.Flask.error_handler_spec", false]], "errorhandler() (flask.blueprint method)": [[0, "flask.Blueprint.errorhandler", false]], "errorhandler() (flask.flask method)": [[0, "flask.Flask.errorhandler", false]], "expires (flask.response attribute)": [[0, "flask.Response.expires", false]], "explain_template_loading (built-in variable)": [[6, "EXPLAIN_TEMPLATE_LOADING", false]], "extensions (flask.flask attribute)": [[0, "flask.Flask.extensions", false]], "files (flask.request property)": [[0, "flask.Request.files", false]], "first_registration (flask.blueprints.blueprintsetupstate attribute)": [[0, "flask.blueprints.BlueprintSetupState.first_registration", false]], "flash() (in module flask)": [[0, "flask.flash", false]], "flask": [[0, "module-flask", false]], "flask (class in flask)": [[0, "flask.Flask", false]], "flask.globals.app_ctx (in module flask)": [[0, "flask.flask.globals.app_ctx", false]], "flask.globals.request_ctx (in module flask)": [[0, "flask.flask.globals.request_ctx", false]], "flask.json": [[0, "module-flask.json", false]], "flask.json.tag": [[0, "module-flask.json.tag", false]], "flask_debug": [[0, "index-0", false]], "flask_env": [[6, "index-0", false]], "flaskclient (class in flask.testing)": [[0, "flask.testing.FlaskClient", false]], "flaskclirunner (class in flask.testing)": [[0, "flask.testing.FlaskCliRunner", false]], "flaskgroup (class in flask.cli)": [[0, "flask.cli.FlaskGroup", false]], "force_type() (flask.response class method)": [[0, "flask.Response.force_type", false]], "form (flask.request property)": [[0, "flask.Request.form", false]], "form_data_parser_class (flask.request attribute)": [[0, "flask.Request.form_data_parser_class", false]], "freeze() (flask.response method)": [[0, "flask.Response.freeze", false]], "from_app() (flask.response class method)": [[0, "flask.Response.from_app", false]], "from_envvar() (flask.config method)": [[0, "flask.Config.from_envvar", false]], "from_file() (flask.config method)": [[0, "flask.Config.from_file", false]], "from_mapping() (flask.config method)": [[0, "flask.Config.from_mapping", false]], "from_object() (flask.config method)": [[0, "flask.Config.from_object", false]], "from_prefixed_env() (flask.config method)": [[0, "flask.Config.from_prefixed_env", false]], "from_pyfile() (flask.config method)": [[0, "flask.Config.from_pyfile", false]], "from_values() (flask.request class method)": [[0, "flask.Request.from_values", false]], "full_dispatch_request() (flask.flask method)": [[0, "flask.Flask.full_dispatch_request", false]], "full_path (flask.request property)": [[0, "flask.Request.full_path", false]], "g (in module flask)": [[0, "flask.g", false]], "get() (flask.blueprint method)": [[0, "flask.Blueprint.get", false]], "get() (flask.ctx._appctxglobals method)": [[0, "flask.ctx._AppCtxGlobals.get", false]], "get() (flask.flask method)": [[0, "flask.Flask.get", false]], "get() (flask.sessions.securecookiesession method)": [[0, "flask.sessions.SecureCookieSession.get", false]], "get_app_iter() (flask.response method)": [[0, "flask.Response.get_app_iter", false]], "get_command() (flask.cli.flaskgroup method)": [[0, "flask.cli.FlaskGroup.get_command", false]], "get_cookie_domain() (flask.sessions.sessioninterface method)": [[0, "flask.sessions.SessionInterface.get_cookie_domain", false]], "get_cookie_httponly() (flask.sessions.sessioninterface method)": [[0, "flask.sessions.SessionInterface.get_cookie_httponly", false]], "get_cookie_name() (flask.sessions.sessioninterface method)": [[0, "flask.sessions.SessionInterface.get_cookie_name", false]], "get_cookie_partitioned() (flask.sessions.sessioninterface method)": [[0, "flask.sessions.SessionInterface.get_cookie_partitioned", false]], "get_cookie_path() (flask.sessions.sessioninterface method)": [[0, "flask.sessions.SessionInterface.get_cookie_path", false]], "get_cookie_samesite() (flask.sessions.sessioninterface method)": [[0, "flask.sessions.SessionInterface.get_cookie_samesite", false]], "get_cookie_secure() (flask.sessions.sessioninterface method)": [[0, "flask.sessions.SessionInterface.get_cookie_secure", false]], "get_data() (flask.request method)": [[0, "flask.Request.get_data", false]], "get_data() (flask.response method)": [[0, "flask.Response.get_data", false]], "get_etag() (flask.response method)": [[0, "flask.Response.get_etag", false]], "get_expiration_time() (flask.sessions.sessioninterface method)": [[0, "flask.sessions.SessionInterface.get_expiration_time", false]], "get_flashed_messages() (in module flask)": [[0, "flask.get_flashed_messages", false]], "get_json() (flask.request method)": [[0, "flask.Request.get_json", false]], "get_json() (flask.response method)": [[0, "flask.Response.get_json", false]], "get_namespace() (flask.config method)": [[0, "flask.Config.get_namespace", false]], "get_send_file_max_age() (flask.blueprint method)": [[0, "flask.Blueprint.get_send_file_max_age", false]], "get_send_file_max_age() (flask.flask method)": [[0, "flask.Flask.get_send_file_max_age", false]], "get_template_attribute() (in module flask)": [[0, "flask.get_template_attribute", false]], "get_wsgi_headers() (flask.response method)": [[0, "flask.Response.get_wsgi_headers", false]], "get_wsgi_response() (flask.response method)": [[0, "flask.Response.get_wsgi_response", false]], "got_request_exception (in module flask)": [[0, "flask.got_request_exception", false]], "group() (flask.cli.appgroup method)": [[0, "flask.cli.AppGroup.group", false]], "handle_exception() (flask.flask method)": [[0, "flask.Flask.handle_exception", false]], "handle_http_exception() (flask.flask method)": [[0, "flask.Flask.handle_http_exception", false]], "handle_url_build_error() (flask.flask method)": [[0, "flask.Flask.handle_url_build_error", false]], "handle_user_exception() (flask.flask method)": [[0, "flask.Flask.handle_user_exception", false]], "has_app_context() (in module flask)": [[0, "flask.has_app_context", false]], "has_request_context() (in module flask)": [[0, "flask.has_request_context", false]], "has_static_folder (flask.blueprint property)": [[0, "flask.Blueprint.has_static_folder", false]], "has_static_folder (flask.flask property)": [[0, "flask.Flask.has_static_folder", false]], "headers (flask.request attribute)": [[0, "flask.Request.headers", false]], "host (flask.request property)": [[0, "flask.Request.host", false]], "host_url (flask.request property)": [[0, "flask.Request.host_url", false]], "if_match (flask.request property)": [[0, "flask.Request.if_match", false]], "if_modified_since (flask.request property)": [[0, "flask.Request.if_modified_since", false]], "if_none_match (flask.request property)": [[0, "flask.Request.if_none_match", false]], "if_range (flask.request property)": [[0, "flask.Request.if_range", false]], "if_unmodified_since (flask.request property)": [[0, "flask.Request.if_unmodified_since", false]], "implicit_sequence_conversion (flask.response attribute)": [[0, "flask.Response.implicit_sequence_conversion", false]], "import_name (flask.blueprint attribute)": [[0, "flask.Blueprint.import_name", false]], "import_name (flask.flask attribute)": [[0, "flask.Flask.import_name", false]], "init_every_request (flask.views.view attribute)": [[0, "flask.views.View.init_every_request", false]], "inject_url_defaults() (flask.flask method)": [[0, "flask.Flask.inject_url_defaults", false]], "input_stream (flask.request attribute)": [[0, "flask.Request.input_stream", false]], "instance_path (flask.flask attribute)": [[0, "flask.Flask.instance_path", false]], "invoke() (flask.testing.flaskclirunner method)": [[0, "flask.testing.FlaskCliRunner.invoke", false]], "is_json (flask.request property)": [[0, "flask.Request.is_json", false]], "is_json (flask.response property)": [[0, "flask.Response.is_json", false]], "is_multiprocess (flask.request attribute)": [[0, "flask.Request.is_multiprocess", false]], "is_multithread (flask.request attribute)": [[0, "flask.Request.is_multithread", false]], "is_null_session() (flask.sessions.sessioninterface method)": [[0, "flask.sessions.SessionInterface.is_null_session", false]], "is_run_once (flask.request attribute)": [[0, "flask.Request.is_run_once", false]], "is_secure (flask.request property)": [[0, "flask.Request.is_secure", false]], "is_sequence (flask.response property)": [[0, "flask.Response.is_sequence", false]], "is_streamed (flask.response property)": [[0, "flask.Response.is_streamed", false]], "iter_blueprints() (flask.flask method)": [[0, "flask.Flask.iter_blueprints", false]], "iter_encoded() (flask.response method)": [[0, "flask.Response.iter_encoded", false]], "jinja_env (flask.flask property)": [[0, "flask.Flask.jinja_env", false]], "jinja_environment (flask.flask attribute)": [[0, "flask.Flask.jinja_environment", false]], "jinja_loader (flask.blueprint property)": [[0, "flask.Blueprint.jinja_loader", false]], "jinja_loader (flask.flask property)": [[0, "flask.Flask.jinja_loader", false]], "jinja_options (flask.flask attribute)": [[0, "flask.Flask.jinja_options", false]], "json (flask.flask attribute)": [[0, "flask.Flask.json", false]], "json (flask.request property)": [[0, "flask.Request.json", false]], "json (flask.response property)": [[0, "flask.Response.json", false]], "json_provider_class (flask.flask attribute)": [[0, "flask.Flask.json_provider_class", false]], "jsonify() (in module flask.json)": [[0, "flask.json.jsonify", false]], "jsonprovider (class in flask.json.provider)": [[0, "flask.json.provider.JSONProvider", false]], "jsontag (class in flask.json.tag)": [[0, "flask.json.tag.JSONTag", false]], "key (flask.json.tag.jsontag attribute)": [[0, "flask.json.tag.JSONTag.key", false]], "key_derivation (flask.sessions.securecookiesessioninterface attribute)": [[0, "flask.sessions.SecureCookieSessionInterface.key_derivation", false]], "last_modified (flask.response attribute)": [[0, "flask.Response.last_modified", false]], "list_commands() (flask.cli.flaskgroup method)": [[0, "flask.cli.FlaskGroup.list_commands", false]], "list_storage_class (flask.request attribute)": [[0, "flask.Request.list_storage_class", false]], "load() (flask.json.provider.jsonprovider method)": [[0, "flask.json.provider.JSONProvider.load", false]], "load() (in module flask.json)": [[0, "flask.json.load", false]], "load_app() (flask.cli.scriptinfo method)": [[0, "flask.cli.ScriptInfo.load_app", false]], "load_dotenv() (in module flask.cli)": [[0, "flask.cli.load_dotenv", false]], "load_dotenv_defaults (flask.cli.scriptinfo attribute)": [[0, "flask.cli.ScriptInfo.load_dotenv_defaults", false]], "loads() (flask.json.provider.defaultjsonprovider method)": [[0, "flask.json.provider.DefaultJSONProvider.loads", false]], "loads() (flask.json.provider.jsonprovider method)": [[0, "flask.json.provider.JSONProvider.loads", false]], "loads() (flask.json.tag.taggedjsonserializer method)": [[0, "flask.json.tag.TaggedJSONSerializer.loads", false]], "loads() (in module flask.json)": [[0, "flask.json.loads", false]], "location (flask.response attribute)": [[0, "flask.Response.location", false]], "log_exception() (flask.flask method)": [[0, "flask.Flask.log_exception", false]], "logger (flask.flask property)": [[0, "flask.Flask.logger", false]], "make_aborter() (flask.flask method)": [[0, "flask.Flask.make_aborter", false]], "make_conditional() (flask.response method)": [[0, "flask.Response.make_conditional", false]], "make_config() (flask.flask method)": [[0, "flask.Flask.make_config", false]], "make_context() (flask.cli.flaskgroup method)": [[0, "flask.cli.FlaskGroup.make_context", false]], "make_default_options_response() (flask.flask method)": [[0, "flask.Flask.make_default_options_response", false]], "make_form_data_parser() (flask.request method)": [[0, "flask.Request.make_form_data_parser", false]], "make_null_session() (flask.sessions.sessioninterface method)": [[0, "flask.sessions.SessionInterface.make_null_session", false]], "make_response() (flask.flask method)": [[0, "flask.Flask.make_response", false]], "make_response() (in module flask)": [[0, "flask.make_response", false]], "make_sequence() (flask.response method)": [[0, "flask.Response.make_sequence", false]], "make_setup_state() (flask.blueprint method)": [[0, "flask.Blueprint.make_setup_state", false]], "make_shell_context() (flask.flask method)": [[0, "flask.Flask.make_shell_context", false]], "match_request() (flask.ctx.requestcontext method)": [[0, "flask.ctx.RequestContext.match_request", false]], "max_content_length (built-in variable)": [[6, "MAX_CONTENT_LENGTH", false]], "max_content_length (flask.request property)": [[0, "flask.Request.max_content_length", false]], "max_cookie_size (built-in variable)": [[6, "MAX_COOKIE_SIZE", false]], "max_cookie_size (flask.response property)": [[0, "flask.Response.max_cookie_size", false]], "max_form_memory_size (built-in variable)": [[6, "MAX_FORM_MEMORY_SIZE", false]], "max_form_memory_size (flask.request property)": [[0, "flask.Request.max_form_memory_size", false]], "max_form_parts (built-in variable)": [[6, "MAX_FORM_PARTS", false]], "max_form_parts (flask.request property)": [[0, "flask.Request.max_form_parts", false]], "max_forwards (flask.request attribute)": [[0, "flask.Request.max_forwards", false]], "message_flashed (in module flask)": [[0, "flask.message_flashed", false]], "method (flask.request attribute)": [[0, "flask.Request.method", false]], "methods (flask.views.view attribute)": [[0, "flask.views.View.methods", false]], "methodview (class in flask.views)": [[0, "flask.views.MethodView", false]], "mimetype (flask.json.provider.defaultjsonprovider attribute)": [[0, "flask.json.provider.DefaultJSONProvider.mimetype", false]], "mimetype (flask.request property)": [[0, "flask.Request.mimetype", false]], "mimetype (flask.response property)": [[0, "flask.Response.mimetype", false]], "mimetype_params (flask.request property)": [[0, "flask.Request.mimetype_params", false]], "mimetype_params (flask.response property)": [[0, "flask.Response.mimetype_params", false]], "modified (flask.session attribute)": [[0, "flask.session.modified", false]], "modified (flask.sessions.securecookiesession attribute)": [[0, "flask.sessions.SecureCookieSession.modified", false]], "modified (flask.sessions.sessionmixin attribute)": [[0, "flask.sessions.SessionMixin.modified", false]], "module": [[0, "module-flask", false], [0, "module-flask.json", false], [0, "module-flask.json.tag", false]], "name (flask.flask property)": [[0, "flask.Flask.name", false]], "new (flask.session attribute)": [[0, "flask.session.new", false]], "null_session_class (flask.sessions.sessioninterface attribute)": [[0, "flask.sessions.SessionInterface.null_session_class", false]], "nullsession (class in flask.sessions)": [[0, "flask.sessions.NullSession", false]], "on_json_loading_failed() (flask.request method)": [[0, "flask.Request.on_json_loading_failed", false]], "open() (flask.testing.flaskclient method)": [[0, "flask.testing.FlaskClient.open", false]], "open_instance_resource() (flask.flask method)": [[0, "flask.Flask.open_instance_resource", false]], "open_resource() (flask.blueprint method)": [[0, "flask.Blueprint.open_resource", false]], "open_resource() (flask.flask method)": [[0, "flask.Flask.open_resource", false]], "open_session() (flask.sessions.securecookiesessioninterface method)": [[0, "flask.sessions.SecureCookieSessionInterface.open_session", false]], "open_session() (flask.sessions.sessioninterface method)": [[0, "flask.sessions.SessionInterface.open_session", false]], "options (flask.blueprints.blueprintsetupstate attribute)": [[0, "flask.blueprints.BlueprintSetupState.options", false]], "origin (flask.request attribute)": [[0, "flask.Request.origin", false]], "parameter_storage_class (flask.request attribute)": [[0, "flask.Request.parameter_storage_class", false]], "parse_args() (flask.cli.flaskgroup method)": [[0, "flask.cli.FlaskGroup.parse_args", false]], "pass_script_info() (in module flask.cli)": [[0, "flask.cli.pass_script_info", false]], "patch() (flask.blueprint method)": [[0, "flask.Blueprint.patch", false]], "patch() (flask.flask method)": [[0, "flask.Flask.patch", false]], "path (flask.request attribute)": [[0, "flask.Request.path", false]], "pep 302": [[4, "index-5", false]], "pep 3333": [[4, "index-2", false], [27, "index-0", false]], "pep 451": [[4, "index-1", false]], "pep 519": [[4, "index-0", false]], "permanent (flask.session attribute)": [[0, "flask.session.permanent", false]], "permanent (flask.sessions.sessionmixin property)": [[0, "flask.sessions.SessionMixin.permanent", false]], "permanent_session_lifetime (built-in variable)": [[6, "PERMANENT_SESSION_LIFETIME", false]], "permanent_session_lifetime (flask.flask attribute)": [[0, "flask.Flask.permanent_session_lifetime", false]], "pickle_based (flask.sessions.sessioninterface attribute)": [[0, "flask.sessions.SessionInterface.pickle_based", false]], "pop() (flask.ctx._appctxglobals method)": [[0, "flask.ctx._AppCtxGlobals.pop", false]], "pop() (flask.ctx.appcontext method)": [[0, "flask.ctx.AppContext.pop", false]], "pop() (flask.ctx.requestcontext method)": [[0, "flask.ctx.RequestContext.pop", false]], "pop() (flask.sessions.nullsession method)": [[0, "flask.sessions.NullSession.pop", false]], "popitem() (flask.sessions.nullsession method)": [[0, "flask.sessions.NullSession.popitem", false]], "post() (flask.blueprint method)": [[0, "flask.Blueprint.post", false]], "post() (flask.flask method)": [[0, "flask.Flask.post", false]], "pragma (flask.request property)": [[0, "flask.Request.pragma", false]], "preferred_url_scheme (built-in variable)": [[6, "PREFERRED_URL_SCHEME", false]], "preprocess_request() (flask.flask method)": [[0, "flask.Flask.preprocess_request", false]], "process_response() (flask.flask method)": [[0, "flask.Flask.process_response", false]], "propagate_exceptions (built-in variable)": [[6, "PROPAGATE_EXCEPTIONS", false]], "provide_automatic_options (built-in variable)": [[6, "PROVIDE_AUTOMATIC_OPTIONS", false]], "provide_automatic_options (flask.views.view attribute)": [[0, "flask.views.View.provide_automatic_options", false]], "push() (flask.ctx.appcontext method)": [[0, "flask.ctx.AppContext.push", false]], "put() (flask.blueprint method)": [[0, "flask.Blueprint.put", false]], "put() (flask.flask method)": [[0, "flask.Flask.put", false]], "python enhancement proposals": [[4, "index-0", false], [4, "index-1", false], [4, "index-2", false], [4, "index-5", false], [27, "index-0", false]], "query_string (flask.request attribute)": [[0, "flask.Request.query_string", false]], "range (flask.request property)": [[0, "flask.Request.range", false]], "record() (flask.blueprint method)": [[0, "flask.Blueprint.record", false]], "record_once() (flask.blueprint method)": [[0, "flask.Blueprint.record_once", false]], "redirect() (flask.flask method)": [[0, "flask.Flask.redirect", false]], "redirect() (in module flask)": [[0, "flask.redirect", false]], "referrer (flask.request attribute)": [[0, "flask.Request.referrer", false]], "register() (flask.blueprint method)": [[0, "flask.Blueprint.register", false]], "register() (flask.json.tag.taggedjsonserializer method)": [[0, "flask.json.tag.TaggedJSONSerializer.register", false]], "register_blueprint() (flask.blueprint method)": [[0, "flask.Blueprint.register_blueprint", false]], "register_blueprint() (flask.flask method)": [[0, "flask.Flask.register_blueprint", false]], "register_error_handler() (flask.blueprint method)": [[0, "flask.Blueprint.register_error_handler", false]], "register_error_handler() (flask.flask method)": [[0, "flask.Flask.register_error_handler", false]], "remote_addr (flask.request attribute)": [[0, "flask.Request.remote_addr", false]], "remote_user (flask.request attribute)": [[0, "flask.Request.remote_user", false]], "render_template() (in module flask)": [[0, "flask.render_template", false]], "render_template_string() (in module flask)": [[0, "flask.render_template_string", false]], "request (class in flask)": [[0, "flask.Request", false]], "request (in module flask)": [[0, "flask.request", false]], "request_class (flask.flask attribute)": [[0, "flask.Flask.request_class", false]], "request_context() (flask.flask method)": [[0, "flask.Flask.request_context", false]], "request_finished (in module flask)": [[0, "flask.request_finished", false]], "request_started (in module flask)": [[0, "flask.request_started", false]], "request_tearing_down (in module flask)": [[0, "flask.request_tearing_down", false]], "requestcontext (class in flask.ctx)": [[0, "flask.ctx.RequestContext", false]], "response (class in flask)": [[0, "flask.Response", false]], "response (flask.response attribute)": [[0, "flask.Response.response", false]], "response() (flask.json.provider.defaultjsonprovider method)": [[0, "flask.json.provider.DefaultJSONProvider.response", false]], "response() (flask.json.provider.jsonprovider method)": [[0, "flask.json.provider.JSONProvider.response", false]], "response_class (flask.flask attribute)": [[0, "flask.Flask.response_class", false]], "retry_after (flask.response property)": [[0, "flask.Response.retry_after", false]], "rfc": [[0, "index-1", false], [0, "index-2", false], [4, "index-3", false], [4, "index-4", false]], "rfc 2231": [[0, "index-1", false]], "rfc 822": [[0, "index-2", false]], "rfc 8259": [[4, "index-3", false], [4, "index-4", false]], "root_path (flask.blueprint attribute)": [[0, "flask.Blueprint.root_path", false]], "root_path (flask.flask attribute)": [[0, "flask.Flask.root_path", false]], "root_path (flask.request attribute)": [[0, "flask.Request.root_path", false]], "root_url (flask.request property)": [[0, "flask.Request.root_url", false]], "route() (flask.blueprint method)": [[0, "flask.Blueprint.route", false]], "route() (flask.flask method)": [[0, "flask.Flask.route", false]], "routing_exception (flask.request attribute)": [[0, "flask.Request.routing_exception", false]], "run() (flask.flask method)": [[0, "flask.Flask.run", false]], "run_command (in module flask.cli)": [[0, "flask.cli.run_command", false]], "salt (flask.sessions.securecookiesessioninterface attribute)": [[0, "flask.sessions.SecureCookieSessionInterface.salt", false]], "save_session() (flask.sessions.securecookiesessioninterface method)": [[0, "flask.sessions.SecureCookieSessionInterface.save_session", false]], "save_session() (flask.sessions.sessioninterface method)": [[0, "flask.sessions.SessionInterface.save_session", false]], "scheme (flask.request attribute)": [[0, "flask.Request.scheme", false]], "script_root (flask.request property)": [[0, "flask.Request.script_root", false]], "scriptinfo (class in flask.cli)": [[0, "flask.cli.ScriptInfo", false]], "secret_key (built-in variable)": [[6, "SECRET_KEY", false]], "secret_key (flask.flask attribute)": [[0, "flask.Flask.secret_key", false]], "secret_key_fallbacks (built-in variable)": [[6, "SECRET_KEY_FALLBACKS", false]], "securecookiesession (class in flask.sessions)": [[0, "flask.sessions.SecureCookieSession", false]], "securecookiesessioninterface (class in flask.sessions)": [[0, "flask.sessions.SecureCookieSessionInterface", false]], "select_jinja_autoescape() (flask.flask method)": [[0, "flask.Flask.select_jinja_autoescape", false]], "send_file() (in module flask)": [[0, "flask.send_file", false]], "send_file_max_age_default (built-in variable)": [[6, "SEND_FILE_MAX_AGE_DEFAULT", false]], "send_from_directory() (in module flask)": [[0, "flask.send_from_directory", false]], "send_static_file() (flask.blueprint method)": [[0, "flask.Blueprint.send_static_file", false]], "send_static_file() (flask.flask method)": [[0, "flask.Flask.send_static_file", false]], "serializer (flask.sessions.securecookiesessioninterface attribute)": [[0, "flask.sessions.SecureCookieSessionInterface.serializer", false]], "server (flask.request attribute)": [[0, "flask.Request.server", false]], "server_name (built-in variable)": [[6, "SERVER_NAME", false]], "session (class in flask)": [[0, "flask.session", false]], "session_class (flask.sessions.securecookiesessioninterface attribute)": [[0, "flask.sessions.SecureCookieSessionInterface.session_class", false]], "session_cookie_domain (built-in variable)": [[6, "SESSION_COOKIE_DOMAIN", false]], "session_cookie_httponly (built-in variable)": [[6, "SESSION_COOKIE_HTTPONLY", false]], "session_cookie_name (built-in variable)": [[6, "SESSION_COOKIE_NAME", false]], "session_cookie_partitioned (built-in variable)": [[6, "SESSION_COOKIE_PARTITIONED", false]], "session_cookie_path (built-in variable)": [[6, "SESSION_COOKIE_PATH", false]], "session_cookie_samesite (built-in variable)": [[6, "SESSION_COOKIE_SAMESITE", false]], "session_cookie_secure (built-in variable)": [[6, "SESSION_COOKIE_SECURE", false]], "session_interface (flask.flask attribute)": [[0, "flask.Flask.session_interface", false]], "session_refresh_each_request (built-in variable)": [[6, "SESSION_REFRESH_EACH_REQUEST", false]], "session_transaction() (flask.testing.flaskclient method)": [[0, "flask.testing.FlaskClient.session_transaction", false]], "sessioninterface (class in flask.sessions)": [[0, "flask.sessions.SessionInterface", false]], "sessionmixin (class in flask.sessions)": [[0, "flask.sessions.SessionMixin", false]], "set_cookie() (flask.response method)": [[0, "flask.Response.set_cookie", false]], "set_data() (flask.response method)": [[0, "flask.Response.set_data", false]], "set_etag() (flask.response method)": [[0, "flask.Response.set_etag", false]], "setdefault() (flask.ctx._appctxglobals method)": [[0, "flask.ctx._AppCtxGlobals.setdefault", false]], "setdefault() (flask.sessions.nullsession method)": [[0, "flask.sessions.NullSession.setdefault", false]], "setdefault() (flask.sessions.securecookiesession method)": [[0, "flask.sessions.SecureCookieSession.setdefault", false]], "shallow (flask.request attribute)": [[0, "flask.Request.shallow", false]], "shell_command (in module flask.cli)": [[0, "flask.cli.shell_command", false]], "shell_context_processor() (flask.flask method)": [[0, "flask.Flask.shell_context_processor", false]], "shell_context_processors (flask.flask attribute)": [[0, "flask.Flask.shell_context_processors", false]], "should_ignore_error() (flask.flask method)": [[0, "flask.Flask.should_ignore_error", false]], "should_set_cookie() (flask.sessions.sessioninterface method)": [[0, "flask.sessions.SessionInterface.should_set_cookie", false]], "sort_keys (flask.json.provider.defaultjsonprovider attribute)": [[0, "flask.json.provider.DefaultJSONProvider.sort_keys", false]], "static_folder (flask.blueprint property)": [[0, "flask.Blueprint.static_folder", false]], "static_folder (flask.flask property)": [[0, "flask.Flask.static_folder", false]], "static_url_path (flask.blueprint property)": [[0, "flask.Blueprint.static_url_path", false]], "static_url_path (flask.flask property)": [[0, "flask.Flask.static_url_path", false]], "status (flask.response property)": [[0, "flask.Response.status", false]], "status_code (flask.response property)": [[0, "flask.Response.status_code", false]], "stream (flask.request property)": [[0, "flask.Request.stream", false]], "stream (flask.response property)": [[0, "flask.Response.stream", false]], "stream_template() (in module flask)": [[0, "flask.stream_template", false]], "stream_template_string() (in module flask)": [[0, "flask.stream_template_string", false]], "stream_with_context() (in module flask)": [[0, "flask.stream_with_context", false]], "subdomain (flask.blueprints.blueprintsetupstate attribute)": [[0, "flask.blueprints.BlueprintSetupState.subdomain", false]], "tag() (flask.json.tag.jsontag method)": [[0, "flask.json.tag.JSONTag.tag", false]], "tag() (flask.json.tag.taggedjsonserializer method)": [[0, "flask.json.tag.TaggedJSONSerializer.tag", false]], "taggedjsonserializer (class in flask.json.tag)": [[0, "flask.json.tag.TaggedJSONSerializer", false]], "teardown_app_request() (flask.blueprint method)": [[0, "flask.Blueprint.teardown_app_request", false]], "teardown_appcontext() (flask.flask method)": [[0, "flask.Flask.teardown_appcontext", false]], "teardown_appcontext_funcs (flask.flask attribute)": [[0, "flask.Flask.teardown_appcontext_funcs", false]], "teardown_request() (flask.blueprint method)": [[0, "flask.Blueprint.teardown_request", false]], "teardown_request() (flask.flask method)": [[0, "flask.Flask.teardown_request", false]], "teardown_request_funcs (flask.blueprint attribute)": [[0, "flask.Blueprint.teardown_request_funcs", false]], "teardown_request_funcs (flask.flask attribute)": [[0, "flask.Flask.teardown_request_funcs", false]], "template_context_processors (flask.blueprint attribute)": [[0, "flask.Blueprint.template_context_processors", false]], "template_context_processors (flask.flask attribute)": [[0, "flask.Flask.template_context_processors", false]], "template_filter() (flask.flask method)": [[0, "flask.Flask.template_filter", false]], "template_folder (flask.blueprint attribute)": [[0, "flask.Blueprint.template_folder", false]], "template_folder (flask.flask attribute)": [[0, "flask.Flask.template_folder", false]], "template_global() (flask.flask method)": [[0, "flask.Flask.template_global", false]], "template_rendered (in module flask)": [[0, "flask.template_rendered", false]], "template_test() (flask.flask method)": [[0, "flask.Flask.template_test", false]], "templates_auto_reload (built-in variable)": [[6, "TEMPLATES_AUTO_RELOAD", false]], "test_cli_runner() (flask.flask method)": [[0, "flask.Flask.test_cli_runner", false]], "test_cli_runner_class (flask.flask attribute)": [[0, "flask.Flask.test_cli_runner_class", false]], "test_client() (flask.flask method)": [[0, "flask.Flask.test_client", false]], "test_client_class (flask.flask attribute)": [[0, "flask.Flask.test_client_class", false]], "test_request_context() (flask.flask method)": [[0, "flask.Flask.test_request_context", false]], "testing (built-in variable)": [[6, "TESTING", false]], "testing (flask.flask attribute)": [[0, "flask.Flask.testing", false]], "to_json() (flask.json.tag.jsontag method)": [[0, "flask.json.tag.JSONTag.to_json", false]], "to_python() (flask.json.tag.jsontag method)": [[0, "flask.json.tag.JSONTag.to_python", false]], "trap_bad_request_errors (built-in variable)": [[6, "TRAP_BAD_REQUEST_ERRORS", false]], "trap_http_exception() (flask.flask method)": [[0, "flask.Flask.trap_http_exception", false]], "trap_http_exceptions (built-in variable)": [[6, "TRAP_HTTP_EXCEPTIONS", false]], "trusted_hosts (built-in variable)": [[6, "TRUSTED_HOSTS", false]], "trusted_hosts (flask.request attribute)": [[0, "flask.Request.trusted_hosts", false]], "untag() (flask.json.tag.taggedjsonserializer method)": [[0, "flask.json.tag.TaggedJSONSerializer.untag", false]], "update() (flask.sessions.nullsession method)": [[0, "flask.sessions.NullSession.update", false]], "update_template_context() (flask.flask method)": [[0, "flask.Flask.update_template_context", false]], "url (flask.request property)": [[0, "flask.Request.url", false]], "url_build_error_handlers (flask.flask attribute)": [[0, "flask.Flask.url_build_error_handlers", false]], "url_default_functions (flask.blueprint attribute)": [[0, "flask.Blueprint.url_default_functions", false]], "url_default_functions (flask.flask attribute)": [[0, "flask.Flask.url_default_functions", false]], "url_defaults (flask.blueprints.blueprintsetupstate attribute)": [[0, "flask.blueprints.BlueprintSetupState.url_defaults", false]], "url_defaults() (flask.blueprint method)": [[0, "flask.Blueprint.url_defaults", false]], "url_defaults() (flask.flask method)": [[0, "flask.Flask.url_defaults", false]], "url_for() (flask.flask method)": [[0, "flask.Flask.url_for", false]], "url_for() (in module flask)": [[0, "flask.url_for", false]], "url_map (flask.flask attribute)": [[0, "flask.Flask.url_map", false]], "url_map_class (flask.flask attribute)": [[0, "flask.Flask.url_map_class", false]], "url_prefix (flask.blueprints.blueprintsetupstate attribute)": [[0, "flask.blueprints.BlueprintSetupState.url_prefix", false]], "url_root (flask.request property)": [[0, "flask.Request.url_root", false]], "url_rule (flask.request attribute)": [[0, "flask.Request.url_rule", false]], "url_rule_class (flask.flask attribute)": [[0, "flask.Flask.url_rule_class", false]], "url_value_preprocessor() (flask.blueprint method)": [[0, "flask.Blueprint.url_value_preprocessor", false]], "url_value_preprocessor() (flask.flask method)": [[0, "flask.Flask.url_value_preprocessor", false]], "url_value_preprocessors (flask.blueprint attribute)": [[0, "flask.Blueprint.url_value_preprocessors", false]], "url_value_preprocessors (flask.flask attribute)": [[0, "flask.Flask.url_value_preprocessors", false]], "use_x_sendfile (built-in variable)": [[6, "USE_X_SENDFILE", false]], "user_agent (flask.request property)": [[0, "flask.Request.user_agent", false]], "user_agent_class (flask.request attribute)": [[0, "flask.Request.user_agent_class", false]], "values (flask.request property)": [[0, "flask.Request.values", false]], "vary (flask.response property)": [[0, "flask.Response.vary", false]], "view (class in flask.views)": [[0, "flask.views.View", false]], "view_args (flask.request attribute)": [[0, "flask.Request.view_args", false]], "view_functions (flask.blueprint attribute)": [[0, "flask.Blueprint.view_functions", false]], "view_functions (flask.flask attribute)": [[0, "flask.Flask.view_functions", false]], "want_form_data_parsed (flask.request property)": [[0, "flask.Request.want_form_data_parsed", false]], "with_appcontext() (in module flask.cli)": [[0, "flask.cli.with_appcontext", false]], "wsgi_app() (flask.flask method)": [[0, "flask.Flask.wsgi_app", false]], "www_authenticate (flask.response property)": [[0, "flask.Response.www_authenticate", false]], "yourapplication_settings": [[6, "index-1", false]]}, "objects": {"": [[6, 0, 1, "", "APPLICATION_ROOT"], [6, 0, 1, "", "DEBUG"], [6, 0, 1, "", "EXPLAIN_TEMPLATE_LOADING"], [6, 0, 1, "", "MAX_CONTENT_LENGTH"], [6, 0, 1, "", "MAX_COOKIE_SIZE"], [6, 0, 1, "", "MAX_FORM_MEMORY_SIZE"], [6, 0, 1, "", "MAX_FORM_PARTS"], [6, 0, 1, "", "PERMANENT_SESSION_LIFETIME"], [6, 0, 1, "", "PREFERRED_URL_SCHEME"], [6, 0, 1, "", "PROPAGATE_EXCEPTIONS"], [6, 0, 1, "", "PROVIDE_AUTOMATIC_OPTIONS"], [6, 0, 1, "", "SECRET_KEY"], [6, 0, 1, "", "SECRET_KEY_FALLBACKS"], [6, 0, 1, "", "SEND_FILE_MAX_AGE_DEFAULT"], [6, 0, 1, "", "SERVER_NAME"], [6, 0, 1, "", "SESSION_COOKIE_DOMAIN"], [6, 0, 1, "", "SESSION_COOKIE_HTTPONLY"], [6, 0, 1, "", "SESSION_COOKIE_NAME"], [6, 0, 1, "", "SESSION_COOKIE_PARTITIONED"], [6, 0, 1, "", "SESSION_COOKIE_PATH"], [6, 0, 1, "", "SESSION_COOKIE_SAMESITE"], [6, 0, 1, "", "SESSION_COOKIE_SECURE"], [6, 0, 1, "", "SESSION_REFRESH_EACH_REQUEST"], [6, 0, 1, "", "TEMPLATES_AUTO_RELOAD"], [6, 0, 1, "", "TESTING"], [6, 0, 1, "", "TRAP_BAD_REQUEST_ERRORS"], [6, 0, 1, "", "TRAP_HTTP_EXCEPTIONS"], [6, 0, 1, "", "TRUSTED_HOSTS"], [6, 0, 1, "", "USE_X_SENDFILE"], [0, 1, 0, "-", "flask"]], "flask": [[0, 2, 1, "", "Blueprint"], [0, 2, 1, "", "Config"], [0, 2, 1, "", "Flask"], [0, 2, 1, "", "Request"], [0, 2, 1, "", "Response"], [0, 6, 1, "", "abort"], [0, 6, 1, "", "after_this_request"], [0, 0, 1, "", "appcontext_popped"], [0, 0, 1, "", "appcontext_pushed"], [0, 0, 1, "", "appcontext_tearing_down"], [0, 6, 1, "", "copy_current_request_context"], [0, 0, 1, "", "current_app"], [0, 6, 1, "", "flash"], [0, 0, 1, "", "g"], [0, 6, 1, "", "get_flashed_messages"], [0, 6, 1, "", "get_template_attribute"], [0, 0, 1, "", "got_request_exception"], [0, 6, 1, "", "has_app_context"], [0, 6, 1, "", "has_request_context"], [0, 1, 0, "-", "json"], [0, 6, 1, "", "make_response"], [0, 0, 1, "", "message_flashed"], [0, 6, 1, "", "redirect"], [0, 6, 1, "", "render_template"], [0, 6, 1, "", "render_template_string"], [0, 4, 1, "", "request"], [0, 0, 1, "", "request_finished"], [0, 0, 1, "", "request_started"], [0, 0, 1, "", "request_tearing_down"], [0, 6, 1, "", "send_file"], [0, 6, 1, "", "send_from_directory"], [0, 2, 1, "", "session"], [0, 6, 1, "", "stream_template"], [0, 6, 1, "", "stream_template_string"], [0, 6, 1, "", "stream_with_context"], [0, 0, 1, "", "template_rendered"], [0, 6, 1, "", "url_for"]], "flask.Blueprint": [[0, 3, 1, "", "add_app_template_filter"], [0, 3, 1, "", "add_app_template_global"], [0, 3, 1, "", "add_app_template_test"], [0, 3, 1, "", "add_url_rule"], [0, 3, 1, "", "after_app_request"], [0, 3, 1, "", "after_request"], [0, 4, 1, "", "after_request_funcs"], [0, 3, 1, "", "app_context_processor"], [0, 3, 1, "", "app_errorhandler"], [0, 3, 1, "", "app_template_filter"], [0, 3, 1, "", "app_template_global"], [0, 3, 1, "", "app_template_test"], [0, 3, 1, "", "app_url_defaults"], [0, 3, 1, "", "app_url_value_preprocessor"], [0, 3, 1, "", "before_app_request"], [0, 3, 1, "", "before_request"], [0, 4, 1, "", "before_request_funcs"], [0, 4, 1, "", "cli"], [0, 3, 1, "", "context_processor"], [0, 3, 1, "", "delete"], [0, 3, 1, "", "endpoint"], [0, 4, 1, "", "error_handler_spec"], [0, 3, 1, "", "errorhandler"], [0, 3, 1, "", "get"], [0, 3, 1, "", "get_send_file_max_age"], [0, 5, 1, "", "has_static_folder"], [0, 4, 1, "", "import_name"], [0, 5, 1, "", "jinja_loader"], [0, 3, 1, "", "make_setup_state"], [0, 3, 1, "", "open_resource"], [0, 3, 1, "", "patch"], [0, 3, 1, "", "post"], [0, 3, 1, "", "put"], [0, 3, 1, "", "record"], [0, 3, 1, "", "record_once"], [0, 3, 1, "", "register"], [0, 3, 1, "", "register_blueprint"], [0, 3, 1, "", "register_error_handler"], [0, 4, 1, "", "root_path"], [0, 3, 1, "", "route"], [0, 3, 1, "", "send_static_file"], [0, 5, 1, "", "static_folder"], [0, 5, 1, "", "static_url_path"], [0, 3, 1, "", "teardown_app_request"], [0, 3, 1, "", "teardown_request"], [0, 4, 1, "", "teardown_request_funcs"], [0, 4, 1, "", "template_context_processors"], [0, 4, 1, "", "template_folder"], [0, 4, 1, "", "url_default_functions"], [0, 3, 1, "", "url_defaults"], [0, 3, 1, "", "url_value_preprocessor"], [0, 4, 1, "", "url_value_preprocessors"], [0, 4, 1, "", "view_functions"]], "flask.Config": [[0, 3, 1, "", "from_envvar"], [0, 3, 1, "", "from_file"], [0, 3, 1, "", "from_mapping"], [0, 3, 1, "", "from_object"], [0, 3, 1, "", "from_prefixed_env"], [0, 3, 1, "", "from_pyfile"], [0, 3, 1, "", "get_namespace"]], "flask.Flask": [[0, 4, 1, "", "aborter"], [0, 4, 1, "", "aborter_class"], [0, 3, 1, "", "add_template_filter"], [0, 3, 1, "", "add_template_global"], [0, 3, 1, "", "add_template_test"], [0, 3, 1, "", "add_url_rule"], [0, 3, 1, "", "after_request"], [0, 4, 1, "", "after_request_funcs"], [0, 3, 1, "", "app_context"], [0, 4, 1, "", "app_ctx_globals_class"], [0, 3, 1, "", "async_to_sync"], [0, 3, 1, "", "auto_find_instance_path"], [0, 3, 1, "", "before_request"], [0, 4, 1, "", "before_request_funcs"], [0, 4, 1, "", "blueprints"], [0, 4, 1, "", "cli"], [0, 4, 1, "", "config"], [0, 4, 1, "", "config_class"], [0, 3, 1, "", "context_processor"], [0, 3, 1, "", "create_global_jinja_loader"], [0, 3, 1, "", "create_jinja_environment"], [0, 3, 1, "", "create_url_adapter"], [0, 5, 1, "", "debug"], [0, 3, 1, "", "delete"], [0, 3, 1, "", "dispatch_request"], [0, 3, 1, "", "do_teardown_appcontext"], [0, 3, 1, "", "do_teardown_request"], [0, 3, 1, "", "endpoint"], [0, 3, 1, "", "ensure_sync"], [0, 4, 1, "", "error_handler_spec"], [0, 3, 1, "", "errorhandler"], [0, 4, 1, "", "extensions"], [0, 3, 1, "", "full_dispatch_request"], [0, 3, 1, "", "get"], [0, 3, 1, "", "get_send_file_max_age"], [0, 3, 1, "", "handle_exception"], [0, 3, 1, "", "handle_http_exception"], [0, 3, 1, "", "handle_url_build_error"], [0, 3, 1, "", "handle_user_exception"], [0, 5, 1, "", "has_static_folder"], [0, 4, 1, "", "import_name"], [0, 3, 1, "", "inject_url_defaults"], [0, 4, 1, "", "instance_path"], [0, 3, 1, "", "iter_blueprints"], [0, 5, 1, "", "jinja_env"], [0, 4, 1, "", "jinja_environment"], [0, 5, 1, "", "jinja_loader"], [0, 4, 1, "", "jinja_options"], [0, 4, 1, "", "json"], [0, 4, 1, "", "json_provider_class"], [0, 3, 1, "", "log_exception"], [0, 5, 1, "", "logger"], [0, 3, 1, "", "make_aborter"], [0, 3, 1, "", "make_config"], [0, 3, 1, "", "make_default_options_response"], [0, 3, 1, "", "make_response"], [0, 3, 1, "", "make_shell_context"], [0, 5, 1, "", "name"], [0, 3, 1, "", "open_instance_resource"], [0, 3, 1, "", "open_resource"], [0, 3, 1, "", "patch"], [0, 4, 1, "", "permanent_session_lifetime"], [0, 3, 1, "", "post"], [0, 3, 1, "", "preprocess_request"], [0, 3, 1, "", "process_response"], [0, 3, 1, "", "put"], [0, 3, 1, "", "redirect"], [0, 3, 1, "", "register_blueprint"], [0, 3, 1, "", "register_error_handler"], [0, 4, 1, "", "request_class"], [0, 3, 1, "", "request_context"], [0, 4, 1, "", "response_class"], [0, 4, 1, "", "root_path"], [0, 3, 1, "", "route"], [0, 3, 1, "", "run"], [0, 4, 1, "", "secret_key"], [0, 3, 1, "", "select_jinja_autoescape"], [0, 3, 1, "", "send_static_file"], [0, 4, 1, "", "session_interface"], [0, 3, 1, "", "shell_context_processor"], [0, 4, 1, "", "shell_context_processors"], [0, 3, 1, "", "should_ignore_error"], [0, 5, 1, "", "static_folder"], [0, 5, 1, "", "static_url_path"], [0, 3, 1, "", "teardown_appcontext"], [0, 4, 1, "", "teardown_appcontext_funcs"], [0, 3, 1, "", "teardown_request"], [0, 4, 1, "", "teardown_request_funcs"], [0, 4, 1, "", "template_context_processors"], [0, 3, 1, "", "template_filter"], [0, 4, 1, "", "template_folder"], [0, 3, 1, "", "template_global"], [0, 3, 1, "", "template_test"], [0, 3, 1, "", "test_cli_runner"], [0, 4, 1, "", "test_cli_runner_class"], [0, 3, 1, "", "test_client"], [0, 4, 1, "", "test_client_class"], [0, 3, 1, "", "test_request_context"], [0, 4, 1, "", "testing"], [0, 3, 1, "", "trap_http_exception"], [0, 3, 1, "", "update_template_context"], [0, 4, 1, "", "url_build_error_handlers"], [0, 4, 1, "", "url_default_functions"], [0, 3, 1, "", "url_defaults"], [0, 3, 1, "", "url_for"], [0, 4, 1, "", "url_map"], [0, 4, 1, "", "url_map_class"], [0, 4, 1, "", "url_rule_class"], [0, 3, 1, "", "url_value_preprocessor"], [0, 4, 1, "", "url_value_preprocessors"], [0, 4, 1, "", "view_functions"], [0, 3, 1, "", "wsgi_app"]], "flask.Request": [[0, 5, 1, "", "accept_charsets"], [0, 5, 1, "", "accept_encodings"], [0, 5, 1, "", "accept_languages"], [0, 5, 1, "", "accept_mimetypes"], [0, 4, 1, "", "access_control_request_headers"], [0, 4, 1, "", "access_control_request_method"], [0, 5, 1, "", "access_route"], [0, 3, 1, "", "application"], [0, 5, 1, "", "args"], [0, 5, 1, "", "authorization"], [0, 5, 1, "", "base_url"], [0, 5, 1, "", "blueprint"], [0, 5, 1, "", "blueprints"], [0, 5, 1, "", "cache_control"], [0, 3, 1, "", "close"], [0, 4, 1, "", "content_encoding"], [0, 5, 1, "", "content_length"], [0, 4, 1, "", "content_md5"], [0, 4, 1, "", "content_type"], [0, 5, 1, "", "cookies"], [0, 5, 1, "", "data"], [0, 4, 1, "", "date"], [0, 4, 1, "", "dict_storage_class"], [0, 5, 1, "", "endpoint"], [0, 4, 1, "", "environ"], [0, 5, 1, "", "files"], [0, 5, 1, "", "form"], [0, 4, 1, "", "form_data_parser_class"], [0, 3, 1, "", "from_values"], [0, 5, 1, "", "full_path"], [0, 3, 1, "", "get_data"], [0, 3, 1, "", "get_json"], [0, 4, 1, "", "headers"], [0, 5, 1, "", "host"], [0, 5, 1, "", "host_url"], [0, 5, 1, "", "if_match"], [0, 5, 1, "", "if_modified_since"], [0, 5, 1, "", "if_none_match"], [0, 5, 1, "", "if_range"], [0, 5, 1, "", "if_unmodified_since"], [0, 4, 1, "", "input_stream"], [0, 5, 1, "", "is_json"], [0, 4, 1, "", "is_multiprocess"], [0, 4, 1, "", "is_multithread"], [0, 4, 1, "", "is_run_once"], [0, 5, 1, "", "is_secure"], [0, 5, 1, "", "json"], [0, 4, 1, "", "list_storage_class"], [0, 3, 1, "", "make_form_data_parser"], [0, 5, 1, "", "max_content_length"], [0, 5, 1, "", "max_form_memory_size"], [0, 5, 1, "", "max_form_parts"], [0, 4, 1, "", "max_forwards"], [0, 4, 1, "", "method"], [0, 5, 1, "", "mimetype"], [0, 5, 1, "", "mimetype_params"], [0, 3, 1, "", "on_json_loading_failed"], [0, 4, 1, "", "origin"], [0, 4, 1, "", "parameter_storage_class"], [0, 4, 1, "", "path"], [0, 5, 1, "", "pragma"], [0, 4, 1, "", "query_string"], [0, 5, 1, "", "range"], [0, 4, 1, "", "referrer"], [0, 4, 1, "", "remote_addr"], [0, 4, 1, "", "remote_user"], [0, 4, 1, "", "root_path"], [0, 5, 1, "", "root_url"], [0, 4, 1, "", "routing_exception"], [0, 4, 1, "", "scheme"], [0, 5, 1, "", "script_root"], [0, 4, 1, "", "server"], [0, 4, 1, "", "shallow"], [0, 5, 1, "", "stream"], [0, 4, 1, "", "trusted_hosts"], [0, 5, 1, "", "url"], [0, 5, 1, "", "url_root"], [0, 4, 1, "", "url_rule"], [0, 5, 1, "", "user_agent"], [0, 4, 1, "", "user_agent_class"], [0, 5, 1, "", "values"], [0, 4, 1, "", "view_args"], [0, 5, 1, "", "want_form_data_parsed"]], "flask.Response": [[0, 4, 1, "", "accept_ranges"], [0, 5, 1, "", "access_control_allow_credentials"], [0, 4, 1, "", "access_control_allow_headers"], [0, 4, 1, "", "access_control_allow_methods"], [0, 4, 1, "", "access_control_allow_origin"], [0, 4, 1, "", "access_control_expose_headers"], [0, 4, 1, "", "access_control_max_age"], [0, 3, 1, "", "add_etag"], [0, 4, 1, "", "age"], [0, 5, 1, "", "allow"], [0, 4, 1, "", "autocorrect_location_header"], [0, 4, 1, "", "automatically_set_content_length"], [0, 5, 1, "", "cache_control"], [0, 3, 1, "", "calculate_content_length"], [0, 3, 1, "", "call_on_close"], [0, 3, 1, "", "close"], [0, 4, 1, "", "content_encoding"], [0, 5, 1, "", "content_language"], [0, 4, 1, "", "content_length"], [0, 4, 1, "", "content_location"], [0, 4, 1, "", "content_md5"], [0, 5, 1, "", "content_range"], [0, 5, 1, "", "content_security_policy"], [0, 5, 1, "", "content_security_policy_report_only"], [0, 4, 1, "", "content_type"], [0, 4, 1, "", "cross_origin_embedder_policy"], [0, 4, 1, "", "cross_origin_opener_policy"], [0, 5, 1, "", "data"], [0, 4, 1, "", "date"], [0, 4, 1, "", "default_mimetype"], [0, 4, 1, "", "default_status"], [0, 3, 1, "", "delete_cookie"], [0, 4, 1, "", "direct_passthrough"], [0, 4, 1, "", "expires"], [0, 3, 1, "", "force_type"], [0, 3, 1, "", "freeze"], [0, 3, 1, "", "from_app"], [0, 3, 1, "", "get_app_iter"], [0, 3, 1, "", "get_data"], [0, 3, 1, "", "get_etag"], [0, 3, 1, "", "get_json"], [0, 3, 1, "", "get_wsgi_headers"], [0, 3, 1, "", "get_wsgi_response"], [0, 4, 1, "", "implicit_sequence_conversion"], [0, 5, 1, "", "is_json"], [0, 5, 1, "", "is_sequence"], [0, 5, 1, "", "is_streamed"], [0, 3, 1, "", "iter_encoded"], [0, 5, 1, "", "json"], [0, 4, 1, "", "last_modified"], [0, 4, 1, "", "location"], [0, 3, 1, "", "make_conditional"], [0, 3, 1, "", "make_sequence"], [0, 5, 1, "", "max_cookie_size"], [0, 5, 1, "", "mimetype"], [0, 5, 1, "", "mimetype_params"], [0, 4, 1, "", "response"], [0, 5, 1, "", "retry_after"], [0, 3, 1, "", "set_cookie"], [0, 3, 1, "", "set_data"], [0, 3, 1, "", "set_etag"], [0, 5, 1, "", "status"], [0, 5, 1, "", "status_code"], [0, 5, 1, "", "stream"], [0, 5, 1, "", "vary"], [0, 5, 1, "", "www_authenticate"]], "flask.blueprints": [[0, 2, 1, "", "BlueprintSetupState"]], "flask.blueprints.BlueprintSetupState": [[0, 3, 1, "", "add_url_rule"], [0, 4, 1, "", "app"], [0, 4, 1, "", "blueprint"], [0, 4, 1, "", "first_registration"], [0, 4, 1, "", "options"], [0, 4, 1, "", "subdomain"], [0, 4, 1, "", "url_defaults"], [0, 4, 1, "", "url_prefix"]], "flask.cli": [[0, 2, 1, "", "AppGroup"], [0, 2, 1, "", "FlaskGroup"], [0, 2, 1, "", "ScriptInfo"], [0, 6, 1, "", "load_dotenv"], [0, 6, 1, "", "pass_script_info"], [0, 0, 1, "", "run_command"], [0, 0, 1, "", "shell_command"], [0, 6, 1, "", "with_appcontext"]], "flask.cli.AppGroup": [[0, 3, 1, "", "command"], [0, 3, 1, "", "group"]], "flask.cli.FlaskGroup": [[0, 3, 1, "", "get_command"], [0, 3, 1, "", "list_commands"], [0, 3, 1, "", "make_context"], [0, 3, 1, "", "parse_args"]], "flask.cli.ScriptInfo": [[0, 4, 1, "", "app_import_path"], [0, 4, 1, "", "create_app"], [0, 4, 1, "", "data"], [0, 3, 1, "", "load_app"], [0, 4, 1, "", "load_dotenv_defaults"]], "flask.ctx": [[0, 2, 1, "", "AppContext"], [0, 2, 1, "", "RequestContext"], [0, 2, 1, "", "_AppCtxGlobals"]], "flask.ctx.AppContext": [[0, 3, 1, "", "pop"], [0, 3, 1, "", "push"]], "flask.ctx.RequestContext": [[0, 3, 1, "", "copy"], [0, 3, 1, "", "match_request"], [0, 3, 1, "", "pop"]], "flask.ctx._AppCtxGlobals": [[0, 3, 1, "", "get"], [0, 3, 1, "", "pop"], [0, 3, 1, "", "setdefault"]], "flask.flask.globals": [[0, 0, 1, "", "app_ctx"], [0, 0, 1, "", "request_ctx"]], "flask.json": [[0, 6, 1, "", "dump"], [0, 6, 1, "", "dumps"], [0, 6, 1, "", "jsonify"], [0, 6, 1, "", "load"], [0, 6, 1, "", "loads"], [0, 1, 0, "-", "tag"]], "flask.json.provider": [[0, 2, 1, "", "DefaultJSONProvider"], [0, 2, 1, "", "JSONProvider"]], "flask.json.provider.DefaultJSONProvider": [[0, 4, 1, "", "compact"], [0, 3, 1, "", "default"], [0, 3, 1, "", "dumps"], [0, 4, 1, "", "ensure_ascii"], [0, 3, 1, "", "loads"], [0, 4, 1, "", "mimetype"], [0, 3, 1, "", "response"], [0, 4, 1, "", "sort_keys"]], "flask.json.provider.JSONProvider": [[0, 3, 1, "", "dump"], [0, 3, 1, "", "dumps"], [0, 3, 1, "", "load"], [0, 3, 1, "", "loads"], [0, 3, 1, "", "response"]], "flask.json.tag": [[0, 2, 1, "", "JSONTag"], [0, 2, 1, "", "TaggedJSONSerializer"]], "flask.json.tag.JSONTag": [[0, 3, 1, "", "check"], [0, 4, 1, "", "key"], [0, 3, 1, "", "tag"], [0, 3, 1, "", "to_json"], [0, 3, 1, "", "to_python"]], "flask.json.tag.TaggedJSONSerializer": [[0, 4, 1, "", "default_tags"], [0, 3, 1, "", "dumps"], [0, 3, 1, "", "loads"], [0, 3, 1, "", "register"], [0, 3, 1, "", "tag"], [0, 3, 1, "", "untag"]], "flask.session": [[0, 4, 1, "", "modified"], [0, 4, 1, "", "new"], [0, 4, 1, "", "permanent"]], "flask.sessions": [[0, 2, 1, "", "NullSession"], [0, 2, 1, "", "SecureCookieSession"], [0, 2, 1, "", "SecureCookieSessionInterface"], [0, 2, 1, "", "SessionInterface"], [0, 2, 1, "", "SessionMixin"]], "flask.sessions.NullSession": [[0, 3, 1, "", "clear"], [0, 3, 1, "", "pop"], [0, 3, 1, "", "popitem"], [0, 3, 1, "", "setdefault"], [0, 3, 1, "", "update"]], "flask.sessions.SecureCookieSession": [[0, 4, 1, "", "accessed"], [0, 3, 1, "", "get"], [0, 4, 1, "", "modified"], [0, 3, 1, "", "setdefault"]], "flask.sessions.SecureCookieSessionInterface": [[0, 3, 1, "", "digest_method"], [0, 4, 1, "", "key_derivation"], [0, 3, 1, "", "open_session"], [0, 4, 1, "", "salt"], [0, 3, 1, "", "save_session"], [0, 4, 1, "", "serializer"], [0, 4, 1, "", "session_class"]], "flask.sessions.SessionInterface": [[0, 3, 1, "", "get_cookie_domain"], [0, 3, 1, "", "get_cookie_httponly"], [0, 3, 1, "", "get_cookie_name"], [0, 3, 1, "", "get_cookie_partitioned"], [0, 3, 1, "", "get_cookie_path"], [0, 3, 1, "", "get_cookie_samesite"], [0, 3, 1, "", "get_cookie_secure"], [0, 3, 1, "", "get_expiration_time"], [0, 3, 1, "", "is_null_session"], [0, 3, 1, "", "make_null_session"], [0, 4, 1, "", "null_session_class"], [0, 3, 1, "", "open_session"], [0, 4, 1, "", "pickle_based"], [0, 3, 1, "", "save_session"], [0, 3, 1, "", "should_set_cookie"]], "flask.sessions.SessionMixin": [[0, 4, 1, "", "accessed"], [0, 4, 1, "", "modified"], [0, 5, 1, "", "permanent"]], "flask.testing": [[0, 2, 1, "", "FlaskCliRunner"], [0, 2, 1, "", "FlaskClient"]], "flask.testing.FlaskCliRunner": [[0, 3, 1, "", "invoke"]], "flask.testing.FlaskClient": [[0, 3, 1, "", "open"], [0, 3, 1, "", "session_transaction"]], "flask.views": [[0, 2, 1, "", "MethodView"], [0, 2, 1, "", "View"]], "flask.views.MethodView": [[0, 3, 1, "", "dispatch_request"]], "flask.views.View": [[0, 3, 1, "", "as_view"], [0, 4, 1, "", "decorators"], [0, 3, 1, "", "dispatch_request"], [0, 4, 1, "", "init_every_request"], [0, 4, 1, "", "methods"], [0, 4, 1, "", "provide_automatic_options"]]}, "objnames": {"0": ["py", "data", "Python data"], "1": ["py", "module", "Python module"], "2": ["py", "class", "Python class"], "3": ["py", "method", "Python method"], "4": ["py", "attribute", "Python attribute"], "5": ["py", "property", "Python property"], "6": ["py", "function", "Python function"]}, "objtypes": {"0": "py:data", "1": "py:module", "2": "py:class", "3": "py:method", "4": "py:attribute", "5": "py:property", "6": "py:function"}, "terms": {"": [0, 2, 3, 4, 5, 6, 8, 9, 10, 13, 14, 16, 17, 18, 20, 21, 22, 23, 25, 27, 28, 30, 31, 32, 34, 35, 38, 40, 41, 43, 46, 47, 49, 50, 51, 52, 53, 54, 55, 57, 59, 60, 61, 63, 64, 65, 66, 68, 69, 70, 71, 72, 73, 74], "0": [0, 2, 3, 5, 6, 9, 11, 12, 13, 16, 18, 19, 21, 24, 25, 28, 29, 35, 36, 41, 47, 51, 54, 56, 57, 58, 59, 60, 63, 64, 66, 69, 70, 71, 74], "00": 71, "01": [4, 71], "02": 4, "03": 4, "04": 4, "05": 4, "06": [4, 5], "07": 4, "08": 4, "09": 4, "0a": 71, "0de171a4f4dac32e3364c7ddc7c14f3e2fa61f2d17574483f7ffbb431b4acb2f": 71, "1": [0, 2, 5, 6, 9, 11, 12, 13, 16, 17, 18, 19, 21, 22, 24, 25, 26, 28, 29, 35, 40, 46, 47, 54, 56, 58, 59, 60, 61, 63, 64, 66, 69, 70, 71], "10": [0, 5, 6, 24, 58, 59, 66, 74], "100": [6, 18, 21, 60, 71], "1000": [35, 74], "10013": [5, 54, 56, 64], "104": 4, "1091": 4, "10em": 69, "11": [0, 5, 6, 24, 57], "12": [0, 24], "120": 46, "1262": 4, "127": [0, 4, 5, 6, 9, 11, 12, 13, 16, 18, 19, 28, 54, 56, 64, 69, 70], "1288": 4, "12em": 69, "13": 4, "1326": 4, "1357": 4, "1393": 4, "14": [0, 4, 66], "1421": 4, "1422": 4, "1484": 4, "1489": 4, "15": 4, "1515": 4, "153": 71, "1548": 4, "1559": 4, "16": [4, 34, 35, 71], "1621": 4, "168": 6, "17": 4, "1728": 4, "1730": 4, "1763": 4, "18": 4, "1814": 4, "1849": 4, "1864": 0, "1872": 4, "1898": 4, "19": 6, "192": 6, "192b9bdd22ab9ed4d12e236c78afcb9a393ec15f71bbf5dc987d54727823bcbf": [6, 54, 63], "1936": 4, "1985": 42, "1988": 4, "1_000": [0, 6], "1em": 69, "1px": 69, "1rem": 69, "2": [0, 2, 6, 13, 15, 18, 22, 24, 26, 54, 60, 66, 71, 73], "20": [13, 18], "200": [0, 4, 54, 57, 58, 60, 71], "2006": 4, "2010": [4, 26, 50], "2011": 4, "2012": 4, "2013": 4, "2016": 4, "2017": [4, 42, 55], "2018": [4, 71], "2019": 4, "2020": 4, "2021": [4, 5], "2022": 4, "2023": 4, "2024": [4, 22], "204": 73, "20doe": 54, "21": [4, 71], "2109": 4, "2118": 4, "2152": 4, "2193": 4, "22": 71, "2223": 4, "223": 5, "2231": 0, "2254": 4, "2256": 4, "2259": 4, "2282": 4, "2288": 4, "2297": 4, "23": 71, "2314": 4, "2316": 4, "2319": 4, "2326": 4, "2348": 4, "2352": 4, "2354": 4, "2358": 4, "2362": 4, "2373": 4, "2374": 4, "2385": 4, "24": [4, 66, 71], "2410": 4, "2412": 4, "2414": 4, "2416": 4, "2430": 4, "2436": 4, "2450": 4, "25": [4, 53], "2520": 4, "2526": 4, "2529": 4, "2581": 4, "2586": 4, "25rem": 69, "26": 4, "2606": 4, "2607": 4, "2629": 4, "2635": 4, "2636": 4, "2651": 4, "2666": 4, "2676": 4, "2678400": 6, "2691": 4, "2692": 4, "2693": 4, "27": [4, 5], "2709": 4, "2722": 4, "2728": 4, "2730": 4, "2731": 4, "2735": 4, "2736": 4, "2741": 4, "2742": 4, "2748": 4, "2751": 4, "2765": 4, "2766": 4, "28": 4, "2825": 4, "2836": 4, "2866": 4, "2897": 4, "29": 4, "2900": 4, "2926": 4, "2933": 4, "2935": 4, "2937": 4, "2957": 4, "2986": 4, "2994": 4, "2f": 59, "3": [0, 2, 5, 6, 11, 12, 13, 18, 22, 24, 25, 36, 37, 54, 57, 66, 71, 74], "30": 4, "301": 0, "302": [0, 4], "3022": 4, "3059": 4, "3069": 4, "3074": 4, "3088": 4, "31": [0, 4, 6], "3108": 4, "3111": 4, "3124": 4, "3125": 4, "3134": 4, "3138": 4, "31536000": 74, "3157": 4, "3163": 4, "3190": 4, "3195": 4, "32": [4, 6], "3208": 4, "3211": 4, "3214": 4, "3215": 4, "3232": 4, "3249": 4, "3263": 4, "3266": 4, "3275": 4, "3285": 4, "3288": 4, "3297": 4, "33": 59, "3333": [4, 27], "3358": 4, "336699": 50, "3369": 4, "3396": 4, "3398": 4, "34": 71, "3412": 4, "3431": 4, "3452": 4, "3492": 4, "3497": 4, "35": 53, "3552": 4, "3553": 4, "3555": 4, "3560": 4, "3562": 4, "3579": 4, "3628": 4, "3726": 4, "3776": 4, "377ba8": 69, "3828": 4, "3881": 4, "3883": 4, "3898": 4, "3907": 4, "3923": 4, "3931": 4, "3941": 4, "3962": 4, "3973": 4, "3rd": [21, 74], "4": [0, 6, 13, 15, 18, 22, 24, 43, 53, 66, 71, 74], "400": [0, 4, 6, 21, 38, 54, 73], "4008": 4, "401": [28, 54, 61], "4019": 4, "4020": 4, "4024": 4, "4026": 4, "403": [61, 71], "4037": 4, "404": [0, 3, 21, 27, 29, 54, 61, 71], "4040": 4, "4041": 4, "4043": 4, "4044": 4, "405": [0, 3, 21, 27], "4050": 4, "4052": 4, "4053": 4, "4060": 4, "4069": 4, "4078": 4, "4093": [4, 6], "4095": 4, "4096": 4, "4098": 4, "4104": 4, "4112": 4, "4124": 4, "413": [0, 6, 35], "415": 0, "4150": 4, "4157": 4, "416": 0, "4170": 4, "4188": 4, "42": [0, 52, 54], "420": 21, "4229": 4, "4295": 4, "4297": 4, "4303": 4, "4307": 4, "4333": 4, "4335": 4, "4337": 4, "4341": 4, "4349": 4, "44": 71, "4417": 4, "4419": 4, "443": [11, 12, 13, 15, 18, 19], "4459": 4, "4460": 4, "4474": 4, "4479": 4, "4485": 4, "4496": 4, "4502": 4, "451": 4, "4519": 4, "4559": 4, "456": 5, "4567": 4, "4568": 4, "4569": 4, "4571": 4, "4600": 4, "4605": 4, "4606": 4, "4610": 4, "4629": 4, "4645": 4, "4666": 4, "4667": 4, "4672": 4, "4682": 4, "4692": 4, "4693": 4, "4695": 4, "4714": 4, "4715": 4, "4716": 4, "4732": 4, "4740": 4, "4754": 4, "4777": 4, "4831": 4, "4834": 4, "4892": 4, "4947": 4, "4989": 4, "499": 21, "4993": 4, "4995": 4, "4996": 4, "4997": 4, "5": [0, 6, 24, 31, 35, 42, 52, 54, 68, 71, 74], "50": 46, "500": [0, 4, 8, 21, 27, 55, 71], "5000": [0, 5, 6, 54, 56, 64, 69, 70], "50000": 71, "5001": 56, "5004": 4, "500_000": [0, 6], "500_gener": 21, "500kb": 74, "500mb": 74, "5010": 4, "503": 0, "5049": 4, "5051": 4, "5056": 4, "507": 21, "5071": 4, "5072": 4, "5084": 4, "51": 5, "5127": 4, "5160": 4, "519": 4, "5223": 4, "5230": 4, "5264": 4, "5270": 4, "5336": 4, "5344": 4, "5381": 4, "5383": 4, "5388": 4, "5391": 4, "54": 71, "5448": 4, "5472": 4, "5496": 4, "5504": 4, "5553": 4, "56": 6, "5621": 4, "5623": 4, "5624": 4, "5625": 4, "5628": 4, "5633": 4, "5636": 4, "5645": 4, "59": 5, "593": 4, "599": 21, "5em": 69, "5f352379324c22463451387a0aec5d2f": 6, "5rem": 69, "6": [0, 6, 24, 35, 53, 59, 66, 71], "60": 52, "600": 74, "64": 71, "64bit": 18, "6847": 56, "7": [0, 2, 3, 6, 11, 12, 13, 18, 24, 25, 51, 66], "8": [0, 6, 24, 42], "80": [11, 12, 13, 15, 16, 18, 19], "8000": [5, 9, 11, 12, 13, 16, 18], "8080": [19, 63], "822": 0, "8259": 4, "85em": 69, "86": 71, "8859": 4, "9": [0, 6, 22, 24, 25, 36, 66], "919": 5, "95": 71, "960px": 69, "98": [5, 54, 56, 64], "A": [0, 1, 3, 4, 6, 14, 20, 21, 22, 24, 26, 27, 29, 30, 32, 33, 34, 37, 38, 42, 50, 52, 55, 59, 60, 61, 64, 67, 68, 71, 72, 73, 74], "AND": 26, "AS": 26, "And": [0, 3, 21, 27, 36, 40, 43], "As": [0, 3, 20, 21, 22, 33, 38, 46, 52, 54, 61, 73], "At": [2, 27, 33, 37, 44, 47, 72], "BE": 26, "BUT": 26, "BY": [26, 61], "Be": [0, 4, 9, 13, 15, 16, 18, 19, 21, 22, 24, 43, 55, 74], "But": [0, 6, 20, 21, 27, 30, 35, 43, 52, 54, 57, 74], "By": [0, 3, 5, 6, 20, 21, 35, 38, 54, 57, 60, 67, 73], "FOR": 26, "For": [0, 1, 2, 3, 4, 5, 6, 9, 15, 16, 17, 20, 21, 22, 23, 27, 29, 30, 32, 33, 35, 36, 37, 38, 42, 43, 44, 46, 47, 49, 51, 52, 53, 54, 55, 57, 58, 60, 63, 64, 67, 71, 72, 73, 74], "IF": [26, 62], "IN": 26, "INTO": [61, 71, 72], "If": [0, 1, 2, 3, 4, 5, 6, 8, 9, 10, 13, 15, 18, 19, 20, 21, 22, 23, 24, 27, 28, 29, 30, 32, 34, 35, 36, 38, 42, 43, 46, 47, 48, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 64, 67, 68, 69, 70, 71, 72, 73, 74], "In": [0, 3, 4, 5, 6, 9, 16, 20, 21, 22, 24, 25, 27, 29, 37, 38, 41, 43, 46, 47, 50, 54, 59, 61, 62, 63, 65, 67, 71, 72, 73, 74], "It": [0, 1, 2, 3, 4, 5, 6, 8, 9, 11, 12, 13, 14, 16, 17, 18, 19, 20, 21, 22, 24, 25, 27, 30, 32, 33, 34, 35, 36, 38, 40, 46, 47, 48, 50, 52, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 70, 71, 73, 74], "Its": 0, "NO": 26, "NOT": [26, 62], "No": [0, 4, 12, 21, 35, 47], "Not": [0, 3, 6, 17, 21, 24, 43, 54, 59, 61, 71], "OF": 26, "ON": [26, 61], "OR": 26, "Of": 30, "On": [0, 3, 4, 6, 20, 24, 32, 71, 72], "One": [0, 4, 22, 24, 33, 36, 40, 53, 55, 57], "Or": [0, 6, 18, 21, 47, 55], "SUCH": 26, "Such": 54, "THE": 26, "TO": 26, "TOS": 53, "That": [0, 3, 4, 6, 18, 20, 32, 34, 35, 43, 51, 52, 54, 61, 70], "The": [0, 2, 4, 5, 6, 9, 10, 13, 14, 15, 16, 17, 18, 19, 21, 24, 25, 27, 28, 29, 30, 32, 34, 35, 36, 37, 38, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 56, 57, 58, 60, 62, 63, 65, 66, 67, 69, 71, 73, 74], "Then": [0, 6, 9, 16, 27, 30, 38, 40, 41, 42, 43, 46, 61, 67, 72, 73], "There": [0, 5, 6, 14, 20, 22, 24, 27, 35, 42, 46, 53, 54, 57, 59, 62, 63, 67, 68, 70, 71, 72, 74], "These": [0, 2, 3, 5, 14, 21, 25, 37, 38, 46, 47, 54, 55, 59, 62, 74], "To": [0, 1, 3, 4, 5, 6, 9, 11, 12, 13, 16, 21, 28, 30, 32, 36, 38, 41, 42, 43, 44, 46, 47, 50, 52, 53, 54, 57, 58, 59, 60, 61, 70, 71, 72, 73, 74], "Will": [0, 6], "With": [2, 6, 20, 37, 52, 61, 71], "_": [0, 16, 22], "_5": [36, 54], "__": [0, 6], "__call__": [0, 29, 32, 40, 41], "__exit__": 4, "__file__": [60, 71], "__html__": 0, "__init__": [0, 3, 4, 6, 21, 22, 29, 40, 41, 43, 44, 46, 54, 61, 62, 64, 67, 71, 72, 73], "__main__": 56, "__module__": 40, "__name__": [0, 1, 3, 4, 5, 6, 10, 20, 21, 22, 23, 27, 28, 29, 30, 32, 35, 36, 40, 41, 42, 43, 45, 51, 52, 54, 55, 56, 61, 64, 67, 72, 73], "__pycache__": 67, "__repr__": 46, "__slots__": 0, "__tablename__": 46, "__version__": 4, "_anchor": 0, "_app": 0, "_app_ctx_stack": 4, "_appctxglob": 0, "_authent": 0, "_cider": 0, "_client": 71, "_compat": 4, "_data_sql": 71, "_databas": 47, "_extension_name_attr": 4, "_extern": [0, 3], "_formhelp": 53, "_get_current_object": [55, 58], "_get_item": 73, "_handle_api_error": 3, "_hash": 44, "_hello": 22, "_hello_user_id": 22, "_helper": 59, "_method": 0, "_peek_path_info": 29, "_perman": 0, "_request_ctx_stack": 4, "_scheme": [0, 4], "_sentinel": 0, "_stream": 44, "abi": 63, "abil": [0, 4, 6, 21, 24, 35, 59], "abl": [0, 4, 6, 20, 22, 35, 65, 73, 74], "abort": [0, 3, 4, 21, 28, 35, 54, 61], "aborter_class": [0, 4], "about": [1, 4, 5, 6, 8, 20, 21, 22, 24, 28, 30, 32, 33, 35, 36, 38, 46, 51, 53, 55, 56, 59, 61, 62, 63, 64, 66, 68, 69, 71, 72, 74], "abov": [0, 6, 14, 21, 22, 26, 27, 28, 30, 32, 34, 35, 38, 46, 47, 53, 54, 55, 58, 59, 61, 71, 72], "absinth": 4, "absolut": [0, 3, 4, 6, 54], "abstract": [20, 29, 37], "abus": 74, "accept": [0, 4, 35, 53, 54, 58], "accept_charset": 0, "accept_encod": 0, "accept_languag": 0, "accept_mimetyp": 0, "accept_rang": 0, "accept_to": 53, "access": [0, 1, 3, 4, 5, 6, 8, 13, 20, 21, 22, 24, 27, 28, 30, 32, 35, 36, 38, 44, 46, 47, 48, 53, 55, 56, 58, 59, 64, 65, 71], "access_control_allow_credenti": 0, "access_control_allow_head": 0, "access_control_allow_method": 0, "access_control_allow_origin": 0, "access_control_expose_head": 0, "access_control_max_ag": 0, "access_control_request_head": 0, "access_control_request_method": 0, "access_rout": 0, "accident": [0, 3, 4], "accomplish": [2, 40, 41, 54, 59], "accord": [0, 54], "account": [4, 20], "accur": 5, "achiev": [4, 35], "acquir": [9, 16], "across": [0, 1, 3, 27, 54, 60, 72], "act": [0, 73], "action": [0, 61, 69], "activ": [0, 1, 4, 5, 6, 11, 12, 13, 15, 18, 19, 22, 24, 32, 47, 48, 54, 55, 57, 59, 62, 64], "actor": 42, "actors__in": 42, "actual": [0, 3, 4, 6, 11, 12, 13, 17, 18, 20, 21, 30, 31, 35, 40, 43, 52, 54, 55], "ad": [0, 2, 3, 4, 5, 6, 9, 16, 24, 25, 27, 35, 36, 37, 43, 51, 53, 54, 57, 59, 61, 69, 71, 72, 74], "adapt": [0, 2, 4, 10, 53], "add": [0, 2, 4, 5, 6, 8, 9, 16, 20, 21, 22, 23, 24, 28, 30, 32, 34, 36, 38, 40, 42, 43, 46, 47, 52, 53, 54, 55, 60, 61, 62, 64, 67, 69, 73], "add_app_template_filt": [0, 4], "add_app_template_glob": 0, "add_app_template_test": 0, "add_command": [5, 62], "add_default_command": 0, "add_etag": [0, 4], "add_head": 0, "add_language_cod": 51, "add_template_filt": [0, 4], "add_template_glob": 0, "add_template_test": 0, "add_togeth": 32, "add_url_rul": [0, 4, 34, 35, 40, 61, 73], "add_version_opt": 0, "addhandl": 28, "addit": [0, 2, 3, 4, 5, 6, 13, 19, 21, 46, 52, 54, 60], "addition": [0, 3, 4, 21, 47, 58, 59], "addr": 18, "address": [0, 4, 5, 11, 12, 13, 16, 17, 18, 19, 28, 53, 54, 64], "admin": [3, 5, 21, 24, 30, 36, 46], "advanc": [0, 20, 22, 27, 55], "advantag": [0, 4, 20, 29, 53, 58, 65], "advis": [0, 26, 43], "affect": [0, 4, 6, 11, 12, 22, 25, 38, 55, 58], "after": [0, 1, 2, 4, 6, 14, 15, 21, 22, 24, 27, 28, 30, 33, 35, 38, 40, 42, 43, 46, 51, 52, 54, 55, 60, 61, 62, 70, 71, 72, 74], "after_app_request": 0, "after_request": [0, 4, 6, 27, 33, 55], "after_request_func": 0, "after_this_request": [0, 4, 27, 33], "afterrequestcal": 0, "afterward": [0, 72], "ag": [0, 4, 6, 74], "again": [4, 20, 63, 70, 72, 74], "against": [0, 6, 20, 27, 74], "agent": 0, "aggreg": 21, "agnost": 20, "ago": [27, 35], "ah": 35, "ahead": [4, 20], "aid": [0, 4], "aim": 20, "airplai": 56, "ajax": 38, "alert": [36, 54, 74], "alia": [0, 4], "alic": 5, "align": 69, "all": [0, 1, 2, 3, 4, 6, 11, 12, 13, 17, 18, 19, 20, 21, 22, 27, 28, 29, 34, 35, 36, 38, 40, 43, 44, 45, 46, 50, 51, 54, 55, 58, 59, 60, 61, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74], "alloc": 20, "allow": [0, 2, 4, 6, 8, 11, 12, 21, 22, 25, 29, 32, 35, 46, 50, 52, 54, 55, 56, 57, 58, 59, 60, 61, 62, 71, 72], "allowed_extens": 35, "allowed_fil": 35, "allowed_method": 41, "almost": 35, "alon": 4, "along": [0, 5, 30, 45, 52, 63, 68], "alreadi": [0, 2, 4, 5, 6, 9, 20, 27, 30, 35, 44, 46, 48, 52, 53, 54, 55, 60, 64, 65, 69, 71, 72], "also": [0, 1, 2, 3, 4, 5, 6, 8, 9, 13, 16, 20, 21, 22, 24, 27, 28, 29, 30, 32, 35, 36, 37, 38, 42, 45, 46, 47, 48, 54, 55, 56, 57, 58, 59, 60, 61, 63, 64, 66, 68, 70, 71, 72, 73, 74], "alter": [4, 5, 6, 20], "altern": [0, 6, 33, 36, 42], "although": [0, 4, 20, 27, 38, 63, 74], "altogeth": 59, "alwai": [0, 4, 6, 19, 20, 21, 34, 35, 47, 51, 52, 54, 58, 59, 66, 70, 74], "ambigu": 20, "amount": [0, 32, 35, 40, 48, 52, 59], "an": [0, 1, 2, 3, 4, 5, 6, 8, 10, 14, 15, 18, 20, 21, 22, 23, 24, 27, 28, 29, 30, 31, 32, 33, 34, 37, 38, 40, 41, 42, 43, 45, 46, 47, 48, 50, 51, 52, 54, 55, 56, 57, 58, 59, 61, 62, 63, 64, 65, 68, 70, 71, 72, 73, 74], "anchor": [0, 4], "ancient": [0, 4], "angular": [0, 4], "ani": [0, 2, 3, 4, 5, 6, 8, 9, 11, 12, 13, 16, 18, 20, 21, 22, 26, 27, 28, 29, 32, 33, 38, 40, 53, 54, 55, 57, 60, 62, 63, 64, 65, 66, 67, 70, 71, 72, 73, 74], "annoi": 51, "annot": 4, "ano": 56, "anoth": [0, 3, 4, 5, 6, 8, 11, 12, 20, 21, 22, 25, 27, 29, 32, 38, 41, 50, 51, 52, 54, 55, 56, 61, 62, 63, 64, 65, 66, 71, 72, 73, 74], "answer": [0, 7, 48, 54], "anyon": 22, "anystr": 0, "anyth": [0, 1, 20, 22, 27, 44, 54, 55, 63, 70], "anywai": 59, "anywher": [33, 66, 74], "apach": [6, 11, 12, 13, 14, 15, 18, 19], "api": [2, 3, 4, 22, 23, 27, 38, 44, 45], "api_view": 22, "app": [0, 1, 2, 3, 4, 5, 6, 8, 10, 11, 12, 13, 14, 15, 17, 18, 19, 20, 21, 22, 23, 27, 28, 29, 30, 32, 33, 34, 35, 36, 38, 40, 41, 42, 43, 44, 45, 46, 47, 48, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 66, 67, 71, 72, 73, 74], "app2": 5, "app_context": [0, 1, 4, 32, 47, 60, 71], "app_context_processor": 0, "app_ctx": 0, "app_ctx_globals_class": [0, 4], "app_errorhandl": 0, "app_import_path": 0, "app_it": 0, "app_template_filt": [0, 4], "app_template_glob": 0, "app_template_test": 0, "app_url_default": 0, "app_url_value_preprocessor": 0, "app_vari": 13, "appcontext": [0, 4, 27, 47, 55], "appcontext_pop": [0, 1, 4, 27], "appcontext_push": [0, 1, 4, 27], "appcontext_tearing_down": [0, 1, 27], "appear": [0, 6, 20, 61, 70], "append": [0, 38, 54, 58], "appengin": 4, "appgroup": [0, 5], "appl": 54, "appli": [0, 2, 4, 6, 14, 17, 20, 22, 27, 38, 52, 54, 59, 72, 73, 74], "applic": [2, 4, 6, 9, 11, 12, 13, 14, 15, 16, 17, 18, 19, 22, 23, 24, 25, 28, 31, 33, 34, 35, 36, 37, 38, 40, 46, 47, 52, 53, 55, 56, 57, 58, 59, 61, 63, 65, 66, 67, 68, 70, 71, 72, 74], "application_root": [0, 4, 6], "apporblueprintkei": 0, "approach": [4, 6, 22, 40, 46, 47, 49, 65], "appropri": [0, 1, 2, 3, 4, 6, 13, 18, 20, 21, 22, 54], "approv": 22, "ar": [0, 1, 2, 3, 4, 5, 6, 9, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 32, 33, 35, 36, 37, 38, 40, 42, 43, 46, 47, 48, 49, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 67, 68, 69, 70, 71, 72, 73, 74], "arbitrari": [0, 4, 8, 20, 41, 54, 74], "archiv": [4, 32], "aren": [13, 15, 19, 27, 74], "arg": [0, 2, 6, 21, 32, 40, 47, 48, 52, 53, 54, 55, 60, 71], "argument": [0, 3, 4, 5, 6, 11, 12, 13, 15, 19, 22, 30, 32, 36, 38, 42, 47, 53, 54, 56, 58, 59, 60, 61, 71, 72, 73], "aris": 26, "around": [0, 1, 4, 20, 38, 57, 59, 70], "arrai": [0, 4, 74], "articl": [34, 61, 74], "as_attach": [0, 4], "as_text": [0, 60, 71], "as_tupl": [0, 4], "as_view": [0, 4, 22, 73], "ascii": [0, 4], "asctim": 28, "asdict": 0, "asgi": [2, 13, 14, 18, 24], "asgi_app": 10, "asgiref": [2, 10], "ask": [0, 7, 22, 32, 35], "assert": [0, 4, 29, 54, 58, 60, 71], "assertionerror": 0, "assign": [0, 22, 42, 51], "associ": [0, 3, 5, 9, 16, 27, 61, 72], "assum": [0, 9, 16, 21, 22, 29, 35, 47, 52, 54, 63, 65, 67], "assumpt": [0, 4], "async": [0, 4, 10, 11, 12, 24], "async_db_queri": 2, "async_to_sync": 0, "asynchron": [11, 12, 13, 18, 20], "asyncio": [2, 11, 12], "asyncresult": 32, "attach": [0, 4, 6, 54, 74], "attachment_filenam": [0, 4], "attack": [0, 4, 25, 47, 54, 63, 72, 74], "attempt": [0, 1, 4, 6, 55, 56], "attr": 0, "attribut": [0, 1, 4, 6, 22, 30, 38, 42, 53, 54, 58, 59, 60, 61, 70, 74], "attributeerror": 4, "audienc": 0, "audit": 58, "augment": 49, "auth": [0, 60, 61, 67, 69, 70, 71, 72], "authact": 71, "authent": [0, 20, 27, 37, 61, 69, 70, 74], "author": [0, 2, 4, 22, 61, 71], "author_id": [61, 62, 71], "auto": [4, 69], "auto_find_instance_path": 0, "auto_pop": 4, "auto_reload": 0, "autocommit": 46, "autocorrect_location_head": 0, "autodetect": [4, 6], "autoescap": [0, 4, 20, 24, 54, 70], "autoflush": 46, "autogener": 6, "autoincr": 62, "autoload": 46, "automat": [0, 1, 4, 5, 6, 9, 20, 21, 25, 28, 30, 32, 38, 46, 48, 51, 52, 54, 55, 56, 57, 59, 60, 61, 64, 69, 70, 73, 74], "automatically_set_content_length": 0, "avail": [0, 3, 4, 5, 6, 9, 13, 14, 15, 16, 18, 19, 20, 21, 22, 27, 32, 38, 52, 54, 55, 56, 57, 58, 59, 61, 62, 65, 70, 72, 74], "avoid": [0, 3, 4, 5, 6, 22, 25, 33, 34, 54, 55, 61, 65, 73], "aw": [14, 51, 52], "awai": 20, "await": [0, 10, 11, 12, 13, 18, 24, 38], "awar": [0, 4, 21, 22, 54], "awesom": [50, 68], "awkward": 33, "axis_data": 0, "azur": 14, "b": [0, 13, 32, 36, 54, 60, 71, 74], "back": [0, 4, 6, 27, 29, 40, 42, 48, 52, 54, 57, 68, 72], "backend": [0, 4, 21, 29, 31, 32, 43, 66], "backend_app": 29, "background": [24, 36, 37, 55, 69], "backslash": 4, "backspac": 74, "backward": [4, 20], "bad": [0, 4, 6, 20, 21, 38, 43, 54], "badli": 0, "badrequest": [0, 4, 21], "badrequestkeyerror": 4, "bandwidth": [6, 14, 38], "bar": [5, 37], "bare": 4, "base": [2, 3, 4, 6, 11, 12, 14, 20, 21, 22, 24, 29, 32, 33, 37, 38, 46, 47, 51, 52, 54, 55, 61, 67, 69, 72, 74], "base64": 38, "base_url": 0, "baseconvert": 0, "baseexcept": [0, 4], "baseload": 0, "basepost": 22, "baserespons": 0, "bash": [5, 6], "bashrc": 35, "basi": [0, 4, 6], "basic": [0, 3, 9, 13, 14, 15, 16, 18, 19, 21, 24, 27, 32, 35, 36, 37, 42, 46, 50, 54, 57, 65, 66, 70, 74], "bat": 5, "baz": 23, "beanstalk": 14, "beat": 32, "beauti": 51, "becam": 22, "becaus": [0, 2, 3, 4, 5, 6, 11, 12, 13, 18, 19, 20, 21, 27, 35, 46, 47, 48, 51, 52, 54, 55, 57, 58, 59, 60, 61, 62, 63, 64, 66, 70, 72, 73, 74], "becom": [0, 3, 4, 6, 20, 21, 32, 53, 62, 65, 67, 74], "been": [0, 2, 4, 22, 61, 62, 66, 71], "befor": [0, 2, 3, 4, 5, 6, 8, 20, 21, 22, 24, 25, 27, 28, 30, 32, 35, 38, 40, 41, 44, 46, 47, 54, 55, 59, 60, 61, 62, 64, 70, 72], "before_app_first_request": 4, "before_app_request": [0, 4, 72], "before_first_request": 4, "before_render_templ": [0, 4], "before_request": [0, 4, 6, 22, 27, 33, 55, 58, 60], "before_request_func": 0, "before_request_handl": 44, "beforerequestcal": 0, "begin": [0, 1, 4, 6, 22, 37, 55, 63, 71, 72], "beginn": 18, "begun": 6, "behav": [0, 4, 6, 27, 40, 54, 62, 70], "behavior": [0, 4, 5, 6, 20, 21, 24, 27, 60, 71, 73, 74], "behind": [0, 9, 14, 16, 54, 55, 68], "being": [0, 1, 3, 4, 5, 6, 18, 20, 21, 30, 32, 41, 54, 55, 57, 59, 66, 71, 74], "believ": 0, "belong": 0, "below": [0, 9, 14, 21, 22, 28, 29, 43, 51, 54, 60, 61, 63, 69, 74], "benefici": 2, "benefit": [0, 2, 4, 11, 12, 13, 18, 66], "besid": [5, 20, 22, 54, 69, 70], "best": [0, 2, 3, 20, 22, 24], "better": [0, 4, 6, 9, 16, 20, 21, 34, 35, 36, 38, 54, 60], "between": [0, 1, 4, 6, 25, 27, 29, 38, 58, 64, 70], "beyond": [18, 22, 24], "bi": 74, "big": [0, 29, 43, 62, 74], "bigger": [0, 67], "bin": [5, 11, 12, 13, 15, 18, 19, 25], "binari": [0, 4, 18, 26, 38], "binaryio": 0, "bind": [0, 3, 4, 20, 46, 54], "bit": [22, 35, 37, 43, 46, 52, 57, 65, 68], "black": [21, 54], "blink": 54, "blinker": [0, 4, 25, 58], "block": [0, 1, 2, 4, 20, 21, 32, 36, 38, 48, 50, 54, 55, 56, 58, 59, 60, 61, 67, 69, 70, 71, 74], "blog": [21, 22, 24, 60, 65, 66, 67, 69, 70, 72, 74], "blogextens": 22, "blueprint": [1, 4, 6, 22, 24, 27, 30, 32, 37, 55, 62, 65, 69, 70], "blueprint_nam": 3, "blueprintsetupst": 0, "bm": 74, "bodi": [0, 6, 21, 27, 36, 38, 50, 54, 58, 60, 61, 62, 69, 70, 71, 74], "bodyless_method": 41, "boilerpl": 65, "bold": 69, "bookmark": 34, "bool": 0, "boolean": [0, 6], "booleanfield": 53, "boot": 13, "bootstrap": 35, "border": 69, "bose": 74, "both": [0, 4, 6, 21, 25, 51, 59, 61, 63, 70, 71], "bottom": [0, 43, 69], "bound": [0, 2, 6, 22, 30, 55, 59], "box": 68, "bp": [4, 5, 51, 61, 72], "bracket": 0, "branch": 71, "brand": 34, "break": [0, 4, 21, 25, 43, 48, 53, 54], "breakpoint": 8, "breviti": 54, "bridg": 20, "briefli": 4, "bright": 20, "broad": [54, 74], "broader": 0, "broke": 4, "broken": 4, "broker_url": 32, "brows": 0, "browser": [0, 4, 6, 8, 11, 12, 13, 18, 19, 27, 34, 35, 36, 38, 48, 53, 54, 57, 61, 64, 69, 70, 71, 72, 74], "brpart": 71, "bsd": [22, 24], "bt": 74, "bttf": 42, "buffer": [0, 19], "bug": [4, 28, 71], "bugfix": 4, "bui": [9, 16], "build": [0, 4, 20, 21, 24, 27, 43, 50, 59, 60, 66, 67], "build_onli": 35, "buildapi": [43, 66], "builderror": [0, 4], "built": [0, 4, 5, 6, 9, 13, 14, 16, 20, 21, 24, 38, 54, 58, 62, 63, 66], "builtin": [4, 24, 54, 59], "bump": 4, "bunch": 51, "bundl": [20, 25], "busi": 26, "button": [5, 61, 70], "bypass": [11, 12, 13, 18, 19], "byte": [0, 4, 6, 44, 54, 57, 60, 63, 71, 74], "bytesio": [0, 4], "c": [0, 5, 6, 46, 54, 63, 64], "cabc": 0, "cach": [0, 1, 4, 6, 22, 24, 37, 38, 69, 73], "cache_control": 0, "cache_kei": 52, "cache_timeout": [0, 4], "cached_properti": 40, "cae6f6": 69, "calcul": [0, 31, 44, 52], "calculate_content_length": 0, "call": [0, 1, 2, 3, 4, 5, 6, 13, 14, 15, 19, 20, 21, 22, 23, 27, 29, 30, 33, 35, 37, 38, 40, 42, 43, 46, 47, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 65, 66, 70, 71, 72, 73, 74], "call_on_clos": 0, "callabl": [0, 4, 20, 27], "callback": [0, 4, 6, 24, 37, 38, 54, 57, 58], "calvado": 4, "came": [27, 54], "campari": 4, "can": [0, 1, 2, 3, 4, 5, 6, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 27, 28, 29, 30, 32, 33, 34, 35, 36, 38, 40, 41, 42, 43, 44, 45, 46, 47, 48, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74], "cancel": 2, "cannot": [0, 2, 3, 4, 21, 30, 38, 54, 55, 58, 60, 74], "canon": [0, 20, 54], "cap": 6, "capabl": [2, 14, 18, 54], "captur": [0, 21, 54, 60, 61, 73], "captured_templ": 58, "care": [0, 4, 22, 28, 32, 44, 46, 48, 55, 72, 74], "carefulli": 21, "carri": [0, 59], "case": [0, 2, 3, 4, 5, 6, 13, 18, 20, 21, 22, 23, 25, 27, 29, 30, 38, 40, 41, 43, 46, 52, 54, 57, 58, 59, 64, 72, 73, 74], "cat": 74, "catch": [0, 4, 8, 21, 27, 45, 54], "catch_al": 45, "categori": [0, 4, 37, 74], "category_filt": [0, 4, 36], "caught": [0, 4], "caus": [0, 4, 8, 11, 12, 13, 18, 19, 20, 21, 26, 35, 36, 54, 59, 64, 70, 74], "cautiou": 59, "caveat": [3, 8, 21], "cc2f2e": 69, "cd": [11, 12, 13, 15, 18, 19, 25, 67], "ceil": 0, "celeri": [4, 21, 24, 37], "celery_app": 32, "celery_init_app": 32, "center": 69, "central": [0, 3, 4, 20, 37], "cert": 4, "certain": [0, 3, 4, 6, 11, 12, 14, 20, 21, 23, 27, 37, 52, 54, 58, 71, 74], "certainli": 20, "certif": [4, 74], "cfg": [0, 4, 6], "cgi": 0, "chain": [0, 17, 27, 33, 38, 55], "challeng": 0, "chang": [0, 2, 3, 5, 6, 8, 20, 21, 22, 24, 25, 27, 28, 30, 32, 38, 44, 54, 55, 56, 59, 60, 61, 62, 63, 64, 66, 69, 70, 71, 72, 73, 74], "changelog": 2, "chapter": [0, 43], "charact": [0, 4, 38, 54, 59, 70, 74], "characterist": 22, "charliz": 42, "charset": [0, 4], "charsetaccept": 0, "chart": 38, "chart_data": 38, "chartlib": 38, "chat": 22, "check": [0, 2, 3, 4, 5, 6, 9, 16, 24, 25, 28, 35, 42, 51, 54, 55, 60, 61, 62, 65, 68, 71, 72, 73, 74], "check_author": 61, "check_password": 28, "check_password_hash": 72, "checklist": 43, "checksum": [24, 37], "checksumcalcstream": 44, "chees": 21, "child": [3, 37, 69], "chip": 4, "choic": 6, "choos": [4, 11, 12, 25, 28, 38, 56, 61, 63], "chosen": [21, 63, 64], "christoph": 42, "chrome": 4, "chunk": [35, 59], "circular": [1, 4, 22], "cl": 5, "class": [2, 4, 6, 20, 21, 24, 27, 28, 29, 32, 36, 40, 41, 42, 44, 46, 49, 50, 53, 54, 58, 60, 61, 64, 70, 71, 74], "class_arg": 0, "class_kwarg": 0, "classmethod": 0, "classvar": 0, "claus": 24, "clean": [4, 22, 60, 62], "cleanup": 0, "clear": [0, 4, 20, 27, 54, 60, 62, 69, 72, 74], "clearer": [4, 22, 61], "clever": [30, 61], "cli": [1, 4, 5, 22, 24, 27, 56, 62], "cli_group": [0, 5], "cli_runn": 4, "click": [0, 4, 5, 24, 25, 60, 62, 66, 68, 70, 71, 74], "clickjack": 74, "client": [4, 21, 24, 27, 35, 38, 41, 48, 54, 55, 58, 70, 71], "clirunn": 0, "clone": 22, "close": [0, 1, 4, 5, 22, 36, 37, 46, 47, 60, 62, 71, 74], "close_connect": 47, "close_db": 62, "close_db_connect": 0, "closer": 71, "closest": 4, "cloud": 14, "cmd": [5, 6], "code": [0, 1, 2, 3, 4, 5, 6, 8, 11, 12, 13, 18, 19, 20, 21, 22, 24, 26, 27, 32, 33, 35, 38, 40, 43, 44, 46, 47, 51, 52, 53, 54, 55, 57, 58, 59, 60, 61, 62, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74], "code_or_except": 0, "codebas": [2, 20], "codenam": 4, "coep": 0, "coerc": 0, "collabor": 22, "collect": [0, 3, 27, 37, 71], "collector": 4, "collid": 22, "color": [50, 69], "column": [22, 46, 50, 62, 69], "com": [0, 28, 29, 38, 74], "combin": [0, 4, 22, 36, 37, 40, 47, 51, 54, 74], "combinedmultidict": 0, "combonam": 22, "come": [0, 2, 17, 20, 21, 25, 29, 51, 54, 57, 59, 62, 66], "comfort": [65, 71], "command": [1, 4, 6, 8, 15, 19, 22, 24, 25, 27, 29, 30, 32, 43, 54, 62, 63, 64, 71, 74], "comment": [9, 16, 68, 74], "commit": [5, 6, 38, 46, 47, 61, 64, 71, 72, 73], "common": [0, 1, 3, 4, 6, 14, 18, 20, 22, 24, 27, 29, 30, 33, 34, 35, 37, 38, 42, 46, 50, 51, 52, 54, 55, 57, 58, 60, 65, 73, 74], "commonli": 0, "commun": [5, 22, 24, 32, 54], "compact": [0, 4, 69], "compactli": 0, "compar": [20, 54, 65, 68, 71, 72, 74], "comparison": 20, "compat": [0, 4, 20, 22, 25], "compil": [13, 15, 18, 19], "complain": [0, 4], "complet": [0, 2, 4, 6, 22, 24, 27, 31, 54, 59, 61], "complete_length": 0, "complex": [0, 15, 18, 20, 22, 24, 32, 38, 52, 54, 60, 73, 74], "complic": [33, 50], "compon": [0, 3, 4, 24, 33], "compress": [0, 4], "compromis": 20, "comput": [0, 54, 63, 65], "con": 46, "concaten": [0, 42], "concept": [6, 14, 20, 22, 24, 27, 32, 51, 59, 68, 74], "conceptu": 4, "concern": [0, 3, 9, 16, 21], "concret": 4, "concurr": [0, 2, 54, 62, 74], "condit": [0, 4, 6, 26, 71], "conf": [9, 16], "config": [0, 1, 3, 4, 6, 9, 22, 23, 27, 28, 30, 32, 35, 42, 54, 59, 60, 62, 63, 64, 67, 71, 74], "config_class": [0, 4], "config_filenam": [21, 30], "config_from_object": 32, "configmodul": 6, "configur": [1, 4, 5, 11, 12, 13, 14, 15, 17, 18, 19, 20, 23, 24, 27, 29, 30, 32, 34, 37, 46, 54, 56, 59, 60, 62, 64, 70, 71, 74], "confirm": [53, 61], "conflict": 54, "conform": 22, "conftest": [60, 67, 71], "confus": [0, 4], "congratul": [61, 64], "conn": 0, "connect": [0, 1, 4, 11, 12, 20, 21, 22, 23, 32, 37, 46, 57, 58, 64, 71], "connect_to_databas": 1, "connect_via": [4, 58], "connected_to": [0, 58], "connection_class": 22, "connectionerror": 21, "connectionrefusederror": 21, "consequenti": 26, "consid": [0, 2, 3, 6, 21, 22, 32, 51, 55, 74], "consider": [11, 12, 24, 59], "consist": [0, 4, 22, 27, 58], "consol": [4, 5, 38, 57], "consolid": 4, "const": [0, 38], "construct": [3, 35, 44, 69], "constructor": [0, 3, 4, 6], "consult": [23, 28, 35, 55], "consum": [0, 21, 44], "contain": [0, 3, 4, 15, 22, 23, 32, 38, 50, 54, 60, 61, 64, 67, 70, 71, 72, 74], "content": [0, 4, 5, 6, 21, 24, 37, 43, 50, 54, 60, 61, 69, 70], "content_encod": 0, "content_languag": 0, "content_length": [0, 41], "content_loc": 0, "content_md5": 0, "content_rang": 0, "content_security_polici": 0, "content_security_policy_report_onli": 0, "content_typ": [0, 21, 60], "contentrang": 0, "contentsecuritypolici": 0, "context": [0, 4, 6, 11, 12, 13, 18, 20, 21, 22, 24, 27, 32, 37, 46, 47, 71, 74], "context_class": 0, "context_processor": [0, 59], "contextlib": [0, 58], "contextmanag": [0, 58], "contextvar": 55, "continu": [0, 2, 4, 8, 20, 38, 54, 56, 60, 61, 62, 63, 64, 65, 66, 67, 69, 70, 71, 72], "contract": 26, "contribut": 24, "contributor": 26, "control": [0, 4, 5, 6, 24, 35, 56, 64, 67, 70, 74], "convei": 0, "conveni": [5, 32, 54, 58, 62, 63, 64], "convent": [4, 24], "convert": [0, 4, 6, 14, 21, 27, 37, 38, 43, 47, 52, 54, 55, 59, 62, 71, 73, 74], "cooki": [0, 4, 6, 25, 27, 33, 36, 63, 72], "cool": 0, "coop": 0, "copi": [0, 4, 5, 6, 24, 50, 52, 63, 69], "copy_current_request_context": [0, 4], "copyright": [26, 50], "core": [18, 20, 24], "coroutin": [0, 2, 11, 12, 20, 55], "correct": [0, 3, 4, 17, 21, 34, 35, 43, 54, 70, 74], "correctli": [0, 4], "correspond": [0, 1, 3, 4, 25, 27, 54, 55, 61], "cost": [0, 20], "could": [0, 3, 4, 6, 8, 13, 15, 18, 20, 21, 22, 29, 30, 32, 36, 47, 51, 54, 57, 59, 61, 63, 70, 73, 74], "count": 71, "counter": [0, 74], "counterapi": 0, "coupl": [6, 30, 35, 53, 59], "cours": [30, 34, 53], "cover": [0, 21, 22, 38, 54, 65, 71], "coverag": [24, 60, 65, 66, 67], "cpu": [2, 13, 15, 18], "cpython": 4, "craft": [0, 21, 74], "crash": [4, 8, 21, 56], "creat": [0, 1, 2, 3, 4, 5, 6, 11, 12, 13, 15, 18, 19, 20, 21, 22, 23, 24, 27, 28, 29, 30, 32, 33, 37, 38, 43, 45, 46, 47, 52, 53, 54, 55, 60, 63, 64, 65, 67, 71, 73, 74], "create_al": 46, "create_app": [0, 1, 4, 5, 11, 12, 13, 15, 18, 19, 21, 22, 29, 30, 32, 60, 61, 62, 63, 64, 71, 72], "create_engin": 46, "create_global_jinja_load": 0, "create_jinja_environ": [0, 4], "create_jinja_load": 4, "create_task": 2, "create_url_adapt": [0, 4], "create_us": 5, "creation": [4, 29, 30, 43], "creator": 29, "credenti": [0, 6, 36, 54], "critic": 21, "cross": [0, 4, 24, 35, 59], "cross_origin_embedder_polici": 0, "cross_origin_opener_polici": 0, "crucial": 54, "cryptograph": [0, 6, 54, 74], "cryptographi": 4, "csp": 0, "csrf": 24, "css": [3, 43, 50, 54, 67, 69, 70, 74], "csv": 48, "ctrl": [5, 54, 64], "ctx": [0, 4, 52, 57], "cumbersom": 54, "cur": 47, "curiou": 20, "currenc": 59, "current": [0, 1, 3, 4, 5, 20, 32, 33, 40, 47, 52, 54, 55, 57, 59, 60, 61, 64, 66, 71, 74], "current_app": [0, 1, 2, 22, 27, 30, 55, 58, 60, 62], "current_timestamp": 62, "current_us": [32, 38], "cursor": 47, "custom": [0, 3, 4, 22, 24, 25, 27, 49, 54, 58, 59, 73, 74], "customcli": 0, "customiz": 4, "cycl": [1, 2], "d": [0, 10, 11, 12, 13, 18, 19, 54, 61, 73], "d2d4784f1b030a9761f5ccaeeaca413f27f2ecb76d6168407af962ddce849f79": 71, "dai": [0, 6], "damag": 26, "danger": [0, 4, 35, 61, 69, 74], "dark": 60, "dash": 22, "data": [2, 4, 5, 19, 20, 21, 24, 25, 26, 27, 35, 37, 38, 44, 46, 48, 53, 55, 61, 62, 64, 67, 68, 70, 71, 72, 73, 74], "databas": [0, 1, 2, 4, 6, 20, 21, 22, 23, 24, 32, 35, 37, 42, 46, 47, 54, 57, 60, 61, 63, 64, 65, 68, 72, 73], "database_uri": 6, "databaseerror": 0, "dataclass": [0, 4], "datarequir": 53, "datastructur": [0, 49], "date": [0, 4], "datetim": [0, 4, 6, 62], "david": 5, "db": [0, 1, 6, 22, 30, 32, 38, 42, 46, 47, 60, 61, 62, 63, 67, 71, 72, 73], "db_fd": 71, "db_path": 71, "db_server": 6, "db_session": [46, 53], "dd": [36, 53], "ddo": 74, "de": 34, "deal": [0, 4, 21, 35, 47, 54], "dealloc": 1, "debug": [0, 4, 24, 28, 48, 55, 56, 58, 64], "debugg": [0, 4, 5, 6, 14, 21, 24, 54, 55, 56, 64], "decid": [0, 2, 20, 22, 54, 65, 73], "decim": [0, 4], "decimalfield": 42, "decis": [0, 24], "declar": [20, 37, 42], "declarative_bas": 46, "decod": [0, 4, 38, 62, 71], "decor": [0, 2, 3, 4, 5, 20, 21, 22, 24, 27, 32, 37, 40, 43, 48, 51, 54, 59, 61, 69, 72], "decorated_funct": 52, "dedic": [6, 9, 14, 16, 34], "def": [0, 1, 2, 3, 5, 6, 20, 21, 22, 27, 28, 29, 30, 32, 33, 34, 35, 36, 38, 40, 41, 43, 44, 45, 46, 47, 48, 51, 52, 53, 54, 55, 58, 59, 60, 61, 62, 64, 67, 71, 72, 73, 74], "default": [0, 3, 4, 5, 6, 8, 13, 18, 20, 21, 22, 24, 27, 29, 32, 35, 36, 38, 45, 52, 54, 59, 60, 61, 62, 63, 64, 71, 72, 73, 74], "default_app": 29, "default_config": 0, "default_handl": 28, "default_mimetyp": 0, "default_set": 6, "default_statu": 0, "default_tag": 0, "defaultjsonprovid": 0, "defeat": 32, "defer": [0, 4, 24, 37, 54, 55], "defin": [0, 2, 3, 4, 5, 21, 22, 24, 28, 35, 37, 40, 42, 46, 50, 52, 53, 57, 60, 61, 64, 65, 70, 72, 73, 74], "definit": [0, 4], "del": 0, "delai": [0, 32], "deleg": 29, "delet": [0, 4, 20, 41, 43, 65, 71, 72, 73, 74], "delete_cooki": 0, "delimit": 70, "demand": 37, "demo": 5, "demonstr": [5, 45, 59], "deni": 54, "denial": 74, "denot": 70, "depend": [0, 3, 4, 6, 9, 11, 12, 13, 15, 16, 19, 20, 21, 22, 24, 28, 29, 38, 43, 54, 55, 57, 59, 63, 66, 67, 74], "deploi": [0, 5, 6, 9, 16, 24, 27, 29, 56, 62, 64, 65, 66, 71, 74], "deploy": [5, 6, 22, 54, 56, 63, 74], "deprec": [4, 20], "deprecationwarn": 4, "deriv": [0, 26], "desc": 61, "describ": [0, 2, 4, 8, 14, 24, 55, 58, 62], "descript": [0, 21, 38, 47, 54, 66, 73], "descriptor": [0, 71], "deseri": [0, 60], "design": [4, 5, 6, 14, 22, 24, 30, 33, 49, 53, 56, 63, 65], "desir": [4, 21, 38], "despit": 71, "destroi": [0, 1, 3, 47], "detail": [0, 7, 20, 24, 28, 30, 54, 56, 58, 60, 62, 68, 73, 74], "detailview": 73, "detect": [0, 4, 5, 25, 27, 30, 60, 63, 74], "detect_typ": 62, "detect_user_languag": 33, "determin": [0, 4, 20, 21, 58], "dev": [4, 5, 27, 63, 64], "develop": [0, 4, 8, 14, 15, 20, 21, 23, 24, 25, 27, 29, 30, 31, 35, 54, 55, 58, 61, 63, 64, 65, 66, 71, 74], "developmentconfig": 6, "di": [4, 47], "dialog": 61, "dict": [0, 4, 6, 21, 22, 27, 32, 38, 46, 47, 52, 54, 59, 60, 62, 71, 72], "dict_storage_class": 0, "dictat": 0, "dictconfig": 28, "dictionari": [0, 4, 6, 21, 35, 47, 51, 52, 54, 59], "did": [0, 4, 43, 46, 54, 55, 64, 74], "didn": [0, 27, 32, 67, 73], "differ": [0, 2, 3, 4, 5, 6, 9, 14, 15, 16, 20, 21, 22, 24, 25, 27, 29, 30, 36, 38, 44, 46, 54, 55, 56, 59, 60, 61, 62, 63, 68, 70, 71, 72, 73, 74], "difficult": [18, 22, 60, 74], "digest": 0, "digest_method": 0, "dira": 5, "dirb": 5, "direct": [0, 1, 9, 16, 20, 22, 26, 48, 69, 72], "direct_passthrough": 0, "directli": [0, 1, 4, 5, 6, 11, 12, 15, 19, 20, 21, 27, 32, 35, 38, 46, 47, 48, 54, 58, 60, 64, 70, 71, 72, 73], "director": 42, "directori": [0, 4, 5, 20, 34, 62, 63, 64, 66, 67, 69, 70, 71], "dirnam": 71, "disabl": [0, 4, 6, 8, 54, 56, 59], "disallow": [0, 6, 35], "disappear": 0, "disclaim": 26, "disconnect": [0, 58], "discord": 22, "discourag": [0, 4, 6], "discov": [0, 28], "discoveri": 24, "discuss": [14, 20, 22, 38], "dispatch": [0, 3, 4, 6, 24, 37, 55, 60], "dispatch_request": [0, 2, 73], "dispatchermiddlewar": 29, "dispatchingapp": 4, "dispatchingjinjaload": 0, "displai": [0, 21, 35, 36, 54, 61, 68, 69, 70, 71], "disposit": [0, 4, 74], "dist": [63, 67], "distinct": [0, 4], "distinguish": [4, 34, 70], "distribut": [22, 25, 26, 27, 63], "div": [36, 38, 50, 61, 69, 70], "dive": [65, 68], "divid": [27, 43], "django": [6, 29, 46], "dl": [36, 53], "do": [0, 2, 3, 4, 5, 6, 8, 11, 12, 13, 14, 18, 19, 20, 21, 22, 27, 28, 29, 30, 31, 32, 34, 35, 36, 38, 40, 41, 43, 44, 47, 48, 51, 52, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 65, 66, 67, 68, 71, 72, 73, 74], "do_some_work": 0, "do_teardown_appcontext": 0, "do_teardown_request": 0, "do_the_login": 54, "do_work": 5, "doc": [0, 4, 9, 14, 15, 16, 18, 21, 24, 28, 32, 38, 42, 54, 60, 62, 65, 68, 74], "docker": 74, "doctyp": [35, 36, 50, 54, 70], "document": [0, 4, 5, 6, 7, 8, 9, 13, 15, 16, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 34, 35, 37, 43, 46, 50, 54, 55, 58, 59, 60, 68, 69, 70, 74], "documentroot": 9, "doe": [0, 1, 3, 4, 5, 6, 11, 12, 13, 15, 18, 19, 21, 24, 25, 27, 29, 30, 31, 33, 35, 36, 43, 46, 47, 50, 52, 53, 54, 55, 57, 59, 60, 61, 62, 63, 64, 70, 74], "doesn": [0, 4, 6, 20, 22, 32, 60, 61, 62, 63, 64, 65, 69, 70, 71, 72], "domain": [0, 3, 4, 6, 14, 29, 34, 50], "don": [0, 3, 4, 5, 6, 8, 11, 12, 13, 18, 19, 20, 21, 22, 27, 28, 30, 32, 35, 38, 40, 46, 51, 54, 55, 57, 58, 61, 70, 74], "done": [0, 4, 6, 20, 21, 27, 42, 57, 65, 74], "dot": [0, 3, 4, 5, 6, 13, 19, 40, 52, 71], "dotenv": [0, 4, 24, 25], "doubl": [0, 6, 38, 42, 64, 74], "down": [0, 4, 33, 46, 57, 60, 62], "download": [4, 35, 46], "download_fil": [0, 35], "download_nam": [0, 4], "downsid": [0, 3, 6, 30, 40, 46], "dozen": 0, "drop": [0, 4, 6, 15, 46, 57, 62], "dropdown": 5, "dsn": 21, "dt": [36, 53], "due": [0, 2, 4, 18, 20, 68], "dump": [0, 4, 21], "duplic": [0, 21, 61], "dure": [0, 1, 4, 5, 6, 8, 14, 21, 23, 24, 27, 28, 32, 33, 48, 54, 55, 56, 58, 62, 64, 71, 73], "duti": 64, "dynaconf": 6, "dynam": [4, 29, 38, 54, 70], "e": [0, 3, 4, 5, 6, 10, 21, 22, 43, 46, 62, 66, 71], "each": [0, 1, 2, 4, 6, 13, 14, 15, 17, 19, 20, 22, 23, 24, 25, 27, 28, 29, 32, 36, 42, 43, 46, 47, 48, 52, 54, 55, 58, 60, 61, 62, 67, 70, 71, 72, 73, 74], "eager": [4, 54], "earli": [0, 4, 6, 21, 22, 54], "earlier": [4, 6, 32, 61, 71, 72], "eas": 35, "easi": [3, 13, 15, 19, 20, 22, 24, 27, 29, 37, 38, 51, 53, 54, 65], "easier": [0, 4, 5, 6, 22, 37, 48, 53, 55, 57, 59, 68, 71], "easiest": [6, 31, 50, 54, 57, 71], "easili": [3, 4, 6, 13, 20, 47, 53, 54, 57, 58, 74], "echo": [60, 62], "ecmascript": 74, "eco": 22, "ecosystem": 22, "edg": 0, "edit": [4, 5, 9, 16, 22, 60, 61, 63, 65, 66, 71, 72, 73], "editor": 67, "eee": 69, "effect": [0, 70], "effici": [0, 5, 6, 14, 25, 56, 63, 73], "effort": 46, "eg": [0, 44], "egg": [4, 23, 67], "either": [0, 2, 3, 4, 6, 13, 18, 22, 33, 34, 38, 46, 47, 56, 59, 61, 62, 70, 71, 72, 74], "elast": 14, "element": [50, 53, 54, 74], "elif": [52, 72], "els": [0, 1, 2, 3, 20, 21, 28, 29, 32, 36, 38, 47, 51, 52, 54, 55, 61, 63, 64, 70, 72], "elsewher": [0, 22, 63], "em": 54, "email": [0, 21, 23, 24, 32, 38, 46, 53, 54], "embed": [6, 42, 74], "embeddeddocu": 42, "embeddeddocumentfield": 42, "emit": [4, 21, 58], "empti": [0, 4, 6, 35, 50, 52, 60, 62, 72], "en": 74, "enabl": [0, 2, 3, 4, 5, 6, 8, 11, 12, 20, 25, 32, 40, 48, 54, 55, 56, 59, 74], "enclos": 0, "encod": [0, 4, 38], "encount": [0, 3, 65], "encourag": 46, "enctyp": [0, 35, 54], "end": [0, 1, 4, 5, 6, 9, 16, 20, 22, 27, 33, 36, 37, 43, 44, 46, 47, 54, 55, 59, 60, 61, 62, 67, 69, 70, 72, 74], "endautoescap": 59, "endblock": [21, 36, 50, 61, 70], "endfor": [36, 53, 59, 61, 70], "endif": [36, 53, 54, 61, 70], "endmacro": [0, 53], "endors": 26, "endpoint": [0, 3, 4, 35, 37, 40, 45, 51, 54, 61], "endswith": 29, "endwith": 36, "enforc": [0, 4, 6, 36], "engin": [0, 4, 14, 18, 24, 40, 46, 48, 50, 54, 59, 74], "enhanc": 4, "enorm": 48, "enotdir": 4, "enough": [0, 3, 21, 31, 36, 37, 54, 74], "ensur": [0, 4, 20, 22, 25, 27, 38, 43, 61, 64, 74], "ensure_ascii": 0, "ensure_sync": [0, 2], "enter": [4, 67, 70], "entir": [23, 29, 38, 70, 74], "entiti": [0, 59], "entri": [0, 4, 5, 22, 46], "enum": 0, "enumer": 47, "env": [0, 4, 5, 6, 44, 62], "environ": [0, 4, 8, 14, 24, 27, 28, 29, 41, 44, 48, 54, 55, 63, 66, 67], "environ_bas": 0, "environ_overrid": 0, "environbuild": [0, 4, 60], "equal": [6, 42, 74], "equalto": 53, "equip": 68, "equival": [0, 5, 6, 8, 13, 19, 20, 30, 73], "ergonom": 22, "errno": [5, 54, 56, 64], "error": [0, 1, 2, 4, 6, 13, 15, 19, 24, 27, 29, 32, 35, 36, 38, 53, 61, 70, 71, 72, 73], "error_handl": 4, "error_handler_spec": [0, 4], "errorhandl": [0, 3, 4, 21, 27, 54, 55], "errorhandlercal": 0, "escap": [0, 4, 24, 25, 48, 53, 59, 70, 72, 74], "especi": [0, 20, 51, 54, 58], "essenti": 0, "establish": 62, "estim": 0, "etag": [0, 4], "etc": [0, 2, 3, 4, 6, 9, 14, 16, 21, 27, 30, 54, 57, 74], "evalu": [0, 4, 14, 20, 22, 50], "even": [0, 2, 3, 4, 5, 6, 8, 21, 24, 25, 26, 27, 31, 47, 53, 54, 55, 56, 59, 68, 70, 73, 74], "event": [0, 4, 10, 20, 22, 24, 26, 55, 58], "eventlet": [2, 12, 14, 25], "eventu": 20, "ever": [0, 54], "everi": [0, 1, 3, 4, 5, 6, 20, 22, 27, 30, 35, 43, 47, 51, 71, 73], "everybodi": 57, "everyth": [0, 1, 20, 21, 35, 43, 55, 61, 64, 66, 74], "ex": [0, 3], "exact": [0, 4, 6, 60], "exactli": [0, 22, 35, 46, 52], "examin": 60, "exampl": [0, 1, 2, 3, 4, 5, 6, 15, 20, 22, 23, 28, 29, 30, 32, 33, 34, 36, 37, 38, 43, 44, 45, 46, 47, 49, 50, 52, 53, 54, 55, 56, 58, 59, 60, 63, 64, 65, 67, 68, 69, 71, 72, 73, 74], "exc": 0, "exc_info": 0, "exce": 0, "exceed": [0, 6], "excel": 52, "except": [0, 1, 3, 4, 6, 8, 27, 28, 29, 35, 46, 47, 55, 61, 64, 70, 72, 73], "exclud": [4, 5], "execut": [0, 3, 4, 5, 8, 9, 16, 20, 21, 33, 35, 46, 47, 51, 54, 55, 57, 58, 61, 62, 71, 72, 74], "executescript": [0, 47, 62, 71], "exemplari": 26, "exhaust": [0, 14], "exist": [0, 1, 3, 4, 6, 9, 16, 20, 22, 27, 29, 33, 35, 43, 52, 54, 59, 61, 62, 63, 64, 71, 72, 74], "exit": [0, 4, 55], "exitstack": 4, "expand": [0, 4, 53, 65], "expect": [0, 2, 3, 4, 5, 6, 11, 12, 13, 18, 20, 21, 22, 55, 60, 71, 74], "expens": 52, "experi": [0, 6, 8, 24, 30, 54], "expir": [0, 4, 6, 74], "explain": [4, 24, 35, 54], "explain_template_load": [3, 4, 6], "explan": [60, 66], "explicit": [4, 6, 21, 24, 34, 59], "explicitli": [0, 4, 6, 21, 51, 54, 59, 74], "explor": [5, 27], "export": [0, 4, 5, 6], "expos": [0, 3, 4, 20, 54], "express": [15, 21, 26, 48, 54, 70, 74], "ext": [4, 22, 28], "extend": [0, 3, 4, 21, 24, 36, 50, 60, 61, 70, 73], "extens": [0, 1, 3, 4, 5, 6, 18, 20, 24, 27, 31, 32, 35, 37, 58, 59, 60, 64, 65, 68, 71, 73, 74], "extensionnam": 22, "extern": [0, 2, 4, 6, 17, 22, 24, 74], "extra": [0, 2, 3, 4, 5, 20, 21, 22, 23, 34, 54, 58, 71, 73, 74], "extract": [4, 6, 60], "extrem": 74, "f": [0, 3, 6, 38, 40, 44, 46, 47, 48, 52, 54, 58, 59, 60, 61, 62, 71, 72, 73], "f4q8z": [36, 54], "fabric": 6, "face": [21, 74], "facebook": 74, "facilit": 6, "fact": [3, 20, 38], "facto": 34, "factor": 3, "factori": [0, 1, 4, 5, 11, 12, 13, 15, 18, 19, 20, 21, 22, 24, 29, 37, 47, 60, 61, 62, 63, 72], "fail": [0, 4, 5, 21, 28, 36, 47, 54, 55, 56, 58, 71, 72], "failur": [0, 21], "fake": [17, 20, 55, 57], "fake_init_db": 71, "fall": [0, 4, 6, 22, 29, 40], "fals": [0, 4, 6, 8, 22, 32, 46, 47, 53, 59, 71, 73], "famili": [4, 69], "familiar": [14, 22, 54, 62, 65], "fanci": 21, "far": [0, 20, 27, 40, 61, 66, 68], "fashion": 21, "fast": [9, 16, 18], "faster": [2, 4, 25, 35], "favicon": [24, 37], "favor": 4, "favour": [4, 20], "featur": [0, 2, 4, 6, 7, 9, 13, 15, 16, 18, 19, 20, 25, 35, 37, 38, 52, 61, 65], "feed": 68, "feedback": [4, 36, 54], "feel": 22, "fetch": [24, 32, 37, 39, 47, 61], "fetchal": [47, 61, 72], "fetchon": [61, 71, 72], "few": [0, 20, 27, 46, 53, 68, 72, 74], "field": [0, 5, 6, 28, 42, 53, 70, 74], "figur": [0, 6, 20, 29, 40, 51, 54], "file": [0, 4, 9, 15, 16, 18, 20, 21, 22, 24, 27, 28, 30, 32, 34, 37, 38, 40, 43, 44, 45, 47, 60, 61, 63, 64, 65, 66, 67, 70, 71, 74], "file1": 5, "file2": 5, "file_wrapp": 0, "filenam": [0, 3, 4, 6, 34, 35, 38, 50, 54, 60, 69, 70], "filename_or_fp": 0, "filestorag": 0, "filesystem": [0, 3, 21, 30, 35, 48, 54], "filesystemload": 0, "filewrapp": 0, "fill": [0, 50, 61, 70, 72, 74], "filter": [0, 3, 4, 20, 24, 37, 38, 46, 53, 54, 68, 74], "final": [0, 58, 60, 65, 70], "finalize_request": 4, "find": [0, 3, 4, 5, 6, 21, 22, 24, 32, 34, 37, 40, 43, 53, 54, 60, 63, 64, 65, 66, 69, 71], "find_packag": 4, "findstr": 56, "fine": [21, 43], "finer": 4, "finish": [32, 61, 62], "fip": 4, "fire": [20, 24], "first": [2, 4, 6, 20, 21, 22, 24, 25, 27, 29, 32, 34, 35, 38, 40, 42, 43, 46, 47, 50, 52, 53, 54, 55, 57, 58, 61, 62, 63, 65, 69, 73, 74], "first_registr": 0, "firstnam": 47, "fish": [5, 6], "fishi": 54, "fit": [20, 22, 23, 26], "fix": [0, 4, 17, 28, 61], "fix_head": 0, "fixtur": 24, "flag": [0, 4, 71], "flash": [4, 24, 35, 37, 53, 61, 69, 70, 72], "flask": [0, 1, 2, 3, 4, 5, 6, 8, 9, 10, 13, 14, 15, 16, 19, 21, 23, 27, 29, 30, 31, 33, 34, 35, 36, 38, 40, 41, 42, 43, 45, 48, 51, 52, 53, 55, 56, 57, 59, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74], "flask_": [0, 4, 6], "flask_app": [4, 5, 32], "flask_combonam": 22, "flask_command_opt": 5, "flask_debug": [0, 6], "flask_env": [4, 6], "flask_extension_nam": 22, "flask_foo": [0, 23], "flask_mail_en": 6, "flask_mongoengin": 42, "flask_myapi__credentials__usernam": 6, "flask_nam": 22, "flask_name_low": 22, "flask_opt": 5, "flask_run_port": 5, "flask_secret_kei": 6, "flask_skip_dotenv": [4, 5], "flask_sqlalchemi": 4, "flaskclient": [0, 4], "flaskclirunn": [0, 60], "flaskenv": [0, 4, 5], "flaskgroup": [0, 4, 5], "flaskintegr": 21, "flaskr": [60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72], "flasktask": 32, "flatten": 0, "flaw": 4, "fledg": 35, "flex": 69, "flexibl": [46, 52, 65], "flight": 47, "flip": [4, 6], "flit_cor": [4, 43, 66], "float": [0, 54], "flow": 70, "fluffi": 74, "fly": 48, "fnmatch": 5, "focu": 38, "focus": [4, 69], "folder": [0, 4, 20, 24, 25, 35, 43, 54, 60, 62, 63, 64, 71], "follow": [0, 1, 4, 5, 6, 8, 20, 22, 24, 25, 26, 27, 30, 32, 35, 37, 43, 44, 45, 46, 52, 53, 54, 55, 56, 59, 63, 64, 65, 67, 69, 72, 73, 74], "follow_redirect": [0, 60], "font": 69, "foo": [0, 6, 23], "foo_bar": 23, "foo_spam": 23, "foobar": 4, "footer": [50, 54], "forbidden": [56, 61, 71], "forc": [0, 4, 20, 74], "force_typ": 0, "foreign": 62, "forg": [35, 54], "forgeri": 24, "forget": [4, 54], "form": [0, 4, 6, 20, 24, 26, 28, 32, 35, 36, 37, 38, 44, 52, 54, 61, 68, 69, 70, 71, 72, 73, 74], "form_data_parser_class": 0, "format": [0, 4, 6, 28, 32, 34, 38, 47, 52, 54, 55, 63, 68], "format_pric": 59, "formatt": 28, "formdata": 38, "formdatapars": 0, "formerli": 20, "fortun": [21, 44], "forward": [0, 4, 6, 9, 16, 17, 51, 53, 58], "found": [0, 3, 4, 5, 6, 8, 21, 54, 55, 61, 71], "foundat": 20, "four": [46, 50], "fox": 42, "fp": 0, "framework": [2, 20, 23, 24, 25, 27, 45, 60, 74], "free": [14, 20, 21, 59], "freed": 20, "freez": 0, "frequenc": 21, "fresh": 0, "friendli": 54, "from": [0, 1, 2, 3, 4, 8, 9, 10, 11, 12, 13, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 32, 33, 34, 35, 36, 37, 40, 41, 42, 43, 45, 46, 47, 49, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 66, 67, 69, 70, 71, 72, 73, 74], "from_app": 0, "from_envvar": [0, 4, 6], "from_fil": [0, 4, 6], "from_json": [4, 73], "from_map": [0, 4, 27, 32, 64], "from_object": [0, 6], "from_prefixed_env": [0, 4, 6, 27, 32], "from_pyfil": [0, 4, 6, 30, 64], "from_valu": 0, "fromaddr": 28, "fromisoformat": 62, "front": [0, 4, 9, 11, 12, 13, 14, 16, 17, 18, 19, 65], "frontend": [0, 29, 30, 45, 51], "frontend_app": 29, "frozenset": 41, "frustrat": 59, "fspath": 4, "ft": 0, "fulfil": 0, "full": [0, 1, 4, 5, 6, 19, 21, 24, 35, 36, 54, 55, 60, 65], "full_dispatch_request": 0, "full_path": 0, "fulli": [0, 4, 44, 58, 70], "fun": [53, 54, 68], "func": [0, 2], "function": [1, 2, 3, 4, 5, 6, 13, 20, 21, 22, 23, 24, 27, 29, 30, 31, 32, 33, 35, 36, 38, 40, 43, 46, 47, 48, 49, 51, 52, 53, 54, 55, 57, 58, 59, 60, 61, 62, 64, 69, 71, 72, 73], "functool": [52, 72], "fundament": 29, "further": [0, 3, 4, 24, 27, 30, 40, 51, 52, 60, 62, 73], "furthermor": [20, 51], "futur": [0, 4, 6, 42, 66, 67, 71], "g": [0, 1, 3, 4, 10, 20, 21, 22, 27, 33, 46, 47, 51, 52, 54, 55, 57, 58, 59, 60, 61, 62, 70, 71, 72, 73], "gae": 4, "gain": [3, 4, 43], "garbag": 4, "gatewai": 0, "gave": 63, "gcc": 5, "gener": [0, 3, 4, 6, 8, 9, 16, 22, 23, 27, 35, 37, 43, 46, 48, 51, 52, 53, 55, 57, 59, 60, 61, 63, 67, 70, 71, 72, 73, 74], "generate_checksum": 44, "generate_large_csv": 48, "generate_password_hash": 72, "generate_report": [0, 38, 55], "generate_user_arch": 32, "generate_valid": 73, "generator_or_funct": 0, "genshi": 20, "gentl": [37, 43], "geologi": 38, "geology_div": 38, "geology_fact": 38, "geology_url": 38, "germeist": 4, "get": [0, 1, 2, 3, 4, 5, 6, 15, 17, 21, 22, 24, 27, 29, 30, 33, 34, 35, 36, 37, 38, 41, 44, 46, 47, 48, 52, 54, 55, 57, 58, 59, 60, 61, 63, 64, 67, 68, 70, 71, 72, 73, 74], "get_all_us": 54, "get_app_it": 0, "get_appl": 29, "get_command": 0, "get_cookie_domain": 0, "get_cookie_httponli": 0, "get_cookie_nam": [0, 4], "get_cookie_partit": 0, "get_cookie_path": 0, "get_cookie_samesit": 0, "get_cookie_secur": 0, "get_current_context": 4, "get_current_us": 54, "get_data": [0, 2, 4, 60, 71], "get_db": [1, 22, 47, 61, 62, 71, 72], "get_etag": 0, "get_expiration_tim": [0, 4], "get_flashed_messag": [0, 4, 36, 54, 59, 70], "get_json": [0, 4], "get_namespac": [0, 4], "get_one_chees": 21, "get_or_404": [38, 42, 73], "get_post": 61, "get_resourc": 21, "get_respons": [0, 21], "get_send_file_max_ag": [0, 4, 6], "get_template_attribut": [0, 4], "get_us": [21, 28], "get_user_for_prefix": 29, "get_user_for_subdomain": 29, "get_wsgi_head": 0, "get_wsgi_respons": 0, "get_x": 1, "getattr": 47, "getelementbyid": 38, "getlogg": 28, "gettempdir": 35, "gevent": [0, 2, 11, 14, 25], "gif": 35, "git": [4, 67], "github": [21, 22], "gitignor": 67, "give": [0, 4, 5, 20, 21, 34, 36, 53, 54, 59, 61, 63, 65], "given": [0, 3, 4, 5, 6, 21, 22, 32, 38, 51, 54, 71, 73, 74], "global": [1, 4, 21, 22, 24, 38, 54, 55, 59, 64, 73], "glue": 20, "go": [0, 5, 20, 21, 25, 46, 54, 60, 61, 62, 63, 68, 69, 70, 72, 74], "goal": 14, "goe": [3, 40, 44, 52, 60, 70, 74], "good": [0, 1, 6, 9, 16, 20, 26, 31, 35, 36, 38, 43, 47, 52, 55, 58, 65, 74], "googl": [4, 14, 40], "got": [4, 32], "got_first_request": 4, "got_request_except": [0, 27, 55], "grant": 0, "graphql": 60, "grappa": 4, "great": 65, "greatli": 3, "greenlet": [0, 4, 11, 12, 13, 18, 20], "greet": 54, "grep": 56, "group": [0, 4, 5, 15, 25, 43, 60, 72, 73], "groupapi": 73, "grow": [20, 64], "gt": 54, "guarante": [0, 22, 55, 71], "guard": 0, "guess": [0, 4, 34, 74], "guess_language_from_request": 33, "gui": 52, "guid": [0, 22, 32], "guidelin": [4, 24], "gunicorn": [4, 11, 12, 14], "gzip": 0, "h": 74, "h1": [21, 35, 36, 50, 54, 61, 69, 70], "h2": 60, "ha": [0, 1, 2, 3, 4, 5, 6, 13, 18, 20, 21, 22, 27, 28, 32, 35, 40, 42, 43, 46, 47, 48, 51, 52, 54, 55, 59, 60, 61, 62, 64, 69, 72, 74], "habit": 67, "hack": 20, "hacker": [35, 54], "had": [0, 4, 22, 35, 73], "half": [27, 53], "halfwai": 4, "hand": [4, 6, 20, 32, 47, 57, 59], "handi": [21, 30, 47, 54, 57], "handl": [0, 1, 2, 3, 4, 5, 9, 11, 12, 16, 20, 22, 24, 29, 33, 35, 38, 46, 47, 49, 51, 52, 53, 54, 55, 56, 61, 62, 64, 72, 73, 74], "handle_507": 21, "handle_bad_request": 21, "handle_except": [0, 21], "handle_http_except": 0, "handle_url_build_error": [0, 4], "handle_user_except": 0, "handler": [0, 1, 2, 4, 6, 24, 27, 30, 40, 47, 55, 58, 74], "happen": [0, 20, 22, 27, 33, 54, 55, 62, 64, 74], "happili": 35, "hard": [0, 4, 6, 53, 54, 73, 74], "hardcod": [0, 4], "harddriv": 21, "harder": [6, 20], "has_app_context": 0, "has_request_context": [0, 4, 28], "has_static_fold": 0, "hash": [0, 4, 44, 72], "hashlib": [4, 44], "hasn": 61, "hate": [36, 43, 54], "have": [0, 1, 2, 3, 4, 5, 6, 8, 11, 12, 14, 18, 20, 21, 22, 25, 28, 29, 30, 31, 35, 36, 38, 40, 43, 46, 47, 48, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 68, 70, 71, 72, 74], "haven": [2, 70], "he": 35, "head": [0, 3, 4, 41, 46, 50, 53, 54, 59], "header": [0, 4, 6, 9, 15, 16, 17, 21, 24, 27, 29, 38, 41, 54, 60, 61, 69, 70, 71], "headerset": 0, "healthi": 45, "heard": 38, "heartbeat": 45, "height": 69, "hello": [0, 5, 6, 8, 9, 11, 12, 13, 15, 16, 18, 19, 20, 22, 27, 29, 30, 43, 48, 52, 54, 55, 56, 60, 61, 64, 67, 71, 72], "hello_command": 60, "hello_world": [29, 54], "helloextens": 22, "help": [0, 3, 4, 5, 13, 19, 20, 22, 23, 27, 28, 34, 42, 43, 51, 54, 56, 65, 73, 74], "helper": [4, 24, 40, 53, 57, 58, 59], "here": [0, 3, 5, 6, 14, 20, 21, 22, 29, 30, 32, 36, 38, 40, 43, 46, 47, 50, 51, 52, 53, 54, 58, 59, 60, 63, 68, 70, 71, 72, 74], "hexdigest": 44, "hidden": [52, 74], "hide": 4, "hierarchi": [4, 21], "higher": 28, "hint": [4, 24], "histori": [0, 4, 60], "hit": 21, "hmac": 0, "hoc": 4, "hold": [0, 6, 54, 64], "holder": [0, 26], "home": [5, 15, 35, 66, 67, 71], "home_username_": 35, "homepag": 50, "honor": [4, 74], "hook": [0, 4, 24, 30, 44], "host": [0, 4, 6, 9, 13, 16, 17, 19, 21, 24, 29, 54, 63, 74], "host_match": [0, 4, 6], "host_url": 0, "hostnam": [0, 4], "hour": 0, "how": [0, 1, 2, 3, 4, 5, 6, 13, 15, 17, 18, 19, 20, 21, 22, 24, 29, 30, 32, 34, 35, 36, 38, 40, 42, 43, 45, 46, 47, 48, 49, 53, 59, 60, 62, 63, 64, 66, 67, 69, 71, 73, 74], "howev": [0, 1, 2, 3, 4, 6, 8, 11, 12, 13, 14, 15, 18, 19, 20, 21, 26, 27, 30, 33, 34, 38, 40, 44, 54, 57, 59, 60, 61, 62, 65, 67, 71, 73], "hr": [61, 69], "href": [21, 34, 36, 50, 61, 70, 71, 74], "htm": [4, 54, 59], "html": [0, 3, 4, 21, 24, 34, 35, 36, 38, 43, 45, 48, 50, 52, 53, 58, 59, 61, 67, 69, 70, 71, 72, 73, 74], "html5": 4, "htmlcov": [67, 71], "htmlsafe_dump": 4, "http": [0, 2, 4, 5, 6, 9, 11, 13, 14, 16, 17, 18, 19, 21, 24, 27, 35, 37, 38, 50, 53, 55, 56, 60, 61, 63, 64, 69, 70, 73], "http_host": 29, "http_server": 12, "http_x_http_method_overrid": 41, "httpd": [11, 12, 13, 14, 15, 18, 19], "httpexcept": [0, 4, 6, 21], "httpmethodoverridemiddlewar": 41, "httponli": [0, 4, 74], "httpstatu": 0, "hub": 4, "human": 21, "hypercorn": 10, "hypothetical_flask": 20, "i": [0, 1, 2, 3, 4, 5, 6, 8, 9, 10, 11, 12, 13, 14, 15, 16, 18, 19, 21, 22, 23, 24, 25, 26, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 40, 41, 42, 43, 44, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 70, 71, 72, 73, 74], "ico": 34, "icon": 34, "id": [0, 4, 5, 8, 21, 22, 32, 38, 46, 47, 50, 54, 56, 60, 61, 62, 70, 71, 72, 73, 74], "idea": [0, 3, 20, 22, 29, 30, 31, 32, 35, 38, 43, 47, 51, 52, 57, 59, 68], "ideal": [0, 3, 6, 54, 74], "ident": 70, "identif": 0, "identifi": [0, 24, 56], "idx": 47, "if_match": 0, "if_modified_sinc": 0, "if_none_match": 0, "if_rang": 0, "if_unmodified_sinc": 0, "ifram": [6, 74], "ifrang": 0, "ignor": [0, 4, 6, 32, 54, 57, 67], "ignore_result": 32, "imag": [0, 34, 54, 68, 69, 74], "image_store_": 0, "image_store_base_url": 0, "image_store_config": 0, "image_store_path": 0, "image_store_typ": 0, "imagin": [30, 35, 40, 43, 52, 54, 74], "imdb": 42, "imdb_id": 42, "img": 0, "immedi": [0, 4, 27, 32, 55, 56, 57], "immutabledict": [0, 4], "immutablelist": 0, "immutablemultidict": 0, "immutableorderedmultidict": 49, "impact": 4, "implement": [0, 2, 3, 4, 5, 6, 13, 20, 21, 22, 25, 29, 30, 35, 37, 43, 47, 52, 54, 55, 58, 61, 74], "impli": [26, 53], "implicit": [4, 20, 74], "implicit_seqence_convers": 0, "implicit_sequence_convers": 0, "implicitli": [0, 4, 6], "implicity_sequence_convers": 0, "import": [0, 1, 3, 4, 5, 6, 10, 11, 12, 13, 15, 17, 18, 19, 20, 21, 22, 23, 27, 28, 29, 30, 32, 33, 34, 35, 36, 38, 40, 41, 42, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 66, 67, 70, 71, 72, 73, 74], "import_nam": [0, 4, 40], "import_str": [6, 40], "importerror": 4, "importlib": 4, "importlib_metadata": 4, "imposs": [32, 38], "improv": [0, 2, 4, 6, 21, 24, 37, 51, 74], "inabl": [4, 59], "inact": 0, "inbound": 0, "incident": 26, "includ": [0, 4, 6, 7, 18, 20, 21, 22, 26, 27, 38, 56, 66, 74], "includesubdomain": 74, "incom": [4, 9, 14, 16, 17, 21, 24, 35, 44, 72], "incompat": 4, "inconsist": 6, "inconveni": 44, "incorrect": [0, 4, 70, 71, 72], "incorrectli": [4, 74], "increas": 74, "increment": 59, "inde": 54, "indent": [0, 4, 70], "independ": [6, 22, 25, 55, 64], "index": [0, 3, 20, 21, 22, 27, 28, 30, 36, 40, 43, 45, 47, 50, 51, 52, 54, 58, 60, 67, 68, 70, 71, 72, 74], "index_templ": 30, "indic": [0, 1, 4, 6, 21, 22, 25, 55, 74], "indirect": 26, "individu": [0, 6, 53, 60, 61, 74], "ineffici": [0, 73], "infer": [0, 3], "infinit": [0, 4, 6], "info": [0, 4, 13, 28, 32, 67], "info_nam": 0, "inform": [0, 1, 4, 5, 6, 8, 15, 18, 20, 21, 22, 24, 29, 30, 32, 37, 38, 42, 46, 51, 52, 53, 55, 57, 58, 59, 60, 61, 71, 72, 74], "infrastructur": 20, "inher": 2, "inherit": [0, 2, 4, 6, 20, 24, 36, 37, 42, 54, 73], "ini_opt": 71, "init": [0, 21, 62, 63, 71], "init_app": [6, 22, 23, 30, 62], "init_db": [0, 1, 46, 47, 62, 71], "init_db_command": 62, "init_every_request": [0, 4, 73], "init_jinja_glob": 4, "initi": [0, 1, 3, 4, 6, 23, 24, 27, 30, 37, 56, 57, 59, 71, 72, 73], "inject": [0, 24, 25, 47, 51, 52, 54, 59, 72, 74], "inject_url_default": 0, "inject_us": 59, "inlin": [0, 4], "inner": [43, 48], "innerhtml": 38, "innermost": [0, 52], "inotifi": 5, "input": [0, 5, 25, 35, 36, 44, 52, 53, 54, 61, 69, 70, 71, 72, 74], "input_stream": 0, "input_termin": 0, "insecur": 0, "insensit": 6, "insert": [0, 46, 47, 53, 59, 61, 71, 72], "insid": [0, 4, 5, 6, 20, 29, 32, 36, 43, 45, 59, 61, 64, 70, 71], "inspect": [0, 6, 38], "instal": [0, 2, 4, 5, 6, 9, 16, 21, 22, 23, 24, 35, 37, 42, 43, 54, 59, 60, 61, 62, 65, 67, 71], "instanc": [0, 1, 3, 4, 5, 20, 21, 22, 23, 24, 27, 29, 30, 32, 33, 42, 43, 44, 47, 51, 52, 54, 55, 57, 60, 62, 63, 64, 67, 71, 73], "instance_path": [0, 4, 6, 64], "instance_rel": 0, "instance_relative_config": [0, 6, 64], "instanti": [0, 3, 6, 20, 29, 42, 52], "instead": [0, 1, 3, 4, 5, 6, 9, 11, 12, 13, 14, 18, 19, 20, 21, 22, 24, 27, 28, 29, 32, 33, 35, 38, 39, 40, 43, 46, 47, 54, 55, 56, 58, 59, 60, 61, 62, 63, 64, 70, 71, 72, 73, 74], "instruct": [3, 4, 5, 6, 14, 23, 56, 63, 67], "insufficientstorag": 21, "int": [0, 6, 32, 38, 54, 61, 73], "integ": [0, 32, 46, 54, 62], "integr": [0, 4, 6, 10, 13, 15, 18, 20, 21, 24, 25, 37, 42, 59], "integrityerror": 72, "intellig": 54, "intend": [0, 3, 4, 14, 56], "intent": 3, "interact": [0, 4, 5, 6, 8, 21, 22, 37, 54, 55, 56, 57, 64, 71], "intercept": [17, 74], "interchang": 21, "interest": [0, 6, 27, 35, 51, 52, 59, 68], "interfac": [1, 4, 8, 14, 19, 20, 24, 25, 27, 29, 30, 36, 54, 55, 56, 62], "interfer": [8, 22, 56], "intermedi": [0, 6], "intern": [1, 4, 6, 21, 22, 24, 27, 29, 40, 49, 54, 55, 71], "internal_server_error": 21, "internalservererror": [0, 4, 21], "internation": 37, "interpret": [0, 4, 6, 29, 62, 74], "interrupt": 26, "intfield": 42, "introduc": [3, 4, 5, 6, 20, 21, 51, 54, 56, 58, 66, 71, 73], "introduct": [0, 37, 43, 54, 59], "invalid": [0, 3, 4, 6, 21, 36, 38, 50, 54, 61, 71], "invalid_api_usag": 21, "invalidapiusag": 21, "invent": 52, "invisibli": 74, "invoc": 0, "invok": [0, 3, 4, 5, 21, 22, 48, 54, 60, 71], "involv": [4, 14, 21, 22], "io": [0, 2, 4], "iobas": 0, "ip": [0, 4, 8, 9, 11, 12, 13, 16, 18, 19, 28, 54], "ipv4": 56, "iri": 0, "is_endpoint_expect": 51, "is_json": [0, 4], "is_multiprocess": 0, "is_multithread": 0, "is_null_sess": 0, "is_packag": 4, "is_prim": 0, "is_run_onc": 0, "is_secur": 0, "is_sequ": 0, "is_stream": 0, "is_weak": 0, "isinst": [0, 21, 52], "isn": [0, 4, 8, 20, 21, 62, 69, 74], "iso": 4, "isol": [0, 29, 60, 66], "issu": [1, 4, 5, 7, 17, 20, 21, 22, 27, 32, 57, 58, 64, 74], "ital": 69, "item": [0, 4, 54, 55, 58, 69, 71, 73], "itemapi": 73, "iter": [0, 4, 20, 42, 47, 48, 54, 59], "iter_all_row": 48, "iter_blueprint": 0, "iter_encod": 0, "iteritem": 0, "its": [0, 3, 5, 9, 11, 12, 13, 15, 16, 18, 19, 20, 21, 22, 25, 26, 27, 28, 54, 56, 58, 59, 61, 63, 66, 68, 72, 73], "itsdanger": [0, 4, 25, 27, 66, 68, 74], "itself": [0, 3, 4, 6, 9, 16, 20, 21, 22, 24, 25, 31, 32, 37, 43, 47, 54, 55, 57, 59, 71, 73], "j": [4, 42], "jack": 21, "javascript": [0, 6, 24, 32, 35, 37, 39, 54, 61, 69, 74], "jinja": [0, 4, 20, 24, 25, 27, 38, 50, 54, 61, 68, 70, 74], "jinja2": [0, 3, 4, 20, 48, 53, 54, 59, 66, 74], "jinja_env": [0, 4, 27, 59], "jinja_environ": 0, "jinja_load": [0, 4], "jinja_opt": [0, 4], "job": [0, 50], "john": [0, 47, 54], "join": [0, 4, 6, 34, 35, 48, 61, 64, 71], "jpeg": 35, "jpg": 35, "jqueri": [35, 38], "json": [4, 6, 24, 27, 37, 39, 44, 73], "json_as_ascii": [4, 6], "json_avail": 4, "json_decod": 4, "json_encod": 4, "json_provider_class": 0, "json_sort_kei": [4, 6], "jsondecod": 4, "jsonencod": 4, "jsonifi": [0, 2, 3, 4, 21, 22, 38, 45, 54, 73, 74], "jsonify_mimetyp": [4, 6], "jsonify_prettyprint_regular": [4, 6], "jsonmixin": 4, "jsonprovid": [0, 4], "jsontag": 0, "just": [0, 3, 4, 5, 6, 20, 21, 29, 35, 36, 40, 43, 46, 47, 54, 57, 63, 64, 66, 69, 72, 74], "jython": 4, "k": [0, 13], "keep": [1, 4, 5, 6, 20, 24, 32, 40, 47, 48, 54, 55, 57, 59, 61, 63, 64, 65, 67, 70, 73, 74], "kei": [0, 4, 6, 22, 32, 35, 47, 50, 52, 59, 60, 62, 72], "key_deriv": 0, "keyboardinterrupt": 4, "keyerror": [0, 54], "keystrok": 40, "keyword": [0, 4, 5, 30, 42, 53, 54, 58, 73], "kick": [0, 4], "kind": [0, 6, 40, 54], "kitten": 74, "kjpksz6n": 71, "know": [0, 3, 17, 20, 21, 27, 32, 35, 38, 54, 55, 58, 60, 61, 62, 64, 72, 73, 74], "knowledg": [0, 35], "known": [0, 21, 27, 64, 73, 74], "kwarg": [0, 2, 4, 32, 40, 52, 53, 72], "label": [53, 61, 69, 70], "lack": [0, 20], "lai": 3, "lambda": [4, 62], "land": 20, "lang_cod": 51, "languag": [0, 20, 25, 33, 51, 62], "languageaccept": 0, "larg": [0, 3, 4, 20, 24, 29, 36, 37, 46, 48, 53, 59, 74], "larger": [3, 6, 29, 35, 43], "last": [0, 4, 22, 61, 69, 72], "last_modifi": 0, "lastnam": 47, "late": [0, 37, 66, 71], "later": [0, 3, 5, 6, 21, 27, 30, 32, 35, 54, 56, 62, 64, 72, 74], "latest": [4, 25], "latin": [0, 4], "latter": 51, "launch": [0, 54], "lax": [0, 6, 74], "layer": [0, 3, 20, 29, 37, 74], "layout": [4, 21, 24, 36, 43, 50, 54, 65, 69], "lazi": [4, 22], "lazili": [4, 24, 37], "lazyview": 40, "lead": [0, 21, 59], "leak": [0, 4, 6], "learn": [22, 32, 61, 62, 64, 65, 68], "least": [0, 6, 31], "leav": [4, 34, 64], "led": [4, 60], "left": 0, "leftov": 4, "legitim": 74, "len": [29, 58, 60], "length": [0, 4, 6, 53, 72], "less": [0, 2, 4, 21, 38, 69, 71], "let": [0, 5, 6, 22, 32, 35, 38, 41, 43, 52, 71, 73], "letter": 6, "level": [0, 1, 2, 3, 4, 5, 6, 9, 16, 21, 22, 28, 29, 55, 64, 74], "levelnam": 28, "leverag": 59, "li": [36, 53, 69, 70], "liabil": 26, "liabl": 26, "lib": 6, "librari": [0, 2, 4, 6, 11, 12, 20, 21, 22, 24, 25, 35, 38, 42, 53, 54, 58, 60, 62, 65, 66, 70, 72], "licens": [22, 24], "life": 1, "lifecycl": [24, 58], "lifetim": [0, 4, 24], "lifo": 0, "lightgrai": 69, "lightweight": [24, 58], "like": [0, 1, 3, 4, 5, 6, 9, 10, 11, 12, 15, 16, 20, 21, 22, 23, 25, 27, 29, 30, 32, 35, 38, 40, 42, 43, 46, 50, 51, 52, 53, 54, 55, 57, 58, 59, 61, 62, 63, 64, 66, 67, 68, 69, 70, 72], "likewis": [0, 54], "limit": [0, 4, 6, 20, 26, 35, 36, 58, 59, 74], "limoncello": 4, "line": [4, 8, 9, 16, 19, 24, 25, 30, 54, 60, 61, 62, 69, 71], "linger": 4, "link": [0, 3, 4, 14, 18, 22, 34, 38, 50, 61, 69, 70, 71, 72, 74], "linux": [0, 5, 9, 16, 25, 56, 63, 71], "list": [0, 4, 6, 9, 14, 16, 22, 26, 36, 47, 53, 54, 58, 59, 61, 63, 66, 69, 71, 72, 73], "list_command": 0, "list_storage_class": 0, "list_templ": 4, "listconvert": 0, "listen": [0, 4, 9, 11, 13, 16, 27, 29, 54, 56, 58], "listfield": 42, "listview": 73, "liter": 5, "littl": [4, 6, 35, 46, 47, 52, 53, 74], "live": [0, 60], "ll": [1, 5, 9, 14, 16, 18, 27, 28, 32, 35, 48, 50, 52, 54, 55, 56, 60, 61, 64, 66, 68, 70, 71, 72, 73, 74], "lloyd": 42, "load": [0, 3, 4, 5, 6, 13, 19, 20, 24, 27, 37, 46, 54, 57, 59, 64, 72, 74], "load_app": 0, "load_default": [0, 4], "load_dotenv": [0, 4, 5], "load_dotenv_default": 0, "load_logged_in_us": [70, 72], "load_us": 0, "loader": [0, 4], "loadmodul": 9, "local": [0, 1, 4, 8, 9, 11, 12, 13, 14, 16, 17, 18, 19, 21, 24, 35, 55, 56, 58, 64, 66, 71], "local_auth": 30, "localhost": [4, 6, 9, 16, 32, 46, 56], "localproxi": [1, 55], "localstack": 4, "locat": [0, 3, 4, 5, 6, 9, 16, 35, 38, 50, 54, 60, 62, 64, 66, 71], "lock": [0, 4, 29], "locked_cached_properti": 4, "log": [0, 4, 6, 8, 13, 15, 19, 20, 24, 32, 36, 37, 38, 52, 61, 65, 71, 72, 74], "log_except": 0, "log_request": 0, "log_respons": 0, "log_security_except": 0, "log_template_rend": 0, "log_the_user_in": 54, "logfil": 13, "logger": [0, 4, 21, 28, 54], "logger_handler_polici": [4, 6], "logger_nam": [4, 6], "logic": [2, 3, 4, 33, 51, 54], "login": [4, 28, 36, 37, 38, 43, 53, 54, 60, 61, 67, 69, 70, 71, 74], "login_get": 54, "login_post": 54, "login_requir": [52, 61, 72, 73], "login_us": 28, "loglevel": 32, "logo": 69, "logout": [54, 60, 70, 71], "long": [0, 2, 6, 32], "longer": [0, 4, 5, 20, 27, 32, 38, 51, 54, 60, 71], "look": [0, 3, 4, 5, 9, 11, 12, 16, 20, 21, 22, 24, 27, 28, 29, 30, 35, 36, 40, 42, 43, 50, 53, 54, 55, 58, 59, 60, 61, 67, 68, 69, 70, 73, 74], "lookup": 0, "loop": [10, 18, 20, 24, 36, 61, 70], "lose": [0, 20, 21], "loss": 26, "lossless": 0, "lost": [0, 1, 22], "lot": [0, 6, 27, 46, 48, 51, 57, 64, 68, 73], "loudli": 4, "love": 57, "low": [2, 55], "lower": [3, 4, 22, 35, 73, 74], "lowercas": [0, 4, 6, 22, 73], "lsof": 56, "lstrip": 29, "lt": 54, "luck": 34, "luckili": 22, "ly": 20, "m": [4, 11, 12, 13, 15, 18, 19, 25, 47, 54, 61, 63, 71], "machin": [8, 27, 63], "maco": [25, 56], "macro": [0, 4, 20, 53, 59], "made": [0, 4, 6, 21, 56, 71, 72], "magic": 36, "mai": [0, 3, 4, 5, 6, 9, 11, 12, 14, 16, 20, 21, 22, 23, 25, 26, 28, 34, 35, 37, 38, 42, 49, 50, 54, 55, 56, 58, 60, 62, 63, 67, 74], "mail": [4, 21, 28], "mail_handl": 28, "mailhost": 28, "main": [0, 5, 20, 29, 46, 56, 57, 61], "mainli": [0, 2, 4, 60], "maintain": [0, 4, 14, 20, 22, 24, 54], "mainten": 22, "major": [8, 20, 54], "make": [0, 1, 2, 3, 4, 5, 6, 7, 9, 14, 15, 20, 21, 22, 24, 27, 30, 33, 35, 36, 37, 42, 43, 46, 47, 48, 51, 53, 54, 55, 56, 57, 58, 59, 60, 61, 64, 65, 67, 68, 70, 71, 73, 74], "make_abort": [0, 4], "make_app": [4, 5, 29, 30], "make_celeri": 32, "make_condit": 0, "make_config": 0, "make_context": 0, "make_default_options_respons": [0, 4], "make_dict": 47, "make_form_data_pars": 0, "make_null_sess": 0, "make_report": 55, "make_respons": [0, 4, 54], "make_sequ": 0, "make_setup_st": 0, "make_shell_context": 0, "make_test_environ_build": 4, "makechart": 38, "makedir": 64, "mako": 20, "malform": [4, 54], "malici": 0, "man": 74, "manag": [0, 1, 3, 4, 5, 6, 9, 14, 15, 16, 18, 25, 53, 54, 55, 58, 66, 74], "mandatori": 0, "mani": [0, 2, 4, 6, 7, 11, 12, 13, 14, 17, 18, 20, 22, 23, 27, 35, 37, 42, 46, 53, 54, 58, 60, 63, 65, 74], "manifest": 67, "manual": [0, 5, 9, 24, 37, 38, 54, 60, 70, 73], "map": [0, 3, 4, 6, 37, 51, 52, 72, 73], "mapadapt": 0, "mapper": [42, 46], "margin": 69, "mark": [0, 4, 6, 35, 47, 54, 59, 71], "markdown": [54, 59, 68], "markup": [0, 4, 54, 59, 74], "markupsaf": [4, 25, 48, 54, 66], "master": 18, "match": [0, 4, 5, 6, 8, 21, 27, 48, 51, 53, 55, 60, 61, 71, 72], "match_request": 0, "materi": 26, "math": 0, "matter": [61, 66, 67, 72, 73], "max": [0, 4, 6, 53, 69, 74], "max_ag": [0, 4, 74], "max_content_length": [0, 4, 6, 35, 74], "max_cookie_s": [0, 4, 6], "max_form_memory_part": 6, "max_form_memory_s": [0, 4, 6, 74], "max_form_part": [0, 4, 6, 74], "max_forward": 0, "maximum": [0, 4, 6, 35], "md5": 0, "mdn": [38, 54], "me": [0, 35, 42, 54, 60], "me_api": 54, "mean": [0, 1, 2, 3, 4, 5, 11, 12, 13, 14, 18, 19, 22, 24, 32, 36, 40, 54, 55, 57, 59, 61, 65, 66, 70, 73, 74], "meaning": 54, "measur": 71, "mechan": [0, 35], "media": 0, "meet": [0, 20], "megabyt": [0, 35], "member": 0, "memori": [0, 4, 6, 35, 48, 54, 59, 74], "mention": [6, 52, 54, 74], "menu": 5, "merchant": 26, "merg": [4, 5, 6, 59], "mess": 70, "messag": [1, 4, 5, 21, 24, 28, 37, 53, 55, 56, 60, 61, 62, 64, 70, 71, 72], "message_flash": [0, 4], "met": [26, 71], "metadata": [4, 22, 46, 66], "method": [0, 2, 4, 5, 6, 18, 21, 22, 24, 27, 28, 32, 35, 36, 37, 38, 44, 46, 51, 53, 55, 56, 57, 58, 60, 61, 70, 71, 72, 74], "method_not_allow": 21, "methodnotallow": [0, 21], "methodview": [0, 2, 4, 22, 73], "metric": 58, "mic": 0, "michael": 42, "micro": 24, "microframework": 20, "microsoft": [14, 34], "middl": 74, "middleiniti": 47, "middlewar": [0, 4, 10, 17, 20, 24, 29, 30, 35, 41, 48], "might": [0, 3, 4, 6, 9, 21, 22, 23, 27, 29, 35, 36, 38, 40, 46, 48, 50, 51, 53, 54, 57, 61, 62, 65, 66, 67, 68, 69, 74], "million": [14, 74], "mime": 0, "mimeaccept": 0, "mimetyp": [0, 4, 34, 54], "mimetype_param": 0, "min": [53, 69], "mind": [2, 5, 6, 20, 40, 47, 54, 57, 73, 74], "minim": [20, 24, 32], "minimum": [4, 22, 25], "minut": [31, 52, 73, 74], "mirror": 58, "miss": [0, 4, 54, 71], "misspel": 0, "mistak": 21, "mit": 22, "mitig": [0, 74], "mitm": 74, "mixin": [0, 4], "mkdir": [25, 64, 67], "mkstemp": 71, "mod_proxi": 9, "mod_proxy_http": 9, "mod_proxy_uwsgi": 18, "mod_wsgi": 14, "mode": [0, 4, 8, 18, 21, 22, 24, 47, 55, 56, 60, 63, 64, 66, 71], "model": [0, 24, 30, 32, 42, 46, 54, 58, 73, 74], "model_sav": 58, "modern": [2, 4, 9, 15, 16, 38, 54, 74], "modif": [0, 26], "modifi": [0, 3, 4, 6, 24, 27, 30, 33, 35, 54, 55, 61, 63, 71, 72, 74], "modul": [0, 1, 3, 4, 5, 6, 9, 10, 13, 19, 20, 22, 25, 27, 28, 40, 43, 46, 47, 53, 54, 57, 60, 62, 64, 67, 71, 72], "modular": [21, 24, 30, 43], "module_import": 13, "moment": [0, 2, 35], "mongo": 42, "mongodb": [24, 37], "mongodb_set": 42, "mongoengin": [24, 37], "monkeypatch": 71, "monterei": 56, "month": 0, "more": [0, 1, 3, 4, 5, 6, 8, 11, 12, 14, 15, 18, 20, 21, 22, 24, 25, 27, 28, 30, 32, 33, 35, 38, 42, 46, 47, 48, 51, 52, 53, 54, 56, 57, 58, 59, 61, 62, 63, 64, 65, 66, 68, 69, 71, 73, 74], "most": [0, 1, 2, 3, 5, 6, 14, 18, 20, 21, 22, 27, 34, 35, 37, 38, 43, 46, 50, 54, 55, 58, 61, 62, 64, 71, 74], "mostli": [0, 8, 70], "mount": [0, 3, 6, 18, 34], "mous": 74, "mouth": 54, "move": [0, 1, 4, 22, 30, 33, 43, 55, 74], "movi": 42, "mozilla": [69, 74], "mro": [0, 4], "msg": [4, 36], "much": [0, 4, 6, 11, 12, 20, 22, 35, 47, 48, 71, 74], "multi": 32, "multidict": 0, "multipart": [0, 6, 35, 54, 60, 74], "multipl": [0, 2, 3, 4, 5, 6, 13, 18, 19, 20, 22, 27, 29, 30, 43, 46, 53, 54, 55, 62, 67, 73], "multithread": 0, "must": [0, 4, 5, 6, 11, 12, 13, 15, 17, 18, 22, 26, 27, 32, 38, 47, 50, 53, 54, 61, 70, 71], "mutabl": 0, "mutablemap": 0, "my": [5, 20, 24, 36, 50, 73], "my_extens": 5, "my_index": 52, "my_macro": 59, "my_project": 60, "my_sign": [55, 58], "my_wsgi_app": 0, "myapi": 6, "myapi__credentials__usernam": 6, "myapp": [6, 30, 38, 42], "myapplic": [29, 54], "myflask": 49, "myhost": 4, "mylist": 59, "mymiddlewar": 0, "mypi": 4, "myport": 4, "myproject": [4, 25], "myrequest": 49, "myresponseclass": 0, "mysessioninterfac": 0, "mysql": 6, "myvari": 59, "myview": 73, "n": [0, 28, 36, 48, 54], "naiv": 43, "name": [0, 1, 3, 4, 5, 6, 13, 15, 19, 20, 21, 23, 24, 25, 26, 28, 30, 32, 34, 35, 36, 38, 40, 42, 43, 46, 47, 48, 51, 52, 53, 54, 58, 59, 60, 61, 62, 63, 64, 66, 67, 68, 70, 71, 72, 73], "name_flask": 22, "namedtupl": 47, "namespac": [0, 1, 4, 22, 58], "nativ": [2, 4], "natur": [0, 44, 68], "nav": [69, 70], "navig": [11, 12, 13, 18, 19, 54, 72], "nbodi": 71, "nearest": 0, "nearli": 20, "neat": 52, "necessari": [0, 1, 3, 6, 9, 16, 20, 25, 30, 32, 33, 44, 46, 47, 53, 59, 63, 74], "necessarili": [0, 62], "need": [0, 1, 2, 4, 5, 6, 10, 13, 14, 15, 18, 20, 21, 22, 23, 25, 27, 28, 32, 34, 35, 38, 40, 43, 44, 45, 46, 47, 52, 54, 55, 57, 58, 59, 60, 61, 62, 63, 64, 66, 67, 71, 72, 73, 74], "neg": 0, "neglig": 26, "neither": [26, 74], "nest": [0, 4, 5, 6, 24, 42], "netstat": 56, "network": [4, 14, 21, 54], "never": [0, 20, 21, 35, 40, 47, 54, 58, 72, 74], "new": [0, 1, 4, 5, 6, 21, 22, 23, 29, 35, 38, 43, 52, 53, 54, 55, 58, 59, 61, 62, 63, 65, 66, 68, 71, 72, 73], "newer": [25, 41], "newlin": [0, 4], "next": [0, 4, 5, 6, 14, 29, 35, 36, 40, 43, 52, 54, 64, 68, 71, 72, 73], "nginx": [11, 12, 13, 14, 18, 19, 54], "nice": [21, 30, 52, 54], "nicer": [0, 47, 53], "nlp": 56, "nnn": [54, 64], "no_etag": 0, "noappexcept": 4, "non": [0, 4, 6, 11, 12, 13, 18, 19, 20, 21, 60, 74], "none": [0, 1, 4, 5, 6, 21, 22, 28, 29, 32, 33, 36, 46, 47, 51, 52, 54, 61, 62, 63, 64, 69, 71, 72], "nor": [20, 26], "noreturn": 0, "normal": [0, 3, 4, 54, 57, 71, 72], "nosniff": 74, "not_found": [0, 54], "note": [0, 5, 6, 21, 36, 48, 53, 54, 58], "notfound": [0, 21, 29], "noth": [0, 5, 20, 21, 28, 36, 66, 73], "notic": [26, 40, 52, 53, 54, 62, 71], "notif": [8, 21], "notifi": 58, "now": [0, 4, 5, 15, 17, 20, 21, 25, 27, 32, 34, 35, 43, 47, 53, 54, 58, 59, 60, 61, 62, 64, 66, 67, 68, 69, 70, 72, 73, 74], "nox": 22, "null": [0, 62], "null_session_class": 0, "nullabl": 22, "nullsess": 0, "number": [0, 2, 6, 13, 15, 17, 32, 35, 54], "numer": 20, "nutshel": 0, "o": [0, 4, 6, 15, 34, 35, 64, 71, 74], "obei": 0, "obj": [0, 4], "object": [1, 3, 4, 5, 6, 21, 22, 24, 27, 28, 29, 30, 32, 33, 35, 37, 38, 40, 41, 42, 43, 44, 47, 48, 51, 52, 55, 57, 58, 59, 60, 61, 62, 63, 71, 72, 73], "object_hook": 4, "observ": 66, "obsolet": 39, "obtain": 0, "obviou": 66, "obvious": [3, 20, 54, 59], "occupi": 74, "occur": [0, 4, 8, 15, 21, 54, 55, 58, 72], "oct": 5, "octet": [0, 4], "octob": 22, "od": 0, "odd": 4, "off": [0, 20, 56], "offer": [0, 8, 20, 22], "offici": [22, 42, 46, 54, 59, 65, 66], "often": [0, 6, 9, 16, 28, 33, 47, 54], "ok": [4, 5, 54, 57, 71], "okai": 54, "old": [0, 4, 6, 31, 34, 35, 74], "older": [6, 35, 70, 74], "omit": [54, 61, 62, 72], "on_json_loading_fail": [0, 4], "onc": [0, 3, 4, 5, 6, 11, 12, 22, 29, 51, 59, 60, 62, 65], "onclick": 61, "one": [0, 2, 3, 4, 6, 9, 11, 12, 14, 16, 20, 22, 25, 27, 29, 30, 36, 38, 40, 43, 46, 47, 51, 52, 54, 55, 56, 59, 60, 61, 63, 67, 71, 72, 73, 74], "ones": [0, 4, 21, 34, 43], "onli": [0, 2, 3, 4, 5, 6, 8, 13, 14, 15, 17, 19, 20, 21, 22, 25, 28, 29, 32, 33, 36, 38, 40, 43, 46, 47, 52, 54, 55, 56, 57, 59, 61, 63, 65, 66, 68, 71, 73, 74], "onmouseov": 74, "onto": [0, 4, 5], "onward": [0, 57], "oop": 21, "op": 0, "opaqu": 4, "open": [0, 3, 4, 6, 20, 22, 24, 27, 37, 47, 60, 62, 71], "open_instance_resourc": [0, 4, 6], "open_resourc": [0, 3, 4, 20, 47, 62], "open_sess": 0, "oper": [0, 3, 4, 9, 16, 18, 25, 42, 54, 56, 57, 62, 74], "opposit": 71, "opt": [4, 59], "optim": [0, 18, 40], "option": [3, 4, 6, 13, 15, 18, 19, 21, 24, 36, 38, 40, 41, 43, 54, 55, 56, 58, 59, 60, 61, 63, 66], "order": [0, 4, 5, 6, 20, 27, 29, 47, 49, 54, 58, 61, 73, 74], "order_bi": 38, "ordereddict": 0, "ordinari": 0, "org": 74, "organ": [5, 22, 67, 70, 72], "orig": 0, "origin": [0, 3, 4, 21, 52, 55, 61, 72, 73], "original_except": [0, 4, 21], "orm": 46, "oserror": [5, 54, 56, 64], "other": [0, 1, 3, 4, 5, 6, 9, 11, 12, 14, 15, 16, 18, 20, 21, 22, 23, 24, 25, 26, 27, 29, 32, 33, 38, 40, 43, 48, 54, 55, 56, 57, 58, 60, 61, 62, 63, 64, 65, 66, 67, 69, 70, 71, 73, 74], "other_packag": 28, "otherwis": [0, 1, 4, 6, 8, 11, 12, 13, 18, 19, 21, 22, 26, 29, 35, 38, 43, 46, 52, 53, 54, 56, 61, 62, 63, 71, 72, 74], "our": [3, 21, 22, 35, 54, 60], "out": [0, 3, 4, 5, 6, 9, 16, 20, 25, 26, 27, 29, 34, 35, 40, 42, 51, 54, 59, 61, 63, 65, 68, 70, 71, 72, 74], "outer": 74, "outermost": [27, 52], "outgo": [14, 72], "outgrow": 40, "outlin": [0, 9, 13, 15, 16, 18, 19, 20, 46, 74], "output": [0, 4, 6, 12, 54, 60, 63, 64, 70, 71], "outsid": [0, 1, 4, 6, 9, 16, 22, 27, 28, 37, 47, 54, 55, 64, 71], "outstand": 20, "over": [0, 3, 4, 5, 6, 20, 21, 22, 46, 53, 54, 58, 59, 60, 70, 71, 74], "overhead": [6, 20], "overload": 21, "overrid": [0, 2, 3, 4, 6, 22, 24, 37, 49, 50, 54, 64, 70, 73], "overridden": [0, 3, 4, 6, 22, 64, 70, 71], "oversight": 22, "overview": [5, 24, 25, 36, 54, 63, 65, 68], "overwhelm": [21, 67], "overwrit": 0, "overwritten": 4, "own": [0, 3, 4, 5, 6, 11, 12, 13, 14, 18, 20, 21, 22, 23, 28, 29, 31, 51, 52, 54, 55, 58, 59, 61, 65, 68], "p": [0, 18, 21, 36, 48, 50, 53, 54, 56, 59, 61], "packag": [0, 3, 4, 5, 6, 9, 15, 16, 18, 20, 22, 23, 24, 25, 27, 29, 30, 37, 46, 53, 54, 62, 64, 65, 66, 67, 70, 71], "pad": 69, "page": [0, 3, 4, 6, 8, 9, 13, 14, 15, 16, 18, 19, 24, 25, 29, 32, 37, 38, 50, 52, 53, 54, 55, 58, 59, 60, 61, 62, 64, 68, 69, 70, 71, 72, 73, 74], "page_not_found": [0, 3, 21, 54], "pai": [9, 16], "pain": 0, "pair": [0, 58], "pallet": [4, 5, 7, 22, 26], "parachut": 0, "param": 0, "paramet": [3, 4, 5, 6, 21, 49, 51, 54, 59], "parameter_storage_class": [0, 49], "parametr": 71, "parent": [0, 3, 6, 21, 42, 50, 55, 60], "parenthes": 5, "pars": [0, 4, 5, 6, 38, 44, 74], "parse_arg": 0, "parse_decltyp": 62, "parse_form_data": 0, "parser": [0, 4], "part": [0, 3, 4, 5, 6, 21, 22, 24, 27, 35, 38, 47, 48, 50, 51, 54, 55, 58, 60, 61, 63, 71, 74], "parti": [6, 21, 74], "partial": [4, 59], "particip": 0, "particular": [22, 26, 65, 71], "particularli": [5, 14, 56, 63], "partit": [0, 4, 6], "pass": [0, 1, 4, 5, 6, 8, 17, 20, 21, 22, 23, 27, 30, 33, 36, 37, 38, 40, 41, 46, 47, 48, 52, 53, 54, 55, 56, 59, 60, 61, 64, 71, 72, 73], "pass_script_info": 0, "passdict": 0, "passlist": 0, "passthrough_error": 8, "password": [28, 36, 53, 54, 62, 70, 71, 72], "passwordfield": 53, "past": [0, 20, 24], "patch": [0, 2, 41, 73], "path": [0, 3, 4, 5, 6, 20, 21, 34, 35, 37, 44, 45, 47, 52, 54, 55, 60, 64, 69, 71], "path_info": 29, "path_or_fil": 0, "pathdispatch": 29, "pathlib": [4, 60], "pathlik": [0, 4], "pathnam": 54, "patient": 35, "pattern": [0, 1, 3, 4, 5, 6, 13, 15, 18, 19, 20, 22, 24, 29, 30, 32, 35, 38, 42, 43, 52, 53, 54, 55, 60, 61, 70, 72, 73], "payload": [0, 4, 21, 35], "pbkdf2": 71, "pdf": [4, 35], "peopl": [4, 20, 46, 52, 74], "pep": [4, 27], "per": [0, 4, 6, 11, 12, 22, 29, 51, 68], "percent": 0, "perfect": [4, 6, 22, 29, 57], "perfectli": 21, "perform": [0, 4, 9, 13, 16, 18, 20, 24, 38, 55, 59, 62], "period": [4, 6], "perman": [0, 4, 6, 35, 74], "permanent_session_lifetim": [0, 6, 74], "permiss": [0, 15, 26, 56], "permit": [0, 4, 26], "persist": [20, 27, 54], "person": 54, "perspect": [17, 27], "phase": [22, 27], "php": 35, "pick": [0, 4, 56, 58], "pickl": [0, 4], "pickle_bas": 0, "pictur": [38, 60], "picture_url": 60, "pid": [13, 18], "piec": [4, 44, 48, 59, 60, 74], "pin": [4, 5, 8, 54, 64], "pip": [2, 4, 5, 11, 12, 13, 15, 18, 19, 21, 22, 25, 32, 42, 43, 60, 63, 66, 71], "pitfal": [4, 65], "pixel": 34, "pkg_resourc": 4, "place": [0, 1, 4, 6, 30, 35, 40, 45, 47, 54, 56, 57, 60, 61, 62, 69, 70, 72, 74], "placehold": [70, 72], "plai": [0, 4, 5, 57], "plain": [0, 21, 54, 61, 69], "platform": [13, 17, 18, 24, 63, 71, 74], "pleas": [0, 6, 47, 54, 59], "pleasant": [47, 57], "plu": [0, 74], "pluggabl": [2, 3, 4, 20, 73], "pluggi": 71, "plugin": [24, 35], "png": [35, 38, 60], "point": [0, 1, 3, 4, 5, 6, 9, 16, 18, 22, 27, 32, 33, 38, 44, 47, 48, 54, 55, 56, 57, 62, 65, 71, 74], "pointer": 0, "pointless": 54, "polici": 0, "poll": [32, 35], "pop": [0, 1, 4, 27, 51, 54, 55, 57, 62], "popitem": 0, "popul": [0, 6, 38, 55, 71], "popular": 6, "populate_request": 0, "port": [0, 4, 5, 6, 11, 12, 13, 15, 18, 19, 54, 56, 64], "portabl": 4, "portion": 50, "posit": [0, 54], "possibl": [0, 2, 3, 4, 6, 11, 12, 13, 14, 18, 19, 20, 21, 22, 26, 27, 28, 30, 31, 33, 34, 36, 38, 41, 47, 52, 54, 59, 60, 71, 74], "possibli": 18, "post": [0, 4, 6, 22, 28, 32, 35, 36, 38, 41, 44, 52, 53, 54, 60, 61, 62, 65, 68, 69, 70, 71, 72, 73, 74], "post_id": [0, 54], "post_model": 22, "postapi": 22, "postpon": 4, "postprocess": 0, "potenti": [4, 33, 74], "power": [8, 22, 32, 50, 54, 68], "powershel": [5, 6], "pr": [2, 4, 7], "practic": 24, "pragma": 0, "pre": [0, 4, 9, 16, 69], "preced": [0, 3, 4, 21], "precis": 4, "precompil": 18, "preconfigur": 54, "predat": 2, "preemptiv": 0, "prefer": [0, 4, 5, 6, 11, 12, 20, 22, 30, 38, 46, 56, 72], "preferred_url_schem": [0, 4, 6], "prefix": [0, 3, 4, 6, 9, 16, 21, 22, 29, 36, 40, 51, 52], "preflight": 0, "prefork": 18, "preload": 6, "prepar": 4, "prepend": [0, 72], "preprocess": 44, "preprocess_request": [0, 57, 60], "preprocessor": 0, "present": [0, 3, 4, 5, 6, 20, 21, 54, 55, 56, 59, 74], "preserv": [0, 4, 49, 55], "preserve_context_on_except": 6, "preset": [0, 4], "press": [5, 54, 64], "pretti": [0, 4, 27, 54], "prevent": [0, 4, 6, 74], "preview": 4, "previou": [0, 4, 6, 11, 12, 32, 38, 62, 64], "previous": [0, 4, 22], "price": 14, "primari": [14, 62], "primarili": 54, "primary_kei": [22, 46], "principl": [33, 35], "print": [3, 4, 6, 42, 47, 54, 55, 58, 63], "prior": [4, 26], "prioriti": 3, "privat": [5, 14], "privileg": [11, 12, 13, 15, 18, 19], "proactiv": 28, "probabl": [0, 2, 4, 13, 14, 20, 28, 32, 35, 36, 52, 54, 63], "problem": [0, 3, 4, 6, 20, 21, 25, 35, 40, 43, 54, 55, 59, 74], "process": [0, 2, 4, 11, 12, 13, 15, 18, 19, 20, 22, 27, 29, 30, 32, 44, 53, 55, 56, 74], "process_respons": [0, 57], "processor": [0, 4, 24, 37], "procur": 26, "produc": [4, 38, 45, 54, 60, 70, 73], "product": [0, 4, 5, 9, 11, 12, 16, 20, 21, 24, 25, 26, 27, 28, 29, 35, 54, 56, 65, 71], "productionconfig": 6, "profession": 5, "profil": [21, 38, 48, 54, 74], "profit": 26, "program": [5, 18, 20, 21, 28, 32, 54, 56, 64], "programm": 43, "programmat": 4, "programmingerror": 71, "progress": [32, 37], "project": [1, 2, 3, 4, 5, 6, 20, 21, 22, 24, 25, 28, 40, 43, 45, 54, 61, 62, 63, 64, 65, 68, 71], "promis": 38, "promot": 26, "prompt": 25, "prone": [1, 74], "proof": 0, "propag": [0, 4, 6, 55], "propagate_except": [0, 4, 6], "proper": [0, 4, 20, 21, 57], "properli": [0, 3, 4, 20, 40, 46, 54, 74], "properti": [0, 3, 4, 6, 38, 60], "protect": [0, 8, 25, 54, 74], "proto": [9, 16], "protocol": [0, 20, 41], "provid": [0, 1, 2, 3, 4, 5, 6, 8, 9, 11, 12, 13, 16, 17, 18, 20, 21, 22, 24, 25, 26, 27, 31, 36, 38, 40, 47, 48, 51, 52, 54, 55, 56, 58, 59, 60, 63, 64, 65, 71, 73, 74], "provide_automatic_method": 0, "provide_automatic_opt": [0, 4, 6], "proxi": [0, 1, 3, 4, 9, 11, 12, 13, 14, 15, 16, 18, 19, 21, 24, 27, 41, 54], "proxy_add_x_forwarded_for": 16, "proxy_fix": [17, 54], "proxy_http_modul": 9, "proxy_modul": 9, "proxy_pass": 16, "proxy_set_head": 16, "proxyfix": [17, 27, 54], "proxypass": 9, "ps1": 5, "public": [0, 4, 5, 54, 63], "public_key_pin": 74, "publicli": [14, 22, 54, 63], "publish": [22, 23], "pull": [0, 23, 51], "pull_lang_cod": 51, "punsch": 4, "pure": [13, 19], "purpos": [0, 22, 24, 26, 32], "push": [0, 4, 5, 6, 24, 27, 57, 60], "put": [0, 4, 6, 9, 14, 16, 20, 31, 34, 41, 46, 51, 54, 57, 59, 60], "py": [0, 3, 4, 5, 6, 11, 12, 15, 18, 22, 25, 30, 32, 40, 43, 46, 54, 56, 60, 61, 62, 63, 64, 67, 71, 72], "py3": 63, "pyc": [4, 43, 67], "pycharm": 24, "pyopenssl": 4, "pypi": [2, 4, 11, 12, 13, 18, 22, 23, 25, 32, 46, 53], "pyproject": [4, 5, 43, 66, 67, 71], "pypy3": 4, "pytest": [4, 22, 60, 71], "pytest_cach": 67, "python": [0, 2, 3, 4, 5, 8, 11, 12, 13, 14, 15, 17, 18, 19, 20, 21, 22, 24, 27, 28, 29, 43, 47, 52, 53, 54, 55, 56, 57, 59, 60, 62, 63, 64, 65, 66, 67, 68, 70, 71], "python3": 25, "python_requir": 22, "pythonanywher": 14, "pythonpath": 5, "pythonx": 6, "pyuwsgi": 18, "pywsgi": 12, "qualiti": 22, "quart": 24, "queri": [0, 2, 4, 21, 22, 32, 37, 38, 46, 54, 60, 61, 62, 72, 73], "query_db": 47, "query_properti": 46, "query_str": [0, 55, 60], "question": [0, 6, 7, 20, 34, 47], "queue": [2, 21, 32], "quick": [20, 24, 40, 43, 59], "quickli": [0, 3, 6, 46, 53, 54], "quickstart": [24, 25, 65, 68], "quit": [0, 5, 20, 27, 35, 54, 64, 68], "quot": [4, 5, 38, 74], "r": [0, 4, 46, 47], "rack": 20, "rais": [0, 3, 4, 6, 8, 21, 27, 35, 38, 54, 55, 61, 64, 71], "rakia": 4, "rakija": 4, "random": [0, 6, 54, 58, 63, 64], "rang": [0, 4], "raquo": 54, "rare": 4, "rate": 42, "rather": [0, 1, 2, 3, 4, 5, 6, 11, 12, 17, 30, 32, 47, 54, 55, 56, 60, 63, 69, 70, 71, 72], "raw": [0, 47, 60], "rb": [0, 60, 71], "re": [0, 4, 5, 6, 13, 14, 18, 19, 20, 21, 22, 27, 34, 35, 38, 52, 53, 54, 57, 60, 61, 62, 64, 65, 66, 67, 68, 70, 73], "reach": 0, "react": 54, "read": [0, 3, 6, 9, 13, 15, 16, 18, 19, 21, 22, 23, 32, 35, 38, 44, 47, 52, 53, 54, 57, 60, 62, 63, 69, 71, 74], "readabl": [0, 21], "reader": 0, "readi": [0, 20, 32, 54], "readlin": [4, 44], "readm": 22, "real": [0, 4, 17, 27, 40, 57, 58, 61, 63, 64], "realis": 21, "realli": [29, 30, 34, 36, 51, 52, 54, 58], "realm": 0, "reason": [0, 3, 20, 22, 33, 35, 43, 57, 58], "receiv": [0, 4, 21, 27, 37, 54, 55, 56, 58, 72, 74], "recent": [4, 6, 20, 42, 46, 61], "recipi": 0, "recogn": [6, 74], "recommend": [0, 3, 4, 5, 6, 10, 21, 24, 25, 32, 43, 46, 49, 53, 54, 56, 57, 58, 59, 74], "reconfigur": 6, "reconstruct": 0, "record": [0, 3, 28, 36, 54, 58, 60, 71], "record_onc": 0, "recreat": 32, "red": 36, "redi": 32, "redirect": [0, 3, 4, 20, 24, 27, 28, 29, 34, 35, 36, 37, 52, 53, 55, 61, 70, 71, 72], "redirect_to": 34, "redistribut": 26, "reduc": [4, 51], "refactor": [4, 61], "refer": [0, 1, 6, 20, 22, 30, 34, 43, 54, 55, 61, 62, 73], "referenc": [0, 69], "referr": 0, "reflect": [0, 6, 20], "refresh": [4, 69], "regard": [0, 29], "regardless": [4, 27, 74], "region": 0, "regist": [0, 1, 4, 6, 22, 24, 27, 32, 33, 35, 46, 53, 57, 61, 64, 65, 67, 71, 73], "register_api": 73, "register_blueprint": [0, 3, 4, 5, 22, 30, 61, 72], "register_convert": 62, "register_error_handl": [0, 4, 21], "registr": [4, 24, 53, 62, 64, 72], "registrar": [9, 16], "registrationform": 53, "registri": 0, "regular": [0, 3, 4, 73, 74], "reimplement": 2, "reintroduc": 4, "reiter": 3, "rel": [0, 3, 4, 6, 20, 34, 50, 54, 60, 62, 64, 67, 69, 70], "relat": [0, 1, 4, 5, 6, 20, 22, 27, 37, 42, 47, 55, 72], "relax": 4, "releas": 4, "relev": [4, 22, 28, 34], "reli": [0, 4, 8, 48, 58], "reliabl": [0, 4, 6, 35], "reload": [0, 4, 6, 8, 14, 25, 38, 54, 64, 70], "remain": [0, 2, 4, 20, 22, 40, 59, 60], "remedi": 74, "rememb": [0, 17, 20, 21, 22, 29, 33, 35, 43, 52, 53, 54, 62, 64, 73], "remember_languag": 33, "remot": [4, 8, 17, 28], "remote_addr": [0, 8, 28], "remote_us": 0, "remov": [0, 4, 5, 6, 9, 16, 46, 51, 54, 70, 71, 72, 74], "removehandl": 28, "renam": [4, 43], "render": [3, 4, 20, 21, 24, 25, 29, 36, 37, 48, 50, 52, 53, 58, 59, 70, 71, 72, 73, 74], "render_field": 53, "render_templ": [0, 3, 4, 21, 30, 36, 38, 52, 53, 54, 59, 61, 70, 72, 73], "render_template_str": [0, 4, 59], "renderchart": 0, "rendit": 20, "repackag": 4, "repeat": 53, "repetit": 51, "replac": [0, 4, 5, 21, 33, 37, 41, 52, 59, 70, 71, 72, 74], "replai": 74, "repli": [0, 54], "report": [0, 4, 7, 21, 38, 71], "repositori": [5, 22, 32, 65], "repres": [0, 8, 22, 38, 42, 54], "represent": 0, "reproduc": 26, "req": 0, "request": [1, 2, 3, 4, 6, 7, 8, 9, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 24, 29, 30, 32, 34, 35, 36, 37, 40, 41, 45, 46, 47, 48, 49, 51, 52, 53, 59, 61, 62, 70, 71, 72, 73], "request_class": [0, 49], "request_context": [0, 54], "request_ctx": 0, "request_finish": [0, 27, 55, 58], "request_globals_class": 4, "request_method": 41, "request_or_environ": 0, "request_start": [0, 27, 55, 58], "request_tearing_down": [0, 27, 55, 58], "requestcachecontrol": 0, "requestcontext": [0, 4, 27, 55, 57], "requestedrangenotsatisfi": 0, "requestentitytoolarg": [0, 6, 35], "requestformatt": 28, "requesthead": 9, "requir": [0, 2, 4, 6, 8, 11, 12, 13, 15, 18, 19, 20, 22, 25, 28, 32, 34, 35, 37, 38, 42, 43, 46, 53, 57, 59, 60, 61, 62, 65, 66, 70, 71, 74], "required_method": [0, 4], "rerais": [0, 4], "reset": [0, 60], "resiz": 69, "resolv": [0, 43], "resourc": [0, 1, 4, 20, 21, 22, 24, 38, 51, 54, 57, 60], "resource_not_found": 21, "resp": [0, 54], "respect": [21, 74], "respond": [0, 3, 4, 72], "respons": [2, 4, 6, 14, 21, 24, 27, 28, 32, 33, 35, 38, 48, 55, 57, 60, 62, 64, 71, 72, 74], "response_class": [0, 57], "responsecachecontrol": 0, "responsereturnvalu": 0, "responsestream": 0, "rest": [0, 23, 24, 27, 62, 64, 73], "restart": [5, 54, 64], "restor": [0, 4], "restrict": [0, 4, 6, 74], "restructur": [4, 43], "result": [0, 2, 4, 6, 29, 31, 36, 37, 46, 47, 52, 54, 57, 60, 61, 71, 72], "result_backend": 32, "result_id": 32, "retain": [0, 26], "retri": 0, "retriev": [52, 62, 72], "retry_aft": 0, "return": [0, 1, 2, 3, 4, 5, 6, 20, 22, 24, 27, 28, 29, 30, 32, 33, 34, 35, 36, 37, 40, 41, 42, 43, 44, 45, 46, 47, 48, 51, 52, 53, 54, 55, 57, 58, 59, 60, 61, 62, 64, 67, 70, 71, 72, 73], "reus": 62, "reusabl": [1, 20, 24, 60], "revalid": 0, "reveal": 6, "revers": [0, 4, 9, 11, 12, 13, 14, 15, 16, 17, 18, 19, 51, 54, 59], "reverse_filt": 59, "revert": 4, "review": [65, 68, 74], "rewrit": 4, "rewrot": 4, "rfc": [0, 4, 54], "rich": 59, "right": [0, 35, 40, 51, 69, 74], "rightmost": 3, "risk": [0, 4, 8, 54], "role": 0, "room": 38, "room_detail": 38, "room_url": 38, "root": [0, 4, 6, 11, 12, 13, 15, 18, 19, 20, 28, 34, 38, 54], "root_path": [0, 3, 6, 34], "root_url": 0, "rootdir": 71, "rotat": [4, 6], "roughli": 0, "roundtrip": 48, "rout": [2, 3, 4, 6, 21, 24, 27, 28, 29, 30, 32, 34, 35, 36, 38, 40, 43, 44, 45, 47, 48, 51, 52, 53, 55, 60, 61, 64, 67, 71, 72, 73, 74], "routecal": 0, "router": 4, "routing_except": 0, "routingexcept": [0, 4], "row": [47, 48, 62, 72], "row_factori": [47, 62], "rq": 21, "rsplit": [35, 40], "rss": 68, "rstrip": 29, "rt": [0, 4], "rubi": 20, "rule": [0, 3, 4, 27, 40, 52, 74], "run": [0, 1, 2, 3, 4, 6, 8, 9, 14, 16, 20, 21, 22, 24, 25, 27, 28, 29, 30, 31, 32, 35, 38, 42, 43, 48, 54, 55, 56, 57, 59, 61, 62, 66, 67, 70, 72, 74], "run_command": 0, "run_simpl": 0, "runawai": 4, "runner": [4, 5, 24, 71], "runtim": [0, 2, 4, 6], "runtimeerror": [0, 1, 4, 48, 55], "runtimeexcept": 0, "rv": [0, 21, 44, 47, 52, 58], "safe": [0, 4, 38, 43, 53, 54, 59, 64, 70, 73], "safe_join": [0, 4], "safer": [14, 21], "safeti": 0, "sai": [0, 21, 31, 43, 64, 73, 74], "salt": 0, "same": [0, 1, 2, 3, 4, 5, 6, 11, 12, 13, 18, 20, 21, 22, 28, 29, 30, 32, 34, 38, 40, 46, 52, 54, 55, 59, 60, 61, 62, 66, 70, 71, 72, 73], "sameorigin": 74, "samesit": [0, 4, 6, 74], "sampl": [21, 60], "san": [4, 69], "sansio": 4, "satisfi": 0, "save": [0, 5, 27, 34, 35, 42, 54, 58, 59, 60, 61, 64, 72], "save_sess": 0, "scaffold": 4, "scale": 24, "scan": 5, "scene": [55, 68], "schedul": 32, "schema": [0, 37, 62, 67], "scheme": [0, 4, 6, 16, 22], "schnap": 4, "scienc": 20, "scope": [0, 9, 16, 18, 37], "scoped_sess": 46, "screen": [0, 5], "screenshot": 69, "script": [0, 4, 6, 11, 12, 15, 24, 25, 35, 38, 54, 59], "script_info": 4, "script_nam": 6, "script_root": [0, 38], "scriptinfo": [0, 4], "sdist": [18, 22], "sdk": 21, "search": [0, 3, 22, 23, 54, 56, 68], "searchword": 54, "second": [0, 3, 6, 32, 35, 36, 54, 58, 60, 62, 71, 72], "secret": [0, 4, 6, 36, 64], "secret_kei": [0, 6, 27, 36, 54, 63, 64], "secret_key_fallback": [4, 6], "secret_pag": 52, "section": [11, 12, 14, 16, 20, 24, 32, 38, 54, 59, 64, 70], "secur": [0, 4, 5, 6, 8, 9, 11, 12, 13, 14, 16, 17, 18, 19, 24, 25, 35, 54, 56, 59, 63, 72], "secure_filenam": [35, 54], "securecooki": 0, "securecookiesess": 0, "securecookiesessioninterfac": 0, "security_logg": 0, "securityerror": 6, "securityexcept": 0, "see": [0, 1, 2, 3, 4, 5, 6, 7, 11, 12, 13, 18, 20, 21, 22, 27, 28, 29, 30, 32, 35, 37, 39, 43, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 63, 64, 66, 70, 71, 72, 73], "seed": 4, "seek": 0, "seekabl": 0, "seem": [21, 44], "seen": [32, 68], "segment": 29, "select": [5, 35, 46, 47, 61, 71, 72], "select_jinja_autoescap": 0, "self": [0, 4, 6, 21, 22, 24, 28, 29, 32, 40, 41, 44, 46, 58, 69, 71, 74], "semant": 0, "send": [0, 4, 6, 21, 23, 24, 27, 28, 32, 35, 38, 48, 52, 54, 55, 72, 74], "send_fil": [0, 4, 6], "send_file_max_age_default": [0, 4, 6], "send_from_directori": [0, 4, 34, 35], "send_static_fil": [0, 4, 45], "sender": 0, "sendfil": [0, 4, 6], "sens": [0, 2, 6, 22, 46, 51, 59, 61], "sensibl": 24, "sent": [0, 1, 6, 21, 27, 38, 48, 55, 62, 71, 72, 74], "sentri": [8, 21], "sentry_sdk": 21, "separ": [0, 3, 4, 5, 6, 20, 22, 28, 29, 36, 38, 46, 53, 54, 60, 61, 62, 72], "sequenc": 0, "sequenti": 62, "serial": [0, 4, 32, 38, 54, 74], "serializ": [32, 54], "serif": 69, "seriou": 74, "serv": [0, 2, 4, 5, 6, 9, 10, 11, 12, 14, 16, 19, 24, 25, 34, 35, 38, 45, 54, 63, 64, 69], "serve_forev": 12, "server": [0, 2, 4, 6, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 24, 25, 27, 28, 29, 34, 35, 36, 38, 42, 55, 60, 61, 62, 64, 70, 71, 74], "server_nam": [0, 4, 6, 16], "servic": [0, 5, 14, 22, 26, 32, 56, 74], "session": [1, 4, 6, 20, 24, 25, 27, 32, 36, 38, 46, 55, 57, 59, 63, 71, 72, 73, 74], "session_class": 0, "session_cookie_domain": [0, 4, 6], "session_cookie_httponli": [0, 6, 74], "session_cookie_nam": [0, 4, 6], "session_cookie_partit": [0, 4, 6], "session_cookie_path": [0, 6], "session_cookie_samesit": [0, 4, 6, 74], "session_cookie_secur": [0, 6, 74], "session_interfac": [0, 27], "session_refresh_each_request": [0, 4, 6], "session_transact": [0, 4, 60], "sessioninterfac": [0, 4, 27], "sessionmak": 46, "sessionmixin": 0, "set": [0, 1, 3, 4, 6, 9, 17, 20, 21, 22, 27, 28, 29, 30, 32, 33, 35, 38, 40, 41, 43, 51, 52, 54, 60, 61, 62, 63, 64, 66, 67, 70, 71, 73], "set_cooki": [0, 33, 54, 74], "set_data": 0, "set_debug_flag": 0, "set_default": 32, "set_etag": 0, "setattr": 71, "setdefault": [0, 4, 51], "setformatt": 28, "setlevel": 28, "setup": [0, 4, 5, 11, 12, 13, 15, 18, 19, 21, 22, 24, 38, 42, 57, 60, 65, 67], "setuptool": 4, "sever": [3, 54], "sha": 0, "sha1": [0, 4, 44], "sha256": 71, "shall": 26, "shallow": 0, "share": [0, 3, 22, 70], "shared_task": 32, "she": 35, "shell": [0, 4, 6, 24, 25, 47, 54, 55], "shell_command": 0, "shell_context_processor": [0, 5], "shellcontextprocessorcal": 0, "shelltool": 57, "shift_path_info": 29, "ship": [22, 47], "short": 55, "shortcut": [0, 4, 6, 34, 54], "should": [0, 1, 2, 3, 4, 5, 6, 8, 11, 12, 13, 14, 15, 17, 18, 19, 20, 21, 22, 25, 28, 30, 34, 35, 43, 44, 52, 54, 55, 58, 60, 61, 63, 64, 66, 67, 69, 70, 71, 72, 74], "should_ignore_error": 0, "should_set_cooki": 0, "shouldn": [20, 63, 64], "show": [0, 3, 4, 5, 8, 13, 14, 15, 21, 22, 24, 25, 27, 32, 38, 42, 54, 56, 59, 61, 62, 64, 68, 69, 70, 71, 72, 73, 74], "show_post": [0, 54], "show_subpath": 54, "show_teardown": 55, "show_the_login_form": 54, "show_us": 0, "show_user_profil": 54, "showloginerror": 38, "shown": [0, 4, 6, 11, 12, 13, 15, 18, 19, 21, 32, 38, 54, 60, 61, 70, 72], "shut": [4, 46], "shutdown": [46, 57], "shutdown_sess": 46, "sic": 0, "side": [20, 29, 53, 54], "sign": [0, 6, 25, 54, 72, 74], "signal": [4, 21, 24, 25, 27], "signals_avail": 4, "signatur": [0, 4, 6, 74], "silenc": 0, "silent": [0, 4, 6, 36, 64], "similar": [0, 1, 4, 5, 14, 20, 21, 27, 28, 29, 32, 46, 54, 55, 56, 58, 61, 62, 64, 70, 71], "similarli": [0, 3, 21, 60, 71], "simpl": [0, 1, 3, 5, 6, 13, 20, 21, 29, 32, 35, 37, 38, 40, 44, 46, 47, 50, 52, 54, 60, 64, 67, 71], "simple_blog": 22, "simple_pag": 3, "simpleblog": 22, "simplejson": 4, "simplenamespac": 22, "simpler": [0, 4, 38, 65], "simplest": [28, 32, 38], "simpli": [3, 29, 34, 47, 54], "simplifi": [0, 3, 4, 47, 51, 58], "simul": [0, 9, 16, 55, 71], "sinc": [0, 1, 4, 5, 6, 17, 20, 21, 22, 32, 52, 54, 59, 60, 61, 62, 63, 70, 72, 73], "singl": [0, 4, 6, 14, 19, 20, 22, 24, 37, 38, 40, 47, 51, 67, 68, 73, 74], "site": [0, 6, 21, 24, 35, 50, 52, 56, 59], "situat": [0, 6, 21, 28, 33, 36, 53, 54, 55, 57], "size": [0, 4, 6, 35, 36, 54, 67, 69], "size_hint": 44, "skeleton": 50, "skip": [0, 4, 54, 55], "slash": [0, 4, 29, 52, 54], "slategrai": 69, "slightli": [4, 36], "slow": [31, 38, 62], "small": [0, 4, 6, 15, 18, 21, 24, 35, 43, 62], "smaller": [43, 59], "smtp": 28, "smtphandler": 28, "snake": 74, "snippet": 0, "so": [0, 3, 4, 5, 6, 8, 9, 16, 17, 18, 20, 21, 22, 27, 30, 31, 32, 34, 35, 36, 38, 40, 43, 46, 47, 48, 52, 53, 54, 55, 57, 58, 59, 60, 61, 62, 64, 66, 68, 69, 70, 71, 72, 73, 74], "social": 74, "socket": [0, 56], "softwar": [26, 63], "solid": 69, "solut": [6, 22, 37, 38, 51, 52, 54, 74], "solv": [1, 25, 74], "some": [0, 1, 4, 5, 6, 8, 14, 18, 20, 21, 22, 23, 27, 28, 31, 32, 33, 34, 35, 37, 41, 43, 44, 48, 52, 54, 55, 57, 58, 61, 62, 63, 64, 65, 67, 68, 69, 70, 71, 74], "some_theron_movi": 42, "someon": [35, 74], "someth": [0, 2, 4, 20, 21, 22, 28, 30, 35, 38, 43, 52, 54, 70, 71, 74], "sometim": [0, 3, 21, 29, 33, 36, 44, 48, 54, 59], "somewhat": 40, "somewher": [1, 21, 35, 51, 55], "soon": 28, "sooner": 21, "sorri": 21, "sort": [0, 20, 21, 22], "sort_kei": 0, "sound": [50, 52], "sourc": [0, 3, 6, 21, 22, 26, 71], "spa": 45, "space": [0, 3, 4, 9, 16, 21, 55, 69], "span": [0, 69, 70], "spawn": [0, 2, 18, 54], "spec": [13, 18, 27], "special": [0, 4, 5, 6, 26, 44, 54, 59, 61, 62, 70, 72], "special_api": 44, "special_exception_handl": 0, "specif": [0, 2, 3, 4, 6, 11, 12, 13, 18, 19, 20, 21, 22, 24, 26, 27, 29, 30, 32, 35, 40, 51, 52, 54, 55, 57, 59, 60, 63, 70, 74], "specifi": [0, 3, 4, 5, 13, 15, 18, 19, 22, 28, 34, 35, 54, 58, 61, 74], "speed": [31, 59], "split": [0, 20, 27, 29, 40, 46], "sql": [0, 20, 37, 42, 47, 62, 67, 71, 72], "sqlalchemi": [0, 4, 20, 22, 24, 28, 30, 32, 37, 53, 54], "sqlite": [6, 22, 24, 37, 46, 54, 62, 64], "sqlite3": [46, 47, 62, 71, 72], "sqrt": 0, "src": [5, 74], "ssl": [4, 18], "stabil": 0, "stabl": [4, 5, 14, 56, 63], "stack": [4, 20, 21, 55], "stage": [2, 6, 32, 55], "stale": 0, "stand": 1, "standard": [0, 2, 4, 11, 12, 14, 18, 20, 21, 24, 25, 28, 34, 53, 54, 66, 73], "star": 57, "start": [0, 2, 4, 5, 6, 8, 11, 12, 13, 15, 18, 20, 21, 22, 24, 27, 28, 29, 32, 33, 35, 44, 46, 50, 54, 55, 56, 57, 60, 64, 65, 66, 68, 69, 70, 71, 72, 73], "start_add": 32, "start_respons": [0, 29, 41], "startrespons": 0, "startswith": [3, 21], "startup": 43, "stat": [54, 64], "state": [0, 22, 30, 73, 74], "statement": [0, 3, 4, 21, 22, 46, 47, 48, 54, 57, 60, 70], "static": [0, 4, 20, 24, 27, 34, 38, 43, 45, 50, 65, 67, 70], "static_fold": [0, 3, 4, 45], "static_host": [0, 4], "static_path": 4, "static_url_path": [0, 3, 4, 45], "statu": [0, 21, 27, 35, 45, 54, 61, 71], "status_cod": [0, 21, 58, 60, 71], "stderr": [4, 28], "stdout": [4, 13], "step": [0, 3, 8, 27, 32, 65, 68, 72, 73], "stick": 38, "still": [0, 2, 4, 5, 6, 8, 20, 21, 22, 29, 31, 40, 51, 52, 54, 55, 56, 57, 59, 60, 61, 62, 64, 66, 70, 73, 74], "stmt": 71, "stop": [0, 2, 56, 62], "storag": [4, 21, 49], "store": [0, 4, 6, 20, 22, 24, 27, 30, 32, 35, 44, 52, 54, 57, 60, 62, 70, 72, 73, 74], "stori": 73, "story_list": 73, "str": [0, 3, 4, 6, 21, 32, 71], "straightforward": [0, 18, 30, 35, 52, 64], "strategi": [3, 21, 22], "stream": [4, 6, 19, 20, 24, 28, 37, 44, 54, 74], "stream_templ": [0, 4, 48, 59], "stream_template_str": [0, 4, 48, 59], "stream_with_context": [0, 4, 48, 59], "streamed_respons": [0, 48], "streamhandl": 28, "strftime": 61, "strict": [0, 4, 6, 26], "stricter": 4, "strictli": [0, 74], "string": [0, 4, 5, 6, 20, 22, 40, 46, 47, 48, 51, 52, 53, 54, 59, 60, 61, 64], "stringfield": [42, 53], "stringifi": 38, "strip": 4, "striptag": 54, "strong": [36, 54], "strongli": [4, 6], "structur": [0, 4, 24, 43, 58, 65, 70], "stub": 4, "student": 5, "stuff": 57, "stupid": 74, "style": [3, 43, 50, 54, 67, 69, 70, 73], "stylesheet": [50, 70], "sub": [4, 27], "subclass": [0, 4, 6, 20, 21, 22, 24, 28, 32, 35, 37, 46, 73], "subcommand": 0, "subdomain": [0, 3, 4, 6, 37], "subdomain_match": [0, 4, 6], "subdomaindispatch": 29, "subfold": 45, "subject": 28, "submit": [32, 35, 36, 38, 53, 54, 61, 69, 70, 72, 74], "submodul": 4, "subpath": 54, "subscrib": [0, 4, 24], "subscript": 24, "subsequ": [0, 71, 72], "subset": 0, "substitut": 26, "succe": 72, "success": [0, 4, 21, 32, 62], "successfulli": [0, 28, 32, 36, 71], "suddenli": [40, 54], "sudo": 15, "suffix": 22, "suit": [4, 18], "super": [0, 21, 28, 50], "suppli": [0, 4, 21], "support": [2, 3, 4, 5, 6, 10, 13, 14, 15, 18, 19, 21, 22, 23, 24, 25, 29, 31, 34, 41, 48, 54, 58, 59, 62, 63, 70, 74], "suppos": 4, "suppress": 0, "sure": [0, 3, 4, 6, 9, 13, 15, 16, 18, 19, 21, 24, 27, 35, 43, 46, 47, 51, 54, 55, 58, 61, 70, 71, 74], "surfac": 20, "surpris": 20, "surround": 0, "surviv": 0, "svg": [0, 4, 59], "switch": [4, 6, 11, 12, 62], "sy": [6, 28], "sync": [0, 2, 13, 18], "synchron": [0, 11, 12], "syntax": [0, 4, 13, 19, 20, 38, 56, 59, 70], "syntaxerror": 38, "system": [0, 4, 6, 9, 16, 21, 24, 25, 33, 36, 40, 43, 46, 50, 52, 54, 56, 59, 66, 74], "t": [0, 1, 2, 3, 4, 5, 6, 8, 11, 12, 13, 15, 18, 19, 20, 21, 22, 27, 28, 30, 32, 34, 35, 38, 40, 46, 51, 54, 55, 57, 58, 60, 61, 62, 63, 64, 65, 67, 69, 70, 71, 72, 73, 74], "t_after_request": 0, "t_before_request": 0, "t_error_handl": 0, "t_rout": 0, "t_shell_context_processor": 0, "t_teardown": 0, "t_template_context_processor": 0, "t_template_filt": 0, "t_template_glob": 0, "t_template_test": 0, "t_url_default": 0, "t_url_value_preprocessor": 0, "tab": [4, 34, 70], "tabl": [46, 57, 61, 71], "tag": [4, 23, 34, 35, 38, 50, 52, 59, 63, 68, 70, 74], "tag_class": 0, "tagbyt": 0, "tagdatetim": 0, "tagdict": 0, "taggedjsonseri": [0, 4], "tagmarkup": 0, "tagordereddict": 0, "tagtupl": 0, "taguuid": 0, "take": [0, 3, 4, 5, 20, 21, 27, 28, 29, 31, 32, 38, 53, 54, 56, 60, 61, 62, 65, 69, 71, 72, 73, 74], "taken": [32, 64], "talisman": 74, "talk": 38, "tamper": [54, 72], "target": [0, 74], "task": [11, 12, 20, 24, 37, 54, 65, 68], "task_cl": 32, "task_ignore_result": 32, "task_result": 32, "tci4gzcx": 71, "tcp": 56, "te": 0, "tear": [0, 4, 57, 60], "teardown": [0, 2, 4, 47, 60], "teardown_": 4, "teardown_app_request": 0, "teardown_appcontext": [0, 1, 22, 27, 46, 47, 55, 62], "teardown_appcontext_func": 0, "teardown_db": 1, "teardown_request": [0, 4, 22, 27, 55, 57], "teardown_request_func": 0, "teardown_x": 1, "teardowncal": 0, "technic": 74, "techniqu": [21, 24, 29, 60, 61], "technologi": 20, "tell": [0, 4, 5, 6, 9, 13, 14, 15, 16, 18, 19, 20, 28, 36, 38, 43, 50, 53, 54, 62, 63, 64, 66, 67, 70, 71, 74], "tempfil": [35, 71], "templat": [4, 6, 21, 24, 25, 27, 30, 36, 37, 43, 58, 61, 65, 67, 69, 72, 73, 74], "template_context_processor": 0, "template_filt": [0, 4, 59], "template_fold": [0, 3, 4], "template_glob": [0, 4], "template_nam": [0, 52], "template_name_or_list": 0, "template_rend": [0, 58], "template_test": [0, 4], "templatecontextprocessorcal": 0, "templatenotfound": [3, 70], "templates_auto_reload": [0, 4, 6], "temporari": [0, 35, 54, 71], "temporarili": [0, 4, 8, 58, 59], "tend": [13, 22, 48], "term": [0, 40, 55], "termin": [0, 4, 5, 6, 15, 21, 24, 47, 62, 64, 71], "test": [4, 5, 6, 11, 12, 20, 22, 24, 30, 32, 46, 54, 55, 57, 58, 61, 64, 65, 66, 67], "test_": [60, 71], "test_access_sess": 60, "test_appcontext_sign": 4, "test_auth": [67, 71], "test_auth_token": 60, "test_author_requir": 71, "test_blog": [67, 71], "test_cli_runn": [0, 4, 60, 71], "test_cli_runner_class": 0, "test_client": [0, 4, 55, 58, 60, 71], "test_client_class": [0, 4], "test_config": [64, 71], "test_creat": 71, "test_create_update_valid": 71, "test_db": [67, 71], "test_db_post_model": 60, "test_delet": 71, "test_edit_us": 60, "test_exists_requir": 71, "test_factori": [67, 71], "test_get_close_db": 71, "test_hello": 71, "test_hello_command": 60, "test_index": 71, "test_init_db_command": 71, "test_json_data": 60, "test_login": 71, "test_login_requir": 71, "test_login_validate_input": 71, "test_logout": 71, "test_logout_redirect": 60, "test_modify_sess": 60, "test_regist": 71, "test_register_validate_input": 71, "test_request_context": [0, 4, 54, 55, 57, 60], "test_request_exampl": 60, "test_upd": 71, "test_user_m": 0, "test_validate_user_edit": 60, "testclient": 4, "testcod": 0, "testingconfig": 6, "testpath": 71, "testproject": 3, "testrespons": [0, 60], "text": [0, 4, 6, 21, 36, 38, 46, 48, 50, 54, 59, 60, 62, 69, 70, 71, 74], "textarea": [61, 69], "textfil": 74, "textiobas": 0, "than": [0, 1, 2, 3, 4, 5, 6, 8, 9, 11, 12, 16, 17, 20, 21, 27, 32, 47, 48, 52, 54, 55, 56, 60, 63, 68, 69, 70, 71, 72, 73, 74], "thank": [0, 20, 53], "the_fil": 54, "the_usernam": 47, "thei": [0, 2, 3, 4, 5, 6, 8, 9, 15, 20, 21, 22, 24, 25, 27, 29, 31, 35, 36, 37, 38, 46, 51, 52, 54, 55, 58, 59, 60, 61, 62, 68, 69, 70, 72, 73, 74], "them": [0, 2, 4, 5, 6, 9, 15, 21, 22, 25, 29, 32, 33, 35, 37, 38, 42, 43, 46, 47, 53, 54, 55, 57, 59, 60, 61, 66, 70, 71, 72, 73, 74], "theme": [4, 22, 54, 60], "themselv": [4, 6], "theoret": [0, 74], "theori": 26, "therebi": [0, 4], "therefor": [0, 2, 6, 32, 38], "theron": 42, "thi": [0, 1, 2, 3, 4, 5, 6, 8, 9, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 30, 32, 33, 34, 35, 36, 37, 38, 40, 41, 42, 43, 44, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 69, 70, 71, 72, 73, 74], "thing": [0, 4, 6, 11, 12, 20, 21, 27, 31, 32, 40, 43, 48, 52, 53, 57, 59, 62, 73, 74], "think": 0, "third": [0, 6, 20], "this_is_never_execut": 54, "those": [0, 2, 4, 5, 8, 17, 20, 21, 28, 30, 38, 50, 54, 60, 70, 71, 73], "though": [0, 3, 4, 20, 48, 54, 55, 73], "thread": [0, 2, 4, 19, 24, 29, 46, 54, 55], "threadsaf": 54, "threat": 74, "three": [0, 5, 20, 52, 59, 70, 71], "threshold": 21, "through": [0, 3, 4, 8, 19, 21, 22, 27, 32, 41, 44, 54, 60, 65, 73], "throughout": 68, "throw": 31, "thu": [0, 59], "ti": [2, 20, 32, 62], "tier": 14, "tightli": 15, "time": [0, 2, 3, 4, 5, 6, 14, 20, 21, 22, 30, 31, 33, 52, 54, 55, 57, 58, 61, 62, 64, 71, 73, 74], "timedelta": [0, 4, 6], "timedseri": 74, "timelin": [48, 59], "timeout": [4, 52, 74], "timestamp": [0, 62], "timezon": [0, 4], "tip": 5, "titl": [21, 22, 35, 36, 42, 50, 54, 61, 62, 68, 70, 71], "tl": [9, 16], "tld": 3, "tmp": [6, 46], "to_dict": 21, "to_json": [0, 22, 38, 54, 73], "to_python": 0, "to_url": 0, "toaddr": 28, "todai": 22, "togeth": [32, 46, 55], "toggl": [6, 56], "tojson": [0, 4, 38], "token": [0, 4, 60, 74], "token_hex": [6, 54, 63], "told": [5, 17, 27, 74], "toml": [0, 4, 5, 6, 43, 66, 67, 71], "tomllib": [0, 6], "too": [0, 20, 22, 28, 36, 68, 74], "took": [32, 68, 72], "tool": [4, 6, 8, 20, 22, 24, 56, 63, 66, 71], "toolkit": 24, "top": [0, 3, 4, 5, 6, 20, 42, 43, 54, 55, 64, 67, 69, 74], "topic": [43, 74], "toplevel": 0, "torn": 0, "tort": 26, "total": [41, 71], "total_second": 4, "touch": 6, "tox": 22, "trace": [0, 6, 21], "traceback": [0, 4, 8, 55, 56], "tracebacktyp": 0, "track": [0, 1, 4, 55], "tradeoff": [22, 74], "tradit": [2, 20, 38], "traffic": 74, "trail": [0, 4, 54], "transact": [0, 46], "transfer": 22, "transit": 0, "translat": [27, 54, 74], "transmit": [0, 4, 35, 54, 74], "transpar": 54, "trap": [0, 4], "trap_bad_request_error": [0, 4, 6], "trap_http_except": [0, 6], "trash": 4, "travers": 4, "treat": [0, 4, 6, 9, 16, 20, 27, 54, 55, 60, 64], "tri": [0, 3, 4, 5, 27, 54, 55, 56, 64, 74], "trick": [40, 48, 57, 74], "tricki": [0, 64], "trigger": [0, 2, 3, 4, 5, 21, 54, 57, 74], "trim_namespac": 0, "trivial": 4, "troubl": 20, "true": [0, 3, 4, 6, 8, 22, 30, 32, 35, 36, 42, 46, 47, 53, 56, 58, 60, 61, 64, 71, 73, 74], "truli": [47, 74], "trust": [0, 6, 17, 35, 54], "trusted_host": [0, 4, 6], "truth": 0, "try": [0, 1, 3, 4, 5, 6, 20, 21, 33, 48, 53, 54, 55, 56, 58, 60, 61, 62, 63, 64, 68, 69, 70, 72, 74], "tt0088763": 42, "tune": 13, "tupl": [0, 4, 46, 47, 54, 60, 72], "turbogear": 52, "turn": [4, 8, 21, 72], "tutori": [4, 22, 24, 43, 60, 61, 62, 63, 64, 66, 67, 68, 69, 71, 72], "twice": [4, 54, 70], "two": [0, 3, 5, 11, 12, 20, 32, 38, 40, 43, 50, 54, 59, 61, 72, 73, 74], "txt": [35, 54], "type": [0, 4, 6, 13, 21, 22, 23, 32, 35, 36, 37, 38, 46, 48, 50, 52, 53, 54, 55, 60, 61, 67, 69, 70, 72], "typecheck": 0, "typeddict": 4, "typeerror": [0, 4], "typic": [0, 1, 5, 21, 22, 27, 53, 55, 60, 62, 74], "typo": [0, 4], "u": [0, 27, 32, 38, 46, 53, 57, 61, 74], "ul": [36, 53, 69, 70], "ultim": 2, "unallow": 21, "unauthor": 61, "unavail": [0, 57, 59], "unbind": 0, "unbound": 4, "uncaught": 21, "unchang": [0, 35, 52], "uncheck": 5, "uncom": 9, "uncommon": 27, "undefin": [6, 20], "under": [0, 4, 6, 13, 38, 64, 69], "underli": [0, 54, 55], "underneath": 6, "underscor": [0, 6, 22, 42], "understand": [2, 4, 9, 13, 15, 16, 18, 19, 20, 38, 50, 54, 66], "undertak": 20, "undo": 74, "undocu": 4, "unexpect": [4, 8, 54], "unexpectedli": 71, "unfortun": [6, 22, 52, 74], "unguess": 0, "unhandl": [0, 4, 6, 8, 55], "unicod": 4, "uninstal": 6, "uniqu": [0, 4, 20, 22, 34, 46, 52, 55, 58, 62], "unit": [0, 6, 20, 30, 54, 57, 58, 71], "unittest": [0, 4], "unix": [0, 4, 5], "unknown": [0, 54], "unless": [0, 4, 38, 54, 58, 59, 74], "unlik": [0, 3, 15, 61, 68, 70, 73], "unlimit": [35, 74], "unlink": 71, "unmodifi": 0, "unnecessari": [0, 4, 73], "unpack": 4, "unprint": 4, "unquot": 74, "unregist": [3, 4, 21], "unreleas": 4, "unreli": [0, 4, 20], "unsaf": [38, 74], "unset": [0, 6], "unsign": [4, 6], "unsubscrib": 58, "unsupport": 0, "unsur": 54, "untag": [0, 4], "until": [0, 2, 4, 54, 55, 56, 57, 60, 62, 70], "untrust": [25, 54, 74], "unus": 4, "unwant": [0, 70], "up": [0, 1, 2, 3, 4, 6, 11, 14, 20, 21, 22, 24, 27, 28, 29, 30, 31, 36, 40, 43, 44, 46, 52, 53, 54, 55, 59, 60, 62, 63, 64, 65, 67, 69, 74], "updat": [0, 4, 6, 22, 23, 44, 60, 67, 71, 73, 74], "update_from_json": [38, 73], "update_template_context": 0, "upfront": [40, 57], "upgrad": [4, 74], "upload": [0, 4, 20, 24, 32, 37, 60, 68, 74], "upload_fil": [35, 54], "upload_fold": [0, 35], "uploaded_fil": 54, "upper": [0, 22, 41], "uppercas": [0, 6], "upsid": [2, 46, 47], "upward": [0, 5], "uri": [0, 74], "url": [4, 6, 20, 21, 22, 24, 27, 28, 29, 35, 37, 52, 60, 61, 64, 70, 71, 74], "url_build_error_handl": [0, 4], "url_default": [0, 51], "url_default_funct": 0, "url_for": [0, 3, 4, 6, 21, 28, 34, 35, 36, 38, 50, 51, 52, 53, 54, 59, 61, 69, 70, 72, 73], "url_map": [0, 3, 4, 51, 52], "url_map_class": [0, 4], "url_prefix": [0, 3, 4, 30, 51, 61, 72], "url_root": 0, "url_rul": [0, 40], "url_rule_class": 0, "url_schem": [0, 4], "url_value_preprocessor": [0, 27, 51], "urldefaultcal": 0, "urlencod": 60, "urlvaluepreprocessorcal": 0, "us": [1, 3, 4, 5, 6, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 24, 25, 26, 27, 28, 29, 32, 33, 34, 35, 36, 37, 38, 40, 41, 42, 43, 44, 45, 46, 48, 49, 50, 52, 53, 55, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 70, 71, 72, 73], "usag": [0, 4, 6, 23, 37, 44, 53, 57], "use_cooki": 0, "use_debugg": [0, 8], "use_evalex": 0, "use_reload": [0, 8], "use_x_sendfil": [0, 4, 6], "user": [0, 3, 4, 5, 6, 14, 15, 21, 22, 28, 29, 32, 33, 35, 36, 37, 38, 40, 46, 47, 52, 53, 54, 57, 59, 60, 61, 62, 65, 66, 67, 71, 72, 73, 74], "user123": 6, "user_ag": 0, "user_agent_class": 0, "user_api": 21, "user_cli": 5, "user_detail": [38, 73], "user_id": [0, 21, 22, 32, 38, 47, 60, 71, 72, 74], "user_imag": 54, "user_lang": 33, "user_list": [38, 73], "user_profil": 21, "user_set": 0, "user_upd": 38, "user_url": 38, "userag": 0, "userlist": 73, "usernam": [0, 3, 6, 21, 28, 35, 36, 38, 40, 47, 53, 54, 60, 61, 62, 70, 71, 72, 74], "users_api": 54, "users_list": 73, "usr": 6, "usual": [0, 3, 4, 6, 8, 20, 22, 23, 27, 28, 36, 38, 40, 47, 54, 60], "utc": 4, "utf": [0, 4], "utf8": [62, 71], "util": [0, 3, 4, 6, 29, 35, 40, 42, 54, 60], "utilis": [2, 10], "utility_processor": 59, "uuid": [0, 54], "uwsgi": [12, 14], "v": [0, 62, 71], "valid": [0, 4, 6, 11, 12, 13, 18, 19, 20, 21, 22, 24, 29, 35, 37, 38, 54, 61, 68, 70, 71, 72, 73, 74], "valid_login": 54, "valid_method": 0, "validate_edit_us": 60, "valu": [0, 4, 5, 13, 15, 17, 18, 20, 21, 22, 24, 27, 30, 32, 35, 36, 38, 41, 42, 47, 51, 52, 53, 54, 55, 58, 59, 60, 61, 62, 63, 64, 70, 71, 72, 73, 74], "valueerror": [0, 4], "valuesview": 0, "var": [0, 4, 6, 54, 55, 63], "vari": [0, 4], "variabl": [0, 3, 4, 13, 19, 20, 21, 24, 25, 38, 43, 47, 58, 59, 60, 61, 71, 72], "variable_nam": [0, 54], "variant": [0, 74], "varieti": [5, 20], "variou": [0, 4, 20, 31, 44, 73, 74], "ve": [2, 22, 61, 66, 68, 70, 71], "vector": 74, "venv": [5, 11, 12, 13, 15, 18, 19, 25, 63, 67], "verbos": 71, "veri": [0, 3, 4, 6, 18, 20, 21, 22, 28, 29, 30, 33, 35, 44, 46, 50, 53, 54, 59, 61, 69, 71, 74], "verif": 4, "version": [0, 2, 3, 6, 21, 22, 24, 28, 30, 35, 36, 51, 54, 57, 59, 63, 64, 66, 67, 69], "versu": 46, "vertic": 69, "via": [0, 2, 6, 34, 53], "view": [1, 2, 3, 4, 6, 20, 21, 24, 27, 30, 33, 34, 35, 37, 43, 48, 51, 54, 55, 60, 61, 62, 65, 68, 69, 70, 71], "view_arg": 0, "view_func": [0, 40, 73], "view_funct": 0, "view_rv": 0, "viewpoint": 0, "violat": 41, "virtual": [4, 24, 63, 66, 67], "virtualenv": [6, 11, 12, 13, 15, 18, 19, 24, 63], "visibl": [0, 4, 22, 28, 56], "visit": [54, 61, 64, 72], "visual": 61, "vnd": 34, "vodka": 0, "vote": 42, "vulner": [72, 74], "w": [13, 18], "wa": [0, 3, 4, 6, 20, 21, 27, 32, 35, 44, 46, 47, 51, 54, 55, 56, 59, 60, 61, 62, 71, 72, 74], "wai": [0, 1, 2, 3, 4, 6, 7, 18, 20, 21, 22, 26, 27, 28, 30, 31, 32, 33, 34, 35, 36, 38, 41, 42, 43, 46, 51, 52, 54, 55, 56, 57, 58, 59, 60, 61, 63, 64, 65, 71, 72, 73, 74], "wait": [0, 32, 56], "waitress": [14, 63], "walk": [65, 73], "want": [0, 2, 3, 4, 5, 6, 8, 13, 14, 20, 21, 22, 27, 28, 29, 30, 32, 33, 34, 35, 36, 38, 43, 44, 46, 47, 48, 49, 51, 52, 53, 54, 55, 57, 58, 59, 60, 61, 62, 63, 65, 68, 70, 71], "want_form_data_pars": 0, "warn": [0, 4, 6, 28, 54, 74], "warranti": 26, "wasn": [0, 2], "watchdog": 25, "we": [0, 3, 6, 9, 16, 20, 21, 25, 29, 30, 32, 33, 34, 35, 38, 40, 43, 46, 47, 50, 51, 52, 53, 54, 60, 62, 73, 74], "weak": 0, "weakref": 0, "web": [0, 3, 5, 6, 14, 20, 22, 24, 27, 34, 36, 37, 52, 62, 64, 68, 74], "webob": 20, "webpag": 50, "webserv": [0, 20, 29, 30, 35], "websit": [0, 22, 34, 46, 53, 74], "websocket": 2, "weight": 69, "welcom": 50, "well": [0, 2, 3, 4, 6, 11, 12, 20, 22, 23, 24, 27, 31, 32, 34, 35, 38, 42, 44, 46, 51, 54, 58, 59, 67, 70], "went": [28, 54], "were": [0, 4, 6, 20, 21, 31, 36, 54, 57, 58, 71, 74], "weren": 4, "werkzeug": [0, 1, 4, 6, 8, 17, 20, 21, 24, 25, 27, 29, 35, 40, 49, 52, 54, 55, 60, 61, 63, 66, 68, 72], "what": [0, 3, 4, 6, 9, 13, 15, 16, 17, 18, 19, 21, 22, 24, 25, 27, 31, 32, 33, 35, 40, 43, 54, 56, 57, 58, 59, 60, 61, 63, 65, 68, 72, 73, 74], "whatev": [0, 27, 32], "wheel": [18, 63, 66], "when": [0, 1, 3, 4, 5, 6, 8, 9, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 24, 25, 27, 28, 30, 31, 32, 33, 35, 36, 38, 43, 44, 46, 47, 48, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 61, 62, 63, 64, 65, 71, 72, 73, 74], "when_template_rend": 58, "whenev": [0, 5, 20, 47, 58, 59, 64, 74], "where": [0, 3, 4, 5, 6, 20, 21, 22, 32, 33, 35, 43, 46, 47, 51, 52, 54, 55, 57, 61, 62, 64, 66, 67, 70, 71, 72, 73, 74], "wherea": 2, "wherev": 5, "whether": [0, 2, 4, 6, 14, 26, 32], "which": [0, 1, 2, 3, 4, 5, 6, 8, 11, 12, 13, 14, 15, 18, 19, 20, 21, 27, 28, 29, 30, 32, 35, 36, 38, 40, 47, 50, 51, 53, 54, 55, 57, 58, 60, 62, 63, 64, 68, 70, 71, 72, 73, 74], "while": [0, 1, 3, 4, 5, 6, 20, 21, 22, 23, 32, 35, 43, 46, 48, 52, 54, 55, 56, 64, 65, 67, 71, 74], "whiski": 4, "white": [4, 21, 54, 69], "whl": [63, 66], "who": [35, 72], "whole": [0, 3, 4, 20, 51, 54, 59], "why": [0, 4, 6, 20, 21, 24, 30, 32, 35, 46, 54, 74], "wide": [0, 4, 20, 21], "width": 69, "wiki": [5, 54], "wikipedia": [34, 74], "will_not_be_escap": 59, "window": [0, 4, 5, 6, 9, 13, 15, 16, 18, 19, 25, 38, 56, 63, 70, 74], "winerror": [5, 54, 56, 64], "wish": [2, 36], "with_appcontext": [0, 4, 5], "with_categori": [0, 36], "withgoogl": 74, "within": [0, 1, 2, 3, 4, 5, 25, 27, 30, 32, 54, 59, 70, 71], "without": [0, 2, 3, 4, 6, 9, 11, 12, 14, 15, 16, 20, 21, 22, 26, 32, 35, 38, 40, 48, 54, 59, 60, 61, 70, 71, 72, 73, 74], "won": [0, 1, 5, 20, 22, 28, 32, 38, 54, 62, 63, 69, 71, 72, 74], "wonder": [46, 54], "word": 22, "work": [0, 1, 2, 3, 4, 5, 6, 8, 11, 12, 13, 18, 20, 21, 22, 24, 25, 27, 35, 37, 40, 41, 46, 47, 52, 53, 54, 59, 60, 61, 62, 64, 67, 68, 69, 71, 73, 74], "workaround": 4, "worker": [0, 2, 4, 11, 12, 13, 15, 18, 19, 21, 22, 27, 32, 55], "world": [0, 6, 20, 27, 29, 43, 52, 54, 55, 60, 64, 67, 71, 72], "wors": 20, "would": [0, 2, 3, 4, 5, 6, 8, 11, 12, 13, 18, 19, 20, 21, 22, 29, 30, 31, 32, 33, 35, 38, 40, 43, 47, 51, 52, 54, 57, 58, 59, 60, 61, 71, 72, 73, 74], "wouldn": [21, 22, 32], "wrap": [0, 2, 4, 10, 17, 20, 22, 27, 40, 41, 44, 52, 54, 55, 59, 72], "wrap_fil": 0, "wrapped_view": 72, "wrapper": [0, 2, 4, 48, 59], "write": [0, 1, 2, 5, 6, 11, 12, 15, 20, 22, 25, 27, 28, 29, 34, 40, 51, 53, 54, 55, 60, 61, 62, 64, 67, 69, 70, 71, 72, 73], "written": [0, 15, 22, 26, 61, 70, 71], "wrong": [4, 6, 17, 21, 28], "wrote": [61, 71, 72], "wsgi": [0, 2, 3, 4, 5, 6, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 24, 25, 27, 28, 29, 30, 35, 44, 48, 55, 63, 74], "wsgi_app": [0, 17, 20, 27, 41, 54, 55], "wsgi_errors_stream": 28, "wsgiapplic": 0, "wsgienviron": 0, "wsgiref": 29, "wsgiserv": 12, "wsgitoasgi": [2, 10], "wsl": [13, 18], "wss": 0, "wtf": 53, "wtform": [24, 37], "www": [0, 54, 60], "www_authent": 0, "wwwauthent": 0, "x": [0, 1, 4, 5, 6, 9, 11, 13, 16, 17, 18, 41, 54, 59, 60, 71], "x_for": 17, "x_host": 17, "x_prefix": 17, "x_proto": 17, "xec": [36, 54], "xhtml": [4, 54, 59], "xml": [4, 20, 54, 59], "xmlhttprequest": 38, "xpath": 20, "xss": [24, 35, 59], "y": [6, 61, 74], "y2l": [36, 54], "ye": [20, 35], "year": [42, 55], "year__gt": 42, "yet": [0, 4, 6, 20, 29, 33, 43, 51, 54, 62, 70], "yield": [0, 4, 48, 58, 59, 60, 71], "yml": 4, "yosemit": 74, "you": [0, 1, 2, 3, 4, 5, 6, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 40, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74], "your": [0, 1, 2, 3, 4, 5, 6, 8, 9, 11, 12, 13, 14, 15, 16, 18, 19, 20, 21, 22, 23, 25, 27, 28, 29, 30, 31, 32, 34, 35, 38, 40, 42, 43, 45, 46, 48, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74], "your_dsn_her": 21, "yourappl": [0, 3, 6, 30, 40, 43, 46, 47], "yourapplication_mod": 6, "yourapplication_set": [0, 6], "yourconfig": 0, "yourpackag": 3, "yourproject": 66, "yourself": [0, 4, 6, 28, 40, 51, 53, 54, 57, 74], "zero": [0, 4], "zip": 4}, "titles": ["API", "The Application Context", "Using async and await", "Modular Applications with Blueprints", "Changes", "Command Line Interface", "Configuration Handling", "Contributing", "Debugging Application Errors", "Apache httpd", "ASGI", "eventlet", "gevent", "Gunicorn", "Deploying to Production", "mod_wsgi", "nginx", "Tell Flask it is Behind a Proxy", "uWSGI", "Waitress", "Design Decisions in Flask", "Handling Application Errors", "Flask Extension Development", "Extensions", "Welcome to Flask", "Installation", "BSD-3-Clause License", "Application Structure and Lifecycle", "Logging", "Application Dispatching", "Application Factories", "Caching", "Background Tasks with Celery", "Deferred Request Callbacks", "Adding a favicon", "Uploading Files", "Message Flashing", "Patterns for Flask", "JavaScript, fetch, and JSON", "AJAX with jQuery", "Lazily Loading Views", "Adding HTTP Method Overrides", "MongoDB with MongoEngine", "Large Applications as Packages", "Request Content Checksums", "Single-Page Applications", "SQLAlchemy in Flask", "Using SQLite 3 with Flask", "Streaming Contents", "Subclassing Flask", "Template Inheritance", "Using URL Processors", "View Decorators", "Form Validation with WTForms", "Quickstart", "The Request Context", "Development Server", "Working with the Shell", "Signals", "Templates", "Testing Flask Applications", "Blog Blueprint", "Define and Access the Database", "Deploy to Production", "Application Setup", "Tutorial", "Make the Project Installable", "Project Layout", "Keep Developing!", "Static Files", "Templates", "Test Coverage", "Blueprints and Views", "Class-based Views", "Security Considerations"], "titleterms": {"": [24, 58], "0": 4, "1": 4, "10": 4, "11": 4, "12": 4, "2": 4, "3": [4, 26, 47], "4": 4, "5": 4, "6": 4, "7": 4, "8": 4, "9": 4, "A": [35, 54, 70], "In": [8, 53, 56, 70], "Not": 20, "On": 55, "One": 20, "The": [1, 3, 8, 20, 22, 53, 54, 55, 59, 61, 64, 70, 72], "With": 36, "about": [0, 54], "abstract": 46, "access": [54, 60, 62], "activ": [25, 60], "ad": [22, 34, 41], "addit": 24, "address": 56, "admin": 28, "after": 57, "ajax": 39, "alreadi": 56, "also": 34, "an": [25, 35, 53, 60], "apach": 9, "api": [0, 21, 24, 54, 73], "applic": [0, 1, 3, 5, 8, 20, 21, 27, 29, 30, 32, 43, 45, 51, 54, 60, 62, 64], "asgi": [10, 20], "async": [2, 13, 18, 20], "authent": [71, 72], "autoescap": 59, "await": [2, 20], "background": [2, 32], "bar": 35, "base": [0, 50, 58, 70, 73], "basic": [6, 28, 30, 48, 73], "befor": 57, "behavior": [22, 54, 59], "behind": 17, "best": 6, "bind": [11, 12, 13, 15, 18, 19], "blog": [61, 71], "blueprint": [0, 3, 5, 21, 43, 51, 61, 72], "bsd": 26, "build": [3, 23, 54, 63], "built": 8, "builtin": 6, "cach": [31, 52], "call": 32, "callback": [33, 55], "categori": 36, "celeri": 32, "central": 40, "chang": 4, "checksum": 44, "child": 50, "circular": 43, "class": [0, 22, 73], "claus": 26, "cli": [0, 60], "client": [0, 60], "code": 56, "combin": 29, "command": [0, 5, 56, 57, 60], "concept": 3, "configur": [0, 6, 9, 16, 22, 28, 42, 63], "connect": [35, 47, 62], "consider": 74, "content": [38, 44, 48, 65, 74], "context": [1, 5, 48, 54, 55, 57, 58, 59, 60], "contribut": 7, "control": 59, "convert": 40, "cooki": [54, 74], "copi": 74, "core": 58, "coverag": 71, "creat": [25, 42, 57, 58, 61, 62, 72], "cross": 74, "csp": 74, "csrf": 74, "custom": [5, 21], "data": [0, 1, 6, 22, 32, 42, 54, 60], "databas": [62, 71], "debug": [5, 6, 8, 21, 54], "debugg": 8, "decis": 20, "declar": 46, "decor": [52, 58, 73], "default": 28, "defer": [33, 56], "defin": [32, 62], "delet": 61, "demand": 47, "depend": [25, 60], "deploi": [14, 54, 63], "describ": 66, "design": 20, "develop": [5, 6, 22, 56, 68], "disabl": 5, "discoveri": [5, 54], "dispatch": [29, 73], "document": [29, 42], "doe": 20, "domain": [9, 16], "dotenv": 5, "dure": 22, "easi": 47, "easier": 35, "email": 28, "endpoint": [52, 72], "engin": 20, "environ": [5, 6, 25], "error": [3, 5, 8, 21, 28, 54, 55, 56], "escap": 54, "event": [1, 2], "eventlet": [11, 13], "exampl": 21, "except": 21, "experi": 57, "explicit": 20, "extens": [2, 22, 23, 28, 30, 46, 53, 54], "extern": [8, 11, 12, 13, 15, 18, 19, 54], "factori": [30, 32, 64, 71], "favicon": 34, "fetch": 38, "file": [3, 5, 6, 35, 54, 62, 69], "filter": [36, 59], "find": 23, "fire": 57, "first": [0, 3, 72], "fixtur": [60, 71], "flash": [0, 36, 54], "flask": [17, 20, 22, 24, 25, 28, 32, 37, 46, 47, 49, 54, 58, 60], "folder": [3, 6], "follow": [38, 60], "forgeri": 74, "form": [53, 60], "frame": 74, "from": [5, 6, 38, 48], "function": 0, "further": [21, 57], "gener": [21, 38, 54], "gentl": 35, "get": [32, 53], "gevent": [12, 13, 18], "global": 0, "good": 54, "greenlet": [2, 25], "guid": 24, "guidelin": 22, "gunicorn": 13, "handl": [6, 21, 27], "handler": [3, 21, 28], "header": 74, "helper": 0, "hint": 73, "hook": 54, "host": 14, "how": [27, 54, 55], "hpkp": 74, "hst": 74, "html": 54, "http": [41, 54, 74], "httpd": 9, "i": [17, 20, 27], "identifi": 60, "ignor": 5, "import": 43, "improv": [30, 35, 57], "incom": 0, "index": 61, "inform": [28, 35, 54], "inherit": 50, "initi": [22, 47, 62], "inject": 28, "insid": 54, "instal": [11, 12, 13, 15, 18, 19, 25, 32, 63, 66], "instanc": 6, "instead": 2, "integr": [5, 32], "interfac": [0, 5, 57], "intern": 0, "internation": 51, "introduct": 35, "issu": 35, "javascript": 38, "jinja": 59, "jqueri": 39, "json": [0, 21, 38, 54, 60, 74], "keep": [0, 68], "kei": [54, 63, 74], "larg": 43, "late": 40, "layer": 46, "layout": [67, 70], "lazili": 40, "librari": 28, "licens": 26, "lifecycl": 27, "lifetim": [1, 55, 73], "line": [0, 5, 56, 57], "load": 40, "local": [20, 54], "log": [21, 28, 54, 70], "login": [52, 72], "logout": 72, "loop": 2, "make": [38, 66], "manual": [1, 46, 55], "map": [40, 42, 46], "mean": 20, "messag": [0, 36, 54], "method": [41, 54, 73], "micro": 20, "middlewar": [27, 54], "mind": 0, "minim": 54, "mod_wsgi": 15, "mode": [5, 6, 54], "model": 22, "modifi": 60, "modular": 3, "mongodb": 42, "mongoengin": 42, "most": 53, "my": 3, "name": [9, 16, 22], "nest": 3, "nginx": 16, "note": [24, 55], "notic": 0, "object": [0, 20, 46, 54], "open": 5, "option": [0, 5, 14, 25, 74], "other": [2, 28, 72], "out": 53, "overrid": 41, "packag": 43, "page": [21, 45], "paramet": 0, "pass": [32, 58], "past": 74, "path": 29, "pattern": 37, "perform": 2, "pin": 74, "platform": 14, "plugin": 5, "polici": 74, "practic": 6, "pro": 35, "processor": [51, 59], "product": [6, 8, 14, 63], "progress": 35, "project": [66, 67], "proxi": [17, 55, 58], "public": 74, "purpos": [1, 55], "push": [1, 55], "pycharm": 5, "python": [6, 25], "quart": 2, "queri": [42, 47], "quickstart": 54, "receiv": 38, "recommend": 22, "redirect": [38, 54, 60], "refer": 24, "regist": [3, 5, 21, 59, 62, 70, 72], "registr": 0, "relat": 46, "reload": [5, 56], "remov": 28, "render": [0, 38, 54], "replac": 38, "request": [0, 22, 27, 28, 33, 38, 44, 54, 55, 57, 58, 60, 74], "requir": [52, 72], "reset": 35, "resourc": [3, 74], "respons": [0, 54], "result": 32, "return": [21, 38], "reusabl": 73, "rout": [0, 20, 54], "rule": 54, "run": [5, 11, 12, 13, 15, 18, 19, 60, 63, 64, 71], "runner": [0, 60], "schema": 47, "script": [5, 74], "secret": [54, 63], "secur": 74, "see": 34, "self": [14, 73], "send": [58, 60], "sender": 58, "serv": 27, "server": [5, 54, 56, 63], "session": [0, 54, 60], "set": [5, 74], "setup": [27, 59, 64, 71], "shell": [5, 57], "signal": [0, 1, 55, 58], "simpl": [36, 43], "singl": 45, "site": 74, "solut": 35, "sql": 46, "sqlalchemi": 46, "sqlite": 47, "standard": 59, "static": [3, 54, 69], "store": 1, "stream": [0, 48, 59], "strict": 74, "structur": 27, "subclass": 49, "subdomain": 29, "subscrib": 58, "subscript": 58, "support": [0, 20], "system": 20, "tabl": 62, "tag": 0, "task": [2, 32], "teardown": 55, "techniqu": 22, "tell": 17, "templat": [0, 3, 20, 38, 48, 50, 52, 53, 54, 59, 70], "termin": 74, "test": [0, 60, 71], "thi": 29, "thread": 20, "tool": 21, "transport": 74, "tutori": 65, "type": 74, "unhandl": 21, "uniqu": 54, "updat": 61, "upload": [35, 54], "url": [0, 3, 38, 40, 51, 54, 72, 73], "us": [0, 2, 23, 30, 47, 51, 54, 56, 74], "usag": 48, "user": [24, 70], "uwsgi": 18, "valid": 53, "valu": 6, "variabl": [5, 6, 54, 73], "version": [4, 25], "view": [0, 22, 38, 40, 52, 53, 72, 73], "virtual": 25, "virtualenv": 5, "visibl": 54, "waitress": 19, "watch": 5, "web": 54, "welcom": 24, "werkzeug": 28, "what": 20, "when": 2, "why": 3, "work": [29, 43, 55, 57], "wsgi": 54, "wtform": 53, "x": 74, "xss": 74}}) diff --git a/_build/server/index.html b/_build/server/index.html new file mode 100644 index 00000000..6937b3aa --- /dev/null +++ b/_build/server/index.html @@ -0,0 +1,190 @@ + + + + + + + + Development Server — Flask Documentation (3.1.x) + + + + + + + + + + + + + + + + +
+
+
+
+ +
+

Development Server

+

Flask provides a run command to run the application with a development server. In +debug mode, this server provides an interactive debugger and will reload when code is +changed.

+
+

Warning

+

Do not use the development server when deploying to production. It +is intended for use only during local development. It is not +designed to be particularly efficient, stable, or secure.

+

See Deploying to Production for deployment options.

+
+
+

Command Line

+

The flask run CLI command is the recommended way to run the development server. Use +the --app option to point to your application, and the --debug option to enable +debug mode.

+
$ flask --app hello run --debug
+
+
+

This enables debug mode, including the interactive debugger and reloader, and then +starts the server on http://localhost:5000/. Use flask run --help to see the +available options, and Command Line Interface for detailed instructions about configuring and using +the CLI.

+
+

Address already in use

+

If another program is already using port 5000, you’ll see an OSError +when the server tries to start. It may have one of the following +messages:

+
    +
  • OSError: [Errno 98] Address already in use

  • +
  • OSError: [WinError 10013] An attempt was made to access a socket +in a way forbidden by its access permissions

  • +
+

Either identify and stop the other program, or use +flask run --port 5001 to pick a different port.

+

You can use netstat or lsof to identify what process id is using +a port, then use other operating system tools stop that process. The +following example shows that process id 6847 is using port 5000.

+
+
$ netstat -nlp | grep 5000
+tcp 0 0 127.0.0.1:5000 0.0.0.0:* LISTEN 6847/python
+
+
+
+

macOS Monterey and later automatically starts a service that uses port +5000. You can choose to disable this service instead of using a different port by +searching for “AirPlay Receiver” in System Preferences and toggling it off.

+
+
+

Deferred Errors on Reload

+

When using the flask run command with the reloader, the server will +continue to run even if you introduce syntax errors or other +initialization errors into the code. Accessing the site will show the +interactive debugger for the error, rather than crashing the server.

+

If a syntax error is already present when calling flask run, it will +fail immediately and show the traceback rather than waiting until the +site is accessed. This is intended to make errors more visible initially +while still allowing the server to handle errors on reload.

+
+
+
+

In Code

+

The development server can also be started from Python with the Flask.run() +method. This method takes arguments similar to the CLI options to control the server. +The main difference from the CLI command is that the server will crash if there are +errors when reloading. debug=True can be passed to enable debug mode.

+

Place the call in a main block, otherwise it will interfere when trying to import and +run the application with a production server later.

+
if __name__ == "__main__":
+    app.run(debug=True)
+
+
+
$ python hello.py
+
+
+
+
+ + +
+
+
+
+ + +
+
+ + + diff --git a/_build/shell/index.html b/_build/shell/index.html new file mode 100644 index 00000000..329f80b0 --- /dev/null +++ b/_build/shell/index.html @@ -0,0 +1,192 @@ + + + + + + + + Working with the Shell — Flask Documentation (3.1.x) + + + + + + + + + + + + + + +
+
+
+
+ +
+

Working with the Shell

+
+Changelog
+

Added in version 0.3.

+
+

One of the reasons everybody loves Python is the interactive shell. It +basically allows you to execute Python commands in real time and +immediately get results back. Flask itself does not come with an +interactive shell, because it does not require any specific setup upfront, +just import your application and start playing around.

+

There are however some handy helpers to make playing around in the shell a +more pleasant experience. The main issue with interactive console +sessions is that you’re not triggering a request like a browser does which +means that g, request and others are not +available. But the code you want to test might depend on them, so what +can you do?

+

This is where some helper functions come in handy. Keep in mind however +that these functions are not only there for interactive shell usage, but +also for unit testing and other situations that require a faked request +context.

+

Generally it’s recommended that you read The Request Context first.

+
+

Command Line Interface

+

Starting with Flask 0.11 the recommended way to work with the shell is the +flask shell command which does a lot of this automatically for you. +For instance the shell is automatically initialized with a loaded +application context.

+

For more information see Command Line Interface.

+
+
+

Creating a Request Context

+

The easiest way to create a proper request context from the shell is by +using the test_request_context method which creates +us a RequestContext:

+
>>> ctx = app.test_request_context()
+
+
+

Normally you would use the with statement to make this request object +active, but in the shell it’s easier to use the +push() and +pop() methods by hand:

+
>>> ctx.push()
+
+
+

From that point onwards you can work with the request object until you +call pop:

+
>>> ctx.pop()
+
+
+
+
+

Firing Before/After Request

+

By just creating a request context, you still don’t have run the code that +is normally run before a request. This might result in your database +being unavailable if you are connecting to the database in a +before-request callback or the current user not being stored on the +g object etc.

+

This however can easily be done yourself. Just call +preprocess_request():

+
>>> ctx = app.test_request_context()
+>>> ctx.push()
+>>> app.preprocess_request()
+
+
+

Keep in mind that the preprocess_request() function +might return a response object, in that case just ignore it.

+

To shutdown a request, you need to trick a bit before the after request +functions (triggered by process_response()) operate on +a response object:

+
>>> app.process_response(app.response_class())
+<Response 0 bytes [200 OK]>
+>>> ctx.pop()
+
+
+

The functions registered as teardown_request() are +automatically called when the context is popped. So this is the perfect +place to automatically tear down resources that were needed by the request +context (such as database connections).

+
+
+

Further Improving the Shell Experience

+

If you like the idea of experimenting in a shell, create yourself a module +with stuff you want to star import into your interactive session. There +you could also define some more helper methods for common things such as +initializing the database, dropping tables etc.

+

Just put them into a module (like shelltools) and import from there:

+
>>> from shelltools import *
+
+
+
+
+ + +
+
+
+
+ + +
+
+ + + diff --git a/_build/signals/index.html b/_build/signals/index.html new file mode 100644 index 00000000..9b2d6814 --- /dev/null +++ b/_build/signals/index.html @@ -0,0 +1,250 @@ + + + + + + + + Signals — Flask Documentation (3.1.x) + + + + + + + + + + + + + + +
+
+
+
+ +
+

Signals

+

Signals are a lightweight way to notify subscribers of certain events during the +lifecycle of the application and each request. When an event occurs, it emits the +signal, which calls each subscriber.

+

Signals are implemented by the Blinker library. See its documentation for detailed +information. Flask provides some built-in signals. Extensions may provide their own.

+

Many signals mirror Flask’s decorator-based callbacks with similar names. For example, +the request_started signal is similar to the before_request() +decorator. The advantage of signals over handlers is that they can be subscribed to +temporarily, and can’t directly affect the application. This is useful for testing, +metrics, auditing, and more. For example, if you want to know what templates were +rendered at what parts of what requests, there is a signal that will notify you of that +information.

+
+

Core Signals

+

See Signals for a list of all built-in signals. The Application Structure and Lifecycle +page also describes the order that signals and decorators execute.

+
+
+

Subscribing to Signals

+

To subscribe to a signal, you can use the +connect() method of a signal. The first +argument is the function that should be called when the signal is emitted, +the optional second argument specifies a sender. To unsubscribe from a +signal, you can use the disconnect() method.

+

For all core Flask signals, the sender is the application that issued the +signal. When you subscribe to a signal, be sure to also provide a sender +unless you really want to listen for signals from all applications. This is +especially true if you are developing an extension.

+

For example, here is a helper context manager that can be used in a unit test +to determine which templates were rendered and what variables were passed +to the template:

+
from flask import template_rendered
+from contextlib import contextmanager
+
+@contextmanager
+def captured_templates(app):
+    recorded = []
+    def record(sender, template, context, **extra):
+        recorded.append((template, context))
+    template_rendered.connect(record, app)
+    try:
+        yield recorded
+    finally:
+        template_rendered.disconnect(record, app)
+
+
+

This can now easily be paired with a test client:

+
with captured_templates(app) as templates:
+    rv = app.test_client().get('/')
+    assert rv.status_code == 200
+    assert len(templates) == 1
+    template, context = templates[0]
+    assert template.name == 'index.html'
+    assert len(context['items']) == 10
+
+
+

Make sure to subscribe with an extra **extra argument so that your +calls don’t fail if Flask introduces new arguments to the signals.

+

All the template rendering in the code issued by the application app +in the body of the with block will now be recorded in the templates +variable. Whenever a template is rendered, the template object as well as +context are appended to it.

+

Additionally there is a convenient helper method +(connected_to()) that allows you to +temporarily subscribe a function to a signal with a context manager on +its own. Because the return value of the context manager cannot be +specified that way, you have to pass the list in as an argument:

+
from flask import template_rendered
+
+def captured_templates(app, recorded, **extra):
+    def record(sender, template, context):
+        recorded.append((template, context))
+    return template_rendered.connected_to(record, app)
+
+
+

The example above would then look like this:

+
templates = []
+with captured_templates(app, templates, **extra):
+    ...
+    template, context = templates[0]
+
+
+
+
+

Creating Signals

+

If you want to use signals in your own application, you can use the +blinker library directly. The most common use case are named signals in a +custom Namespace. This is what is recommended +most of the time:

+
from blinker import Namespace
+my_signals = Namespace()
+
+
+

Now you can create new signals like this:

+
model_saved = my_signals.signal('model-saved')
+
+
+

The name for the signal here makes it unique and also simplifies +debugging. You can access the name of the signal with the +name attribute.

+
+
+

Sending Signals

+

If you want to emit a signal, you can do so by calling the +send() method. It accepts a sender as first +argument and optionally some keyword arguments that are forwarded to the +signal subscribers:

+
class Model(object):
+    ...
+
+    def save(self):
+        model_saved.send(self)
+
+
+

Try to always pick a good sender. If you have a class that is emitting a +signal, pass self as sender. If you are emitting a signal from a random +function, you can pass current_app._get_current_object() as sender.

+
+

Passing Proxies as Senders

+

Never pass current_app as sender to a signal. Use +current_app._get_current_object() instead. The reason for this is +that current_app is a proxy and not the real application +object.

+
+
+
+

Signals and Flask’s Request Context

+

Signals fully support The Request Context when receiving signals. +Context-local variables are consistently available between +request_started and request_finished, so you can +rely on flask.g and others as needed. Note the limitations described +in Sending Signals and the request_tearing_down signal.

+
+
+

Decorator Based Signal Subscriptions

+

You can also easily subscribe to signals by using the +connect_via() decorator:

+
from flask import template_rendered
+
+@template_rendered.connect_via(app)
+def when_template_rendered(sender, template, context, **extra):
+    print(f'Template {template.name} is rendered with {context}')
+
+
+
+
+ + +
+
+
+
+ + +
+
+ + + diff --git a/_build/templating/index.html b/_build/templating/index.html new file mode 100644 index 00000000..98386855 --- /dev/null +++ b/_build/templating/index.html @@ -0,0 +1,319 @@ + + + + + + + + Templates — Flask Documentation (3.1.x) + + + + + + + + + + + + + + +
+
+
+
+ +
+

Templates

+

Flask leverages Jinja2 as its template engine. You are obviously free to use +a different template engine, but you still have to install Jinja2 to run +Flask itself. This requirement is necessary to enable rich extensions. +An extension can depend on Jinja2 being present.

+

This section only gives a very quick introduction into how Jinja2 +is integrated into Flask. If you want information on the template +engine’s syntax itself, head over to the official Jinja2 Template +Documentation for +more information.

+
+

Jinja Setup

+

Unless customized, Jinja2 is configured by Flask as follows:

+
    +
  • autoescaping is enabled for all templates ending in .html, +.htm, .xml, .xhtml, as well as .svg when using +render_template().

  • +
  • autoescaping is enabled for all strings when using +render_template_string().

  • +
  • a template has the ability to opt in/out autoescaping with the +{% autoescape %} tag.

  • +
  • Flask inserts a couple of global functions and helpers into the +Jinja2 context, additionally to the values that are present by +default.

  • +
+
+
+

Standard Context

+

The following global variables are available within Jinja2 templates +by default:

+
+
+config
+

The current configuration object (flask.Flask.config)

+
+Changelog
+

Changed in version 0.10: This is now always available, even in imported templates.

+
+
+

Added in version 0.6.

+
+
+ +
+
+request
+

The current request object (flask.request). This variable is +unavailable if the template was rendered without an active request +context.

+
+ +
+
+session
+

The current session object (flask.session). This variable +is unavailable if the template was rendered without an active request +context.

+
+ +
+
+g
+

The request-bound object for global variables (flask.g). This +variable is unavailable if the template was rendered without an active +request context.

+
+ +
+
+url_for()
+

The flask.url_for() function.

+
+ +
+
+get_flashed_messages()
+

The flask.get_flashed_messages() function.

+
+ +
+

The Jinja Context Behavior

+

These variables are added to the context of variables, they are not +global variables. The difference is that by default these will not +show up in the context of imported templates. This is partially caused +by performance considerations, partially to keep things explicit.

+

What does this mean for you? If you have a macro you want to import, +that needs to access the request object you have two possibilities:

+
    +
  1. you explicitly pass the request to the macro as parameter, or +the attribute of the request object you are interested in.

  2. +
  3. you import the macro “with context”.

  4. +
+

Importing with context looks like this:

+
{% from '_helpers.html' import my_macro with context %}
+
+
+
+
+
+

Controlling Autoescaping

+

Autoescaping is the concept of automatically escaping special characters +for you. Special characters in the sense of HTML (or XML, and thus XHTML) +are &, >, <, " as well as '. Because these characters +carry specific meanings in documents on their own you have to replace them +by so called “entities” if you want to use them for text. Not doing so +would not only cause user frustration by the inability to use these +characters in text, but can also lead to security problems. (see +Cross-Site Scripting (XSS))

+

Sometimes however you will need to disable autoescaping in templates. +This can be the case if you want to explicitly inject HTML into pages, for +example if they come from a system that generates secure HTML like a +markdown to HTML converter.

+

There are three ways to accomplish that:

+
    +
  • In the Python code, wrap the HTML string in a Markup +object before passing it to the template. This is in general the +recommended way.

  • +
  • Inside the template, use the |safe filter to explicitly mark a +string as safe HTML ({{ myvariable|safe }})

  • +
  • Temporarily disable the autoescape system altogether.

  • +
+

To disable the autoescape system in templates, you can use the {% +autoescape %} block:

+
{% autoescape false %}
+    <p>autoescaping is disabled here
+    <p>{{ will_not_be_escaped }}
+{% endautoescape %}
+
+
+

Whenever you do this, please be very cautious about the variables you are +using in this block.

+
+
+

Registering Filters

+

If you want to register your own filters in Jinja2 you have two ways to do +that. You can either put them by hand into the +jinja_env of the application or use the +template_filter() decorator.

+

The two following examples work the same and both reverse an object:

+
@app.template_filter('reverse')
+def reverse_filter(s):
+    return s[::-1]
+
+def reverse_filter(s):
+    return s[::-1]
+app.jinja_env.filters['reverse'] = reverse_filter
+
+
+

In case of the decorator the argument is optional if you want to use the +function name as name of the filter. Once registered, you can use the filter +in your templates in the same way as Jinja2’s builtin filters, for example if +you have a Python list in context called mylist:

+
{% for x in mylist | reverse %}
+{% endfor %}
+
+
+
+
+

Context Processors

+

To inject new variables automatically into the context of a template, +context processors exist in Flask. Context processors run before the +template is rendered and have the ability to inject new values into the +template context. A context processor is a function that returns a +dictionary. The keys and values of this dictionary are then merged with +the template context, for all templates in the app:

+
@app.context_processor
+def inject_user():
+    return dict(user=g.user)
+
+
+

The context processor above makes a variable called user available in +the template with the value of g.user. This example is not very +interesting because g is available in templates anyways, but it gives an +idea how this works.

+

Variables are not limited to values; a context processor can also make +functions available to templates (since Python allows passing around +functions):

+
@app.context_processor
+def utility_processor():
+    def format_price(amount, currency="€"):
+        return f"{amount:.2f}{currency}"
+    return dict(format_price=format_price)
+
+
+

The context processor above makes the format_price function available to all +templates:

+
{{ format_price(0.33) }}
+
+
+

You could also build format_price as a template filter (see +Registering Filters), but this demonstrates how to pass functions in a +context processor.

+
+
+

Streaming

+

It can be useful to not render the whole template as one complete +string, instead render it as a stream, yielding smaller incremental +strings. This can be used for streaming HTML in chunks to speed up +initial page load, or to save memory when rendering a very large +template.

+

The Jinja2 template engine supports rendering a template piece +by piece, returning an iterator of strings. Flask provides the +stream_template() and stream_template_string() +functions to make this easier to use.

+
from flask import stream_template
+
+@app.get("/timeline")
+def timeline():
+    return stream_template("timeline.html")
+
+
+

These functions automatically apply the +stream_with_context() wrapper if a request is active, so +that it remains available in the template.

+
+
+ + +
+
+
+
+ + +
+
+ + + diff --git a/_build/testing/index.html b/_build/testing/index.html new file mode 100644 index 00000000..4de4f4f7 --- /dev/null +++ b/_build/testing/index.html @@ -0,0 +1,373 @@ + + + + + + + + Testing Flask Applications — Flask Documentation (3.1.x) + + + + + + + + + + + + + + +
+
+
+
+ +
+

Testing Flask Applications

+

Flask provides utilities for testing an application. This documentation +goes over techniques for working with different parts of the application +in tests.

+

We will use the pytest framework to set up and run our tests.

+
$ pip install pytest
+
+
+

The tutorial goes over how to write tests for +100% coverage of the sample Flaskr blog application. See +the tutorial on tests for a detailed +explanation of specific tests for an application.

+
+

Identifying Tests

+

Tests are typically located in the tests folder. Tests are functions +that start with test_, in Python modules that start with test_. +Tests can also be further grouped in classes that start with Test.

+

It can be difficult to know what to test. Generally, try to test the +code that you write, not the code of libraries that you use, since they +are already tested. Try to extract complex behaviors as separate +functions to test individually.

+
+
+

Fixtures

+

Pytest fixtures allow writing pieces of code that are reusable across +tests. A simple fixture returns a value, but a fixture can also do +setup, yield a value, then do teardown. Fixtures for the application, +test client, and CLI runner are shown below, they can be placed in +tests/conftest.py.

+

If you’re using an +application factory, define an app +fixture to create and configure an app instance. You can add code before +and after the yield to set up and tear down other resources, such as +creating and clearing a database.

+

If you’re not using a factory, you already have an app object you can +import and configure directly. You can still use an app fixture to +set up and tear down resources.

+
import pytest
+from my_project import create_app
+
+@pytest.fixture()
+def app():
+    app = create_app()
+    app.config.update({
+        "TESTING": True,
+    })
+
+    # other setup can go here
+
+    yield app
+
+    # clean up / reset resources here
+
+
+@pytest.fixture()
+def client(app):
+    return app.test_client()
+
+
+@pytest.fixture()
+def runner(app):
+    return app.test_cli_runner()
+
+
+
+
+

Sending Requests with the Test Client

+

The test client makes requests to the application without running a live +server. Flask’s client extends +Werkzeug’s client, see those docs for additional +information.

+

The client has methods that match the common HTTP request methods, +such as client.get() and client.post(). They take many arguments +for building the request; you can find the full documentation in +EnvironBuilder. Typically you’ll use path, +query_string, headers, and data or json.

+

To make a request, call the method the request should use with the path +to the route to test. A TestResponse is returned +to examine the response data. It has all the usual properties of a +response object. You’ll usually look at response.data, which is the +bytes returned by the view. If you want to use text, Werkzeug 2.1 +provides response.text, or use response.get_data(as_text=True).

+
def test_request_example(client):
+    response = client.get("/posts")
+    assert b"<h2>Hello, World!</h2>" in response.data
+
+
+

Pass a dict query_string={"key": "value", ...} to set arguments in +the query string (after the ? in the URL). Pass a dict +headers={} to set request headers.

+

To send a request body in a POST or PUT request, pass a value to +data. If raw bytes are passed, that exact body is used. Usually, +you’ll pass a dict to set form data.

+
+

Form Data

+

To send form data, pass a dict to data. The Content-Type header +will be set to multipart/form-data or +application/x-www-form-urlencoded automatically.

+

If a value is a file object opened for reading bytes ("rb" mode), it +will be treated as an uploaded file. To change the detected filename and +content type, pass a (file, filename, content_type) tuple. File +objects will be closed after making the request, so they do not need to +use the usual with open() as f: pattern.

+

It can be useful to store files in a tests/resources folder, then +use pathlib.Path to get files relative to the current test file.

+
from pathlib import Path
+
+# get the resources folder in the tests folder
+resources = Path(__file__).parent / "resources"
+
+def test_edit_user(client):
+    response = client.post("/user/2/edit", data={
+        "name": "Flask",
+        "theme": "dark",
+        "picture": (resources / "picture.png").open("rb"),
+    })
+    assert response.status_code == 200
+
+
+
+
+

JSON Data

+

To send JSON data, pass an object to json. The Content-Type +header will be set to application/json automatically.

+

Similarly, if the response contains JSON data, the response.json +attribute will contain the deserialized object.

+
def test_json_data(client):
+    response = client.post("/graphql", json={
+        "query": """
+            query User($id: String!) {
+                user(id: $id) {
+                    name
+                    theme
+                    picture_url
+                }
+            }
+        """,
+        variables={"id": 2},
+    })
+    assert response.json["data"]["user"]["name"] == "Flask"
+
+
+
+
+
+

Following Redirects

+

By default, the client does not make additional requests if the response +is a redirect. By passing follow_redirects=True to a request method, +the client will continue to make requests until a non-redirect response +is returned.

+

TestResponse.history is +a tuple of the responses that led up to the final response. Each +response has a request attribute +which records the request that produced that response.

+
def test_logout_redirect(client):
+    response = client.get("/logout", follow_redirects=True)
+    # Check that there was one redirect response.
+    assert len(response.history) == 1
+    # Check that the second request was to the index page.
+    assert response.request.path == "/index"
+
+
+
+
+

Accessing and Modifying the Session

+

To access Flask’s context variables, mainly +session, use the client in a with statement. +The app and request context will remain active after making a request, +until the with block ends.

+
from flask import session
+
+def test_access_session(client):
+    with client:
+        client.post("/auth/login", data={"username": "flask"})
+        # session is still accessible
+        assert session["user_id"] == 1
+
+    # session is no longer accessible
+
+
+

If you want to access or set a value in the session before making a +request, use the client’s +session_transaction() method in a +with statement. It returns a session object, and will save the +session once the block ends.

+
from flask import session
+
+def test_modify_session(client):
+    with client.session_transaction() as session:
+        # set a user id without going through the login route
+        session["user_id"] = 1
+
+    # session is saved now
+
+    response = client.get("/users/me")
+    assert response.json["username"] == "flask"
+
+
+
+
+

Running Commands with the CLI Runner

+

Flask provides test_cli_runner() to create a +FlaskCliRunner, which runs CLI commands in +isolation and captures the output in a Result +object. Flask’s runner extends Click’s runner, +see those docs for additional information.

+

Use the runner’s invoke() method to +call commands in the same way they would be called with the flask +command from the command line.

+
import click
+
+@app.cli.command("hello")
+@click.option("--name", default="World")
+def hello_command(name):
+    click.echo(f"Hello, {name}!")
+
+def test_hello_command(runner):
+    result = runner.invoke(args="hello")
+    assert "World" in result.output
+
+    result = runner.invoke(args=["hello", "--name", "Flask"])
+    assert "Flask" in result.output
+
+
+
+
+

Tests that depend on an Active Context

+

You may have functions that are called from views or commands, that +expect an active application context or +request context because they access request, +session, or current_app. Rather than testing them by making a +request or invoking the command, you can create and activate a context +directly.

+

Use with app.app_context() to push an application context. For +example, database extensions usually require an active app context to +make queries.

+
def test_db_post_model(app):
+    with app.app_context():
+        post = db.session.query(Post).get(1)
+
+
+

Use with app.test_request_context() to push a request context. It +takes the same arguments as the test client’s request methods.

+
def test_validate_user_edit(app):
+    with app.test_request_context(
+        "/user/2/edit", method="POST", data={"name": ""}
+    ):
+        # call a function that accesses `request`
+        messages = validate_edit_user()
+
+    assert messages["name"][0] == "Name cannot be empty."
+
+
+

Creating a test request context doesn’t run any of the Flask dispatching +code, so before_request functions are not called. If you need to +call these, usually it’s better to make a full request instead. However, +it’s possible to call them manually.

+
def test_auth_token(app):
+    with app.test_request_context("/user/2/edit", headers={"X-Auth-Token": "1"}):
+        app.preprocess_request()
+        assert g.user.name == "Flask"
+
+
+
+
+ + +
+
+
+
+ + +
+
+ + + diff --git a/_build/tutorial/blog/index.html b/_build/tutorial/blog/index.html new file mode 100644 index 00000000..407c9349 --- /dev/null +++ b/_build/tutorial/blog/index.html @@ -0,0 +1,422 @@ + + + + + + + + Blog Blueprint — Flask Documentation (3.1.x) + + + + + + + + + + + + + + +
+
+
+
+ +
+

Blog Blueprint

+

You’ll use the same techniques you learned about when writing the +authentication blueprint to write the blog blueprint. The blog should +list all posts, allow logged in users to create posts, and allow the +author of a post to edit or delete it.

+

As you implement each view, keep the development server running. As you +save your changes, try going to the URL in your browser and testing them +out.

+
+

The Blueprint

+

Define the blueprint and register it in the application factory.

+
+
flaskr/blog.py
+
from flask import (
+    Blueprint, flash, g, redirect, render_template, request, url_for
+)
+from werkzeug.exceptions import abort
+
+from flaskr.auth import login_required
+from flaskr.db import get_db
+
+bp = Blueprint('blog', __name__)
+
+
+
+

Import and register the blueprint from the factory using +app.register_blueprint(). Place the +new code at the end of the factory function before returning the app.

+
+
flaskr/__init__.py
+
def create_app():
+    app = ...
+    # existing code omitted
+
+    from . import blog
+    app.register_blueprint(blog.bp)
+    app.add_url_rule('/', endpoint='index')
+
+    return app
+
+
+
+

Unlike the auth blueprint, the blog blueprint does not have a +url_prefix. So the index view will be at /, the create +view at /create, and so on. The blog is the main feature of Flaskr, +so it makes sense that the blog index will be the main index.

+

However, the endpoint for the index view defined below will be +blog.index. Some of the authentication views referred to a plain +index endpoint. app.add_url_rule() +associates the endpoint name 'index' with the / url so that +url_for('index') or url_for('blog.index') will both work, +generating the same / URL either way.

+

In another application you might give the blog blueprint a +url_prefix and define a separate index view in the application +factory, similar to the hello view. Then the index and +blog.index endpoints and URLs would be different.

+
+
+

Index

+

The index will show all of the posts, most recent first. A JOIN is +used so that the author information from the user table is +available in the result.

+
+
flaskr/blog.py
+
@bp.route('/')
+def index():
+    db = get_db()
+    posts = db.execute(
+        'SELECT p.id, title, body, created, author_id, username'
+        ' FROM post p JOIN user u ON p.author_id = u.id'
+        ' ORDER BY created DESC'
+    ).fetchall()
+    return render_template('blog/index.html', posts=posts)
+
+
+
+
+
flaskr/templates/blog/index.html
+
{% extends 'base.html' %}
+
+{% block header %}
+  <h1>{% block title %}Posts{% endblock %}</h1>
+  {% if g.user %}
+    <a class="action" href="{{ url_for('blog.create') }}">New</a>
+  {% endif %}
+{% endblock %}
+
+{% block content %}
+  {% for post in posts %}
+    <article class="post">
+      <header>
+        <div>
+          <h1>{{ post['title'] }}</h1>
+          <div class="about">by {{ post['username'] }} on {{ post['created'].strftime('%Y-%m-%d') }}</div>
+        </div>
+        {% if g.user['id'] == post['author_id'] %}
+          <a class="action" href="{{ url_for('blog.update', id=post['id']) }}">Edit</a>
+        {% endif %}
+      </header>
+      <p class="body">{{ post['body'] }}</p>
+    </article>
+    {% if not loop.last %}
+      <hr>
+    {% endif %}
+  {% endfor %}
+{% endblock %}
+
+
+
+

When a user is logged in, the header block adds a link to the +create view. When the user is the author of a post, they’ll see an +“Edit” link to the update view for that post. loop.last is a +special variable available inside Jinja for loops. It’s used to +display a line after each post except the last one, to visually separate +them.

+
+
+

Create

+

The create view works the same as the auth register view. Either +the form is displayed, or the posted data is validated and the post is +added to the database or an error is shown.

+

The login_required decorator you wrote earlier is used on the blog +views. A user must be logged in to visit these views, otherwise they +will be redirected to the login page.

+
+
flaskr/blog.py
+
@bp.route('/create', methods=('GET', 'POST'))
+@login_required
+def create():
+    if request.method == 'POST':
+        title = request.form['title']
+        body = request.form['body']
+        error = None
+
+        if not title:
+            error = 'Title is required.'
+
+        if error is not None:
+            flash(error)
+        else:
+            db = get_db()
+            db.execute(
+                'INSERT INTO post (title, body, author_id)'
+                ' VALUES (?, ?, ?)',
+                (title, body, g.user['id'])
+            )
+            db.commit()
+            return redirect(url_for('blog.index'))
+
+    return render_template('blog/create.html')
+
+
+
+
+
flaskr/templates/blog/create.html
+
{% extends 'base.html' %}
+
+{% block header %}
+  <h1>{% block title %}New Post{% endblock %}</h1>
+{% endblock %}
+
+{% block content %}
+  <form method="post">
+    <label for="title">Title</label>
+    <input name="title" id="title" value="{{ request.form['title'] }}" required>
+    <label for="body">Body</label>
+    <textarea name="body" id="body">{{ request.form['body'] }}</textarea>
+    <input type="submit" value="Save">
+  </form>
+{% endblock %}
+
+
+
+
+
+

Update

+

Both the update and delete views will need to fetch a post +by id and check if the author matches the logged in user. To avoid +duplicating code, you can write a function to get the post and call +it from each view.

+
+
flaskr/blog.py
+
def get_post(id, check_author=True):
+    post = get_db().execute(
+        'SELECT p.id, title, body, created, author_id, username'
+        ' FROM post p JOIN user u ON p.author_id = u.id'
+        ' WHERE p.id = ?',
+        (id,)
+    ).fetchone()
+
+    if post is None:
+        abort(404, f"Post id {id} doesn't exist.")
+
+    if check_author and post['author_id'] != g.user['id']:
+        abort(403)
+
+    return post
+
+
+
+

abort() will raise a special exception that returns an HTTP status +code. It takes an optional message to show with the error, otherwise a +default message is used. 404 means “Not Found”, and 403 means +“Forbidden”. (401 means “Unauthorized”, but you redirect to the +login page instead of returning that status.)

+

The check_author argument is defined so that the function can be +used to get a post without checking the author. This would be useful +if you wrote a view to show an individual post on a page, where the user +doesn’t matter because they’re not modifying the post.

+
+
flaskr/blog.py
+
@bp.route('/<int:id>/update', methods=('GET', 'POST'))
+@login_required
+def update(id):
+    post = get_post(id)
+
+    if request.method == 'POST':
+        title = request.form['title']
+        body = request.form['body']
+        error = None
+
+        if not title:
+            error = 'Title is required.'
+
+        if error is not None:
+            flash(error)
+        else:
+            db = get_db()
+            db.execute(
+                'UPDATE post SET title = ?, body = ?'
+                ' WHERE id = ?',
+                (title, body, id)
+            )
+            db.commit()
+            return redirect(url_for('blog.index'))
+
+    return render_template('blog/update.html', post=post)
+
+
+
+

Unlike the views you’ve written so far, the update function takes +an argument, id. That corresponds to the <int:id> in the route. +A real URL will look like /1/update. Flask will capture the 1, +ensure it’s an int, and pass it as the id argument. If you +don’t specify int: and instead do <id>, it will be a string. +To generate a URL to the update page, url_for() needs to be passed +the id so it knows what to fill in: +url_for('blog.update', id=post['id']). This is also in the +index.html file above.

+

The create and update views look very similar. The main +difference is that the update view uses a post object and an +UPDATE query instead of an INSERT. With some clever refactoring, +you could use one view and template for both actions, but for the +tutorial it’s clearer to keep them separate.

+
+
flaskr/templates/blog/update.html
+
{% extends 'base.html' %}
+
+{% block header %}
+  <h1>{% block title %}Edit "{{ post['title'] }}"{% endblock %}</h1>
+{% endblock %}
+
+{% block content %}
+  <form method="post">
+    <label for="title">Title</label>
+    <input name="title" id="title"
+      value="{{ request.form['title'] or post['title'] }}" required>
+    <label for="body">Body</label>
+    <textarea name="body" id="body">{{ request.form['body'] or post['body'] }}</textarea>
+    <input type="submit" value="Save">
+  </form>
+  <hr>
+  <form action="{{ url_for('blog.delete', id=post['id']) }}" method="post">
+    <input class="danger" type="submit" value="Delete" onclick="return confirm('Are you sure?');">
+  </form>
+{% endblock %}
+
+
+
+

This template has two forms. The first posts the edited data to the +current page (/<id>/update). The other form contains only a button +and specifies an action attribute that posts to the delete view +instead. The button uses some JavaScript to show a confirmation dialog +before submitting.

+

The pattern {{ request.form['title'] or post['title'] }} is used to +choose what data appears in the form. When the form hasn’t been +submitted, the original post data appears, but if invalid form data +was posted you want to display that so the user can fix the error, so +request.form is used instead. request is another variable +that’s automatically available in templates.

+
+
+

Delete

+

The delete view doesn’t have its own template, the delete button is part +of update.html and posts to the /<id>/delete URL. Since there +is no template, it will only handle the POST method and then redirect +to the index view.

+
+
flaskr/blog.py
+
@bp.route('/<int:id>/delete', methods=('POST',))
+@login_required
+def delete(id):
+    get_post(id)
+    db = get_db()
+    db.execute('DELETE FROM post WHERE id = ?', (id,))
+    db.commit()
+    return redirect(url_for('blog.index'))
+
+
+
+

Congratulations, you’ve now finished writing your application! Take some +time to try out everything in the browser. However, there’s still more +to do before the project is complete.

+

Continue to Make the Project Installable.

+
+
+ + +
+
+
+
+ + +
+
+ + + diff --git a/_build/tutorial/database/index.html b/_build/tutorial/database/index.html new file mode 100644 index 00000000..2980f6f6 --- /dev/null +++ b/_build/tutorial/database/index.html @@ -0,0 +1,296 @@ + + + + + + + + Define and Access the Database — Flask Documentation (3.1.x) + + + + + + + + + + + + + + +
+
+
+
+ +
+

Define and Access the Database

+

The application will use a SQLite database to store users and posts. +Python comes with built-in support for SQLite in the sqlite3 +module.

+

SQLite is convenient because it doesn’t require setting up a separate +database server and is built-in to Python. However, if concurrent +requests try to write to the database at the same time, they will slow +down as each write happens sequentially. Small applications won’t notice +this. Once you become big, you may want to switch to a different +database.

+

The tutorial doesn’t go into detail about SQL. If you are not familiar +with it, the SQLite docs describe the language.

+
+

Connect to the Database

+

The first thing to do when working with a SQLite database (and most +other Python database libraries) is to create a connection to it. Any +queries and operations are performed using the connection, which is +closed after the work is finished.

+

In web applications this connection is typically tied to the request. It +is created at some point when handling a request, and closed before the +response is sent.

+
+
flaskr/db.py
+
import sqlite3
+from datetime import datetime
+
+import click
+from flask import current_app, g
+
+
+def get_db():
+    if 'db' not in g:
+        g.db = sqlite3.connect(
+            current_app.config['DATABASE'],
+            detect_types=sqlite3.PARSE_DECLTYPES
+        )
+        g.db.row_factory = sqlite3.Row
+
+    return g.db
+
+
+def close_db(e=None):
+    db = g.pop('db', None)
+
+    if db is not None:
+        db.close()
+
+
+
+

g is a special object that is unique for each request. It is +used to store data that might be accessed by multiple functions during +the request. The connection is stored and reused instead of creating a +new connection if get_db is called a second time in the same +request.

+

current_app is another special object that points to the Flask +application handling the request. Since you used an application factory, +there is no application object when writing the rest of your code. +get_db will be called when the application has been created and is +handling a request, so current_app can be used.

+

sqlite3.connect() establishes a connection to the file pointed at +by the DATABASE configuration key. This file doesn’t have to exist +yet, and won’t until you initialize the database later.

+

sqlite3.Row tells the connection to return rows that behave +like dicts. This allows accessing the columns by name.

+

close_db checks if a connection was created by checking if g.db +was set. If the connection exists, it is closed. Further down you will +tell your application about the close_db function in the application +factory so that it is called after each request.

+
+
+

Create the Tables

+

In SQLite, data is stored in tables and columns. These need to be +created before you can store and retrieve data. Flaskr will store users +in the user table, and posts in the post table. Create a file +with the SQL commands needed to create empty tables:

+
+
flaskr/schema.sql
+
DROP TABLE IF EXISTS user;
+DROP TABLE IF EXISTS post;
+
+CREATE TABLE user (
+  id INTEGER PRIMARY KEY AUTOINCREMENT,
+  username TEXT UNIQUE NOT NULL,
+  password TEXT NOT NULL
+);
+
+CREATE TABLE post (
+  id INTEGER PRIMARY KEY AUTOINCREMENT,
+  author_id INTEGER NOT NULL,
+  created TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
+  title TEXT NOT NULL,
+  body TEXT NOT NULL,
+  FOREIGN KEY (author_id) REFERENCES user (id)
+);
+
+
+
+

Add the Python functions that will run these SQL commands to the +db.py file:

+
+
flaskr/db.py
+
def init_db():
+    db = get_db()
+
+    with current_app.open_resource('schema.sql') as f:
+        db.executescript(f.read().decode('utf8'))
+
+
+@click.command('init-db')
+def init_db_command():
+    """Clear the existing data and create new tables."""
+    init_db()
+    click.echo('Initialized the database.')
+
+
+sqlite3.register_converter(
+    "timestamp", lambda v: datetime.fromisoformat(v.decode())
+)
+
+
+
+

open_resource() opens a file relative to +the flaskr package, which is useful since you won’t necessarily know +where that location is when deploying the application later. get_db +returns a database connection, which is used to execute the commands +read from the file.

+

click.command() defines a command line command called init-db +that calls the init_db function and shows a success message to the +user. You can read Command Line Interface to learn more about writing commands.

+

The call to sqlite3.register_converter() tells Python how to +interpret timestamp values in the database. We convert the value to a +datetime.datetime.

+
+
+

Register with the Application

+

The close_db and init_db_command functions need to be registered +with the application instance; otherwise, they won’t be used by the +application. However, since you’re using a factory function, that +instance isn’t available when writing the functions. Instead, write a +function that takes an application and does the registration.

+
+
flaskr/db.py
+
def init_app(app):
+    app.teardown_appcontext(close_db)
+    app.cli.add_command(init_db_command)
+
+
+
+

app.teardown_appcontext() tells +Flask to call that function when cleaning up after returning the +response.

+

app.cli.add_command() adds a new +command that can be called with the flask command.

+

Import and call this function from the factory. Place the new code at +the end of the factory function before returning the app.

+
+
flaskr/__init__.py
+
def create_app():
+    app = ...
+    # existing code omitted
+
+    from . import db
+    db.init_app(app)
+
+    return app
+
+
+
+
+
+

Initialize the Database File

+

Now that init-db has been registered with the app, it can be called +using the flask command, similar to the run command from the +previous page.

+
+

Note

+

If you’re still running the server from the previous page, you can +either stop the server, or run this command in a new terminal. If +you use a new terminal, remember to change to your project directory +and activate the env as described in Installation.

+
+

Run the init-db command:

+
$ flask --app flaskr init-db
+Initialized the database.
+
+
+

There will now be a flaskr.sqlite file in the instance folder in +your project.

+

Continue to Blueprints and Views.

+
+
+ + +
+
+
+
+ + +
+
+ + + diff --git a/_build/tutorial/deploy/index.html b/_build/tutorial/deploy/index.html new file mode 100644 index 00000000..64d2d27e --- /dev/null +++ b/_build/tutorial/deploy/index.html @@ -0,0 +1,191 @@ + + + + + + + + Deploy to Production — Flask Documentation (3.1.x) + + + + + + + + + + + + + + +
+
+
+
+ +
+

Deploy to Production

+

This part of the tutorial assumes you have a server that you want to +deploy your application to. It gives an overview of how to create the +distribution file and install it, but won’t go into specifics about +what server or software to use. You can set up a new environment on your +development computer to try out the instructions below, but probably +shouldn’t use it for hosting a real public application. See +Deploying to Production for a list of many different ways to host your +application.

+
+

Build and Install

+

When you want to deploy your application elsewhere, you build a wheel +(.whl) file. Install and use the build tool to do this.

+
$ pip install build
+$ python -m build --wheel
+
+
+

You can find the file in dist/flaskr-1.0.0-py3-none-any.whl. The +file name is in the format of {project name}-{version}-{python tag} +-{abi tag}-{platform tag}.

+

Copy this file to another machine, +set up a new virtualenv, then install the +file with pip.

+
$ pip install flaskr-1.0.0-py3-none-any.whl
+
+
+

Pip will install your project along with its dependencies.

+

Since this is a different machine, you need to run init-db again to +create the database in the instance folder.

+
+
$ flask --app flaskr init-db
+
+
+
+

When Flask detects that it’s installed (not in editable mode), it uses +a different directory for the instance folder. You can find it at +.venv/var/flaskr-instance instead.

+
+
+

Configure the Secret Key

+

In the beginning of the tutorial that you gave a default value for +SECRET_KEY. This should be changed to some random bytes in +production. Otherwise, attackers could use the public 'dev' key to +modify the session cookie, or anything else that uses the secret key.

+

You can use the following command to output a random secret key:

+
$ python -c 'import secrets; print(secrets.token_hex())'
+
+'192b9bdd22ab9ed4d12e236c78afcb9a393ec15f71bbf5dc987d54727823bcbf'
+
+
+

Create the config.py file in the instance folder, which the factory +will read from if it exists. Copy the generated value into it.

+
+
.venv/var/flaskr-instance/config.py
+
SECRET_KEY = '192b9bdd22ab9ed4d12e236c78afcb9a393ec15f71bbf5dc987d54727823bcbf'
+
+
+
+

You can also set any other necessary configuration here, although +SECRET_KEY is the only one needed for Flaskr.

+
+
+

Run with a Production Server

+

When running publicly rather than in development, you should not use the +built-in development server (flask run). The development server is +provided by Werkzeug for convenience, but is not designed to be +particularly efficient, stable, or secure.

+

Instead, use a production WSGI server. For example, to use Waitress, +first install it in the virtual environment:

+
$ pip install waitress
+
+
+

You need to tell Waitress about your application, but it doesn’t use +--app like flask run does. You need to tell it to import and +call the application factory to get an application object.

+
$ waitress-serve --call 'flaskr:create_app'
+
+Serving on http://0.0.0.0:8080
+
+
+

See Deploying to Production for a list of many different ways to host +your application. Waitress is just an example, chosen for the tutorial +because it supports both Windows and Linux. There are many more WSGI +servers and deployment options that you may choose for your project.

+

Continue to Keep Developing!.

+
+
+ + +
+
+
+
+ + +
+
+ + + diff --git a/_build/tutorial/factory/index.html b/_build/tutorial/factory/index.html new file mode 100644 index 00000000..6a1b5c3c --- /dev/null +++ b/_build/tutorial/factory/index.html @@ -0,0 +1,249 @@ + + + + + + + + Application Setup — Flask Documentation (3.1.x) + + + + + + + + + + + + + + +
+
+
+
+ +
+

Application Setup

+

A Flask application is an instance of the Flask class. +Everything about the application, such as configuration and URLs, will +be registered with this class.

+

The most straightforward way to create a Flask application is to create +a global Flask instance directly at the top of your code, like +how the “Hello, World!” example did on the previous page. While this is +simple and useful in some cases, it can cause some tricky issues as the +project grows.

+

Instead of creating a Flask instance globally, you will create +it inside a function. This function is known as the application +factory. Any configuration, registration, and other setup the +application needs will happen inside the function, then the application +will be returned.

+
+

The Application Factory

+

It’s time to start coding! Create the flaskr directory and add the +__init__.py file. The __init__.py serves double duty: it will +contain the application factory, and it tells Python that the flaskr +directory should be treated as a package.

+
$ mkdir flaskr
+
+
+
+
flaskr/__init__.py
+
import os
+
+from flask import Flask
+
+
+def create_app(test_config=None):
+    # create and configure the app
+    app = Flask(__name__, instance_relative_config=True)
+    app.config.from_mapping(
+        SECRET_KEY='dev',
+        DATABASE=os.path.join(app.instance_path, 'flaskr.sqlite'),
+    )
+
+    if test_config is None:
+        # load the instance config, if it exists, when not testing
+        app.config.from_pyfile('config.py', silent=True)
+    else:
+        # load the test config if passed in
+        app.config.from_mapping(test_config)
+
+    # ensure the instance folder exists
+    try:
+        os.makedirs(app.instance_path)
+    except OSError:
+        pass
+
+    # a simple page that says hello
+    @app.route('/hello')
+    def hello():
+        return 'Hello, World!'
+
+    return app
+
+
+
+

create_app is the application factory function. You’ll add to it +later in the tutorial, but it already does a lot.

+
    +
  1. app = Flask(__name__, instance_relative_config=True) creates the +Flask instance.

    +
      +
    • __name__ is the name of the current Python module. The app +needs to know where it’s located to set up some paths, and +__name__ is a convenient way to tell it that.

    • +
    • instance_relative_config=True tells the app that +configuration files are relative to the +instance folder. The instance folder +is located outside the flaskr package and can hold local +data that shouldn’t be committed to version control, such as +configuration secrets and the database file.

    • +
    +
  2. +
  3. app.config.from_mapping() sets +some default configuration that the app will use:

    +
      +
    • SECRET_KEY is used by Flask and extensions to keep data +safe. It’s set to 'dev' to provide a convenient value +during development, but it should be overridden with a random +value when deploying.

    • +
    • DATABASE is the path where the SQLite database file will be +saved. It’s under +app.instance_path, which is the +path that Flask has chosen for the instance folder. You’ll learn +more about the database in the next section.

    • +
    +
  4. +
  5. app.config.from_pyfile() overrides +the default configuration with values taken from the config.py +file in the instance folder if it exists. For example, when +deploying, this can be used to set a real SECRET_KEY.

    +
      +
    • test_config can also be passed to the factory, and will be +used instead of the instance configuration. This is so the tests +you’ll write later in the tutorial can be configured +independently of any development values you have configured.

    • +
    +
  6. +
  7. os.makedirs() ensures that +app.instance_path exists. Flask +doesn’t create the instance folder automatically, but it needs to be +created because your project will create the SQLite database file +there.

  8. +
  9. @app.route() creates a simple route so you can +see the application working before getting into the rest of the +tutorial. It creates a connection between the URL /hello and a +function that returns a response, the string 'Hello, World!' in +this case.

  10. +
+
+
+

Run The Application

+

Now you can run your application using the flask command. From the +terminal, tell Flask where to find your application, then run it in +debug mode. Remember, you should still be in the top-level +flask-tutorial directory, not the flaskr package.

+

Debug mode shows an interactive debugger whenever a page raises an +exception, and restarts the server whenever you make changes to the +code. You can leave it running and just reload the browser page as you +follow the tutorial.

+
$ flask --app flaskr run --debug
+
+
+

You’ll see output similar to this:

+
* Serving Flask app "flaskr"
+* Debug mode: on
+* Running on http://127.0.0.1:5000/ (Press CTRL+C to quit)
+* Restarting with stat
+* Debugger is active!
+* Debugger PIN: nnn-nnn-nnn
+
+
+

Visit http://127.0.0.1:5000/hello in a browser and you should see the +“Hello, World!” message. Congratulations, you’re now running your Flask +web application!

+

If another program is already using port 5000, you’ll see +OSError: [Errno 98] or OSError: [WinError 10013] when the +server tries to start. See Address already in use for how to +handle that.

+

Continue to Define and Access the Database.

+
+
+ + +
+
+
+
+ + +
+
+ + + diff --git a/_build/tutorial/index.html b/_build/tutorial/index.html new file mode 100644 index 00000000..dd7793b8 --- /dev/null +++ b/_build/tutorial/index.html @@ -0,0 +1,134 @@ + + + + + + + + Tutorial — Flask Documentation (3.1.x) + + + + + + + + + + + + + + +
+
+
+
+ +
+

Tutorial

+ +

This tutorial will walk you through creating a basic blog application +called Flaskr. Users will be able to register, log in, create posts, +and edit or delete their own posts. You will be able to package and +install the application on other computers.

+screenshot of index page +

It’s assumed that you’re already familiar with Python. The official +tutorial in the Python docs is a great way to learn or review first.

+

While it’s designed to give a good starting point, the tutorial doesn’t +cover all of Flask’s features. Check out the Quickstart for an +overview of what Flask can do, then dive into the docs to find out more. +The tutorial only uses what’s provided by Flask and Python. In another +project, you might decide to use Extensions or other libraries +to make some tasks simpler.

+screenshot of login page +

Flask is flexible. It doesn’t require you to use any particular project +or code layout. However, when first starting, it’s helpful to use a more +structured approach. This means that the tutorial will require a bit of +boilerplate up front, but it’s done to avoid many common pitfalls that +new developers encounter, and it creates a project that’s easy to expand +on. Once you become more comfortable with Flask, you can step out of +this structure and take full advantage of Flask’s flexibility.

+screenshot of edit page +

The tutorial project is available as an example in the Flask +repository, if you want to compare your project +with the final product as you follow the tutorial.

+

Continue to Project Layout.

+
+ + +
+
+
+
+ + +
+
+ + + diff --git a/_build/tutorial/install/index.html b/_build/tutorial/install/index.html new file mode 100644 index 00000000..5208a58a --- /dev/null +++ b/_build/tutorial/install/index.html @@ -0,0 +1,178 @@ + + + + + + + + Make the Project Installable — Flask Documentation (3.1.x) + + + + + + + + + + + + + + +
+
+
+
+ +
+

Make the Project Installable

+

Making your project installable means that you can build a wheel file and install that +in another environment, just like you installed Flask in your project’s environment. +This makes deploying your project the same as installing any other library, so you’re +using all the standard Python tools to manage everything.

+

Installing also comes with other benefits that might not be obvious from +the tutorial or as a new Python user, including:

+
    +
  • Currently, Python and Flask understand how to use the flaskr +package only because you’re running from your project’s directory. +Installing means you can import it no matter where you run from.

  • +
  • You can manage your project’s dependencies just like other packages +do, so pip install yourproject.whl installs them.

  • +
  • Test tools can isolate your test environment from your development +environment.

  • +
+
+

Note

+

This is being introduced late in the tutorial, but in your future +projects you should always start with this.

+
+
+

Describe the Project

+

The pyproject.toml file describes your project and how to build it.

+
+
pyproject.toml
+
[project]
+name = "flaskr"
+version = "1.0.0"
+description = "The basic blog app built in the Flask tutorial."
+dependencies = [
+    "flask",
+]
+
+[build-system]
+requires = ["flit_core<4"]
+build-backend = "flit_core.buildapi"
+
+
+
+

See the official Packaging tutorial for more +explanation of the files and options used.

+
+
+

Install the Project

+

Use pip to install your project in the virtual environment.

+
$ pip install -e .
+
+
+

This tells pip to find pyproject.toml in the current directory and install the +project in editable or development mode. Editable mode means that as you make +changes to your local code, you’ll only need to re-install if you change the metadata +about the project, such as its dependencies.

+

You can observe that the project is now installed with pip list.

+
$ pip list
+
+Package        Version   Location
+-------------- --------- ----------------------------------
+click          6.7
+Flask          1.0
+flaskr         1.0.0     /home/user/Projects/flask-tutorial
+itsdangerous   0.24
+Jinja2         2.10
+MarkupSafe     1.0
+pip            9.0.3
+Werkzeug       0.14.1
+
+
+

Nothing changes from how you’ve been running your project so far. +--app is still set to flaskr and flask run still runs +the application, but you can call it from anywhere, not just the +flask-tutorial directory.

+

Continue to Test Coverage.

+
+
+ + +
+
+
+
+ + +
+
+ + + diff --git a/_build/tutorial/layout/index.html b/_build/tutorial/layout/index.html new file mode 100644 index 00000000..9114519c --- /dev/null +++ b/_build/tutorial/layout/index.html @@ -0,0 +1,193 @@ + + + + + + + + Project Layout — Flask Documentation (3.1.x) + + + + + + + + + + + + + + +
+
+
+
+ +
+

Project Layout

+

Create a project directory and enter it:

+
$ mkdir flask-tutorial
+$ cd flask-tutorial
+
+
+

Then follow the installation instructions to set +up a Python virtual environment and install Flask for your project.

+

The tutorial will assume you’re working from the flask-tutorial +directory from now on. The file names at the top of each code block are +relative to this directory.

+
+

A Flask application can be as simple as a single file.

+
+
hello.py
+
from flask import Flask
+
+app = Flask(__name__)
+
+
+@app.route('/')
+def hello():
+    return 'Hello, World!'
+
+
+
+

However, as a project gets bigger, it becomes overwhelming to keep all +the code in one file. Python projects use packages to organize code +into multiple modules that can be imported where needed, and the +tutorial will do this as well.

+

The project directory will contain:

+
    +
  • flaskr/, a Python package containing your application code and +files.

  • +
  • tests/, a directory containing test modules.

  • +
  • .venv/, a Python virtual environment where Flask and other +dependencies are installed.

  • +
  • Installation files telling Python how to install your project.

  • +
  • Version control config, such as git. You should make a habit of +using some type of version control for all your projects, no matter +the size.

  • +
  • Any other project files you might add in the future.

  • +
+

By the end, your project layout will look like this:

+
/home/user/Projects/flask-tutorial
+├── flaskr/
+│   ├── __init__.py
+│   ├── db.py
+│   ├── schema.sql
+│   ├── auth.py
+│   ├── blog.py
+│   ├── templates/
+│   │   ├── base.html
+│   │   ├── auth/
+│   │   │   ├── login.html
+│   │   │   └── register.html
+│   │   └── blog/
+│   │       ├── create.html
+│   │       ├── index.html
+│   │       └── update.html
+│   └── static/
+│       └── style.css
+├── tests/
+│   ├── conftest.py
+│   ├── data.sql
+│   ├── test_factory.py
+│   ├── test_db.py
+│   ├── test_auth.py
+│   └── test_blog.py
+├── .venv/
+├── pyproject.toml
+└── MANIFEST.in
+
+
+

If you’re using version control, the following files that are generated +while running your project should be ignored. There may be other files +based on the editor you use. In general, ignore files that you didn’t +write. For example, with git:

+
+
.gitignore
+
.venv/
+
+*.pyc
+__pycache__/
+
+instance/
+
+.pytest_cache/
+.coverage
+htmlcov/
+
+dist/
+build/
+*.egg-info/
+
+
+
+

Continue to Application Setup.

+
+ + +
+
+
+
+ + +
+
+ + + diff --git a/_build/tutorial/next/index.html b/_build/tutorial/next/index.html new file mode 100644 index 00000000..3c5afade --- /dev/null +++ b/_build/tutorial/next/index.html @@ -0,0 +1,124 @@ + + + + + + + + Keep Developing! — Flask Documentation (3.1.x) + + + + + + + + + + + + + + +
+
+
+
+ +
+

Keep Developing!

+

You’ve learned about quite a few Flask and Python concepts throughout +the tutorial. Go back and review the tutorial and compare your code with +the steps you took to get there. Compare your project to the +example project, which might look a bit +different due to the step-by-step nature of the tutorial.

+

There’s a lot more to Flask than what you’ve seen so far. Even so, +you’re now equipped to start developing your own web applications. Check +out the Quickstart for an overview of what Flask can do, then +dive into the docs to keep learning. Flask uses Jinja, Click, +Werkzeug, and ItsDangerous behind the scenes, and they all have +their own documentation too. You’ll also be interested in +Extensions which make tasks like working with the database or +validating form data easier and more powerful.

+

If you want to keep developing your Flaskr project, here are some ideas +for what to try next:

+
    +
  • A detail view to show a single post. Click a post’s title to go to +its page.

  • +
  • Like / unlike a post.

  • +
  • Comments.

  • +
  • Tags. Clicking a tag shows all the posts with that tag.

  • +
  • A search box that filters the index page by name.

  • +
  • Paged display. Only show 5 posts per page.

  • +
  • Upload an image to go along with a post.

  • +
  • Format posts using Markdown.

  • +
  • An RSS feed of new posts.

  • +
+

Have fun and make awesome applications!

+
+ + +
+
+
+
+ + +
+
+ + + diff --git a/_build/tutorial/static/index.html b/_build/tutorial/static/index.html new file mode 100644 index 00000000..2f7202a0 --- /dev/null +++ b/_build/tutorial/static/index.html @@ -0,0 +1,152 @@ + + + + + + + + Static Files — Flask Documentation (3.1.x) + + + + + + + + + + + + + + +
+
+
+
+ +
+

Static Files

+

The authentication views and templates work, but they look very plain +right now. Some CSS can be added to add style to the HTML layout you +constructed. The style won’t change, so it’s a static file rather than +a template.

+

Flask automatically adds a static view that takes a path relative +to the flaskr/static directory and serves it. The base.html +template already has a link to the style.css file:

+
{{ url_for('static', filename='style.css') }}
+
+
+

Besides CSS, other types of static files might be files with JavaScript +functions, or a logo image. They are all placed under the +flaskr/static directory and referenced with +url_for('static', filename='...').

+

This tutorial isn’t focused on how to write CSS, so you can just copy +the following into the flaskr/static/style.css file:

+
+
flaskr/static/style.css
+
html { font-family: sans-serif; background: #eee; padding: 1rem; }
+body { max-width: 960px; margin: 0 auto; background: white; }
+h1 { font-family: serif; color: #377ba8; margin: 1rem 0; }
+a { color: #377ba8; }
+hr { border: none; border-top: 1px solid lightgray; }
+nav { background: lightgray; display: flex; align-items: center; padding: 0 0.5rem; }
+nav h1 { flex: auto; margin: 0; }
+nav h1 a { text-decoration: none; padding: 0.25rem 0.5rem; }
+nav ul  { display: flex; list-style: none; margin: 0; padding: 0; }
+nav ul li a, nav ul li span, header .action { display: block; padding: 0.5rem; }
+.content { padding: 0 1rem 1rem; }
+.content > header { border-bottom: 1px solid lightgray; display: flex; align-items: flex-end; }
+.content > header h1 { flex: auto; margin: 1rem 0 0.25rem 0; }
+.flash { margin: 1em 0; padding: 1em; background: #cae6f6; border: 1px solid #377ba8; }
+.post > header { display: flex; align-items: flex-end; font-size: 0.85em; }
+.post > header > div:first-of-type { flex: auto; }
+.post > header h1 { font-size: 1.5em; margin-bottom: 0; }
+.post .about { color: slategray; font-style: italic; }
+.post .body { white-space: pre-line; }
+.content:last-child { margin-bottom: 0; }
+.content form { margin: 1em 0; display: flex; flex-direction: column; }
+.content label { font-weight: bold; margin-bottom: 0.5em; }
+.content input, .content textarea { margin-bottom: 1em; }
+.content textarea { min-height: 12em; resize: vertical; }
+input.danger { color: #cc2f2e; }
+input[type=submit] { align-self: start; min-width: 10em; }
+
+
+
+

You can find a less compact version of style.css in the +example code.

+

Go to http://127.0.0.1:5000/auth/login and the page should look like the +screenshot below.

+screenshot of login page +

You can read more about CSS from Mozilla’s documentation. If +you change a static file, refresh the browser page. If the change +doesn’t show up, try clearing your browser’s cache.

+

Continue to Blog Blueprint.

+
+ + +
+
+
+
+ + +
+
+ + + diff --git a/_build/tutorial/templates/index.html b/_build/tutorial/templates/index.html new file mode 100644 index 00000000..6210503f --- /dev/null +++ b/_build/tutorial/templates/index.html @@ -0,0 +1,268 @@ + + + + + + + + Templates — Flask Documentation (3.1.x) + + + + + + + + + + + + + + +
+
+
+
+ +
+

Templates

+

You’ve written the authentication views for your application, but if +you’re running the server and try to go to any of the URLs, you’ll see a +TemplateNotFound error. That’s because the views are calling +render_template(), but you haven’t written the templates yet. +The template files will be stored in the templates directory inside +the flaskr package.

+

Templates are files that contain static data as well as placeholders +for dynamic data. A template is rendered with specific data to produce a +final document. Flask uses the Jinja template library to render +templates.

+

In your application, you will use templates to render HTML which +will display in the user’s browser. In Flask, Jinja is configured to +autoescape any data that is rendered in HTML templates. This means +that it’s safe to render user input; any characters they’ve entered that +could mess with the HTML, such as < and > will be escaped with +safe values that look the same in the browser but don’t cause unwanted +effects.

+

Jinja looks and behaves mostly like Python. Special delimiters are used +to distinguish Jinja syntax from the static data in the template. +Anything between {{ and }} is an expression that will be output +to the final document. {% and %} denotes a control flow +statement like if and for. Unlike Python, blocks are denoted +by start and end tags rather than indentation since static text within +a block could change indentation.

+
+

The Base Layout

+

Each page in the application will have the same basic layout around a +different body. Instead of writing the entire HTML structure in each +template, each template will extend a base template and override +specific sections.

+
+
flaskr/templates/base.html
+
<!doctype html>
+<title>{% block title %}{% endblock %} - Flaskr</title>
+<link rel="stylesheet" href="{{ url_for('static', filename='style.css') }}">
+<nav>
+  <h1>Flaskr</h1>
+  <ul>
+    {% if g.user %}
+      <li><span>{{ g.user['username'] }}</span>
+      <li><a href="{{ url_for('auth.logout') }}">Log Out</a>
+    {% else %}
+      <li><a href="{{ url_for('auth.register') }}">Register</a>
+      <li><a href="{{ url_for('auth.login') }}">Log In</a>
+    {% endif %}
+  </ul>
+</nav>
+<section class="content">
+  <header>
+    {% block header %}{% endblock %}
+  </header>
+  {% for message in get_flashed_messages() %}
+    <div class="flash">{{ message }}</div>
+  {% endfor %}
+  {% block content %}{% endblock %}
+</section>
+
+
+
+

g is automatically available in templates. Based on if +g.user is set (from load_logged_in_user), either the username +and a log out link are displayed, or links to register and log in +are displayed. url_for() is also automatically available, and is +used to generate URLs to views instead of writing them out manually.

+

After the page title, and before the content, the template loops over +each message returned by get_flashed_messages(). You used +flash() in the views to show error messages, and this is the code +that will display them.

+

There are three blocks defined here that will be overridden in the other +templates:

+
    +
  1. {% block title %} will change the title displayed in the +browser’s tab and window title.

  2. +
  3. {% block header %} is similar to title but will change the +title displayed on the page.

  4. +
  5. {% block content %} is where the content of each page goes, such +as the login form or a blog post.

  6. +
+

The base template is directly in the templates directory. To keep +the others organized, the templates for a blueprint will be placed in a +directory with the same name as the blueprint.

+
+
+

Register

+
+
flaskr/templates/auth/register.html
+
{% extends 'base.html' %}
+
+{% block header %}
+  <h1>{% block title %}Register{% endblock %}</h1>
+{% endblock %}
+
+{% block content %}
+  <form method="post">
+    <label for="username">Username</label>
+    <input name="username" id="username" required>
+    <label for="password">Password</label>
+    <input type="password" name="password" id="password" required>
+    <input type="submit" value="Register">
+  </form>
+{% endblock %}
+
+
+
+

{% extends 'base.html' %} tells Jinja that this template should +replace the blocks from the base template. All the rendered content must +appear inside {% block %} tags that override blocks from the base +template.

+

A useful pattern used here is to place {% block title %} inside +{% block header %}. This will set the title block and then output +the value of it into the header block, so that both the window and page +share the same title without writing it twice.

+

The input tags are using the required attribute here. This tells +the browser not to submit the form until those fields are filled in. If +the user is using an older browser that doesn’t support that attribute, +or if they are using something besides a browser to make requests, you +still want to validate the data in the Flask view. It’s important to +always fully validate the data on the server, even if the client does +some validation as well.

+
+
+

Log In

+

This is identical to the register template except for the title and +submit button.

+
+
flaskr/templates/auth/login.html
+
{% extends 'base.html' %}
+
+{% block header %}
+  <h1>{% block title %}Log In{% endblock %}</h1>
+{% endblock %}
+
+{% block content %}
+  <form method="post">
+    <label for="username">Username</label>
+    <input name="username" id="username" required>
+    <label for="password">Password</label>
+    <input type="password" name="password" id="password" required>
+    <input type="submit" value="Log In">
+  </form>
+{% endblock %}
+
+
+
+
+
+

Register A User

+

Now that the authentication templates are written, you can register a +user. Make sure the server is still running (flask run if it’s not), +then go to http://127.0.0.1:5000/auth/register.

+

Try clicking the “Register” button without filling out the form and see +that the browser shows an error message. Try removing the required +attributes from the register.html template and click “Register” +again. Instead of the browser showing an error, the page will reload and +the error from flash() in the view will be shown.

+

Fill out a username and password and you’ll be redirected to the login +page. Try entering an incorrect username, or the correct username and +incorrect password. If you log in you’ll get an error because there’s +no index view to redirect to yet.

+

Continue to Static Files.

+
+
+ + +
+
+
+
+ + +
+
+ + + diff --git a/_build/tutorial/tests/index.html b/_build/tutorial/tests/index.html new file mode 100644 index 00000000..01a98e09 --- /dev/null +++ b/_build/tutorial/tests/index.html @@ -0,0 +1,622 @@ + + + + + + + + Test Coverage — Flask Documentation (3.1.x) + + + + + + + + + + + + + + +
+
+
+
+ +
+

Test Coverage

+

Writing unit tests for your application lets you check that the code +you wrote works the way you expect. Flask provides a test client that +simulates requests to the application and returns the response data.

+

You should test as much of your code as possible. Code in functions only +runs when the function is called, and code in branches, such as if +blocks, only runs when the condition is met. You want to make sure that +each function is tested with data that covers each branch.

+

The closer you get to 100% coverage, the more comfortable you can be +that making a change won’t unexpectedly change other behavior. However, +100% coverage doesn’t guarantee that your application doesn’t have bugs. +In particular, it doesn’t test how the user interacts with the +application in the browser. Despite this, test coverage is an important +tool to use during development.

+
+

Note

+

This is being introduced late in the tutorial, but in your future +projects you should test as you develop.

+
+

You’ll use pytest and coverage to test and measure your code. +Install them both:

+
$ pip install pytest coverage
+
+
+
+

Setup and Fixtures

+

The test code is located in the tests directory. This directory is +next to the flaskr package, not inside it. The +tests/conftest.py file contains setup functions called fixtures +that each test will use. Tests are in Python modules that start with +test_, and each test function in those modules also starts with +test_.

+

Each test will create a new temporary database file and populate some +data that will be used in the tests. Write a SQL file to insert that +data.

+
+
tests/data.sql
+
INSERT INTO user (username, password)
+VALUES
+  ('test', 'pbkdf2:sha256:50000$TCI4GzcX$0de171a4f4dac32e3364c7ddc7c14f3e2fa61f2d17574483f7ffbb431b4acb2f'),
+  ('other', 'pbkdf2:sha256:50000$kJPKsz6N$d2d4784f1b030a9761f5ccaeeaca413f27f2ecb76d6168407af962ddce849f79');
+
+INSERT INTO post (title, body, author_id, created)
+VALUES
+  ('test title', 'test' || x'0a' || 'body', 1, '2018-01-01 00:00:00');
+
+
+
+

The app fixture will call the factory and pass test_config to +configure the application and database for testing instead of using your +local development configuration.

+
+
tests/conftest.py
+
import os
+import tempfile
+
+import pytest
+from flaskr import create_app
+from flaskr.db import get_db, init_db
+
+with open(os.path.join(os.path.dirname(__file__), 'data.sql'), 'rb') as f:
+    _data_sql = f.read().decode('utf8')
+
+
+@pytest.fixture
+def app():
+    db_fd, db_path = tempfile.mkstemp()
+
+    app = create_app({
+        'TESTING': True,
+        'DATABASE': db_path,
+    })
+
+    with app.app_context():
+        init_db()
+        get_db().executescript(_data_sql)
+
+    yield app
+
+    os.close(db_fd)
+    os.unlink(db_path)
+
+
+@pytest.fixture
+def client(app):
+    return app.test_client()
+
+
+@pytest.fixture
+def runner(app):
+    return app.test_cli_runner()
+
+
+
+

tempfile.mkstemp() creates and opens a temporary file, returning +the file descriptor and the path to it. The DATABASE path is +overridden so it points to this temporary path instead of the instance +folder. After setting the path, the database tables are created and the +test data is inserted. After the test is over, the temporary file is +closed and removed.

+

TESTING tells Flask that the app is in test mode. Flask changes +some internal behavior so it’s easier to test, and other extensions can +also use the flag to make testing them easier.

+

The client fixture calls +app.test_client() with the application +object created by the app fixture. Tests will use the client to make +requests to the application without running the server.

+

The runner fixture is similar to client. +app.test_cli_runner() creates a runner +that can call the Click commands registered with the application.

+

Pytest uses fixtures by matching their function names with the names +of arguments in the test functions. For example, the test_hello +function you’ll write next takes a client argument. Pytest matches +that with the client fixture function, calls it, and passes the +returned value to the test function.

+
+
+

Factory

+

There’s not much to test about the factory itself. Most of the code will +be executed for each test already, so if something fails the other tests +will notice.

+

The only behavior that can change is passing test config. If config is +not passed, there should be some default configuration, otherwise the +configuration should be overridden.

+
+
tests/test_factory.py
+
from flaskr import create_app
+
+
+def test_config():
+    assert not create_app().testing
+    assert create_app({'TESTING': True}).testing
+
+
+def test_hello(client):
+    response = client.get('/hello')
+    assert response.data == b'Hello, World!'
+
+
+
+

You added the hello route as an example when writing the factory at +the beginning of the tutorial. It returns “Hello, World!”, so the test +checks that the response data matches.

+
+
+

Database

+

Within an application context, get_db should return the same +connection each time it’s called. After the context, the connection +should be closed.

+
+
tests/test_db.py
+
import sqlite3
+
+import pytest
+from flaskr.db import get_db
+
+
+def test_get_close_db(app):
+    with app.app_context():
+        db = get_db()
+        assert db is get_db()
+
+    with pytest.raises(sqlite3.ProgrammingError) as e:
+        db.execute('SELECT 1')
+
+    assert 'closed' in str(e.value)
+
+
+
+

The init-db command should call the init_db function and output +a message.

+
+
tests/test_db.py
+
def test_init_db_command(runner, monkeypatch):
+    class Recorder(object):
+        called = False
+
+    def fake_init_db():
+        Recorder.called = True
+
+    monkeypatch.setattr('flaskr.db.init_db', fake_init_db)
+    result = runner.invoke(args=['init-db'])
+    assert 'Initialized' in result.output
+    assert Recorder.called
+
+
+
+

This test uses Pytest’s monkeypatch fixture to replace the +init_db function with one that records that it’s been called. The +runner fixture you wrote above is used to call the init-db +command by name.

+
+
+

Authentication

+

For most of the views, a user needs to be logged in. The easiest way to +do this in tests is to make a POST request to the login view +with the client. Rather than writing that out every time, you can write +a class with methods to do that, and use a fixture to pass it the client +for each test.

+
+
tests/conftest.py
+
class AuthActions(object):
+    def __init__(self, client):
+        self._client = client
+
+    def login(self, username='test', password='test'):
+        return self._client.post(
+            '/auth/login',
+            data={'username': username, 'password': password}
+        )
+
+    def logout(self):
+        return self._client.get('/auth/logout')
+
+
+@pytest.fixture
+def auth(client):
+    return AuthActions(client)
+
+
+
+

With the auth fixture, you can call auth.login() in a test to +log in as the test user, which was inserted as part of the test +data in the app fixture.

+

The register view should render successfully on GET. On POST +with valid form data, it should redirect to the login URL and the user’s +data should be in the database. Invalid data should display error +messages.

+
+
tests/test_auth.py
+
import pytest
+from flask import g, session
+from flaskr.db import get_db
+
+
+def test_register(client, app):
+    assert client.get('/auth/register').status_code == 200
+    response = client.post(
+        '/auth/register', data={'username': 'a', 'password': 'a'}
+    )
+    assert response.headers["Location"] == "/auth/login"
+
+    with app.app_context():
+        assert get_db().execute(
+            "SELECT * FROM user WHERE username = 'a'",
+        ).fetchone() is not None
+
+
+@pytest.mark.parametrize(('username', 'password', 'message'), (
+    ('', '', b'Username is required.'),
+    ('a', '', b'Password is required.'),
+    ('test', 'test', b'already registered'),
+))
+def test_register_validate_input(client, username, password, message):
+    response = client.post(
+        '/auth/register',
+        data={'username': username, 'password': password}
+    )
+    assert message in response.data
+
+
+
+

client.get() makes a GET request +and returns the Response object returned by Flask. Similarly, +client.post() makes a POST +request, converting the data dict into form data.

+

To test that the page renders successfully, a simple request is made and +checked for a 200 OK status_code. If +rendering failed, Flask would return a 500 Internal Server Error +code.

+

headers will have a Location header with the login +URL when the register view redirects to the login view.

+

data contains the body of the response as bytes. If +you expect a certain value to render on the page, check that it’s in +data. Bytes must be compared to bytes. If you want to compare text, +use get_data(as_text=True) +instead.

+

pytest.mark.parametrize tells Pytest to run the same test function +with different arguments. You use it here to test different invalid +input and error messages without writing the same code three times.

+

The tests for the login view are very similar to those for +register. Rather than testing the data in the database, +session should have user_id set after logging in.

+
+
tests/test_auth.py
+
def test_login(client, auth):
+    assert client.get('/auth/login').status_code == 200
+    response = auth.login()
+    assert response.headers["Location"] == "/"
+
+    with client:
+        client.get('/')
+        assert session['user_id'] == 1
+        assert g.user['username'] == 'test'
+
+
+@pytest.mark.parametrize(('username', 'password', 'message'), (
+    ('a', 'test', b'Incorrect username.'),
+    ('test', 'a', b'Incorrect password.'),
+))
+def test_login_validate_input(auth, username, password, message):
+    response = auth.login(username, password)
+    assert message in response.data
+
+
+
+

Using client in a with block allows accessing context variables +such as session after the response is returned. Normally, +accessing session outside of a request would raise an error.

+

Testing logout is the opposite of login. session should +not contain user_id after logging out.

+
+
tests/test_auth.py
+
def test_logout(client, auth):
+    auth.login()
+
+    with client:
+        auth.logout()
+        assert 'user_id' not in session
+
+
+
+
+
+

Blog

+

All the blog views use the auth fixture you wrote earlier. Call +auth.login() and subsequent requests from the client will be logged +in as the test user.

+

The index view should display information about the post that was +added with the test data. When logged in as the author, there should be +a link to edit the post.

+

You can also test some more authentication behavior while testing the +index view. When not logged in, each page shows links to log in or +register. When logged in, there’s a link to log out.

+
+
tests/test_blog.py
+
import pytest
+from flaskr.db import get_db
+
+
+def test_index(client, auth):
+    response = client.get('/')
+    assert b"Log In" in response.data
+    assert b"Register" in response.data
+
+    auth.login()
+    response = client.get('/')
+    assert b'Log Out' in response.data
+    assert b'test title' in response.data
+    assert b'by test on 2018-01-01' in response.data
+    assert b'test\nbody' in response.data
+    assert b'href="/1/update"' in response.data
+
+
+
+

A user must be logged in to access the create, update, and +delete views. The logged in user must be the author of the post to +access update and delete, otherwise a 403 Forbidden status +is returned. If a post with the given id doesn’t exist, +update and delete should return 404 Not Found.

+
+
tests/test_blog.py
+
@pytest.mark.parametrize('path', (
+    '/create',
+    '/1/update',
+    '/1/delete',
+))
+def test_login_required(client, path):
+    response = client.post(path)
+    assert response.headers["Location"] == "/auth/login"
+
+
+def test_author_required(app, client, auth):
+    # change the post author to another user
+    with app.app_context():
+        db = get_db()
+        db.execute('UPDATE post SET author_id = 2 WHERE id = 1')
+        db.commit()
+
+    auth.login()
+    # current user can't modify other user's post
+    assert client.post('/1/update').status_code == 403
+    assert client.post('/1/delete').status_code == 403
+    # current user doesn't see edit link
+    assert b'href="/1/update"' not in client.get('/').data
+
+
+@pytest.mark.parametrize('path', (
+    '/2/update',
+    '/2/delete',
+))
+def test_exists_required(client, auth, path):
+    auth.login()
+    assert client.post(path).status_code == 404
+
+
+
+

The create and update views should render and return a +200 OK status for a GET request. When valid data is sent in a +POST request, create should insert the new post data into the +database, and update should modify the existing data. Both pages +should show an error message on invalid data.

+
+
tests/test_blog.py
+
def test_create(client, auth, app):
+    auth.login()
+    assert client.get('/create').status_code == 200
+    client.post('/create', data={'title': 'created', 'body': ''})
+
+    with app.app_context():
+        db = get_db()
+        count = db.execute('SELECT COUNT(id) FROM post').fetchone()[0]
+        assert count == 2
+
+
+def test_update(client, auth, app):
+    auth.login()
+    assert client.get('/1/update').status_code == 200
+    client.post('/1/update', data={'title': 'updated', 'body': ''})
+
+    with app.app_context():
+        db = get_db()
+        post = db.execute('SELECT * FROM post WHERE id = 1').fetchone()
+        assert post['title'] == 'updated'
+
+
+@pytest.mark.parametrize('path', (
+    '/create',
+    '/1/update',
+))
+def test_create_update_validate(client, auth, path):
+    auth.login()
+    response = client.post(path, data={'title': '', 'body': ''})
+    assert b'Title is required.' in response.data
+
+
+
+

The delete view should redirect to the index URL and the post should +no longer exist in the database.

+
+
tests/test_blog.py
+
def test_delete(client, auth, app):
+    auth.login()
+    response = client.post('/1/delete')
+    assert response.headers["Location"] == "/"
+
+    with app.app_context():
+        db = get_db()
+        post = db.execute('SELECT * FROM post WHERE id = 1').fetchone()
+        assert post is None
+
+
+
+
+
+

Running the Tests

+

Some extra configuration, which is not required but makes running tests with coverage +less verbose, can be added to the project’s pyproject.toml file.

+
+
pyproject.toml
+
[tool.pytest.ini_options]
+testpaths = ["tests"]
+
+[tool.coverage.run]
+branch = true
+source = ["flaskr"]
+
+
+
+

To run the tests, use the pytest command. It will find and run all +the test functions you’ve written.

+
$ pytest
+
+========================= test session starts ==========================
+platform linux -- Python 3.6.4, pytest-3.5.0, py-1.5.3, pluggy-0.6.0
+rootdir: /home/user/Projects/flask-tutorial
+collected 23 items
+
+tests/test_auth.py ........                                      [ 34%]
+tests/test_blog.py ............                                  [ 86%]
+tests/test_db.py ..                                              [ 95%]
+tests/test_factory.py ..                                         [100%]
+
+====================== 24 passed in 0.64 seconds =======================
+
+
+

If any tests fail, pytest will show the error that was raised. You can +run pytest -v to get a list of each test function rather than dots.

+

To measure the code coverage of your tests, use the coverage command +to run pytest instead of running it directly.

+
$ coverage run -m pytest
+
+
+

You can either view a simple coverage report in the terminal:

+
$ coverage report
+
+Name                 Stmts   Miss Branch BrPart  Cover
+------------------------------------------------------
+flaskr/__init__.py      21      0      2      0   100%
+flaskr/auth.py          54      0     22      0   100%
+flaskr/blog.py          54      0     16      0   100%
+flaskr/db.py            24      0      4      0   100%
+------------------------------------------------------
+TOTAL                  153      0     44      0   100%
+
+
+

An HTML report allows you to see which lines were covered in each file:

+
$ coverage html
+
+
+

This generates files in the htmlcov directory. Open +htmlcov/index.html in your browser to see the report.

+

Continue to Deploy to Production.

+
+
+ + +
+
+
+
+ + +
+
+ + + diff --git a/_build/tutorial/views/index.html b/_build/tutorial/views/index.html new file mode 100644 index 00000000..4ad6c8c6 --- /dev/null +++ b/_build/tutorial/views/index.html @@ -0,0 +1,383 @@ + + + + + + + + Blueprints and Views — Flask Documentation (3.1.x) + + + + + + + + + + + + + + +
+
+
+
+ +
+

Blueprints and Views

+

A view function is the code you write to respond to requests to your +application. Flask uses patterns to match the incoming request URL to +the view that should handle it. The view returns data that Flask turns +into an outgoing response. Flask can also go the other direction and +generate a URL to a view based on its name and arguments.

+
+

Create a Blueprint

+

A Blueprint is a way to organize a group of related views and +other code. Rather than registering views and other code directly with +an application, they are registered with a blueprint. Then the blueprint +is registered with the application when it is available in the factory +function.

+

Flaskr will have two blueprints, one for authentication functions and +one for the blog posts functions. The code for each blueprint will go +in a separate module. Since the blog needs to know about authentication, +you’ll write the authentication one first.

+
+
flaskr/auth.py
+
import functools
+
+from flask import (
+    Blueprint, flash, g, redirect, render_template, request, session, url_for
+)
+from werkzeug.security import check_password_hash, generate_password_hash
+
+from flaskr.db import get_db
+
+bp = Blueprint('auth', __name__, url_prefix='/auth')
+
+
+
+

This creates a Blueprint named 'auth'. Like the application +object, the blueprint needs to know where it’s defined, so __name__ +is passed as the second argument. The url_prefix will be prepended +to all the URLs associated with the blueprint.

+

Import and register the blueprint from the factory using +app.register_blueprint(). Place the +new code at the end of the factory function before returning the app.

+
+
flaskr/__init__.py
+
def create_app():
+    app = ...
+    # existing code omitted
+
+    from . import auth
+    app.register_blueprint(auth.bp)
+
+    return app
+
+
+
+

The authentication blueprint will have views to register new users and +to log in and log out.

+
+
+

The First View: Register

+

When the user visits the /auth/register URL, the register view +will return HTML with a form for them to fill out. When they submit +the form, it will validate their input and either show the form again +with an error message or create the new user and go to the login page.

+

For now you will just write the view code. On the next page, you’ll +write templates to generate the HTML form.

+
+
flaskr/auth.py
+
@bp.route('/register', methods=('GET', 'POST'))
+def register():
+    if request.method == 'POST':
+        username = request.form['username']
+        password = request.form['password']
+        db = get_db()
+        error = None
+
+        if not username:
+            error = 'Username is required.'
+        elif not password:
+            error = 'Password is required.'
+
+        if error is None:
+            try:
+                db.execute(
+                    "INSERT INTO user (username, password) VALUES (?, ?)",
+                    (username, generate_password_hash(password)),
+                )
+                db.commit()
+            except db.IntegrityError:
+                error = f"User {username} is already registered."
+            else:
+                return redirect(url_for("auth.login"))
+
+        flash(error)
+
+    return render_template('auth/register.html')
+
+
+
+

Here’s what the register view function is doing:

+
    +
  1. @bp.route associates the URL /register +with the register view function. When Flask receives a request +to /auth/register, it will call the register view and use +the return value as the response.

  2. +
  3. If the user submitted the form, +request.method will be 'POST'. In this +case, start validating the input.

  4. +
  5. request.form is a special type of +dict mapping submitted form keys and values. The user will +input their username and password.

  6. +
  7. Validate that username and password are not empty.

  8. +
  9. If validation succeeds, insert the new user data into the database.

    +
      +
    • db.execute takes a SQL +query with ? placeholders for any user input, and a tuple of +values to replace the placeholders with. The database library +will take care of escaping the values so you are not vulnerable +to a SQL injection attack.

    • +
    • For security, passwords should never be stored in the database +directly. Instead, +generate_password_hash() is used to +securely hash the password, and that hash is stored. Since this +query modifies data, +db.commit() needs to be +called afterwards to save the changes.

    • +
    • An sqlite3.IntegrityError will occur if the username +already exists, which should be shown to the user as another +validation error.

    • +
    +
  10. +
  11. After storing the user, they are redirected to the login page. +url_for() generates the URL for the login view based on its +name. This is preferable to writing the URL directly as it allows +you to change the URL later without changing all code that links to +it. redirect() generates a redirect response to the generated +URL.

  12. +
  13. If validation fails, the error is shown to the user. flash() +stores messages that can be retrieved when rendering the template.

  14. +
  15. When the user initially navigates to auth/register, or +there was a validation error, an HTML page with the registration +form should be shown. render_template() will render a template +containing the HTML, which you’ll write in the next step of the +tutorial.

  16. +
+
+
+

Login

+

This view follows the same pattern as the register view above.

+
+
flaskr/auth.py
+
@bp.route('/login', methods=('GET', 'POST'))
+def login():
+    if request.method == 'POST':
+        username = request.form['username']
+        password = request.form['password']
+        db = get_db()
+        error = None
+        user = db.execute(
+            'SELECT * FROM user WHERE username = ?', (username,)
+        ).fetchone()
+
+        if user is None:
+            error = 'Incorrect username.'
+        elif not check_password_hash(user['password'], password):
+            error = 'Incorrect password.'
+
+        if error is None:
+            session.clear()
+            session['user_id'] = user['id']
+            return redirect(url_for('index'))
+
+        flash(error)
+
+    return render_template('auth/login.html')
+
+
+
+

There are a few differences from the register view:

+
    +
  1. The user is queried first and stored in a variable for later use.

    +

    fetchone() returns one row from the query. +If the query returned no results, it returns None. Later, +fetchall() will be used, which returns a list +of all results.

    +
  2. +
  3. check_password_hash() hashes the submitted +password in the same way as the stored hash and securely compares +them. If they match, the password is valid.

  4. +
  5. session is a dict that stores data across requests. +When validation succeeds, the user’s id is stored in a new +session. The data is stored in a cookie that is sent to the +browser, and the browser then sends it back with subsequent requests. +Flask securely signs the data so that it can’t be tampered with.

  6. +
+

Now that the user’s id is stored in the session, it will be +available on subsequent requests. At the beginning of each request, if +a user is logged in their information should be loaded and made +available to other views.

+
+
flaskr/auth.py
+
@bp.before_app_request
+def load_logged_in_user():
+    user_id = session.get('user_id')
+
+    if user_id is None:
+        g.user = None
+    else:
+        g.user = get_db().execute(
+            'SELECT * FROM user WHERE id = ?', (user_id,)
+        ).fetchone()
+
+
+
+

bp.before_app_request() registers +a function that runs before the view function, no matter what URL is +requested. load_logged_in_user checks if a user id is stored in the +session and gets that user’s data from the database, storing it +on g.user, which lasts for the length of the request. If +there is no user id, or if the id doesn’t exist, g.user will be +None.

+
+
+

Logout

+

To log out, you need to remove the user id from the session. +Then load_logged_in_user won’t load a user on subsequent requests.

+
+
flaskr/auth.py
+
@bp.route('/logout')
+def logout():
+    session.clear()
+    return redirect(url_for('index'))
+
+
+
+
+
+

Require Authentication in Other Views

+

Creating, editing, and deleting blog posts will require a user to be +logged in. A decorator can be used to check this for each view it’s +applied to.

+
+
flaskr/auth.py
+
def login_required(view):
+    @functools.wraps(view)
+    def wrapped_view(**kwargs):
+        if g.user is None:
+            return redirect(url_for('auth.login'))
+
+        return view(**kwargs)
+
+    return wrapped_view
+
+
+
+

This decorator returns a new view function that wraps the original view +it’s applied to. The new function checks if a user is loaded and +redirects to the login page otherwise. If a user is loaded the original +view is called and continues normally. You’ll use this decorator when +writing the blog views.

+
+
+

Endpoints and URLs

+

The url_for() function generates the URL to a view based on a name +and arguments. The name associated with a view is also called the +endpoint, and by default it’s the same as the name of the view +function.

+

For example, the hello() view that was added to the app +factory earlier in the tutorial has the name 'hello' and can be +linked to with url_for('hello'). If it took an argument, which +you’ll see later, it would be linked to using +url_for('hello', who='World').

+

When using a blueprint, the name of the blueprint is prepended to the +name of the function, so the endpoint for the login function you +wrote above is 'auth.login' because you added it to the 'auth' +blueprint.

+

Continue to Templates.

+
+
+ + +
+
+
+
+ + +
+
+ + + diff --git a/_build/views/index.html b/_build/views/index.html new file mode 100644 index 00000000..3d743f1e --- /dev/null +++ b/_build/views/index.html @@ -0,0 +1,416 @@ + + + + + + + + Class-based Views — Flask Documentation (3.1.x) + + + + + + + + + + + + + + +
+
+
+
+ +
+

Class-based Views

+

This page introduces using the View and MethodView +classes to write class-based views.

+

A class-based view is a class that acts as a view function. Because it +is a class, different instances of the class can be created with +different arguments, to change the behavior of the view. This is also +known as generic, reusable, or pluggable views.

+

An example of where this is useful is defining a class that creates an +API based on the database model it is initialized with.

+

For more complex API behavior and customization, look into the various +API extensions for Flask.

+
+

Basic Reusable View

+

Let’s walk through an example converting a view function to a view +class. We start with a view function that queries a list of users then +renders a template to show the list.

+
@app.route("/users/")
+def user_list():
+    users = User.query.all()
+    return render_template("users.html", users=users)
+
+
+

This works for the user model, but let’s say you also had more models +that needed list pages. You’d need to write another view function for +each model, even though the only thing that would change is the model +and template name.

+

Instead, you can write a View subclass that will query a model +and render a template. As the first step, we’ll convert the view to a +class without any customization.

+
from flask.views import View
+
+class UserList(View):
+    def dispatch_request(self):
+        users = User.query.all()
+        return render_template("users.html", objects=users)
+
+app.add_url_rule("/users/", view_func=UserList.as_view("user_list"))
+
+
+

The View.dispatch_request() method is the equivalent of the view +function. Calling View.as_view() method will create a view +function that can be registered on the app with its +add_url_rule() method. The first argument to +as_view is the name to use to refer to the view with +url_for().

+
+

Note

+

You can’t decorate the class with @app.route() the way you’d +do with a basic view function.

+
+

Next, we need to be able to register the same view class for different +models and templates, to make it more useful than the original function. +The class will take two arguments, the model and template, and store +them on self. Then dispatch_request can reference these instead +of hard-coded values.

+
class ListView(View):
+    def __init__(self, model, template):
+        self.model = model
+        self.template = template
+
+    def dispatch_request(self):
+        items = self.model.query.all()
+        return render_template(self.template, items=items)
+
+
+

Remember, we create the view function with View.as_view() instead of +creating the class directly. Any extra arguments passed to as_view +are then passed when creating the class. Now we can register the same +view to handle multiple models.

+
app.add_url_rule(
+    "/users/",
+    view_func=ListView.as_view("user_list", User, "users.html"),
+)
+app.add_url_rule(
+    "/stories/",
+    view_func=ListView.as_view("story_list", Story, "stories.html"),
+)
+
+
+
+
+

URL Variables

+

Any variables captured by the URL are passed as keyword arguments to the +dispatch_request method, as they would be for a regular view +function.

+
class DetailView(View):
+    def __init__(self, model):
+        self.model = model
+        self.template = f"{model.__name__.lower()}/detail.html"
+
+    def dispatch_request(self, id)
+        item = self.model.query.get_or_404(id)
+        return render_template(self.template, item=item)
+
+app.add_url_rule(
+    "/users/<int:id>",
+    view_func=DetailView.as_view("user_detail", User)
+)
+
+
+
+
+

View Lifetime and self

+

By default, a new instance of the view class is created every time a +request is handled. This means that it is safe to write other data to +self during the request, since the next request will not see it, +unlike other forms of global state.

+

However, if your view class needs to do a lot of complex initialization, +doing it for every request is unnecessary and can be inefficient. To +avoid this, set View.init_every_request to False, which will +only create one instance of the class and use it for every request. In +this case, writing to self is not safe. If you need to store data +during the request, use g instead.

+

In the ListView example, nothing writes to self during the +request, so it is more efficient to create a single instance.

+
class ListView(View):
+    init_every_request = False
+
+    def __init__(self, model, template):
+        self.model = model
+        self.template = template
+
+    def dispatch_request(self):
+        items = self.model.query.all()
+        return render_template(self.template, items=items)
+
+
+

Different instances will still be created each for each as_view +call, but not for each request to those views.

+
+
+

View Decorators

+

The view class itself is not the view function. View decorators need to +be applied to the view function returned by as_view, not the class +itself. Set View.decorators to a list of decorators to apply.

+
class UserList(View):
+    decorators = [cache(minutes=2), login_required]
+
+app.add_url_rule('/users/', view_func=UserList.as_view())
+
+
+

If you didn’t set decorators, you could apply them manually instead. +This is equivalent to:

+
view = UserList.as_view("users_list")
+view = cache(minutes=2)(view)
+view = login_required(view)
+app.add_url_rule('/users/', view_func=view)
+
+
+

Keep in mind that order matters. If you’re used to @decorator style, +this is equivalent to:

+
@app.route("/users/")
+@login_required
+@cache(minutes=2)
+def user_list():
+    ...
+
+
+
+
+

Method Hints

+

A common pattern is to register a view with methods=["GET", "POST"], +then check request.method == "POST" to decide what to do. Setting +View.methods is equivalent to passing the list of methods to +add_url_rule or route.

+
class MyView(View):
+    methods = ["GET", "POST"]
+
+    def dispatch_request(self):
+        if request.method == "POST":
+            ...
+        ...
+
+app.add_url_rule('/my-view', view_func=MyView.as_view('my-view'))
+
+
+

This is equivalent to the following, except further subclasses can +inherit or change the methods.

+
app.add_url_rule(
+    "/my-view",
+    view_func=MyView.as_view("my-view"),
+    methods=["GET", "POST"],
+)
+
+
+
+
+

Method Dispatching and APIs

+

For APIs it can be helpful to use a different function for each HTTP +method. MethodView extends the basic View to dispatch +to different methods of the class based on the request method. Each HTTP +method maps to a method of the class with the same (lowercase) name.

+

MethodView automatically sets View.methods based on the +methods defined by the class. It even knows how to handle subclasses +that override or define other methods.

+

We can make a generic ItemAPI class that provides get (detail), +patch (edit), and delete methods for a given model. A GroupAPI can +provide get (list) and post (create) methods.

+
from flask.views import MethodView
+
+class ItemAPI(MethodView):
+    init_every_request = False
+
+    def __init__(self, model):
+        self.model = model
+        self.validator = generate_validator(model)
+
+    def _get_item(self, id):
+        return self.model.query.get_or_404(id)
+
+    def get(self, id):
+        item = self._get_item(id)
+        return jsonify(item.to_json())
+
+    def patch(self, id):
+        item = self._get_item(id)
+        errors = self.validator.validate(item, request.json)
+
+        if errors:
+            return jsonify(errors), 400
+
+        item.update_from_json(request.json)
+        db.session.commit()
+        return jsonify(item.to_json())
+
+    def delete(self, id):
+        item = self._get_item(id)
+        db.session.delete(item)
+        db.session.commit()
+        return "", 204
+
+class GroupAPI(MethodView):
+    init_every_request = False
+
+    def __init__(self, model):
+        self.model = model
+        self.validator = generate_validator(model, create=True)
+
+    def get(self):
+        items = self.model.query.all()
+        return jsonify([item.to_json() for item in items])
+
+    def post(self):
+        errors = self.validator.validate(request.json)
+
+        if errors:
+            return jsonify(errors), 400
+
+        db.session.add(self.model.from_json(request.json))
+        db.session.commit()
+        return jsonify(item.to_json())
+
+def register_api(app, model, name):
+    item = ItemAPI.as_view(f"{name}-item", model)
+    group = GroupAPI.as_view(f"{name}-group", model)
+    app.add_url_rule(f"/{name}/<int:id>", view_func=item)
+    app.add_url_rule(f"/{name}/", view_func=group)
+
+register_api(app, User, "users")
+register_api(app, Story, "stories")
+
+
+

This produces the following views, a standard REST API!

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

URL

Method

Description

/users/

GET

List all users

/users/

POST

Create a new user

/users/<id>

GET

Show a single user

/users/<id>

PATCH

Update a user

/users/<id>

DELETE

Delete a user

/stories/

GET

List all stories

/stories/

POST

Create a new story

/stories/<id>

GET

Show a single story

/stories/<id>

PATCH

Update a story

/stories/<id>

DELETE

Delete a story

+
+
+ + +
+
+
+
+ + +
+
+ + + diff --git a/_build/web-security/index.html b/_build/web-security/index.html new file mode 100644 index 00000000..30f5ab22 --- /dev/null +++ b/_build/web-security/index.html @@ -0,0 +1,381 @@ + + + + + + + + Security Considerations — Flask Documentation (3.1.x) + + + + + + + + + + + + + + +
+
+
+
+ +
+

Security Considerations

+

Web applications face many types of potential security problems, and it can be +hard to get everything right, or even to know what “right” is in general. Flask +tries to solve a few of these things by default, but there are other parts you +may have to take care of yourself. Many of these solutions are tradeoffs, and +will depend on each application’s specific needs and threat model. Many hosting +platforms may take care of certain types of problems without the need for the +Flask application to handle them.

+
+

Resource Use

+

A common category of attacks is “Denial of Service” (DoS or DDoS). This is a +very broad category, and different variants target different layers in a +deployed application. In general, something is done to increase how much +processing time or memory is used to handle each request, to the point where +there are not enough resources to handle legitimate requests.

+

Flask provides a few configuration options to handle resource use. They can +also be set on individual requests to customize only that request. The +documentation for each goes into more detail.

+ +

Regardless of these settings, you should also review what settings are available +from your operating system, container deployment (Docker etc), WSGI server, HTTP +server, and hosting platform. They typically have ways to set process resource +limits, timeouts, and other checks regardless of how Flask is configured.

+
+
+

Cross-Site Scripting (XSS)

+

Cross site scripting is the concept of injecting arbitrary HTML (and with +it JavaScript) into the context of a website. To remedy this, developers +have to properly escape text so that it cannot include arbitrary HTML +tags. For more information on that have a look at the Wikipedia article +on Cross-Site Scripting.

+

Flask configures Jinja2 to automatically escape all values unless +explicitly told otherwise. This should rule out all XSS problems caused +in templates, but there are still other places where you have to be +careful:

+
    +
  • generating HTML without the help of Jinja2

  • +
  • calling Markup on data submitted by users

  • +
  • sending out HTML from uploaded files, never do that, use the +Content-Disposition: attachment header to prevent that problem.

  • +
  • sending out textfiles from uploaded files. Some browsers are using +content-type guessing based on the first few bytes so users could +trick a browser to execute HTML.

  • +
+

Another thing that is very important are unquoted attributes. While +Jinja2 can protect you from XSS issues by escaping HTML, there is one +thing it cannot protect you from: XSS by attribute injection. To counter +this possible attack vector, be sure to always quote your attributes with +either double or single quotes when using Jinja expressions in them:

+
<input value="{{ value }}">
+
+
+

Why is this necessary? Because if you would not be doing that, an +attacker could easily inject custom JavaScript handlers. For example an +attacker could inject this piece of HTML+JavaScript:

+
onmouseover=alert(document.cookie)
+
+
+

When the user would then move with the mouse over the input, the cookie +would be presented to the user in an alert window. But instead of showing +the cookie to the user, a good attacker might also execute any other +JavaScript code. In combination with CSS injections the attacker might +even make the element fill out the entire page so that the user would +just have to have the mouse anywhere on the page to trigger the attack.

+

There is one class of XSS issues that Jinja’s escaping does not protect +against. The a tag’s href attribute can contain a javascript: URI, +which the browser will execute when clicked if not secured properly.

+
<a href="{{ value }}">click here</a>
+<a href="javascript:alert('unsafe');">click here</a>
+
+
+

To prevent this, you’ll need to set the Content Security Policy (CSP) response header.

+
+
+

Cross-Site Request Forgery (CSRF)

+

Another big problem is CSRF. This is a very complex topic and I won’t +outline it here in detail just mention what it is and how to theoretically +prevent it.

+

If your authentication information is stored in cookies, you have implicit +state management. The state of “being logged in” is controlled by a +cookie, and that cookie is sent with each request to a page. +Unfortunately that includes requests triggered by 3rd party sites. If you +don’t keep that in mind, some people might be able to trick your +application’s users with social engineering to do stupid things without +them knowing.

+

Say you have a specific URL that, when you sent POST requests to will +delete a user’s profile (say http://example.com/user/delete). If an +attacker now creates a page that sends a post request to that page with +some JavaScript they just have to trick some users to load that page and +their profiles will end up being deleted.

+

Imagine you were to run Facebook with millions of concurrent users and +someone would send out links to images of little kittens. When users +would go to that page, their profiles would get deleted while they are +looking at images of fluffy cats.

+

How can you prevent that? Basically for each request that modifies +content on the server you would have to either use a one-time token and +store that in the cookie and also transmit it with the form data. +After receiving the data on the server again, you would then have to +compare the two tokens and ensure they are equal.

+

Why does Flask not do that for you? The ideal place for this to happen is +the form validation framework, which does not exist in Flask.

+
+
+

JSON Security

+

In Flask 0.10 and lower, jsonify() did not serialize top-level +arrays to JSON. This was because of a security vulnerability in ECMAScript 4.

+

ECMAScript 5 closed this vulnerability, so only extremely old browsers are +still vulnerable. All of these browsers have other more serious +vulnerabilities, so +this behavior was changed and jsonify() now supports serializing +arrays.

+
+
+

Security Headers

+

Browsers recognize various response headers in order to control security. We +recommend reviewing each of the headers below for use in your application. +The Flask-Talisman extension can be used to manage HTTPS and the security +headers for you.

+
+

HTTP Strict Transport Security (HSTS)

+

Tells the browser to convert all HTTP requests to HTTPS, preventing +man-in-the-middle (MITM) attacks.

+
response.headers['Strict-Transport-Security'] = 'max-age=31536000; includeSubDomains'
+
+
+ +
+
+

Content Security Policy (CSP)

+

Tell the browser where it can load various types of resource from. This header +should be used whenever possible, but requires some work to define the correct +policy for your site. A very strict policy would be:

+
response.headers['Content-Security-Policy'] = "default-src 'self'"
+
+
+ +
+
+

X-Content-Type-Options

+

Forces the browser to honor the response content type instead of trying to +detect it, which can be abused to generate a cross-site scripting (XSS) +attack.

+
response.headers['X-Content-Type-Options'] = 'nosniff'
+
+
+ +
+
+

X-Frame-Options

+

Prevents external sites from embedding your site in an iframe. This +prevents a class of attacks where clicks in the outer frame can be translated +invisibly to clicks on your page’s elements. This is also known as +“clickjacking”.

+
response.headers['X-Frame-Options'] = 'SAMEORIGIN'
+
+
+ +
+ +
+

HTTP Public Key Pinning (HPKP)

+

This tells the browser to authenticate with the server using only the specific +certificate key to prevent MITM attacks.

+
+

Warning

+

Be careful when enabling this, as it is very difficult to undo if you set up +or upgrade your key incorrectly.

+
+ +
+
+
+

Copy/Paste to Terminal

+

Hidden characters such as the backspace character (\b, ^H) can +cause text to render differently in HTML than how it is interpreted if +pasted into a terminal.

+

For example, import y\bose\bm\bi\bt\be\b renders as +import yosemite in HTML, but the backspaces are applied when pasted +into a terminal, and it becomes import os.

+

If you expect users to copy and paste untrusted code from your site, +such as from comments posted by users on a technical blog, consider +applying extra filtering, such as replacing all \b characters.

+
body = body.replace("\b", "")
+
+
+

Most modern terminals will warn about and remove hidden characters when +pasting, so this isn’t strictly necessary. It’s also possible to craft +dangerous commands in other ways that aren’t possible to filter. +Depending on your site’s use case, it may be good to show a warning +about copying code in general.

+
+
+ + +
+
+
+
+ + +
+
+ + +

lCje5S=ovwKGTruA>*qof+Rn(b<9fQqD=^j*U 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