[
  {
    "path": ".docker-hub-test",
    "content": "Docker Hub test 2\n"
  },
  {
    "path": ".editorconfig",
    "content": "# EditorConfig: http://EditorConfig.org\n\nroot = true\n\n[*]\nindent_style = tab\nindent_size = 2\ninsert_final_newline = true\ntrim_trailing_whitespace = true\nend_of_line = lf\ncharset = utf-8\nmax_line_length = 79\n\n[{*.html,*.css,*.js}]\nmax_line_length = off\n\n[*.py]\nindent_size = 4\nindent_style = space\n\n[*.yml]\nindent_style = space\n\n# Tests don't get a line width restriction.  It's still a good idea to follow\n# the 79 character rule, but in the interests of clarity, tests often need to\n# violate it.\n[**/test_*.py]\nmax_line_length = off\n"
  },
  {
    "path": ".gitattributes",
    "content": "THANKS.md merge=union\n"
  },
  {
    "path": ".gitignore",
    "content": "# Byte-compiled / optimized / DLL files\n__pycache__/\n*.py[cod]\n\n# C extensions\n*.so\n\n# Distribution / packaging\n.Python\nenv/\nbuild/\ndevelop-eggs/\ndist/\ndownloads/\neggs/\n.eggs/\n#lib/\nlib64/\nparts/\nsdist/\nvar/\n*.egg-info/\n.installed.cfg\n*.egg\n\n# PyInstaller\n#  Usually these files are written by a python script from a template\n#  before PyInstaller builds the exe, so as to inject date/other infos into it.\n*.manifest\n*.spec\n\n# Installer logs\npip-log.txt\npip-delete-this-directory.txt\n\n# Unit test / coverage reports\nhtmlcov/\n.tox/\n.coverage\n.coverage.*\n.cache\nnosetests.xml\ncoverage.xml\n*,cover\n.pytest_cache\n\n# Translations\n*.mo\n*.pot\n\n# Django stuff:\n*.log\n\n# Sphinx documentation\ndocs/_build/\n\n# PyBuilder\ntarget/\n\n# Stored PDFs\nmedia/documents/*.gpg\nmedia/documents/thumbnails/*\nmedia/documents/originals/*\nmedia/overrides.css\nmedia/overrides.js\n\n# Sqlite database\ndb.sqlite3\ndb.sqlite3-journal\n\n# PyCharm\n.idea\n\n# Other stuff that doesn't belong\n.virtualenv\nvirtualenv\ndocker-compose.yml\ndocker-compose.env\n\n# Used for development\nscripts/import-for-development\nscripts/nuke\n\n# Static files collected by the collectstatic command\n./static/\n"
  },
  {
    "path": ".travis.yml",
    "content": "language: python\n\nbefore_install:\n- sudo apt-get update -qq\n- sudo apt-get install -qq libpoppler-cpp-dev unpaper tesseract-ocr imagemagick ghostscript optipng\n\nsudo: false\n\nmatrix:\n    include:        \n        - python: \"3.5\"\n        - python: \"3.6\"\n        - python: \"3.7-dev\"\n        - env:\n            - BUILD_DOCKER=1\n            # Variable to add to publish the Docker image:\n            # * DOCKER_USERNAME\n            # * DOCKER_PASSWORD, to be encrypted, use `travis encrypt DOCKER_PASSWORD=<password>`\n          services:\n            - docker\n          before_install:\n            - true\n          install:\n            - true\n          script:\n            - docker build --tag=the-paperless-project/paperless .\n          after_success:\n            - true\n\ninstall:\n    - pip install --upgrade pip pipenv sphinx\n    - pipenv lock -r > requirements.txt\n    - pip install -r requirements.txt\n\nscript:\n    - cd src/\n    - pytest --cov\n    - pycodestyle\n    - sphinx-build -b html ../docs ../docs/_build -W\n\nafter_success:\n  - coveralls\n\ndeploy:\n  - provider: script\n    skip_cleanup: true\n    script: ci/deploy-docker\n    on:\n      tags: true\n      condition: '\"${BUILD_DOCKER}\" = 1'\n  - provider: script\n    skip_cleanup: true\n    script: ci/deploy-docker\n    on:\n      branch: master\n      condition: '\"${BUILD_DOCKER}\" = 1'\n"
  },
  {
    "path": "CODE_OF_CONDUCT.md",
    "content": "# Contributor Covenant Code of Conduct\n\n## Our Pledge\n\nIn the interest of fostering an open and welcoming environment, we as contributors and maintainers pledge to making participation in our project and our community a harassment-free experience for everyone, regardless of age, body size, disability, ethnicity, gender identity and expression, level of experience, nationality, personal appearance, race, religion, or sexual identity and orientation.\n\n## Our Standards\n\nExamples of behavior that contributes to creating a positive environment include:\n\n* Using welcoming and inclusive language\n* Being respectful of differing viewpoints and experiences\n* Gracefully accepting constructive criticism\n* Focusing on what is best for the community\n* Showing empathy towards other community members\n\nExamples of unacceptable behavior by participants include:\n\n* Unwelcome sexual attention or advances\n* Trolling, insulting/derogatory comments, and personal or political attacks\n* Public or private harassment\n* Publishing others' private information, such as a physical or electronic address, without explicit permission\n* Other conduct which could reasonably be considered inappropriate in a professional setting\n\n## Our Responsibilities\n\nProject maintainers are responsible for clarifying the standards of acceptable behavior and are expected to take appropriate and fair corrective action in response to any instances of unacceptable behavior.\n\nProject maintainers have the right and responsibility to remove, edit, or reject comments, commits, code, wiki edits, issues, and other contributions that are not aligned to this Code of Conduct, or to ban temporarily or permanently any contributor for other behaviors that they deem inappropriate, threatening, offensive, or harmful.\n\n## Scope\n\nThis Code of Conduct applies both within project spaces and in public spaces when an individual is representing the project or its community. Examples of representing a project or community include using an official project e-mail address, posting via an official social media account, or acting as an appointed representative at an online or offline event. Representation of a project may be further defined and clarified by project maintainers.\n\n## Enforcement\n\nInstances of abusive, harassing, or otherwise unacceptable behavior may be reported by contacting the project team at code@danielquinn.org. The project team will review and investigate all complaints, and will respond in a way that it deems appropriate to the circumstances. The project team is obligated to maintain confidentiality with regard to the reporter of an incident. Further details of specific enforcement policies may be posted separately.\n\nProject maintainers who do not follow or enforce the Code of Conduct in good faith may face temporary or permanent repercussions as determined by other members of the project's leadership.\n\n## Attribution\n\nThis Code of Conduct is adapted from the [Contributor Covenant][homepage], version 1.4 to remove puritanical language.  The original is available at [http://contributor-covenant.org/version/1/4][version]\n\n[homepage]: http://contributor-covenant.org\n[version]: http://contributor-covenant.org/version/1/4/\n"
  },
  {
    "path": "Dockerfile",
    "content": "FROM alpine:3.12\n\nLABEL maintainer=\"The Paperless Project https://github.com/the-paperless-project/paperless\" \\\n      contributors=\"Guy Addadi <addadi@gmail.com>, Pit Kleyersburg <pitkley@googlemail.com>, \\\n        Sven Fischer <git-dev@linux4tw.de>\"\n\n# Copy Pipfiles file, init script and gunicorn.conf\nCOPY Pipfile* /usr/src/paperless/\nCOPY scripts/docker-entrypoint.sh /sbin/docker-entrypoint.sh\nCOPY scripts/gunicorn.conf /usr/src/paperless/\n\n# Set export and consumption directories\nENV PAPERLESS_EXPORT_DIR=/export \\\n    PAPERLESS_CONSUMPTION_DIR=/consume\n\nRUN apk add --no-cache \\\n      bash \\\n      curl \\\n      ghostscript \\\n      gnupg \\\n      imagemagick \\\n      libmagic \\\n      libpq \\\n      optipng \\\n      poppler \\\n      python3 \\\n      shadow \\\n      sudo \\\n      tesseract-ocr \\\n\t\t\ttzdata \\\n      unpaper && \\\n    apk add --no-cache --virtual .build-dependencies \\\n      g++ \\\n      gcc \\\n      jpeg-dev \\\n      musl-dev \\\n      poppler-dev \\\n      postgresql-dev \\\n      python3-dev \\\n      zlib-dev && \\\n# Install python dependencies\n    python3 -m ensurepip && \\\n    rm -r /usr/lib/python*/ensurepip && \\\n    cd /usr/src/paperless && \\\n    pip3 install --upgrade pip pipenv && \\\n    pipenv install --system --deploy && \\\n# Remove build dependencies\n    apk del .build-dependencies && \\\n# Create the consumption directory\n    mkdir -p $PAPERLESS_CONSUMPTION_DIR && \\\n# Create user\n    addgroup -g 1000 paperless && \\\n    adduser -D -u 1000 -G paperless -h /usr/src/paperless paperless && \\\n    chown -Rh paperless:paperless /usr/src/paperless && \\\n    mkdir -p $PAPERLESS_EXPORT_DIR && \\\n# Avoid setrlimit warnings\n# See: https://gitlab.alpinelinux.org/alpine/aports/issues/11122\n    echo 'Set disable_coredump false' >> /etc/sudo.conf && \\\n# Setup entrypoint\n    chmod 755 /sbin/docker-entrypoint.sh\n\nWORKDIR /usr/src/paperless/src\n# Mount volumes and set Entrypoint\nVOLUME [\"/usr/src/paperless/data\", \"/usr/src/paperless/media\", \"/consume\", \"/export\"]\nENTRYPOINT [\"/sbin/docker-entrypoint.sh\"]\nCMD [\"--help\"]\n\n# Copy application\nCOPY src/ /usr/src/paperless/src/\nCOPY data/ /usr/src/paperless/data/\nCOPY media/ /usr/src/paperless/media/\n\n# Collect static files\nRUN sudo -HEu paperless /usr/src/paperless/src/manage.py collectstatic --clear --no-input\n"
  },
  {
    "path": "LICENSE",
    "content": "                    GNU GENERAL PUBLIC LICENSE\n                       Version 3, 29 June 2007\n\n Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/>\n Everyone is permitted to copy and distribute verbatim copies\n of this license document, but changing it is not allowed.\n\n                            Preamble\n\n  The GNU General Public License is a free, copyleft license for\nsoftware and other kinds of works.\n\n  The licenses for most software and other practical works are designed\nto take away your freedom to share and change the works.  By contrast,\nthe GNU General Public License is intended to guarantee your freedom to\nshare and change all versions of a program--to make sure it remains free\nsoftware for all its users.  We, the Free Software Foundation, use the\nGNU General Public License for most of our software; it applies also to\nany other work released this way by its authors.  You can apply it to\nyour programs, too.\n\n  When we speak of free software, we are referring to freedom, not\nprice.  Our General Public Licenses are designed to make sure that you\nhave the freedom to distribute copies of free software (and charge for\nthem if you wish), that you receive source code or can get it if you\nwant it, that you can change the software or use pieces of it in new\nfree programs, and that you know you can do these things.\n\n  To protect your rights, we need to prevent others from denying you\nthese rights or asking you to surrender the rights.  Therefore, you have\ncertain responsibilities if you distribute copies of the software, or if\nyou modify it: responsibilities to respect the freedom of others.\n\n  For example, if you distribute copies of such a program, whether\ngratis or for a fee, you must pass on to the recipients the same\nfreedoms that you received.  You must make sure that they, too, receive\nor can get the source code.  And you must show them these terms so they\nknow their rights.\n\n  Developers that use the GNU GPL protect your rights with two steps:\n(1) assert copyright on the software, and (2) offer you this License\ngiving you legal permission to copy, distribute and/or modify it.\n\n  For the developers' and authors' protection, the GPL clearly explains\nthat there is no warranty for this free software.  For both users' and\nauthors' sake, the GPL requires that modified versions be marked as\nchanged, so that their problems will not be attributed erroneously to\nauthors of previous versions.\n\n  Some devices are designed to deny users access to install or run\nmodified versions of the software inside them, although the manufacturer\ncan do so.  This is fundamentally incompatible with the aim of\nprotecting users' freedom to change the software.  The systematic\npattern of such abuse occurs in the area of products for individuals to\nuse, which is precisely where it is most unacceptable.  Therefore, we\nhave designed this version of the GPL to prohibit the practice for those\nproducts.  If such problems arise substantially in other domains, we\nstand ready to extend this provision to those domains in future versions\nof the GPL, as needed to protect the freedom of users.\n\n  Finally, every program is threatened constantly by software patents.\nStates should not allow patents to restrict development and use of\nsoftware on general-purpose computers, but in those that do, we wish to\navoid the special danger that patents applied to a free program could\nmake it effectively proprietary.  To prevent this, the GPL assures that\npatents cannot be used to render the program non-free.\n\n  The precise terms and conditions for copying, distribution and\nmodification follow.\n\n                       TERMS AND CONDITIONS\n\n  0. Definitions.\n\n  \"This License\" refers to version 3 of the GNU General Public License.\n\n  \"Copyright\" also means copyright-like laws that apply to other kinds of\nworks, such as semiconductor masks.\n\n  \"The Program\" refers to any copyrightable work licensed under this\nLicense.  Each licensee is addressed as \"you\".  \"Licensees\" and\n\"recipients\" may be individuals or organizations.\n\n  To \"modify\" a work means to copy from or adapt all or part of the work\nin a fashion requiring copyright permission, other than the making of an\nexact copy.  The resulting work is called a \"modified version\" of the\nearlier work or a work \"based on\" the earlier work.\n\n  A \"covered work\" means either the unmodified Program or a work based\non the Program.\n\n  To \"propagate\" a work means to do anything with it that, without\npermission, would make you directly or secondarily liable for\ninfringement under applicable copyright law, except executing it on a\ncomputer or modifying a private copy.  Propagation includes copying,\ndistribution (with or without modification), making available to the\npublic, and in some countries other activities as well.\n\n  To \"convey\" a work means any kind of propagation that enables other\nparties to make or receive copies.  Mere interaction with a user through\na computer network, with no transfer of a copy, is not conveying.\n\n  An interactive user interface displays \"Appropriate Legal Notices\"\nto the extent that it includes a convenient and prominently visible\nfeature that (1) displays an appropriate copyright notice, and (2)\ntells the user that there is no warranty for the work (except to the\nextent that warranties are provided), that licensees may convey the\nwork under this License, and how to view a copy of this License.  If\nthe interface presents a list of user commands or options, such as a\nmenu, a prominent item in the list meets this criterion.\n\n  1. Source Code.\n\n  The \"source code\" for a work means the preferred form of the work\nfor making modifications to it.  \"Object code\" means any non-source\nform of a work.\n\n  A \"Standard Interface\" means an interface that either is an official\nstandard defined by a recognized standards body, or, in the case of\ninterfaces specified for a particular programming language, one that\nis widely used among developers working in that language.\n\n  The \"System Libraries\" of an executable work include anything, other\nthan the work as a whole, that (a) is included in the normal form of\npackaging a Major Component, but which is not part of that Major\nComponent, and (b) serves only to enable use of the work with that\nMajor Component, or to implement a Standard Interface for which an\nimplementation is available to the public in source code form.  A\n\"Major Component\", in this context, means a major essential component\n(kernel, window system, and so on) of the specific operating system\n(if any) on which the executable work runs, or a compiler used to\nproduce the work, or an object code interpreter used to run it.\n\n  The \"Corresponding Source\" for a work in object code form means all\nthe source code needed to generate, install, and (for an executable\nwork) run the object code and to modify the work, including scripts to\ncontrol those activities.  However, it does not include the work's\nSystem Libraries, or general-purpose tools or generally available free\nprograms which are used unmodified in performing those activities but\nwhich are not part of the work.  For example, Corresponding Source\nincludes interface definition files associated with source files for\nthe work, and the source code for shared libraries and dynamically\nlinked subprograms that the work is specifically designed to require,\nsuch as by intimate data communication or control flow between those\nsubprograms and other parts of the work.\n\n  The Corresponding Source need not include anything that users\ncan regenerate automatically from other parts of the Corresponding\nSource.\n\n  The Corresponding Source for a work in source code form is that\nsame work.\n\n  2. Basic Permissions.\n\n  All rights granted under this License are granted for the term of\ncopyright on the Program, and are irrevocable provided the stated\nconditions are met.  This License explicitly affirms your unlimited\npermission to run the unmodified Program.  The output from running a\ncovered work is covered by this License only if the output, given its\ncontent, constitutes a covered work.  This License acknowledges your\nrights of fair use or other equivalent, as provided by copyright law.\n\n  You may make, run and propagate covered works that you do not\nconvey, without conditions so long as your license otherwise remains\nin force.  You may convey covered works to others for the sole purpose\nof having them make modifications exclusively for you, or provide you\nwith facilities for running those works, provided that you comply with\nthe terms of this License in conveying all material for which you do\nnot control copyright.  Those thus making or running the covered works\nfor you must do so exclusively on your behalf, under your direction\nand control, on terms that prohibit them from making any copies of\nyour copyrighted material outside their relationship with you.\n\n  Conveying under any other circumstances is permitted solely under\nthe conditions stated below.  Sublicensing is not allowed; section 10\nmakes it unnecessary.\n\n  3. Protecting Users' Legal Rights From Anti-Circumvention Law.\n\n  No covered work shall be deemed part of an effective technological\nmeasure under any applicable law fulfilling obligations under article\n11 of the WIPO copyright treaty adopted on 20 December 1996, or\nsimilar laws prohibiting or restricting circumvention of such\nmeasures.\n\n  When you convey a covered work, you waive any legal power to forbid\ncircumvention of technological measures to the extent such circumvention\nis effected by exercising rights under this License with respect to\nthe covered work, and you disclaim any intention to limit operation or\nmodification of the work as a means of enforcing, against the work's\nusers, your or third parties' legal rights to forbid circumvention of\ntechnological measures.\n\n  4. Conveying Verbatim Copies.\n\n  You may convey verbatim copies of the Program's source code as you\nreceive it, in any medium, provided that you conspicuously and\nappropriately publish on each copy an appropriate copyright notice;\nkeep intact all notices stating that this License and any\nnon-permissive terms added in accord with section 7 apply to the code;\nkeep intact all notices of the absence of any warranty; and give all\nrecipients a copy of this License along with the Program.\n\n  You may charge any price or no price for each copy that you convey,\nand you may offer support or warranty protection for a fee.\n\n  5. Conveying Modified Source Versions.\n\n  You may convey a work based on the Program, or the modifications to\nproduce it from the Program, in the form of source code under the\nterms of section 4, provided that you also meet all of these conditions:\n\n    a) The work must carry prominent notices stating that you modified\n    it, and giving a relevant date.\n\n    b) The work must carry prominent notices stating that it is\n    released under this License and any conditions added under section\n    7.  This requirement modifies the requirement in section 4 to\n    \"keep intact all notices\".\n\n    c) You must license the entire work, as a whole, under this\n    License to anyone who comes into possession of a copy.  This\n    License will therefore apply, along with any applicable section 7\n    additional terms, to the whole of the work, and all its parts,\n    regardless of how they are packaged.  This License gives no\n    permission to license the work in any other way, but it does not\n    invalidate such permission if you have separately received it.\n\n    d) If the work has interactive user interfaces, each must display\n    Appropriate Legal Notices; however, if the Program has interactive\n    interfaces that do not display Appropriate Legal Notices, your\n    work need not make them do so.\n\n  A compilation of a covered work with other separate and independent\nworks, which are not by their nature extensions of the covered work,\nand which are not combined with it such as to form a larger program,\nin or on a volume of a storage or distribution medium, is called an\n\"aggregate\" if the compilation and its resulting copyright are not\nused to limit the access or legal rights of the compilation's users\nbeyond what the individual works permit.  Inclusion of a covered work\nin an aggregate does not cause this License to apply to the other\nparts of the aggregate.\n\n  6. Conveying Non-Source Forms.\n\n  You may convey a covered work in object code form under the terms\nof sections 4 and 5, provided that you also convey the\nmachine-readable Corresponding Source under the terms of this License,\nin one of these ways:\n\n    a) Convey the object code in, or embodied in, a physical product\n    (including a physical distribution medium), accompanied by the\n    Corresponding Source fixed on a durable physical medium\n    customarily used for software interchange.\n\n    b) Convey the object code in, or embodied in, a physical product\n    (including a physical distribution medium), accompanied by a\n    written offer, valid for at least three years and valid for as\n    long as you offer spare parts or customer support for that product\n    model, to give anyone who possesses the object code either (1) a\n    copy of the Corresponding Source for all the software in the\n    product that is covered by this License, on a durable physical\n    medium customarily used for software interchange, for a price no\n    more than your reasonable cost of physically performing this\n    conveying of source, or (2) access to copy the\n    Corresponding Source from a network server at no charge.\n\n    c) Convey individual copies of the object code with a copy of the\n    written offer to provide the Corresponding Source.  This\n    alternative is allowed only occasionally and noncommercially, and\n    only if you received the object code with such an offer, in accord\n    with subsection 6b.\n\n    d) Convey the object code by offering access from a designated\n    place (gratis or for a charge), and offer equivalent access to the\n    Corresponding Source in the same way through the same place at no\n    further charge.  You need not require recipients to copy the\n    Corresponding Source along with the object code.  If the place to\n    copy the object code is a network server, the Corresponding Source\n    may be on a different server (operated by you or a third party)\n    that supports equivalent copying facilities, provided you maintain\n    clear directions next to the object code saying where to find the\n    Corresponding Source.  Regardless of what server hosts the\n    Corresponding Source, you remain obligated to ensure that it is\n    available for as long as needed to satisfy these requirements.\n\n    e) Convey the object code using peer-to-peer transmission, provided\n    you inform other peers where the object code and Corresponding\n    Source of the work are being offered to the general public at no\n    charge under subsection 6d.\n\n  A separable portion of the object code, whose source code is excluded\nfrom the Corresponding Source as a System Library, need not be\nincluded in conveying the object code work.\n\n  A \"User Product\" is either (1) a \"consumer product\", which means any\ntangible personal property which is normally used for personal, family,\nor household purposes, or (2) anything designed or sold for incorporation\ninto a dwelling.  In determining whether a product is a consumer product,\ndoubtful cases shall be resolved in favor of coverage.  For a particular\nproduct received by a particular user, \"normally used\" refers to a\ntypical or common use of that class of product, regardless of the status\nof the particular user or of the way in which the particular user\nactually uses, or expects or is expected to use, the product.  A product\nis a consumer product regardless of whether the product has substantial\ncommercial, industrial or non-consumer uses, unless such uses represent\nthe only significant mode of use of the product.\n\n  \"Installation Information\" for a User Product means any methods,\nprocedures, authorization keys, or other information required to install\nand execute modified versions of a covered work in that User Product from\na modified version of its Corresponding Source.  The information must\nsuffice to ensure that the continued functioning of the modified object\ncode is in no case prevented or interfered with solely because\nmodification has been made.\n\n  If you convey an object code work under this section in, or with, or\nspecifically for use in, a User Product, and the conveying occurs as\npart of a transaction in which the right of possession and use of the\nUser Product is transferred to the recipient in perpetuity or for a\nfixed term (regardless of how the transaction is characterized), the\nCorresponding Source conveyed under this section must be accompanied\nby the Installation Information.  But this requirement does not apply\nif neither you nor any third party retains the ability to install\nmodified object code on the User Product (for example, the work has\nbeen installed in ROM).\n\n  The requirement to provide Installation Information does not include a\nrequirement to continue to provide support service, warranty, or updates\nfor a work that has been modified or installed by the recipient, or for\nthe User Product in which it has been modified or installed.  Access to a\nnetwork may be denied when the modification itself materially and\nadversely affects the operation of the network or violates the rules and\nprotocols for communication across the network.\n\n  Corresponding Source conveyed, and Installation Information provided,\nin accord with this section must be in a format that is publicly\ndocumented (and with an implementation available to the public in\nsource code form), and must require no special password or key for\nunpacking, reading or copying.\n\n  7. Additional Terms.\n\n  \"Additional permissions\" are terms that supplement the terms of this\nLicense by making exceptions from one or more of its conditions.\nAdditional permissions that are applicable to the entire Program shall\nbe treated as though they were included in this License, to the extent\nthat they are valid under applicable law.  If additional permissions\napply only to part of the Program, that part may be used separately\nunder those permissions, but the entire Program remains governed by\nthis License without regard to the additional permissions.\n\n  When you convey a copy of a covered work, you may at your option\nremove any additional permissions from that copy, or from any part of\nit.  (Additional permissions may be written to require their own\nremoval in certain cases when you modify the work.)  You may place\nadditional permissions on material, added by you to a covered work,\nfor which you have or can give appropriate copyright permission.\n\n  Notwithstanding any other provision of this License, for material you\nadd to a covered work, you may (if authorized by the copyright holders of\nthat material) supplement the terms of this License with terms:\n\n    a) Disclaiming warranty or limiting liability differently from the\n    terms of sections 15 and 16 of this License; or\n\n    b) Requiring preservation of specified reasonable legal notices or\n    author attributions in that material or in the Appropriate Legal\n    Notices displayed by works containing it; or\n\n    c) Prohibiting misrepresentation of the origin of that material, or\n    requiring that modified versions of such material be marked in\n    reasonable ways as different from the original version; or\n\n    d) Limiting the use for publicity purposes of names of licensors or\n    authors of the material; or\n\n    e) Declining to grant rights under trademark law for use of some\n    trade names, trademarks, or service marks; or\n\n    f) Requiring indemnification of licensors and authors of that\n    material by anyone who conveys the material (or modified versions of\n    it) with contractual assumptions of liability to the recipient, for\n    any liability that these contractual assumptions directly impose on\n    those licensors and authors.\n\n  All other non-permissive additional terms are considered \"further\nrestrictions\" within the meaning of section 10.  If the Program as you\nreceived it, or any part of it, contains a notice stating that it is\ngoverned by this License along with a term that is a further\nrestriction, you may remove that term.  If a license document contains\na further restriction but permits relicensing or conveying under this\nLicense, you may add to a covered work material governed by the terms\nof that license document, provided that the further restriction does\nnot survive such relicensing or conveying.\n\n  If you add terms to a covered work in accord with this section, you\nmust place, in the relevant source files, a statement of the\nadditional terms that apply to those files, or a notice indicating\nwhere to find the applicable terms.\n\n  Additional terms, permissive or non-permissive, may be stated in the\nform of a separately written license, or stated as exceptions;\nthe above requirements apply either way.\n\n  8. Termination.\n\n  You may not propagate or modify a covered work except as expressly\nprovided under this License.  Any attempt otherwise to propagate or\nmodify it is void, and will automatically terminate your rights under\nthis License (including any patent licenses granted under the third\nparagraph of section 11).\n\n  However, if you cease all violation of this License, then your\nlicense from a particular copyright holder is reinstated (a)\nprovisionally, unless and until the copyright holder explicitly and\nfinally terminates your license, and (b) permanently, if the copyright\nholder fails to notify you of the violation by some reasonable means\nprior to 60 days after the cessation.\n\n  Moreover, your license from a particular copyright holder is\nreinstated permanently if the copyright holder notifies you of the\nviolation by some reasonable means, this is the first time you have\nreceived notice of violation of this License (for any work) from that\ncopyright holder, and you cure the violation prior to 30 days after\nyour receipt of the notice.\n\n  Termination of your rights under this section does not terminate the\nlicenses of parties who have received copies or rights from you under\nthis License.  If your rights have been terminated and not permanently\nreinstated, you do not qualify to receive new licenses for the same\nmaterial under section 10.\n\n  9. Acceptance Not Required for Having Copies.\n\n  You are not required to accept this License in order to receive or\nrun a copy of the Program.  Ancillary propagation of a covered work\noccurring solely as a consequence of using peer-to-peer transmission\nto receive a copy likewise does not require acceptance.  However,\nnothing other than this License grants you permission to propagate or\nmodify any covered work.  These actions infringe copyright if you do\nnot accept this License.  Therefore, by modifying or propagating a\ncovered work, you indicate your acceptance of this License to do so.\n\n  10. Automatic Licensing of Downstream Recipients.\n\n  Each time you convey a covered work, the recipient automatically\nreceives a license from the original licensors, to run, modify and\npropagate that work, subject to this License.  You are not responsible\nfor enforcing compliance by third parties with this License.\n\n  An \"entity transaction\" is a transaction transferring control of an\norganization, or substantially all assets of one, or subdividing an\norganization, or merging organizations.  If propagation of a covered\nwork results from an entity transaction, each party to that\ntransaction who receives a copy of the work also receives whatever\nlicenses to the work the party's predecessor in interest had or could\ngive under the previous paragraph, plus a right to possession of the\nCorresponding Source of the work from the predecessor in interest, if\nthe predecessor has it or can get it with reasonable efforts.\n\n  You may not impose any further restrictions on the exercise of the\nrights granted or affirmed under this License.  For example, you may\nnot impose a license fee, royalty, or other charge for exercise of\nrights granted under this License, and you may not initiate litigation\n(including a cross-claim or counterclaim in a lawsuit) alleging that\nany patent claim is infringed by making, using, selling, offering for\nsale, or importing the Program or any portion of it.\n\n  11. Patents.\n\n  A \"contributor\" is a copyright holder who authorizes use under this\nLicense of the Program or a work on which the Program is based.  The\nwork thus licensed is called the contributor's \"contributor version\".\n\n  A contributor's \"essential patent claims\" are all patent claims\nowned or controlled by the contributor, whether already acquired or\nhereafter acquired, that would be infringed by some manner, permitted\nby this License, of making, using, or selling its contributor version,\nbut do not include claims that would be infringed only as a\nconsequence of further modification of the contributor version.  For\npurposes of this definition, \"control\" includes the right to grant\npatent sublicenses in a manner consistent with the requirements of\nthis License.\n\n  Each contributor grants you a non-exclusive, worldwide, royalty-free\npatent license under the contributor's essential patent claims, to\nmake, use, sell, offer for sale, import and otherwise run, modify and\npropagate the contents of its contributor version.\n\n  In the following three paragraphs, a \"patent license\" is any express\nagreement or commitment, however denominated, not to enforce a patent\n(such as an express permission to practice a patent or covenant not to\nsue for patent infringement).  To \"grant\" such a patent license to a\nparty means to make such an agreement or commitment not to enforce a\npatent against the party.\n\n  If you convey a covered work, knowingly relying on a patent license,\nand the Corresponding Source of the work is not available for anyone\nto copy, free of charge and under the terms of this License, through a\npublicly available network server or other readily accessible means,\nthen you must either (1) cause the Corresponding Source to be so\navailable, or (2) arrange to deprive yourself of the benefit of the\npatent license for this particular work, or (3) arrange, in a manner\nconsistent with the requirements of this License, to extend the patent\nlicense to downstream recipients.  \"Knowingly relying\" means you have\nactual knowledge that, but for the patent license, your conveying the\ncovered work in a country, or your recipient's use of the covered work\nin a country, would infringe one or more identifiable patents in that\ncountry that you have reason to believe are valid.\n\n  If, pursuant to or in connection with a single transaction or\narrangement, you convey, or propagate by procuring conveyance of, a\ncovered work, and grant a patent license to some of the parties\nreceiving the covered work authorizing them to use, propagate, modify\nor convey a specific copy of the covered work, then the patent license\nyou grant is automatically extended to all recipients of the covered\nwork and works based on it.\n\n  A patent license is \"discriminatory\" if it does not include within\nthe scope of its coverage, prohibits the exercise of, or is\nconditioned on the non-exercise of one or more of the rights that are\nspecifically granted under this License.  You may not convey a covered\nwork if you are a party to an arrangement with a third party that is\nin the business of distributing software, under which you make payment\nto the third party based on the extent of your activity of conveying\nthe work, and under which the third party grants, to any of the\nparties who would receive the covered work from you, a discriminatory\npatent license (a) in connection with copies of the covered work\nconveyed by you (or copies made from those copies), or (b) primarily\nfor and in connection with specific products or compilations that\ncontain the covered work, unless you entered into that arrangement,\nor that patent license was granted, prior to 28 March 2007.\n\n  Nothing in this License shall be construed as excluding or limiting\nany implied license or other defenses to infringement that may\notherwise be available to you under applicable patent law.\n\n  12. No Surrender of Others' Freedom.\n\n  If conditions are imposed on you (whether by court order, agreement or\notherwise) that contradict the conditions of this License, they do not\nexcuse you from the conditions of this License.  If you cannot convey a\ncovered work so as to satisfy simultaneously your obligations under this\nLicense and any other pertinent obligations, then as a consequence you may\nnot convey it at all.  For example, if you agree to terms that obligate you\nto collect a royalty for further conveying from those to whom you convey\nthe Program, the only way you could satisfy both those terms and this\nLicense would be to refrain entirely from conveying the Program.\n\n  13. Use with the GNU Affero General Public License.\n\n  Notwithstanding any other provision of this License, you have\npermission to link or combine any covered work with a work licensed\nunder version 3 of the GNU Affero General Public License into a single\ncombined work, and to convey the resulting work.  The terms of this\nLicense will continue to apply to the part which is the covered work,\nbut the special requirements of the GNU Affero General Public License,\nsection 13, concerning interaction through a network will apply to the\ncombination as such.\n\n  14. Revised Versions of this License.\n\n  The Free Software Foundation may publish revised and/or new versions of\nthe GNU General Public License from time to time.  Such new versions will\nbe similar in spirit to the present version, but may differ in detail to\naddress new problems or concerns.\n\n  Each version is given a distinguishing version number.  If the\nProgram specifies that a certain numbered version of the GNU General\nPublic License \"or any later version\" applies to it, you have the\noption of following the terms and conditions either of that numbered\nversion or of any later version published by the Free Software\nFoundation.  If the Program does not specify a version number of the\nGNU General Public License, you may choose any version ever published\nby the Free Software Foundation.\n\n  If the Program specifies that a proxy can decide which future\nversions of the GNU General Public License can be used, that proxy's\npublic statement of acceptance of a version permanently authorizes you\nto choose that version for the Program.\n\n  Later license versions may give you additional or different\npermissions.  However, no additional obligations are imposed on any\nauthor or copyright holder as a result of your choosing to follow a\nlater version.\n\n  15. Disclaimer of Warranty.\n\n  THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY\nAPPLICABLE LAW.  EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT\nHOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM \"AS IS\" WITHOUT WARRANTY\nOF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO,\nTHE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR\nPURPOSE.  THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM\nIS WITH YOU.  SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF\nALL NECESSARY SERVICING, REPAIR OR CORRECTION.\n\n  16. Limitation of Liability.\n\n  IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING\nWILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS\nTHE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY\nGENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE\nUSE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF\nDATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD\nPARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS),\nEVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF\nSUCH DAMAGES.\n\n  17. Interpretation of Sections 15 and 16.\n\n  If the disclaimer of warranty and limitation of liability provided\nabove cannot be given local legal effect according to their terms,\nreviewing courts shall apply local law that most closely approximates\nan absolute waiver of all civil liability in connection with the\nProgram, unless a warranty or assumption of liability accompanies a\ncopy of the Program in return for a fee.\n\n                     END OF TERMS AND CONDITIONS\n\n            How to Apply These Terms to Your New Programs\n\n  If you develop a new program, and you want it to be of the greatest\npossible use to the public, the best way to achieve this is to make it\nfree software which everyone can redistribute and change under these terms.\n\n  To do so, attach the following notices to the program.  It is safest\nto attach them to the start of each source file to most effectively\nstate the exclusion of warranty; and each file should have at least\nthe \"copyright\" line and a pointer to where the full notice is found.\n\n    {one line to give the program's name and a brief idea of what it does.}\n    Copyright (C) {year}  {name of author}\n\n    This program is free software: you can redistribute it and/or modify\n    it under the terms of the GNU General Public License as published by\n    the Free Software Foundation, either version 3 of the License, or\n    (at your option) any later version.\n\n    This program is distributed in the hope that it will be useful,\n    but WITHOUT ANY WARRANTY; without even the implied warranty of\n    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n    GNU General Public License for more details.\n\n    You should have received a copy of the GNU General Public License\n    along with this program.  If not, see <http://www.gnu.org/licenses/>.\n\nAlso add information on how to contact you by electronic and paper mail.\n\n  If the program does terminal interaction, make it output a short\nnotice like this when it starts in an interactive mode:\n\n    {project}  Copyright (C) {year}  {fullname}\n    This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'.\n    This is free software, and you are welcome to redistribute it\n    under certain conditions; type `show c' for details.\n\nThe hypothetical commands `show w' and `show c' should show the appropriate\nparts of the General Public License.  Of course, your program's commands\nmight be different; for a GUI interface, you would use an \"about box\".\n\n  You should also get your employer (if you work as a programmer) or school,\nif any, to sign a \"copyright disclaimer\" for the program, if necessary.\nFor more information on this, and how to apply and follow the GNU GPL, see\n<http://www.gnu.org/licenses/>.\n\n  The GNU General Public License does not permit incorporating your program\ninto proprietary programs.  If your program is a subroutine library, you\nmay consider it more useful to permit linking proprietary applications with\nthe library.  If this is what you want to do, use the GNU Lesser General\nPublic License instead of this License.  But first, please read\n<http://www.gnu.org/philosophy/why-not-lgpl.html>.\n\n"
  },
  {
    "path": "Pipfile",
    "content": "[[source]]\nurl = \"https://pypi.python.org/simple\"\nverify_ssl = true\nname = \"pypi\"\n\n[packages]\ndjango = \"<2.1,>=2.0\"\npillow = \"*\"\ncoveralls = \"*\"\ndateparser = \"*\"\ndjango-cors-headers = \"*\"\ndjango-crispy-forms = \"*\"\ndjango-extensions = \"*\"\ndjango-filter = \"*\"\ndjangorestframework = \"*\"\nfactory-boy = \"*\"\nfilemagic = \"*\"\nfuzzywuzzy = {extras = [\"speedup\"],version = \"==0.15.0\"}\ngunicorn = \"*\"\ninotify-simple = \"*\"\nlangdetect = \"*\"\npdftotext = \"*\"\npyocr = \"*\"\npython-dateutil = \"*\"\npython-dotenv = \"*\"\npython-gnupg = \"*\"\npytz = \"*\"\nsphinx = \"*\"\ntox = \"*\"\npycodestyle = \"*\"\npytest = \"*\"\npytest-cov = \"*\"\npytest-django = \"*\"\npytest-sugar = \"*\"\npytest-env = \"*\"\npytest-xdist = \"*\"\npsycopg2 = \"*\"\ndjangoql = \"*\"\nwhitenoise = \"*\"\nbrotli = \"*\"\n\n[dev-packages]\nipython = \"*\"\n"
  },
  {
    "path": "README-de.md",
    "content": "[ [en](README.md) | de | [el](README-el.md) ]\n\n![Paperless](https://raw.githubusercontent.com/the-paperless-project/paperless/master/src/paperless/static/paperless/img/logo-dark.png)\n\n[![Dokumentation](https://readthedocs.org/projects/paperless/badge/?version=latest)](https://paperless.readthedocs.org/) [![Chat](https://badges.gitter.im/the-paperless-project/paperless.svg)](https://gitter.im/danielquinn/paperless) [![Travis](https://travis-ci.org/the-paperless-project/paperless.svg?branch=master)](https://travis-ci.org/the-paperless-project/paperless) [![Coverage Status](https://coveralls.io/repos/github/the-paperless-project/paperless/badge.svg?branch=master)](https://coveralls.io/github/the-paperless-project/paperless?branch=master) [![Danke](https://img.shields.io/badge/THANKS-md-ff69b4.svg)](https://github.com/the-paperless-project/paperless/blob/master/THANKS.md)\n\nIndexiere und archiviere alle deine eingescannten Papierdokumente\n\nIch hasse Papier. Abgesehen von Umweltproblemen, ist es der Albtraum einer technisch-interessierten Person:\n\n* Es gibt keine Suchfunktion\n* Es braucht physischen Platz\n* Sicherungen bedeuten mehr Papier\n\nIn den vergangenen Monaten hatte ich mehrmals das Problem, das richtige Dokument nicht zur Hand zu haben. Manchmal warf ich Dokumente weg, die ich noch gebraucht hätte (wer behält schon Wasserrechnungen für zwei Jahre?), andere verlor ich einfach... weil PAPIER. Ich schrieb dies, um mein Leben einfacher zu machen.\n\n\n\n## Wie es funktioniert\n\nPaperless steuert nicht deinen Scanner, es hilft nur damit umzugehen, was der Scanner herausspuckt\n\n1. Kaufe einen Dokumentenscanner, der an einen Ort in deinem Netzwerk schreiben kann. Wenn du Inspirationen brauchst, schau in die [Scannerempfehlungen](https://paperless.readthedocs.io/en/latest/scanners.html).\n2. Stelle \"Scanne zu FTP\" oder ähnliches ein. Es sollte möglich sein, eingescannte Bilder ohne etwas tun zu müssen an einen Server hochzuladen. Natürlich kannst du auch die einscannte Datei händisch hochladen, wenn der Scanner automatisches Hochladen nicht unterstützt. Paperless ist es egal, wie die Dokumente in seinen lokalen Konsumordner gelangen.\n3. Besitze einen Zielserver, lasse das Paperless-Konsumskript laufen, um die Datei mit OCR zu versehen und sie in einer lokalen Datenbank zu indexieren.\n4. Benutze die Weboberfläche, um die Datenbank zu durchforsten und zu finden, was du suchst.\n5. Lade die PDF-Datei, die du brauchst/möchtest über die Weboberfläche herunter und mach was auch immer du willst damit.  Du kannst es auch drucken und versenden, so als wäre es das Original. In den meisten Fällen wird das niemanden interessieren oder bemerken.\n\nHier das, was du bekommt:\n\n![Vorher und Nachher](https://raw.githubusercontent.com/the-paperless-project/paperless/master/docs/_static/screenshot.png)\n\n\n## Dokumentation\n\nDiese ist komplett verfügbar auf [ReadTheDocs](https://paperless.readthedocs.org/).\n\n\n## Anforderungen\n\nDies alles ist eine wirklich ziemlich einfache, glänzende und benutzerfreundliche Hülle rund um einige sehr mächtige Werkzeuge.\n\n* [ImageMagick](http://imagemagick.org/) wandelt Bilder zwischen Farbe und Graustufen um.\n* [Tesseract](https://github.com/tesseract-ocr) erledigt die Buchstabenerkennung.\n* [Unpaper](https://github.com/unpaper/unpaper) bereinigt und begradigt das eingescannte Bild.\n* [GNU Privacy Guard](https://gnupg.org/) wird als Verschlüsselungsbackend genutzt.\n* [Python 3](https://python.org/) ist die Sprache des Projekts.\n  * [Pillow](https://pypi.python.org/pypi/pillowfight/) lädt die Bilddaten als Python-Objekt, um sie mit PyOCR zu verwenden.\n  * [PyOCR](https://github.com/jflesch/pyocr) ist ein glatter, programmatischer Wrapper um Tesseract.\n  * [Django](https://www.djangoproject.com/) ist das Framework, auf das dieses Projekt aufbaut.\n  * [Python-GNUPG](http://pythonhosted.org/python-gnupg/) entschlüsselt die PDFs auf Abruf, um das Herunterladen unverschlüsselter Dateien zu ermöglichen, während die verschlüsselten Dateien auf der Festplatte bleiben.\n\n\n## Status des Projekts\n\nDieses Projekt wurde um 2015 gestartet und es gibt viele Leute, die es verwenden. Warum auch immer ist es ziemlich beliebt in Deutschland -- vielleicht kann jemand dort drüben mich über das Warum aufklären.\n\nIch entwickle keine neuen Funktionen mehr für Paperless, weil es genau das tut, was ich brauche und meine Aufmerksamkeit meinem neuesten Projekt [Aletheia](https://github.com/danielquinn/aletheia) gewidmet ist. Ich verlasse jedoch nicht das Projekt. Ich bin glücklich damit, Pull Requests zu begutachten und Fragen im Issue-Bereich zu beantworten. Wenn du ein Entwickler bist und eine neue Funktion willst, reihe sie in den Issues ein und/oder sende einen PR! Ich bin glücklich damit, neue Sachen hinzuzufügen, habe aber einfach nicht die Zeit, sie selbst zu erarbeiten.\n\n\n## Verknüpfte Projekte\n\nPaperless gibt es bereits seit einer Weile und Leute haben damit angefangen, Sachen rund um Paperless zu entwickeln. Wenn du einer dieser Menschen bist, kannst du dein Projekt zu dieser Liste hinzufügen:\n\n* [Paperless App](https://github.com/bauerj/paperless_app): Eine Android/iOS-App für Paperless.\n* [Paperless Desktop](https://github.com/thomasbrueggemann/paperless-desktop): Eine Desktop-Oberfläche für deine Paperless-Installation. Läuft auf Mac, Linux und Windows.\n* [ansible-role-paperless](https://github.com/ovv/ansible-role-paperless): Eine einfache Möglichkeit, Paperless via Ansible laufen zu lassen.\n* [paperless-cli](https://github.com/stgarf/paperless-cli): Ein golang Kommandozeilenprogramm, welches mit Paperless interagiert.\n\n\n## Ähnliche Projekte\n\nEs gibt da draußen auch das Projekt [Mayan EDMS](https://mayan.readthedocs.org/en/latest/), welches überraschenderweise sehr große überschneidende Techniken hat wie Paperless. Mayan EDMS ist *viel* funktionsreicher und kommt ebenso mit einer glatten UI, aber kommt noch mit Python2; basiert jedoch auch auf Django und verwendet ein Konsummodell mit Tesseract und Unpaper. Es kann sein, dass Paperless weniger Ressourcen verbraucht, aber um ehrlich zu sein, hab ich das noch nicht selbst getestet. Eine Sache jedoch ist klar, *Paperless* ist ein **viel** besserer Name.\n\n\n## Wichtiger Hinweis\n\nDokumentenscanner werden typischerweise verwendet, um sensible Dokumente zu scannen. Dinge wie die Sozialversicherungsnummer, Steueraufzeichnungen, Rechnungen, etc. Während Paperless die Originaldateien über das Konsumskript verschlüsselt, sind die OCR-Texte *nicht* verschlüsselt und demnach in Klartext gespeichert (es muss durchsuchbar sein, also wenn jemand eine Idee hat, wie man das mit verschlüsselten Daten tun kann: Ich bin ganz Ohr). Das bedeutet, dass Paperless niemals auf einem nicht vertrauten Host laufen sollte. Stattdessen empfehle ich, wenn du es verwenden willst, es lokal auf einem Server in deinem Zuhause laufen zu lassen.\n\n\n## Spenden\n\nWie mit aller Freier Software, liegt die Macht weniger in den Finanzen als mehr in den gemeinsamen Bemühungen. Ich schätze wirklich jeden Pull Request und Bugreport, der von Benutzern von Paperless getätigt wird, also bitte macht damit weiter. Wenn du jedoch nicht einer für Programmieren/Design/Dokumentation bist und mich wirklich finanziell unterstützen willst, sage ich nicht nein dazu ;-)\n\nDas Ding ist, mir geht es finanziell OK, also würde ich dich darum bitten, an den [Hochkommissar der Vereinten Nationen für Flüchtlinge](https://donate.unhcr.org/int-en/general) zu spenden. Diese machen wichtige Arbeit und brauchen das Geld viel dringender als ich.\n"
  },
  {
    "path": "README-el.md",
    "content": "[ [en](README.md) | [de](README-de.md) | el ]\n\n![Paperless](https://raw.githubusercontent.com/the-paperless-project/paperless/master/src/paperless/static/paperless/img/logo-dark.png)\n\n[![Documentation](https://readthedocs.org/projects/paperless/badge/?version=latest)](https://paperless.readthedocs.org/) [![Chat](https://badges.gitter.im/the-paperless-project/paperless.svg)](https://gitter.im/danielquinn/paperless) [![Travis](https://travis-ci.org/the-paperless-project/paperless.svg?branch=master)](https://travis-ci.org/the-paperless-project/paperless) [![Coverage Status](https://coveralls.io/repos/github/the-paperless-project/paperless/badge.svg?branch=master)](https://coveralls.io/github/the-paperless-project/paperless?branch=master) [![Thanks](https://img.shields.io/badge/THANKS-md-ff69b4.svg)](https://github.com/the-paperless-project/paperless/blob/master/THANKS.md)\n\nΕυρετήριο και αρχείο για όλα σας τα σκαναρισμένα έγγραφα\n\nΜισώ το χαρτί. Πέρα από τα περιβαλλοντικά ζητήματα, είναι ο εφιάλτης ενός τεχνικού.\n\n* Δεν υπάρχει η δυνατότητα της αναζήτησης\n* Πιάνουν πολύ χώρο\n* Τα αντίγραφα ασφαλείας σημάινουν περισσότερο χαρτί\n\nΤους τελευταίους μήνες μου έχει τύχει αρκετές φορές να μην μπορώ να βρω το σωστό έγγραφο. Κάποιες φορές ανακύκλωνα το έγγραφο που χρειαζόμουν (ποιος κρατάει τους λογαριασμούς του νερού για 2 χρόνια;;;) και κάποιες φορές απλά το έχανα ... επειδή έτσι είναι τα χαρτιά. Το έκανα αυτό για να κάνω την ζωή μου πιο εύκολη\n\n\n## Πως δουλεύει\n\nΗ εφαρμογή Paperless δεν ελέγχει το scanner σας, αλλά σας βοηθάει με τα αποτελέσματα του scanner σας.\n\n1. Αγοράστε ένα scanner με πρόσβαση στο δίκτυο σας.  Αν χρειάζεστε έμπνευση, δείτε την σελίδα με τα [προτεινόμενα scanner](https://paperless.readthedocs.io/en/latest/scanners.html).\n2. Κάντε την ρύθμιση \"scan to FTP\" ή κάτι παρόμοιο. Θα μπορεί να αποθηκεύει τις σκαναρισμένες εικόνες σε έναν server χωρίς να χρειάζεται να κάνετε κάτι. Φυσικά άμα το scanner σας δεν μπορεί να αποθηκεύσει κάπου τις εικόνες σας αυτόματα μπορείτε να το κάνετε χειροκίνητα. Το Paperless δεν ενδιαφέρεται πως καταλήγουν κάπου τα αρχεία.\n3. Να έχετε τον server που τρέχει το OCR script του Paperless να έχει ευρετήριο στην τοπική βάση δεδομένων.\n4. Χρησιμοποιήστε το web frontend για να επιλέξετε βάση δεδομένων και να βρείτε αυτό που θέλετε.\n5. Κατεβάστε το PDF που θέλετε/χρειάζεστε μέσω του web interface και κάντε ότι θέλετε με αυτό. Μπορείτε ακόμη να το εκτυπώσετε και να το στείλετε, σαν να ήταν το αρχικό. Στις περισσότερες περιπτώσεις κανείς δεν θα το προσέξει ή θα νοιαστεί.\n\nΑυτό είναι που θα πάρετε:\n\n![Το πριν και το μετά](https://raw.githubusercontent.com/the-paperless-project/paperless/master/docs/_static/screenshot.png)\n\n\n## Documentation\n\nΕίναι όλα διαθέσιμα εδώ [ReadTheDocs](https://paperless.readthedocs.org/).\n\n\n## Απαιτήσεις\n\nΌλα αυτά είναι πολύ απλά, και φιλικά προς τον χρήστη, μια συλλογή με πολύτιμα εργαλεία.\n\n* [ImageMagick](http://imagemagick.org/) μετατρέπει τις εικόνες σε έγχρωμες και ασπρόμαυρες.\n* [Tesseract](https://github.com/tesseract-ocr) κάνει την αναγνώρηση των χαρακτήρων.\n* [Unpaper](https://github.com/unpaper/unpaper) despeckles and deskews the scanned image.\n* [GNU Privacy Guard](https://gnupg.org/) χρησιμοποιείται για κρυπτογράφηση στο backend.\n* [Python 3](https://python.org/) είναι η γλώσσα του project.\n  * [Pillow](https://pypi.python.org/pypi/pillowfight/) Φορτώνει την εικόνα σαν αντικείμενο στην python και μπορεί να χρησιμοποιηθεί με PyOCR\n  * [PyOCR](https://github.com/jflesch/pyocr) is a slick programmatic wrapper around tesseract.\n  * [Django](https://www.djangoproject.com/) το framework με το οποίο έγινε το project.\n  * [Python-GNUPG](http://pythonhosted.org/python-gnupg/) Αποκρυπτογραφεί τα PDF αρχεία στη στιγμή ώστε να κατεβάζετε αποκρυπτογραφημένα αρχεία, αφήνοντας τα κρυπτογραφημένα στον δίσκο.\n\n\n## Σταθερότητα\n\nΑυτό το project υπάρχει από το 2015 και υπάρχουν αρκετοί άνθρωποι που το χρησιμοποιούν, παρόλα αυτά βρίσκεται σε διαρκή ανάπτυξη (απλά δείτε πότε commit έχουν γίνει στο git history) οπότε μην περιμένετε να είναι 100% σταθερό. Μπορείτε να κάνετε backup την βάση δεδομένων sqlite3, τον φάκελο media και το configuration αρχείο σας ώστε να είστε ασφαλείς.\n\n\n## Affiliated Projects\n\nΤο Paperless υπάρχει εδώ και κάποιο καιρό και άνθρωποι έχουν αρχίσει να φτιάχνουν πράγματα γύρω από αυτό. Αν είσαι ένας από αυτούς τους ανθρώπους, μπορούμε να βάλουμε το project σου σε αυτήν την λίστα:\n\n* [Paperless App](https://github.com/bauerj/paperless_app): Μια εφαρμογή Android / iOS για Paperless.\n* [Paperless Desktop](https://github.com/thomasbrueggemann/paperless-desktop): Μια desktop εφαρμογή για εγκατάσταση του Paperless.  Τρέχει σε Mac, Linux, και Windows.\n* [ansible-role-paperless](https://github.com/ovv/ansible-role-paperless): Ένας εύκολο τρόπος για να τρέχει το Paperless μέσω Ansible.\n\n\n## Παρόμοια Projects\n\nΥπάρχει ένα άλλο ṕroject που λέγεται [Mayan EDMS](https://mayan.readthedocs.org/en/latest/) το οποίο έχει παρόμοια τεχνικά χαρακτηριστικά με το Paperless σε εντυπωσιακό βαθμό.  Επίσης βασισμένο στο Django και χρησιμοποιώντας το consumer model με Tesseract και Unpaper, Mayan EDMS έχει *πολλά* περισσότερα χαρακτηριστικά και έρχεται με ένα επιδέξιο UI, αλλά είναι ακόμα σε Python 2. Μπορεί να είναι ότι το Paperless καταναλώνει λιγότερους πόρους, αλλά για να είμαι ειλικρινής, αυτό είναι μια εικασία την οποία δεν έχω επιβεβαιώσει μόνος μου.  Ένα πράγμα είναι σίγουρο, το *Paperless* έχει **πολύ** καλύτερο όνομα.\n\n\n## Σημαντική Σημείωση\n\nΤα scanner για αρχεία συνήθως χρησιμοποιούνται για ευαίσθητα αρχεία. Πράγματα όπως το ΑΜΚΑ, φορολογικά αρχεία, τιμολόγια κτλπ. Παρόλο που το Paperless κρυπτογραφεί τα αρχικά αρχεία μέσω του consumption script, το κείμενο OCR *δεν είναι* κρυπτογραφημένο και για αυτό αποθηκεύεται (πρέπει να είναι αναζητήσιμο, οπότε αν κάποιος ξέρει να το κάνει αυτό με κρυπτογραφημένα δεδομένα είμαι όλος αυτιά). Αυτό σημάνει ότι το Paperless δεν πρέπει ποτέ να τρέχει σε μη αξιόπιστο πάροχο. Για αυτό συστήνω αν θέλετε να το τρέξετε να το τρέξετε σε έναν τοπικό server σπίτι σας.\n\n\n## Δωρεές\n\nΌπως με όλα τα δωρεάν λογισμικά, η δύναμη δεν βρίσκεται στα οικονομικά αλλά στην συλλογική προσπάθεια. Αλήθεια εκτιμώ κάθε pull request και bug report που προσφέρεται από τους χρήστες του Paperless, οπότε σας παρακαλώ συνεχίστε. Αν παρόλα αυτά, δεν μπορείτε να γράψετε κώδικα/να κάνέτε design/να γράψετε documentation, και θέλετε να συνεισφέρετε οικονομικά, δεν θα πω όχι ;-)\n\nΤο θέμα είναι ότι είμαι οικονομικά εντάξει, οπότε θα σας ζητήσω να δωρίσετε τα χρήματα σας εδώ [United Nations High Commissioner for Refugees](https://donate.unhcr.org/int-en/general). Κάνουν σημαντική δουλειά και χρειάζονται τα χρήματα πολύ περισσότερο από ότι εγώ.\n"
  },
  {
    "path": "README.md",
    "content": "[ en | [de](README-de.md) | [el](README-el.md) ]\n\n![Paperless](https://raw.githubusercontent.com/the-paperless-project/paperless/master/src/paperless/static/paperless/img/logo-dark.png)\n\n> ## Important news about the future of this project\n> \n> It's been more than 5 years since I started this project on a whim as an effort to try to get a handle on the massive amount of paper I was dealing with in relation to various visa applications (expat life is complicated!)  Since then, the project has *exploded* in popularity, so much so that it overwhelmed me and working on it stopped being \"fun\" and started becoming a serious source of stress.\n> \n> In an effort to fix this, I created the Paperless GitHub [organisation](https://github.com/the-paperless-project), and brought on a few people to manage the issue and pull request load.  Unfortunately, that model has proven to be unworkable too.  With 23 pull requests waiting and 157 issues slowly filling up with confused/annoyed people wanting to get their contributions in, my whole \"appoint a few strangers and hope they've got time\" idea is showing my lack of foresight and organisational skill.\n> \n> In the shadow of these difficulties, a fork called [Paperless-ng](https://github.com/jonaswinkler/paperless-ng) written by [Jonas Winkler](https://github.com/jonaswinkler) has cropped up.  It's *really* good, and unlike this project, it's actively maintained (at the time of this writing anyway).  With 564 forks currently tracked by GitHub, I suspect there are a few more forks worth looking into out there as well.\n> \n> So, with all of the above in mind, I've decided to archive this project as read-only and suggest that those interested in new updates or submitting patches have a look at Paperless-ng.  If you really like \"Old Paperless\", that's ok too!  The project is [GPL licensed](https://github.com/the-paperless-project/paperless/blob/master/LICENSE), so you can fork it and run it on whatever you like so long as you respect the terms of said license.\n>\n> In time, I may transfer ownership of this organisation to Jonas if he's interested in taking that on, but for the moment, he's happy to run Paperless-ng out of its [current repo](https://github.com/jonaswinkler/paperless-ng).  Regardless, if we do decide to make the transfer, I'll post a notification here a few months in advance so that people won't be surprised by new code at this location.\n> \n> For my part, I'm really happy & proud to have been part of this project, and I'm sorry I've been unable to commit more time to it for everyone.  I hope you all understand, and I'm really pleased that this work has been able to continue to live and be useful in a new project.  Thank you to everyone who contributed, and for making Free software awesome.\n> \n> Sincerely,\n> [Daniel Quinn](https://github.com/danielquinn)\n\n\n[![Documentation](https://readthedocs.org/projects/paperless/badge/?version=latest)](https://paperless.readthedocs.org/)\n[![Chat](https://badges.gitter.im/the-paperless-project/paperless.svg)](https://gitter.im/danielquinn/paperless)\n[![Travis](https://travis-ci.org/the-paperless-project/paperless.svg?branch=master)](https://travis-ci.org/the-paperless-project/paperless)\n[![Coverage Status](https://coveralls.io/repos/github/the-paperless-project/paperless/badge.svg?branch=master)](https://coveralls.io/github/the-paperless-project/paperless?branch=master)\n[![StackShare](https://img.shields.io/badge/tech-stack-0690fa.svg?style=flat)](https://stackshare.io/the-paperless-project/the-paperless-project)\n[![Thanks](https://img.shields.io/badge/THANKS-md-ff69b4.svg)](https://github.com/the-paperless-project/paperless/blob/master/THANKS.md)\n\nIndex and archive all of your scanned paper documents\n\nI hate paper.  Environmental issues aside, it's a tech person's nightmare:\n\n* There's no search feature\n* It takes up physical space\n* Backups mean more paper\n\nIn the past few months I've been bitten more than a few times by the problem of not having the right document around.  Sometimes I recycled a document I needed (who keeps water bills for two years?) and other times I just lost it... because paper.  I wrote this to make my life easier.\n\n\n## How it Works\n\nPaperless does not control your scanner, it only helps you deal with what your scanner produces\n\n1. Buy a document scanner that can write to a place on your network.  If you need some inspiration, have a look at the [scanner recommendations](https://paperless.readthedocs.io/en/latest/scanners.html) page.\n2. Set it up to \"scan to FTP\" or something similar. It should be able to push scanned images to a server without you having to do anything.  Of course if your scanner doesn't know how to automatically upload the file somewhere, you can always do that manually.  Paperless doesn't care how the documents get into its local consumption directory.\n3. Have the target server run the Paperless consumption script to OCR the file and index it into a local database.\n4. Use the web frontend to sift through the database and find what you want.\n5. Download the PDF you need/want via the web interface and do whatever you like with it.  You can even print it and send it as if it's the original. In most cases, no one will care or notice.\n\nHere's what you get:\n\n![The before and after](https://raw.githubusercontent.com/the-paperless-project/paperless/master/docs/_static/screenshot.png)\n\n\n## Documentation\n\nIt's all available on [ReadTheDocs](https://paperless.readthedocs.io/).\n\n\n## Requirements\n\nThis is all really a quite simple, shiny, user-friendly wrapper around some very powerful tools.\n\n* [ImageMagick](http://imagemagick.org/) converts the images between colour and greyscale.\n* [Tesseract](https://github.com/tesseract-ocr) does the character recognition.\n* [Unpaper](https://github.com/unpaper/unpaper) despeckles and deskews the scanned image.\n* [GNU Privacy Guard](https://gnupg.org/) is used as the encryption backend.\n* [Python 3](https://python.org/) is the language of the project.\n  * [Pillow](https://pypi.python.org/pypi/pillowfight/) loads the image data as a python object to be used with PyOCR.\n  * [PyOCR](https://github.com/jflesch/pyocr) is a slick programmatic wrapper around tesseract.\n  * [Django](https://www.djangoproject.com/) is the framework this project is written against.\n  * [Python-GNUPG](http://pythonhosted.org/python-gnupg/) decrypts the PDFs on-the-fly to allow you to download unencrypted files, leaving the encrypted ones on-disk.\n\n\n## Project Status\n\nThis project has been around since 2015, and there's lots of people using it.  For some reason, it's really popular in Germany -- maybe someone over there can clue me in as to why?\n\nI am no longer doing new development on Paperless as it does exactly what I need it to and have since turned my attention to my latest project, [Aletheia](https://github.com/danielquinn/aletheia).  However, I'm not abandoning this project.  I am happy to field pull requests and answer questions in the issue queue.  If you're a developer yourself and want a new feature, float it in the issue queue and/or send me a pull request!  I'm happy to add new stuff, but I just don't have the time to do that work myself.\n\n\n## Affiliated Projects\n\nPaperless has been around a while now, and people are starting to build stuff on top of it.  If you're one of those people, we can add your project to this list:\n\n* [Paperless App](https://github.com/bauerj/paperless_app): An Android/iOS app for Paperless.\n* [Paperless Desktop](https://github.com/thomasbrueggemann/paperless-desktop): A desktop UI for your Paperless installation.  Runs on Mac, Linux, and Windows.\n* [ansible-role-paperless](https://github.com/ovv/ansible-role-paperless): An easy way to get Paperless running via Ansible.\n* [paperless-cli](https://github.com/stgarf/paperless-cli): A golang command line binary to interact with a Paperless instance.\n\n## Similar Projects\n\nThere's another project out there called [Mayan EDMS](https://www.mayan-edms.com/) that has a surprising amount of technical overlap with Paperless.  Also based on Django and using a consumer model with Tesseract and Unpaper, Mayan EDMS is *much* more featureful and comes with a slick UI as well, but still in Python 2. It may be that Paperless consumes fewer resources, but to be honest, this is just a guess as I haven't tested this myself.  One thing's for certain though, *Paperless* is a **way** better name.\n\n\n## Important Note\n\nDocument scanners are typically used to scan sensitive documents.  Things like your social insurance number, tax records, invoices, etc.  While Paperless encrypts the original files via the consumption script, the OCR'd text is *not* encrypted and is therefore stored in the clear (it needs to be searchable, so if someone has ideas on how to do that on encrypted data, I'm all ears).  This means that Paperless should never be run on an untrusted host.  Instead, I recommend that if you do want to use it, run it locally on a server in your own home.\n\n\n## Donations\n\nAs with all Free software, the power is less in the finances and more in the collective efforts.  I really appreciate every pull request and bug report offered up by Paperless' users, so please keep that stuff coming.  If however, you're not one for coding/design/documentation, and would like to contribute financially, I won't say no ;-)\n\nThe thing is, I'm doing ok for money, so I would instead ask you to donate to the [United Nations High Commissioner for Refugees](https://donate.unhcr.org/int-en/general). They're doing important work and they need the money a lot more than I do.\n"
  },
  {
    "path": "THANKS.md",
    "content": "# Thanks for using Paperless!\n\nWorking on this project has been exhausting, but rewarding at the same time.\nIt's just wonderful that so many people are using this thing, and in so many\ncrazy ways.\n\nThis file is here for everyone to post their own stories about how you use this\ncode.  It helps me to understand who's using it and why, and maybe to give\nothers an idea of how it might be used.  It's based on a Twitter exchange\nbetween [John Glanville](https://twitter.com/hexapodium) and\n[Julia Evans](https://github.com/jvns) and later better defined [here](https://github.com/paulmolluzzo/thanks-md). \n\nTo contribute, simply issue a pull request that appends to this file something\nlike this:\n\n```\n### Your Name\nSome friendly message\n```\n"
  },
  {
    "path": "ci/deploy-docker",
    "content": "#!/bin/bash\n\nif [ \"${DOCKER_USERNAME}\" == \"\" -o \"${DOCKER_PASSWORD}\" == \"\" ]\nthen\n    exit 0\nfi\n\ndocker login --username=${DOCKER_USERNAME} --password=${DOCKER_PASSWORD}\nif [ \"${TRAVIS_TAG}\" != \"\" ]\nthen\n    docker tag the-paperless-project/paperless the-paperless-project/paperless:${TRAVIS_TAG}\n    docker push the-paperless-project/paperless:${TRAVIS_TAG}\nelse\n    docker push the-paperless-project/paperless\nfi\n"
  },
  {
    "path": "data/.keep",
    "content": ""
  },
  {
    "path": "docker-compose.env.example",
    "content": "# Environment variables to set for Paperless\n# Commented out variables will be replaced with a default within Paperless.\n#\n# In addition to what you see here, you can also define any values you find in\n# paperless.conf.example here.  Values like:\n#\n# * PAPERLESS_PASSPHRASE\n# * PAPERLESS_CONSUMPTION_DIR\n# * PAPERLESS_CONSUME_MAIL_HOST\n#\n# ...are all explained in that file but can be defined here, since the Docker\n# installation doesn't make use of paperless.conf.\n#\n# NOTE: values in paperless.conf should be wrapped in double quotes, but not in this file\n# Example:\n# paperless.conf: PAPERLESS_FORGIVING_OCR=\"true\"\n# docker-compose.env (this file): PAPERLESS_FORGIVING_OCR=true\n\n# Use this variable to set a timezone for the Paperless Docker containers. If not specified, defaults to UTC.\n# TZ=America/Los_Angeles\n\n# Additional languages to install for text recognition.  Note that this is\n# different from PAPERLESS_OCR_LANGUAGE (default=eng), which defines the\n# default language used when guessing the language from the OCR output.\n# PAPERLESS_OCR_LANGUAGES=deu ita\n\n# Set Paperless to use SSL for the web interface.\n# Enabling this will require ssl.key and ssl.cert files in paperless' data directory.\n# PAPERLESS_USE_SSL=false\n\n# You can change the default user and group id to a custom one\n# USERMAP_UID=1000\n# USERMAP_GID=1000\n"
  },
  {
    "path": "docker-compose.yml.example",
    "content": "version: '2.1'\n\nservices:\n    webserver:\n        build: ./\n        # uncomment the following line to start automatically on system boot\n        # restart: always\n        ports:\n            # You can adapt the port you want Paperless to listen on by\n            # modifying the part before the `:`.\n            - \"8000:8000\"\n        healthcheck:\n            test: [\"CMD\", \"curl\" , \"-f\", \"http://localhost:8000\"]\n            interval: 30s\n            timeout: 10s\n            retries: 5\n        volumes:\n            - data:/usr/src/paperless/data\n            - media:/usr/src/paperless/media\n            # You have to adapt the local path you want the consumption\n            # directory to mount to by modifying the part before the ':'.\n            - ./consume:/consume\n        env_file: docker-compose.env\n        # The reason the line is here is so that the webserver that doesn't do\n        # any text recognition and doesn't have to install unnecessary\n        # languages the user might have set in the env-file by overwriting the\n        # value with nothing.\n        environment:\n            - PAPERLESS_OCR_LANGUAGES=\n        command: [\"gunicorn\", \"-b\", \"0.0.0.0:8000\"]\n\n    consumer:\n        build: ./\n        # uncomment the following line to start automatically on system boot\n        # restart: always\n        depends_on:\n            webserver:\n                condition: service_healthy\n        volumes:\n            - data:/usr/src/paperless/data\n            - media:/usr/src/paperless/media\n            # This should be set to the same value as the consume directory\n            # in the webserver service above.\n            - ./consume:/consume\n            # Likewise, you can add a local path to mount a directory for\n            # exporting. This is not strictly needed for paperless to\n            # function, only if you're exporting your files: uncomment\n            # it and fill in a local path if you know you're going to\n            # want to export your documents.\n            # - /path/to/another/arbitrary/place:/export\n        env_file: docker-compose.env\n        command: [\"document_consumer\"]\n\nvolumes:\n    data:\n    media:\n"
  },
  {
    "path": "docs/Dockerfile",
    "content": "FROM python:3.5.1\nMAINTAINER Pit Kleyersburg <pitkley@googlemail.com>\n\n# Install Sphinx and Pygments\nRUN pip install Sphinx Pygments\n\n# Setup directories, copy data\nRUN mkdir /build\nCOPY . /build\nWORKDIR /build/docs\n\n# Build documentation\nRUN make html\n\n# Start webserver\nWORKDIR /build/docs/_build/html\nEXPOSE 8000/tcp\nCMD [\"python3\", \"-m\", \"http.server\"]\n"
  },
  {
    "path": "docs/Makefile",
    "content": "# Makefile for Sphinx documentation\n#\n\n# You can set these variables from the command line.\nSPHINXOPTS    =\nSPHINXBUILD   = sphinx-build\nPAPER         =\nBUILDDIR      = _build\n\n# User-friendly check for sphinx-build\nifeq ($(shell which $(SPHINXBUILD) >/dev/null 2>&1; echo $$?), 1)\n$(error The '$(SPHINXBUILD)' command was not found. Make sure you have Sphinx installed, then set the SPHINXBUILD environment variable to point to the full path of the '$(SPHINXBUILD)' executable. Alternatively you can add the directory with the executable to your PATH. If you don't have Sphinx installed, grab it from http://sphinx-doc.org/)\nendif\n\n# Internal variables.\nPAPEROPT_a4     = -D latex_paper_size=a4\nPAPEROPT_letter = -D latex_paper_size=letter\nALLSPHINXOPTS   = -d $(BUILDDIR)/doctrees $(PAPEROPT_$(PAPER)) $(SPHINXOPTS) .\n# the i18n builder cannot share the environment and doctrees with the others\nI18NSPHINXOPTS  = $(PAPEROPT_$(PAPER)) $(SPHINXOPTS) .\n\n.PHONY: help clean html dirhtml singlehtml pickle json htmlhelp qthelp devhelp epub latex latexpdf text man changes linkcheck doctest gettext\n\nhelp:\n\t@echo \"Please use \\`make <target>' where <target> is one of\"\n\t@echo \"  html       to make standalone HTML files\"\n\t@echo \"  dirhtml    to make HTML files named index.html in directories\"\n\t@echo \"  singlehtml to make a single large HTML file\"\n\t@echo \"  pickle     to make pickle files\"\n\t@echo \"  json       to make JSON files\"\n\t@echo \"  htmlhelp   to make HTML files and a HTML help project\"\n\t@echo \"  qthelp     to make HTML files and a qthelp project\"\n\t@echo \"  devhelp    to make HTML files and a Devhelp project\"\n\t@echo \"  epub       to make an epub\"\n\t@echo \"  latex      to make LaTeX files, you can set PAPER=a4 or PAPER=letter\"\n\t@echo \"  latexpdf   to make LaTeX files and run them through pdflatex\"\n\t@echo \"  latexpdfja to make LaTeX files and run them through platex/dvipdfmx\"\n\t@echo \"  text       to make text files\"\n\t@echo \"  man        to make manual pages\"\n\t@echo \"  texinfo    to make Texinfo files\"\n\t@echo \"  info       to make Texinfo files and run them through makeinfo\"\n\t@echo \"  gettext    to make PO message catalogs\"\n\t@echo \"  changes    to make an overview of all changed/added/deprecated items\"\n\t@echo \"  xml        to make Docutils-native XML files\"\n\t@echo \"  pseudoxml  to make pseudoxml-XML files for display purposes\"\n\t@echo \"  linkcheck  to check all external links for integrity\"\n\t@echo \"  doctest    to run all doctests embedded in the documentation (if enabled)\"\n\nclean:\n\trm -rf $(BUILDDIR)/*\n\nhtml:\n\t$(SPHINXBUILD) -b html $(ALLSPHINXOPTS) $(BUILDDIR)/html\n\t@echo\n\t@echo \"Build finished. The HTML pages are in $(BUILDDIR)/html.\"\n\ndirhtml:\n\t$(SPHINXBUILD) -b dirhtml $(ALLSPHINXOPTS) $(BUILDDIR)/dirhtml\n\t@echo\n\t@echo \"Build finished. The HTML pages are in $(BUILDDIR)/dirhtml.\"\n\nsinglehtml:\n\t$(SPHINXBUILD) -b singlehtml $(ALLSPHINXOPTS) $(BUILDDIR)/singlehtml\n\t@echo\n\t@echo \"Build finished. The HTML page is in $(BUILDDIR)/singlehtml.\"\n\npickle:\n\t$(SPHINXBUILD) -b pickle $(ALLSPHINXOPTS) $(BUILDDIR)/pickle\n\t@echo\n\t@echo \"Build finished; now you can process the pickle files.\"\n\njson:\n\t$(SPHINXBUILD) -b json $(ALLSPHINXOPTS) $(BUILDDIR)/json\n\t@echo\n\t@echo \"Build finished; now you can process the JSON files.\"\n\nhtmlhelp:\n\t$(SPHINXBUILD) -b htmlhelp $(ALLSPHINXOPTS) $(BUILDDIR)/htmlhelp\n\t@echo\n\t@echo \"Build finished; now you can run HTML Help Workshop with the\" \\\n\t      \".hhp project file in $(BUILDDIR)/htmlhelp.\"\n\nqthelp:\n\t$(SPHINXBUILD) -b qthelp $(ALLSPHINXOPTS) $(BUILDDIR)/qthelp\n\t@echo\n\t@echo \"Build finished; now you can run \"qcollectiongenerator\" with the\" \\\n\t      \".qhcp project file in $(BUILDDIR)/qthelp, like this:\"\n\t@echo \"# qcollectiongenerator $(BUILDDIR)/qthelp/RIPEAtlasToolsMagellan.qhcp\"\n\t@echo \"To view the help file:\"\n\t@echo \"# assistant -collectionFile $(BUILDDIR)/qthelp/RIPEAtlasToolsMagellan.qhc\"\n\ndevhelp:\n\t$(SPHINXBUILD) -b devhelp $(ALLSPHINXOPTS) $(BUILDDIR)/devhelp\n\t@echo\n\t@echo \"Build finished.\"\n\t@echo \"To view the help file:\"\n\t@echo \"# mkdir -p $$HOME/.local/share/devhelp/RIPEAtlasToolsMagellan\"\n\t@echo \"# ln -s $(BUILDDIR)/devhelp $$HOME/.local/share/devhelp/RIPEAtlasToolsMagellan\"\n\t@echo \"# devhelp\"\n\nepub:\n\t$(SPHINXBUILD) -b epub $(ALLSPHINXOPTS) $(BUILDDIR)/epub\n\t@echo\n\t@echo \"Build finished. The epub file is in $(BUILDDIR)/epub.\"\n\nlatex:\n\t$(SPHINXBUILD) -b latex $(ALLSPHINXOPTS) $(BUILDDIR)/latex\n\t@echo\n\t@echo \"Build finished; the LaTeX files are in $(BUILDDIR)/latex.\"\n\t@echo \"Run \\`make' in that directory to run these through (pdf)latex\" \\\n\t      \"(use \\`make latexpdf' here to do that automatically).\"\n\nlatexpdf:\n\t$(SPHINXBUILD) -b latex $(ALLSPHINXOPTS) $(BUILDDIR)/latex\n\t@echo \"Running LaTeX files through pdflatex...\"\n\t$(MAKE) -C $(BUILDDIR)/latex all-pdf\n\t@echo \"pdflatex finished; the PDF files are in $(BUILDDIR)/latex.\"\n\nlatexpdfja:\n\t$(SPHINXBUILD) -b latex $(ALLSPHINXOPTS) $(BUILDDIR)/latex\n\t@echo \"Running LaTeX files through platex and dvipdfmx...\"\n\t$(MAKE) -C $(BUILDDIR)/latex all-pdf-ja\n\t@echo \"pdflatex finished; the PDF files are in $(BUILDDIR)/latex.\"\n\ntext:\n\t$(SPHINXBUILD) -b text $(ALLSPHINXOPTS) $(BUILDDIR)/text\n\t@echo\n\t@echo \"Build finished. The text files are in $(BUILDDIR)/text.\"\n\nman:\n\t$(SPHINXBUILD) -b man $(ALLSPHINXOPTS) $(BUILDDIR)/man\n\t@echo\n\t@echo \"Build finished. The manual pages are in $(BUILDDIR)/man.\"\n\ntexinfo:\n\t$(SPHINXBUILD) -b texinfo $(ALLSPHINXOPTS) $(BUILDDIR)/texinfo\n\t@echo\n\t@echo \"Build finished. The Texinfo files are in $(BUILDDIR)/texinfo.\"\n\t@echo \"Run \\`make' in that directory to run these through makeinfo\" \\\n\t      \"(use \\`make info' here to do that automatically).\"\n\ninfo:\n\t$(SPHINXBUILD) -b texinfo $(ALLSPHINXOPTS) $(BUILDDIR)/texinfo\n\t@echo \"Running Texinfo files through makeinfo...\"\n\tmake -C $(BUILDDIR)/texinfo info\n\t@echo \"makeinfo finished; the Info files are in $(BUILDDIR)/texinfo.\"\n\ngettext:\n\t$(SPHINXBUILD) -b gettext $(I18NSPHINXOPTS) $(BUILDDIR)/locale\n\t@echo\n\t@echo \"Build finished. The message catalogs are in $(BUILDDIR)/locale.\"\n\nchanges:\n\t$(SPHINXBUILD) -b changes $(ALLSPHINXOPTS) $(BUILDDIR)/changes\n\t@echo\n\t@echo \"The overview file is in $(BUILDDIR)/changes.\"\n\nlinkcheck:\n\t$(SPHINXBUILD) -b linkcheck $(ALLSPHINXOPTS) $(BUILDDIR)/linkcheck\n\t@echo\n\t@echo \"Link check complete; look for any errors in the above output \" \\\n\t      \"or in $(BUILDDIR)/linkcheck/output.txt.\"\n\ndoctest:\n\t$(SPHINXBUILD) -b doctest $(ALLSPHINXOPTS) $(BUILDDIR)/doctest\n\t@echo \"Testing of doctests in the sources finished, look at the \" \\\n\t      \"results in $(BUILDDIR)/doctest/output.txt.\"\n\nxml:\n\t$(SPHINXBUILD) -b xml $(ALLSPHINXOPTS) $(BUILDDIR)/xml\n\t@echo\n\t@echo \"Build finished. The XML files are in $(BUILDDIR)/xml.\"\n\npseudoxml:\n\t$(SPHINXBUILD) -b pseudoxml $(ALLSPHINXOPTS) $(BUILDDIR)/pseudoxml\n\t@echo\n\t@echo \"Build finished. The pseudo-XML files are in $(BUILDDIR)/pseudoxml.\"\n"
  },
  {
    "path": "docs/_static/.keep",
    "content": ""
  },
  {
    "path": "docs/_static/custom.css",
    "content": "/* override table width restrictions */\n@media screen and (min-width: 767px) {\n\n  .wy-table-responsive table td {\n    /* !important prevents the common CSS stylesheets from\n       overriding this as on RTD they are loaded after this stylesheet */\n    white-space: normal !important;\n  }\n\n  .wy-table-responsive {\n    overflow: visible !important;\n  }\n\n}\n"
  },
  {
    "path": "docs/api.rst",
    "content": ".. _api:\n\nThe REST API\n############\n\nPaperless makes use of the `Django REST Framework`_ standard API interface\nbecause of its inherent awesomeness.  Conveniently, the system is also\nself-documenting, so to learn more about the access points, schema, what's\naccepted and what isn't, you need only visit ``/api`` on your local Paperless\ninstallation.\n\n.. _Django REST Framework: http://django-rest-framework.org/\n\n\n.. _api-uploading:\n\nUploading\n---------\n\nFile uploads in an API are hard and so far as I've been able to tell, there's\nno standard way of accepting them, so rather than crowbar file uploads into the\nREST API and endure that headache, I've left that process to a simple HTTP\nPOST, documented on the :ref:`consumption page <consumption-http>`.\n"
  },
  {
    "path": "docs/changelog.rst",
    "content": "Changelog\n#########\n\n2.7.0\n=====\n\n* `syntonym`_ submitted a pull request to catch IMAP connection errors `#475`_.\n* `Stéphane Brunner`_ added ``psycopg2`` to the Pipfile `#489`_.  He also fixed\n  a syntax error in ``docker-compose.yml.example`` `#488`_ and added [DjangoQL](https://github.com/ivelum/djangoql),\n  which allows a litany of handy search functionality `#492`_.\n* `CkuT`_ and `JOKer`_ hacked out a simple, but super-helpful optimisation to\n  how the thumbnails are served up, improving performance considerably `#481`_.\n* `tsia`_ added a few fields to the tags REST API. `#483`_.\n* `Brian Cribbs`_ improved the documentation to help people using Paperless\n  over NFS `#484`_.\n* `Brendan M. Sleight`_ updated the documentation to include a note for setting the\n  ``DEBUG`` value.  The ``paperless.conf.example`` file was also updated to\n  mirror the project defaults.\n\n\n2.6.1\n=====\n\n* We now have a logo, complete with a favicon :-)\n* Removed some problematic tests.\n* Fix the docker-compose example config to include a shared consume volume so\n  that using the push API will work for users of the Docker install.  Thanks to\n  `Colin Frei`_ for fixing this in `#466`_.\n* `khrise`_ submitted a pull request to include the ``added`` property to the\n  REST API `#471`_.\n\n\n2.6.0\n=====\n\n* Allow an infinite number of logs to be deleted.  Thanks to `Ulli`_ for noting\n  the problem in `#433`_.\n* Fix the ``RecentCorrespondentsFilter`` correspondents filter that was added\n  in 2.4 to play nice with the defaults.  Thanks to `tsia`_ and `Sblop`_ who\n  pointed this out. `#423`_.\n* Updated dependencies to include (among other things) a security patch to\n  requests.\n* Fix text in sample data for tests so that the language guesser stops thinking\n  that everything is in Catalan because we had *Lorem ipsum* in there.\n* Tweaked the gunicorn sample command to use filesystem paths instead of Python\n  paths. `#441`_\n* Added pretty colour boxes next to the hex values in the Tags section, thanks\n  to a pull request from `Joshua Taillon`_ `#442`_.\n* Added a ``.editorconfig`` file to better specify coding style.\n* `Joshua Taillon`_ also added some logic to tie Paperless' date guessing logic\n  into how it parses file names on import. `#440`_\n\n\n2.5.0\n=====\n\n* **New dependency**: Paperless now optimises thumbnail generation with\n  `optipng`_, so you'll need to install that somewhere in your PATH or declare\n  its location in ``PAPERLESS_OPTIPNG_BINARY``.  The Docker image has already\n  been updated on the Docker Hub, so you just need to pull the latest one from\n  there if you're a Docker user.\n\n* \"Login free\" instances of Paperless were breaking whenever you tried to edit\n  objects in the admin: adding/deleting tags or correspondents, or even fixing\n  spelling.  This was due to the \"user hack\" we were applying to sessions that\n  weren't using a login, as that hack user didn't have a valid id.  The fix was\n  to attribute the first user id in the system to this hack user.  `#394`_\n\n* A problem in how we handle slug values on Tags and Correspondents required a\n  few changes to how we handle this field `#393`_:\n\n  1. Slugs are no longer editable.  They're derived from the name of the tag or\n     correspondent at save time, so if you wanna change the slug, you have to\n     change the name, and even then you're restricted to the rules of the\n     ``slugify()`` function.  The slug value is still visible in the admin\n     though.\n  2. I've added a migration to go over all existing tags & correspondents and\n     rewrite the ``.slug`` values to ones conforming to the ``slugify()``\n     rules.\n  3. The consumption process now uses the same rules as ``.save()`` in\n     determining a slug and using that to check for an existing\n     tag/correspondent.\n\n* An annoying bug in the date capture code was causing some bogus dates to be\n  attached to documents, which in turn busted the UI.  Thanks to `Andrew Peng`_\n  for reporting this. `#414`_.\n\n* A bug in the Dockerfile meant that Tesseract language files weren't being\n  installed correctly.  `euri10`_ was quick to provide a fix: `#406`_, `#413`_.\n\n* Document consumption is now wrapped in a transaction as per an old ticket\n  `#262`_.\n\n* The ``get_date()`` functionality of the parsers has been consolidated onto\n  the ``DocumentParser`` class since much of that code was redundant anyway.\n\n\n2.4.0\n=====\n\n* A new set of actions are now available thanks to `jonaswinkler`_'s very first\n  pull request!  You can now do nifty things like tag documents in bulk, or set\n  correspondents in bulk.  `#405`_\n* The import/export system is now a little smarter.  By default, documents are\n  tagged as ``unencrypted``, since exports are by their nature unencrypted.\n  It's now in the import step that we decide the storage type.  This allows you\n  to export from an encrypted system and import into an unencrypted one, or\n  vice-versa.\n* The migration history has been slightly modified to accommodate PostgreSQL\n  users.  Additionally, you can now tell paperless to use PostgreSQL simply by\n  declaring ``PAPERLESS_DBUSER`` in your environment.  This will attempt to\n  connect to your Postgres database without a password unless you also set\n  ``PAPERLESS_DBPASS``.\n* A bug was found in the REST API filter system that was the result of an\n  update of django-filter some time ago.  This has now been patched in `#412`_.\n  Thanks to `thepill`_ for spotting it!\n\n\n2.3.0\n=====\n\n* Support for consuming plain text & markdown documents was added by\n  `Joshua Taillon`_!  This was a long-requested feature, and it's addition is\n  likely to be greatly appreciated by the community: `#395`_  Thanks also to\n  `David Martin`_ for his assistance on the issue.\n* `dubit0`_ found & fixed a bug that prevented management commands from running\n  before we had an operational database: `#396`_\n* Joshua also added a simple update to the thumbnail generation process to\n  improve performance: `#399`_\n* As his last bit of effort on this release, Joshua also added some code to\n  allow you to view the documents inline rather than download them as an\n  attachment. `#400`_\n* Finally, `ahyear`_ found a slip in the Docker documentation and patched it.\n  `#401`_\n\n\n2.2.1\n=====\n\n* `Kyle Lucy`_ reported a bug quickly after the release of 2.2.0 where we broke\n  the ``DISABLE_LOGIN`` feature: `#392`_.\n\n\n2.2.0\n=====\n\n* Thanks to `dadosch`_, `Wolfgang Mader`_, and `Tim Brooks`_ this is the first\n  version of Paperless that supports Django 2.0!  As a result of their hard\n  work, you can now also run Paperless on Python 3.7 as well: `#386`_ &\n  `#390`_.\n* `Stéphane Brunner`_ added a few lines of code that made tagging interface a\n  lot easier on those of us with lots of different tags: `#391`_.\n* `Kilian Koeltzsch`_ noticed a bug in how we capture & automatically create\n  tags, so that's fixed now too: `#384`_.\n* `erikarvstedt`_ tweaked the behaviour of the test suite to be better behaved\n  for packaging environments: `#383`_.\n* `Lukasz Soluch`_ added CORS support to make building a new Javascript-based\n  front-end cleaner & easier: `#387`_.\n\n\n2.1.0\n=====\n\n* `Enno Lohmeier`_ added three simple features that make Paperless a lot more\n  user (and developer) friendly:\n\n  1. There's a new search box on the front page: `#374`_.\n  2. The correspondents & tags pages now have a column showing the number of\n     relevant documents: `#375`_.\n  3. The Dockerfile has been tweaked to build faster for those of us who are\n     doing active development on Paperless using the Docker environment:\n     `#376`_.\n\n* You now also have the ability to customise the interface to your heart's\n  content by creating a file called ``overrides.css`` and/or ``overrides.js``\n  in the root of your media directory.  Thanks to `Mark McFate`_ for this\n  idea: `#371`_\n\n\n2.0.0\n=====\n\nThis is a big release as we've changed a core-functionality of Paperless: we no\nlonger encrypt files with GPG by default.\n\nThe reasons for this are many, but it boils down to that the encryption wasn't\nreally all that useful, as files on-disk were still accessible so long as you\nhad the key, and the key was most typically stored in the config file.  In\nother words, your files are only as safe as the ``paperless`` user is.  In\naddition to that, *the contents of the documents were never encrypted*, so\nimportant numbers etc. were always accessible simply by querying the database.\nStill, it was better than nothing, but the consensus from users appears to be\nthat it was more an annoyance than anything else, so this feature is now turned\noff unless you explicitly set a passphrase in your config file.\n\nMigrating from 1.x\n------------------\n\nEncryption isn't gone, it's just off for new users.  So long as you have\n``PAPERLESS_PASSPHRASE`` set in your config or your environment, Paperless\nshould continue to operate as it always has.  If however, you want to drop\nencryption too, you only need to do two things:\n\n1. Run ``./manage.py migrate && ./manage.py change_storage_type gpg unencrypted``.\n   This will go through your entire database and Decrypt  All The Things.\n2. Remove ``PAPERLESS_PASSPHRASE`` from your ``paperless.conf`` file, or simply\n   stop declaring it in your environment.\n\nSpecial thanks to `erikarvstedt`_, `matthewmoto`_, and `mcronce`_ who did the\nbulk of the work on this big change.\n\n1.4.0\n=====\n\n* `Quentin Dawans`_ has refactored the document consumer to allow for some\n  command-line options.  Notably, you can now direct it to consume from a\n  particular ``--directory``, limit the ``--loop-time``, set the time between\n  mail server checks with ``--mail-delta`` or just run it as a one-off with\n  ``--one-shot``.  See `#305`_ & `#313`_ for more information.\n* Refactor the use of travis/tox/pytest/coverage into two files:\n  ``.travis.yml`` and ``setup.cfg``.\n* Start generating requirements.txt from a Pipfile.  I'll probably switch over\n  to just using pipenv in the future.\n* All for a alternative FreeBSD-friendly location for ``paperless.conf``.\n  Thanks to `Martin Arendtsen`_ who provided this (`#322`_).\n* Document consumption events are now logged in the Django admin events log.\n  Thanks to `CkuT`_ for doing the legwork on this one and to `Quentin Dawans`_\n  & `David Martin`_ for helping to coordinate & work out how the feature would\n  be developed.\n* `erikarvstedt`_ contributed a pull request (`#328`_) to add ``--noreload``\n  to the default server start process.  This helps reduce the load imposed\n  by the running webservice.\n* Through some discussion on `#253`_ and `#323`_, we've removed a few of the\n  hardcoded URL values to make it easier for people to host Paperless on a\n  subdirectory.  Thanks to `Quentin Dawans`_ and `Kyle Lucy`_ for helping to\n  work this out.\n* The clickable area for documents on the listing page has been increased to a\n  more predictable space thanks to a glorious hack from `erikarvstedt`_ in\n  `#344`_.\n* `Strubbl`_ noticed an annoying bug in the bash script wrapping the Docker\n  entrypoint and fixed it with some very creating Bash skills: `#352`_.\n* You can now use the search field to find documents by tag thanks to\n  `thinkjk`_'s *first ever issue*: `#354`_.\n* Inotify is now being used to detect additions to the consume directory thanks\n  to some excellent work from `erikarvstedt`_ on `#351`_\n\n1.3.0\n=====\n\n* You can now run Paperless without a login, though you'll still have to create\n  at least one user.  This is thanks to a pull-request from `matthewmoto`_:\n  `#295`_.  Note that logins are still required by default, and that you need\n  to disable them by setting ``PAPERLESS_DISABLE_LOGIN=\"true\"`` in your\n  environment or in ``/etc/paperless.conf``.\n* Fix for `#303`_ where sketchily-formatted documents could cause the consumer\n  to break and insert half-records into the database breaking all sorts of\n  things.  We now capture the return codes of both ``convert`` and ``unpaper``\n  and fail-out nicely.\n* Fix for additional date types thanks to input from `Isaac`_ and code from\n  `BastianPoe`_ (`#301`_).\n* Fix for running migrations in the Docker container (`#299`_).  Thanks to\n  `Georgi Todorov`_ for the fix (`#300`_) and to `Pit`_ for the review.\n* Fix for Docker cases where the issuing user is not UID 1000.  This was a\n  collaborative fix between `Jeffrey Portman`_ and `Pit`_ in `#311`_ and\n  `#312`_ to fix `#306`_.\n* Patch the historical migrations to support MySQL's um, *interesting* way of\n  handing indexes (`#308`_).  Thanks to `Simon Taddiken`_ for reporting the\n  problem and helping me find where to fix it.\n\n1.2.0\n=====\n\n* New Docker image, now based on Alpine, thanks to the efforts of `addadi`_\n  and `Pit`_.  This new image is dramatically smaller than the Debian-based\n  one, and it also has `a new home on Docker Hub`_.  A proper thank-you to\n  `Pit`_ for hosting the image on his Docker account all this time, but after\n  some discussion, we decided the image needed a more *official-looking* home.\n* `BastianPoe`_ has added the long-awaited feature to automatically skip the\n  OCR step when the PDF already contains text. This can be overridden by\n  setting ``PAPERLESS_OCR_ALWAYS=YES`` either in your ``paperless.conf`` or\n  in the environment.  Note that this also means that Paperless now requires\n  ``libpoppler-cpp-dev`` to be installed. **Important**: You'll need to run\n  ``pip install -r requirements.txt`` after the usual ``git pull`` to\n  properly update.\n* `BastianPoe`_ has also contributed a monumental amount of work (`#291`_) to\n  solving `#158`_: setting the document creation date based on finding a date\n  in the document text.\n\n1.1.0\n=====\n\n* Fix for `#283`_, a redirect bug which broke interactions with\n  paperless-desktop.  Thanks to `chris-aeviator`_ for reporting it.\n* Addition of an optional new financial year filter, courtesy of\n  `David Martin`_ `#256`_\n* Fixed a typo in how thumbnails were named in exports `#285`_, courtesy of\n  `Dan Panzarella`_\n\n1.0.0\n=====\n\n* Upgrade to Django 1.11.  **You'll need to run\n  ``pip install -r requirements.txt`` after the usual ``git pull`` to\n  properly update**.\n* Replace the templatetag-based hack we had for document listing in favour of\n  a slightly less ugly solution in the form of another template tag with less\n  copypasta.\n* Support for multi-word-matches for auto-tagging thanks to an excellent\n  patch from `ishirav`_ `#277`_.\n* Fixed a CSS bug reported by `Stefan Hagen`_ that caused an overlapping of\n  the text and checkboxes under some resolutions `#272`_.\n* Patched the Docker config to force the serving of static files.  Credit for\n  this one goes to `dev-rke`_ via `#248`_.\n* Fix file permissions during Docker start up thanks to `Pit`_ on `#268`_.\n* Date fields in the admin are now expressed as HTML5 date fields thanks to\n  `Lukas Winkler`_'s issue `#278`_\n\n0.8.0\n=====\n\n* Paperless can now run in a subdirectory on a host (``/paperless``), rather\n  than always running in the root (``/``) thanks to `maphy-psd`_'s work on\n  `#255`_.\n\n0.7.0\n=====\n\n* **Potentially breaking change**: As per `#235`_, Paperless will no longer\n  automatically delete documents attached to correspondents when those\n  correspondents are themselves deleted.  This was Django's default\n  behaviour, but didn't make much sense in Paperless' case.  Thanks to\n  `Thomas Brueggemann`_ and `David Martin`_ for their input on this one.\n* Fix for `#232`_ wherein Paperless wasn't recognising ``.tif`` files\n  properly.  Thanks to `ayounggun`_ for reporting this one and to\n  `Kusti Skytén`_ for posting the correct solution in the Github issue.\n\n0.6.0\n=====\n\n* Abandon the shared-secret trick we were using for the POST API in favour\n  of BasicAuth or Django session.\n* Fix the POST API so it actually works.  `#236`_\n* **Breaking change**: We've dropped the use of ``PAPERLESS_SHARED_SECRET``\n  as it was being used both for the API (now replaced with a normal auth)\n  and form email polling.  Now that we're only using it for email, this\n  variable has been renamed to ``PAPERLESS_EMAIL_SECRET``.  The old value\n  will still work for a while, but you should change your config if you've\n  been using the email polling feature.  Thanks to `Joshua Gilman`_ for all\n  the help with this feature.\n\n0.5.0\n=====\n\n* Support for fuzzy matching in the auto-tagger & auto-correspondent systems\n  thanks to `Jake Gysland`_'s patch `#220`_.\n* Modified the Dockerfile to prepare an export directory (`#212`_).  Thanks\n  to combined efforts from `Pit`_ and `Strubbl`_ in working out the kinks on\n  this one.\n* Updated the import/export scripts to include support for thumbnails.  Big\n  thanks to `CkuT`_ for finding this shortcoming and doing the work to get\n  it fixed in `#224`_.\n* All of the following changes are thanks to `David Martin`_:\n  * Bumped the dependency on pyocr to 0.4.7 so new users can make use of\n  Tesseract 4 if they so prefer (`#226`_).\n  * Fixed a number of issues with the automated mail handler (`#227`_, `#228`_)\n  * Amended the documentation for better handling of systemd service files (`#229`_)\n  * Amended the Django Admin configuration to have nice headers (`#230`_)\n\n0.4.1\n=====\n\n* Fix for `#206`_ wherein the pluggable parser didn't recognise files with\n  all-caps suffixes like ``.PDF``\n\n0.4.0\n=====\n\n* Introducing reminders.  See `#199`_ for more information, but the short\n  explanation is that you can now attach simple notes & times to documents\n  which are made available via the API.  Currently, the default API\n  (basically just the Django admin) doesn't really make use of this, but\n  `Thomas Brueggemann`_ over at `Paperless Desktop`_ has said that he would\n  like to make use of this feature in his project.\n\n0.3.6\n=====\n\n* Fix for `#200`_ (!!) where the API wasn't configured to allow updating the\n  correspondent or the tags for a document.\n* The ``content`` field is now optional, to allow for the edge case of a\n  purely graphical document.\n* You can no longer add documents via the admin.  This never worked in the\n  first place, so all I've done here is remove the link to the broken form.\n* The consumer code has been heavily refactored to support a pluggable\n  interface.  Install a paperless consumer via pip and tell paperless about\n  it with an environment variable, and you're good to go.  Proper\n  documentation is on its way.\n\n0.3.5\n=====\n\n* A serious facelift for the documents listing page wherein we drop the\n  tabular layout in favour of a tiled interface.\n* Users can now configure the number of items per page.\n* Fix for `#171`_: Allow users to specify their own ``SECRET_KEY`` value.\n* Moved the dotenv loading to the top of settings.py\n* Fix for `#112`_: Added checks for binaries required for document\n  consumption.\n\n0.3.4\n=====\n\n* Removal of django-suit due to a licensing conflict I bumped into in 0.3.3.\n  Note that you *can* use Django Suit with Paperless, but only in a\n  non-profit situation as their free license prohibits for-profit use.  As a\n  result, I can't bundle Suit with Paperless without conflicting with the\n  GPL.  Further development will be done against the stock Django admin.\n* I shrunk the thumbnails a little 'cause they were too big for me, even on\n  my high-DPI monitor.\n* BasicAuth support for document and thumbnail downloads, as well as the Push\n  API thanks to @thomasbrueggemann.  See `#179`_.\n\n0.3.3\n=====\n\n* Thumbnails in the UI and a Django-suit -based face-lift courtesy of @ekw!\n* Timezone, items per page, and default language are now all configurable,\n  also thanks to @ekw.\n\n0.3.2\n=====\n\n* Fix for `#172`_: defaulting ALLOWED_HOSTS to ``[\"*\"]`` and allowing the\n  user to set her own value via ``PAPERLESS_ALLOWED_HOSTS`` should the need\n  arise.\n\n0.3.1\n=====\n\n* Added a default value for ``CONVERT_BINARY``\n\n0.3.0\n=====\n\n* Updated to using django-filter 1.x\n* Added some system checks so new users aren't confused by misconfigurations.\n* Consumer loop time is now configurable for systems with slow writes.  Just\n  set ``PAPERLESS_CONSUMER_LOOP_TIME`` to a number of seconds.  The default\n  is 10.\n* As per `#44`_, we've removed support for ``PAPERLESS_CONVERT``,\n  ``PAPERLESS_CONSUME``, and ``PAPERLESS_SECRET``.  Please use\n  ``PAPERLESS_CONVERT_BINARY``, ``PAPERLESS_CONSUMPTION_DIR``, and\n  ``PAPERLESS_SHARED_SECRET`` respectively instead.\n\n0.2.0\n=====\n\n* `#150`_: The media root is now a variable you can set in\n  ``paperless.conf``.\n* `#148`_: The database location (sqlite) is now a variable you can set in\n  ``paperless.conf``.\n* `#146`_: Fixed a bug that allowed unauthorised access to the ``/fetch``\n  URL.\n* `#131`_: Document files are now automatically removed from disk when\n  they're deleted in Paperless.\n* `#121`_: Fixed a bug where Paperless wasn't setting document creation time\n  based on the file naming scheme.\n* `#81`_: Added a hook to run an arbitrary script after every document is\n  consumed.\n* `#98`_: Added optional environment variables for ImageMagick so that it\n  doesn't explode when handling Very Large Documents or when it's just\n  running on a low-memory system.  Thanks to `Florian Harr`_ for his help on\n  this one.\n* `#89`_ Ported the auto-tagging code to correspondents as well.  Thanks to\n  `Justin Snyman`_ for the pointers in the issue queue.\n* Added support for guessing the date from the file name along with the\n  correspondent, title, and tags.  Thanks to `Tikitu de Jager`_ for his pull\n  request that I took forever to merge and to `Pit`_ for his efforts on the\n  regex front.\n* `#94`_: Restored support for changing the created date in the UI.  Thanks\n  to `Martin Honermeyer`_ and `Tim White`_ for working with me on this.\n\n0.1.1\n=====\n\n* Potentially **Breaking Change**: All references to \"sender\" in the code\n  have been renamed to \"correspondent\" to better reflect the nature of the\n  property (one could quite reasonably scan a document before sending it to\n  someone.)\n* `#67`_: Rewrote the document exporter and added a new importer that allows\n  for full metadata retention without depending on the file name and\n  modification time.  A big thanks to `Tikitu de Jager`_, `Pit`_,\n  `Florian Jung`_, and `Christopher Luu`_ for their code snippets and\n  contributing conversation that lead to this change.\n* `#20`_: Added *unpaper* support to help in cleaning up the scanned image\n  before it's OCR'd.  Thanks to `Pit`_ for this one.\n* `#71`_ Added (encrypted) thumbnails in anticipation of a proper UI.\n* `#68`_: Added support for using a proper config file at\n  ``/etc/paperless.conf`` and modified the systemd unit files to use it.\n* Refactored the Vagrant installation process to use environment variables\n  rather than asking the user to modify ``settings.py``.\n* `#44`_: Harmonise environment variable names with constant names.\n* `#60`_: Setup logging to actually use the Python native logging framework.\n* `#53`_: Fixed an annoying bug that caused ``.jpeg`` and ``.JPG`` images\n  to be imported but made unavailable.\n\n0.1.0\n=====\n\n* Docker support!  Big thanks to `Wayne Werner`_, `Brian Conn`_, and\n  `Tikitu de Jager`_ for this one, and especially to `Pit`_\n  who spearheadded this effort.\n* A simple REST API is in place, but it should be considered unstable.\n* Cleaned up the consumer to use temporary directories instead of a single\n  scratch space.  (Thanks `Pit`_)\n* Improved the efficiency of the consumer by parsing pages more intelligently\n  and introducing a threaded OCR process (thanks again `Pit`_).\n* `#45`_: Cleaned up the logic for tag matching.  Reported by `darkmatter`_.\n* `#47`_: Auto-rotate landscape documents.  Reported by `Paul`_ and fixed by\n  `Pit`_.\n* `#48`_: Matching algorithms should do so on a word boundary (`darkmatter`_)\n* `#54`_: Documented the re-tagger (`zedster`_)\n* `#57`_: Make sure file is preserved on import failure (`darkmatter`_)\n* Added tox with pep8 checking\n\n0.0.6\n=====\n\n* Added support for parallel OCR (significant work from `Pit`_)\n* Sped up the language detection (significant work from `Pit`_)\n* Added simple logging\n\n0.0.5\n=====\n\n* Added support for image files as documents (png, jpg, gif, tiff)\n* Added a crude means of HTTP POST for document imports\n* Added IMAP mail support\n* Added a re-tagging utility\n* Documentation for the above as well as data migration\n\n0.0.4\n=====\n\n* Added automated tagging basted on keyword matching\n* Cleaned up the document listing page\n* Removed ``User`` and ``Group`` from the admin\n* Added ``pytz`` to the list of requirements\n\n0.0.3\n=====\n\n* Added basic tagging\n\n0.0.2\n=====\n\n* Added language detection\n* Added datestamps to ``document_exporter``.\n* Changed ``settings.TESSERACT_LANGUAGE`` to ``settings.OCR_LANGUAGE``.\n\n0.0.1\n=====\n\n* Initial release\n\n.. _Brian Conn: https://github.com/TheConnMan\n.. _Christopher Luu: https://github.com/nuudles\n.. _Florian Jung: https://github.com/the01\n.. _Tikitu de Jager: https://github.com/tikitu\n.. _Paul: https://github.com/polo2ro\n.. _Pit: https://github.com/pitkley\n.. _Wayne Werner: https://github.com/waynew\n.. _darkmatter: https://github.com/darkmatter\n.. _zedster: https://github.com/zedster\n.. _Martin Honermeyer: https://github.com/djmaze\n.. _Tim White: https://github.com/timwhite\n.. _Florian Harr: https://github.com/evils\n.. _Justin Snyman: https://github.com/stringlytyped\n.. _Thomas Brueggemann: https://github.com/thomasbrueggemann\n.. _Jake Gysland: https://github.com/jgysland\n.. _Strubbl: https://github.com/strubbl\n.. _CkuT: https://github.com/CkuT\n.. _David Martin: https://github.com/ddddavidmartin\n.. _Paperless Desktop: https://github.com/thomasbrueggemann/paperless-desktop\n.. _Joshua Gilman: https://github.com/jmgilman\n.. _ayounggun: https://github.com/ayounggun\n.. _Kusti Skytén: https://github.com/kskyten\n.. _maphy-psd: https://github.com/maphy-psd\n.. _ishirav: https://github.com/ishirav\n.. _Stefan Hagen: https://github.com/xkpd3\n.. _dev-rke: https://github.com/dev-rke\n.. _Lukas Winkler: https://github.com/Findus23\n.. _chris-aeviator: https://github.com/chris-aeviator\n.. _Dan Panzarella: https://github.com/pzl\n.. _addadi: https://github.com/addadi\n.. _BastianPoe: https://github.com/BastianPoe\n.. _matthewmoto: https://github.com/matthewmoto\n.. _Isaac: https://github.com/isaacsando\n.. _Georgi Todorov: https://github.com/TeraHz\n.. _Jeffrey Portman: https://github.com/ChromoX\n.. _Simon Taddiken: https://github.com/skuzzle\n.. _Quentin Dawans: https://github.com/ovv\n.. _Martin Arendtsen: https://github.com/Arendtsen\n.. _erikarvstedt: https://github.com/erikarvstedt\n.. _Kyle Lucy: https://github.com/kmlucy\n.. _thinkjk: https://github.com/thinkjk\n.. _mcronce: https://github.com/mcronce\n.. _Enno Lohmeier: https://github.com/elohmeier\n.. _Mark McFate: https://github.com/SummittDweller\n.. _dadosch: https://github.com/dadosch\n.. _Wolfgang Mader: https://github.com/wmader\n.. _Tim Brooks: https://github.com/brookst\n.. _Stéphane Brunner: https://github.com/sbrunner\n.. _Kilian Koeltzsch: https://github.com/kiliankoe\n.. _Lukasz Soluch: https://github.com/LukaszSolo\n.. _Joshua Taillon: https://github.com/jat255\n.. _dubit0: https://github.com/dubit0\n.. _ahyear: https://github.com/ahyear\n.. _jonaswinkler: https://github.com/jonaswinkler\n.. _thepill: https://github.com/thepill\n.. _Andrew Peng: https://github.com/pengc99\n.. _euri10: https://github.com/euri10\n.. _Ulli: https://github.com/Ulli2k\n.. _tsia: https://github.com/tsia\n.. _Sblop: https://github.com/Sblop\n.. _Colin Frei: https://github.com/colinfrei\n.. _khrise: https://github.com/khrise\n.. _syntonym: https://github.com/syntonym\n.. _JOKer: https://github.com/MasterofJOKers\n.. _Brian Cribbs: https://github.com/cribbstechnolog\n.. _Brendan M. Sleight: https://github.com/bmsleight\n\n.. _#20: https://github.com/the-paperless-project/paperless/issues/20\n.. _#44: https://github.com/the-paperless-project/paperless/issues/44\n.. _#45: https://github.com/the-paperless-project/paperless/issues/45\n.. _#47: https://github.com/the-paperless-project/paperless/issues/47\n.. _#48: https://github.com/the-paperless-project/paperless/issues/48\n.. _#53: https://github.com/the-paperless-project/paperless/issues/53\n.. _#54: https://github.com/the-paperless-project/paperless/issues/54\n.. _#57: https://github.com/the-paperless-project/paperless/issues/57\n.. _#60: https://github.com/the-paperless-project/paperless/issues/60\n.. _#67: https://github.com/the-paperless-project/paperless/issues/67\n.. _#68: https://github.com/the-paperless-project/paperless/issues/68\n.. _#71: https://github.com/the-paperless-project/paperless/issues/71\n.. _#81: https://github.com/the-paperless-project/paperless/issues/81\n.. _#89: https://github.com/the-paperless-project/paperless/issues/89\n.. _#94: https://github.com/the-paperless-project/paperless/issues/94\n.. _#98: https://github.com/the-paperless-project/paperless/issues/98\n.. _#112: https://github.com/the-paperless-project/paperless/issues/112\n.. _#121: https://github.com/the-paperless-project/paperless/issues/121\n.. _#131: https://github.com/the-paperless-project/paperless/issues/131\n.. _#146: https://github.com/the-paperless-project/paperless/issues/146\n.. _#148: https://github.com/the-paperless-project/paperless/pull/148\n.. _#150: https://github.com/the-paperless-project/paperless/pull/150\n.. _#158: https://github.com/the-paperless-project/paperless/issues/158\n.. _#171: https://github.com/the-paperless-project/paperless/issues/171\n.. _#172: https://github.com/the-paperless-project/paperless/issues/172\n.. _#179: https://github.com/the-paperless-project/paperless/pull/179\n.. _#199: https://github.com/the-paperless-project/paperless/issues/199\n.. _#200: https://github.com/the-paperless-project/paperless/issues/200\n.. _#206: https://github.com/the-paperless-project/paperless/issues/206\n.. _#212: https://github.com/the-paperless-project/paperless/pull/212\n.. _#220: https://github.com/the-paperless-project/paperless/pull/220\n.. _#224: https://github.com/the-paperless-project/paperless/pull/224\n.. _#226: https://github.com/the-paperless-project/paperless/pull/226\n.. _#227: https://github.com/the-paperless-project/paperless/pull/227\n.. _#228: https://github.com/the-paperless-project/paperless/pull/228\n.. _#229: https://github.com/the-paperless-project/paperless/pull/229\n.. _#230: https://github.com/the-paperless-project/paperless/pull/230\n.. _#232: https://github.com/the-paperless-project/paperless/issues/232\n.. _#235: https://github.com/the-paperless-project/paperless/issues/235\n.. _#236: https://github.com/the-paperless-project/paperless/issues/236\n.. _#255: https://github.com/the-paperless-project/paperless/pull/255\n.. _#268: https://github.com/the-paperless-project/paperless/pull/268\n.. _#277: https://github.com/the-paperless-project/paperless/pull/277\n.. _#272: https://github.com/the-paperless-project/paperless/issues/272\n.. _#248: https://github.com/the-paperless-project/paperless/issues/248\n.. _#278: https://github.com/the-paperless-project/paperless/issues/248\n.. _#283: https://github.com/the-paperless-project/paperless/issues/283\n.. _#256: https://github.com/the-paperless-project/paperless/pull/256\n.. _#285: https://github.com/the-paperless-project/paperless/pull/285\n.. _#291: https://github.com/the-paperless-project/paperless/pull/291\n.. _#295: https://github.com/the-paperless-project/paperless/pull/295\n.. _#299: https://github.com/the-paperless-project/paperless/issues/299\n.. _#300: https://github.com/the-paperless-project/paperless/pull/300\n.. _#301: https://github.com/the-paperless-project/paperless/issues/301\n.. _#303: https://github.com/the-paperless-project/paperless/issues/303\n.. _#305: https://github.com/the-paperless-project/paperless/issues/305\n.. _#306: https://github.com/the-paperless-project/paperless/issues/306\n.. _#308: https://github.com/the-paperless-project/paperless/issues/308\n.. _#311: https://github.com/the-paperless-project/paperless/pull/311\n.. _#312: https://github.com/the-paperless-project/paperless/pull/312\n.. _#313: https://github.com/the-paperless-project/paperless/pull/313\n.. _#322: https://github.com/the-paperless-project/paperless/pull/322\n.. _#328: https://github.com/the-paperless-project/paperless/pull/328\n.. _#253: https://github.com/the-paperless-project/paperless/issues/253\n.. _#262: https://github.com/the-paperless-project/paperless/issues/262\n.. _#323: https://github.com/the-paperless-project/paperless/issues/323\n.. _#344: https://github.com/the-paperless-project/paperless/pull/344\n.. _#351: https://github.com/the-paperless-project/paperless/pull/351\n.. _#352: https://github.com/the-paperless-project/paperless/pull/352\n.. _#354: https://github.com/the-paperless-project/paperless/issues/354\n.. _#371: https://github.com/the-paperless-project/paperless/issues/371\n.. _#374: https://github.com/the-paperless-project/paperless/pull/374\n.. _#375: https://github.com/the-paperless-project/paperless/pull/375\n.. _#376: https://github.com/the-paperless-project/paperless/pull/376\n.. _#383: https://github.com/the-paperless-project/paperless/pull/383\n.. _#384: https://github.com/the-paperless-project/paperless/issues/384\n.. _#386: https://github.com/the-paperless-project/paperless/issues/386\n.. _#387: https://github.com/the-paperless-project/paperless/pull/387\n.. _#391: https://github.com/the-paperless-project/paperless/pull/391\n.. _#390: https://github.com/the-paperless-project/paperless/pull/390\n.. _#392: https://github.com/the-paperless-project/paperless/issues/392\n.. _#393: https://github.com/the-paperless-project/paperless/issues/393\n.. _#395: https://github.com/the-paperless-project/paperless/pull/395\n.. _#394: https://github.com/the-paperless-project/paperless/issues/394\n.. _#396: https://github.com/the-paperless-project/paperless/pull/396\n.. _#399: https://github.com/the-paperless-project/paperless/pull/399\n.. _#400: https://github.com/the-paperless-project/paperless/pull/400\n.. _#401: https://github.com/the-paperless-project/paperless/pull/401\n.. _#405: https://github.com/the-paperless-project/paperless/pull/405\n.. _#406: https://github.com/the-paperless-project/paperless/issues/406\n.. _#412: https://github.com/the-paperless-project/paperless/issues/412\n.. _#413: https://github.com/the-paperless-project/paperless/pull/413\n.. _#414: https://github.com/the-paperless-project/paperless/issues/414\n.. _#423: https://github.com/the-paperless-project/paperless/issues/423\n.. _#433: https://github.com/the-paperless-project/paperless/issues/433\n.. _#440: https://github.com/the-paperless-project/paperless/pull/440\n.. _#441: https://github.com/the-paperless-project/paperless/pull/441\n.. _#442: https://github.com/the-paperless-project/paperless/pull/442\n.. _#466: https://github.com/the-paperless-project/paperless/pull/466\n.. _#471: https://github.com/the-paperless-project/paperless/pull/471\n.. _#475: https://github.com/the-paperless-project/paperless/pull/475\n.. _#481: https://github.com/the-paperless-project/paperless/pull/481\n.. _#483: https://github.com/the-paperless-project/paperless/pull/483\n.. _#484: https://github.com/the-paperless-project/paperless/pull/484\n.. _#488: https://github.com/the-paperless-project/paperless/pull/488\n.. _#489: https://github.com/the-paperless-project/paperless/pull/489\n.. _#492: https://github.com/the-paperless-project/paperless/pull/492\n\n.. _pipenv: https://docs.pipenv.org/\n.. _a new home on Docker Hub: https://hub.docker.com/r/danielquinn/paperless/\n.. _optipng: http://optipng.sourceforge.net/\n"
  },
  {
    "path": "docs/conf.py",
    "content": "# -*- coding: utf-8 -*-\n#\n# Paperless documentation build configuration file, created by\n# sphinx-quickstart on Mon Oct 26 18:36:52 2015.\n#\n# This file is execfile()d with the current directory set to its\n# containing dir.\n#\n# Note that not all possible configuration values are present in this\n# autogenerated file.\n#\n# All configuration values have a default; values that are commented out\n# serve to show the default.\n\nimport sys\nimport os\n\n__version__ = None\nexec(open(\"../src/paperless/version.py\").read())\n\n\n# Believe it or not, this is the officially sanctioned way to add custom CSS.\ndef setup(app):\n    app.add_stylesheet(\"custom.css\")\n\n# If extensions (or modules to document with autodoc) are in another directory,\n# add these directories to sys.path here. If the directory is relative to the\n# documentation root, use os.path.abspath to make it absolute, like shown here.\n#sys.path.insert(0, os.path.abspath('.'))\n\n# -- General configuration ------------------------------------------------\n\n# If your documentation needs a minimal Sphinx version, state it here.\n#needs_sphinx = '1.0'\n\n# Add any Sphinx extension module names here, as strings. They can be\n# extensions coming with Sphinx (named 'sphinx.ext.*') or your custom\n# ones.\nextensions = [\n    'sphinx.ext.autodoc',\n    'sphinx.ext.intersphinx',\n    'sphinx.ext.todo',\n    'sphinx.ext.imgmath',\n    'sphinx.ext.viewcode',\n]\n\n# Add any paths that contain templates here, relative to this directory.\ntemplates_path = ['_templates']\n\n# The suffix of source filenames.\nsource_suffix = '.rst'\n\n# The encoding of source files.\n#source_encoding = 'utf-8-sig'\n\n# The master toctree document.\nmaster_doc = 'index'\n\n# General information about the project.\nproject = u'Paperless'\ncopyright = u'2015, Daniel Quinn'\n\n# The version info for the project you're documenting, acts as replacement for\n# |version| and |release|, also used in various other places throughout the\n# built documents.\n#\n\n#\n# If the build process ever explodes here, it's because you've set the version\n# number in paperless.version to a tuple with 3 numbers in it.\n#\n\n# The short X.Y version.\nversion = \".\".join([str(_) for _ in __version__[:2]])\n# The full version, including alpha/beta/rc tags.\nrelease = \".\".join([str(_) for _ in __version__[:3]])\n\n# The language for content autogenerated by Sphinx. Refer to documentation\n# for a list of supported languages.\n#language = None\n\n# There are two options for replacing |today|: either, you set today to some\n# non-false value, then it is used:\n#today = ''\n# Else, today_fmt is used as the format for a strftime call.\n#today_fmt = '%B %d, %Y'\n\n# List of patterns, relative to source directory, that match files and\n# directories to ignore when looking for source files.\nexclude_patterns = ['_build']\n\n# The reST default role (used for this markup: `text`) to use for all\n# documents.\n#default_role = None\n\n# If true, '()' will be appended to :func: etc. cross-reference text.\n#add_function_parentheses = True\n\n# If true, the current module name will be prepended to all description\n# unit titles (such as .. function::).\n#add_module_names = True\n\n# If true, sectionauthor and moduleauthor directives will be shown in the\n# output. They are ignored by default.\n#show_authors = False\n\n# The name of the Pygments (syntax highlighting) style to use.\npygments_style = 'sphinx'\n\n# A list of ignored prefixes for module index sorting.\n#modindex_common_prefix = []\n\n# If true, keep warnings as \"system message\" paragraphs in the built documents.\n#keep_warnings = False\n\n\n# -- Options for HTML output ----------------------------------------------\n\n# The theme to use for HTML and HTML Help pages.  See the documentation for\n# a list of builtin themes.\nhtml_theme = 'default'\n\n# Theme options are theme-specific and customize the look and feel of a theme\n# further.  For a list of options available for each theme, see the\n# documentation.\n#html_theme_options = {}\n\n# Add any paths that contain custom themes here, relative to this directory.\nhtml_theme_path = []\n\n# The name for this set of Sphinx documents.  If None, it defaults to\n# \"<project> v<release> documentation\".\n#html_title = None\n\n# A shorter title for the navigation bar.  Default is the same as html_title.\n#html_short_title = None\n\n# The name of an image file (relative to this directory) to place at the top\n# of the sidebar.\n#html_logo = None\n\n# The name of an image file (within the static path) to use as favicon of the\n# docs.  This file should be a Windows icon file (.ico) being 16x16 or 32x32\n# pixels large.\n#html_favicon = None\n\n# Add any paths that contain custom static files (such as style sheets) here,\n# relative to this directory. They are copied after the builtin static files,\n# so a file named \"default.css\" will overwrite the builtin \"default.css\".\nhtml_static_path = ['_static']\n\n# Add any extra paths that contain custom files (such as robots.txt or\n# .htaccess) here, relative to this directory. These files are copied\n# directly to the root of the documentation.\n#html_extra_path = []\n\n# If not '', a 'Last updated on:' timestamp is inserted at every page bottom,\n# using the given strftime format.\n#html_last_updated_fmt = '%b %d, %Y'\n\n# If true, SmartyPants will be used to convert quotes and dashes to\n# typographically correct entities.\n#html_use_smartypants = True\n\n# Custom sidebar templates, maps document names to template names.\n#html_sidebars = {}\n\n# Additional templates that should be rendered to pages, maps page names to\n# template names.\n#html_additional_pages = {}\n\n# If false, no module index is generated.\n#html_domain_indices = True\n\n# If false, no index is generated.\n#html_use_index = True\n\n# If true, the index is split into individual pages for each letter.\n#html_split_index = False\n\n# If true, links to the reST sources are added to the pages.\n#html_show_sourcelink = True\n\n# If true, \"Created using Sphinx\" is shown in the HTML footer. Default is True.\n#html_show_sphinx = True\n\n# If true, \"(C) Copyright ...\" is shown in the HTML footer. Default is True.\n#html_show_copyright = True\n\n# If true, an OpenSearch description file will be output, and all pages will\n# contain a <link> tag referring to it.  The value of this option must be the\n# base URL from which the finished HTML is served.\n#html_use_opensearch = ''\n\n# This is the file name suffix for HTML files (e.g. \".xhtml\").\n#html_file_suffix = None\n\n# Output file base name for HTML help builder.\nhtmlhelp_basename = 'paperless'\n\n\n#\n# Attempt to use the ReadTheDocs theme.  If it's not installed, fallback to\n# the default.\n#\n\ntry:\n    import sphinx_rtd_theme\n    html_theme = \"sphinx_rtd_theme\"\n    html_theme_path = [sphinx_rtd_theme.get_html_theme_path()]\nexcept ImportError:\n    pass\n\n# -- Options for LaTeX output ---------------------------------------------\n\nlatex_elements = {\n# The paper size ('letterpaper' or 'a4paper').\n#'papersize': 'letterpaper',\n\n# The font size ('10pt', '11pt' or '12pt').\n#'pointsize': '10pt',\n\n# Additional stuff for the LaTeX preamble.\n#'preamble': '',\n}\n\n# Grouping the document tree into LaTeX files. List of tuples\n# (source start file, target name, title,\n#  author, documentclass [howto, manual, or own class]).\nlatex_documents = [\n  ('index', 'paperless.tex', u'Paperless Documentation',\n   u'Daniel Quinn', 'manual'),\n]\n\n# The name of an image file (relative to this directory) to place at the top of\n# the title page.\n#latex_logo = None\n\n# For \"manual\" documents, if this is true, then toplevel headings are parts,\n# not chapters.\n#latex_use_parts = False\n\n# If true, show page references after internal links.\n#latex_show_pagerefs = False\n\n# If true, show URL addresses after external links.\n#latex_show_urls = False\n\n# Documents to append as an appendix to all manuals.\n#latex_appendices = []\n\n# If false, no module index is generated.\n#latex_domain_indices = True\n\n\n# -- Options for manual page output ---------------------------------------\n\n# One entry per manual page. List of tuples\n# (source start file, name, description, authors, manual section).\nman_pages = [\n    ('index', 'paperless', u'Paperless Documentation',\n     [u'Daniel Quinn'], 1)\n]\n\n# If true, show URL addresses after external links.\n#man_show_urls = False\n\n\n# -- Options for Texinfo output -------------------------------------------\n\n# Grouping the document tree into Texinfo files. List of tuples\n# (source start file, target name, title, author,\n#  dir menu entry, description, category)\ntexinfo_documents = [\n  ('index', 'Paperless', u'Paperless Documentation',\n   u'Daniel Quinn', 'paperless', 'Scan, index, and archive all of your paper documents.',\n   'Miscellaneous'),\n]\n\n# Documents to append as an appendix to all manuals.\n#texinfo_appendices = []\n\n# If false, no module index is generated.\n#texinfo_domain_indices = True\n\n# How to display URL addresses: 'footnote', 'no', or 'inline'.\n#texinfo_show_urls = 'footnote'\n\n# If true, do not generate a @detailmenu in the \"Top\" node's menu.\n#texinfo_no_detailmenu = False\n\n\n# -- Options for Epub output ----------------------------------------------\n\n# Bibliographic Dublin Core info.\nepub_title = u'Paperless'\nepub_author = u'Daniel Quinn'\nepub_publisher = u'Daniel Quinn'\nepub_copyright = u'2015, Daniel Quinn'\n\n# The basename for the epub file. It defaults to the project name.\n#epub_basename = u'Paperless'\n\n# The HTML theme for the epub output. Since the default themes are not optimized\n# for small screen space, using the same theme for HTML and epub output is\n# usually not wise. This defaults to 'epub', a theme designed to save visual\n# space.\n#epub_theme = 'epub'\n\n# The language of the text. It defaults to the language option\n# or en if the language is not set.\n#epub_language = ''\n\n# The scheme of the identifier. Typical schemes are ISBN or URL.\n#epub_scheme = ''\n\n# The unique identifier of the text. This can be a ISBN number\n# or the project homepage.\n#epub_identifier = ''\n\n# A unique identification for the text.\n#epub_uid = ''\n\n# A tuple containing the cover image and cover page html template filenames.\n#epub_cover = ()\n\n# A sequence of (type, uri, title) tuples for the guide element of content.opf.\n#epub_guide = ()\n\n# HTML files that should be inserted before the pages created by sphinx.\n# The format is a list of tuples containing the path and title.\n#epub_pre_files = []\n\n# HTML files shat should be inserted after the pages created by sphinx.\n# The format is a list of tuples containing the path and title.\n#epub_post_files = []\n\n# A list of files that should not be packed into the epub file.\nepub_exclude_files = ['search.html']\n\n# The depth of the table of contents in toc.ncx.\n#epub_tocdepth = 3\n\n# Allow duplicate toc entries.\n#epub_tocdup = True\n\n# Choose between 'default' and 'includehidden'.\n#epub_tocscope = 'default'\n\n# Fix unsupported image types using the PIL.\n#epub_fix_images = False\n\n# Scale large images.\n#epub_max_image_width = 0\n\n# How to display URL addresses: 'footnote', 'no', or 'inline'.\n#epub_show_urls = 'inline'\n\n# If false, no index is generated.\n#epub_use_index = True\n\n\n# Example configuration for intersphinx: refer to the Python standard library.\nintersphinx_mapping = {'http://docs.python.org/': None}\n"
  },
  {
    "path": "docs/consumption.rst",
    "content": ".. _consumption:\n\nConsumption\n###########\n\nOnce you've got Paperless setup, you need to start feeding documents into it.\nCurrently, there are three options: the consumption directory, IMAP (email), and\nHTTP POST.\n\n\n.. _consumption-directory:\n\nThe Consumption Directory\n=========================\n\nThe primary method of getting documents into your database is by putting them in\nthe consumption directory.  The ``document_consumer`` script runs in an infinite\nloop looking for new additions to this directory and when it finds them, it goes\nabout the process of parsing them with the OCR, indexing what it finds, and\nencrypting the PDF (if ``PAPERLESS_PASSPHRASE`` is set), storing it in the\nmedia directory.\n\nGetting stuff into this directory is up to you.  If you're running Paperless\non your local computer, you might just want to drag and drop files there, but if\nyou're running this on a server and want your scanner to automatically push\nfiles to this directory, you'll need to setup some sort of service to accept the\nfiles from the scanner.  Typically, you're looking at an FTP server like\n`Proftpd`_ or `Samba`_.\n\n.. _Proftpd: http://www.proftpd.org/\n.. _Samba: http://www.samba.org/\n\nSo where is this consumption directory?  It's wherever you define it.  Look for\nthe ``CONSUMPTION_DIR`` value in ``settings.py``.  Set that to somewhere\nappropriate for your use and put some documents in there.  When you're ready,\nfollow the :ref:`consumer <utilities-consumer>` instructions to get it running.\n\n\n.. _consumption-directory-hook:\n\nHooking into the Consumption Process\n------------------------------------\n\nSometimes you may want to do something arbitrary whenever a document is\nconsumed.  Rather than try to predict what you may want to do, Paperless lets\nyou execute scripts of your own choosing just before or after a document is\nconsumed using a couple simple hooks.\n\nJust write a script, put it somewhere that Paperless can read & execute, and\nthen put the path to that script in ``paperless.conf`` with the variable name\nof either ``PAPERLESS_PRE_CONSUME_SCRIPT`` or\n``PAPERLESS_POST_CONSUME_SCRIPT``.  The script will be executed before or\nor after the document is consumed respectively.\n\n.. important::\n\n    These scripts are executed in a **blocking** process, which means that if\n    a script takes a long time to run, it can significantly slow down your\n    document consumption flow.  If you want things to run asynchronously,\n    you'll have to fork the process in your script and exit.\n\n\n.. _consumption-directory-hook-variables:\n\nWhat Can These Scripts Do?\n..........................\n\nIt's your script, so you're only limited by your imagination and the laws of\nphysics.  However, the following values are passed to the scripts in order:\n\n\n.. _consumption-director-hook-variables-pre:\n\nPre-consumption script\n::::::::::::::::::::::\n\n* Document file name\n\nA simple but common example for this would be creating a simple script like\nthis:\n\n``/usr/local/bin/ocr-pdf``\n\n.. code:: bash\n\n    #!/usr/bin/env bash\n    pdf2pdfocr.py -i ${1}\n\n``/etc/paperless.conf``\n\n.. code:: bash\n\n    ...\n    PAPERLESS_PRE_CONSUME_SCRIPT=\"/usr/local/bin/ocr-pdf\"\n    ...\n\nThis will pass the path to the document about to be consumed to ``/usr/local/bin/ocr-pdf``,\nwhich will in turn call `pdf2pdfocr.py`_ on your document, which will then\noverwrite the file with an OCR'd version of the file and exit.  At which point,\nthe consumption process will begin with the newly modified file.\n\n.. _pdf2pdfocr.py: https://github.com/LeoFCardoso/pdf2pdfocr\n\n\n.. _consumption-director-hook-variables-post:\n\nPost-consumption script\n:::::::::::::::::::::::\n\n* Document id\n* Generated file name\n* Source path\n* Thumbnail path\n* Download URL\n* Thumbnail URL\n* Correspondent\n* Tags\n\nThe script can be in any language you like, but for a simple shell script\nexample, you can take a look at ``post-consumption-example.sh`` in the\n``scripts`` directory in this project.\n\n\n.. _consumption-imap:\n\nIMAP (Email)\n============\n\nAnother handy way to get documents into your database is to email them to\nyourself.  The typical use-case would be to be out for lunch and want to send a\ncopy of the receipt back to your system at home.  Paperless can be taught to\npull emails down from an arbitrary account and dump them into the consumption\ndirectory where the process :ref:`above <consumption-directory>` will follow the\nusual pattern on consuming the document.\n\nSome things you need to know about this feature:\n\n* It's disabled by default.  By setting the values below it will be enabled.\n* It's been tested in a limited environment, so it may not work for you (please\n  submit a pull request if you can!)\n* It's designed to **delete mail from the server once consumed**.  So don't go\n  pointing this to your personal email account and wonder where all your stuff\n  went.\n* Currently, only one photo (attachment) per email will work.\n\nSo, with all that in mind, here's what you do to get it running:\n\n1. Setup a new email account somewhere, or if you're feeling daring, create a\n   folder in an existing email box and note the path to that folder.\n2. In ``/etc/paperless.conf`` set all of the appropriate values in\n   ``PATHS AND FOLDERS`` and ``SECURITY``.\n   If you decided to use a subfolder of an existing account, then make sure you\n   set ``PAPERLESS_CONSUME_MAIL_INBOX`` accordingly here.  You also have to set\n   the ``PAPERLESS_EMAIL_SECRET`` to something you can remember 'cause you'll\n   have to include that in every email you send.\n3. Restart the :ref:`consumer <utilities-consumer>`.  The consumer will check\n   the configured email account at startup and from then on every 10 minutes\n   for something new and pulls down whatever it finds.\n4. Send yourself an email!  Note that the subject is treated as the file name,\n   so if you set the subject to ``Correspondent - Title - tag,tag,tag``, you'll\n   get what you expect.  Also, you must include the aforementioned secret\n   string in every email so the fetcher knows that it's safe to import.\n   Note that Paperless only allows the email title to consist of safe characters\n   to be imported. These consist of alpha-numeric characters and ``-_ ,.'``.\n5. After a few minutes, the consumer will poll your mailbox, pull down the\n   message, and place the attachment in the consumption directory with the\n   appropriate name.  A few minutes later, the consumer will import it like any\n   other file.\n\n\n.. _consumption-http:\n\nHTTP POST\n=========\n\nYou can also submit a document via HTTP POST, so long as you do so after\nauthenticating.  To push your document to Paperless, send an HTTP POST to the\nserver with the following name/value pairs:\n\n* ``correspondent``: The name of the document's correspondent.  Note that there\n  are restrictions on what characters you can use here.  Specifically,\n  alphanumeric characters, `-`, `,`, `.`, and `'` are ok, everything else is\n  out.  You also can't use the sequence ` - ` (space, dash, space).\n* ``title``: The title of the document.  The rules for characters is the same\n  here as the correspondent.\n* ``document``: The file you're uploading\n\nSpecify ``enctype=\"multipart/form-data\"``, and then POST your file with::\n\n    Content-Disposition: form-data; name=\"document\"; filename=\"whatever.pdf\"\n\nAn example of this in HTML is a typical form:\n\n.. code:: html\n\n    <form method=\"post\" enctype=\"multipart/form-data\">\n        <input type=\"text\" name=\"correspondent\" value=\"My Correspondent\" />\n        <input type=\"text\" name=\"title\" value=\"My Title\" />\n        <input type=\"file\" name=\"document\" />\n        <input type=\"submit\" name=\"go\" value=\"Do the thing\" />\n    </form>\n\nBut a potentially more useful way to do this would be in Python.  Here we use\nthe requests library to handle basic authentication and to send the POST data\nto the URL.\n\n.. code:: python\n\n    import os\n\n    from hashlib import sha256\n\n    import requests\n    from requests.auth import HTTPBasicAuth\n\n    # You authenticate via BasicAuth or with a session id.\n    # We use BasicAuth here\n    username = \"my-username\"\n    password = \"my-super-secret-password\"\n\n    # Where you have Paperless installed and listening\n    url = \"http://localhost:8000/push\"\n\n    # Document metadata\n    correspondent = \"Test Correspondent\"\n    title = \"Test Title\"\n\n    # The local file you want to push\n    path = \"/path/to/some/directory/my-document.pdf\"\n\n\n    with open(path, \"rb\") as f:\n\n        response = requests.post(\n            url=url,\n            data={\"title\": title,  \"correspondent\": correspondent},\n            files={\"document\": (os.path.basename(path), f, \"application/pdf\")},\n            auth=HTTPBasicAuth(username, password),\n            allow_redirects=False\n        )\n\n        if response.status_code == 202:\n\n            # Everything worked out ok\n            print(\"Upload successful\")\n\n        else:\n\n            # If you don't get a 202, it's probably because your credentials\n            # are wrong or something.  This will give you a rough idea of what\n            # happened.\n\n            print(\"We got HTTP status code: {}\".format(response.status_code))\n            for k, v in response.headers.items():\n                print(\"{}: {}\".format(k, v))\n"
  },
  {
    "path": "docs/contributing.rst",
    "content": ".. _contributing:\n\nContributing to Paperless\n#########################\n\nMaybe you've been using Paperless for a while and want to add a feature or two,\nor maybe you've come across a bug that you have some ideas how to solve.  The\nbeauty of Free software is that you can see what's wrong and help to get it\nfixed for everyone!\n\n\nHow to Get Your Changes Rolled Into Paperless\n=============================================\n\nIf you've found a bug, but don't know how to fix it, you can always post an\nissue on `GitHub`_ in the hopes that someone will have the time to fix it for\nyou.  If however you're the one with the time, pull requests are always\nwelcome, you just have to make sure that your code conforms to a few standards:\n\nPep8\n----\n\nIt's the standard for all Python development, so it's `very well documented`_.\nThe short version is:\n\n* Lines should wrap at 79 characters\n* Use ``snake_case`` for variables, ``CamelCase`` for classes, and ``ALL_CAPS``\n  for constants.\n* Space out your operators: ``stuff + 7`` instead of ``stuff+7``\n* Two empty lines between classes, and functions, but 1 empty line between\n  class methods.\n\nThere's more to it than that, but if you follow those, you'll probably be\nalright.  When you submit your pull request, there's a pep8 checker that'll\nlook at your code to see if anything is off.  If it finds anything, it'll\ncomplain at you until you fix it.\n\n\nAdditional Style Guides\n-----------------------\n\nWhere pep8 is ambiguous, I've tried to be a little more specific.  These rules\naren't hard-and-fast, but if you can conform to them, I'll appreciate it and\nspend less time trying to conform your PR before merging:\n\n\nFunction calls\n..............\n\nIf you're calling a function and that necessitates more than one line of code,\nplease format it like this:\n\n.. code:: python\n\n    my_function(\n        argument1,\n        kwarg1=\"x\",\n        kwarg2=\"y\"\n        another_really_long_kwarg=\"some big value\"\n        a_kwarg_calling_another_long_function=another_function(\n            another_arg,\n            another_kwarg=\"kwarg!\"\n        )\n    )\n\nThis is all in the interest of code uniformity rather than anything else.  If\nwe stick to a style, everything is understandable in the same way.\n\n\nQuoting Strings\n...............\n\npep8 is a little too open-minded on this for my liking.  Python strings should\nbe quoted with double quotes (``\"``) except in cases where the resulting string\nwould require too much escaping of a double quote, in which case, a single\nquoted, or triple-quoted string will do:\n\n.. code:: python\n\n    my_string = \"This is my string\"\n    problematic_string = 'This is a \"string\" with \"quotes\" in it'\n\nIn HTML templates, please use double-quotes for tag attributes, and single\nquotes for arguments passed to Django tempalte tags:\n\n.. code:: html\n\n    <div class=\"stuff\">\n        <a href=\"{% url 'some-url-name' pk='w00t' %}\">link this</a>\n    </div>\n\nThis is to keep linters happy they look at an HTML file and see an attribute\nclosing the ``\"`` before it should have been.\n\n--\n\nThat's all there is in terms of guidelines, so I hope it's not too daunting.\n\n\nIndentation & Spacing\n.....................\n\nWhen it comes to indentation:\n\n* For Python, the rule is: follow pep8 and use 4 spaces.\n* For Javascript, CSS, and HTML, please use 1 tab.\n\nAdditionally, Django templates making use of block elements like ``{% if %}``,\n``{% for %}``, and ``{% block %}`` etc. should be indented:\n\nGood:\n\n.. code:: html\n\n    {% block stuff %}\n    \t<h1>This is the stuff</h1>\n    {% endblock %}\n\nBad:\n\n.. code:: html\n\n    {% block stuff %}\n    <h1>This is the stuff</h1>\n    {% endblock %}\n\n\nThe Code of Conduct\n===================\n\nPaperless has a `code of conduct`_.  It's a lot like the other ones you see out\nthere, with a few small changes, but basically it boils down to:\n\n> Don't be an ass, or you might get banned.\n\nI'm proud to say that the CoC has never had to be enforced because everyone has\nbeen awesome, friendly, and professional.\n\n.. _GitHub: https://github.com/the-paperless-project/paperless/issues\n.. _very well documented: https://www.python.org/dev/peps/pep-0008/\n.. _code of conduct: https://github.com/the-paperless-project/paperless/blob/master/CODE_OF_CONDUCT.md\n"
  },
  {
    "path": "docs/customising.rst",
    "content": ".. _customising:\n\nCustomising Paperless\n#####################\n\nCurrently, the Paperless' interface is just the default Django admin, which\nwhile powerful, is rather boring.  If you'd like to give the site a bit of a\nface-lift, or if you simply want to adjust the colours, contrast, or font size\nto make things easier to read, you can do that by adding your own CSS or\nJavascript quite easily.\n\n\n.. _customising-overrides:\n\nOverrides\n=========\n\nOn every page load, Paperless looks for two files in your media root directory\n(the directory defined by your ``PAPERLESS_MEDIADIR`` configuration variable or\nthe default, ``<project root>/media/``) for two files:\n\n* ``overrides.css``\n* ``overrides.js``\n\nIf it finds either or both of those files, they'll be loaded into the page: the\nCSS in the ``<head>``, and the Javascript stuffed into the last line of the\n``<body>``.\n\n\n.. _customising-overrides-note:\n\nAn important note about customisation\n-------------------------------------\n\nAny changes you make to the site with your CSS or Javascript are likely to\ndepend on the structure of the current HTML and/or the existing CSS rules.  For\nthe most part it's safe to assume that these bits won't change, but *sometimes\nthey do* as features are added or bugs are fixed.\n\nIf you make a change that you think others would appreciate though, submit it\nas a pull request and maybe we can find a way to work it into the project by\ndefault!"
  },
  {
    "path": "docs/examples/lxc/lxc-install.sh",
    "content": "#!/usr/bin/env bash\n\n# Bash script to install paperless in lxc containter\n# paperless.lan\n#\n# Will set-up paperless, apache2 and proftpd\n#\n# lxc launch ubuntu: paperless\n# lxc exec paperless -- sh -c \"sudo apt-get update && sudo apt-get install -y wget\"\n# lxc exec paperless -- sh -c \"wget https://raw.githubusercontent.com/the-paperless-project/paperless/master/docs/examples/lxc/lxc-install.sh && /bin/bash lxc-install.sh --email \"\n#\n#\nset +e\nPASSWORD=$(< /dev/urandom tr -dc _A-Z-a-z-0-9+@%^{} | head -c20;echo;)\nEMAIL=\n\nfunction displayHelp() {\n    echo \"available parameters:\n    -e <email> | --email <email> \n    -p <password> | --password <password>\n    \"\n}\n\nPOSITIONAL=()\nwhile [[ $# -gt 0 ]]\ndo\nkey=\"$1\"\ni=$key\n\ncase $i in\n    -e|--email)\n      EMAIL=\"${2}\"\n      shift\n      shift\n    ;;\n    -p|--password)\n      PASSWORD=\"${2}\"\n      shift\n      shift\n    ;;\n    --default|-h|--help)\n      shift\n      displayHelp\n      exit 0\n    ;;\n    *)\n      echo \"argument: $i not recognized\"\n      exit 2\n    ;;\nesac\ndone\nset -- \"${POSITIONAL[@]}\" # restore positional parameters\n\nif [ -z $EMAIL ]; then\n  echo \"missing email, try running with -h \"\n  exit 3\nfi\nif [[ $(/usr/bin/id -u) -ne 0 ]]; then\n    echo \"Not running as root\"\n    exit\nfi\n\nif [ $(grep -c paperless /etc/passwd) -eq 0 ]; then\n  # Add paperless user with no password\n  adduser --disabled-password --gecos \"\" paperless\nfi\n\nif [ $(grep -c ftpupload /etc/passwd) -eq 0 ]; then\n  # Add ftpupload\n  adduser --disabled-password --gecos \"\" ftpupload\n  echo \"Set ftpupload password: \"\n  #passwd ftpupload\n  #TODO: generate some password and allow parameter \n  echo \"ftpupload:ftpuploadpassword\" | chpasswd\nfi\n\nif [ $(id -nG paperless | grep -Fcw ftpupload) -eq 0 ]; then\n  # Allow paperless group to access\n  adduser paperless ftpupload\n  chmod g+w /home/ftpupload \nfi\n\n# Get apt up to date\napt-get update\n\n# Needed for plain Paperless\napt-get -y install unpaper gnupg libpoppler-cpp-dev python3-pyocr tesseract-ocr imagemagick optipng git\n\n# Needed for Apache\napt-get -y install apache2 libapache2-mod-wsgi-py3\n\nif [ ! -f /etc/proftpd/proftpd.conf ]; then\n  # Install ftp server and make sure all uplaoded files are owned by paperless\n  apt-get -y install proftpd\nfi\nif [ $(grep -c paperless /etc/proftpd/proftpd.conf) -eq 0 ]; then\n  cat <<EOF >> /etc/proftpd/proftpd.conf\n  <Directory /home/ftpupload/>\n    UserOwner   paperless\n    GroupOwner  paperless\n  </Directory>\nEOF\n  systemctl restart proftpd\nfi\n\n#Get Paperless from git \nsu -c \"cd /home/paperless ; git clone https://github.com/the-paperless-project/paperless\" paperless\n\n# Install Pip Requirements\napt-get -y install python3-pip python3-venv libpq-dev\ncd /home/paperless/paperless\npip3 install -r requirements.txt\n\n# Take paperless.conf.example and set consumuption dir (ftp dir)\nsed  -e '/PAPERLESS_CONSUMPTION_DIR=/s/=.*/=\\\"\\/home\\/ftpupload\\/\\\"/' \\\n     /home/paperless/paperless/paperless.conf.example  >/etc/paperless.conf\n\n# Update /etc/paperless.conf with PAPERLESS_SECRET_KEY\nSECRET=$(strings /dev/urandom | grep -o '[[:alnum:]]' | head -n 30 | tr -d '\\n'; echo)\nsed  -i \"s/#PAPERLESS_SECRET_KEY.*/PAPERLESS_SECRET_KEY=$SECRET/\" /etc/paperless.conf \n\n#Initialise the SQLite database \nsu -c \"cd /home/paperless/paperless/src/ ; ./manage.py migrate\" paperless\necho \"if superuser doesn't exists, create one with login: paperless and password: ${PASSWORD}\"\n#Create a user for your Paperless instance\nsu -c \"cd /home/paperless/paperless/src/ ; echo ./manage.py create_superuser_with_password --username paperless --email ${EMAIL} --password ${PASSWORD} --preserve\" paperless\nsu -c \"cd /home/paperless/paperless/src/ ; ./manage.py create_superuser_with_password --username paperless --email ${EMAIL} --password ${PASSWORD} --preserve\" paperless\n\nif [ ! -d /home/paperless/paperless/static ]; then\n  # 167 static files copied to '/home/paperless/paperless/static'.\n  su -c \"cd /home/paperless/paperless/src/ ; ./manage.py collectstatic\" paperless\nfi\n\nif [ ! -f /etc/apache2/sites-available/paperless.conf ]; then\n  # Set-up apache\n  cp /home/paperless/paperless/docs/examples/lxc/paperless.conf /etc/apache2/sites-available/\n  a2dissite 000-default.conf\n  a2ensite paperless.conf\n  systemctl reload apache2\nfi\n\nsed -e \"s:home/paperless/project/virtualenv/bin/python:usr/bin/python3:\" \\\n     /home/paperless/paperless/scripts/paperless-consumer.service \\\n     >/etc/systemd/system/paperless-consumer.service\n\nsed -i \"s:/home/paperless/project/src/manage.py:/home/paperless/paperless/src/manage.py:\" \\\n      /etc/systemd/system/paperless-consumer.service\n\n\nsystemctl enable paperless-consumer\nsystemctl start paperless-consumer\n\n# convert-im6.q16: not authorized\n# Security risk ?\n# https://stackoverflow.com/questions/42928765/convertnot-authorized-aaaa-error-constitute-c-readimage-453\nif [ -f /etc/ImageMagick-6/policy.xml ]; then\n  mv /etc/ImageMagick-6/policy.xml /etc/ImageMagick-6/policy.xmlout\nfi\n"
  },
  {
    "path": "docs/examples/lxc/paperless.conf",
    "content": "<VirtualHost *:80>\n    ServerName paperless.lan\n\n    Alias /static/ /home/paperless/paperless/static/\n    <Directory /home/paperless/paperless/static>\n        Require all granted\n    </Directory>\n\n    WSGIScriptAlias / /home/paperless/paperless/src/paperless/wsgi.py\n    WSGIDaemonProcess paperless.lan user=paperless group=paperless threads=5 python-path=/home/paperless/paperless/src \n    WSGIProcessGroup paperless.lan\n\n    <Directory /home/paperless/paperless/src/paperless>\n        <Files wsgi.py>\n            Require all granted\n        </Files>\n    </Directory>\n</VirtualHost>\n"
  },
  {
    "path": "docs/extending.rst",
    "content": ".. _extending:\n\nExtending Paperless\n===================\n\nFor the most part, Paperless is monolithic, so extending it is often best\nmanaged by way of modifying the code directly and issuing a pull request on\n`GitHub`_.  However, over time the project has been evolving to be a little\nmore \"pluggable\" so that users can write their own stuff that talks to it.\n\n.. _GitHub: https://github.com/the-paperless-project/paperless\n\n\n.. _extending-parsers:\n\nParsers\n-------\n\nYou can leverage Paperless' consumption model to have it consume files *other*\nthan ones handled by default like ``.pdf``, ``.jpg``, and ``.tiff``.  To do so,\nyou simply follow Django's convention of creating a new app, with a few key\nrequirements.\n\n\n.. _extending-parsers-parserspy:\n\nparsers.py\n..........\n\nIn this file, you create a class that extends\n``documents.parsers.DocumentParser`` and go about implementing the three\nrequired methods:\n\n* ``get_thumbnail()``: Returns the path to a file we can use as a thumbnail for\n  this document.\n* ``get_text()``: Returns the text from the document and only the text.\n* ``get_date()``: If possible, this returns the date of the document, otherwise\n  it should return ``None``.\n\n\n.. _extending-parsers-signalspy:\n\nsignals.py\n..........\n\nAt consumption time, Paperless emits a ``document_consumer_declaration``\nsignal which your module has to react to in order to let the consumer know\nwhether or not it's capable of handling a particular file.  Think of it like\nthis:\n\n1. Consumer finds a file in the consumption directory.\n2. It asks all the available parsers: *\"Hey, can you handle this file?\"*\n3. Each parser responds with either ``None`` meaning they can't handle the\n   file, or a dictionary in the following format:\n\n.. code:: python\n\n    {\n        \"parser\": <the class name>,\n        \"weight\": <an integer>\n    }\n\nThe consumer compares the ``weight`` values from all respondents and uses the\nclass with the highest value to consume the document.  The default parser,\n``RasterisedDocumentParser`` has a weight of ``0``.\n\n\n.. _extending-parsers-appspy:\n\napps.py\n.......\n\nThis is a standard Django file, but you'll need to add some code to it to\nconnect your parser to the ``document_consumer_declaration`` signal.\n\n\n.. _extending-parsers-finally:\n\nFinally\n.......\n\nThe last step is to update ``settings.py`` to include your new module.\nEventually, this will be dynamic, but at the moment, you have to edit the\n``INSTALLED_APPS`` section manually.  Simply add the path to your AppConfig to\nthe list like this:\n\n.. code:: python\n\n    INSTALLED_APPS = [\n        ...\n        \"my_module.apps.MyModuleConfig\",\n        ...\n    ]\n\nOrder doesn't matter, but generally it's a good idea to place your module lower\nin the list so that you don't end up accidentally overriding project defaults\nsomewhere.\n\n\n.. _extending-parsers-example:\n\nAn Example\n..........\n\nThe core Paperless functionality is based on this design, so if you want to see\nwhat a parser module should look like, have a look at `parsers.py`_,\n`signals.py`_, and `apps.py`_ in the `paperless_tesseract`_ module.\n\n.. _parsers.py: https://github.com/the-paperless-project/paperless/blob/master/src/paperless_tesseract/parsers.py\n.. _signals.py: https://github.com/the-paperless-project/paperless/blob/master/src/paperless_tesseract/signals.py\n.. _apps.py: https://github.com/the-paperless-project/paperless/blob/master/src/paperless_tesseract/apps.py\n.. _paperless_tesseract: https://github.com/the-paperless-project/paperless/blob/master/src/paperless_tesseract/\n"
  },
  {
    "path": "docs/guesswork.rst",
    "content": ".. _guesswork:\n\nGuesswork\n#########\n\nDuring the consumption process, Paperless tries to guess some of the attributes\nof the document it's looking at.  To do this it uses two approaches:\n\n\n.. _guesswork-naming:\n\nFile Naming\n===========\n\nAny document you put into the consumption directory will be consumed, but if\nyou name the file right, it'll automatically set some values in the database\nfor you.  This is is the logic the consumer follows:\n\n1. Try to find the correspondent, title, and tags in the file name following\n   the pattern: ``Date - Correspondent - Title - tag,tag,tag.pdf``.  Note that\n   the format of the date is **rigidly defined** as ``YYYYMMDDHHMMSSZ`` or\n   ``YYYYMMDDZ``.  The ``Z`` refers \"Zulu time\" AKA \"UTC\".\n   The tags are optional, so the format ``Date - Correspondent - Title.pdf``\n   works as well.\n2. If that doesn't work, we skip the date and try this pattern:\n   ``Correspondent - Title - tag,tag,tag.pdf``.\n3. If that doesn't work, we try to find the correspondent and title in the file\n   name following the pattern: ``Correspondent - Title.pdf``.\n4. If that doesn't work, just assume that the name of the file is the title.\n\nSo given the above, the following examples would work as you'd expect:\n\n* ``20150314000700Z - Some Company Name - Invoice 2016-01-01 - money,invoices.pdf``\n* ``20150314Z - Some Company Name - Invoice 2016-01-01 - money,invoices.pdf``\n* ``Some Company Name - Invoice 2016-01-01 - money,invoices.pdf``\n* ``Another Company - Letter of Reference.jpg``\n* ``Dad's Recipe for Pancakes.png``\n\nThese however wouldn't work:\n\n* ``2015-03-14 00:07:00 UTC - Some Company Name, Invoice 2016-01-01, money, invoices.pdf``\n* ``2015-03-14 - Some Company Name, Invoice 2016-01-01, money, invoices.pdf``\n* ``Some Company Name, Invoice 2016-01-01, money, invoices.pdf``\n* ``Another Company- Letter of Reference.jpg``\n\nDo I have to be so strict about naming?\n---------------------------------------\nRather than using the strict document naming rules, one can also set the option\n``PAPERLESS_FILENAME_DATE_ORDER`` in ``paperless.conf`` to any date order\nthat is accepted by dateparser_. Doing so will cause ``paperless`` to default\nto any date format that is found in the title, instead of a date pulled from\nthe document's text, without requiring the strict formatting of the document\nfilename as described above.\n\n.. _dateparser: https://github.com/scrapinghub/dateparser/blob/v0.7.0/docs/usage.rst#settings\n\nTransforming filenames for parsing\n----------------------------------\nSome devices can't produce filenames that can be parsed by the default\nparser. By configuring the option ``PAPERLESS_FILENAME_PARSE_TRANSFORMS`` in\n``paperless.conf`` one can add transformations that are applied to the filename\nbefore it's parsed.\n\nThe option contains a list of dictionaries of regular expressions (key:\n``pattern``) and replacements (key: ``repl``) in JSON format, which are\napplied in order by passing them to ``re.subn``. Transformation stops\nafter the first match, so at most one transformation is applied. The general\nsyntax is\n\n.. code:: python\n\n   [{\"pattern\":\"pattern1\", \"repl\":\"repl1\"}, {\"pattern\":\"pattern2\", \"repl\":\"repl2\"}, ..., {\"pattern\":\"patternN\", \"repl\":\"replN\"}]\n\nThe example below is for a Brother ADS-2400N, a scanner that allows\ndifferent names to different hardware buttons (useful for handling\nmultiple entities in one instance), but insists on adding ``_<count>``\nto the filename.\n\n.. code:: python\n\n   # Brother profile configuration, support \"Name_Date_Count\" (the default\n   # setting) and \"Name_Count\" (use \"Name\" as tag and \"Count\" as title).\n   PAPERLESS_FILENAME_PARSE_TRANSFORMS=[{\"pattern\":\"^([a-z]+)_(\\\\d{8})_(\\\\d{6})_([0-9]+)\\\\.\", \"repl\":\"\\\\2\\\\3Z - \\\\4 - \\\\1.\"}, {\"pattern\":\"^([a-z]+)_([0-9]+)\\\\.\", \"repl\":\" - \\\\2 - \\\\1.\"}]\n\n.. _guesswork-content:\n\nReading the Document Contents\n=============================\n\nAfter the consumer has tried to figure out what it could from the file name,\nit starts looking at the content of the document itself.  It will compare the\nmatching algorithms defined by every tag and correspondent already set in your\ndatabase to see if they apply to the text in that document.  In other words,\nif you defined a tag called ``Home Utility`` that had a ``match`` property of\n``bc hydro`` and a ``matching_algorithm`` of ``literal``, Paperless will\nautomatically tag your newly-consumed document with your ``Home Utility`` tag\nso long as the text ``bc hydro`` appears in the body of the document somewhere.\n\nThe matching logic is quite powerful, and supports searching the text of your\ndocument with different algorithms, and as such, some experimentation may be\nnecessary to get things Just Right.\n\n\n.. _guesswork-content-howto:\n\nHow Do I Set Up These Matching Algorithms?\n------------------------------------------\n\nSetting up of the algorithms is easily done through the admin interface.  When\nyou create a new correspondent or tag, there are optional fields for matching\ntext and matching algorithm.  From the help info there:\n\n.. note::\n\n    Which algorithm you want to use when matching text to the OCR'd PDF.  Here,\n    \"any\" looks for any occurrence of any word provided in the PDF, while \"all\"\n    requires that every word provided appear in the PDF, albeit not in the\n    order provided.  A \"literal\" match means that the text you enter must\n    appear in the PDF exactly as you've entered it, and \"regular expression\"\n    uses a regex to match the PDF.  If you don't know what a regex is, you\n    probably don't want this option.\n\nWhen using the \"any\" or \"all\" matching algorithms, you can search for terms\nthat consist of multiple words by enclosing them in double quotes. For example,\ndefining a match text of ``\"Bank of America\" BofA`` using the \"any\" algorithm,\nwill match documents that contain either \"Bank of America\" or \"BofA\", but will\nnot match documents containing \"Bank of South America\".\n\nThen just save your tag/correspondent and run another document through the\nconsumer.  Once complete, you should see the newly-created document,\nautomatically tagged with the appropriate data.\n"
  },
  {
    "path": "docs/index.rst",
    "content": ".. _index:\n\nPaperless\n=========\n\nPaperless is a simple Django application running in two parts:\na :ref:`consumer <utilities-consumer>` (the thing that does the indexing) and\nthe :ref:`webserver <utilities-webserver>` (the part that lets you search &\ndownload already-indexed documents). If you want to learn more about its\nfunctions keep on reading after the installation section.\n\n\n.. _index-why-this-exists:\n\nWhy This Exists\n===============\n\nPaper is a nightmare.  Environmental issues aside, there's no excuse for it in\nthe 21st century.  It takes up space, collects dust, doesn't support any form\nof a search feature, indexing is tedious, it's heavy and prone to damage &\nloss.\n\nI wrote this to make \"going paperless\" easier.  I do not have to worry about\nfinding stuff again. I feed documents right from the post box into the scanner\nand then shred them.  Perhaps you might find it useful too.\n\n\n\n\nContents\n========\n\n.. toctree::\n   :maxdepth: 2\n\n   requirements\n   setup\n   consumption\n   api\n   utilities\n   guesswork\n   migrating\n   customising\n   extending\n   troubleshooting\n   contributing\n   scanners\n   screenshots\n   changelog\n"
  },
  {
    "path": "docs/migrating.rst",
    "content": ".. _migrating:\n\nMigrating, Updates, and Backups\n===============================\n\nAs Paperless is still under active development, there's a lot that can change\nas software updates roll out.  You should backup often, so if anything goes\nwrong during an update, you at least have a means of restoring to something\nusable.  Thankfully, there are automated ways of backing up, restoring, and\nupdating the software.\n\n\n.. _migrating-backup:\n\nBacking Up\n----------\n\nSo you're bored of this whole project, or you want to make a remote backup of\nyour files for whatever reason.  This is easy to do, simply use the\n:ref:`exporter <utilities-exporter>` to dump your documents and database out\ninto an arbitrary directory.\n\n\n.. _migrating-restoring:\n\nRestoring\n---------\n\nRestoring your data is just as easy, since nearly all of your data exists either\nin the file names, or in the contents of the files themselves.  You just need to\ncreate an empty database (just follow the\n:ref:`installation instructions <setup-installation>` again) and then import the\n``tags.json`` file you created as part of your backup.  Lastly, copy your\nexported documents into the consumption directory and start up the consumer.\n\n.. code-block:: shell-session\n\n    $ cd /path/to/project\n    $ rm data/db.sqlite3  # Delete the database\n    $ cd src\n    $ ./manage.py migrate  # Create the database\n    $ ./manage.py createsuperuser\n    $ ./manage.py loaddata /path/to/arbitrary/place/tags.json\n    $ cp /path/to/exported/docs/* /path/to/consumption/dir/\n    $ ./manage.py document_consumer\n\nImporting your data if you are :ref:`using Docker <setup-installation-docker>`\nis almost as simple:\n\n.. code-block:: shell-session\n\n    # Stop and remove your current containers\n    $ docker-compose stop\n    $ docker-compose rm -f\n\n    # Recreate them, add the superuser\n    $ docker-compose up -d\n    $ docker-compose run --rm webserver createsuperuser\n\n    # Load the tags\n    $ cat /path/to/arbitrary/place/tags.json | docker-compose run --rm webserver loaddata_stdin -\n\n    # Load your exported documents into the consumption directory\n    # (How you do this highly depends on how you have set this up)\n    $ cp /path/to/exported/docs/* /path/to/mounted/consumption/dir/\n\nAfter loading the documents into the consumption directory the consumer will\nimmediately start consuming the documents.\n\n\n.. _migrating-updates:\n\nUpdates\n-------\n\nFor the most part, all you have to do to update Paperless is run ``git pull``\non the directory containing the project files, and then use Django's\n``migrate`` command to execute any database schema updates that might have been\nrolled in as part of the update:\n\n.. code-block:: shell-session\n\n    $ cd /path/to/project\n    $ git pull\n    $ pip install -r requirements.txt\n    $ cd src\n    $ ./manage.py migrate\n\nNote that it's possible (even likely) that while ``git pull`` may update some\nfiles, the ``migrate`` step may not update anything.  This is totally normal.\n\nAdditionally, as new features are added, the ability to control those features\nis typically added by way of an environment variable set in ``paperless.conf``.\nYou may want to take a look at the ``paperless.conf.example`` file to see if\nthere's anything new in there compared to what you've got in ``/etc``.\n\nIf you are :ref:`using Docker <setup-installation-docker>` the update process\nis similar:\n\n.. code-block:: shell-session\n\n    $ cd /path/to/project\n    $ git pull\n    $ docker build -t paperless .\n    $ docker-compose run --rm consumer migrate\n    $ docker-compose up -d\n\nIf ``git pull`` doesn't report any changes, there is no need to continue with\nthe remaining steps.\n"
  },
  {
    "path": "docs/requirements.rst",
    "content": ".. _requirements:\n\nRequirements\n============\n\nYou need a Linux machine or Unix-like setup (theoretically an Apple machine\nshould work) that has the following software installed:\n\n* `Python3`_ (with development libraries, pip and virtualenv)\n* `GNU Privacy Guard`_\n* `Tesseract`_, plus its language files matching your document base.\n* `Imagemagick`_ version 6.7.5 or higher\n* `unpaper`_\n* `libpoppler-cpp-dev`_ PDF rendering library\n* `optipng`_\n\n.. _Python3: https://python.org/\n.. _GNU Privacy Guard: https://gnupg.org\n.. _Tesseract: https://github.com/tesseract-ocr\n.. _Imagemagick: http://imagemagick.org/\n.. _unpaper: https://github.com/unpaper/unpaper\n.. _libpoppler-cpp-dev: https://poppler.freedesktop.org/\n.. _optipng: http://optipng.sourceforge.net/\n\nNotably, you should confirm how you access your Python3 installation.  Many\nLinux distributions will install Python3 in parallel to Python2, using the\nnames ``python3`` and ``python`` respectively.  The same goes for ``pip3`` and\n``pip``.  Running Paperless with Python2 will likely break things, so make sure\nthat you're using the right version.\n\nFor the purposes of simplicity, ``python`` and ``pip`` is used everywhere to\nrefer to their Python3 versions.\n\nIn addition to the above, there are a number of Python requirements, all of\nwhich are listed in a file called ``requirements.txt`` in the project root\ndirectory.\n\nIf you're not working on a virtual environment (like Docker), you\nshould probably be using a virtualenv, but that's your call.  The reasons why\nyou might choose a virtualenv or not aren't really within the scope of this\ndocument.  Needless to say if you don't know what a virtualenv is, you should\nprobably figure that out before continuing.\n\n\n.. _requirements-apple:\n\nProblems with Imagemagick & PDFs\n--------------------------------\n\nSome users have `run into problems`_ with getting ImageMagick to do its thing\nwith PDFs.  Often this is the case with Apple systems using HomeBrew, but other\nLinuxes have been a problem as well.  The solution appears to be to install\nghostscript as well as ImageMagick:\n\n.. _run into problems: https://github.com/the-paperless-project/paperless/issues/25\n\n.. code:: bash\n\n    $ brew install ghostscript\n    $ brew install imagemagick\n    $ brew install libmagic\n\n\n.. _requirements-baremetal:\n\nPython-specific Requirements: No Virtualenv\n-------------------------------------------\n\nIf you don't care to use a virtual env, then installation of the Python\ndependencies is easy:\n\n.. code:: bash\n\n    $ pip install --user --requirement /path/to/paperless/requirements.txt\n\nThis will download and install all of the requirements into\n``${HOME}/.local``.  Remember that your distribution may be using ``pip3`` as\nmentioned above.\n\n\n.. _requirements-virtualenv:\n\nPython-specific Requirements: Virtualenv\n----------------------------------------\n\nUsing a virtualenv for this is pretty straightforward: create a virtualenv,\nenter it, and install the requirements using the ``requirements.txt`` file:\n\n.. code:: bash\n\n    $ virtualenv --python=/path/to/python3 /path/to/arbitrary/directory\n    $ . /path/to/arbitrary/directory/bin/activate\n    $ pip install  --requirement /path/to/paperless/requirements.txt\n\nNow you're ready to go.  Just remember to enter (activate) your virtualenv\nwhenever you want to use Paperless.\n\n\n.. _requirements-documentation:\n\nDocumentation\n-------------\n\nAs generation of the documentation is not required for the use of Paperless,\ndependencies for this process are not included in ``requirements.txt``.  If\nyou'd like to generate your own docs locally, you'll need to:\n\n.. code:: bash\n\n    $ pip install sphinx\n\nand then cd into the ``docs`` directory and type ``make html``.\n\nIf you are using Docker, you can use the following commands to build the\ndocumentation and run a webserver serving it on `port 8001`_:\n\n.. code:: bash\n\n    $ pwd\n    /path/to/paperless\n\n    $ docker build -t paperless:docs -f docs/Dockerfile .\n    $ docker run --rm -it -p \"8001:8000\" paperless:docs\n\n.. _port 8001: http://127.0.0.1:8001\n"
  },
  {
    "path": "docs/requirements.txt",
    "content": ""
  },
  {
    "path": "docs/scanners.rst",
    "content": ".. _scanners:\n\nScanner Recommendations\n=======================\n\nAs Paperless operates by watching a folder for new files, doesn't care what\nscanner you use, but sometimes finding a scanner that will write to an FTP,\nNFS, or SMB server can be difficult.  This page is here to help you find one\nthat works right for you based on recommentations from other Paperless users.\n\nPhysical scanners\n-----------------\n\n+---------+----------------+-----+-----+-----+----------------+\n| Brand   | Model          | Supports        | Recommended By |\n+---------+----------------+-----+-----+-----+----------------+\n|         |                | FTP | NFS | SMB |                |\n+=========+================+=====+=====+=====+================+\n| Brother | `ADS-1500W`_   | yes | no  | yes | `danielquinn`_ |\n+---------+----------------+-----+-----+-----+----------------+\n| Brother | `MFC-J6930DW`_ | yes |     |     | `ayounggun`_   |\n+---------+----------------+-----+-----+-----+----------------+\n| Brother | `MFC-J5910DW`_ | yes |     |     | `bmsleight`_   |\n+---------+----------------+-----+-----+-----+----------------+\n| Brother | `MFC-9142CDN`_ | yes |     | yes | `REOLDEV`_     |\n+---------+----------------+-----+-----+-----+----------------+\n| Fujitsu | `ix500`_       | yes |     | yes | `eonist`_      |\n+---------+----------------+-----+-----+-----+----------------+\n\n.. _ADS-1500W: https://www.brother.ca/en/p/ads1500w\n.. _MFC-J6930DW: https://www.brother.ca/en/p/MFCJ6930DW\n.. _MFC-J5910DW: https://www.brother.co.uk/printers/inkjet-printers/mfcj5910dw\n.. _MFC-9142CDN: https://www.brother.co.uk/printers/laser-printers/mfc9140cdn\n.. _ix500: http://www.fujitsu.com/us/products/computing/peripheral/scanners/scansnap/ix500/\n\n.. _danielquinn: https://github.com/danielquinn\n.. _ayounggun: https://github.com/ayounggun\n.. _bmsleight: https://github.com/bmsleight\n.. _eonist: https://github.com/eonist\n.. _REOLDEV: https://github.com/REOLDEV\n\nMobile phone software\n-----------------------\n\nYou can use your phone to \"scan\" documents. The regular camera app will work, but may have too low contrast for OCR to work well. Apps specifically for scanning are recommended.\n\n+-------------------+----------------+-----+-----+-----+-------+--------+----------------+\n| Name              | OS             | Supports                         | Recommended By |\n+-------------------+----------------+-----+-----+-----+-------+--------+----------------+\n|                   |                | FTP | NFS | SMB | Email | WebDav |                |\n+===================+================+=====+=====+=====+=======+========+================+\n| `Genius Scan`_    | Android        | yes | no  | yes | yes   | yes    | `hannahswain`_ |\n+-------------------+----------------+-----+-----+-----+-------+--------+----------------+\n\n\n.. _Genius Scan: https://play.google.com/store/apps/details?id=com.thegrizzlylabs.geniusscan.free\n\n.. _hannahswain: https://github.com/hannahswain\n"
  },
  {
    "path": "docs/screenshots.rst",
    "content": ".. _screenshots:\n\nScreenshots\n===========\n\nOnce everything is set-up login to paperless using the web front-end\n\n.. image:: ./_static/Screenshot_first_run_login.png \n\nNice clean interface\n\n.. image:: ./_static/Screenshot_first_logged.png \n\nSome documents loaded in via ftp or using the scanners ftp. \n\n.. image:: ./_static/Screenshot_upload_and_scanned.png \n"
  },
  {
    "path": "docs/setup.rst",
    "content": ".. _setup:\n\nSetup\n=====\n\nPaperless isn't a very complicated app, but there are a few components, so some\nbasic documentation is in order.  If you follow along in this document and\nstill have trouble, please open an `issue on GitHub`_ so I can fill in the\ngaps.\n\n.. _issue on GitHub: https://github.com/the-paperless-project/paperless/issues\n\n\n.. _setup-download:\n\nDownload\n--------\n\nThe source is currently only available via GitHub, so grab it from there,\neither by using ``git``:\n\n.. code:: bash\n\n    $ git clone https://github.com/the-paperless-project/paperless.git\n    $ cd paperless\n\nor just download the tarball and go that route:\n\n.. code:: bash\n\n    $ cd to the directory where you want to run Paperless\n    $ wget https://github.com/the-paperless-project/paperless/archive/master.zip\n    $ unzip master.zip\n    $ cd paperless-master\n\n\n.. _setup-installation:\n\nInstallation & Configuration\n----------------------------\n\nYou can go multiple routes with setting up and running Paperless:\n\n * The `bare metal route`_\n * The `docker route`_\n * A suggested `linux containers route`_\n\n\nThe `docker route`_ is quick & easy.\n\nThe `bare metal route`_ is a bit more complicated to setup but makes it easier\nshould you want to contribute some code back.\n\nThe `linux containers route`_ is quick, but makes alot of assumptions on the \nset-up, on the other hand the script could be used to install on a base\ndebian or ubuntu server.\n\n.. _docker route: setup-installation-docker_\n.. _bare metal route: setup-installation-bare-metal_\n.. _Docker Machine: https://docs.docker.com/machine/\n.. _linux containers route: setup-installation-linux-containers_\n\n.. _setup-installation-bare-metal:\n\nStandard (Bare Metal)\n+++++++++++++++++++++\n\n1. Install the requirements as per the :ref:`requirements <requirements>` page.\n2. Within the extract of master.zip go to the ``src`` directory.\n3. Copy ``../paperless.conf.example`` to ``/etc/paperless.conf`` and open it in\n   your favourite editor.  As this file contains passwords.  It should only be\n   readable by user root and paperless!  Set the values for:\n\n   Set the values for:\n\n    * ``PAPERLESS_CONSUMPTION_DIR``: this is where your documents will be\n      dumped to be consumed by Paperless.\n    * ``PAPERLESS_OCR_THREADS``: this is the number of threads the OCR process\n      will spawn to process document pages in parallel.\n    * ``PAPERLESS_PASSPHRASE``: this is only required if you want to use GPG to\n      encrypt your document files.  This is the passphrase Paperless uses to\n      encrypt/decrypt the original documents.  Don't worry about defining this\n      if you don't want to use encryption (the default).\n\n   Note also that if you're using the ``runserver`` as mentioned below, you\n   should make sure that PAPERLESS_DEBUG=\"true\" or is just commented out as\n   this is the default.\n\n4. Initialise the SQLite database with ``./manage.py migrate``.\n5. Collect the static files for the webserver with ``./manage.py collectstatic``.\n6. Create a user for your Paperless instance with\n   ``./manage.py createsuperuser``. Follow the prompts to create your user.\n7. Start the webserver with ``./manage.py runserver <IP>:<PORT>``.\n   If no specific IP or port is given, the default is ``127.0.0.1:8000`` also\n   known as http://localhost:8000/.\n   You should now be able to visit your (empty) installation at\n   `Paperless webserver`_ or whatever you chose before.  You can login with the\n   user/pass you created in #5.\n\n8. In a separate window, change to the ``src`` directory in this repo again,\n   but this time, you should start the consumer script with\n   ``./manage.py document_consumer``.\n9. Scan something or put a file into the  ``CONSUMPTION_DIR``.\n10. Wait a few minutes\n11. Visit the document list on your webserver, and it should be there, indexed\n    and downloadable.\n\n.. caution::\n\n    This installation is not secure. Once everything is working head over to\n    `Making things more permanent`_\n\n.. _Paperless webserver: http://127.0.0.1:8000\n.. _Making things more permanent: setup-permanent_\n\n.. _setup-installation-docker:\n\nDocker Method\n+++++++++++++\n\n1. Install `Docker`_.\n\n   .. caution::\n\n      As mentioned earlier, this guide assumes that you use Docker natively\n      under Linux. If you are using `Docker Machine`_ under Mac OS X or\n      Windows, you will have to adapt IP addresses, volume-mounting, command\n      execution and maybe more.\n\n2. Install `docker-compose`_. [#compose]_\n\n   .. caution::\n\n       If you want to use the included ``docker-compose.yml.example`` file, you\n       need to have at least Docker version **1.12.0** and docker-compose\n       version **1.9.0**.\n\n       See the `Docker installation guide`_ on how to install the current\n       version of Docker for your operating system or Linux distribution of\n       choice. To get an up-to-date version of docker-compose, follow the\n       `docker-compose installation guide`_ if your package repository doesn't\n       include it.\n\n       .. _Docker installation guide: https://docs.docker.com/engine/installation/\n       .. _docker-compose installation guide: https://docs.docker.com/compose/install/\n\n3. Create a copy of ``docker-compose.yml.example`` as ``docker-compose.yml``\n   and a copy of ``docker-compose.env.example`` as ``docker-compose.env``.\n   You'll be editing both these files: taking a copy ensures that you can\n   ``git pull`` to receive updates without risking merge conflicts with your\n   modified versions of the configuration files.\n4. Modify ``docker-compose.yml`` to your preferences, following the\n   instructions in comments in the file. The only change that is a hard\n   requirement is to specify where the consumption directory should\n   mount.[#dockercomposeyml]_\n\n\t .. caution::\n\n\t     If you are using NFS mounts for the consume directory you also need to\n\t\t\t change the command to turn off inotify as it doesn't work with NFS\n\n\t\t\t ``command: [\"document_consumer\", \"--no-inotify\"]``\n\n\n5. Modify ``docker-compose.env`` and adapt the following environment variables:\n\n   ``PAPERLESS_PASSPHRASE``\n     This is the passphrase Paperless uses to encrypt/decrypt the original\n     document.  If you aren't planning on using GPG encryption, you can just\n     leave this undefined.\n\n   ``PAPERLESS_OCR_THREADS``\n     This is the number of threads the OCR process will spawn to process\n     document pages in parallel. If the variable is not set, Python determines\n     the core-count of your CPU and uses that value.\n\n   ``PAPERLESS_OCR_LANGUAGES``\n     If you want the OCR to recognize other languages in addition to the\n     default English, set this parameter to a space separated list of\n     three-letter language-codes after `ISO 639-2/T`_. For a list of available\n     languages -- including their three letter codes -- see the\n     `Alpine packagelist`_.\n\n   ``USERMAP_UID`` and ``USERMAP_GID``\n     If you want to mount the consumption volume (directory ``/consume`` within\n     the containers) to a host-directory -- which you probably want to do --\n     access rights might be an issue. The default user and group ``paperless``\n     in the containers have an id of 1000. The containers will enforce that the\n     owning group of the consumption directory will be ``paperless`` to be able\n     to delete consumed documents. If your host-system has a group with an ID\n     of 1000 and you don't want this group to have access rights to the\n     consumption directory, you can use ``USERMAP_GID`` to change the id in the\n     container and thus the one of the consumption directory. Furthermore, you\n     can change the id of the default user as well using ``USERMAP_UID``.\n\n  ``PAPERLESS_USE_SSL``\n    If you want Paperless to use SSL for the user interface, set this variable\n    to ``true``. You also need to copy your certificate and key to the ``data``\n    directory, named ``ssl.cert`` and ``ssl.key``.\n    This is not an ideal solution and, if possible, a reverse proxy with nginx\n    is preferred.\n\n6. Run ``docker-compose up -d``. This will create and start the necessary\n   containers.\n7. To be able to login, you will need a super user. To create it, execute the\n   following command:\n\n   .. code-block:: shell-session\n\n       $ docker-compose run --rm webserver createsuperuser\n\n   This will prompt you to set a username (default ``paperless``), an optional\n   e-mail address and finally a password.\n8. The default ``docker-compose.yml`` exports the webserver on your local port\n   8000. If you haven't adapted this, you should now be able to visit your\n   `Paperless webserver`_ at ``http://127.0.0.1:8000`` (or \n   ``https://127.0.0.1:8000`` if you enabled SSL). You can login with the\n   user and password you just created.\n9. Add files to consumption directory the way you prefer to. Following are two\n   possible options:\n\n   1. Mount the consumption directory to a local host path by modifying your\n      ``docker-compose.yml``:\n\n      .. code-block:: diff\n\n         diff --git a/docker-compose.yml b/docker-compose.yml\n         --- a/docker-compose.yml\n         +++ b/docker-compose.yml\n         @@ -17,9 +18,8 @@ services:\n                  volumes:\n                      - paperless-data:/usr/src/paperless/data\n                      - paperless-media:/usr/src/paperless/media\n         -            - /consume\n         +            - /local/path/you/choose:/consume\n\n      .. danger::\n\n          While the consumption container will ensure at startup that it can\n          **delete** a consumed file from a host-mounted directory, it might\n          not be able to **read** the document in the first place if the access\n          rights to the file are incorrect.\n\n          Make sure that the documents you put into the consumption directory\n          will either be readable by everyone (``chmod o+r file.pdf``) or\n          readable by the default user or group id 1000 (or the one you have\n          set with ``USERMAP_UID`` or ``USERMAP_GID`` respectively).\n\n   2. Use ``docker cp`` to copy your files directly into the container:\n\n      .. code-block:: shell-session\n\n         $ # Identify your containers\n         $ docker-compose ps\n                 Name                       Command                State     Ports\n         -------------------------------------------------------------------------\n         paperless_consumer_1    /sbin/docker-entrypoint.sh ...   Exit 0\n         paperless_webserver_1   /sbin/docker-entrypoint.sh ...   Exit 0\n\n         $ docker cp /path/to/your/file.pdf paperless_consumer_1:/consume\n\n      ``docker cp`` is a one-shot-command, just like ``cp``. This means that\n      every time you want to consume a new document, you will have to execute\n      ``docker cp`` again. You can of course automate this process, but option\n      1 is generally the preferred one.\n\n      .. danger::\n\n          ``docker cp`` will change the owning user and group of a copied file\n          to the acting user at the destination, which will be ``root``.\n\n          You therefore need to ensure that the documents you want to copy into\n          the container are readable by everyone (``chmod o+r file.pdf``)\n          before copying them.\n\n\n.. _Docker: https://www.docker.com/\n.. _docker-compose: https://docs.docker.com/compose/install/\n.. _ISO 639-2/T: https://en.wikipedia.org/wiki/List_of_ISO_639-1_codes\n.. _Alpine packagelist: https://pkgs.alpinelinux.org/packages?name=tesseract-ocr-data*&arch=x86_64\n\n.. [#compose] You of course don't have to use docker-compose, but it\n   simplifies deployment immensely. If you know your way around Docker, feel\n   free to tinker around without using compose!\n\n.. [#dockercomposeyml] If you're upgrading your docker-compose images from\n   version 1.1.0 or earlier, you might need to change in the\n   ``docker-compose.yml`` file the ``image: pitkley/paperless`` directive in\n   both the ``webserver`` and ``consumer`` sections to ``build: ./`` as per the\n   newer ``docker-compose.yml.example`` file\n\n\n.. _setup-permanent:\n\nMaking Things a Little more Permanent\n-------------------------------------\n\nOnce you've tested things and are happy with the work flow, you should secure\nthe installation and automate the process of starting the webserver and\nconsumer.\n\n\n.. _setup-permanent-webserver:\n\nUsing a Real Webserver\n++++++++++++++++++++++\n\nThe default is to use Django's development server, as that's easy and does the\njob well enough on a home network. However it is heavily discouraged to use\nit for more than that.\n\nIf you want to do things right you should use a real webserver capable of\nhandling more than one thread. You will also have to let the webserver serve\nthe static files (CSS, JavaScript) from the directory configured in\n``PAPERLESS_STATICDIR``.  The default static files directory is ``../static``.\n\nFor that you need to activate your virtual environment and collect the static\nfiles with the command:\n\n.. code:: bash\n\n    $ cd <paperless directory>/src\n    $ ./manage.py collectstatic\n\n\nApache\n~~~~~~\n\nThis is a configuration supplied by `steckerhalter`_ on GitHub.  It uses Apache\nand mod_wsgi, with a Paperless installation in ``/home/paperless/``:\n\n.. code:: apache\n\n    <VirtualHost *:80>\n        ServerName example.com\n\n        Alias /static/ /home/paperless/paperless/static/\n        <Directory /home/paperless/paperless/static>\n            Require all granted\n        </Directory>\n\n        WSGIScriptAlias / /home/paperless/paperless/src/paperless/wsgi.py\n        WSGIDaemonProcess example.com user=paperless group=paperless threads=5 python-path=/home/paperless/paperless/src:/home/paperless/.env/lib/python3.6/site-packages\n        WSGIProcessGroup example.com\n\n        <Directory /home/paperless/paperless/src/paperless>\n            <Files wsgi.py>\n                Require all granted\n            </Files>\n        </Directory>\n    </VirtualHost>\n\n.. _steckerhalter: https://github.com/steckerhalter\n\n\nNginx + Gunicorn\n~~~~~~~~~~~~~~~~\n\nIf you're using Nginx, the most common setup is to combine it with a\nPython-based server like Gunicorn so that Nginx is acting as a proxy.  Below is\na copy of a simple Nginx configuration fragment making use of a gunicorn\ninstance listening on localhost port 8000.\n\n.. code:: nginx\n\n    server {\n        listen 80;\n\n        index index.html index.htm index.php;\n        access_log /var/log/nginx/paperless_access.log;\n        error_log /var/log/nginx/paperless_error.log;\n\n        location /static {\n\n            autoindex on;\n            alias <path-to-paperless-static-directory>;\n\n        }\n\n        location / {\n\n            proxy_set_header Host $http_host;\n            proxy_set_header X-Real-IP $remote_addr;\n            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;\n            proxy_set_header X-Forwarded-Proto $scheme;\n\n            proxy_pass http://127.0.0.1:8000;\n        }\n    }\n\n\nThe gunicorn server can be started with the command:\n\n.. code-block:: shell\n\n    $ <path-to-paperless-virtual-environment>/bin/gunicorn --pythonpath=<path-to-paperless>/src paperless.wsgi -w 2\n\n\n.. _setup-permanent-standard-systemd:\n\nStandard (Bare Metal + Systemd)\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n\nIf you're running on a bare metal system that's using Systemd, you can use the\nservice unit files in the ``scripts`` directory to set this up.\n\n1. You'll need to create a group and user called ``paperless`` (without login)\n2. Setup Paperless to be in a place that this new user can read and write to.\n3. Ensure ``/etc/paperless`` is readable by the ``paperless`` user.\n4. Copy the service file from the ``scripts`` directory to\n   ``/etc/systemd/system``.\n\n.. code-block:: bash\n\n    $ cp /path/to/paperless/scripts/paperless-consumer.service /etc/systemd/system/\n    $ cp /path/to/paperless/scripts/paperless-webserver.service /etc/systemd/system/\n\n5. Edit the service file to point the ``ExecStart`` line to the proper location\n   of your paperless install, referencing the appropriate Python binary. For\n   example:\n   ``ExecStart=/path/to/python3 /path/to/paperless/src/manage.py document_consumer``.\n6. Start and enable (so they start on boot) the services.\n\n.. code-block:: bash\n\n    $ systemctl enable paperless-consumer\n    $ systemctl enable paperless-webserver\n    $ systemctl start paperless-consumer\n    $ systemctl start paperless-webserver\n\n\n.. _setup-permanent-standard-upstart:\n\nStandard (Bare Metal + Upstart)\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n\nUbuntu 14.04 and earlier use the `Upstart`_ init system to start services\nduring the boot process. To configure Upstart to run Paperless automatically\nafter restarting your system:\n\n1. Change to the directory where Upstart's configuration files are kept:\n   ``cd /etc/init``\n2. Create a new file: ``sudo nano paperless-server.conf``\n3. In the newly-created file enter::\n\n    start on (local-filesystems and net-device-up IFACE=eth0)\n    stop on shutdown\n\n    respawn\n    respawn limit 10 5\n\n    script\n      exec <path to paperless virtual environment>/bin/gunicorn --pythonpath=<path to parperless>/src paperless.wsgi -w 2\n    end script\n\n   Note that you'll need to replace ``/srv/paperless/src/manage.py`` with the\n   path to the ``manage.py`` script in your installation directory.\n\n  If you are using a network interface other than ``eth0``, you will have to\n  change ``IFACE=eth0``. For example, if you are connected via WiFi, you will\n  likely need to replace ``eth0`` above with ``wlan0``. To see all interfaces,\n  run ``ifconfig -a``.\n\n  Save the file.\n\n4. Create a new file: ``sudo nano paperless-consumer.conf``\n\n5. In the newly-created file enter::\n\n    start on (local-filesystems and net-device-up IFACE=eth0)\n    stop on shutdown\n\n    respawn\n    respawn limit 10 5\n\n    script\n      exec <path to paperless virtual environment>/bin/python <path to parperless>/manage.py document_consumer\n    end script\n\n  Replace the path placeholder and ``eth0`` with the appropriate value and save the file.\n\nThese two configuration files together will start both the Paperless webserver\nand document consumer processes when the file system and network interface\nspecified is available after boot. Furthermore, if either process ever exits\nunexpectedly, Upstart will try to restart it a maximum of 10 times within a 5\nsecond period.\n\n.. _Upstart: http://upstart.ubuntu.com/\n\n\n.. _setup-permanent-docker:\n\nDocker\n~~~~~~\n\nIf you're using Docker, you can set a restart-policy_ in the\n``docker-compose.yml`` to have the containers automatically start with the\nDocker daemon.\n\n.. _restart-policy: https://docs.docker.com/engine/reference/commandline/run/#restart-policies-restart\n\n\n.. _setup-installation-linux-containers:\n\nSuggested way for Linux Container Method\n++++++++++++++++++++++++++++++++++++++++\n\nThis method uses some rigid assumptions, for the best set-up:-\n\n * Ubuntu lts as the container\n * Apache as the webserver\n * proftpd as ftp server\n * ftpupload as the ftp user\n * paperless as the main user for website \n * http://paperless.lan is the desired lan url\n * LXC set to give ip addresses on your lan\n\nThis could also be used as an install on a base debain/ubuntu server, \nif the above assumptions are acceptable.\n\n1. Install lxc\n\n\n2. Lanch paperless container\n\n.. code:: bash\n\n    $ lxc launch ubuntu: paperless\n\n3. Run install script within container\n\n.. code:: bash\n\n    $ lxc exec paperless -- sh -c \"wget https://raw.githubusercontent.com/the-paperless-project/paperless/master/docs/examples/lxc/lxc-install.sh && /bin/bash lxc-install.sh --email\"\n\nThe script will ask you for an ftpupload password.  \nAs well as the super-user for paperless web front-end. \nAfter around 10 mins, http://paperless.lan is ready and\nftp://paperless.lan with user: ftpupload\n\nSee the `Installation recording <_static/lxc-install.svg>`_.\n\n"
  },
  {
    "path": "docs/troubleshooting.rst",
    "content": ".. _troubleshooting:\n\nTroubleshooting\n===============\n\n.. _troubleshooting-languagemissing:\n\nConsumer warns ``OCR for XX failed``\n------------------------------------\n\nIf you find the OCR accuracy to be too low, and/or the document consumer warns\nthat ``OCR for XX failed, but we're going to stick with what we've got since\nFORGIVING_OCR is enabled``, then you might need to install the\n`Tesseract language files <http://packages.ubuntu.com/search?keywords=tesseract-ocr>`_\nmarching your document's languages.\n\nAs an example, if you are running Paperless from any Ubuntu or Debian\nbox, and your documents are written in Spanish you may need to run::\n\n    apt-get install -y tesseract-ocr-spa\n\n\n.. _troubleshooting-convertpixelcache:\n\nConsumer dies with ``convert: unable to extent pixel cache``\n------------------------------------------------------------\n\nDuring the consumption process, Paperless invokes ImageMagick's ``convert``\nprogram to translate the source document into something that the OCR engine can\nunderstand and this can burn a Very Large amount of memory if the original\ndocument is rather long.  Similarly, if your system doesn't have a lot of\nmemory to begin with (ie. a Raspberry Pi), then this can happen for even\nmedium-sized documents.\n\nThe solution is to tell ImageMagick *not* to Use All The RAM, as is its\ndefault, and instead tell it to used a fixed amount.  ``convert`` will then\nbreak up the job into hundreds of individual files and use them to slowly\ncompile the finished image.  Simply set ``PAPERLESS_CONVERT_MEMORY_LIMIT`` in\n``/etc/paperless.conf`` to something like ``32000000`` and you'll limit\n``convert`` to 32MB.  Fiddle with this value as you like.\n\n**HOWEVER**: Simply setting this value may not be enough on system where\n``/tmp`` is mounted as tmpfs, as this is where ``convert`` will write its\ntemporary files.  In these cases (most Systemd machines), you need to tell\nImageMagick to use a different space for its scratch work.  You do this by\nsetting ``PAPERLESS_CONVERT_TMPDIR`` in ``/etc/paperless.conf`` to somewhere\nthat's actually on a physical disk (and writable by the user running\nPaperless), like ``/var/tmp/paperless`` or ``/home/my_user/tmp`` in a pinch.\n\n\n.. _troubleshooting-decompressionbombwarning:\n\nDecompressionBombWarning and/or no text in the OCR output\n---------------------------------------------------------\nSome users have had issues using Paperless to consume PDFs that were created\nby merging Very Large Scanned Images into one PDF.  If this happens to you,\nit's likely because the PDF you've created contains some very large pages\n(millions of pixels) and the process of converting the PDF to a OCR-friendly\nimage is exploding.\n\nTypically, this happens because the scanned images are created with a high\nDPI and then rolled into the PDF with an assumed DPI of 72 (the default).\nThe best solution then is to specify the DPI used in the scan in the\nconversion-to-PDF step.  So for example, if you scanned the original image\nwith a DPI of 300, then merging the images into the single PDF with\n``convert`` should look like this:\n\n.. code:: bash\n\n    $ convert -density 300 *.jpg finished.pdf\n\nFor more information on this and situations like it, you should take a look\nat `Issue #118`_ as that's where this tip originated.\n\n.. _Issue #118: https://github.com/the-paperless-project/paperless/issues/118"
  },
  {
    "path": "docs/utilities.rst",
    "content": ".. _utilities:\n\nUtilities\n=========\n\nThere's basically three utilities to Paperless: the webserver, consumer, and\nif needed, the exporter.  They're all detailed here.\n\n\n.. _utilities-webserver:\n\nThe Webserver\n-------------\n\nAt the heart of it, Paperless is a simple Django webservice, and the entire\ninterface is based on Django's standard admin interface.  Once running, visiting\nthe URL for your service delivers the admin, through which you can get a\ndetailed listing of all available documents, search for specific files, and\ndownload whatever it is you're looking for.\n\n\n.. _utilities-webserver-howto:\n\nHow to Use It\n.............\n\nThe webserver is started via the ``manage.py`` script:\n\n.. code-block:: shell-session\n\n    $ /path/to/paperless/src/manage.py runserver\n\nBy default, the server runs on localhost, port 8000, but you can change this\nwith a few arguments, run ``manage.py --help`` for more information.\n\nAdd the option ``--noreload`` to reduce resource usage. Otherwise, the server\ncontinuously polls all source files for changes to auto-reload them.\n\nNote that when exiting this command your webserver will disappear.\nIf you want to run this full-time (which is kind of the point)\nyou'll need to have it start in the background -- something you'll need to\nfigure out for your own system.  To get you started though, there are Systemd\nservice files in the ``scripts`` directory.\n\n\n.. _utilities-consumer:\n\nThe Consumer\n------------\n\nThe consumer script runs in an infinite loop, constantly looking at a directory\nfor documents to parse and index.  The process is pretty straightforward:\n\n1. Look in ``CONSUMPTION_DIR`` for a document.  If one is found, go to #2.\n   If not, wait 10 seconds and try again.  On Linux, new documents are detected\n   instantly via inotify, so there's no waiting involved.\n2. Parse the document with Tesseract\n3. Create a new record in the database with the OCR'd text\n4. Attempt to automatically assign document attributes by doing some guesswork.\n   Read up on the :ref:`guesswork documentation<guesswork>` for more\n   information about this process.\n5. Encrypt the document (if you have a passphrase set) and store it in the\n   ``media`` directory under ``documents/originals``.\n6. Go to #1.\n\n\n.. _utilities-consumer-howto:\n\nHow to Use It\n.............\n\nThe consumer is started via the ``manage.py`` script:\n\n.. code-block:: shell-session\n\n    $ /path/to/paperless/src/manage.py document_consumer\n\nThis starts the service that will consume documents as they appear in\n``CONSUMPTION_DIR``.\n\nNote that this command runs continuously, so exiting it will mean your webserver\ndisappears.  If you want to run this full-time (which is kind of the point)\nyou'll need to have it start in the background -- something you'll need to\nfigure out for your own system.  To get you started though, there are Systemd\nservice files in the ``scripts`` directory.\n\nSome command line arguments are available to customize the behavior of the\nconsumer. By default it will use ``/etc/paperless.conf`` values. Display the\nhelp with:\n\n.. code-block:: shell-session\n\n    $ /path/to/paperless/src/manage.py document_consumer --help\n\n.. _utilities-exporter:\n\nThe Exporter\n------------\n\nTired of fiddling with Paperless, or just want to do something stupid and are\nafraid of accidentally damaging your files?  You can export all of your\ndocuments into neatly named, dated, and unencrypted files.\n\n\n.. _utilities-exporter-howto:\n\nHow to Use It\n.............\n\nThis too is done via the ``manage.py`` script:\n\n.. code-block:: shell-session\n\n    $ /path/to/paperless/src/manage.py document_exporter /path/to/somewhere/\n\nThis will dump all of your unencrypted documents into ``/path/to/somewhere``\nfor you to do with as you please.  The files are accompanied with a special\nfile, ``manifest.json`` which can be used to :ref:`import the files\n<utilities-importer>` at a later date if you wish.\n\n\n.. _utilities-exporter-howto-docker:\n\nDocker\n______\n\nIf you are :ref:`using Docker <setup-installation-docker>`, running the\nexpoorter is almost as easy.  To mount a volume for exports, follow the\ninstructions in the ``docker-compose.yml.example`` file for the ``/export``\nvolume (making the changes in your own ``docker-compose.yml`` file, of course).\nOnce you have the volume mounted, the command to run an export is:\n\n.. code-block:: shell-session\n\n   $ docker-compose run --rm consumer document_exporter /export\n\nIf you prefer to use ``docker run`` directly, supplying the necessary commandline\noptions:\n\n.. code-block:: shell-session\n\n   $ # Identify your containers\n   $ docker-compose ps\n           Name                       Command                State     Ports\n   -------------------------------------------------------------------------\n   paperless_consumer_1    /sbin/docker-entrypoint.sh ...   Exit 0\n   paperless_webserver_1   /sbin/docker-entrypoint.sh ...   Exit 0\n\n   $ # Make sure to replace your passphrase and remove or adapt the id mapping\n   $ docker run --rm \\\n       --volumes-from paperless_data_1 \\\n       --volume /path/to/arbitrary/place:/export \\\n       -e PAPERLESS_PASSPHRASE=YOUR_PASSPHRASE \\\n       -e USERMAP_UID=1000 -e USERMAP_GID=1000 \\\n       paperless document_exporter /export\n\n\n.. _utilities-importer:\n\nThe Importer\n------------\n\nLooking to transfer Paperless data from one instance to another, or just want\nto restore from a backup?  This is your go-to toy.\n\n\n.. _utilities-importer-howto:\n\nHow to Use It\n.............\n\nThe importer works just like the exporter.  You point it at a directory, and\nthe script does the rest of the work:\n\n.. code-block:: shell-session\n\n    $ /path/to/paperless/src/manage.py document_importer /path/to/somewhere/\n\nDocker\n______\n\nAssuming that you've already gone through the steps above in the\n:ref:`export <utilities-exporter-howto-docker>` section, then the easiest thing\nto do is just re-use the ``/export`` path you already setup:\n\n.. code-block:: shell-session\n\n   $ docker-compose run --rm consumer document_importer /export\n\nSimilarly, if you're not using docker-compose, you can adjust the export\ninstructions above to do the import.\n\n\n.. _utilities-retagger:\n\nRe-running your tagging and correspondent matchers\n--------------------------------------------------\n\nSay you've imported a few hundred documents and now want to introduce\na tag or set up a new correspondent, and apply its matching to all of\nthe currently-imported docs.  This problem is common enough that\nthere are tools for it.\n\n\n.. _utilities-retagger-howto:\n\nHow to Do It\n............\n\nThis too is done via the ``manage.py`` script:\n\n.. code:: bash\n\n    $ /path/to/paperless/src/manage.py document_retagger\n\nRun this after changing or adding tagging rules.  It'll loop over all\nof the documents in your database and attempt to match all of your\ntags to them.  If one matches, it'll be applied.  And don't worry, you\ncan run this as often as you like, it won't double-tag a document.\n\n.. code:: bash\n\n    $ /path/to/paperless/src/manage.py document_correspondents\n\nThis is the similar command to run after adding or changing a correspondent.\n\n.. _utilities-encyption:\n\nEnabling Encrpytion\n-------------------\n\nLet's say you've imported a few documents to play around with paperless and now\nyou are using it more seriously and want to enable encryption of your files.\n\n.. utilities-encryption-howto:\n\nBasic Syntax\n.............\n\nAgain we'll use the ``manage.py`` script, passing ``change_storage_type``:\n\n.. code:: console\n\n    $ /path/to/paperless/src/manage.py change_storage_type --help\n    usage: manage.py change_storage_type [-h] [--version] [-v {0,1,2,3}]\n                                     [--settings SETTINGS]\n                                     [--pythonpath PYTHONPATH] [--traceback]\n                                     [--no-color] [--passphrase PASSPHRASE]\n                                     {gpg,unencrypted} {gpg,unencrypted}\n\n    This is how you migrate your stored documents from an encrypted state to an\n    unencrypted one (or vice-versa)\n\n    positional arguments:\n      {gpg,unencrypted}     The state you want to change your documents from\n      {gpg,unencrypted}     The state you want to change your documents to\n\n    optional arguments:\n      --passphrase PASSPHRASE\n                            If PAPERLESS_PASSPHRASE isn't set already, you need to\n                            specify it here\n\nEnabling Encryption\n...................\n\nBasic usage to enable encryption of your document store (**USE A MORE SECURE PASSPHRASE**):\n\n(Note: If ``PAPERLESS_PASSPHRASE`` isn't set already, you need to specify it here)\n\n.. code:: bash\n\n    $ /path/to/paperless/src/manage.py change_storage_type [--passphrase SECR3TP4SSPHRA$E] unencrypted gpg\n\n\nDisabling Encryption\n....................\n\nBasic usage to enable encryption of your document store:\n\n(Note: Again, if ``PAPERLESS_PASSPHRASE`` isn't set already, you need to specify it here)\n\n.. code:: bash\n\n    $ /path/to/paperless/src/manage.py change_storage_type [--passphrase SECR3TP4SSPHRA$E] gpg unencrypted\n"
  },
  {
    "path": "management/commands/create_superuser_with_password.py",
    "content": "from django.contrib.auth.management.commands import createsuperuser\nfrom django.core.management import CommandError\n\n\nclass Command(createsuperuser.Command):\n    help = 'Crate a superuser, and allow password to be provided'\n\n    def add_arguments(self, parser):\n        super(Command, self).add_arguments(parser)\n        parser.add_argument(\n            '--password', dest='password', default=None,\n            help='Specifies the password for the superuser.',\n        )\n        parser.add_argument(\n            '--preserve', dest='preserve', default=False, action='store_true',\n            help='Exit normally if the user already exists.',\n        )\n\n    def handle(self, *args, **options):\n        password = options.get('password')\n        username = options.get('username')\n        database = options.get('database')\n\n        if password and not username:\n            raise CommandError(\"--username is required if specifying --password\")\n\n        if username and options.get('preserve'):\n            exists = self.UserModel._default_manager.db_manager(database).filter(username=username).exists()\n            if exists:\n                self.stdout.write(\"User exists, exiting normally due to --preserve\")\n                return\n\n        super(Command, self).handle(*args, **options)\n\n        if password:\n            user = self.UserModel._default_manager.db_manager(database).get(username=username)\n            user.set_password(password)\n            user.save()\n"
  },
  {
    "path": "overrides/README.md",
    "content": "# Customizing Paperless\n\n*See customization\n[documentation](https://paperless.readthedocs.io/en/latest/customising.html) \nfor more detail!*\n\nThe example `.css` and `.js` snippets in this folder can be placed into\none of two files in your ``PAPERLESS_MEDIADIR`` folder: `overrides.js` or \n`overrides.css`. Please feel free to submit pull requests to the main \nrepository with other examples of customizations that you think others may\nfind useful."
  },
  {
    "path": "paperless.conf.example",
    "content": "# Sample paperless.conf\n# Copy this file to /etc/paperless.conf and modify it to suit your needs.\n# As this file contains passwords it should only be readable by the user\n# running paperless.\n\n\n###############################################################################\n####                         Paths & Folders                               ####\n###############################################################################\n\n# This where your documents should go to be consumed.  Make sure that it exists\n# and that the user running the paperless service can read/write its contents\n# before you start Paperless.\nPAPERLESS_CONSUMPTION_DIR=\"\"\n\n\n# You can specify where you want the SQLite database to be stored instead of\n# the default location of /data/ within the install directory.\n#PAPERLESS_DBDIR=/path/to/database/file\n\n\n# Override the default MEDIA_ROOT here.  This is where all files are stored.\n# The default location is /media/documents/ within the install folder.\n#PAPERLESS_MEDIADIR=/path/to/media\n\n\n# Override the default STATIC_ROOT here.  This is where all static files\n# created using \"collectstatic\" manager command are stored.\n#PAPERLESS_STATICDIR=\"\"\n\n\n# Override the MEDIA_URL here.  Unless you're hosting Paperless off a subdomain\n# like /paperless/, you probably don't need to change this.\n#PAPERLESS_MEDIA_URL=\"/media/\"\n\n# Override the STATIC_URL here.  Unless you're hosting Paperless off a\n# subdomain like /paperless/, you probably don't need to change this.\n#PAPERLESS_STATIC_URL=\"/static/\"\n\n\n# These values are required if you want paperless to check a particular email\n# box every 10 minutes and attempt to consume documents from there.  If you\n# don't define a HOST, mail checking will just be disabled.\nPAPERLESS_CONSUME_MAIL_HOST=\"\"\nPAPERLESS_CONSUME_MAIL_PORT=\"\"\nPAPERLESS_CONSUME_MAIL_USER=\"\"\nPAPERLESS_CONSUME_MAIL_PASS=\"\"\n\n# Override the default IMAP inbox here. If not set Paperless defaults to\n# \"INBOX\".\n#PAPERLESS_CONSUME_MAIL_INBOX=\"INBOX\"\n\n# Any email sent to the target account that does not contain this text will be\n# ignored.\nPAPERLESS_EMAIL_SECRET=\"\"\n\n# Specify a filename format for the document (directories are supported)\n# Use the following placeholders:\n# * {correspondent}\n# * {title}\n# * {created}\n# * {added}\n# * {tags[KEY]} If your tags conform to key_value or key-value\n# * {tags[INDEX]} If your tags are strings, select the tag by index\n# Uniqueness of filenames is ensured, as an incrementing counter is attached\n# to each filename.\n#PAPERLESS_FILENAME_FORMAT=\"\"\n\n###############################################################################\n####                              Security                                 ####\n###############################################################################\n\n# Controls whether django's debug mode is enabled. Disable this on production\n# systems. Debug mode is enabled by default.\n#PAPERLESS_DEBUG=\"true\"\n\n\n# Paperless can be instructed to attempt to encrypt your PDF files with GPG\n# using the PAPERLESS_PASSPHRASE specified below.  If however you're not\n# concerned about encrypting these files (for example if you have disk\n# encryption locally) then you don't need this and can safely leave this value\n# un-set.\n#\n# One final note about the passphrase.  Once you've consumed a document with\n# one passphrase, DON'T CHANGE IT.  Paperless assumes this to be a constant and\n# can't properly export documents that were encrypted with an old passphrase if\n# you've since changed it to a new one.\n#\n# The default is to not use encryption at all.\n#PAPERLESS_PASSPHRASE=\"secret\"\n\n\n# The secret key has a default that should be fine so long as you're hosting\n# Paperless on a closed network.  However, if you're putting this anywhere\n# public, you should change the key to something unique and verbose.\n#PAPERLESS_SECRET_KEY=\"change-me\"\n\n\n# If you're planning on putting Paperless on the open internet, then you\n# really should set this value to the domain name you're using.  Failing to do\n# so leaves you open to HTTP host header attacks:\n# https://docs.djangoproject.com/en/1.10/topics/security/#host-headers-virtual-hosting\n#\n# Just remember that this is a comma-separated list, so \"example.com\" is fine,\n# as is \"example.com,www.example.com\", but NOT \" example.com\" or \"example.com,\"\n#PAPERLESS_ALLOWED_HOSTS=\"example.com,www.example.com\"\n\n# If you decide to use the Paperless API in an ajax call, you need to add your\n# servers to the list of allowed hosts that can do CORS calls. By default\n# Paperless allows calls from localhost:8080, but you'd like to change that,\n# you can set this value to a comma-separated list.\n#PAPERLESS_CORS_ALLOWED_HOSTS=\"localhost:8080,example.com,localhost:8000\"\n\n# To host paperless under a subpath url like example.com/paperless you set\n# this value to /paperless. No trailing slash!\n#\n# https://docs.djangoproject.com/en/1.11/ref/settings/#force-script-name\n#PAPERLESS_FORCE_SCRIPT_NAME=\"\"\n\n# If you are using alternative authentication means or are just using paperless\n# as a single user on a small private network, this option allows you to disable\n# user authentication if you set it to \"true\"\n#PAPERLESS_DISABLE_LOGIN=\"false\"\n\n###############################################################################\n####                          Software Tweaks                              ####\n###############################################################################\n\n# After a document is consumed, Paperless can trigger an arbitrary script if\n# you like.  This script will be passed a number of arguments for you to work\n# with.  The default is blank, which means nothing will be executed.  For more\n# information, take a look at the docs:\n# http://paperless.readthedocs.org/en/latest/consumption.html#hooking-into-the-consumption-process\n#PAPERLESS_POST_CONSUME_SCRIPT=\"/path/to/an/arbitrary/script.sh\"\n\n# By default, when clicking on a document within the web interface, the\n# browser will prompt the user to save the document to disk. By setting this to\n# \"true\", the document will instead be opened in the browser, if possible.\n#PAPERLESS_INLINE_DOC=\"false\"\n\n# By default, paperless will check the document text for document date information.\n# Uncomment the line below to enable checking the document filename for date\n# information. The date order can be set to any option as specified in\n# https://dateparser.readthedocs.io/en/latest/#settings. The filename will be\n# checked first, and if nothing is found, the document text will be checked\n# as normal.\n#PAPERLESS_FILENAME_DATE_ORDER=\"YMD\"\n\n# Sometimes devices won't create filenames which can be parsed properly\n# by the filename parser (see\n# https://paperless.readthedocs.io/en/latest/guesswork.html).\n#\n# This setting allows to specify a list of transformations\n# in regular expression syntax, which are passed in order to re.sub.\n# Transformation stops after the first match, so at most one transformation\n# is applied.\n#\n# Syntax is a JSON array of dictionaries containing \"pattern\" and \"repl\"\n# as keys.\n#\n# The example below transforms filenames created by a Brother ADS-2400N\n# document scanner in its standard configuration `Name_Date_Count', so that\n# count is used as title, name as tag and date can be parsed by paperless.\n#PAPERLESS_FILENAME_PARSE_TRANSFORMS=[{\"pattern\":\"^([a-z]+)_(\\\\d{8})_(\\\\d{6})_([0-9]+)\\\\.\", \"repl\":\"\\\\2\\\\3Z - \\\\4 - \\\\1.\"}]\n\n#\n# The following values use sensible defaults for modern systems, but if you're\n# running Paperless on a low-resource device (like a Raspberry Pi), modifying\n# some of these values may be necessary.\n#\n\n\n# By default, Paperless will attempt to use all available CPU cores to process\n# a document, but if you would like to limit that, you can set this value to\n# an integer:\n#PAPERLESS_OCR_THREADS=1\n\n\n# Customize the default language that tesseract will attempt to use when\n# parsing documents.  It should be a 3-letter language code consistent with ISO\n# 639: https://www.loc.gov/standards/iso639-2/php/code_list.php\n#PAPERLESS_OCR_LANGUAGE=eng\n\n\n# On smaller systems, or even in the case of Very Large Documents, the consumer\n# may explode, complaining about how it's \"unable to extend pixel cache\".  In\n# such cases, try setting this to a reasonably low value, like 32000000.  The\n# default is to use whatever is necessary to do everything without writing to\n# disk, and units are in megabytes.\n#\n# For more information on how to use this value, you should probably search\n# the web for \"MAGICK_MEMORY_LIMIT\".\n#PAPERLESS_CONVERT_MEMORY_LIMIT=0\n\n\n# Similar to the memory limit, if you've got a small system and your OS mounts\n# /tmp as tmpfs, you should set this to a path that's on a physical disk, like\n# /home/your_user/tmp or something.  ImageMagick will use this as scratch space\n# when crunching through very large documents.\n#\n# For more information on how to use this value, you should probably search\n# the web for \"MAGICK_TMPDIR\".\n#PAPERLESS_CONVERT_TMPDIR=/var/tmp/paperless\n\n\n# By default the conversion density setting for documents is 300DPI, in some\n# cases it has proven useful to configure a lesser value.\n# This setting has a high impact on the physical size of tmp page files,\n# the speed of document conversion, and can affect the accuracy of OCR\n# results. Individual results can vary and this setting should be tested\n# thoroughly against the documents you are importing to see if it has any\n# impacts either negative or positive.\n# Testing on limited document sets has shown a setting of 200 can cut the\n# size of tmp files by 1/3, and speed up conversion by up to 4x\n# with little impact to OCR accuracy.\n#PAPERLESS_CONVERT_DENSITY=300\n\n\n# (This setting is ignored on Linux where inotify is used instead of a\n# polling loop.)\n# The number of seconds that Paperless will wait between checking\n# PAPERLESS_CONSUMPTION_DIR.  If you tend to write documents to this directory\n# rarely, you may want to use a higher value than the default (10).\n#PAPERLESS_CONSUMER_LOOP_TIME=10\n\n\n# By default Paperless stops consuming a document if no language can be\n# detected. Set to true to consume documents even if the language detection\n# fails.\n#PAPERLESS_FORGIVING_OCR=\"false\"\n\n\n# By default Paperless does not OCR a document if the text can be retrieved from\n# the document directly. Set to true to always OCR documents.\n#PAPERLESS_OCR_ALWAYS=\"false\"\n\n\n###############################################################################\n####                            Interface                                  ####\n###############################################################################\n\n# Override the default UTC time zone here.\n# See https://docs.djangoproject.com/en/1.10/ref/settings/#std:setting-TIME_ZONE\n# for details on how to set it.\n#PAPERLESS_TIME_ZONE=UTC\n\n\n# If set, Paperless will show document filters per financial year.\n# The dates must be in the format \"mm-dd\", for example \"07-15\" for July 15.\n#PAPERLESS_FINANCIAL_YEAR_START=\"mm-dd\"\n#PAPERLESS_FINANCIAL_YEAR_END=\"mm-dd\"\n\n\n# The number of items on each page in the web UI.  This value must be a\n# positive integer, but if you don't define one in paperless.conf, a default of\n# 100 will be used.\n#PAPERLESS_LIST_PER_PAGE=100\n\n\n# The number of years for which a correspondent will be included in the recent\n# correspondents filter.\n#PAPERLESS_RECENT_CORRESPONDENT_YEARS=1\n\n###############################################################################\n####                     Third-Party Binaries                              ####\n###############################################################################\n\n# There are a few external software packages that Paperless expects to find on\n# your system when it starts up.  Unless you've done something creative with\n# their installation, you probably won't need to edit any of these.  However,\n# if you've installed these programs somewhere where simply typing the name of\n# the program doesn't automatically execute it (ie. the program isn't in your\n# $PATH), then you'll need to specify the literal path for that program here.\n\n# Convert (part of the ImageMagick suite)\n#PAPERLESS_CONVERT_BINARY=/usr/bin/convert\n\n# Ghostscript\n#PAPERLESS_GS_BINARY = /usr/bin/gs\n\n# Unpaper\n#PAPERLESS_UNPAPER_BINARY=/usr/bin/unpaper\n\n# Optipng (for optimising thumbnail sizes)\n#PAPERLESS_OPTIPNG_BINARY=/usr/bin/optipng\n"
  },
  {
    "path": "presentation/README.md",
    "content": "# Presentation\n\nThis presentation was written with\n[reaveal.js](http://lab.hakim.se/reveal-js/), and requires no special\nsoftware to view.  Simply open `index.html` in a browser and you're good\nto go.\n"
  },
  {
    "path": "presentation/contrib/font-awesome-4.3.0/css/font-awesome.css",
    "content": "/*!\n *  Font Awesome 4.3.0 by @davegandy - http://fontawesome.io - @fontawesome\n *  License - http://fontawesome.io/license (Font: SIL OFL 1.1, CSS: MIT License)\n */\n/* FONT PATH\n * -------------------------- */\n@font-face {\n  font-family: 'FontAwesome';\n  src: url('../fonts/fontawesome-webfont.eot?v=4.3.0');\n  src: url('../fonts/fontawesome-webfont.eot?#iefix&v=4.3.0') format('embedded-opentype'), url('../fonts/fontawesome-webfont.woff2?v=4.3.0') format('woff2'), url('../fonts/fontawesome-webfont.woff?v=4.3.0') format('woff'), url('../fonts/fontawesome-webfont.ttf?v=4.3.0') format('truetype'), url('../fonts/fontawesome-webfont.svg?v=4.3.0#fontawesomeregular') format('svg');\n  font-weight: normal;\n  font-style: normal;\n}\n.fa {\n  display: inline-block;\n  font: normal normal normal 14px/1 FontAwesome;\n  font-size: inherit;\n  text-rendering: auto;\n  -webkit-font-smoothing: antialiased;\n  -moz-osx-font-smoothing: grayscale;\n  transform: translate(0, 0);\n}\n/* makes the font 33% larger relative to the icon container */\n.fa-lg {\n  font-size: 1.33333333em;\n  line-height: 0.75em;\n  vertical-align: -15%;\n}\n.fa-2x {\n  font-size: 2em;\n}\n.fa-3x {\n  font-size: 3em;\n}\n.fa-4x {\n  font-size: 4em;\n}\n.fa-5x {\n  font-size: 5em;\n}\n.fa-fw {\n  width: 1.28571429em;\n  text-align: center;\n}\n.fa-ul {\n  padding-left: 0;\n  margin-left: 2.14285714em;\n  list-style-type: none;\n}\n.fa-ul > li {\n  position: relative;\n}\n.fa-li {\n  position: absolute;\n  left: -2.14285714em;\n  width: 2.14285714em;\n  top: 0.14285714em;\n  text-align: center;\n}\n.fa-li.fa-lg {\n  left: -1.85714286em;\n}\n.fa-border {\n  padding: .2em .25em .15em;\n  border: solid 0.08em #eeeeee;\n  border-radius: .1em;\n}\n.pull-right {\n  float: right;\n}\n.pull-left {\n  float: left;\n}\n.fa.pull-left {\n  margin-right: .3em;\n}\n.fa.pull-right {\n  margin-left: .3em;\n}\n.fa-spin {\n  -webkit-animation: fa-spin 2s infinite linear;\n  animation: fa-spin 2s infinite linear;\n}\n.fa-pulse {\n  -webkit-animation: fa-spin 1s infinite steps(8);\n  animation: fa-spin 1s infinite steps(8);\n}\n@-webkit-keyframes fa-spin {\n  0% {\n    -webkit-transform: rotate(0deg);\n    transform: rotate(0deg);\n  }\n  100% {\n    -webkit-transform: rotate(359deg);\n    transform: rotate(359deg);\n  }\n}\n@keyframes fa-spin {\n  0% {\n    -webkit-transform: rotate(0deg);\n    transform: rotate(0deg);\n  }\n  100% {\n    -webkit-transform: rotate(359deg);\n    transform: rotate(359deg);\n  }\n}\n.fa-rotate-90 {\n  filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=1);\n  -webkit-transform: rotate(90deg);\n  -ms-transform: rotate(90deg);\n  transform: rotate(90deg);\n}\n.fa-rotate-180 {\n  filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=2);\n  -webkit-transform: rotate(180deg);\n  -ms-transform: rotate(180deg);\n  transform: rotate(180deg);\n}\n.fa-rotate-270 {\n  filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=3);\n  -webkit-transform: rotate(270deg);\n  -ms-transform: rotate(270deg);\n  transform: rotate(270deg);\n}\n.fa-flip-horizontal {\n  filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=0, mirror=1);\n  -webkit-transform: scale(-1, 1);\n  -ms-transform: scale(-1, 1);\n  transform: scale(-1, 1);\n}\n.fa-flip-vertical {\n  filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=2, mirror=1);\n  -webkit-transform: scale(1, -1);\n  -ms-transform: scale(1, -1);\n  transform: scale(1, -1);\n}\n:root .fa-rotate-90,\n:root .fa-rotate-180,\n:root .fa-rotate-270,\n:root .fa-flip-horizontal,\n:root .fa-flip-vertical {\n  filter: none;\n}\n.fa-stack {\n  position: relative;\n  display: inline-block;\n  width: 2em;\n  height: 2em;\n  line-height: 2em;\n  vertical-align: middle;\n}\n.fa-stack-1x,\n.fa-stack-2x {\n  position: absolute;\n  left: 0;\n  width: 100%;\n  text-align: center;\n}\n.fa-stack-1x {\n  line-height: inherit;\n}\n.fa-stack-2x {\n  font-size: 2em;\n}\n.fa-inverse {\n  color: #ffffff;\n}\n/* Font Awesome uses the Unicode Private Use Area (PUA) to ensure screen\n   readers do not read off random characters that represent icons */\n.fa-glass:before {\n  content: \"\\f000\";\n}\n.fa-music:before {\n  content: \"\\f001\";\n}\n.fa-search:before {\n  content: \"\\f002\";\n}\n.fa-envelope-o:before {\n  content: \"\\f003\";\n}\n.fa-heart:before {\n  content: \"\\f004\";\n}\n.fa-star:before {\n  content: \"\\f005\";\n}\n.fa-star-o:before {\n  content: \"\\f006\";\n}\n.fa-user:before {\n  content: \"\\f007\";\n}\n.fa-film:before {\n  content: \"\\f008\";\n}\n.fa-th-large:before {\n  content: \"\\f009\";\n}\n.fa-th:before {\n  content: \"\\f00a\";\n}\n.fa-th-list:before {\n  content: \"\\f00b\";\n}\n.fa-check:before {\n  content: \"\\f00c\";\n}\n.fa-remove:before,\n.fa-close:before,\n.fa-times:before {\n  content: \"\\f00d\";\n}\n.fa-search-plus:before {\n  content: \"\\f00e\";\n}\n.fa-search-minus:before {\n  content: \"\\f010\";\n}\n.fa-power-off:before {\n  content: \"\\f011\";\n}\n.fa-signal:before {\n  content: \"\\f012\";\n}\n.fa-gear:before,\n.fa-cog:before {\n  content: \"\\f013\";\n}\n.fa-trash-o:before {\n  content: \"\\f014\";\n}\n.fa-home:before {\n  content: \"\\f015\";\n}\n.fa-file-o:before {\n  content: \"\\f016\";\n}\n.fa-clock-o:before {\n  content: \"\\f017\";\n}\n.fa-road:before {\n  content: \"\\f018\";\n}\n.fa-download:before {\n  content: \"\\f019\";\n}\n.fa-arrow-circle-o-down:before {\n  content: \"\\f01a\";\n}\n.fa-arrow-circle-o-up:before {\n  content: \"\\f01b\";\n}\n.fa-inbox:before {\n  content: \"\\f01c\";\n}\n.fa-play-circle-o:before {\n  content: \"\\f01d\";\n}\n.fa-rotate-right:before,\n.fa-repeat:before {\n  content: \"\\f01e\";\n}\n.fa-refresh:before {\n  content: \"\\f021\";\n}\n.fa-list-alt:before {\n  content: \"\\f022\";\n}\n.fa-lock:before {\n  content: \"\\f023\";\n}\n.fa-flag:before {\n  content: \"\\f024\";\n}\n.fa-headphones:before {\n  content: \"\\f025\";\n}\n.fa-volume-off:before {\n  content: \"\\f026\";\n}\n.fa-volume-down:before {\n  content: \"\\f027\";\n}\n.fa-volume-up:before {\n  content: \"\\f028\";\n}\n.fa-qrcode:before {\n  content: \"\\f029\";\n}\n.fa-barcode:before {\n  content: \"\\f02a\";\n}\n.fa-tag:before {\n  content: \"\\f02b\";\n}\n.fa-tags:before {\n  content: \"\\f02c\";\n}\n.fa-book:before {\n  content: \"\\f02d\";\n}\n.fa-bookmark:before {\n  content: \"\\f02e\";\n}\n.fa-print:before {\n  content: \"\\f02f\";\n}\n.fa-camera:before {\n  content: \"\\f030\";\n}\n.fa-font:before {\n  content: \"\\f031\";\n}\n.fa-bold:before {\n  content: \"\\f032\";\n}\n.fa-italic:before {\n  content: \"\\f033\";\n}\n.fa-text-height:before {\n  content: \"\\f034\";\n}\n.fa-text-width:before {\n  content: \"\\f035\";\n}\n.fa-align-left:before {\n  content: \"\\f036\";\n}\n.fa-align-center:before {\n  content: \"\\f037\";\n}\n.fa-align-right:before {\n  content: \"\\f038\";\n}\n.fa-align-justify:before {\n  content: \"\\f039\";\n}\n.fa-list:before {\n  content: \"\\f03a\";\n}\n.fa-dedent:before,\n.fa-outdent:before {\n  content: \"\\f03b\";\n}\n.fa-indent:before {\n  content: \"\\f03c\";\n}\n.fa-video-camera:before {\n  content: \"\\f03d\";\n}\n.fa-photo:before,\n.fa-image:before,\n.fa-picture-o:before {\n  content: \"\\f03e\";\n}\n.fa-pencil:before {\n  content: \"\\f040\";\n}\n.fa-map-marker:before {\n  content: \"\\f041\";\n}\n.fa-adjust:before {\n  content: \"\\f042\";\n}\n.fa-tint:before {\n  content: \"\\f043\";\n}\n.fa-edit:before,\n.fa-pencil-square-o:before {\n  content: \"\\f044\";\n}\n.fa-share-square-o:before {\n  content: \"\\f045\";\n}\n.fa-check-square-o:before {\n  content: \"\\f046\";\n}\n.fa-arrows:before {\n  content: \"\\f047\";\n}\n.fa-step-backward:before {\n  content: \"\\f048\";\n}\n.fa-fast-backward:before {\n  content: \"\\f049\";\n}\n.fa-backward:before {\n  content: \"\\f04a\";\n}\n.fa-play:before {\n  content: \"\\f04b\";\n}\n.fa-pause:before {\n  content: \"\\f04c\";\n}\n.fa-stop:before {\n  content: \"\\f04d\";\n}\n.fa-forward:before {\n  content: \"\\f04e\";\n}\n.fa-fast-forward:before {\n  content: \"\\f050\";\n}\n.fa-step-forward:before {\n  content: \"\\f051\";\n}\n.fa-eject:before {\n  content: \"\\f052\";\n}\n.fa-chevron-left:before {\n  content: \"\\f053\";\n}\n.fa-chevron-right:before {\n  content: \"\\f054\";\n}\n.fa-plus-circle:before {\n  content: \"\\f055\";\n}\n.fa-minus-circle:before {\n  content: \"\\f056\";\n}\n.fa-times-circle:before {\n  content: \"\\f057\";\n}\n.fa-check-circle:before {\n  content: \"\\f058\";\n}\n.fa-question-circle:before {\n  content: \"\\f059\";\n}\n.fa-info-circle:before {\n  content: \"\\f05a\";\n}\n.fa-crosshairs:before {\n  content: \"\\f05b\";\n}\n.fa-times-circle-o:before {\n  content: \"\\f05c\";\n}\n.fa-check-circle-o:before {\n  content: \"\\f05d\";\n}\n.fa-ban:before {\n  content: \"\\f05e\";\n}\n.fa-arrow-left:before {\n  content: \"\\f060\";\n}\n.fa-arrow-right:before {\n  content: \"\\f061\";\n}\n.fa-arrow-up:before {\n  content: \"\\f062\";\n}\n.fa-arrow-down:before {\n  content: \"\\f063\";\n}\n.fa-mail-forward:before,\n.fa-share:before {\n  content: \"\\f064\";\n}\n.fa-expand:before {\n  content: \"\\f065\";\n}\n.fa-compress:before {\n  content: \"\\f066\";\n}\n.fa-plus:before {\n  content: \"\\f067\";\n}\n.fa-minus:before {\n  content: \"\\f068\";\n}\n.fa-asterisk:before {\n  content: \"\\f069\";\n}\n.fa-exclamation-circle:before {\n  content: \"\\f06a\";\n}\n.fa-gift:before {\n  content: \"\\f06b\";\n}\n.fa-leaf:before {\n  content: \"\\f06c\";\n}\n.fa-fire:before {\n  content: \"\\f06d\";\n}\n.fa-eye:before {\n  content: \"\\f06e\";\n}\n.fa-eye-slash:before {\n  content: \"\\f070\";\n}\n.fa-warning:before,\n.fa-exclamation-triangle:before {\n  content: \"\\f071\";\n}\n.fa-plane:before {\n  content: \"\\f072\";\n}\n.fa-calendar:before {\n  content: \"\\f073\";\n}\n.fa-random:before {\n  content: \"\\f074\";\n}\n.fa-comment:before {\n  content: \"\\f075\";\n}\n.fa-magnet:before {\n  content: \"\\f076\";\n}\n.fa-chevron-up:before {\n  content: \"\\f077\";\n}\n.fa-chevron-down:before {\n  content: \"\\f078\";\n}\n.fa-retweet:before {\n  content: \"\\f079\";\n}\n.fa-shopping-cart:before {\n  content: \"\\f07a\";\n}\n.fa-folder:before {\n  content: \"\\f07b\";\n}\n.fa-folder-open:before {\n  content: \"\\f07c\";\n}\n.fa-arrows-v:before {\n  content: \"\\f07d\";\n}\n.fa-arrows-h:before {\n  content: \"\\f07e\";\n}\n.fa-bar-chart-o:before,\n.fa-bar-chart:before {\n  content: \"\\f080\";\n}\n.fa-twitter-square:before {\n  content: \"\\f081\";\n}\n.fa-facebook-square:before {\n  content: \"\\f082\";\n}\n.fa-camera-retro:before {\n  content: \"\\f083\";\n}\n.fa-key:before {\n  content: \"\\f084\";\n}\n.fa-gears:before,\n.fa-cogs:before {\n  content: \"\\f085\";\n}\n.fa-comments:before {\n  content: \"\\f086\";\n}\n.fa-thumbs-o-up:before {\n  content: \"\\f087\";\n}\n.fa-thumbs-o-down:before {\n  content: \"\\f088\";\n}\n.fa-star-half:before {\n  content: \"\\f089\";\n}\n.fa-heart-o:before {\n  content: \"\\f08a\";\n}\n.fa-sign-out:before {\n  content: \"\\f08b\";\n}\n.fa-linkedin-square:before {\n  content: \"\\f08c\";\n}\n.fa-thumb-tack:before {\n  content: \"\\f08d\";\n}\n.fa-external-link:before {\n  content: \"\\f08e\";\n}\n.fa-sign-in:before {\n  content: \"\\f090\";\n}\n.fa-trophy:before {\n  content: \"\\f091\";\n}\n.fa-github-square:before {\n  content: \"\\f092\";\n}\n.fa-upload:before {\n  content: \"\\f093\";\n}\n.fa-lemon-o:before {\n  content: \"\\f094\";\n}\n.fa-phone:before {\n  content: \"\\f095\";\n}\n.fa-square-o:before {\n  content: \"\\f096\";\n}\n.fa-bookmark-o:before {\n  content: \"\\f097\";\n}\n.fa-phone-square:before {\n  content: \"\\f098\";\n}\n.fa-twitter:before {\n  content: \"\\f099\";\n}\n.fa-facebook-f:before,\n.fa-facebook:before {\n  content: \"\\f09a\";\n}\n.fa-github:before {\n  content: \"\\f09b\";\n}\n.fa-unlock:before {\n  content: \"\\f09c\";\n}\n.fa-credit-card:before {\n  content: \"\\f09d\";\n}\n.fa-rss:before {\n  content: \"\\f09e\";\n}\n.fa-hdd-o:before {\n  content: \"\\f0a0\";\n}\n.fa-bullhorn:before {\n  content: \"\\f0a1\";\n}\n.fa-bell:before {\n  content: \"\\f0f3\";\n}\n.fa-certificate:before {\n  content: \"\\f0a3\";\n}\n.fa-hand-o-right:before {\n  content: \"\\f0a4\";\n}\n.fa-hand-o-left:before {\n  content: \"\\f0a5\";\n}\n.fa-hand-o-up:before {\n  content: \"\\f0a6\";\n}\n.fa-hand-o-down:before {\n  content: \"\\f0a7\";\n}\n.fa-arrow-circle-left:before {\n  content: \"\\f0a8\";\n}\n.fa-arrow-circle-right:before {\n  content: \"\\f0a9\";\n}\n.fa-arrow-circle-up:before {\n  content: \"\\f0aa\";\n}\n.fa-arrow-circle-down:before {\n  content: \"\\f0ab\";\n}\n.fa-globe:before {\n  content: \"\\f0ac\";\n}\n.fa-wrench:before {\n  content: \"\\f0ad\";\n}\n.fa-tasks:before {\n  content: \"\\f0ae\";\n}\n.fa-filter:before {\n  content: \"\\f0b0\";\n}\n.fa-briefcase:before {\n  content: \"\\f0b1\";\n}\n.fa-arrows-alt:before {\n  content: \"\\f0b2\";\n}\n.fa-group:before,\n.fa-users:before {\n  content: \"\\f0c0\";\n}\n.fa-chain:before,\n.fa-link:before {\n  content: \"\\f0c1\";\n}\n.fa-cloud:before {\n  content: \"\\f0c2\";\n}\n.fa-flask:before {\n  content: \"\\f0c3\";\n}\n.fa-cut:before,\n.fa-scissors:before {\n  content: \"\\f0c4\";\n}\n.fa-copy:before,\n.fa-files-o:before {\n  content: \"\\f0c5\";\n}\n.fa-paperclip:before {\n  content: \"\\f0c6\";\n}\n.fa-save:before,\n.fa-floppy-o:before {\n  content: \"\\f0c7\";\n}\n.fa-square:before {\n  content: \"\\f0c8\";\n}\n.fa-navicon:before,\n.fa-reorder:before,\n.fa-bars:before {\n  content: \"\\f0c9\";\n}\n.fa-list-ul:before {\n  content: \"\\f0ca\";\n}\n.fa-list-ol:before {\n  content: \"\\f0cb\";\n}\n.fa-strikethrough:before {\n  content: \"\\f0cc\";\n}\n.fa-underline:before {\n  content: \"\\f0cd\";\n}\n.fa-table:before {\n  content: \"\\f0ce\";\n}\n.fa-magic:before {\n  content: \"\\f0d0\";\n}\n.fa-truck:before {\n  content: \"\\f0d1\";\n}\n.fa-pinterest:before {\n  content: \"\\f0d2\";\n}\n.fa-pinterest-square:before {\n  content: \"\\f0d3\";\n}\n.fa-google-plus-square:before {\n  content: \"\\f0d4\";\n}\n.fa-google-plus:before {\n  content: \"\\f0d5\";\n}\n.fa-money:before {\n  content: \"\\f0d6\";\n}\n.fa-caret-down:before {\n  content: \"\\f0d7\";\n}\n.fa-caret-up:before {\n  content: \"\\f0d8\";\n}\n.fa-caret-left:before {\n  content: \"\\f0d9\";\n}\n.fa-caret-right:before {\n  content: \"\\f0da\";\n}\n.fa-columns:before {\n  content: \"\\f0db\";\n}\n.fa-unsorted:before,\n.fa-sort:before {\n  content: \"\\f0dc\";\n}\n.fa-sort-down:before,\n.fa-sort-desc:before {\n  content: \"\\f0dd\";\n}\n.fa-sort-up:before,\n.fa-sort-asc:before {\n  content: \"\\f0de\";\n}\n.fa-envelope:before {\n  content: \"\\f0e0\";\n}\n.fa-linkedin:before {\n  content: \"\\f0e1\";\n}\n.fa-rotate-left:before,\n.fa-undo:before {\n  content: \"\\f0e2\";\n}\n.fa-legal:before,\n.fa-gavel:before {\n  content: \"\\f0e3\";\n}\n.fa-dashboard:before,\n.fa-tachometer:before {\n  content: \"\\f0e4\";\n}\n.fa-comment-o:before {\n  content: \"\\f0e5\";\n}\n.fa-comments-o:before {\n  content: \"\\f0e6\";\n}\n.fa-flash:before,\n.fa-bolt:before {\n  content: \"\\f0e7\";\n}\n.fa-sitemap:before {\n  content: \"\\f0e8\";\n}\n.fa-umbrella:before {\n  content: \"\\f0e9\";\n}\n.fa-paste:before,\n.fa-clipboard:before {\n  content: \"\\f0ea\";\n}\n.fa-lightbulb-o:before {\n  content: \"\\f0eb\";\n}\n.fa-exchange:before {\n  content: \"\\f0ec\";\n}\n.fa-cloud-download:before {\n  content: \"\\f0ed\";\n}\n.fa-cloud-upload:before {\n  content: \"\\f0ee\";\n}\n.fa-user-md:before {\n  content: \"\\f0f0\";\n}\n.fa-stethoscope:before {\n  content: \"\\f0f1\";\n}\n.fa-suitcase:before {\n  content: \"\\f0f2\";\n}\n.fa-bell-o:before {\n  content: \"\\f0a2\";\n}\n.fa-coffee:before {\n  content: \"\\f0f4\";\n}\n.fa-cutlery:before {\n  content: \"\\f0f5\";\n}\n.fa-file-text-o:before {\n  content: \"\\f0f6\";\n}\n.fa-building-o:before {\n  content: \"\\f0f7\";\n}\n.fa-hospital-o:before {\n  content: \"\\f0f8\";\n}\n.fa-ambulance:before {\n  content: \"\\f0f9\";\n}\n.fa-medkit:before {\n  content: \"\\f0fa\";\n}\n.fa-fighter-jet:before {\n  content: \"\\f0fb\";\n}\n.fa-beer:before {\n  content: \"\\f0fc\";\n}\n.fa-h-square:before {\n  content: \"\\f0fd\";\n}\n.fa-plus-square:before {\n  content: \"\\f0fe\";\n}\n.fa-angle-double-left:before {\n  content: \"\\f100\";\n}\n.fa-angle-double-right:before {\n  content: \"\\f101\";\n}\n.fa-angle-double-up:before {\n  content: \"\\f102\";\n}\n.fa-angle-double-down:before {\n  content: \"\\f103\";\n}\n.fa-angle-left:before {\n  content: \"\\f104\";\n}\n.fa-angle-right:before {\n  content: \"\\f105\";\n}\n.fa-angle-up:before {\n  content: \"\\f106\";\n}\n.fa-angle-down:before {\n  content: \"\\f107\";\n}\n.fa-desktop:before {\n  content: \"\\f108\";\n}\n.fa-laptop:before {\n  content: \"\\f109\";\n}\n.fa-tablet:before {\n  content: \"\\f10a\";\n}\n.fa-mobile-phone:before,\n.fa-mobile:before {\n  content: \"\\f10b\";\n}\n.fa-circle-o:before {\n  content: \"\\f10c\";\n}\n.fa-quote-left:before {\n  content: \"\\f10d\";\n}\n.fa-quote-right:before {\n  content: \"\\f10e\";\n}\n.fa-spinner:before {\n  content: \"\\f110\";\n}\n.fa-circle:before {\n  content: \"\\f111\";\n}\n.fa-mail-reply:before,\n.fa-reply:before {\n  content: \"\\f112\";\n}\n.fa-github-alt:before {\n  content: \"\\f113\";\n}\n.fa-folder-o:before {\n  content: \"\\f114\";\n}\n.fa-folder-open-o:before {\n  content: \"\\f115\";\n}\n.fa-smile-o:before {\n  content: \"\\f118\";\n}\n.fa-frown-o:before {\n  content: \"\\f119\";\n}\n.fa-meh-o:before {\n  content: \"\\f11a\";\n}\n.fa-gamepad:before {\n  content: \"\\f11b\";\n}\n.fa-keyboard-o:before {\n  content: \"\\f11c\";\n}\n.fa-flag-o:before {\n  content: \"\\f11d\";\n}\n.fa-flag-checkered:before {\n  content: \"\\f11e\";\n}\n.fa-terminal:before {\n  content: \"\\f120\";\n}\n.fa-code:before {\n  content: \"\\f121\";\n}\n.fa-mail-reply-all:before,\n.fa-reply-all:before {\n  content: \"\\f122\";\n}\n.fa-star-half-empty:before,\n.fa-star-half-full:before,\n.fa-star-half-o:before {\n  content: \"\\f123\";\n}\n.fa-location-arrow:before {\n  content: \"\\f124\";\n}\n.fa-crop:before {\n  content: \"\\f125\";\n}\n.fa-code-fork:before {\n  content: \"\\f126\";\n}\n.fa-unlink:before,\n.fa-chain-broken:before {\n  content: \"\\f127\";\n}\n.fa-question:before {\n  content: \"\\f128\";\n}\n.fa-info:before {\n  content: \"\\f129\";\n}\n.fa-exclamation:before {\n  content: \"\\f12a\";\n}\n.fa-superscript:before {\n  content: \"\\f12b\";\n}\n.fa-subscript:before {\n  content: \"\\f12c\";\n}\n.fa-eraser:before {\n  content: \"\\f12d\";\n}\n.fa-puzzle-piece:before {\n  content: \"\\f12e\";\n}\n.fa-microphone:before {\n  content: \"\\f130\";\n}\n.fa-microphone-slash:before {\n  content: \"\\f131\";\n}\n.fa-shield:before {\n  content: \"\\f132\";\n}\n.fa-calendar-o:before {\n  content: \"\\f133\";\n}\n.fa-fire-extinguisher:before {\n  content: \"\\f134\";\n}\n.fa-rocket:before {\n  content: \"\\f135\";\n}\n.fa-maxcdn:before {\n  content: \"\\f136\";\n}\n.fa-chevron-circle-left:before {\n  content: \"\\f137\";\n}\n.fa-chevron-circle-right:before {\n  content: \"\\f138\";\n}\n.fa-chevron-circle-up:before {\n  content: \"\\f139\";\n}\n.fa-chevron-circle-down:before {\n  content: \"\\f13a\";\n}\n.fa-html5:before {\n  content: \"\\f13b\";\n}\n.fa-css3:before {\n  content: \"\\f13c\";\n}\n.fa-anchor:before {\n  content: \"\\f13d\";\n}\n.fa-unlock-alt:before {\n  content: \"\\f13e\";\n}\n.fa-bullseye:before {\n  content: \"\\f140\";\n}\n.fa-ellipsis-h:before {\n  content: \"\\f141\";\n}\n.fa-ellipsis-v:before {\n  content: \"\\f142\";\n}\n.fa-rss-square:before {\n  content: \"\\f143\";\n}\n.fa-play-circle:before {\n  content: \"\\f144\";\n}\n.fa-ticket:before {\n  content: \"\\f145\";\n}\n.fa-minus-square:before {\n  content: \"\\f146\";\n}\n.fa-minus-square-o:before {\n  content: \"\\f147\";\n}\n.fa-level-up:before {\n  content: \"\\f148\";\n}\n.fa-level-down:before {\n  content: \"\\f149\";\n}\n.fa-check-square:before {\n  content: \"\\f14a\";\n}\n.fa-pencil-square:before {\n  content: \"\\f14b\";\n}\n.fa-external-link-square:before {\n  content: \"\\f14c\";\n}\n.fa-share-square:before {\n  content: \"\\f14d\";\n}\n.fa-compass:before {\n  content: \"\\f14e\";\n}\n.fa-toggle-down:before,\n.fa-caret-square-o-down:before {\n  content: \"\\f150\";\n}\n.fa-toggle-up:before,\n.fa-caret-square-o-up:before {\n  content: \"\\f151\";\n}\n.fa-toggle-right:before,\n.fa-caret-square-o-right:before {\n  content: \"\\f152\";\n}\n.fa-euro:before,\n.fa-eur:before {\n  content: \"\\f153\";\n}\n.fa-gbp:before {\n  content: \"\\f154\";\n}\n.fa-dollar:before,\n.fa-usd:before {\n  content: \"\\f155\";\n}\n.fa-rupee:before,\n.fa-inr:before {\n  content: \"\\f156\";\n}\n.fa-cny:before,\n.fa-rmb:before,\n.fa-yen:before,\n.fa-jpy:before {\n  content: \"\\f157\";\n}\n.fa-ruble:before,\n.fa-rouble:before,\n.fa-rub:before {\n  content: \"\\f158\";\n}\n.fa-won:before,\n.fa-krw:before {\n  content: \"\\f159\";\n}\n.fa-bitcoin:before,\n.fa-btc:before {\n  content: \"\\f15a\";\n}\n.fa-file:before {\n  content: \"\\f15b\";\n}\n.fa-file-text:before {\n  content: \"\\f15c\";\n}\n.fa-sort-alpha-asc:before {\n  content: \"\\f15d\";\n}\n.fa-sort-alpha-desc:before {\n  content: \"\\f15e\";\n}\n.fa-sort-amount-asc:before {\n  content: \"\\f160\";\n}\n.fa-sort-amount-desc:before {\n  content: \"\\f161\";\n}\n.fa-sort-numeric-asc:before {\n  content: \"\\f162\";\n}\n.fa-sort-numeric-desc:before {\n  content: \"\\f163\";\n}\n.fa-thumbs-up:before {\n  content: \"\\f164\";\n}\n.fa-thumbs-down:before {\n  content: \"\\f165\";\n}\n.fa-youtube-square:before {\n  content: \"\\f166\";\n}\n.fa-youtube:before {\n  content: \"\\f167\";\n}\n.fa-xing:before {\n  content: \"\\f168\";\n}\n.fa-xing-square:before {\n  content: \"\\f169\";\n}\n.fa-youtube-play:before {\n  content: \"\\f16a\";\n}\n.fa-dropbox:before {\n  content: \"\\f16b\";\n}\n.fa-stack-overflow:before {\n  content: \"\\f16c\";\n}\n.fa-instagram:before {\n  content: \"\\f16d\";\n}\n.fa-flickr:before {\n  content: \"\\f16e\";\n}\n.fa-adn:before {\n  content: \"\\f170\";\n}\n.fa-bitbucket:before {\n  content: \"\\f171\";\n}\n.fa-bitbucket-square:before {\n  content: \"\\f172\";\n}\n.fa-tumblr:before {\n  content: \"\\f173\";\n}\n.fa-tumblr-square:before {\n  content: \"\\f174\";\n}\n.fa-long-arrow-down:before {\n  content: \"\\f175\";\n}\n.fa-long-arrow-up:before {\n  content: \"\\f176\";\n}\n.fa-long-arrow-left:before {\n  content: \"\\f177\";\n}\n.fa-long-arrow-right:before {\n  content: \"\\f178\";\n}\n.fa-apple:before {\n  content: \"\\f179\";\n}\n.fa-windows:before {\n  content: \"\\f17a\";\n}\n.fa-android:before {\n  content: \"\\f17b\";\n}\n.fa-linux:before {\n  content: \"\\f17c\";\n}\n.fa-dribbble:before {\n  content: \"\\f17d\";\n}\n.fa-skype:before {\n  content: \"\\f17e\";\n}\n.fa-foursquare:before {\n  content: \"\\f180\";\n}\n.fa-trello:before {\n  content: \"\\f181\";\n}\n.fa-female:before {\n  content: \"\\f182\";\n}\n.fa-male:before {\n  content: \"\\f183\";\n}\n.fa-gittip:before,\n.fa-gratipay:before {\n  content: \"\\f184\";\n}\n.fa-sun-o:before {\n  content: \"\\f185\";\n}\n.fa-moon-o:before {\n  content: \"\\f186\";\n}\n.fa-archive:before {\n  content: \"\\f187\";\n}\n.fa-bug:before {\n  content: \"\\f188\";\n}\n.fa-vk:before {\n  content: \"\\f189\";\n}\n.fa-weibo:before {\n  content: \"\\f18a\";\n}\n.fa-renren:before {\n  content: \"\\f18b\";\n}\n.fa-pagelines:before {\n  content: \"\\f18c\";\n}\n.fa-stack-exchange:before {\n  content: \"\\f18d\";\n}\n.fa-arrow-circle-o-right:before {\n  content: \"\\f18e\";\n}\n.fa-arrow-circle-o-left:before {\n  content: \"\\f190\";\n}\n.fa-toggle-left:before,\n.fa-caret-square-o-left:before {\n  content: \"\\f191\";\n}\n.fa-dot-circle-o:before {\n  content: \"\\f192\";\n}\n.fa-wheelchair:before {\n  content: \"\\f193\";\n}\n.fa-vimeo-square:before {\n  content: \"\\f194\";\n}\n.fa-turkish-lira:before,\n.fa-try:before {\n  content: \"\\f195\";\n}\n.fa-plus-square-o:before {\n  content: \"\\f196\";\n}\n.fa-space-shuttle:before {\n  content: \"\\f197\";\n}\n.fa-slack:before {\n  content: \"\\f198\";\n}\n.fa-envelope-square:before {\n  content: \"\\f199\";\n}\n.fa-wordpress:before {\n  content: \"\\f19a\";\n}\n.fa-openid:before {\n  content: \"\\f19b\";\n}\n.fa-institution:before,\n.fa-bank:before,\n.fa-university:before {\n  content: \"\\f19c\";\n}\n.fa-mortar-board:before,\n.fa-graduation-cap:before {\n  content: \"\\f19d\";\n}\n.fa-yahoo:before {\n  content: \"\\f19e\";\n}\n.fa-google:before {\n  content: \"\\f1a0\";\n}\n.fa-reddit:before {\n  content: \"\\f1a1\";\n}\n.fa-reddit-square:before {\n  content: \"\\f1a2\";\n}\n.fa-stumbleupon-circle:before {\n  content: \"\\f1a3\";\n}\n.fa-stumbleupon:before {\n  content: \"\\f1a4\";\n}\n.fa-delicious:before {\n  content: \"\\f1a5\";\n}\n.fa-digg:before {\n  content: \"\\f1a6\";\n}\n.fa-pied-piper:before {\n  content: \"\\f1a7\";\n}\n.fa-pied-piper-alt:before {\n  content: \"\\f1a8\";\n}\n.fa-drupal:before {\n  content: \"\\f1a9\";\n}\n.fa-joomla:before {\n  content: \"\\f1aa\";\n}\n.fa-language:before {\n  content: \"\\f1ab\";\n}\n.fa-fax:before {\n  content: \"\\f1ac\";\n}\n.fa-building:before {\n  content: \"\\f1ad\";\n}\n.fa-child:before {\n  content: \"\\f1ae\";\n}\n.fa-paw:before {\n  content: \"\\f1b0\";\n}\n.fa-spoon:before {\n  content: \"\\f1b1\";\n}\n.fa-cube:before {\n  content: \"\\f1b2\";\n}\n.fa-cubes:before {\n  content: \"\\f1b3\";\n}\n.fa-behance:before {\n  content: \"\\f1b4\";\n}\n.fa-behance-square:before {\n  content: \"\\f1b5\";\n}\n.fa-steam:before {\n  content: \"\\f1b6\";\n}\n.fa-steam-square:before {\n  content: \"\\f1b7\";\n}\n.fa-recycle:before {\n  content: \"\\f1b8\";\n}\n.fa-automobile:before,\n.fa-car:before {\n  content: \"\\f1b9\";\n}\n.fa-cab:before,\n.fa-taxi:before {\n  content: \"\\f1ba\";\n}\n.fa-tree:before {\n  content: \"\\f1bb\";\n}\n.fa-spotify:before {\n  content: \"\\f1bc\";\n}\n.fa-deviantart:before {\n  content: \"\\f1bd\";\n}\n.fa-soundcloud:before {\n  content: \"\\f1be\";\n}\n.fa-database:before {\n  content: \"\\f1c0\";\n}\n.fa-file-pdf-o:before {\n  content: \"\\f1c1\";\n}\n.fa-file-word-o:before {\n  content: \"\\f1c2\";\n}\n.fa-file-excel-o:before {\n  content: \"\\f1c3\";\n}\n.fa-file-powerpoint-o:before {\n  content: \"\\f1c4\";\n}\n.fa-file-photo-o:before,\n.fa-file-picture-o:before,\n.fa-file-image-o:before {\n  content: \"\\f1c5\";\n}\n.fa-file-zip-o:before,\n.fa-file-archive-o:before {\n  content: \"\\f1c6\";\n}\n.fa-file-sound-o:before,\n.fa-file-audio-o:before {\n  content: \"\\f1c7\";\n}\n.fa-file-movie-o:before,\n.fa-file-video-o:before {\n  content: \"\\f1c8\";\n}\n.fa-file-code-o:before {\n  content: \"\\f1c9\";\n}\n.fa-vine:before {\n  content: \"\\f1ca\";\n}\n.fa-codepen:before {\n  content: \"\\f1cb\";\n}\n.fa-jsfiddle:before {\n  content: \"\\f1cc\";\n}\n.fa-life-bouy:before,\n.fa-life-buoy:before,\n.fa-life-saver:before,\n.fa-support:before,\n.fa-life-ring:before {\n  content: \"\\f1cd\";\n}\n.fa-circle-o-notch:before {\n  content: \"\\f1ce\";\n}\n.fa-ra:before,\n.fa-rebel:before {\n  content: \"\\f1d0\";\n}\n.fa-ge:before,\n.fa-empire:before {\n  content: \"\\f1d1\";\n}\n.fa-git-square:before {\n  content: \"\\f1d2\";\n}\n.fa-git:before {\n  content: \"\\f1d3\";\n}\n.fa-hacker-news:before {\n  content: \"\\f1d4\";\n}\n.fa-tencent-weibo:before {\n  content: \"\\f1d5\";\n}\n.fa-qq:before {\n  content: \"\\f1d6\";\n}\n.fa-wechat:before,\n.fa-weixin:before {\n  content: \"\\f1d7\";\n}\n.fa-send:before,\n.fa-paper-plane:before {\n  content: \"\\f1d8\";\n}\n.fa-send-o:before,\n.fa-paper-plane-o:before {\n  content: \"\\f1d9\";\n}\n.fa-history:before {\n  content: \"\\f1da\";\n}\n.fa-genderless:before,\n.fa-circle-thin:before {\n  content: \"\\f1db\";\n}\n.fa-header:before {\n  content: \"\\f1dc\";\n}\n.fa-paragraph:before {\n  content: \"\\f1dd\";\n}\n.fa-sliders:before {\n  content: \"\\f1de\";\n}\n.fa-share-alt:before {\n  content: \"\\f1e0\";\n}\n.fa-share-alt-square:before {\n  content: \"\\f1e1\";\n}\n.fa-bomb:before {\n  content: \"\\f1e2\";\n}\n.fa-soccer-ball-o:before,\n.fa-futbol-o:before {\n  content: \"\\f1e3\";\n}\n.fa-tty:before {\n  content: \"\\f1e4\";\n}\n.fa-binoculars:before {\n  content: \"\\f1e5\";\n}\n.fa-plug:before {\n  content: \"\\f1e6\";\n}\n.fa-slideshare:before {\n  content: \"\\f1e7\";\n}\n.fa-twitch:before {\n  content: \"\\f1e8\";\n}\n.fa-yelp:before {\n  content: \"\\f1e9\";\n}\n.fa-newspaper-o:before {\n  content: \"\\f1ea\";\n}\n.fa-wifi:before {\n  content: \"\\f1eb\";\n}\n.fa-calculator:before {\n  content: \"\\f1ec\";\n}\n.fa-paypal:before {\n  content: \"\\f1ed\";\n}\n.fa-google-wallet:before {\n  content: \"\\f1ee\";\n}\n.fa-cc-visa:before {\n  content: \"\\f1f0\";\n}\n.fa-cc-mastercard:before {\n  content: \"\\f1f1\";\n}\n.fa-cc-discover:before {\n  content: \"\\f1f2\";\n}\n.fa-cc-amex:before {\n  content: \"\\f1f3\";\n}\n.fa-cc-paypal:before {\n  content: \"\\f1f4\";\n}\n.fa-cc-stripe:before {\n  content: \"\\f1f5\";\n}\n.fa-bell-slash:before {\n  content: \"\\f1f6\";\n}\n.fa-bell-slash-o:before {\n  content: \"\\f1f7\";\n}\n.fa-trash:before {\n  content: \"\\f1f8\";\n}\n.fa-copyright:before {\n  content: \"\\f1f9\";\n}\n.fa-at:before {\n  content: \"\\f1fa\";\n}\n.fa-eyedropper:before {\n  content: \"\\f1fb\";\n}\n.fa-paint-brush:before {\n  content: \"\\f1fc\";\n}\n.fa-birthday-cake:before {\n  content: \"\\f1fd\";\n}\n.fa-area-chart:before {\n  content: \"\\f1fe\";\n}\n.fa-pie-chart:before {\n  content: \"\\f200\";\n}\n.fa-line-chart:before {\n  content: \"\\f201\";\n}\n.fa-lastfm:before {\n  content: \"\\f202\";\n}\n.fa-lastfm-square:before {\n  content: \"\\f203\";\n}\n.fa-toggle-off:before {\n  content: \"\\f204\";\n}\n.fa-toggle-on:before {\n  content: \"\\f205\";\n}\n.fa-bicycle:before {\n  content: \"\\f206\";\n}\n.fa-bus:before {\n  content: \"\\f207\";\n}\n.fa-ioxhost:before {\n  content: \"\\f208\";\n}\n.fa-angellist:before {\n  content: \"\\f209\";\n}\n.fa-cc:before {\n  content: \"\\f20a\";\n}\n.fa-shekel:before,\n.fa-sheqel:before,\n.fa-ils:before {\n  content: \"\\f20b\";\n}\n.fa-meanpath:before {\n  content: \"\\f20c\";\n}\n.fa-buysellads:before {\n  content: \"\\f20d\";\n}\n.fa-connectdevelop:before {\n  content: \"\\f20e\";\n}\n.fa-dashcube:before {\n  content: \"\\f210\";\n}\n.fa-forumbee:before {\n  content: \"\\f211\";\n}\n.fa-leanpub:before {\n  content: \"\\f212\";\n}\n.fa-sellsy:before {\n  content: \"\\f213\";\n}\n.fa-shirtsinbulk:before {\n  content: \"\\f214\";\n}\n.fa-simplybuilt:before {\n  content: \"\\f215\";\n}\n.fa-skyatlas:before {\n  content: \"\\f216\";\n}\n.fa-cart-plus:before {\n  content: \"\\f217\";\n}\n.fa-cart-arrow-down:before {\n  content: \"\\f218\";\n}\n.fa-diamond:before {\n  content: \"\\f219\";\n}\n.fa-ship:before {\n  content: \"\\f21a\";\n}\n.fa-user-secret:before {\n  content: \"\\f21b\";\n}\n.fa-motorcycle:before {\n  content: \"\\f21c\";\n}\n.fa-street-view:before {\n  content: \"\\f21d\";\n}\n.fa-heartbeat:before {\n  content: \"\\f21e\";\n}\n.fa-venus:before {\n  content: \"\\f221\";\n}\n.fa-mars:before {\n  content: \"\\f222\";\n}\n.fa-mercury:before {\n  content: \"\\f223\";\n}\n.fa-transgender:before {\n  content: \"\\f224\";\n}\n.fa-transgender-alt:before {\n  content: \"\\f225\";\n}\n.fa-venus-double:before {\n  content: \"\\f226\";\n}\n.fa-mars-double:before {\n  content: \"\\f227\";\n}\n.fa-venus-mars:before {\n  content: \"\\f228\";\n}\n.fa-mars-stroke:before {\n  content: \"\\f229\";\n}\n.fa-mars-stroke-v:before {\n  content: \"\\f22a\";\n}\n.fa-mars-stroke-h:before {\n  content: \"\\f22b\";\n}\n.fa-neuter:before {\n  content: \"\\f22c\";\n}\n.fa-facebook-official:before {\n  content: \"\\f230\";\n}\n.fa-pinterest-p:before {\n  content: \"\\f231\";\n}\n.fa-whatsapp:before {\n  content: \"\\f232\";\n}\n.fa-server:before {\n  content: \"\\f233\";\n}\n.fa-user-plus:before {\n  content: \"\\f234\";\n}\n.fa-user-times:before {\n  content: \"\\f235\";\n}\n.fa-hotel:before,\n.fa-bed:before {\n  content: \"\\f236\";\n}\n.fa-viacoin:before {\n  content: \"\\f237\";\n}\n.fa-train:before {\n  content: \"\\f238\";\n}\n.fa-subway:before {\n  content: \"\\f239\";\n}\n.fa-medium:before {\n  content: \"\\f23a\";\n}\n"
  },
  {
    "path": "presentation/contrib/font-awesome-4.3.0/less/animated.less",
    "content": "// Animated Icons\n// --------------------------\n\n.@{fa-css-prefix}-spin {\n  -webkit-animation: fa-spin 2s infinite linear;\n          animation: fa-spin 2s infinite linear;\n}\n\n.@{fa-css-prefix}-pulse {\n  -webkit-animation: fa-spin 1s infinite steps(8);\n          animation: fa-spin 1s infinite steps(8);\n}\n\n@-webkit-keyframes fa-spin {\n  0% {\n    -webkit-transform: rotate(0deg);\n            transform: rotate(0deg);\n  }\n  100% {\n    -webkit-transform: rotate(359deg);\n            transform: rotate(359deg);\n  }\n}\n\n@keyframes fa-spin {\n  0% {\n    -webkit-transform: rotate(0deg);\n            transform: rotate(0deg);\n  }\n  100% {\n    -webkit-transform: rotate(359deg);\n            transform: rotate(359deg);\n  }\n}\n"
  },
  {
    "path": "presentation/contrib/font-awesome-4.3.0/less/bordered-pulled.less",
    "content": "// Bordered & Pulled\n// -------------------------\n\n.@{fa-css-prefix}-border {\n  padding: .2em .25em .15em;\n  border: solid .08em @fa-border-color;\n  border-radius: .1em;\n}\n\n.pull-right { float: right; }\n.pull-left { float: left; }\n\n.@{fa-css-prefix} {\n  &.pull-left { margin-right: .3em; }\n  &.pull-right { margin-left: .3em; }\n}\n"
  },
  {
    "path": "presentation/contrib/font-awesome-4.3.0/less/core.less",
    "content": "// Base Class Definition\n// -------------------------\n\n.@{fa-css-prefix} {\n  display: inline-block;\n  font: normal normal normal @fa-font-size-base/1 FontAwesome; // shortening font declaration\n  font-size: inherit; // can't have font-size inherit on line above, so need to override\n  text-rendering: auto; // optimizelegibility throws things off #1094\n  -webkit-font-smoothing: antialiased;\n  -moz-osx-font-smoothing: grayscale;\n  transform: translate(0, 0); // ensures no half-pixel rendering in firefox\n\n}\n"
  },
  {
    "path": "presentation/contrib/font-awesome-4.3.0/less/fixed-width.less",
    "content": "// Fixed Width Icons\n// -------------------------\n.@{fa-css-prefix}-fw {\n  width: (18em / 14);\n  text-align: center;\n}\n"
  },
  {
    "path": "presentation/contrib/font-awesome-4.3.0/less/font-awesome.less",
    "content": "/*!\n *  Font Awesome 4.3.0 by @davegandy - http://fontawesome.io - @fontawesome\n *  License - http://fontawesome.io/license (Font: SIL OFL 1.1, CSS: MIT License)\n */\n\n@import \"variables.less\";\n@import \"mixins.less\";\n@import \"path.less\";\n@import \"core.less\";\n@import \"larger.less\";\n@import \"fixed-width.less\";\n@import \"list.less\";\n@import \"bordered-pulled.less\";\n@import \"animated.less\";\n@import \"rotated-flipped.less\";\n@import \"stacked.less\";\n@import \"icons.less\";\n"
  },
  {
    "path": "presentation/contrib/font-awesome-4.3.0/less/icons.less",
    "content": "/* Font Awesome uses the Unicode Private Use Area (PUA) to ensure screen\n   readers do not read off random characters that represent icons */\n\n.@{fa-css-prefix}-glass:before { content: @fa-var-glass; }\n.@{fa-css-prefix}-music:before { content: @fa-var-music; }\n.@{fa-css-prefix}-search:before { content: @fa-var-search; }\n.@{fa-css-prefix}-envelope-o:before { content: @fa-var-envelope-o; }\n.@{fa-css-prefix}-heart:before { content: @fa-var-heart; }\n.@{fa-css-prefix}-star:before { content: @fa-var-star; }\n.@{fa-css-prefix}-star-o:before { content: @fa-var-star-o; }\n.@{fa-css-prefix}-user:before { content: @fa-var-user; }\n.@{fa-css-prefix}-film:before { content: @fa-var-film; }\n.@{fa-css-prefix}-th-large:before { content: @fa-var-th-large; }\n.@{fa-css-prefix}-th:before { content: @fa-var-th; }\n.@{fa-css-prefix}-th-list:before { content: @fa-var-th-list; }\n.@{fa-css-prefix}-check:before { content: @fa-var-check; }\n.@{fa-css-prefix}-remove:before,\n.@{fa-css-prefix}-close:before,\n.@{fa-css-prefix}-times:before { content: @fa-var-times; }\n.@{fa-css-prefix}-search-plus:before { content: @fa-var-search-plus; }\n.@{fa-css-prefix}-search-minus:before { content: @fa-var-search-minus; }\n.@{fa-css-prefix}-power-off:before { content: @fa-var-power-off; }\n.@{fa-css-prefix}-signal:before { content: @fa-var-signal; }\n.@{fa-css-prefix}-gear:before,\n.@{fa-css-prefix}-cog:before { content: @fa-var-cog; }\n.@{fa-css-prefix}-trash-o:before { content: @fa-var-trash-o; }\n.@{fa-css-prefix}-home:before { content: @fa-var-home; }\n.@{fa-css-prefix}-file-o:before { content: @fa-var-file-o; }\n.@{fa-css-prefix}-clock-o:before { content: @fa-var-clock-o; }\n.@{fa-css-prefix}-road:before { content: @fa-var-road; }\n.@{fa-css-prefix}-download:before { content: @fa-var-download; }\n.@{fa-css-prefix}-arrow-circle-o-down:before { content: @fa-var-arrow-circle-o-down; }\n.@{fa-css-prefix}-arrow-circle-o-up:before { content: @fa-var-arrow-circle-o-up; }\n.@{fa-css-prefix}-inbox:before { content: @fa-var-inbox; }\n.@{fa-css-prefix}-play-circle-o:before { content: @fa-var-play-circle-o; }\n.@{fa-css-prefix}-rotate-right:before,\n.@{fa-css-prefix}-repeat:before { content: @fa-var-repeat; }\n.@{fa-css-prefix}-refresh:before { content: @fa-var-refresh; }\n.@{fa-css-prefix}-list-alt:before { content: @fa-var-list-alt; }\n.@{fa-css-prefix}-lock:before { content: @fa-var-lock; }\n.@{fa-css-prefix}-flag:before { content: @fa-var-flag; }\n.@{fa-css-prefix}-headphones:before { content: @fa-var-headphones; }\n.@{fa-css-prefix}-volume-off:before { content: @fa-var-volume-off; }\n.@{fa-css-prefix}-volume-down:before { content: @fa-var-volume-down; }\n.@{fa-css-prefix}-volume-up:before { content: @fa-var-volume-up; }\n.@{fa-css-prefix}-qrcode:before { content: @fa-var-qrcode; }\n.@{fa-css-prefix}-barcode:before { content: @fa-var-barcode; }\n.@{fa-css-prefix}-tag:before { content: @fa-var-tag; }\n.@{fa-css-prefix}-tags:before { content: @fa-var-tags; }\n.@{fa-css-prefix}-book:before { content: @fa-var-book; }\n.@{fa-css-prefix}-bookmark:before { content: @fa-var-bookmark; }\n.@{fa-css-prefix}-print:before { content: @fa-var-print; }\n.@{fa-css-prefix}-camera:before { content: @fa-var-camera; }\n.@{fa-css-prefix}-font:before { content: @fa-var-font; }\n.@{fa-css-prefix}-bold:before { content: @fa-var-bold; }\n.@{fa-css-prefix}-italic:before { content: @fa-var-italic; }\n.@{fa-css-prefix}-text-height:before { content: @fa-var-text-height; }\n.@{fa-css-prefix}-text-width:before { content: @fa-var-text-width; }\n.@{fa-css-prefix}-align-left:before { content: @fa-var-align-left; }\n.@{fa-css-prefix}-align-center:before { content: @fa-var-align-center; }\n.@{fa-css-prefix}-align-right:before { content: @fa-var-align-right; }\n.@{fa-css-prefix}-align-justify:before { content: @fa-var-align-justify; }\n.@{fa-css-prefix}-list:before { content: @fa-var-list; }\n.@{fa-css-prefix}-dedent:before,\n.@{fa-css-prefix}-outdent:before { content: @fa-var-outdent; }\n.@{fa-css-prefix}-indent:before { content: @fa-var-indent; }\n.@{fa-css-prefix}-video-camera:before { content: @fa-var-video-camera; }\n.@{fa-css-prefix}-photo:before,\n.@{fa-css-prefix}-image:before,\n.@{fa-css-prefix}-picture-o:before { content: @fa-var-picture-o; }\n.@{fa-css-prefix}-pencil:before { content: @fa-var-pencil; }\n.@{fa-css-prefix}-map-marker:before { content: @fa-var-map-marker; }\n.@{fa-css-prefix}-adjust:before { content: @fa-var-adjust; }\n.@{fa-css-prefix}-tint:before { content: @fa-var-tint; }\n.@{fa-css-prefix}-edit:before,\n.@{fa-css-prefix}-pencil-square-o:before { content: @fa-var-pencil-square-o; }\n.@{fa-css-prefix}-share-square-o:before { content: @fa-var-share-square-o; }\n.@{fa-css-prefix}-check-square-o:before { content: @fa-var-check-square-o; }\n.@{fa-css-prefix}-arrows:before { content: @fa-var-arrows; }\n.@{fa-css-prefix}-step-backward:before { content: @fa-var-step-backward; }\n.@{fa-css-prefix}-fast-backward:before { content: @fa-var-fast-backward; }\n.@{fa-css-prefix}-backward:before { content: @fa-var-backward; }\n.@{fa-css-prefix}-play:before { content: @fa-var-play; }\n.@{fa-css-prefix}-pause:before { content: @fa-var-pause; }\n.@{fa-css-prefix}-stop:before { content: @fa-var-stop; }\n.@{fa-css-prefix}-forward:before { content: @fa-var-forward; }\n.@{fa-css-prefix}-fast-forward:before { content: @fa-var-fast-forward; }\n.@{fa-css-prefix}-step-forward:before { content: @fa-var-step-forward; }\n.@{fa-css-prefix}-eject:before { content: @fa-var-eject; }\n.@{fa-css-prefix}-chevron-left:before { content: @fa-var-chevron-left; }\n.@{fa-css-prefix}-chevron-right:before { content: @fa-var-chevron-right; }\n.@{fa-css-prefix}-plus-circle:before { content: @fa-var-plus-circle; }\n.@{fa-css-prefix}-minus-circle:before { content: @fa-var-minus-circle; }\n.@{fa-css-prefix}-times-circle:before { content: @fa-var-times-circle; }\n.@{fa-css-prefix}-check-circle:before { content: @fa-var-check-circle; }\n.@{fa-css-prefix}-question-circle:before { content: @fa-var-question-circle; }\n.@{fa-css-prefix}-info-circle:before { content: @fa-var-info-circle; }\n.@{fa-css-prefix}-crosshairs:before { content: @fa-var-crosshairs; }\n.@{fa-css-prefix}-times-circle-o:before { content: @fa-var-times-circle-o; }\n.@{fa-css-prefix}-check-circle-o:before { content: @fa-var-check-circle-o; }\n.@{fa-css-prefix}-ban:before { content: @fa-var-ban; }\n.@{fa-css-prefix}-arrow-left:before { content: @fa-var-arrow-left; }\n.@{fa-css-prefix}-arrow-right:before { content: @fa-var-arrow-right; }\n.@{fa-css-prefix}-arrow-up:before { content: @fa-var-arrow-up; }\n.@{fa-css-prefix}-arrow-down:before { content: @fa-var-arrow-down; }\n.@{fa-css-prefix}-mail-forward:before,\n.@{fa-css-prefix}-share:before { content: @fa-var-share; }\n.@{fa-css-prefix}-expand:before { content: @fa-var-expand; }\n.@{fa-css-prefix}-compress:before { content: @fa-var-compress; }\n.@{fa-css-prefix}-plus:before { content: @fa-var-plus; }\n.@{fa-css-prefix}-minus:before { content: @fa-var-minus; }\n.@{fa-css-prefix}-asterisk:before { content: @fa-var-asterisk; }\n.@{fa-css-prefix}-exclamation-circle:before { content: @fa-var-exclamation-circle; }\n.@{fa-css-prefix}-gift:before { content: @fa-var-gift; }\n.@{fa-css-prefix}-leaf:before { content: @fa-var-leaf; }\n.@{fa-css-prefix}-fire:before { content: @fa-var-fire; }\n.@{fa-css-prefix}-eye:before { content: @fa-var-eye; }\n.@{fa-css-prefix}-eye-slash:before { content: @fa-var-eye-slash; }\n.@{fa-css-prefix}-warning:before,\n.@{fa-css-prefix}-exclamation-triangle:before { content: @fa-var-exclamation-triangle; }\n.@{fa-css-prefix}-plane:before { content: @fa-var-plane; }\n.@{fa-css-prefix}-calendar:before { content: @fa-var-calendar; }\n.@{fa-css-prefix}-random:before { content: @fa-var-random; }\n.@{fa-css-prefix}-comment:before { content: @fa-var-comment; }\n.@{fa-css-prefix}-magnet:before { content: @fa-var-magnet; }\n.@{fa-css-prefix}-chevron-up:before { content: @fa-var-chevron-up; }\n.@{fa-css-prefix}-chevron-down:before { content: @fa-var-chevron-down; }\n.@{fa-css-prefix}-retweet:before { content: @fa-var-retweet; }\n.@{fa-css-prefix}-shopping-cart:before { content: @fa-var-shopping-cart; }\n.@{fa-css-prefix}-folder:before { content: @fa-var-folder; }\n.@{fa-css-prefix}-folder-open:before { content: @fa-var-folder-open; }\n.@{fa-css-prefix}-arrows-v:before { content: @fa-var-arrows-v; }\n.@{fa-css-prefix}-arrows-h:before { content: @fa-var-arrows-h; }\n.@{fa-css-prefix}-bar-chart-o:before,\n.@{fa-css-prefix}-bar-chart:before { content: @fa-var-bar-chart; }\n.@{fa-css-prefix}-twitter-square:before { content: @fa-var-twitter-square; }\n.@{fa-css-prefix}-facebook-square:before { content: @fa-var-facebook-square; }\n.@{fa-css-prefix}-camera-retro:before { content: @fa-var-camera-retro; }\n.@{fa-css-prefix}-key:before { content: @fa-var-key; }\n.@{fa-css-prefix}-gears:before,\n.@{fa-css-prefix}-cogs:before { content: @fa-var-cogs; }\n.@{fa-css-prefix}-comments:before { content: @fa-var-comments; }\n.@{fa-css-prefix}-thumbs-o-up:before { content: @fa-var-thumbs-o-up; }\n.@{fa-css-prefix}-thumbs-o-down:before { content: @fa-var-thumbs-o-down; }\n.@{fa-css-prefix}-star-half:before { content: @fa-var-star-half; }\n.@{fa-css-prefix}-heart-o:before { content: @fa-var-heart-o; }\n.@{fa-css-prefix}-sign-out:before { content: @fa-var-sign-out; }\n.@{fa-css-prefix}-linkedin-square:before { content: @fa-var-linkedin-square; }\n.@{fa-css-prefix}-thumb-tack:before { content: @fa-var-thumb-tack; }\n.@{fa-css-prefix}-external-link:before { content: @fa-var-external-link; }\n.@{fa-css-prefix}-sign-in:before { content: @fa-var-sign-in; }\n.@{fa-css-prefix}-trophy:before { content: @fa-var-trophy; }\n.@{fa-css-prefix}-github-square:before { content: @fa-var-github-square; }\n.@{fa-css-prefix}-upload:before { content: @fa-var-upload; }\n.@{fa-css-prefix}-lemon-o:before { content: @fa-var-lemon-o; }\n.@{fa-css-prefix}-phone:before { content: @fa-var-phone; }\n.@{fa-css-prefix}-square-o:before { content: @fa-var-square-o; }\n.@{fa-css-prefix}-bookmark-o:before { content: @fa-var-bookmark-o; }\n.@{fa-css-prefix}-phone-square:before { content: @fa-var-phone-square; }\n.@{fa-css-prefix}-twitter:before { content: @fa-var-twitter; }\n.@{fa-css-prefix}-facebook-f:before,\n.@{fa-css-prefix}-facebook:before { content: @fa-var-facebook; }\n.@{fa-css-prefix}-github:before { content: @fa-var-github; }\n.@{fa-css-prefix}-unlock:before { content: @fa-var-unlock; }\n.@{fa-css-prefix}-credit-card:before { content: @fa-var-credit-card; }\n.@{fa-css-prefix}-rss:before { content: @fa-var-rss; }\n.@{fa-css-prefix}-hdd-o:before { content: @fa-var-hdd-o; }\n.@{fa-css-prefix}-bullhorn:before { content: @fa-var-bullhorn; }\n.@{fa-css-prefix}-bell:before { content: @fa-var-bell; }\n.@{fa-css-prefix}-certificate:before { content: @fa-var-certificate; }\n.@{fa-css-prefix}-hand-o-right:before { content: @fa-var-hand-o-right; }\n.@{fa-css-prefix}-hand-o-left:before { content: @fa-var-hand-o-left; }\n.@{fa-css-prefix}-hand-o-up:before { content: @fa-var-hand-o-up; }\n.@{fa-css-prefix}-hand-o-down:before { content: @fa-var-hand-o-down; }\n.@{fa-css-prefix}-arrow-circle-left:before { content: @fa-var-arrow-circle-left; }\n.@{fa-css-prefix}-arrow-circle-right:before { content: @fa-var-arrow-circle-right; }\n.@{fa-css-prefix}-arrow-circle-up:before { content: @fa-var-arrow-circle-up; }\n.@{fa-css-prefix}-arrow-circle-down:before { content: @fa-var-arrow-circle-down; }\n.@{fa-css-prefix}-globe:before { content: @fa-var-globe; }\n.@{fa-css-prefix}-wrench:before { content: @fa-var-wrench; }\n.@{fa-css-prefix}-tasks:before { content: @fa-var-tasks; }\n.@{fa-css-prefix}-filter:before { content: @fa-var-filter; }\n.@{fa-css-prefix}-briefcase:before { content: @fa-var-briefcase; }\n.@{fa-css-prefix}-arrows-alt:before { content: @fa-var-arrows-alt; }\n.@{fa-css-prefix}-group:before,\n.@{fa-css-prefix}-users:before { content: @fa-var-users; }\n.@{fa-css-prefix}-chain:before,\n.@{fa-css-prefix}-link:before { content: @fa-var-link; }\n.@{fa-css-prefix}-cloud:before { content: @fa-var-cloud; }\n.@{fa-css-prefix}-flask:before { content: @fa-var-flask; }\n.@{fa-css-prefix}-cut:before,\n.@{fa-css-prefix}-scissors:before { content: @fa-var-scissors; }\n.@{fa-css-prefix}-copy:before,\n.@{fa-css-prefix}-files-o:before { content: @fa-var-files-o; }\n.@{fa-css-prefix}-paperclip:before { content: @fa-var-paperclip; }\n.@{fa-css-prefix}-save:before,\n.@{fa-css-prefix}-floppy-o:before { content: @fa-var-floppy-o; }\n.@{fa-css-prefix}-square:before { content: @fa-var-square; }\n.@{fa-css-prefix}-navicon:before,\n.@{fa-css-prefix}-reorder:before,\n.@{fa-css-prefix}-bars:before { content: @fa-var-bars; }\n.@{fa-css-prefix}-list-ul:before { content: @fa-var-list-ul; }\n.@{fa-css-prefix}-list-ol:before { content: @fa-var-list-ol; }\n.@{fa-css-prefix}-strikethrough:before { content: @fa-var-strikethrough; }\n.@{fa-css-prefix}-underline:before { content: @fa-var-underline; }\n.@{fa-css-prefix}-table:before { content: @fa-var-table; }\n.@{fa-css-prefix}-magic:before { content: @fa-var-magic; }\n.@{fa-css-prefix}-truck:before { content: @fa-var-truck; }\n.@{fa-css-prefix}-pinterest:before { content: @fa-var-pinterest; }\n.@{fa-css-prefix}-pinterest-square:before { content: @fa-var-pinterest-square; }\n.@{fa-css-prefix}-google-plus-square:before { content: @fa-var-google-plus-square; }\n.@{fa-css-prefix}-google-plus:before { content: @fa-var-google-plus; }\n.@{fa-css-prefix}-money:before { content: @fa-var-money; }\n.@{fa-css-prefix}-caret-down:before { content: @fa-var-caret-down; }\n.@{fa-css-prefix}-caret-up:before { content: @fa-var-caret-up; }\n.@{fa-css-prefix}-caret-left:before { content: @fa-var-caret-left; }\n.@{fa-css-prefix}-caret-right:before { content: @fa-var-caret-right; }\n.@{fa-css-prefix}-columns:before { content: @fa-var-columns; }\n.@{fa-css-prefix}-unsorted:before,\n.@{fa-css-prefix}-sort:before { content: @fa-var-sort; }\n.@{fa-css-prefix}-sort-down:before,\n.@{fa-css-prefix}-sort-desc:before { content: @fa-var-sort-desc; }\n.@{fa-css-prefix}-sort-up:before,\n.@{fa-css-prefix}-sort-asc:before { content: @fa-var-sort-asc; }\n.@{fa-css-prefix}-envelope:before { content: @fa-var-envelope; }\n.@{fa-css-prefix}-linkedin:before { content: @fa-var-linkedin; }\n.@{fa-css-prefix}-rotate-left:before,\n.@{fa-css-prefix}-undo:before { content: @fa-var-undo; }\n.@{fa-css-prefix}-legal:before,\n.@{fa-css-prefix}-gavel:before { content: @fa-var-gavel; }\n.@{fa-css-prefix}-dashboard:before,\n.@{fa-css-prefix}-tachometer:before { content: @fa-var-tachometer; }\n.@{fa-css-prefix}-comment-o:before { content: @fa-var-comment-o; }\n.@{fa-css-prefix}-comments-o:before { content: @fa-var-comments-o; }\n.@{fa-css-prefix}-flash:before,\n.@{fa-css-prefix}-bolt:before { content: @fa-var-bolt; }\n.@{fa-css-prefix}-sitemap:before { content: @fa-var-sitemap; }\n.@{fa-css-prefix}-umbrella:before { content: @fa-var-umbrella; }\n.@{fa-css-prefix}-paste:before,\n.@{fa-css-prefix}-clipboard:before { content: @fa-var-clipboard; }\n.@{fa-css-prefix}-lightbulb-o:before { content: @fa-var-lightbulb-o; }\n.@{fa-css-prefix}-exchange:before { content: @fa-var-exchange; }\n.@{fa-css-prefix}-cloud-download:before { content: @fa-var-cloud-download; }\n.@{fa-css-prefix}-cloud-upload:before { content: @fa-var-cloud-upload; }\n.@{fa-css-prefix}-user-md:before { content: @fa-var-user-md; }\n.@{fa-css-prefix}-stethoscope:before { content: @fa-var-stethoscope; }\n.@{fa-css-prefix}-suitcase:before { content: @fa-var-suitcase; }\n.@{fa-css-prefix}-bell-o:before { content: @fa-var-bell-o; }\n.@{fa-css-prefix}-coffee:before { content: @fa-var-coffee; }\n.@{fa-css-prefix}-cutlery:before { content: @fa-var-cutlery; }\n.@{fa-css-prefix}-file-text-o:before { content: @fa-var-file-text-o; }\n.@{fa-css-prefix}-building-o:before { content: @fa-var-building-o; }\n.@{fa-css-prefix}-hospital-o:before { content: @fa-var-hospital-o; }\n.@{fa-css-prefix}-ambulance:before { content: @fa-var-ambulance; }\n.@{fa-css-prefix}-medkit:before { content: @fa-var-medkit; }\n.@{fa-css-prefix}-fighter-jet:before { content: @fa-var-fighter-jet; }\n.@{fa-css-prefix}-beer:before { content: @fa-var-beer; }\n.@{fa-css-prefix}-h-square:before { content: @fa-var-h-square; }\n.@{fa-css-prefix}-plus-square:before { content: @fa-var-plus-square; }\n.@{fa-css-prefix}-angle-double-left:before { content: @fa-var-angle-double-left; }\n.@{fa-css-prefix}-angle-double-right:before { content: @fa-var-angle-double-right; }\n.@{fa-css-prefix}-angle-double-up:before { content: @fa-var-angle-double-up; }\n.@{fa-css-prefix}-angle-double-down:before { content: @fa-var-angle-double-down; }\n.@{fa-css-prefix}-angle-left:before { content: @fa-var-angle-left; }\n.@{fa-css-prefix}-angle-right:before { content: @fa-var-angle-right; }\n.@{fa-css-prefix}-angle-up:before { content: @fa-var-angle-up; }\n.@{fa-css-prefix}-angle-down:before { content: @fa-var-angle-down; }\n.@{fa-css-prefix}-desktop:before { content: @fa-var-desktop; }\n.@{fa-css-prefix}-laptop:before { content: @fa-var-laptop; }\n.@{fa-css-prefix}-tablet:before { content: @fa-var-tablet; }\n.@{fa-css-prefix}-mobile-phone:before,\n.@{fa-css-prefix}-mobile:before { content: @fa-var-mobile; }\n.@{fa-css-prefix}-circle-o:before { content: @fa-var-circle-o; }\n.@{fa-css-prefix}-quote-left:before { content: @fa-var-quote-left; }\n.@{fa-css-prefix}-quote-right:before { content: @fa-var-quote-right; }\n.@{fa-css-prefix}-spinner:before { content: @fa-var-spinner; }\n.@{fa-css-prefix}-circle:before { content: @fa-var-circle; }\n.@{fa-css-prefix}-mail-reply:before,\n.@{fa-css-prefix}-reply:before { content: @fa-var-reply; }\n.@{fa-css-prefix}-github-alt:before { content: @fa-var-github-alt; }\n.@{fa-css-prefix}-folder-o:before { content: @fa-var-folder-o; }\n.@{fa-css-prefix}-folder-open-o:before { content: @fa-var-folder-open-o; }\n.@{fa-css-prefix}-smile-o:before { content: @fa-var-smile-o; }\n.@{fa-css-prefix}-frown-o:before { content: @fa-var-frown-o; }\n.@{fa-css-prefix}-meh-o:before { content: @fa-var-meh-o; }\n.@{fa-css-prefix}-gamepad:before { content: @fa-var-gamepad; }\n.@{fa-css-prefix}-keyboard-o:before { content: @fa-var-keyboard-o; }\n.@{fa-css-prefix}-flag-o:before { content: @fa-var-flag-o; }\n.@{fa-css-prefix}-flag-checkered:before { content: @fa-var-flag-checkered; }\n.@{fa-css-prefix}-terminal:before { content: @fa-var-terminal; }\n.@{fa-css-prefix}-code:before { content: @fa-var-code; }\n.@{fa-css-prefix}-mail-reply-all:before,\n.@{fa-css-prefix}-reply-all:before { content: @fa-var-reply-all; }\n.@{fa-css-prefix}-star-half-empty:before,\n.@{fa-css-prefix}-star-half-full:before,\n.@{fa-css-prefix}-star-half-o:before { content: @fa-var-star-half-o; }\n.@{fa-css-prefix}-location-arrow:before { content: @fa-var-location-arrow; }\n.@{fa-css-prefix}-crop:before { content: @fa-var-crop; }\n.@{fa-css-prefix}-code-fork:before { content: @fa-var-code-fork; }\n.@{fa-css-prefix}-unlink:before,\n.@{fa-css-prefix}-chain-broken:before { content: @fa-var-chain-broken; }\n.@{fa-css-prefix}-question:before { content: @fa-var-question; }\n.@{fa-css-prefix}-info:before { content: @fa-var-info; }\n.@{fa-css-prefix}-exclamation:before { content: @fa-var-exclamation; }\n.@{fa-css-prefix}-superscript:before { content: @fa-var-superscript; }\n.@{fa-css-prefix}-subscript:before { content: @fa-var-subscript; }\n.@{fa-css-prefix}-eraser:before { content: @fa-var-eraser; }\n.@{fa-css-prefix}-puzzle-piece:before { content: @fa-var-puzzle-piece; }\n.@{fa-css-prefix}-microphone:before { content: @fa-var-microphone; }\n.@{fa-css-prefix}-microphone-slash:before { content: @fa-var-microphone-slash; }\n.@{fa-css-prefix}-shield:before { content: @fa-var-shield; }\n.@{fa-css-prefix}-calendar-o:before { content: @fa-var-calendar-o; }\n.@{fa-css-prefix}-fire-extinguisher:before { content: @fa-var-fire-extinguisher; }\n.@{fa-css-prefix}-rocket:before { content: @fa-var-rocket; }\n.@{fa-css-prefix}-maxcdn:before { content: @fa-var-maxcdn; }\n.@{fa-css-prefix}-chevron-circle-left:before { content: @fa-var-chevron-circle-left; }\n.@{fa-css-prefix}-chevron-circle-right:before { content: @fa-var-chevron-circle-right; }\n.@{fa-css-prefix}-chevron-circle-up:before { content: @fa-var-chevron-circle-up; }\n.@{fa-css-prefix}-chevron-circle-down:before { content: @fa-var-chevron-circle-down; }\n.@{fa-css-prefix}-html5:before { content: @fa-var-html5; }\n.@{fa-css-prefix}-css3:before { content: @fa-var-css3; }\n.@{fa-css-prefix}-anchor:before { content: @fa-var-anchor; }\n.@{fa-css-prefix}-unlock-alt:before { content: @fa-var-unlock-alt; }\n.@{fa-css-prefix}-bullseye:before { content: @fa-var-bullseye; }\n.@{fa-css-prefix}-ellipsis-h:before { content: @fa-var-ellipsis-h; }\n.@{fa-css-prefix}-ellipsis-v:before { content: @fa-var-ellipsis-v; }\n.@{fa-css-prefix}-rss-square:before { content: @fa-var-rss-square; }\n.@{fa-css-prefix}-play-circle:before { content: @fa-var-play-circle; }\n.@{fa-css-prefix}-ticket:before { content: @fa-var-ticket; }\n.@{fa-css-prefix}-minus-square:before { content: @fa-var-minus-square; }\n.@{fa-css-prefix}-minus-square-o:before { content: @fa-var-minus-square-o; }\n.@{fa-css-prefix}-level-up:before { content: @fa-var-level-up; }\n.@{fa-css-prefix}-level-down:before { content: @fa-var-level-down; }\n.@{fa-css-prefix}-check-square:before { content: @fa-var-check-square; }\n.@{fa-css-prefix}-pencil-square:before { content: @fa-var-pencil-square; }\n.@{fa-css-prefix}-external-link-square:before { content: @fa-var-external-link-square; }\n.@{fa-css-prefix}-share-square:before { content: @fa-var-share-square; }\n.@{fa-css-prefix}-compass:before { content: @fa-var-compass; }\n.@{fa-css-prefix}-toggle-down:before,\n.@{fa-css-prefix}-caret-square-o-down:before { content: @fa-var-caret-square-o-down; }\n.@{fa-css-prefix}-toggle-up:before,\n.@{fa-css-prefix}-caret-square-o-up:before { content: @fa-var-caret-square-o-up; }\n.@{fa-css-prefix}-toggle-right:before,\n.@{fa-css-prefix}-caret-square-o-right:before { content: @fa-var-caret-square-o-right; }\n.@{fa-css-prefix}-euro:before,\n.@{fa-css-prefix}-eur:before { content: @fa-var-eur; }\n.@{fa-css-prefix}-gbp:before { content: @fa-var-gbp; }\n.@{fa-css-prefix}-dollar:before,\n.@{fa-css-prefix}-usd:before { content: @fa-var-usd; }\n.@{fa-css-prefix}-rupee:before,\n.@{fa-css-prefix}-inr:before { content: @fa-var-inr; }\n.@{fa-css-prefix}-cny:before,\n.@{fa-css-prefix}-rmb:before,\n.@{fa-css-prefix}-yen:before,\n.@{fa-css-prefix}-jpy:before { content: @fa-var-jpy; }\n.@{fa-css-prefix}-ruble:before,\n.@{fa-css-prefix}-rouble:before,\n.@{fa-css-prefix}-rub:before { content: @fa-var-rub; }\n.@{fa-css-prefix}-won:before,\n.@{fa-css-prefix}-krw:before { content: @fa-var-krw; }\n.@{fa-css-prefix}-bitcoin:before,\n.@{fa-css-prefix}-btc:before { content: @fa-var-btc; }\n.@{fa-css-prefix}-file:before { content: @fa-var-file; }\n.@{fa-css-prefix}-file-text:before { content: @fa-var-file-text; }\n.@{fa-css-prefix}-sort-alpha-asc:before { content: @fa-var-sort-alpha-asc; }\n.@{fa-css-prefix}-sort-alpha-desc:before { content: @fa-var-sort-alpha-desc; }\n.@{fa-css-prefix}-sort-amount-asc:before { content: @fa-var-sort-amount-asc; }\n.@{fa-css-prefix}-sort-amount-desc:before { content: @fa-var-sort-amount-desc; }\n.@{fa-css-prefix}-sort-numeric-asc:before { content: @fa-var-sort-numeric-asc; }\n.@{fa-css-prefix}-sort-numeric-desc:before { content: @fa-var-sort-numeric-desc; }\n.@{fa-css-prefix}-thumbs-up:before { content: @fa-var-thumbs-up; }\n.@{fa-css-prefix}-thumbs-down:before { content: @fa-var-thumbs-down; }\n.@{fa-css-prefix}-youtube-square:before { content: @fa-var-youtube-square; }\n.@{fa-css-prefix}-youtube:before { content: @fa-var-youtube; }\n.@{fa-css-prefix}-xing:before { content: @fa-var-xing; }\n.@{fa-css-prefix}-xing-square:before { content: @fa-var-xing-square; }\n.@{fa-css-prefix}-youtube-play:before { content: @fa-var-youtube-play; }\n.@{fa-css-prefix}-dropbox:before { content: @fa-var-dropbox; }\n.@{fa-css-prefix}-stack-overflow:before { content: @fa-var-stack-overflow; }\n.@{fa-css-prefix}-instagram:before { content: @fa-var-instagram; }\n.@{fa-css-prefix}-flickr:before { content: @fa-var-flickr; }\n.@{fa-css-prefix}-adn:before { content: @fa-var-adn; }\n.@{fa-css-prefix}-bitbucket:before { content: @fa-var-bitbucket; }\n.@{fa-css-prefix}-bitbucket-square:before { content: @fa-var-bitbucket-square; }\n.@{fa-css-prefix}-tumblr:before { content: @fa-var-tumblr; }\n.@{fa-css-prefix}-tumblr-square:before { content: @fa-var-tumblr-square; }\n.@{fa-css-prefix}-long-arrow-down:before { content: @fa-var-long-arrow-down; }\n.@{fa-css-prefix}-long-arrow-up:before { content: @fa-var-long-arrow-up; }\n.@{fa-css-prefix}-long-arrow-left:before { content: @fa-var-long-arrow-left; }\n.@{fa-css-prefix}-long-arrow-right:before { content: @fa-var-long-arrow-right; }\n.@{fa-css-prefix}-apple:before { content: @fa-var-apple; }\n.@{fa-css-prefix}-windows:before { content: @fa-var-windows; }\n.@{fa-css-prefix}-android:before { content: @fa-var-android; }\n.@{fa-css-prefix}-linux:before { content: @fa-var-linux; }\n.@{fa-css-prefix}-dribbble:before { content: @fa-var-dribbble; }\n.@{fa-css-prefix}-skype:before { content: @fa-var-skype; }\n.@{fa-css-prefix}-foursquare:before { content: @fa-var-foursquare; }\n.@{fa-css-prefix}-trello:before { content: @fa-var-trello; }\n.@{fa-css-prefix}-female:before { content: @fa-var-female; }\n.@{fa-css-prefix}-male:before { content: @fa-var-male; }\n.@{fa-css-prefix}-gittip:before,\n.@{fa-css-prefix}-gratipay:before { content: @fa-var-gratipay; }\n.@{fa-css-prefix}-sun-o:before { content: @fa-var-sun-o; }\n.@{fa-css-prefix}-moon-o:before { content: @fa-var-moon-o; }\n.@{fa-css-prefix}-archive:before { content: @fa-var-archive; }\n.@{fa-css-prefix}-bug:before { content: @fa-var-bug; }\n.@{fa-css-prefix}-vk:before { content: @fa-var-vk; }\n.@{fa-css-prefix}-weibo:before { content: @fa-var-weibo; }\n.@{fa-css-prefix}-renren:before { content: @fa-var-renren; }\n.@{fa-css-prefix}-pagelines:before { content: @fa-var-pagelines; }\n.@{fa-css-prefix}-stack-exchange:before { content: @fa-var-stack-exchange; }\n.@{fa-css-prefix}-arrow-circle-o-right:before { content: @fa-var-arrow-circle-o-right; }\n.@{fa-css-prefix}-arrow-circle-o-left:before { content: @fa-var-arrow-circle-o-left; }\n.@{fa-css-prefix}-toggle-left:before,\n.@{fa-css-prefix}-caret-square-o-left:before { content: @fa-var-caret-square-o-left; }\n.@{fa-css-prefix}-dot-circle-o:before { content: @fa-var-dot-circle-o; }\n.@{fa-css-prefix}-wheelchair:before { content: @fa-var-wheelchair; }\n.@{fa-css-prefix}-vimeo-square:before { content: @fa-var-vimeo-square; }\n.@{fa-css-prefix}-turkish-lira:before,\n.@{fa-css-prefix}-try:before { content: @fa-var-try; }\n.@{fa-css-prefix}-plus-square-o:before { content: @fa-var-plus-square-o; }\n.@{fa-css-prefix}-space-shuttle:before { content: @fa-var-space-shuttle; }\n.@{fa-css-prefix}-slack:before { content: @fa-var-slack; }\n.@{fa-css-prefix}-envelope-square:before { content: @fa-var-envelope-square; }\n.@{fa-css-prefix}-wordpress:before { content: @fa-var-wordpress; }\n.@{fa-css-prefix}-openid:before { content: @fa-var-openid; }\n.@{fa-css-prefix}-institution:before,\n.@{fa-css-prefix}-bank:before,\n.@{fa-css-prefix}-university:before { content: @fa-var-university; }\n.@{fa-css-prefix}-mortar-board:before,\n.@{fa-css-prefix}-graduation-cap:before { content: @fa-var-graduation-cap; }\n.@{fa-css-prefix}-yahoo:before { content: @fa-var-yahoo; }\n.@{fa-css-prefix}-google:before { content: @fa-var-google; }\n.@{fa-css-prefix}-reddit:before { content: @fa-var-reddit; }\n.@{fa-css-prefix}-reddit-square:before { content: @fa-var-reddit-square; }\n.@{fa-css-prefix}-stumbleupon-circle:before { content: @fa-var-stumbleupon-circle; }\n.@{fa-css-prefix}-stumbleupon:before { content: @fa-var-stumbleupon; }\n.@{fa-css-prefix}-delicious:before { content: @fa-var-delicious; }\n.@{fa-css-prefix}-digg:before { content: @fa-var-digg; }\n.@{fa-css-prefix}-pied-piper:before { content: @fa-var-pied-piper; }\n.@{fa-css-prefix}-pied-piper-alt:before { content: @fa-var-pied-piper-alt; }\n.@{fa-css-prefix}-drupal:before { content: @fa-var-drupal; }\n.@{fa-css-prefix}-joomla:before { content: @fa-var-joomla; }\n.@{fa-css-prefix}-language:before { content: @fa-var-language; }\n.@{fa-css-prefix}-fax:before { content: @fa-var-fax; }\n.@{fa-css-prefix}-building:before { content: @fa-var-building; }\n.@{fa-css-prefix}-child:before { content: @fa-var-child; }\n.@{fa-css-prefix}-paw:before { content: @fa-var-paw; }\n.@{fa-css-prefix}-spoon:before { content: @fa-var-spoon; }\n.@{fa-css-prefix}-cube:before { content: @fa-var-cube; }\n.@{fa-css-prefix}-cubes:before { content: @fa-var-cubes; }\n.@{fa-css-prefix}-behance:before { content: @fa-var-behance; }\n.@{fa-css-prefix}-behance-square:before { content: @fa-var-behance-square; }\n.@{fa-css-prefix}-steam:before { content: @fa-var-steam; }\n.@{fa-css-prefix}-steam-square:before { content: @fa-var-steam-square; }\n.@{fa-css-prefix}-recycle:before { content: @fa-var-recycle; }\n.@{fa-css-prefix}-automobile:before,\n.@{fa-css-prefix}-car:before { content: @fa-var-car; }\n.@{fa-css-prefix}-cab:before,\n.@{fa-css-prefix}-taxi:before { content: @fa-var-taxi; }\n.@{fa-css-prefix}-tree:before { content: @fa-var-tree; }\n.@{fa-css-prefix}-spotify:before { content: @fa-var-spotify; }\n.@{fa-css-prefix}-deviantart:before { content: @fa-var-deviantart; }\n.@{fa-css-prefix}-soundcloud:before { content: @fa-var-soundcloud; }\n.@{fa-css-prefix}-database:before { content: @fa-var-database; }\n.@{fa-css-prefix}-file-pdf-o:before { content: @fa-var-file-pdf-o; }\n.@{fa-css-prefix}-file-word-o:before { content: @fa-var-file-word-o; }\n.@{fa-css-prefix}-file-excel-o:before { content: @fa-var-file-excel-o; }\n.@{fa-css-prefix}-file-powerpoint-o:before { content: @fa-var-file-powerpoint-o; }\n.@{fa-css-prefix}-file-photo-o:before,\n.@{fa-css-prefix}-file-picture-o:before,\n.@{fa-css-prefix}-file-image-o:before { content: @fa-var-file-image-o; }\n.@{fa-css-prefix}-file-zip-o:before,\n.@{fa-css-prefix}-file-archive-o:before { content: @fa-var-file-archive-o; }\n.@{fa-css-prefix}-file-sound-o:before,\n.@{fa-css-prefix}-file-audio-o:before { content: @fa-var-file-audio-o; }\n.@{fa-css-prefix}-file-movie-o:before,\n.@{fa-css-prefix}-file-video-o:before { content: @fa-var-file-video-o; }\n.@{fa-css-prefix}-file-code-o:before { content: @fa-var-file-code-o; }\n.@{fa-css-prefix}-vine:before { content: @fa-var-vine; }\n.@{fa-css-prefix}-codepen:before { content: @fa-var-codepen; }\n.@{fa-css-prefix}-jsfiddle:before { content: @fa-var-jsfiddle; }\n.@{fa-css-prefix}-life-bouy:before,\n.@{fa-css-prefix}-life-buoy:before,\n.@{fa-css-prefix}-life-saver:before,\n.@{fa-css-prefix}-support:before,\n.@{fa-css-prefix}-life-ring:before { content: @fa-var-life-ring; }\n.@{fa-css-prefix}-circle-o-notch:before { content: @fa-var-circle-o-notch; }\n.@{fa-css-prefix}-ra:before,\n.@{fa-css-prefix}-rebel:before { content: @fa-var-rebel; }\n.@{fa-css-prefix}-ge:before,\n.@{fa-css-prefix}-empire:before { content: @fa-var-empire; }\n.@{fa-css-prefix}-git-square:before { content: @fa-var-git-square; }\n.@{fa-css-prefix}-git:before { content: @fa-var-git; }\n.@{fa-css-prefix}-hacker-news:before { content: @fa-var-hacker-news; }\n.@{fa-css-prefix}-tencent-weibo:before { content: @fa-var-tencent-weibo; }\n.@{fa-css-prefix}-qq:before { content: @fa-var-qq; }\n.@{fa-css-prefix}-wechat:before,\n.@{fa-css-prefix}-weixin:before { content: @fa-var-weixin; }\n.@{fa-css-prefix}-send:before,\n.@{fa-css-prefix}-paper-plane:before { content: @fa-var-paper-plane; }\n.@{fa-css-prefix}-send-o:before,\n.@{fa-css-prefix}-paper-plane-o:before { content: @fa-var-paper-plane-o; }\n.@{fa-css-prefix}-history:before { content: @fa-var-history; }\n.@{fa-css-prefix}-genderless:before,\n.@{fa-css-prefix}-circle-thin:before { content: @fa-var-circle-thin; }\n.@{fa-css-prefix}-header:before { content: @fa-var-header; }\n.@{fa-css-prefix}-paragraph:before { content: @fa-var-paragraph; }\n.@{fa-css-prefix}-sliders:before { content: @fa-var-sliders; }\n.@{fa-css-prefix}-share-alt:before { content: @fa-var-share-alt; }\n.@{fa-css-prefix}-share-alt-square:before { content: @fa-var-share-alt-square; }\n.@{fa-css-prefix}-bomb:before { content: @fa-var-bomb; }\n.@{fa-css-prefix}-soccer-ball-o:before,\n.@{fa-css-prefix}-futbol-o:before { content: @fa-var-futbol-o; }\n.@{fa-css-prefix}-tty:before { content: @fa-var-tty; }\n.@{fa-css-prefix}-binoculars:before { content: @fa-var-binoculars; }\n.@{fa-css-prefix}-plug:before { content: @fa-var-plug; }\n.@{fa-css-prefix}-slideshare:before { content: @fa-var-slideshare; }\n.@{fa-css-prefix}-twitch:before { content: @fa-var-twitch; }\n.@{fa-css-prefix}-yelp:before { content: @fa-var-yelp; }\n.@{fa-css-prefix}-newspaper-o:before { content: @fa-var-newspaper-o; }\n.@{fa-css-prefix}-wifi:before { content: @fa-var-wifi; }\n.@{fa-css-prefix}-calculator:before { content: @fa-var-calculator; }\n.@{fa-css-prefix}-paypal:before { content: @fa-var-paypal; }\n.@{fa-css-prefix}-google-wallet:before { content: @fa-var-google-wallet; }\n.@{fa-css-prefix}-cc-visa:before { content: @fa-var-cc-visa; }\n.@{fa-css-prefix}-cc-mastercard:before { content: @fa-var-cc-mastercard; }\n.@{fa-css-prefix}-cc-discover:before { content: @fa-var-cc-discover; }\n.@{fa-css-prefix}-cc-amex:before { content: @fa-var-cc-amex; }\n.@{fa-css-prefix}-cc-paypal:before { content: @fa-var-cc-paypal; }\n.@{fa-css-prefix}-cc-stripe:before { content: @fa-var-cc-stripe; }\n.@{fa-css-prefix}-bell-slash:before { content: @fa-var-bell-slash; }\n.@{fa-css-prefix}-bell-slash-o:before { content: @fa-var-bell-slash-o; }\n.@{fa-css-prefix}-trash:before { content: @fa-var-trash; }\n.@{fa-css-prefix}-copyright:before { content: @fa-var-copyright; }\n.@{fa-css-prefix}-at:before { content: @fa-var-at; }\n.@{fa-css-prefix}-eyedropper:before { content: @fa-var-eyedropper; }\n.@{fa-css-prefix}-paint-brush:before { content: @fa-var-paint-brush; }\n.@{fa-css-prefix}-birthday-cake:before { content: @fa-var-birthday-cake; }\n.@{fa-css-prefix}-area-chart:before { content: @fa-var-area-chart; }\n.@{fa-css-prefix}-pie-chart:before { content: @fa-var-pie-chart; }\n.@{fa-css-prefix}-line-chart:before { content: @fa-var-line-chart; }\n.@{fa-css-prefix}-lastfm:before { content: @fa-var-lastfm; }\n.@{fa-css-prefix}-lastfm-square:before { content: @fa-var-lastfm-square; }\n.@{fa-css-prefix}-toggle-off:before { content: @fa-var-toggle-off; }\n.@{fa-css-prefix}-toggle-on:before { content: @fa-var-toggle-on; }\n.@{fa-css-prefix}-bicycle:before { content: @fa-var-bicycle; }\n.@{fa-css-prefix}-bus:before { content: @fa-var-bus; }\n.@{fa-css-prefix}-ioxhost:before { content: @fa-var-ioxhost; }\n.@{fa-css-prefix}-angellist:before { content: @fa-var-angellist; }\n.@{fa-css-prefix}-cc:before { content: @fa-var-cc; }\n.@{fa-css-prefix}-shekel:before,\n.@{fa-css-prefix}-sheqel:before,\n.@{fa-css-prefix}-ils:before { content: @fa-var-ils; }\n.@{fa-css-prefix}-meanpath:before { content: @fa-var-meanpath; }\n.@{fa-css-prefix}-buysellads:before { content: @fa-var-buysellads; }\n.@{fa-css-prefix}-connectdevelop:before { content: @fa-var-connectdevelop; }\n.@{fa-css-prefix}-dashcube:before { content: @fa-var-dashcube; }\n.@{fa-css-prefix}-forumbee:before { content: @fa-var-forumbee; }\n.@{fa-css-prefix}-leanpub:before { content: @fa-var-leanpub; }\n.@{fa-css-prefix}-sellsy:before { content: @fa-var-sellsy; }\n.@{fa-css-prefix}-shirtsinbulk:before { content: @fa-var-shirtsinbulk; }\n.@{fa-css-prefix}-simplybuilt:before { content: @fa-var-simplybuilt; }\n.@{fa-css-prefix}-skyatlas:before { content: @fa-var-skyatlas; }\n.@{fa-css-prefix}-cart-plus:before { content: @fa-var-cart-plus; }\n.@{fa-css-prefix}-cart-arrow-down:before { content: @fa-var-cart-arrow-down; }\n.@{fa-css-prefix}-diamond:before { content: @fa-var-diamond; }\n.@{fa-css-prefix}-ship:before { content: @fa-var-ship; }\n.@{fa-css-prefix}-user-secret:before { content: @fa-var-user-secret; }\n.@{fa-css-prefix}-motorcycle:before { content: @fa-var-motorcycle; }\n.@{fa-css-prefix}-street-view:before { content: @fa-var-street-view; }\n.@{fa-css-prefix}-heartbeat:before { content: @fa-var-heartbeat; }\n.@{fa-css-prefix}-venus:before { content: @fa-var-venus; }\n.@{fa-css-prefix}-mars:before { content: @fa-var-mars; }\n.@{fa-css-prefix}-mercury:before { content: @fa-var-mercury; }\n.@{fa-css-prefix}-transgender:before { content: @fa-var-transgender; }\n.@{fa-css-prefix}-transgender-alt:before { content: @fa-var-transgender-alt; }\n.@{fa-css-prefix}-venus-double:before { content: @fa-var-venus-double; }\n.@{fa-css-prefix}-mars-double:before { content: @fa-var-mars-double; }\n.@{fa-css-prefix}-venus-mars:before { content: @fa-var-venus-mars; }\n.@{fa-css-prefix}-mars-stroke:before { content: @fa-var-mars-stroke; }\n.@{fa-css-prefix}-mars-stroke-v:before { content: @fa-var-mars-stroke-v; }\n.@{fa-css-prefix}-mars-stroke-h:before { content: @fa-var-mars-stroke-h; }\n.@{fa-css-prefix}-neuter:before { content: @fa-var-neuter; }\n.@{fa-css-prefix}-facebook-official:before { content: @fa-var-facebook-official; }\n.@{fa-css-prefix}-pinterest-p:before { content: @fa-var-pinterest-p; }\n.@{fa-css-prefix}-whatsapp:before { content: @fa-var-whatsapp; }\n.@{fa-css-prefix}-server:before { content: @fa-var-server; }\n.@{fa-css-prefix}-user-plus:before { content: @fa-var-user-plus; }\n.@{fa-css-prefix}-user-times:before { content: @fa-var-user-times; }\n.@{fa-css-prefix}-hotel:before,\n.@{fa-css-prefix}-bed:before { content: @fa-var-bed; }\n.@{fa-css-prefix}-viacoin:before { content: @fa-var-viacoin; }\n.@{fa-css-prefix}-train:before { content: @fa-var-train; }\n.@{fa-css-prefix}-subway:before { content: @fa-var-subway; }\n.@{fa-css-prefix}-medium:before { content: @fa-var-medium; }\n"
  },
  {
    "path": "presentation/contrib/font-awesome-4.3.0/less/larger.less",
    "content": "// Icon Sizes\n// -------------------------\n\n/* makes the font 33% larger relative to the icon container */\n.@{fa-css-prefix}-lg {\n  font-size: (4em / 3);\n  line-height: (3em / 4);\n  vertical-align: -15%;\n}\n.@{fa-css-prefix}-2x { font-size: 2em; }\n.@{fa-css-prefix}-3x { font-size: 3em; }\n.@{fa-css-prefix}-4x { font-size: 4em; }\n.@{fa-css-prefix}-5x { font-size: 5em; }\n"
  },
  {
    "path": "presentation/contrib/font-awesome-4.3.0/less/list.less",
    "content": "// List Icons\n// -------------------------\n\n.@{fa-css-prefix}-ul {\n  padding-left: 0;\n  margin-left: @fa-li-width;\n  list-style-type: none;\n  > li { position: relative; }\n}\n.@{fa-css-prefix}-li {\n  position: absolute;\n  left: -@fa-li-width;\n  width: @fa-li-width;\n  top: (2em / 14);\n  text-align: center;\n  &.@{fa-css-prefix}-lg {\n    left: (-@fa-li-width + (4em / 14));\n  }\n}\n"
  },
  {
    "path": "presentation/contrib/font-awesome-4.3.0/less/mixins.less",
    "content": "// Mixins\n// --------------------------\n\n.fa-icon() {\n  display: inline-block;\n  font: normal normal normal @fa-font-size-base/1 FontAwesome; // shortening font declaration\n  font-size: inherit; // can't have font-size inherit on line above, so need to override\n  text-rendering: auto; // optimizelegibility throws things off #1094\n  -webkit-font-smoothing: antialiased;\n  -moz-osx-font-smoothing: grayscale;\n  transform: translate(0, 0); // ensures no half-pixel rendering in firefox\n\n}\n\n.fa-icon-rotate(@degrees, @rotation) {\n  filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=@rotation);\n  -webkit-transform: rotate(@degrees);\n      -ms-transform: rotate(@degrees);\n          transform: rotate(@degrees);\n}\n\n.fa-icon-flip(@horiz, @vert, @rotation) {\n  filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=@rotation, mirror=1);\n  -webkit-transform: scale(@horiz, @vert);\n      -ms-transform: scale(@horiz, @vert);\n          transform: scale(@horiz, @vert);\n}\n"
  },
  {
    "path": "presentation/contrib/font-awesome-4.3.0/less/path.less",
    "content": "/* FONT PATH\n * -------------------------- */\n\n@font-face {\n  font-family: 'FontAwesome';\n  src: url('@{fa-font-path}/fontawesome-webfont.eot?v=@{fa-version}');\n  src: url('@{fa-font-path}/fontawesome-webfont.eot?#iefix&v=@{fa-version}') format('embedded-opentype'),\n    url('@{fa-font-path}/fontawesome-webfont.woff2?v=@{fa-version}') format('woff2'),\n    url('@{fa-font-path}/fontawesome-webfont.woff?v=@{fa-version}') format('woff'),\n    url('@{fa-font-path}/fontawesome-webfont.ttf?v=@{fa-version}') format('truetype'),\n    url('@{fa-font-path}/fontawesome-webfont.svg?v=@{fa-version}#fontawesomeregular') format('svg');\n//  src: url('@{fa-font-path}/FontAwesome.otf') format('opentype'); // used when developing fonts\n  font-weight: normal;\n  font-style: normal;\n}\n"
  },
  {
    "path": "presentation/contrib/font-awesome-4.3.0/less/rotated-flipped.less",
    "content": "// Rotated & Flipped Icons\n// -------------------------\n\n.@{fa-css-prefix}-rotate-90  { .fa-icon-rotate(90deg, 1);  }\n.@{fa-css-prefix}-rotate-180 { .fa-icon-rotate(180deg, 2); }\n.@{fa-css-prefix}-rotate-270 { .fa-icon-rotate(270deg, 3); }\n\n.@{fa-css-prefix}-flip-horizontal { .fa-icon-flip(-1, 1, 0); }\n.@{fa-css-prefix}-flip-vertical   { .fa-icon-flip(1, -1, 2); }\n\n// Hook for IE8-9\n// -------------------------\n\n:root .@{fa-css-prefix}-rotate-90,\n:root .@{fa-css-prefix}-rotate-180,\n:root .@{fa-css-prefix}-rotate-270,\n:root .@{fa-css-prefix}-flip-horizontal,\n:root .@{fa-css-prefix}-flip-vertical {\n  filter: none;\n}\n"
  },
  {
    "path": "presentation/contrib/font-awesome-4.3.0/less/stacked.less",
    "content": "// Stacked Icons\n// -------------------------\n\n.@{fa-css-prefix}-stack {\n  position: relative;\n  display: inline-block;\n  width: 2em;\n  height: 2em;\n  line-height: 2em;\n  vertical-align: middle;\n}\n.@{fa-css-prefix}-stack-1x, .@{fa-css-prefix}-stack-2x {\n  position: absolute;\n  left: 0;\n  width: 100%;\n  text-align: center;\n}\n.@{fa-css-prefix}-stack-1x { line-height: inherit; }\n.@{fa-css-prefix}-stack-2x { font-size: 2em; }\n.@{fa-css-prefix}-inverse { color: @fa-inverse; }\n"
  },
  {
    "path": "presentation/contrib/font-awesome-4.3.0/less/variables.less",
    "content": "// Variables\n// --------------------------\n\n@fa-font-path:        \"../fonts\";\n@fa-font-size-base:   14px;\n//@fa-font-path:        \"//netdna.bootstrapcdn.com/font-awesome/4.3.0/fonts\"; // for referencing Bootstrap CDN font files directly\n@fa-css-prefix:       fa;\n@fa-version:          \"4.3.0\";\n@fa-border-color:     #eee;\n@fa-inverse:          #fff;\n@fa-li-width:         (30em / 14);\n\n@fa-var-adjust: \"\\f042\";\n@fa-var-adn: \"\\f170\";\n@fa-var-align-center: \"\\f037\";\n@fa-var-align-justify: \"\\f039\";\n@fa-var-align-left: \"\\f036\";\n@fa-var-align-right: \"\\f038\";\n@fa-var-ambulance: \"\\f0f9\";\n@fa-var-anchor: \"\\f13d\";\n@fa-var-android: \"\\f17b\";\n@fa-var-angellist: \"\\f209\";\n@fa-var-angle-double-down: \"\\f103\";\n@fa-var-angle-double-left: \"\\f100\";\n@fa-var-angle-double-right: \"\\f101\";\n@fa-var-angle-double-up: \"\\f102\";\n@fa-var-angle-down: \"\\f107\";\n@fa-var-angle-left: \"\\f104\";\n@fa-var-angle-right: \"\\f105\";\n@fa-var-angle-up: \"\\f106\";\n@fa-var-apple: \"\\f179\";\n@fa-var-archive: \"\\f187\";\n@fa-var-area-chart: \"\\f1fe\";\n@fa-var-arrow-circle-down: \"\\f0ab\";\n@fa-var-arrow-circle-left: \"\\f0a8\";\n@fa-var-arrow-circle-o-down: \"\\f01a\";\n@fa-var-arrow-circle-o-left: \"\\f190\";\n@fa-var-arrow-circle-o-right: \"\\f18e\";\n@fa-var-arrow-circle-o-up: \"\\f01b\";\n@fa-var-arrow-circle-right: \"\\f0a9\";\n@fa-var-arrow-circle-up: \"\\f0aa\";\n@fa-var-arrow-down: \"\\f063\";\n@fa-var-arrow-left: \"\\f060\";\n@fa-var-arrow-right: \"\\f061\";\n@fa-var-arrow-up: \"\\f062\";\n@fa-var-arrows: \"\\f047\";\n@fa-var-arrows-alt: \"\\f0b2\";\n@fa-var-arrows-h: \"\\f07e\";\n@fa-var-arrows-v: \"\\f07d\";\n@fa-var-asterisk: \"\\f069\";\n@fa-var-at: \"\\f1fa\";\n@fa-var-automobile: \"\\f1b9\";\n@fa-var-backward: \"\\f04a\";\n@fa-var-ban: \"\\f05e\";\n@fa-var-bank: \"\\f19c\";\n@fa-var-bar-chart: \"\\f080\";\n@fa-var-bar-chart-o: \"\\f080\";\n@fa-var-barcode: \"\\f02a\";\n@fa-var-bars: \"\\f0c9\";\n@fa-var-bed: \"\\f236\";\n@fa-var-beer: \"\\f0fc\";\n@fa-var-behance: \"\\f1b4\";\n@fa-var-behance-square: \"\\f1b5\";\n@fa-var-bell: \"\\f0f3\";\n@fa-var-bell-o: \"\\f0a2\";\n@fa-var-bell-slash: \"\\f1f6\";\n@fa-var-bell-slash-o: \"\\f1f7\";\n@fa-var-bicycle: \"\\f206\";\n@fa-var-binoculars: \"\\f1e5\";\n@fa-var-birthday-cake: \"\\f1fd\";\n@fa-var-bitbucket: \"\\f171\";\n@fa-var-bitbucket-square: \"\\f172\";\n@fa-var-bitcoin: \"\\f15a\";\n@fa-var-bold: \"\\f032\";\n@fa-var-bolt: \"\\f0e7\";\n@fa-var-bomb: \"\\f1e2\";\n@fa-var-book: \"\\f02d\";\n@fa-var-bookmark: \"\\f02e\";\n@fa-var-bookmark-o: \"\\f097\";\n@fa-var-briefcase: \"\\f0b1\";\n@fa-var-btc: \"\\f15a\";\n@fa-var-bug: \"\\f188\";\n@fa-var-building: \"\\f1ad\";\n@fa-var-building-o: \"\\f0f7\";\n@fa-var-bullhorn: \"\\f0a1\";\n@fa-var-bullseye: \"\\f140\";\n@fa-var-bus: \"\\f207\";\n@fa-var-buysellads: \"\\f20d\";\n@fa-var-cab: \"\\f1ba\";\n@fa-var-calculator: \"\\f1ec\";\n@fa-var-calendar: \"\\f073\";\n@fa-var-calendar-o: \"\\f133\";\n@fa-var-camera: \"\\f030\";\n@fa-var-camera-retro: \"\\f083\";\n@fa-var-car: \"\\f1b9\";\n@fa-var-caret-down: \"\\f0d7\";\n@fa-var-caret-left: \"\\f0d9\";\n@fa-var-caret-right: \"\\f0da\";\n@fa-var-caret-square-o-down: \"\\f150\";\n@fa-var-caret-square-o-left: \"\\f191\";\n@fa-var-caret-square-o-right: \"\\f152\";\n@fa-var-caret-square-o-up: \"\\f151\";\n@fa-var-caret-up: \"\\f0d8\";\n@fa-var-cart-arrow-down: \"\\f218\";\n@fa-var-cart-plus: \"\\f217\";\n@fa-var-cc: \"\\f20a\";\n@fa-var-cc-amex: \"\\f1f3\";\n@fa-var-cc-discover: \"\\f1f2\";\n@fa-var-cc-mastercard: \"\\f1f1\";\n@fa-var-cc-paypal: \"\\f1f4\";\n@fa-var-cc-stripe: \"\\f1f5\";\n@fa-var-cc-visa: \"\\f1f0\";\n@fa-var-certificate: \"\\f0a3\";\n@fa-var-chain: \"\\f0c1\";\n@fa-var-chain-broken: \"\\f127\";\n@fa-var-check: \"\\f00c\";\n@fa-var-check-circle: \"\\f058\";\n@fa-var-check-circle-o: \"\\f05d\";\n@fa-var-check-square: \"\\f14a\";\n@fa-var-check-square-o: \"\\f046\";\n@fa-var-chevron-circle-down: \"\\f13a\";\n@fa-var-chevron-circle-left: \"\\f137\";\n@fa-var-chevron-circle-right: \"\\f138\";\n@fa-var-chevron-circle-up: \"\\f139\";\n@fa-var-chevron-down: \"\\f078\";\n@fa-var-chevron-left: \"\\f053\";\n@fa-var-chevron-right: \"\\f054\";\n@fa-var-chevron-up: \"\\f077\";\n@fa-var-child: \"\\f1ae\";\n@fa-var-circle: \"\\f111\";\n@fa-var-circle-o: \"\\f10c\";\n@fa-var-circle-o-notch: \"\\f1ce\";\n@fa-var-circle-thin: \"\\f1db\";\n@fa-var-clipboard: \"\\f0ea\";\n@fa-var-clock-o: \"\\f017\";\n@fa-var-close: \"\\f00d\";\n@fa-var-cloud: \"\\f0c2\";\n@fa-var-cloud-download: \"\\f0ed\";\n@fa-var-cloud-upload: \"\\f0ee\";\n@fa-var-cny: \"\\f157\";\n@fa-var-code: \"\\f121\";\n@fa-var-code-fork: \"\\f126\";\n@fa-var-codepen: \"\\f1cb\";\n@fa-var-coffee: \"\\f0f4\";\n@fa-var-cog: \"\\f013\";\n@fa-var-cogs: \"\\f085\";\n@fa-var-columns: \"\\f0db\";\n@fa-var-comment: \"\\f075\";\n@fa-var-comment-o: \"\\f0e5\";\n@fa-var-comments: \"\\f086\";\n@fa-var-comments-o: \"\\f0e6\";\n@fa-var-compass: \"\\f14e\";\n@fa-var-compress: \"\\f066\";\n@fa-var-connectdevelop: \"\\f20e\";\n@fa-var-copy: \"\\f0c5\";\n@fa-var-copyright: \"\\f1f9\";\n@fa-var-credit-card: \"\\f09d\";\n@fa-var-crop: \"\\f125\";\n@fa-var-crosshairs: \"\\f05b\";\n@fa-var-css3: \"\\f13c\";\n@fa-var-cube: \"\\f1b2\";\n@fa-var-cubes: \"\\f1b3\";\n@fa-var-cut: \"\\f0c4\";\n@fa-var-cutlery: \"\\f0f5\";\n@fa-var-dashboard: \"\\f0e4\";\n@fa-var-dashcube: \"\\f210\";\n@fa-var-database: \"\\f1c0\";\n@fa-var-dedent: \"\\f03b\";\n@fa-var-delicious: \"\\f1a5\";\n@fa-var-desktop: \"\\f108\";\n@fa-var-deviantart: \"\\f1bd\";\n@fa-var-diamond: \"\\f219\";\n@fa-var-digg: \"\\f1a6\";\n@fa-var-dollar: \"\\f155\";\n@fa-var-dot-circle-o: \"\\f192\";\n@fa-var-download: \"\\f019\";\n@fa-var-dribbble: \"\\f17d\";\n@fa-var-dropbox: \"\\f16b\";\n@fa-var-drupal: \"\\f1a9\";\n@fa-var-edit: \"\\f044\";\n@fa-var-eject: \"\\f052\";\n@fa-var-ellipsis-h: \"\\f141\";\n@fa-var-ellipsis-v: \"\\f142\";\n@fa-var-empire: \"\\f1d1\";\n@fa-var-envelope: \"\\f0e0\";\n@fa-var-envelope-o: \"\\f003\";\n@fa-var-envelope-square: \"\\f199\";\n@fa-var-eraser: \"\\f12d\";\n@fa-var-eur: \"\\f153\";\n@fa-var-euro: \"\\f153\";\n@fa-var-exchange: \"\\f0ec\";\n@fa-var-exclamation: \"\\f12a\";\n@fa-var-exclamation-circle: \"\\f06a\";\n@fa-var-exclamation-triangle: \"\\f071\";\n@fa-var-expand: \"\\f065\";\n@fa-var-external-link: \"\\f08e\";\n@fa-var-external-link-square: \"\\f14c\";\n@fa-var-eye: \"\\f06e\";\n@fa-var-eye-slash: \"\\f070\";\n@fa-var-eyedropper: \"\\f1fb\";\n@fa-var-facebook: \"\\f09a\";\n@fa-var-facebook-f: \"\\f09a\";\n@fa-var-facebook-official: \"\\f230\";\n@fa-var-facebook-square: \"\\f082\";\n@fa-var-fast-backward: \"\\f049\";\n@fa-var-fast-forward: \"\\f050\";\n@fa-var-fax: \"\\f1ac\";\n@fa-var-female: \"\\f182\";\n@fa-var-fighter-jet: \"\\f0fb\";\n@fa-var-file: \"\\f15b\";\n@fa-var-file-archive-o: \"\\f1c6\";\n@fa-var-file-audio-o: \"\\f1c7\";\n@fa-var-file-code-o: \"\\f1c9\";\n@fa-var-file-excel-o: \"\\f1c3\";\n@fa-var-file-image-o: \"\\f1c5\";\n@fa-var-file-movie-o: \"\\f1c8\";\n@fa-var-file-o: \"\\f016\";\n@fa-var-file-pdf-o: \"\\f1c1\";\n@fa-var-file-photo-o: \"\\f1c5\";\n@fa-var-file-picture-o: \"\\f1c5\";\n@fa-var-file-powerpoint-o: \"\\f1c4\";\n@fa-var-file-sound-o: \"\\f1c7\";\n@fa-var-file-text: \"\\f15c\";\n@fa-var-file-text-o: \"\\f0f6\";\n@fa-var-file-video-o: \"\\f1c8\";\n@fa-var-file-word-o: \"\\f1c2\";\n@fa-var-file-zip-o: \"\\f1c6\";\n@fa-var-files-o: \"\\f0c5\";\n@fa-var-film: \"\\f008\";\n@fa-var-filter: \"\\f0b0\";\n@fa-var-fire: \"\\f06d\";\n@fa-var-fire-extinguisher: \"\\f134\";\n@fa-var-flag: \"\\f024\";\n@fa-var-flag-checkered: \"\\f11e\";\n@fa-var-flag-o: \"\\f11d\";\n@fa-var-flash: \"\\f0e7\";\n@fa-var-flask: \"\\f0c3\";\n@fa-var-flickr: \"\\f16e\";\n@fa-var-floppy-o: \"\\f0c7\";\n@fa-var-folder: \"\\f07b\";\n@fa-var-folder-o: \"\\f114\";\n@fa-var-folder-open: \"\\f07c\";\n@fa-var-folder-open-o: \"\\f115\";\n@fa-var-font: \"\\f031\";\n@fa-var-forumbee: \"\\f211\";\n@fa-var-forward: \"\\f04e\";\n@fa-var-foursquare: \"\\f180\";\n@fa-var-frown-o: \"\\f119\";\n@fa-var-futbol-o: \"\\f1e3\";\n@fa-var-gamepad: \"\\f11b\";\n@fa-var-gavel: \"\\f0e3\";\n@fa-var-gbp: \"\\f154\";\n@fa-var-ge: \"\\f1d1\";\n@fa-var-gear: \"\\f013\";\n@fa-var-gears: \"\\f085\";\n@fa-var-genderless: \"\\f1db\";\n@fa-var-gift: \"\\f06b\";\n@fa-var-git: \"\\f1d3\";\n@fa-var-git-square: \"\\f1d2\";\n@fa-var-github: \"\\f09b\";\n@fa-var-github-alt: \"\\f113\";\n@fa-var-github-square: \"\\f092\";\n@fa-var-gittip: \"\\f184\";\n@fa-var-glass: \"\\f000\";\n@fa-var-globe: \"\\f0ac\";\n@fa-var-google: \"\\f1a0\";\n@fa-var-google-plus: \"\\f0d5\";\n@fa-var-google-plus-square: \"\\f0d4\";\n@fa-var-google-wallet: \"\\f1ee\";\n@fa-var-graduation-cap: \"\\f19d\";\n@fa-var-gratipay: \"\\f184\";\n@fa-var-group: \"\\f0c0\";\n@fa-var-h-square: \"\\f0fd\";\n@fa-var-hacker-news: \"\\f1d4\";\n@fa-var-hand-o-down: \"\\f0a7\";\n@fa-var-hand-o-left: \"\\f0a5\";\n@fa-var-hand-o-right: \"\\f0a4\";\n@fa-var-hand-o-up: \"\\f0a6\";\n@fa-var-hdd-o: \"\\f0a0\";\n@fa-var-header: \"\\f1dc\";\n@fa-var-headphones: \"\\f025\";\n@fa-var-heart: \"\\f004\";\n@fa-var-heart-o: \"\\f08a\";\n@fa-var-heartbeat: \"\\f21e\";\n@fa-var-history: \"\\f1da\";\n@fa-var-home: \"\\f015\";\n@fa-var-hospital-o: \"\\f0f8\";\n@fa-var-hotel: \"\\f236\";\n@fa-var-html5: \"\\f13b\";\n@fa-var-ils: \"\\f20b\";\n@fa-var-image: \"\\f03e\";\n@fa-var-inbox: \"\\f01c\";\n@fa-var-indent: \"\\f03c\";\n@fa-var-info: \"\\f129\";\n@fa-var-info-circle: \"\\f05a\";\n@fa-var-inr: \"\\f156\";\n@fa-var-instagram: \"\\f16d\";\n@fa-var-institution: \"\\f19c\";\n@fa-var-ioxhost: \"\\f208\";\n@fa-var-italic: \"\\f033\";\n@fa-var-joomla: \"\\f1aa\";\n@fa-var-jpy: \"\\f157\";\n@fa-var-jsfiddle: \"\\f1cc\";\n@fa-var-key: \"\\f084\";\n@fa-var-keyboard-o: \"\\f11c\";\n@fa-var-krw: \"\\f159\";\n@fa-var-language: \"\\f1ab\";\n@fa-var-laptop: \"\\f109\";\n@fa-var-lastfm: \"\\f202\";\n@fa-var-lastfm-square: \"\\f203\";\n@fa-var-leaf: \"\\f06c\";\n@fa-var-leanpub: \"\\f212\";\n@fa-var-legal: \"\\f0e3\";\n@fa-var-lemon-o: \"\\f094\";\n@fa-var-level-down: \"\\f149\";\n@fa-var-level-up: \"\\f148\";\n@fa-var-life-bouy: \"\\f1cd\";\n@fa-var-life-buoy: \"\\f1cd\";\n@fa-var-life-ring: \"\\f1cd\";\n@fa-var-life-saver: \"\\f1cd\";\n@fa-var-lightbulb-o: \"\\f0eb\";\n@fa-var-line-chart: \"\\f201\";\n@fa-var-link: \"\\f0c1\";\n@fa-var-linkedin: \"\\f0e1\";\n@fa-var-linkedin-square: \"\\f08c\";\n@fa-var-linux: \"\\f17c\";\n@fa-var-list: \"\\f03a\";\n@fa-var-list-alt: \"\\f022\";\n@fa-var-list-ol: \"\\f0cb\";\n@fa-var-list-ul: \"\\f0ca\";\n@fa-var-location-arrow: \"\\f124\";\n@fa-var-lock: \"\\f023\";\n@fa-var-long-arrow-down: \"\\f175\";\n@fa-var-long-arrow-left: \"\\f177\";\n@fa-var-long-arrow-right: \"\\f178\";\n@fa-var-long-arrow-up: \"\\f176\";\n@fa-var-magic: \"\\f0d0\";\n@fa-var-magnet: \"\\f076\";\n@fa-var-mail-forward: \"\\f064\";\n@fa-var-mail-reply: \"\\f112\";\n@fa-var-mail-reply-all: \"\\f122\";\n@fa-var-male: \"\\f183\";\n@fa-var-map-marker: \"\\f041\";\n@fa-var-mars: \"\\f222\";\n@fa-var-mars-double: \"\\f227\";\n@fa-var-mars-stroke: \"\\f229\";\n@fa-var-mars-stroke-h: \"\\f22b\";\n@fa-var-mars-stroke-v: \"\\f22a\";\n@fa-var-maxcdn: \"\\f136\";\n@fa-var-meanpath: \"\\f20c\";\n@fa-var-medium: \"\\f23a\";\n@fa-var-medkit: \"\\f0fa\";\n@fa-var-meh-o: \"\\f11a\";\n@fa-var-mercury: \"\\f223\";\n@fa-var-microphone: \"\\f130\";\n@fa-var-microphone-slash: \"\\f131\";\n@fa-var-minus: \"\\f068\";\n@fa-var-minus-circle: \"\\f056\";\n@fa-var-minus-square: \"\\f146\";\n@fa-var-minus-square-o: \"\\f147\";\n@fa-var-mobile: \"\\f10b\";\n@fa-var-mobile-phone: \"\\f10b\";\n@fa-var-money: \"\\f0d6\";\n@fa-var-moon-o: \"\\f186\";\n@fa-var-mortar-board: \"\\f19d\";\n@fa-var-motorcycle: \"\\f21c\";\n@fa-var-music: \"\\f001\";\n@fa-var-navicon: \"\\f0c9\";\n@fa-var-neuter: \"\\f22c\";\n@fa-var-newspaper-o: \"\\f1ea\";\n@fa-var-openid: \"\\f19b\";\n@fa-var-outdent: \"\\f03b\";\n@fa-var-pagelines: \"\\f18c\";\n@fa-var-paint-brush: \"\\f1fc\";\n@fa-var-paper-plane: \"\\f1d8\";\n@fa-var-paper-plane-o: \"\\f1d9\";\n@fa-var-paperclip: \"\\f0c6\";\n@fa-var-paragraph: \"\\f1dd\";\n@fa-var-paste: \"\\f0ea\";\n@fa-var-pause: \"\\f04c\";\n@fa-var-paw: \"\\f1b0\";\n@fa-var-paypal: \"\\f1ed\";\n@fa-var-pencil: \"\\f040\";\n@fa-var-pencil-square: \"\\f14b\";\n@fa-var-pencil-square-o: \"\\f044\";\n@fa-var-phone: \"\\f095\";\n@fa-var-phone-square: \"\\f098\";\n@fa-var-photo: \"\\f03e\";\n@fa-var-picture-o: \"\\f03e\";\n@fa-var-pie-chart: \"\\f200\";\n@fa-var-pied-piper: \"\\f1a7\";\n@fa-var-pied-piper-alt: \"\\f1a8\";\n@fa-var-pinterest: \"\\f0d2\";\n@fa-var-pinterest-p: \"\\f231\";\n@fa-var-pinterest-square: \"\\f0d3\";\n@fa-var-plane: \"\\f072\";\n@fa-var-play: \"\\f04b\";\n@fa-var-play-circle: \"\\f144\";\n@fa-var-play-circle-o: \"\\f01d\";\n@fa-var-plug: \"\\f1e6\";\n@fa-var-plus: \"\\f067\";\n@fa-var-plus-circle: \"\\f055\";\n@fa-var-plus-square: \"\\f0fe\";\n@fa-var-plus-square-o: \"\\f196\";\n@fa-var-power-off: \"\\f011\";\n@fa-var-print: \"\\f02f\";\n@fa-var-puzzle-piece: \"\\f12e\";\n@fa-var-qq: \"\\f1d6\";\n@fa-var-qrcode: \"\\f029\";\n@fa-var-question: \"\\f128\";\n@fa-var-question-circle: \"\\f059\";\n@fa-var-quote-left: \"\\f10d\";\n@fa-var-quote-right: \"\\f10e\";\n@fa-var-ra: \"\\f1d0\";\n@fa-var-random: \"\\f074\";\n@fa-var-rebel: \"\\f1d0\";\n@fa-var-recycle: \"\\f1b8\";\n@fa-var-reddit: \"\\f1a1\";\n@fa-var-reddit-square: \"\\f1a2\";\n@fa-var-refresh: \"\\f021\";\n@fa-var-remove: \"\\f00d\";\n@fa-var-renren: \"\\f18b\";\n@fa-var-reorder: \"\\f0c9\";\n@fa-var-repeat: \"\\f01e\";\n@fa-var-reply: \"\\f112\";\n@fa-var-reply-all: \"\\f122\";\n@fa-var-retweet: \"\\f079\";\n@fa-var-rmb: \"\\f157\";\n@fa-var-road: \"\\f018\";\n@fa-var-rocket: \"\\f135\";\n@fa-var-rotate-left: \"\\f0e2\";\n@fa-var-rotate-right: \"\\f01e\";\n@fa-var-rouble: \"\\f158\";\n@fa-var-rss: \"\\f09e\";\n@fa-var-rss-square: \"\\f143\";\n@fa-var-rub: \"\\f158\";\n@fa-var-ruble: \"\\f158\";\n@fa-var-rupee: \"\\f156\";\n@fa-var-save: \"\\f0c7\";\n@fa-var-scissors: \"\\f0c4\";\n@fa-var-search: \"\\f002\";\n@fa-var-search-minus: \"\\f010\";\n@fa-var-search-plus: \"\\f00e\";\n@fa-var-sellsy: \"\\f213\";\n@fa-var-send: \"\\f1d8\";\n@fa-var-send-o: \"\\f1d9\";\n@fa-var-server: \"\\f233\";\n@fa-var-share: \"\\f064\";\n@fa-var-share-alt: \"\\f1e0\";\n@fa-var-share-alt-square: \"\\f1e1\";\n@fa-var-share-square: \"\\f14d\";\n@fa-var-share-square-o: \"\\f045\";\n@fa-var-shekel: \"\\f20b\";\n@fa-var-sheqel: \"\\f20b\";\n@fa-var-shield: \"\\f132\";\n@fa-var-ship: \"\\f21a\";\n@fa-var-shirtsinbulk: \"\\f214\";\n@fa-var-shopping-cart: \"\\f07a\";\n@fa-var-sign-in: \"\\f090\";\n@fa-var-sign-out: \"\\f08b\";\n@fa-var-signal: \"\\f012\";\n@fa-var-simplybuilt: \"\\f215\";\n@fa-var-sitemap: \"\\f0e8\";\n@fa-var-skyatlas: \"\\f216\";\n@fa-var-skype: \"\\f17e\";\n@fa-var-slack: \"\\f198\";\n@fa-var-sliders: \"\\f1de\";\n@fa-var-slideshare: \"\\f1e7\";\n@fa-var-smile-o: \"\\f118\";\n@fa-var-soccer-ball-o: \"\\f1e3\";\n@fa-var-sort: \"\\f0dc\";\n@fa-var-sort-alpha-asc: \"\\f15d\";\n@fa-var-sort-alpha-desc: \"\\f15e\";\n@fa-var-sort-amount-asc: \"\\f160\";\n@fa-var-sort-amount-desc: \"\\f161\";\n@fa-var-sort-asc: \"\\f0de\";\n@fa-var-sort-desc: \"\\f0dd\";\n@fa-var-sort-down: \"\\f0dd\";\n@fa-var-sort-numeric-asc: \"\\f162\";\n@fa-var-sort-numeric-desc: \"\\f163\";\n@fa-var-sort-up: \"\\f0de\";\n@fa-var-soundcloud: \"\\f1be\";\n@fa-var-space-shuttle: \"\\f197\";\n@fa-var-spinner: \"\\f110\";\n@fa-var-spoon: \"\\f1b1\";\n@fa-var-spotify: \"\\f1bc\";\n@fa-var-square: \"\\f0c8\";\n@fa-var-square-o: \"\\f096\";\n@fa-var-stack-exchange: \"\\f18d\";\n@fa-var-stack-overflow: \"\\f16c\";\n@fa-var-star: \"\\f005\";\n@fa-var-star-half: \"\\f089\";\n@fa-var-star-half-empty: \"\\f123\";\n@fa-var-star-half-full: \"\\f123\";\n@fa-var-star-half-o: \"\\f123\";\n@fa-var-star-o: \"\\f006\";\n@fa-var-steam: \"\\f1b6\";\n@fa-var-steam-square: \"\\f1b7\";\n@fa-var-step-backward: \"\\f048\";\n@fa-var-step-forward: \"\\f051\";\n@fa-var-stethoscope: \"\\f0f1\";\n@fa-var-stop: \"\\f04d\";\n@fa-var-street-view: \"\\f21d\";\n@fa-var-strikethrough: \"\\f0cc\";\n@fa-var-stumbleupon: \"\\f1a4\";\n@fa-var-stumbleupon-circle: \"\\f1a3\";\n@fa-var-subscript: \"\\f12c\";\n@fa-var-subway: \"\\f239\";\n@fa-var-suitcase: \"\\f0f2\";\n@fa-var-sun-o: \"\\f185\";\n@fa-var-superscript: \"\\f12b\";\n@fa-var-support: \"\\f1cd\";\n@fa-var-table: \"\\f0ce\";\n@fa-var-tablet: \"\\f10a\";\n@fa-var-tachometer: \"\\f0e4\";\n@fa-var-tag: \"\\f02b\";\n@fa-var-tags: \"\\f02c\";\n@fa-var-tasks: \"\\f0ae\";\n@fa-var-taxi: \"\\f1ba\";\n@fa-var-tencent-weibo: \"\\f1d5\";\n@fa-var-terminal: \"\\f120\";\n@fa-var-text-height: \"\\f034\";\n@fa-var-text-width: \"\\f035\";\n@fa-var-th: \"\\f00a\";\n@fa-var-th-large: \"\\f009\";\n@fa-var-th-list: \"\\f00b\";\n@fa-var-thumb-tack: \"\\f08d\";\n@fa-var-thumbs-down: \"\\f165\";\n@fa-var-thumbs-o-down: \"\\f088\";\n@fa-var-thumbs-o-up: \"\\f087\";\n@fa-var-thumbs-up: \"\\f164\";\n@fa-var-ticket: \"\\f145\";\n@fa-var-times: \"\\f00d\";\n@fa-var-times-circle: \"\\f057\";\n@fa-var-times-circle-o: \"\\f05c\";\n@fa-var-tint: \"\\f043\";\n@fa-var-toggle-down: \"\\f150\";\n@fa-var-toggle-left: \"\\f191\";\n@fa-var-toggle-off: \"\\f204\";\n@fa-var-toggle-on: \"\\f205\";\n@fa-var-toggle-right: \"\\f152\";\n@fa-var-toggle-up: \"\\f151\";\n@fa-var-train: \"\\f238\";\n@fa-var-transgender: \"\\f224\";\n@fa-var-transgender-alt: \"\\f225\";\n@fa-var-trash: \"\\f1f8\";\n@fa-var-trash-o: \"\\f014\";\n@fa-var-tree: \"\\f1bb\";\n@fa-var-trello: \"\\f181\";\n@fa-var-trophy: \"\\f091\";\n@fa-var-truck: \"\\f0d1\";\n@fa-var-try: \"\\f195\";\n@fa-var-tty: \"\\f1e4\";\n@fa-var-tumblr: \"\\f173\";\n@fa-var-tumblr-square: \"\\f174\";\n@fa-var-turkish-lira: \"\\f195\";\n@fa-var-twitch: \"\\f1e8\";\n@fa-var-twitter: \"\\f099\";\n@fa-var-twitter-square: \"\\f081\";\n@fa-var-umbrella: \"\\f0e9\";\n@fa-var-underline: \"\\f0cd\";\n@fa-var-undo: \"\\f0e2\";\n@fa-var-university: \"\\f19c\";\n@fa-var-unlink: \"\\f127\";\n@fa-var-unlock: \"\\f09c\";\n@fa-var-unlock-alt: \"\\f13e\";\n@fa-var-unsorted: \"\\f0dc\";\n@fa-var-upload: \"\\f093\";\n@fa-var-usd: \"\\f155\";\n@fa-var-user: \"\\f007\";\n@fa-var-user-md: \"\\f0f0\";\n@fa-var-user-plus: \"\\f234\";\n@fa-var-user-secret: \"\\f21b\";\n@fa-var-user-times: \"\\f235\";\n@fa-var-users: \"\\f0c0\";\n@fa-var-venus: \"\\f221\";\n@fa-var-venus-double: \"\\f226\";\n@fa-var-venus-mars: \"\\f228\";\n@fa-var-viacoin: \"\\f237\";\n@fa-var-video-camera: \"\\f03d\";\n@fa-var-vimeo-square: \"\\f194\";\n@fa-var-vine: \"\\f1ca\";\n@fa-var-vk: \"\\f189\";\n@fa-var-volume-down: \"\\f027\";\n@fa-var-volume-off: \"\\f026\";\n@fa-var-volume-up: \"\\f028\";\n@fa-var-warning: \"\\f071\";\n@fa-var-wechat: \"\\f1d7\";\n@fa-var-weibo: \"\\f18a\";\n@fa-var-weixin: \"\\f1d7\";\n@fa-var-whatsapp: \"\\f232\";\n@fa-var-wheelchair: \"\\f193\";\n@fa-var-wifi: \"\\f1eb\";\n@fa-var-windows: \"\\f17a\";\n@fa-var-won: \"\\f159\";\n@fa-var-wordpress: \"\\f19a\";\n@fa-var-wrench: \"\\f0ad\";\n@fa-var-xing: \"\\f168\";\n@fa-var-xing-square: \"\\f169\";\n@fa-var-yahoo: \"\\f19e\";\n@fa-var-yelp: \"\\f1e9\";\n@fa-var-yen: \"\\f157\";\n@fa-var-youtube: \"\\f167\";\n@fa-var-youtube-play: \"\\f16a\";\n@fa-var-youtube-square: \"\\f166\";\n\n"
  },
  {
    "path": "presentation/contrib/font-awesome-4.3.0/scss/_animated.scss",
    "content": "// Spinning Icons\n// --------------------------\n\n.#{$fa-css-prefix}-spin {\n  -webkit-animation: fa-spin 2s infinite linear;\n          animation: fa-spin 2s infinite linear;\n}\n\n.#{$fa-css-prefix}-pulse {\n  -webkit-animation: fa-spin 1s infinite steps(8);\n          animation: fa-spin 1s infinite steps(8);\n}\n\n@-webkit-keyframes fa-spin {\n  0% {\n    -webkit-transform: rotate(0deg);\n            transform: rotate(0deg);\n  }\n  100% {\n    -webkit-transform: rotate(359deg);\n            transform: rotate(359deg);\n  }\n}\n\n@keyframes fa-spin {\n  0% {\n    -webkit-transform: rotate(0deg);\n            transform: rotate(0deg);\n  }\n  100% {\n    -webkit-transform: rotate(359deg);\n            transform: rotate(359deg);\n  }\n}\n"
  },
  {
    "path": "presentation/contrib/font-awesome-4.3.0/scss/_bordered-pulled.scss",
    "content": "// Bordered & Pulled\n// -------------------------\n\n.#{$fa-css-prefix}-border {\n  padding: .2em .25em .15em;\n  border: solid .08em $fa-border-color;\n  border-radius: .1em;\n}\n\n.pull-right { float: right; }\n.pull-left { float: left; }\n\n.#{$fa-css-prefix} {\n  &.pull-left { margin-right: .3em; }\n  &.pull-right { margin-left: .3em; }\n}\n"
  },
  {
    "path": "presentation/contrib/font-awesome-4.3.0/scss/_core.scss",
    "content": "// Base Class Definition\n// -------------------------\n\n.#{$fa-css-prefix} {\n  display: inline-block;\n  font: normal normal normal #{$fa-font-size-base}/1 FontAwesome; // shortening font declaration\n  font-size: inherit; // can't have font-size inherit on line above, so need to override\n  text-rendering: auto; // optimizelegibility throws things off #1094\n  -webkit-font-smoothing: antialiased;\n  -moz-osx-font-smoothing: grayscale;\n  transform: translate(0, 0); // ensures no half-pixel rendering in firefox\n\n}\n"
  },
  {
    "path": "presentation/contrib/font-awesome-4.3.0/scss/_fixed-width.scss",
    "content": "// Fixed Width Icons\n// -------------------------\n.#{$fa-css-prefix}-fw {\n  width: (18em / 14);\n  text-align: center;\n}\n"
  },
  {
    "path": "presentation/contrib/font-awesome-4.3.0/scss/_icons.scss",
    "content": "/* Font Awesome uses the Unicode Private Use Area (PUA) to ensure screen\n   readers do not read off random characters that represent icons */\n\n.#{$fa-css-prefix}-glass:before { content: $fa-var-glass; }\n.#{$fa-css-prefix}-music:before { content: $fa-var-music; }\n.#{$fa-css-prefix}-search:before { content: $fa-var-search; }\n.#{$fa-css-prefix}-envelope-o:before { content: $fa-var-envelope-o; }\n.#{$fa-css-prefix}-heart:before { content: $fa-var-heart; }\n.#{$fa-css-prefix}-star:before { content: $fa-var-star; }\n.#{$fa-css-prefix}-star-o:before { content: $fa-var-star-o; }\n.#{$fa-css-prefix}-user:before { content: $fa-var-user; }\n.#{$fa-css-prefix}-film:before { content: $fa-var-film; }\n.#{$fa-css-prefix}-th-large:before { content: $fa-var-th-large; }\n.#{$fa-css-prefix}-th:before { content: $fa-var-th; }\n.#{$fa-css-prefix}-th-list:before { content: $fa-var-th-list; }\n.#{$fa-css-prefix}-check:before { content: $fa-var-check; }\n.#{$fa-css-prefix}-remove:before,\n.#{$fa-css-prefix}-close:before,\n.#{$fa-css-prefix}-times:before { content: $fa-var-times; }\n.#{$fa-css-prefix}-search-plus:before { content: $fa-var-search-plus; }\n.#{$fa-css-prefix}-search-minus:before { content: $fa-var-search-minus; }\n.#{$fa-css-prefix}-power-off:before { content: $fa-var-power-off; }\n.#{$fa-css-prefix}-signal:before { content: $fa-var-signal; }\n.#{$fa-css-prefix}-gear:before,\n.#{$fa-css-prefix}-cog:before { content: $fa-var-cog; }\n.#{$fa-css-prefix}-trash-o:before { content: $fa-var-trash-o; }\n.#{$fa-css-prefix}-home:before { content: $fa-var-home; }\n.#{$fa-css-prefix}-file-o:before { content: $fa-var-file-o; }\n.#{$fa-css-prefix}-clock-o:before { content: $fa-var-clock-o; }\n.#{$fa-css-prefix}-road:before { content: $fa-var-road; }\n.#{$fa-css-prefix}-download:before { content: $fa-var-download; }\n.#{$fa-css-prefix}-arrow-circle-o-down:before { content: $fa-var-arrow-circle-o-down; }\n.#{$fa-css-prefix}-arrow-circle-o-up:before { content: $fa-var-arrow-circle-o-up; }\n.#{$fa-css-prefix}-inbox:before { content: $fa-var-inbox; }\n.#{$fa-css-prefix}-play-circle-o:before { content: $fa-var-play-circle-o; }\n.#{$fa-css-prefix}-rotate-right:before,\n.#{$fa-css-prefix}-repeat:before { content: $fa-var-repeat; }\n.#{$fa-css-prefix}-refresh:before { content: $fa-var-refresh; }\n.#{$fa-css-prefix}-list-alt:before { content: $fa-var-list-alt; }\n.#{$fa-css-prefix}-lock:before { content: $fa-var-lock; }\n.#{$fa-css-prefix}-flag:before { content: $fa-var-flag; }\n.#{$fa-css-prefix}-headphones:before { content: $fa-var-headphones; }\n.#{$fa-css-prefix}-volume-off:before { content: $fa-var-volume-off; }\n.#{$fa-css-prefix}-volume-down:before { content: $fa-var-volume-down; }\n.#{$fa-css-prefix}-volume-up:before { content: $fa-var-volume-up; }\n.#{$fa-css-prefix}-qrcode:before { content: $fa-var-qrcode; }\n.#{$fa-css-prefix}-barcode:before { content: $fa-var-barcode; }\n.#{$fa-css-prefix}-tag:before { content: $fa-var-tag; }\n.#{$fa-css-prefix}-tags:before { content: $fa-var-tags; }\n.#{$fa-css-prefix}-book:before { content: $fa-var-book; }\n.#{$fa-css-prefix}-bookmark:before { content: $fa-var-bookmark; }\n.#{$fa-css-prefix}-print:before { content: $fa-var-print; }\n.#{$fa-css-prefix}-camera:before { content: $fa-var-camera; }\n.#{$fa-css-prefix}-font:before { content: $fa-var-font; }\n.#{$fa-css-prefix}-bold:before { content: $fa-var-bold; }\n.#{$fa-css-prefix}-italic:before { content: $fa-var-italic; }\n.#{$fa-css-prefix}-text-height:before { content: $fa-var-text-height; }\n.#{$fa-css-prefix}-text-width:before { content: $fa-var-text-width; }\n.#{$fa-css-prefix}-align-left:before { content: $fa-var-align-left; }\n.#{$fa-css-prefix}-align-center:before { content: $fa-var-align-center; }\n.#{$fa-css-prefix}-align-right:before { content: $fa-var-align-right; }\n.#{$fa-css-prefix}-align-justify:before { content: $fa-var-align-justify; }\n.#{$fa-css-prefix}-list:before { content: $fa-var-list; }\n.#{$fa-css-prefix}-dedent:before,\n.#{$fa-css-prefix}-outdent:before { content: $fa-var-outdent; }\n.#{$fa-css-prefix}-indent:before { content: $fa-var-indent; }\n.#{$fa-css-prefix}-video-camera:before { content: $fa-var-video-camera; }\n.#{$fa-css-prefix}-photo:before,\n.#{$fa-css-prefix}-image:before,\n.#{$fa-css-prefix}-picture-o:before { content: $fa-var-picture-o; }\n.#{$fa-css-prefix}-pencil:before { content: $fa-var-pencil; }\n.#{$fa-css-prefix}-map-marker:before { content: $fa-var-map-marker; }\n.#{$fa-css-prefix}-adjust:before { content: $fa-var-adjust; }\n.#{$fa-css-prefix}-tint:before { content: $fa-var-tint; }\n.#{$fa-css-prefix}-edit:before,\n.#{$fa-css-prefix}-pencil-square-o:before { content: $fa-var-pencil-square-o; }\n.#{$fa-css-prefix}-share-square-o:before { content: $fa-var-share-square-o; }\n.#{$fa-css-prefix}-check-square-o:before { content: $fa-var-check-square-o; }\n.#{$fa-css-prefix}-arrows:before { content: $fa-var-arrows; }\n.#{$fa-css-prefix}-step-backward:before { content: $fa-var-step-backward; }\n.#{$fa-css-prefix}-fast-backward:before { content: $fa-var-fast-backward; }\n.#{$fa-css-prefix}-backward:before { content: $fa-var-backward; }\n.#{$fa-css-prefix}-play:before { content: $fa-var-play; }\n.#{$fa-css-prefix}-pause:before { content: $fa-var-pause; }\n.#{$fa-css-prefix}-stop:before { content: $fa-var-stop; }\n.#{$fa-css-prefix}-forward:before { content: $fa-var-forward; }\n.#{$fa-css-prefix}-fast-forward:before { content: $fa-var-fast-forward; }\n.#{$fa-css-prefix}-step-forward:before { content: $fa-var-step-forward; }\n.#{$fa-css-prefix}-eject:before { content: $fa-var-eject; }\n.#{$fa-css-prefix}-chevron-left:before { content: $fa-var-chevron-left; }\n.#{$fa-css-prefix}-chevron-right:before { content: $fa-var-chevron-right; }\n.#{$fa-css-prefix}-plus-circle:before { content: $fa-var-plus-circle; }\n.#{$fa-css-prefix}-minus-circle:before { content: $fa-var-minus-circle; }\n.#{$fa-css-prefix}-times-circle:before { content: $fa-var-times-circle; }\n.#{$fa-css-prefix}-check-circle:before { content: $fa-var-check-circle; }\n.#{$fa-css-prefix}-question-circle:before { content: $fa-var-question-circle; }\n.#{$fa-css-prefix}-info-circle:before { content: $fa-var-info-circle; }\n.#{$fa-css-prefix}-crosshairs:before { content: $fa-var-crosshairs; }\n.#{$fa-css-prefix}-times-circle-o:before { content: $fa-var-times-circle-o; }\n.#{$fa-css-prefix}-check-circle-o:before { content: $fa-var-check-circle-o; }\n.#{$fa-css-prefix}-ban:before { content: $fa-var-ban; }\n.#{$fa-css-prefix}-arrow-left:before { content: $fa-var-arrow-left; }\n.#{$fa-css-prefix}-arrow-right:before { content: $fa-var-arrow-right; }\n.#{$fa-css-prefix}-arrow-up:before { content: $fa-var-arrow-up; }\n.#{$fa-css-prefix}-arrow-down:before { content: $fa-var-arrow-down; }\n.#{$fa-css-prefix}-mail-forward:before,\n.#{$fa-css-prefix}-share:before { content: $fa-var-share; }\n.#{$fa-css-prefix}-expand:before { content: $fa-var-expand; }\n.#{$fa-css-prefix}-compress:before { content: $fa-var-compress; }\n.#{$fa-css-prefix}-plus:before { content: $fa-var-plus; }\n.#{$fa-css-prefix}-minus:before { content: $fa-var-minus; }\n.#{$fa-css-prefix}-asterisk:before { content: $fa-var-asterisk; }\n.#{$fa-css-prefix}-exclamation-circle:before { content: $fa-var-exclamation-circle; }\n.#{$fa-css-prefix}-gift:before { content: $fa-var-gift; }\n.#{$fa-css-prefix}-leaf:before { content: $fa-var-leaf; }\n.#{$fa-css-prefix}-fire:before { content: $fa-var-fire; }\n.#{$fa-css-prefix}-eye:before { content: $fa-var-eye; }\n.#{$fa-css-prefix}-eye-slash:before { content: $fa-var-eye-slash; }\n.#{$fa-css-prefix}-warning:before,\n.#{$fa-css-prefix}-exclamation-triangle:before { content: $fa-var-exclamation-triangle; }\n.#{$fa-css-prefix}-plane:before { content: $fa-var-plane; }\n.#{$fa-css-prefix}-calendar:before { content: $fa-var-calendar; }\n.#{$fa-css-prefix}-random:before { content: $fa-var-random; }\n.#{$fa-css-prefix}-comment:before { content: $fa-var-comment; }\n.#{$fa-css-prefix}-magnet:before { content: $fa-var-magnet; }\n.#{$fa-css-prefix}-chevron-up:before { content: $fa-var-chevron-up; }\n.#{$fa-css-prefix}-chevron-down:before { content: $fa-var-chevron-down; }\n.#{$fa-css-prefix}-retweet:before { content: $fa-var-retweet; }\n.#{$fa-css-prefix}-shopping-cart:before { content: $fa-var-shopping-cart; }\n.#{$fa-css-prefix}-folder:before { content: $fa-var-folder; }\n.#{$fa-css-prefix}-folder-open:before { content: $fa-var-folder-open; }\n.#{$fa-css-prefix}-arrows-v:before { content: $fa-var-arrows-v; }\n.#{$fa-css-prefix}-arrows-h:before { content: $fa-var-arrows-h; }\n.#{$fa-css-prefix}-bar-chart-o:before,\n.#{$fa-css-prefix}-bar-chart:before { content: $fa-var-bar-chart; }\n.#{$fa-css-prefix}-twitter-square:before { content: $fa-var-twitter-square; }\n.#{$fa-css-prefix}-facebook-square:before { content: $fa-var-facebook-square; }\n.#{$fa-css-prefix}-camera-retro:before { content: $fa-var-camera-retro; }\n.#{$fa-css-prefix}-key:before { content: $fa-var-key; }\n.#{$fa-css-prefix}-gears:before,\n.#{$fa-css-prefix}-cogs:before { content: $fa-var-cogs; }\n.#{$fa-css-prefix}-comments:before { content: $fa-var-comments; }\n.#{$fa-css-prefix}-thumbs-o-up:before { content: $fa-var-thumbs-o-up; }\n.#{$fa-css-prefix}-thumbs-o-down:before { content: $fa-var-thumbs-o-down; }\n.#{$fa-css-prefix}-star-half:before { content: $fa-var-star-half; }\n.#{$fa-css-prefix}-heart-o:before { content: $fa-var-heart-o; }\n.#{$fa-css-prefix}-sign-out:before { content: $fa-var-sign-out; }\n.#{$fa-css-prefix}-linkedin-square:before { content: $fa-var-linkedin-square; }\n.#{$fa-css-prefix}-thumb-tack:before { content: $fa-var-thumb-tack; }\n.#{$fa-css-prefix}-external-link:before { content: $fa-var-external-link; }\n.#{$fa-css-prefix}-sign-in:before { content: $fa-var-sign-in; }\n.#{$fa-css-prefix}-trophy:before { content: $fa-var-trophy; }\n.#{$fa-css-prefix}-github-square:before { content: $fa-var-github-square; }\n.#{$fa-css-prefix}-upload:before { content: $fa-var-upload; }\n.#{$fa-css-prefix}-lemon-o:before { content: $fa-var-lemon-o; }\n.#{$fa-css-prefix}-phone:before { content: $fa-var-phone; }\n.#{$fa-css-prefix}-square-o:before { content: $fa-var-square-o; }\n.#{$fa-css-prefix}-bookmark-o:before { content: $fa-var-bookmark-o; }\n.#{$fa-css-prefix}-phone-square:before { content: $fa-var-phone-square; }\n.#{$fa-css-prefix}-twitter:before { content: $fa-var-twitter; }\n.#{$fa-css-prefix}-facebook-f:before,\n.#{$fa-css-prefix}-facebook:before { content: $fa-var-facebook; }\n.#{$fa-css-prefix}-github:before { content: $fa-var-github; }\n.#{$fa-css-prefix}-unlock:before { content: $fa-var-unlock; }\n.#{$fa-css-prefix}-credit-card:before { content: $fa-var-credit-card; }\n.#{$fa-css-prefix}-rss:before { content: $fa-var-rss; }\n.#{$fa-css-prefix}-hdd-o:before { content: $fa-var-hdd-o; }\n.#{$fa-css-prefix}-bullhorn:before { content: $fa-var-bullhorn; }\n.#{$fa-css-prefix}-bell:before { content: $fa-var-bell; }\n.#{$fa-css-prefix}-certificate:before { content: $fa-var-certificate; }\n.#{$fa-css-prefix}-hand-o-right:before { content: $fa-var-hand-o-right; }\n.#{$fa-css-prefix}-hand-o-left:before { content: $fa-var-hand-o-left; }\n.#{$fa-css-prefix}-hand-o-up:before { content: $fa-var-hand-o-up; }\n.#{$fa-css-prefix}-hand-o-down:before { content: $fa-var-hand-o-down; }\n.#{$fa-css-prefix}-arrow-circle-left:before { content: $fa-var-arrow-circle-left; }\n.#{$fa-css-prefix}-arrow-circle-right:before { content: $fa-var-arrow-circle-right; }\n.#{$fa-css-prefix}-arrow-circle-up:before { content: $fa-var-arrow-circle-up; }\n.#{$fa-css-prefix}-arrow-circle-down:before { content: $fa-var-arrow-circle-down; }\n.#{$fa-css-prefix}-globe:before { content: $fa-var-globe; }\n.#{$fa-css-prefix}-wrench:before { content: $fa-var-wrench; }\n.#{$fa-css-prefix}-tasks:before { content: $fa-var-tasks; }\n.#{$fa-css-prefix}-filter:before { content: $fa-var-filter; }\n.#{$fa-css-prefix}-briefcase:before { content: $fa-var-briefcase; }\n.#{$fa-css-prefix}-arrows-alt:before { content: $fa-var-arrows-alt; }\n.#{$fa-css-prefix}-group:before,\n.#{$fa-css-prefix}-users:before { content: $fa-var-users; }\n.#{$fa-css-prefix}-chain:before,\n.#{$fa-css-prefix}-link:before { content: $fa-var-link; }\n.#{$fa-css-prefix}-cloud:before { content: $fa-var-cloud; }\n.#{$fa-css-prefix}-flask:before { content: $fa-var-flask; }\n.#{$fa-css-prefix}-cut:before,\n.#{$fa-css-prefix}-scissors:before { content: $fa-var-scissors; }\n.#{$fa-css-prefix}-copy:before,\n.#{$fa-css-prefix}-files-o:before { content: $fa-var-files-o; }\n.#{$fa-css-prefix}-paperclip:before { content: $fa-var-paperclip; }\n.#{$fa-css-prefix}-save:before,\n.#{$fa-css-prefix}-floppy-o:before { content: $fa-var-floppy-o; }\n.#{$fa-css-prefix}-square:before { content: $fa-var-square; }\n.#{$fa-css-prefix}-navicon:before,\n.#{$fa-css-prefix}-reorder:before,\n.#{$fa-css-prefix}-bars:before { content: $fa-var-bars; }\n.#{$fa-css-prefix}-list-ul:before { content: $fa-var-list-ul; }\n.#{$fa-css-prefix}-list-ol:before { content: $fa-var-list-ol; }\n.#{$fa-css-prefix}-strikethrough:before { content: $fa-var-strikethrough; }\n.#{$fa-css-prefix}-underline:before { content: $fa-var-underline; }\n.#{$fa-css-prefix}-table:before { content: $fa-var-table; }\n.#{$fa-css-prefix}-magic:before { content: $fa-var-magic; }\n.#{$fa-css-prefix}-truck:before { content: $fa-var-truck; }\n.#{$fa-css-prefix}-pinterest:before { content: $fa-var-pinterest; }\n.#{$fa-css-prefix}-pinterest-square:before { content: $fa-var-pinterest-square; }\n.#{$fa-css-prefix}-google-plus-square:before { content: $fa-var-google-plus-square; }\n.#{$fa-css-prefix}-google-plus:before { content: $fa-var-google-plus; }\n.#{$fa-css-prefix}-money:before { content: $fa-var-money; }\n.#{$fa-css-prefix}-caret-down:before { content: $fa-var-caret-down; }\n.#{$fa-css-prefix}-caret-up:before { content: $fa-var-caret-up; }\n.#{$fa-css-prefix}-caret-left:before { content: $fa-var-caret-left; }\n.#{$fa-css-prefix}-caret-right:before { content: $fa-var-caret-right; }\n.#{$fa-css-prefix}-columns:before { content: $fa-var-columns; }\n.#{$fa-css-prefix}-unsorted:before,\n.#{$fa-css-prefix}-sort:before { content: $fa-var-sort; }\n.#{$fa-css-prefix}-sort-down:before,\n.#{$fa-css-prefix}-sort-desc:before { content: $fa-var-sort-desc; }\n.#{$fa-css-prefix}-sort-up:before,\n.#{$fa-css-prefix}-sort-asc:before { content: $fa-var-sort-asc; }\n.#{$fa-css-prefix}-envelope:before { content: $fa-var-envelope; }\n.#{$fa-css-prefix}-linkedin:before { content: $fa-var-linkedin; }\n.#{$fa-css-prefix}-rotate-left:before,\n.#{$fa-css-prefix}-undo:before { content: $fa-var-undo; }\n.#{$fa-css-prefix}-legal:before,\n.#{$fa-css-prefix}-gavel:before { content: $fa-var-gavel; }\n.#{$fa-css-prefix}-dashboard:before,\n.#{$fa-css-prefix}-tachometer:before { content: $fa-var-tachometer; }\n.#{$fa-css-prefix}-comment-o:before { content: $fa-var-comment-o; }\n.#{$fa-css-prefix}-comments-o:before { content: $fa-var-comments-o; }\n.#{$fa-css-prefix}-flash:before,\n.#{$fa-css-prefix}-bolt:before { content: $fa-var-bolt; }\n.#{$fa-css-prefix}-sitemap:before { content: $fa-var-sitemap; }\n.#{$fa-css-prefix}-umbrella:before { content: $fa-var-umbrella; }\n.#{$fa-css-prefix}-paste:before,\n.#{$fa-css-prefix}-clipboard:before { content: $fa-var-clipboard; }\n.#{$fa-css-prefix}-lightbulb-o:before { content: $fa-var-lightbulb-o; }\n.#{$fa-css-prefix}-exchange:before { content: $fa-var-exchange; }\n.#{$fa-css-prefix}-cloud-download:before { content: $fa-var-cloud-download; }\n.#{$fa-css-prefix}-cloud-upload:before { content: $fa-var-cloud-upload; }\n.#{$fa-css-prefix}-user-md:before { content: $fa-var-user-md; }\n.#{$fa-css-prefix}-stethoscope:before { content: $fa-var-stethoscope; }\n.#{$fa-css-prefix}-suitcase:before { content: $fa-var-suitcase; }\n.#{$fa-css-prefix}-bell-o:before { content: $fa-var-bell-o; }\n.#{$fa-css-prefix}-coffee:before { content: $fa-var-coffee; }\n.#{$fa-css-prefix}-cutlery:before { content: $fa-var-cutlery; }\n.#{$fa-css-prefix}-file-text-o:before { content: $fa-var-file-text-o; }\n.#{$fa-css-prefix}-building-o:before { content: $fa-var-building-o; }\n.#{$fa-css-prefix}-hospital-o:before { content: $fa-var-hospital-o; }\n.#{$fa-css-prefix}-ambulance:before { content: $fa-var-ambulance; }\n.#{$fa-css-prefix}-medkit:before { content: $fa-var-medkit; }\n.#{$fa-css-prefix}-fighter-jet:before { content: $fa-var-fighter-jet; }\n.#{$fa-css-prefix}-beer:before { content: $fa-var-beer; }\n.#{$fa-css-prefix}-h-square:before { content: $fa-var-h-square; }\n.#{$fa-css-prefix}-plus-square:before { content: $fa-var-plus-square; }\n.#{$fa-css-prefix}-angle-double-left:before { content: $fa-var-angle-double-left; }\n.#{$fa-css-prefix}-angle-double-right:before { content: $fa-var-angle-double-right; }\n.#{$fa-css-prefix}-angle-double-up:before { content: $fa-var-angle-double-up; }\n.#{$fa-css-prefix}-angle-double-down:before { content: $fa-var-angle-double-down; }\n.#{$fa-css-prefix}-angle-left:before { content: $fa-var-angle-left; }\n.#{$fa-css-prefix}-angle-right:before { content: $fa-var-angle-right; }\n.#{$fa-css-prefix}-angle-up:before { content: $fa-var-angle-up; }\n.#{$fa-css-prefix}-angle-down:before { content: $fa-var-angle-down; }\n.#{$fa-css-prefix}-desktop:before { content: $fa-var-desktop; }\n.#{$fa-css-prefix}-laptop:before { content: $fa-var-laptop; }\n.#{$fa-css-prefix}-tablet:before { content: $fa-var-tablet; }\n.#{$fa-css-prefix}-mobile-phone:before,\n.#{$fa-css-prefix}-mobile:before { content: $fa-var-mobile; }\n.#{$fa-css-prefix}-circle-o:before { content: $fa-var-circle-o; }\n.#{$fa-css-prefix}-quote-left:before { content: $fa-var-quote-left; }\n.#{$fa-css-prefix}-quote-right:before { content: $fa-var-quote-right; }\n.#{$fa-css-prefix}-spinner:before { content: $fa-var-spinner; }\n.#{$fa-css-prefix}-circle:before { content: $fa-var-circle; }\n.#{$fa-css-prefix}-mail-reply:before,\n.#{$fa-css-prefix}-reply:before { content: $fa-var-reply; }\n.#{$fa-css-prefix}-github-alt:before { content: $fa-var-github-alt; }\n.#{$fa-css-prefix}-folder-o:before { content: $fa-var-folder-o; }\n.#{$fa-css-prefix}-folder-open-o:before { content: $fa-var-folder-open-o; }\n.#{$fa-css-prefix}-smile-o:before { content: $fa-var-smile-o; }\n.#{$fa-css-prefix}-frown-o:before { content: $fa-var-frown-o; }\n.#{$fa-css-prefix}-meh-o:before { content: $fa-var-meh-o; }\n.#{$fa-css-prefix}-gamepad:before { content: $fa-var-gamepad; }\n.#{$fa-css-prefix}-keyboard-o:before { content: $fa-var-keyboard-o; }\n.#{$fa-css-prefix}-flag-o:before { content: $fa-var-flag-o; }\n.#{$fa-css-prefix}-flag-checkered:before { content: $fa-var-flag-checkered; }\n.#{$fa-css-prefix}-terminal:before { content: $fa-var-terminal; }\n.#{$fa-css-prefix}-code:before { content: $fa-var-code; }\n.#{$fa-css-prefix}-mail-reply-all:before,\n.#{$fa-css-prefix}-reply-all:before { content: $fa-var-reply-all; }\n.#{$fa-css-prefix}-star-half-empty:before,\n.#{$fa-css-prefix}-star-half-full:before,\n.#{$fa-css-prefix}-star-half-o:before { content: $fa-var-star-half-o; }\n.#{$fa-css-prefix}-location-arrow:before { content: $fa-var-location-arrow; }\n.#{$fa-css-prefix}-crop:before { content: $fa-var-crop; }\n.#{$fa-css-prefix}-code-fork:before { content: $fa-var-code-fork; }\n.#{$fa-css-prefix}-unlink:before,\n.#{$fa-css-prefix}-chain-broken:before { content: $fa-var-chain-broken; }\n.#{$fa-css-prefix}-question:before { content: $fa-var-question; }\n.#{$fa-css-prefix}-info:before { content: $fa-var-info; }\n.#{$fa-css-prefix}-exclamation:before { content: $fa-var-exclamation; }\n.#{$fa-css-prefix}-superscript:before { content: $fa-var-superscript; }\n.#{$fa-css-prefix}-subscript:before { content: $fa-var-subscript; }\n.#{$fa-css-prefix}-eraser:before { content: $fa-var-eraser; }\n.#{$fa-css-prefix}-puzzle-piece:before { content: $fa-var-puzzle-piece; }\n.#{$fa-css-prefix}-microphone:before { content: $fa-var-microphone; }\n.#{$fa-css-prefix}-microphone-slash:before { content: $fa-var-microphone-slash; }\n.#{$fa-css-prefix}-shield:before { content: $fa-var-shield; }\n.#{$fa-css-prefix}-calendar-o:before { content: $fa-var-calendar-o; }\n.#{$fa-css-prefix}-fire-extinguisher:before { content: $fa-var-fire-extinguisher; }\n.#{$fa-css-prefix}-rocket:before { content: $fa-var-rocket; }\n.#{$fa-css-prefix}-maxcdn:before { content: $fa-var-maxcdn; }\n.#{$fa-css-prefix}-chevron-circle-left:before { content: $fa-var-chevron-circle-left; }\n.#{$fa-css-prefix}-chevron-circle-right:before { content: $fa-var-chevron-circle-right; }\n.#{$fa-css-prefix}-chevron-circle-up:before { content: $fa-var-chevron-circle-up; }\n.#{$fa-css-prefix}-chevron-circle-down:before { content: $fa-var-chevron-circle-down; }\n.#{$fa-css-prefix}-html5:before { content: $fa-var-html5; }\n.#{$fa-css-prefix}-css3:before { content: $fa-var-css3; }\n.#{$fa-css-prefix}-anchor:before { content: $fa-var-anchor; }\n.#{$fa-css-prefix}-unlock-alt:before { content: $fa-var-unlock-alt; }\n.#{$fa-css-prefix}-bullseye:before { content: $fa-var-bullseye; }\n.#{$fa-css-prefix}-ellipsis-h:before { content: $fa-var-ellipsis-h; }\n.#{$fa-css-prefix}-ellipsis-v:before { content: $fa-var-ellipsis-v; }\n.#{$fa-css-prefix}-rss-square:before { content: $fa-var-rss-square; }\n.#{$fa-css-prefix}-play-circle:before { content: $fa-var-play-circle; }\n.#{$fa-css-prefix}-ticket:before { content: $fa-var-ticket; }\n.#{$fa-css-prefix}-minus-square:before { content: $fa-var-minus-square; }\n.#{$fa-css-prefix}-minus-square-o:before { content: $fa-var-minus-square-o; }\n.#{$fa-css-prefix}-level-up:before { content: $fa-var-level-up; }\n.#{$fa-css-prefix}-level-down:before { content: $fa-var-level-down; }\n.#{$fa-css-prefix}-check-square:before { content: $fa-var-check-square; }\n.#{$fa-css-prefix}-pencil-square:before { content: $fa-var-pencil-square; }\n.#{$fa-css-prefix}-external-link-square:before { content: $fa-var-external-link-square; }\n.#{$fa-css-prefix}-share-square:before { content: $fa-var-share-square; }\n.#{$fa-css-prefix}-compass:before { content: $fa-var-compass; }\n.#{$fa-css-prefix}-toggle-down:before,\n.#{$fa-css-prefix}-caret-square-o-down:before { content: $fa-var-caret-square-o-down; }\n.#{$fa-css-prefix}-toggle-up:before,\n.#{$fa-css-prefix}-caret-square-o-up:before { content: $fa-var-caret-square-o-up; }\n.#{$fa-css-prefix}-toggle-right:before,\n.#{$fa-css-prefix}-caret-square-o-right:before { content: $fa-var-caret-square-o-right; }\n.#{$fa-css-prefix}-euro:before,\n.#{$fa-css-prefix}-eur:before { content: $fa-var-eur; }\n.#{$fa-css-prefix}-gbp:before { content: $fa-var-gbp; }\n.#{$fa-css-prefix}-dollar:before,\n.#{$fa-css-prefix}-usd:before { content: $fa-var-usd; }\n.#{$fa-css-prefix}-rupee:before,\n.#{$fa-css-prefix}-inr:before { content: $fa-var-inr; }\n.#{$fa-css-prefix}-cny:before,\n.#{$fa-css-prefix}-rmb:before,\n.#{$fa-css-prefix}-yen:before,\n.#{$fa-css-prefix}-jpy:before { content: $fa-var-jpy; }\n.#{$fa-css-prefix}-ruble:before,\n.#{$fa-css-prefix}-rouble:before,\n.#{$fa-css-prefix}-rub:before { content: $fa-var-rub; }\n.#{$fa-css-prefix}-won:before,\n.#{$fa-css-prefix}-krw:before { content: $fa-var-krw; }\n.#{$fa-css-prefix}-bitcoin:before,\n.#{$fa-css-prefix}-btc:before { content: $fa-var-btc; }\n.#{$fa-css-prefix}-file:before { content: $fa-var-file; }\n.#{$fa-css-prefix}-file-text:before { content: $fa-var-file-text; }\n.#{$fa-css-prefix}-sort-alpha-asc:before { content: $fa-var-sort-alpha-asc; }\n.#{$fa-css-prefix}-sort-alpha-desc:before { content: $fa-var-sort-alpha-desc; }\n.#{$fa-css-prefix}-sort-amount-asc:before { content: $fa-var-sort-amount-asc; }\n.#{$fa-css-prefix}-sort-amount-desc:before { content: $fa-var-sort-amount-desc; }\n.#{$fa-css-prefix}-sort-numeric-asc:before { content: $fa-var-sort-numeric-asc; }\n.#{$fa-css-prefix}-sort-numeric-desc:before { content: $fa-var-sort-numeric-desc; }\n.#{$fa-css-prefix}-thumbs-up:before { content: $fa-var-thumbs-up; }\n.#{$fa-css-prefix}-thumbs-down:before { content: $fa-var-thumbs-down; }\n.#{$fa-css-prefix}-youtube-square:before { content: $fa-var-youtube-square; }\n.#{$fa-css-prefix}-youtube:before { content: $fa-var-youtube; }\n.#{$fa-css-prefix}-xing:before { content: $fa-var-xing; }\n.#{$fa-css-prefix}-xing-square:before { content: $fa-var-xing-square; }\n.#{$fa-css-prefix}-youtube-play:before { content: $fa-var-youtube-play; }\n.#{$fa-css-prefix}-dropbox:before { content: $fa-var-dropbox; }\n.#{$fa-css-prefix}-stack-overflow:before { content: $fa-var-stack-overflow; }\n.#{$fa-css-prefix}-instagram:before { content: $fa-var-instagram; }\n.#{$fa-css-prefix}-flickr:before { content: $fa-var-flickr; }\n.#{$fa-css-prefix}-adn:before { content: $fa-var-adn; }\n.#{$fa-css-prefix}-bitbucket:before { content: $fa-var-bitbucket; }\n.#{$fa-css-prefix}-bitbucket-square:before { content: $fa-var-bitbucket-square; }\n.#{$fa-css-prefix}-tumblr:before { content: $fa-var-tumblr; }\n.#{$fa-css-prefix}-tumblr-square:before { content: $fa-var-tumblr-square; }\n.#{$fa-css-prefix}-long-arrow-down:before { content: $fa-var-long-arrow-down; }\n.#{$fa-css-prefix}-long-arrow-up:before { content: $fa-var-long-arrow-up; }\n.#{$fa-css-prefix}-long-arrow-left:before { content: $fa-var-long-arrow-left; }\n.#{$fa-css-prefix}-long-arrow-right:before { content: $fa-var-long-arrow-right; }\n.#{$fa-css-prefix}-apple:before { content: $fa-var-apple; }\n.#{$fa-css-prefix}-windows:before { content: $fa-var-windows; }\n.#{$fa-css-prefix}-android:before { content: $fa-var-android; }\n.#{$fa-css-prefix}-linux:before { content: $fa-var-linux; }\n.#{$fa-css-prefix}-dribbble:before { content: $fa-var-dribbble; }\n.#{$fa-css-prefix}-skype:before { content: $fa-var-skype; }\n.#{$fa-css-prefix}-foursquare:before { content: $fa-var-foursquare; }\n.#{$fa-css-prefix}-trello:before { content: $fa-var-trello; }\n.#{$fa-css-prefix}-female:before { content: $fa-var-female; }\n.#{$fa-css-prefix}-male:before { content: $fa-var-male; }\n.#{$fa-css-prefix}-gittip:before,\n.#{$fa-css-prefix}-gratipay:before { content: $fa-var-gratipay; }\n.#{$fa-css-prefix}-sun-o:before { content: $fa-var-sun-o; }\n.#{$fa-css-prefix}-moon-o:before { content: $fa-var-moon-o; }\n.#{$fa-css-prefix}-archive:before { content: $fa-var-archive; }\n.#{$fa-css-prefix}-bug:before { content: $fa-var-bug; }\n.#{$fa-css-prefix}-vk:before { content: $fa-var-vk; }\n.#{$fa-css-prefix}-weibo:before { content: $fa-var-weibo; }\n.#{$fa-css-prefix}-renren:before { content: $fa-var-renren; }\n.#{$fa-css-prefix}-pagelines:before { content: $fa-var-pagelines; }\n.#{$fa-css-prefix}-stack-exchange:before { content: $fa-var-stack-exchange; }\n.#{$fa-css-prefix}-arrow-circle-o-right:before { content: $fa-var-arrow-circle-o-right; }\n.#{$fa-css-prefix}-arrow-circle-o-left:before { content: $fa-var-arrow-circle-o-left; }\n.#{$fa-css-prefix}-toggle-left:before,\n.#{$fa-css-prefix}-caret-square-o-left:before { content: $fa-var-caret-square-o-left; }\n.#{$fa-css-prefix}-dot-circle-o:before { content: $fa-var-dot-circle-o; }\n.#{$fa-css-prefix}-wheelchair:before { content: $fa-var-wheelchair; }\n.#{$fa-css-prefix}-vimeo-square:before { content: $fa-var-vimeo-square; }\n.#{$fa-css-prefix}-turkish-lira:before,\n.#{$fa-css-prefix}-try:before { content: $fa-var-try; }\n.#{$fa-css-prefix}-plus-square-o:before { content: $fa-var-plus-square-o; }\n.#{$fa-css-prefix}-space-shuttle:before { content: $fa-var-space-shuttle; }\n.#{$fa-css-prefix}-slack:before { content: $fa-var-slack; }\n.#{$fa-css-prefix}-envelope-square:before { content: $fa-var-envelope-square; }\n.#{$fa-css-prefix}-wordpress:before { content: $fa-var-wordpress; }\n.#{$fa-css-prefix}-openid:before { content: $fa-var-openid; }\n.#{$fa-css-prefix}-institution:before,\n.#{$fa-css-prefix}-bank:before,\n.#{$fa-css-prefix}-university:before { content: $fa-var-university; }\n.#{$fa-css-prefix}-mortar-board:before,\n.#{$fa-css-prefix}-graduation-cap:before { content: $fa-var-graduation-cap; }\n.#{$fa-css-prefix}-yahoo:before { content: $fa-var-yahoo; }\n.#{$fa-css-prefix}-google:before { content: $fa-var-google; }\n.#{$fa-css-prefix}-reddit:before { content: $fa-var-reddit; }\n.#{$fa-css-prefix}-reddit-square:before { content: $fa-var-reddit-square; }\n.#{$fa-css-prefix}-stumbleupon-circle:before { content: $fa-var-stumbleupon-circle; }\n.#{$fa-css-prefix}-stumbleupon:before { content: $fa-var-stumbleupon; }\n.#{$fa-css-prefix}-delicious:before { content: $fa-var-delicious; }\n.#{$fa-css-prefix}-digg:before { content: $fa-var-digg; }\n.#{$fa-css-prefix}-pied-piper:before { content: $fa-var-pied-piper; }\n.#{$fa-css-prefix}-pied-piper-alt:before { content: $fa-var-pied-piper-alt; }\n.#{$fa-css-prefix}-drupal:before { content: $fa-var-drupal; }\n.#{$fa-css-prefix}-joomla:before { content: $fa-var-joomla; }\n.#{$fa-css-prefix}-language:before { content: $fa-var-language; }\n.#{$fa-css-prefix}-fax:before { content: $fa-var-fax; }\n.#{$fa-css-prefix}-building:before { content: $fa-var-building; }\n.#{$fa-css-prefix}-child:before { content: $fa-var-child; }\n.#{$fa-css-prefix}-paw:before { content: $fa-var-paw; }\n.#{$fa-css-prefix}-spoon:before { content: $fa-var-spoon; }\n.#{$fa-css-prefix}-cube:before { content: $fa-var-cube; }\n.#{$fa-css-prefix}-cubes:before { content: $fa-var-cubes; }\n.#{$fa-css-prefix}-behance:before { content: $fa-var-behance; }\n.#{$fa-css-prefix}-behance-square:before { content: $fa-var-behance-square; }\n.#{$fa-css-prefix}-steam:before { content: $fa-var-steam; }\n.#{$fa-css-prefix}-steam-square:before { content: $fa-var-steam-square; }\n.#{$fa-css-prefix}-recycle:before { content: $fa-var-recycle; }\n.#{$fa-css-prefix}-automobile:before,\n.#{$fa-css-prefix}-car:before { content: $fa-var-car; }\n.#{$fa-css-prefix}-cab:before,\n.#{$fa-css-prefix}-taxi:before { content: $fa-var-taxi; }\n.#{$fa-css-prefix}-tree:before { content: $fa-var-tree; }\n.#{$fa-css-prefix}-spotify:before { content: $fa-var-spotify; }\n.#{$fa-css-prefix}-deviantart:before { content: $fa-var-deviantart; }\n.#{$fa-css-prefix}-soundcloud:before { content: $fa-var-soundcloud; }\n.#{$fa-css-prefix}-database:before { content: $fa-var-database; }\n.#{$fa-css-prefix}-file-pdf-o:before { content: $fa-var-file-pdf-o; }\n.#{$fa-css-prefix}-file-word-o:before { content: $fa-var-file-word-o; }\n.#{$fa-css-prefix}-file-excel-o:before { content: $fa-var-file-excel-o; }\n.#{$fa-css-prefix}-file-powerpoint-o:before { content: $fa-var-file-powerpoint-o; }\n.#{$fa-css-prefix}-file-photo-o:before,\n.#{$fa-css-prefix}-file-picture-o:before,\n.#{$fa-css-prefix}-file-image-o:before { content: $fa-var-file-image-o; }\n.#{$fa-css-prefix}-file-zip-o:before,\n.#{$fa-css-prefix}-file-archive-o:before { content: $fa-var-file-archive-o; }\n.#{$fa-css-prefix}-file-sound-o:before,\n.#{$fa-css-prefix}-file-audio-o:before { content: $fa-var-file-audio-o; }\n.#{$fa-css-prefix}-file-movie-o:before,\n.#{$fa-css-prefix}-file-video-o:before { content: $fa-var-file-video-o; }\n.#{$fa-css-prefix}-file-code-o:before { content: $fa-var-file-code-o; }\n.#{$fa-css-prefix}-vine:before { content: $fa-var-vine; }\n.#{$fa-css-prefix}-codepen:before { content: $fa-var-codepen; }\n.#{$fa-css-prefix}-jsfiddle:before { content: $fa-var-jsfiddle; }\n.#{$fa-css-prefix}-life-bouy:before,\n.#{$fa-css-prefix}-life-buoy:before,\n.#{$fa-css-prefix}-life-saver:before,\n.#{$fa-css-prefix}-support:before,\n.#{$fa-css-prefix}-life-ring:before { content: $fa-var-life-ring; }\n.#{$fa-css-prefix}-circle-o-notch:before { content: $fa-var-circle-o-notch; }\n.#{$fa-css-prefix}-ra:before,\n.#{$fa-css-prefix}-rebel:before { content: $fa-var-rebel; }\n.#{$fa-css-prefix}-ge:before,\n.#{$fa-css-prefix}-empire:before { content: $fa-var-empire; }\n.#{$fa-css-prefix}-git-square:before { content: $fa-var-git-square; }\n.#{$fa-css-prefix}-git:before { content: $fa-var-git; }\n.#{$fa-css-prefix}-hacker-news:before { content: $fa-var-hacker-news; }\n.#{$fa-css-prefix}-tencent-weibo:before { content: $fa-var-tencent-weibo; }\n.#{$fa-css-prefix}-qq:before { content: $fa-var-qq; }\n.#{$fa-css-prefix}-wechat:before,\n.#{$fa-css-prefix}-weixin:before { content: $fa-var-weixin; }\n.#{$fa-css-prefix}-send:before,\n.#{$fa-css-prefix}-paper-plane:before { content: $fa-var-paper-plane; }\n.#{$fa-css-prefix}-send-o:before,\n.#{$fa-css-prefix}-paper-plane-o:before { content: $fa-var-paper-plane-o; }\n.#{$fa-css-prefix}-history:before { content: $fa-var-history; }\n.#{$fa-css-prefix}-genderless:before,\n.#{$fa-css-prefix}-circle-thin:before { content: $fa-var-circle-thin; }\n.#{$fa-css-prefix}-header:before { content: $fa-var-header; }\n.#{$fa-css-prefix}-paragraph:before { content: $fa-var-paragraph; }\n.#{$fa-css-prefix}-sliders:before { content: $fa-var-sliders; }\n.#{$fa-css-prefix}-share-alt:before { content: $fa-var-share-alt; }\n.#{$fa-css-prefix}-share-alt-square:before { content: $fa-var-share-alt-square; }\n.#{$fa-css-prefix}-bomb:before { content: $fa-var-bomb; }\n.#{$fa-css-prefix}-soccer-ball-o:before,\n.#{$fa-css-prefix}-futbol-o:before { content: $fa-var-futbol-o; }\n.#{$fa-css-prefix}-tty:before { content: $fa-var-tty; }\n.#{$fa-css-prefix}-binoculars:before { content: $fa-var-binoculars; }\n.#{$fa-css-prefix}-plug:before { content: $fa-var-plug; }\n.#{$fa-css-prefix}-slideshare:before { content: $fa-var-slideshare; }\n.#{$fa-css-prefix}-twitch:before { content: $fa-var-twitch; }\n.#{$fa-css-prefix}-yelp:before { content: $fa-var-yelp; }\n.#{$fa-css-prefix}-newspaper-o:before { content: $fa-var-newspaper-o; }\n.#{$fa-css-prefix}-wifi:before { content: $fa-var-wifi; }\n.#{$fa-css-prefix}-calculator:before { content: $fa-var-calculator; }\n.#{$fa-css-prefix}-paypal:before { content: $fa-var-paypal; }\n.#{$fa-css-prefix}-google-wallet:before { content: $fa-var-google-wallet; }\n.#{$fa-css-prefix}-cc-visa:before { content: $fa-var-cc-visa; }\n.#{$fa-css-prefix}-cc-mastercard:before { content: $fa-var-cc-mastercard; }\n.#{$fa-css-prefix}-cc-discover:before { content: $fa-var-cc-discover; }\n.#{$fa-css-prefix}-cc-amex:before { content: $fa-var-cc-amex; }\n.#{$fa-css-prefix}-cc-paypal:before { content: $fa-var-cc-paypal; }\n.#{$fa-css-prefix}-cc-stripe:before { content: $fa-var-cc-stripe; }\n.#{$fa-css-prefix}-bell-slash:before { content: $fa-var-bell-slash; }\n.#{$fa-css-prefix}-bell-slash-o:before { content: $fa-var-bell-slash-o; }\n.#{$fa-css-prefix}-trash:before { content: $fa-var-trash; }\n.#{$fa-css-prefix}-copyright:before { content: $fa-var-copyright; }\n.#{$fa-css-prefix}-at:before { content: $fa-var-at; }\n.#{$fa-css-prefix}-eyedropper:before { content: $fa-var-eyedropper; }\n.#{$fa-css-prefix}-paint-brush:before { content: $fa-var-paint-brush; }\n.#{$fa-css-prefix}-birthday-cake:before { content: $fa-var-birthday-cake; }\n.#{$fa-css-prefix}-area-chart:before { content: $fa-var-area-chart; }\n.#{$fa-css-prefix}-pie-chart:before { content: $fa-var-pie-chart; }\n.#{$fa-css-prefix}-line-chart:before { content: $fa-var-line-chart; }\n.#{$fa-css-prefix}-lastfm:before { content: $fa-var-lastfm; }\n.#{$fa-css-prefix}-lastfm-square:before { content: $fa-var-lastfm-square; }\n.#{$fa-css-prefix}-toggle-off:before { content: $fa-var-toggle-off; }\n.#{$fa-css-prefix}-toggle-on:before { content: $fa-var-toggle-on; }\n.#{$fa-css-prefix}-bicycle:before { content: $fa-var-bicycle; }\n.#{$fa-css-prefix}-bus:before { content: $fa-var-bus; }\n.#{$fa-css-prefix}-ioxhost:before { content: $fa-var-ioxhost; }\n.#{$fa-css-prefix}-angellist:before { content: $fa-var-angellist; }\n.#{$fa-css-prefix}-cc:before { content: $fa-var-cc; }\n.#{$fa-css-prefix}-shekel:before,\n.#{$fa-css-prefix}-sheqel:before,\n.#{$fa-css-prefix}-ils:before { content: $fa-var-ils; }\n.#{$fa-css-prefix}-meanpath:before { content: $fa-var-meanpath; }\n.#{$fa-css-prefix}-buysellads:before { content: $fa-var-buysellads; }\n.#{$fa-css-prefix}-connectdevelop:before { content: $fa-var-connectdevelop; }\n.#{$fa-css-prefix}-dashcube:before { content: $fa-var-dashcube; }\n.#{$fa-css-prefix}-forumbee:before { content: $fa-var-forumbee; }\n.#{$fa-css-prefix}-leanpub:before { content: $fa-var-leanpub; }\n.#{$fa-css-prefix}-sellsy:before { content: $fa-var-sellsy; }\n.#{$fa-css-prefix}-shirtsinbulk:before { content: $fa-var-shirtsinbulk; }\n.#{$fa-css-prefix}-simplybuilt:before { content: $fa-var-simplybuilt; }\n.#{$fa-css-prefix}-skyatlas:before { content: $fa-var-skyatlas; }\n.#{$fa-css-prefix}-cart-plus:before { content: $fa-var-cart-plus; }\n.#{$fa-css-prefix}-cart-arrow-down:before { content: $fa-var-cart-arrow-down; }\n.#{$fa-css-prefix}-diamond:before { content: $fa-var-diamond; }\n.#{$fa-css-prefix}-ship:before { content: $fa-var-ship; }\n.#{$fa-css-prefix}-user-secret:before { content: $fa-var-user-secret; }\n.#{$fa-css-prefix}-motorcycle:before { content: $fa-var-motorcycle; }\n.#{$fa-css-prefix}-street-view:before { content: $fa-var-street-view; }\n.#{$fa-css-prefix}-heartbeat:before { content: $fa-var-heartbeat; }\n.#{$fa-css-prefix}-venus:before { content: $fa-var-venus; }\n.#{$fa-css-prefix}-mars:before { content: $fa-var-mars; }\n.#{$fa-css-prefix}-mercury:before { content: $fa-var-mercury; }\n.#{$fa-css-prefix}-transgender:before { content: $fa-var-transgender; }\n.#{$fa-css-prefix}-transgender-alt:before { content: $fa-var-transgender-alt; }\n.#{$fa-css-prefix}-venus-double:before { content: $fa-var-venus-double; }\n.#{$fa-css-prefix}-mars-double:before { content: $fa-var-mars-double; }\n.#{$fa-css-prefix}-venus-mars:before { content: $fa-var-venus-mars; }\n.#{$fa-css-prefix}-mars-stroke:before { content: $fa-var-mars-stroke; }\n.#{$fa-css-prefix}-mars-stroke-v:before { content: $fa-var-mars-stroke-v; }\n.#{$fa-css-prefix}-mars-stroke-h:before { content: $fa-var-mars-stroke-h; }\n.#{$fa-css-prefix}-neuter:before { content: $fa-var-neuter; }\n.#{$fa-css-prefix}-facebook-official:before { content: $fa-var-facebook-official; }\n.#{$fa-css-prefix}-pinterest-p:before { content: $fa-var-pinterest-p; }\n.#{$fa-css-prefix}-whatsapp:before { content: $fa-var-whatsapp; }\n.#{$fa-css-prefix}-server:before { content: $fa-var-server; }\n.#{$fa-css-prefix}-user-plus:before { content: $fa-var-user-plus; }\n.#{$fa-css-prefix}-user-times:before { content: $fa-var-user-times; }\n.#{$fa-css-prefix}-hotel:before,\n.#{$fa-css-prefix}-bed:before { content: $fa-var-bed; }\n.#{$fa-css-prefix}-viacoin:before { content: $fa-var-viacoin; }\n.#{$fa-css-prefix}-train:before { content: $fa-var-train; }\n.#{$fa-css-prefix}-subway:before { content: $fa-var-subway; }\n.#{$fa-css-prefix}-medium:before { content: $fa-var-medium; }\n"
  },
  {
    "path": "presentation/contrib/font-awesome-4.3.0/scss/_larger.scss",
    "content": "// Icon Sizes\n// -------------------------\n\n/* makes the font 33% larger relative to the icon container */\n.#{$fa-css-prefix}-lg {\n  font-size: (4em / 3);\n  line-height: (3em / 4);\n  vertical-align: -15%;\n}\n.#{$fa-css-prefix}-2x { font-size: 2em; }\n.#{$fa-css-prefix}-3x { font-size: 3em; }\n.#{$fa-css-prefix}-4x { font-size: 4em; }\n.#{$fa-css-prefix}-5x { font-size: 5em; }\n"
  },
  {
    "path": "presentation/contrib/font-awesome-4.3.0/scss/_list.scss",
    "content": "// List Icons\n// -------------------------\n\n.#{$fa-css-prefix}-ul {\n  padding-left: 0;\n  margin-left: $fa-li-width;\n  list-style-type: none;\n  > li { position: relative; }\n}\n.#{$fa-css-prefix}-li {\n  position: absolute;\n  left: -$fa-li-width;\n  width: $fa-li-width;\n  top: (2em / 14);\n  text-align: center;\n  &.#{$fa-css-prefix}-lg {\n    left: -$fa-li-width + (4em / 14);\n  }\n}\n"
  },
  {
    "path": "presentation/contrib/font-awesome-4.3.0/scss/_mixins.scss",
    "content": "// Mixins\n// --------------------------\n\n@mixin fa-icon() {\n  display: inline-block;\n  font: normal normal normal #{$fa-font-size-base}/1 FontAwesome; // shortening font declaration\n  font-size: inherit; // can't have font-size inherit on line above, so need to override\n  text-rendering: auto; // optimizelegibility throws things off #1094\n  -webkit-font-smoothing: antialiased;\n  -moz-osx-font-smoothing: grayscale;\n  transform: translate(0, 0); // ensures no half-pixel rendering in firefox\n\n}\n\n@mixin fa-icon-rotate($degrees, $rotation) {\n  filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=#{$rotation});\n  -webkit-transform: rotate($degrees);\n      -ms-transform: rotate($degrees);\n          transform: rotate($degrees);\n}\n\n@mixin fa-icon-flip($horiz, $vert, $rotation) {\n  filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=#{$rotation});\n  -webkit-transform: scale($horiz, $vert);\n      -ms-transform: scale($horiz, $vert);\n          transform: scale($horiz, $vert);\n}\n"
  },
  {
    "path": "presentation/contrib/font-awesome-4.3.0/scss/_path.scss",
    "content": "/* FONT PATH\n * -------------------------- */\n\n@font-face {\n  font-family: 'FontAwesome';\n  src: url('#{$fa-font-path}/fontawesome-webfont.eot?v=#{$fa-version}');\n  src: url('#{$fa-font-path}/fontawesome-webfont.eot?#iefix&v=#{$fa-version}') format('embedded-opentype'),\n    url('#{$fa-font-path}/fontawesome-webfont.woff2?v=#{$fa-version}') format('woff2'),\n    url('#{$fa-font-path}/fontawesome-webfont.woff?v=#{$fa-version}') format('woff'),\n    url('#{$fa-font-path}/fontawesome-webfont.ttf?v=#{$fa-version}') format('truetype'),\n    url('#{$fa-font-path}/fontawesome-webfont.svg?v=#{$fa-version}#fontawesomeregular') format('svg');\n//  src: url('#{$fa-font-path}/FontAwesome.otf') format('opentype'); // used when developing fonts\n  font-weight: normal;\n  font-style: normal;\n}\n"
  },
  {
    "path": "presentation/contrib/font-awesome-4.3.0/scss/_rotated-flipped.scss",
    "content": "// Rotated & Flipped Icons\n// -------------------------\n\n.#{$fa-css-prefix}-rotate-90  { @include fa-icon-rotate(90deg, 1);  }\n.#{$fa-css-prefix}-rotate-180 { @include fa-icon-rotate(180deg, 2); }\n.#{$fa-css-prefix}-rotate-270 { @include fa-icon-rotate(270deg, 3); }\n\n.#{$fa-css-prefix}-flip-horizontal { @include fa-icon-flip(-1, 1, 0); }\n.#{$fa-css-prefix}-flip-vertical   { @include fa-icon-flip(1, -1, 2); }\n\n// Hook for IE8-9\n// -------------------------\n\n:root .#{$fa-css-prefix}-rotate-90,\n:root .#{$fa-css-prefix}-rotate-180,\n:root .#{$fa-css-prefix}-rotate-270,\n:root .#{$fa-css-prefix}-flip-horizontal,\n:root .#{$fa-css-prefix}-flip-vertical {\n  filter: none;\n}\n"
  },
  {
    "path": "presentation/contrib/font-awesome-4.3.0/scss/_stacked.scss",
    "content": "// Stacked Icons\n// -------------------------\n\n.#{$fa-css-prefix}-stack {\n  position: relative;\n  display: inline-block;\n  width: 2em;\n  height: 2em;\n  line-height: 2em;\n  vertical-align: middle;\n}\n.#{$fa-css-prefix}-stack-1x, .#{$fa-css-prefix}-stack-2x {\n  position: absolute;\n  left: 0;\n  width: 100%;\n  text-align: center;\n}\n.#{$fa-css-prefix}-stack-1x { line-height: inherit; }\n.#{$fa-css-prefix}-stack-2x { font-size: 2em; }\n.#{$fa-css-prefix}-inverse { color: $fa-inverse; }\n"
  },
  {
    "path": "presentation/contrib/font-awesome-4.3.0/scss/_variables.scss",
    "content": "// Variables\n// --------------------------\n\n$fa-font-path:        \"../fonts\" !default;\n$fa-font-size-base:   14px !default;\n//$fa-font-path:        \"//netdna.bootstrapcdn.com/font-awesome/4.3.0/fonts\" !default; // for referencing Bootstrap CDN font files directly\n$fa-css-prefix:       fa !default;\n$fa-version:          \"4.3.0\" !default;\n$fa-border-color:     #eee !default;\n$fa-inverse:          #fff !default;\n$fa-li-width:         (30em / 14) !default;\n\n$fa-var-adjust: \"\\f042\";\n$fa-var-adn: \"\\f170\";\n$fa-var-align-center: \"\\f037\";\n$fa-var-align-justify: \"\\f039\";\n$fa-var-align-left: \"\\f036\";\n$fa-var-align-right: \"\\f038\";\n$fa-var-ambulance: \"\\f0f9\";\n$fa-var-anchor: \"\\f13d\";\n$fa-var-android: \"\\f17b\";\n$fa-var-angellist: \"\\f209\";\n$fa-var-angle-double-down: \"\\f103\";\n$fa-var-angle-double-left: \"\\f100\";\n$fa-var-angle-double-right: \"\\f101\";\n$fa-var-angle-double-up: \"\\f102\";\n$fa-var-angle-down: \"\\f107\";\n$fa-var-angle-left: \"\\f104\";\n$fa-var-angle-right: \"\\f105\";\n$fa-var-angle-up: \"\\f106\";\n$fa-var-apple: \"\\f179\";\n$fa-var-archive: \"\\f187\";\n$fa-var-area-chart: \"\\f1fe\";\n$fa-var-arrow-circle-down: \"\\f0ab\";\n$fa-var-arrow-circle-left: \"\\f0a8\";\n$fa-var-arrow-circle-o-down: \"\\f01a\";\n$fa-var-arrow-circle-o-left: \"\\f190\";\n$fa-var-arrow-circle-o-right: \"\\f18e\";\n$fa-var-arrow-circle-o-up: \"\\f01b\";\n$fa-var-arrow-circle-right: \"\\f0a9\";\n$fa-var-arrow-circle-up: \"\\f0aa\";\n$fa-var-arrow-down: \"\\f063\";\n$fa-var-arrow-left: \"\\f060\";\n$fa-var-arrow-right: \"\\f061\";\n$fa-var-arrow-up: \"\\f062\";\n$fa-var-arrows: \"\\f047\";\n$fa-var-arrows-alt: \"\\f0b2\";\n$fa-var-arrows-h: \"\\f07e\";\n$fa-var-arrows-v: \"\\f07d\";\n$fa-var-asterisk: \"\\f069\";\n$fa-var-at: \"\\f1fa\";\n$fa-var-automobile: \"\\f1b9\";\n$fa-var-backward: \"\\f04a\";\n$fa-var-ban: \"\\f05e\";\n$fa-var-bank: \"\\f19c\";\n$fa-var-bar-chart: \"\\f080\";\n$fa-var-bar-chart-o: \"\\f080\";\n$fa-var-barcode: \"\\f02a\";\n$fa-var-bars: \"\\f0c9\";\n$fa-var-bed: \"\\f236\";\n$fa-var-beer: \"\\f0fc\";\n$fa-var-behance: \"\\f1b4\";\n$fa-var-behance-square: \"\\f1b5\";\n$fa-var-bell: \"\\f0f3\";\n$fa-var-bell-o: \"\\f0a2\";\n$fa-var-bell-slash: \"\\f1f6\";\n$fa-var-bell-slash-o: \"\\f1f7\";\n$fa-var-bicycle: \"\\f206\";\n$fa-var-binoculars: \"\\f1e5\";\n$fa-var-birthday-cake: \"\\f1fd\";\n$fa-var-bitbucket: \"\\f171\";\n$fa-var-bitbucket-square: \"\\f172\";\n$fa-var-bitcoin: \"\\f15a\";\n$fa-var-bold: \"\\f032\";\n$fa-var-bolt: \"\\f0e7\";\n$fa-var-bomb: \"\\f1e2\";\n$fa-var-book: \"\\f02d\";\n$fa-var-bookmark: \"\\f02e\";\n$fa-var-bookmark-o: \"\\f097\";\n$fa-var-briefcase: \"\\f0b1\";\n$fa-var-btc: \"\\f15a\";\n$fa-var-bug: \"\\f188\";\n$fa-var-building: \"\\f1ad\";\n$fa-var-building-o: \"\\f0f7\";\n$fa-var-bullhorn: \"\\f0a1\";\n$fa-var-bullseye: \"\\f140\";\n$fa-var-bus: \"\\f207\";\n$fa-var-buysellads: \"\\f20d\";\n$fa-var-cab: \"\\f1ba\";\n$fa-var-calculator: \"\\f1ec\";\n$fa-var-calendar: \"\\f073\";\n$fa-var-calendar-o: \"\\f133\";\n$fa-var-camera: \"\\f030\";\n$fa-var-camera-retro: \"\\f083\";\n$fa-var-car: \"\\f1b9\";\n$fa-var-caret-down: \"\\f0d7\";\n$fa-var-caret-left: \"\\f0d9\";\n$fa-var-caret-right: \"\\f0da\";\n$fa-var-caret-square-o-down: \"\\f150\";\n$fa-var-caret-square-o-left: \"\\f191\";\n$fa-var-caret-square-o-right: \"\\f152\";\n$fa-var-caret-square-o-up: \"\\f151\";\n$fa-var-caret-up: \"\\f0d8\";\n$fa-var-cart-arrow-down: \"\\f218\";\n$fa-var-cart-plus: \"\\f217\";\n$fa-var-cc: \"\\f20a\";\n$fa-var-cc-amex: \"\\f1f3\";\n$fa-var-cc-discover: \"\\f1f2\";\n$fa-var-cc-mastercard: \"\\f1f1\";\n$fa-var-cc-paypal: \"\\f1f4\";\n$fa-var-cc-stripe: \"\\f1f5\";\n$fa-var-cc-visa: \"\\f1f0\";\n$fa-var-certificate: \"\\f0a3\";\n$fa-var-chain: \"\\f0c1\";\n$fa-var-chain-broken: \"\\f127\";\n$fa-var-check: \"\\f00c\";\n$fa-var-check-circle: \"\\f058\";\n$fa-var-check-circle-o: \"\\f05d\";\n$fa-var-check-square: \"\\f14a\";\n$fa-var-check-square-o: \"\\f046\";\n$fa-var-chevron-circle-down: \"\\f13a\";\n$fa-var-chevron-circle-left: \"\\f137\";\n$fa-var-chevron-circle-right: \"\\f138\";\n$fa-var-chevron-circle-up: \"\\f139\";\n$fa-var-chevron-down: \"\\f078\";\n$fa-var-chevron-left: \"\\f053\";\n$fa-var-chevron-right: \"\\f054\";\n$fa-var-chevron-up: \"\\f077\";\n$fa-var-child: \"\\f1ae\";\n$fa-var-circle: \"\\f111\";\n$fa-var-circle-o: \"\\f10c\";\n$fa-var-circle-o-notch: \"\\f1ce\";\n$fa-var-circle-thin: \"\\f1db\";\n$fa-var-clipboard: \"\\f0ea\";\n$fa-var-clock-o: \"\\f017\";\n$fa-var-close: \"\\f00d\";\n$fa-var-cloud: \"\\f0c2\";\n$fa-var-cloud-download: \"\\f0ed\";\n$fa-var-cloud-upload: \"\\f0ee\";\n$fa-var-cny: \"\\f157\";\n$fa-var-code: \"\\f121\";\n$fa-var-code-fork: \"\\f126\";\n$fa-var-codepen: \"\\f1cb\";\n$fa-var-coffee: \"\\f0f4\";\n$fa-var-cog: \"\\f013\";\n$fa-var-cogs: \"\\f085\";\n$fa-var-columns: \"\\f0db\";\n$fa-var-comment: \"\\f075\";\n$fa-var-comment-o: \"\\f0e5\";\n$fa-var-comments: \"\\f086\";\n$fa-var-comments-o: \"\\f0e6\";\n$fa-var-compass: \"\\f14e\";\n$fa-var-compress: \"\\f066\";\n$fa-var-connectdevelop: \"\\f20e\";\n$fa-var-copy: \"\\f0c5\";\n$fa-var-copyright: \"\\f1f9\";\n$fa-var-credit-card: \"\\f09d\";\n$fa-var-crop: \"\\f125\";\n$fa-var-crosshairs: \"\\f05b\";\n$fa-var-css3: \"\\f13c\";\n$fa-var-cube: \"\\f1b2\";\n$fa-var-cubes: \"\\f1b3\";\n$fa-var-cut: \"\\f0c4\";\n$fa-var-cutlery: \"\\f0f5\";\n$fa-var-dashboard: \"\\f0e4\";\n$fa-var-dashcube: \"\\f210\";\n$fa-var-database: \"\\f1c0\";\n$fa-var-dedent: \"\\f03b\";\n$fa-var-delicious: \"\\f1a5\";\n$fa-var-desktop: \"\\f108\";\n$fa-var-deviantart: \"\\f1bd\";\n$fa-var-diamond: \"\\f219\";\n$fa-var-digg: \"\\f1a6\";\n$fa-var-dollar: \"\\f155\";\n$fa-var-dot-circle-o: \"\\f192\";\n$fa-var-download: \"\\f019\";\n$fa-var-dribbble: \"\\f17d\";\n$fa-var-dropbox: \"\\f16b\";\n$fa-var-drupal: \"\\f1a9\";\n$fa-var-edit: \"\\f044\";\n$fa-var-eject: \"\\f052\";\n$fa-var-ellipsis-h: \"\\f141\";\n$fa-var-ellipsis-v: \"\\f142\";\n$fa-var-empire: \"\\f1d1\";\n$fa-var-envelope: \"\\f0e0\";\n$fa-var-envelope-o: \"\\f003\";\n$fa-var-envelope-square: \"\\f199\";\n$fa-var-eraser: \"\\f12d\";\n$fa-var-eur: \"\\f153\";\n$fa-var-euro: \"\\f153\";\n$fa-var-exchange: \"\\f0ec\";\n$fa-var-exclamation: \"\\f12a\";\n$fa-var-exclamation-circle: \"\\f06a\";\n$fa-var-exclamation-triangle: \"\\f071\";\n$fa-var-expand: \"\\f065\";\n$fa-var-external-link: \"\\f08e\";\n$fa-var-external-link-square: \"\\f14c\";\n$fa-var-eye: \"\\f06e\";\n$fa-var-eye-slash: \"\\f070\";\n$fa-var-eyedropper: \"\\f1fb\";\n$fa-var-facebook: \"\\f09a\";\n$fa-var-facebook-f: \"\\f09a\";\n$fa-var-facebook-official: \"\\f230\";\n$fa-var-facebook-square: \"\\f082\";\n$fa-var-fast-backward: \"\\f049\";\n$fa-var-fast-forward: \"\\f050\";\n$fa-var-fax: \"\\f1ac\";\n$fa-var-female: \"\\f182\";\n$fa-var-fighter-jet: \"\\f0fb\";\n$fa-var-file: \"\\f15b\";\n$fa-var-file-archive-o: \"\\f1c6\";\n$fa-var-file-audio-o: \"\\f1c7\";\n$fa-var-file-code-o: \"\\f1c9\";\n$fa-var-file-excel-o: \"\\f1c3\";\n$fa-var-file-image-o: \"\\f1c5\";\n$fa-var-file-movie-o: \"\\f1c8\";\n$fa-var-file-o: \"\\f016\";\n$fa-var-file-pdf-o: \"\\f1c1\";\n$fa-var-file-photo-o: \"\\f1c5\";\n$fa-var-file-picture-o: \"\\f1c5\";\n$fa-var-file-powerpoint-o: \"\\f1c4\";\n$fa-var-file-sound-o: \"\\f1c7\";\n$fa-var-file-text: \"\\f15c\";\n$fa-var-file-text-o: \"\\f0f6\";\n$fa-var-file-video-o: \"\\f1c8\";\n$fa-var-file-word-o: \"\\f1c2\";\n$fa-var-file-zip-o: \"\\f1c6\";\n$fa-var-files-o: \"\\f0c5\";\n$fa-var-film: \"\\f008\";\n$fa-var-filter: \"\\f0b0\";\n$fa-var-fire: \"\\f06d\";\n$fa-var-fire-extinguisher: \"\\f134\";\n$fa-var-flag: \"\\f024\";\n$fa-var-flag-checkered: \"\\f11e\";\n$fa-var-flag-o: \"\\f11d\";\n$fa-var-flash: \"\\f0e7\";\n$fa-var-flask: \"\\f0c3\";\n$fa-var-flickr: \"\\f16e\";\n$fa-var-floppy-o: \"\\f0c7\";\n$fa-var-folder: \"\\f07b\";\n$fa-var-folder-o: \"\\f114\";\n$fa-var-folder-open: \"\\f07c\";\n$fa-var-folder-open-o: \"\\f115\";\n$fa-var-font: \"\\f031\";\n$fa-var-forumbee: \"\\f211\";\n$fa-var-forward: \"\\f04e\";\n$fa-var-foursquare: \"\\f180\";\n$fa-var-frown-o: \"\\f119\";\n$fa-var-futbol-o: \"\\f1e3\";\n$fa-var-gamepad: \"\\f11b\";\n$fa-var-gavel: \"\\f0e3\";\n$fa-var-gbp: \"\\f154\";\n$fa-var-ge: \"\\f1d1\";\n$fa-var-gear: \"\\f013\";\n$fa-var-gears: \"\\f085\";\n$fa-var-genderless: \"\\f1db\";\n$fa-var-gift: \"\\f06b\";\n$fa-var-git: \"\\f1d3\";\n$fa-var-git-square: \"\\f1d2\";\n$fa-var-github: \"\\f09b\";\n$fa-var-github-alt: \"\\f113\";\n$fa-var-github-square: \"\\f092\";\n$fa-var-gittip: \"\\f184\";\n$fa-var-glass: \"\\f000\";\n$fa-var-globe: \"\\f0ac\";\n$fa-var-google: \"\\f1a0\";\n$fa-var-google-plus: \"\\f0d5\";\n$fa-var-google-plus-square: \"\\f0d4\";\n$fa-var-google-wallet: \"\\f1ee\";\n$fa-var-graduation-cap: \"\\f19d\";\n$fa-var-gratipay: \"\\f184\";\n$fa-var-group: \"\\f0c0\";\n$fa-var-h-square: \"\\f0fd\";\n$fa-var-hacker-news: \"\\f1d4\";\n$fa-var-hand-o-down: \"\\f0a7\";\n$fa-var-hand-o-left: \"\\f0a5\";\n$fa-var-hand-o-right: \"\\f0a4\";\n$fa-var-hand-o-up: \"\\f0a6\";\n$fa-var-hdd-o: \"\\f0a0\";\n$fa-var-header: \"\\f1dc\";\n$fa-var-headphones: \"\\f025\";\n$fa-var-heart: \"\\f004\";\n$fa-var-heart-o: \"\\f08a\";\n$fa-var-heartbeat: \"\\f21e\";\n$fa-var-history: \"\\f1da\";\n$fa-var-home: \"\\f015\";\n$fa-var-hospital-o: \"\\f0f8\";\n$fa-var-hotel: \"\\f236\";\n$fa-var-html5: \"\\f13b\";\n$fa-var-ils: \"\\f20b\";\n$fa-var-image: \"\\f03e\";\n$fa-var-inbox: \"\\f01c\";\n$fa-var-indent: \"\\f03c\";\n$fa-var-info: \"\\f129\";\n$fa-var-info-circle: \"\\f05a\";\n$fa-var-inr: \"\\f156\";\n$fa-var-instagram: \"\\f16d\";\n$fa-var-institution: \"\\f19c\";\n$fa-var-ioxhost: \"\\f208\";\n$fa-var-italic: \"\\f033\";\n$fa-var-joomla: \"\\f1aa\";\n$fa-var-jpy: \"\\f157\";\n$fa-var-jsfiddle: \"\\f1cc\";\n$fa-var-key: \"\\f084\";\n$fa-var-keyboard-o: \"\\f11c\";\n$fa-var-krw: \"\\f159\";\n$fa-var-language: \"\\f1ab\";\n$fa-var-laptop: \"\\f109\";\n$fa-var-lastfm: \"\\f202\";\n$fa-var-lastfm-square: \"\\f203\";\n$fa-var-leaf: \"\\f06c\";\n$fa-var-leanpub: \"\\f212\";\n$fa-var-legal: \"\\f0e3\";\n$fa-var-lemon-o: \"\\f094\";\n$fa-var-level-down: \"\\f149\";\n$fa-var-level-up: \"\\f148\";\n$fa-var-life-bouy: \"\\f1cd\";\n$fa-var-life-buoy: \"\\f1cd\";\n$fa-var-life-ring: \"\\f1cd\";\n$fa-var-life-saver: \"\\f1cd\";\n$fa-var-lightbulb-o: \"\\f0eb\";\n$fa-var-line-chart: \"\\f201\";\n$fa-var-link: \"\\f0c1\";\n$fa-var-linkedin: \"\\f0e1\";\n$fa-var-linkedin-square: \"\\f08c\";\n$fa-var-linux: \"\\f17c\";\n$fa-var-list: \"\\f03a\";\n$fa-var-list-alt: \"\\f022\";\n$fa-var-list-ol: \"\\f0cb\";\n$fa-var-list-ul: \"\\f0ca\";\n$fa-var-location-arrow: \"\\f124\";\n$fa-var-lock: \"\\f023\";\n$fa-var-long-arrow-down: \"\\f175\";\n$fa-var-long-arrow-left: \"\\f177\";\n$fa-var-long-arrow-right: \"\\f178\";\n$fa-var-long-arrow-up: \"\\f176\";\n$fa-var-magic: \"\\f0d0\";\n$fa-var-magnet: \"\\f076\";\n$fa-var-mail-forward: \"\\f064\";\n$fa-var-mail-reply: \"\\f112\";\n$fa-var-mail-reply-all: \"\\f122\";\n$fa-var-male: \"\\f183\";\n$fa-var-map-marker: \"\\f041\";\n$fa-var-mars: \"\\f222\";\n$fa-var-mars-double: \"\\f227\";\n$fa-var-mars-stroke: \"\\f229\";\n$fa-var-mars-stroke-h: \"\\f22b\";\n$fa-var-mars-stroke-v: \"\\f22a\";\n$fa-var-maxcdn: \"\\f136\";\n$fa-var-meanpath: \"\\f20c\";\n$fa-var-medium: \"\\f23a\";\n$fa-var-medkit: \"\\f0fa\";\n$fa-var-meh-o: \"\\f11a\";\n$fa-var-mercury: \"\\f223\";\n$fa-var-microphone: \"\\f130\";\n$fa-var-microphone-slash: \"\\f131\";\n$fa-var-minus: \"\\f068\";\n$fa-var-minus-circle: \"\\f056\";\n$fa-var-minus-square: \"\\f146\";\n$fa-var-minus-square-o: \"\\f147\";\n$fa-var-mobile: \"\\f10b\";\n$fa-var-mobile-phone: \"\\f10b\";\n$fa-var-money: \"\\f0d6\";\n$fa-var-moon-o: \"\\f186\";\n$fa-var-mortar-board: \"\\f19d\";\n$fa-var-motorcycle: \"\\f21c\";\n$fa-var-music: \"\\f001\";\n$fa-var-navicon: \"\\f0c9\";\n$fa-var-neuter: \"\\f22c\";\n$fa-var-newspaper-o: \"\\f1ea\";\n$fa-var-openid: \"\\f19b\";\n$fa-var-outdent: \"\\f03b\";\n$fa-var-pagelines: \"\\f18c\";\n$fa-var-paint-brush: \"\\f1fc\";\n$fa-var-paper-plane: \"\\f1d8\";\n$fa-var-paper-plane-o: \"\\f1d9\";\n$fa-var-paperclip: \"\\f0c6\";\n$fa-var-paragraph: \"\\f1dd\";\n$fa-var-paste: \"\\f0ea\";\n$fa-var-pause: \"\\f04c\";\n$fa-var-paw: \"\\f1b0\";\n$fa-var-paypal: \"\\f1ed\";\n$fa-var-pencil: \"\\f040\";\n$fa-var-pencil-square: \"\\f14b\";\n$fa-var-pencil-square-o: \"\\f044\";\n$fa-var-phone: \"\\f095\";\n$fa-var-phone-square: \"\\f098\";\n$fa-var-photo: \"\\f03e\";\n$fa-var-picture-o: \"\\f03e\";\n$fa-var-pie-chart: \"\\f200\";\n$fa-var-pied-piper: \"\\f1a7\";\n$fa-var-pied-piper-alt: \"\\f1a8\";\n$fa-var-pinterest: \"\\f0d2\";\n$fa-var-pinterest-p: \"\\f231\";\n$fa-var-pinterest-square: \"\\f0d3\";\n$fa-var-plane: \"\\f072\";\n$fa-var-play: \"\\f04b\";\n$fa-var-play-circle: \"\\f144\";\n$fa-var-play-circle-o: \"\\f01d\";\n$fa-var-plug: \"\\f1e6\";\n$fa-var-plus: \"\\f067\";\n$fa-var-plus-circle: \"\\f055\";\n$fa-var-plus-square: \"\\f0fe\";\n$fa-var-plus-square-o: \"\\f196\";\n$fa-var-power-off: \"\\f011\";\n$fa-var-print: \"\\f02f\";\n$fa-var-puzzle-piece: \"\\f12e\";\n$fa-var-qq: \"\\f1d6\";\n$fa-var-qrcode: \"\\f029\";\n$fa-var-question: \"\\f128\";\n$fa-var-question-circle: \"\\f059\";\n$fa-var-quote-left: \"\\f10d\";\n$fa-var-quote-right: \"\\f10e\";\n$fa-var-ra: \"\\f1d0\";\n$fa-var-random: \"\\f074\";\n$fa-var-rebel: \"\\f1d0\";\n$fa-var-recycle: \"\\f1b8\";\n$fa-var-reddit: \"\\f1a1\";\n$fa-var-reddit-square: \"\\f1a2\";\n$fa-var-refresh: \"\\f021\";\n$fa-var-remove: \"\\f00d\";\n$fa-var-renren: \"\\f18b\";\n$fa-var-reorder: \"\\f0c9\";\n$fa-var-repeat: \"\\f01e\";\n$fa-var-reply: \"\\f112\";\n$fa-var-reply-all: \"\\f122\";\n$fa-var-retweet: \"\\f079\";\n$fa-var-rmb: \"\\f157\";\n$fa-var-road: \"\\f018\";\n$fa-var-rocket: \"\\f135\";\n$fa-var-rotate-left: \"\\f0e2\";\n$fa-var-rotate-right: \"\\f01e\";\n$fa-var-rouble: \"\\f158\";\n$fa-var-rss: \"\\f09e\";\n$fa-var-rss-square: \"\\f143\";\n$fa-var-rub: \"\\f158\";\n$fa-var-ruble: \"\\f158\";\n$fa-var-rupee: \"\\f156\";\n$fa-var-save: \"\\f0c7\";\n$fa-var-scissors: \"\\f0c4\";\n$fa-var-search: \"\\f002\";\n$fa-var-search-minus: \"\\f010\";\n$fa-var-search-plus: \"\\f00e\";\n$fa-var-sellsy: \"\\f213\";\n$fa-var-send: \"\\f1d8\";\n$fa-var-send-o: \"\\f1d9\";\n$fa-var-server: \"\\f233\";\n$fa-var-share: \"\\f064\";\n$fa-var-share-alt: \"\\f1e0\";\n$fa-var-share-alt-square: \"\\f1e1\";\n$fa-var-share-square: \"\\f14d\";\n$fa-var-share-square-o: \"\\f045\";\n$fa-var-shekel: \"\\f20b\";\n$fa-var-sheqel: \"\\f20b\";\n$fa-var-shield: \"\\f132\";\n$fa-var-ship: \"\\f21a\";\n$fa-var-shirtsinbulk: \"\\f214\";\n$fa-var-shopping-cart: \"\\f07a\";\n$fa-var-sign-in: \"\\f090\";\n$fa-var-sign-out: \"\\f08b\";\n$fa-var-signal: \"\\f012\";\n$fa-var-simplybuilt: \"\\f215\";\n$fa-var-sitemap: \"\\f0e8\";\n$fa-var-skyatlas: \"\\f216\";\n$fa-var-skype: \"\\f17e\";\n$fa-var-slack: \"\\f198\";\n$fa-var-sliders: \"\\f1de\";\n$fa-var-slideshare: \"\\f1e7\";\n$fa-var-smile-o: \"\\f118\";\n$fa-var-soccer-ball-o: \"\\f1e3\";\n$fa-var-sort: \"\\f0dc\";\n$fa-var-sort-alpha-asc: \"\\f15d\";\n$fa-var-sort-alpha-desc: \"\\f15e\";\n$fa-var-sort-amount-asc: \"\\f160\";\n$fa-var-sort-amount-desc: \"\\f161\";\n$fa-var-sort-asc: \"\\f0de\";\n$fa-var-sort-desc: \"\\f0dd\";\n$fa-var-sort-down: \"\\f0dd\";\n$fa-var-sort-numeric-asc: \"\\f162\";\n$fa-var-sort-numeric-desc: \"\\f163\";\n$fa-var-sort-up: \"\\f0de\";\n$fa-var-soundcloud: \"\\f1be\";\n$fa-var-space-shuttle: \"\\f197\";\n$fa-var-spinner: \"\\f110\";\n$fa-var-spoon: \"\\f1b1\";\n$fa-var-spotify: \"\\f1bc\";\n$fa-var-square: \"\\f0c8\";\n$fa-var-square-o: \"\\f096\";\n$fa-var-stack-exchange: \"\\f18d\";\n$fa-var-stack-overflow: \"\\f16c\";\n$fa-var-star: \"\\f005\";\n$fa-var-star-half: \"\\f089\";\n$fa-var-star-half-empty: \"\\f123\";\n$fa-var-star-half-full: \"\\f123\";\n$fa-var-star-half-o: \"\\f123\";\n$fa-var-star-o: \"\\f006\";\n$fa-var-steam: \"\\f1b6\";\n$fa-var-steam-square: \"\\f1b7\";\n$fa-var-step-backward: \"\\f048\";\n$fa-var-step-forward: \"\\f051\";\n$fa-var-stethoscope: \"\\f0f1\";\n$fa-var-stop: \"\\f04d\";\n$fa-var-street-view: \"\\f21d\";\n$fa-var-strikethrough: \"\\f0cc\";\n$fa-var-stumbleupon: \"\\f1a4\";\n$fa-var-stumbleupon-circle: \"\\f1a3\";\n$fa-var-subscript: \"\\f12c\";\n$fa-var-subway: \"\\f239\";\n$fa-var-suitcase: \"\\f0f2\";\n$fa-var-sun-o: \"\\f185\";\n$fa-var-superscript: \"\\f12b\";\n$fa-var-support: \"\\f1cd\";\n$fa-var-table: \"\\f0ce\";\n$fa-var-tablet: \"\\f10a\";\n$fa-var-tachometer: \"\\f0e4\";\n$fa-var-tag: \"\\f02b\";\n$fa-var-tags: \"\\f02c\";\n$fa-var-tasks: \"\\f0ae\";\n$fa-var-taxi: \"\\f1ba\";\n$fa-var-tencent-weibo: \"\\f1d5\";\n$fa-var-terminal: \"\\f120\";\n$fa-var-text-height: \"\\f034\";\n$fa-var-text-width: \"\\f035\";\n$fa-var-th: \"\\f00a\";\n$fa-var-th-large: \"\\f009\";\n$fa-var-th-list: \"\\f00b\";\n$fa-var-thumb-tack: \"\\f08d\";\n$fa-var-thumbs-down: \"\\f165\";\n$fa-var-thumbs-o-down: \"\\f088\";\n$fa-var-thumbs-o-up: \"\\f087\";\n$fa-var-thumbs-up: \"\\f164\";\n$fa-var-ticket: \"\\f145\";\n$fa-var-times: \"\\f00d\";\n$fa-var-times-circle: \"\\f057\";\n$fa-var-times-circle-o: \"\\f05c\";\n$fa-var-tint: \"\\f043\";\n$fa-var-toggle-down: \"\\f150\";\n$fa-var-toggle-left: \"\\f191\";\n$fa-var-toggle-off: \"\\f204\";\n$fa-var-toggle-on: \"\\f205\";\n$fa-var-toggle-right: \"\\f152\";\n$fa-var-toggle-up: \"\\f151\";\n$fa-var-train: \"\\f238\";\n$fa-var-transgender: \"\\f224\";\n$fa-var-transgender-alt: \"\\f225\";\n$fa-var-trash: \"\\f1f8\";\n$fa-var-trash-o: \"\\f014\";\n$fa-var-tree: \"\\f1bb\";\n$fa-var-trello: \"\\f181\";\n$fa-var-trophy: \"\\f091\";\n$fa-var-truck: \"\\f0d1\";\n$fa-var-try: \"\\f195\";\n$fa-var-tty: \"\\f1e4\";\n$fa-var-tumblr: \"\\f173\";\n$fa-var-tumblr-square: \"\\f174\";\n$fa-var-turkish-lira: \"\\f195\";\n$fa-var-twitch: \"\\f1e8\";\n$fa-var-twitter: \"\\f099\";\n$fa-var-twitter-square: \"\\f081\";\n$fa-var-umbrella: \"\\f0e9\";\n$fa-var-underline: \"\\f0cd\";\n$fa-var-undo: \"\\f0e2\";\n$fa-var-university: \"\\f19c\";\n$fa-var-unlink: \"\\f127\";\n$fa-var-unlock: \"\\f09c\";\n$fa-var-unlock-alt: \"\\f13e\";\n$fa-var-unsorted: \"\\f0dc\";\n$fa-var-upload: \"\\f093\";\n$fa-var-usd: \"\\f155\";\n$fa-var-user: \"\\f007\";\n$fa-var-user-md: \"\\f0f0\";\n$fa-var-user-plus: \"\\f234\";\n$fa-var-user-secret: \"\\f21b\";\n$fa-var-user-times: \"\\f235\";\n$fa-var-users: \"\\f0c0\";\n$fa-var-venus: \"\\f221\";\n$fa-var-venus-double: \"\\f226\";\n$fa-var-venus-mars: \"\\f228\";\n$fa-var-viacoin: \"\\f237\";\n$fa-var-video-camera: \"\\f03d\";\n$fa-var-vimeo-square: \"\\f194\";\n$fa-var-vine: \"\\f1ca\";\n$fa-var-vk: \"\\f189\";\n$fa-var-volume-down: \"\\f027\";\n$fa-var-volume-off: \"\\f026\";\n$fa-var-volume-up: \"\\f028\";\n$fa-var-warning: \"\\f071\";\n$fa-var-wechat: \"\\f1d7\";\n$fa-var-weibo: \"\\f18a\";\n$fa-var-weixin: \"\\f1d7\";\n$fa-var-whatsapp: \"\\f232\";\n$fa-var-wheelchair: \"\\f193\";\n$fa-var-wifi: \"\\f1eb\";\n$fa-var-windows: \"\\f17a\";\n$fa-var-won: \"\\f159\";\n$fa-var-wordpress: \"\\f19a\";\n$fa-var-wrench: \"\\f0ad\";\n$fa-var-xing: \"\\f168\";\n$fa-var-xing-square: \"\\f169\";\n$fa-var-yahoo: \"\\f19e\";\n$fa-var-yelp: \"\\f1e9\";\n$fa-var-yen: \"\\f157\";\n$fa-var-youtube: \"\\f167\";\n$fa-var-youtube-play: \"\\f16a\";\n$fa-var-youtube-square: \"\\f166\";\n\n"
  },
  {
    "path": "presentation/contrib/font-awesome-4.3.0/scss/font-awesome.scss",
    "content": "/*!\n *  Font Awesome 4.3.0 by @davegandy - http://fontawesome.io - @fontawesome\n *  License - http://fontawesome.io/license (Font: SIL OFL 1.1, CSS: MIT License)\n */\n\n@import \"variables\";\n@import \"mixins\";\n@import \"path\";\n@import \"core\";\n@import \"larger\";\n@import \"fixed-width\";\n@import \"list\";\n@import \"bordered-pulled\";\n@import \"animated\";\n@import \"rotated-flipped\";\n@import \"stacked\";\n@import \"icons\";\n"
  },
  {
    "path": "presentation/contrib/google/css/lato.css",
    "content": "@font-face {\n  font-family: 'Lato';\n  font-style: normal;\n  font-weight: 400;\n  src: local('Lato Regular'), local('Lato-Regular'), url(../fonts/v0SdcGFAl2aezM9Vq_aFTQ.ttf) format('truetype');\n}\n@font-face {\n  font-family: 'Lato';\n  font-style: normal;\n  font-weight: 700;\n  src: local('Lato Bold'), local('Lato-Bold'), url(../fonts/DvlFBScY1r-FMtZSYIYoYw.ttf) format('truetype');\n}\n@font-face {\n  font-family: 'Lato';\n  font-style: italic;\n  font-weight: 400;\n  src: local('Lato Italic'), local('Lato-Italic'), url(../fonts/LqowQDslGv4DmUBAfWa2Vw.ttf) format('truetype');\n}\n@font-face {\n  font-family: 'Lato';\n  font-style: italic;\n  font-weight: 700;\n  src: local('Lato Bold Italic'), local('Lato-BoldItalic'), url(../fonts/HkF_qI1x_noxlxhrhMQYEKCWcynf_cDxXwCLxiixG1c.ttf) format('truetype');\n}\n"
  },
  {
    "path": "presentation/css/print/paper.css",
    "content": "/* Default Print Stylesheet Template\n   by Rob Glazebrook of CSSnewbie.com\n   Last Updated: June 4, 2008\n\n   Feel free (nay, compelled) to edit, append, and\n   manipulate this file as you see fit. */\n\n\n@media print {\n\n\t/* SECTION 1: Set default width, margin, float, and\n\t   background. This prevents elements from extending\n\t   beyond the edge of the printed page, and prevents\n\t   unnecessary background images from printing */\n\thtml {\n\t\tbackground: #fff;\n\t\twidth: auto;\n\t\theight: auto;\n\t\toverflow: visible;\n\t}\n\tbody {\n\t\tbackground: #fff;\n\t\tfont-size: 20pt;\n\t\twidth: auto;\n\t\theight: auto;\n\t\tborder: 0;\n\t\tmargin: 0 5%;\n\t\tpadding: 0;\n\t\toverflow: visible;\n\t\tfloat: none !important;\n\t}\n\n\t/* SECTION 2: Remove any elements not needed in print.\n\t   This would include navigation, ads, sidebars, etc. */\n\t.nestedarrow,\n\t.controls,\n\t.fork-reveal,\n\t.share-reveal,\n\t.state-background,\n\t.reveal .progress,\n\t.reveal .backgrounds {\n\t\tdisplay: none !important;\n\t}\n\n\t/* SECTION 3: Set body font face, size, and color.\n\t   Consider using a serif font for readability. */\n\tbody, p, td, li, div {\n\t\tfont-size: 20pt!important;\n\t\tfont-family: Georgia, \"Times New Roman\", Times, serif !important;\n\t\tcolor: #000;\n\t}\n\n\t/* SECTION 4: Set heading font face, sizes, and color.\n\t   Differentiate your headings from your body text.\n\t   Perhaps use a large sans-serif for distinction. */\n\th1,h2,h3,h4,h5,h6 {\n\t\tcolor: #000!important;\n\t\theight: auto;\n\t\tline-height: normal;\n\t\tfont-family: Georgia, \"Times New Roman\", Times, serif !important;\n\t\ttext-shadow: 0 0 0 #000 !important;\n\t\ttext-align: left;\n\t\tletter-spacing: normal;\n\t}\n\t/* Need to reduce the size of the fonts for printing */\n\th1 { font-size: 28pt !important;  }\n\th2 { font-size: 24pt !important; }\n\th3 { font-size: 22pt !important; }\n\th4 { font-size: 22pt !important; font-variant: small-caps; }\n\th5 { font-size: 21pt !important; }\n\th6 { font-size: 20pt !important; font-style: italic; }\n\n\t/* SECTION 5: Make hyperlinks more usable.\n\t   Ensure links are underlined, and consider appending\n\t   the URL to the end of the link for usability. */\n\ta:link,\n\ta:visited {\n\t\tcolor: #000 !important;\n\t\tfont-weight: bold;\n\t\ttext-decoration: underline;\n\t}\n\t/*\n\t.reveal a:link:after,\n\t.reveal a:visited:after {\n\t\tcontent: \" (\" attr(href) \") \";\n\t\tcolor: #222 !important;\n\t\tfont-size: 90%;\n\t}\n\t*/\n\n\n\t/* SECTION 6: more reveal.js specific additions by @skypanther */\n\tul, ol, div, p {\n\t\tvisibility: visible;\n\t\tposition: static;\n\t\twidth: auto;\n\t\theight: auto;\n\t\tdisplay: block;\n\t\toverflow: visible;\n\t\tmargin: 0;\n\t\ttext-align: left !important;\n\t}\n\t.reveal pre,\n\t.reveal table {\n\t\tmargin-left: 0;\n\t\tmargin-right: 0;\n\t}\n\t.reveal pre code {\n\t\tpadding: 20px;\n\t\tborder: 1px solid #ddd;\n\t}\n\t.reveal blockquote {\n\t\tmargin: 20px 0;\n\t}\n\t.reveal .slides {\n\t\tposition: static !important;\n\t\twidth: auto !important;\n\t\theight: auto !important;\n\n\t\tleft: 0 !important;\n\t\ttop: 0 !important;\n\t\tmargin-left: 0 !important;\n\t\tmargin-top: 0 !important;\n\t\tpadding: 0 !important;\n\t\tzoom: 1 !important;\n\n\t\toverflow: visible !important;\n\t\tdisplay: block !important;\n\n\t\ttext-align: left !important;\n\t\t-webkit-perspective: none;\n\t\t   -moz-perspective: none;\n\t\t    -ms-perspective: none;\n\t\t        perspective: none;\n\n\t\t-webkit-perspective-origin: 50% 50%;\n\t\t   -moz-perspective-origin: 50% 50%;\n\t\t    -ms-perspective-origin: 50% 50%;\n\t\t        perspective-origin: 50% 50%;\n\t}\n\t.reveal .slides section {\n\t\tvisibility: visible !important;\n\t\tposition: static !important;\n\t\twidth: 100% !important;\n\t\theight: auto !important;\n\t\tdisplay: block !important;\n\t\toverflow: visible !important;\n\n\t\tleft: 0 !important;\n\t\ttop: 0 !important;\n\t\tmargin-left: 0 !important;\n\t\tmargin-top: 0 !important;\n\t\tpadding: 60px 20px !important;\n\t\tz-index: auto !important;\n\n\t\topacity: 1 !important;\n\n\t\tpage-break-after: always !important;\n\n\t\t-webkit-transform-style: flat !important;\n\t\t   -moz-transform-style: flat !important;\n\t\t    -ms-transform-style: flat !important;\n\t\t        transform-style: flat !important;\n\n\t\t-webkit-transform: none !important;\n\t\t   -moz-transform: none !important;\n\t\t    -ms-transform: none !important;\n\t\t        transform: none !important;\n\n\t\t-webkit-transition: none !important;\n\t\t   -moz-transition: none !important;\n\t\t    -ms-transition: none !important;\n\t\t        transition: none !important;\n\t}\n\t.reveal .slides section.stack {\n\t\tpadding: 0 !important;\n\t}\n\t.reveal section:last-of-type {\n\t\tpage-break-after: avoid !important;\n\t}\n\t.reveal section .fragment {\n\t\topacity: 1 !important;\n\t\tvisibility: visible !important;\n\n\t\t-webkit-transform: none !important;\n\t\t   -moz-transform: none !important;\n\t\t    -ms-transform: none !important;\n\t\t        transform: none !important;\n\t}\n\t.reveal section img {\n\t\tdisplay: block;\n\t\tmargin: 15px 0px;\n\t\tbackground: rgba(255,255,255,1);\n\t\tborder: 1px solid #666;\n\t\tbox-shadow: none;\n\t}\n\n\t.reveal section small {\n\t\tfont-size: 0.8em;\n\t}\n\n}"
  },
  {
    "path": "presentation/css/print/pdf.css",
    "content": "/* Default Print Stylesheet Template\n   by Rob Glazebrook of CSSnewbie.com\n   Last Updated: June 4, 2008\n\n   Feel free (nay, compelled) to edit, append, and\n   manipulate this file as you see fit. */\n\n\n/* SECTION 1: Set default width, margin, float, and\n   background. This prevents elements from extending\n   beyond the edge of the printed page, and prevents\n   unnecessary background images from printing */\n\n* {\n\t-webkit-print-color-adjust: exact;\n}\n\nbody {\n\tmargin: 0 auto !important;\n\tborder: 0;\n\tpadding: 0;\n\tfloat: none !important;\n\toverflow: visible;\n}\n\nhtml {\n\twidth: 100%;\n\theight: 100%;\n\toverflow: visible;\n}\n\n/* SECTION 2: Remove any elements not needed in print.\n   This would include navigation, ads, sidebars, etc. */\n.nestedarrow,\n.reveal .controls,\n.reveal .progress,\n.reveal .slide-number,\n.reveal .playback,\n.reveal.overview,\n.fork-reveal,\n.share-reveal,\n.state-background {\n\tdisplay: none !important;\n}\n\n/* SECTION 3: Set body font face, size, and color.\n   Consider using a serif font for readability. */\nbody, p, td, li, div {\n\n}\n\n/* SECTION 4: Set heading font face, sizes, and color.\n   Differentiate your headings from your body text.\n   Perhaps use a large sans-serif for distinction. */\nh1,h2,h3,h4,h5,h6 {\n\ttext-shadow: 0 0 0 #000 !important;\n}\n\n.reveal pre code {\n\toverflow: hidden !important;\n\tfont-family: Courier, 'Courier New', monospace !important;\n}\n\n\n/* SECTION 5: more reveal.js specific additions by @skypanther */\nul, ol, div, p {\n\tvisibility: visible;\n\tposition: static;\n\twidth: auto;\n\theight: auto;\n\tdisplay: block;\n\toverflow: visible;\n\tmargin: auto;\n}\n.reveal {\n\twidth: auto !important;\n\theight: auto !important;\n\toverflow: hidden !important;\n}\n.reveal .slides {\n\tposition: static;\n\twidth: 100%;\n\theight: auto;\n\n\tleft: auto;\n\ttop: auto;\n\tmargin: 0 !important;\n\tpadding: 0 !important;\n\n\toverflow: visible;\n\tdisplay: block;\n\n\t-webkit-perspective: none;\n\t   -moz-perspective: none;\n\t    -ms-perspective: none;\n\t        perspective: none;\n\n\t-webkit-perspective-origin: 50% 50%; /* there isn't a none/auto value but 50-50 is the default */\n\t   -moz-perspective-origin: 50% 50%;\n\t    -ms-perspective-origin: 50% 50%;\n\t        perspective-origin: 50% 50%;\n}\n.reveal .slides section {\n\tpage-break-after: always !important;\n\n\tvisibility: visible !important;\n\tposition: relative !important;\n\tdisplay: block !important;\n\tposition: relative !important;\n\n\tmargin: 0 !important;\n\tpadding: 0 !important;\n\tbox-sizing: border-box !important;\n\tmin-height: 1px;\n\n\topacity: 1 !important;\n\n\t-webkit-transform-style: flat !important;\n\t   -moz-transform-style: flat !important;\n\t    -ms-transform-style: flat !important;\n\t        transform-style: flat !important;\n\n\t-webkit-transform: none !important;\n\t   -moz-transform: none !important;\n\t    -ms-transform: none !important;\n\t        transform: none !important;\n}\n.reveal section.stack {\n\tmargin: 0 !important;\n\tpadding: 0 !important;\n\tpage-break-after: avoid !important;\n\theight: auto !important;\n\tmin-height: auto !important;\n}\n.reveal img {\n\tbox-shadow: none;\n}\n.reveal .roll {\n\toverflow: visible;\n\tline-height: 1em;\n}\n\n/* Slide backgrounds are placed inside of their slide when exporting to PDF */\n.reveal section .slide-background {\n\tdisplay: block !important;\n\tposition: absolute;\n\ttop: 0;\n\tleft: 0;\n\twidth: 100%;\n\tz-index: -1;\n}\n/* All elements should be above the slide-background */\n.reveal section>* {\n\tposition: relative;\n\tz-index: 1;\n}\n\n"
  },
  {
    "path": "presentation/css/reveal.css",
    "content": "/*!\n * reveal.js\n * http://lab.hakim.se/reveal-js\n * MIT licensed\n *\n * Copyright (C) 2015 Hakim El Hattab, http://hakim.se\n */\n/*********************************************\n * RESET STYLES\n *********************************************/\nhtml, body, .reveal div, .reveal span, .reveal applet, .reveal object, .reveal iframe, .reveal h1, .reveal h2, .reveal h3, .reveal h4, .reveal h5, .reveal h6, .reveal p, .reveal blockquote, .reveal pre, .reveal a, .reveal abbr, .reveal acronym, .reveal address, .reveal big, .reveal cite, .reveal code, .reveal del, .reveal dfn, .reveal em, .reveal img, .reveal ins, .reveal kbd, .reveal q, .reveal s, .reveal samp, .reveal small, .reveal strike, .reveal strong, .reveal sub, .reveal sup, .reveal tt, .reveal var, .reveal b, .reveal u, .reveal center, .reveal dl, .reveal dt, .reveal dd, .reveal ol, .reveal ul, .reveal li, .reveal fieldset, .reveal form, .reveal label, .reveal legend, .reveal table, .reveal caption, .reveal tbody, .reveal tfoot, .reveal thead, .reveal tr, .reveal th, .reveal td, .reveal article, .reveal aside, .reveal canvas, .reveal details, .reveal embed, .reveal figure, .reveal figcaption, .reveal footer, .reveal header, .reveal hgroup, .reveal menu, .reveal nav, .reveal output, .reveal ruby, .reveal section, .reveal summary, .reveal time, .reveal mark, .reveal audio, video {\n  margin: 0;\n  padding: 0;\n  border: 0;\n  font-size: 100%;\n  font: inherit;\n  vertical-align: baseline; }\n\n.reveal article, .reveal aside, .reveal details, .reveal figcaption, .reveal figure, .reveal footer, .reveal header, .reveal hgroup, .reveal menu, .reveal nav, .reveal section {\n  display: block; }\n\n/*********************************************\n * GLOBAL STYLES\n *********************************************/\nhtml, body {\n  width: 100%;\n  height: 100%;\n  overflow: hidden; }\n\nbody {\n  position: relative;\n  line-height: 1;\n  background-color: #fff;\n  color: #000; }\n\n::-moz-selection {\n  background: #FF5E99;\n  color: #fff;\n  text-shadow: none; }\n\n::selection {\n  background: #FF5E99;\n  color: #fff;\n  text-shadow: none; }\n\n/*********************************************\n * VIEW FRAGMENTS\n *********************************************/\n.reveal .slides section .fragment {\n  opacity: 0;\n  visibility: hidden;\n  -webkit-transition: all 0.2s ease;\n          transition: all 0.2s ease; }\n  .reveal .slides section .fragment.visible {\n    opacity: 1;\n    visibility: visible; }\n\n.reveal .slides section .fragment.grow {\n  opacity: 1;\n  visibility: visible; }\n  .reveal .slides section .fragment.grow.visible {\n    -webkit-transform: scale(1.3);\n        -ms-transform: scale(1.3);\n            transform: scale(1.3); }\n\n.reveal .slides section .fragment.shrink {\n  opacity: 1;\n  visibility: visible; }\n  .reveal .slides section .fragment.shrink.visible {\n    -webkit-transform: scale(0.7);\n        -ms-transform: scale(0.7);\n            transform: scale(0.7); }\n\n.reveal .slides section .fragment.zoom-in {\n  -webkit-transform: scale(0.1);\n      -ms-transform: scale(0.1);\n          transform: scale(0.1); }\n  .reveal .slides section .fragment.zoom-in.visible {\n    -webkit-transform: scale(1);\n        -ms-transform: scale(1);\n            transform: scale(1); }\n\n.reveal .slides section .fragment.roll-in {\n  -webkit-transform: rotateX(90deg);\n          transform: rotateX(90deg); }\n  .reveal .slides section .fragment.roll-in.visible {\n    -webkit-transform: rotateX(0);\n            transform: rotateX(0); }\n\n.reveal .slides section .fragment.fade-out {\n  opacity: 1;\n  visibility: visible; }\n  .reveal .slides section .fragment.fade-out.visible {\n    opacity: 0;\n    visibility: hidden; }\n\n.reveal .slides section .fragment.semi-fade-out {\n  opacity: 1;\n  visibility: visible; }\n  .reveal .slides section .fragment.semi-fade-out.visible {\n    opacity: 0.5;\n    visibility: visible; }\n\n.reveal .slides section .fragment.strike {\n  opacity: 1; }\n  .reveal .slides section .fragment.strike.visible {\n    text-decoration: line-through; }\n\n.reveal .slides section .fragment.current-visible {\n  opacity: 0;\n  visibility: hidden; }\n  .reveal .slides section .fragment.current-visible.current-fragment {\n    opacity: 1;\n    visibility: visible; }\n\n.reveal .slides section .fragment.highlight-red, .reveal .slides section .fragment.highlight-current-red, .reveal .slides section .fragment.highlight-green, .reveal .slides section .fragment.highlight-current-green, .reveal .slides section .fragment.highlight-blue, .reveal .slides section .fragment.highlight-current-blue {\n  opacity: 1;\n  visibility: visible; }\n\n.reveal .slides section .fragment.highlight-red.visible {\n  color: #ff2c2d; }\n\n.reveal .slides section .fragment.highlight-green.visible {\n  color: #17ff2e; }\n\n.reveal .slides section .fragment.highlight-blue.visible {\n  color: #1b91ff; }\n\n.reveal .slides section .fragment.highlight-current-red.current-fragment {\n  color: #ff2c2d; }\n\n.reveal .slides section .fragment.highlight-current-green.current-fragment {\n  color: #17ff2e; }\n\n.reveal .slides section .fragment.highlight-current-blue.current-fragment {\n  color: #1b91ff; }\n\n/*********************************************\n * DEFAULT ELEMENT STYLES\n *********************************************/\n/* Fixes issue in Chrome where italic fonts did not appear when printing to PDF */\n.reveal:after {\n  content: '';\n  font-style: italic; }\n\n.reveal iframe {\n  z-index: 1; }\n\n/** Prevents layering issues in certain browser/transition combinations */\n.reveal a {\n  position: relative; }\n\n.reveal .stretch {\n  max-width: none;\n  max-height: none; }\n\n.reveal pre.stretch code {\n  height: 100%;\n  max-height: 100%;\n  -moz-box-sizing: border-box;\n       box-sizing: border-box; }\n\n/*********************************************\n * CONTROLS\n *********************************************/\n.reveal .controls {\n  display: none;\n  position: fixed;\n  width: 110px;\n  height: 110px;\n  z-index: 30;\n  right: 10px;\n  bottom: 10px;\n  -webkit-user-select: none; }\n\n.reveal .controls div {\n  position: absolute;\n  opacity: 0.05;\n  width: 0;\n  height: 0;\n  border: 12px solid transparent;\n  -webkit-transform: scale(0.9999);\n      -ms-transform: scale(0.9999);\n          transform: scale(0.9999);\n  -webkit-transition: all 0.2s ease;\n          transition: all 0.2s ease;\n  -webkit-tap-highlight-color: rgba(0, 0, 0, 0); }\n\n.reveal .controls div.enabled {\n  opacity: 0.7;\n  cursor: pointer; }\n\n.reveal .controls div.enabled:active {\n  margin-top: 1px; }\n\n.reveal .controls div.navigate-left {\n  top: 42px;\n  border-right-width: 22px;\n  border-right-color: #000; }\n\n.reveal .controls div.navigate-left.fragmented {\n  opacity: 0.3; }\n\n.reveal .controls div.navigate-right {\n  left: 74px;\n  top: 42px;\n  border-left-width: 22px;\n  border-left-color: #000; }\n\n.reveal .controls div.navigate-right.fragmented {\n  opacity: 0.3; }\n\n.reveal .controls div.navigate-up {\n  left: 42px;\n  border-bottom-width: 22px;\n  border-bottom-color: #000; }\n\n.reveal .controls div.navigate-up.fragmented {\n  opacity: 0.3; }\n\n.reveal .controls div.navigate-down {\n  left: 42px;\n  top: 74px;\n  border-top-width: 22px;\n  border-top-color: #000; }\n\n.reveal .controls div.navigate-down.fragmented {\n  opacity: 0.3; }\n\n/*********************************************\n * PROGRESS BAR\n *********************************************/\n.reveal .progress {\n  position: fixed;\n  display: none;\n  height: 3px;\n  width: 100%;\n  bottom: 0;\n  left: 0;\n  z-index: 10;\n  background-color: rgba(0, 0, 0, 0.2); }\n\n.reveal .progress:after {\n  content: '';\n  display: block;\n  position: absolute;\n  height: 20px;\n  width: 100%;\n  top: -20px; }\n\n.reveal .progress span {\n  display: block;\n  height: 100%;\n  width: 0px;\n  background-color: #000;\n  -webkit-transition: width 800ms cubic-bezier(0.26, 0.86, 0.44, 0.985);\n          transition: width 800ms cubic-bezier(0.26, 0.86, 0.44, 0.985); }\n\n/*********************************************\n * SLIDE NUMBER\n *********************************************/\n.reveal .slide-number {\n  position: fixed;\n  display: block;\n  right: 15px;\n  bottom: 15px;\n  opacity: 0.5;\n  z-index: 31;\n  font-size: 12px; }\n\n/*********************************************\n * SLIDES\n *********************************************/\n.reveal {\n  position: relative;\n  width: 100%;\n  height: 100%;\n  -ms-touch-action: none;\n      touch-action: none; }\n\n.reveal .slides {\n  position: absolute;\n  width: 100%;\n  height: 100%;\n  top: 0;\n  right: 0;\n  bottom: 0;\n  left: 0;\n  margin: auto;\n  overflow: visible;\n  z-index: 1;\n  text-align: center;\n  -webkit-perspective: 600px;\n          perspective: 600px;\n  -webkit-perspective-origin: 50% 40%;\n          perspective-origin: 50% 40%; }\n\n.reveal .slides > section {\n  -ms-perspective: 600px; }\n\n.reveal .slides > section, .reveal .slides > section > section {\n  display: none;\n  position: absolute;\n  width: 100%;\n  padding: 20px 0px;\n  z-index: 10;\n  -webkit-transform-style: preserve-3d;\n          transform-style: preserve-3d;\n  -webkit-transition: -webkit-transform-origin 800ms cubic-bezier(0.26, 0.86, 0.44, 0.985), -webkit-transform 800ms cubic-bezier(0.26, 0.86, 0.44, 0.985), visibility 800ms cubic-bezier(0.26, 0.86, 0.44, 0.985), opacity 800ms cubic-bezier(0.26, 0.86, 0.44, 0.985);\n          transition: -ms-transform-origin 800ms cubic-bezier(0.26, 0.86, 0.44, 0.985), transform 800ms cubic-bezier(0.26, 0.86, 0.44, 0.985), visibility 800ms cubic-bezier(0.26, 0.86, 0.44, 0.985), opacity 800ms cubic-bezier(0.26, 0.86, 0.44, 0.985);\n          transition: transform-origin 800ms cubic-bezier(0.26, 0.86, 0.44, 0.985), transform 800ms cubic-bezier(0.26, 0.86, 0.44, 0.985), visibility 800ms cubic-bezier(0.26, 0.86, 0.44, 0.985), opacity 800ms cubic-bezier(0.26, 0.86, 0.44, 0.985); }\n\n/* Global transition speed settings */\n.reveal[data-transition-speed=\"fast\"] .slides section {\n  -webkit-transition-duration: 400ms;\n          transition-duration: 400ms; }\n\n.reveal[data-transition-speed=\"slow\"] .slides section {\n  -webkit-transition-duration: 1200ms;\n          transition-duration: 1200ms; }\n\n/* Slide-specific transition speed overrides */\n.reveal .slides section[data-transition-speed=\"fast\"] {\n  -webkit-transition-duration: 400ms;\n          transition-duration: 400ms; }\n\n.reveal .slides section[data-transition-speed=\"slow\"] {\n  -webkit-transition-duration: 1200ms;\n          transition-duration: 1200ms; }\n\n.reveal .slides > section.stack {\n  padding-top: 0;\n  padding-bottom: 0; }\n\n.reveal .slides > section.present, .reveal .slides > section > section.present {\n  display: block;\n  z-index: 11;\n  opacity: 1; }\n\n.reveal.center, .reveal.center .slides, .reveal.center .slides section {\n  min-height: 0 !important; }\n\n/* Don't allow interaction with invisible slides */\n.reveal .slides > section.future, .reveal .slides > section > section.future, .reveal .slides > section.past, .reveal .slides > section > section.past {\n  pointer-events: none; }\n\n.reveal.overview .slides > section, .reveal.overview .slides > section > section {\n  pointer-events: auto; }\n\n.reveal .slides > section.past, .reveal .slides > section.future, .reveal .slides > section > section.past, .reveal .slides > section > section.future {\n  opacity: 0; }\n\n/*********************************************\n * SLIDE TRANSITION\n * Aliased 'linear' for backwards compatibility\n *********************************************/\n.reveal.slide section, .reveal.linear section {\n  -webkit-backface-visibility: hidden;\n          backface-visibility: hidden; }\n\n.reveal .slides > section[data-transition=slide].past, .reveal.slide .slides > section:not([data-transition]).past, .reveal .slides > section[data-transition=linear].past, .reveal.linear .slides > section:not([data-transition]).past {\n  -webkit-transform: translate(-150%, 0);\n      -ms-transform: translate(-150%, 0);\n          transform: translate(-150%, 0); }\n\n.reveal .slides > section[data-transition=slide].future, .reveal.slide .slides > section:not([data-transition]).future, .reveal .slides > section[data-transition=linear].future, .reveal.linear .slides > section:not([data-transition]).future {\n  -webkit-transform: translate(150%, 0);\n      -ms-transform: translate(150%, 0);\n          transform: translate(150%, 0); }\n\n.reveal .slides > section > section[data-transition=slide].past, .reveal.slide .slides > section > section:not([data-transition]).past, .reveal .slides > section > section[data-transition=linear].past, .reveal.linear .slides > section > section:not([data-transition]).past {\n  -webkit-transform: translate(0, -150%);\n      -ms-transform: translate(0, -150%);\n          transform: translate(0, -150%); }\n\n.reveal .slides > section > section[data-transition=slide].future, .reveal.slide .slides > section > section:not([data-transition]).future, .reveal .slides > section > section[data-transition=linear].future, .reveal.linear .slides > section > section:not([data-transition]).future {\n  -webkit-transform: translate(0, 150%);\n      -ms-transform: translate(0, 150%);\n          transform: translate(0, 150%); }\n\n/*********************************************\n * CONVEX TRANSITION\n * Aliased 'default' for backwards compatibility\n *********************************************/\n.reveal .slides > section[data-transition=default].past, .reveal.default .slides > section:not([data-transition]).past, .reveal .slides > section[data-transition=convex].past, .reveal.convex .slides > section:not([data-transition]).past {\n  -webkit-transform: translate3d(-100%, 0, 0) rotateY(-90deg) translate3d(-100%, 0, 0);\n          transform: translate3d(-100%, 0, 0) rotateY(-90deg) translate3d(-100%, 0, 0); }\n\n.reveal .slides > section[data-transition=default].future, .reveal.default .slides > section:not([data-transition]).future, .reveal .slides > section[data-transition=convex].future, .reveal.convex .slides > section:not([data-transition]).future {\n  -webkit-transform: translate3d(100%, 0, 0) rotateY(90deg) translate3d(100%, 0, 0);\n          transform: translate3d(100%, 0, 0) rotateY(90deg) translate3d(100%, 0, 0); }\n\n.reveal .slides > section > section[data-transition=default].past, .reveal.default .slides > section > section:not([data-transition]).past, .reveal .slides > section > section[data-transition=convex].past, .reveal.convex .slides > section > section:not([data-transition]).past {\n  -webkit-transform: translate3d(0, -300px, 0) rotateX(70deg) translate3d(0, -300px, 0);\n          transform: translate3d(0, -300px, 0) rotateX(70deg) translate3d(0, -300px, 0); }\n\n.reveal .slides > section > section[data-transition=default].future, .reveal.default .slides > section > section:not([data-transition]).future, .reveal .slides > section > section[data-transition=convex].future, .reveal.convex .slides > section > section:not([data-transition]).future {\n  -webkit-transform: translate3d(0, 300px, 0) rotateX(-70deg) translate3d(0, 300px, 0);\n          transform: translate3d(0, 300px, 0) rotateX(-70deg) translate3d(0, 300px, 0); }\n\n/*********************************************\n * CONCAVE TRANSITION\n *********************************************/\n.reveal .slides > section[data-transition=concave].past, .reveal.concave .slides > section:not([data-transition]).past {\n  -webkit-transform: translate3d(-100%, 0, 0) rotateY(90deg) translate3d(-100%, 0, 0);\n          transform: translate3d(-100%, 0, 0) rotateY(90deg) translate3d(-100%, 0, 0); }\n\n.reveal .slides > section[data-transition=concave].future, .reveal.concave .slides > section:not([data-transition]).future {\n  -webkit-transform: translate3d(100%, 0, 0) rotateY(-90deg) translate3d(100%, 0, 0);\n          transform: translate3d(100%, 0, 0) rotateY(-90deg) translate3d(100%, 0, 0); }\n\n.reveal .slides > section > section[data-transition=concave].past, .reveal.concave .slides > section > section:not([data-transition]).past {\n  -webkit-transform: translate3d(0, -80%, 0) rotateX(-70deg) translate3d(0, -80%, 0);\n          transform: translate3d(0, -80%, 0) rotateX(-70deg) translate3d(0, -80%, 0); }\n\n.reveal .slides > section > section[data-transition=concave].future, .reveal.concave .slides > section > section:not([data-transition]).future {\n  -webkit-transform: translate3d(0, 80%, 0) rotateX(70deg) translate3d(0, 80%, 0);\n          transform: translate3d(0, 80%, 0) rotateX(70deg) translate3d(0, 80%, 0); }\n\n/*********************************************\n * ZOOM TRANSITION\n *********************************************/\n.reveal .slides > section[data-transition=zoom], .reveal.zoom .slides > section:not([data-transition]) {\n  -webkit-transition-timing-function: ease;\n          transition-timing-function: ease; }\n\n.reveal .slides > section[data-transition=zoom].past, .reveal.zoom .slides > section:not([data-transition]).past {\n  visibility: hidden;\n  -webkit-transform: scale(16);\n      -ms-transform: scale(16);\n          transform: scale(16); }\n\n.reveal .slides > section[data-transition=zoom].future, .reveal.zoom .slides > section:not([data-transition]).future {\n  visibility: hidden;\n  -webkit-transform: scale(0.2);\n      -ms-transform: scale(0.2);\n          transform: scale(0.2); }\n\n.reveal .slides > section > section[data-transition=zoom].past, .reveal.zoom .slides > section > section:not([data-transition]).past {\n  -webkit-transform: translate(0, -150%);\n      -ms-transform: translate(0, -150%);\n          transform: translate(0, -150%); }\n\n.reveal .slides > section > section[data-transition=zoom].future, .reveal.zoom .slides > section > section:not([data-transition]).future {\n  -webkit-transform: translate(0, 150%);\n      -ms-transform: translate(0, 150%);\n          transform: translate(0, 150%); }\n\n/*********************************************\n * CUBE TRANSITION\n *********************************************/\n.reveal.cube .slides {\n  -webkit-perspective: 1300px;\n          perspective: 1300px; }\n\n.reveal.cube .slides section {\n  padding: 30px;\n  min-height: 700px;\n  -webkit-backface-visibility: hidden;\n          backface-visibility: hidden;\n  -moz-box-sizing: border-box;\n       box-sizing: border-box; }\n\n.reveal.center.cube .slides section {\n  min-height: 0; }\n\n.reveal.cube .slides section:not(.stack):before {\n  content: '';\n  position: absolute;\n  display: block;\n  width: 100%;\n  height: 100%;\n  left: 0;\n  top: 0;\n  background: rgba(0, 0, 0, 0.1);\n  border-radius: 4px;\n  -webkit-transform: translateZ(-20px);\n          transform: translateZ(-20px); }\n\n.reveal.cube .slides section:not(.stack):after {\n  content: '';\n  position: absolute;\n  display: block;\n  width: 90%;\n  height: 30px;\n  left: 5%;\n  bottom: 0;\n  background: none;\n  z-index: 1;\n  border-radius: 4px;\n  box-shadow: 0px 95px 25px rgba(0, 0, 0, 0.2);\n  -webkit-transform: translateZ(-90px) rotateX(65deg);\n          transform: translateZ(-90px) rotateX(65deg); }\n\n.reveal.cube .slides > section.stack {\n  padding: 0;\n  background: none; }\n\n.reveal.cube .slides > section.past {\n  -webkit-transform-origin: 100% 0%;\n      -ms-transform-origin: 100% 0%;\n          transform-origin: 100% 0%;\n  -webkit-transform: translate3d(-100%, 0, 0) rotateY(-90deg);\n          transform: translate3d(-100%, 0, 0) rotateY(-90deg); }\n\n.reveal.cube .slides > section.future {\n  -webkit-transform-origin: 0% 0%;\n      -ms-transform-origin: 0% 0%;\n          transform-origin: 0% 0%;\n  -webkit-transform: translate3d(100%, 0, 0) rotateY(90deg);\n          transform: translate3d(100%, 0, 0) rotateY(90deg); }\n\n.reveal.cube .slides > section > section.past {\n  -webkit-transform-origin: 0% 100%;\n      -ms-transform-origin: 0% 100%;\n          transform-origin: 0% 100%;\n  -webkit-transform: translate3d(0, -100%, 0) rotateX(90deg);\n          transform: translate3d(0, -100%, 0) rotateX(90deg); }\n\n.reveal.cube .slides > section > section.future {\n  -webkit-transform-origin: 0% 0%;\n      -ms-transform-origin: 0% 0%;\n          transform-origin: 0% 0%;\n  -webkit-transform: translate3d(0, 100%, 0) rotateX(-90deg);\n          transform: translate3d(0, 100%, 0) rotateX(-90deg); }\n\n/*********************************************\n * PAGE TRANSITION\n *********************************************/\n.reveal.page .slides {\n  -webkit-perspective-origin: 0% 50%;\n          perspective-origin: 0% 50%;\n  -webkit-perspective: 3000px;\n          perspective: 3000px; }\n\n.reveal.page .slides section {\n  padding: 30px;\n  min-height: 700px;\n  -moz-box-sizing: border-box;\n       box-sizing: border-box; }\n\n.reveal.page .slides section.past {\n  z-index: 12; }\n\n.reveal.page .slides section:not(.stack):before {\n  content: '';\n  position: absolute;\n  display: block;\n  width: 100%;\n  height: 100%;\n  left: 0;\n  top: 0;\n  background: rgba(0, 0, 0, 0.1);\n  -webkit-transform: translateZ(-20px);\n          transform: translateZ(-20px); }\n\n.reveal.page .slides section:not(.stack):after {\n  content: '';\n  position: absolute;\n  display: block;\n  width: 90%;\n  height: 30px;\n  left: 5%;\n  bottom: 0;\n  background: none;\n  z-index: 1;\n  border-radius: 4px;\n  box-shadow: 0px 95px 25px rgba(0, 0, 0, 0.2);\n  -webkit-transform: translateZ(-90px) rotateX(65deg); }\n\n.reveal.page .slides > section.stack {\n  padding: 0;\n  background: none; }\n\n.reveal.page .slides > section.past {\n  -webkit-transform-origin: 0% 0%;\n      -ms-transform-origin: 0% 0%;\n          transform-origin: 0% 0%;\n  -webkit-transform: translate3d(-40%, 0, 0) rotateY(-80deg);\n          transform: translate3d(-40%, 0, 0) rotateY(-80deg); }\n\n.reveal.page .slides > section.future {\n  -webkit-transform-origin: 100% 0%;\n      -ms-transform-origin: 100% 0%;\n          transform-origin: 100% 0%;\n  -webkit-transform: translate3d(0, 0, 0);\n          transform: translate3d(0, 0, 0); }\n\n.reveal.page .slides > section > section.past {\n  -webkit-transform-origin: 0% 0%;\n      -ms-transform-origin: 0% 0%;\n          transform-origin: 0% 0%;\n  -webkit-transform: translate3d(0, -40%, 0) rotateX(80deg);\n          transform: translate3d(0, -40%, 0) rotateX(80deg); }\n\n.reveal.page .slides > section > section.future {\n  -webkit-transform-origin: 0% 100%;\n      -ms-transform-origin: 0% 100%;\n          transform-origin: 0% 100%;\n  -webkit-transform: translate3d(0, 0, 0);\n          transform: translate3d(0, 0, 0); }\n\n/*********************************************\n * FADE TRANSITION\n *********************************************/\n.reveal .slides section[data-transition=fade], .reveal.fade .slides section:not([data-transition]), .reveal.fade .slides > section > section:not([data-transition]) {\n  -webkit-transform: none;\n      -ms-transform: none;\n          transform: none;\n  -webkit-transition: opacity 0.5s;\n          transition: opacity 0.5s; }\n\n.reveal.fade.overview .slides section, .reveal.fade.overview .slides > section > section {\n  -webkit-transition: none;\n          transition: none; }\n\n/*********************************************\n * NO TRANSITION\n *********************************************/\n.reveal .slides section[data-transition=none], .reveal.none .slides section:not([data-transition]) {\n  -webkit-transform: none;\n      -ms-transform: none;\n          transform: none;\n  -webkit-transition: none;\n          transition: none; }\n\n/*********************************************\n * OVERVIEW\n *********************************************/\n.reveal.overview .slides {\n  -webkit-perspective-origin: 50% 50%;\n          perspective-origin: 50% 50%;\n  -webkit-perspective: 700px;\n          perspective: 700px; }\n\n.reveal.overview .slides section {\n  height: 700px;\n  overflow: hidden;\n  opacity: 1 !important;\n  visibility: visible !important;\n  cursor: pointer;\n  background: rgba(0, 0, 0, 0.1);\n  -moz-box-sizing: border-box;\n       box-sizing: border-box; }\n\n.reveal.overview .slides section, .reveal.overview-deactivating .slides section {\n  -webkit-transition: none !important;\n          transition: none !important; }\n\n.reveal.overview .slides section .fragment {\n  opacity: 1; }\n\n.reveal.overview .slides section:after, .reveal.overview .slides section:before {\n  display: none !important; }\n\n.reveal.overview .slides section > section {\n  opacity: 1;\n  cursor: pointer; }\n\n.reveal.overview .slides section:hover {\n  background: rgba(0, 0, 0, 0.3); }\n\n.reveal.overview .slides section.present {\n  background: rgba(0, 0, 0, 0.3); }\n\n.reveal.overview .slides > section.stack {\n  padding: 0;\n  top: 0 !important;\n  background: none;\n  overflow: visible; }\n\n/*********************************************\n * PAUSED MODE\n *********************************************/\n.reveal .pause-overlay {\n  position: absolute;\n  top: 0;\n  left: 0;\n  width: 100%;\n  height: 100%;\n  background: black;\n  visibility: hidden;\n  opacity: 0;\n  z-index: 100;\n  -webkit-transition: all 1s ease;\n          transition: all 1s ease; }\n\n.reveal.paused .pause-overlay {\n  visibility: visible;\n  opacity: 1; }\n\n/*********************************************\n * FALLBACK\n *********************************************/\n.no-transforms {\n  overflow-y: auto; }\n\n.no-transforms .reveal .slides {\n  position: relative;\n  width: 80%;\n  height: auto !important;\n  top: 0;\n  left: 50%;\n  margin: 0;\n  text-align: center; }\n\n.no-transforms .reveal .controls, .no-transforms .reveal .progress {\n  display: none !important; }\n\n.no-transforms .reveal .slides section {\n  display: block !important;\n  opacity: 1 !important;\n  position: relative !important;\n  height: auto;\n  min-height: 0;\n  top: 0;\n  left: -50%;\n  margin: 70px 0;\n  -webkit-transform: none;\n      -ms-transform: none;\n          transform: none; }\n\n.no-transforms .reveal .slides section section {\n  left: 0; }\n\n.reveal .no-transition, .reveal .no-transition * {\n  -webkit-transition: none !important;\n          transition: none !important; }\n\n/*********************************************\n * PER-SLIDE BACKGROUNDS\n *********************************************/\n.reveal > .backgrounds {\n  position: absolute;\n  width: 100%;\n  height: 100%;\n  top: 0;\n  left: 0;\n  -webkit-perspective: 600px;\n          perspective: 600px; }\n\n.reveal .slide-background {\n  display: none;\n  position: absolute;\n  width: 100%;\n  height: 100%;\n  opacity: 0;\n  visibility: hidden;\n  background-color: rgba(0, 0, 0, 0);\n  background-position: 50% 50%;\n  background-repeat: no-repeat;\n  background-size: cover;\n  -webkit-transition: all 800ms cubic-bezier(0.26, 0.86, 0.44, 0.985);\n          transition: all 800ms cubic-bezier(0.26, 0.86, 0.44, 0.985); }\n\n.reveal .slide-background.stack {\n  display: block; }\n\n.reveal .slide-background.present {\n  opacity: 1;\n  visibility: visible; }\n\n.print-pdf .reveal .slide-background {\n  opacity: 1 !important;\n  visibility: visible !important; }\n\n/* Video backgrounds */\n.reveal .slide-background video {\n  position: absolute;\n  width: 100%;\n  height: 100%;\n  max-width: none;\n  max-height: none;\n  top: 0;\n  left: 0; }\n\n/* Immediate transition style */\n.reveal[data-background-transition=none] > .backgrounds .slide-background, .reveal > .backgrounds .slide-background[data-background-transition=none] {\n  -webkit-transition: none;\n          transition: none; }\n\n/* Slide */\n.reveal[data-background-transition=slide] > .backgrounds .slide-background, .reveal > .backgrounds .slide-background[data-background-transition=slide] {\n  opacity: 1;\n  -webkit-backface-visibility: hidden;\n          backface-visibility: hidden; }\n\n.reveal[data-background-transition=slide] > .backgrounds .slide-background.past, .reveal > .backgrounds .slide-background.past[data-background-transition=slide] {\n  -webkit-transform: translate(-100%, 0);\n      -ms-transform: translate(-100%, 0);\n          transform: translate(-100%, 0); }\n\n.reveal[data-background-transition=slide] > .backgrounds .slide-background.future, .reveal > .backgrounds .slide-background.future[data-background-transition=slide] {\n  -webkit-transform: translate(100%, 0);\n      -ms-transform: translate(100%, 0);\n          transform: translate(100%, 0); }\n\n.reveal[data-background-transition=slide] > .backgrounds .slide-background > .slide-background.past, .reveal > .backgrounds .slide-background > .slide-background.past[data-background-transition=slide] {\n  -webkit-transform: translate(0, -100%);\n      -ms-transform: translate(0, -100%);\n          transform: translate(0, -100%); }\n\n.reveal[data-background-transition=slide] > .backgrounds .slide-background > .slide-background.future, .reveal > .backgrounds .slide-background > .slide-background.future[data-background-transition=slide] {\n  -webkit-transform: translate(0, 100%);\n      -ms-transform: translate(0, 100%);\n          transform: translate(0, 100%); }\n\n/* Convex */\n.reveal[data-background-transition=convex] > .backgrounds .slide-background.past, .reveal > .backgrounds .slide-background.past[data-background-transition=convex] {\n  opacity: 0;\n  -webkit-transform: translate3d(-100%, 0, 0) rotateY(-90deg) translate3d(-100%, 0, 0);\n          transform: translate3d(-100%, 0, 0) rotateY(-90deg) translate3d(-100%, 0, 0); }\n\n.reveal[data-background-transition=convex] > .backgrounds .slide-background.future, .reveal > .backgrounds .slide-background.future[data-background-transition=convex] {\n  opacity: 0;\n  -webkit-transform: translate3d(100%, 0, 0) rotateY(90deg) translate3d(100%, 0, 0);\n          transform: translate3d(100%, 0, 0) rotateY(90deg) translate3d(100%, 0, 0); }\n\n.reveal[data-background-transition=convex] > .backgrounds .slide-background > .slide-background.past, .reveal > .backgrounds .slide-background > .slide-background.past[data-background-transition=convex] {\n  opacity: 0;\n  -webkit-transform: translate3d(0, -100%, 0) rotateX(90deg) translate3d(0, -100%, 0);\n          transform: translate3d(0, -100%, 0) rotateX(90deg) translate3d(0, -100%, 0); }\n\n.reveal[data-background-transition=convex] > .backgrounds .slide-background > .slide-background.future, .reveal > .backgrounds .slide-background > .slide-background.future[data-background-transition=convex] {\n  opacity: 0;\n  -webkit-transform: translate3d(0, 100%, 0) rotateX(-90deg) translate3d(0, 100%, 0);\n          transform: translate3d(0, 100%, 0) rotateX(-90deg) translate3d(0, 100%, 0); }\n\n/* Concave */\n.reveal[data-background-transition=concave] > .backgrounds .slide-background.past, .reveal > .backgrounds .slide-background.past[data-background-transition=concave] {\n  opacity: 0;\n  -webkit-transform: translate3d(-100%, 0, 0) rotateY(90deg) translate3d(-100%, 0, 0);\n          transform: translate3d(-100%, 0, 0) rotateY(90deg) translate3d(-100%, 0, 0); }\n\n.reveal[data-background-transition=concave] > .backgrounds .slide-background.future, .reveal > .backgrounds .slide-background.future[data-background-transition=concave] {\n  opacity: 0;\n  -webkit-transform: translate3d(100%, 0, 0) rotateY(-90deg) translate3d(100%, 0, 0);\n          transform: translate3d(100%, 0, 0) rotateY(-90deg) translate3d(100%, 0, 0); }\n\n.reveal[data-background-transition=concave] > .backgrounds .slide-background > .slide-background.past, .reveal > .backgrounds .slide-background > .slide-background.past[data-background-transition=concave] {\n  opacity: 0;\n  -webkit-transform: translate3d(0, -100%, 0) rotateX(-90deg) translate3d(0, -100%, 0);\n          transform: translate3d(0, -100%, 0) rotateX(-90deg) translate3d(0, -100%, 0); }\n\n.reveal[data-background-transition=concave] > .backgrounds .slide-background > .slide-background.future, .reveal > .backgrounds .slide-background > .slide-background.future[data-background-transition=concave] {\n  opacity: 0;\n  -webkit-transform: translate3d(0, 100%, 0) rotateX(90deg) translate3d(0, 100%, 0);\n          transform: translate3d(0, 100%, 0) rotateX(90deg) translate3d(0, 100%, 0); }\n\n/* Zoom */\n.reveal[data-background-transition=zoom] > .backgrounds .slide-background, .reveal > .backgrounds .slide-background[data-background-transition=zoom] {\n  -webkit-transition-timing-function: ease;\n          transition-timing-function: ease; }\n\n.reveal[data-background-transition=zoom] > .backgrounds .slide-background.past, .reveal > .backgrounds .slide-background.past[data-background-transition=zoom] {\n  opacity: 0;\n  visibility: hidden;\n  -webkit-transform: scale(16);\n      -ms-transform: scale(16);\n          transform: scale(16); }\n\n.reveal[data-background-transition=zoom] > .backgrounds .slide-background.future, .reveal > .backgrounds .slide-background.future[data-background-transition=zoom] {\n  opacity: 0;\n  visibility: hidden;\n  -webkit-transform: scale(0.2);\n      -ms-transform: scale(0.2);\n          transform: scale(0.2); }\n\n.reveal[data-background-transition=zoom] > .backgrounds .slide-background > .slide-background.past, .reveal > .backgrounds .slide-background > .slide-background.past[data-background-transition=zoom] {\n  opacity: 0;\n  visibility: hidden;\n  -webkit-transform: scale(16);\n      -ms-transform: scale(16);\n          transform: scale(16); }\n\n.reveal[data-background-transition=zoom] > .backgrounds .slide-background > .slide-background.future, .reveal > .backgrounds .slide-background > .slide-background.future[data-background-transition=zoom] {\n  opacity: 0;\n  visibility: hidden;\n  -webkit-transform: scale(0.2);\n      -ms-transform: scale(0.2);\n          transform: scale(0.2); }\n\n/* Global transition speed settings */\n.reveal[data-transition-speed=\"fast\"] > .backgrounds .slide-background {\n  -webkit-transition-duration: 400ms;\n          transition-duration: 400ms; }\n\n.reveal[data-transition-speed=\"slow\"] > .backgrounds .slide-background {\n  -webkit-transition-duration: 1200ms;\n          transition-duration: 1200ms; }\n\n/*********************************************\n * RTL SUPPORT\n *********************************************/\n.reveal.rtl .slides, .reveal.rtl .slides h1, .reveal.rtl .slides h2, .reveal.rtl .slides h3, .reveal.rtl .slides h4, .reveal.rtl .slides h5, .reveal.rtl .slides h6 {\n  direction: rtl;\n  font-family: sans-serif; }\n\n.reveal.rtl pre, .reveal.rtl code {\n  direction: ltr; }\n\n.reveal.rtl ol, .reveal.rtl ul {\n  text-align: right; }\n\n.reveal.rtl .progress span {\n  float: right; }\n\n/*********************************************\n * PARALLAX BACKGROUND\n *********************************************/\n.reveal.has-parallax-background .backgrounds {\n  -webkit-transition: all 0.8s ease;\n          transition: all 0.8s ease; }\n\n/* Global transition speed settings */\n.reveal.has-parallax-background[data-transition-speed=\"fast\"] .backgrounds {\n  -webkit-transition-duration: 400ms;\n          transition-duration: 400ms; }\n\n.reveal.has-parallax-background[data-transition-speed=\"slow\"] .backgrounds {\n  -webkit-transition-duration: 1200ms;\n          transition-duration: 1200ms; }\n\n/*********************************************\n * LINK PREVIEW OVERLAY\n *********************************************/\n.reveal .overlay {\n  position: absolute;\n  top: 0;\n  left: 0;\n  width: 100%;\n  height: 100%;\n  z-index: 1000;\n  background: rgba(0, 0, 0, 0.9);\n  opacity: 0;\n  visibility: hidden;\n  -webkit-transition: all 0.3s ease;\n          transition: all 0.3s ease; }\n\n.reveal .overlay.visible {\n  opacity: 1;\n  visibility: visible; }\n\n.reveal .overlay .spinner {\n  position: absolute;\n  display: block;\n  top: 50%;\n  left: 50%;\n  width: 32px;\n  height: 32px;\n  margin: -16px 0 0 -16px;\n  z-index: 10;\n  background-image: url(data:image/gif;base64,R0lGODlhIAAgAPMAAJmZmf%2F%2F%2F6%2Bvr8nJybW1tcDAwOjo6Nvb26ioqKOjo7Ozs%2FLy8vz8%2FAAAAAAAAAAAACH%2FC05FVFNDQVBFMi4wAwEAAAAh%2FhpDcmVhdGVkIHdpdGggYWpheGxvYWQuaW5mbwAh%2BQQJCgAAACwAAAAAIAAgAAAE5xDISWlhperN52JLhSSdRgwVo1ICQZRUsiwHpTJT4iowNS8vyW2icCF6k8HMMBkCEDskxTBDAZwuAkkqIfxIQyhBQBFvAQSDITM5VDW6XNE4KagNh6Bgwe60smQUB3d4Rz1ZBApnFASDd0hihh12BkE9kjAJVlycXIg7CQIFA6SlnJ87paqbSKiKoqusnbMdmDC2tXQlkUhziYtyWTxIfy6BE8WJt5YJvpJivxNaGmLHT0VnOgSYf0dZXS7APdpB309RnHOG5gDqXGLDaC457D1zZ%2FV%2FnmOM82XiHRLYKhKP1oZmADdEAAAh%2BQQJCgAAACwAAAAAIAAgAAAE6hDISWlZpOrNp1lGNRSdRpDUolIGw5RUYhhHukqFu8DsrEyqnWThGvAmhVlteBvojpTDDBUEIFwMFBRAmBkSgOrBFZogCASwBDEY%2FCZSg7GSE0gSCjQBMVG023xWBhklAnoEdhQEfyNqMIcKjhRsjEdnezB%2BA4k8gTwJhFuiW4dokXiloUepBAp5qaKpp6%2BHo7aWW54wl7obvEe0kRuoplCGepwSx2jJvqHEmGt6whJpGpfJCHmOoNHKaHx61WiSR92E4lbFoq%2BB6QDtuetcaBPnW6%2BO7wDHpIiK9SaVK5GgV543tzjgGcghAgAh%2BQQJCgAAACwAAAAAIAAgAAAE7hDISSkxpOrN5zFHNWRdhSiVoVLHspRUMoyUakyEe8PTPCATW9A14E0UvuAKMNAZKYUZCiBMuBakSQKG8G2FzUWox2AUtAQFcBKlVQoLgQReZhQlCIJesQXI5B0CBnUMOxMCenoCfTCEWBsJColTMANldx15BGs8B5wlCZ9Po6OJkwmRpnqkqnuSrayqfKmqpLajoiW5HJq7FL1Gr2mMMcKUMIiJgIemy7xZtJsTmsM4xHiKv5KMCXqfyUCJEonXPN2rAOIAmsfB3uPoAK%2B%2BG%2Bw48edZPK%2BM6hLJpQg484enXIdQFSS1u6UhksENEQAAIfkECQoAAAAsAAAAACAAIAAABOcQyEmpGKLqzWcZRVUQnZYg1aBSh2GUVEIQ2aQOE%2BG%2BcD4ntpWkZQj1JIiZIogDFFyHI0UxQwFugMSOFIPJftfVAEoZLBbcLEFhlQiqGp1Vd140AUklUN3eCA51C1EWMzMCezCBBmkxVIVHBWd3HHl9JQOIJSdSnJ0TDKChCwUJjoWMPaGqDKannasMo6WnM562R5YluZRwur0wpgqZE7NKUm%2BFNRPIhjBJxKZteWuIBMN4zRMIVIhffcgojwCF117i4nlLnY5ztRLsnOk%2BaV%2BoJY7V7m76PdkS4trKcdg0Zc0tTcKkRAAAIfkECQoAAAAsAAAAACAAIAAABO4QyEkpKqjqzScpRaVkXZWQEximw1BSCUEIlDohrft6cpKCk5xid5MNJTaAIkekKGQkWyKHkvhKsR7ARmitkAYDYRIbUQRQjWBwJRzChi9CRlBcY1UN4g0%2FVNB0AlcvcAYHRyZPdEQFYV8ccwR5HWxEJ02YmRMLnJ1xCYp0Y5idpQuhopmmC2KgojKasUQDk5BNAwwMOh2RtRq5uQuPZKGIJQIGwAwGf6I0JXMpC8C7kXWDBINFMxS4DKMAWVWAGYsAdNqW5uaRxkSKJOZKaU3tPOBZ4DuK2LATgJhkPJMgTwKCdFjyPHEnKxFCDhEAACH5BAkKAAAALAAAAAAgACAAAATzEMhJaVKp6s2nIkolIJ2WkBShpkVRWqqQrhLSEu9MZJKK9y1ZrqYK9WiClmvoUaF8gIQSNeF1Er4MNFn4SRSDARWroAIETg1iVwuHjYB1kYc1mwruwXKC9gmsJXliGxc%2BXiUCby9ydh1sOSdMkpMTBpaXBzsfhoc5l58Gm5yToAaZhaOUqjkDgCWNHAULCwOLaTmzswadEqggQwgHuQsHIoZCHQMMQgQGubVEcxOPFAcMDAYUA85eWARmfSRQCdcMe0zeP1AAygwLlJtPNAAL19DARdPzBOWSm1brJBi45soRAWQAAkrQIykShQ9wVhHCwCQCACH5BAkKAAAALAAAAAAgACAAAATrEMhJaVKp6s2nIkqFZF2VIBWhUsJaTokqUCoBq%2BE71SRQeyqUToLA7VxF0JDyIQh%2FMVVPMt1ECZlfcjZJ9mIKoaTl1MRIl5o4CUKXOwmyrCInCKqcWtvadL2SYhyASyNDJ0uIiRMDjI0Fd30%2FiI2UA5GSS5UDj2l6NoqgOgN4gksEBgYFf0FDqKgHnyZ9OX8HrgYHdHpcHQULXAS2qKpENRg7eAMLC7kTBaixUYFkKAzWAAnLC7FLVxLWDBLKCwaKTULgEwbLA4hJtOkSBNqITT3xEgfLpBtzE%2FjiuL04RGEBgwWhShRgQExHBAAh%2BQQJCgAAACwAAAAAIAAgAAAE7xDISWlSqerNpyJKhWRdlSAVoVLCWk6JKlAqAavhO9UkUHsqlE6CwO1cRdCQ8iEIfzFVTzLdRAmZX3I2SfZiCqGk5dTESJeaOAlClzsJsqwiJwiqnFrb2nS9kmIcgEsjQydLiIlHehhpejaIjzh9eomSjZR%2BipslWIRLAgMDOR2DOqKogTB9pCUJBagDBXR6XB0EBkIIsaRsGGMMAxoDBgYHTKJiUYEGDAzHC9EACcUGkIgFzgwZ0QsSBcXHiQvOwgDdEwfFs0sDzt4S6BK4xYjkDOzn0unFeBzOBijIm1Dgmg5YFQwsCMjp1oJ8LyIAACH5BAkKAAAALAAAAAAgACAAAATwEMhJaVKp6s2nIkqFZF2VIBWhUsJaTokqUCoBq%2BE71SRQeyqUToLA7VxF0JDyIQh%2FMVVPMt1ECZlfcjZJ9mIKoaTl1MRIl5o4CUKXOwmyrCInCKqcWtvadL2SYhyASyNDJ0uIiUd6GGl6NoiPOH16iZKNlH6KmyWFOggHhEEvAwwMA0N9GBsEC6amhnVcEwavDAazGwIDaH1ipaYLBUTCGgQDA8NdHz0FpqgTBwsLqAbWAAnIA4FWKdMLGdYGEgraigbT0OITBcg5QwPT4xLrROZL6AuQAPUS7bxLpoWidY0JtxLHKhwwMJBTHgPKdEQAACH5BAkKAAAALAAAAAAgACAAAATrEMhJaVKp6s2nIkqFZF2VIBWhUsJaTokqUCoBq%2BE71SRQeyqUToLA7VxF0JDyIQh%2FMVVPMt1ECZlfcjZJ9mIKoaTl1MRIl5o4CUKXOwmyrCInCKqcWtvadL2SYhyASyNDJ0uIiUd6GAULDJCRiXo1CpGXDJOUjY%2BYip9DhToJA4RBLwMLCwVDfRgbBAaqqoZ1XBMHswsHtxtFaH1iqaoGNgAIxRpbFAgfPQSqpbgGBqUD1wBXeCYp1AYZ19JJOYgH1KwA4UBvQwXUBxPqVD9L3sbp2BNk2xvvFPJd%2BMFCN6HAAIKgNggY0KtEBAAh%2BQQJCgAAACwAAAAAIAAgAAAE6BDISWlSqerNpyJKhWRdlSAVoVLCWk6JKlAqAavhO9UkUHsqlE6CwO1cRdCQ8iEIfzFVTzLdRAmZX3I2SfYIDMaAFdTESJeaEDAIMxYFqrOUaNW4E4ObYcCXaiBVEgULe0NJaxxtYksjh2NLkZISgDgJhHthkpU4mW6blRiYmZOlh4JWkDqILwUGBnE6TYEbCgevr0N1gH4At7gHiRpFaLNrrq8HNgAJA70AWxQIH1%2BvsYMDAzZQPC9VCNkDWUhGkuE5PxJNwiUK4UfLzOlD4WvzAHaoG9nxPi5d%2BjYUqfAhhykOFwJWiAAAIfkECQoAAAAsAAAAACAAIAAABPAQyElpUqnqzaciSoVkXVUMFaFSwlpOCcMYlErAavhOMnNLNo8KsZsMZItJEIDIFSkLGQoQTNhIsFehRww2CQLKF0tYGKYSg%2BygsZIuNqJksKgbfgIGepNo2cIUB3V1B3IvNiBYNQaDSTtfhhx0CwVPI0UJe0%2Bbm4g5VgcGoqOcnjmjqDSdnhgEoamcsZuXO1aWQy8KAwOAuTYYGwi7w5h%2BKr0SJ8MFihpNbx%2B4Erq7BYBuzsdiH1jCAzoSfl0rVirNbRXlBBlLX%2BBP0XJLAPGzTkAuAOqb0WT5AH7OcdCm5B8TgRwSRKIHQtaLCwg1RAAAOwAAAAAAAAAAAA%3D%3D);\n  visibility: visible;\n  opacity: 0.6;\n  -webkit-transition: all 0.3s ease;\n          transition: all 0.3s ease; }\n\n.reveal .overlay header {\n  position: absolute;\n  left: 0;\n  top: 0;\n  width: 100%;\n  height: 40px;\n  z-index: 2;\n  border-bottom: 1px solid #222; }\n\n.reveal .overlay header a {\n  display: inline-block;\n  width: 40px;\n  height: 40px;\n  padding: 0 10px;\n  float: right;\n  opacity: 0.6;\n  -moz-box-sizing: border-box;\n       box-sizing: border-box; }\n\n.reveal .overlay header a:hover {\n  opacity: 1; }\n\n.reveal .overlay header a .icon {\n  display: inline-block;\n  width: 20px;\n  height: 20px;\n  background-position: 50% 50%;\n  background-size: 100%;\n  background-repeat: no-repeat; }\n\n.reveal .overlay header a.close .icon {\n  background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAABkklEQVRYR8WX4VHDMAxG6wnoJrABZQPYBCaBTWAD2g1gE5gg6OOsXuxIlr40d81dfrSJ9V4c2VLK7spHuTJ/5wpM07QXuXc5X0opX2tEJcadjHuV80li/FgxTIEK/5QBCICBD6xEhSMGHgQPgBgLiYVAB1dpSqKDawxTohFw4JSEA3clzgIBPCURwE2JucBR7rhPJJv5OpJwDX+SfDjgx1wACQeJG1aChP9K/IMmdZ8DtESV1WyP3Bt4MwM6sj4NMxMYiqUWHQu4KYA/SYkIjOsm3BXYWMKFDwU2khjCQ4ELJUJ4SmClRArOCmSXGuKma0fYD5CbzHxFpCSGAhfAVSSUGDUk2BWZaff2g6GE15BsBQ9nwmpIGDiyHQddwNTMKkbZaf9fajXQca1EX44puJZUsnY0ObGmITE3GVLCbEhQUjGVt146j6oasWN+49Vph2w1pZ5EansNZqKBm1txbU57iRRcZ86RWMDdWtBJUHBHwoQPi1GV+JCbntmvok7iTX4/Up9mgyTc/FJYDTcndgH/AA5A/CHsyEkVAAAAAElFTkSuQmCC); }\n\n.reveal .overlay header a.external .icon {\n  background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAcElEQVRYR+2WSQoAIQwEzf8f7XiOMkUQxUPlGkM3hVmiQfQR9GYnH1SsAQlI4DiBqkCMoNb9y2e90IAEJPAcgdznU9+engMaeJ7Azh5Y1U67gAho4DqBqmB1buAf0MB1AlVBek83ZPkmJMGc1wAR+AAqod/B97TRpQAAAABJRU5ErkJggg==); }\n\n.reveal .overlay .viewport {\n  position: absolute;\n  top: 40px;\n  right: 0;\n  bottom: 0;\n  left: 0; }\n\n.reveal .overlay.overlay-preview .viewport iframe {\n  width: 100%;\n  height: 100%;\n  max-width: 100%;\n  max-height: 100%;\n  border: 0;\n  opacity: 0;\n  visibility: hidden;\n  -webkit-transition: all 0.3s ease;\n          transition: all 0.3s ease; }\n\n.reveal .overlay.overlay-preview.loaded .viewport iframe {\n  opacity: 1;\n  visibility: visible; }\n\n.reveal .overlay.overlay-preview.loaded .spinner {\n  opacity: 0;\n  visibility: hidden;\n  -webkit-transform: scale(0.2);\n      -ms-transform: scale(0.2);\n          transform: scale(0.2); }\n\n.reveal .overlay.overlay-help .viewport {\n  overflow: auto;\n  color: #fff; }\n\n.reveal .overlay.overlay-help .viewport .viewport-inner {\n  width: 600px;\n  margin: 0 auto;\n  padding: 60px;\n  text-align: center;\n  letter-spacing: normal; }\n\n.reveal .overlay.overlay-help .viewport .viewport-inner .title {\n  font-size: 20px; }\n\n.reveal .overlay.overlay-help .viewport .viewport-inner table {\n  border: 1px solid #fff;\n  border-collapse: collapse;\n  font-size: 14px; }\n\n.reveal .overlay.overlay-help .viewport .viewport-inner table th, .reveal .overlay.overlay-help .viewport .viewport-inner table td {\n  width: 200px;\n  padding: 10px;\n  border: 1px solid #fff;\n  vertical-align: middle; }\n\n.reveal .overlay.overlay-help .viewport .viewport-inner table th {\n  padding-top: 20px;\n  padding-bottom: 20px; }\n\n/*********************************************\n * PLAYBACK COMPONENT\n *********************************************/\n.reveal .playback {\n  position: fixed;\n  left: 15px;\n  bottom: 15px;\n  z-index: 30;\n  cursor: pointer;\n  -webkit-transition: all 400ms ease;\n          transition: all 400ms ease; }\n\n.reveal.overview .playback {\n  opacity: 0;\n  visibility: hidden; }\n\n/*********************************************\n * ROLLING LINKS\n *********************************************/\n.reveal .roll {\n  display: inline-block;\n  line-height: 1.2;\n  overflow: hidden;\n  vertical-align: top;\n  -webkit-perspective: 400px;\n          perspective: 400px;\n  -webkit-perspective-origin: 50% 50%;\n          perspective-origin: 50% 50%; }\n\n.reveal .roll:hover {\n  background: none;\n  text-shadow: none; }\n\n.reveal .roll span {\n  display: block;\n  position: relative;\n  padding: 0 2px;\n  pointer-events: none;\n  -webkit-transition: all 400ms ease;\n          transition: all 400ms ease;\n  -webkit-transform-origin: 50% 0%;\n      -ms-transform-origin: 50% 0%;\n          transform-origin: 50% 0%;\n  -webkit-transform-style: preserve-3d;\n          transform-style: preserve-3d;\n  -webkit-backface-visibility: hidden;\n          backface-visibility: hidden; }\n\n.reveal .roll:hover span {\n  background: rgba(0, 0, 0, 0.5);\n  -webkit-transform: translate3d(0px, 0px, -45px) rotateX(90deg);\n          transform: translate3d(0px, 0px, -45px) rotateX(90deg); }\n\n.reveal .roll span:after {\n  content: attr(data-title);\n  display: block;\n  position: absolute;\n  left: 0;\n  top: 0;\n  padding: 0 2px;\n  -webkit-backface-visibility: hidden;\n          backface-visibility: hidden;\n  -webkit-transform-origin: 50% 0%;\n      -ms-transform-origin: 50% 0%;\n          transform-origin: 50% 0%;\n  -webkit-transform: translate3d(0px, 110%, 0px) rotateX(-90deg);\n          transform: translate3d(0px, 110%, 0px) rotateX(-90deg); }\n\n/*********************************************\n * SPEAKER NOTES\n *********************************************/\n.reveal aside.notes {\n  display: none; }\n\n/*********************************************\n * ZOOM PLUGIN\n *********************************************/\n.zoomed .reveal *, .zoomed .reveal *:before, .zoomed .reveal *:after {\n  -webkit-backface-visibility: visible !important;\n          backface-visibility: visible !important; }\n\n.zoomed .reveal .progress, .zoomed .reveal .controls {\n  opacity: 0; }\n\n.zoomed .reveal .roll span {\n  background: none; }\n\n.zoomed .reveal .roll span:after {\n  visibility: hidden; }\n"
  },
  {
    "path": "presentation/css/reveal.scss",
    "content": "/*!\n * reveal.js\n * http://lab.hakim.se/reveal-js\n * MIT licensed\n *\n * Copyright (C) 2015 Hakim El Hattab, http://hakim.se\n */\n\n\n/*********************************************\n * RESET STYLES\n *********************************************/\n\nhtml, body, .reveal div, .reveal span, .reveal applet, .reveal object, .reveal iframe,\n.reveal h1, .reveal h2, .reveal h3, .reveal h4, .reveal h5, .reveal h6, .reveal p, .reveal blockquote, .reveal pre,\n.reveal a, .reveal abbr, .reveal acronym, .reveal address, .reveal big, .reveal cite, .reveal code,\n.reveal del, .reveal dfn, .reveal em, .reveal img, .reveal ins, .reveal kbd, .reveal q, .reveal s, .reveal samp,\n.reveal small, .reveal strike, .reveal strong, .reveal sub, .reveal sup, .reveal tt, .reveal var,\n.reveal b, .reveal u, .reveal center,\n.reveal dl, .reveal dt, .reveal dd, .reveal ol, .reveal ul, .reveal li,\n.reveal fieldset, .reveal form, .reveal label, .reveal legend,\n.reveal table, .reveal caption, .reveal tbody, .reveal tfoot, .reveal thead, .reveal tr, .reveal th, .reveal td,\n.reveal article, .reveal aside, .reveal canvas, .reveal details, .reveal embed,\n.reveal figure, .reveal figcaption, .reveal footer, .reveal header, .reveal hgroup,\n.reveal menu, .reveal nav, .reveal output, .reveal ruby, .reveal section, .reveal summary,\n.reveal time, .reveal mark, .reveal audio, video {\n\tmargin: 0;\n\tpadding: 0;\n\tborder: 0;\n\tfont-size: 100%;\n\tfont: inherit;\n\tvertical-align: baseline;\n}\n\n.reveal article, .reveal aside, .reveal details, .reveal figcaption, .reveal figure,\n.reveal footer, .reveal header, .reveal hgroup, .reveal menu, .reveal nav, .reveal section {\n\tdisplay: block;\n}\n\n\n/*********************************************\n * GLOBAL STYLES\n *********************************************/\n\nhtml,\nbody {\n\twidth: 100%;\n\theight: 100%;\n\toverflow: hidden;\n}\n\nbody {\n\tposition: relative;\n\tline-height: 1;\n\n\tbackground-color: #fff;\n\tcolor: #000;\n}\n\n::-moz-selection {\n\tbackground: #FF5E99;\n\tcolor: #fff;\n\ttext-shadow: none;\n}\n\n::selection {\n\tbackground: #FF5E99;\n\tcolor: #fff;\n\ttext-shadow: none;\n}\n\n\n/*********************************************\n * VIEW FRAGMENTS\n *********************************************/\n\n.reveal .slides section .fragment {\n\topacity: 0;\n\tvisibility: hidden;\n\ttransition: all .2s ease;\n\n\t&.visible {\n\t\topacity: 1;\n\t\tvisibility: visible;\n\t}\n}\n\n.reveal .slides section .fragment.grow {\n\topacity: 1;\n\tvisibility: visible;\n\n\t&.visible {\n\t\ttransform: scale( 1.3 );\n\t}\n}\n\n.reveal .slides section .fragment.shrink {\n\topacity: 1;\n\tvisibility: visible;\n\n\t&.visible {\n\t\ttransform: scale( 0.7 );\n\t}\n}\n\n.reveal .slides section .fragment.zoom-in {\n\ttransform: scale( 0.1 );\n\n\t&.visible {\n\t\ttransform: scale( 1 );\n\t}\n}\n\n.reveal .slides section .fragment.roll-in {\n\ttransform: rotateX( 90deg );\n\n\t&.visible {\n\t\ttransform: rotateX( 0 );\n\t}\n}\n\n.reveal .slides section .fragment.fade-out {\n\topacity: 1;\n\tvisibility: visible;\n\n\t&.visible {\n\t\topacity: 0;\n\t\tvisibility: hidden;\n\t}\n}\n\n.reveal .slides section .fragment.semi-fade-out {\n\topacity: 1;\n\tvisibility: visible;\n\n\t&.visible {\n\t\topacity: 0.5;\n\t\tvisibility: visible;\n\t}\n}\n\n.reveal .slides section .fragment.strike {\n\topacity: 1;\n\n\t&.visible {\n\t\ttext-decoration: line-through;\n\t}\n}\n\n.reveal .slides section .fragment.current-visible {\n\topacity: 0;\n\tvisibility: hidden;\n\n\t&.current-fragment {\n\t\topacity: 1;\n\t\tvisibility: visible;\n\t}\n}\n\n.reveal .slides section .fragment.highlight-red,\n.reveal .slides section .fragment.highlight-current-red,\n.reveal .slides section .fragment.highlight-green,\n.reveal .slides section .fragment.highlight-current-green,\n.reveal .slides section .fragment.highlight-blue,\n.reveal .slides section .fragment.highlight-current-blue {\n\topacity: 1;\n\tvisibility: visible;\n}\n\t.reveal .slides section .fragment.highlight-red.visible {\n\t\tcolor: #ff2c2d\n\t}\n\t.reveal .slides section .fragment.highlight-green.visible {\n\t\tcolor: #17ff2e;\n\t}\n\t.reveal .slides section .fragment.highlight-blue.visible {\n\t\tcolor: #1b91ff;\n\t}\n\n.reveal .slides section .fragment.highlight-current-red.current-fragment {\n\tcolor: #ff2c2d\n}\n.reveal .slides section .fragment.highlight-current-green.current-fragment {\n\tcolor: #17ff2e;\n}\n.reveal .slides section .fragment.highlight-current-blue.current-fragment {\n\tcolor: #1b91ff;\n}\n\n\n/*********************************************\n * DEFAULT ELEMENT STYLES\n *********************************************/\n\n/* Fixes issue in Chrome where italic fonts did not appear when printing to PDF */\n.reveal:after {\n  content: '';\n  font-style: italic;\n}\n\n.reveal iframe {\n\tz-index: 1;\n}\n\n/** Prevents layering issues in certain browser/transition combinations */\n.reveal a {\n\tposition: relative;\n}\n\n.reveal .stretch {\n\tmax-width: none;\n\tmax-height: none;\n}\n\n.reveal pre.stretch code {\n\theight: 100%;\n\tmax-height: 100%;\n\tbox-sizing: border-box;\n}\n\n\n/*********************************************\n * CONTROLS\n *********************************************/\n\n.reveal .controls {\n\tdisplay: none;\n\tposition: fixed;\n\twidth: 110px;\n\theight: 110px;\n\tz-index: 30;\n\tright: 10px;\n\tbottom: 10px;\n\n\t-webkit-user-select: none;\n}\n\n.reveal .controls div {\n\tposition: absolute;\n\topacity: 0.05;\n\twidth: 0;\n\theight: 0;\n\tborder: 12px solid transparent;\n\ttransform: scale(.9999);\n\ttransition: all 0.2s ease;\n\n\t-webkit-tap-highlight-color: rgba( 0, 0, 0, 0 );\n}\n\n.reveal .controls div.enabled {\n\topacity: 0.7;\n\tcursor: pointer;\n}\n\n.reveal .controls div.enabled:active {\n\tmargin-top: 1px;\n}\n\n\t.reveal .controls div.navigate-left {\n\t\ttop: 42px;\n\n\t\tborder-right-width: 22px;\n\t\tborder-right-color: #000;\n\t}\n\t\t.reveal .controls div.navigate-left.fragmented {\n\t\t\topacity: 0.3;\n\t\t}\n\n\t.reveal .controls div.navigate-right {\n\t\tleft: 74px;\n\t\ttop: 42px;\n\n\t\tborder-left-width: 22px;\n\t\tborder-left-color: #000;\n\t}\n\t\t.reveal .controls div.navigate-right.fragmented {\n\t\t\topacity: 0.3;\n\t\t}\n\n\t.reveal .controls div.navigate-up {\n\t\tleft: 42px;\n\n\t\tborder-bottom-width: 22px;\n\t\tborder-bottom-color: #000;\n\t}\n\t\t.reveal .controls div.navigate-up.fragmented {\n\t\t\topacity: 0.3;\n\t\t}\n\n\t.reveal .controls div.navigate-down {\n\t\tleft: 42px;\n\t\ttop: 74px;\n\n\t\tborder-top-width: 22px;\n\t\tborder-top-color: #000;\n\t}\n\t\t.reveal .controls div.navigate-down.fragmented {\n\t\t\topacity: 0.3;\n\t\t}\n\n\n/*********************************************\n * PROGRESS BAR\n *********************************************/\n\n.reveal .progress {\n\tposition: fixed;\n\tdisplay: none;\n\theight: 3px;\n\twidth: 100%;\n\tbottom: 0;\n\tleft: 0;\n\tz-index: 10;\n\n\tbackground-color: rgba( 0, 0, 0, 0.2 );\n}\n\t.reveal .progress:after {\n\t\tcontent: '';\n\t\tdisplay: block;\n\t\tposition: absolute;\n\t\theight: 20px;\n\t\twidth: 100%;\n\t\ttop: -20px;\n\t}\n\t.reveal .progress span {\n\t\tdisplay: block;\n\t\theight: 100%;\n\t\twidth: 0px;\n\n\t\tbackground-color: #000;\n\t\ttransition: width 800ms cubic-bezier(0.260, 0.860, 0.440, 0.985);\n\t}\n\n/*********************************************\n * SLIDE NUMBER\n *********************************************/\n\n.reveal .slide-number {\n\tposition: fixed;\n\tdisplay: block;\n\tright: 15px;\n\tbottom: 15px;\n\topacity: 0.5;\n\tz-index: 31;\n\tfont-size: 12px;\n}\n\n/*********************************************\n * SLIDES\n *********************************************/\n\n.reveal {\n\tposition: relative;\n\twidth: 100%;\n\theight: 100%;\n\ttouch-action: none;\n}\n\n.reveal .slides {\n\tposition: absolute;\n\twidth: 100%;\n\theight: 100%;\n\ttop: 0;\n\tright: 0;\n\tbottom: 0;\n\tleft: 0;\n\tmargin: auto;\n\n\toverflow: visible;\n\tz-index: 1;\n\ttext-align: center;\n\tperspective: 600px;\n\tperspective-origin: 50% 40%;\n}\n\n.reveal .slides>section {\n\t-ms-perspective: 600px;\n}\n\n.reveal .slides>section,\n.reveal .slides>section>section {\n\tdisplay: none;\n\tposition: absolute;\n\twidth: 100%;\n\tpadding: 20px 0px;\n\n\tz-index: 10;\n\ttransform-style: preserve-3d;\n\ttransition: transform-origin 800ms cubic-bezier(0.260, 0.860, 0.440, 0.985),\n\t\t\t\ttransform 800ms cubic-bezier(0.260, 0.860, 0.440, 0.985),\n\t\t\t\tvisibility 800ms cubic-bezier(0.260, 0.860, 0.440, 0.985),\n\t\t\t\topacity 800ms cubic-bezier(0.260, 0.860, 0.440, 0.985);\n}\n\n/* Global transition speed settings */\n.reveal[data-transition-speed=\"fast\"] .slides section {\n\ttransition-duration: 400ms;\n}\n.reveal[data-transition-speed=\"slow\"] .slides section {\n\ttransition-duration: 1200ms;\n}\n\n/* Slide-specific transition speed overrides */\n.reveal .slides section[data-transition-speed=\"fast\"] {\n\ttransition-duration: 400ms;\n}\n.reveal .slides section[data-transition-speed=\"slow\"] {\n\ttransition-duration: 1200ms;\n}\n\n.reveal .slides>section.stack {\n\tpadding-top: 0;\n\tpadding-bottom: 0;\n}\n\n.reveal .slides>section.present,\n.reveal .slides>section>section.present {\n\tdisplay: block;\n\tz-index: 11;\n\topacity: 1;\n}\n\n.reveal.center,\n.reveal.center .slides,\n.reveal.center .slides section {\n\tmin-height: 0 !important;\n}\n\n/* Don't allow interaction with invisible slides */\n.reveal .slides>section.future,\n.reveal .slides>section>section.future,\n.reveal .slides>section.past,\n.reveal .slides>section>section.past {\n\tpointer-events: none;\n}\n\n.reveal.overview .slides>section,\n.reveal.overview .slides>section>section {\n\tpointer-events: auto;\n}\n\n.reveal .slides>section.past,\n.reveal .slides>section.future,\n.reveal .slides>section>section.past,\n.reveal .slides>section>section.future {\n\topacity: 0;\n}\n\n\n/*********************************************\n * SLIDE TRANSITION\n * Aliased 'linear' for backwards compatibility\n *********************************************/\n\n.reveal.slide section,\n.reveal.linear section {\n\tbackface-visibility: hidden;\n}\n\n.reveal .slides>section[data-transition=slide].past,\n.reveal.slide .slides>section:not([data-transition]).past,\n.reveal .slides>section[data-transition=linear].past,\n.reveal.linear .slides>section:not([data-transition]).past {\n\ttransform: translate(-150%, 0);\n}\n.reveal .slides>section[data-transition=slide].future,\n.reveal.slide .slides>section:not([data-transition]).future,\n.reveal .slides>section[data-transition=linear].future,\n.reveal.linear .slides>section:not([data-transition]).future {\n\ttransform: translate(150%, 0);\n}\n\n.reveal .slides>section>section[data-transition=slide].past,\n.reveal.slide .slides>section>section:not([data-transition]).past,\n.reveal .slides>section>section[data-transition=linear].past,\n.reveal.linear .slides>section>section:not([data-transition]).past {\n\ttransform: translate(0, -150%);\n}\n.reveal .slides>section>section[data-transition=slide].future,\n.reveal.slide .slides>section>section:not([data-transition]).future,\n.reveal .slides>section>section[data-transition=linear].future,\n.reveal.linear .slides>section>section:not([data-transition]).future {\n\ttransform: translate(0, 150%);\n}\n\n\n/*********************************************\n * CONVEX TRANSITION\n * Aliased 'default' for backwards compatibility\n *********************************************/\n\n.reveal .slides>section[data-transition=default].past,\n.reveal.default .slides>section:not([data-transition]).past,\n.reveal .slides>section[data-transition=convex].past,\n.reveal.convex .slides>section:not([data-transition]).past {\n\ttransform: translate3d(-100%, 0, 0) rotateY(-90deg) translate3d(-100%, 0, 0);\n}\n.reveal .slides>section[data-transition=default].future,\n.reveal.default .slides>section:not([data-transition]).future,\n.reveal .slides>section[data-transition=convex].future,\n.reveal.convex .slides>section:not([data-transition]).future {\n\ttransform: translate3d(100%, 0, 0) rotateY(90deg) translate3d(100%, 0, 0);\n}\n\n.reveal .slides>section>section[data-transition=default].past,\n.reveal.default .slides>section>section:not([data-transition]).past,\n.reveal .slides>section>section[data-transition=convex].past,\n.reveal.convex .slides>section>section:not([data-transition]).past {\n\ttransform: translate3d(0, -300px, 0) rotateX(70deg) translate3d(0, -300px, 0);\n}\n.reveal .slides>section>section[data-transition=default].future,\n.reveal.default .slides>section>section:not([data-transition]).future,\n.reveal .slides>section>section[data-transition=convex].future,\n.reveal.convex .slides>section>section:not([data-transition]).future {\n\ttransform: translate3d(0, 300px, 0) rotateX(-70deg) translate3d(0, 300px, 0);\n}\n\n\n/*********************************************\n * CONCAVE TRANSITION\n *********************************************/\n\n.reveal .slides>section[data-transition=concave].past,\n.reveal.concave .slides>section:not([data-transition]).past {\n\ttransform: translate3d(-100%, 0, 0) rotateY(90deg) translate3d(-100%, 0, 0);\n}\n.reveal .slides>section[data-transition=concave].future,\n.reveal.concave .slides>section:not([data-transition]).future {\n\ttransform: translate3d(100%, 0, 0) rotateY(-90deg) translate3d(100%, 0, 0);\n}\n\n.reveal .slides>section>section[data-transition=concave].past,\n.reveal.concave .slides>section>section:not([data-transition]).past {\n\ttransform: translate3d(0, -80%, 0) rotateX(-70deg) translate3d(0, -80%, 0);\n}\n.reveal .slides>section>section[data-transition=concave].future,\n.reveal.concave .slides>section>section:not([data-transition]).future {\n\ttransform: translate3d(0, 80%, 0) rotateX(70deg) translate3d(0, 80%, 0);\n}\n\n\n/*********************************************\n * ZOOM TRANSITION\n *********************************************/\n\n.reveal .slides>section[data-transition=zoom],\n.reveal.zoom .slides>section:not([data-transition]) {\n\ttransition-timing-function: ease;\n}\n\n.reveal .slides>section[data-transition=zoom].past,\n.reveal.zoom .slides>section:not([data-transition]).past {\n\tvisibility: hidden;\n\ttransform: scale(16);\n}\n.reveal .slides>section[data-transition=zoom].future,\n.reveal.zoom .slides>section:not([data-transition]).future {\n\tvisibility: hidden;\n\ttransform: scale(0.2);\n}\n\n.reveal .slides>section>section[data-transition=zoom].past,\n.reveal.zoom .slides>section>section:not([data-transition]).past {\n\ttransform: translate(0, -150%);\n}\n.reveal .slides>section>section[data-transition=zoom].future,\n.reveal.zoom .slides>section>section:not([data-transition]).future {\n\ttransform: translate(0, 150%);\n}\n\n\n/*********************************************\n * CUBE TRANSITION\n *********************************************/\n\n.reveal.cube .slides {\n\tperspective: 1300px;\n}\n\n.reveal.cube .slides section {\n\tpadding: 30px;\n\tmin-height: 700px;\n\tbackface-visibility: hidden;\n\tbox-sizing: border-box;\n}\n\t.reveal.center.cube .slides section {\n\t\tmin-height: 0;\n\t}\n\t.reveal.cube .slides section:not(.stack):before {\n\t\tcontent: '';\n\t\tposition: absolute;\n\t\tdisplay: block;\n\t\twidth: 100%;\n\t\theight: 100%;\n\t\tleft: 0;\n\t\ttop: 0;\n\t\tbackground: rgba(0,0,0,0.1);\n\t\tborder-radius: 4px;\n\t\ttransform: translateZ( -20px );\n\t}\n\t.reveal.cube .slides section:not(.stack):after {\n\t\tcontent: '';\n\t\tposition: absolute;\n\t\tdisplay: block;\n\t\twidth: 90%;\n\t\theight: 30px;\n\t\tleft: 5%;\n\t\tbottom: 0;\n\t\tbackground: none;\n\t\tz-index: 1;\n\n\t\tborder-radius: 4px;\n\t\tbox-shadow: 0px 95px 25px rgba(0,0,0,0.2);\n\t\ttransform: translateZ(-90px) rotateX( 65deg );\n\t}\n\n.reveal.cube .slides>section.stack {\n\tpadding: 0;\n\tbackground: none;\n}\n\n.reveal.cube .slides>section.past {\n\ttransform-origin: 100% 0%;\n\ttransform: translate3d(-100%, 0, 0) rotateY(-90deg);\n}\n\n.reveal.cube .slides>section.future {\n\ttransform-origin: 0% 0%;\n\ttransform: translate3d(100%, 0, 0) rotateY(90deg);\n}\n\n.reveal.cube .slides>section>section.past {\n\ttransform-origin: 0% 100%;\n\ttransform: translate3d(0, -100%, 0) rotateX(90deg);\n}\n\n.reveal.cube .slides>section>section.future {\n\ttransform-origin: 0% 0%;\n\ttransform: translate3d(0, 100%, 0) rotateX(-90deg);\n}\n\n\n/*********************************************\n * PAGE TRANSITION\n *********************************************/\n\n.reveal.page .slides {\n\tperspective-origin: 0% 50%;\n\tperspective: 3000px;\n}\n\n.reveal.page .slides section {\n\tpadding: 30px;\n\tmin-height: 700px;\n\tbox-sizing: border-box;\n}\n\t.reveal.page .slides section.past {\n\t\tz-index: 12;\n\t}\n\t.reveal.page .slides section:not(.stack):before {\n\t\tcontent: '';\n\t\tposition: absolute;\n\t\tdisplay: block;\n\t\twidth: 100%;\n\t\theight: 100%;\n\t\tleft: 0;\n\t\ttop: 0;\n\t\tbackground: rgba(0,0,0,0.1);\n\t\ttransform: translateZ( -20px );\n\t}\n\t.reveal.page .slides section:not(.stack):after {\n\t\tcontent: '';\n\t\tposition: absolute;\n\t\tdisplay: block;\n\t\twidth: 90%;\n\t\theight: 30px;\n\t\tleft: 5%;\n\t\tbottom: 0;\n\t\tbackground: none;\n\t\tz-index: 1;\n\n\t\tborder-radius: 4px;\n\t\tbox-shadow: 0px 95px 25px rgba(0,0,0,0.2);\n\n\t\t-webkit-transform: translateZ(-90px) rotateX( 65deg );\n\t}\n\n.reveal.page .slides>section.stack {\n\tpadding: 0;\n\tbackground: none;\n}\n\n.reveal.page .slides>section.past {\n\ttransform-origin: 0% 0%;\n\ttransform: translate3d(-40%, 0, 0) rotateY(-80deg);\n}\n\n.reveal.page .slides>section.future {\n\ttransform-origin: 100% 0%;\n\ttransform: translate3d(0, 0, 0);\n}\n\n.reveal.page .slides>section>section.past {\n\ttransform-origin: 0% 0%;\n\ttransform: translate3d(0, -40%, 0) rotateX(80deg);\n}\n\n.reveal.page .slides>section>section.future {\n\ttransform-origin: 0% 100%;\n\ttransform: translate3d(0, 0, 0);\n}\n\n\n/*********************************************\n * FADE TRANSITION\n *********************************************/\n\n.reveal .slides section[data-transition=fade],\n.reveal.fade .slides section:not([data-transition]),\n.reveal.fade .slides>section>section:not([data-transition]) {\n\ttransform: none;\n\ttransition: opacity 0.5s;\n}\n\n\n.reveal.fade.overview .slides section,\n.reveal.fade.overview .slides>section>section {\n\ttransition: none;\n}\n\n\n/*********************************************\n * NO TRANSITION\n *********************************************/\n\n.reveal .slides section[data-transition=none],\n.reveal.none .slides section:not([data-transition]) {\n\ttransform: none;\n\ttransition: none;\n}\n\n\n/*********************************************\n * OVERVIEW\n *********************************************/\n\n.reveal.overview .slides {\n\tperspective-origin: 50% 50%;\n\tperspective: 700px;\n}\n\n.reveal.overview .slides section {\n\theight: 700px;\n\toverflow: hidden;\n\topacity: 1 !important;\n\tvisibility: visible !important;\n\tcursor: pointer;\n\tbackground: rgba(0,0,0,0.1);\n\tbox-sizing: border-box;\n}\n.reveal.overview .slides section,\n.reveal.overview-deactivating .slides section {\n\ttransition: none !important;\n}\n.reveal.overview .slides section .fragment {\n\topacity: 1;\n}\n.reveal.overview .slides section:after,\n.reveal.overview .slides section:before {\n\tdisplay: none !important;\n}\n.reveal.overview .slides section>section {\n\topacity: 1;\n\tcursor: pointer;\n}\n\t.reveal.overview .slides section:hover {\n\t\tbackground: rgba(0,0,0,0.3);\n\t}\n\t.reveal.overview .slides section.present {\n\t\tbackground: rgba(0,0,0,0.3);\n\t}\n.reveal.overview .slides>section.stack {\n\tpadding: 0;\n\ttop: 0 !important;\n\tbackground: none;\n\toverflow: visible;\n}\n\n\n/*********************************************\n * PAUSED MODE\n *********************************************/\n\n.reveal .pause-overlay {\n\tposition: absolute;\n\ttop: 0;\n\tleft: 0;\n\twidth: 100%;\n\theight: 100%;\n\tbackground: black;\n\tvisibility: hidden;\n\topacity: 0;\n\tz-index: 100;\n\ttransition: all 1s ease;\n}\n.reveal.paused .pause-overlay {\n\tvisibility: visible;\n\topacity: 1;\n}\n\n\n/*********************************************\n * FALLBACK\n *********************************************/\n\n.no-transforms {\n\toverflow-y: auto;\n}\n\n.no-transforms .reveal .slides {\n\tposition: relative;\n\twidth: 80%;\n\theight: auto !important;\n\ttop: 0;\n\tleft: 50%;\n\tmargin: 0;\n\ttext-align: center;\n}\n\n.no-transforms .reveal .controls,\n.no-transforms .reveal .progress {\n\tdisplay: none !important;\n}\n\n.no-transforms .reveal .slides section {\n\tdisplay: block !important;\n\topacity: 1 !important;\n\tposition: relative !important;\n\theight: auto;\n\tmin-height: 0;\n\ttop: 0;\n\tleft: -50%;\n\tmargin: 70px 0;\n\ttransform: none;\n}\n\n.no-transforms .reveal .slides section section {\n\tleft: 0;\n}\n\n.reveal .no-transition,\n.reveal .no-transition * {\n\ttransition: none !important;\n}\n\n\n/*********************************************\n * PER-SLIDE BACKGROUNDS\n *********************************************/\n\n.reveal>.backgrounds {\n\tposition: absolute;\n\twidth: 100%;\n\theight: 100%;\n\ttop: 0;\n\tleft: 0;\n\tperspective: 600px;\n}\n\t.reveal .slide-background {\n\t\tdisplay: none;\n\t\tposition: absolute;\n\t\twidth: 100%;\n\t\theight: 100%;\n\t\topacity: 0;\n\t\tvisibility: hidden;\n\n\t\tbackground-color: rgba( 0, 0, 0, 0 );\n\t\tbackground-position: 50% 50%;\n\t\tbackground-repeat: no-repeat;\n\t\tbackground-size: cover;\n\n\t\ttransition: all 800ms cubic-bezier(0.260, 0.860, 0.440, 0.985);\n\t}\n\n\t.reveal .slide-background.stack {\n\t\tdisplay: block;\n\t}\n\n\t.reveal .slide-background.present {\n\t\topacity: 1;\n\t\tvisibility: visible;\n\t}\n\n\t.print-pdf .reveal .slide-background {\n\t\topacity: 1 !important;\n\t\tvisibility: visible !important;\n\t}\n\n/* Video backgrounds */\n.reveal .slide-background video {\n\tposition: absolute;\n\twidth: 100%;\n\theight: 100%;\n\tmax-width: none;\n\tmax-height: none;\n\ttop: 0;\n\tleft: 0;\n}\n\n/* Immediate transition style */\n.reveal[data-background-transition=none]>.backgrounds .slide-background,\n.reveal>.backgrounds .slide-background[data-background-transition=none] {\n\ttransition: none;\n}\n\n/* Slide */\n.reveal[data-background-transition=slide]>.backgrounds .slide-background,\n.reveal>.backgrounds .slide-background[data-background-transition=slide] {\n\topacity: 1;\n\tbackface-visibility: hidden;\n}\n\t.reveal[data-background-transition=slide]>.backgrounds .slide-background.past,\n\t.reveal>.backgrounds .slide-background.past[data-background-transition=slide] {\n\t\ttransform: translate(-100%, 0);\n\t}\n\t.reveal[data-background-transition=slide]>.backgrounds .slide-background.future,\n\t.reveal>.backgrounds .slide-background.future[data-background-transition=slide] {\n\t\ttransform: translate(100%, 0);\n\t}\n\n\t.reveal[data-background-transition=slide]>.backgrounds .slide-background>.slide-background.past,\n\t.reveal>.backgrounds .slide-background>.slide-background.past[data-background-transition=slide] {\n\t\ttransform: translate(0, -100%);\n\t}\n\t.reveal[data-background-transition=slide]>.backgrounds .slide-background>.slide-background.future,\n\t.reveal>.backgrounds .slide-background>.slide-background.future[data-background-transition=slide] {\n\t\ttransform: translate(0, 100%);\n\t}\n\n\n/* Convex */\n.reveal[data-background-transition=convex]>.backgrounds .slide-background.past,\n.reveal>.backgrounds .slide-background.past[data-background-transition=convex] {\n\topacity: 0;\n\ttransform: translate3d(-100%, 0, 0) rotateY(-90deg) translate3d(-100%, 0, 0);\n}\n.reveal[data-background-transition=convex]>.backgrounds .slide-background.future,\n.reveal>.backgrounds .slide-background.future[data-background-transition=convex] {\n\topacity: 0;\n\ttransform: translate3d(100%, 0, 0) rotateY(90deg) translate3d(100%, 0, 0);\n}\n\n.reveal[data-background-transition=convex]>.backgrounds .slide-background>.slide-background.past,\n.reveal>.backgrounds .slide-background>.slide-background.past[data-background-transition=convex] {\n\topacity: 0;\n\ttransform: translate3d(0, -100%, 0) rotateX(90deg) translate3d(0, -100%, 0);\n}\n.reveal[data-background-transition=convex]>.backgrounds .slide-background>.slide-background.future,\n.reveal>.backgrounds .slide-background>.slide-background.future[data-background-transition=convex] {\n\topacity: 0;\n\ttransform: translate3d(0, 100%, 0) rotateX(-90deg) translate3d(0, 100%, 0);\n}\n\n\n/* Concave */\n.reveal[data-background-transition=concave]>.backgrounds .slide-background.past,\n.reveal>.backgrounds .slide-background.past[data-background-transition=concave] {\n\topacity: 0;\n\ttransform: translate3d(-100%, 0, 0) rotateY(90deg) translate3d(-100%, 0, 0);\n}\n.reveal[data-background-transition=concave]>.backgrounds .slide-background.future,\n.reveal>.backgrounds .slide-background.future[data-background-transition=concave] {\n\topacity: 0;\n\ttransform: translate3d(100%, 0, 0) rotateY(-90deg) translate3d(100%, 0, 0);\n}\n\n.reveal[data-background-transition=concave]>.backgrounds .slide-background>.slide-background.past,\n.reveal>.backgrounds .slide-background>.slide-background.past[data-background-transition=concave] {\n\topacity: 0;\n\ttransform: translate3d(0, -100%, 0) rotateX(-90deg) translate3d(0, -100%, 0);\n}\n.reveal[data-background-transition=concave]>.backgrounds .slide-background>.slide-background.future,\n.reveal>.backgrounds .slide-background>.slide-background.future[data-background-transition=concave] {\n\topacity: 0;\n\ttransform: translate3d(0, 100%, 0) rotateX(90deg) translate3d(0, 100%, 0);\n}\n\n/* Zoom */\n.reveal[data-background-transition=zoom]>.backgrounds .slide-background,\n.reveal>.backgrounds .slide-background[data-background-transition=zoom] {\n\ttransition-timing-function: ease;\n}\n\n.reveal[data-background-transition=zoom]>.backgrounds .slide-background.past,\n.reveal>.backgrounds .slide-background.past[data-background-transition=zoom] {\n\topacity: 0;\n\tvisibility: hidden;\n\ttransform: scale(16);\n}\n.reveal[data-background-transition=zoom]>.backgrounds .slide-background.future,\n.reveal>.backgrounds .slide-background.future[data-background-transition=zoom] {\n\topacity: 0;\n\tvisibility: hidden;\n\ttransform: scale(0.2);\n}\n\n.reveal[data-background-transition=zoom]>.backgrounds .slide-background>.slide-background.past,\n.reveal>.backgrounds .slide-background>.slide-background.past[data-background-transition=zoom] {\n\topacity: 0;\n\t\tvisibility: hidden;\n\t\ttransform: scale(16);\n}\n.reveal[data-background-transition=zoom]>.backgrounds .slide-background>.slide-background.future,\n.reveal>.backgrounds .slide-background>.slide-background.future[data-background-transition=zoom] {\n\topacity: 0;\n\tvisibility: hidden;\n\ttransform: scale(0.2);\n}\n\n\n/* Global transition speed settings */\n.reveal[data-transition-speed=\"fast\"]>.backgrounds .slide-background {\n\ttransition-duration: 400ms;\n}\n.reveal[data-transition-speed=\"slow\"]>.backgrounds .slide-background {\n\ttransition-duration: 1200ms;\n}\n\n\n/*********************************************\n * RTL SUPPORT\n *********************************************/\n\n.reveal.rtl .slides,\n.reveal.rtl .slides h1,\n.reveal.rtl .slides h2,\n.reveal.rtl .slides h3,\n.reveal.rtl .slides h4,\n.reveal.rtl .slides h5,\n.reveal.rtl .slides h6 {\n\tdirection: rtl;\n\tfont-family: sans-serif;\n}\n\n.reveal.rtl pre,\n.reveal.rtl code {\n\tdirection: ltr;\n}\n\n.reveal.rtl ol,\n.reveal.rtl ul {\n\ttext-align: right;\n}\n\n.reveal.rtl .progress span {\n\tfloat: right\n}\n\n/*********************************************\n * PARALLAX BACKGROUND\n *********************************************/\n\n.reveal.has-parallax-background .backgrounds {\n\ttransition: all 0.8s ease;\n}\n\n/* Global transition speed settings */\n.reveal.has-parallax-background[data-transition-speed=\"fast\"] .backgrounds {\n\ttransition-duration: 400ms;\n}\n.reveal.has-parallax-background[data-transition-speed=\"slow\"] .backgrounds {\n\ttransition-duration: 1200ms;\n}\n\n\n/*********************************************\n * LINK PREVIEW OVERLAY\n *********************************************/\n\n.reveal .overlay {\n\tposition: absolute;\n\ttop: 0;\n\tleft: 0;\n\twidth: 100%;\n\theight: 100%;\n\tz-index: 1000;\n\tbackground: rgba( 0, 0, 0, 0.9 );\n\topacity: 0;\n\tvisibility: hidden;\n\ttransition: all 0.3s ease;\n}\n\t.reveal .overlay.visible {\n\t\topacity: 1;\n\t\tvisibility: visible;\n\t}\n\n\t.reveal .overlay .spinner {\n\t\tposition: absolute;\n\t\tdisplay: block;\n\t\ttop: 50%;\n\t\tleft: 50%;\n\t\twidth: 32px;\n\t\theight: 32px;\n\t\tmargin: -16px 0 0 -16px;\n\t\tz-index: 10;\n\t\tbackground-image: url(data:image/gif;base64,R0lGODlhIAAgAPMAAJmZmf%2F%2F%2F6%2Bvr8nJybW1tcDAwOjo6Nvb26ioqKOjo7Ozs%2FLy8vz8%2FAAAAAAAAAAAACH%2FC05FVFNDQVBFMi4wAwEAAAAh%2FhpDcmVhdGVkIHdpdGggYWpheGxvYWQuaW5mbwAh%2BQQJCgAAACwAAAAAIAAgAAAE5xDISWlhperN52JLhSSdRgwVo1ICQZRUsiwHpTJT4iowNS8vyW2icCF6k8HMMBkCEDskxTBDAZwuAkkqIfxIQyhBQBFvAQSDITM5VDW6XNE4KagNh6Bgwe60smQUB3d4Rz1ZBApnFASDd0hihh12BkE9kjAJVlycXIg7CQIFA6SlnJ87paqbSKiKoqusnbMdmDC2tXQlkUhziYtyWTxIfy6BE8WJt5YJvpJivxNaGmLHT0VnOgSYf0dZXS7APdpB309RnHOG5gDqXGLDaC457D1zZ%2FV%2FnmOM82XiHRLYKhKP1oZmADdEAAAh%2BQQJCgAAACwAAAAAIAAgAAAE6hDISWlZpOrNp1lGNRSdRpDUolIGw5RUYhhHukqFu8DsrEyqnWThGvAmhVlteBvojpTDDBUEIFwMFBRAmBkSgOrBFZogCASwBDEY%2FCZSg7GSE0gSCjQBMVG023xWBhklAnoEdhQEfyNqMIcKjhRsjEdnezB%2BA4k8gTwJhFuiW4dokXiloUepBAp5qaKpp6%2BHo7aWW54wl7obvEe0kRuoplCGepwSx2jJvqHEmGt6whJpGpfJCHmOoNHKaHx61WiSR92E4lbFoq%2BB6QDtuetcaBPnW6%2BO7wDHpIiK9SaVK5GgV543tzjgGcghAgAh%2BQQJCgAAACwAAAAAIAAgAAAE7hDISSkxpOrN5zFHNWRdhSiVoVLHspRUMoyUakyEe8PTPCATW9A14E0UvuAKMNAZKYUZCiBMuBakSQKG8G2FzUWox2AUtAQFcBKlVQoLgQReZhQlCIJesQXI5B0CBnUMOxMCenoCfTCEWBsJColTMANldx15BGs8B5wlCZ9Po6OJkwmRpnqkqnuSrayqfKmqpLajoiW5HJq7FL1Gr2mMMcKUMIiJgIemy7xZtJsTmsM4xHiKv5KMCXqfyUCJEonXPN2rAOIAmsfB3uPoAK%2B%2BG%2Bw48edZPK%2BM6hLJpQg484enXIdQFSS1u6UhksENEQAAIfkECQoAAAAsAAAAACAAIAAABOcQyEmpGKLqzWcZRVUQnZYg1aBSh2GUVEIQ2aQOE%2BG%2BcD4ntpWkZQj1JIiZIogDFFyHI0UxQwFugMSOFIPJftfVAEoZLBbcLEFhlQiqGp1Vd140AUklUN3eCA51C1EWMzMCezCBBmkxVIVHBWd3HHl9JQOIJSdSnJ0TDKChCwUJjoWMPaGqDKannasMo6WnM562R5YluZRwur0wpgqZE7NKUm%2BFNRPIhjBJxKZteWuIBMN4zRMIVIhffcgojwCF117i4nlLnY5ztRLsnOk%2BaV%2BoJY7V7m76PdkS4trKcdg0Zc0tTcKkRAAAIfkECQoAAAAsAAAAACAAIAAABO4QyEkpKqjqzScpRaVkXZWQEximw1BSCUEIlDohrft6cpKCk5xid5MNJTaAIkekKGQkWyKHkvhKsR7ARmitkAYDYRIbUQRQjWBwJRzChi9CRlBcY1UN4g0%2FVNB0AlcvcAYHRyZPdEQFYV8ccwR5HWxEJ02YmRMLnJ1xCYp0Y5idpQuhopmmC2KgojKasUQDk5BNAwwMOh2RtRq5uQuPZKGIJQIGwAwGf6I0JXMpC8C7kXWDBINFMxS4DKMAWVWAGYsAdNqW5uaRxkSKJOZKaU3tPOBZ4DuK2LATgJhkPJMgTwKCdFjyPHEnKxFCDhEAACH5BAkKAAAALAAAAAAgACAAAATzEMhJaVKp6s2nIkolIJ2WkBShpkVRWqqQrhLSEu9MZJKK9y1ZrqYK9WiClmvoUaF8gIQSNeF1Er4MNFn4SRSDARWroAIETg1iVwuHjYB1kYc1mwruwXKC9gmsJXliGxc%2BXiUCby9ydh1sOSdMkpMTBpaXBzsfhoc5l58Gm5yToAaZhaOUqjkDgCWNHAULCwOLaTmzswadEqggQwgHuQsHIoZCHQMMQgQGubVEcxOPFAcMDAYUA85eWARmfSRQCdcMe0zeP1AAygwLlJtPNAAL19DARdPzBOWSm1brJBi45soRAWQAAkrQIykShQ9wVhHCwCQCACH5BAkKAAAALAAAAAAgACAAAATrEMhJaVKp6s2nIkqFZF2VIBWhUsJaTokqUCoBq%2BE71SRQeyqUToLA7VxF0JDyIQh%2FMVVPMt1ECZlfcjZJ9mIKoaTl1MRIl5o4CUKXOwmyrCInCKqcWtvadL2SYhyASyNDJ0uIiRMDjI0Fd30%2FiI2UA5GSS5UDj2l6NoqgOgN4gksEBgYFf0FDqKgHnyZ9OX8HrgYHdHpcHQULXAS2qKpENRg7eAMLC7kTBaixUYFkKAzWAAnLC7FLVxLWDBLKCwaKTULgEwbLA4hJtOkSBNqITT3xEgfLpBtzE%2FjiuL04RGEBgwWhShRgQExHBAAh%2BQQJCgAAACwAAAAAIAAgAAAE7xDISWlSqerNpyJKhWRdlSAVoVLCWk6JKlAqAavhO9UkUHsqlE6CwO1cRdCQ8iEIfzFVTzLdRAmZX3I2SfZiCqGk5dTESJeaOAlClzsJsqwiJwiqnFrb2nS9kmIcgEsjQydLiIlHehhpejaIjzh9eomSjZR%2BipslWIRLAgMDOR2DOqKogTB9pCUJBagDBXR6XB0EBkIIsaRsGGMMAxoDBgYHTKJiUYEGDAzHC9EACcUGkIgFzgwZ0QsSBcXHiQvOwgDdEwfFs0sDzt4S6BK4xYjkDOzn0unFeBzOBijIm1Dgmg5YFQwsCMjp1oJ8LyIAACH5BAkKAAAALAAAAAAgACAAAATwEMhJaVKp6s2nIkqFZF2VIBWhUsJaTokqUCoBq%2BE71SRQeyqUToLA7VxF0JDyIQh%2FMVVPMt1ECZlfcjZJ9mIKoaTl1MRIl5o4CUKXOwmyrCInCKqcWtvadL2SYhyASyNDJ0uIiUd6GGl6NoiPOH16iZKNlH6KmyWFOggHhEEvAwwMA0N9GBsEC6amhnVcEwavDAazGwIDaH1ipaYLBUTCGgQDA8NdHz0FpqgTBwsLqAbWAAnIA4FWKdMLGdYGEgraigbT0OITBcg5QwPT4xLrROZL6AuQAPUS7bxLpoWidY0JtxLHKhwwMJBTHgPKdEQAACH5BAkKAAAALAAAAAAgACAAAATrEMhJaVKp6s2nIkqFZF2VIBWhUsJaTokqUCoBq%2BE71SRQeyqUToLA7VxF0JDyIQh%2FMVVPMt1ECZlfcjZJ9mIKoaTl1MRIl5o4CUKXOwmyrCInCKqcWtvadL2SYhyASyNDJ0uIiUd6GAULDJCRiXo1CpGXDJOUjY%2BYip9DhToJA4RBLwMLCwVDfRgbBAaqqoZ1XBMHswsHtxtFaH1iqaoGNgAIxRpbFAgfPQSqpbgGBqUD1wBXeCYp1AYZ19JJOYgH1KwA4UBvQwXUBxPqVD9L3sbp2BNk2xvvFPJd%2BMFCN6HAAIKgNggY0KtEBAAh%2BQQJCgAAACwAAAAAIAAgAAAE6BDISWlSqerNpyJKhWRdlSAVoVLCWk6JKlAqAavhO9UkUHsqlE6CwO1cRdCQ8iEIfzFVTzLdRAmZX3I2SfYIDMaAFdTESJeaEDAIMxYFqrOUaNW4E4ObYcCXaiBVEgULe0NJaxxtYksjh2NLkZISgDgJhHthkpU4mW6blRiYmZOlh4JWkDqILwUGBnE6TYEbCgevr0N1gH4At7gHiRpFaLNrrq8HNgAJA70AWxQIH1%2BvsYMDAzZQPC9VCNkDWUhGkuE5PxJNwiUK4UfLzOlD4WvzAHaoG9nxPi5d%2BjYUqfAhhykOFwJWiAAAIfkECQoAAAAsAAAAACAAIAAABPAQyElpUqnqzaciSoVkXVUMFaFSwlpOCcMYlErAavhOMnNLNo8KsZsMZItJEIDIFSkLGQoQTNhIsFehRww2CQLKF0tYGKYSg%2BygsZIuNqJksKgbfgIGepNo2cIUB3V1B3IvNiBYNQaDSTtfhhx0CwVPI0UJe0%2Bbm4g5VgcGoqOcnjmjqDSdnhgEoamcsZuXO1aWQy8KAwOAuTYYGwi7w5h%2BKr0SJ8MFihpNbx%2B4Erq7BYBuzsdiH1jCAzoSfl0rVirNbRXlBBlLX%2BBP0XJLAPGzTkAuAOqb0WT5AH7OcdCm5B8TgRwSRKIHQtaLCwg1RAAAOwAAAAAAAAAAAA%3D%3D);\n\n\t\tvisibility: visible;\n\t\topacity: 0.6;\n\t\ttransition: all 0.3s ease;\n\t}\n\n\t.reveal .overlay header {\n\t\tposition: absolute;\n\t\tleft: 0;\n\t\ttop: 0;\n\t\twidth: 100%;\n\t\theight: 40px;\n\t\tz-index: 2;\n\t\tborder-bottom: 1px solid #222;\n\t}\n\t\t.reveal .overlay header a {\n\t\t\tdisplay: inline-block;\n\t\t\twidth: 40px;\n\t\t\theight: 40px;\n\t\t\tpadding: 0 10px;\n\t\t\tfloat: right;\n\t\t\topacity: 0.6;\n\n\t\t\tbox-sizing: border-box;\n\t\t}\n\t\t\t.reveal .overlay header a:hover {\n\t\t\t\topacity: 1;\n\t\t\t}\n\t\t\t.reveal .overlay header a .icon {\n\t\t\t\tdisplay: inline-block;\n\t\t\t\twidth: 20px;\n\t\t\t\theight: 20px;\n\n\t\t\t\tbackground-position: 50% 50%;\n\t\t\t\tbackground-size: 100%;\n\t\t\t\tbackground-repeat: no-repeat;\n\t\t\t}\n\t\t\t.reveal .overlay header a.close .icon {\n\t\t\t\tbackground-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAABkklEQVRYR8WX4VHDMAxG6wnoJrABZQPYBCaBTWAD2g1gE5gg6OOsXuxIlr40d81dfrSJ9V4c2VLK7spHuTJ/5wpM07QXuXc5X0opX2tEJcadjHuV80li/FgxTIEK/5QBCICBD6xEhSMGHgQPgBgLiYVAB1dpSqKDawxTohFw4JSEA3clzgIBPCURwE2JucBR7rhPJJv5OpJwDX+SfDjgx1wACQeJG1aChP9K/IMmdZ8DtESV1WyP3Bt4MwM6sj4NMxMYiqUWHQu4KYA/SYkIjOsm3BXYWMKFDwU2khjCQ4ELJUJ4SmClRArOCmSXGuKma0fYD5CbzHxFpCSGAhfAVSSUGDUk2BWZaff2g6GE15BsBQ9nwmpIGDiyHQddwNTMKkbZaf9fajXQca1EX44puJZUsnY0ObGmITE3GVLCbEhQUjGVt146j6oasWN+49Vph2w1pZ5EansNZqKBm1txbU57iRRcZ86RWMDdWtBJUHBHwoQPi1GV+JCbntmvok7iTX4/Up9mgyTc/FJYDTcndgH/AA5A/CHsyEkVAAAAAElFTkSuQmCC);\n\t\t\t}\n\t\t\t.reveal .overlay header a.external .icon {\n\t\t\t\tbackground-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAcElEQVRYR+2WSQoAIQwEzf8f7XiOMkUQxUPlGkM3hVmiQfQR9GYnH1SsAQlI4DiBqkCMoNb9y2e90IAEJPAcgdznU9+engMaeJ7Azh5Y1U67gAho4DqBqmB1buAf0MB1AlVBek83ZPkmJMGc1wAR+AAqod/B97TRpQAAAABJRU5ErkJggg==);\n\t\t\t}\n\n\t.reveal .overlay .viewport {\n\t\tposition: absolute;\n\t\ttop: 40px;\n\t\tright: 0;\n\t\tbottom: 0;\n\t\tleft: 0;\n\t}\n\n\t.reveal .overlay.overlay-preview .viewport iframe {\n\t\twidth: 100%;\n\t\theight: 100%;\n\t\tmax-width: 100%;\n\t\tmax-height: 100%;\n\t\tborder: 0;\n\n\t\topacity: 0;\n\t\tvisibility: hidden;\n\t\ttransition: all 0.3s ease;\n\t}\n\n\t.reveal .overlay.overlay-preview.loaded .viewport iframe {\n\t\topacity: 1;\n\t\tvisibility: visible;\n\t}\n\n\t.reveal .overlay.overlay-preview.loaded .spinner {\n\t\topacity: 0;\n\t\tvisibility: hidden;\n\t\ttransform: scale(0.2);\n\t}\n\n\t.reveal .overlay.overlay-help .viewport {\n\t\toverflow: auto;\n\t\tcolor: #fff;\n\t}\n\n\t.reveal .overlay.overlay-help .viewport .viewport-inner {\n\t\twidth: 600px;\n\t\tmargin: 0 auto;\n\t\tpadding: 60px;\n\t\ttext-align: center;\n\t\tletter-spacing: normal;\n\t}\n\n\t.reveal .overlay.overlay-help .viewport .viewport-inner .title {\n\t\tfont-size: 20px;\n\t}\n\n\t.reveal .overlay.overlay-help .viewport .viewport-inner table {\n\t\tborder: 1px solid #fff;\n\t\tborder-collapse: collapse;\n\t\tfont-size: 14px;\n\t}\n\n\t.reveal .overlay.overlay-help .viewport .viewport-inner table th,\n\t.reveal .overlay.overlay-help .viewport .viewport-inner table td {\n\t\twidth: 200px;\n\t\tpadding: 10px;\n\t\tborder: 1px solid #fff;\n\t\tvertical-align: middle;\n\t}\n\n\t.reveal .overlay.overlay-help .viewport .viewport-inner table th {\n\t\tpadding-top: 20px;\n\t\tpadding-bottom: 20px;\n\t}\n\n\n\n/*********************************************\n * PLAYBACK COMPONENT\n *********************************************/\n\n.reveal .playback {\n\tposition: fixed;\n\tleft: 15px;\n\tbottom: 15px;\n\tz-index: 30;\n\tcursor: pointer;\n\ttransition: all 400ms ease;\n}\n\n.reveal.overview .playback {\n\topacity: 0;\n\tvisibility: hidden;\n}\n\n\n/*********************************************\n * ROLLING LINKS\n *********************************************/\n\n.reveal .roll {\n\tdisplay: inline-block;\n\tline-height: 1.2;\n\toverflow: hidden;\n\n\tvertical-align: top;\n\tperspective: 400px;\n\tperspective-origin: 50% 50%;\n}\n\t.reveal .roll:hover {\n\t\tbackground: none;\n\t\ttext-shadow: none;\n\t}\n.reveal .roll span {\n\tdisplay: block;\n\tposition: relative;\n\tpadding: 0 2px;\n\n\tpointer-events: none;\n\ttransition: all 400ms ease;\n\ttransform-origin: 50% 0%;\n\ttransform-style: preserve-3d;\n\tbackface-visibility: hidden;\n}\n\t.reveal .roll:hover span {\n\t    background: rgba(0,0,0,0.5);\n\t    transform: translate3d( 0px, 0px, -45px ) rotateX( 90deg );\n\t}\n.reveal .roll span:after {\n\tcontent: attr(data-title);\n\n\tdisplay: block;\n\tposition: absolute;\n\tleft: 0;\n\ttop: 0;\n\tpadding: 0 2px;\n\tbackface-visibility: hidden;\n\ttransform-origin: 50% 0%;\n\ttransform: translate3d( 0px, 110%, 0px ) rotateX( -90deg );\n}\n\n\n/*********************************************\n * SPEAKER NOTES\n *********************************************/\n\n.reveal aside.notes {\n\tdisplay: none;\n}\n\n\n/*********************************************\n * ZOOM PLUGIN\n *********************************************/\n\n.zoomed .reveal *,\n.zoomed .reveal *:before,\n.zoomed .reveal *:after {\n\tbackface-visibility: visible !important;\n}\n\n.zoomed .reveal .progress,\n.zoomed .reveal .controls {\n\topacity: 0;\n}\n\n.zoomed .reveal .roll span {\n\tbackground: none;\n}\n\n.zoomed .reveal .roll span:after {\n\tvisibility: hidden;\n}\n\n\n"
  },
  {
    "path": "presentation/css/theme/README.md",
    "content": "## Dependencies\n\nThemes are written using Sass to keep things modular and reduce the need for repeated selectors across files. Make sure that you have the reveal.js development environment including the Grunt dependencies installed before proceding: https://github.com/hakimel/reveal.js#full-setup\n\nYou also need to install Ruby and then Sass (with `gem install sass`).\n\n## Creating a Theme\n\nTo create your own theme, start by duplicating any ```.scss``` file in [/css/theme/source](https://github.com/hakimel/reveal.js/blob/master/css/theme/source) and adding it to the compilation list in the [Gruntfile](https://github.com/hakimel/reveal.js/blob/master/Gruntfile.js).\n\nEach theme file does four things in the following order:\n\n1. **Include [/css/theme/template/mixins.scss](https://github.com/hakimel/reveal.js/blob/master/css/theme/template/mixins.scss)**\nShared utility functions.\n\n2. **Include [/css/theme/template/settings.scss](https://github.com/hakimel/reveal.js/blob/master/css/theme/template/settings.scss)**\nDeclares a set of custom variables that the template file (step 4) expects. Can be overridden in step 3.\n\n3. **Override**\nThis is where you override the default theme. Either by specifying variables (see [settings.scss](https://github.com/hakimel/reveal.js/blob/master/css/theme/template/settings.scss) for reference) or by adding full selectors with hardcoded styles.\n\n4. **Include [/css/theme/template/theme.scss](https://github.com/hakimel/reveal.js/blob/master/css/theme/template/theme.scss)**\nThe template theme file which will generate final CSS output based on the currently defined variables.\n\nWhen you are done, run `grunt css-themes` to compile the Sass file to CSS and you are ready to use your new theme.\n"
  },
  {
    "path": "presentation/css/theme/beige.css",
    "content": "@import url(../../lib/font/league-gothic/league-gothic.css);\n@import url(https://fonts.googleapis.com/css?family=Lato:400,700,400italic,700italic);\n/**\n * Beige theme for reveal.js.\n *\n * Copyright (C) 2011-2012 Hakim El Hattab, http://hakim.se\n */\n/*********************************************\n * GLOBAL STYLES\n *********************************************/\nbody {\n  background: #f7f2d3;\n  background: -moz-radial-gradient(center, circle cover, #ffffff 0%, #f7f2d3 100%);\n  background: -webkit-gradient(radial, center center, 0px, center center, 100%, color-stop(0%, #ffffff), color-stop(100%, #f7f2d3));\n  background: -webkit-radial-gradient(center, circle cover, #ffffff 0%, #f7f2d3 100%);\n  background: -o-radial-gradient(center, circle cover, #ffffff 0%, #f7f2d3 100%);\n  background: -ms-radial-gradient(center, circle cover, #ffffff 0%, #f7f2d3 100%);\n  background: radial-gradient(center, circle cover, #ffffff 0%, #f7f2d3 100%);\n  background-color: #f7f3de; }\n\n.reveal {\n  font-family: 'Lato', sans-serif;\n  font-size: 36px;\n  font-weight: normal;\n  color: #333; }\n\n::selection {\n  color: #fff;\n  background: rgba(79, 64, 28, 0.99);\n  text-shadow: none; }\n\n.reveal .slides > section, .reveal .slides > section > section {\n  line-height: 1.3;\n  font-weight: inherit; }\n\n/*********************************************\n * HEADERS\n *********************************************/\n.reveal h1, .reveal h2, .reveal h3, .reveal h4, .reveal h5, .reveal h6 {\n  margin: 0 0 20px 0;\n  color: #333;\n  font-family: 'League Gothic', Impact, sans-serif;\n  font-weight: normal;\n  line-height: 1.2;\n  letter-spacing: normal;\n  text-transform: uppercase;\n  text-shadow: none;\n  word-wrap: break-word; }\n\n.reveal h1 {\n  font-size: 3.77em; }\n\n.reveal h2 {\n  font-size: 2.11em; }\n\n.reveal h3 {\n  font-size: 1.55em; }\n\n.reveal h4 {\n  font-size: 1em; }\n\n.reveal h1 {\n  text-shadow: 0 1px 0 #ccc, 0 2px 0 #c9c9c9, 0 3px 0 #bbb, 0 4px 0 #b9b9b9, 0 5px 0 #aaa, 0 6px 1px rgba(0, 0, 0, 0.1), 0 0 5px rgba(0, 0, 0, 0.1), 0 1px 3px rgba(0, 0, 0, 0.3), 0 3px 5px rgba(0, 0, 0, 0.2), 0 5px 10px rgba(0, 0, 0, 0.25), 0 20px 20px rgba(0, 0, 0, 0.15); }\n\n/*********************************************\n * OTHER\n *********************************************/\n.reveal p {\n  margin: 20px 0;\n  line-height: 1.3; }\n\n/* Ensure certain elements are never larger than the slide itself */\n.reveal img, .reveal video, .reveal iframe {\n  max-width: 95%;\n  max-height: 95%; }\n\n.reveal strong, .reveal b {\n  font-weight: bold; }\n\n.reveal em {\n  font-style: italic; }\n\n.reveal ol, .reveal dl, .reveal ul {\n  display: inline-block;\n  text-align: left;\n  margin: 0 0 0 1em; }\n\n.reveal ol {\n  list-style-type: decimal; }\n\n.reveal ul {\n  list-style-type: disc; }\n\n.reveal ul ul {\n  list-style-type: square; }\n\n.reveal ul ul ul {\n  list-style-type: circle; }\n\n.reveal ul ul, .reveal ul ol, .reveal ol ol, .reveal ol ul {\n  display: block;\n  margin-left: 40px; }\n\n.reveal dt {\n  font-weight: bold; }\n\n.reveal dd {\n  margin-left: 40px; }\n\n.reveal q, .reveal blockquote {\n  quotes: none; }\n\n.reveal blockquote {\n  display: block;\n  position: relative;\n  width: 70%;\n  margin: 20px auto;\n  padding: 5px;\n  font-style: italic;\n  background: rgba(255, 255, 255, 0.05);\n  box-shadow: 0px 0px 2px rgba(0, 0, 0, 0.2); }\n\n.reveal blockquote p:first-child, .reveal blockquote p:last-child {\n  display: inline-block; }\n\n.reveal q {\n  font-style: italic; }\n\n.reveal pre {\n  display: block;\n  position: relative;\n  width: 90%;\n  margin: 20px auto;\n  text-align: left;\n  font-size: 0.55em;\n  font-family: monospace;\n  line-height: 1.2em;\n  word-wrap: break-word;\n  box-shadow: 0px 0px 6px rgba(0, 0, 0, 0.3); }\n\n.reveal code {\n  font-family: monospace; }\n\n.reveal pre code {\n  display: block;\n  padding: 5px;\n  overflow: auto;\n  max-height: 400px;\n  word-wrap: normal;\n  background: #3F3F3F;\n  color: #DCDCDC; }\n\n.reveal table {\n  margin: auto;\n  border-collapse: collapse;\n  border-spacing: 0; }\n\n.reveal table th {\n  font-weight: bold; }\n\n.reveal table th, .reveal table td {\n  text-align: left;\n  padding: 0.2em 0.5em 0.2em 0.5em;\n  border-bottom: 1px solid; }\n\n.reveal table tr:last-child td {\n  border-bottom: none; }\n\n.reveal sup {\n  vertical-align: super; }\n\n.reveal sub {\n  vertical-align: sub; }\n\n.reveal small {\n  display: inline-block;\n  font-size: 0.6em;\n  line-height: 1.2em;\n  vertical-align: top; }\n\n.reveal small * {\n  vertical-align: top; }\n\n/*********************************************\n * LINKS\n *********************************************/\n.reveal a {\n  color: #8b743d;\n  text-decoration: none;\n  -webkit-transition: color 0.15s ease;\n  -moz-transition: color 0.15s ease;\n  transition: color 0.15s ease; }\n\n.reveal a:hover {\n  color: #c0a76e;\n  text-shadow: none;\n  border: none; }\n\n.reveal .roll span:after {\n  color: #fff;\n  background: #564726; }\n\n/*********************************************\n * IMAGES\n *********************************************/\n.reveal section img {\n  margin: 15px 0px;\n  background: rgba(255, 255, 255, 0.12);\n  border: 4px solid #333;\n  box-shadow: 0 0 10px rgba(0, 0, 0, 0.15); }\n\n.reveal a img {\n  -webkit-transition: all 0.15s linear;\n  -moz-transition: all 0.15s linear;\n  transition: all 0.15s linear; }\n\n.reveal a:hover img {\n  background: rgba(255, 255, 255, 0.2);\n  border-color: #8b743d;\n  box-shadow: 0 0 20px rgba(0, 0, 0, 0.55); }\n\n/*********************************************\n * NAVIGATION CONTROLS\n *********************************************/\n.reveal .controls div.navigate-left, .reveal .controls div.navigate-left.enabled {\n  border-right-color: #8b743d; }\n\n.reveal .controls div.navigate-right, .reveal .controls div.navigate-right.enabled {\n  border-left-color: #8b743d; }\n\n.reveal .controls div.navigate-up, .reveal .controls div.navigate-up.enabled {\n  border-bottom-color: #8b743d; }\n\n.reveal .controls div.navigate-down, .reveal .controls div.navigate-down.enabled {\n  border-top-color: #8b743d; }\n\n.reveal .controls div.navigate-left.enabled:hover {\n  border-right-color: #c0a76e; }\n\n.reveal .controls div.navigate-right.enabled:hover {\n  border-left-color: #c0a76e; }\n\n.reveal .controls div.navigate-up.enabled:hover {\n  border-bottom-color: #c0a76e; }\n\n.reveal .controls div.navigate-down.enabled:hover {\n  border-top-color: #c0a76e; }\n\n/*********************************************\n * PROGRESS BAR\n *********************************************/\n.reveal .progress {\n  background: rgba(0, 0, 0, 0.2); }\n\n.reveal .progress span {\n  background: #8b743d;\n  -webkit-transition: width 800ms cubic-bezier(0.26, 0.86, 0.44, 0.985);\n  -moz-transition: width 800ms cubic-bezier(0.26, 0.86, 0.44, 0.985);\n  transition: width 800ms cubic-bezier(0.26, 0.86, 0.44, 0.985); }\n\n/*********************************************\n * SLIDE NUMBER\n *********************************************/\n.reveal .slide-number {\n  color: #8b743d; }\n"
  },
  {
    "path": "presentation/css/theme/black.css",
    "content": "@import url(../../lib/font/source-sans-pro/source-sans-pro.css);\n/**\n * Black theme for reveal.js. This is the opposite of the 'white' theme.\n *\n * Copyright (C) 2015 Hakim El Hattab, http://hakim.se\n */\nsection.has-light-background, section.has-light-background h1, section.has-light-background h2, section.has-light-background h3, section.has-light-background h4, section.has-light-background h5, section.has-light-background h6 {\n  color: #222; }\n\n/*********************************************\n * GLOBAL STYLES\n *********************************************/\nbody {\n  background: #222;\n  background-color: #222; }\n\n.reveal {\n  font-family: 'Source Sans Pro', Helvetica, sans-serif;\n  font-size: 38px;\n  font-weight: normal;\n  color: #fff; }\n\n::selection {\n  color: #fff;\n  background: #bee4fd;\n  text-shadow: none; }\n\n.reveal .slides > section, .reveal .slides > section > section {\n  line-height: 1.3;\n  font-weight: inherit; }\n\n/*********************************************\n * HEADERS\n *********************************************/\n.reveal h1, .reveal h2, .reveal h3, .reveal h4, .reveal h5, .reveal h6 {\n  margin: 0 0 20px 0;\n  color: #fff;\n  font-family: 'Source Sans Pro', Helvetica, sans-serif;\n  font-weight: 600;\n  line-height: 1.2;\n  letter-spacing: normal;\n  text-transform: uppercase;\n  text-shadow: none;\n  word-wrap: break-word; }\n\n.reveal h1 {\n  font-size: 2.5em; }\n\n.reveal h2 {\n  font-size: 1.6em; }\n\n.reveal h3 {\n  font-size: 1.3em; }\n\n.reveal h4 {\n  font-size: 1em; }\n\n.reveal h1 {\n  text-shadow: none; }\n\n/*********************************************\n * OTHER\n *********************************************/\n.reveal p {\n  margin: 20px 0;\n  line-height: 1.3; }\n\n/* Ensure certain elements are never larger than the slide itself */\n.reveal img, .reveal video, .reveal iframe {\n  max-width: 95%;\n  max-height: 95%; }\n\n.reveal strong, .reveal b {\n  font-weight: bold; }\n\n.reveal em {\n  font-style: italic; }\n\n.reveal ol, .reveal dl, .reveal ul {\n  display: inline-block;\n  text-align: left;\n  margin: 0 0 0 1em; }\n\n.reveal ol {\n  list-style-type: decimal; }\n\n.reveal ul {\n  list-style-type: disc; }\n\n.reveal ul ul {\n  list-style-type: square; }\n\n.reveal ul ul ul {\n  list-style-type: circle; }\n\n.reveal ul ul, .reveal ul ol, .reveal ol ol, .reveal ol ul {\n  display: block;\n  margin-left: 40px; }\n\n.reveal dt {\n  font-weight: bold; }\n\n.reveal dd {\n  margin-left: 40px; }\n\n.reveal q, .reveal blockquote {\n  quotes: none; }\n\n.reveal blockquote {\n  display: block;\n  position: relative;\n  width: 70%;\n  margin: 20px auto;\n  padding: 5px;\n  font-style: italic;\n  background: rgba(255, 255, 255, 0.05);\n  box-shadow: 0px 0px 2px rgba(0, 0, 0, 0.2); }\n\n.reveal blockquote p:first-child, .reveal blockquote p:last-child {\n  display: inline-block; }\n\n.reveal q {\n  font-style: italic; }\n\n.reveal pre {\n  display: block;\n  position: relative;\n  width: 90%;\n  margin: 20px auto;\n  text-align: left;\n  font-size: 0.55em;\n  font-family: monospace;\n  line-height: 1.2em;\n  word-wrap: break-word;\n  box-shadow: 0px 0px 6px rgba(0, 0, 0, 0.3); }\n\n.reveal code {\n  font-family: monospace; }\n\n.reveal pre code {\n  display: block;\n  padding: 5px;\n  overflow: auto;\n  max-height: 400px;\n  word-wrap: normal;\n  background: #3F3F3F;\n  color: #DCDCDC; }\n\n.reveal table {\n  margin: auto;\n  border-collapse: collapse;\n  border-spacing: 0; }\n\n.reveal table th {\n  font-weight: bold; }\n\n.reveal table th, .reveal table td {\n  text-align: left;\n  padding: 0.2em 0.5em 0.2em 0.5em;\n  border-bottom: 1px solid; }\n\n.reveal table tr:last-child td {\n  border-bottom: none; }\n\n.reveal sup {\n  vertical-align: super; }\n\n.reveal sub {\n  vertical-align: sub; }\n\n.reveal small {\n  display: inline-block;\n  font-size: 0.6em;\n  line-height: 1.2em;\n  vertical-align: top; }\n\n.reveal small * {\n  vertical-align: top; }\n\n/*********************************************\n * LINKS\n *********************************************/\n.reveal a {\n  color: #42affa;\n  text-decoration: none;\n  -webkit-transition: color 0.15s ease;\n  -moz-transition: color 0.15s ease;\n  transition: color 0.15s ease; }\n\n.reveal a:hover {\n  color: #8dcffc;\n  text-shadow: none;\n  border: none; }\n\n.reveal .roll span:after {\n  color: #fff;\n  background: #068ee9; }\n\n/*********************************************\n * IMAGES\n *********************************************/\n.reveal section img {\n  margin: 15px 0px;\n  background: rgba(255, 255, 255, 0.12);\n  border: 4px solid #fff;\n  box-shadow: 0 0 10px rgba(0, 0, 0, 0.15); }\n\n.reveal a img {\n  -webkit-transition: all 0.15s linear;\n  -moz-transition: all 0.15s linear;\n  transition: all 0.15s linear; }\n\n.reveal a:hover img {\n  background: rgba(255, 255, 255, 0.2);\n  border-color: #42affa;\n  box-shadow: 0 0 20px rgba(0, 0, 0, 0.55); }\n\n/*********************************************\n * NAVIGATION CONTROLS\n *********************************************/\n.reveal .controls div.navigate-left, .reveal .controls div.navigate-left.enabled {\n  border-right-color: #42affa; }\n\n.reveal .controls div.navigate-right, .reveal .controls div.navigate-right.enabled {\n  border-left-color: #42affa; }\n\n.reveal .controls div.navigate-up, .reveal .controls div.navigate-up.enabled {\n  border-bottom-color: #42affa; }\n\n.reveal .controls div.navigate-down, .reveal .controls div.navigate-down.enabled {\n  border-top-color: #42affa; }\n\n.reveal .controls div.navigate-left.enabled:hover {\n  border-right-color: #8dcffc; }\n\n.reveal .controls div.navigate-right.enabled:hover {\n  border-left-color: #8dcffc; }\n\n.reveal .controls div.navigate-up.enabled:hover {\n  border-bottom-color: #8dcffc; }\n\n.reveal .controls div.navigate-down.enabled:hover {\n  border-top-color: #8dcffc; }\n\n/*********************************************\n * PROGRESS BAR\n *********************************************/\n.reveal .progress {\n  background: rgba(0, 0, 0, 0.2); }\n\n.reveal .progress span {\n  background: #42affa;\n  -webkit-transition: width 800ms cubic-bezier(0.26, 0.86, 0.44, 0.985);\n  -moz-transition: width 800ms cubic-bezier(0.26, 0.86, 0.44, 0.985);\n  transition: width 800ms cubic-bezier(0.26, 0.86, 0.44, 0.985); }\n\n/*********************************************\n * SLIDE NUMBER\n *********************************************/\n.reveal .slide-number {\n  color: #42affa; }\n"
  },
  {
    "path": "presentation/css/theme/blood.css",
    "content": "@import url(https://fonts.googleapis.com/css?family=Ubuntu:300,700,300italic,700italic);\n/**\n * Blood theme for reveal.js\n * Author: Walther http://github.com/Walther\n *\n * Designed to be used with highlight.js theme\n * \"monokai_sublime.css\" available from\n * https://github.com/isagalaev/highlight.js/\n *\n * For other themes, change $codeBackground accordingly.\n *\n */\n/*********************************************\n * GLOBAL STYLES\n *********************************************/\nbody {\n  background: #222;\n  background: -moz-radial-gradient(center, circle cover, #626262 0%, #222 100%);\n  background: -webkit-gradient(radial, center center, 0px, center center, 100%, color-stop(0%, #626262), color-stop(100%, #222));\n  background: -webkit-radial-gradient(center, circle cover, #626262 0%, #222 100%);\n  background: -o-radial-gradient(center, circle cover, #626262 0%, #222 100%);\n  background: -ms-radial-gradient(center, circle cover, #626262 0%, #222 100%);\n  background: radial-gradient(center, circle cover, #626262 0%, #222 100%);\n  background-color: #2b2b2b; }\n\n.reveal {\n  font-family: Ubuntu, 'sans-serif';\n  font-size: 36px;\n  font-weight: normal;\n  color: #eee; }\n\n::selection {\n  color: #fff;\n  background: #a23;\n  text-shadow: none; }\n\n.reveal .slides > section, .reveal .slides > section > section {\n  line-height: 1.3;\n  font-weight: inherit; }\n\n/*********************************************\n * HEADERS\n *********************************************/\n.reveal h1, .reveal h2, .reveal h3, .reveal h4, .reveal h5, .reveal h6 {\n  margin: 0 0 20px 0;\n  color: #eee;\n  font-family: Ubuntu, 'sans-serif';\n  font-weight: normal;\n  line-height: 1.2;\n  letter-spacing: normal;\n  text-transform: uppercase;\n  text-shadow: 2px 2px 2px #222;\n  word-wrap: break-word; }\n\n.reveal h1 {\n  font-size: 3.77em; }\n\n.reveal h2 {\n  font-size: 2.11em; }\n\n.reveal h3 {\n  font-size: 1.55em; }\n\n.reveal h4 {\n  font-size: 1em; }\n\n.reveal h1 {\n  text-shadow: 0 1px 0 #ccc, 0 2px 0 #c9c9c9, 0 3px 0 #bbb, 0 4px 0 #b9b9b9, 0 5px 0 #aaa, 0 6px 1px rgba(0, 0, 0, 0.1), 0 0 5px rgba(0, 0, 0, 0.1), 0 1px 3px rgba(0, 0, 0, 0.3), 0 3px 5px rgba(0, 0, 0, 0.2), 0 5px 10px rgba(0, 0, 0, 0.25), 0 20px 20px rgba(0, 0, 0, 0.15); }\n\n/*********************************************\n * OTHER\n *********************************************/\n.reveal p {\n  margin: 20px 0;\n  line-height: 1.3; }\n\n/* Ensure certain elements are never larger than the slide itself */\n.reveal img, .reveal video, .reveal iframe {\n  max-width: 95%;\n  max-height: 95%; }\n\n.reveal strong, .reveal b {\n  font-weight: bold; }\n\n.reveal em {\n  font-style: italic; }\n\n.reveal ol, .reveal dl, .reveal ul {\n  display: inline-block;\n  text-align: left;\n  margin: 0 0 0 1em; }\n\n.reveal ol {\n  list-style-type: decimal; }\n\n.reveal ul {\n  list-style-type: disc; }\n\n.reveal ul ul {\n  list-style-type: square; }\n\n.reveal ul ul ul {\n  list-style-type: circle; }\n\n.reveal ul ul, .reveal ul ol, .reveal ol ol, .reveal ol ul {\n  display: block;\n  margin-left: 40px; }\n\n.reveal dt {\n  font-weight: bold; }\n\n.reveal dd {\n  margin-left: 40px; }\n\n.reveal q, .reveal blockquote {\n  quotes: none; }\n\n.reveal blockquote {\n  display: block;\n  position: relative;\n  width: 70%;\n  margin: 20px auto;\n  padding: 5px;\n  font-style: italic;\n  background: rgba(255, 255, 255, 0.05);\n  box-shadow: 0px 0px 2px rgba(0, 0, 0, 0.2); }\n\n.reveal blockquote p:first-child, .reveal blockquote p:last-child {\n  display: inline-block; }\n\n.reveal q {\n  font-style: italic; }\n\n.reveal pre {\n  display: block;\n  position: relative;\n  width: 90%;\n  margin: 20px auto;\n  text-align: left;\n  font-size: 0.55em;\n  font-family: monospace;\n  line-height: 1.2em;\n  word-wrap: break-word;\n  box-shadow: 0px 0px 6px rgba(0, 0, 0, 0.3); }\n\n.reveal code {\n  font-family: monospace; }\n\n.reveal pre code {\n  display: block;\n  padding: 5px;\n  overflow: auto;\n  max-height: 400px;\n  word-wrap: normal;\n  background: #3F3F3F;\n  color: #DCDCDC; }\n\n.reveal table {\n  margin: auto;\n  border-collapse: collapse;\n  border-spacing: 0; }\n\n.reveal table th {\n  font-weight: bold; }\n\n.reveal table th, .reveal table td {\n  text-align: left;\n  padding: 0.2em 0.5em 0.2em 0.5em;\n  border-bottom: 1px solid; }\n\n.reveal table tr:last-child td {\n  border-bottom: none; }\n\n.reveal sup {\n  vertical-align: super; }\n\n.reveal sub {\n  vertical-align: sub; }\n\n.reveal small {\n  display: inline-block;\n  font-size: 0.6em;\n  line-height: 1.2em;\n  vertical-align: top; }\n\n.reveal small * {\n  vertical-align: top; }\n\n/*********************************************\n * LINKS\n *********************************************/\n.reveal a {\n  color: #a23;\n  text-decoration: none;\n  -webkit-transition: color 0.15s ease;\n  -moz-transition: color 0.15s ease;\n  transition: color 0.15s ease; }\n\n.reveal a:hover {\n  color: #dd5567;\n  text-shadow: none;\n  border: none; }\n\n.reveal .roll span:after {\n  color: #fff;\n  background: #6a1521; }\n\n/*********************************************\n * IMAGES\n *********************************************/\n.reveal section img {\n  margin: 15px 0px;\n  background: rgba(255, 255, 255, 0.12);\n  border: 4px solid #eee;\n  box-shadow: 0 0 10px rgba(0, 0, 0, 0.15); }\n\n.reveal a img {\n  -webkit-transition: all 0.15s linear;\n  -moz-transition: all 0.15s linear;\n  transition: all 0.15s linear; }\n\n.reveal a:hover img {\n  background: rgba(255, 255, 255, 0.2);\n  border-color: #a23;\n  box-shadow: 0 0 20px rgba(0, 0, 0, 0.55); }\n\n/*********************************************\n * NAVIGATION CONTROLS\n *********************************************/\n.reveal .controls div.navigate-left, .reveal .controls div.navigate-left.enabled {\n  border-right-color: #a23; }\n\n.reveal .controls div.navigate-right, .reveal .controls div.navigate-right.enabled {\n  border-left-color: #a23; }\n\n.reveal .controls div.navigate-up, .reveal .controls div.navigate-up.enabled {\n  border-bottom-color: #a23; }\n\n.reveal .controls div.navigate-down, .reveal .controls div.navigate-down.enabled {\n  border-top-color: #a23; }\n\n.reveal .controls div.navigate-left.enabled:hover {\n  border-right-color: #dd5567; }\n\n.reveal .controls div.navigate-right.enabled:hover {\n  border-left-color: #dd5567; }\n\n.reveal .controls div.navigate-up.enabled:hover {\n  border-bottom-color: #dd5567; }\n\n.reveal .controls div.navigate-down.enabled:hover {\n  border-top-color: #dd5567; }\n\n/*********************************************\n * PROGRESS BAR\n *********************************************/\n.reveal .progress {\n  background: rgba(0, 0, 0, 0.2); }\n\n.reveal .progress span {\n  background: #a23;\n  -webkit-transition: width 800ms cubic-bezier(0.26, 0.86, 0.44, 0.985);\n  -moz-transition: width 800ms cubic-bezier(0.26, 0.86, 0.44, 0.985);\n  transition: width 800ms cubic-bezier(0.26, 0.86, 0.44, 0.985); }\n\n/*********************************************\n * SLIDE NUMBER\n *********************************************/\n.reveal .slide-number {\n  color: #a23; }\n\n.reveal p {\n  font-weight: 300;\n  text-shadow: 1px 1px #222; }\n\n.reveal h1, .reveal h2, .reveal h3, .reveal h4, .reveal h5, .reveal h6 {\n  font-weight: 700; }\n\n.reveal a, .reveal a:hover {\n  text-shadow: 2px 2px 2px #000; }\n\n.reveal small a, .reveal small a:hover {\n  text-shadow: 1px 1px 1px #000; }\n\n.reveal p code {\n  background-color: #23241f;\n  display: inline-block;\n  border-radius: 7px; }\n\n.reveal small code {\n  vertical-align: baseline; }\n"
  },
  {
    "path": "presentation/css/theme/league.css",
    "content": "@import url(../../lib/font/league-gothic/league-gothic.css);\n@import url(../../contrib/google/css/lato.css);\n/**\n * League theme for reveal.js.\n *\n * This was the default theme pre-3.0.0.\n *\n * Copyright (C) 2011-2012 Hakim El Hattab, http://hakim.se\n */\n/*********************************************\n * GLOBAL STYLES\n *********************************************/\nbody {\n  background: #1c1e20;\n  background: -moz-radial-gradient(center, circle cover, #555a5f 0%, #1c1e20 100%);\n  background: -webkit-gradient(radial, center center, 0px, center center, 100%, color-stop(0%, #555a5f), color-stop(100%, #1c1e20));\n  background: -webkit-radial-gradient(center, circle cover, #555a5f 0%, #1c1e20 100%);\n  background: -o-radial-gradient(center, circle cover, #555a5f 0%, #1c1e20 100%);\n  background: -ms-radial-gradient(center, circle cover, #555a5f 0%, #1c1e20 100%);\n  background: radial-gradient(center, circle cover, #555a5f 0%, #1c1e20 100%);\n  background-color: #2b2b2b; }\n\n.reveal {\n  font-family: 'Lato', sans-serif;\n  font-size: 36px;\n  font-weight: normal;\n  color: #eee; }\n\n::selection {\n  color: #fff;\n  background: #FF5E99;\n  text-shadow: none; }\n\n.reveal .slides > section, .reveal .slides > section > section {\n  line-height: 1.3;\n  font-weight: inherit; }\n\n/*********************************************\n * HEADERS\n *********************************************/\n.reveal h1, .reveal h2, .reveal h3, .reveal h4, .reveal h5, .reveal h6 {\n  margin: 0 0 20px 0;\n  color: #eee;\n  font-family: 'League Gothic', Impact, sans-serif;\n  font-weight: normal;\n  line-height: 1.2;\n  letter-spacing: normal;\n  text-transform: uppercase;\n  text-shadow: 0px 0px 6px rgba(0, 0, 0, 0.2);\n  word-wrap: break-word; }\n\n.reveal h1 {\n  font-size: 3.77em; }\n\n.reveal h2 {\n  font-size: 2.11em; }\n\n.reveal h3 {\n  font-size: 1.55em; }\n\n.reveal h4 {\n  font-size: 1em; }\n\n.reveal h1 {\n  text-shadow: 0 1px 0 #ccc, 0 2px 0 #c9c9c9, 0 3px 0 #bbb, 0 4px 0 #b9b9b9, 0 5px 0 #aaa, 0 6px 1px rgba(0, 0, 0, 0.1), 0 0 5px rgba(0, 0, 0, 0.1), 0 1px 3px rgba(0, 0, 0, 0.3), 0 3px 5px rgba(0, 0, 0, 0.2), 0 5px 10px rgba(0, 0, 0, 0.25), 0 20px 20px rgba(0, 0, 0, 0.15); }\n\n/*********************************************\n * OTHER\n *********************************************/\n.reveal p {\n  margin: 20px 0;\n  line-height: 1.3; }\n\n/* Ensure certain elements are never larger than the slide itself */\n.reveal img, .reveal video, .reveal iframe {\n  max-width: 95%;\n  max-height: 95%; }\n\n.reveal strong, .reveal b {\n  font-weight: bold; }\n\n.reveal em {\n  font-style: italic; }\n\n.reveal ol, .reveal dl, .reveal ul {\n  display: inline-block;\n  text-align: left;\n  margin: 0 0 0 1em; }\n\n.reveal ol {\n  list-style-type: decimal; }\n\n.reveal ul {\n  list-style-type: disc; }\n\n.reveal ul ul {\n  list-style-type: square; }\n\n.reveal ul ul ul {\n  list-style-type: circle; }\n\n.reveal ul ul, .reveal ul ol, .reveal ol ol, .reveal ol ul {\n  display: block;\n  margin-left: 40px; }\n\n.reveal dt {\n  font-weight: bold; }\n\n.reveal dd {\n  margin-left: 40px; }\n\n.reveal q, .reveal blockquote {\n  quotes: none; }\n\n.reveal blockquote {\n  display: block;\n  position: relative;\n  width: 70%;\n  margin: 20px auto;\n  padding: 5px;\n  font-style: italic;\n  background: rgba(255, 255, 255, 0.05);\n  box-shadow: 0px 0px 2px rgba(0, 0, 0, 0.2); }\n\n.reveal blockquote p:first-child, .reveal blockquote p:last-child {\n  display: inline-block; }\n\n.reveal q {\n  font-style: italic; }\n\n.reveal pre {\n  display: block;\n  position: relative;\n  width: 90%;\n  margin: 20px auto;\n  text-align: left;\n  font-size: 0.55em;\n  font-family: monospace;\n  line-height: 1.2em;\n  word-wrap: break-word;\n  box-shadow: 0px 0px 6px rgba(0, 0, 0, 0.3); }\n\n.reveal code {\n  font-family: monospace; }\n\n.reveal pre code {\n  display: block;\n  padding: 5px;\n  overflow: auto;\n  max-height: 400px;\n  word-wrap: normal;\n  background: #3F3F3F;\n  color: #DCDCDC; }\n\n.reveal table {\n  margin: auto;\n  border-collapse: collapse;\n  border-spacing: 0; }\n\n.reveal table th {\n  font-weight: bold; }\n\n.reveal table th, .reveal table td {\n  text-align: left;\n  padding: 0.2em 0.5em 0.2em 0.5em;\n  border-bottom: 1px solid; }\n\n.reveal table tr:last-child td {\n  border-bottom: none; }\n\n.reveal sup {\n  vertical-align: super; }\n\n.reveal sub {\n  vertical-align: sub; }\n\n.reveal small {\n  display: inline-block;\n  font-size: 0.6em;\n  line-height: 1.2em;\n  vertical-align: top; }\n\n.reveal small * {\n  vertical-align: top; }\n\n/*********************************************\n * LINKS\n *********************************************/\n.reveal a {\n  color: #13DAEC;\n  text-decoration: none;\n  -webkit-transition: color 0.15s ease;\n  -moz-transition: color 0.15s ease;\n  transition: color 0.15s ease; }\n\n.reveal a:hover {\n  color: #71ebf4;\n  text-shadow: none;\n  border: none; }\n\n.reveal .roll span:after {\n  color: #fff;\n  background: #0d9ba5; }\n\n/*********************************************\n * IMAGES\n *********************************************/\n.reveal section img {\n  margin: 15px 0px;\n  background: rgba(255, 255, 255, 0.12);\n  border: 4px solid #eee;\n  box-shadow: 0 0 10px rgba(0, 0, 0, 0.15); }\n\n.reveal a img {\n  -webkit-transition: all 0.15s linear;\n  -moz-transition: all 0.15s linear;\n  transition: all 0.15s linear; }\n\n.reveal a:hover img {\n  background: rgba(255, 255, 255, 0.2);\n  border-color: #13DAEC;\n  box-shadow: 0 0 20px rgba(0, 0, 0, 0.55); }\n\n/*********************************************\n * NAVIGATION CONTROLS\n *********************************************/\n.reveal .controls div.navigate-left, .reveal .controls div.navigate-left.enabled {\n  border-right-color: #13DAEC; }\n\n.reveal .controls div.navigate-right, .reveal .controls div.navigate-right.enabled {\n  border-left-color: #13DAEC; }\n\n.reveal .controls div.navigate-up, .reveal .controls div.navigate-up.enabled {\n  border-bottom-color: #13DAEC; }\n\n.reveal .controls div.navigate-down, .reveal .controls div.navigate-down.enabled {\n  border-top-color: #13DAEC; }\n\n.reveal .controls div.navigate-left.enabled:hover {\n  border-right-color: #71ebf4; }\n\n.reveal .controls div.navigate-right.enabled:hover {\n  border-left-color: #71ebf4; }\n\n.reveal .controls div.navigate-up.enabled:hover {\n  border-bottom-color: #71ebf4; }\n\n.reveal .controls div.navigate-down.enabled:hover {\n  border-top-color: #71ebf4; }\n\n/*********************************************\n * PROGRESS BAR\n *********************************************/\n.reveal .progress {\n  background: rgba(0, 0, 0, 0.2); }\n\n.reveal .progress span {\n  background: #13DAEC;\n  -webkit-transition: width 800ms cubic-bezier(0.26, 0.86, 0.44, 0.985);\n  -moz-transition: width 800ms cubic-bezier(0.26, 0.86, 0.44, 0.985);\n  transition: width 800ms cubic-bezier(0.26, 0.86, 0.44, 0.985); }\n\n/*********************************************\n * SLIDE NUMBER\n *********************************************/\n.reveal .slide-number {\n  color: #13DAEC; }\n"
  },
  {
    "path": "presentation/css/theme/moon.css",
    "content": "@import url(../../lib/font/league-gothic/league-gothic.css);\n@import url(https://fonts.googleapis.com/css?family=Lato:400,700,400italic,700italic);\n/**\n * Solarized Dark theme for reveal.js.\n * Author: Achim Staebler\n */\n/**\n * Solarized colors by Ethan Schoonover\n */\nhtml * {\n  color-profile: sRGB;\n  rendering-intent: auto; }\n\n/*********************************************\n * GLOBAL STYLES\n *********************************************/\nbody {\n  background: #002b36;\n  background-color: #002b36; }\n\n.reveal {\n  font-family: 'Lato', sans-serif;\n  font-size: 36px;\n  font-weight: normal;\n  color: #93a1a1; }\n\n::selection {\n  color: #fff;\n  background: #d33682;\n  text-shadow: none; }\n\n.reveal .slides > section, .reveal .slides > section > section {\n  line-height: 1.3;\n  font-weight: inherit; }\n\n/*********************************************\n * HEADERS\n *********************************************/\n.reveal h1, .reveal h2, .reveal h3, .reveal h4, .reveal h5, .reveal h6 {\n  margin: 0 0 20px 0;\n  color: #eee8d5;\n  font-family: 'League Gothic', Impact, sans-serif;\n  font-weight: normal;\n  line-height: 1.2;\n  letter-spacing: normal;\n  text-transform: uppercase;\n  text-shadow: none;\n  word-wrap: break-word; }\n\n.reveal h1 {\n  font-size: 3.77em; }\n\n.reveal h2 {\n  font-size: 2.11em; }\n\n.reveal h3 {\n  font-size: 1.55em; }\n\n.reveal h4 {\n  font-size: 1em; }\n\n.reveal h1 {\n  text-shadow: none; }\n\n/*********************************************\n * OTHER\n *********************************************/\n.reveal p {\n  margin: 20px 0;\n  line-height: 1.3; }\n\n/* Ensure certain elements are never larger than the slide itself */\n.reveal img, .reveal video, .reveal iframe {\n  max-width: 95%;\n  max-height: 95%; }\n\n.reveal strong, .reveal b {\n  font-weight: bold; }\n\n.reveal em {\n  font-style: italic; }\n\n.reveal ol, .reveal dl, .reveal ul {\n  display: inline-block;\n  text-align: left;\n  margin: 0 0 0 1em; }\n\n.reveal ol {\n  list-style-type: decimal; }\n\n.reveal ul {\n  list-style-type: disc; }\n\n.reveal ul ul {\n  list-style-type: square; }\n\n.reveal ul ul ul {\n  list-style-type: circle; }\n\n.reveal ul ul, .reveal ul ol, .reveal ol ol, .reveal ol ul {\n  display: block;\n  margin-left: 40px; }\n\n.reveal dt {\n  font-weight: bold; }\n\n.reveal dd {\n  margin-left: 40px; }\n\n.reveal q, .reveal blockquote {\n  quotes: none; }\n\n.reveal blockquote {\n  display: block;\n  position: relative;\n  width: 70%;\n  margin: 20px auto;\n  padding: 5px;\n  font-style: italic;\n  background: rgba(255, 255, 255, 0.05);\n  box-shadow: 0px 0px 2px rgba(0, 0, 0, 0.2); }\n\n.reveal blockquote p:first-child, .reveal blockquote p:last-child {\n  display: inline-block; }\n\n.reveal q {\n  font-style: italic; }\n\n.reveal pre {\n  display: block;\n  position: relative;\n  width: 90%;\n  margin: 20px auto;\n  text-align: left;\n  font-size: 0.55em;\n  font-family: monospace;\n  line-height: 1.2em;\n  word-wrap: break-word;\n  box-shadow: 0px 0px 6px rgba(0, 0, 0, 0.3); }\n\n.reveal code {\n  font-family: monospace; }\n\n.reveal pre code {\n  display: block;\n  padding: 5px;\n  overflow: auto;\n  max-height: 400px;\n  word-wrap: normal;\n  background: #3F3F3F;\n  color: #DCDCDC; }\n\n.reveal table {\n  margin: auto;\n  border-collapse: collapse;\n  border-spacing: 0; }\n\n.reveal table th {\n  font-weight: bold; }\n\n.reveal table th, .reveal table td {\n  text-align: left;\n  padding: 0.2em 0.5em 0.2em 0.5em;\n  border-bottom: 1px solid; }\n\n.reveal table tr:last-child td {\n  border-bottom: none; }\n\n.reveal sup {\n  vertical-align: super; }\n\n.reveal sub {\n  vertical-align: sub; }\n\n.reveal small {\n  display: inline-block;\n  font-size: 0.6em;\n  line-height: 1.2em;\n  vertical-align: top; }\n\n.reveal small * {\n  vertical-align: top; }\n\n/*********************************************\n * LINKS\n *********************************************/\n.reveal a {\n  color: #268bd2;\n  text-decoration: none;\n  -webkit-transition: color 0.15s ease;\n  -moz-transition: color 0.15s ease;\n  transition: color 0.15s ease; }\n\n.reveal a:hover {\n  color: #78bae6;\n  text-shadow: none;\n  border: none; }\n\n.reveal .roll span:after {\n  color: #fff;\n  background: #1a6291; }\n\n/*********************************************\n * IMAGES\n *********************************************/\n.reveal section img {\n  margin: 15px 0px;\n  background: rgba(255, 255, 255, 0.12);\n  border: 4px solid #93a1a1;\n  box-shadow: 0 0 10px rgba(0, 0, 0, 0.15); }\n\n.reveal a img {\n  -webkit-transition: all 0.15s linear;\n  -moz-transition: all 0.15s linear;\n  transition: all 0.15s linear; }\n\n.reveal a:hover img {\n  background: rgba(255, 255, 255, 0.2);\n  border-color: #268bd2;\n  box-shadow: 0 0 20px rgba(0, 0, 0, 0.55); }\n\n/*********************************************\n * NAVIGATION CONTROLS\n *********************************************/\n.reveal .controls div.navigate-left, .reveal .controls div.navigate-left.enabled {\n  border-right-color: #268bd2; }\n\n.reveal .controls div.navigate-right, .reveal .controls div.navigate-right.enabled {\n  border-left-color: #268bd2; }\n\n.reveal .controls div.navigate-up, .reveal .controls div.navigate-up.enabled {\n  border-bottom-color: #268bd2; }\n\n.reveal .controls div.navigate-down, .reveal .controls div.navigate-down.enabled {\n  border-top-color: #268bd2; }\n\n.reveal .controls div.navigate-left.enabled:hover {\n  border-right-color: #78bae6; }\n\n.reveal .controls div.navigate-right.enabled:hover {\n  border-left-color: #78bae6; }\n\n.reveal .controls div.navigate-up.enabled:hover {\n  border-bottom-color: #78bae6; }\n\n.reveal .controls div.navigate-down.enabled:hover {\n  border-top-color: #78bae6; }\n\n/*********************************************\n * PROGRESS BAR\n *********************************************/\n.reveal .progress {\n  background: rgba(0, 0, 0, 0.2); }\n\n.reveal .progress span {\n  background: #268bd2;\n  -webkit-transition: width 800ms cubic-bezier(0.26, 0.86, 0.44, 0.985);\n  -moz-transition: width 800ms cubic-bezier(0.26, 0.86, 0.44, 0.985);\n  transition: width 800ms cubic-bezier(0.26, 0.86, 0.44, 0.985); }\n\n/*********************************************\n * SLIDE NUMBER\n *********************************************/\n.reveal .slide-number {\n  color: #268bd2; }\n"
  },
  {
    "path": "presentation/css/theme/night.css",
    "content": "@import url(https://fonts.googleapis.com/css?family=Montserrat:700);\n@import url(https://fonts.googleapis.com/css?family=Open+Sans:400,700,400italic,700italic);\n/**\n * Black theme for reveal.js.\n *\n * Copyright (C) 2011-2012 Hakim El Hattab, http://hakim.se\n */\n/*********************************************\n * GLOBAL STYLES\n *********************************************/\nbody {\n  background: #111;\n  background-color: #111; }\n\n.reveal {\n  font-family: 'Open Sans', sans-serif;\n  font-size: 30px;\n  font-weight: normal;\n  color: #eee; }\n\n::selection {\n  color: #fff;\n  background: #e7ad52;\n  text-shadow: none; }\n\n.reveal .slides > section, .reveal .slides > section > section {\n  line-height: 1.3;\n  font-weight: inherit; }\n\n/*********************************************\n * HEADERS\n *********************************************/\n.reveal h1, .reveal h2, .reveal h3, .reveal h4, .reveal h5, .reveal h6 {\n  margin: 0 0 20px 0;\n  color: #eee;\n  font-family: 'Montserrat', Impact, sans-serif;\n  font-weight: normal;\n  line-height: 1.2;\n  letter-spacing: -0.03em;\n  text-transform: none;\n  text-shadow: none;\n  word-wrap: break-word; }\n\n.reveal h1 {\n  font-size: 3.77em; }\n\n.reveal h2 {\n  font-size: 2.11em; }\n\n.reveal h3 {\n  font-size: 1.55em; }\n\n.reveal h4 {\n  font-size: 1em; }\n\n.reveal h1 {\n  text-shadow: none; }\n\n/*********************************************\n * OTHER\n *********************************************/\n.reveal p {\n  margin: 20px 0;\n  line-height: 1.3; }\n\n/* Ensure certain elements are never larger than the slide itself */\n.reveal img, .reveal video, .reveal iframe {\n  max-width: 95%;\n  max-height: 95%; }\n\n.reveal strong, .reveal b {\n  font-weight: bold; }\n\n.reveal em {\n  font-style: italic; }\n\n.reveal ol, .reveal dl, .reveal ul {\n  display: inline-block;\n  text-align: left;\n  margin: 0 0 0 1em; }\n\n.reveal ol {\n  list-style-type: decimal; }\n\n.reveal ul {\n  list-style-type: disc; }\n\n.reveal ul ul {\n  list-style-type: square; }\n\n.reveal ul ul ul {\n  list-style-type: circle; }\n\n.reveal ul ul, .reveal ul ol, .reveal ol ol, .reveal ol ul {\n  display: block;\n  margin-left: 40px; }\n\n.reveal dt {\n  font-weight: bold; }\n\n.reveal dd {\n  margin-left: 40px; }\n\n.reveal q, .reveal blockquote {\n  quotes: none; }\n\n.reveal blockquote {\n  display: block;\n  position: relative;\n  width: 70%;\n  margin: 20px auto;\n  padding: 5px;\n  font-style: italic;\n  background: rgba(255, 255, 255, 0.05);\n  box-shadow: 0px 0px 2px rgba(0, 0, 0, 0.2); }\n\n.reveal blockquote p:first-child, .reveal blockquote p:last-child {\n  display: inline-block; }\n\n.reveal q {\n  font-style: italic; }\n\n.reveal pre {\n  display: block;\n  position: relative;\n  width: 90%;\n  margin: 20px auto;\n  text-align: left;\n  font-size: 0.55em;\n  font-family: monospace;\n  line-height: 1.2em;\n  word-wrap: break-word;\n  box-shadow: 0px 0px 6px rgba(0, 0, 0, 0.3); }\n\n.reveal code {\n  font-family: monospace; }\n\n.reveal pre code {\n  display: block;\n  padding: 5px;\n  overflow: auto;\n  max-height: 400px;\n  word-wrap: normal;\n  background: #3F3F3F;\n  color: #DCDCDC; }\n\n.reveal table {\n  margin: auto;\n  border-collapse: collapse;\n  border-spacing: 0; }\n\n.reveal table th {\n  font-weight: bold; }\n\n.reveal table th, .reveal table td {\n  text-align: left;\n  padding: 0.2em 0.5em 0.2em 0.5em;\n  border-bottom: 1px solid; }\n\n.reveal table tr:last-child td {\n  border-bottom: none; }\n\n.reveal sup {\n  vertical-align: super; }\n\n.reveal sub {\n  vertical-align: sub; }\n\n.reveal small {\n  display: inline-block;\n  font-size: 0.6em;\n  line-height: 1.2em;\n  vertical-align: top; }\n\n.reveal small * {\n  vertical-align: top; }\n\n/*********************************************\n * LINKS\n *********************************************/\n.reveal a {\n  color: #e7ad52;\n  text-decoration: none;\n  -webkit-transition: color 0.15s ease;\n  -moz-transition: color 0.15s ease;\n  transition: color 0.15s ease; }\n\n.reveal a:hover {\n  color: #f3d7ac;\n  text-shadow: none;\n  border: none; }\n\n.reveal .roll span:after {\n  color: #fff;\n  background: #d0881d; }\n\n/*********************************************\n * IMAGES\n *********************************************/\n.reveal section img {\n  margin: 15px 0px;\n  background: rgba(255, 255, 255, 0.12);\n  border: 4px solid #eee;\n  box-shadow: 0 0 10px rgba(0, 0, 0, 0.15); }\n\n.reveal a img {\n  -webkit-transition: all 0.15s linear;\n  -moz-transition: all 0.15s linear;\n  transition: all 0.15s linear; }\n\n.reveal a:hover img {\n  background: rgba(255, 255, 255, 0.2);\n  border-color: #e7ad52;\n  box-shadow: 0 0 20px rgba(0, 0, 0, 0.55); }\n\n/*********************************************\n * NAVIGATION CONTROLS\n *********************************************/\n.reveal .controls div.navigate-left, .reveal .controls div.navigate-left.enabled {\n  border-right-color: #e7ad52; }\n\n.reveal .controls div.navigate-right, .reveal .controls div.navigate-right.enabled {\n  border-left-color: #e7ad52; }\n\n.reveal .controls div.navigate-up, .reveal .controls div.navigate-up.enabled {\n  border-bottom-color: #e7ad52; }\n\n.reveal .controls div.navigate-down, .reveal .controls div.navigate-down.enabled {\n  border-top-color: #e7ad52; }\n\n.reveal .controls div.navigate-left.enabled:hover {\n  border-right-color: #f3d7ac; }\n\n.reveal .controls div.navigate-right.enabled:hover {\n  border-left-color: #f3d7ac; }\n\n.reveal .controls div.navigate-up.enabled:hover {\n  border-bottom-color: #f3d7ac; }\n\n.reveal .controls div.navigate-down.enabled:hover {\n  border-top-color: #f3d7ac; }\n\n/*********************************************\n * PROGRESS BAR\n *********************************************/\n.reveal .progress {\n  background: rgba(0, 0, 0, 0.2); }\n\n.reveal .progress span {\n  background: #e7ad52;\n  -webkit-transition: width 800ms cubic-bezier(0.26, 0.86, 0.44, 0.985);\n  -moz-transition: width 800ms cubic-bezier(0.26, 0.86, 0.44, 0.985);\n  transition: width 800ms cubic-bezier(0.26, 0.86, 0.44, 0.985); }\n\n/*********************************************\n * SLIDE NUMBER\n *********************************************/\n.reveal .slide-number {\n  color: #e7ad52; }\n"
  },
  {
    "path": "presentation/css/theme/serif.css",
    "content": "/**\n * A simple theme for reveal.js presentations, similar\n * to the default theme. The accent color is brown.\n *\n * This theme is Copyright (C) 2012-2013 Owen Versteeg, http://owenversteeg.com - it is MIT licensed.\n */\n.reveal a {\n  line-height: 1.3em; }\n\n/*********************************************\n * GLOBAL STYLES\n *********************************************/\nbody {\n  background: #F0F1EB;\n  background-color: #F0F1EB; }\n\n.reveal {\n  font-family: 'Palatino Linotype', 'Book Antiqua', Palatino, FreeSerif, serif;\n  font-size: 36px;\n  font-weight: normal;\n  color: #000; }\n\n::selection {\n  color: #fff;\n  background: #26351C;\n  text-shadow: none; }\n\n.reveal .slides > section, .reveal .slides > section > section {\n  line-height: 1.3;\n  font-weight: inherit; }\n\n/*********************************************\n * HEADERS\n *********************************************/\n.reveal h1, .reveal h2, .reveal h3, .reveal h4, .reveal h5, .reveal h6 {\n  margin: 0 0 20px 0;\n  color: #383D3D;\n  font-family: 'Palatino Linotype', 'Book Antiqua', Palatino, FreeSerif, serif;\n  font-weight: normal;\n  line-height: 1.2;\n  letter-spacing: normal;\n  text-transform: none;\n  text-shadow: none;\n  word-wrap: break-word; }\n\n.reveal h1 {\n  font-size: 3.77em; }\n\n.reveal h2 {\n  font-size: 2.11em; }\n\n.reveal h3 {\n  font-size: 1.55em; }\n\n.reveal h4 {\n  font-size: 1em; }\n\n.reveal h1 {\n  text-shadow: none; }\n\n/*********************************************\n * OTHER\n *********************************************/\n.reveal p {\n  margin: 20px 0;\n  line-height: 1.3; }\n\n/* Ensure certain elements are never larger than the slide itself */\n.reveal img, .reveal video, .reveal iframe {\n  max-width: 95%;\n  max-height: 95%; }\n\n.reveal strong, .reveal b {\n  font-weight: bold; }\n\n.reveal em {\n  font-style: italic; }\n\n.reveal ol, .reveal dl, .reveal ul {\n  display: inline-block;\n  text-align: left;\n  margin: 0 0 0 1em; }\n\n.reveal ol {\n  list-style-type: decimal; }\n\n.reveal ul {\n  list-style-type: disc; }\n\n.reveal ul ul {\n  list-style-type: square; }\n\n.reveal ul ul ul {\n  list-style-type: circle; }\n\n.reveal ul ul, .reveal ul ol, .reveal ol ol, .reveal ol ul {\n  display: block;\n  margin-left: 40px; }\n\n.reveal dt {\n  font-weight: bold; }\n\n.reveal dd {\n  margin-left: 40px; }\n\n.reveal q, .reveal blockquote {\n  quotes: none; }\n\n.reveal blockquote {\n  display: block;\n  position: relative;\n  width: 70%;\n  margin: 20px auto;\n  padding: 5px;\n  font-style: italic;\n  background: rgba(255, 255, 255, 0.05);\n  box-shadow: 0px 0px 2px rgba(0, 0, 0, 0.2); }\n\n.reveal blockquote p:first-child, .reveal blockquote p:last-child {\n  display: inline-block; }\n\n.reveal q {\n  font-style: italic; }\n\n.reveal pre {\n  display: block;\n  position: relative;\n  width: 90%;\n  margin: 20px auto;\n  text-align: left;\n  font-size: 0.55em;\n  font-family: monospace;\n  line-height: 1.2em;\n  word-wrap: break-word;\n  box-shadow: 0px 0px 6px rgba(0, 0, 0, 0.3); }\n\n.reveal code {\n  font-family: monospace; }\n\n.reveal pre code {\n  display: block;\n  padding: 5px;\n  overflow: auto;\n  max-height: 400px;\n  word-wrap: normal;\n  background: #3F3F3F;\n  color: #DCDCDC; }\n\n.reveal table {\n  margin: auto;\n  border-collapse: collapse;\n  border-spacing: 0; }\n\n.reveal table th {\n  font-weight: bold; }\n\n.reveal table th, .reveal table td {\n  text-align: left;\n  padding: 0.2em 0.5em 0.2em 0.5em;\n  border-bottom: 1px solid; }\n\n.reveal table tr:last-child td {\n  border-bottom: none; }\n\n.reveal sup {\n  vertical-align: super; }\n\n.reveal sub {\n  vertical-align: sub; }\n\n.reveal small {\n  display: inline-block;\n  font-size: 0.6em;\n  line-height: 1.2em;\n  vertical-align: top; }\n\n.reveal small * {\n  vertical-align: top; }\n\n/*********************************************\n * LINKS\n *********************************************/\n.reveal a {\n  color: #51483D;\n  text-decoration: none;\n  -webkit-transition: color 0.15s ease;\n  -moz-transition: color 0.15s ease;\n  transition: color 0.15s ease; }\n\n.reveal a:hover {\n  color: #8b7b69;\n  text-shadow: none;\n  border: none; }\n\n.reveal .roll span:after {\n  color: #fff;\n  background: #25211c; }\n\n/*********************************************\n * IMAGES\n *********************************************/\n.reveal section img {\n  margin: 15px 0px;\n  background: rgba(255, 255, 255, 0.12);\n  border: 4px solid #000;\n  box-shadow: 0 0 10px rgba(0, 0, 0, 0.15); }\n\n.reveal a img {\n  -webkit-transition: all 0.15s linear;\n  -moz-transition: all 0.15s linear;\n  transition: all 0.15s linear; }\n\n.reveal a:hover img {\n  background: rgba(255, 255, 255, 0.2);\n  border-color: #51483D;\n  box-shadow: 0 0 20px rgba(0, 0, 0, 0.55); }\n\n/*********************************************\n * NAVIGATION CONTROLS\n *********************************************/\n.reveal .controls div.navigate-left, .reveal .controls div.navigate-left.enabled {\n  border-right-color: #51483D; }\n\n.reveal .controls div.navigate-right, .reveal .controls div.navigate-right.enabled {\n  border-left-color: #51483D; }\n\n.reveal .controls div.navigate-up, .reveal .controls div.navigate-up.enabled {\n  border-bottom-color: #51483D; }\n\n.reveal .controls div.navigate-down, .reveal .controls div.navigate-down.enabled {\n  border-top-color: #51483D; }\n\n.reveal .controls div.navigate-left.enabled:hover {\n  border-right-color: #8b7b69; }\n\n.reveal .controls div.navigate-right.enabled:hover {\n  border-left-color: #8b7b69; }\n\n.reveal .controls div.navigate-up.enabled:hover {\n  border-bottom-color: #8b7b69; }\n\n.reveal .controls div.navigate-down.enabled:hover {\n  border-top-color: #8b7b69; }\n\n/*********************************************\n * PROGRESS BAR\n *********************************************/\n.reveal .progress {\n  background: rgba(0, 0, 0, 0.2); }\n\n.reveal .progress span {\n  background: #51483D;\n  -webkit-transition: width 800ms cubic-bezier(0.26, 0.86, 0.44, 0.985);\n  -moz-transition: width 800ms cubic-bezier(0.26, 0.86, 0.44, 0.985);\n  transition: width 800ms cubic-bezier(0.26, 0.86, 0.44, 0.985); }\n\n/*********************************************\n * SLIDE NUMBER\n *********************************************/\n.reveal .slide-number {\n  color: #51483D; }\n"
  },
  {
    "path": "presentation/css/theme/simple.css",
    "content": "@import url(https://fonts.googleapis.com/css?family=News+Cycle:400,700);\n@import url(https://fonts.googleapis.com/css?family=Lato:400,700,400italic,700italic);\n/**\n * A simple theme for reveal.js presentations, similar\n * to the default theme. The accent color is darkblue.\n *\n * This theme is Copyright (C) 2012 Owen Versteeg, https://github.com/StereotypicalApps. It is MIT licensed.\n * reveal.js is Copyright (C) 2011-2012 Hakim El Hattab, http://hakim.se\n */\n/*********************************************\n * GLOBAL STYLES\n *********************************************/\nbody {\n  background: #fff;\n  background-color: #fff; }\n\n.reveal {\n  font-family: 'Lato', sans-serif;\n  font-size: 36px;\n  font-weight: normal;\n  color: #000; }\n\n::selection {\n  color: #fff;\n  background: rgba(0, 0, 0, 0.99);\n  text-shadow: none; }\n\n.reveal .slides > section, .reveal .slides > section > section {\n  line-height: 1.3;\n  font-weight: inherit; }\n\n/*********************************************\n * HEADERS\n *********************************************/\n.reveal h1, .reveal h2, .reveal h3, .reveal h4, .reveal h5, .reveal h6 {\n  margin: 0 0 20px 0;\n  color: #000;\n  font-family: 'News Cycle', Impact, sans-serif;\n  font-weight: normal;\n  line-height: 1.2;\n  letter-spacing: normal;\n  text-transform: none;\n  text-shadow: none;\n  word-wrap: break-word; }\n\n.reveal h1 {\n  font-size: 3.77em; }\n\n.reveal h2 {\n  font-size: 2.11em; }\n\n.reveal h3 {\n  font-size: 1.55em; }\n\n.reveal h4 {\n  font-size: 1em; }\n\n.reveal h1 {\n  text-shadow: none; }\n\n/*********************************************\n * OTHER\n *********************************************/\n.reveal p {\n  margin: 20px 0;\n  line-height: 1.3; }\n\n/* Ensure certain elements are never larger than the slide itself */\n.reveal img, .reveal video, .reveal iframe {\n  max-width: 95%;\n  max-height: 95%; }\n\n.reveal strong, .reveal b {\n  font-weight: bold; }\n\n.reveal em {\n  font-style: italic; }\n\n.reveal ol, .reveal dl, .reveal ul {\n  display: inline-block;\n  text-align: left;\n  margin: 0 0 0 1em; }\n\n.reveal ol {\n  list-style-type: decimal; }\n\n.reveal ul {\n  list-style-type: disc; }\n\n.reveal ul ul {\n  list-style-type: square; }\n\n.reveal ul ul ul {\n  list-style-type: circle; }\n\n.reveal ul ul, .reveal ul ol, .reveal ol ol, .reveal ol ul {\n  display: block;\n  margin-left: 40px; }\n\n.reveal dt {\n  font-weight: bold; }\n\n.reveal dd {\n  margin-left: 40px; }\n\n.reveal q, .reveal blockquote {\n  quotes: none; }\n\n.reveal blockquote {\n  display: block;\n  position: relative;\n  width: 70%;\n  margin: 20px auto;\n  padding: 5px;\n  font-style: italic;\n  background: rgba(255, 255, 255, 0.05);\n  box-shadow: 0px 0px 2px rgba(0, 0, 0, 0.2); }\n\n.reveal blockquote p:first-child, .reveal blockquote p:last-child {\n  display: inline-block; }\n\n.reveal q {\n  font-style: italic; }\n\n.reveal pre {\n  display: block;\n  position: relative;\n  width: 90%;\n  margin: 20px auto;\n  text-align: left;\n  font-size: 0.55em;\n  font-family: monospace;\n  line-height: 1.2em;\n  word-wrap: break-word;\n  box-shadow: 0px 0px 6px rgba(0, 0, 0, 0.3); }\n\n.reveal code {\n  font-family: monospace; }\n\n.reveal pre code {\n  display: block;\n  padding: 5px;\n  overflow: auto;\n  max-height: 400px;\n  word-wrap: normal;\n  background: #3F3F3F;\n  color: #DCDCDC; }\n\n.reveal table {\n  margin: auto;\n  border-collapse: collapse;\n  border-spacing: 0; }\n\n.reveal table th {\n  font-weight: bold; }\n\n.reveal table th, .reveal table td {\n  text-align: left;\n  padding: 0.2em 0.5em 0.2em 0.5em;\n  border-bottom: 1px solid; }\n\n.reveal table tr:last-child td {\n  border-bottom: none; }\n\n.reveal sup {\n  vertical-align: super; }\n\n.reveal sub {\n  vertical-align: sub; }\n\n.reveal small {\n  display: inline-block;\n  font-size: 0.6em;\n  line-height: 1.2em;\n  vertical-align: top; }\n\n.reveal small * {\n  vertical-align: top; }\n\n/*********************************************\n * LINKS\n *********************************************/\n.reveal a {\n  color: #00008B;\n  text-decoration: none;\n  -webkit-transition: color 0.15s ease;\n  -moz-transition: color 0.15s ease;\n  transition: color 0.15s ease; }\n\n.reveal a:hover {\n  color: #0000f1;\n  text-shadow: none;\n  border: none; }\n\n.reveal .roll span:after {\n  color: #fff;\n  background: #00003f; }\n\n/*********************************************\n * IMAGES\n *********************************************/\n.reveal section img {\n  margin: 15px 0px;\n  background: rgba(255, 255, 255, 0.12);\n  border: 4px solid #000;\n  box-shadow: 0 0 10px rgba(0, 0, 0, 0.15); }\n\n.reveal a img {\n  -webkit-transition: all 0.15s linear;\n  -moz-transition: all 0.15s linear;\n  transition: all 0.15s linear; }\n\n.reveal a:hover img {\n  background: rgba(255, 255, 255, 0.2);\n  border-color: #00008B;\n  box-shadow: 0 0 20px rgba(0, 0, 0, 0.55); }\n\n/*********************************************\n * NAVIGATION CONTROLS\n *********************************************/\n.reveal .controls div.navigate-left, .reveal .controls div.navigate-left.enabled {\n  border-right-color: #00008B; }\n\n.reveal .controls div.navigate-right, .reveal .controls div.navigate-right.enabled {\n  border-left-color: #00008B; }\n\n.reveal .controls div.navigate-up, .reveal .controls div.navigate-up.enabled {\n  border-bottom-color: #00008B; }\n\n.reveal .controls div.navigate-down, .reveal .controls div.navigate-down.enabled {\n  border-top-color: #00008B; }\n\n.reveal .controls div.navigate-left.enabled:hover {\n  border-right-color: #0000f1; }\n\n.reveal .controls div.navigate-right.enabled:hover {\n  border-left-color: #0000f1; }\n\n.reveal .controls div.navigate-up.enabled:hover {\n  border-bottom-color: #0000f1; }\n\n.reveal .controls div.navigate-down.enabled:hover {\n  border-top-color: #0000f1; }\n\n/*********************************************\n * PROGRESS BAR\n *********************************************/\n.reveal .progress {\n  background: rgba(0, 0, 0, 0.2); }\n\n.reveal .progress span {\n  background: #00008B;\n  -webkit-transition: width 800ms cubic-bezier(0.26, 0.86, 0.44, 0.985);\n  -moz-transition: width 800ms cubic-bezier(0.26, 0.86, 0.44, 0.985);\n  transition: width 800ms cubic-bezier(0.26, 0.86, 0.44, 0.985); }\n\n/*********************************************\n * SLIDE NUMBER\n *********************************************/\n.reveal .slide-number {\n  color: #00008B; }\n"
  },
  {
    "path": "presentation/css/theme/sky.css",
    "content": "@import url(https://fonts.googleapis.com/css?family=Quicksand:400,700,400italic,700italic);\n@import url(https://fonts.googleapis.com/css?family=Open+Sans:400italic,700italic,400,700);\n/**\n * Sky theme for reveal.js.\n *\n * Copyright (C) 2011-2012 Hakim El Hattab, http://hakim.se\n */\n.reveal a {\n  line-height: 1.3em; }\n\n/*********************************************\n * GLOBAL STYLES\n *********************************************/\nbody {\n  background: #add9e4;\n  background: -moz-radial-gradient(center, circle cover, #f7fbfc 0%, #add9e4 100%);\n  background: -webkit-gradient(radial, center center, 0px, center center, 100%, color-stop(0%, #f7fbfc), color-stop(100%, #add9e4));\n  background: -webkit-radial-gradient(center, circle cover, #f7fbfc 0%, #add9e4 100%);\n  background: -o-radial-gradient(center, circle cover, #f7fbfc 0%, #add9e4 100%);\n  background: -ms-radial-gradient(center, circle cover, #f7fbfc 0%, #add9e4 100%);\n  background: radial-gradient(center, circle cover, #f7fbfc 0%, #add9e4 100%);\n  background-color: #f7fbfc; }\n\n.reveal {\n  font-family: 'Open Sans', sans-serif;\n  font-size: 36px;\n  font-weight: normal;\n  color: #333; }\n\n::selection {\n  color: #fff;\n  background: #134674;\n  text-shadow: none; }\n\n.reveal .slides > section, .reveal .slides > section > section {\n  line-height: 1.3;\n  font-weight: inherit; }\n\n/*********************************************\n * HEADERS\n *********************************************/\n.reveal h1, .reveal h2, .reveal h3, .reveal h4, .reveal h5, .reveal h6 {\n  margin: 0 0 20px 0;\n  color: #333;\n  font-family: 'Quicksand', sans-serif;\n  font-weight: normal;\n  line-height: 1.2;\n  letter-spacing: -0.08em;\n  text-transform: uppercase;\n  text-shadow: none;\n  word-wrap: break-word; }\n\n.reveal h1 {\n  font-size: 3.77em; }\n\n.reveal h2 {\n  font-size: 2.11em; }\n\n.reveal h3 {\n  font-size: 1.55em; }\n\n.reveal h4 {\n  font-size: 1em; }\n\n.reveal h1 {\n  text-shadow: none; }\n\n/*********************************************\n * OTHER\n *********************************************/\n.reveal p {\n  margin: 20px 0;\n  line-height: 1.3; }\n\n/* Ensure certain elements are never larger than the slide itself */\n.reveal img, .reveal video, .reveal iframe {\n  max-width: 95%;\n  max-height: 95%; }\n\n.reveal strong, .reveal b {\n  font-weight: bold; }\n\n.reveal em {\n  font-style: italic; }\n\n.reveal ol, .reveal dl, .reveal ul {\n  display: inline-block;\n  text-align: left;\n  margin: 0 0 0 1em; }\n\n.reveal ol {\n  list-style-type: decimal; }\n\n.reveal ul {\n  list-style-type: disc; }\n\n.reveal ul ul {\n  list-style-type: square; }\n\n.reveal ul ul ul {\n  list-style-type: circle; }\n\n.reveal ul ul, .reveal ul ol, .reveal ol ol, .reveal ol ul {\n  display: block;\n  margin-left: 40px; }\n\n.reveal dt {\n  font-weight: bold; }\n\n.reveal dd {\n  margin-left: 40px; }\n\n.reveal q, .reveal blockquote {\n  quotes: none; }\n\n.reveal blockquote {\n  display: block;\n  position: relative;\n  width: 70%;\n  margin: 20px auto;\n  padding: 5px;\n  font-style: italic;\n  background: rgba(255, 255, 255, 0.05);\n  box-shadow: 0px 0px 2px rgba(0, 0, 0, 0.2); }\n\n.reveal blockquote p:first-child, .reveal blockquote p:last-child {\n  display: inline-block; }\n\n.reveal q {\n  font-style: italic; }\n\n.reveal pre {\n  display: block;\n  position: relative;\n  width: 90%;\n  margin: 20px auto;\n  text-align: left;\n  font-size: 0.55em;\n  font-family: monospace;\n  line-height: 1.2em;\n  word-wrap: break-word;\n  box-shadow: 0px 0px 6px rgba(0, 0, 0, 0.3); }\n\n.reveal code {\n  font-family: monospace; }\n\n.reveal pre code {\n  display: block;\n  padding: 5px;\n  overflow: auto;\n  max-height: 400px;\n  word-wrap: normal;\n  background: #3F3F3F;\n  color: #DCDCDC; }\n\n.reveal table {\n  margin: auto;\n  border-collapse: collapse;\n  border-spacing: 0; }\n\n.reveal table th {\n  font-weight: bold; }\n\n.reveal table th, .reveal table td {\n  text-align: left;\n  padding: 0.2em 0.5em 0.2em 0.5em;\n  border-bottom: 1px solid; }\n\n.reveal table tr:last-child td {\n  border-bottom: none; }\n\n.reveal sup {\n  vertical-align: super; }\n\n.reveal sub {\n  vertical-align: sub; }\n\n.reveal small {\n  display: inline-block;\n  font-size: 0.6em;\n  line-height: 1.2em;\n  vertical-align: top; }\n\n.reveal small * {\n  vertical-align: top; }\n\n/*********************************************\n * LINKS\n *********************************************/\n.reveal a {\n  color: #3b759e;\n  text-decoration: none;\n  -webkit-transition: color 0.15s ease;\n  -moz-transition: color 0.15s ease;\n  transition: color 0.15s ease; }\n\n.reveal a:hover {\n  color: #74a8cb;\n  text-shadow: none;\n  border: none; }\n\n.reveal .roll span:after {\n  color: #fff;\n  background: #264d66; }\n\n/*********************************************\n * IMAGES\n *********************************************/\n.reveal section img {\n  margin: 15px 0px;\n  background: rgba(255, 255, 255, 0.12);\n  border: 4px solid #333;\n  box-shadow: 0 0 10px rgba(0, 0, 0, 0.15); }\n\n.reveal a img {\n  -webkit-transition: all 0.15s linear;\n  -moz-transition: all 0.15s linear;\n  transition: all 0.15s linear; }\n\n.reveal a:hover img {\n  background: rgba(255, 255, 255, 0.2);\n  border-color: #3b759e;\n  box-shadow: 0 0 20px rgba(0, 0, 0, 0.55); }\n\n/*********************************************\n * NAVIGATION CONTROLS\n *********************************************/\n.reveal .controls div.navigate-left, .reveal .controls div.navigate-left.enabled {\n  border-right-color: #3b759e; }\n\n.reveal .controls div.navigate-right, .reveal .controls div.navigate-right.enabled {\n  border-left-color: #3b759e; }\n\n.reveal .controls div.navigate-up, .reveal .controls div.navigate-up.enabled {\n  border-bottom-color: #3b759e; }\n\n.reveal .controls div.navigate-down, .reveal .controls div.navigate-down.enabled {\n  border-top-color: #3b759e; }\n\n.reveal .controls div.navigate-left.enabled:hover {\n  border-right-color: #74a8cb; }\n\n.reveal .controls div.navigate-right.enabled:hover {\n  border-left-color: #74a8cb; }\n\n.reveal .controls div.navigate-up.enabled:hover {\n  border-bottom-color: #74a8cb; }\n\n.reveal .controls div.navigate-down.enabled:hover {\n  border-top-color: #74a8cb; }\n\n/*********************************************\n * PROGRESS BAR\n *********************************************/\n.reveal .progress {\n  background: rgba(0, 0, 0, 0.2); }\n\n.reveal .progress span {\n  background: #3b759e;\n  -webkit-transition: width 800ms cubic-bezier(0.26, 0.86, 0.44, 0.985);\n  -moz-transition: width 800ms cubic-bezier(0.26, 0.86, 0.44, 0.985);\n  transition: width 800ms cubic-bezier(0.26, 0.86, 0.44, 0.985); }\n\n/*********************************************\n * SLIDE NUMBER\n *********************************************/\n.reveal .slide-number {\n  color: #3b759e; }\n"
  },
  {
    "path": "presentation/css/theme/solarized.css",
    "content": "@import url(../../lib/font/league-gothic/league-gothic.css);\n@import url(https://fonts.googleapis.com/css?family=Lato:400,700,400italic,700italic);\n/**\n * Solarized Light theme for reveal.js.\n * Author: Achim Staebler\n */\n/**\n * Solarized colors by Ethan Schoonover\n */\nhtml * {\n  color-profile: sRGB;\n  rendering-intent: auto; }\n\n/*********************************************\n * GLOBAL STYLES\n *********************************************/\nbody {\n  background: #fdf6e3;\n  background-color: #fdf6e3; }\n\n.reveal {\n  font-family: 'Lato', sans-serif;\n  font-size: 36px;\n  font-weight: normal;\n  color: #657b83; }\n\n::selection {\n  color: #fff;\n  background: #d33682;\n  text-shadow: none; }\n\n.reveal .slides > section, .reveal .slides > section > section {\n  line-height: 1.3;\n  font-weight: inherit; }\n\n/*********************************************\n * HEADERS\n *********************************************/\n.reveal h1, .reveal h2, .reveal h3, .reveal h4, .reveal h5, .reveal h6 {\n  margin: 0 0 20px 0;\n  color: #586e75;\n  font-family: 'League Gothic', Impact, sans-serif;\n  font-weight: normal;\n  line-height: 1.2;\n  letter-spacing: normal;\n  text-transform: uppercase;\n  text-shadow: none;\n  word-wrap: break-word; }\n\n.reveal h1 {\n  font-size: 3.77em; }\n\n.reveal h2 {\n  font-size: 2.11em; }\n\n.reveal h3 {\n  font-size: 1.55em; }\n\n.reveal h4 {\n  font-size: 1em; }\n\n.reveal h1 {\n  text-shadow: none; }\n\n/*********************************************\n * OTHER\n *********************************************/\n.reveal p {\n  margin: 20px 0;\n  line-height: 1.3; }\n\n/* Ensure certain elements are never larger than the slide itself */\n.reveal img, .reveal video, .reveal iframe {\n  max-width: 95%;\n  max-height: 95%; }\n\n.reveal strong, .reveal b {\n  font-weight: bold; }\n\n.reveal em {\n  font-style: italic; }\n\n.reveal ol, .reveal dl, .reveal ul {\n  display: inline-block;\n  text-align: left;\n  margin: 0 0 0 1em; }\n\n.reveal ol {\n  list-style-type: decimal; }\n\n.reveal ul {\n  list-style-type: disc; }\n\n.reveal ul ul {\n  list-style-type: square; }\n\n.reveal ul ul ul {\n  list-style-type: circle; }\n\n.reveal ul ul, .reveal ul ol, .reveal ol ol, .reveal ol ul {\n  display: block;\n  margin-left: 40px; }\n\n.reveal dt {\n  font-weight: bold; }\n\n.reveal dd {\n  margin-left: 40px; }\n\n.reveal q, .reveal blockquote {\n  quotes: none; }\n\n.reveal blockquote {\n  display: block;\n  position: relative;\n  width: 70%;\n  margin: 20px auto;\n  padding: 5px;\n  font-style: italic;\n  background: rgba(255, 255, 255, 0.05);\n  box-shadow: 0px 0px 2px rgba(0, 0, 0, 0.2); }\n\n.reveal blockquote p:first-child, .reveal blockquote p:last-child {\n  display: inline-block; }\n\n.reveal q {\n  font-style: italic; }\n\n.reveal pre {\n  display: block;\n  position: relative;\n  width: 90%;\n  margin: 20px auto;\n  text-align: left;\n  font-size: 0.55em;\n  font-family: monospace;\n  line-height: 1.2em;\n  word-wrap: break-word;\n  box-shadow: 0px 0px 6px rgba(0, 0, 0, 0.3); }\n\n.reveal code {\n  font-family: monospace; }\n\n.reveal pre code {\n  display: block;\n  padding: 5px;\n  overflow: auto;\n  max-height: 400px;\n  word-wrap: normal;\n  background: #3F3F3F;\n  color: #DCDCDC; }\n\n.reveal table {\n  margin: auto;\n  border-collapse: collapse;\n  border-spacing: 0; }\n\n.reveal table th {\n  font-weight: bold; }\n\n.reveal table th, .reveal table td {\n  text-align: left;\n  padding: 0.2em 0.5em 0.2em 0.5em;\n  border-bottom: 1px solid; }\n\n.reveal table tr:last-child td {\n  border-bottom: none; }\n\n.reveal sup {\n  vertical-align: super; }\n\n.reveal sub {\n  vertical-align: sub; }\n\n.reveal small {\n  display: inline-block;\n  font-size: 0.6em;\n  line-height: 1.2em;\n  vertical-align: top; }\n\n.reveal small * {\n  vertical-align: top; }\n\n/*********************************************\n * LINKS\n *********************************************/\n.reveal a {\n  color: #268bd2;\n  text-decoration: none;\n  -webkit-transition: color 0.15s ease;\n  -moz-transition: color 0.15s ease;\n  transition: color 0.15s ease; }\n\n.reveal a:hover {\n  color: #78bae6;\n  text-shadow: none;\n  border: none; }\n\n.reveal .roll span:after {\n  color: #fff;\n  background: #1a6291; }\n\n/*********************************************\n * IMAGES\n *********************************************/\n.reveal section img {\n  margin: 15px 0px;\n  background: rgba(255, 255, 255, 0.12);\n  border: 4px solid #657b83;\n  box-shadow: 0 0 10px rgba(0, 0, 0, 0.15); }\n\n.reveal a img {\n  -webkit-transition: all 0.15s linear;\n  -moz-transition: all 0.15s linear;\n  transition: all 0.15s linear; }\n\n.reveal a:hover img {\n  background: rgba(255, 255, 255, 0.2);\n  border-color: #268bd2;\n  box-shadow: 0 0 20px rgba(0, 0, 0, 0.55); }\n\n/*********************************************\n * NAVIGATION CONTROLS\n *********************************************/\n.reveal .controls div.navigate-left, .reveal .controls div.navigate-left.enabled {\n  border-right-color: #268bd2; }\n\n.reveal .controls div.navigate-right, .reveal .controls div.navigate-right.enabled {\n  border-left-color: #268bd2; }\n\n.reveal .controls div.navigate-up, .reveal .controls div.navigate-up.enabled {\n  border-bottom-color: #268bd2; }\n\n.reveal .controls div.navigate-down, .reveal .controls div.navigate-down.enabled {\n  border-top-color: #268bd2; }\n\n.reveal .controls div.navigate-left.enabled:hover {\n  border-right-color: #78bae6; }\n\n.reveal .controls div.navigate-right.enabled:hover {\n  border-left-color: #78bae6; }\n\n.reveal .controls div.navigate-up.enabled:hover {\n  border-bottom-color: #78bae6; }\n\n.reveal .controls div.navigate-down.enabled:hover {\n  border-top-color: #78bae6; }\n\n/*********************************************\n * PROGRESS BAR\n *********************************************/\n.reveal .progress {\n  background: rgba(0, 0, 0, 0.2); }\n\n.reveal .progress span {\n  background: #268bd2;\n  -webkit-transition: width 800ms cubic-bezier(0.26, 0.86, 0.44, 0.985);\n  -moz-transition: width 800ms cubic-bezier(0.26, 0.86, 0.44, 0.985);\n  transition: width 800ms cubic-bezier(0.26, 0.86, 0.44, 0.985); }\n\n/*********************************************\n * SLIDE NUMBER\n *********************************************/\n.reveal .slide-number {\n  color: #268bd2; }\n"
  },
  {
    "path": "presentation/css/theme/source/beige.scss",
    "content": "/**\n * Beige theme for reveal.js.\n *\n * Copyright (C) 2011-2012 Hakim El Hattab, http://hakim.se\n */\n\n\n// Default mixins and settings -----------------\n@import \"../template/mixins\";\n@import \"../template/settings\";\n// ---------------------------------------------\n\n\n\n// Include theme-specific fonts\n@import url(../../lib/font/league-gothic/league-gothic.css);\n@import url(https://fonts.googleapis.com/css?family=Lato:400,700,400italic,700italic);\n\n\n// Override theme settings (see ../template/settings.scss)\n$mainColor: #333;\n$headingColor: #333;\n$headingTextShadow: none;\n$backgroundColor: #f7f3de;\n$linkColor: #8b743d;\n$linkColorHover: lighten( $linkColor, 20% );\n$selectionBackgroundColor: rgba(79, 64, 28, 0.99);\n$heading1TextShadow: 0 1px 0 #ccc, 0 2px 0 #c9c9c9, 0 3px 0 #bbb, 0 4px 0 #b9b9b9, 0 5px 0 #aaa, 0 6px 1px rgba(0,0,0,.1), 0 0 5px rgba(0,0,0,.1), 0 1px 3px rgba(0,0,0,.3), 0 3px 5px rgba(0,0,0,.2), 0 5px 10px rgba(0,0,0,.25), 0 20px 20px rgba(0,0,0,.15);\n\n// Background generator\n@mixin bodyBackground() {\n\t@include radial-gradient( rgba(247,242,211,1), rgba(255,255,255,1) );\n}\n\n\n\n// Theme template ------------------------------\n@import \"../template/theme\";\n// ---------------------------------------------"
  },
  {
    "path": "presentation/css/theme/source/black.scss",
    "content": "/**\n * Black theme for reveal.js. This is the opposite of the 'white' theme.\n *\n * Copyright (C) 2015 Hakim El Hattab, http://hakim.se\n */\n\n\n// Default mixins and settings -----------------\n@import \"../template/mixins\";\n@import \"../template/settings\";\n// ---------------------------------------------\n\n\n// Include theme-specific fonts\n@import url(../../lib/font/source-sans-pro/source-sans-pro.css);\n\n\n// Override theme settings (see ../template/settings.scss)\n$backgroundColor: #222;\n\n$mainColor: #fff;\n$headingColor: #fff;\n\n$mainFontSize: 38px;\n$mainFont: 'Source Sans Pro', Helvetica, sans-serif;\n$headingFont: 'Source Sans Pro', Helvetica, sans-serif;\n$headingTextShadow: none;\n$headingLetterSpacing: normal;\n$headingTextTransform: uppercase;\n$headingFontWeight: 600;\n$linkColor: #42affa;\n$linkColorHover: lighten( $linkColor, 15% );\n$selectionBackgroundColor: lighten( $linkColor, 25% );\n\n$heading1Size: 2.5em;\n$heading2Size: 1.6em;\n$heading3Size: 1.3em;\n$heading4Size: 1.0em;\n\nsection.has-light-background {\n\t&, h1, h2, h3, h4, h5, h6 {\n\t\tcolor: #222;\n\t}\n}\n\n\n// Theme template ------------------------------\n@import \"../template/theme\";\n// ---------------------------------------------"
  },
  {
    "path": "presentation/css/theme/source/blood.scss",
    "content": "/**\n * Blood theme for reveal.js\n * Author: Walther http://github.com/Walther\n *\n * Designed to be used with highlight.js theme\n * \"monokai_sublime.css\" available from\n * https://github.com/isagalaev/highlight.js/\n *\n * For other themes, change $codeBackground accordingly.\n *\n */\n\n // Default mixins and settings -----------------\n@import \"../template/mixins\";\n@import \"../template/settings\";\n// ---------------------------------------------\n\n// Include theme-specific fonts\n\n@import url(https://fonts.googleapis.com/css?family=Ubuntu:300,700,300italic,700italic);\n\n// Colors used in the theme\n$blood: #a23;\n$coal: #222;\n$codeBackground: #23241f;\n\n// Main text\n$mainFont: Ubuntu, 'sans-serif';\n$mainFontSize: 36px;\n$mainColor: #eee;\n\n// Headings\n$headingFont: Ubuntu, 'sans-serif';\n$headingTextShadow: 2px 2px 2px $coal;\n\n// h1 shadow, borrowed humbly from \n// (c) Default theme by Hakim El Hattab\n$heading1TextShadow: 0 1px 0 #ccc, 0 2px 0 #c9c9c9, 0 3px 0 #bbb, 0 4px 0 #b9b9b9, 0 5px 0 #aaa, 0 6px 1px rgba(0,0,0,.1), 0 0 5px rgba(0,0,0,.1), 0 1px 3px rgba(0,0,0,.3), 0 3px 5px rgba(0,0,0,.2), 0 5px 10px rgba(0,0,0,.25), 0 20px 20px rgba(0,0,0,.15);\n\n// Links\n$linkColor: $blood;\n$linkColorHover: lighten( $linkColor, 20% );\n\n// Text selection\n$selectionBackgroundColor: $blood;\n$selectionColor: #fff;\n\n// Background generator\n@mixin bodyBackground() {\n    @include radial-gradient( $coal, lighten( $coal, 25% ) );\n}\n\n// Theme template ------------------------------\n@import \"../template/theme\";\n// ---------------------------------------------\n\n// some overrides after theme template import\n\n.reveal p {\n    font-weight: 300;\n    text-shadow: 1px 1px $coal;\n}\n\n.reveal h1, \n.reveal h2,\n.reveal h3,\n.reveal h4,\n.reveal h5,\n.reveal h6 {\n    font-weight: 700;\n}\n\n.reveal a,\n.reveal a:hover {\n    text-shadow: 2px 2px 2px #000;\n}\n\n.reveal small a,\n.reveal small a:hover {\n    text-shadow: 1px 1px 1px #000;\n}\n\n.reveal p code {\n    background-color: $codeBackground;\n    display: inline-block;\n    border-radius: 7px;\n}\n\n.reveal small code {\n    vertical-align: baseline;\n}"
  },
  {
    "path": "presentation/css/theme/source/league.scss",
    "content": "/**\n * League theme for reveal.js.\n *\n * This was the default theme pre-3.0.0.\n *\n * Copyright (C) 2011-2012 Hakim El Hattab, http://hakim.se\n */\n\n\n// Default mixins and settings -----------------\n@import \"../template/mixins\";\n@import \"../template/settings\";\n// ---------------------------------------------\n\n\n\n// Include theme-specific fonts\n@import url(../../lib/font/league-gothic/league-gothic.css);\n@import url(https://fonts.googleapis.com/css?family=Lato:400,700,400italic,700italic);\n\n// Override theme settings (see ../template/settings.scss)\n$headingTextShadow: 0px 0px 6px rgba(0,0,0,0.2);\n$heading1TextShadow: 0 1px 0 #ccc, 0 2px 0 #c9c9c9, 0 3px 0 #bbb, 0 4px 0 #b9b9b9, 0 5px 0 #aaa, 0 6px 1px rgba(0,0,0,.1), 0 0 5px rgba(0,0,0,.1), 0 1px 3px rgba(0,0,0,.3), 0 3px 5px rgba(0,0,0,.2), 0 5px 10px rgba(0,0,0,.25), 0 20px 20px rgba(0,0,0,.15);\n\n// Background generator\n@mixin bodyBackground() {\n\t@include radial-gradient( rgba(28,30,32,1), rgba(85,90,95,1) );\n}\n\n\n\n// Theme template ------------------------------\n@import \"../template/theme\";\n// ---------------------------------------------"
  },
  {
    "path": "presentation/css/theme/source/moon.scss",
    "content": "/**\n * Solarized Dark theme for reveal.js.\n * Author: Achim Staebler\n */\n\n\n// Default mixins and settings -----------------\n@import \"../template/mixins\";\n@import \"../template/settings\";\n// ---------------------------------------------\n\n\n\n// Include theme-specific fonts\n@import url(../../lib/font/league-gothic/league-gothic.css);\n@import url(https://fonts.googleapis.com/css?family=Lato:400,700,400italic,700italic);\n\n/**\n * Solarized colors by Ethan Schoonover\n */\nhtml * {\n\tcolor-profile: sRGB;\n\trendering-intent: auto;\n}\n\n// Solarized colors\n$base03:    #002b36;\n$base02:    #073642;\n$base01:    #586e75;\n$base00:    #657b83;\n$base0:     #839496;\n$base1:     #93a1a1;\n$base2:     #eee8d5;\n$base3:     #fdf6e3;\n$yellow:    #b58900;\n$orange:    #cb4b16;\n$red:       #dc322f;\n$magenta:   #d33682;\n$violet:    #6c71c4;\n$blue:      #268bd2;\n$cyan:      #2aa198;\n$green:     #859900;\n\n// Override theme settings (see ../template/settings.scss)\n$mainColor: $base1;\n$headingColor: $base2;\n$headingTextShadow: none;\n$backgroundColor: $base03;\n$linkColor: $blue;\n$linkColorHover: lighten( $linkColor, 20% );\n$selectionBackgroundColor: $magenta;\n\n\n\n// Theme template ------------------------------\n@import \"../template/theme\";\n// ---------------------------------------------\n"
  },
  {
    "path": "presentation/css/theme/source/night.scss",
    "content": "/**\n * Black theme for reveal.js.\n *\n * Copyright (C) 2011-2012 Hakim El Hattab, http://hakim.se\n */\n\n\n// Default mixins and settings -----------------\n@import \"../template/mixins\";\n@import \"../template/settings\";\n// ---------------------------------------------\n\n\n// Include theme-specific fonts\n@import url(https://fonts.googleapis.com/css?family=Montserrat:700);\n@import url(https://fonts.googleapis.com/css?family=Open+Sans:400,700,400italic,700italic);\n\n\n// Override theme settings (see ../template/settings.scss)\n$backgroundColor: #111;\n\n$mainFont: 'Open Sans', sans-serif;\n$linkColor: #e7ad52;\n$linkColorHover: lighten( $linkColor, 20% );\n$headingFont: 'Montserrat', Impact, sans-serif;\n$headingTextShadow: none;\n$headingLetterSpacing: -0.03em;\n$headingTextTransform: none;\n$selectionBackgroundColor: #e7ad52;\n$mainFontSize: 30px;\n\n\n// Theme template ------------------------------\n@import \"../template/theme\";\n// ---------------------------------------------"
  },
  {
    "path": "presentation/css/theme/source/serif.scss",
    "content": "/**\n * A simple theme for reveal.js presentations, similar\n * to the default theme. The accent color is brown.\n *\n * This theme is Copyright (C) 2012-2013 Owen Versteeg, http://owenversteeg.com - it is MIT licensed.\n */\n\n\n// Default mixins and settings -----------------\n@import \"../template/mixins\";\n@import \"../template/settings\";\n// ---------------------------------------------\n\n\n\n// Override theme settings (see ../template/settings.scss)\n$mainFont: 'Palatino Linotype', 'Book Antiqua', Palatino, FreeSerif, serif;\n$mainColor: #000;\n$headingFont: 'Palatino Linotype', 'Book Antiqua', Palatino, FreeSerif, serif;\n$headingColor: #383D3D;\n$headingTextShadow: none;\n$headingTextTransform: none;\n$backgroundColor: #F0F1EB;\n$linkColor: #51483D;\n$linkColorHover: lighten( $linkColor, 20% );\n$selectionBackgroundColor: #26351C;\n\n.reveal a {\n  line-height: 1.3em;\n}\n\n\n// Theme template ------------------------------\n@import \"../template/theme\";\n// ---------------------------------------------\n"
  },
  {
    "path": "presentation/css/theme/source/simple.scss",
    "content": "/**\n * A simple theme for reveal.js presentations, similar\n * to the default theme. The accent color is darkblue.\n *\n * This theme is Copyright (C) 2012 Owen Versteeg, https://github.com/StereotypicalApps. It is MIT licensed.\n * reveal.js is Copyright (C) 2011-2012 Hakim El Hattab, http://hakim.se\n */\n\n\n// Default mixins and settings -----------------\n@import \"../template/mixins\";\n@import \"../template/settings\";\n// ---------------------------------------------\n\n\n\n// Include theme-specific fonts\n@import url(https://fonts.googleapis.com/css?family=News+Cycle:400,700);\n@import url(https://fonts.googleapis.com/css?family=Lato:400,700,400italic,700italic);\n\n\n// Override theme settings (see ../template/settings.scss)\n$mainFont: 'Lato', sans-serif;\n$mainColor: #000;\n$headingFont: 'News Cycle', Impact, sans-serif;\n$headingColor: #000;\n$headingTextShadow: none;\n$headingTextTransform: none;\n$backgroundColor: #fff;\n$linkColor: #00008B;\n$linkColorHover: lighten( $linkColor, 20% );\n$selectionBackgroundColor: rgba(0, 0, 0, 0.99);\n\n\n\n// Theme template ------------------------------\n@import \"../template/theme\";\n// ---------------------------------------------"
  },
  {
    "path": "presentation/css/theme/source/sky.scss",
    "content": "/**\n * Sky theme for reveal.js.\n *\n * Copyright (C) 2011-2012 Hakim El Hattab, http://hakim.se\n */\n\n\n// Default mixins and settings -----------------\n@import \"../template/mixins\";\n@import \"../template/settings\";\n// ---------------------------------------------\n\n\n\n// Include theme-specific fonts\n@import url(https://fonts.googleapis.com/css?family=Quicksand:400,700,400italic,700italic);\n@import url(https://fonts.googleapis.com/css?family=Open+Sans:400italic,700italic,400,700);\n\n\n// Override theme settings (see ../template/settings.scss)\n$mainFont: 'Open Sans', sans-serif;\n$mainColor: #333;\n$headingFont: 'Quicksand', sans-serif;\n$headingColor: #333;\n$headingLetterSpacing: -0.08em;\n$headingTextShadow: none;\n$backgroundColor: #f7fbfc;\n$linkColor: #3b759e;\n$linkColorHover: lighten( $linkColor, 20% );\n$selectionBackgroundColor: #134674;\n\n// Fix links so they are not cut off\n.reveal a {\n\tline-height: 1.3em;\n}\n\n// Background generator\n@mixin bodyBackground() {\n\t@include radial-gradient( #add9e4, #f7fbfc );\n}\n\n\n\n// Theme template ------------------------------\n@import \"../template/theme\";\n// ---------------------------------------------\n"
  },
  {
    "path": "presentation/css/theme/source/solarized.scss",
    "content": "/**\n * Solarized Light theme for reveal.js.\n * Author: Achim Staebler\n */\n\n\n// Default mixins and settings -----------------\n@import \"../template/mixins\";\n@import \"../template/settings\";\n// ---------------------------------------------\n\n\n\n// Include theme-specific fonts\n@import url(../../lib/font/league-gothic/league-gothic.css);\n@import url(https://fonts.googleapis.com/css?family=Lato:400,700,400italic,700italic);\n\n\n/**\n * Solarized colors by Ethan Schoonover\n */\nhtml * {\n\tcolor-profile: sRGB;\n\trendering-intent: auto;\n}\n\n// Solarized colors\n$base03:    #002b36;\n$base02:    #073642;\n$base01:    #586e75;\n$base00:    #657b83;\n$base0:     #839496;\n$base1:     #93a1a1;\n$base2:     #eee8d5;\n$base3:     #fdf6e3;\n$yellow:    #b58900;\n$orange:    #cb4b16;\n$red:       #dc322f;\n$magenta:   #d33682;\n$violet:    #6c71c4;\n$blue:      #268bd2;\n$cyan:      #2aa198;\n$green:     #859900;\n\n// Override theme settings (see ../template/settings.scss)\n$mainColor: $base00;\n$headingColor: $base01;\n$headingTextShadow: none;\n$backgroundColor: $base3;\n$linkColor: $blue;\n$linkColorHover: lighten( $linkColor, 20% );\n$selectionBackgroundColor: $magenta;\n\n// Background generator\n// @mixin bodyBackground() {\n// \t@include radial-gradient( rgba($base3,1), rgba(lighten($base3, 20%),1) );\n// }\n\n\n\n// Theme template ------------------------------\n@import \"../template/theme\";\n// ---------------------------------------------\n"
  },
  {
    "path": "presentation/css/theme/source/white.scss",
    "content": "/**\n * White theme for reveal.js. This is the opposite of the 'black' theme.\n *\n * Copyright (C) 2015 Hakim El Hattab, http://hakim.se\n */\n\n\n// Default mixins and settings -----------------\n@import \"../template/mixins\";\n@import \"../template/settings\";\n// ---------------------------------------------\n\n\n// Include theme-specific fonts\n@import url(../../lib/font/source-sans-pro/source-sans-pro.css);\n\n\n// Override theme settings (see ../template/settings.scss)\n$backgroundColor: #fff;\n\n$mainColor: #222;\n$headingColor: #222;\n\n$mainFontSize: 38px;\n$mainFont: 'Source Sans Pro', Helvetica, sans-serif;\n$headingFont: 'Source Sans Pro', Helvetica, sans-serif;\n$headingTextShadow: none;\n$headingLetterSpacing: normal;\n$headingTextTransform: uppercase;\n$headingFontWeight: 600;\n$linkColor: #2a76dd;\n$linkColorHover: lighten( $linkColor, 15% );\n$selectionBackgroundColor: lighten( $linkColor, 25% );\n\n$heading1Size: 2.5em;\n$heading2Size: 1.6em;\n$heading3Size: 1.3em;\n$heading4Size: 1.0em;\n\nsection.has-dark-background {\n\t&, h1, h2, h3, h4, h5, h6 {\n\t\tcolor: #fff;\n\t}\n}\n\n\n// Theme template ------------------------------\n@import \"../template/theme\";\n// ---------------------------------------------"
  },
  {
    "path": "presentation/css/theme/template/mixins.scss",
    "content": "@mixin vertical-gradient( $top, $bottom ) {\n\tbackground: $top;\n\tbackground: -moz-linear-gradient( top, $top 0%, $bottom 100% );\n\tbackground: -webkit-gradient( linear, left top, left bottom, color-stop(0%,$top), color-stop(100%,$bottom) );\n\tbackground: -webkit-linear-gradient( top, $top 0%, $bottom 100% );\n\tbackground: -o-linear-gradient( top, $top 0%, $bottom 100% );\n\tbackground: -ms-linear-gradient( top, $top 0%, $bottom 100% );\n\tbackground: linear-gradient( top, $top 0%, $bottom 100% );\n}\n\n@mixin horizontal-gradient( $top, $bottom ) {\n\tbackground: $top;\n\tbackground: -moz-linear-gradient( left, $top 0%, $bottom 100% );\n\tbackground: -webkit-gradient( linear, left top, right top, color-stop(0%,$top), color-stop(100%,$bottom) );\n\tbackground: -webkit-linear-gradient( left, $top 0%, $bottom 100% );\n\tbackground: -o-linear-gradient( left, $top 0%, $bottom 100% );\n\tbackground: -ms-linear-gradient( left, $top 0%, $bottom 100% );\n\tbackground: linear-gradient( left, $top 0%, $bottom 100% );\n}\n\n@mixin radial-gradient( $outer, $inner, $type: circle ) {\n\tbackground: $outer;\n\tbackground: -moz-radial-gradient( center, $type cover,  $inner 0%, $outer 100% );\n\tbackground: -webkit-gradient( radial, center center, 0px, center center, 100%, color-stop(0%,$inner), color-stop(100%,$outer) );\n\tbackground: -webkit-radial-gradient( center, $type cover,  $inner 0%, $outer 100% );\n\tbackground: -o-radial-gradient( center, $type cover,  $inner 0%, $outer 100% );\n\tbackground: -ms-radial-gradient( center, $type cover,  $inner 0%, $outer 100% );\n\tbackground: radial-gradient( center, $type cover,  $inner 0%, $outer 100% );\n}"
  },
  {
    "path": "presentation/css/theme/template/settings.scss",
    "content": "// Base settings for all themes that can optionally be\n// overridden by the super-theme\n\n// Background of the presentation\n$backgroundColor: #2b2b2b;\n\n// Primary/body text\n$mainFont: 'Lato', sans-serif;\n$mainFontSize: 36px;\n$mainColor: #eee;\n\n// Vertical spacing between blocks of text\n$blockMargin: 20px;\n\n// Headings\n$headingMargin: 0 0 $blockMargin 0;\n$headingFont: 'League Gothic', Impact, sans-serif;\n$headingColor: #eee;\n$headingLineHeight: 1.2;\n$headingLetterSpacing: normal;\n$headingTextTransform: uppercase;\n$headingTextShadow: none;\n$headingFontWeight: normal;\n$heading1TextShadow: $headingTextShadow;\n\n$heading1Size: 3.77em;\n$heading2Size: 2.11em;\n$heading3Size: 1.55em;\n$heading4Size: 1.00em;\n\n// Links and actions\n$linkColor: #13DAEC;\n$linkColorHover: lighten( $linkColor, 20% );\n\n// Text selection\n$selectionBackgroundColor: #FF5E99;\n$selectionColor: #fff;\n\n// Generates the presentation background, can be overridden\n// to return a background image or gradient\n@mixin bodyBackground() {\n\tbackground: $backgroundColor;\n}"
  },
  {
    "path": "presentation/css/theme/template/theme.scss",
    "content": "// Base theme template for reveal.js\n\n/*********************************************\n * GLOBAL STYLES\n *********************************************/\n\nbody {\n\t@include bodyBackground();\n\tbackground-color: $backgroundColor;\n}\n\n.reveal {\n\tfont-family: $mainFont;\n\tfont-size: $mainFontSize;\n\tfont-weight: normal;\n\tcolor: $mainColor;\n}\n\n::selection {\n\tcolor: $selectionColor;\n\tbackground: $selectionBackgroundColor;\n\ttext-shadow: none;\n}\n\n.reveal .slides>section,\n.reveal .slides>section>section {\n\tline-height: 1.3;\n\tfont-weight: inherit;\n}\n\n/*********************************************\n * HEADERS\n *********************************************/\n\n.reveal h1,\n.reveal h2,\n.reveal h3,\n.reveal h4,\n.reveal h5,\n.reveal h6 {\n\tmargin: $headingMargin;\n\tcolor: $headingColor;\n\n\tfont-family: $headingFont;\n\tfont-weight: $headingFontWeight;\n\tline-height: $headingLineHeight;\n\tletter-spacing: $headingLetterSpacing;\n\n\ttext-transform: $headingTextTransform;\n\ttext-shadow: $headingTextShadow;\n\n\tword-wrap: break-word;\n}\n\n.reveal h1 {font-size: $heading1Size; }\n.reveal h2 {font-size: $heading2Size; }\n.reveal h3 {font-size: $heading3Size; }\n.reveal h4 {font-size: $heading4Size; }\n\n.reveal h1 {\n\ttext-shadow: $heading1TextShadow;\n}\n\n\n/*********************************************\n * OTHER\n *********************************************/\n\n.reveal p {\n\tmargin: $blockMargin 0;\n\tline-height: 1.3;\n}\n\n/* Ensure certain elements are never larger than the slide itself */\n.reveal img,\n.reveal video,\n.reveal iframe {\n\tmax-width: 95%;\n\tmax-height: 95%;\n}\n.reveal strong,\n.reveal b {\n\tfont-weight: bold;\n}\n\n.reveal em {\n\tfont-style: italic;\n}\n\n.reveal ol,\n.reveal dl,\n.reveal ul {\n\tdisplay: inline-block;\n\n\ttext-align: left;\n\tmargin: 0 0 0 1em;\n}\n\n.reveal ol {\n\tlist-style-type: decimal;\n}\n\n.reveal ul {\n\tlist-style-type: disc;\n}\n\n.reveal ul ul {\n\tlist-style-type: square;\n}\n\n.reveal ul ul ul {\n\tlist-style-type: circle;\n}\n\n.reveal ul ul,\n.reveal ul ol,\n.reveal ol ol,\n.reveal ol ul {\n\tdisplay: block;\n\tmargin-left: 40px;\n}\n\n.reveal dt {\n\tfont-weight: bold;\n}\n\n.reveal dd {\n\tmargin-left: 40px;\n}\n\n.reveal q,\n.reveal blockquote {\n\tquotes: none;\n}\n\n.reveal blockquote {\n\tdisplay: block;\n\tposition: relative;\n\twidth: 70%;\n\tmargin: $blockMargin auto;\n\tpadding: 5px;\n\n\tfont-style: italic;\n\tbackground: rgba(255, 255, 255, 0.05);\n\tbox-shadow: 0px 0px 2px rgba(0,0,0,0.2);\n}\n\t.reveal blockquote p:first-child,\n\t.reveal blockquote p:last-child {\n\t\tdisplay: inline-block;\n\t}\n\n.reveal q {\n\tfont-style: italic;\n}\n\n.reveal pre {\n\tdisplay: block;\n\tposition: relative;\n\twidth: 90%;\n\tmargin: $blockMargin auto;\n\n\ttext-align: left;\n\tfont-size: 0.55em;\n\tfont-family: monospace;\n\tline-height: 1.2em;\n\n\tword-wrap: break-word;\n\n\tbox-shadow: 0px 0px 6px rgba(0,0,0,0.3);\n}\n.reveal code {\n\tfont-family: monospace;\n}\n\n.reveal pre code {\n\tdisplay: block;\n\tpadding: 5px;\n\toverflow: auto;\n\tmax-height: 400px;\n\tword-wrap: normal;\n\tbackground: #3F3F3F;\n\tcolor: #DCDCDC;\n}\n\n.reveal table {\n\tmargin: auto;\n\tborder-collapse: collapse;\n\tborder-spacing: 0;\n}\n\n.reveal table th {\n\tfont-weight: bold;\n}\n\n.reveal table th,\n.reveal table td {\n\ttext-align: left;\n\tpadding: 0.2em 0.5em 0.2em 0.5em;\n\tborder-bottom: 1px solid;\n}\n\n.reveal table tr:last-child td {\n    border-bottom: none;\n}\n\n.reveal sup {\n\tvertical-align: super;\n}\n.reveal sub {\n\tvertical-align: sub;\n}\n\n.reveal small {\n\tdisplay: inline-block;\n\tfont-size: 0.6em;\n\tline-height: 1.2em;\n\tvertical-align: top;\n}\n\n.reveal small * {\n\tvertical-align: top;\n}\n\n\n/*********************************************\n * LINKS\n *********************************************/\n\n.reveal a {\n\tcolor: $linkColor;\n\ttext-decoration: none;\n\n\t-webkit-transition: color .15s ease;\n\t   -moz-transition: color .15s ease;\n\t        transition: color .15s ease;\n}\n\t.reveal a:hover {\n\t\tcolor: $linkColorHover;\n\n\t\ttext-shadow: none;\n\t\tborder: none;\n\t}\n\n.reveal .roll span:after {\n\tcolor: #fff;\n\tbackground: darken( $linkColor, 15% );\n}\n\n\n/*********************************************\n * IMAGES\n *********************************************/\n\n.reveal section img {\n\tmargin: 15px 0px;\n\tbackground: rgba(255,255,255,0.12);\n\tborder: 4px solid $mainColor;\n\n\tbox-shadow: 0 0 10px rgba(0, 0, 0, 0.15);\n}\n\n\t.reveal a img {\n\t\t-webkit-transition: all .15s linear;\n\t\t   -moz-transition: all .15s linear;\n\t\t        transition: all .15s linear;\n\t}\n\n\t.reveal a:hover img {\n\t\tbackground: rgba(255,255,255,0.2);\n\t\tborder-color: $linkColor;\n\n\t\tbox-shadow: 0 0 20px rgba(0, 0, 0, 0.55);\n\t}\n\n\n/*********************************************\n * NAVIGATION CONTROLS\n *********************************************/\n\n.reveal .controls div.navigate-left,\n.reveal .controls div.navigate-left.enabled {\n\tborder-right-color: $linkColor;\n}\n\n.reveal .controls div.navigate-right,\n.reveal .controls div.navigate-right.enabled {\n\tborder-left-color: $linkColor;\n}\n\n.reveal .controls div.navigate-up,\n.reveal .controls div.navigate-up.enabled {\n\tborder-bottom-color: $linkColor;\n}\n\n.reveal .controls div.navigate-down,\n.reveal .controls div.navigate-down.enabled {\n\tborder-top-color: $linkColor;\n}\n\n.reveal .controls div.navigate-left.enabled:hover {\n\tborder-right-color: $linkColorHover;\n}\n\n.reveal .controls div.navigate-right.enabled:hover {\n\tborder-left-color: $linkColorHover;\n}\n\n.reveal .controls div.navigate-up.enabled:hover {\n\tborder-bottom-color: $linkColorHover;\n}\n\n.reveal .controls div.navigate-down.enabled:hover {\n\tborder-top-color: $linkColorHover;\n}\n\n\n/*********************************************\n * PROGRESS BAR\n *********************************************/\n\n.reveal .progress {\n\tbackground: rgba(0,0,0,0.2);\n}\n\t.reveal .progress span {\n\t\tbackground: $linkColor;\n\n\t\t-webkit-transition: width 800ms cubic-bezier(0.260, 0.860, 0.440, 0.985);\n\t\t   -moz-transition: width 800ms cubic-bezier(0.260, 0.860, 0.440, 0.985);\n\t\t        transition: width 800ms cubic-bezier(0.260, 0.860, 0.440, 0.985);\n\t}\n\n/*********************************************\n * SLIDE NUMBER\n *********************************************/\n.reveal .slide-number {\n  color: $linkColor;\n}\n\n\n"
  },
  {
    "path": "presentation/css/theme/white.css",
    "content": "@import url(../../lib/font/source-sans-pro/source-sans-pro.css);\n/**\n * White theme for reveal.js. This is the opposite of the 'black' theme.\n *\n * Copyright (C) 2015 Hakim El Hattab, http://hakim.se\n */\nsection.has-dark-background, section.has-dark-background h1, section.has-dark-background h2, section.has-dark-background h3, section.has-dark-background h4, section.has-dark-background h5, section.has-dark-background h6 {\n  color: #fff; }\n\n/*********************************************\n * GLOBAL STYLES\n *********************************************/\nbody {\n  background: #fff;\n  background-color: #fff; }\n\n.reveal {\n  font-family: 'Source Sans Pro', Helvetica, sans-serif;\n  font-size: 38px;\n  font-weight: normal;\n  color: #222; }\n\n::selection {\n  color: #fff;\n  background: #98bdef;\n  text-shadow: none; }\n\n.reveal .slides > section, .reveal .slides > section > section {\n  line-height: 1.3;\n  font-weight: inherit; }\n\n/*********************************************\n * HEADERS\n *********************************************/\n.reveal h1, .reveal h2, .reveal h3, .reveal h4, .reveal h5, .reveal h6 {\n  margin: 0 0 20px 0;\n  color: #222;\n  font-family: 'Source Sans Pro', Helvetica, sans-serif;\n  font-weight: 600;\n  line-height: 1.2;\n  letter-spacing: normal;\n  text-transform: uppercase;\n  text-shadow: none;\n  word-wrap: break-word; }\n\n.reveal h1 {\n  font-size: 2.5em; }\n\n.reveal h2 {\n  font-size: 1.6em; }\n\n.reveal h3 {\n  font-size: 1.3em; }\n\n.reveal h4 {\n  font-size: 1em; }\n\n.reveal h1 {\n  text-shadow: none; }\n\n/*********************************************\n * OTHER\n *********************************************/\n.reveal p {\n  margin: 20px 0;\n  line-height: 1.3; }\n\n/* Ensure certain elements are never larger than the slide itself */\n.reveal img, .reveal video, .reveal iframe {\n  max-width: 95%;\n  max-height: 95%; }\n\n.reveal strong, .reveal b {\n  font-weight: bold; }\n\n.reveal em {\n  font-style: italic; }\n\n.reveal ol, .reveal dl, .reveal ul {\n  display: inline-block;\n  text-align: left;\n  margin: 0 0 0 1em; }\n\n.reveal ol {\n  list-style-type: decimal; }\n\n.reveal ul {\n  list-style-type: disc; }\n\n.reveal ul ul {\n  list-style-type: square; }\n\n.reveal ul ul ul {\n  list-style-type: circle; }\n\n.reveal ul ul, .reveal ul ol, .reveal ol ol, .reveal ol ul {\n  display: block;\n  margin-left: 40px; }\n\n.reveal dt {\n  font-weight: bold; }\n\n.reveal dd {\n  margin-left: 40px; }\n\n.reveal q, .reveal blockquote {\n  quotes: none; }\n\n.reveal blockquote {\n  display: block;\n  position: relative;\n  width: 70%;\n  margin: 20px auto;\n  padding: 5px;\n  font-style: italic;\n  background: rgba(255, 255, 255, 0.05);\n  box-shadow: 0px 0px 2px rgba(0, 0, 0, 0.2); }\n\n.reveal blockquote p:first-child, .reveal blockquote p:last-child {\n  display: inline-block; }\n\n.reveal q {\n  font-style: italic; }\n\n.reveal pre {\n  display: block;\n  position: relative;\n  width: 90%;\n  margin: 20px auto;\n  text-align: left;\n  font-size: 0.55em;\n  font-family: monospace;\n  line-height: 1.2em;\n  word-wrap: break-word;\n  box-shadow: 0px 0px 6px rgba(0, 0, 0, 0.3); }\n\n.reveal code {\n  font-family: monospace; }\n\n.reveal pre code {\n  display: block;\n  padding: 5px;\n  overflow: auto;\n  max-height: 400px;\n  word-wrap: normal;\n  background: #3F3F3F;\n  color: #DCDCDC; }\n\n.reveal table {\n  margin: auto;\n  border-collapse: collapse;\n  border-spacing: 0; }\n\n.reveal table th {\n  font-weight: bold; }\n\n.reveal table th, .reveal table td {\n  text-align: left;\n  padding: 0.2em 0.5em 0.2em 0.5em;\n  border-bottom: 1px solid; }\n\n.reveal table tr:last-child td {\n  border-bottom: none; }\n\n.reveal sup {\n  vertical-align: super; }\n\n.reveal sub {\n  vertical-align: sub; }\n\n.reveal small {\n  display: inline-block;\n  font-size: 0.6em;\n  line-height: 1.2em;\n  vertical-align: top; }\n\n.reveal small * {\n  vertical-align: top; }\n\n/*********************************************\n * LINKS\n *********************************************/\n.reveal a {\n  color: #2a76dd;\n  text-decoration: none;\n  -webkit-transition: color 0.15s ease;\n  -moz-transition: color 0.15s ease;\n  transition: color 0.15s ease; }\n\n.reveal a:hover {\n  color: #6ca2e8;\n  text-shadow: none;\n  border: none; }\n\n.reveal .roll span:after {\n  color: #fff;\n  background: #1a54a1; }\n\n/*********************************************\n * IMAGES\n *********************************************/\n.reveal section img {\n  margin: 15px 0px;\n  background: rgba(255, 255, 255, 0.12);\n  border: 4px solid #222;\n  box-shadow: 0 0 10px rgba(0, 0, 0, 0.15); }\n\n.reveal a img {\n  -webkit-transition: all 0.15s linear;\n  -moz-transition: all 0.15s linear;\n  transition: all 0.15s linear; }\n\n.reveal a:hover img {\n  background: rgba(255, 255, 255, 0.2);\n  border-color: #2a76dd;\n  box-shadow: 0 0 20px rgba(0, 0, 0, 0.55); }\n\n/*********************************************\n * NAVIGATION CONTROLS\n *********************************************/\n.reveal .controls div.navigate-left, .reveal .controls div.navigate-left.enabled {\n  border-right-color: #2a76dd; }\n\n.reveal .controls div.navigate-right, .reveal .controls div.navigate-right.enabled {\n  border-left-color: #2a76dd; }\n\n.reveal .controls div.navigate-up, .reveal .controls div.navigate-up.enabled {\n  border-bottom-color: #2a76dd; }\n\n.reveal .controls div.navigate-down, .reveal .controls div.navigate-down.enabled {\n  border-top-color: #2a76dd; }\n\n.reveal .controls div.navigate-left.enabled:hover {\n  border-right-color: #6ca2e8; }\n\n.reveal .controls div.navigate-right.enabled:hover {\n  border-left-color: #6ca2e8; }\n\n.reveal .controls div.navigate-up.enabled:hover {\n  border-bottom-color: #6ca2e8; }\n\n.reveal .controls div.navigate-down.enabled:hover {\n  border-top-color: #6ca2e8; }\n\n/*********************************************\n * PROGRESS BAR\n *********************************************/\n.reveal .progress {\n  background: rgba(0, 0, 0, 0.2); }\n\n.reveal .progress span {\n  background: #2a76dd;\n  -webkit-transition: width 800ms cubic-bezier(0.26, 0.86, 0.44, 0.985);\n  -moz-transition: width 800ms cubic-bezier(0.26, 0.86, 0.44, 0.985);\n  transition: width 800ms cubic-bezier(0.26, 0.86, 0.44, 0.985); }\n\n/*********************************************\n * SLIDE NUMBER\n *********************************************/\n.reveal .slide-number {\n  color: #2a76dd; }\n"
  },
  {
    "path": "presentation/index.html",
    "content": "<!doctype html>\n<html lang=\"en\">\n\n  <head>\n    <meta charset=\"utf-8\">\n\n    <title>Paperless</title>\n\n    <meta name=\"description\" content=\"A breakdown of what's different and why Django is amazeballs\">\n    <meta name=\"author\" content=\"Daniel Quinn\">\n\n    <meta name=\"apple-mobile-web-app-capable\" content=\"yes\" />\n    <meta name=\"apple-mobile-web-app-status-bar-style\" content=\"black-translucent\" />\n\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no, minimal-ui\">\n\n    <link rel=\"stylesheet\" href=\"css/reveal.css\">\n    <link rel=\"stylesheet\" href=\"css/theme/league.css\" id=\"theme\">\n\n    <!-- Code syntax highlighting -->\n    <link rel=\"stylesheet\" href=\"lib/css/zenburn.css\">\n\n    <!-- Printing and PDF exports -->\n    <script>\n      var link = document.createElement('link');\n      link.rel = 'stylesheet';\n      link.type = 'text/css';\n      link.href = window.location.search.match(/print-pdf/gi) ? 'css/print/pdf.css' : 'css/print/paper.css';\n      document.getElementsByTagName('head')[0].appendChild( link );\n    </script>\n\n    <!--[if lt IE 9]>\n    <script src=\"lib/js/html5shiv.js\"></script>\n    <![endif]-->\n\n    <style>\n      .reveal pre code {\n        background-color: rgba(63,63,63,0.8);\n      }\n      li, p {\n        text-shadow: 3px 3px 3px rgb(0, 0, 0);\n      }\n      a.nocolour {\n          color: rgb(255, 255, 255);\n      }\n    </style>\n\n    <link rel=\"stylesheet\" href=\"contrib/font-awesome-4.3.0/css/font-awesome.min.css\">\n\n  </head>\n\n  <body>\n\n    <div class=\"reveal\">\n\n      <!-- Any section element inside of this container is displayed as a slide -->\n      <div class=\"slides\">\n\n        <section>\n          <br />\n          <br />\n          <h1>Paperless</h1>\n          <p><small>\n            <i class=\"fa fa-twitter\"></i> &nbsp; <a class=\"nocolour\" href=\"https://twitter.com/searchingfortao\">@searchingfortao</a>\n            &nbsp; | &nbsp;\n            <i class=\"fa fa-github\"></i> &nbsp; <a class=\"nocolour\" href=\"https://github.com/danielquinn\">danielquinn</a>\n            &nbsp; | &nbsp;\n            <i class=\"fa fa-globe\"></i> &nbsp; <a class=\"nocolour\" href=\"http://danielquinn.org/\">danielquinn.org</a>\n          </small></p>\n          <br />\n        </section>\n\n        <section>\n          <h2>My Inspiration</h2>\n          <img src=\"img/stack.jpg\" style=\"width: 50%;\" /><br />\n        </section>\n\n        <section>\n          <section>\n            <h2>Paper Sucks</h2>\n          </section>\n          <section>\n            <h2>Paper Loves Being Mysterious</h2>\n            <p>There's No Ctrl+F</p>\n          </section>\n          <section>\n            <h2>Paper Hates Your Spine</h2>\n            <p>It's heavy and takes up space</p>\n          </section>\n          <section>\n            <h2>Paper Wants to Breed</h2>\n            <p>Backups? More Paper!</p>\n          </section>\n          <section>\n            <h2>Paper Hates the Planet</h2>\n          </section>\n        </section>\n\n        <section>\n          <h2>It's 2016</h2>\n          <p>We shouldn't even need to use this stuff anymore</p>\n          <p>So I made Paperless</p>\n        </section>\n\n        <section>\n          <h2>What's it Do?</h2>\n          <ul>\n            <li>Consumes documents from a directory, API, or mailbox</li>\n            <li>OCRs them and puts the text in a database</li>\n            <li>Automatically tags the db record based on user-rules</li>\n            <li>Encrypts and stores the original</li>\n          </ul>\n        </section>\n\n        <section>\n          <h2>It's Just a Wrapper</h2>\n          <ul>\n            <li>ImageMagick</li>\n            <li>Tesseract</li>\n            <li>GnuPG</li>\n            <li>Python3/Django</li>\n          </ul>\n        </section>\n\n        <section>\n          <h2>How's it Work?</h2>\n          <section>\n          </section>\n          <section>\n            <h3>1: The Consumer</h3>\n            <p style=\"padding: 1em;\">(Imports documents)</p>\n            <ul>\n              <li>Runs in a loop</li>\n              <li>Reads from a directory</li>\n              <li>Occasionally checking a mailbox</li>\n            </ul>\n          </section>\n          <section>\n            <h3>2: The Webserver</h3>\n            <p style=\"padding: 1em;\">(Lets you find stuff)</p>\n            <ul>\n              <li>Currently the Django Admin (I know)</li>\n              <li>Provides a DRF API</li>\n              <li>Users are building proper UIs</li>\n            </ul>\n          </section>\n        </section>\n\n        <section data-background=\"img/pony.png\">\n          <h2>Demo!</h2>\n          <img src=\"img/kitten.jpg\" style=\"width: 50%;\" />\n        </section>\n\n        <section>\n          <h2>TODO</h2>\n          <p>It works, but it needs polish</p>\n          <ul>\n            <li>The UI is the Django admin</li>\n            <li>Mail consumption is really raw</li>\n            <li>Some sort of plugin architecture?</li>\n            <li>OMG Tests</li>\n          </ul>\n          <aside class=\"notes\">\n            <ul>\n              <li>\n                <strong>Plugin architecture</strong>: there've been requests\n                for some overly custom stuff to happen before and after\n                consumption, but in the UNIX spirit of \"do one job well\", I\n                think this sort of thing is better written as a plugin -- which\n                means I need to figure out a best practise for that.\n              </li>\n            </ul>\n          </aside>\n        </section>\n\n        <section>\n          <h2>Fork Me</h2>\n          <p>\n            <i class=\"fa fa-github\"></i> &nbsp;\n            <a class=\"nocolour\" href=\"https://github.com/the-paperless-project/paperless\">https://github.com/the-paperless-project/paperless</a>\n          </p>\n          <img src=\"img/repo.svg\" style=\"width: 300px;\" /><br />\n        </section>\n\n      </div>\n\n    </div>\n\n    <script src=\"lib/js/head.min.js\"></script>\n    <script src=\"js/reveal.js\"></script>\n\n    <script>\n\n      // Full list of configuration options available at:\n      // https://github.com/hakimel/reveal.js#configuration\n      Reveal.initialize({\n        controls: true,\n        progress: true,\n        history: true,\n        center: true,\n\n        transition: 'convex', // none/fade/slide/convex/concave/zoom\n        backgroundTransition: 'zoom',\n        loop: true,\n\n        // Optional reveal.js plugins\n        dependencies: [\n          { src: 'lib/js/classList.js', condition: function() { return !document.body.classList; } },\n          { src: 'plugin/markdown/marked.js', condition: function() { return !!document.querySelector( '[data-markdown]' ); } },\n          { src: 'plugin/markdown/markdown.js', condition: function() { return !!document.querySelector( '[data-markdown]' ); } },\n          { src: 'plugin/highlight/highlight.js', async: true, condition: function() { return !!document.querySelector( 'pre code' ); }, callback: function() { hljs.initHighlightingOnLoad(); } },\n          { src: 'plugin/zoom-js/zoom.js', async: true },\n          { src: 'plugin/notes/notes.js', async: true }\n        ]\n      });\n\n    </script>\n\n  </body>\n</html>\n"
  },
  {
    "path": "presentation/js/reveal.js",
    "content": "/*!\n * reveal.js\n * http://lab.hakim.se/reveal-js\n * MIT licensed\n *\n * Copyright (C) 2015 Hakim El Hattab, http://hakim.se\n */\n(function( root, factory ) {\n\tif( typeof define === 'function' && define.amd ) {\n\t\t// AMD. Register as an anonymous module.\n\t\tdefine( function() {\n\t\t\troot.Reveal = factory();\n\t\t\treturn root.Reveal;\n\t\t} );\n\t} else if( typeof exports === 'object' ) {\n\t\t// Node. Does not work with strict CommonJS.\n\t\tmodule.exports = factory();\n\t} else {\n\t\t// Browser globals.\n\t\troot.Reveal = factory();\n\t}\n}( this, function() {\n\n\t'use strict';\n\n\tvar Reveal;\n\n\tvar SLIDES_SELECTOR = '.slides section',\n\t\tHORIZONTAL_SLIDES_SELECTOR = '.slides>section',\n\t\tVERTICAL_SLIDES_SELECTOR = '.slides>section.present>section',\n\t\tHOME_SLIDE_SELECTOR = '.slides>section:first-of-type',\n\n\t\t// Configurations defaults, can be overridden at initialization time\n\t\tconfig = {\n\n\t\t\t// The \"normal\" size of the presentation, aspect ratio will be preserved\n\t\t\t// when the presentation is scaled to fit different resolutions\n\t\t\twidth: 960,\n\t\t\theight: 700,\n\n\t\t\t// Factor of the display size that should remain empty around the content\n\t\t\tmargin: 0.1,\n\n\t\t\t// Bounds for smallest/largest possible scale to apply to content\n\t\t\tminScale: 0.2,\n\t\t\tmaxScale: 1.5,\n\n\t\t\t// Display controls in the bottom right corner\n\t\t\tcontrols: true,\n\n\t\t\t// Display a presentation progress bar\n\t\t\tprogress: true,\n\n\t\t\t// Display the page number of the current slide\n\t\t\tslideNumber: false,\n\n\t\t\t// Push each slide change to the browser history\n\t\t\thistory: false,\n\n\t\t\t// Enable keyboard shortcuts for navigation\n\t\t\tkeyboard: true,\n\n\t\t\t// Optional function that blocks keyboard events when retuning false\n\t\t\tkeyboardCondition: null,\n\n\t\t\t// Enable the slide overview mode\n\t\t\toverview: true,\n\n\t\t\t// Vertical centering of slides\n\t\t\tcenter: true,\n\n\t\t\t// Enables touch navigation on devices with touch input\n\t\t\ttouch: true,\n\n\t\t\t// Loop the presentation\n\t\t\tloop: false,\n\n\t\t\t// Change the presentation direction to be RTL\n\t\t\trtl: false,\n\n\t\t\t// Turns fragments on and off globally\n\t\t\tfragments: true,\n\n\t\t\t// Flags if the presentation is running in an embedded mode,\n\t\t\t// i.e. contained within a limited portion of the screen\n\t\t\tembedded: false,\n\n\t\t\t// Flags if we should show a help overlay when the questionmark\n\t\t\t// key is pressed\n\t\t\thelp: true,\n\n\t\t\t// Flags if it should be possible to pause the presentation (blackout)\n\t\t\tpause: true,\n\n\t\t\t// Number of milliseconds between automatically proceeding to the\n\t\t\t// next slide, disabled when set to 0, this value can be overwritten\n\t\t\t// by using a data-autoslide attribute on your slides\n\t\t\tautoSlide: 0,\n\n\t\t\t// Stop auto-sliding after user input\n\t\t\tautoSlideStoppable: true,\n\n\t\t\t// Enable slide navigation via mouse wheel\n\t\t\tmouseWheel: false,\n\n\t\t\t// Apply a 3D roll to links on hover\n\t\t\trollingLinks: false,\n\n\t\t\t// Hides the address bar on mobile devices\n\t\t\thideAddressBar: true,\n\n\t\t\t// Opens links in an iframe preview overlay\n\t\t\tpreviewLinks: false,\n\n\t\t\t// Exposes the reveal.js API through window.postMessage\n\t\t\tpostMessage: true,\n\n\t\t\t// Dispatches all reveal.js events to the parent window through postMessage\n\t\t\tpostMessageEvents: false,\n\n\t\t\t// Focuses body when page changes visiblity to ensure keyboard shortcuts work\n\t\t\tfocusBodyOnPageVisibilityChange: true,\n\n\t\t\t// Transition style\n\t\t\ttransition: 'slide', // none/fade/slide/convex/concave/zoom\n\n\t\t\t// Transition speed\n\t\t\ttransitionSpeed: 'default', // default/fast/slow\n\n\t\t\t// Transition style for full page slide backgrounds\n\t\t\tbackgroundTransition: 'fade', // none/fade/slide/convex/concave/zoom\n\n\t\t\t// Parallax background image\n\t\t\tparallaxBackgroundImage: '', // CSS syntax, e.g. \"a.jpg\"\n\n\t\t\t// Parallax background size\n\t\t\tparallaxBackgroundSize: '', // CSS syntax, e.g. \"3000px 2000px\"\n\n\t\t\t// Number of slides away from the current that are visible\n\t\t\tviewDistance: 3,\n\n\t\t\t// Script dependencies to load\n\t\t\tdependencies: []\n\n\t\t},\n\n\t\t// Flags if reveal.js is loaded (has dispatched the 'ready' event)\n\t\tloaded = false,\n\n\t\t// The horizontal and vertical index of the currently active slide\n\t\tindexh,\n\t\tindexv,\n\n\t\t// The previous and current slide HTML elements\n\t\tpreviousSlide,\n\t\tcurrentSlide,\n\n\t\tpreviousBackground,\n\n\t\t// Slides may hold a data-state attribute which we pick up and apply\n\t\t// as a class to the body. This list contains the combined state of\n\t\t// all current slides.\n\t\tstate = [],\n\n\t\t// The current scale of the presentation (see width/height config)\n\t\tscale = 1,\n\n\t\t// Cached references to DOM elements\n\t\tdom = {},\n\n\t\t// Features supported by the browser, see #checkCapabilities()\n\t\tfeatures = {},\n\n\t\t// Client is a mobile device, see #checkCapabilities()\n\t\tisMobileDevice,\n\n\t\t// Throttles mouse wheel navigation\n\t\tlastMouseWheelStep = 0,\n\n\t\t// Delays updates to the URL due to a Chrome thumbnailer bug\n\t\twriteURLTimeout = 0,\n\n\t\t// Flags if the interaction event listeners are bound\n\t\teventsAreBound = false,\n\n\t\t// The current auto-slide duration\n\t\tautoSlide = 0,\n\n\t\t// Auto slide properties\n\t\tautoSlidePlayer,\n\t\tautoSlideTimeout = 0,\n\t\tautoSlideStartTime = -1,\n\t\tautoSlidePaused = false,\n\n\t\t// Holds information about the currently ongoing touch input\n\t\ttouch = {\n\t\t\tstartX: 0,\n\t\t\tstartY: 0,\n\t\t\tstartSpan: 0,\n\t\t\tstartCount: 0,\n\t\t\tcaptured: false,\n\t\t\tthreshold: 40\n\t\t},\n\n\t\t// Holds information about the keyboard shortcuts\n\t\tkeyboardShortcuts = {\n\t\t\t'N  ,  SPACE':\t\t\t'Next slide',\n\t\t\t'P':\t\t\t\t\t'Previous slide',\n\t\t\t'&#8592;  ,  H':\t\t'Navigate left',\n\t\t\t'&#8594;  ,  L':\t\t'Navigate right',\n\t\t\t'&#8593;  ,  K':\t\t'Navigate up',\n\t\t\t'&#8595;  ,  J':\t\t'Navigate down',\n\t\t\t'Home':\t\t\t\t\t'First slide',\n\t\t\t'End':\t\t\t\t\t'Last slide',\n\t\t\t'B  ,  .':\t\t\t\t'Pause',\n\t\t\t'F':\t\t\t\t\t'Fullscreen',\n\t\t\t'ESC, O':\t\t\t\t'Slide overview'\n\t\t};\n\n\t/**\n\t * Starts up the presentation if the client is capable.\n\t */\n\tfunction initialize( options ) {\n\n\t\tcheckCapabilities();\n\n\t\tif( !features.transforms2d && !features.transforms3d ) {\n\t\t\tdocument.body.setAttribute( 'class', 'no-transforms' );\n\n\t\t\t// Since JS won't be running any further, we need to load all\n\t\t\t// images that were intended to lazy load now\n\t\t\tvar images = document.getElementsByTagName( 'img' );\n\t\t\tfor( var i = 0, len = images.length; i < len; i++ ) {\n\t\t\t\tvar image = images[i];\n\t\t\t\tif( image.getAttribute( 'data-src' ) ) {\n\t\t\t\t\timage.setAttribute( 'src', image.getAttribute( 'data-src' ) );\n\t\t\t\t\timage.removeAttribute( 'data-src' );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// If the browser doesn't support core features we won't be\n\t\t\t// using JavaScript to control the presentation\n\t\t\treturn;\n\t\t}\n\n\t\t// Cache references to key DOM elements\n\t\tdom.wrapper = document.querySelector( '.reveal' );\n\t\tdom.slides = document.querySelector( '.reveal .slides' );\n\n\t\t// Force a layout when the whole page, incl fonts, has loaded\n\t\twindow.addEventListener( 'load', layout, false );\n\n\t\tvar query = Reveal.getQueryHash();\n\n\t\t// Do not accept new dependencies via query config to avoid\n\t\t// the potential of malicious script injection\n\t\tif( typeof query['dependencies'] !== 'undefined' ) delete query['dependencies'];\n\n\t\t// Copy options over to our config object\n\t\textend( config, options );\n\t\textend( config, query );\n\n\t\t// Hide the address bar in mobile browsers\n\t\thideAddressBar();\n\n\t\t// Loads the dependencies and continues to #start() once done\n\t\tload();\n\n\t}\n\n\t/**\n\t * Inspect the client to see what it's capable of, this\n\t * should only happens once per runtime.\n\t */\n\tfunction checkCapabilities() {\n\n\t\tfeatures.transforms3d = 'WebkitPerspective' in document.body.style ||\n\t\t\t\t\t\t\t\t'MozPerspective' in document.body.style ||\n\t\t\t\t\t\t\t\t'msPerspective' in document.body.style ||\n\t\t\t\t\t\t\t\t'OPerspective' in document.body.style ||\n\t\t\t\t\t\t\t\t'perspective' in document.body.style;\n\n\t\tfeatures.transforms2d = 'WebkitTransform' in document.body.style ||\n\t\t\t\t\t\t\t\t'MozTransform' in document.body.style ||\n\t\t\t\t\t\t\t\t'msTransform' in document.body.style ||\n\t\t\t\t\t\t\t\t'OTransform' in document.body.style ||\n\t\t\t\t\t\t\t\t'transform' in document.body.style;\n\n\t\tfeatures.requestAnimationFrameMethod = window.requestAnimationFrame || window.webkitRequestAnimationFrame || window.mozRequestAnimationFrame;\n\t\tfeatures.requestAnimationFrame = typeof features.requestAnimationFrameMethod === 'function';\n\n\t\tfeatures.canvas = !!document.createElement( 'canvas' ).getContext;\n\n\t\tfeatures.touch = !!( 'ontouchstart' in window );\n\n\t\tisMobileDevice = navigator.userAgent.match( /(iphone|ipod|ipad|android)/gi );\n\n\t}\n\n    /**\n     * Loads the dependencies of reveal.js. Dependencies are\n     * defined via the configuration option 'dependencies'\n     * and will be loaded prior to starting/binding reveal.js.\n     * Some dependencies may have an 'async' flag, if so they\n     * will load after reveal.js has been started up.\n     */\n\tfunction load() {\n\n\t\tvar scripts = [],\n\t\t\tscriptsAsync = [],\n\t\t\tscriptsToPreload = 0;\n\n\t\t// Called once synchronous scripts finish loading\n\t\tfunction proceed() {\n\t\t\tif( scriptsAsync.length ) {\n\t\t\t\t// Load asynchronous scripts\n\t\t\t\thead.js.apply( null, scriptsAsync );\n\t\t\t}\n\n\t\t\tstart();\n\t\t}\n\n\t\tfunction loadScript( s ) {\n\t\t\thead.ready( s.src.match( /([\\w\\d_\\-]*)\\.?js$|[^\\\\\\/]*$/i )[0], function() {\n\t\t\t\t// Extension may contain callback functions\n\t\t\t\tif( typeof s.callback === 'function' ) {\n\t\t\t\t\ts.callback.apply( this );\n\t\t\t\t}\n\n\t\t\t\tif( --scriptsToPreload === 0 ) {\n\t\t\t\t\tproceed();\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\n\t\tfor( var i = 0, len = config.dependencies.length; i < len; i++ ) {\n\t\t\tvar s = config.dependencies[i];\n\n\t\t\t// Load if there's no condition or the condition is truthy\n\t\t\tif( !s.condition || s.condition() ) {\n\t\t\t\tif( s.async ) {\n\t\t\t\t\tscriptsAsync.push( s.src );\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tscripts.push( s.src );\n\t\t\t\t}\n\n\t\t\t\tloadScript( s );\n\t\t\t}\n\t\t}\n\n\t\tif( scripts.length ) {\n\t\t\tscriptsToPreload = scripts.length;\n\n\t\t\t// Load synchronous scripts\n\t\t\thead.js.apply( null, scripts );\n\t\t}\n\t\telse {\n\t\t\tproceed();\n\t\t}\n\n\t}\n\n\t/**\n\t * Starts up reveal.js by binding input events and navigating\n\t * to the current URL deeplink if there is one.\n\t */\n\tfunction start() {\n\n\t\t// Make sure we've got all the DOM elements we need\n\t\tsetupDOM();\n\n\t\t// Listen to messages posted to this window\n\t\tsetupPostMessage();\n\n\t\t// Resets all vertical slides so that only the first is visible\n\t\tresetVerticalSlides();\n\n\t\t// Updates the presentation to match the current configuration values\n\t\tconfigure();\n\n\t\t// Read the initial hash\n\t\treadURL();\n\n\t\t// Update all backgrounds\n\t\tupdateBackground( true );\n\n\t\t// Notify listeners that the presentation is ready but use a 1ms\n\t\t// timeout to ensure it's not fired synchronously after #initialize()\n\t\tsetTimeout( function() {\n\t\t\t// Enable transitions now that we're loaded\n\t\t\tdom.slides.classList.remove( 'no-transition' );\n\n\t\t\tloaded = true;\n\n\t\t\tdispatchEvent( 'ready', {\n\t\t\t\t'indexh': indexh,\n\t\t\t\t'indexv': indexv,\n\t\t\t\t'currentSlide': currentSlide\n\t\t\t} );\n\t\t}, 1 );\n\n\t\t// Special setup and config is required when printing to PDF\n\t\tif( isPrintingPDF() ) {\n\t\t\tremoveEventListeners();\n\n\t\t\t// The document needs to have loaded for the PDF layout\n\t\t\t// measurements to be accurate\n\t\t\tif( document.readyState === 'complete' ) {\n\t\t\t\tsetupPDF();\n\t\t\t}\n\t\t\telse {\n\t\t\t\twindow.addEventListener( 'load', setupPDF );\n\t\t\t}\n\t\t}\n\n\t}\n\n\t/**\n\t * Finds and stores references to DOM elements which are\n\t * required by the presentation. If a required element is\n\t * not found, it is created.\n\t */\n\tfunction setupDOM() {\n\n\t\t// Prevent transitions while we're loading\n\t\tdom.slides.classList.add( 'no-transition' );\n\n\t\t// Background element\n\t\tdom.background = createSingletonNode( dom.wrapper, 'div', 'backgrounds', null );\n\n\t\t// Progress bar\n\t\tdom.progress = createSingletonNode( dom.wrapper, 'div', 'progress', '<span></span>' );\n\t\tdom.progressbar = dom.progress.querySelector( 'span' );\n\n\t\t// Arrow controls\n\t\tcreateSingletonNode( dom.wrapper, 'aside', 'controls',\n\t\t\t'<div class=\"navigate-left\"></div>' +\n\t\t\t'<div class=\"navigate-right\"></div>' +\n\t\t\t'<div class=\"navigate-up\"></div>' +\n\t\t\t'<div class=\"navigate-down\"></div>' );\n\n\t\t// Slide number\n\t\tdom.slideNumber = createSingletonNode( dom.wrapper, 'div', 'slide-number', '' );\n\n\t\t// Overlay graphic which is displayed during the paused mode\n\t\tcreateSingletonNode( dom.wrapper, 'div', 'pause-overlay', null );\n\n\t\t// Cache references to elements\n\t\tdom.controls = document.querySelector( '.reveal .controls' );\n\t\tdom.theme = document.querySelector( '#theme' );\n\n\t\tdom.wrapper.setAttribute( 'role', 'application' );\n\n\t\t// There can be multiple instances of controls throughout the page\n\t\tdom.controlsLeft = toArray( document.querySelectorAll( '.navigate-left' ) );\n\t\tdom.controlsRight = toArray( document.querySelectorAll( '.navigate-right' ) );\n\t\tdom.controlsUp = toArray( document.querySelectorAll( '.navigate-up' ) );\n\t\tdom.controlsDown = toArray( document.querySelectorAll( '.navigate-down' ) );\n\t\tdom.controlsPrev = toArray( document.querySelectorAll( '.navigate-prev' ) );\n\t\tdom.controlsNext = toArray( document.querySelectorAll( '.navigate-next' ) );\n\n\t\tdom.statusDiv = createStatusDiv();\n\t}\n\n\t/**\n\t * Creates a hidden div with role aria-live to announce the\n\t * current slide content. Hide the div off-screen to make it\n\t * available only to Assistive Technologies.\n\t */\n\tfunction createStatusDiv() {\n\n\t\tvar statusDiv = document.getElementById( 'aria-status-div' );\n\t\tif( !statusDiv ) {\n\t\t\tstatusDiv = document.createElement( 'div' );\n\t\t\tstatusDiv.style.position = 'absolute';\n\t\t\tstatusDiv.style.height = '1px';\n\t\t\tstatusDiv.style.width = '1px';\n\t\t\tstatusDiv.style.overflow ='hidden';\n\t\t\tstatusDiv.style.clip = 'rect( 1px, 1px, 1px, 1px )';\n\t\t\tstatusDiv.setAttribute( 'id', 'aria-status-div' );\n\t\t\tstatusDiv.setAttribute( 'aria-live', 'polite' );\n\t\t\tstatusDiv.setAttribute( 'aria-atomic','true' );\n\t\t\tdom.wrapper.appendChild( statusDiv );\n\t\t}\n\t\treturn statusDiv;\n\n\t}\n\n\t/**\n\t * Configures the presentation for printing to a static\n\t * PDF.\n\t */\n\tfunction setupPDF() {\n\n\t\tvar slideSize = getComputedSlideSize( window.innerWidth, window.innerHeight );\n\n\t\t// Dimensions of the PDF pages\n\t\tvar pageWidth = Math.floor( slideSize.width * ( 1 + config.margin ) ),\n\t\t\tpageHeight = Math.floor( slideSize.height * ( 1 + config.margin  ) );\n\n\t\t// Dimensions of slides within the pages\n\t\tvar slideWidth = slideSize.width,\n\t\t\tslideHeight = slideSize.height;\n\n\t\t// Let the browser know what page size we want to print\n\t\tinjectStyleSheet( '@page{size:'+ pageWidth +'px '+ pageHeight +'px; margin: 0;}' );\n\n\t\t// Limit the size of certain elements to the dimensions of the slide\n\t\tinjectStyleSheet( '.reveal section>img, .reveal section>video, .reveal section>iframe{max-width: '+ slideWidth +'px; max-height:'+ slideHeight +'px}' );\n\n\t\tdocument.body.classList.add( 'print-pdf' );\n\t\tdocument.body.style.width = pageWidth + 'px';\n\t\tdocument.body.style.height = pageHeight + 'px';\n\n\t\t// Slide and slide background layout\n\t\ttoArray( dom.wrapper.querySelectorAll( SLIDES_SELECTOR ) ).forEach( function( slide ) {\n\n\t\t\t// Vertical stacks are not centred since their section\n\t\t\t// children will be\n\t\t\tif( slide.classList.contains( 'stack' ) === false ) {\n\t\t\t\t// Center the slide inside of the page, giving the slide some margin\n\t\t\t\tvar left = ( pageWidth - slideWidth ) / 2,\n\t\t\t\t\ttop = ( pageHeight - slideHeight ) / 2;\n\n\t\t\t\tvar contentHeight = getAbsoluteHeight( slide );\n\t\t\t\tvar numberOfPages = Math.max( Math.ceil( contentHeight / pageHeight ), 1 );\n\n\t\t\t\t// Center slides vertically\n\t\t\t\tif( numberOfPages === 1 && config.center || slide.classList.contains( 'center' ) ) {\n\t\t\t\t\ttop = Math.max( ( pageHeight - contentHeight ) / 2, 0 );\n\t\t\t\t}\n\n\t\t\t\t// Position the slide inside of the page\n\t\t\t\tslide.style.left = left + 'px';\n\t\t\t\tslide.style.top = top + 'px';\n\t\t\t\tslide.style.width = slideWidth + 'px';\n\n\t\t\t\t// TODO Backgrounds need to be multiplied when the slide\n\t\t\t\t// stretches over multiple pages\n\t\t\t\tvar background = slide.querySelector( '.slide-background' );\n\t\t\t\tif( background ) {\n\t\t\t\t\tbackground.style.width = pageWidth + 'px';\n\t\t\t\t\tbackground.style.height = ( pageHeight * numberOfPages ) + 'px';\n\t\t\t\t\tbackground.style.top = -top + 'px';\n\t\t\t\t\tbackground.style.left = -left + 'px';\n\t\t\t\t}\n\t\t\t}\n\n\t\t} );\n\n\t\t// Show all fragments\n\t\ttoArray( dom.wrapper.querySelectorAll( SLIDES_SELECTOR + ' .fragment' ) ).forEach( function( fragment ) {\n\t\t\tfragment.classList.add( 'visible' );\n\t\t} );\n\n\t}\n\n\t/**\n\t * Creates an HTML element and returns a reference to it.\n\t * If the element already exists the existing instance will\n\t * be returned.\n\t */\n\tfunction createSingletonNode( container, tagname, classname, innerHTML ) {\n\n\t\t// Find all nodes matching the description\n\t\tvar nodes = container.querySelectorAll( '.' + classname );\n\n\t\t// Check all matches to find one which is a direct child of\n\t\t// the specified container\n\t\tfor( var i = 0; i < nodes.length; i++ ) {\n\t\t\tvar testNode = nodes[i];\n\t\t\tif( testNode.parentNode === container ) {\n\t\t\t\treturn testNode;\n\t\t\t}\n\t\t}\n\n\t\t// If no node was found, create it now\n\t\tvar node = document.createElement( tagname );\n\t\tnode.classList.add( classname );\n\t\tif( typeof innerHTML === 'string' ) {\n\t\t\tnode.innerHTML = innerHTML;\n\t\t}\n\t\tcontainer.appendChild( node );\n\n\t\treturn node;\n\n\t}\n\n\t/**\n\t * Creates the slide background elements and appends them\n\t * to the background container. One element is created per\n\t * slide no matter if the given slide has visible background.\n\t */\n\tfunction createBackgrounds() {\n\n\t\tvar printMode = isPrintingPDF();\n\n\t\t// Clear prior backgrounds\n\t\tdom.background.innerHTML = '';\n\t\tdom.background.classList.add( 'no-transition' );\n\n\t\t// Iterate over all horizontal slides\n\t\ttoArray( dom.wrapper.querySelectorAll( HORIZONTAL_SLIDES_SELECTOR ) ).forEach( function( slideh ) {\n\n\t\t\tvar backgroundStack;\n\n\t\t\tif( printMode ) {\n\t\t\t\tbackgroundStack = createBackground( slideh, slideh );\n\t\t\t}\n\t\t\telse {\n\t\t\t\tbackgroundStack = createBackground( slideh, dom.background );\n\t\t\t}\n\n\t\t\t// Iterate over all vertical slides\n\t\t\ttoArray( slideh.querySelectorAll( 'section' ) ).forEach( function( slidev ) {\n\n\t\t\t\tif( printMode ) {\n\t\t\t\t\tcreateBackground( slidev, slidev );\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tcreateBackground( slidev, backgroundStack );\n\t\t\t\t}\n\n\t\t\t\tbackgroundStack.classList.add( 'stack' );\n\n\t\t\t} );\n\n\t\t} );\n\n\t\t// Add parallax background if specified\n\t\tif( config.parallaxBackgroundImage ) {\n\n\t\t\tdom.background.style.backgroundImage = 'url(\"' + config.parallaxBackgroundImage + '\")';\n\t\t\tdom.background.style.backgroundSize = config.parallaxBackgroundSize;\n\n\t\t\t// Make sure the below properties are set on the element - these properties are\n\t\t\t// needed for proper transitions to be set on the element via CSS. To remove\n\t\t\t// annoying background slide-in effect when the presentation starts, apply\n\t\t\t// these properties after short time delay\n\t\t\tsetTimeout( function() {\n\t\t\t\tdom.wrapper.classList.add( 'has-parallax-background' );\n\t\t\t}, 1 );\n\n\t\t}\n\t\telse {\n\n\t\t\tdom.background.style.backgroundImage = '';\n\t\t\tdom.wrapper.classList.remove( 'has-parallax-background' );\n\n\t\t}\n\n\t}\n\n\t/**\n\t * Creates a background for the given slide.\n\t *\n\t * @param {HTMLElement} slide\n\t * @param {HTMLElement} container The element that the background\n\t * should be appended to\n\t */\n\tfunction createBackground( slide, container ) {\n\n\t\tvar data = {\n\t\t\tbackground: slide.getAttribute( 'data-background' ),\n\t\t\tbackgroundSize: slide.getAttribute( 'data-background-size' ),\n\t\t\tbackgroundImage: slide.getAttribute( 'data-background-image' ),\n\t\t\tbackgroundVideo: slide.getAttribute( 'data-background-video' ),\n\t\t\tbackgroundIframe: slide.getAttribute( 'data-background-iframe' ),\n\t\t\tbackgroundColor: slide.getAttribute( 'data-background-color' ),\n\t\t\tbackgroundRepeat: slide.getAttribute( 'data-background-repeat' ),\n\t\t\tbackgroundPosition: slide.getAttribute( 'data-background-position' ),\n\t\t\tbackgroundTransition: slide.getAttribute( 'data-background-transition' )\n\t\t};\n\n\t\tvar element = document.createElement( 'div' );\n\n\t\t// Carry over custom classes from the slide to the background\n\t\telement.className = 'slide-background ' + slide.className.replace( /present|past|future/, '' );\n\n\t\tif( data.background ) {\n\t\t\t// Auto-wrap image urls in url(...)\n\t\t\tif( /^(http|file|\\/\\/)/gi.test( data.background ) || /\\.(svg|png|jpg|jpeg|gif|bmp)$/gi.test( data.background ) ) {\n\t\t\t\tslide.setAttribute( 'data-background-image', data.background );\n\t\t\t}\n\t\t\telse {\n\t\t\t\telement.style.background = data.background;\n\t\t\t}\n\t\t}\n\n\t\t// Create a hash for this combination of background settings.\n\t\t// This is used to determine when two slide backgrounds are\n\t\t// the same.\n\t\tif( data.background || data.backgroundColor || data.backgroundImage || data.backgroundVideo || data.backgroundIframe ) {\n\t\t\telement.setAttribute( 'data-background-hash', data.background +\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tdata.backgroundSize +\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tdata.backgroundImage +\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tdata.backgroundVideo +\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tdata.backgroundIframe +\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tdata.backgroundColor +\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tdata.backgroundRepeat +\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tdata.backgroundPosition +\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tdata.backgroundTransition );\n\t\t}\n\n\t\t// Additional and optional background properties\n\t\tif( data.backgroundSize ) element.style.backgroundSize = data.backgroundSize;\n\t\tif( data.backgroundColor ) element.style.backgroundColor = data.backgroundColor;\n\t\tif( data.backgroundRepeat ) element.style.backgroundRepeat = data.backgroundRepeat;\n\t\tif( data.backgroundPosition ) element.style.backgroundPosition = data.backgroundPosition;\n\t\tif( data.backgroundTransition ) element.setAttribute( 'data-background-transition', data.backgroundTransition );\n\n\t\tcontainer.appendChild( element );\n\n\t\t// If backgrounds are being recreated, clear old classes\n\t\tslide.classList.remove( 'has-dark-background' );\n\t\tslide.classList.remove( 'has-light-background' );\n\n\t\t// If this slide has a background color, add a class that\n\t\t// signals if it is light or dark. If the slide has no background\n\t\t// color, no class will be set\n\t\tvar computedBackgroundColor = window.getComputedStyle( element ).backgroundColor;\n\t\tif( computedBackgroundColor ) {\n\t\t\tvar rgb = colorToRgb( computedBackgroundColor );\n\n\t\t\t// Ignore fully transparent backgrounds. Some browsers return\n\t\t\t// rgba(0,0,0,0) when reading the computed background color of\n\t\t\t// an element with no background\n\t\t\tif( rgb && rgb.a !== 0 ) {\n\t\t\t\tif( colorBrightness( computedBackgroundColor ) < 128 ) {\n\t\t\t\t\tslide.classList.add( 'has-dark-background' );\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tslide.classList.add( 'has-light-background' );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn element;\n\n\t}\n\n\t/**\n\t * Registers a listener to postMessage events, this makes it\n\t * possible to call all reveal.js API methods from another\n\t * window. For example:\n\t *\n\t * revealWindow.postMessage( JSON.stringify({\n\t *   method: 'slide',\n\t *   args: [ 2 ]\n\t * }), '*' );\n\t */\n\tfunction setupPostMessage() {\n\n\t\tif( config.postMessage ) {\n\t\t\twindow.addEventListener( 'message', function ( event ) {\n\t\t\t\tvar data = event.data;\n\n\t\t\t\t// Make sure we're dealing with JSON\n\t\t\t\tif( data.charAt( 0 ) === '{' && data.charAt( data.length - 1 ) === '}' ) {\n\t\t\t\t\tdata = JSON.parse( data );\n\n\t\t\t\t\t// Check if the requested method can be found\n\t\t\t\t\tif( data.method && typeof Reveal[data.method] === 'function' ) {\n\t\t\t\t\t\tReveal[data.method].apply( Reveal, data.args );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}, false );\n\t\t}\n\n\t}\n\n\t/**\n\t * Applies the configuration settings from the config\n\t * object. May be called multiple times.\n\t */\n\tfunction configure( options ) {\n\n\t\tvar numberOfSlides = dom.wrapper.querySelectorAll( SLIDES_SELECTOR ).length;\n\n\t\tdom.wrapper.classList.remove( config.transition );\n\n\t\t// New config options may be passed when this method\n\t\t// is invoked through the API after initialization\n\t\tif( typeof options === 'object' ) extend( config, options );\n\n\t\t// Force linear transition based on browser capabilities\n\t\tif( features.transforms3d === false ) config.transition = 'linear';\n\n\t\tdom.wrapper.classList.add( config.transition );\n\n\t\tdom.wrapper.setAttribute( 'data-transition-speed', config.transitionSpeed );\n\t\tdom.wrapper.setAttribute( 'data-background-transition', config.backgroundTransition );\n\n\t\tdom.controls.style.display = config.controls ? 'block' : 'none';\n\t\tdom.progress.style.display = config.progress ? 'block' : 'none';\n\n\t\tif( config.rtl ) {\n\t\t\tdom.wrapper.classList.add( 'rtl' );\n\t\t}\n\t\telse {\n\t\t\tdom.wrapper.classList.remove( 'rtl' );\n\t\t}\n\n\t\tif( config.center ) {\n\t\t\tdom.wrapper.classList.add( 'center' );\n\t\t}\n\t\telse {\n\t\t\tdom.wrapper.classList.remove( 'center' );\n\t\t}\n\n\t\t// Exit the paused mode if it was configured off\n\t\tif( config.pause === false ) {\n\t\t\tresume();\n\t\t}\n\n\t\tif( config.mouseWheel ) {\n\t\t\tdocument.addEventListener( 'DOMMouseScroll', onDocumentMouseScroll, false ); // FF\n\t\t\tdocument.addEventListener( 'mousewheel', onDocumentMouseScroll, false );\n\t\t}\n\t\telse {\n\t\t\tdocument.removeEventListener( 'DOMMouseScroll', onDocumentMouseScroll, false ); // FF\n\t\t\tdocument.removeEventListener( 'mousewheel', onDocumentMouseScroll, false );\n\t\t}\n\n\t\t// Rolling 3D links\n\t\tif( config.rollingLinks ) {\n\t\t\tenableRollingLinks();\n\t\t}\n\t\telse {\n\t\t\tdisableRollingLinks();\n\t\t}\n\n\t\t// Iframe link previews\n\t\tif( config.previewLinks ) {\n\t\t\tenablePreviewLinks();\n\t\t}\n\t\telse {\n\t\t\tdisablePreviewLinks();\n\t\t\tenablePreviewLinks( '[data-preview-link]' );\n\t\t}\n\n\t\t// Remove existing auto-slide controls\n\t\tif( autoSlidePlayer ) {\n\t\t\tautoSlidePlayer.destroy();\n\t\t\tautoSlidePlayer = null;\n\t\t}\n\n\t\t// Generate auto-slide controls if needed\n\t\tif( numberOfSlides > 1 && config.autoSlide && config.autoSlideStoppable && features.canvas && features.requestAnimationFrame ) {\n\t\t\tautoSlidePlayer = new Playback( dom.wrapper, function() {\n\t\t\t\treturn Math.min( Math.max( ( Date.now() - autoSlideStartTime ) / autoSlide, 0 ), 1 );\n\t\t\t} );\n\n\t\t\tautoSlidePlayer.on( 'click', onAutoSlidePlayerClick );\n\t\t\tautoSlidePaused = false;\n\t\t}\n\n\t\t// When fragments are turned off they should be visible\n\t\tif( config.fragments === false ) {\n\t\t\ttoArray( dom.slides.querySelectorAll( '.fragment' ) ).forEach( function( element ) {\n\t\t\t\telement.classList.add( 'visible' );\n\t\t\t\telement.classList.remove( 'current-fragment' );\n\t\t\t} );\n\t\t}\n\n\t\tsync();\n\n\t}\n\n\t/**\n\t * Binds all event listeners.\n\t */\n\tfunction addEventListeners() {\n\n\t\teventsAreBound = true;\n\n\t\twindow.addEventListener( 'hashchange', onWindowHashChange, false );\n\t\twindow.addEventListener( 'resize', onWindowResize, false );\n\n\t\tif( config.touch ) {\n\t\t\tdom.wrapper.addEventListener( 'touchstart', onTouchStart, false );\n\t\t\tdom.wrapper.addEventListener( 'touchmove', onTouchMove, false );\n\t\t\tdom.wrapper.addEventListener( 'touchend', onTouchEnd, false );\n\n\t\t\t// Support pointer-style touch interaction as well\n\t\t\tif( window.navigator.pointerEnabled ) {\n\t\t\t\t// IE 11 uses un-prefixed version of pointer events\n\t\t\t\tdom.wrapper.addEventListener( 'pointerdown', onPointerDown, false );\n\t\t\t\tdom.wrapper.addEventListener( 'pointermove', onPointerMove, false );\n\t\t\t\tdom.wrapper.addEventListener( 'pointerup', onPointerUp, false );\n\t\t\t}\n\t\t\telse if( window.navigator.msPointerEnabled ) {\n\t\t\t\t// IE 10 uses prefixed version of pointer events\n\t\t\t\tdom.wrapper.addEventListener( 'MSPointerDown', onPointerDown, false );\n\t\t\t\tdom.wrapper.addEventListener( 'MSPointerMove', onPointerMove, false );\n\t\t\t\tdom.wrapper.addEventListener( 'MSPointerUp', onPointerUp, false );\n\t\t\t}\n\t\t}\n\n\t\tif( config.keyboard ) {\n\t\t\tdocument.addEventListener( 'keydown', onDocumentKeyDown, false );\n\t\t\tdocument.addEventListener( 'keypress', onDocumentKeyPress, false );\n\t\t}\n\n\t\tif( config.progress && dom.progress ) {\n\t\t\tdom.progress.addEventListener( 'click', onProgressClicked, false );\n\t\t}\n\n\t\tif( config.focusBodyOnPageVisibilityChange ) {\n\t\t\tvar visibilityChange;\n\n\t\t\tif( 'hidden' in document ) {\n\t\t\t\tvisibilityChange = 'visibilitychange';\n\t\t\t}\n\t\t\telse if( 'msHidden' in document ) {\n\t\t\t\tvisibilityChange = 'msvisibilitychange';\n\t\t\t}\n\t\t\telse if( 'webkitHidden' in document ) {\n\t\t\t\tvisibilityChange = 'webkitvisibilitychange';\n\t\t\t}\n\n\t\t\tif( visibilityChange ) {\n\t\t\t\tdocument.addEventListener( visibilityChange, onPageVisibilityChange, false );\n\t\t\t}\n\t\t}\n\n\t\t// Listen to both touch and click events, in case the device\n\t\t// supports both\n\t\tvar pointerEvents = [ 'touchstart', 'click' ];\n\n\t\t// Only support touch for Android, fixes double navigations in\n\t\t// stock browser\n\t\tif( navigator.userAgent.match( /android/gi ) ) {\n\t\t\tpointerEvents = [ 'touchstart' ];\n\t\t}\n\n\t\tpointerEvents.forEach( function( eventName ) {\n\t\t\tdom.controlsLeft.forEach( function( el ) { el.addEventListener( eventName, onNavigateLeftClicked, false ); } );\n\t\t\tdom.controlsRight.forEach( function( el ) { el.addEventListener( eventName, onNavigateRightClicked, false ); } );\n\t\t\tdom.controlsUp.forEach( function( el ) { el.addEventListener( eventName, onNavigateUpClicked, false ); } );\n\t\t\tdom.controlsDown.forEach( function( el ) { el.addEventListener( eventName, onNavigateDownClicked, false ); } );\n\t\t\tdom.controlsPrev.forEach( function( el ) { el.addEventListener( eventName, onNavigatePrevClicked, false ); } );\n\t\t\tdom.controlsNext.forEach( function( el ) { el.addEventListener( eventName, onNavigateNextClicked, false ); } );\n\t\t} );\n\n\t}\n\n\t/**\n\t * Unbinds all event listeners.\n\t */\n\tfunction removeEventListeners() {\n\n\t\teventsAreBound = false;\n\n\t\tdocument.removeEventListener( 'keydown', onDocumentKeyDown, false );\n\t\tdocument.removeEventListener( 'keypress', onDocumentKeyPress, false );\n\t\twindow.removeEventListener( 'hashchange', onWindowHashChange, false );\n\t\twindow.removeEventListener( 'resize', onWindowResize, false );\n\n\t\tdom.wrapper.removeEventListener( 'touchstart', onTouchStart, false );\n\t\tdom.wrapper.removeEventListener( 'touchmove', onTouchMove, false );\n\t\tdom.wrapper.removeEventListener( 'touchend', onTouchEnd, false );\n\n\t\t// IE11\n\t\tif( window.navigator.pointerEnabled ) {\n\t\t\tdom.wrapper.removeEventListener( 'pointerdown', onPointerDown, false );\n\t\t\tdom.wrapper.removeEventListener( 'pointermove', onPointerMove, false );\n\t\t\tdom.wrapper.removeEventListener( 'pointerup', onPointerUp, false );\n\t\t}\n\t\t// IE10\n\t\telse if( window.navigator.msPointerEnabled ) {\n\t\t\tdom.wrapper.removeEventListener( 'MSPointerDown', onPointerDown, false );\n\t\t\tdom.wrapper.removeEventListener( 'MSPointerMove', onPointerMove, false );\n\t\t\tdom.wrapper.removeEventListener( 'MSPointerUp', onPointerUp, false );\n\t\t}\n\n\t\tif ( config.progress && dom.progress ) {\n\t\t\tdom.progress.removeEventListener( 'click', onProgressClicked, false );\n\t\t}\n\n\t\t[ 'touchstart', 'click' ].forEach( function( eventName ) {\n\t\t\tdom.controlsLeft.forEach( function( el ) { el.removeEventListener( eventName, onNavigateLeftClicked, false ); } );\n\t\t\tdom.controlsRight.forEach( function( el ) { el.removeEventListener( eventName, onNavigateRightClicked, false ); } );\n\t\t\tdom.controlsUp.forEach( function( el ) { el.removeEventListener( eventName, onNavigateUpClicked, false ); } );\n\t\t\tdom.controlsDown.forEach( function( el ) { el.removeEventListener( eventName, onNavigateDownClicked, false ); } );\n\t\t\tdom.controlsPrev.forEach( function( el ) { el.removeEventListener( eventName, onNavigatePrevClicked, false ); } );\n\t\t\tdom.controlsNext.forEach( function( el ) { el.removeEventListener( eventName, onNavigateNextClicked, false ); } );\n\t\t} );\n\n\t}\n\n\t/**\n\t * Extend object a with the properties of object b.\n\t * If there's a conflict, object b takes precedence.\n\t */\n\tfunction extend( a, b ) {\n\n\t\tfor( var i in b ) {\n\t\t\ta[ i ] = b[ i ];\n\t\t}\n\n\t}\n\n\t/**\n\t * Converts the target object to an array.\n\t */\n\tfunction toArray( o ) {\n\n\t\treturn Array.prototype.slice.call( o );\n\n\t}\n\n\t/**\n\t * Utility for deserializing a value.\n\t */\n\tfunction deserialize( value ) {\n\n\t\tif( typeof value === 'string' ) {\n\t\t\tif( value === 'null' ) return null;\n\t\t\telse if( value === 'true' ) return true;\n\t\t\telse if( value === 'false' ) return false;\n\t\t\telse if( value.match( /^\\d+$/ ) ) return parseFloat( value );\n\t\t}\n\n\t\treturn value;\n\n\t}\n\n\t/**\n\t * Measures the distance in pixels between point a\n\t * and point b.\n\t *\n\t * @param {Object} a point with x/y properties\n\t * @param {Object} b point with x/y properties\n\t */\n\tfunction distanceBetween( a, b ) {\n\n\t\tvar dx = a.x - b.x,\n\t\t\tdy = a.y - b.y;\n\n\t\treturn Math.sqrt( dx*dx + dy*dy );\n\n\t}\n\n\t/**\n\t * Applies a CSS transform to the target element.\n\t */\n\tfunction transformElement( element, transform ) {\n\n\t\telement.style.WebkitTransform = transform;\n\t\telement.style.MozTransform = transform;\n\t\telement.style.msTransform = transform;\n\t\telement.style.OTransform = transform;\n\t\telement.style.transform = transform;\n\n\t}\n\n\t/**\n\t * Injects the given CSS styles into the DOM.\n\t */\n\tfunction injectStyleSheet( value ) {\n\n\t\tvar tag = document.createElement( 'style' );\n\t\ttag.type = 'text/css';\n\t\tif( tag.styleSheet ) {\n\t\t\ttag.styleSheet.cssText = value;\n\t\t}\n\t\telse {\n\t\t\ttag.appendChild( document.createTextNode( value ) );\n\t\t}\n\t\tdocument.getElementsByTagName( 'head' )[0].appendChild( tag );\n\n\t}\n\n\t/**\n\t * Measures the distance in pixels between point a and point b.\n\t *\n\t * @param {String} color The string representation of a color,\n\t * the following formats are supported:\n\t * - #000\n\t * - #000000\n\t * - rgb(0,0,0)\n\t */\n\tfunction colorToRgb( color ) {\n\n\t\tvar hex3 = color.match( /^#([0-9a-f]{3})$/i );\n\t\tif( hex3 && hex3[1] ) {\n\t\t\thex3 = hex3[1];\n\t\t\treturn {\n\t\t\t\tr: parseInt( hex3.charAt( 0 ), 16 ) * 0x11,\n\t\t\t\tg: parseInt( hex3.charAt( 1 ), 16 ) * 0x11,\n\t\t\t\tb: parseInt( hex3.charAt( 2 ), 16 ) * 0x11\n\t\t\t};\n\t\t}\n\n\t\tvar hex6 = color.match( /^#([0-9a-f]{6})$/i );\n\t\tif( hex6 && hex6[1] ) {\n\t\t\thex6 = hex6[1];\n\t\t\treturn {\n\t\t\t\tr: parseInt( hex6.substr( 0, 2 ), 16 ),\n\t\t\t\tg: parseInt( hex6.substr( 2, 2 ), 16 ),\n\t\t\t\tb: parseInt( hex6.substr( 4, 2 ), 16 )\n\t\t\t};\n\t\t}\n\n\t\tvar rgb = color.match( /^rgb\\s*\\(\\s*(\\d+)\\s*,\\s*(\\d+)\\s*,\\s*(\\d+)\\s*\\)$/i );\n\t\tif( rgb ) {\n\t\t\treturn {\n\t\t\t\tr: parseInt( rgb[1], 10 ),\n\t\t\t\tg: parseInt( rgb[2], 10 ),\n\t\t\t\tb: parseInt( rgb[3], 10 )\n\t\t\t};\n\t\t}\n\n\t\tvar rgba = color.match( /^rgba\\s*\\(\\s*(\\d+)\\s*,\\s*(\\d+)\\s*,\\s*(\\d+)\\s*\\,\\s*([\\d]+|[\\d]*.[\\d]+)\\s*\\)$/i );\n\t\tif( rgba ) {\n\t\t\treturn {\n\t\t\t\tr: parseInt( rgba[1], 10 ),\n\t\t\t\tg: parseInt( rgba[2], 10 ),\n\t\t\t\tb: parseInt( rgba[3], 10 ),\n\t\t\t\ta: parseFloat( rgba[4] )\n\t\t\t};\n\t\t}\n\n\t\treturn null;\n\n\t}\n\n\t/**\n\t * Calculates brightness on a scale of 0-255.\n\t *\n\t * @param color See colorStringToRgb for supported formats.\n\t */\n\tfunction colorBrightness( color ) {\n\n\t\tif( typeof color === 'string' ) color = colorToRgb( color );\n\n\t\tif( color ) {\n\t\t\treturn ( color.r * 299 + color.g * 587 + color.b * 114 ) / 1000;\n\t\t}\n\n\t\treturn null;\n\n\t}\n\n\t/**\n\t * Retrieves the height of the given element by looking\n\t * at the position and height of its immediate children.\n\t */\n\tfunction getAbsoluteHeight( element ) {\n\n\t\tvar height = 0;\n\n\t\tif( element ) {\n\t\t\tvar absoluteChildren = 0;\n\n\t\t\ttoArray( element.childNodes ).forEach( function( child ) {\n\n\t\t\t\tif( typeof child.offsetTop === 'number' && child.style ) {\n\t\t\t\t\t// Count # of abs children\n\t\t\t\t\tif( window.getComputedStyle( child ).position === 'absolute' ) {\n\t\t\t\t\t\tabsoluteChildren += 1;\n\t\t\t\t\t}\n\n\t\t\t\t\theight = Math.max( height, child.offsetTop + child.offsetHeight );\n\t\t\t\t}\n\n\t\t\t} );\n\n\t\t\t// If there are no absolute children, use offsetHeight\n\t\t\tif( absoluteChildren === 0 ) {\n\t\t\t\theight = element.offsetHeight;\n\t\t\t}\n\n\t\t}\n\n\t\treturn height;\n\n\t}\n\n\t/**\n\t * Returns the remaining height within the parent of the\n\t * target element.\n\t *\n\t * remaining height = [ configured parent height ] - [ current parent height ]\n\t */\n\tfunction getRemainingHeight( element, height ) {\n\n\t\theight = height || 0;\n\n\t\tif( element ) {\n\t\t\tvar newHeight, oldHeight = element.style.height;\n\n\t\t\t// Change the .stretch element height to 0 in order find the height of all\n\t\t\t// the other elements\n\t\t\telement.style.height = '0px';\n\t\t\tnewHeight = height - element.parentNode.offsetHeight;\n\n\t\t\t// Restore the old height, just in case\n\t\t\telement.style.height = oldHeight + 'px';\n\n\t\t\treturn newHeight;\n\t\t}\n\n\t\treturn height;\n\n\t}\n\n\t/**\n\t * Checks if this instance is being used to print a PDF.\n\t */\n\tfunction isPrintingPDF() {\n\n\t\treturn ( /print-pdf/gi ).test( window.location.search );\n\n\t}\n\n\t/**\n\t * Hides the address bar if we're on a mobile device.\n\t */\n\tfunction hideAddressBar() {\n\n\t\tif( config.hideAddressBar && isMobileDevice ) {\n\t\t\t// Events that should trigger the address bar to hide\n\t\t\twindow.addEventListener( 'load', removeAddressBar, false );\n\t\t\twindow.addEventListener( 'orientationchange', removeAddressBar, false );\n\t\t}\n\n\t}\n\n\t/**\n\t * Causes the address bar to hide on mobile devices,\n\t * more vertical space ftw.\n\t */\n\tfunction removeAddressBar() {\n\n\t\tsetTimeout( function() {\n\t\t\twindow.scrollTo( 0, 1 );\n\t\t}, 10 );\n\n\t}\n\n\t/**\n\t * Dispatches an event of the specified type from the\n\t * reveal DOM element.\n\t */\n\tfunction dispatchEvent( type, args ) {\n\n\t\tvar event = document.createEvent( 'HTMLEvents', 1, 2 );\n\t\tevent.initEvent( type, true, true );\n\t\textend( event, args );\n\t\tdom.wrapper.dispatchEvent( event );\n\n\t\t// If we're in an iframe, post each reveal.js event to the\n\t\t// parent window. Used by the notes plugin\n\t\tif( config.postMessageEvents && window.parent !== window.self ) {\n\t\t\twindow.parent.postMessage( JSON.stringify({ namespace: 'reveal', eventName: type, state: getState() }), '*' );\n\t\t}\n\n\t}\n\n\t/**\n\t * Wrap all links in 3D goodness.\n\t */\n\tfunction enableRollingLinks() {\n\n\t\tif( features.transforms3d && !( 'msPerspective' in document.body.style ) ) {\n\t\t\tvar anchors = dom.wrapper.querySelectorAll( SLIDES_SELECTOR + ' a' );\n\n\t\t\tfor( var i = 0, len = anchors.length; i < len; i++ ) {\n\t\t\t\tvar anchor = anchors[i];\n\n\t\t\t\tif( anchor.textContent && !anchor.querySelector( '*' ) && ( !anchor.className || !anchor.classList.contains( anchor, 'roll' ) ) ) {\n\t\t\t\t\tvar span = document.createElement('span');\n\t\t\t\t\tspan.setAttribute('data-title', anchor.text);\n\t\t\t\t\tspan.innerHTML = anchor.innerHTML;\n\n\t\t\t\t\tanchor.classList.add( 'roll' );\n\t\t\t\t\tanchor.innerHTML = '';\n\t\t\t\t\tanchor.appendChild(span);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t}\n\n\t/**\n\t * Unwrap all 3D links.\n\t */\n\tfunction disableRollingLinks() {\n\n\t\tvar anchors = dom.wrapper.querySelectorAll( SLIDES_SELECTOR + ' a.roll' );\n\n\t\tfor( var i = 0, len = anchors.length; i < len; i++ ) {\n\t\t\tvar anchor = anchors[i];\n\t\t\tvar span = anchor.querySelector( 'span' );\n\n\t\t\tif( span ) {\n\t\t\t\tanchor.classList.remove( 'roll' );\n\t\t\t\tanchor.innerHTML = span.innerHTML;\n\t\t\t}\n\t\t}\n\n\t}\n\n\t/**\n\t * Bind preview frame links.\n\t */\n\tfunction enablePreviewLinks( selector ) {\n\n\t\tvar anchors = toArray( document.querySelectorAll( selector ? selector : 'a' ) );\n\n\t\tanchors.forEach( function( element ) {\n\t\t\tif( /^(http|www)/gi.test( element.getAttribute( 'href' ) ) ) {\n\t\t\t\telement.addEventListener( 'click', onPreviewLinkClicked, false );\n\t\t\t}\n\t\t} );\n\n\t}\n\n\t/**\n\t * Unbind preview frame links.\n\t */\n\tfunction disablePreviewLinks() {\n\n\t\tvar anchors = toArray( document.querySelectorAll( 'a' ) );\n\n\t\tanchors.forEach( function( element ) {\n\t\t\tif( /^(http|www)/gi.test( element.getAttribute( 'href' ) ) ) {\n\t\t\t\telement.removeEventListener( 'click', onPreviewLinkClicked, false );\n\t\t\t}\n\t\t} );\n\n\t}\n\n\t/**\n\t * Opens a preview window for the target URL.\n\t */\n\tfunction showPreview( url ) {\n\n\t\tcloseOverlay();\n\n\t\tdom.overlay = document.createElement( 'div' );\n\t\tdom.overlay.classList.add( 'overlay' );\n\t\tdom.overlay.classList.add( 'overlay-preview' );\n\t\tdom.wrapper.appendChild( dom.overlay );\n\n\t\tdom.overlay.innerHTML = [\n\t\t\t'<header>',\n\t\t\t\t'<a class=\"close\" href=\"#\"><span class=\"icon\"></span></a>',\n\t\t\t\t'<a class=\"external\" href=\"'+ url +'\" target=\"_blank\"><span class=\"icon\"></span></a>',\n\t\t\t'</header>',\n\t\t\t'<div class=\"spinner\"></div>',\n\t\t\t'<div class=\"viewport\">',\n\t\t\t\t'<iframe src=\"'+ url +'\"></iframe>',\n\t\t\t'</div>'\n\t\t].join('');\n\n\t\tdom.overlay.querySelector( 'iframe' ).addEventListener( 'load', function( event ) {\n\t\t\tdom.overlay.classList.add( 'loaded' );\n\t\t}, false );\n\n\t\tdom.overlay.querySelector( '.close' ).addEventListener( 'click', function( event ) {\n\t\t\tcloseOverlay();\n\t\t\tevent.preventDefault();\n\t\t}, false );\n\n\t\tdom.overlay.querySelector( '.external' ).addEventListener( 'click', function( event ) {\n\t\t\tcloseOverlay();\n\t\t}, false );\n\n\t\tsetTimeout( function() {\n\t\t\tdom.overlay.classList.add( 'visible' );\n\t\t}, 1 );\n\n\t}\n\n\t/**\n\t * Opens a overlay window with help material.\n\t */\n\tfunction showHelp() {\n\n\t\tif( config.help ) {\n\n\t\t\tcloseOverlay();\n\n\t\t\tdom.overlay = document.createElement( 'div' );\n\t\t\tdom.overlay.classList.add( 'overlay' );\n\t\t\tdom.overlay.classList.add( 'overlay-help' );\n\t\t\tdom.wrapper.appendChild( dom.overlay );\n\n\t\t\tvar html = '<p class=\"title\">Keyboard Shortcuts</p><br/>';\n\n\t\t\thtml += '<table><th>KEY</th><th>ACTION</th>';\n\t\t\tfor( var key in keyboardShortcuts ) {\n\t\t\t\thtml += '<tr><td>' + key + '</td><td>' + keyboardShortcuts[ key ] + '</td></tr>';\n\t\t\t}\n\n\t\t\thtml += '</table>';\n\n\t\t\tdom.overlay.innerHTML = [\n\t\t\t\t'<header>',\n\t\t\t\t\t'<a class=\"close\" href=\"#\"><span class=\"icon\"></span></a>',\n\t\t\t\t'</header>',\n\t\t\t\t'<div class=\"viewport\">',\n\t\t\t\t\t'<div class=\"viewport-inner\">'+ html +'</div>',\n\t\t\t\t'</div>'\n\t\t\t].join('');\n\n\t\t\tdom.overlay.querySelector( '.close' ).addEventListener( 'click', function( event ) {\n\t\t\t\tcloseOverlay();\n\t\t\t\tevent.preventDefault();\n\t\t\t}, false );\n\n\t\t\tsetTimeout( function() {\n\t\t\t\tdom.overlay.classList.add( 'visible' );\n\t\t\t}, 1 );\n\n\t\t}\n\n\t}\n\n\t/**\n\t * Closes any currently open overlay.\n\t */\n\tfunction closeOverlay() {\n\n\t\tif( dom.overlay ) {\n\t\t\tdom.overlay.parentNode.removeChild( dom.overlay );\n\t\t\tdom.overlay = null;\n\t\t}\n\n\t}\n\n\t/**\n\t * Applies JavaScript-controlled layout rules to the\n\t * presentation.\n\t */\n\tfunction layout() {\n\n\t\tif( dom.wrapper && !isPrintingPDF() ) {\n\n\t\t\tvar size = getComputedSlideSize();\n\n\t\t\tvar slidePadding = 20; // TODO Dig this out of DOM\n\n\t\t\t// Layout the contents of the slides\n\t\t\tlayoutSlideContents( config.width, config.height, slidePadding );\n\n\t\t\tdom.slides.style.width = size.width + 'px';\n\t\t\tdom.slides.style.height = size.height + 'px';\n\n\t\t\t// Determine scale of content to fit within available space\n\t\t\tscale = Math.min( size.presentationWidth / size.width, size.presentationHeight / size.height );\n\n\t\t\t// Respect max/min scale settings\n\t\t\tscale = Math.max( scale, config.minScale );\n\t\t\tscale = Math.min( scale, config.maxScale );\n\n\t\t\t// Don't apply any scaling styles if scale is 1\n\t\t\tif( scale === 1 ) {\n\t\t\t\tdom.slides.style.zoom = '';\n\t\t\t\tdom.slides.style.left = '';\n\t\t\t\tdom.slides.style.top = '';\n\t\t\t\tdom.slides.style.bottom = '';\n\t\t\t\tdom.slides.style.right = '';\n\t\t\t\ttransformElement( dom.slides, '' );\n\t\t\t}\n\t\t\telse {\n\t\t\t\t// Prefer zooming in desktop Chrome so that content remains crisp\n\t\t\t\tif( !isMobileDevice && /chrome/i.test( navigator.userAgent ) && typeof dom.slides.style.zoom !== 'undefined' ) {\n\t\t\t\t\tdom.slides.style.zoom = scale;\n\t\t\t\t}\n\t\t\t\t// Apply scale transform as a fallback\n\t\t\t\telse {\n\t\t\t\t\tdom.slides.style.left = '50%';\n\t\t\t\t\tdom.slides.style.top = '50%';\n\t\t\t\t\tdom.slides.style.bottom = 'auto';\n\t\t\t\t\tdom.slides.style.right = 'auto';\n\t\t\t\t\ttransformElement( dom.slides, 'translate(-50%, -50%) scale('+ scale +')' );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Select all slides, vertical and horizontal\n\t\t\tvar slides = toArray( dom.wrapper.querySelectorAll( SLIDES_SELECTOR ) );\n\n\t\t\tfor( var i = 0, len = slides.length; i < len; i++ ) {\n\t\t\t\tvar slide = slides[ i ];\n\n\t\t\t\t// Don't bother updating invisible slides\n\t\t\t\tif( slide.style.display === 'none' ) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\tif( config.center || slide.classList.contains( 'center' ) ) {\n\t\t\t\t\t// Vertical stacks are not centred since their section\n\t\t\t\t\t// children will be\n\t\t\t\t\tif( slide.classList.contains( 'stack' ) ) {\n\t\t\t\t\t\tslide.style.top = 0;\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t\tslide.style.top = Math.max( ( ( size.height - getAbsoluteHeight( slide ) ) / 2 ) - slidePadding, 0 ) + 'px';\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tslide.style.top = '';\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tupdateProgress();\n\t\t\tupdateParallax();\n\n\t\t}\n\n\t}\n\n\t/**\n\t * Applies layout logic to the contents of all slides in\n\t * the presentation.\n\t */\n\tfunction layoutSlideContents( width, height, padding ) {\n\n\t\t// Handle sizing of elements with the 'stretch' class\n\t\ttoArray( dom.slides.querySelectorAll( 'section > .stretch' ) ).forEach( function( element ) {\n\n\t\t\t// Determine how much vertical space we can use\n\t\t\tvar remainingHeight = getRemainingHeight( element, height );\n\n\t\t\t// Consider the aspect ratio of media elements\n\t\t\tif( /(img|video)/gi.test( element.nodeName ) ) {\n\t\t\t\tvar nw = element.naturalWidth || element.videoWidth,\n\t\t\t\t\tnh = element.naturalHeight || element.videoHeight;\n\n\t\t\t\tvar es = Math.min( width / nw, remainingHeight / nh );\n\n\t\t\t\telement.style.width = ( nw * es ) + 'px';\n\t\t\t\telement.style.height = ( nh * es ) + 'px';\n\n\t\t\t}\n\t\t\telse {\n\t\t\t\telement.style.width = width + 'px';\n\t\t\t\telement.style.height = remainingHeight + 'px';\n\t\t\t}\n\n\t\t} );\n\n\t}\n\n\t/**\n\t * Calculates the computed pixel size of our slides. These\n\t * values are based on the width and height configuration\n\t * options.\n\t */\n\tfunction getComputedSlideSize( presentationWidth, presentationHeight ) {\n\n\t\tvar size = {\n\t\t\t// Slide size\n\t\t\twidth: config.width,\n\t\t\theight: config.height,\n\n\t\t\t// Presentation size\n\t\t\tpresentationWidth: presentationWidth || dom.wrapper.offsetWidth,\n\t\t\tpresentationHeight: presentationHeight || dom.wrapper.offsetHeight\n\t\t};\n\n\t\t// Reduce available space by margin\n\t\tsize.presentationWidth -= ( size.presentationHeight * config.margin );\n\t\tsize.presentationHeight -= ( size.presentationHeight * config.margin );\n\n\t\t// Slide width may be a percentage of available width\n\t\tif( typeof size.width === 'string' && /%$/.test( size.width ) ) {\n\t\t\tsize.width = parseInt( size.width, 10 ) / 100 * size.presentationWidth;\n\t\t}\n\n\t\t// Slide height may be a percentage of available height\n\t\tif( typeof size.height === 'string' && /%$/.test( size.height ) ) {\n\t\t\tsize.height = parseInt( size.height, 10 ) / 100 * size.presentationHeight;\n\t\t}\n\n\t\treturn size;\n\n\t}\n\n\t/**\n\t * Stores the vertical index of a stack so that the same\n\t * vertical slide can be selected when navigating to and\n\t * from the stack.\n\t *\n\t * @param {HTMLElement} stack The vertical stack element\n\t * @param {int} v Index to memorize\n\t */\n\tfunction setPreviousVerticalIndex( stack, v ) {\n\n\t\tif( typeof stack === 'object' && typeof stack.setAttribute === 'function' ) {\n\t\t\tstack.setAttribute( 'data-previous-indexv', v || 0 );\n\t\t}\n\n\t}\n\n\t/**\n\t * Retrieves the vertical index which was stored using\n\t * #setPreviousVerticalIndex() or 0 if no previous index\n\t * exists.\n\t *\n\t * @param {HTMLElement} stack The vertical stack element\n\t */\n\tfunction getPreviousVerticalIndex( stack ) {\n\n\t\tif( typeof stack === 'object' && typeof stack.setAttribute === 'function' && stack.classList.contains( 'stack' ) ) {\n\t\t\t// Prefer manually defined start-indexv\n\t\t\tvar attributeName = stack.hasAttribute( 'data-start-indexv' ) ? 'data-start-indexv' : 'data-previous-indexv';\n\n\t\t\treturn parseInt( stack.getAttribute( attributeName ) || 0, 10 );\n\t\t}\n\n\t\treturn 0;\n\n\t}\n\n\t/**\n\t * Displays the overview of slides (quick nav) by\n\t * scaling down and arranging all slide elements.\n\t *\n\t * Experimental feature, might be dropped if perf\n\t * can't be improved.\n\t */\n\tfunction activateOverview() {\n\n\t\t// Only proceed if enabled in config\n\t\tif( config.overview ) {\n\n\t\t\t// Don't auto-slide while in overview mode\n\t\t\tcancelAutoSlide();\n\n\t\t\tvar wasActive = dom.wrapper.classList.contains( 'overview' );\n\n\t\t\t// Vary the depth of the overview based on screen size\n\t\t\tvar depth = window.innerWidth < 400 ? 1000 : 2500;\n\n\t\t\tdom.wrapper.classList.add( 'overview' );\n\t\t\tdom.wrapper.classList.remove( 'overview-deactivating' );\n\n\t\t\tvar horizontalSlides = dom.wrapper.querySelectorAll( HORIZONTAL_SLIDES_SELECTOR );\n\n\t\t\tfor( var i = 0, len1 = horizontalSlides.length; i < len1; i++ ) {\n\t\t\t\tvar hslide = horizontalSlides[i],\n\t\t\t\t\thoffset = config.rtl ? -105 : 105;\n\n\t\t\t\thslide.setAttribute( 'data-index-h', i );\n\n\t\t\t\t// Apply CSS transform\n\t\t\t\ttransformElement( hslide, 'translateZ(-'+ depth +'px) translate(' + ( ( i - indexh ) * hoffset ) + '%, 0%)' );\n\n\t\t\t\tif( hslide.classList.contains( 'stack' ) ) {\n\n\t\t\t\t\tvar verticalSlides = hslide.querySelectorAll( 'section' );\n\n\t\t\t\t\tfor( var j = 0, len2 = verticalSlides.length; j < len2; j++ ) {\n\t\t\t\t\t\tvar verticalIndex = i === indexh ? indexv : getPreviousVerticalIndex( hslide );\n\n\t\t\t\t\t\tvar vslide = verticalSlides[j];\n\n\t\t\t\t\t\tvslide.setAttribute( 'data-index-h', i );\n\t\t\t\t\t\tvslide.setAttribute( 'data-index-v', j );\n\n\t\t\t\t\t\t// Apply CSS transform\n\t\t\t\t\t\ttransformElement( vslide, 'translate(0%, ' + ( ( j - verticalIndex ) * 105 ) + '%)' );\n\n\t\t\t\t\t\t// Navigate to this slide on click\n\t\t\t\t\t\tvslide.addEventListener( 'click', onOverviewSlideClicked, true );\n\t\t\t\t\t}\n\n\t\t\t\t}\n\t\t\t\telse {\n\n\t\t\t\t\t// Navigate to this slide on click\n\t\t\t\t\thslide.addEventListener( 'click', onOverviewSlideClicked, true );\n\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tupdateSlidesVisibility();\n\n\t\t\tlayout();\n\n\t\t\tif( !wasActive ) {\n\t\t\t\t// Notify observers of the overview showing\n\t\t\t\tdispatchEvent( 'overviewshown', {\n\t\t\t\t\t'indexh': indexh,\n\t\t\t\t\t'indexv': indexv,\n\t\t\t\t\t'currentSlide': currentSlide\n\t\t\t\t} );\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\t/**\n\t * Exits the slide overview and enters the currently\n\t * active slide.\n\t */\n\tfunction deactivateOverview() {\n\n\t\t// Only proceed if enabled in config\n\t\tif( config.overview ) {\n\n\t\t\tdom.wrapper.classList.remove( 'overview' );\n\n\t\t\t// Temporarily add a class so that transitions can do different things\n\t\t\t// depending on whether they are exiting/entering overview, or just\n\t\t\t// moving from slide to slide\n\t\t\tdom.wrapper.classList.add( 'overview-deactivating' );\n\n\t\t\tsetTimeout( function () {\n\t\t\t\tdom.wrapper.classList.remove( 'overview-deactivating' );\n\t\t\t}, 1 );\n\n\t\t\t// Select all slides\n\t\t\ttoArray( dom.wrapper.querySelectorAll( SLIDES_SELECTOR ) ).forEach( function( slide ) {\n\t\t\t\t// Resets all transforms to use the external styles\n\t\t\t\ttransformElement( slide, '' );\n\n\t\t\t\tslide.removeEventListener( 'click', onOverviewSlideClicked, true );\n\t\t\t} );\n\n\t\t\tslide( indexh, indexv );\n\n\t\t\tcueAutoSlide();\n\n\t\t\t// Notify observers of the overview hiding\n\t\t\tdispatchEvent( 'overviewhidden', {\n\t\t\t\t'indexh': indexh,\n\t\t\t\t'indexv': indexv,\n\t\t\t\t'currentSlide': currentSlide\n\t\t\t} );\n\n\t\t}\n\t}\n\n\t/**\n\t * Toggles the slide overview mode on and off.\n\t *\n\t * @param {Boolean} override Optional flag which overrides the\n\t * toggle logic and forcibly sets the desired state. True means\n\t * overview is open, false means it's closed.\n\t */\n\tfunction toggleOverview( override ) {\n\n\t\tif( typeof override === 'boolean' ) {\n\t\t\toverride ? activateOverview() : deactivateOverview();\n\t\t}\n\t\telse {\n\t\t\tisOverview() ? deactivateOverview() : activateOverview();\n\t\t}\n\n\t}\n\n\t/**\n\t * Checks if the overview is currently active.\n\t *\n\t * @return {Boolean} true if the overview is active,\n\t * false otherwise\n\t */\n\tfunction isOverview() {\n\n\t\treturn dom.wrapper.classList.contains( 'overview' );\n\n\t}\n\n\t/**\n\t * Checks if the current or specified slide is vertical\n\t * (nested within another slide).\n\t *\n\t * @param {HTMLElement} slide [optional] The slide to check\n\t * orientation of\n\t */\n\tfunction isVerticalSlide( slide ) {\n\n\t\t// Prefer slide argument, otherwise use current slide\n\t\tslide = slide ? slide : currentSlide;\n\n\t\treturn slide && slide.parentNode && !!slide.parentNode.nodeName.match( /section/i );\n\n\t}\n\n\t/**\n\t * Handling the fullscreen functionality via the fullscreen API\n\t *\n\t * @see http://fullscreen.spec.whatwg.org/\n\t * @see https://developer.mozilla.org/en-US/docs/DOM/Using_fullscreen_mode\n\t */\n\tfunction enterFullscreen() {\n\n\t\tvar element = document.body;\n\n\t\t// Check which implementation is available\n\t\tvar requestMethod = element.requestFullScreen ||\n\t\t\t\t\t\t\telement.webkitRequestFullscreen ||\n\t\t\t\t\t\t\telement.webkitRequestFullScreen ||\n\t\t\t\t\t\t\telement.mozRequestFullScreen ||\n\t\t\t\t\t\t\telement.msRequestFullscreen;\n\n\t\tif( requestMethod ) {\n\t\t\trequestMethod.apply( element );\n\t\t}\n\n\t}\n\n\t/**\n\t * Enters the paused mode which fades everything on screen to\n\t * black.\n\t */\n\tfunction pause() {\n\n\t\tif( config.pause ) {\n\t\t\tvar wasPaused = dom.wrapper.classList.contains( 'paused' );\n\n\t\t\tcancelAutoSlide();\n\t\t\tdom.wrapper.classList.add( 'paused' );\n\n\t\t\tif( wasPaused === false ) {\n\t\t\t\tdispatchEvent( 'paused' );\n\t\t\t}\n\t\t}\n\n\t}\n\n\t/**\n\t * Exits from the paused mode.\n\t */\n\tfunction resume() {\n\n\t\tvar wasPaused = dom.wrapper.classList.contains( 'paused' );\n\t\tdom.wrapper.classList.remove( 'paused' );\n\n\t\tcueAutoSlide();\n\n\t\tif( wasPaused ) {\n\t\t\tdispatchEvent( 'resumed' );\n\t\t}\n\n\t}\n\n\t/**\n\t * Toggles the paused mode on and off.\n\t */\n\tfunction togglePause( override ) {\n\n\t\tif( typeof override === 'boolean' ) {\n\t\t\toverride ? pause() : resume();\n\t\t}\n\t\telse {\n\t\t\tisPaused() ? resume() : pause();\n\t\t}\n\n\t}\n\n\t/**\n\t * Checks if we are currently in the paused mode.\n\t */\n\tfunction isPaused() {\n\n\t\treturn dom.wrapper.classList.contains( 'paused' );\n\n\t}\n\n\t/**\n\t * Toggles the auto slide mode on and off.\n\t *\n\t * @param {Boolean} override Optional flag which sets the desired state.\n\t * True means autoplay starts, false means it stops.\n\t */\n\n\tfunction toggleAutoSlide( override ) {\n\n\t\tif( typeof override === 'boolean' ) {\n\t\t\toverride ? resumeAutoSlide() : pauseAutoSlide();\n\t\t}\n\n\t\telse {\n\t\t\tautoSlidePaused ? resumeAutoSlide() : pauseAutoSlide();\n\t\t}\n\n\t}\n\n\t/**\n\t * Checks if the auto slide mode is currently on.\n\t */\n\tfunction isAutoSliding() {\n\n\t\treturn !!( autoSlide && !autoSlidePaused );\n\n\t}\n\n\t/**\n\t * Steps from the current point in the presentation to the\n\t * slide which matches the specified horizontal and vertical\n\t * indices.\n\t *\n\t * @param {int} h Horizontal index of the target slide\n\t * @param {int} v Vertical index of the target slide\n\t * @param {int} f Optional index of a fragment within the\n\t * target slide to activate\n\t * @param {int} o Optional origin for use in multimaster environments\n\t */\n\tfunction slide( h, v, f, o ) {\n\n\t\t// Remember where we were at before\n\t\tpreviousSlide = currentSlide;\n\n\t\t// Query all horizontal slides in the deck\n\t\tvar horizontalSlides = dom.wrapper.querySelectorAll( HORIZONTAL_SLIDES_SELECTOR );\n\n\t\t// If no vertical index is specified and the upcoming slide is a\n\t\t// stack, resume at its previous vertical index\n\t\tif( v === undefined ) {\n\t\t\tv = getPreviousVerticalIndex( horizontalSlides[ h ] );\n\t\t}\n\n\t\t// If we were on a vertical stack, remember what vertical index\n\t\t// it was on so we can resume at the same position when returning\n\t\tif( previousSlide && previousSlide.parentNode && previousSlide.parentNode.classList.contains( 'stack' ) ) {\n\t\t\tsetPreviousVerticalIndex( previousSlide.parentNode, indexv );\n\t\t}\n\n\t\t// Remember the state before this slide\n\t\tvar stateBefore = state.concat();\n\n\t\t// Reset the state array\n\t\tstate.length = 0;\n\n\t\tvar indexhBefore = indexh || 0,\n\t\t\tindexvBefore = indexv || 0;\n\n\t\t// Activate and transition to the new slide\n\t\tindexh = updateSlides( HORIZONTAL_SLIDES_SELECTOR, h === undefined ? indexh : h );\n\t\tindexv = updateSlides( VERTICAL_SLIDES_SELECTOR, v === undefined ? indexv : v );\n\n\t\t// Update the visibility of slides now that the indices have changed\n\t\tupdateSlidesVisibility();\n\n\t\tlayout();\n\n\t\t// Apply the new state\n\t\tstateLoop: for( var i = 0, len = state.length; i < len; i++ ) {\n\t\t\t// Check if this state existed on the previous slide. If it\n\t\t\t// did, we will avoid adding it repeatedly\n\t\t\tfor( var j = 0; j < stateBefore.length; j++ ) {\n\t\t\t\tif( stateBefore[j] === state[i] ) {\n\t\t\t\t\tstateBefore.splice( j, 1 );\n\t\t\t\t\tcontinue stateLoop;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tdocument.documentElement.classList.add( state[i] );\n\n\t\t\t// Dispatch custom event matching the state's name\n\t\t\tdispatchEvent( state[i] );\n\t\t}\n\n\t\t// Clean up the remains of the previous state\n\t\twhile( stateBefore.length ) {\n\t\t\tdocument.documentElement.classList.remove( stateBefore.pop() );\n\t\t}\n\n\t\t// If the overview is active, re-activate it to update positions\n\t\tif( isOverview() ) {\n\t\t\tactivateOverview();\n\t\t}\n\n\t\t// Find the current horizontal slide and any possible vertical slides\n\t\t// within it\n\t\tvar currentHorizontalSlide = horizontalSlides[ indexh ],\n\t\t\tcurrentVerticalSlides = currentHorizontalSlide.querySelectorAll( 'section' );\n\n\t\t// Store references to the previous and current slides\n\t\tcurrentSlide = currentVerticalSlides[ indexv ] || currentHorizontalSlide;\n\n\t\t// Show fragment, if specified\n\t\tif( typeof f !== 'undefined' ) {\n\t\t\tnavigateFragment( f );\n\t\t}\n\n\t\t// Dispatch an event if the slide changed\n\t\tvar slideChanged = ( indexh !== indexhBefore || indexv !== indexvBefore );\n\t\tif( slideChanged ) {\n\t\t\tdispatchEvent( 'slidechanged', {\n\t\t\t\t'indexh': indexh,\n\t\t\t\t'indexv': indexv,\n\t\t\t\t'previousSlide': previousSlide,\n\t\t\t\t'currentSlide': currentSlide,\n\t\t\t\t'origin': o\n\t\t\t} );\n\t\t}\n\t\telse {\n\t\t\t// Ensure that the previous slide is never the same as the current\n\t\t\tpreviousSlide = null;\n\t\t}\n\n\t\t// Solves an edge case where the previous slide maintains the\n\t\t// 'present' class when navigating between adjacent vertical\n\t\t// stacks\n\t\tif( previousSlide ) {\n\t\t\tpreviousSlide.classList.remove( 'present' );\n\t\t\tpreviousSlide.setAttribute( 'aria-hidden', 'true' );\n\n\t\t\t// Reset all slides upon navigate to home\n\t\t\t// Issue: #285\n\t\t\tif ( dom.wrapper.querySelector( HOME_SLIDE_SELECTOR ).classList.contains( 'present' ) ) {\n\t\t\t\t// Launch async task\n\t\t\t\tsetTimeout( function () {\n\t\t\t\t\tvar slides = toArray( dom.wrapper.querySelectorAll( HORIZONTAL_SLIDES_SELECTOR + '.stack') ), i;\n\t\t\t\t\tfor( i in slides ) {\n\t\t\t\t\t\tif( slides[i] ) {\n\t\t\t\t\t\t\t// Reset stack\n\t\t\t\t\t\t\tsetPreviousVerticalIndex( slides[i], 0 );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}, 0 );\n\t\t\t}\n\t\t}\n\n\t\t// Handle embedded content\n\t\tif( slideChanged || !previousSlide ) {\n\t\t\tstopEmbeddedContent( previousSlide );\n\t\t\tstartEmbeddedContent( currentSlide );\n\t\t}\n\n\t\t// Announce the current slide contents, for screen readers\n\t\tdom.statusDiv.textContent = currentSlide.textContent;\n\n\t\tupdateControls();\n\t\tupdateProgress();\n\t\tupdateBackground();\n\t\tupdateParallax();\n\t\tupdateSlideNumber();\n\n\t\t// Update the URL hash\n\t\twriteURL();\n\n\t\tcueAutoSlide();\n\n\t}\n\n\t/**\n\t * Syncs the presentation with the current DOM. Useful\n\t * when new slides or control elements are added or when\n\t * the configuration has changed.\n\t */\n\tfunction sync() {\n\n\t\t// Subscribe to input\n\t\tremoveEventListeners();\n\t\taddEventListeners();\n\n\t\t// Force a layout to make sure the current config is accounted for\n\t\tlayout();\n\n\t\t// Reflect the current autoSlide value\n\t\tautoSlide = config.autoSlide;\n\n\t\t// Start auto-sliding if it's enabled\n\t\tcueAutoSlide();\n\n\t\t// Re-create the slide backgrounds\n\t\tcreateBackgrounds();\n\n\t\t// Write the current hash to the URL\n\t\twriteURL();\n\n\t\tsortAllFragments();\n\n\t\tupdateControls();\n\t\tupdateProgress();\n\t\tupdateBackground( true );\n\t\tupdateSlideNumber();\n\t\tupdateSlidesVisibility();\n\n\t\tformatEmbeddedContent();\n\n\t}\n\n\t/**\n\t * Resets all vertical slides so that only the first\n\t * is visible.\n\t */\n\tfunction resetVerticalSlides() {\n\n\t\tvar horizontalSlides = toArray( dom.wrapper.querySelectorAll( HORIZONTAL_SLIDES_SELECTOR ) );\n\t\thorizontalSlides.forEach( function( horizontalSlide ) {\n\n\t\t\tvar verticalSlides = toArray( horizontalSlide.querySelectorAll( 'section' ) );\n\t\t\tverticalSlides.forEach( function( verticalSlide, y ) {\n\n\t\t\t\tif( y > 0 ) {\n\t\t\t\t\tverticalSlide.classList.remove( 'present' );\n\t\t\t\t\tverticalSlide.classList.remove( 'past' );\n\t\t\t\t\tverticalSlide.classList.add( 'future' );\n\t\t\t\t\tverticalSlide.setAttribute( 'aria-hidden', 'true' );\n\t\t\t\t}\n\n\t\t\t} );\n\n\t\t} );\n\n\t}\n\n\t/**\n\t * Sorts and formats all of fragments in the\n\t * presentation.\n\t */\n\tfunction sortAllFragments() {\n\n\t\tvar horizontalSlides = toArray( dom.wrapper.querySelectorAll( HORIZONTAL_SLIDES_SELECTOR ) );\n\t\thorizontalSlides.forEach( function( horizontalSlide ) {\n\n\t\t\tvar verticalSlides = toArray( horizontalSlide.querySelectorAll( 'section' ) );\n\t\t\tverticalSlides.forEach( function( verticalSlide, y ) {\n\n\t\t\t\tsortFragments( verticalSlide.querySelectorAll( '.fragment' ) );\n\n\t\t\t} );\n\n\t\t\tif( verticalSlides.length === 0 ) sortFragments( horizontalSlide.querySelectorAll( '.fragment' ) );\n\n\t\t} );\n\n\t}\n\n\t/**\n\t * Updates one dimension of slides by showing the slide\n\t * with the specified index.\n\t *\n\t * @param {String} selector A CSS selector that will fetch\n\t * the group of slides we are working with\n\t * @param {Number} index The index of the slide that should be\n\t * shown\n\t *\n\t * @return {Number} The index of the slide that is now shown,\n\t * might differ from the passed in index if it was out of\n\t * bounds.\n\t */\n\tfunction updateSlides( selector, index ) {\n\n\t\t// Select all slides and convert the NodeList result to\n\t\t// an array\n\t\tvar slides = toArray( dom.wrapper.querySelectorAll( selector ) ),\n\t\t\tslidesLength = slides.length;\n\n\t\tvar printMode = isPrintingPDF();\n\n\t\tif( slidesLength ) {\n\n\t\t\t// Should the index loop?\n\t\t\tif( config.loop ) {\n\t\t\t\tindex %= slidesLength;\n\n\t\t\t\tif( index < 0 ) {\n\t\t\t\t\tindex = slidesLength + index;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Enforce max and minimum index bounds\n\t\t\tindex = Math.max( Math.min( index, slidesLength - 1 ), 0 );\n\n\t\t\tfor( var i = 0; i < slidesLength; i++ ) {\n\t\t\t\tvar element = slides[i];\n\n\t\t\t\tvar reverse = config.rtl && !isVerticalSlide( element );\n\n\t\t\t\telement.classList.remove( 'past' );\n\t\t\t\telement.classList.remove( 'present' );\n\t\t\t\telement.classList.remove( 'future' );\n\n\t\t\t\t// http://www.w3.org/html/wg/drafts/html/master/editing.html#the-hidden-attribute\n\t\t\t\telement.setAttribute( 'hidden', '' );\n\t\t\t\telement.setAttribute( 'aria-hidden', 'true' );\n\n\t\t\t\t// If this element contains vertical slides\n\t\t\t\tif( element.querySelector( 'section' ) ) {\n\t\t\t\t\telement.classList.add( 'stack' );\n\t\t\t\t}\n\n\t\t\t\t// If we're printing static slides, all slides are \"present\"\n\t\t\t\tif( printMode ) {\n\t\t\t\t\telement.classList.add( 'present' );\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\tif( i < index ) {\n\t\t\t\t\t// Any element previous to index is given the 'past' class\n\t\t\t\t\telement.classList.add( reverse ? 'future' : 'past' );\n\n\t\t\t\t\tif( config.fragments ) {\n\t\t\t\t\t\tvar pastFragments = toArray( element.querySelectorAll( '.fragment' ) );\n\n\t\t\t\t\t\t// Show all fragments on prior slides\n\t\t\t\t\t\twhile( pastFragments.length ) {\n\t\t\t\t\t\t\tvar pastFragment = pastFragments.pop();\n\t\t\t\t\t\t\tpastFragment.classList.add( 'visible' );\n\t\t\t\t\t\t\tpastFragment.classList.remove( 'current-fragment' );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\telse if( i > index ) {\n\t\t\t\t\t// Any element subsequent to index is given the 'future' class\n\t\t\t\t\telement.classList.add( reverse ? 'past' : 'future' );\n\n\t\t\t\t\tif( config.fragments ) {\n\t\t\t\t\t\tvar futureFragments = toArray( element.querySelectorAll( '.fragment.visible' ) );\n\n\t\t\t\t\t\t// No fragments in future slides should be visible ahead of time\n\t\t\t\t\t\twhile( futureFragments.length ) {\n\t\t\t\t\t\t\tvar futureFragment = futureFragments.pop();\n\t\t\t\t\t\t\tfutureFragment.classList.remove( 'visible' );\n\t\t\t\t\t\t\tfutureFragment.classList.remove( 'current-fragment' );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Mark the current slide as present\n\t\t\tslides[index].classList.add( 'present' );\n\t\t\tslides[index].removeAttribute( 'hidden' );\n\t\t\tslides[index].removeAttribute( 'aria-hidden' );\n\n\t\t\t// If this slide has a state associated with it, add it\n\t\t\t// onto the current state of the deck\n\t\t\tvar slideState = slides[index].getAttribute( 'data-state' );\n\t\t\tif( slideState ) {\n\t\t\t\tstate = state.concat( slideState.split( ' ' ) );\n\t\t\t}\n\n\t\t}\n\t\telse {\n\t\t\t// Since there are no slides we can't be anywhere beyond the\n\t\t\t// zeroth index\n\t\t\tindex = 0;\n\t\t}\n\n\t\treturn index;\n\n\t}\n\n\t/**\n\t * Optimization method; hide all slides that are far away\n\t * from the present slide.\n\t */\n\tfunction updateSlidesVisibility() {\n\n\t\t// Select all slides and convert the NodeList result to\n\t\t// an array\n\t\tvar horizontalSlides = toArray( dom.wrapper.querySelectorAll( HORIZONTAL_SLIDES_SELECTOR ) ),\n\t\t\thorizontalSlidesLength = horizontalSlides.length,\n\t\t\tdistanceX,\n\t\t\tdistanceY;\n\n\t\tif( horizontalSlidesLength && typeof indexh !== 'undefined' ) {\n\n\t\t\t// The number of steps away from the present slide that will\n\t\t\t// be visible\n\t\t\tvar viewDistance = isOverview() ? 10 : config.viewDistance;\n\n\t\t\t// Limit view distance on weaker devices\n\t\t\tif( isMobileDevice ) {\n\t\t\t\tviewDistance = isOverview() ? 6 : 2;\n\t\t\t}\n\n\t\t\t// Limit view distance on weaker devices\n\t\t\tif( isPrintingPDF() ) {\n\t\t\t\tviewDistance = Number.MAX_VALUE;\n\t\t\t}\n\n\t\t\tfor( var x = 0; x < horizontalSlidesLength; x++ ) {\n\t\t\t\tvar horizontalSlide = horizontalSlides[x];\n\n\t\t\t\tvar verticalSlides = toArray( horizontalSlide.querySelectorAll( 'section' ) ),\n\t\t\t\t\tverticalSlidesLength = verticalSlides.length;\n\n\t\t\t\t// Loops so that it measures 1 between the first and last slides\n\t\t\t\tdistanceX = Math.abs( ( ( indexh || 0 ) - x ) % ( horizontalSlidesLength - viewDistance ) ) || 0;\n\n\t\t\t\t// Show the horizontal slide if it's within the view distance\n\t\t\t\tif( distanceX < viewDistance ) {\n\t\t\t\t\tshowSlide( horizontalSlide );\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\thideSlide( horizontalSlide );\n\t\t\t\t}\n\n\t\t\t\tif( verticalSlidesLength ) {\n\n\t\t\t\t\tvar oy = getPreviousVerticalIndex( horizontalSlide );\n\n\t\t\t\t\tfor( var y = 0; y < verticalSlidesLength; y++ ) {\n\t\t\t\t\t\tvar verticalSlide = verticalSlides[y];\n\n\t\t\t\t\t\tdistanceY = x === ( indexh || 0 ) ? Math.abs( ( indexv || 0 ) - y ) : Math.abs( y - oy );\n\n\t\t\t\t\t\tif( distanceX + distanceY < viewDistance ) {\n\t\t\t\t\t\t\tshowSlide( verticalSlide );\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse {\n\t\t\t\t\t\t\thideSlide( verticalSlide );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t}\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\t/**\n\t * Updates the progress bar to reflect the current slide.\n\t */\n\tfunction updateProgress() {\n\n\t\t// Update progress if enabled\n\t\tif( config.progress && dom.progressbar ) {\n\n\t\t\tdom.progressbar.style.width = getProgress() * dom.wrapper.offsetWidth + 'px';\n\n\t\t}\n\n\t}\n\n\t/**\n\t * Updates the slide number div to reflect the current slide.\n\t */\n\tfunction updateSlideNumber() {\n\n\t\t// Update slide number if enabled\n\t\tif( config.slideNumber && dom.slideNumber) {\n\n\t\t\t// Display the number of the page using 'indexh - indexv' format\n\t\t\tvar indexString = indexh;\n\t\t\tif( indexv > 0 ) {\n\t\t\t\tindexString += ' - ' + indexv;\n\t\t\t}\n\n\t\t\tdom.slideNumber.innerHTML = indexString;\n\t\t}\n\n\t}\n\n\t/**\n\t * Updates the state of all control/navigation arrows.\n\t */\n\tfunction updateControls() {\n\n\t\tvar routes = availableRoutes();\n\t\tvar fragments = availableFragments();\n\n\t\t// Remove the 'enabled' class from all directions\n\t\tdom.controlsLeft.concat( dom.controlsRight )\n\t\t\t\t\t\t.concat( dom.controlsUp )\n\t\t\t\t\t\t.concat( dom.controlsDown )\n\t\t\t\t\t\t.concat( dom.controlsPrev )\n\t\t\t\t\t\t.concat( dom.controlsNext ).forEach( function( node ) {\n\t\t\tnode.classList.remove( 'enabled' );\n\t\t\tnode.classList.remove( 'fragmented' );\n\t\t} );\n\n\t\t// Add the 'enabled' class to the available routes\n\t\tif( routes.left ) dom.controlsLeft.forEach( function( el ) { el.classList.add( 'enabled' );\t} );\n\t\tif( routes.right ) dom.controlsRight.forEach( function( el ) { el.classList.add( 'enabled' ); } );\n\t\tif( routes.up ) dom.controlsUp.forEach( function( el ) { el.classList.add( 'enabled' );\t} );\n\t\tif( routes.down ) dom.controlsDown.forEach( function( el ) { el.classList.add( 'enabled' ); } );\n\n\t\t// Prev/next buttons\n\t\tif( routes.left || routes.up ) dom.controlsPrev.forEach( function( el ) { el.classList.add( 'enabled' ); } );\n\t\tif( routes.right || routes.down ) dom.controlsNext.forEach( function( el ) { el.classList.add( 'enabled' ); } );\n\n\t\t// Highlight fragment directions\n\t\tif( currentSlide ) {\n\n\t\t\t// Always apply fragment decorator to prev/next buttons\n\t\t\tif( fragments.prev ) dom.controlsPrev.forEach( function( el ) { el.classList.add( 'fragmented', 'enabled' ); } );\n\t\t\tif( fragments.next ) dom.controlsNext.forEach( function( el ) { el.classList.add( 'fragmented', 'enabled' ); } );\n\n\t\t\t// Apply fragment decorators to directional buttons based on\n\t\t\t// what slide axis they are in\n\t\t\tif( isVerticalSlide( currentSlide ) ) {\n\t\t\t\tif( fragments.prev ) dom.controlsUp.forEach( function( el ) { el.classList.add( 'fragmented', 'enabled' ); } );\n\t\t\t\tif( fragments.next ) dom.controlsDown.forEach( function( el ) { el.classList.add( 'fragmented', 'enabled' ); } );\n\t\t\t}\n\t\t\telse {\n\t\t\t\tif( fragments.prev ) dom.controlsLeft.forEach( function( el ) { el.classList.add( 'fragmented', 'enabled' ); } );\n\t\t\t\tif( fragments.next ) dom.controlsRight.forEach( function( el ) { el.classList.add( 'fragmented', 'enabled' ); } );\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\t/**\n\t * Updates the background elements to reflect the current\n\t * slide.\n\t *\n\t * @param {Boolean} includeAll If true, the backgrounds of\n\t * all vertical slides (not just the present) will be updated.\n\t */\n\tfunction updateBackground( includeAll ) {\n\n\t\tvar currentBackground = null;\n\n\t\t// Reverse past/future classes when in RTL mode\n\t\tvar horizontalPast = config.rtl ? 'future' : 'past',\n\t\t\thorizontalFuture = config.rtl ? 'past' : 'future';\n\n\t\t// Update the classes of all backgrounds to match the\n\t\t// states of their slides (past/present/future)\n\t\ttoArray( dom.background.childNodes ).forEach( function( backgroundh, h ) {\n\n\t\t\tbackgroundh.classList.remove( 'past' );\n\t\t\tbackgroundh.classList.remove( 'present' );\n\t\t\tbackgroundh.classList.remove( 'future' );\n\n\t\t\tif( h < indexh ) {\n\t\t\t\tbackgroundh.classList.add( horizontalPast );\n\t\t\t}\n\t\t\telse if ( h > indexh ) {\n\t\t\t\tbackgroundh.classList.add( horizontalFuture );\n\t\t\t}\n\t\t\telse {\n\t\t\t\tbackgroundh.classList.add( 'present' );\n\n\t\t\t\t// Store a reference to the current background element\n\t\t\t\tcurrentBackground = backgroundh;\n\t\t\t}\n\n\t\t\tif( includeAll || h === indexh ) {\n\t\t\t\ttoArray( backgroundh.querySelectorAll( '.slide-background' ) ).forEach( function( backgroundv, v ) {\n\n\t\t\t\t\tbackgroundv.classList.remove( 'past' );\n\t\t\t\t\tbackgroundv.classList.remove( 'present' );\n\t\t\t\t\tbackgroundv.classList.remove( 'future' );\n\n\t\t\t\t\tif( v < indexv ) {\n\t\t\t\t\t\tbackgroundv.classList.add( 'past' );\n\t\t\t\t\t}\n\t\t\t\t\telse if ( v > indexv ) {\n\t\t\t\t\t\tbackgroundv.classList.add( 'future' );\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t\tbackgroundv.classList.add( 'present' );\n\n\t\t\t\t\t\t// Only if this is the present horizontal and vertical slide\n\t\t\t\t\t\tif( h === indexh ) currentBackground = backgroundv;\n\t\t\t\t\t}\n\n\t\t\t\t} );\n\t\t\t}\n\n\t\t} );\n\n\t\t// Stop any currently playing video background\n\t\tif( previousBackground ) {\n\n\t\t\tvar previousVideo = previousBackground.querySelector( 'video' );\n\t\t\tif( previousVideo ) previousVideo.pause();\n\n\t\t}\n\n\t\tif( currentBackground ) {\n\n\t\t\t// Start video playback\n\t\t\tvar currentVideo = currentBackground.querySelector( 'video' );\n\t\t\tif( currentVideo ) {\n\t\t\t\tcurrentVideo.currentTime = 0;\n\t\t\t\tcurrentVideo.play();\n\t\t\t}\n\n\t\t\t// Don't transition between identical backgrounds. This\n\t\t\t// prevents unwanted flicker.\n\t\t\tvar previousBackgroundHash = previousBackground ? previousBackground.getAttribute( 'data-background-hash' ) : null;\n\t\t\tvar currentBackgroundHash = currentBackground.getAttribute( 'data-background-hash' );\n\t\t\tif( currentBackgroundHash && currentBackgroundHash === previousBackgroundHash && currentBackground !== previousBackground ) {\n\t\t\t\tdom.background.classList.add( 'no-transition' );\n\t\t\t}\n\n\t\t\tpreviousBackground = currentBackground;\n\n\t\t}\n\n\t\t// If there's a background brightness flag for this slide,\n\t\t// bubble it to the .reveal container\n\t\tif( currentSlide ) {\n\t\t\t[ 'has-light-background', 'has-dark-background' ].forEach( function( classToBubble ) {\n\t\t\t\tif( currentSlide.classList.contains( classToBubble ) ) {\n\t\t\t\t\tdom.wrapper.classList.add( classToBubble );\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tdom.wrapper.classList.remove( classToBubble );\n\t\t\t\t}\n\t\t\t} );\n\t\t}\n\n\t\t// Allow the first background to apply without transition\n\t\tsetTimeout( function() {\n\t\t\tdom.background.classList.remove( 'no-transition' );\n\t\t}, 1 );\n\n\t}\n\n\t/**\n\t * Updates the position of the parallax background based\n\t * on the current slide index.\n\t */\n\tfunction updateParallax() {\n\n\t\tif( config.parallaxBackgroundImage ) {\n\n\t\t\tvar horizontalSlides = dom.wrapper.querySelectorAll( HORIZONTAL_SLIDES_SELECTOR ),\n\t\t\t\tverticalSlides = dom.wrapper.querySelectorAll( VERTICAL_SLIDES_SELECTOR );\n\n\t\t\tvar backgroundSize = dom.background.style.backgroundSize.split( ' ' ),\n\t\t\t\tbackgroundWidth, backgroundHeight;\n\n\t\t\tif( backgroundSize.length === 1 ) {\n\t\t\t\tbackgroundWidth = backgroundHeight = parseInt( backgroundSize[0], 10 );\n\t\t\t}\n\t\t\telse {\n\t\t\t\tbackgroundWidth = parseInt( backgroundSize[0], 10 );\n\t\t\t\tbackgroundHeight = parseInt( backgroundSize[1], 10 );\n\t\t\t}\n\n\t\t\tvar slideWidth = dom.background.offsetWidth;\n\t\t\tvar horizontalSlideCount = horizontalSlides.length;\n\t\t\tvar horizontalOffset = -( backgroundWidth - slideWidth ) / ( horizontalSlideCount-1 ) * indexh;\n\n\t\t\tvar slideHeight = dom.background.offsetHeight;\n\t\t\tvar verticalSlideCount = verticalSlides.length;\n\t\t\tvar verticalOffset = verticalSlideCount > 1 ? -( backgroundHeight - slideHeight ) / ( verticalSlideCount-1 ) * indexv : 0;\n\n\t\t\tdom.background.style.backgroundPosition = horizontalOffset + 'px ' + verticalOffset + 'px';\n\n\t\t}\n\n\t}\n\n\t/**\n\t * Called when the given slide is within the configured view\n\t * distance. Shows the slide element and loads any content\n\t * that is set to load lazily (data-src).\n\t */\n\tfunction showSlide( slide ) {\n\n\t\t// Show the slide element\n\t\tslide.style.display = 'block';\n\n\t\t// Media elements with data-src attributes\n\t\ttoArray( slide.querySelectorAll( 'img[data-src], video[data-src], audio[data-src], iframe[data-src]' ) ).forEach( function( element ) {\n\t\t\telement.setAttribute( 'src', element.getAttribute( 'data-src' ) );\n\t\t\telement.removeAttribute( 'data-src' );\n\t\t} );\n\n\t\t// Media elements with <source> children\n\t\ttoArray( slide.querySelectorAll( 'video, audio' ) ).forEach( function( media ) {\n\t\t\tvar sources = 0;\n\n\t\t\ttoArray( media.querySelectorAll( 'source[data-src]' ) ).forEach( function( source ) {\n\t\t\t\tsource.setAttribute( 'src', source.getAttribute( 'data-src' ) );\n\t\t\t\tsource.removeAttribute( 'data-src' );\n\t\t\t\tsources += 1;\n\t\t\t} );\n\n\t\t\t// If we rewrote sources for this video/audio element, we need\n\t\t\t// to manually tell it to load from its new origin\n\t\t\tif( sources > 0 ) {\n\t\t\t\tmedia.load();\n\t\t\t}\n\t\t} );\n\n\n\t\t// Show the corresponding background element\n\t\tvar indices = getIndices( slide );\n\t\tvar background = getSlideBackground( indices.h, indices.v );\n\t\tif( background ) {\n\t\t\tbackground.style.display = 'block';\n\n\t\t\t// If the background contains media, load it\n\t\t\tif( background.hasAttribute( 'data-loaded' ) === false ) {\n\t\t\t\tbackground.setAttribute( 'data-loaded', 'true' );\n\n\t\t\t\tvar backgroundImage = slide.getAttribute( 'data-background-image' ),\n\t\t\t\t\tbackgroundVideo = slide.getAttribute( 'data-background-video' ),\n\t\t\t\t\tbackgroundIframe = slide.getAttribute( 'data-background-iframe' );\n\n\t\t\t\t// Images\n\t\t\t\tif( backgroundImage ) {\n\t\t\t\t\tbackground.style.backgroundImage = 'url('+ backgroundImage +')';\n\t\t\t\t}\n\t\t\t\t// Videos\n\t\t\t\telse if ( backgroundVideo && !isSpeakerNotes() ) {\n\t\t\t\t\tvar video = document.createElement( 'video' );\n\n\t\t\t\t\t// Support comma separated lists of video sources\n\t\t\t\t\tbackgroundVideo.split( ',' ).forEach( function( source ) {\n\t\t\t\t\t\tvideo.innerHTML += '<source src=\"'+ source +'\">';\n\t\t\t\t\t} );\n\n\t\t\t\t\tbackground.appendChild( video );\n\t\t\t\t}\n\t\t\t\t// Iframes\n\t\t\t\telse if ( backgroundIframe ) {\n\t\t\t\t\tvar iframe = document.createElement( 'iframe' );\n\t\t\t\t\t\tiframe.setAttribute( 'src', backgroundIframe );\n\t\t\t\t\t\tiframe.style.width  = '100%';\n\t\t\t\t\t\tiframe.style.height = '100%';\n\t\t\t\t\t\tiframe.style.maxHeight = '100%';\n\t\t\t\t\t\tiframe.style.maxWidth = '100%';\n\n\t\t\t\t\tbackground.appendChild( iframe );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t}\n\n\t/**\n\t * Called when the given slide is moved outside of the\n\t * configured view distance.\n\t */\n\tfunction hideSlide( slide ) {\n\n\t\t// Hide the slide element\n\t\tslide.style.display = 'none';\n\n\t\t// Hide the corresponding background element\n\t\tvar indices = getIndices( slide );\n\t\tvar background = getSlideBackground( indices.h, indices.v );\n\t\tif( background ) {\n\t\t\tbackground.style.display = 'none';\n\t\t}\n\n\t}\n\n\t/**\n\t * Determine what available routes there are for navigation.\n\t *\n\t * @return {Object} containing four booleans: left/right/up/down\n\t */\n\tfunction availableRoutes() {\n\n\t\tvar horizontalSlides = dom.wrapper.querySelectorAll( HORIZONTAL_SLIDES_SELECTOR ),\n\t\t\tverticalSlides = dom.wrapper.querySelectorAll( VERTICAL_SLIDES_SELECTOR );\n\n\t\tvar routes = {\n\t\t\tleft: indexh > 0 || config.loop,\n\t\t\tright: indexh < horizontalSlides.length - 1 || config.loop,\n\t\t\tup: indexv > 0,\n\t\t\tdown: indexv < verticalSlides.length - 1\n\t\t};\n\n\t\t// reverse horizontal controls for rtl\n\t\tif( config.rtl ) {\n\t\t\tvar left = routes.left;\n\t\t\troutes.left = routes.right;\n\t\t\troutes.right = left;\n\t\t}\n\n\t\treturn routes;\n\n\t}\n\n\t/**\n\t * Returns an object describing the available fragment\n\t * directions.\n\t *\n\t * @return {Object} two boolean properties: prev/next\n\t */\n\tfunction availableFragments() {\n\n\t\tif( currentSlide && config.fragments ) {\n\t\t\tvar fragments = currentSlide.querySelectorAll( '.fragment' );\n\t\t\tvar hiddenFragments = currentSlide.querySelectorAll( '.fragment:not(.visible)' );\n\n\t\t\treturn {\n\t\t\t\tprev: fragments.length - hiddenFragments.length > 0,\n\t\t\t\tnext: !!hiddenFragments.length\n\t\t\t};\n\t\t}\n\t\telse {\n\t\t\treturn { prev: false, next: false };\n\t\t}\n\n\t}\n\n\t/**\n\t * Enforces origin-specific format rules for embedded media.\n\t */\n\tfunction formatEmbeddedContent() {\n\n\t\t// YouTube frames must include \"?enablejsapi=1\"\n\t\ttoArray( dom.slides.querySelectorAll( 'iframe[src*=\"youtube.com/embed/\"]' ) ).forEach( function( el ) {\n\t\t\tvar src = el.getAttribute( 'src' );\n\t\t\tif( !/enablejsapi\\=1/gi.test( src ) ) {\n\t\t\t\tel.setAttribute( 'src', src + ( !/\\?/.test( src ) ? '?' : '&' ) + 'enablejsapi=1' );\n\t\t\t}\n\t\t});\n\n\t\t// Vimeo frames must include \"?api=1\"\n\t\ttoArray( dom.slides.querySelectorAll( 'iframe[src*=\"player.vimeo.com/\"]' ) ).forEach( function( el ) {\n\t\t\tvar src = el.getAttribute( 'src' );\n\t\t\tif( !/api\\=1/gi.test( src ) ) {\n\t\t\t\tel.setAttribute( 'src', src + ( !/\\?/.test( src ) ? '?' : '&' ) + 'api=1' );\n\t\t\t}\n\t\t});\n\n\t}\n\n\t/**\n\t * Start playback of any embedded content inside of\n\t * the targeted slide.\n\t */\n\tfunction startEmbeddedContent( slide ) {\n\n\t\tif( slide && !isSpeakerNotes() ) {\n\t\t\t// HTML5 media elements\n\t\t\ttoArray( slide.querySelectorAll( 'video, audio' ) ).forEach( function( el ) {\n\t\t\t\tif( el.hasAttribute( 'data-autoplay' ) ) {\n\t\t\t\t\tel.play();\n\t\t\t\t}\n\t\t\t} );\n\n\t\t\t// iframe embeds\n\t\t\ttoArray( slide.querySelectorAll( 'iframe' ) ).forEach( function( el ) {\n\t\t\t\tel.contentWindow.postMessage( 'slide:start', '*' );\n\t\t\t});\n\n\t\t\t// YouTube embeds\n\t\t\ttoArray( slide.querySelectorAll( 'iframe[src*=\"youtube.com/embed/\"]' ) ).forEach( function( el ) {\n\t\t\t\tif( el.hasAttribute( 'data-autoplay' ) ) {\n\t\t\t\t\tel.contentWindow.postMessage( '{\"event\":\"command\",\"func\":\"playVideo\",\"args\":\"\"}', '*' );\n\t\t\t\t}\n\t\t\t});\n\n\t\t\t// Vimeo embeds\n\t\t\ttoArray( slide.querySelectorAll( 'iframe[src*=\"player.vimeo.com/\"]' ) ).forEach( function( el ) {\n\t\t\t\tif( el.hasAttribute( 'data-autoplay' ) ) {\n\t\t\t\t\tel.contentWindow.postMessage( '{\"method\":\"play\"}', '*' );\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\n\t}\n\n\t/**\n\t * Stop playback of any embedded content inside of\n\t * the targeted slide.\n\t */\n\tfunction stopEmbeddedContent( slide ) {\n\n\t\tif( slide && slide.parentNode ) {\n\t\t\t// HTML5 media elements\n\t\t\ttoArray( slide.querySelectorAll( 'video, audio' ) ).forEach( function( el ) {\n\t\t\t\tif( !el.hasAttribute( 'data-ignore' ) ) {\n\t\t\t\t\tel.pause();\n\t\t\t\t}\n\t\t\t} );\n\n\t\t\t// iframe embeds\n\t\t\ttoArray( slide.querySelectorAll( 'iframe' ) ).forEach( function( el ) {\n\t\t\t\tel.contentWindow.postMessage( 'slide:stop', '*' );\n\t\t\t});\n\n\t\t\t// YouTube embeds\n\t\t\ttoArray( slide.querySelectorAll( 'iframe[src*=\"youtube.com/embed/\"]' ) ).forEach( function( el ) {\n\t\t\t\tif( !el.hasAttribute( 'data-ignore' ) && typeof el.contentWindow.postMessage === 'function' ) {\n\t\t\t\t\tel.contentWindow.postMessage( '{\"event\":\"command\",\"func\":\"pauseVideo\",\"args\":\"\"}', '*' );\n\t\t\t\t}\n\t\t\t});\n\n\t\t\t// Vimeo embeds\n\t\t\ttoArray( slide.querySelectorAll( 'iframe[src*=\"player.vimeo.com/\"]' ) ).forEach( function( el ) {\n\t\t\t\tif( !el.hasAttribute( 'data-ignore' ) && typeof el.contentWindow.postMessage === 'function' ) {\n\t\t\t\t\tel.contentWindow.postMessage( '{\"method\":\"pause\"}', '*' );\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\n\t}\n\n\t/**\n\t * Returns a value ranging from 0-1 that represents\n\t * how far into the presentation we have navigated.\n\t */\n\tfunction getProgress() {\n\n\t\tvar horizontalSlides = toArray( dom.wrapper.querySelectorAll( HORIZONTAL_SLIDES_SELECTOR ) );\n\n\t\t// The number of past and total slides\n\t\tvar totalCount = getTotalSlides();\n\t\tvar pastCount = 0;\n\n\t\t// Step through all slides and count the past ones\n\t\tmainLoop: for( var i = 0; i < horizontalSlides.length; i++ ) {\n\n\t\t\tvar horizontalSlide = horizontalSlides[i];\n\t\t\tvar verticalSlides = toArray( horizontalSlide.querySelectorAll( 'section' ) );\n\n\t\t\tfor( var j = 0; j < verticalSlides.length; j++ ) {\n\n\t\t\t\t// Stop as soon as we arrive at the present\n\t\t\t\tif( verticalSlides[j].classList.contains( 'present' ) ) {\n\t\t\t\t\tbreak mainLoop;\n\t\t\t\t}\n\n\t\t\t\tpastCount++;\n\n\t\t\t}\n\n\t\t\t// Stop as soon as we arrive at the present\n\t\t\tif( horizontalSlide.classList.contains( 'present' ) ) {\n\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\t// Don't count the wrapping section for vertical slides\n\t\t\tif( horizontalSlide.classList.contains( 'stack' ) === false ) {\n\t\t\t\tpastCount++;\n\t\t\t}\n\n\t\t}\n\n\t\tif( currentSlide ) {\n\n\t\t\tvar allFragments = currentSlide.querySelectorAll( '.fragment' );\n\n\t\t\t// If there are fragments in the current slide those should be\n\t\t\t// accounted for in the progress.\n\t\t\tif( allFragments.length > 0 ) {\n\t\t\t\tvar visibleFragments = currentSlide.querySelectorAll( '.fragment.visible' );\n\n\t\t\t\t// This value represents how big a portion of the slide progress\n\t\t\t\t// that is made up by its fragments (0-1)\n\t\t\t\tvar fragmentWeight = 0.9;\n\n\t\t\t\t// Add fragment progress to the past slide count\n\t\t\t\tpastCount += ( visibleFragments.length / allFragments.length ) * fragmentWeight;\n\t\t\t}\n\n\t\t}\n\n\t\treturn pastCount / ( totalCount - 1 );\n\n\t}\n\n\t/**\n\t * Checks if this presentation is running inside of the\n\t * speaker notes window.\n\t */\n\tfunction isSpeakerNotes() {\n\n\t\treturn !!window.location.search.match( /receiver/gi );\n\n\t}\n\n\t/**\n\t * Reads the current URL (hash) and navigates accordingly.\n\t */\n\tfunction readURL() {\n\n\t\tvar hash = window.location.hash;\n\n\t\t// Attempt to parse the hash as either an index or name\n\t\tvar bits = hash.slice( 2 ).split( '/' ),\n\t\t\tname = hash.replace( /#|\\//gi, '' );\n\n\t\t// If the first bit is invalid and there is a name we can\n\t\t// assume that this is a named link\n\t\tif( isNaN( parseInt( bits[0], 10 ) ) && name.length ) {\n\t\t\tvar element;\n\n\t\t\t// Ensure the named link is a valid HTML ID attribute\n\t\t\tif( /^[a-zA-Z][\\w:.-]*$/.test( name ) ) {\n\t\t\t\t// Find the slide with the specified ID\n\t\t\t\telement = document.querySelector( '#' + name );\n\t\t\t}\n\n\t\t\tif( element ) {\n\t\t\t\t// Find the position of the named slide and navigate to it\n\t\t\t\tvar indices = Reveal.getIndices( element );\n\t\t\t\tslide( indices.h, indices.v );\n\t\t\t}\n\t\t\t// If the slide doesn't exist, navigate to the current slide\n\t\t\telse {\n\t\t\t\tslide( indexh || 0, indexv || 0 );\n\t\t\t}\n\t\t}\n\t\telse {\n\t\t\t// Read the index components of the hash\n\t\t\tvar h = parseInt( bits[0], 10 ) || 0,\n\t\t\t\tv = parseInt( bits[1], 10 ) || 0;\n\n\t\t\tif( h !== indexh || v !== indexv ) {\n\t\t\t\tslide( h, v );\n\t\t\t}\n\t\t}\n\n\t}\n\n\t/**\n\t * Updates the page URL (hash) to reflect the current\n\t * state.\n\t *\n\t * @param {Number} delay The time in ms to wait before\n\t * writing the hash\n\t */\n\tfunction writeURL( delay ) {\n\n\t\tif( config.history ) {\n\n\t\t\t// Make sure there's never more than one timeout running\n\t\t\tclearTimeout( writeURLTimeout );\n\n\t\t\t// If a delay is specified, timeout this call\n\t\t\tif( typeof delay === 'number' ) {\n\t\t\t\twriteURLTimeout = setTimeout( writeURL, delay );\n\t\t\t}\n\t\t\telse if( currentSlide ) {\n\t\t\t\tvar url = '/';\n\n\t\t\t\t// Attempt to create a named link based on the slide's ID\n\t\t\t\tvar id = currentSlide.getAttribute( 'id' );\n\t\t\t\tif( id ) {\n\t\t\t\t\tid = id.toLowerCase();\n\t\t\t\t\tid = id.replace( /[^a-zA-Z0-9\\-\\_\\:\\.]/g, '' );\n\t\t\t\t}\n\n\t\t\t\t// If the current slide has an ID, use that as a named link\n\t\t\t\tif( typeof id === 'string' && id.length ) {\n\t\t\t\t\turl = '/' + id;\n\t\t\t\t}\n\t\t\t\t// Otherwise use the /h/v index\n\t\t\t\telse {\n\t\t\t\t\tif( indexh > 0 || indexv > 0 ) url += indexh;\n\t\t\t\t\tif( indexv > 0 ) url += '/' + indexv;\n\t\t\t\t}\n\n\t\t\t\twindow.location.hash = url;\n\t\t\t}\n\t\t}\n\n\t}\n\n\t/**\n\t * Retrieves the h/v location of the current, or specified,\n\t * slide.\n\t *\n\t * @param {HTMLElement} slide If specified, the returned\n\t * index will be for this slide rather than the currently\n\t * active one\n\t *\n\t * @return {Object} { h: <int>, v: <int>, f: <int> }\n\t */\n\tfunction getIndices( slide ) {\n\n\t\t// By default, return the current indices\n\t\tvar h = indexh,\n\t\t\tv = indexv,\n\t\t\tf;\n\n\t\t// If a slide is specified, return the indices of that slide\n\t\tif( slide ) {\n\t\t\tvar isVertical = isVerticalSlide( slide );\n\t\t\tvar slideh = isVertical ? slide.parentNode : slide;\n\n\t\t\t// Select all horizontal slides\n\t\t\tvar horizontalSlides = toArray( dom.wrapper.querySelectorAll( HORIZONTAL_SLIDES_SELECTOR ) );\n\n\t\t\t// Now that we know which the horizontal slide is, get its index\n\t\t\th = Math.max( horizontalSlides.indexOf( slideh ), 0 );\n\n\t\t\t// Assume we're not vertical\n\t\t\tv = undefined;\n\n\t\t\t// If this is a vertical slide, grab the vertical index\n\t\t\tif( isVertical ) {\n\t\t\t\tv = Math.max( toArray( slide.parentNode.querySelectorAll( 'section' ) ).indexOf( slide ), 0 );\n\t\t\t}\n\t\t}\n\n\t\tif( !slide && currentSlide ) {\n\t\t\tvar hasFragments = currentSlide.querySelectorAll( '.fragment' ).length > 0;\n\t\t\tif( hasFragments ) {\n\t\t\t\tvar currentFragment = currentSlide.querySelector( '.current-fragment' );\n\t\t\t\tif( currentFragment && currentFragment.hasAttribute( 'data-fragment-index' ) ) {\n\t\t\t\t\tf = parseInt( currentFragment.getAttribute( 'data-fragment-index' ), 10 );\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tf = currentSlide.querySelectorAll( '.fragment.visible' ).length - 1;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn { h: h, v: v, f: f };\n\n\t}\n\n\t/**\n\t * Retrieves the total number of slides in this presentation.\n\t */\n\tfunction getTotalSlides() {\n\n\t\treturn dom.wrapper.querySelectorAll( SLIDES_SELECTOR + ':not(.stack)' ).length;\n\n\t}\n\n\t/**\n\t * Returns the slide element matching the specified index.\n\t */\n\tfunction getSlide( x, y ) {\n\n\t\tvar horizontalSlide = dom.wrapper.querySelectorAll( HORIZONTAL_SLIDES_SELECTOR )[ x ];\n\t\tvar verticalSlides = horizontalSlide && horizontalSlide.querySelectorAll( 'section' );\n\n\t\tif( verticalSlides && verticalSlides.length && typeof y === 'number' ) {\n\t\t\treturn verticalSlides ? verticalSlides[ y ] : undefined;\n\t\t}\n\n\t\treturn horizontalSlide;\n\n\t}\n\n\t/**\n\t * Returns the background element for the given slide.\n\t * All slides, even the ones with no background properties\n\t * defined, have a background element so as long as the\n\t * index is valid an element will be returned.\n\t */\n\tfunction getSlideBackground( x, y ) {\n\n\t\t// When printing to PDF the slide backgrounds are nested\n\t\t// inside of the slides\n\t\tif( isPrintingPDF() ) {\n\t\t\tvar slide = getSlide( x, y );\n\t\t\tif( slide ) {\n\t\t\t\tvar background = slide.querySelector( '.slide-background' );\n\t\t\t\tif( background && background.parentNode === slide ) {\n\t\t\t\t\treturn background;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn undefined;\n\t\t}\n\n\t\tvar horizontalBackground = dom.wrapper.querySelectorAll( '.backgrounds>.slide-background' )[ x ];\n\t\tvar verticalBackgrounds = horizontalBackground && horizontalBackground.querySelectorAll( '.slide-background' );\n\n\t\tif( verticalBackgrounds && verticalBackgrounds.length && typeof y === 'number' ) {\n\t\t\treturn verticalBackgrounds ? verticalBackgrounds[ y ] : undefined;\n\t\t}\n\n\t\treturn horizontalBackground;\n\n\t}\n\n\t/**\n\t * Retrieves the current state of the presentation as\n\t * an object. This state can then be restored at any\n\t * time.\n\t */\n\tfunction getState() {\n\n\t\tvar indices = getIndices();\n\n\t\treturn {\n\t\t\tindexh: indices.h,\n\t\t\tindexv: indices.v,\n\t\t\tindexf: indices.f,\n\t\t\tpaused: isPaused(),\n\t\t\toverview: isOverview()\n\t\t};\n\n\t}\n\n\t/**\n\t * Restores the presentation to the given state.\n\t *\n\t * @param {Object} state As generated by getState()\n\t */\n\tfunction setState( state ) {\n\n\t\tif( typeof state === 'object' ) {\n\t\t\tslide( deserialize( state.indexh ), deserialize( state.indexv ), deserialize( state.indexf ) );\n\n\t\t\tvar pausedFlag = deserialize( state.paused ),\n\t\t\t\toverviewFlag = deserialize( state.overview );\n\n\t\t\tif( typeof pausedFlag === 'boolean' && pausedFlag !== isPaused() ) {\n\t\t\t\ttogglePause( pausedFlag );\n\t\t\t}\n\n\t\t\tif( typeof overviewFlag === 'boolean' && overviewFlag !== isOverview() ) {\n\t\t\t\ttoggleOverview( overviewFlag );\n\t\t\t}\n\t\t}\n\n\t}\n\n\t/**\n\t * Return a sorted fragments list, ordered by an increasing\n\t * \"data-fragment-index\" attribute.\n\t *\n\t * Fragments will be revealed in the order that they are returned by\n\t * this function, so you can use the index attributes to control the\n\t * order of fragment appearance.\n\t *\n\t * To maintain a sensible default fragment order, fragments are presumed\n\t * to be passed in document order. This function adds a \"fragment-index\"\n\t * attribute to each node if such an attribute is not already present,\n\t * and sets that attribute to an integer value which is the position of\n\t * the fragment within the fragments list.\n\t */\n\tfunction sortFragments( fragments ) {\n\n\t\tfragments = toArray( fragments );\n\n\t\tvar ordered = [],\n\t\t\tunordered = [],\n\t\t\tsorted = [];\n\n\t\t// Group ordered and unordered elements\n\t\tfragments.forEach( function( fragment, i ) {\n\t\t\tif( fragment.hasAttribute( 'data-fragment-index' ) ) {\n\t\t\t\tvar index = parseInt( fragment.getAttribute( 'data-fragment-index' ), 10 );\n\n\t\t\t\tif( !ordered[index] ) {\n\t\t\t\t\tordered[index] = [];\n\t\t\t\t}\n\n\t\t\t\tordered[index].push( fragment );\n\t\t\t}\n\t\t\telse {\n\t\t\t\tunordered.push( [ fragment ] );\n\t\t\t}\n\t\t} );\n\n\t\t// Append fragments without explicit indices in their\n\t\t// DOM order\n\t\tordered = ordered.concat( unordered );\n\n\t\t// Manually count the index up per group to ensure there\n\t\t// are no gaps\n\t\tvar index = 0;\n\n\t\t// Push all fragments in their sorted order to an array,\n\t\t// this flattens the groups\n\t\tordered.forEach( function( group ) {\n\t\t\tgroup.forEach( function( fragment ) {\n\t\t\t\tsorted.push( fragment );\n\t\t\t\tfragment.setAttribute( 'data-fragment-index', index );\n\t\t\t} );\n\n\t\t\tindex ++;\n\t\t} );\n\n\t\treturn sorted;\n\n\t}\n\n\t/**\n\t * Navigate to the specified slide fragment.\n\t *\n\t * @param {Number} index The index of the fragment that\n\t * should be shown, -1 means all are invisible\n\t * @param {Number} offset Integer offset to apply to the\n\t * fragment index\n\t *\n\t * @return {Boolean} true if a change was made in any\n\t * fragments visibility as part of this call\n\t */\n\tfunction navigateFragment( index, offset ) {\n\n\t\tif( currentSlide && config.fragments ) {\n\n\t\t\tvar fragments = sortFragments( currentSlide.querySelectorAll( '.fragment' ) );\n\t\t\tif( fragments.length ) {\n\n\t\t\t\t// If no index is specified, find the current\n\t\t\t\tif( typeof index !== 'number' ) {\n\t\t\t\t\tvar lastVisibleFragment = sortFragments( currentSlide.querySelectorAll( '.fragment.visible' ) ).pop();\n\n\t\t\t\t\tif( lastVisibleFragment ) {\n\t\t\t\t\t\tindex = parseInt( lastVisibleFragment.getAttribute( 'data-fragment-index' ) || 0, 10 );\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t\tindex = -1;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// If an offset is specified, apply it to the index\n\t\t\t\tif( typeof offset === 'number' ) {\n\t\t\t\t\tindex += offset;\n\t\t\t\t}\n\n\t\t\t\tvar fragmentsShown = [],\n\t\t\t\t\tfragmentsHidden = [];\n\n\t\t\t\ttoArray( fragments ).forEach( function( element, i ) {\n\n\t\t\t\t\tif( element.hasAttribute( 'data-fragment-index' ) ) {\n\t\t\t\t\t\ti = parseInt( element.getAttribute( 'data-fragment-index' ), 10 );\n\t\t\t\t\t}\n\n\t\t\t\t\t// Visible fragments\n\t\t\t\t\tif( i <= index ) {\n\t\t\t\t\t\tif( !element.classList.contains( 'visible' ) ) fragmentsShown.push( element );\n\t\t\t\t\t\telement.classList.add( 'visible' );\n\t\t\t\t\t\telement.classList.remove( 'current-fragment' );\n\n\t\t\t\t\t\t// Announce the fragments one by one to the Screen Reader\n\t\t\t\t\t\tdom.statusDiv.textContent = element.textContent;\n\n\t\t\t\t\t\tif( i === index ) {\n\t\t\t\t\t\t\telement.classList.add( 'current-fragment' );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\t// Hidden fragments\n\t\t\t\t\telse {\n\t\t\t\t\t\tif( element.classList.contains( 'visible' ) ) fragmentsHidden.push( element );\n\t\t\t\t\t\telement.classList.remove( 'visible' );\n\t\t\t\t\t\telement.classList.remove( 'current-fragment' );\n\t\t\t\t\t}\n\n\n\t\t\t\t} );\n\n\t\t\t\tif( fragmentsHidden.length ) {\n\t\t\t\t\tdispatchEvent( 'fragmenthidden', { fragment: fragmentsHidden[0], fragments: fragmentsHidden } );\n\t\t\t\t}\n\n\t\t\t\tif( fragmentsShown.length ) {\n\t\t\t\t\tdispatchEvent( 'fragmentshown', { fragment: fragmentsShown[0], fragments: fragmentsShown } );\n\t\t\t\t}\n\n\t\t\t\tupdateControls();\n\t\t\t\tupdateProgress();\n\n\t\t\t\treturn !!( fragmentsShown.length || fragmentsHidden.length );\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn false;\n\n\t}\n\n\t/**\n\t * Navigate to the next slide fragment.\n\t *\n\t * @return {Boolean} true if there was a next fragment,\n\t * false otherwise\n\t */\n\tfunction nextFragment() {\n\n\t\treturn navigateFragment( null, 1 );\n\n\t}\n\n\t/**\n\t * Navigate to the previous slide fragment.\n\t *\n\t * @return {Boolean} true if there was a previous fragment,\n\t * false otherwise\n\t */\n\tfunction previousFragment() {\n\n\t\treturn navigateFragment( null, -1 );\n\n\t}\n\n\t/**\n\t * Cues a new automated slide if enabled in the config.\n\t */\n\tfunction cueAutoSlide() {\n\n\t\tcancelAutoSlide();\n\n\t\tif( currentSlide ) {\n\n\t\t\tvar currentFragment = currentSlide.querySelector( '.current-fragment' );\n\n\t\t\tvar fragmentAutoSlide = currentFragment ? currentFragment.getAttribute( 'data-autoslide' ) : null;\n\t\t\tvar parentAutoSlide = currentSlide.parentNode ? currentSlide.parentNode.getAttribute( 'data-autoslide' ) : null;\n\t\t\tvar slideAutoSlide = currentSlide.getAttribute( 'data-autoslide' );\n\n\t\t\t// Pick value in the following priority order:\n\t\t\t// 1. Current fragment's data-autoslide\n\t\t\t// 2. Current slide's data-autoslide\n\t\t\t// 3. Parent slide's data-autoslide\n\t\t\t// 4. Global autoSlide setting\n\t\t\tif( fragmentAutoSlide ) {\n\t\t\t\tautoSlide = parseInt( fragmentAutoSlide, 10 );\n\t\t\t}\n\t\t\telse if( slideAutoSlide ) {\n\t\t\t\tautoSlide = parseInt( slideAutoSlide, 10 );\n\t\t\t}\n\t\t\telse if( parentAutoSlide ) {\n\t\t\t\tautoSlide = parseInt( parentAutoSlide, 10 );\n\t\t\t}\n\t\t\telse {\n\t\t\t\tautoSlide = config.autoSlide;\n\t\t\t}\n\n\t\t\t// If there are media elements with data-autoplay,\n\t\t\t// automatically set the autoSlide duration to the\n\t\t\t// length of that media\n\t\t\ttoArray( currentSlide.querySelectorAll( 'video, audio' ) ).forEach( function( el ) {\n\t\t\t\tif( el.hasAttribute( 'data-autoplay' ) ) {\n\t\t\t\t\tif( autoSlide && el.duration * 1000 > autoSlide ) {\n\t\t\t\t\t\tautoSlide = ( el.duration * 1000 ) + 1000;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} );\n\n\t\t\t// Cue the next auto-slide if:\n\t\t\t// - There is an autoSlide value\n\t\t\t// - Auto-sliding isn't paused by the user\n\t\t\t// - The presentation isn't paused\n\t\t\t// - The overview isn't active\n\t\t\t// - The presentation isn't over\n\t\t\tif( autoSlide && !autoSlidePaused && !isPaused() && !isOverview() && ( !Reveal.isLastSlide() || availableFragments().next || config.loop === true ) ) {\n\t\t\t\tautoSlideTimeout = setTimeout( navigateNext, autoSlide );\n\t\t\t\tautoSlideStartTime = Date.now();\n\t\t\t}\n\n\t\t\tif( autoSlidePlayer ) {\n\t\t\t\tautoSlidePlayer.setPlaying( autoSlideTimeout !== -1 );\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\t/**\n\t * Cancels any ongoing request to auto-slide.\n\t */\n\tfunction cancelAutoSlide() {\n\n\t\tclearTimeout( autoSlideTimeout );\n\t\tautoSlideTimeout = -1;\n\n\t}\n\n\tfunction pauseAutoSlide() {\n\n\t\tif( autoSlide && !autoSlidePaused ) {\n\t\t\tautoSlidePaused = true;\n\t\t\tdispatchEvent( 'autoslidepaused' );\n\t\t\tclearTimeout( autoSlideTimeout );\n\n\t\t\tif( autoSlidePlayer ) {\n\t\t\t\tautoSlidePlayer.setPlaying( false );\n\t\t\t}\n\t\t}\n\n\t}\n\n\tfunction resumeAutoSlide() {\n\n\t\tif( autoSlide && autoSlidePaused ) {\n\t\t\tautoSlidePaused = false;\n\t\t\tdispatchEvent( 'autoslideresumed' );\n\t\t\tcueAutoSlide();\n\t\t}\n\n\t}\n\n\tfunction navigateLeft() {\n\n\t\t// Reverse for RTL\n\t\tif( config.rtl ) {\n\t\t\tif( ( isOverview() || nextFragment() === false ) && availableRoutes().left ) {\n\t\t\t\tslide( indexh + 1 );\n\t\t\t}\n\t\t}\n\t\t// Normal navigation\n\t\telse if( ( isOverview() || previousFragment() === false ) && availableRoutes().left ) {\n\t\t\tslide( indexh - 1 );\n\t\t}\n\n\t}\n\n\tfunction navigateRight() {\n\n\t\t// Reverse for RTL\n\t\tif( config.rtl ) {\n\t\t\tif( ( isOverview() || previousFragment() === false ) && availableRoutes().right ) {\n\t\t\t\tslide( indexh - 1 );\n\t\t\t}\n\t\t}\n\t\t// Normal navigation\n\t\telse if( ( isOverview() || nextFragment() === false ) && availableRoutes().right ) {\n\t\t\tslide( indexh + 1 );\n\t\t}\n\n\t}\n\n\tfunction navigateUp() {\n\n\t\t// Prioritize hiding fragments\n\t\tif( ( isOverview() || previousFragment() === false ) && availableRoutes().up ) {\n\t\t\tslide( indexh, indexv - 1 );\n\t\t}\n\n\t}\n\n\tfunction navigateDown() {\n\n\t\t// Prioritize revealing fragments\n\t\tif( ( isOverview() || nextFragment() === false ) && availableRoutes().down ) {\n\t\t\tslide( indexh, indexv + 1 );\n\t\t}\n\n\t}\n\n\t/**\n\t * Navigates backwards, prioritized in the following order:\n\t * 1) Previous fragment\n\t * 2) Previous vertical slide\n\t * 3) Previous horizontal slide\n\t */\n\tfunction navigatePrev() {\n\n\t\t// Prioritize revealing fragments\n\t\tif( previousFragment() === false ) {\n\t\t\tif( availableRoutes().up ) {\n\t\t\t\tnavigateUp();\n\t\t\t}\n\t\t\telse {\n\t\t\t\t// Fetch the previous horizontal slide, if there is one\n\t\t\t\tvar previousSlide;\n\n\t\t\t\tif( config.rtl ) {\n\t\t\t\t\tpreviousSlide = toArray( dom.wrapper.querySelectorAll( HORIZONTAL_SLIDES_SELECTOR + '.future' ) ).pop();\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tpreviousSlide = toArray( dom.wrapper.querySelectorAll( HORIZONTAL_SLIDES_SELECTOR + '.past' ) ).pop();\n\t\t\t\t}\n\n\t\t\t\tif( previousSlide ) {\n\t\t\t\t\tvar v = ( previousSlide.querySelectorAll( 'section' ).length - 1 ) || undefined;\n\t\t\t\t\tvar h = indexh - 1;\n\t\t\t\t\tslide( h, v );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t}\n\n\t/**\n\t * The reverse of #navigatePrev().\n\t */\n\tfunction navigateNext() {\n\n\t\t// Prioritize revealing fragments\n\t\tif( nextFragment() === false ) {\n\t\t\tif( availableRoutes().down ) {\n\t\t\t\tnavigateDown();\n\t\t\t}\n\t\t\telse if( config.rtl ) {\n\t\t\t\tnavigateLeft();\n\t\t\t}\n\t\t\telse {\n\t\t\t\tnavigateRight();\n\t\t\t}\n\t\t}\n\n\t\t// If auto-sliding is enabled we need to cue up\n\t\t// another timeout\n\t\tcueAutoSlide();\n\n\t}\n\n\n\t// --------------------------------------------------------------------//\n\t// ----------------------------- EVENTS -------------------------------//\n\t// --------------------------------------------------------------------//\n\n\t/**\n\t * Called by all event handlers that are based on user\n\t * input.\n\t */\n\tfunction onUserInput( event ) {\n\n\t\tif( config.autoSlideStoppable ) {\n\t\t\tpauseAutoSlide();\n\t\t}\n\n\t}\n\n\t/**\n\t * Handler for the document level 'keypress' event.\n\t */\n\tfunction onDocumentKeyPress( event ) {\n\n\t\t// Check if the pressed key is question mark\n\t\tif( event.shiftKey && event.charCode === 63 ) {\n\t\t\tif( dom.overlay ) {\n\t\t\t\tcloseOverlay();\n\t\t\t}\n\t\t\telse {\n\t\t\t\tshowHelp( true );\n\t\t\t}\n\t\t}\n\n\t}\n\n\t/**\n\t * Handler for the document level 'keydown' event.\n\t */\n\tfunction onDocumentKeyDown( event ) {\n\n\t\t// If there's a condition specified and it returns false,\n\t\t// ignore this event\n\t\tif( typeof config.keyboardCondition === 'function' && config.keyboardCondition() === false ) {\n\t\t\treturn true;\n\t\t}\n\n\t\t// Remember if auto-sliding was paused so we can toggle it\n\t\tvar autoSlideWasPaused = autoSlidePaused;\n\n\t\tonUserInput( event );\n\n\t\t// Check if there's a focused element that could be using\n\t\t// the keyboard\n\t\tvar activeElementIsCE = document.activeElement && document.activeElement.contentEditable !== 'inherit';\n\t\tvar activeElementIsInput = document.activeElement && document.activeElement.tagName && /input|textarea/i.test( document.activeElement.tagName );\n\n\t\t// Disregard the event if there's a focused element or a\n\t\t// keyboard modifier key is present\n\t\tif( activeElementIsCE || activeElementIsInput || (event.shiftKey && event.keyCode !== 32) || event.altKey || event.ctrlKey || event.metaKey ) return;\n\n\t\t// While paused only allow \"unpausing\" keyboard events (b and .)\n\t\tif( isPaused() && [66,190,191].indexOf( event.keyCode ) === -1 ) {\n\t\t\treturn false;\n\t\t}\n\n\t\tvar triggered = false;\n\n\t\t// 1. User defined key bindings\n\t\tif( typeof config.keyboard === 'object' ) {\n\n\t\t\tfor( var key in config.keyboard ) {\n\n\t\t\t\t// Check if this binding matches the pressed key\n\t\t\t\tif( parseInt( key, 10 ) === event.keyCode ) {\n\n\t\t\t\t\tvar value = config.keyboard[ key ];\n\n\t\t\t\t\t// Callback function\n\t\t\t\t\tif( typeof value === 'function' ) {\n\t\t\t\t\t\tvalue.apply( null, [ event ] );\n\t\t\t\t\t}\n\t\t\t\t\t// String shortcuts to reveal.js API\n\t\t\t\t\telse if( typeof value === 'string' && typeof Reveal[ value ] === 'function' ) {\n\t\t\t\t\t\tReveal[ value ].call();\n\t\t\t\t\t}\n\n\t\t\t\t\ttriggered = true;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\t// 2. System defined key bindings\n\t\tif( triggered === false ) {\n\n\t\t\t// Assume true and try to prove false\n\t\t\ttriggered = true;\n\n\t\t\tswitch( event.keyCode ) {\n\t\t\t\t// p, page up\n\t\t\t\tcase 80: case 33: navigatePrev(); break;\n\t\t\t\t// n, page down\n\t\t\t\tcase 78: case 34: navigateNext(); break;\n\t\t\t\t// h, left\n\t\t\t\tcase 72: case 37: navigateLeft(); break;\n\t\t\t\t// l, right\n\t\t\t\tcase 76: case 39: navigateRight(); break;\n\t\t\t\t// k, up\n\t\t\t\tcase 75: case 38: navigateUp(); break;\n\t\t\t\t// j, down\n\t\t\t\tcase 74: case 40: navigateDown(); break;\n\t\t\t\t// home\n\t\t\t\tcase 36: slide( 0 ); break;\n\t\t\t\t// end\n\t\t\t\tcase 35: slide( Number.MAX_VALUE ); break;\n\t\t\t\t// space\n\t\t\t\tcase 32: isOverview() ? deactivateOverview() : event.shiftKey ? navigatePrev() : navigateNext(); break;\n\t\t\t\t// return\n\t\t\t\tcase 13: isOverview() ? deactivateOverview() : triggered = false; break;\n\t\t\t\t// two-spot, semicolon, b, period, Logitech presenter tools \"black screen\" button\n\t\t\t\tcase 58: case 59: case 66: case 190: case 191: togglePause(); break;\n\t\t\t\t// f\n\t\t\t\tcase 70: enterFullscreen(); break;\n\t\t\t\t// a\n\t\t\t\tcase 65: if ( config.autoSlideStoppable ) toggleAutoSlide( autoSlideWasPaused ); break;\n\t\t\t\tdefault:\n\t\t\t\t\ttriggered = false;\n\t\t\t}\n\n\t\t}\n\n\t\t// If the input resulted in a triggered action we should prevent\n\t\t// the browsers default behavior\n\t\tif( triggered ) {\n\t\t\tevent.preventDefault && event.preventDefault();\n\t\t}\n\t\t// ESC or O key\n\t\telse if ( ( event.keyCode === 27 || event.keyCode === 79 ) && features.transforms3d ) {\n\t\t\tif( dom.overlay ) {\n\t\t\t\tcloseOverlay();\n\t\t\t}\n\t\t\telse {\n\t\t\t\ttoggleOverview();\n\t\t\t}\n\n\t\t\tevent.preventDefault && event.preventDefault();\n\t\t}\n\n\t\t// If auto-sliding is enabled we need to cue up\n\t\t// another timeout\n\t\tcueAutoSlide();\n\n\t}\n\n\t/**\n\t * Handler for the 'touchstart' event, enables support for\n\t * swipe and pinch gestures.\n\t */\n\tfunction onTouchStart( event ) {\n\n\t\ttouch.startX = event.touches[0].clientX;\n\t\ttouch.startY = event.touches[0].clientY;\n\t\ttouch.startCount = event.touches.length;\n\n\t\t// If there's two touches we need to memorize the distance\n\t\t// between those two points to detect pinching\n\t\tif( event.touches.length === 2 && config.overview ) {\n\t\t\ttouch.startSpan = distanceBetween( {\n\t\t\t\tx: event.touches[1].clientX,\n\t\t\t\ty: event.touches[1].clientY\n\t\t\t}, {\n\t\t\t\tx: touch.startX,\n\t\t\t\ty: touch.startY\n\t\t\t} );\n\t\t}\n\n\t}\n\n\t/**\n\t * Handler for the 'touchmove' event.\n\t */\n\tfunction onTouchMove( event ) {\n\n\t\t// Each touch should only trigger one action\n\t\tif( !touch.captured ) {\n\t\t\tonUserInput( event );\n\n\t\t\tvar currentX = event.touches[0].clientX;\n\t\t\tvar currentY = event.touches[0].clientY;\n\n\t\t\t// If the touch started with two points and still has\n\t\t\t// two active touches; test for the pinch gesture\n\t\t\tif( event.touches.length === 2 && touch.startCount === 2 && config.overview ) {\n\n\t\t\t\t// The current distance in pixels between the two touch points\n\t\t\t\tvar currentSpan = distanceBetween( {\n\t\t\t\t\tx: event.touches[1].clientX,\n\t\t\t\t\ty: event.touches[1].clientY\n\t\t\t\t}, {\n\t\t\t\t\tx: touch.startX,\n\t\t\t\t\ty: touch.startY\n\t\t\t\t} );\n\n\t\t\t\t// If the span is larger than the desire amount we've got\n\t\t\t\t// ourselves a pinch\n\t\t\t\tif( Math.abs( touch.startSpan - currentSpan ) > touch.threshold ) {\n\t\t\t\t\ttouch.captured = true;\n\n\t\t\t\t\tif( currentSpan < touch.startSpan ) {\n\t\t\t\t\t\tactivateOverview();\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t\tdeactivateOverview();\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tevent.preventDefault();\n\n\t\t\t}\n\t\t\t// There was only one touch point, look for a swipe\n\t\t\telse if( event.touches.length === 1 && touch.startCount !== 2 ) {\n\n\t\t\t\tvar deltaX = currentX - touch.startX,\n\t\t\t\t\tdeltaY = currentY - touch.startY;\n\n\t\t\t\tif( deltaX > touch.threshold && Math.abs( deltaX ) > Math.abs( deltaY ) ) {\n\t\t\t\t\ttouch.captured = true;\n\t\t\t\t\tnavigateLeft();\n\t\t\t\t}\n\t\t\t\telse if( deltaX < -touch.threshold && Math.abs( deltaX ) > Math.abs( deltaY ) ) {\n\t\t\t\t\ttouch.captured = true;\n\t\t\t\t\tnavigateRight();\n\t\t\t\t}\n\t\t\t\telse if( deltaY > touch.threshold ) {\n\t\t\t\t\ttouch.captured = true;\n\t\t\t\t\tnavigateUp();\n\t\t\t\t}\n\t\t\t\telse if( deltaY < -touch.threshold ) {\n\t\t\t\t\ttouch.captured = true;\n\t\t\t\t\tnavigateDown();\n\t\t\t\t}\n\n\t\t\t\t// If we're embedded, only block touch events if they have\n\t\t\t\t// triggered an action\n\t\t\t\tif( config.embedded ) {\n\t\t\t\t\tif( touch.captured || isVerticalSlide( currentSlide ) ) {\n\t\t\t\t\t\tevent.preventDefault();\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\t// Not embedded? Block them all to avoid needless tossing\n\t\t\t\t// around of the viewport in iOS\n\t\t\t\telse {\n\t\t\t\t\tevent.preventDefault();\n\t\t\t\t}\n\n\t\t\t}\n\t\t}\n\t\t// There's a bug with swiping on some Android devices unless\n\t\t// the default action is always prevented\n\t\telse if( navigator.userAgent.match( /android/gi ) ) {\n\t\t\tevent.preventDefault();\n\t\t}\n\n\t}\n\n\t/**\n\t * Handler for the 'touchend' event.\n\t */\n\tfunction onTouchEnd( event ) {\n\n\t\ttouch.captured = false;\n\n\t}\n\n\t/**\n\t * Convert pointer down to touch start.\n\t */\n\tfunction onPointerDown( event ) {\n\n\t\tif( event.pointerType === event.MSPOINTER_TYPE_TOUCH || event.pointerType === \"touch\" ) {\n\t\t\tevent.touches = [{ clientX: event.clientX, clientY: event.clientY }];\n\t\t\tonTouchStart( event );\n\t\t}\n\n\t}\n\n\t/**\n\t * Convert pointer move to touch move.\n\t */\n\tfunction onPointerMove( event ) {\n\n\t\tif( event.pointerType === event.MSPOINTER_TYPE_TOUCH || event.pointerType === \"touch\" )  {\n\t\t\tevent.touches = [{ clientX: event.clientX, clientY: event.clientY }];\n\t\t\tonTouchMove( event );\n\t\t}\n\n\t}\n\n\t/**\n\t * Convert pointer up to touch end.\n\t */\n\tfunction onPointerUp( event ) {\n\n\t\tif( event.pointerType === event.MSPOINTER_TYPE_TOUCH || event.pointerType === \"touch\" )  {\n\t\t\tevent.touches = [{ clientX: event.clientX, clientY: event.clientY }];\n\t\t\tonTouchEnd( event );\n\t\t}\n\n\t}\n\n\t/**\n\t * Handles mouse wheel scrolling, throttled to avoid skipping\n\t * multiple slides.\n\t */\n\tfunction onDocumentMouseScroll( event ) {\n\n\t\tif( Date.now() - lastMouseWheelStep > 600 ) {\n\n\t\t\tlastMouseWheelStep = Date.now();\n\n\t\t\tvar delta = event.detail || -event.wheelDelta;\n\t\t\tif( delta > 0 ) {\n\t\t\t\tnavigateNext();\n\t\t\t}\n\t\t\telse {\n\t\t\t\tnavigatePrev();\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\t/**\n\t * Clicking on the progress bar results in a navigation to the\n\t * closest approximate horizontal slide using this equation:\n\t *\n\t * ( clickX / presentationWidth ) * numberOfSlides\n\t */\n\tfunction onProgressClicked( event ) {\n\n\t\tonUserInput( event );\n\n\t\tevent.preventDefault();\n\n\t\tvar slidesTotal = toArray( dom.wrapper.querySelectorAll( HORIZONTAL_SLIDES_SELECTOR ) ).length;\n\t\tvar slideIndex = Math.floor( ( event.clientX / dom.wrapper.offsetWidth ) * slidesTotal );\n\n\t\tslide( slideIndex );\n\n\t}\n\n\t/**\n\t * Event handler for navigation control buttons.\n\t */\n\tfunction onNavigateLeftClicked( event ) { event.preventDefault(); onUserInput(); navigateLeft(); }\n\tfunction onNavigateRightClicked( event ) { event.preventDefault(); onUserInput(); navigateRight(); }\n\tfunction onNavigateUpClicked( event ) { event.preventDefault(); onUserInput(); navigateUp(); }\n\tfunction onNavigateDownClicked( event ) { event.preventDefault(); onUserInput(); navigateDown(); }\n\tfunction onNavigatePrevClicked( event ) { event.preventDefault(); onUserInput(); navigatePrev(); }\n\tfunction onNavigateNextClicked( event ) { event.preventDefault(); onUserInput(); navigateNext(); }\n\n\t/**\n\t * Handler for the window level 'hashchange' event.\n\t */\n\tfunction onWindowHashChange( event ) {\n\n\t\treadURL();\n\n\t}\n\n\t/**\n\t * Handler for the window level 'resize' event.\n\t */\n\tfunction onWindowResize( event ) {\n\n\t\tlayout();\n\n\t}\n\n\t/**\n\t * Handle for the window level 'visibilitychange' event.\n\t */\n\tfunction onPageVisibilityChange( event ) {\n\n\t\tvar isHidden =  document.webkitHidden ||\n\t\t\t\t\t\tdocument.msHidden ||\n\t\t\t\t\t\tdocument.hidden;\n\n\t\t// If, after clicking a link or similar and we're coming back,\n\t\t// focus the document.body to ensure we can use keyboard shortcuts\n\t\tif( isHidden === false && document.activeElement !== document.body ) {\n\t\t\tdocument.activeElement.blur();\n\t\t\tdocument.body.focus();\n\t\t}\n\n\t}\n\n\t/**\n\t * Invoked when a slide is and we're in the overview.\n\t */\n\tfunction onOverviewSlideClicked( event ) {\n\n\t\t// TODO There's a bug here where the event listeners are not\n\t\t// removed after deactivating the overview.\n\t\tif( eventsAreBound && isOverview() ) {\n\t\t\tevent.preventDefault();\n\n\t\t\tvar element = event.target;\n\n\t\t\twhile( element && !element.nodeName.match( /section/gi ) ) {\n\t\t\t\telement = element.parentNode;\n\t\t\t}\n\n\t\t\tif( element && !element.classList.contains( 'disabled' ) ) {\n\n\t\t\t\tdeactivateOverview();\n\n\t\t\t\tif( element.nodeName.match( /section/gi ) ) {\n\t\t\t\t\tvar h = parseInt( element.getAttribute( 'data-index-h' ), 10 ),\n\t\t\t\t\t\tv = parseInt( element.getAttribute( 'data-index-v' ), 10 );\n\n\t\t\t\t\tslide( h, v );\n\t\t\t\t}\n\n\t\t\t}\n\t\t}\n\n\t}\n\n\t/**\n\t * Handles clicks on links that are set to preview in the\n\t * iframe overlay.\n\t */\n\tfunction onPreviewLinkClicked( event ) {\n\n\t\tif( event.currentTarget && event.currentTarget.hasAttribute( 'href' ) ) {\n\t\t\tvar url = event.currentTarget.getAttribute( 'href' );\n\t\t\tif( url ) {\n\t\t\t\tshowPreview( url );\n\t\t\t\tevent.preventDefault();\n\t\t\t}\n\t\t}\n\n\t}\n\n\t/**\n\t * Handles click on the auto-sliding controls element.\n\t */\n\tfunction onAutoSlidePlayerClick( event ) {\n\n\t\t// Replay\n\t\tif( Reveal.isLastSlide() && config.loop === false ) {\n\t\t\tslide( 0, 0 );\n\t\t\tresumeAutoSlide();\n\t\t}\n\t\t// Resume\n\t\telse if( autoSlidePaused ) {\n\t\t\tresumeAutoSlide();\n\t\t}\n\t\t// Pause\n\t\telse {\n\t\t\tpauseAutoSlide();\n\t\t}\n\n\t}\n\n\n\t// --------------------------------------------------------------------//\n\t// ------------------------ PLAYBACK COMPONENT ------------------------//\n\t// --------------------------------------------------------------------//\n\n\n\t/**\n\t * Constructor for the playback component, which displays\n\t * play/pause/progress controls.\n\t *\n\t * @param {HTMLElement} container The component will append\n\t * itself to this\n\t * @param {Function} progressCheck A method which will be\n\t * called frequently to get the current progress on a range\n\t * of 0-1\n\t */\n\tfunction Playback( container, progressCheck ) {\n\n\t\t// Cosmetics\n\t\tthis.diameter = 50;\n\t\tthis.thickness = 3;\n\n\t\t// Flags if we are currently playing\n\t\tthis.playing = false;\n\n\t\t// Current progress on a 0-1 range\n\t\tthis.progress = 0;\n\n\t\t// Used to loop the animation smoothly\n\t\tthis.progressOffset = 1;\n\n\t\tthis.container = container;\n\t\tthis.progressCheck = progressCheck;\n\n\t\tthis.canvas = document.createElement( 'canvas' );\n\t\tthis.canvas.className = 'playback';\n\t\tthis.canvas.width = this.diameter;\n\t\tthis.canvas.height = this.diameter;\n\t\tthis.context = this.canvas.getContext( '2d' );\n\n\t\tthis.container.appendChild( this.canvas );\n\n\t\tthis.render();\n\n\t}\n\n\tPlayback.prototype.setPlaying = function( value ) {\n\n\t\tvar wasPlaying = this.playing;\n\n\t\tthis.playing = value;\n\n\t\t// Start repainting if we weren't already\n\t\tif( !wasPlaying && this.playing ) {\n\t\t\tthis.animate();\n\t\t}\n\t\telse {\n\t\t\tthis.render();\n\t\t}\n\n\t};\n\n\tPlayback.prototype.animate = function() {\n\n\t\tvar progressBefore = this.progress;\n\n\t\tthis.progress = this.progressCheck();\n\n\t\t// When we loop, offset the progress so that it eases\n\t\t// smoothly rather than immediately resetting\n\t\tif( progressBefore > 0.8 && this.progress < 0.2 ) {\n\t\t\tthis.progressOffset = this.progress;\n\t\t}\n\n\t\tthis.render();\n\n\t\tif( this.playing ) {\n\t\t\tfeatures.requestAnimationFrameMethod.call( window, this.animate.bind( this ) );\n\t\t}\n\n\t};\n\n\t/**\n\t * Renders the current progress and playback state.\n\t */\n\tPlayback.prototype.render = function() {\n\n\t\tvar progress = this.playing ? this.progress : 0,\n\t\t\tradius = ( this.diameter / 2 ) - this.thickness,\n\t\t\tx = this.diameter / 2,\n\t\t\ty = this.diameter / 2,\n\t\t\ticonSize = 14;\n\n\t\t// Ease towards 1\n\t\tthis.progressOffset += ( 1 - this.progressOffset ) * 0.1;\n\n\t\tvar endAngle = ( - Math.PI / 2 ) + ( progress * ( Math.PI * 2 ) );\n\t\tvar startAngle = ( - Math.PI / 2 ) + ( this.progressOffset * ( Math.PI * 2 ) );\n\n\t\tthis.context.save();\n\t\tthis.context.clearRect( 0, 0, this.diameter, this.diameter );\n\n\t\t// Solid background color\n\t\tthis.context.beginPath();\n\t\tthis.context.arc( x, y, radius + 2, 0, Math.PI * 2, false );\n\t\tthis.context.fillStyle = 'rgba( 0, 0, 0, 0.4 )';\n\t\tthis.context.fill();\n\n\t\t// Draw progress track\n\t\tthis.context.beginPath();\n\t\tthis.context.arc( x, y, radius, 0, Math.PI * 2, false );\n\t\tthis.context.lineWidth = this.thickness;\n\t\tthis.context.strokeStyle = '#666';\n\t\tthis.context.stroke();\n\n\t\tif( this.playing ) {\n\t\t\t// Draw progress on top of track\n\t\t\tthis.context.beginPath();\n\t\t\tthis.context.arc( x, y, radius, startAngle, endAngle, false );\n\t\t\tthis.context.lineWidth = this.thickness;\n\t\t\tthis.context.strokeStyle = '#fff';\n\t\t\tthis.context.stroke();\n\t\t}\n\n\t\tthis.context.translate( x - ( iconSize / 2 ), y - ( iconSize / 2 ) );\n\n\t\t// Draw play/pause icons\n\t\tif( this.playing ) {\n\t\t\tthis.context.fillStyle = '#fff';\n\t\t\tthis.context.fillRect( 0, 0, iconSize / 2 - 2, iconSize );\n\t\t\tthis.context.fillRect( iconSize / 2 + 2, 0, iconSize / 2 - 2, iconSize );\n\t\t}\n\t\telse {\n\t\t\tthis.context.beginPath();\n\t\t\tthis.context.translate( 2, 0 );\n\t\t\tthis.context.moveTo( 0, 0 );\n\t\t\tthis.context.lineTo( iconSize - 2, iconSize / 2 );\n\t\t\tthis.context.lineTo( 0, iconSize );\n\t\t\tthis.context.fillStyle = '#fff';\n\t\t\tthis.context.fill();\n\t\t}\n\n\t\tthis.context.restore();\n\n\t};\n\n\tPlayback.prototype.on = function( type, listener ) {\n\t\tthis.canvas.addEventListener( type, listener, false );\n\t};\n\n\tPlayback.prototype.off = function( type, listener ) {\n\t\tthis.canvas.removeEventListener( type, listener, false );\n\t};\n\n\tPlayback.prototype.destroy = function() {\n\n\t\tthis.playing = false;\n\n\t\tif( this.canvas.parentNode ) {\n\t\t\tthis.container.removeChild( this.canvas );\n\t\t}\n\n\t};\n\n\n\t// --------------------------------------------------------------------//\n\t// ------------------------------- API --------------------------------//\n\t// --------------------------------------------------------------------//\n\n\n\tReveal = {\n\t\tinitialize: initialize,\n\t\tconfigure: configure,\n\t\tsync: sync,\n\n\t\t// Navigation methods\n\t\tslide: slide,\n\t\tleft: navigateLeft,\n\t\tright: navigateRight,\n\t\tup: navigateUp,\n\t\tdown: navigateDown,\n\t\tprev: navigatePrev,\n\t\tnext: navigateNext,\n\n\t\t// Fragment methods\n\t\tnavigateFragment: navigateFragment,\n\t\tprevFragment: previousFragment,\n\t\tnextFragment: nextFragment,\n\n\t\t// Deprecated aliases\n\t\tnavigateTo: slide,\n\t\tnavigateLeft: navigateLeft,\n\t\tnavigateRight: navigateRight,\n\t\tnavigateUp: navigateUp,\n\t\tnavigateDown: navigateDown,\n\t\tnavigatePrev: navigatePrev,\n\t\tnavigateNext: navigateNext,\n\n\t\t// Forces an update in slide layout\n\t\tlayout: layout,\n\n\t\t// Returns an object with the available routes as booleans (left/right/top/bottom)\n\t\tavailableRoutes: availableRoutes,\n\n\t\t// Returns an object with the available fragments as booleans (prev/next)\n\t\tavailableFragments: availableFragments,\n\n\t\t// Toggles the overview mode on/off\n\t\ttoggleOverview: toggleOverview,\n\n\t\t// Toggles the \"black screen\" mode on/off\n\t\ttogglePause: togglePause,\n\n\t\t// Toggles the auto slide mode on/off\n\t\ttoggleAutoSlide: toggleAutoSlide,\n\n\t\t// State checks\n\t\tisOverview: isOverview,\n\t\tisPaused: isPaused,\n\t\tisAutoSliding: isAutoSliding,\n\n\t\t// Adds or removes all internal event listeners (such as keyboard)\n\t\taddEventListeners: addEventListeners,\n\t\tremoveEventListeners: removeEventListeners,\n\n\t\t// Facility for persisting and restoring the presentation state\n\t\tgetState: getState,\n\t\tsetState: setState,\n\n\t\t// Presentation progress on range of 0-1\n\t\tgetProgress: getProgress,\n\n\t\t// Returns the indices of the current, or specified, slide\n\t\tgetIndices: getIndices,\n\n\t\tgetTotalSlides: getTotalSlides,\n\n\t\t// Returns the slide element at the specified index\n\t\tgetSlide: getSlide,\n\n\t\t// Returns the slide background element at the specified index\n\t\tgetSlideBackground: getSlideBackground,\n\n\t\t// Returns the previous slide element, may be null\n\t\tgetPreviousSlide: function() {\n\t\t\treturn previousSlide;\n\t\t},\n\n\t\t// Returns the current slide element\n\t\tgetCurrentSlide: function() {\n\t\t\treturn currentSlide;\n\t\t},\n\n\t\t// Returns the current scale of the presentation content\n\t\tgetScale: function() {\n\t\t\treturn scale;\n\t\t},\n\n\t\t// Returns the current configuration object\n\t\tgetConfig: function() {\n\t\t\treturn config;\n\t\t},\n\n\t\t// Helper method, retrieves query string as a key/value hash\n\t\tgetQueryHash: function() {\n\t\t\tvar query = {};\n\n\t\t\tlocation.search.replace( /[A-Z0-9]+?=([\\w\\.%-]*)/gi, function(a) {\n\t\t\t\tquery[ a.split( '=' ).shift() ] = a.split( '=' ).pop();\n\t\t\t} );\n\n\t\t\t// Basic deserialization\n\t\t\tfor( var i in query ) {\n\t\t\t\tvar value = query[ i ];\n\n\t\t\t\tquery[ i ] = deserialize( unescape( value ) );\n\t\t\t}\n\n\t\t\treturn query;\n\t\t},\n\n\t\t// Returns true if we're currently on the first slide\n\t\tisFirstSlide: function() {\n\t\t\treturn ( indexh === 0 && indexv === 0 );\n\t\t},\n\n\t\t// Returns true if we're currently on the last slide\n\t\tisLastSlide: function() {\n\t\t\tif( currentSlide ) {\n\t\t\t\t// Does this slide has next a sibling?\n\t\t\t\tif( currentSlide.nextElementSibling ) return false;\n\n\t\t\t\t// If it's vertical, does its parent have a next sibling?\n\t\t\t\tif( isVerticalSlide( currentSlide ) && currentSlide.parentNode.nextElementSibling ) return false;\n\n\t\t\t\treturn true;\n\t\t\t}\n\n\t\t\treturn false;\n\t\t},\n\n\t\t// Checks if reveal.js has been loaded and is ready for use\n\t\tisReady: function() {\n\t\t\treturn loaded;\n\t\t},\n\n\t\t// Forward event binding to the reveal DOM element\n\t\taddEventListener: function( type, listener, useCapture ) {\n\t\t\tif( 'addEventListener' in window ) {\n\t\t\t\t( dom.wrapper || document.querySelector( '.reveal' ) ).addEventListener( type, listener, useCapture );\n\t\t\t}\n\t\t},\n\t\tremoveEventListener: function( type, listener, useCapture ) {\n\t\t\tif( 'addEventListener' in window ) {\n\t\t\t\t( dom.wrapper || document.querySelector( '.reveal' ) ).removeEventListener( type, listener, useCapture );\n\t\t\t}\n\t\t},\n\n\t\t// Programatically triggers a keyboard event\n\t\ttriggerKey: function( keyCode ) {\n\t\t\tonDocumentKeyDown( { keyCode: keyCode } );\n\t\t}\n\t};\n\n\treturn Reveal;\n\n}));\n"
  },
  {
    "path": "presentation/lib/css/zenburn.css",
    "content": "/*\n\nZenburn style from voldmar.ru (c) Vladimir Epifanov <voldmar@voldmar.ru>\nbased on dark.css by Ivan Sagalaev\n\n*/\n\n.hljs {\n  display: block; padding: 0.5em;\n  background: #3F3F3F;\n  color: #DCDCDC;\n}\n\n.hljs-keyword,\n.hljs-tag,\n.css .hljs-class,\n.css .hljs-id,\n.lisp .hljs-title,\n.nginx .hljs-title,\n.hljs-request,\n.hljs-status,\n.clojure .hljs-attribute {\n  color: #E3CEAB;\n}\n\n.django .hljs-template_tag,\n.django .hljs-variable,\n.django .hljs-filter .hljs-argument {\n  color: #DCDCDC;\n}\n\n.hljs-number,\n.hljs-date {\n  color: #8CD0D3;\n}\n\n.dos .hljs-envvar,\n.dos .hljs-stream,\n.hljs-variable,\n.apache .hljs-sqbracket {\n  color: #EFDCBC;\n}\n\n.dos .hljs-flow,\n.diff .hljs-change,\n.python .exception,\n.python .hljs-built_in,\n.hljs-literal,\n.tex .hljs-special {\n  color: #EFEFAF;\n}\n\n.diff .hljs-chunk,\n.hljs-subst {\n  color: #8F8F8F;\n}\n\n.dos .hljs-keyword,\n.python .hljs-decorator,\n.hljs-title,\n.haskell .hljs-type,\n.diff .hljs-header,\n.ruby .hljs-class .hljs-parent,\n.apache .hljs-tag,\n.nginx .hljs-built_in,\n.tex .hljs-command,\n.hljs-prompt {\n    color: #efef8f;\n}\n\n.dos .hljs-winutils,\n.ruby .hljs-symbol,\n.ruby .hljs-symbol .hljs-string,\n.ruby .hljs-string {\n  color: #DCA3A3;\n}\n\n.diff .hljs-deletion,\n.hljs-string,\n.hljs-tag .hljs-value,\n.hljs-preprocessor,\n.hljs-pragma,\n.hljs-built_in,\n.sql .hljs-aggregate,\n.hljs-javadoc,\n.smalltalk .hljs-class,\n.smalltalk .hljs-localvars,\n.smalltalk .hljs-array,\n.css .hljs-rules .hljs-value,\n.hljs-attr_selector,\n.hljs-pseudo,\n.apache .hljs-cbracket,\n.tex .hljs-formula,\n.coffeescript .hljs-attribute {\n  color: #CC9393;\n}\n\n.hljs-shebang,\n.diff .hljs-addition,\n.hljs-comment,\n.java .hljs-annotation,\n.hljs-template_comment,\n.hljs-pi,\n.hljs-doctype {\n  color: #7F9F7F;\n}\n\n.coffeescript .javascript,\n.javascript .xml,\n.tex .hljs-formula,\n.xml .javascript,\n.xml .vbscript,\n.xml .css,\n.xml .hljs-cdata {\n  opacity: 0.5;\n}\n\n"
  },
  {
    "path": "presentation/lib/font/league-gothic/LICENSE",
    "content": "SIL Open Font License (OFL)\nhttp://scripts.sil.org/cms/scripts/page.php?site_id=nrsi&id=OFL\n"
  },
  {
    "path": "presentation/lib/font/league-gothic/league-gothic.css",
    "content": "@font-face {\n    font-family: 'League Gothic';\n    src: url('league-gothic.eot');\n    src: url('league-gothic.eot?#iefix') format('embedded-opentype'),\n         url('league-gothic.woff') format('woff'),\n         url('league-gothic.ttf') format('truetype');\n\n    font-weight: normal;\n    font-style: normal;\n}"
  },
  {
    "path": "presentation/lib/font/source-sans-pro/LICENSE",
    "content": "SIL Open Font License\n\nCopyright 2010, 2012 Adobe Systems Incorporated (http://www.adobe.com/), with Reserved Font Name ‘Source’. All Rights Reserved. Source is a trademark of Adobe Systems Incorporated in the United States and/or other countries.\n\nThis Font Software is licensed under the SIL Open Font License, Version 1.1.\nThis license is copied below, and is also available with a FAQ at: http://scripts.sil.org/OFL\n\n—————————————————————————————-\nSIL OPEN FONT LICENSE Version 1.1 - 26 February 2007\n—————————————————————————————-\n\nPREAMBLE\nThe goals of the Open Font License (OFL) are to stimulate worldwide development of collaborative font projects, to support the font creation efforts of academic and linguistic communities, and to provide a free and open framework in which fonts may be shared and improved in partnership with others.\n\nThe OFL allows the licensed fonts to be used, studied, modified and redistributed freely as long as they are not sold by themselves. The fonts, including any derivative works, can be bundled, embedded, redistributed and/or sold with any software provided that any reserved names are not used by derivative works. The fonts and derivatives, however, cannot be released under any other type of license. The requirement for fonts to remain under this license does not apply to any document created using the fonts or their derivatives.\n\nDEFINITIONS\n“Font Software” refers to the set of files released by the Copyright Holder(s) under this license and clearly marked as such. This may include source files, build scripts and documentation.\n\n“Reserved Font Name” refers to any names specified as such after the copyright statement(s).\n\n“Original Version” refers to the collection of Font Software components as distributed by the Copyright Holder(s).\n\n“Modified Version” refers to any derivative made by adding to, deleting, or substituting—in part or in whole—any of the components of the Original Version, by changing formats or by porting the Font Software to a new environment.\n\n“Author” refers to any designer, engineer, programmer, technical writer or other person who contributed to the Font Software.\n\nPERMISSION & CONDITIONS\nPermission is hereby granted, free of charge, to any person obtaining a copy of the Font Software, to use, study, copy, merge, embed, modify, redistribute, and sell modified and unmodified copies of the Font Software, subject to the following conditions:\n\n1) Neither the Font Software nor any of its individual components, in Original or Modified Versions, may be sold by itself.\n\n2) Original or Modified Versions of the Font Software may be bundled, redistributed and/or sold with any software, provided that each copy contains the above copyright notice and this license. These can be included either as stand-alone text files, human-readable headers or in the appropriate machine-readable metadata fields within text or binary files as long as those fields can be easily viewed by the user.\n\n3) No Modified Version of the Font Software may use the Reserved Font Name(s) unless explicit written permission is granted by the corresponding Copyright Holder. This restriction only applies to the primary font name as presented to the users.\n\n4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font Software shall not be used to promote, endorse or advertise any Modified Version, except to acknowledge the contribution(s) of the Copyright Holder(s) and the Author(s) or with their explicit written permission.\n\n5) The Font Software, modified or unmodified, in part or in whole, must be distributed entirely under this license, and must not be distributed under any other license. The requirement for fonts to remain under this license does not apply to any document created using the Font Software.\n\nTERMINATION\nThis license becomes null and void if any of the above conditions are not met.\n\nDISCLAIMER\nTHE FONT SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM OTHER DEALINGS IN THE FONT SOFTWARE."
  },
  {
    "path": "presentation/lib/font/source-sans-pro/source-sans-pro.css",
    "content": "@font-face {\n    font-family: 'Source Sans Pro';\n    src: url('source-sans-pro-regular.eot');\n    src: url('source-sans-pro-regular.eot?#iefix') format('embedded-opentype'),\n         url('source-sans-pro-regular.woff') format('woff'),\n         url('source-sans-pro-regular.ttf') format('truetype');\n    font-weight: normal;\n    font-style: normal;\n}\n\n@font-face {\n    font-family: 'Source Sans Pro';\n    src: url('source-sans-pro-italic.eot');\n    src: url('source-sans-pro-italic.eot?#iefix') format('embedded-opentype'),\n         url('source-sans-pro-italic.woff') format('woff'),\n         url('source-sans-pro-italic.ttf') format('truetype');\n    font-weight: normal;\n    font-style: italic;\n}\n\n@font-face {\n    font-family: 'Source Sans Pro';\n    src: url('source-sans-pro-semibold.eot');\n    src: url('source-sans-pro-semibold.eot?#iefix') format('embedded-opentype'),\n         url('source-sans-pro-semibold.woff') format('woff'),\n         url('source-sans-pro-semibold.ttf') format('truetype');\n    font-weight: 600;\n    font-style: normal;\n}\n\n@font-face {\n    font-family: 'Source Sans Pro';\n    src: url('source-sans-pro-semibolditalic.eot');\n    src: url('source-sans-pro-semibolditalic.eot?#iefix') format('embedded-opentype'),\n         url('source-sans-pro-semibolditalic.woff') format('woff'),\n         url('source-sans-pro-semibolditalic.ttf') format('truetype');\n    font-weight: 600;\n    font-style: italic;\n}"
  },
  {
    "path": "presentation/lib/js/classList.js",
    "content": "/*! @source http://purl.eligrey.com/github/classList.js/blob/master/classList.js*/\nif(typeof document!==\"undefined\"&&!(\"classList\" in document.createElement(\"a\"))){(function(j){var a=\"classList\",f=\"prototype\",m=(j.HTMLElement||j.Element)[f],b=Object,k=String[f].trim||function(){return this.replace(/^\\s+|\\s+$/g,\"\")},c=Array[f].indexOf||function(q){var p=0,o=this.length;for(;p<o;p++){if(p in this&&this[p]===q){return p}}return -1},n=function(o,p){this.name=o;this.code=DOMException[o];this.message=p},g=function(p,o){if(o===\"\"){throw new n(\"SYNTAX_ERR\",\"An invalid or illegal string was specified\")}if(/\\s/.test(o)){throw new n(\"INVALID_CHARACTER_ERR\",\"String contains an invalid character\")}return c.call(p,o)},d=function(s){var r=k.call(s.className),q=r?r.split(/\\s+/):[],p=0,o=q.length;for(;p<o;p++){this.push(q[p])}this._updateClassName=function(){s.className=this.toString()}},e=d[f]=[],i=function(){return new d(this)};n[f]=Error[f];e.item=function(o){return this[o]||null};e.contains=function(o){o+=\"\";return g(this,o)!==-1};e.add=function(o){o+=\"\";if(g(this,o)===-1){this.push(o);this._updateClassName()}};e.remove=function(p){p+=\"\";var o=g(this,p);if(o!==-1){this.splice(o,1);this._updateClassName()}};e.toggle=function(o){o+=\"\";if(g(this,o)===-1){this.add(o)}else{this.remove(o)}};e.toString=function(){return this.join(\" \")};if(b.defineProperty){var l={get:i,enumerable:true,configurable:true};try{b.defineProperty(m,a,l)}catch(h){if(h.number===-2146823252){l.enumerable=false;b.defineProperty(m,a,l)}}}else{if(b[f].__defineGetter__){m.__defineGetter__(a,i)}}}(self))};"
  },
  {
    "path": "presentation/lib/js/html5shiv.js",
    "content": "document.createElement('header');\ndocument.createElement('nav');\ndocument.createElement('section');\ndocument.createElement('article');\ndocument.createElement('aside');\ndocument.createElement('footer');\ndocument.createElement('hgroup');"
  },
  {
    "path": "presentation/plugin/highlight/highlight.js",
    "content": "// START CUSTOM REVEAL.JS INTEGRATION\n(function() {\n\tif( typeof window.addEventListener === 'function' ) {\n\t\tvar hljs_nodes = document.querySelectorAll( 'pre code' );\n\n\t\tfor( var i = 0, len = hljs_nodes.length; i < len; i++ ) {\n\t\t\tvar element = hljs_nodes[i];\n\n\t\t\t// trim whitespace if data-trim attribute is present\n\t\t\tif( element.hasAttribute( 'data-trim' ) && typeof element.innerHTML.trim === 'function' ) {\n\t\t\t\telement.innerHTML = element.innerHTML.trim();\n\t\t\t}\n\n\t\t\t// Now escape html unless prevented by author\n\t\t\tif( ! element.hasAttribute( 'data-noescape' )) {\n\t\t\t\telement.innerHTML = element.innerHTML.replace(/</g,\"&lt;\").replace(/>/g,\"&gt;\");\n\t\t\t}\n\n\t\t\t// re-highlight when focus is lost (for edited code)\n\t\t\telement.addEventListener( 'focusout', function( event ) {\n\t\t\t\thljs.highlightBlock( event.currentTarget );\n\t\t\t}, false );\n\t\t}\n\t}\n})();\n// END CUSTOM REVEAL.JS INTEGRATION\n\n// highlight.js v8.2 with support for all available languages\n\nvar hljs=new function(){function j(v){return v.replace(/&/gm,\"&amp;\").replace(/</gm,\"&lt;\").replace(/>/gm,\"&gt;\")}function t(v){return v.nodeName.toLowerCase()}function h(w,x){var v=w&&w.exec(x);return v&&v.index==0}function r(w){var v=(w.className+\" \"+(w.parentNode?w.parentNode.className:\"\")).split(/\\s+/);v=v.map(function(x){return x.replace(/^lang(uage)?-/,\"\")});return v.filter(function(x){return i(x)||/no(-?)highlight/.test(x)})[0]}function o(x,y){var v={};for(var w in x){v[w]=x[w]}if(y){for(var w in y){v[w]=y[w]}}return v}function u(x){var v=[];(function w(y,z){for(var A=y.firstChild;A;A=A.nextSibling){if(A.nodeType==3){z+=A.nodeValue.length}else{if(A.nodeType==1){v.push({event:\"start\",offset:z,node:A});z=w(A,z);if(!t(A).match(/br|hr|img|input/)){v.push({event:\"stop\",offset:z,node:A})}}}}return z})(x,0);return v}function q(w,y,C){var x=0;var F=\"\";var z=[];function B(){if(!w.length||!y.length){return w.length?w:y}if(w[0].offset!=y[0].offset){return(w[0].offset<y[0].offset)?w:y}return y[0].event==\"start\"?w:y}function A(H){function G(I){return\" \"+I.nodeName+'=\"'+j(I.value)+'\"'}F+=\"<\"+t(H)+Array.prototype.map.call(H.attributes,G).join(\"\")+\">\"}function E(G){F+=\"</\"+t(G)+\">\"}function v(G){(G.event==\"start\"?A:E)(G.node)}while(w.length||y.length){var D=B();F+=j(C.substr(x,D[0].offset-x));x=D[0].offset;if(D==w){z.reverse().forEach(E);do{v(D.splice(0,1)[0]);D=B()}while(D==w&&D.length&&D[0].offset==x);z.reverse().forEach(A)}else{if(D[0].event==\"start\"){z.push(D[0].node)}else{z.pop()}v(D.splice(0,1)[0])}}return F+j(C.substr(x))}function m(y){function v(z){return(z&&z.source)||z}function w(A,z){return RegExp(v(A),\"m\"+(y.cI?\"i\":\"\")+(z?\"g\":\"\"))}function x(D,C){if(D.compiled){return}D.compiled=true;D.k=D.k||D.bK;if(D.k){var z={};var E=function(G,F){if(y.cI){F=F.toLowerCase()}F.split(\" \").forEach(function(H){var I=H.split(\"|\");z[I[0]]=[G,I[1]?Number(I[1]):1]})};if(typeof D.k==\"string\"){E(\"keyword\",D.k)}else{Object.keys(D.k).forEach(function(F){E(F,D.k[F])})}D.k=z}D.lR=w(D.l||/\\b[A-Za-z0-9_]+\\b/,true);if(C){if(D.bK){D.b=\"\\\\b(\"+D.bK.split(\" \").join(\"|\")+\")\\\\b\"}if(!D.b){D.b=/\\B|\\b/}D.bR=w(D.b);if(!D.e&&!D.eW){D.e=/\\B|\\b/}if(D.e){D.eR=w(D.e)}D.tE=v(D.e)||\"\";if(D.eW&&C.tE){D.tE+=(D.e?\"|\":\"\")+C.tE}}if(D.i){D.iR=w(D.i)}if(D.r===undefined){D.r=1}if(!D.c){D.c=[]}var B=[];D.c.forEach(function(F){if(F.v){F.v.forEach(function(G){B.push(o(F,G))})}else{B.push(F==\"self\"?D:F)}});D.c=B;D.c.forEach(function(F){x(F,D)});if(D.starts){x(D.starts,C)}var A=D.c.map(function(F){return F.bK?\"\\\\.?(\"+F.b+\")\\\\.?\":F.b}).concat([D.tE,D.i]).map(v).filter(Boolean);D.t=A.length?w(A.join(\"|\"),true):{exec:function(F){return null}}}x(y)}function c(T,L,J,R){function v(V,W){for(var U=0;U<W.c.length;U++){if(h(W.c[U].bR,V)){return W.c[U]}}}function z(V,U){if(h(V.eR,U)){return V}if(V.eW){return z(V.parent,U)}}function A(U,V){return !J&&h(V.iR,U)}function E(W,U){var V=M.cI?U[0].toLowerCase():U[0];return W.k.hasOwnProperty(V)&&W.k[V]}function w(aa,Y,X,W){var U=W?\"\":b.classPrefix,V='<span class=\"'+U,Z=X?\"\":\"</span>\";V+=aa+'\">';return V+Y+Z}function N(){if(!I.k){return j(C)}var U=\"\";var X=0;I.lR.lastIndex=0;var V=I.lR.exec(C);while(V){U+=j(C.substr(X,V.index-X));var W=E(I,V);if(W){H+=W[1];U+=w(W[0],j(V[0]))}else{U+=j(V[0])}X=I.lR.lastIndex;V=I.lR.exec(C)}return U+j(C.substr(X))}function F(){if(I.sL&&!f[I.sL]){return j(C)}var U=I.sL?c(I.sL,C,true,S):e(C);if(I.r>0){H+=U.r}if(I.subLanguageMode==\"continuous\"){S=U.top}return w(U.language,U.value,false,true)}function Q(){return I.sL!==undefined?F():N()}function P(W,V){var U=W.cN?w(W.cN,\"\",true):\"\";if(W.rB){D+=U;C=\"\"}else{if(W.eB){D+=j(V)+U;C=\"\"}else{D+=U;C=V}}I=Object.create(W,{parent:{value:I}})}function G(U,Y){C+=U;if(Y===undefined){D+=Q();return 0}var W=v(Y,I);if(W){D+=Q();P(W,Y);return W.rB?0:Y.length}var X=z(I,Y);if(X){var V=I;if(!(V.rE||V.eE)){C+=Y}D+=Q();do{if(I.cN){D+=\"</span>\"}H+=I.r;I=I.parent}while(I!=X.parent);if(V.eE){D+=j(Y)}C=\"\";if(X.starts){P(X.starts,\"\")}return V.rE?0:Y.length}if(A(Y,I)){throw new Error('Illegal lexeme \"'+Y+'\" for mode \"'+(I.cN||\"<unnamed>\")+'\"')}C+=Y;return Y.length||1}var M=i(T);if(!M){throw new Error('Unknown language: \"'+T+'\"')}m(M);var I=R||M;var S;var D=\"\";for(var K=I;K!=M;K=K.parent){if(K.cN){D=w(K.cN,\"\",true)+D}}var C=\"\";var H=0;try{var B,y,x=0;while(true){I.t.lastIndex=x;B=I.t.exec(L);if(!B){break}y=G(L.substr(x,B.index-x),B[0]);x=B.index+y}G(L.substr(x));for(var K=I;K.parent;K=K.parent){if(K.cN){D+=\"</span>\"}}return{r:H,value:D,language:T,top:I}}catch(O){if(O.message.indexOf(\"Illegal\")!=-1){return{r:0,value:j(L)}}else{throw O}}}function e(y,x){x=x||b.languages||Object.keys(f);var v={r:0,value:j(y)};var w=v;x.forEach(function(z){if(!i(z)){return}var A=c(z,y,false);A.language=z;if(A.r>w.r){w=A}if(A.r>v.r){w=v;v=A}});if(w.language){v.second_best=w}return v}function g(v){if(b.tabReplace){v=v.replace(/^((<[^>]+>|\\t)+)/gm,function(w,z,y,x){return z.replace(/\\t/g,b.tabReplace)})}if(b.useBR){v=v.replace(/\\n/g,\"<br>\")}return v}function p(A){var B=r(A);if(/no(-?)highlight/.test(B)){return}var y;if(b.useBR){y=document.createElementNS(\"http://www.w3.org/1999/xhtml\",\"div\");y.innerHTML=A.innerHTML.replace(/\\n/g,\"\").replace(/<br[ \\/]*>/g,\"\\n\")}else{y=A}var z=y.textContent;var v=B?c(B,z,true):e(z);var x=u(y);if(x.length){var w=document.createElementNS(\"http://www.w3.org/1999/xhtml\",\"div\");w.innerHTML=v.value;v.value=q(x,u(w),z)}v.value=g(v.value);A.innerHTML=v.value;A.className+=\" hljs \"+(!B&&v.language||\"\");A.result={language:v.language,re:v.r};if(v.second_best){A.second_best={language:v.second_best.language,re:v.second_best.r}}}var b={classPrefix:\"hljs-\",tabReplace:null,useBR:false,languages:undefined};function s(v){b=o(b,v)}function l(){if(l.called){return}l.called=true;var v=document.querySelectorAll(\"pre code\");Array.prototype.forEach.call(v,p)}function a(){addEventListener(\"DOMContentLoaded\",l,false);addEventListener(\"load\",l,false)}var f={};var n={};function d(v,x){var w=f[v]=x(this);if(w.aliases){w.aliases.forEach(function(y){n[y]=v})}}function k(){return Object.keys(f)}function i(v){return f[v]||f[n[v]]}this.highlight=c;this.highlightAuto=e;this.fixMarkup=g;this.highlightBlock=p;this.configure=s;this.initHighlighting=l;this.initHighlightingOnLoad=a;this.registerLanguage=d;this.listLanguages=k;this.getLanguage=i;this.inherit=o;this.IR=\"[a-zA-Z][a-zA-Z0-9_]*\";this.UIR=\"[a-zA-Z_][a-zA-Z0-9_]*\";this.NR=\"\\\\b\\\\d+(\\\\.\\\\d+)?\";this.CNR=\"(\\\\b0[xX][a-fA-F0-9]+|(\\\\b\\\\d+(\\\\.\\\\d*)?|\\\\.\\\\d+)([eE][-+]?\\\\d+)?)\";this.BNR=\"\\\\b(0b[01]+)\";this.RSR=\"!|!=|!==|%|%=|&|&&|&=|\\\\*|\\\\*=|\\\\+|\\\\+=|,|-|-=|/=|/|:|;|<<|<<=|<=|<|===|==|=|>>>=|>>=|>=|>>>|>>|>|\\\\?|\\\\[|\\\\{|\\\\(|\\\\^|\\\\^=|\\\\||\\\\|=|\\\\|\\\\||~\";this.BE={b:\"\\\\\\\\[\\\\s\\\\S]\",r:0};this.ASM={cN:\"string\",b:\"'\",e:\"'\",i:\"\\\\n\",c:[this.BE]};this.QSM={cN:\"string\",b:'\"',e:'\"',i:\"\\\\n\",c:[this.BE]};this.PWM={b:/\\b(a|an|the|are|I|I'm|isn't|don't|doesn't|won't|but|just|should|pretty|simply|enough|gonna|going|wtf|so|such)\\b/};this.CLCM={cN:\"comment\",b:\"//\",e:\"$\",c:[this.PWM]};this.CBCM={cN:\"comment\",b:\"/\\\\*\",e:\"\\\\*/\",c:[this.PWM]};this.HCM={cN:\"comment\",b:\"#\",e:\"$\",c:[this.PWM]};this.NM={cN:\"number\",b:this.NR,r:0};this.CNM={cN:\"number\",b:this.CNR,r:0};this.BNM={cN:\"number\",b:this.BNR,r:0};this.CSSNM={cN:\"number\",b:this.NR+\"(%|em|ex|ch|rem|vw|vh|vmin|vmax|cm|mm|in|pt|pc|px|deg|grad|rad|turn|s|ms|Hz|kHz|dpi|dpcm|dppx)?\",r:0};this.RM={cN:\"regexp\",b:/\\//,e:/\\/[gim]*/,i:/\\n/,c:[this.BE,{b:/\\[/,e:/\\]/,r:0,c:[this.BE]}]};this.TM={cN:\"title\",b:this.IR,r:0};this.UTM={cN:\"title\",b:this.UIR,r:0}}();hljs.registerLanguage(\"bash\",function(b){var a={cN:\"variable\",v:[{b:/\\$[\\w\\d#@][\\w\\d_]*/},{b:/\\$\\{(.*?)\\}/}]};var d={cN:\"string\",b:/\"/,e:/\"/,c:[b.BE,a,{cN:\"variable\",b:/\\$\\(/,e:/\\)/,c:[b.BE]}]};var c={cN:\"string\",b:/'/,e:/'/};return{aliases:[\"sh\",\"zsh\"],l:/-?[a-z\\.]+/,k:{keyword:\"if then else elif fi for break continue while in do done exit return set declare case esac export exec\",literal:\"true false\",built_in:\"printf echo read cd pwd pushd popd dirs let eval unset typeset readonly getopts source shopt caller type hash bind help sudo\",operator:\"-ne -eq -lt -gt -f -d -e -s -l -a\"},c:[{cN:\"shebang\",b:/^#![^\\n]+sh\\s*$/,r:10},{cN:\"function\",b:/\\w[\\w\\d_]*\\s*\\(\\s*\\)\\s*\\{/,rB:true,c:[b.inherit(b.TM,{b:/\\w[\\w\\d_]*/})],r:0},b.HCM,b.NM,d,c,a]}});hljs.registerLanguage(\"fix\",function(a){return{c:[{b:/[^\\u2401\\u0001]+/,e:/[\\u2401\\u0001]/,eE:true,rB:true,rE:false,c:[{b:/([^\\u2401\\u0001=]+)/,e:/=([^\\u2401\\u0001=]+)/,rE:true,rB:false,cN:\"attribute\"},{b:/=/,e:/([\\u2401\\u0001])/,eE:true,eB:true,cN:\"string\"}]}],cI:true}});hljs.registerLanguage(\"nsis\",function(a){var c={cN:\"symbol\",b:\"\\\\$(ADMINTOOLS|APPDATA|CDBURN_AREA|CMDLINE|COMMONFILES32|COMMONFILES64|COMMONFILES|COOKIES|DESKTOP|DOCUMENTS|EXEDIR|EXEFILE|EXEPATH|FAVORITES|FONTS|HISTORY|HWNDPARENT|INSTDIR|INTERNET_CACHE|LANGUAGE|LOCALAPPDATA|MUSIC|NETHOOD|OUTDIR|PICTURES|PLUGINSDIR|PRINTHOOD|PROFILE|PROGRAMFILES32|PROGRAMFILES64|PROGRAMFILES|QUICKLAUNCH|RECENT|RESOURCES_LOCALIZED|RESOURCES|SENDTO|SMPROGRAMS|SMSTARTUP|STARTMENU|SYSDIR|TEMP|TEMPLATES|VIDEOS|WINDIR)\"};var b={cN:\"constant\",b:\"\\\\$+{[a-zA-Z0-9_]+}\"};var f={cN:\"variable\",b:\"\\\\$+[a-zA-Z0-9_]+\",i:\"\\\\(\\\\){}\"};var e={cN:\"constant\",b:\"\\\\$+\\\\([a-zA-Z0-9_]+\\\\)\"};var g={cN:\"params\",b:\"(ARCHIVE|FILE_ATTRIBUTE_ARCHIVE|FILE_ATTRIBUTE_NORMAL|FILE_ATTRIBUTE_OFFLINE|FILE_ATTRIBUTE_READONLY|FILE_ATTRIBUTE_SYSTEM|FILE_ATTRIBUTE_TEMPORARY|HKCR|HKCU|HKDD|HKEY_CLASSES_ROOT|HKEY_CURRENT_CONFIG|HKEY_CURRENT_USER|HKEY_DYN_DATA|HKEY_LOCAL_MACHINE|HKEY_PERFORMANCE_DATA|HKEY_USERS|HKLM|HKPD|HKU|IDABORT|IDCANCEL|IDIGNORE|IDNO|IDOK|IDRETRY|IDYES|MB_ABORTRETRYIGNORE|MB_DEFBUTTON1|MB_DEFBUTTON2|MB_DEFBUTTON3|MB_DEFBUTTON4|MB_ICONEXCLAMATION|MB_ICONINFORMATION|MB_ICONQUESTION|MB_ICONSTOP|MB_OK|MB_OKCANCEL|MB_RETRYCANCEL|MB_RIGHT|MB_RTLREADING|MB_SETFOREGROUND|MB_TOPMOST|MB_USERICON|MB_YESNO|NORMAL|OFFLINE|READONLY|SHCTX|SHELL_CONTEXT|SYSTEM|TEMPORARY)\"};var d={cN:\"constant\",b:\"\\\\!(addincludedir|addplugindir|appendfile|cd|define|delfile|echo|else|endif|error|execute|finalize|getdllversionsystem|ifdef|ifmacrodef|ifmacrondef|ifndef|if|include|insertmacro|macroend|macro|packhdr|searchparse|searchreplace|tempfile|undef|verbose|warning)\"};return{cI:false,k:{keyword:\"Abort AddBrandingImage AddSize AllowRootDirInstall AllowSkipFiles AutoCloseWindow BGFont BGGradient BrandingText BringToFront Call CallInstDLL Caption ChangeUI CheckBitmap ClearErrors CompletedText ComponentText CopyFiles CRCCheck CreateDirectory CreateFont CreateShortCut Delete DeleteINISec DeleteINIStr DeleteRegKey DeleteRegValue DetailPrint DetailsButtonText DirText DirVar DirVerify EnableWindow EnumRegKey EnumRegValue Exch Exec ExecShell ExecWait ExpandEnvStrings File FileBufSize FileClose FileErrorText FileOpen FileRead FileReadByte FileReadUTF16LE FileReadWord FileSeek FileWrite FileWriteByte FileWriteUTF16LE FileWriteWord FindClose FindFirst FindNext FindWindow FlushINI FunctionEnd GetCurInstType GetCurrentAddress GetDlgItem GetDLLVersion GetDLLVersionLocal GetErrorLevel GetFileTime GetFileTimeLocal GetFullPathName GetFunctionAddress GetInstDirError GetLabelAddress GetTempFileName Goto HideWindow Icon IfAbort IfErrors IfFileExists IfRebootFlag IfSilent InitPluginsDir InstallButtonText InstallColors InstallDir InstallDirRegKey InstProgressFlags InstType InstTypeGetText InstTypeSetText IntCmp IntCmpU IntFmt IntOp IsWindow LangString LicenseBkColor LicenseData LicenseForceSelection LicenseLangString LicenseText LoadLanguageFile LockWindow LogSet LogText ManifestDPIAware ManifestSupportedOS MessageBox MiscButtonText Name Nop OutFile Page PageCallbacks PageExEnd Pop Push Quit ReadEnvStr ReadINIStr ReadRegDWORD ReadRegStr Reboot RegDLL Rename RequestExecutionLevel ReserveFile Return RMDir SearchPath SectionEnd SectionGetFlags SectionGetInstTypes SectionGetSize SectionGetText SectionGroupEnd SectionIn SectionSetFlags SectionSetInstTypes SectionSetSize SectionSetText SendMessage SetAutoClose SetBrandingImage SetCompress SetCompressor SetCompressorDictSize SetCtlColors SetCurInstType SetDatablockOptimize SetDateSave SetDetailsPrint SetDetailsView SetErrorLevel SetErrors SetFileAttributes SetFont SetOutPath SetOverwrite SetPluginUnload SetRebootFlag SetRegView SetShellVarContext SetSilent ShowInstDetails ShowUninstDetails ShowWindow SilentInstall SilentUnInstall Sleep SpaceTexts StrCmp StrCmpS StrCpy StrLen SubCaption SubSectionEnd Unicode UninstallButtonText UninstallCaption UninstallIcon UninstallSubCaption UninstallText UninstPage UnRegDLL Var VIAddVersionKey VIFileVersion VIProductVersion WindowIcon WriteINIStr WriteRegBin WriteRegDWORD WriteRegExpandStr WriteRegStr WriteUninstaller XPStyle\",literal:\"admin all auto both colored current false force hide highest lastused leave listonly none normal notset off on open print show silent silentlog smooth textonly true user \"},c:[a.HCM,a.CBCM,{cN:\"string\",b:'\"',e:'\"',i:\"\\\\n\",c:[{cN:\"symbol\",b:\"\\\\$(\\\\\\\\(n|r|t)|\\\\$)\"},c,b,f,e]},{cN:\"comment\",b:\";\",e:\"$\",r:0},{cN:\"function\",bK:\"Function PageEx Section SectionGroup SubSection\",e:\"$\"},d,b,f,e,g,a.NM,{cN:\"literal\",b:a.IR+\"::\"+a.IR}]}});hljs.registerLanguage(\"haxe\",function(a){var c=\"[a-zA-Z_$][a-zA-Z0-9_$]*\";var b=\"([*]|[a-zA-Z_$][a-zA-Z0-9_$]*)\";return{aliases:[\"hx\"],k:{keyword:\"break callback case cast catch class continue default do dynamic else enum extends extern for function here if implements import in inline interface never new override package private public return static super switch this throw trace try typedef untyped using var while\",literal:\"true false null\"},c:[a.ASM,a.QSM,a.CLCM,a.CBCM,a.CNM,{cN:\"class\",bK:\"class interface\",e:\"{\",eE:true,c:[{bK:\"extends implements\"},a.TM]},{cN:\"preprocessor\",b:\"#\",e:\"$\",k:\"if else elseif end error\"},{cN:\"function\",bK:\"function\",e:\"[{;]\",eE:true,i:\"\\\\S\",c:[a.TM,{cN:\"params\",b:\"\\\\(\",e:\"\\\\)\",c:[a.ASM,a.QSM,a.CLCM,a.CBCM]},{cN:\"type\",b:\":\",e:b,r:10}]}]}});hljs.registerLanguage(\"erlang\",function(i){var c=\"[a-z'][a-zA-Z0-9_']*\";var o=\"(\"+c+\":\"+c+\"|\"+c+\")\";var f={keyword:\"after and andalso|10 band begin bnot bor bsl bzr bxor case catch cond div end fun if let not of orelse|10 query receive rem try when xor\",literal:\"false true\"};var l={cN:\"comment\",b:\"%\",e:\"$\"};var e={cN:\"number\",b:\"\\\\b(\\\\d+#[a-fA-F0-9]+|\\\\d+(\\\\.\\\\d+)?([eE][-+]?\\\\d+)?)\",r:0};var g={b:\"fun\\\\s+\"+c+\"/\\\\d+\"};var n={b:o+\"\\\\(\",e:\"\\\\)\",rB:true,r:0,c:[{cN:\"function_name\",b:o,r:0},{b:\"\\\\(\",e:\"\\\\)\",eW:true,rE:true,r:0}]};var h={cN:\"tuple\",b:\"{\",e:\"}\",r:0};var a={cN:\"variable\",b:\"\\\\b_([A-Z][A-Za-z0-9_]*)?\",r:0};var m={cN:\"variable\",b:\"[A-Z][a-zA-Z0-9_]*\",r:0};var b={b:\"#\"+i.UIR,r:0,rB:true,c:[{cN:\"record_name\",b:\"#\"+i.UIR,r:0},{b:\"{\",e:\"}\",r:0}]};var k={bK:\"fun receive if try case\",e:\"end\",k:f};k.c=[l,g,i.inherit(i.ASM,{cN:\"\"}),k,n,i.QSM,e,h,a,m,b];var j=[l,g,k,n,i.QSM,e,h,a,m,b];n.c[1].c=j;h.c=j;b.c[1].c=j;var d={cN:\"params\",b:\"\\\\(\",e:\"\\\\)\",c:j};return{aliases:[\"erl\"],k:f,i:\"(</|\\\\*=|\\\\+=|-=|/\\\\*|\\\\*/|\\\\(\\\\*|\\\\*\\\\))\",c:[{cN:\"function\",b:\"^\"+c+\"\\\\s*\\\\(\",e:\"->\",rB:true,i:\"\\\\(|#|//|/\\\\*|\\\\\\\\|:|;\",c:[d,i.inherit(i.TM,{b:c})],starts:{e:\";|\\\\.\",k:f,c:j}},l,{cN:\"pp\",b:\"^-\",e:\"\\\\.\",r:0,eE:true,rB:true,l:\"-\"+i.IR,k:\"-module -record -undef -export -ifdef -ifndef -author -copyright -doc -vsn -import -include -include_lib -compile -define -else -endif -file -behaviour -behavior -spec\",c:[d]},e,i.QSM,b,a,m,h,{b:/\\.$/}]}});hljs.registerLanguage(\"cs\",function(c){var b=\"abstract as base bool break byte case catch char checked const continue decimal default delegate do double else enum event explicit extern false finally fixed float for foreach goto if implicit in int interface internal is lock long new null object operator out override params private protected public readonly ref return sbyte sealed short sizeof stackalloc static string struct switch this throw true try typeof uint ulong unchecked unsafe ushort using virtual volatile void while async await protected public private internal ascending descending from get group into join let orderby partial select set value var where yield\";var a=c.IR+\"(<\"+c.IR+\">)?\";return{aliases:[\"csharp\"],k:b,i:/::/,c:[{cN:\"comment\",b:\"///\",e:\"$\",rB:true,c:[{cN:\"xmlDocTag\",v:[{b:\"///\",r:0},{b:\"<!--|-->\"},{b:\"</?\",e:\">\"}]}]},c.CLCM,c.CBCM,{cN:\"preprocessor\",b:\"#\",e:\"$\",k:\"if else elif endif define undef warning error line region endregion pragma checksum\"},{cN:\"string\",b:'@\"',e:'\"',c:[{b:'\"\"'}]},c.ASM,c.QSM,c.CNM,{bK:\"class namespace interface\",e:/[{;=]/,i:/[^\\s:]/,c:[c.TM,c.CLCM,c.CBCM]},{bK:\"new\",e:/\\s/,r:0},{cN:\"function\",b:\"(\"+a+\"\\\\s+)+\"+c.IR+\"\\\\s*\\\\(\",rB:true,e:/[{;=]/,eE:true,k:b,c:[{b:c.IR+\"\\\\s*\\\\(\",rB:true,c:[c.TM]},{cN:\"params\",b:/\\(/,e:/\\)/,k:b,c:[c.ASM,c.QSM,c.CNM,c.CBCM]},c.CLCM,c.CBCM]}]}});hljs.registerLanguage(\"protobuf\",function(a){return{k:{keyword:\"package import option optional required repeated group\",built_in:\"double float int32 int64 uint32 uint64 sint32 sint64 fixed32 fixed64 sfixed32 sfixed64 bool string bytes\",literal:\"true false\"},c:[a.QSM,a.NM,a.CLCM,{cN:\"class\",bK:\"message enum service\",e:/\\{/,i:/\\n/,c:[a.inherit(a.TM,{starts:{eW:true,eE:true}})]},{cN:\"function\",bK:\"rpc\",e:/;/,eE:true,k:\"rpc returns\"},{cN:\"constant\",b:/^\\s*[A-Z_]+/,e:/\\s*=/,eE:true}]}});hljs.registerLanguage(\"vim\",function(a){return{l:/[!#@\\w]+/,k:{keyword:\"N|0 P|0 X|0 a|0 ab abc abo al am an|0 ar arga argd arge argdo argg argl argu as au aug aun b|0 bN ba bad bd be bel bf bl bm bn bo bp br brea breaka breakd breakl bro bufdo buffers bun bw c|0 cN cNf ca cabc caddb cad caddf cal cat cb cc ccl cd ce cex cf cfir cgetb cgete cg changes chd che checkt cl cla clo cm cmapc cme cn cnew cnf cno cnorea cnoreme co col colo com comc comp con conf cope cp cpf cq cr cs cst cu cuna cunme cw d|0 delm deb debugg delc delf dif diffg diffo diffp diffpu diffs diffthis dig di dl dell dj dli do doautoa dp dr ds dsp e|0 ea ec echoe echoh echom echon el elsei em en endfo endf endt endw ene ex exe exi exu f|0 files filet fin fina fini fir fix fo foldc foldd folddoc foldo for fu g|0 go gr grepa gu gv ha h|0 helpf helpg helpt hi hid his i|0 ia iabc if ij il im imapc ime ino inorea inoreme int is isp iu iuna iunme j|0 ju k|0 keepa kee keepj lN lNf l|0 lad laddb laddf la lan lat lb lc lch lcl lcs le lefta let lex lf lfir lgetb lgete lg lgr lgrepa lh ll lla lli lmak lm lmapc lne lnew lnf ln loadk lo loc lockv lol lope lp lpf lr ls lt lu lua luad luaf lv lvimgrepa lw m|0 ma mak map mapc marks mat me menut mes mk mks mksp mkv mkvie mod mz mzf nbc nb nbs n|0 new nm nmapc nme nn nnoreme noa no noh norea noreme norm nu nun nunme ol o|0 om omapc ome on ono onoreme opt ou ounme ow p|0 profd prof pro promptr pc ped pe perld po popu pp pre prev ps pt ptN ptf ptj ptl ptn ptp ptr pts pu pw py3 python3 py3d py3f py pyd pyf q|0 quita qa r|0 rec red redi redr redraws reg res ret retu rew ri rightb rub rubyd rubyf rund ru rv s|0 sN san sa sal sav sb sbN sba sbf sbl sbm sbn sbp sbr scrip scripte scs se setf setg setl sf sfir sh sim sig sil sl sla sm smap smapc sme sn sni sno snor snoreme sor so spelld spe spelli spellr spellu spellw sp spr sre st sta startg startr star stopi stj sts sun sunm sunme sus sv sw sy synti sync t|0 tN tabN tabc tabdo tabe tabf tabfir tabl tabm tabnew tabn tabo tabp tabr tabs tab ta tags tc tcld tclf te tf th tj tl tm tn to tp tr try ts tu u|0 undoj undol una unh unl unlo unm unme uns up v|0 ve verb vert vim vimgrepa vi viu vie vm vmapc vme vne vn vnoreme vs vu vunme windo w|0 wN wa wh wi winc winp wn wp wq wqa ws wu wv x|0 xa xmapc xm xme xn xnoreme xu xunme y|0 z|0 ~ Next Print append abbreviate abclear aboveleft all amenu anoremenu args argadd argdelete argedit argglobal arglocal argument ascii autocmd augroup aunmenu buffer bNext ball badd bdelete behave belowright bfirst blast bmodified bnext botright bprevious brewind break breakadd breakdel breaklist browse bunload bwipeout change cNext cNfile cabbrev cabclear caddbuffer caddexpr caddfile call catch cbuffer cclose center cexpr cfile cfirst cgetbuffer cgetexpr cgetfile chdir checkpath checktime clist clast close cmap cmapclear cmenu cnext cnewer cnfile cnoremap cnoreabbrev cnoremenu copy colder colorscheme command comclear compiler continue confirm copen cprevious cpfile cquit crewind cscope cstag cunmap cunabbrev cunmenu cwindow delete delmarks debug debuggreedy delcommand delfunction diffupdate diffget diffoff diffpatch diffput diffsplit digraphs display deletel djump dlist doautocmd doautoall deletep drop dsearch dsplit edit earlier echo echoerr echohl echomsg else elseif emenu endif endfor endfunction endtry endwhile enew execute exit exusage file filetype find finally finish first fixdel fold foldclose folddoopen folddoclosed foldopen function global goto grep grepadd gui gvim hardcopy help helpfind helpgrep helptags highlight hide history insert iabbrev iabclear ijump ilist imap imapclear imenu inoremap inoreabbrev inoremenu intro isearch isplit iunmap iunabbrev iunmenu join jumps keepalt keepmarks keepjumps lNext lNfile list laddexpr laddbuffer laddfile last language later lbuffer lcd lchdir lclose lcscope left leftabove lexpr lfile lfirst lgetbuffer lgetexpr lgetfile lgrep lgrepadd lhelpgrep llast llist lmake lmap lmapclear lnext lnewer lnfile lnoremap loadkeymap loadview lockmarks lockvar lolder lopen lprevious lpfile lrewind ltag lunmap luado luafile lvimgrep lvimgrepadd lwindow move mark make mapclear match menu menutranslate messages mkexrc mksession mkspell mkvimrc mkview mode mzscheme mzfile nbclose nbkey nbsart next nmap nmapclear nmenu nnoremap nnoremenu noautocmd noremap nohlsearch noreabbrev noremenu normal number nunmap nunmenu oldfiles open omap omapclear omenu only onoremap onoremenu options ounmap ounmenu ownsyntax print profdel profile promptfind promptrepl pclose pedit perl perldo pop popup ppop preserve previous psearch ptag ptNext ptfirst ptjump ptlast ptnext ptprevious ptrewind ptselect put pwd py3do py3file python pydo pyfile quit quitall qall read recover redo redir redraw redrawstatus registers resize retab return rewind right rightbelow ruby rubydo rubyfile rundo runtime rviminfo substitute sNext sandbox sargument sall saveas sbuffer sbNext sball sbfirst sblast sbmodified sbnext sbprevious sbrewind scriptnames scriptencoding scscope set setfiletype setglobal setlocal sfind sfirst shell simalt sign silent sleep slast smagic smapclear smenu snext sniff snomagic snoremap snoremenu sort source spelldump spellgood spellinfo spellrepall spellundo spellwrong split sprevious srewind stop stag startgreplace startreplace startinsert stopinsert stjump stselect sunhide sunmap sunmenu suspend sview swapname syntax syntime syncbind tNext tabNext tabclose tabedit tabfind tabfirst tablast tabmove tabnext tabonly tabprevious tabrewind tag tcl tcldo tclfile tearoff tfirst throw tjump tlast tmenu tnext topleft tprevious trewind tselect tunmenu undo undojoin undolist unabbreviate unhide unlet unlockvar unmap unmenu unsilent update vglobal version verbose vertical vimgrep vimgrepadd visual viusage view vmap vmapclear vmenu vnew vnoremap vnoremenu vsplit vunmap vunmenu write wNext wall while winsize wincmd winpos wnext wprevious wqall wsverb wundo wviminfo xit xall xmapclear xmap xmenu xnoremap xnoremenu xunmap xunmenu yank\",built_in:\"abs acos add and append argc argidx argv asin atan atan2 browse browsedir bufexists buflisted bufloaded bufname bufnr bufwinnr byte2line byteidx call ceil changenr char2nr cindent clearmatches col complete complete_add complete_check confirm copy cos cosh count cscope_connection cursor deepcopy delete did_filetype diff_filler diff_hlID empty escape eval eventhandler executable exists exp expand extend feedkeys filereadable filewritable filter finddir findfile float2nr floor fmod fnameescape fnamemodify foldclosed foldclosedend foldlevel foldtext foldtextresult foreground function garbagecollect get getbufline getbufvar getchar getcharmod getcmdline getcmdpos getcmdtype getcwd getfontname getfperm getfsize getftime getftype getline getloclist getmatches getpid getpos getqflist getreg getregtype gettabvar gettabwinvar getwinposx getwinposy getwinvar glob globpath has has_key haslocaldir hasmapto histadd histdel histget histnr hlexists hlID hostname iconv indent index input inputdialog inputlist inputrestore inputsave inputsecret insert invert isdirectory islocked items join keys len libcall libcallnr line line2byte lispindent localtime log log10 luaeval map maparg mapcheck match matchadd matcharg matchdelete matchend matchlist matchstr max min mkdir mode mzeval nextnonblank nr2char or pathshorten pow prevnonblank printf pumvisible py3eval pyeval range readfile reltime reltimestr remote_expr remote_foreground remote_peek remote_read remote_send remove rename repeat resolve reverse round screenattr screenchar screencol screenrow search searchdecl searchpair searchpairpos searchpos server2client serverlist setbufvar setcmdpos setline setloclist setmatches setpos setqflist setreg settabvar settabwinvar setwinvar sha256 shellescape shiftwidth simplify sin sinh sort soundfold spellbadword spellsuggest split sqrt str2float str2nr strchars strdisplaywidth strftime stridx string strlen strpart strridx strtrans strwidth submatch substitute synconcealed synID synIDattr synIDtrans synstack system tabpagebuflist tabpagenr tabpagewinnr tagfiles taglist tan tanh tempname tolower toupper tr trunc type undofile undotree values virtcol visualmode wildmenumode winbufnr wincol winheight winline winnr winrestcmd winrestview winsaveview winwidth writefile xor\"},i:/[{:]/,c:[a.NM,a.ASM,{cN:\"string\",b:/\"((\\\\\")|[^\"\\n])*(\"|\\n)/},{cN:\"variable\",b:/[bwtglsav]:[\\w\\d_]*/},{cN:\"function\",bK:\"function function!\",e:\"$\",r:0,c:[a.TM,{cN:\"params\",b:\"\\\\(\",e:\"\\\\)\"}]}]}});hljs.registerLanguage(\"brainfuck\",function(b){var a={cN:\"literal\",b:\"[\\\\+\\\\-]\",r:0};return{aliases:[\"bf\"],c:[{cN:\"comment\",b:\"[^\\\\[\\\\]\\\\.,\\\\+\\\\-<> \\r\\n]\",rE:true,e:\"[\\\\[\\\\]\\\\.,\\\\+\\\\-<> \\r\\n]\",r:0},{cN:\"title\",b:\"[\\\\[\\\\]]\",r:0},{cN:\"string\",b:\"[\\\\.,]\",r:0},{b:/\\+\\+|\\-\\-/,rB:true,c:[a]},a]}});hljs.registerLanguage(\"ruby\",function(f){var j=\"[a-zA-Z_]\\\\w*[!?=]?|[-+~]\\\\@|<<|>>|=~|===?|<=>|[<>]=?|\\\\*\\\\*|[-/+%^&*~`|]|\\\\[\\\\]=?\";var i=\"and false then defined module in return redo if BEGIN retry end for true self when next until do begin unless END rescue nil else break undef not super class case require yield alias while ensure elsif or include attr_reader attr_writer attr_accessor\";var b={cN:\"yardoctag\",b:\"@[A-Za-z]+\"};var c={cN:\"value\",b:\"#<\",e:\">\"};var k={cN:\"comment\",v:[{b:\"#\",e:\"$\",c:[b]},{b:\"^\\\\=begin\",e:\"^\\\\=end\",c:[b],r:10},{b:\"^__END__\",e:\"\\\\n$\"}]};var d={cN:\"subst\",b:\"#\\\\{\",e:\"}\",k:i};var e={cN:\"string\",c:[f.BE,d],v:[{b:/'/,e:/'/},{b:/\"/,e:/\"/},{b:\"%[qw]?\\\\(\",e:\"\\\\)\"},{b:\"%[qw]?\\\\[\",e:\"\\\\]\"},{b:\"%[qw]?{\",e:\"}\"},{b:\"%[qw]?<\",e:\">\"},{b:\"%[qw]?/\",e:\"/\"},{b:\"%[qw]?%\",e:\"%\"},{b:\"%[qw]?-\",e:\"-\"},{b:\"%[qw]?\\\\|\",e:\"\\\\|\"},{b:/\\B\\?(\\\\\\d{1,3}|\\\\x[A-Fa-f0-9]{1,2}|\\\\u[A-Fa-f0-9]{4}|\\\\?\\S)\\b/}]};var a={cN:\"params\",b:\"\\\\(\",e:\"\\\\)\",k:i};var h=[e,c,k,{cN:\"class\",bK:\"class module\",e:\"$|;\",i:/=/,c:[f.inherit(f.TM,{b:\"[A-Za-z_]\\\\w*(::\\\\w+)*(\\\\?|\\\\!)?\"}),{cN:\"inheritance\",b:\"<\\\\s*\",c:[{cN:\"parent\",b:\"(\"+f.IR+\"::)?\"+f.IR}]},k]},{cN:\"function\",bK:\"def\",e:\" |$|;\",r:0,c:[f.inherit(f.TM,{b:j}),a,k]},{cN:\"constant\",b:\"(::)?(\\\\b[A-Z]\\\\w*(::)?)+\",r:0},{cN:\"symbol\",b:f.UIR+\"(\\\\!|\\\\?)?:\",r:0},{cN:\"symbol\",b:\":\",c:[e,{b:j}],r:0},{cN:\"number\",b:\"(\\\\b0[0-7_]+)|(\\\\b0x[0-9a-fA-F_]+)|(\\\\b[1-9][0-9_]*(\\\\.[0-9_]+)?)|[0_]\\\\b\",r:0},{cN:\"variable\",b:\"(\\\\$\\\\W)|((\\\\$|\\\\@\\\\@?)(\\\\w+))\"},{b:\"(\"+f.RSR+\")\\\\s*\",c:[c,k,{cN:\"regexp\",c:[f.BE,d],i:/\\n/,v:[{b:\"/\",e:\"/[a-z]*\"},{b:\"%r{\",e:\"}[a-z]*\"},{b:\"%r\\\\(\",e:\"\\\\)[a-z]*\"},{b:\"%r!\",e:\"![a-z]*\"},{b:\"%r\\\\[\",e:\"\\\\][a-z]*\"}]}],r:0}];d.c=h;a.c=h;var g=[{b:/^\\s*=>/,cN:\"status\",starts:{e:\"$\",c:h}},{cN:\"prompt\",b:/^\\S[^=>\\n]*>+/,starts:{e:\"$\",c:h}}];return{aliases:[\"rb\",\"gemspec\",\"podspec\",\"thor\",\"irb\"],k:i,c:[k].concat(g).concat(h)}});hljs.registerLanguage(\"nimrod\",function(a){return{k:{keyword:\"addr and as asm bind block break|0 case|0 cast const|0 continue|0 converter discard distinct|10 div do elif else|0 end|0 enum|0 except export finally for from generic if|0 import|0 in include|0 interface is isnot|10 iterator|10 let|0 macro method|10 mixin mod nil not notin|10 object|0 of or out proc|10 ptr raise ref|10 return shl shr static template|10 try|0 tuple type|0 using|0 var|0 when while|0 with without xor yield\",literal:\"shared guarded stdin stdout stderr result|10 true false\"},c:[{cN:\"decorator\",b:/{\\./,e:/\\.}/,r:10},{cN:\"string\",b:/[a-zA-Z]\\w*\"/,e:/\"/,c:[{b:/\"\"/}]},{cN:\"string\",b:/([a-zA-Z]\\w*)?\"\"\"/,e:/\"\"\"/},{cN:\"string\",b:/\"/,e:/\"/,i:/\\n/,c:[{b:/\\\\./}]},{cN:\"type\",b:/\\b[A-Z]\\w+\\b/,r:0},{cN:\"type\",b:/\\b(int|int8|int16|int32|int64|uint|uint8|uint16|uint32|uint64|float|float32|float64|bool|char|string|cstring|pointer|expr|stmt|void|auto|any|range|array|openarray|varargs|seq|set|clong|culong|cchar|cschar|cshort|cint|csize|clonglong|cfloat|cdouble|clongdouble|cuchar|cushort|cuint|culonglong|cstringarray|semistatic)\\b/},{cN:\"number\",b:/\\b(0[xX][0-9a-fA-F][_0-9a-fA-F]*)('?[iIuU](8|16|32|64))?/,r:0},{cN:\"number\",b:/\\b(0o[0-7][_0-7]*)('?[iIuUfF](8|16|32|64))?/,r:0},{cN:\"number\",b:/\\b(0(b|B)[01][_01]*)('?[iIuUfF](8|16|32|64))?/,r:0},{cN:\"number\",b:/\\b(\\d[_\\d]*)('?[iIuUfF](8|16|32|64))?/,r:0},a.HCM]}});hljs.registerLanguage(\"rust\",function(a){return{aliases:[\"rs\"],k:{keyword:\"alignof as be box break const continue crate do else enum extern false fn for if impl in let loop match mod mut offsetof once priv proc pub pure ref return self sizeof static struct super trait true type typeof unsafe unsized use virtual while yield int i8 i16 i32 i64 uint u8 u32 u64 float f32 f64 str char bool\",built_in:\"assert! assert_eq! bitflags! bytes! cfg! col! concat! concat_idents! debug_assert! debug_assert_eq! env! fail! file! format! format_args! include_bin! include_str! line! local_data_key! module_path! option_env! print! println! select! stringify! try! unimplemented! unreachable! vec! write! writeln!\"},l:a.IR+\"!?\",i:\"</\",c:[a.CLCM,a.CBCM,a.inherit(a.QSM,{i:null}),{cN:\"string\",b:/r(#*)\".*?\"\\1(?!#)/},{cN:\"string\",b:/'\\\\?(x\\w{2}|u\\w{4}|U\\w{8}|.)'/},{b:/'[a-zA-Z_][a-zA-Z0-9_]*/},{cN:\"number\",b:\"\\\\b(0[xb][A-Za-z0-9_]+|[0-9_]+(\\\\.[0-9_]+)?([uif](8|16|32|64)?)?)\",r:0},{cN:\"function\",bK:\"fn\",e:\"(\\\\(|<)\",eE:true,c:[a.UTM]},{cN:\"preprocessor\",b:\"#\\\\[\",e:\"\\\\]\"},{bK:\"type\",e:\"(=|<)\",c:[a.UTM],i:\"\\\\S\"},{bK:\"trait enum\",e:\"({|<)\",c:[a.UTM],i:\"\\\\S\"},{b:a.IR+\"::\"},{b:\"->\"}]}});hljs.registerLanguage(\"ruleslanguage\",function(a){return{k:{keyword:\"BILL_PERIOD BILL_START BILL_STOP RS_EFFECTIVE_START RS_EFFECTIVE_STOP RS_JURIS_CODE RS_OPCO_CODE INTDADDATTRIBUTE|5 INTDADDVMSG|5 INTDBLOCKOP|5 INTDBLOCKOPNA|5 INTDCLOSE|5 INTDCOUNT|5 INTDCOUNTSTATUSCODE|5 INTDCREATEMASK|5 INTDCREATEDAYMASK|5 INTDCREATEFACTORMASK|5 INTDCREATEHANDLE|5 INTDCREATEOVERRIDEDAYMASK|5 INTDCREATEOVERRIDEMASK|5 INTDCREATESTATUSCODEMASK|5 INTDCREATETOUPERIOD|5 INTDDELETE|5 INTDDIPTEST|5 INTDEXPORT|5 INTDGETERRORCODE|5 INTDGETERRORMESSAGE|5 INTDISEQUAL|5 INTDJOIN|5 INTDLOAD|5 INTDLOADACTUALCUT|5 INTDLOADDATES|5 INTDLOADHIST|5 INTDLOADLIST|5 INTDLOADLISTDATES|5 INTDLOADLISTENERGY|5 INTDLOADLISTHIST|5 INTDLOADRELATEDCHANNEL|5 INTDLOADSP|5 INTDLOADSTAGING|5 INTDLOADUOM|5 INTDLOADUOMDATES|5 INTDLOADUOMHIST|5 INTDLOADVERSION|5 INTDOPEN|5 INTDREADFIRST|5 INTDREADNEXT|5 INTDRECCOUNT|5 INTDRELEASE|5 INTDREPLACE|5 INTDROLLAVG|5 INTDROLLPEAK|5 INTDSCALAROP|5 INTDSCALE|5 INTDSETATTRIBUTE|5 INTDSETDSTPARTICIPANT|5 INTDSETSTRING|5 INTDSETVALUE|5 INTDSETVALUESTATUS|5 INTDSHIFTSTARTTIME|5 INTDSMOOTH|5 INTDSORT|5 INTDSPIKETEST|5 INTDSUBSET|5 INTDTOU|5 INTDTOURELEASE|5 INTDTOUVALUE|5 INTDUPDATESTATS|5 INTDVALUE|5 STDEV INTDDELETEEX|5 INTDLOADEXACTUAL|5 INTDLOADEXCUT|5 INTDLOADEXDATES|5 INTDLOADEX|5 INTDLOADEXRELATEDCHANNEL|5 INTDSAVEEX|5 MVLOAD|5 MVLOADACCT|5 MVLOADACCTDATES|5 MVLOADACCTHIST|5 MVLOADDATES|5 MVLOADHIST|5 MVLOADLIST|5 MVLOADLISTDATES|5 MVLOADLISTHIST|5 IF FOR NEXT DONE SELECT END CALL ABORT CLEAR CHANNEL FACTOR LIST NUMBER OVERRIDE SET WEEK DISTRIBUTIONNODE ELSE WHEN THEN OTHERWISE IENUM CSV INCLUDE LEAVE RIDER SAVE DELETE NOVALUE SECTION WARN SAVE_UPDATE DETERMINANT LABEL REPORT REVENUE EACH IN FROM TOTAL CHARGE BLOCK AND OR CSV_FILE RATE_CODE AUXILIARY_DEMAND UIDACCOUNT RS BILL_PERIOD_SELECT HOURS_PER_MONTH INTD_ERROR_STOP SEASON_SCHEDULE_NAME ACCOUNTFACTOR ARRAYUPPERBOUND CALLSTOREDPROC GETADOCONNECTION GETCONNECT GETDATASOURCE GETQUALIFIER GETUSERID HASVALUE LISTCOUNT LISTOP LISTUPDATE LISTVALUE PRORATEFACTOR RSPRORATE SETBINPATH SETDBMONITOR WQ_OPEN BILLINGHOURS DATE DATEFROMFLOAT DATETIMEFROMSTRING DATETIMETOSTRING DATETOFLOAT DAY DAYDIFF DAYNAME DBDATETIME HOUR MINUTE MONTH MONTHDIFF MONTHHOURS MONTHNAME ROUNDDATE SAMEWEEKDAYLASTYEAR SECOND WEEKDAY WEEKDIFF YEAR YEARDAY YEARSTR COMPSUM HISTCOUNT HISTMAX HISTMIN HISTMINNZ HISTVALUE MAXNRANGE MAXRANGE MINRANGE COMPIKVA COMPKVA COMPKVARFROMKQKW COMPLF IDATTR FLAG LF2KW LF2KWH MAXKW POWERFACTOR READING2USAGE AVGSEASON MAXSEASON MONTHLYMERGE SEASONVALUE SUMSEASON ACCTREADDATES ACCTTABLELOAD CONFIGADD CONFIGGET CREATEOBJECT CREATEREPORT EMAILCLIENT EXPBLKMDMUSAGE EXPMDMUSAGE EXPORT_USAGE FACTORINEFFECT GETUSERSPECIFIEDSTOP INEFFECT ISHOLIDAY RUNRATE SAVE_PROFILE SETREPORTTITLE USEREXIT WATFORRUNRATE TO TABLE ACOS ASIN ATAN ATAN2 BITAND CEIL COS COSECANT COSH COTANGENT DIVQUOT DIVREM EXP FABS FLOOR FMOD FREPM FREXPN LOG LOG10 MAX MAXN MIN MINNZ MODF POW ROUND ROUND2VALUE ROUNDINT SECANT SIN SINH SQROOT TAN TANH FLOAT2STRING FLOAT2STRINGNC INSTR LEFT LEN LTRIM MID RIGHT RTRIM STRING STRINGNC TOLOWER TOUPPER TRIM NUMDAYS READ_DATE STAGING\",built_in:\"IDENTIFIER OPTIONS XML_ELEMENT XML_OP XML_ELEMENT_OF DOMDOCCREATE DOMDOCLOADFILE DOMDOCLOADXML DOMDOCSAVEFILE DOMDOCGETROOT DOMDOCADDPI DOMNODEGETNAME DOMNODEGETTYPE DOMNODEGETVALUE DOMNODEGETCHILDCT DOMNODEGETFIRSTCHILD DOMNODEGETSIBLING DOMNODECREATECHILDELEMENT DOMNODESETATTRIBUTE DOMNODEGETCHILDELEMENTCT DOMNODEGETFIRSTCHILDELEMENT DOMNODEGETSIBLINGELEMENT DOMNODEGETATTRIBUTECT DOMNODEGETATTRIBUTEI DOMNODEGETATTRIBUTEBYNAME DOMNODEGETBYNAME\"},c:[a.CLCM,a.CBCM,a.ASM,a.QSM,a.CNM,{cN:\"array\",b:\"#[a-zA-Z .]+\"}]}});hljs.registerLanguage(\"rib\",function(a){return{k:\"ArchiveRecord AreaLightSource Atmosphere Attribute AttributeBegin AttributeEnd Basis Begin Blobby Bound Clipping ClippingPlane Color ColorSamples ConcatTransform Cone CoordinateSystem CoordSysTransform CropWindow Curves Cylinder DepthOfField Detail DetailRange Disk Displacement Display End ErrorHandler Exposure Exterior Format FrameAspectRatio FrameBegin FrameEnd GeneralPolygon GeometricApproximation Geometry Hider Hyperboloid Identity Illuminate Imager Interior LightSource MakeCubeFaceEnvironment MakeLatLongEnvironment MakeShadow MakeTexture Matte MotionBegin MotionEnd NuPatch ObjectBegin ObjectEnd ObjectInstance Opacity Option Orientation Paraboloid Patch PatchMesh Perspective PixelFilter PixelSamples PixelVariance Points PointsGeneralPolygons PointsPolygons Polygon Procedural Projection Quantize ReadArchive RelativeDetail ReverseOrientation Rotate Scale ScreenWindow ShadingInterpolation ShadingRate Shutter Sides Skew SolidBegin SolidEnd Sphere SubdivisionMesh Surface TextureCoordinates Torus Transform TransformBegin TransformEnd TransformPoints Translate TrimCurve WorldBegin WorldEnd\",i:\"</\",c:[a.HCM,a.CNM,a.ASM,a.QSM]}});hljs.registerLanguage(\"diff\",function(a){return{aliases:[\"patch\"],c:[{cN:\"chunk\",r:10,v:[{b:/^\\@\\@ +\\-\\d+,\\d+ +\\+\\d+,\\d+ +\\@\\@$/},{b:/^\\*\\*\\* +\\d+,\\d+ +\\*\\*\\*\\*$/},{b:/^\\-\\-\\- +\\d+,\\d+ +\\-\\-\\-\\-$/}]},{cN:\"header\",v:[{b:/Index: /,e:/$/},{b:/=====/,e:/=====$/},{b:/^\\-\\-\\-/,e:/$/},{b:/^\\*{3} /,e:/$/},{b:/^\\+\\+\\+/,e:/$/},{b:/\\*{5}/,e:/\\*{5}$/}]},{cN:\"addition\",b:\"^\\\\+\",e:\"$\"},{cN:\"deletion\",b:\"^\\\\-\",e:\"$\"},{cN:\"change\",b:\"^\\\\!\",e:\"$\"}]}});hljs.registerLanguage(\"markdown\",function(a){return{aliases:[\"md\",\"mkdown\",\"mkd\"],c:[{cN:\"header\",v:[{b:\"^#{1,6}\",e:\"$\"},{b:\"^.+?\\\\n[=-]{2,}$\"}]},{b:\"<\",e:\">\",sL:\"xml\",r:0},{cN:\"bullet\",b:\"^([*+-]|(\\\\d+\\\\.))\\\\s+\"},{cN:\"strong\",b:\"[*_]{2}.+?[*_]{2}\"},{cN:\"emphasis\",v:[{b:\"\\\\*.+?\\\\*\"},{b:\"_.+?_\",r:0}]},{cN:\"blockquote\",b:\"^>\\\\s+\",e:\"$\"},{cN:\"code\",v:[{b:\"`.+?`\"},{b:\"^( {4}|\\t)\",e:\"$\",r:0}]},{cN:\"horizontal_rule\",b:\"^[-\\\\*]{3,}\",e:\"$\"},{b:\"\\\\[.+?\\\\][\\\\(\\\\[].*?[\\\\)\\\\]]\",rB:true,c:[{cN:\"link_label\",b:\"\\\\[\",e:\"\\\\]\",eB:true,rE:true,r:0},{cN:\"link_url\",b:\"\\\\]\\\\(\",e:\"\\\\)\",eB:true,eE:true},{cN:\"link_reference\",b:\"\\\\]\\\\[\",e:\"\\\\]\",eB:true,eE:true}],r:10},{b:\"^\\\\[.+\\\\]:\",rB:true,c:[{cN:\"link_reference\",b:\"\\\\[\",e:\"\\\\]:\",eB:true,eE:true,starts:{cN:\"link_url\",e:\"$\"}}]}]}});hljs.registerLanguage(\"dart\",function(b){var d={cN:\"subst\",b:\"\\\\$\\\\{\",e:\"}\",k:\"true false null this is new super\"};var c={cN:\"string\",v:[{b:\"r'''\",e:\"'''\"},{b:'r\"\"\"',e:'\"\"\"'},{b:\"r'\",e:\"'\",i:\"\\\\n\"},{b:'r\"',e:'\"',i:\"\\\\n\"},{b:\"'''\",e:\"'''\",c:[b.BE,d]},{b:'\"\"\"',e:'\"\"\"',c:[b.BE,d]},{b:\"'\",e:\"'\",i:\"\\\\n\",c:[b.BE,d]},{b:'\"',e:'\"',i:\"\\\\n\",c:[b.BE,d]}]};d.c=[b.CNM,c];var a={keyword:\"assert break case catch class const continue default do else enum extends false final finally for if in is new null rethrow return super switch this throw true try var void while with\",literal:\"abstract as dynamic export external factory get implements import library operator part set static typedef\",built_in:\"print Comparable DateTime Duration Function Iterable Iterator List Map Match Null Object Pattern RegExp Set Stopwatch String StringBuffer StringSink Symbol Type Uri bool double int num document window querySelector querySelectorAll Element ElementList\"};return{k:a,c:[c,{cN:\"dartdoc\",b:\"/\\\\*\\\\*\",e:\"\\\\*/\",sL:\"markdown\",subLanguageMode:\"continuous\"},{cN:\"dartdoc\",b:\"///\",e:\"$\",sL:\"markdown\",subLanguageMode:\"continuous\"},b.CLCM,b.CBCM,{cN:\"class\",bK:\"class interface\",e:\"{\",eE:true,c:[{bK:\"extends implements\"},b.UTM]},b.CNM,{cN:\"annotation\",b:\"@[A-Za-z]+\"},{b:\"=>\"}]}});hljs.registerLanguage(\"haml\",function(a){return{cI:true,c:[{cN:\"doctype\",b:\"^!!!( (5|1\\\\.1|Strict|Frameset|Basic|Mobile|RDFa|XML\\\\b.*))?$\",r:10},{cN:\"comment\",b:\"^\\\\s*(!=#|=#|-#|/).*$\",r:0},{b:\"^\\\\s*(-|=|!=)(?!#)\",starts:{e:\"\\\\n\",sL:\"ruby\"}},{cN:\"tag\",b:\"^\\\\s*%\",c:[{cN:\"title\",b:\"\\\\w+\"},{cN:\"value\",b:\"[#\\\\.]\\\\w+\"},{b:\"{\\\\s*\",e:\"\\\\s*}\",eE:true,c:[{b:\":\\\\w+\\\\s*=>\",e:\",\\\\s+\",rB:true,eW:true,c:[{cN:\"symbol\",b:\":\\\\w+\"},{cN:\"string\",b:'\"',e:'\"'},{cN:\"string\",b:\"'\",e:\"'\"},{b:\"\\\\w+\",r:0}]}]},{b:\"\\\\(\\\\s*\",e:\"\\\\s*\\\\)\",eE:true,c:[{b:\"\\\\w+\\\\s*=\",e:\"\\\\s+\",rB:true,eW:true,c:[{cN:\"attribute\",b:\"\\\\w+\",r:0},{cN:\"string\",b:'\"',e:'\"'},{cN:\"string\",b:\"'\",e:\"'\"},{b:\"\\\\w+\",r:0}]}]}]},{cN:\"bullet\",b:\"^\\\\s*[=~]\\\\s*\",r:0},{b:\"#{\",starts:{e:\"}\",sL:\"ruby\"}}]}});hljs.registerLanguage(\"javascript\",function(a){return{aliases:[\"js\"],k:{keyword:\"in if for while finally var new function do return void else break catch instanceof with throw case default try this switch continue typeof delete let yield const class\",literal:\"true false null undefined NaN Infinity\",built_in:\"eval isFinite isNaN parseFloat parseInt decodeURI decodeURIComponent encodeURI encodeURIComponent escape unescape Object Function Boolean Error EvalError InternalError RangeError ReferenceError StopIteration SyntaxError TypeError URIError Number Math Date String RegExp Array Float32Array Float64Array Int16Array Int32Array Int8Array Uint16Array Uint32Array Uint8Array Uint8ClampedArray ArrayBuffer DataView JSON Intl arguments require module console window document\"},c:[{cN:\"pi\",b:/^\\s*('|\")use strict('|\")/,r:10},a.ASM,a.QSM,a.CLCM,a.CBCM,a.CNM,{b:\"(\"+a.RSR+\"|\\\\b(case|return|throw)\\\\b)\\\\s*\",k:\"return throw case\",c:[a.CLCM,a.CBCM,a.RM,{b:/</,e:/>;/,r:0,sL:\"xml\"}],r:0},{cN:\"function\",bK:\"function\",e:/\\{/,eE:true,c:[a.inherit(a.TM,{b:/[A-Za-z$_][0-9A-Za-z$_]*/}),{cN:\"params\",b:/\\(/,e:/\\)/,c:[a.CLCM,a.CBCM],i:/[\"'\\(]/}],i:/\\[|%/},{b:/\\$[(.]/},{b:\"\\\\.\"+a.IR,r:0}]}});hljs.registerLanguage(\"xml\",function(a){var c=\"[A-Za-z0-9\\\\._:-]+\";var d={b:/<\\?(php)?(?!\\w)/,e:/\\?>/,sL:\"php\",subLanguageMode:\"continuous\"};var b={eW:true,i:/</,r:0,c:[d,{cN:\"attribute\",b:c,r:0},{b:\"=\",r:0,c:[{cN:\"value\",v:[{b:/\"/,e:/\"/},{b:/'/,e:/'/},{b:/[^\\s\\/>]+/}]}]}]};return{aliases:[\"html\",\"xhtml\",\"rss\",\"atom\",\"xsl\",\"plist\"],cI:true,c:[{cN:\"doctype\",b:\"<!DOCTYPE\",e:\">\",r:10,c:[{b:\"\\\\[\",e:\"\\\\]\"}]},{cN:\"comment\",b:\"<!--\",e:\"-->\",r:10},{cN:\"cdata\",b:\"<\\\\!\\\\[CDATA\\\\[\",e:\"\\\\]\\\\]>\",r:10},{cN:\"tag\",b:\"<style(?=\\\\s|>|$)\",e:\">\",k:{title:\"style\"},c:[b],starts:{e:\"</style>\",rE:true,sL:\"css\"}},{cN:\"tag\",b:\"<script(?=\\\\s|>|$)\",e:\">\",k:{title:\"script\"},c:[b],starts:{e:\"<\\/script>\",rE:true,sL:\"javascript\"}},{b:\"<%\",e:\"%>\",sL:\"vbscript\"},d,{cN:\"pi\",b:/<\\?\\w+/,e:/\\?>/,r:10},{cN:\"tag\",b:\"</?\",e:\"/?>\",c:[{cN:\"title\",b:/[^ \\/><\\n\\t]+/,r:0},b]}]}});hljs.registerLanguage(\"dust\",function(b){var a=\"if eq ne lt lte gt gte select default math sep\";return{aliases:[\"dst\"],cI:true,sL:\"xml\",subLanguageMode:\"continuous\",c:[{cN:\"expression\",b:\"{\",e:\"}\",r:0,c:[{cN:\"begin-block\",b:\"#[a-zA-Z- .]+\",k:a},{cN:\"string\",b:'\"',e:'\"'},{cN:\"end-block\",b:\"\\\\/[a-zA-Z- .]+\",k:a},{cN:\"variable\",b:\"[a-zA-Z-.]+\",k:a,r:0}]}]}});hljs.registerLanguage(\"glsl\",function(a){return{k:{keyword:\"atomic_uint attribute bool break bvec2 bvec3 bvec4 case centroid coherent const continue default discard dmat2 dmat2x2 dmat2x3 dmat2x4 dmat3 dmat3x2 dmat3x3 dmat3x4 dmat4 dmat4x2 dmat4x3 dmat4x4 do double dvec2 dvec3 dvec4 else flat float for highp if iimage1D iimage1DArray iimage2D iimage2DArray iimage2DMS iimage2DMSArray iimage2DRect iimage3D iimageBuffer iimageCube iimageCubeArray image1D image1DArray image2D image2DArray image2DMS image2DMSArray image2DRect image3D imageBuffer imageCube imageCubeArray in inout int invariant isampler1D isampler1DArray isampler2D isampler2DArray isampler2DMS isampler2DMSArray isampler2DRect isampler3D isamplerBuffer isamplerCube isamplerCubeArray ivec2 ivec3 ivec4 layout lowp mat2 mat2x2 mat2x3 mat2x4 mat3 mat3x2 mat3x3 mat3x4 mat4 mat4x2 mat4x3 mat4x4 mediump noperspective out patch precision readonly restrict return sample sampler1D sampler1DArray sampler1DArrayShadow sampler1DShadow sampler2D sampler2DArray sampler2DArrayShadow sampler2DMS sampler2DMSArray sampler2DRect sampler2DRectShadow sampler2DShadow sampler3D samplerBuffer samplerCube samplerCubeArray samplerCubeArrayShadow samplerCubeShadow smooth struct subroutine switch uimage1D uimage1DArray uimage2D uimage2DArray uimage2DMS uimage2DMSArray uimage2DRect uimage3D uimageBuffer uimageCube uimageCubeArray uint uniform usampler1D usampler1DArray usampler2D usampler2DArray usampler2DMS usampler2DMSArray usampler2DRect usampler3D usamplerBuffer usamplerCube usamplerCubeArray uvec2 uvec3 uvec4 varying vec2 vec3 vec4 void volatile while writeonly\",built_in:\"gl_BackColor gl_BackLightModelProduct gl_BackLightProduct gl_BackMaterial gl_BackSecondaryColor gl_ClipDistance gl_ClipPlane gl_ClipVertex gl_Color gl_DepthRange gl_EyePlaneQ gl_EyePlaneR gl_EyePlaneS gl_EyePlaneT gl_Fog gl_FogCoord gl_FogFragCoord gl_FragColor gl_FragCoord gl_FragData gl_FragDepth gl_FrontColor gl_FrontFacing gl_FrontLightModelProduct gl_FrontLightProduct gl_FrontMaterial gl_FrontSecondaryColor gl_InstanceID gl_InvocationID gl_Layer gl_LightModel gl_LightSource gl_MaxAtomicCounterBindings gl_MaxAtomicCounterBufferSize gl_MaxClipDistances gl_MaxClipPlanes gl_MaxCombinedAtomicCounterBuffers gl_MaxCombinedAtomicCounters gl_MaxCombinedImageUniforms gl_MaxCombinedImageUnitsAndFragmentOutputs gl_MaxCombinedTextureImageUnits gl_MaxDrawBuffers gl_MaxFragmentAtomicCounterBuffers gl_MaxFragmentAtomicCounters gl_MaxFragmentImageUniforms gl_MaxFragmentInputComponents gl_MaxFragmentUniformComponents gl_MaxFragmentUniformVectors gl_MaxGeometryAtomicCounterBuffers gl_MaxGeometryAtomicCounters gl_MaxGeometryImageUniforms gl_MaxGeometryInputComponents gl_MaxGeometryOutputComponents gl_MaxGeometryOutputVertices gl_MaxGeometryTextureImageUnits gl_MaxGeometryTotalOutputComponents gl_MaxGeometryUniformComponents gl_MaxGeometryVaryingComponents gl_MaxImageSamples gl_MaxImageUnits gl_MaxLights gl_MaxPatchVertices gl_MaxProgramTexelOffset gl_MaxTessControlAtomicCounterBuffers gl_MaxTessControlAtomicCounters gl_MaxTessControlImageUniforms gl_MaxTessControlInputComponents gl_MaxTessControlOutputComponents gl_MaxTessControlTextureImageUnits gl_MaxTessControlTotalOutputComponents gl_MaxTessControlUniformComponents gl_MaxTessEvaluationAtomicCounterBuffers gl_MaxTessEvaluationAtomicCounters gl_MaxTessEvaluationImageUniforms gl_MaxTessEvaluationInputComponents gl_MaxTessEvaluationOutputComponents gl_MaxTessEvaluationTextureImageUnits gl_MaxTessEvaluationUniformComponents gl_MaxTessGenLevel gl_MaxTessPatchComponents gl_MaxTextureCoords gl_MaxTextureImageUnits gl_MaxTextureUnits gl_MaxVaryingComponents gl_MaxVaryingFloats gl_MaxVaryingVectors gl_MaxVertexAtomicCounterBuffers gl_MaxVertexAtomicCounters gl_MaxVertexAttribs gl_MaxVertexImageUniforms gl_MaxVertexOutputComponents gl_MaxVertexTextureImageUnits gl_MaxVertexUniformComponents gl_MaxVertexUniformVectors gl_MaxViewports gl_MinProgramTexelOffsetgl_ModelViewMatrix gl_ModelViewMatrixInverse gl_ModelViewMatrixInverseTranspose gl_ModelViewMatrixTranspose gl_ModelViewProjectionMatrix gl_ModelViewProjectionMatrixInverse gl_ModelViewProjectionMatrixInverseTranspose gl_ModelViewProjectionMatrixTranspose gl_MultiTexCoord0 gl_MultiTexCoord1 gl_MultiTexCoord2 gl_MultiTexCoord3 gl_MultiTexCoord4 gl_MultiTexCoord5 gl_MultiTexCoord6 gl_MultiTexCoord7 gl_Normal gl_NormalMatrix gl_NormalScale gl_ObjectPlaneQ gl_ObjectPlaneR gl_ObjectPlaneS gl_ObjectPlaneT gl_PatchVerticesIn gl_PerVertex gl_Point gl_PointCoord gl_PointSize gl_Position gl_PrimitiveID gl_PrimitiveIDIn gl_ProjectionMatrix gl_ProjectionMatrixInverse gl_ProjectionMatrixInverseTranspose gl_ProjectionMatrixTranspose gl_SampleID gl_SampleMask gl_SampleMaskIn gl_SamplePosition gl_SecondaryColor gl_TessCoord gl_TessLevelInner gl_TessLevelOuter gl_TexCoord gl_TextureEnvColor gl_TextureMatrixInverseTranspose gl_TextureMatrixTranspose gl_Vertex gl_VertexID gl_ViewportIndex gl_in gl_out EmitStreamVertex EmitVertex EndPrimitive EndStreamPrimitive abs acos acosh all any asin asinh atan atanh atomicCounter atomicCounterDecrement atomicCounterIncrement barrier bitCount bitfieldExtract bitfieldInsert bitfieldReverse ceil clamp cos cosh cross dFdx dFdy degrees determinant distance dot equal exp exp2 faceforward findLSB findMSB floatBitsToInt floatBitsToUint floor fma fract frexp ftransform fwidth greaterThan greaterThanEqual imageAtomicAdd imageAtomicAnd imageAtomicCompSwap imageAtomicExchange imageAtomicMax imageAtomicMin imageAtomicOr imageAtomicXor imageLoad imageStore imulExtended intBitsToFloat interpolateAtCentroid interpolateAtOffset interpolateAtSample inverse inversesqrt isinf isnan ldexp length lessThan lessThanEqual log log2 matrixCompMult max memoryBarrier min mix mod modf noise1 noise2 noise3 noise4 normalize not notEqual outerProduct packDouble2x32 packHalf2x16 packSnorm2x16 packSnorm4x8 packUnorm2x16 packUnorm4x8 pow radians reflect refract round roundEven shadow1D shadow1DLod shadow1DProj shadow1DProjLod shadow2D shadow2DLod shadow2DProj shadow2DProjLod sign sin sinh smoothstep sqrt step tan tanh texelFetch texelFetchOffset texture texture1D texture1DLod texture1DProj texture1DProjLod texture2D texture2DLod texture2DProj texture2DProjLod texture3D texture3DLod texture3DProj texture3DProjLod textureCube textureCubeLod textureGather textureGatherOffset textureGatherOffsets textureGrad textureGradOffset textureLod textureLodOffset textureOffset textureProj textureProjGrad textureProjGradOffset textureProjLod textureProjLodOffset textureProjOffset textureQueryLod textureSize transpose trunc uaddCarry uintBitsToFloat umulExtended unpackDouble2x32 unpackHalf2x16 unpackSnorm2x16 unpackSnorm4x8 unpackUnorm2x16 unpackUnorm4x8 usubBorrow gl_TextureMatrix gl_TextureMatrixInverse\",literal:\"true false\"},i:'\"',c:[a.CLCM,a.CBCM,a.CNM,{cN:\"preprocessor\",b:\"#\",e:\"$\"}]}});hljs.registerLanguage(\"rsl\",function(a){return{k:{keyword:\"float color point normal vector matrix while for if do return else break extern continue\",built_in:\"abs acos ambient area asin atan atmosphere attribute calculatenormal ceil cellnoise clamp comp concat cos degrees depth Deriv diffuse distance Du Dv environment exp faceforward filterstep floor format fresnel incident length lightsource log match max min mod noise normalize ntransform opposite option phong pnoise pow printf ptlined radians random reflect refract renderinfo round setcomp setxcomp setycomp setzcomp shadow sign sin smoothstep specular specularbrdf spline sqrt step tan texture textureinfo trace transform vtransform xcomp ycomp zcomp\"},i:\"</\",c:[a.CLCM,a.CBCM,a.QSM,a.ASM,a.CNM,{cN:\"preprocessor\",b:\"#\",e:\"$\"},{cN:\"shader\",bK:\"surface displacement light volume imager\",e:\"\\\\(\"},{cN:\"shading\",bK:\"illuminate illuminance gather\",e:\"\\\\(\"}]}});hljs.registerLanguage(\"gcode\",function(a){var e=\"[A-Z_][A-Z0-9_.]*\";var f=\"\\\\%\";var c={literal:\"\",built_in:\"\",keyword:\"IF DO WHILE ENDWHILE CALL ENDIF SUB ENDSUB GOTO REPEAT ENDREPEAT EQ LT GT NE GE LE OR XOR\"};var b={cN:\"preprocessor\",b:\"([O])([0-9]+)\"};var d=[a.CLCM,{cN:\"comment\",b:/\\(/,e:/\\)/,c:[a.PWM]},a.CBCM,a.inherit(a.CNM,{b:\"([-+]?([0-9]*\\\\.?[0-9]+\\\\.?))|\"+a.CNR}),a.inherit(a.ASM,{i:null}),a.inherit(a.QSM,{i:null}),{cN:\"keyword\",b:\"([G])([0-9]+\\\\.?[0-9]?)\"},{cN:\"title\",b:\"([M])([0-9]+\\\\.?[0-9]?)\"},{cN:\"title\",b:\"(VC|VS|#)\",e:\"(\\\\d+)\"},{cN:\"title\",b:\"(VZOFX|VZOFY|VZOFZ)\"},{cN:\"built_in\",b:\"(ATAN|ABS|ACOS|ASIN|SIN|COS|EXP|FIX|FUP|ROUND|LN|TAN)(\\\\[)\",e:\"([-+]?([0-9]*\\\\.?[0-9]+\\\\.?))(\\\\])\"},{cN:\"label\",v:[{b:\"N\",e:\"\\\\d+\",i:\"\\\\W\"}]}];return{aliases:[\"nc\"],cI:true,l:e,k:c,c:[{cN:\"preprocessor\",b:f},b].concat(d)}});hljs.registerLanguage(\"lua\",function(b){var a=\"\\\\[=*\\\\[\";var e=\"\\\\]=*\\\\]\";var c={b:a,e:e,c:[\"self\"]};var d=[{cN:\"comment\",b:\"--(?!\"+a+\")\",e:\"$\"},{cN:\"comment\",b:\"--\"+a,e:e,c:[c],r:10}];return{l:b.UIR,k:{keyword:\"and break do else elseif end false for if in local nil not or repeat return then true until while\",built_in:\"_G _VERSION assert collectgarbage dofile error getfenv getmetatable ipairs load loadfile loadstring module next pairs pcall print rawequal rawget rawset require select setfenv setmetatable tonumber tostring type unpack xpcall coroutine debug io math os package string table\"},c:d.concat([{cN:\"function\",bK:\"function\",e:\"\\\\)\",c:[b.inherit(b.TM,{b:\"([_a-zA-Z]\\\\w*\\\\.)*([_a-zA-Z]\\\\w*:)?[_a-zA-Z]\\\\w*\"}),{cN:\"params\",b:\"\\\\(\",eW:true,c:d}].concat(d)},b.CNM,b.ASM,b.QSM,{cN:\"string\",b:a,e:e,c:[c],r:5}])}});hljs.registerLanguage(\"css\",function(a){var b=\"[a-zA-Z-][a-zA-Z0-9_-]*\";var c={cN:\"function\",b:b+\"\\\\(\",rB:true,eE:true,e:\"\\\\(\"};return{cI:true,i:\"[=/|']\",c:[a.CBCM,{cN:\"id\",b:\"\\\\#[A-Za-z0-9_-]+\"},{cN:\"class\",b:\"\\\\.[A-Za-z0-9_-]+\",r:0},{cN:\"attr_selector\",b:\"\\\\[\",e:\"\\\\]\",i:\"$\"},{cN:\"pseudo\",b:\":(:)?[a-zA-Z0-9\\\\_\\\\-\\\\+\\\\(\\\\)\\\\\\\"\\\\']+\"},{cN:\"at_rule\",b:\"@(font-face|page)\",l:\"[a-z-]+\",k:\"font-face page\"},{cN:\"at_rule\",b:\"@\",e:\"[{;]\",c:[{cN:\"keyword\",b:/\\S+/},{b:/\\s/,eW:true,eE:true,r:0,c:[c,a.ASM,a.QSM,a.CSSNM]}]},{cN:\"tag\",b:b,r:0},{cN:\"rules\",b:\"{\",e:\"}\",i:\"[^\\\\s]\",r:0,c:[a.CBCM,{cN:\"rule\",b:\"[^\\\\s]\",rB:true,e:\";\",eW:true,c:[{cN:\"attribute\",b:\"[A-Z\\\\_\\\\.\\\\-]+\",e:\":\",eE:true,i:\"[^\\\\s]\",starts:{cN:\"value\",eW:true,eE:true,c:[c,a.CSSNM,a.QSM,a.ASM,a.CBCM,{cN:\"hexcolor\",b:\"#[0-9A-Fa-f]+\"},{cN:\"important\",b:\"!important\"}]}}]}]}]}});hljs.registerLanguage(\"capnproto\",function(a){return{aliases:[\"capnp\"],k:{keyword:\"struct enum interface union group import using const annotation extends in of on as with from fixed\",built_in:\"Void Bool Int8 Int16 Int32 Int64 UInt8 UInt16 UInt32 UInt64 Float32 Float64 Text Data AnyPointer AnyStruct Capability List\",literal:\"true false\"},c:[a.QSM,a.NM,a.HCM,{cN:\"shebang\",b:/@0x[\\w\\d]{16};/,i:/\\n/},{cN:\"number\",b:/@\\d+\\b/},{cN:\"class\",bK:\"struct enum\",e:/\\{/,i:/\\n/,c:[a.inherit(a.TM,{starts:{eW:true,eE:true}})]},{cN:\"class\",bK:\"interface\",e:/\\{/,i:/\\n/,c:[a.inherit(a.TM,{starts:{eW:true,eE:true}})]}]}});hljs.registerLanguage(\"lisp\",function(i){var l=\"[a-zA-Z_\\\\-\\\\+\\\\*\\\\/\\\\<\\\\=\\\\>\\\\&\\\\#][a-zA-Z0-9_\\\\-\\\\+\\\\*\\\\/\\\\<\\\\=\\\\>\\\\&\\\\#!]*\";var m=\"(\\\\-|\\\\+)?\\\\d+(\\\\.\\\\d+|\\\\/\\\\d+)?((d|e|f|l|s)(\\\\+|\\\\-)?\\\\d+)?\";var k={cN:\"shebang\",b:\"^#!\",e:\"$\"};var b={cN:\"literal\",b:\"\\\\b(t{1}|nil)\\\\b\"};var e={cN:\"number\",v:[{b:m,r:0},{b:\"#b[0-1]+(/[0-1]+)?\"},{b:\"#o[0-7]+(/[0-7]+)?\"},{b:\"#x[0-9a-f]+(/[0-9a-f]+)?\"},{b:\"#c\\\\(\"+m+\" +\"+m,e:\"\\\\)\"}]};var h=i.inherit(i.QSM,{i:null});var n={cN:\"comment\",b:\";\",e:\"$\",r:0};var g={cN:\"variable\",b:\"\\\\*\",e:\"\\\\*\"};var o={cN:\"keyword\",b:\"[:&]\"+l};var d={b:\"\\\\(\",e:\"\\\\)\",c:[\"self\",b,h,e]};var a={cN:\"quoted\",c:[e,h,g,o,d],v:[{b:\"['`]\\\\(\",e:\"\\\\)\"},{b:\"\\\\(quote \",e:\"\\\\)\",k:\"quote\"}]};var c={cN:\"quoted\",b:\"'\"+l};var j={cN:\"list\",b:\"\\\\(\",e:\"\\\\)\"};var f={eW:true,r:0};j.c=[{cN:\"keyword\",b:l},f];f.c=[a,c,j,b,e,h,n,g,o];return{i:/\\S/,c:[e,k,b,h,n,a,c,j]}});hljs.registerLanguage(\"profile\",function(a){return{c:[a.CNM,{cN:\"built_in\",b:\"{\",e:\"}$\",eB:true,eE:true,c:[a.ASM,a.QSM],r:0},{cN:\"filename\",b:\"[a-zA-Z_][\\\\da-zA-Z_]+\\\\.[\\\\da-zA-Z_]{1,3}\",e:\":\",eE:true},{cN:\"header\",b:\"(ncalls|tottime|cumtime)\",e:\"$\",k:\"ncalls tottime|10 cumtime|10 filename\",r:10},{cN:\"summary\",b:\"function calls\",e:\"$\",c:[a.CNM],r:10},a.ASM,a.QSM,{cN:\"function\",b:\"\\\\(\",e:\"\\\\)$\",c:[a.UTM],r:0}]}});hljs.registerLanguage(\"http\",function(a){return{i:\"\\\\S\",c:[{cN:\"status\",b:\"^HTTP/[0-9\\\\.]+\",e:\"$\",c:[{cN:\"number\",b:\"\\\\b\\\\d{3}\\\\b\"}]},{cN:\"request\",b:\"^[A-Z]+ (.*?) HTTP/[0-9\\\\.]+$\",rB:true,e:\"$\",c:[{cN:\"string\",b:\" \",e:\" \",eB:true,eE:true}]},{cN:\"attribute\",b:\"^\\\\w\",e:\": \",eE:true,i:\"\\\\n|\\\\s|=\",starts:{cN:\"string\",e:\"$\"}},{b:\"\\\\n\\\\n\",starts:{sL:\"\",eW:true}}]}});hljs.registerLanguage(\"java\",function(c){var b=c.UIR+\"(<\"+c.UIR+\">)?\";var a=\"false synchronized int abstract float private char boolean static null if const for true while long throw strictfp finally protected import native final return void enum else break transient new catch instanceof byte super volatile case assert short package default double public try this switch continue throws protected public private\";return{aliases:[\"jsp\"],k:a,i:/<\\//,c:[{cN:\"javadoc\",b:\"/\\\\*\\\\*\",e:\"\\\\*/\",r:0,c:[{cN:\"javadoctag\",b:\"(^|\\\\s)@[A-Za-z]+\"}]},c.CLCM,c.CBCM,c.ASM,c.QSM,{cN:\"class\",bK:\"class interface\",e:/[{;=]/,eE:true,k:\"class interface\",i:/[:\"\\[\\]]/,c:[{bK:\"extends implements\"},c.UTM]},{bK:\"new\",e:/\\s/,r:0},{cN:\"function\",b:\"(\"+b+\"\\\\s+)+\"+c.UIR+\"\\\\s*\\\\(\",rB:true,e:/[{;=]/,eE:true,k:a,c:[{b:c.UIR+\"\\\\s*\\\\(\",rB:true,c:[c.UTM]},{cN:\"params\",b:/\\(/,e:/\\)/,k:a,c:[c.ASM,c.QSM,c.CNM,c.CBCM]},c.CLCM,c.CBCM]},c.CNM,{cN:\"annotation\",b:\"@[A-Za-z]+\"}]}});hljs.registerLanguage(\"gherkin\",function(a){return{aliases:[\"feature\"],k:\"Feature Background Ability Business Need Scenario Scenarios Scenario Outline Scenario Template Examples Given And Then But When\",c:[{cN:\"keyword\",b:\"\\\\*\"},{cN:\"comment\",b:\"@[^@\\r\\n\\t ]+\",e:\"$\"},{cN:\"string\",b:\"\\\\|\",e:\"\\\\$\"},{cN:\"variable\",b:\"<\",e:\">\",},a.HCM,{cN:\"string\",b:'\"\"\"',e:'\"\"\"'},a.QSM]}});hljs.registerLanguage(\"fsharp\",function(a){var b={b:\"<\",e:\">\",c:[a.inherit(a.TM,{b:/'[a-zA-Z0-9_]+/})]};return{aliases:[\"fs\"],k:\"yield! return! let! do!abstract and as assert base begin class default delegate do done downcast downto elif else end exception extern false finally for fun function global if in inherit inline interface internal lazy let match member module mutable namespace new null of open or override private public rec return sig static struct then to true try type upcast use val void when while with yield\",c:[{cN:\"string\",b:'@\"',e:'\"',c:[{b:'\"\"'}]},{cN:\"string\",b:'\"\"\"',e:'\"\"\"'},{cN:\"comment\",b:\"\\\\(\\\\*\",e:\"\\\\*\\\\)\"},{cN:\"class\",bK:\"type\",e:\"\\\\(|=|$\",eE:true,c:[a.UTM,b]},{cN:\"annotation\",b:\"\\\\[<\",e:\">\\\\]\",r:10},{cN:\"attribute\",b:\"\\\\B('[A-Za-z])\\\\b\",c:[a.BE]},a.CLCM,a.inherit(a.QSM,{i:null}),a.CNM]}});hljs.registerLanguage(\"mathematica\",function(a){return{aliases:[\"mma\"],l:\"(\\\\$|\\\\b)\"+a.IR+\"\\\\b\",k:\"AbelianGroup Abort AbortKernels AbortProtect Above Abs Absolute AbsoluteCorrelation AbsoluteCorrelationFunction AbsoluteCurrentValue AbsoluteDashing AbsoluteFileName AbsoluteOptions AbsolutePointSize AbsoluteThickness AbsoluteTime AbsoluteTiming AccountingForm Accumulate Accuracy AccuracyGoal ActionDelay ActionMenu ActionMenuBox ActionMenuBoxOptions Active ActiveItem ActiveStyle AcyclicGraphQ AddOnHelpPath AddTo AdjacencyGraph AdjacencyList AdjacencyMatrix AdjustmentBox AdjustmentBoxOptions AdjustTimeSeriesForecast AffineTransform After AiryAi AiryAiPrime AiryAiZero AiryBi AiryBiPrime AiryBiZero AlgebraicIntegerQ AlgebraicNumber AlgebraicNumberDenominator AlgebraicNumberNorm AlgebraicNumberPolynomial AlgebraicNumberTrace AlgebraicRules AlgebraicRulesData Algebraics AlgebraicUnitQ Alignment AlignmentMarker AlignmentPoint All AllowedDimensions AllowGroupClose AllowInlineCells AllowKernelInitialization AllowReverseGroupClose AllowScriptLevelChange AlphaChannel AlternatingGroup AlternativeHypothesis Alternatives AmbientLight Analytic AnchoredSearch And AndersonDarlingTest AngerJ AngleBracket AngularGauge Animate AnimationCycleOffset AnimationCycleRepetitions AnimationDirection AnimationDisplayTime AnimationRate AnimationRepetitions AnimationRunning Animator AnimatorBox AnimatorBoxOptions AnimatorElements Annotation Annuity AnnuityDue Antialiasing Antisymmetric Apart ApartSquareFree Appearance AppearanceElements AppellF1 Append AppendTo Apply ArcCos ArcCosh ArcCot ArcCoth ArcCsc ArcCsch ArcSec ArcSech ArcSin ArcSinDistribution ArcSinh ArcTan ArcTanh Arg ArgMax ArgMin ArgumentCountQ ARIMAProcess ArithmeticGeometricMean ARMAProcess ARProcess Array ArrayComponents ArrayDepth ArrayFlatten ArrayPad ArrayPlot ArrayQ ArrayReshape ArrayRules Arrays Arrow Arrow3DBox ArrowBox Arrowheads AspectRatio AspectRatioFixed Assert Assuming Assumptions AstronomicalData Asynchronous AsynchronousTaskObject AsynchronousTasks AtomQ Attributes AugmentedSymmetricPolynomial AutoAction AutoDelete AutoEvaluateEvents AutoGeneratedPackage AutoIndent AutoIndentSpacings AutoItalicWords AutoloadPath AutoMatch Automatic AutomaticImageSize AutoMultiplicationSymbol AutoNumberFormatting AutoOpenNotebooks AutoOpenPalettes AutorunSequencing AutoScaling AutoScroll AutoSpacing AutoStyleOptions AutoStyleWords Axes AxesEdge AxesLabel AxesOrigin AxesStyle Axis BabyMonsterGroupB Back Background BackgroundTasksSettings Backslash Backsubstitution Backward Band BandpassFilter BandstopFilter BarabasiAlbertGraphDistribution BarChart BarChart3D BarLegend BarlowProschanImportance BarnesG BarOrigin BarSpacing BartlettHannWindow BartlettWindow BaseForm Baseline BaselinePosition BaseStyle BatesDistribution BattleLemarieWavelet Because BeckmannDistribution Beep Before Begin BeginDialogPacket BeginFrontEndInteractionPacket BeginPackage BellB BellY Below BenfordDistribution BeniniDistribution BenktanderGibratDistribution BenktanderWeibullDistribution BernoulliB BernoulliDistribution BernoulliGraphDistribution BernoulliProcess BernsteinBasis BesselFilterModel BesselI BesselJ BesselJZero BesselK BesselY BesselYZero Beta BetaBinomialDistribution BetaDistribution BetaNegativeBinomialDistribution BetaPrimeDistribution BetaRegularized BetweennessCentrality BezierCurve BezierCurve3DBox BezierCurve3DBoxOptions BezierCurveBox BezierCurveBoxOptions BezierFunction BilateralFilter Binarize BinaryFormat BinaryImageQ BinaryRead BinaryReadList BinaryWrite BinCounts BinLists Binomial BinomialDistribution BinomialProcess BinormalDistribution BiorthogonalSplineWavelet BipartiteGraphQ BirnbaumImportance BirnbaumSaundersDistribution BitAnd BitClear BitGet BitLength BitNot BitOr BitSet BitShiftLeft BitShiftRight BitXor Black BlackmanHarrisWindow BlackmanNuttallWindow BlackmanWindow Blank BlankForm BlankNullSequence BlankSequence Blend Block BlockRandom BlomqvistBeta BlomqvistBetaTest Blue Blur BodePlot BohmanWindow Bold Bookmarks Boole BooleanConsecutiveFunction BooleanConvert BooleanCountingFunction BooleanFunction BooleanGraph BooleanMaxterms BooleanMinimize BooleanMinterms Booleans BooleanTable BooleanVariables BorderDimensions BorelTannerDistribution Bottom BottomHatTransform BoundaryStyle Bounds Box BoxBaselineShift BoxData BoxDimensions Boxed Boxes BoxForm BoxFormFormatTypes BoxFrame BoxID BoxMargins BoxMatrix BoxRatios BoxRotation BoxRotationPoint BoxStyle BoxWhiskerChart Bra BracketingBar BraKet BrayCurtisDistance BreadthFirstScan Break Brown BrownForsytheTest BrownianBridgeProcess BrowserCategory BSplineBasis BSplineCurve BSplineCurve3DBox BSplineCurveBox BSplineCurveBoxOptions BSplineFunction BSplineSurface BSplineSurface3DBox BubbleChart BubbleChart3D BubbleScale BubbleSizes BulletGauge BusinessDayQ ButterflyGraph ButterworthFilterModel Button ButtonBar ButtonBox ButtonBoxOptions ButtonCell ButtonContents ButtonData ButtonEvaluator ButtonExpandable ButtonFrame ButtonFunction ButtonMargins ButtonMinHeight ButtonNote ButtonNotebook ButtonSource ButtonStyle ButtonStyleMenuListing Byte ByteCount ByteOrdering C CachedValue CacheGraphics CalendarData CalendarType CallPacket CanberraDistance Cancel CancelButton CandlestickChart Cap CapForm CapitalDifferentialD CardinalBSplineBasis CarmichaelLambda Cases Cashflow Casoratian Catalan CatalanNumber Catch CauchyDistribution CauchyWindow CayleyGraph CDF CDFDeploy CDFInformation CDFWavelet Ceiling Cell CellAutoOverwrite CellBaseline CellBoundingBox CellBracketOptions CellChangeTimes CellContents CellContext CellDingbat CellDynamicExpression CellEditDuplicate CellElementsBoundingBox CellElementSpacings CellEpilog CellEvaluationDuplicate CellEvaluationFunction CellEventActions CellFrame CellFrameColor CellFrameLabelMargins CellFrameLabels CellFrameMargins CellGroup CellGroupData CellGrouping CellGroupingRules CellHorizontalScrolling CellID CellLabel CellLabelAutoDelete CellLabelMargins CellLabelPositioning CellMargins CellObject CellOpen CellPrint CellProlog Cells CellSize CellStyle CellTags CellularAutomaton CensoredDistribution Censoring Center CenterDot CentralMoment CentralMomentGeneratingFunction CForm ChampernowneNumber ChanVeseBinarize Character CharacterEncoding CharacterEncodingsPath CharacteristicFunction CharacteristicPolynomial CharacterRange Characters ChartBaseStyle ChartElementData ChartElementDataFunction ChartElementFunction ChartElements ChartLabels ChartLayout ChartLegends ChartStyle Chebyshev1FilterModel Chebyshev2FilterModel ChebyshevDistance ChebyshevT ChebyshevU Check CheckAbort CheckAll Checkbox CheckboxBar CheckboxBox CheckboxBoxOptions ChemicalData ChessboardDistance ChiDistribution ChineseRemainder ChiSquareDistribution ChoiceButtons ChoiceDialog CholeskyDecomposition Chop Circle CircleBox CircleDot CircleMinus CirclePlus CircleTimes CirculantGraph CityData Clear ClearAll ClearAttributes ClearSystemCache ClebschGordan ClickPane Clip ClipboardNotebook ClipFill ClippingStyle ClipPlanes ClipRange Clock ClockGauge ClockwiseContourIntegral Close Closed CloseKernels ClosenessCentrality Closing ClosingAutoSave ClosingEvent ClusteringComponents CMYKColor Coarse Coefficient CoefficientArrays CoefficientDomain CoefficientList CoefficientRules CoifletWavelet Collect Colon ColonForm ColorCombine ColorConvert ColorData ColorDataFunction ColorFunction ColorFunctionScaling Colorize ColorNegate ColorOutput ColorProfileData ColorQuantize ColorReplace ColorRules ColorSelectorSettings ColorSeparate ColorSetter ColorSetterBox ColorSetterBoxOptions ColorSlider ColorSpace Column ColumnAlignments ColumnBackgrounds ColumnForm ColumnLines ColumnsEqual ColumnSpacings ColumnWidths CommonDefaultFormatTypes Commonest CommonestFilter CommonUnits CommunityBoundaryStyle CommunityGraphPlot CommunityLabels CommunityRegionStyle CompatibleUnitQ CompilationOptions CompilationTarget Compile Compiled CompiledFunction Complement CompleteGraph CompleteGraphQ CompleteKaryTree CompletionsListPacket Complex Complexes ComplexExpand ComplexInfinity ComplexityFunction ComponentMeasurements ComponentwiseContextMenu Compose ComposeList ComposeSeries Composition CompoundExpression CompoundPoissonDistribution CompoundPoissonProcess CompoundRenewalProcess Compress CompressedData Condition ConditionalExpression Conditioned Cone ConeBox ConfidenceLevel ConfidenceRange ConfidenceTransform ConfigurationPath Congruent Conjugate ConjugateTranspose Conjunction Connect ConnectedComponents ConnectedGraphQ ConnesWindow ConoverTest ConsoleMessage ConsoleMessagePacket ConsolePrint Constant ConstantArray Constants ConstrainedMax ConstrainedMin ContentPadding ContentsBoundingBox ContentSelectable ContentSize Context ContextMenu Contexts ContextToFilename ContextToFileName Continuation Continue ContinuedFraction ContinuedFractionK ContinuousAction ContinuousMarkovProcess ContinuousTimeModelQ ContinuousWaveletData ContinuousWaveletTransform ContourDetect ContourGraphics ContourIntegral ContourLabels ContourLines ContourPlot ContourPlot3D Contours ContourShading ContourSmoothing ContourStyle ContraharmonicMean Control ControlActive ControlAlignment ControllabilityGramian ControllabilityMatrix ControllableDecomposition ControllableModelQ ControllerDuration ControllerInformation ControllerInformationData ControllerLinking ControllerManipulate ControllerMethod ControllerPath ControllerState ControlPlacement ControlsRendering ControlType Convergents ConversionOptions ConversionRules ConvertToBitmapPacket ConvertToPostScript ConvertToPostScriptPacket Convolve ConwayGroupCo1 ConwayGroupCo2 ConwayGroupCo3 CoordinateChartData CoordinatesToolOptions CoordinateTransform CoordinateTransformData CoprimeQ Coproduct CopulaDistribution Copyable CopyDirectory CopyFile CopyTag CopyToClipboard CornerFilter CornerNeighbors Correlation CorrelationDistance CorrelationFunction CorrelationTest Cos Cosh CoshIntegral CosineDistance CosineWindow CosIntegral Cot Coth Count CounterAssignments CounterBox CounterBoxOptions CounterClockwiseContourIntegral CounterEvaluator CounterFunction CounterIncrements CounterStyle CounterStyleMenuListing CountRoots CountryData Covariance CovarianceEstimatorFunction CovarianceFunction CoxianDistribution CoxIngersollRossProcess CoxModel CoxModelFit CramerVonMisesTest CreateArchive CreateDialog CreateDirectory CreateDocument CreateIntermediateDirectories CreatePalette CreatePalettePacket CreateScheduledTask CreateTemporary CreateWindow CriticalityFailureImportance CriticalitySuccessImportance CriticalSection Cross CrossingDetect CrossMatrix Csc Csch CubeRoot Cubics Cuboid CuboidBox Cumulant CumulantGeneratingFunction Cup CupCap Curl CurlyDoubleQuote CurlyQuote CurrentImage CurrentlySpeakingPacket CurrentValue CurvatureFlowFilter CurveClosed Cyan CycleGraph CycleIndexPolynomial Cycles CyclicGroup Cyclotomic Cylinder CylinderBox CylindricalDecomposition D DagumDistribution DamerauLevenshteinDistance DampingFactor Darker Dashed Dashing DataCompression DataDistribution DataRange DataReversed Date DateDelimiters DateDifference DateFunction DateList DateListLogPlot DateListPlot DatePattern DatePlus DateRange DateString DateTicksFormat DaubechiesWavelet DavisDistribution DawsonF DayCount DayCountConvention DayMatchQ DayName DayPlus DayRange DayRound DeBruijnGraph Debug DebugTag Decimal DeclareKnownSymbols DeclarePackage Decompose Decrement DedekindEta Default DefaultAxesStyle DefaultBaseStyle DefaultBoxStyle DefaultButton DefaultColor DefaultControlPlacement DefaultDuplicateCellStyle DefaultDuration DefaultElement DefaultFaceGridsStyle DefaultFieldHintStyle DefaultFont DefaultFontProperties DefaultFormatType DefaultFormatTypeForStyle DefaultFrameStyle DefaultFrameTicksStyle DefaultGridLinesStyle DefaultInlineFormatType DefaultInputFormatType DefaultLabelStyle DefaultMenuStyle DefaultNaturalLanguage DefaultNewCellStyle DefaultNewInlineCellStyle DefaultNotebook DefaultOptions DefaultOutputFormatType DefaultStyle DefaultStyleDefinitions DefaultTextFormatType DefaultTextInlineFormatType DefaultTicksStyle DefaultTooltipStyle DefaultValues Defer DefineExternal DefineInputStreamMethod DefineOutputStreamMethod Definition Degree DegreeCentrality DegreeGraphDistribution DegreeLexicographic DegreeReverseLexicographic Deinitialization Del Deletable Delete DeleteBorderComponents DeleteCases DeleteContents DeleteDirectory DeleteDuplicates DeleteFile DeleteSmallComponents DeleteWithContents DeletionWarning Delimiter DelimiterFlashTime DelimiterMatching Delimiters Denominator DensityGraphics DensityHistogram DensityPlot DependentVariables Deploy Deployed Depth DepthFirstScan Derivative DerivativeFilter DescriptorStateSpace DesignMatrix Det DGaussianWavelet DiacriticalPositioning Diagonal DiagonalMatrix Dialog DialogIndent DialogInput DialogLevel DialogNotebook DialogProlog DialogReturn DialogSymbols Diamond DiamondMatrix DiceDissimilarity DictionaryLookup DifferenceDelta DifferenceOrder DifferenceRoot DifferenceRootReduce Differences DifferentialD DifferentialRoot DifferentialRootReduce DifferentiatorFilter DigitBlock DigitBlockMinimum DigitCharacter DigitCount DigitQ DihedralGroup Dilation Dimensions DiracComb DiracDelta DirectedEdge DirectedEdges DirectedGraph DirectedGraphQ DirectedInfinity Direction Directive Directory DirectoryName DirectoryQ DirectoryStack DirichletCharacter DirichletConvolve DirichletDistribution DirichletL DirichletTransform DirichletWindow DisableConsolePrintPacket DiscreteChirpZTransform DiscreteConvolve DiscreteDelta DiscreteHadamardTransform DiscreteIndicator DiscreteLQEstimatorGains DiscreteLQRegulatorGains DiscreteLyapunovSolve DiscreteMarkovProcess DiscretePlot DiscretePlot3D DiscreteRatio DiscreteRiccatiSolve DiscreteShift DiscreteTimeModelQ DiscreteUniformDistribution DiscreteVariables DiscreteWaveletData DiscreteWaveletPacketTransform DiscreteWaveletTransform Discriminant Disjunction Disk DiskBox DiskMatrix Dispatch DispersionEstimatorFunction Display DisplayAllSteps DisplayEndPacket DisplayFlushImagePacket DisplayForm DisplayFunction DisplayPacket DisplayRules DisplaySetSizePacket DisplayString DisplayTemporary DisplayWith DisplayWithRef DisplayWithVariable DistanceFunction DistanceTransform Distribute Distributed DistributedContexts DistributeDefinitions DistributionChart DistributionDomain DistributionFitTest DistributionParameterAssumptions DistributionParameterQ Dithering Div Divergence Divide DivideBy Dividers Divisible Divisors DivisorSigma DivisorSum DMSList DMSString Do DockedCells DocumentNotebook DominantColors DOSTextFormat Dot DotDashed DotEqual Dotted DoubleBracketingBar DoubleContourIntegral DoubleDownArrow DoubleLeftArrow DoubleLeftRightArrow DoubleLeftTee DoubleLongLeftArrow DoubleLongLeftRightArrow DoubleLongRightArrow DoubleRightArrow DoubleRightTee DoubleUpArrow DoubleUpDownArrow DoubleVerticalBar DoublyInfinite Down DownArrow DownArrowBar DownArrowUpArrow DownLeftRightVector DownLeftTeeVector DownLeftVector DownLeftVectorBar DownRightTeeVector DownRightVector DownRightVectorBar Downsample DownTee DownTeeArrow DownValues DragAndDrop DrawEdges DrawFrontFaces DrawHighlighted Drop DSolve Dt DualLinearProgramming DualSystemsModel DumpGet DumpSave DuplicateFreeQ Dynamic DynamicBox DynamicBoxOptions DynamicEvaluationTimeout DynamicLocation DynamicModule DynamicModuleBox DynamicModuleBoxOptions DynamicModuleParent DynamicModuleValues DynamicName DynamicNamespace DynamicReference DynamicSetting DynamicUpdating DynamicWrapper DynamicWrapperBox DynamicWrapperBoxOptions E EccentricityCentrality EdgeAdd EdgeBetweennessCentrality EdgeCapacity EdgeCapForm EdgeColor EdgeConnectivity EdgeCost EdgeCount EdgeCoverQ EdgeDashing EdgeDelete EdgeDetect EdgeForm EdgeIndex EdgeJoinForm EdgeLabeling EdgeLabels EdgeLabelStyle EdgeList EdgeOpacity EdgeQ EdgeRenderingFunction EdgeRules EdgeShapeFunction EdgeStyle EdgeThickness EdgeWeight Editable EditButtonSettings EditCellTagsSettings EditDistance EffectiveInterest Eigensystem Eigenvalues EigenvectorCentrality Eigenvectors Element ElementData Eliminate EliminationOrder EllipticE EllipticExp EllipticExpPrime EllipticF EllipticFilterModel EllipticK EllipticLog EllipticNomeQ EllipticPi EllipticReducedHalfPeriods EllipticTheta EllipticThetaPrime EmitSound EmphasizeSyntaxErrors EmpiricalDistribution Empty EmptyGraphQ EnableConsolePrintPacket Enabled Encode End EndAdd EndDialogPacket EndFrontEndInteractionPacket EndOfFile EndOfLine EndOfString EndPackage EngineeringForm Enter EnterExpressionPacket EnterTextPacket Entropy EntropyFilter Environment Epilog Equal EqualColumns EqualRows EqualTilde EquatedTo Equilibrium EquirippleFilterKernel Equivalent Erf Erfc Erfi ErlangB ErlangC ErlangDistribution Erosion ErrorBox ErrorBoxOptions ErrorNorm ErrorPacket ErrorsDialogSettings EstimatedDistribution EstimatedProcess EstimatorGains EstimatorRegulator EuclideanDistance EulerE EulerGamma EulerianGraphQ EulerPhi Evaluatable Evaluate Evaluated EvaluatePacket EvaluationCell EvaluationCompletionAction EvaluationElements EvaluationMode EvaluationMonitor EvaluationNotebook EvaluationObject EvaluationOrder Evaluator EvaluatorNames EvenQ EventData EventEvaluator EventHandler EventHandlerTag EventLabels ExactBlackmanWindow ExactNumberQ ExactRootIsolation ExampleData Except ExcludedForms ExcludePods Exclusions ExclusionsStyle Exists Exit ExitDialog Exp Expand ExpandAll ExpandDenominator ExpandFileName ExpandNumerator Expectation ExpectationE ExpectedValue ExpGammaDistribution ExpIntegralE ExpIntegralEi Exponent ExponentFunction ExponentialDistribution ExponentialFamily ExponentialGeneratingFunction ExponentialMovingAverage ExponentialPowerDistribution ExponentPosition ExponentStep Export ExportAutoReplacements ExportPacket ExportString Expression ExpressionCell ExpressionPacket ExpToTrig ExtendedGCD Extension ExtentElementFunction ExtentMarkers ExtentSize ExternalCall ExternalDataCharacterEncoding Extract ExtractArchive ExtremeValueDistribution FaceForm FaceGrids FaceGridsStyle Factor FactorComplete Factorial Factorial2 FactorialMoment FactorialMomentGeneratingFunction FactorialPower FactorInteger FactorList FactorSquareFree FactorSquareFreeList FactorTerms FactorTermsList Fail FailureDistribution False FARIMAProcess FEDisableConsolePrintPacket FeedbackSector FeedbackSectorStyle FeedbackType FEEnableConsolePrintPacket Fibonacci FieldHint FieldHintStyle FieldMasked FieldSize File FileBaseName FileByteCount FileDate FileExistsQ FileExtension FileFormat FileHash FileInformation FileName FileNameDepth FileNameDialogSettings FileNameDrop FileNameJoin FileNames FileNameSetter FileNameSplit FileNameTake FilePrint FileType FilledCurve FilledCurveBox Filling FillingStyle FillingTransform FilterRules FinancialBond FinancialData FinancialDerivative FinancialIndicator Find FindArgMax FindArgMin FindClique FindClusters FindCurvePath FindDistributionParameters FindDivisions FindEdgeCover FindEdgeCut FindEulerianCycle FindFaces FindFile FindFit FindGeneratingFunction FindGeoLocation FindGeometricTransform FindGraphCommunities FindGraphIsomorphism FindGraphPartition FindHamiltonianCycle FindIndependentEdgeSet FindIndependentVertexSet FindInstance FindIntegerNullVector FindKClan FindKClique FindKClub FindKPlex FindLibrary FindLinearRecurrence FindList FindMaximum FindMaximumFlow FindMaxValue FindMinimum FindMinimumCostFlow FindMinimumCut FindMinValue FindPermutation FindPostmanTour FindProcessParameters FindRoot FindSequenceFunction FindSettings FindShortestPath FindShortestTour FindThreshold FindVertexCover FindVertexCut Fine FinishDynamic FiniteAbelianGroupCount FiniteGroupCount FiniteGroupData First FirstPassageTimeDistribution FischerGroupFi22 FischerGroupFi23 FischerGroupFi24Prime FisherHypergeometricDistribution FisherRatioTest FisherZDistribution Fit FitAll FittedModel FixedPoint FixedPointList FlashSelection Flat Flatten FlattenAt FlatTopWindow FlipView Floor FlushPrintOutputPacket Fold FoldList Font FontColor FontFamily FontForm FontName FontOpacity FontPostScriptName FontProperties FontReencoding FontSize FontSlant FontSubstitutions FontTracking FontVariations FontWeight For ForAll Format FormatRules FormatType FormatTypeAutoConvert FormatValues FormBox FormBoxOptions FortranForm Forward ForwardBackward Fourier FourierCoefficient FourierCosCoefficient FourierCosSeries FourierCosTransform FourierDCT FourierDCTFilter FourierDCTMatrix FourierDST FourierDSTMatrix FourierMatrix FourierParameters FourierSequenceTransform FourierSeries FourierSinCoefficient FourierSinSeries FourierSinTransform FourierTransform FourierTrigSeries FractionalBrownianMotionProcess FractionalPart FractionBox FractionBoxOptions FractionLine Frame FrameBox FrameBoxOptions Framed FrameInset FrameLabel Frameless FrameMargins FrameStyle FrameTicks FrameTicksStyle FRatioDistribution FrechetDistribution FreeQ FrequencySamplingFilterKernel FresnelC FresnelS Friday FrobeniusNumber FrobeniusSolve FromCharacterCode FromCoefficientRules FromContinuedFraction FromDate FromDigits FromDMS Front FrontEndDynamicExpression FrontEndEventActions FrontEndExecute FrontEndObject FrontEndResource FrontEndResourceString FrontEndStackSize FrontEndToken FrontEndTokenExecute FrontEndValueCache FrontEndVersion FrontFaceColor FrontFaceOpacity Full FullAxes FullDefinition FullForm FullGraphics FullOptions FullSimplify Function FunctionExpand FunctionInterpolation FunctionSpace FussellVeselyImportance GaborFilter GaborMatrix GaborWavelet GainMargins GainPhaseMargins Gamma GammaDistribution GammaRegularized GapPenalty Gather GatherBy GaugeFaceElementFunction GaugeFaceStyle GaugeFrameElementFunction GaugeFrameSize GaugeFrameStyle GaugeLabels GaugeMarkers GaugeStyle GaussianFilter GaussianIntegers GaussianMatrix GaussianWindow GCD GegenbauerC General GeneralizedLinearModelFit GenerateConditions GeneratedCell GeneratedParameters GeneratingFunction Generic GenericCylindricalDecomposition GenomeData GenomeLookup GeodesicClosing GeodesicDilation GeodesicErosion GeodesicOpening GeoDestination GeodesyData GeoDirection GeoDistance GeoGridPosition GeometricBrownianMotionProcess GeometricDistribution GeometricMean GeometricMeanFilter GeometricTransformation GeometricTransformation3DBox GeometricTransformation3DBoxOptions GeometricTransformationBox GeometricTransformationBoxOptions GeoPosition GeoPositionENU GeoPositionXYZ GeoProjectionData GestureHandler GestureHandlerTag Get GetBoundingBoxSizePacket GetContext GetEnvironment GetFileName GetFrontEndOptionsDataPacket GetLinebreakInformationPacket GetMenusPacket GetPageBreakInformationPacket Glaisher GlobalClusteringCoefficient GlobalPreferences GlobalSession Glow GoldenRatio GompertzMakehamDistribution GoodmanKruskalGamma GoodmanKruskalGammaTest Goto Grad Gradient GradientFilter GradientOrientationFilter Graph GraphAssortativity GraphCenter GraphComplement GraphData GraphDensity GraphDiameter GraphDifference GraphDisjointUnion GraphDistance GraphDistanceMatrix GraphElementData GraphEmbedding GraphHighlight GraphHighlightStyle GraphHub Graphics Graphics3D Graphics3DBox Graphics3DBoxOptions GraphicsArray GraphicsBaseline GraphicsBox GraphicsBoxOptions GraphicsColor GraphicsColumn GraphicsComplex GraphicsComplex3DBox GraphicsComplex3DBoxOptions GraphicsComplexBox GraphicsComplexBoxOptions GraphicsContents GraphicsData GraphicsGrid GraphicsGridBox GraphicsGroup GraphicsGroup3DBox GraphicsGroup3DBoxOptions GraphicsGroupBox GraphicsGroupBoxOptions GraphicsGrouping GraphicsHighlightColor GraphicsRow GraphicsSpacing GraphicsStyle GraphIntersection GraphLayout GraphLinkEfficiency GraphPeriphery GraphPlot GraphPlot3D GraphPower GraphPropertyDistribution GraphQ GraphRadius GraphReciprocity GraphRoot GraphStyle GraphUnion Gray GrayLevel GreatCircleDistance Greater GreaterEqual GreaterEqualLess GreaterFullEqual GreaterGreater GreaterLess GreaterSlantEqual GreaterTilde Green Grid GridBaseline GridBox GridBoxAlignment GridBoxBackground GridBoxDividers GridBoxFrame GridBoxItemSize GridBoxItemStyle GridBoxOptions GridBoxSpacings GridCreationSettings GridDefaultElement GridElementStyleOptions GridFrame GridFrameMargins GridGraph GridLines GridLinesStyle GroebnerBasis GroupActionBase GroupCentralizer GroupElementFromWord GroupElementPosition GroupElementQ GroupElements GroupElementToWord GroupGenerators GroupMultiplicationTable GroupOrbits GroupOrder GroupPageBreakWithin GroupSetwiseStabilizer GroupStabilizer GroupStabilizerChain Gudermannian GumbelDistribution HaarWavelet HadamardMatrix HalfNormalDistribution HamiltonianGraphQ HammingDistance HammingWindow HankelH1 HankelH2 HankelMatrix HannPoissonWindow HannWindow HaradaNortonGroupHN HararyGraph HarmonicMean HarmonicMeanFilter HarmonicNumber Hash HashTable Haversine HazardFunction Head HeadCompose Heads HeavisideLambda HeavisidePi HeavisideTheta HeldGroupHe HeldPart HelpBrowserLookup HelpBrowserNotebook HelpBrowserSettings HermiteDecomposition HermiteH HermitianMatrixQ HessenbergDecomposition Hessian HexadecimalCharacter Hexahedron HexahedronBox HexahedronBoxOptions HiddenSurface HighlightGraph HighlightImage HighpassFilter HigmanSimsGroupHS HilbertFilter HilbertMatrix Histogram Histogram3D HistogramDistribution HistogramList HistogramTransform HistogramTransformInterpolation HitMissTransform HITSCentrality HodgeDual HoeffdingD HoeffdingDTest Hold HoldAll HoldAllComplete HoldComplete HoldFirst HoldForm HoldPattern HoldRest HolidayCalendar HomeDirectory HomePage Horizontal HorizontalForm HorizontalGauge HorizontalScrollPosition HornerForm HotellingTSquareDistribution HoytDistribution HTMLSave Hue HumpDownHump HumpEqual HurwitzLerchPhi HurwitzZeta HyperbolicDistribution HypercubeGraph HyperexponentialDistribution Hyperfactorial Hypergeometric0F1 Hypergeometric0F1Regularized Hypergeometric1F1 Hypergeometric1F1Regularized Hypergeometric2F1 Hypergeometric2F1Regularized HypergeometricDistribution HypergeometricPFQ HypergeometricPFQRegularized HypergeometricU Hyperlink HyperlinkCreationSettings Hyphenation HyphenationOptions HypoexponentialDistribution HypothesisTestData I Identity IdentityMatrix If IgnoreCase Im Image Image3D Image3DSlices ImageAccumulate ImageAdd ImageAdjust ImageAlign ImageApply ImageAspectRatio ImageAssemble ImageCache ImageCacheValid ImageCapture ImageChannels ImageClip ImageColorSpace ImageCompose ImageConvolve ImageCooccurrence ImageCorners ImageCorrelate ImageCorrespondingPoints ImageCrop ImageData ImageDataPacket ImageDeconvolve ImageDemosaic ImageDifference ImageDimensions ImageDistance ImageEffect ImageFeatureTrack ImageFileApply ImageFileFilter ImageFileScan ImageFilter ImageForestingComponents ImageForwardTransformation ImageHistogram ImageKeypoints ImageLevels ImageLines ImageMargins ImageMarkers ImageMeasurements ImageMultiply ImageOffset ImagePad ImagePadding ImagePartition ImagePeriodogram ImagePerspectiveTransformation ImageQ ImageRangeCache ImageReflect ImageRegion ImageResize ImageResolution ImageRotate ImageRotated ImageScaled ImageScan ImageSize ImageSizeAction ImageSizeCache ImageSizeMultipliers ImageSizeRaw ImageSubtract ImageTake ImageTransformation ImageTrim ImageType ImageValue ImageValuePositions Implies Import ImportAutoReplacements ImportString ImprovementImportance In IncidenceGraph IncidenceList IncidenceMatrix IncludeConstantBasis IncludeFileExtension IncludePods IncludeSingularTerm Increment Indent IndentingNewlineSpacings IndentMaxFraction IndependenceTest IndependentEdgeSetQ IndependentUnit IndependentVertexSetQ Indeterminate IndexCreationOptions Indexed IndexGraph IndexTag Inequality InexactNumberQ InexactNumbers Infinity Infix Information Inherited InheritScope Initialization InitializationCell InitializationCellEvaluation InitializationCellWarning InlineCounterAssignments InlineCounterIncrements InlineRules Inner Inpaint Input InputAliases InputAssumptions InputAutoReplacements InputField InputFieldBox InputFieldBoxOptions InputForm InputGrouping InputNamePacket InputNotebook InputPacket InputSettings InputStream InputString InputStringPacket InputToBoxFormPacket Insert InsertionPointObject InsertResults Inset Inset3DBox Inset3DBoxOptions InsetBox InsetBoxOptions Install InstallService InString Integer IntegerDigits IntegerExponent IntegerLength IntegerPart IntegerPartitions IntegerQ Integers IntegerString Integral Integrate Interactive InteractiveTradingChart Interlaced Interleaving InternallyBalancedDecomposition InterpolatingFunction InterpolatingPolynomial Interpolation InterpolationOrder InterpolationPoints InterpolationPrecision Interpretation InterpretationBox InterpretationBoxOptions InterpretationFunction InterpretTemplate InterquartileRange Interrupt InterruptSettings Intersection Interval IntervalIntersection IntervalMemberQ IntervalUnion Inverse InverseBetaRegularized InverseCDF InverseChiSquareDistribution InverseContinuousWaveletTransform InverseDistanceTransform InverseEllipticNomeQ InverseErf InverseErfc InverseFourier InverseFourierCosTransform InverseFourierSequenceTransform InverseFourierSinTransform InverseFourierTransform InverseFunction InverseFunctions InverseGammaDistribution InverseGammaRegularized InverseGaussianDistribution InverseGudermannian InverseHaversine InverseJacobiCD InverseJacobiCN InverseJacobiCS InverseJacobiDC InverseJacobiDN InverseJacobiDS InverseJacobiNC InverseJacobiND InverseJacobiNS InverseJacobiSC InverseJacobiSD InverseJacobiSN InverseLaplaceTransform InversePermutation InverseRadon InverseSeries InverseSurvivalFunction InverseWaveletTransform InverseWeierstrassP InverseZTransform Invisible InvisibleApplication InvisibleTimes IrreduciblePolynomialQ IsolatingInterval IsomorphicGraphQ IsotopeData Italic Item ItemBox ItemBoxOptions ItemSize ItemStyle ItoProcess JaccardDissimilarity JacobiAmplitude Jacobian JacobiCD JacobiCN JacobiCS JacobiDC JacobiDN JacobiDS JacobiNC JacobiND JacobiNS JacobiP JacobiSC JacobiSD JacobiSN JacobiSymbol JacobiZeta JankoGroupJ1 JankoGroupJ2 JankoGroupJ3 JankoGroupJ4 JarqueBeraALMTest JohnsonDistribution Join Joined JoinedCurve JoinedCurveBox JoinForm JordanDecomposition JordanModelDecomposition K KagiChart KaiserBesselWindow KaiserWindow KalmanEstimator KalmanFilter KarhunenLoeveDecomposition KaryTree KatzCentrality KCoreComponents KDistribution KelvinBei KelvinBer KelvinKei KelvinKer KendallTau KendallTauTest KernelExecute KernelMixtureDistribution KernelObject Kernels Ket Khinchin KirchhoffGraph KirchhoffMatrix KleinInvariantJ KnightTourGraph KnotData KnownUnitQ KolmogorovSmirnovTest KroneckerDelta KroneckerModelDecomposition KroneckerProduct KroneckerSymbol KuiperTest KumaraswamyDistribution Kurtosis KuwaharaFilter Label Labeled LabeledSlider LabelingFunction LabelStyle LaguerreL LambdaComponents LambertW LanczosWindow LandauDistribution Language LanguageCategory LaplaceDistribution LaplaceTransform Laplacian LaplacianFilter LaplacianGaussianFilter Large Larger Last Latitude LatitudeLongitude LatticeData LatticeReduce Launch LaunchKernels LayeredGraphPlot LayerSizeFunction LayoutInformation LCM LeafCount LeapYearQ LeastSquares LeastSquaresFilterKernel Left LeftArrow LeftArrowBar LeftArrowRightArrow LeftDownTeeVector LeftDownVector LeftDownVectorBar LeftRightArrow LeftRightVector LeftTee LeftTeeArrow LeftTeeVector LeftTriangle LeftTriangleBar LeftTriangleEqual LeftUpDownVector LeftUpTeeVector LeftUpVector LeftUpVectorBar LeftVector LeftVectorBar LegendAppearance Legended LegendFunction LegendLabel LegendLayout LegendMargins LegendMarkers LegendMarkerSize LegendreP LegendreQ LegendreType Length LengthWhile LerchPhi Less LessEqual LessEqualGreater LessFullEqual LessGreater LessLess LessSlantEqual LessTilde LetterCharacter LetterQ Level LeveneTest LeviCivitaTensor LevyDistribution Lexicographic LibraryFunction LibraryFunctionError LibraryFunctionInformation LibraryFunctionLoad LibraryFunctionUnload LibraryLoad LibraryUnload LicenseID LiftingFilterData LiftingWaveletTransform LightBlue LightBrown LightCyan Lighter LightGray LightGreen Lighting LightingAngle LightMagenta LightOrange LightPink LightPurple LightRed LightSources LightYellow Likelihood Limit LimitsPositioning LimitsPositioningTokens LindleyDistribution Line Line3DBox LinearFilter LinearFractionalTransform LinearModelFit LinearOffsetFunction LinearProgramming LinearRecurrence LinearSolve LinearSolveFunction LineBox LineBreak LinebreakAdjustments LineBreakChart LineBreakWithin LineColor LineForm LineGraph LineIndent LineIndentMaxFraction LineIntegralConvolutionPlot LineIntegralConvolutionScale LineLegend LineOpacity LineSpacing LineWrapParts LinkActivate LinkClose LinkConnect LinkConnectedQ LinkCreate LinkError LinkFlush LinkFunction LinkHost LinkInterrupt LinkLaunch LinkMode LinkObject LinkOpen LinkOptions LinkPatterns LinkProtocol LinkRead LinkReadHeld LinkReadyQ Links LinkWrite LinkWriteHeld LiouvilleLambda List Listable ListAnimate ListContourPlot ListContourPlot3D ListConvolve ListCorrelate ListCurvePathPlot ListDeconvolve ListDensityPlot Listen ListFourierSequenceTransform ListInterpolation ListLineIntegralConvolutionPlot ListLinePlot ListLogLinearPlot ListLogLogPlot ListLogPlot ListPicker ListPickerBox ListPickerBoxBackground ListPickerBoxOptions ListPlay ListPlot ListPlot3D ListPointPlot3D ListPolarPlot ListQ ListStreamDensityPlot ListStreamPlot ListSurfacePlot3D ListVectorDensityPlot ListVectorPlot ListVectorPlot3D ListZTransform Literal LiteralSearch LocalClusteringCoefficient LocalizeVariables LocationEquivalenceTest LocationTest Locator LocatorAutoCreate LocatorBox LocatorBoxOptions LocatorCentering LocatorPane LocatorPaneBox LocatorPaneBoxOptions LocatorRegion Locked Log Log10 Log2 LogBarnesG LogGamma LogGammaDistribution LogicalExpand LogIntegral LogisticDistribution LogitModelFit LogLikelihood LogLinearPlot LogLogisticDistribution LogLogPlot LogMultinormalDistribution LogNormalDistribution LogPlot LogRankTest LogSeriesDistribution LongEqual Longest LongestAscendingSequence LongestCommonSequence LongestCommonSequencePositions LongestCommonSubsequence LongestCommonSubsequencePositions LongestMatch LongForm Longitude LongLeftArrow LongLeftRightArrow LongRightArrow Loopback LoopFreeGraphQ LowerCaseQ LowerLeftArrow LowerRightArrow LowerTriangularize LowpassFilter LQEstimatorGains LQGRegulator LQOutputRegulatorGains LQRegulatorGains LUBackSubstitution LucasL LuccioSamiComponents LUDecomposition LyapunovSolve LyonsGroupLy MachineID MachineName MachineNumberQ MachinePrecision MacintoshSystemPageSetup Magenta Magnification Magnify MainSolve MaintainDynamicCaches Majority MakeBoxes MakeExpression MakeRules MangoldtLambda ManhattanDistance Manipulate Manipulator MannWhitneyTest MantissaExponent Manual Map MapAll MapAt MapIndexed MAProcess MapThread MarcumQ MardiaCombinedTest MardiaKurtosisTest MardiaSkewnessTest MarginalDistribution MarkovProcessProperties Masking MatchingDissimilarity MatchLocalNameQ MatchLocalNames MatchQ Material MathematicaNotation MathieuC MathieuCharacteristicA MathieuCharacteristicB MathieuCharacteristicExponent MathieuCPrime MathieuGroupM11 MathieuGroupM12 MathieuGroupM22 MathieuGroupM23 MathieuGroupM24 MathieuS MathieuSPrime MathMLForm MathMLText Matrices MatrixExp MatrixForm MatrixFunction MatrixLog MatrixPlot MatrixPower MatrixQ MatrixRank Max MaxBend MaxDetect MaxExtraBandwidths MaxExtraConditions MaxFeatures MaxFilter Maximize MaxIterations MaxMemoryUsed MaxMixtureKernels MaxPlotPoints MaxPoints MaxRecursion MaxStableDistribution MaxStepFraction MaxSteps MaxStepSize MaxValue MaxwellDistribution McLaughlinGroupMcL Mean MeanClusteringCoefficient MeanDegreeConnectivity MeanDeviation MeanFilter MeanGraphDistance MeanNeighborDegree MeanShift MeanShiftFilter Median MedianDeviation MedianFilter Medium MeijerG MeixnerDistribution MemberQ MemoryConstrained MemoryInUse Menu MenuAppearance MenuCommandKey MenuEvaluator MenuItem MenuPacket MenuSortingValue MenuStyle MenuView MergeDifferences Mesh MeshFunctions MeshRange MeshShading MeshStyle Message MessageDialog MessageList MessageName MessageOptions MessagePacket Messages MessagesNotebook MetaCharacters MetaInformation Method MethodOptions MexicanHatWavelet MeyerWavelet Min MinDetect MinFilter MinimalPolynomial MinimalStateSpaceModel Minimize Minors MinRecursion MinSize MinStableDistribution Minus MinusPlus MinValue Missing MissingDataMethod MittagLefflerE MixedRadix MixedRadixQuantity MixtureDistribution Mod Modal Mode Modular ModularLambda Module Modulus MoebiusMu Moment Momentary MomentConvert MomentEvaluate MomentGeneratingFunction Monday Monitor MonomialList MonomialOrder MonsterGroupM MorletWavelet MorphologicalBinarize MorphologicalBranchPoints MorphologicalComponents MorphologicalEulerNumber MorphologicalGraph MorphologicalPerimeter MorphologicalTransform Most MouseAnnotation MouseAppearance MouseAppearanceTag MouseButtons Mouseover MousePointerNote MousePosition MovingAverage MovingMedian MoyalDistribution MultiedgeStyle MultilaunchWarning MultiLetterItalics MultiLetterStyle MultilineFunction Multinomial MultinomialDistribution MultinormalDistribution MultiplicativeOrder Multiplicity Multiselection MultivariateHypergeometricDistribution MultivariatePoissonDistribution MultivariateTDistribution N NakagamiDistribution NameQ Names NamespaceBox Nand NArgMax NArgMin NBernoulliB NCache NDSolve NDSolveValue Nearest NearestFunction NeedCurrentFrontEndPackagePacket NeedCurrentFrontEndSymbolsPacket NeedlemanWunschSimilarity Needs Negative NegativeBinomialDistribution NegativeMultinomialDistribution NeighborhoodGraph Nest NestedGreaterGreater NestedLessLess NestedScriptRules NestList NestWhile NestWhileList NevilleThetaC NevilleThetaD NevilleThetaN NevilleThetaS NewPrimitiveStyle NExpectation Next NextPrime NHoldAll NHoldFirst NHoldRest NicholsGridLines NicholsPlot NIntegrate NMaximize NMaxValue NMinimize NMinValue NominalVariables NonAssociative NoncentralBetaDistribution NoncentralChiSquareDistribution NoncentralFRatioDistribution NoncentralStudentTDistribution NonCommutativeMultiply NonConstants None NonlinearModelFit NonlocalMeansFilter NonNegative NonPositive Nor NorlundB Norm Normal NormalDistribution NormalGrouping Normalize NormalizedSquaredEuclideanDistance NormalsFunction NormFunction Not NotCongruent NotCupCap NotDoubleVerticalBar Notebook NotebookApply NotebookAutoSave NotebookClose NotebookConvertSettings NotebookCreate NotebookCreateReturnObject NotebookDefault NotebookDelete NotebookDirectory NotebookDynamicExpression NotebookEvaluate NotebookEventActions NotebookFileName NotebookFind NotebookFindReturnObject NotebookGet NotebookGetLayoutInformationPacket NotebookGetMisspellingsPacket NotebookInformation NotebookInterfaceObject NotebookLocate NotebookObject NotebookOpen NotebookOpenReturnObject NotebookPath NotebookPrint NotebookPut NotebookPutReturnObject NotebookRead NotebookResetGeneratedCells Notebooks NotebookSave NotebookSaveAs NotebookSelection NotebookSetupLayoutInformationPacket NotebooksMenu NotebookWrite NotElement NotEqualTilde NotExists NotGreater NotGreaterEqual NotGreaterFullEqual NotGreaterGreater NotGreaterLess NotGreaterSlantEqual NotGreaterTilde NotHumpDownHump NotHumpEqual NotLeftTriangle NotLeftTriangleBar NotLeftTriangleEqual NotLess NotLessEqual NotLessFullEqual NotLessGreater NotLessLess NotLessSlantEqual NotLessTilde NotNestedGreaterGreater NotNestedLessLess NotPrecedes NotPrecedesEqual NotPrecedesSlantEqual NotPrecedesTilde NotReverseElement NotRightTriangle NotRightTriangleBar NotRightTriangleEqual NotSquareSubset NotSquareSubsetEqual NotSquareSuperset NotSquareSupersetEqual NotSubset NotSubsetEqual NotSucceeds NotSucceedsEqual NotSucceedsSlantEqual NotSucceedsTilde NotSuperset NotSupersetEqual NotTilde NotTildeEqual NotTildeFullEqual NotTildeTilde NotVerticalBar NProbability NProduct NProductFactors NRoots NSolve NSum NSumTerms Null NullRecords NullSpace NullWords Number NumberFieldClassNumber NumberFieldDiscriminant NumberFieldFundamentalUnits NumberFieldIntegralBasis NumberFieldNormRepresentatives NumberFieldRegulator NumberFieldRootsOfUnity NumberFieldSignature NumberForm NumberFormat NumberMarks NumberMultiplier NumberPadding NumberPoint NumberQ NumberSeparator NumberSigns NumberString Numerator NumericFunction NumericQ NuttallWindow NValues NyquistGridLines NyquistPlot O ObservabilityGramian ObservabilityMatrix ObservableDecomposition ObservableModelQ OddQ Off Offset OLEData On ONanGroupON OneIdentity Opacity Open OpenAppend Opener OpenerBox OpenerBoxOptions OpenerView OpenFunctionInspectorPacket Opening OpenRead OpenSpecialOptions OpenTemporary OpenWrite Operate OperatingSystem OptimumFlowData Optional OptionInspectorSettings OptionQ Options OptionsPacket OptionsPattern OptionValue OptionValueBox OptionValueBoxOptions Or Orange Order OrderDistribution OrderedQ Ordering Orderless OrnsteinUhlenbeckProcess Orthogonalize Out Outer OutputAutoOverwrite OutputControllabilityMatrix OutputControllableModelQ OutputForm OutputFormData OutputGrouping OutputMathEditExpression OutputNamePacket OutputResponse OutputSizeLimit OutputStream Over OverBar OverDot Overflow OverHat Overlaps Overlay OverlayBox OverlayBoxOptions Overscript OverscriptBox OverscriptBoxOptions OverTilde OverVector OwenT OwnValues PackingMethod PaddedForm Padding PadeApproximant PadLeft PadRight PageBreakAbove PageBreakBelow PageBreakWithin PageFooterLines PageFooters PageHeaderLines PageHeaders PageHeight PageRankCentrality PageWidth PairedBarChart PairedHistogram PairedSmoothHistogram PairedTTest PairedZTest PaletteNotebook PalettePath Pane PaneBox PaneBoxOptions Panel PanelBox PanelBoxOptions Paneled PaneSelector PaneSelectorBox PaneSelectorBoxOptions PaperWidth ParabolicCylinderD ParagraphIndent ParagraphSpacing ParallelArray ParallelCombine ParallelDo ParallelEvaluate Parallelization Parallelize ParallelMap ParallelNeeds ParallelProduct ParallelSubmit ParallelSum ParallelTable ParallelTry Parameter ParameterEstimator ParameterMixtureDistribution ParameterVariables ParametricFunction ParametricNDSolve ParametricNDSolveValue ParametricPlot ParametricPlot3D ParentConnect ParentDirectory ParentForm Parenthesize ParentList ParetoDistribution Part PartialCorrelationFunction PartialD ParticleData Partition PartitionsP PartitionsQ ParzenWindow PascalDistribution PassEventsDown PassEventsUp Paste PasteBoxFormInlineCells PasteButton Path PathGraph PathGraphQ Pattern PatternSequence PatternTest PauliMatrix PaulWavelet Pause PausedTime PDF PearsonChiSquareTest PearsonCorrelationTest PearsonDistribution PerformanceGoal PeriodicInterpolation Periodogram PeriodogramArray PermutationCycles PermutationCyclesQ PermutationGroup PermutationLength PermutationList PermutationListQ PermutationMax PermutationMin PermutationOrder PermutationPower PermutationProduct PermutationReplace Permutations PermutationSupport Permute PeronaMalikFilter Perpendicular PERTDistribution PetersenGraph PhaseMargins Pi Pick PIDData PIDDerivativeFilter PIDFeedforward PIDTune Piecewise PiecewiseExpand PieChart PieChart3D PillaiTrace PillaiTraceTest Pink Pivoting PixelConstrained PixelValue PixelValuePositions Placed Placeholder PlaceholderReplace Plain PlanarGraphQ Play PlayRange Plot Plot3D Plot3Matrix PlotDivision PlotJoined PlotLabel PlotLayout PlotLegends PlotMarkers PlotPoints PlotRange PlotRangeClipping PlotRangePadding PlotRegion PlotStyle Plus PlusMinus Pochhammer PodStates PodWidth Point Point3DBox PointBox PointFigureChart PointForm PointLegend PointSize PoissonConsulDistribution PoissonDistribution PoissonProcess PoissonWindow PolarAxes PolarAxesOrigin PolarGridLines PolarPlot PolarTicks PoleZeroMarkers PolyaAeppliDistribution PolyGamma Polygon Polygon3DBox Polygon3DBoxOptions PolygonBox PolygonBoxOptions PolygonHoleScale PolygonIntersections PolygonScale PolyhedronData PolyLog PolynomialExtendedGCD PolynomialForm PolynomialGCD PolynomialLCM PolynomialMod PolynomialQ PolynomialQuotient PolynomialQuotientRemainder PolynomialReduce PolynomialRemainder Polynomials PopupMenu PopupMenuBox PopupMenuBoxOptions PopupView PopupWindow Position Positive PositiveDefiniteMatrixQ PossibleZeroQ Postfix PostScript Power PowerDistribution PowerExpand PowerMod PowerModList PowerSpectralDensity PowersRepresentations PowerSymmetricPolynomial Precedence PrecedenceForm Precedes PrecedesEqual PrecedesSlantEqual PrecedesTilde Precision PrecisionGoal PreDecrement PredictionRoot PreemptProtect PreferencesPath Prefix PreIncrement Prepend PrependTo PreserveImageOptions Previous PriceGraphDistribution PrimaryPlaceholder Prime PrimeNu PrimeOmega PrimePi PrimePowerQ PrimeQ Primes PrimeZetaP PrimitiveRoot PrincipalComponents PrincipalValue Print PrintAction PrintForm PrintingCopies PrintingOptions PrintingPageRange PrintingStartingPageNumber PrintingStyleEnvironment PrintPrecision PrintTemporary Prism PrismBox PrismBoxOptions PrivateCellOptions PrivateEvaluationOptions PrivateFontOptions PrivateFrontEndOptions PrivateNotebookOptions PrivatePaths Probability ProbabilityDistribution ProbabilityPlot ProbabilityPr ProbabilityScalePlot ProbitModelFit ProcessEstimator ProcessParameterAssumptions ProcessParameterQ ProcessStateDomain ProcessTimeDomain Product ProductDistribution ProductLog ProgressIndicator ProgressIndicatorBox ProgressIndicatorBoxOptions Projection Prolog PromptForm Properties Property PropertyList PropertyValue Proportion Proportional Protect Protected ProteinData Pruning PseudoInverse Purple Put PutAppend Pyramid PyramidBox PyramidBoxOptions QBinomial QFactorial QGamma QHypergeometricPFQ QPochhammer QPolyGamma QRDecomposition QuadraticIrrationalQ Quantile QuantilePlot Quantity QuantityForm QuantityMagnitude QuantityQ QuantityUnit Quartics QuartileDeviation Quartiles QuartileSkewness QueueingNetworkProcess QueueingProcess QueueProperties Quiet Quit Quotient QuotientRemainder RadialityCentrality RadicalBox RadicalBoxOptions RadioButton RadioButtonBar RadioButtonBox RadioButtonBoxOptions Radon RamanujanTau RamanujanTauL RamanujanTauTheta RamanujanTauZ Random RandomChoice RandomComplex RandomFunction RandomGraph RandomImage RandomInteger RandomPermutation RandomPrime RandomReal RandomSample RandomSeed RandomVariate RandomWalkProcess Range RangeFilter RangeSpecification RankedMax RankedMin Raster Raster3D Raster3DBox Raster3DBoxOptions RasterArray RasterBox RasterBoxOptions Rasterize RasterSize Rational RationalFunctions Rationalize Rationals Ratios Raw RawArray RawBoxes RawData RawMedium RayleighDistribution Re Read ReadList ReadProtected Real RealBlockDiagonalForm RealDigits RealExponent Reals Reap Record RecordLists RecordSeparators Rectangle RectangleBox RectangleBoxOptions RectangleChart RectangleChart3D RecurrenceFilter RecurrenceTable RecurringDigitsForm Red Reduce RefBox ReferenceLineStyle ReferenceMarkers ReferenceMarkerStyle Refine ReflectionMatrix ReflectionTransform Refresh RefreshRate RegionBinarize RegionFunction RegionPlot RegionPlot3D RegularExpression Regularization Reinstall Release ReleaseHold ReliabilityDistribution ReliefImage ReliefPlot Remove RemoveAlphaChannel RemoveAsynchronousTask Removed RemoveInputStreamMethod RemoveOutputStreamMethod RemoveProperty RemoveScheduledTask RenameDirectory RenameFile RenderAll RenderingOptions RenewalProcess RenkoChart Repeated RepeatedNull RepeatedString Replace ReplaceAll ReplaceHeldPart ReplaceImageValue ReplaceList ReplacePart ReplacePixelValue ReplaceRepeated Resampling Rescale RescalingTransform ResetDirectory ResetMenusPacket ResetScheduledTask Residue Resolve Rest Resultant ResumePacket Return ReturnExpressionPacket ReturnInputFormPacket ReturnPacket ReturnTextPacket Reverse ReverseBiorthogonalSplineWavelet ReverseElement ReverseEquilibrium ReverseGraph ReverseUpEquilibrium RevolutionAxis RevolutionPlot3D RGBColor RiccatiSolve RiceDistribution RidgeFilter RiemannR RiemannSiegelTheta RiemannSiegelZ Riffle Right RightArrow RightArrowBar RightArrowLeftArrow RightCosetRepresentative RightDownTeeVector RightDownVector RightDownVectorBar RightTee RightTeeArrow RightTeeVector RightTriangle RightTriangleBar RightTriangleEqual RightUpDownVector RightUpTeeVector RightUpVector RightUpVectorBar RightVector RightVectorBar RiskAchievementImportance RiskReductionImportance RogersTanimotoDissimilarity Root RootApproximant RootIntervals RootLocusPlot RootMeanSquare RootOfUnityQ RootReduce Roots RootSum Rotate RotateLabel RotateLeft RotateRight RotationAction RotationBox RotationBoxOptions RotationMatrix RotationTransform Round RoundImplies RoundingRadius Row RowAlignments RowBackgrounds RowBox RowHeights RowLines RowMinHeight RowReduce RowsEqual RowSpacings RSolve RudvalisGroupRu Rule RuleCondition RuleDelayed RuleForm RulerUnits Run RunScheduledTask RunThrough RuntimeAttributes RuntimeOptions RussellRaoDissimilarity SameQ SameTest SampleDepth SampledSoundFunction SampledSoundList SampleRate SamplingPeriod SARIMAProcess SARMAProcess SatisfiabilityCount SatisfiabilityInstances SatisfiableQ Saturday Save Saveable SaveAutoDelete SaveDefinitions SawtoothWave Scale Scaled ScaleDivisions ScaledMousePosition ScaleOrigin ScalePadding ScaleRanges ScaleRangeStyle ScalingFunctions ScalingMatrix ScalingTransform Scan ScheduledTaskActiveQ ScheduledTaskData ScheduledTaskObject ScheduledTasks SchurDecomposition ScientificForm ScreenRectangle ScreenStyleEnvironment ScriptBaselineShifts ScriptLevel ScriptMinSize ScriptRules ScriptSizeMultipliers Scrollbars ScrollingOptions ScrollPosition Sec Sech SechDistribution SectionGrouping SectorChart SectorChart3D SectorOrigin SectorSpacing SeedRandom Select Selectable SelectComponents SelectedCells SelectedNotebook Selection SelectionAnimate SelectionCell SelectionCellCreateCell SelectionCellDefaultStyle SelectionCellParentStyle SelectionCreateCell SelectionDebuggerTag SelectionDuplicateCell SelectionEvaluate SelectionEvaluateCreateCell SelectionMove SelectionPlaceholder SelectionSetStyle SelectWithContents SelfLoops SelfLoopStyle SemialgebraicComponentInstances SendMail Sequence SequenceAlignment SequenceForm SequenceHold SequenceLimit Series SeriesCoefficient SeriesData SessionTime Set SetAccuracy SetAlphaChannel SetAttributes Setbacks SetBoxFormNamesPacket SetDelayed SetDirectory SetEnvironment SetEvaluationNotebook SetFileDate SetFileLoadingContext SetNotebookStatusLine SetOptions SetOptionsPacket SetPrecision SetProperty SetSelectedNotebook SetSharedFunction SetSharedVariable SetSpeechParametersPacket SetStreamPosition SetSystemOptions Setter SetterBar SetterBox SetterBoxOptions Setting SetValue Shading Shallow ShannonWavelet ShapiroWilkTest Share Sharpen ShearingMatrix ShearingTransform ShenCastanMatrix Short ShortDownArrow Shortest ShortestMatch ShortestPathFunction ShortLeftArrow ShortRightArrow ShortUpArrow Show ShowAutoStyles ShowCellBracket ShowCellLabel ShowCellTags ShowClosedCellArea ShowContents ShowControls ShowCursorTracker ShowGroupOpenCloseIcon ShowGroupOpener ShowInvisibleCharacters ShowPageBreaks ShowPredictiveInterface ShowSelection ShowShortBoxForm ShowSpecialCharacters ShowStringCharacters ShowSyntaxStyles ShrinkingDelay ShrinkWrapBoundingBox SiegelTheta SiegelTukeyTest Sign Signature SignedRankTest SignificanceLevel SignPadding SignTest SimilarityRules SimpleGraph SimpleGraphQ Simplify Sin Sinc SinghMaddalaDistribution SingleEvaluation SingleLetterItalics SingleLetterStyle SingularValueDecomposition SingularValueList SingularValuePlot SingularValues Sinh SinhIntegral SinIntegral SixJSymbol Skeleton SkeletonTransform SkellamDistribution Skewness SkewNormalDistribution Skip SliceDistribution Slider Slider2D Slider2DBox Slider2DBoxOptions SliderBox SliderBoxOptions SlideView Slot SlotSequence Small SmallCircle Smaller SmithDelayCompensator SmithWatermanSimilarity SmoothDensityHistogram SmoothHistogram SmoothHistogram3D SmoothKernelDistribution SocialMediaData Socket SokalSneathDissimilarity Solve SolveAlways SolveDelayed Sort SortBy Sound SoundAndGraphics SoundNote SoundVolume Sow Space SpaceForm Spacer Spacings Span SpanAdjustments SpanCharacterRounding SpanFromAbove SpanFromBoth SpanFromLeft SpanLineThickness SpanMaxSize SpanMinSize SpanningCharacters SpanSymmetric SparseArray SpatialGraphDistribution Speak SpeakTextPacket SpearmanRankTest SpearmanRho Spectrogram SpectrogramArray Specularity SpellingCorrection SpellingDictionaries SpellingDictionariesPath SpellingOptions SpellingSuggestionsPacket Sphere SphereBox SphericalBesselJ SphericalBesselY SphericalHankelH1 SphericalHankelH2 SphericalHarmonicY SphericalPlot3D SphericalRegion SpheroidalEigenvalue SpheroidalJoiningFactor SpheroidalPS SpheroidalPSPrime SpheroidalQS SpheroidalQSPrime SpheroidalRadialFactor SpheroidalS1 SpheroidalS1Prime SpheroidalS2 SpheroidalS2Prime Splice SplicedDistribution SplineClosed SplineDegree SplineKnots SplineWeights Split SplitBy SpokenString Sqrt SqrtBox SqrtBoxOptions Square SquaredEuclideanDistance SquareFreeQ SquareIntersection SquaresR SquareSubset SquareSubsetEqual SquareSuperset SquareSupersetEqual SquareUnion SquareWave StabilityMargins StabilityMarginsStyle StableDistribution Stack StackBegin StackComplete StackInhibit StandardDeviation StandardDeviationFilter StandardForm Standardize StandbyDistribution Star StarGraph StartAsynchronousTask StartingStepSize StartOfLine StartOfString StartScheduledTask StartupSound StateDimensions StateFeedbackGains StateOutputEstimator StateResponse StateSpaceModel StateSpaceRealization StateSpaceTransform StationaryDistribution StationaryWaveletPacketTransform StationaryWaveletTransform StatusArea StatusCentrality StepMonitor StieltjesGamma StirlingS1 StirlingS2 StopAsynchronousTask StopScheduledTask StrataVariables StratonovichProcess StreamColorFunction StreamColorFunctionScaling StreamDensityPlot StreamPlot StreamPoints StreamPosition Streams StreamScale StreamStyle String StringBreak StringByteCount StringCases StringCount StringDrop StringExpression StringForm StringFormat StringFreeQ StringInsert StringJoin StringLength StringMatchQ StringPosition StringQ StringReplace StringReplaceList StringReplacePart StringReverse StringRotateLeft StringRotateRight StringSkeleton StringSplit StringTake StringToStream StringTrim StripBoxes StripOnInput StripWrapperBoxes StrokeForm StructuralImportance StructuredArray StructuredSelection StruveH StruveL Stub StudentTDistribution Style StyleBox StyleBoxAutoDelete StyleBoxOptions StyleData StyleDefinitions StyleForm StyleKeyMapping StyleMenuListing StyleNameDialogSettings StyleNames StylePrint StyleSheetPath Subfactorial Subgraph SubMinus SubPlus SubresultantPolynomialRemainders SubresultantPolynomials Subresultants Subscript SubscriptBox SubscriptBoxOptions Subscripted Subset SubsetEqual Subsets SubStar Subsuperscript SubsuperscriptBox SubsuperscriptBoxOptions Subtract SubtractFrom SubValues Succeeds SucceedsEqual SucceedsSlantEqual SucceedsTilde SuchThat Sum SumConvergence Sunday SuperDagger SuperMinus SuperPlus Superscript SuperscriptBox SuperscriptBoxOptions Superset SupersetEqual SuperStar Surd SurdForm SurfaceColor SurfaceGraphics SurvivalDistribution SurvivalFunction SurvivalModel SurvivalModelFit SuspendPacket SuzukiDistribution SuzukiGroupSuz SwatchLegend Switch Symbol SymbolName SymletWavelet Symmetric SymmetricGroup SymmetricMatrixQ SymmetricPolynomial SymmetricReduction Symmetrize SymmetrizedArray SymmetrizedArrayRules SymmetrizedDependentComponents SymmetrizedIndependentComponents SymmetrizedReplacePart SynchronousInitialization SynchronousUpdating Syntax SyntaxForm SyntaxInformation SyntaxLength SyntaxPacket SyntaxQ SystemDialogInput SystemException SystemHelpPath SystemInformation SystemInformationData SystemOpen SystemOptions SystemsModelDelay SystemsModelDelayApproximate SystemsModelDelete SystemsModelDimensions SystemsModelExtract SystemsModelFeedbackConnect SystemsModelLabels SystemsModelOrder SystemsModelParallelConnect SystemsModelSeriesConnect SystemsModelStateFeedbackConnect SystemStub Tab TabFilling Table TableAlignments TableDepth TableDirections TableForm TableHeadings TableSpacing TableView TableViewBox TabSpacings TabView TabViewBox TabViewBoxOptions TagBox TagBoxNote TagBoxOptions TaggingRules TagSet TagSetDelayed TagStyle TagUnset Take TakeWhile Tally Tan Tanh TargetFunctions TargetUnits TautologyQ TelegraphProcess TemplateBox TemplateBoxOptions TemplateSlotSequence TemporalData Temporary TemporaryVariable TensorContract TensorDimensions TensorExpand TensorProduct TensorQ TensorRank TensorReduce TensorSymmetry TensorTranspose TensorWedge Tetrahedron TetrahedronBox TetrahedronBoxOptions TeXForm TeXSave Text Text3DBox Text3DBoxOptions TextAlignment TextBand TextBoundingBox TextBox TextCell TextClipboardType TextData TextForm TextJustification TextLine TextPacket TextParagraph TextRecognize TextRendering TextStyle Texture TextureCoordinateFunction TextureCoordinateScaling Therefore ThermometerGauge Thick Thickness Thin Thinning ThisLink ThompsonGroupTh Thread ThreeJSymbol Threshold Through Throw Thumbnail Thursday Ticks TicksStyle Tilde TildeEqual TildeFullEqual TildeTilde TimeConstrained TimeConstraint Times TimesBy TimeSeriesForecast TimeSeriesInvertibility TimeUsed TimeValue TimeZone Timing Tiny TitleGrouping TitsGroupT ToBoxes ToCharacterCode ToColor ToContinuousTimeModel ToDate ToDiscreteTimeModel ToeplitzMatrix ToExpression ToFileName Together Toggle ToggleFalse Toggler TogglerBar TogglerBox TogglerBoxOptions ToHeldExpression ToInvertibleTimeSeries TokenWords Tolerance ToLowerCase ToNumberField TooBig Tooltip TooltipBox TooltipBoxOptions TooltipDelay TooltipStyle Top TopHatTransform TopologicalSort ToRadicals ToRules ToString Total TotalHeight TotalVariationFilter TotalWidth TouchscreenAutoZoom TouchscreenControlPlacement ToUpperCase Tr Trace TraceAbove TraceAction TraceBackward TraceDepth TraceDialog TraceForward TraceInternal TraceLevel TraceOff TraceOn TraceOriginal TracePrint TraceScan TrackedSymbols TradingChart TraditionalForm TraditionalFunctionNotation TraditionalNotation TraditionalOrder TransferFunctionCancel TransferFunctionExpand TransferFunctionFactor TransferFunctionModel TransferFunctionPoles TransferFunctionTransform TransferFunctionZeros TransformationFunction TransformationFunctions TransformationMatrix TransformedDistribution TransformedField Translate TranslationTransform TransparentColor Transpose TreeForm TreeGraph TreeGraphQ TreePlot TrendStyle TriangleWave TriangularDistribution Trig TrigExpand TrigFactor TrigFactorList Trigger TrigReduce TrigToExp TrimmedMean True TrueQ TruncatedDistribution TsallisQExponentialDistribution TsallisQGaussianDistribution TTest Tube TubeBezierCurveBox TubeBezierCurveBoxOptions TubeBox TubeBSplineCurveBox TubeBSplineCurveBoxOptions Tuesday TukeyLambdaDistribution TukeyWindow Tuples TuranGraph TuringMachine Transparent UnateQ Uncompress Undefined UnderBar Underflow Underlined Underoverscript UnderoverscriptBox UnderoverscriptBoxOptions Underscript UnderscriptBox UnderscriptBoxOptions UndirectedEdge UndirectedGraph UndirectedGraphQ UndocumentedTestFEParserPacket UndocumentedTestGetSelectionPacket Unequal Unevaluated UniformDistribution UniformGraphDistribution UniformSumDistribution Uninstall Union UnionPlus Unique UnitBox UnitConvert UnitDimensions Unitize UnitRootTest UnitSimplify UnitStep UnitTriangle UnitVector Unprotect UnsameQ UnsavedVariables Unset UnsetShared UntrackedVariables Up UpArrow UpArrowBar UpArrowDownArrow Update UpdateDynamicObjects UpdateDynamicObjectsSynchronous UpdateInterval UpDownArrow UpEquilibrium UpperCaseQ UpperLeftArrow UpperRightArrow UpperTriangularize Upsample UpSet UpSetDelayed UpTee UpTeeArrow UpValues URL URLFetch URLFetchAsynchronous URLSave URLSaveAsynchronous UseGraphicsRange Using UsingFrontEnd V2Get ValidationLength Value ValueBox ValueBoxOptions ValueForm ValueQ ValuesData Variables Variance VarianceEquivalenceTest VarianceEstimatorFunction VarianceGammaDistribution VarianceTest VectorAngle VectorColorFunction VectorColorFunctionScaling VectorDensityPlot VectorGlyphData VectorPlot VectorPlot3D VectorPoints VectorQ Vectors VectorScale VectorStyle Vee Verbatim Verbose VerboseConvertToPostScriptPacket VerifyConvergence VerifySolutions VerifyTestAssumptions Version VersionNumber VertexAdd VertexCapacity VertexColors VertexComponent VertexConnectivity VertexCoordinateRules VertexCoordinates VertexCorrelationSimilarity VertexCosineSimilarity VertexCount VertexCoverQ VertexDataCoordinates VertexDegree VertexDelete VertexDiceSimilarity VertexEccentricity VertexInComponent VertexInDegree VertexIndex VertexJaccardSimilarity VertexLabeling VertexLabels VertexLabelStyle VertexList VertexNormals VertexOutComponent VertexOutDegree VertexQ VertexRenderingFunction VertexReplace VertexShape VertexShapeFunction VertexSize VertexStyle VertexTextureCoordinates VertexWeight Vertical VerticalBar VerticalForm VerticalGauge VerticalSeparator VerticalSlider VerticalTilde ViewAngle ViewCenter ViewMatrix ViewPoint ViewPointSelectorSettings ViewPort ViewRange ViewVector ViewVertical VirtualGroupData Visible VisibleCell VoigtDistribution VonMisesDistribution WaitAll WaitAsynchronousTask WaitNext WaitUntil WakebyDistribution WalleniusHypergeometricDistribution WaringYuleDistribution WatershedComponents WatsonUSquareTest WattsStrogatzGraphDistribution WaveletBestBasis WaveletFilterCoefficients WaveletImagePlot WaveletListPlot WaveletMapIndexed WaveletMatrixPlot WaveletPhi WaveletPsi WaveletScale WaveletScalogram WaveletThreshold WeaklyConnectedComponents WeaklyConnectedGraphQ WeakStationarity WeatherData WeberE Wedge Wednesday WeibullDistribution WeierstrassHalfPeriods WeierstrassInvariants WeierstrassP WeierstrassPPrime WeierstrassSigma WeierstrassZeta WeightedAdjacencyGraph WeightedAdjacencyMatrix WeightedData WeightedGraphQ Weights WelchWindow WheelGraph WhenEvent Which While White Whitespace WhitespaceCharacter WhittakerM WhittakerW WienerFilter WienerProcess WignerD WignerSemicircleDistribution WilksW WilksWTest WindowClickSelect WindowElements WindowFloating WindowFrame WindowFrameElements WindowMargins WindowMovable WindowOpacity WindowSelected WindowSize WindowStatusArea WindowTitle WindowToolbars WindowWidth With WolframAlpha WolframAlphaDate WolframAlphaQuantity WolframAlphaResult Word WordBoundary WordCharacter WordData WordSearch WordSeparators WorkingPrecision Write WriteString Wronskian XMLElement XMLObject Xnor Xor Yellow YuleDissimilarity ZernikeR ZeroSymmetric ZeroTest ZeroWidthTimes Zeta ZetaZero ZipfDistribution ZTest ZTransform $Aborted $ActivationGroupID $ActivationKey $ActivationUserRegistered $AddOnsDirectory $AssertFunction $Assumptions $AsynchronousTask $BaseDirectory $BatchInput $BatchOutput $BoxForms $ByteOrdering $Canceled $CharacterEncoding $CharacterEncodings $CommandLine $CompilationTarget $ConditionHold $ConfiguredKernels $Context $ContextPath $ControlActiveSetting $CreationDate $CurrentLink $DateStringFormat $DefaultFont $DefaultFrontEnd $DefaultImagingDevice $DefaultPath $Display $DisplayFunction $DistributedContexts $DynamicEvaluation $Echo $Epilog $ExportFormats $Failed $FinancialDataSource $FormatType $FrontEnd $FrontEndSession $GeoLocation $HistoryLength $HomeDirectory $HTTPCookies $IgnoreEOF $ImagingDevices $ImportFormats $InitialDirectory $Input $InputFileName $InputStreamMethods $Inspector $InstallationDate $InstallationDirectory $InterfaceEnvironment $IterationLimit $KernelCount $KernelID $Language $LaunchDirectory $LibraryPath $LicenseExpirationDate $LicenseID $LicenseProcesses $LicenseServer $LicenseSubprocesses $LicenseType $Line $Linked $LinkSupported $LoadedFiles $MachineAddresses $MachineDomain $MachineDomains $MachineEpsilon $MachineID $MachineName $MachinePrecision $MachineType $MaxExtraPrecision $MaxLicenseProcesses $MaxLicenseSubprocesses $MaxMachineNumber $MaxNumber $MaxPiecewiseCases $MaxPrecision $MaxRootDegree $MessageGroups $MessageList $MessagePrePrint $Messages $MinMachineNumber $MinNumber $MinorReleaseNumber $MinPrecision $ModuleNumber $NetworkLicense $NewMessage $NewSymbol $Notebooks $NumberMarks $Off $OperatingSystem $Output $OutputForms $OutputSizeLimit $OutputStreamMethods $Packages $ParentLink $ParentProcessID $PasswordFile $PatchLevelID $Path $PathnameSeparator $PerformanceGoal $PipeSupported $Post $Pre $PreferencesDirectory $PrePrint $PreRead $PrintForms $PrintLiteral $ProcessID $ProcessorCount $ProcessorType $ProductInformation $ProgramName $RandomState $RecursionLimit $ReleaseNumber $RootDirectory $ScheduledTask $ScriptCommandLine $SessionID $SetParentLink $SharedFunctions $SharedVariables $SoundDisplay $SoundDisplayFunction $SuppressInputFormHeads $SynchronousEvaluation $SyntaxHandler $System $SystemCharacterEncoding $SystemID $SystemWordLength $TemporaryDirectory $TemporaryPrefix $TextStyle $TimedOut $TimeUnit $TimeZone $TopDirectory $TraceOff $TraceOn $TracePattern $TracePostAction $TracePreAction $Urgent $UserAddOnsDirectory $UserBaseDirectory $UserDocumentsDirectory $UserName $Version $VersionNumber\",c:[{cN:\"comment\",b:/\\(\\*/,e:/\\*\\)/},a.ASM,a.QSM,a.CNM,{cN:\"list\",b:/\\{/,e:/\\}/,i:/:/}]}});hljs.registerLanguage(\"swift\",function(a){var e={keyword:\"class deinit enum extension func import init let protocol static struct subscript typealias var break case continue default do else fallthrough if in for return switch where while as dynamicType is new super self Self Type __COLUMN__ __FILE__ __FUNCTION__ __LINE__ associativity didSet get infix inout left mutating none nonmutating operator override postfix precedence prefix right set unowned unowned safe unsafe weak willSet\",literal:\"true false nil\",built_in:\"abs advance alignof alignofValue assert bridgeFromObjectiveC bridgeFromObjectiveCUnconditional bridgeToObjectiveC bridgeToObjectiveCUnconditional c contains count countElements countLeadingZeros debugPrint debugPrintln distance dropFirst dropLast dump encodeBitsAsWords enumerate equal false filter find getBridgedObjectiveCType getVaList indices insertionSort isBridgedToObjectiveC isBridgedVerbatimToObjectiveC isUniquelyReferenced join lexicographicalCompare map max maxElement min minElement nil numericCast partition posix print println quickSort reduce reflect reinterpretCast reverse roundUpToAlignment sizeof sizeofValue sort split startsWith strideof strideofValue swap swift toString transcode true underestimateCount unsafeReflect withExtendedLifetime withObjectAtPlusZero withUnsafePointer withUnsafePointerToObject withUnsafePointers withVaList\"};var g={cN:\"type\",b:\"\\\\b[A-Z][\\\\w']*\",r:0};var b={cN:\"comment\",b:\"/\\\\*\",e:\"\\\\*/\",c:[a.PWM,\"self\"]};var c={cN:\"subst\",b:/\\\\\\(/,e:\"\\\\)\",k:e,c:[]};var f={cN:\"number\",b:\"\\\\b([\\\\d_]+(\\\\.[\\\\deE_]+)?|0x[a-fA-F0-9_]+(\\\\.[a-fA-F0-9p_]+)?|0b[01_]+|0o[0-7_]+)\\\\b\",r:0};var d=a.inherit(a.QSM,{c:[c,a.BE]});c.c=[f];return{k:e,c:[d,a.CLCM,b,g,f,{cN:\"func\",bK:\"func\",e:\"{\",eE:true,c:[a.inherit(a.TM,{b:/[A-Za-z$_][0-9A-Za-z$_]*/,i:/\\(/}),{cN:\"generics\",b:/\\</,e:/\\>/,i:/\\>/},{cN:\"params\",b:/\\(/,e:/\\)/,k:e,c:[\"self\",f,d,a.CBCM,{b:\":\"}],i:/[\"']/}],i:/\\[|%/},{cN:\"class\",k:\"struct protocol class extension enum\",b:\"(struct|protocol|class(?! (func|var))|extension|enum)\",e:\"\\\\{\",eE:true,c:[a.inherit(a.TM,{b:/[A-Za-z$_][0-9A-Za-z$_]*/})]},{cN:\"preprocessor\",b:\"(@assignment|@class_protocol|@exported|@final|@lazy|@noreturn|@NSCopying|@NSManaged|@objc|@optional|@required|@auto_closure|@noreturn|@IBAction|@IBDesignable|@IBInspectable|@IBOutlet|@infix|@prefix|@postfix)\"},]}});hljs.registerLanguage(\"scheme\",function(k){var m=\"[^\\\\(\\\\)\\\\[\\\\]\\\\{\\\\}\\\",'`;#|\\\\\\\\\\\\s]+\";var d=\"(\\\\-|\\\\+)?\\\\d+([./]\\\\d+)?\";var h=d+\"[+\\\\-]\"+d+\"i\";var e={built_in:\"case-lambda call/cc class define-class exit-handler field import inherit init-field interface let*-values let-values let/ec mixin opt-lambda override protect provide public rename require require-for-syntax syntax syntax-case syntax-error unit/sig unless when with-syntax and begin call-with-current-continuation call-with-input-file call-with-output-file case cond define define-syntax delay do dynamic-wind else for-each if lambda let let* let-syntax letrec letrec-syntax map or syntax-rules ' * + , ,@ - ... / ; < <= = => > >= ` abs acos angle append apply asin assoc assq assv atan boolean? caar cadr call-with-input-file call-with-output-file call-with-values car cdddar cddddr cdr ceiling char->integer char-alphabetic? char-ci<=? char-ci<? char-ci=? char-ci>=? char-ci>? char-downcase char-lower-case? char-numeric? char-ready? char-upcase char-upper-case? char-whitespace? char<=? char<? char=? char>=? char>? char? close-input-port close-output-port complex? cons cos current-input-port current-output-port denominator display eof-object? eq? equal? eqv? eval even? exact->inexact exact? exp expt floor force gcd imag-part inexact->exact inexact? input-port? integer->char integer? interaction-environment lcm length list list->string list->vector list-ref list-tail list? load log magnitude make-polar make-rectangular make-string make-vector max member memq memv min modulo negative? newline not null-environment null? number->string number? numerator odd? open-input-file open-output-file output-port? pair? peek-char port? positive? procedure? quasiquote quote quotient rational? rationalize read read-char real-part real? remainder reverse round scheme-report-environment set! set-car! set-cdr! sin sqrt string string->list string->number string->symbol string-append string-ci<=? string-ci<? string-ci=? string-ci>=? string-ci>? string-copy string-fill! string-length string-ref string-set! string<=? string<? string=? string>=? string>? string? substring symbol->string symbol? tan transcript-off transcript-on truncate values vector vector->list vector-fill! vector-length vector-ref vector-set! with-input-from-file with-output-to-file write write-char zero?\"};var n={cN:\"shebang\",b:\"^#!\",e:\"$\"};var f={cN:\"literal\",b:\"(#t|#f|#\\\\\\\\\"+m+\"|#\\\\\\\\.)\"};var g={cN:\"number\",v:[{b:d,r:0},{b:h,r:0},{b:\"#b[0-1]+(/[0-1]+)?\"},{b:\"#o[0-7]+(/[0-7]+)?\"},{b:\"#x[0-9a-f]+(/[0-9a-f]+)?\"}]};var j=k.QSM;var b={cN:\"regexp\",b:'#[pr]x\"',e:'[^\\\\\\\\]\"'};var o={cN:\"comment\",v:[{b:\";\",e:\"$\",r:0},{b:\"#\\\\|\",e:\"\\\\|#\"}]};var c={b:m,r:0};var a={cN:\"variable\",b:\"'\"+m};var i={eW:true,r:0};var l={cN:\"list\",v:[{b:\"\\\\(\",e:\"\\\\)\"},{b:\"\\\\[\",e:\"\\\\]\"}],c:[{cN:\"keyword\",b:m,l:m,k:e},i]};i.c=[f,g,j,o,c,a,l];return{i:/\\S/,c:[n,g,j,o,a,l]}});hljs.registerLanguage(\"php\",function(b){var e={cN:\"variable\",b:\"(\\\\$|->)+[a-zA-Z_\\x7f-\\xff][a-zA-Z0-9_\\x7f-\\xff]*\"};var a={cN:\"preprocessor\",b:/<\\?(php)?|\\?>/};var c={cN:\"string\",c:[b.BE,a],v:[{b:'b\"',e:'\"'},{b:\"b'\",e:\"'\"},b.inherit(b.ASM,{i:null}),b.inherit(b.QSM,{i:null})]};var d={v:[b.BNM,b.CNM]};return{aliases:[\"php3\",\"php4\",\"php5\",\"php6\"],cI:true,k:\"and include_once list abstract global private echo interface as static endswitch array null if endwhile or const for endforeach self var while isset public protected exit foreach throw elseif include __FILE__ empty require_once do xor return parent clone use __CLASS__ __LINE__ else break print eval new catch __METHOD__ case exception default die require __FUNCTION__ enddeclare final try switch continue endfor endif declare unset true false trait goto instanceof insteadof __DIR__ __NAMESPACE__ yield finally\",c:[b.CLCM,b.HCM,{cN:\"comment\",b:\"/\\\\*\",e:\"\\\\*/\",c:[{cN:\"phpdoc\",b:\"\\\\s@[A-Za-z]+\"},a]},{cN:\"comment\",b:\"__halt_compiler.+?;\",eW:true,k:\"__halt_compiler\",l:b.UIR},{cN:\"string\",b:\"<<<['\\\"]?\\\\w+['\\\"]?$\",e:\"^\\\\w+;\",c:[b.BE]},a,e,{cN:\"function\",bK:\"function\",e:/[;{]/,eE:true,i:\"\\\\$|\\\\[|%\",c:[b.UTM,{cN:\"params\",b:\"\\\\(\",e:\"\\\\)\",c:[\"self\",e,b.CBCM,c,d]}]},{cN:\"class\",bK:\"class interface\",e:\"{\",eE:true,i:/[:\\(\\$\"]/,c:[{bK:\"extends implements\"},b.UTM]},{bK:\"namespace\",e:\";\",i:/[\\.']/,c:[b.UTM]},{bK:\"use\",e:\";\",c:[b.UTM]},{b:\"=>\"},c,d]}});hljs.registerLanguage(\"haskell\",function(f){var g={cN:\"comment\",v:[{b:\"--\",e:\"$\"},{b:\"{-\",e:\"-}\",c:[\"self\"]}]};var e={cN:\"pragma\",b:\"{-#\",e:\"#-}\"};var b={cN:\"preprocessor\",b:\"^#\",e:\"$\"};var d={cN:\"type\",b:\"\\\\b[A-Z][\\\\w']*\",r:0};var c={cN:\"container\",b:\"\\\\(\",e:\"\\\\)\",i:'\"',c:[e,g,b,{cN:\"type\",b:\"\\\\b[A-Z][\\\\w]*(\\\\((\\\\.\\\\.|,|\\\\w+)\\\\))?\"},f.inherit(f.TM,{b:\"[_a-z][\\\\w']*\"})]};var a={cN:\"container\",b:\"{\",e:\"}\",c:c.c};return{aliases:[\"hs\"],k:\"let in if then else case of where do module import hiding qualified type data newtype deriving class instance as default infix infixl infixr foreign export ccall stdcall cplusplus jvm dotnet safe unsafe family forall mdo proc rec\",c:[{cN:\"module\",b:\"\\\\bmodule\\\\b\",e:\"where\",k:\"module where\",c:[c,g],i:\"\\\\W\\\\.|;\"},{cN:\"import\",b:\"\\\\bimport\\\\b\",e:\"$\",k:\"import|0 qualified as hiding\",c:[c,g],i:\"\\\\W\\\\.|;\"},{cN:\"class\",b:\"^(\\\\s*)?(class|instance)\\\\b\",e:\"where\",k:\"class family instance where\",c:[d,c,g]},{cN:\"typedef\",b:\"\\\\b(data|(new)?type)\\\\b\",e:\"$\",k:\"data family type newtype deriving\",c:[e,g,d,c,a]},{cN:\"default\",bK:\"default\",e:\"$\",c:[d,c,g]},{cN:\"infix\",bK:\"infix infixl infixr\",e:\"$\",c:[f.CNM,g]},{cN:\"foreign\",b:\"\\\\bforeign\\\\b\",e:\"$\",k:\"foreign import export ccall stdcall cplusplus jvm dotnet safe unsafe\",c:[d,f.QSM,g]},{cN:\"shebang\",b:\"#!\\\\/usr\\\\/bin\\\\/env runhaskell\",e:\"$\"},e,g,b,f.QSM,f.CNM,d,f.inherit(f.TM,{b:\"^[_a-z][\\\\w']*\"}),{b:\"->|<-\"}]}});hljs.registerLanguage(\"1c\",function(b){var f=\"[a-zA-Zа-яА-Я][a-zA-Z0-9_а-яА-Я]*\";var c=\"возврат дата для если и или иначе иначеесли исключение конецесли конецпопытки конецпроцедуры конецфункции конеццикла константа не перейти перем перечисление по пока попытка прервать продолжить процедура строка тогда фс функция цикл число экспорт\";var e=\"ansitooem oemtoansi ввестивидсубконто ввестидату ввестизначение ввестиперечисление ввестипериод ввестиплансчетов ввестистроку ввестичисло вопрос восстановитьзначение врег выбранныйплансчетов вызватьисключение датагод датамесяц датачисло добавитьмесяц завершитьработусистемы заголовоксистемы записьжурналарегистрации запуститьприложение зафиксироватьтранзакцию значениевстроку значениевстрокувнутр значениевфайл значениеизстроки значениеизстрокивнутр значениеизфайла имякомпьютера имяпользователя каталогвременныхфайлов каталогиб каталогпользователя каталогпрограммы кодсимв командасистемы конгода конецпериодаби конецрассчитанногопериодаби конецстандартногоинтервала конквартала конмесяца коннедели лев лог лог10 макс максимальноеколичествосубконто мин монопольныйрежим названиеинтерфейса названиенабораправ назначитьвид назначитьсчет найти найтипомеченныенаудаление найтиссылки началопериодаби началостандартногоинтервала начатьтранзакцию начгода начквартала начмесяца начнедели номерднягода номерднянедели номернеделигода нрег обработкаожидания окр описаниеошибки основнойжурналрасчетов основнойплансчетов основнойязык открытьформу открытьформумодально отменитьтранзакцию очиститьокносообщений периодстр полноеимяпользователя получитьвремята получитьдатута получитьдокументта получитьзначенияотбора получитьпозициюта получитьпустоезначение получитьта прав праводоступа предупреждение префиксавтонумерации пустаястрока пустоезначение рабочаядаттьпустоезначение рабочаядата разделительстраниц разделительстрок разм разобратьпозициюдокумента рассчитатьрегистрына рассчитатьрегистрыпо сигнал симв символтабуляции создатьобъект сокрл сокрлп сокрп сообщить состояние сохранитьзначение сред статусвозврата стрдлина стрзаменить стрколичествострок стрполучитьстроку  стрчисловхождений сформироватьпозициюдокумента счетпокоду текущаядата текущеевремя типзначения типзначениястр удалитьобъекты установитьтана установитьтапо фиксшаблон формат цел шаблон\";var a={cN:\"dquote\",b:'\"\"'};var d={cN:\"string\",b:'\"',e:'\"|$',c:[a]};var g={cN:\"string\",b:\"\\\\|\",e:'\"|$',c:[a]};return{cI:true,l:f,k:{keyword:c,built_in:e},c:[b.CLCM,b.NM,d,g,{cN:\"function\",b:\"(процедура|функция)\",e:\"$\",l:f,k:\"процедура функция\",c:[b.inherit(b.TM,{b:f}),{cN:\"tail\",eW:true,c:[{cN:\"params\",b:\"\\\\(\",e:\"\\\\)\",l:f,k:\"знач\",c:[d,g]},{cN:\"export\",b:\"экспорт\",eW:true,l:f,k:\"экспорт\",c:[b.CLCM]}]},b.CLCM]},{cN:\"preprocessor\",b:\"#\",e:\"$\"},{cN:\"date\",b:\"'\\\\d{2}\\\\.\\\\d{2}\\\\.(\\\\d{2}|\\\\d{4})'\"}]}});hljs.registerLanguage(\"x86asm\",function(a){return{cI:true,l:\"\\\\.?\"+a.IR,k:{keyword:\"lock rep repe repz repne repnz xaquire xrelease bnd nobnd aaa aad aam aas adc add and arpl bb0_reset bb1_reset bound bsf bsr bswap bt btc btr bts call cbw cdq cdqe clc cld cli clts cmc cmp cmpsb cmpsd cmpsq cmpsw cmpxchg cmpxchg486 cmpxchg8b cmpxchg16b cpuid cpu_read cpu_write cqo cwd cwde daa das dec div dmint emms enter equ f2xm1 fabs fadd faddp fbld fbstp fchs fclex fcmovb fcmovbe fcmove fcmovnb fcmovnbe fcmovne fcmovnu fcmovu fcom fcomi fcomip fcomp fcompp fcos fdecstp fdisi fdiv fdivp fdivr fdivrp femms feni ffree ffreep fiadd ficom ficomp fidiv fidivr fild fimul fincstp finit fist fistp fisttp fisub fisubr fld fld1 fldcw fldenv fldl2e fldl2t fldlg2 fldln2 fldpi fldz fmul fmulp fnclex fndisi fneni fninit fnop fnsave fnstcw fnstenv fnstsw fpatan fprem fprem1 fptan frndint frstor fsave fscale fsetpm fsin fsincos fsqrt fst fstcw fstenv fstp fstsw fsub fsubp fsubr fsubrp ftst fucom fucomi fucomip fucomp fucompp fxam fxch fxtract fyl2x fyl2xp1 hlt ibts icebp idiv imul in inc incbin insb insd insw int int01 int1 int03 int3 into invd invpcid invlpg invlpga iret iretd iretq iretw jcxz jecxz jrcxz jmp jmpe lahf lar lds lea leave les lfence lfs lgdt lgs lidt lldt lmsw loadall loadall286 lodsb lodsd lodsq lodsw loop loope loopne loopnz loopz lsl lss ltr mfence monitor mov movd movq movsb movsd movsq movsw movsx movsxd movzx mul mwait neg nop not or out outsb outsd outsw packssdw packsswb packuswb paddb paddd paddsb paddsiw paddsw paddusb paddusw paddw pand pandn pause paveb pavgusb pcmpeqb pcmpeqd pcmpeqw pcmpgtb pcmpgtd pcmpgtw pdistib pf2id pfacc pfadd pfcmpeq pfcmpge pfcmpgt pfmax pfmin pfmul pfrcp pfrcpit1 pfrcpit2 pfrsqit1 pfrsqrt pfsub pfsubr pi2fd pmachriw pmaddwd pmagw pmulhriw pmulhrwa pmulhrwc pmulhw pmullw pmvgezb pmvlzb pmvnzb pmvzb pop popa popad popaw popf popfd popfq popfw por prefetch prefetchw pslld psllq psllw psrad psraw psrld psrlq psrlw psubb psubd psubsb psubsiw psubsw psubusb psubusw psubw punpckhbw punpckhdq punpckhwd punpcklbw punpckldq punpcklwd push pusha pushad pushaw pushf pushfd pushfq pushfw pxor rcl rcr rdshr rdmsr rdpmc rdtsc rdtscp ret retf retn rol ror rdm rsdc rsldt rsm rsts sahf sal salc sar sbb scasb scasd scasq scasw sfence sgdt shl shld shr shrd sidt sldt skinit smi smint smintold smsw stc std sti stosb stosd stosq stosw str sub svdc svldt svts swapgs syscall sysenter sysexit sysret test ud0 ud1 ud2b ud2 ud2a umov verr verw fwait wbinvd wrshr wrmsr xadd xbts xchg xlatb xlat xor cmove cmovz cmovne cmovnz cmova cmovnbe cmovae cmovnb cmovb cmovnae cmovbe cmovna cmovg cmovnle cmovge cmovnl cmovl cmovnge cmovle cmovng cmovc cmovnc cmovo cmovno cmovs cmovns cmovp cmovpe cmovnp cmovpo je jz jne jnz ja jnbe jae jnb jb jnae jbe jna jg jnle jge jnl jl jnge jle jng jc jnc jo jno js jns jpo jnp jpe jp sete setz setne setnz seta setnbe setae setnb setnc setb setnae setcset setbe setna setg setnle setge setnl setl setnge setle setng sets setns seto setno setpe setp setpo setnp addps addss andnps andps cmpeqps cmpeqss cmpleps cmpless cmpltps cmpltss cmpneqps cmpneqss cmpnleps cmpnless cmpnltps cmpnltss cmpordps cmpordss cmpunordps cmpunordss cmpps cmpss comiss cvtpi2ps cvtps2pi cvtsi2ss cvtss2si cvttps2pi cvttss2si divps divss ldmxcsr maxps maxss minps minss movaps movhps movlhps movlps movhlps movmskps movntps movss movups mulps mulss orps rcpps rcpss rsqrtps rsqrtss shufps sqrtps sqrtss stmxcsr subps subss ucomiss unpckhps unpcklps xorps fxrstor fxrstor64 fxsave fxsave64 xgetbv xsetbv xsave xsave64 xsaveopt xsaveopt64 xrstor xrstor64 prefetchnta prefetcht0 prefetcht1 prefetcht2 maskmovq movntq pavgb pavgw pextrw pinsrw pmaxsw pmaxub pminsw pminub pmovmskb pmulhuw psadbw pshufw pf2iw pfnacc pfpnacc pi2fw pswapd maskmovdqu clflush movntdq movnti movntpd movdqa movdqu movdq2q movq2dq paddq pmuludq pshufd pshufhw pshuflw pslldq psrldq psubq punpckhqdq punpcklqdq addpd addsd andnpd andpd cmpeqpd cmpeqsd cmplepd cmplesd cmpltpd cmpltsd cmpneqpd cmpneqsd cmpnlepd cmpnlesd cmpnltpd cmpnltsd cmpordpd cmpordsd cmpunordpd cmpunordsd cmppd comisd cvtdq2pd cvtdq2ps cvtpd2dq cvtpd2pi cvtpd2ps cvtpi2pd cvtps2dq cvtps2pd cvtsd2si cvtsd2ss cvtsi2sd cvtss2sd cvttpd2pi cvttpd2dq cvttps2dq cvttsd2si divpd divsd maxpd maxsd minpd minsd movapd movhpd movlpd movmskpd movupd mulpd mulsd orpd shufpd sqrtpd sqrtsd subpd subsd ucomisd unpckhpd unpcklpd xorpd addsubpd addsubps haddpd haddps hsubpd hsubps lddqu movddup movshdup movsldup clgi stgi vmcall vmclear vmfunc vmlaunch vmload vmmcall vmptrld vmptrst vmread vmresume vmrun vmsave vmwrite vmxoff vmxon invept invvpid pabsb pabsw pabsd palignr phaddw phaddd phaddsw phsubw phsubd phsubsw pmaddubsw pmulhrsw pshufb psignb psignw psignd extrq insertq movntsd movntss lzcnt blendpd blendps blendvpd blendvps dppd dpps extractps insertps movntdqa mpsadbw packusdw pblendvb pblendw pcmpeqq pextrb pextrd pextrq phminposuw pinsrb pinsrd pinsrq pmaxsb pmaxsd pmaxud pmaxuw pminsb pminsd pminud pminuw pmovsxbw pmovsxbd pmovsxbq pmovsxwd pmovsxwq pmovsxdq pmovzxbw pmovzxbd pmovzxbq pmovzxwd pmovzxwq pmovzxdq pmuldq pmulld ptest roundpd roundps roundsd roundss crc32 pcmpestri pcmpestrm pcmpistri pcmpistrm pcmpgtq popcnt getsec pfrcpv pfrsqrtv movbe aesenc aesenclast aesdec aesdeclast aesimc aeskeygenassist vaesenc vaesenclast vaesdec vaesdeclast vaesimc vaeskeygenassist vaddpd vaddps vaddsd vaddss vaddsubpd vaddsubps vandpd vandps vandnpd vandnps vblendpd vblendps vblendvpd vblendvps vbroadcastss vbroadcastsd vbroadcastf128 vcmpeq_ospd vcmpeqpd vcmplt_ospd vcmpltpd vcmple_ospd vcmplepd vcmpunord_qpd vcmpunordpd vcmpneq_uqpd vcmpneqpd vcmpnlt_uspd vcmpnltpd vcmpnle_uspd vcmpnlepd vcmpord_qpd vcmpordpd vcmpeq_uqpd vcmpnge_uspd vcmpngepd vcmpngt_uspd vcmpngtpd vcmpfalse_oqpd vcmpfalsepd vcmpneq_oqpd vcmpge_ospd vcmpgepd vcmpgt_ospd vcmpgtpd vcmptrue_uqpd vcmptruepd vcmplt_oqpd vcmple_oqpd vcmpunord_spd vcmpneq_uspd vcmpnlt_uqpd vcmpnle_uqpd vcmpord_spd vcmpeq_uspd vcmpnge_uqpd vcmpngt_uqpd vcmpfalse_ospd vcmpneq_ospd vcmpge_oqpd vcmpgt_oqpd vcmptrue_uspd vcmppd vcmpeq_osps vcmpeqps vcmplt_osps vcmpltps vcmple_osps vcmpleps vcmpunord_qps vcmpunordps vcmpneq_uqps vcmpneqps vcmpnlt_usps vcmpnltps vcmpnle_usps vcmpnleps vcmpord_qps vcmpordps vcmpeq_uqps vcmpnge_usps vcmpngeps vcmpngt_usps vcmpngtps vcmpfalse_oqps vcmpfalseps vcmpneq_oqps vcmpge_osps vcmpgeps vcmpgt_osps vcmpgtps vcmptrue_uqps vcmptrueps vcmplt_oqps vcmple_oqps vcmpunord_sps vcmpneq_usps vcmpnlt_uqps vcmpnle_uqps vcmpord_sps vcmpeq_usps vcmpnge_uqps vcmpngt_uqps vcmpfalse_osps vcmpneq_osps vcmpge_oqps vcmpgt_oqps vcmptrue_usps vcmpps vcmpeq_ossd vcmpeqsd vcmplt_ossd vcmpltsd vcmple_ossd vcmplesd vcmpunord_qsd vcmpunordsd vcmpneq_uqsd vcmpneqsd vcmpnlt_ussd vcmpnltsd vcmpnle_ussd vcmpnlesd vcmpord_qsd vcmpordsd vcmpeq_uqsd vcmpnge_ussd vcmpngesd vcmpngt_ussd vcmpngtsd vcmpfalse_oqsd vcmpfalsesd vcmpneq_oqsd vcmpge_ossd vcmpgesd vcmpgt_ossd vcmpgtsd vcmptrue_uqsd vcmptruesd vcmplt_oqsd vcmple_oqsd vcmpunord_ssd vcmpneq_ussd vcmpnlt_uqsd vcmpnle_uqsd vcmpord_ssd vcmpeq_ussd vcmpnge_uqsd vcmpngt_uqsd vcmpfalse_ossd vcmpneq_ossd vcmpge_oqsd vcmpgt_oqsd vcmptrue_ussd vcmpsd vcmpeq_osss vcmpeqss vcmplt_osss vcmpltss vcmple_osss vcmpless vcmpunord_qss vcmpunordss vcmpneq_uqss vcmpneqss vcmpnlt_usss vcmpnltss vcmpnle_usss vcmpnless vcmpord_qss vcmpordss vcmpeq_uqss vcmpnge_usss vcmpngess vcmpngt_usss vcmpngtss vcmpfalse_oqss vcmpfalsess vcmpneq_oqss vcmpge_osss vcmpgess vcmpgt_osss vcmpgtss vcmptrue_uqss vcmptruess vcmplt_oqss vcmple_oqss vcmpunord_sss vcmpneq_usss vcmpnlt_uqss vcmpnle_uqss vcmpord_sss vcmpeq_usss vcmpnge_uqss vcmpngt_uqss vcmpfalse_osss vcmpneq_osss vcmpge_oqss vcmpgt_oqss vcmptrue_usss vcmpss vcomisd vcomiss vcvtdq2pd vcvtdq2ps vcvtpd2dq vcvtpd2ps vcvtps2dq vcvtps2pd vcvtsd2si vcvtsd2ss vcvtsi2sd vcvtsi2ss vcvtss2sd vcvtss2si vcvttpd2dq vcvttps2dq vcvttsd2si vcvttss2si vdivpd vdivps vdivsd vdivss vdppd vdpps vextractf128 vextractps vhaddpd vhaddps vhsubpd vhsubps vinsertf128 vinsertps vlddqu vldqqu vldmxcsr vmaskmovdqu vmaskmovps vmaskmovpd vmaxpd vmaxps vmaxsd vmaxss vminpd vminps vminsd vminss vmovapd vmovaps vmovd vmovq vmovddup vmovdqa vmovqqa vmovdqu vmovqqu vmovhlps vmovhpd vmovhps vmovlhps vmovlpd vmovlps vmovmskpd vmovmskps vmovntdq vmovntqq vmovntdqa vmovntpd vmovntps vmovsd vmovshdup vmovsldup vmovss vmovupd vmovups vmpsadbw vmulpd vmulps vmulsd vmulss vorpd vorps vpabsb vpabsw vpabsd vpacksswb vpackssdw vpackuswb vpackusdw vpaddb vpaddw vpaddd vpaddq vpaddsb vpaddsw vpaddusb vpaddusw vpalignr vpand vpandn vpavgb vpavgw vpblendvb vpblendw vpcmpestri vpcmpestrm vpcmpistri vpcmpistrm vpcmpeqb vpcmpeqw vpcmpeqd vpcmpeqq vpcmpgtb vpcmpgtw vpcmpgtd vpcmpgtq vpermilpd vpermilps vperm2f128 vpextrb vpextrw vpextrd vpextrq vphaddw vphaddd vphaddsw vphminposuw vphsubw vphsubd vphsubsw vpinsrb vpinsrw vpinsrd vpinsrq vpmaddwd vpmaddubsw vpmaxsb vpmaxsw vpmaxsd vpmaxub vpmaxuw vpmaxud vpminsb vpminsw vpminsd vpminub vpminuw vpminud vpmovmskb vpmovsxbw vpmovsxbd vpmovsxbq vpmovsxwd vpmovsxwq vpmovsxdq vpmovzxbw vpmovzxbd vpmovzxbq vpmovzxwd vpmovzxwq vpmovzxdq vpmulhuw vpmulhrsw vpmulhw vpmullw vpmulld vpmuludq vpmuldq vpor vpsadbw vpshufb vpshufd vpshufhw vpshuflw vpsignb vpsignw vpsignd vpslldq vpsrldq vpsllw vpslld vpsllq vpsraw vpsrad vpsrlw vpsrld vpsrlq vptest vpsubb vpsubw vpsubd vpsubq vpsubsb vpsubsw vpsubusb vpsubusw vpunpckhbw vpunpckhwd vpunpckhdq vpunpckhqdq vpunpcklbw vpunpcklwd vpunpckldq vpunpcklqdq vpxor vrcpps vrcpss vrsqrtps vrsqrtss vroundpd vroundps vroundsd vroundss vshufpd vshufps vsqrtpd vsqrtps vsqrtsd vsqrtss vstmxcsr vsubpd vsubps vsubsd vsubss vtestps vtestpd vucomisd vucomiss vunpckhpd vunpckhps vunpcklpd vunpcklps vxorpd vxorps vzeroall vzeroupper pclmullqlqdq pclmulhqlqdq pclmullqhqdq pclmulhqhqdq pclmulqdq vpclmullqlqdq vpclmulhqlqdq vpclmullqhqdq vpclmulhqhqdq vpclmulqdq vfmadd132ps vfmadd132pd vfmadd312ps vfmadd312pd vfmadd213ps vfmadd213pd vfmadd123ps vfmadd123pd vfmadd231ps vfmadd231pd vfmadd321ps vfmadd321pd vfmaddsub132ps vfmaddsub132pd vfmaddsub312ps vfmaddsub312pd vfmaddsub213ps vfmaddsub213pd vfmaddsub123ps vfmaddsub123pd vfmaddsub231ps vfmaddsub231pd vfmaddsub321ps vfmaddsub321pd vfmsub132ps vfmsub132pd vfmsub312ps vfmsub312pd vfmsub213ps vfmsub213pd vfmsub123ps vfmsub123pd vfmsub231ps vfmsub231pd vfmsub321ps vfmsub321pd vfmsubadd132ps vfmsubadd132pd vfmsubadd312ps vfmsubadd312pd vfmsubadd213ps vfmsubadd213pd vfmsubadd123ps vfmsubadd123pd vfmsubadd231ps vfmsubadd231pd vfmsubadd321ps vfmsubadd321pd vfnmadd132ps vfnmadd132pd vfnmadd312ps vfnmadd312pd vfnmadd213ps vfnmadd213pd vfnmadd123ps vfnmadd123pd vfnmadd231ps vfnmadd231pd vfnmadd321ps vfnmadd321pd vfnmsub132ps vfnmsub132pd vfnmsub312ps vfnmsub312pd vfnmsub213ps vfnmsub213pd vfnmsub123ps vfnmsub123pd vfnmsub231ps vfnmsub231pd vfnmsub321ps vfnmsub321pd vfmadd132ss vfmadd132sd vfmadd312ss vfmadd312sd vfmadd213ss vfmadd213sd vfmadd123ss vfmadd123sd vfmadd231ss vfmadd231sd vfmadd321ss vfmadd321sd vfmsub132ss vfmsub132sd vfmsub312ss vfmsub312sd vfmsub213ss vfmsub213sd vfmsub123ss vfmsub123sd vfmsub231ss vfmsub231sd vfmsub321ss vfmsub321sd vfnmadd132ss vfnmadd132sd vfnmadd312ss vfnmadd312sd vfnmadd213ss vfnmadd213sd vfnmadd123ss vfnmadd123sd vfnmadd231ss vfnmadd231sd vfnmadd321ss vfnmadd321sd vfnmsub132ss vfnmsub132sd vfnmsub312ss vfnmsub312sd vfnmsub213ss vfnmsub213sd vfnmsub123ss vfnmsub123sd vfnmsub231ss vfnmsub231sd vfnmsub321ss vfnmsub321sd rdfsbase rdgsbase rdrand wrfsbase wrgsbase vcvtph2ps vcvtps2ph adcx adox rdseed clac stac xstore xcryptecb xcryptcbc xcryptctr xcryptcfb xcryptofb montmul xsha1 xsha256 llwpcb slwpcb lwpval lwpins vfmaddpd vfmaddps vfmaddsd vfmaddss vfmaddsubpd vfmaddsubps vfmsubaddpd vfmsubaddps vfmsubpd vfmsubps vfmsubsd vfmsubss vfnmaddpd vfnmaddps vfnmaddsd vfnmaddss vfnmsubpd vfnmsubps vfnmsubsd vfnmsubss vfrczpd vfrczps vfrczsd vfrczss vpcmov vpcomb vpcomd vpcomq vpcomub vpcomud vpcomuq vpcomuw vpcomw vphaddbd vphaddbq vphaddbw vphadddq vphaddubd vphaddubq vphaddubw vphaddudq vphadduwd vphadduwq vphaddwd vphaddwq vphsubbw vphsubdq vphsubwd vpmacsdd vpmacsdqh vpmacsdql vpmacssdd vpmacssdqh vpmacssdql vpmacsswd vpmacssww vpmacswd vpmacsww vpmadcsswd vpmadcswd vpperm vprotb vprotd vprotq vprotw vpshab vpshad vpshaq vpshaw vpshlb vpshld vpshlq vpshlw vbroadcasti128 vpblendd vpbroadcastb vpbroadcastw vpbroadcastd vpbroadcastq vpermd vpermpd vpermps vpermq vperm2i128 vextracti128 vinserti128 vpmaskmovd vpmaskmovq vpsllvd vpsllvq vpsravd vpsrlvd vpsrlvq vgatherdpd vgatherqpd vgatherdps vgatherqps vpgatherdd vpgatherqd vpgatherdq vpgatherqq xabort xbegin xend xtest andn bextr blci blcic blsi blsic blcfill blsfill blcmsk blsmsk blsr blcs bzhi mulx pdep pext rorx sarx shlx shrx tzcnt tzmsk t1mskc valignd valignq vblendmpd vblendmps vbroadcastf32x4 vbroadcastf64x4 vbroadcasti32x4 vbroadcasti64x4 vcompresspd vcompressps vcvtpd2udq vcvtps2udq vcvtsd2usi vcvtss2usi vcvttpd2udq vcvttps2udq vcvttsd2usi vcvttss2usi vcvtudq2pd vcvtudq2ps vcvtusi2sd vcvtusi2ss vexpandpd vexpandps vextractf32x4 vextractf64x4 vextracti32x4 vextracti64x4 vfixupimmpd vfixupimmps vfixupimmsd vfixupimmss vgetexppd vgetexpps vgetexpsd vgetexpss vgetmantpd vgetmantps vgetmantsd vgetmantss vinsertf32x4 vinsertf64x4 vinserti32x4 vinserti64x4 vmovdqa32 vmovdqa64 vmovdqu32 vmovdqu64 vpabsq vpandd vpandnd vpandnq vpandq vpblendmd vpblendmq vpcmpltd vpcmpled vpcmpneqd vpcmpnltd vpcmpnled vpcmpd vpcmpltq vpcmpleq vpcmpneqq vpcmpnltq vpcmpnleq vpcmpq vpcmpequd vpcmpltud vpcmpleud vpcmpnequd vpcmpnltud vpcmpnleud vpcmpud vpcmpequq vpcmpltuq vpcmpleuq vpcmpnequq vpcmpnltuq vpcmpnleuq vpcmpuq vpcompressd vpcompressq vpermi2d vpermi2pd vpermi2ps vpermi2q vpermt2d vpermt2pd vpermt2ps vpermt2q vpexpandd vpexpandq vpmaxsq vpmaxuq vpminsq vpminuq vpmovdb vpmovdw vpmovqb vpmovqd vpmovqw vpmovsdb vpmovsdw vpmovsqb vpmovsqd vpmovsqw vpmovusdb vpmovusdw vpmovusqb vpmovusqd vpmovusqw vpord vporq vprold vprolq vprolvd vprolvq vprord vprorq vprorvd vprorvq vpscatterdd vpscatterdq vpscatterqd vpscatterqq vpsraq vpsravq vpternlogd vpternlogq vptestmd vptestmq vptestnmd vptestnmq vpxord vpxorq vrcp14pd vrcp14ps vrcp14sd vrcp14ss vrndscalepd vrndscaleps vrndscalesd vrndscaless vrsqrt14pd vrsqrt14ps vrsqrt14sd vrsqrt14ss vscalefpd vscalefps vscalefsd vscalefss vscatterdpd vscatterdps vscatterqpd vscatterqps vshuff32x4 vshuff64x2 vshufi32x4 vshufi64x2 kandnw kandw kmovw knotw kortestw korw kshiftlw kshiftrw kunpckbw kxnorw kxorw vpbroadcastmb2q vpbroadcastmw2d vpconflictd vpconflictq vplzcntd vplzcntq vexp2pd vexp2ps vrcp28pd vrcp28ps vrcp28sd vrcp28ss vrsqrt28pd vrsqrt28ps vrsqrt28sd vrsqrt28ss vgatherpf0dpd vgatherpf0dps vgatherpf0qpd vgatherpf0qps vgatherpf1dpd vgatherpf1dps vgatherpf1qpd vgatherpf1qps vscatterpf0dpd vscatterpf0dps vscatterpf0qpd vscatterpf0qps vscatterpf1dpd vscatterpf1dps vscatterpf1qpd vscatterpf1qps prefetchwt1 bndmk bndcl bndcu bndcn bndmov bndldx bndstx sha1rnds4 sha1nexte sha1msg1 sha1msg2 sha256rnds2 sha256msg1 sha256msg2 hint_nop0 hint_nop1 hint_nop2 hint_nop3 hint_nop4 hint_nop5 hint_nop6 hint_nop7 hint_nop8 hint_nop9 hint_nop10 hint_nop11 hint_nop12 hint_nop13 hint_nop14 hint_nop15 hint_nop16 hint_nop17 hint_nop18 hint_nop19 hint_nop20 hint_nop21 hint_nop22 hint_nop23 hint_nop24 hint_nop25 hint_nop26 hint_nop27 hint_nop28 hint_nop29 hint_nop30 hint_nop31 hint_nop32 hint_nop33 hint_nop34 hint_nop35 hint_nop36 hint_nop37 hint_nop38 hint_nop39 hint_nop40 hint_nop41 hint_nop42 hint_nop43 hint_nop44 hint_nop45 hint_nop46 hint_nop47 hint_nop48 hint_nop49 hint_nop50 hint_nop51 hint_nop52 hint_nop53 hint_nop54 hint_nop55 hint_nop56 hint_nop57 hint_nop58 hint_nop59 hint_nop60 hint_nop61 hint_nop62 hint_nop63\",literal:\"ip eip rip al ah bl bh cl ch dl dh sil dil bpl spl r8b r9b r10b r11b r12b r13b r14b r15b ax bx cx dx si di bp sp r8w r9w r10w r11w r12w r13w r14w r15w eax ebx ecx edx esi edi ebp esp eip r8d r9d r10d r11d r12d r13d r14d r15d rax rbx rcx rdx rsi rdi rbp rsp r8 r9 r10 r11 r12 r13 r14 r15 cs ds es fs gs ss st st0 st1 st2 st3 st4 st5 st6 st7 mm0 mm1 mm2 mm3 mm4 mm5 mm6 mm7 xmm0  xmm1  xmm2  xmm3  xmm4  xmm5  xmm6  xmm7  xmm8  xmm9 xmm10  xmm11 xmm12 xmm13 xmm14 xmm15 xmm16 xmm17 xmm18 xmm19 xmm20 xmm21 xmm22 xmm23 xmm24 xmm25 xmm26 xmm27 xmm28 xmm29 xmm30 xmm31 ymm0  ymm1  ymm2  ymm3  ymm4  ymm5  ymm6  ymm7  ymm8  ymm9 ymm10  ymm11 ymm12 ymm13 ymm14 ymm15 ymm16 ymm17 ymm18 ymm19 ymm20 ymm21 ymm22 ymm23 ymm24 ymm25 ymm26 ymm27 ymm28 ymm29 ymm30 ymm31 zmm0  zmm1  zmm2  zmm3  zmm4  zmm5  zmm6  zmm7  zmm8  zmm9 zmm10  zmm11 zmm12 zmm13 zmm14 zmm15 zmm16 zmm17 zmm18 zmm19 zmm20 zmm21 zmm22 zmm23 zmm24 zmm25 zmm26 zmm27 zmm28 zmm29 zmm30 zmm31 k0 k1 k2 k3 k4 k5 k6 k7 bnd0 bnd1 bnd2 bnd3 cr0 cr1 cr2 cr3 cr4 cr8 dr0 dr1 dr2 dr3 dr8 tr3 tr4 tr5 tr6 tr7 r0 r1 r2 r3 r4 r5 r6 r7 r0b r1b r2b r3b r4b r5b r6b r7b r0w r1w r2w r3w r4w r5w r6w r7w r0d r1d r2d r3d r4d r5d r6d r7d r0h r1h r2h r3h r0l r1l r2l r3l r4l r5l r6l r7l r8l r9l r10l r11l r12l r13l r14l r15l\",pseudo:\"db dw dd dq dt ddq do dy dz resb resw resd resq rest resdq reso resy resz incbin equ times\",preprocessor:\"%define %xdefine %+ %undef %defstr %deftok %assign %strcat %strlen %substr %rotate %elif %else %endif %ifmacro %ifctx %ifidn %ifidni %ifid %ifnum %ifstr %iftoken %ifempty %ifenv %error %warning %fatal %rep %endrep %include %push %pop %repl %pathsearch %depend %use %arg %stacksize %local %line %comment %endcomment .nolist byte word dword qword nosplit rel abs seg wrt strict near far a32 ptr __FILE__ __LINE__ __SECT__  __BITS__ __OUTPUT_FORMAT__ __DATE__ __TIME__ __DATE_NUM__ __TIME_NUM__ __UTC_DATE__ __UTC_TIME__ __UTC_DATE_NUM__ __UTC_TIME_NUM__  __PASS__ struc endstruc istruc at iend align alignb sectalign daz nodaz up down zero default option assume public \",built_in:\"bits use16 use32 use64 default section segment absolute extern global common cpu float __utf16__ __utf16le__ __utf16be__ __utf32__ __utf32le__ __utf32be__ __float8__ __float16__ __float32__ __float64__ __float80m__ __float80e__ __float128l__ __float128h__ __Infinity__ __QNaN__ __SNaN__ Inf NaN QNaN SNaN float8 float16 float32 float64 float80m float80e float128l float128h __FLOAT_DAZ__ __FLOAT_ROUND__ __FLOAT__\"},c:[{cN:\"comment\",b:\";\",e:\"$\",r:0},{cN:\"number\",b:\"\\\\b(?:([0-9][0-9_]*)?\\\\.[0-9_]*(?:[eE][+-]?[0-9_]+)?|(0[Xx])?[0-9][0-9_]*\\\\.?[0-9_]*(?:[pP](?:[+-]?[0-9_]+)?)?)\\\\b\",r:0},{cN:\"number\",b:\"\\\\$[0-9][0-9A-Fa-f]*\",r:0},{cN:\"number\",b:\"\\\\b(?:[0-9A-Fa-f][0-9A-Fa-f_]*[HhXx]|[0-9][0-9_]*[DdTt]?|[0-7][0-7_]*[QqOo]|[0-1][0-1_]*[BbYy])\\\\b\"},{cN:\"number\",b:\"\\\\b(?:0[HhXx][0-9A-Fa-f_]+|0[DdTt][0-9_]+|0[QqOo][0-7_]+|0[BbYy][0-1_]+)\\\\b\"},a.QSM,{cN:\"string\",b:\"'\",e:\"[^\\\\\\\\]'\",r:0},{cN:\"string\",b:\"`\",e:\"[^\\\\\\\\]`\",r:0},{cN:\"string\",b:\"\\\\.[A-Za-z0-9]+\",r:0},{cN:\"label\",b:\"^\\\\s*[A-Za-z._?][A-Za-z0-9_$#@~.?]*(:|\\\\s+label)\",r:0},{cN:\"label\",b:\"^\\\\s*%%[A-Za-z0-9_$#@~.?]*:\",r:0},{cN:\"argument\",b:\"%[0-9]+\",r:0},{cN:\"built_in\",b:\"%!S+\",r:0}]}});hljs.registerLanguage(\"python\",function(a){var f={cN:\"prompt\",b:/^(>>>|\\.\\.\\.) /};var b={cN:\"string\",c:[a.BE],v:[{b:/(u|b)?r?'''/,e:/'''/,c:[f],r:10},{b:/(u|b)?r?\"\"\"/,e:/\"\"\"/,c:[f],r:10},{b:/(u|r|ur)'/,e:/'/,r:10},{b:/(u|r|ur)\"/,e:/\"/,r:10},{b:/(b|br)'/,e:/'/},{b:/(b|br)\"/,e:/\"/},a.ASM,a.QSM]};var d={cN:\"number\",r:0,v:[{b:a.BNR+\"[lLjJ]?\"},{b:\"\\\\b(0o[0-7]+)[lLjJ]?\"},{b:a.CNR+\"[lLjJ]?\"}]};var e={cN:\"params\",b:/\\(/,e:/\\)/,c:[\"self\",f,d,b]};var c={e:/:/,i:/[${=;\\n]/,c:[a.UTM,e]};return{aliases:[\"py\",\"gyp\"],k:{keyword:\"and elif is global as in if from raise for except finally print import pass return exec else break not with class assert yield try while continue del or def lambda nonlocal|10 None True False\",built_in:\"Ellipsis NotImplemented\"},i:/(<\\/|->|\\?)/,c:[f,d,b,a.HCM,a.inherit(c,{cN:\"function\",bK:\"def\",r:10}),a.inherit(c,{cN:\"class\",bK:\"class\"}),{cN:\"decorator\",b:/@/,e:/$/},{b:/\\b(print|exec)\\(/}]}});hljs.registerLanguage(\"smalltalk\",function(a){var b=\"[a-z][a-zA-Z0-9_]*\";var d={cN:\"char\",b:\"\\\\$.{1}\"};var c={cN:\"symbol\",b:\"#\"+a.UIR};return{aliases:[\"st\"],k:\"self super nil true false thisContext\",c:[{cN:\"comment\",b:'\"',e:'\"'},a.ASM,{cN:\"class\",b:\"\\\\b[A-Z][A-Za-z0-9_]*\",r:0},{cN:\"method\",b:b+\":\",r:0},a.CNM,c,d,{cN:\"localvars\",b:\"\\\\|[ ]*\"+b+\"([ ]+\"+b+\")*[ ]*\\\\|\",rB:true,e:/\\|/,i:/\\S/,c:[{b:\"(\\\\|[ ]*)?\"+b}]},{cN:\"array\",b:\"\\\\#\\\\(\",e:\"\\\\)\",c:[a.ASM,d,a.CNM,c]}]}});hljs.registerLanguage(\"tex\",function(a){var d={cN:\"command\",b:\"\\\\\\\\[a-zA-Zа-яА-я]+[\\\\*]?\"};var c={cN:\"command\",b:\"\\\\\\\\[^a-zA-Zа-яА-я0-9]\"};var b={cN:\"special\",b:\"[{}\\\\[\\\\]\\\\&#~]\",r:0};return{c:[{b:\"\\\\\\\\[a-zA-Zа-яА-я]+[\\\\*]? *= *-?\\\\d*\\\\.?\\\\d+(pt|pc|mm|cm|in|dd|cc|ex|em)?\",rB:true,c:[d,c,{cN:\"number\",b:\" *=\",e:\"-?\\\\d*\\\\.?\\\\d+(pt|pc|mm|cm|in|dd|cc|ex|em)?\",eB:true}],r:10},d,c,b,{cN:\"formula\",b:\"\\\\$\\\\$\",e:\"\\\\$\\\\$\",c:[d,c,b],r:0},{cN:\"formula\",b:\"\\\\$\",e:\"\\\\$\",c:[d,c,b],r:0},{cN:\"comment\",b:\"%\",e:\"$\",r:0}]}});hljs.registerLanguage(\"actionscript\",function(a){var c=\"[a-zA-Z_$][a-zA-Z0-9_$]*\";var b=\"([*]|[a-zA-Z_$][a-zA-Z0-9_$]*)\";var d={cN:\"rest_arg\",b:\"[.]{3}\",e:c,r:10};return{aliases:[\"as\"],k:{keyword:\"as break case catch class const continue default delete do dynamic each else extends final finally for function get if implements import in include instanceof interface internal is namespace native new override package private protected public return set static super switch this throw try typeof use var void while with\",literal:\"true false null undefined\"},c:[a.ASM,a.QSM,a.CLCM,a.CBCM,a.CNM,{cN:\"package\",bK:\"package\",e:\"{\",c:[a.TM]},{cN:\"class\",bK:\"class interface\",e:\"{\",eE:true,c:[{bK:\"extends implements\"},a.TM]},{cN:\"preprocessor\",bK:\"import include\",e:\";\"},{cN:\"function\",bK:\"function\",e:\"[{;]\",eE:true,i:\"\\\\S\",c:[a.TM,{cN:\"params\",b:\"\\\\(\",e:\"\\\\)\",c:[a.ASM,a.QSM,a.CLCM,a.CBCM,d]},{cN:\"type\",b:\":\",e:b,r:10}]}]}});hljs.registerLanguage(\"sql\",function(a){var b={cN:\"comment\",b:\"--\",e:\"$\"};return{cI:true,i:/[<>]/,c:[{cN:\"operator\",bK:\"begin end start commit rollback savepoint lock alter create drop rename call delete do handler insert load replace select truncate update set show pragma grant merge describe use explain help declare prepare execute deallocate savepoint release unlock purge reset change stop analyze cache flush optimize repair kill install uninstall checksum restore check backup\",e:/;/,eW:true,k:{keyword:\"abs absolute acos action add adddate addtime aes_decrypt aes_encrypt after aggregate all allocate alter analyze and any are as asc ascii asin assertion at atan atan2 atn2 authorization authors avg backup before begin benchmark between bin binlog bit_and bit_count bit_length bit_or bit_xor both by cache call cascade cascaded case cast catalog ceil ceiling chain change changed char_length character_length charindex charset check checksum checksum_agg choose close coalesce coercibility collate collation collationproperty column columns columns_updated commit compress concat concat_ws concurrent connect connection connection_id consistent constraint constraints continue contributors conv convert convert_tz corresponding cos cot count count_big crc32 create cross cume_dist curdate current current_date current_time current_timestamp current_user cursor curtime data database databases datalength date_add date_format date_sub dateadd datediff datefromparts datename datepart datetime2fromparts datetimeoffsetfromparts day dayname dayofmonth dayofweek dayofyear deallocate declare decode default deferrable deferred degrees delayed delete des_decrypt des_encrypt des_key_file desc describe descriptor diagnostics difference disconnect distinct distinctrow div do domain double drop dumpfile each else elt enclosed encode encrypt end end-exec engine engines eomonth errors escape escaped event eventdata events except exception exec execute exists exp explain export_set extended external extract fast fetch field fields find_in_set first first_value floor flush for force foreign format found found_rows from from_base64 from_days from_unixtime full function get get_format get_lock getdate getutcdate global go goto grant grants greatest group group_concat grouping grouping_id gtid_subset gtid_subtract handler having help hex high_priority hosts hour ident_current ident_incr ident_seed identified identity if ifnull ignore iif ilike immediate in index indicator inet6_aton inet6_ntoa inet_aton inet_ntoa infile initially inner innodb input insert install instr intersect into is is_free_lock is_ipv4 is_ipv4_compat is_ipv4_mapped is_not is_not_null is_used_lock isdate isnull isolation join key kill language last last_day last_insert_id last_value lcase lead leading least leaves left len lenght level like limit lines ln load load_file local localtime localtimestamp locate lock log log10 log2 logfile logs low_priority lower lpad ltrim make_set makedate maketime master master_pos_wait match matched max md5 medium merge microsecond mid min minute mod mode module month monthname mutex name_const names national natural nchar next no no_write_to_binlog not now nullif nvarchar oct octet_length of old_password on only open optimize option optionally or ord order outer outfile output pad parse partial partition password patindex percent_rank percentile_cont percentile_disc period_add period_diff pi plugin position pow power pragma precision prepare preserve primary prior privileges procedure procedure_analyze processlist profile profiles public publishingservername purge quarter query quick quote quotename radians rand read references regexp relative relaylog release release_lock rename repair repeat replace replicate reset restore restrict return returns reverse revoke right rlike rollback rollup round row row_count rows rpad rtrim savepoint schema scroll sec_to_time second section select serializable server session session_user set sha sha1 sha2 share show sign sin size slave sleep smalldatetimefromparts snapshot some soname soundex sounds_like space sql sql_big_result sql_buffer_result sql_cache sql_calc_found_rows sql_no_cache sql_small_result sql_variant_property sqlstate sqrt square start starting status std stddev stddev_pop stddev_samp stdev stdevp stop str str_to_date straight_join strcmp string stuff subdate substr substring subtime subtring_index sum switchoffset sysdate sysdatetime sysdatetimeoffset system_user sysutcdatetime table tables tablespace tan temporary terminated tertiary_weights then time time_format time_to_sec timediff timefromparts timestamp timestampadd timestampdiff timezone_hour timezone_minute to to_base64 to_days to_seconds todatetimeoffset trailing transaction translation trigger trigger_nestlevel triggers trim truncate try_cast try_convert try_parse ucase uncompress uncompressed_length unhex unicode uninstall union unique unix_timestamp unknown unlock update upgrade upped upper usage use user user_resources using utc_date utc_time utc_timestamp uuid uuid_short validate_password_strength value values var var_pop var_samp variables variance varp version view warnings week weekday weekofyear weight_string when whenever where with work write xml xor year yearweek zon\",literal:\"true false null\",built_in:\"array bigint binary bit blob boolean char character date dec decimal float int integer interval number numeric real serial smallint varchar varying int8 serial8 text\"},c:[{cN:\"string\",b:\"'\",e:\"'\",c:[a.BE,{b:\"''\"}]},{cN:\"string\",b:'\"',e:'\"',c:[a.BE,{b:'\"\"'}]},{cN:\"string\",b:\"`\",e:\"`\",c:[a.BE]},a.CNM,a.CBCM,b]},a.CBCM,b]}});hljs.registerLanguage(\"nix\",function(b){var a={keyword:\"rec with let in inherit assert if else then\",constant:\"true false or and null\",built_in:\"import abort baseNameOf dirOf isNull builtins map removeAttrs throw toString derivation\"};var g={cN:\"subst\",b:/\\$\\{/,e:/\\}/,k:a};var d={cN:\"variable\",b:/[a-zA-Z0-9-_]+(\\s*=)/};var e={cN:\"string\",b:\"''\",e:\"''\",c:[g]};var f={cN:\"string\",b:'\"',e:'\"',c:[g]};var c=[b.NM,b.HCM,b.CBCM,e,f,d];g.c=c;return{aliases:[\"nixos\"],k:a,c:c}});hljs.registerLanguage(\"handlebars\",function(b){var a=\"each in with if else unless bindattr action collection debugger log outlet template unbound view yield\";return{aliases:[\"hbs\",\"html.hbs\",\"html.handlebars\"],cI:true,sL:\"xml\",subLanguageMode:\"continuous\",c:[{cN:\"expression\",b:\"{{\",e:\"}}\",c:[{cN:\"begin-block\",b:\"#[a-zA-Z- .]+\",k:a},{cN:\"string\",b:'\"',e:'\"'},{cN:\"end-block\",b:\"\\\\/[a-zA-Z- .]+\",k:a},{cN:\"variable\",b:\"[a-zA-Z-.]+\",k:a}]}]}});hljs.registerLanguage(\"thrift\",function(a){var b=\"bool byte i16 i32 i64 double string binary\";return{k:{keyword:\"namespace const typedef struct enum service exception void oneway set list map required optional\",built_in:b,literal:\"true false\"},c:[a.QSM,a.NM,a.CLCM,a.CBCM,{cN:\"class\",bK:\"struct enum service exception\",e:/\\{/,i:/\\n/,c:[a.inherit(a.TM,{starts:{eW:true,eE:true}})]},{cN:\"stl_container\",b:\"\\\\b(set|list|map)\\\\s*<\",e:\">\",k:b,c:[\"self\"]}]}});hljs.registerLanguage(\"vala\",function(a){return{k:{keyword:\"char uchar unichar int uint long ulong short ushort int8 int16 int32 int64 uint8 uint16 uint32 uint64 float double bool struct enum string void weak unowned owned async signal static abstract interface override while do for foreach else switch case break default return try catch public private protected internal using new this get set const stdout stdin stderr var\",built_in:\"DBus GLib CCode Gee Object\",literal:\"false true null\"},c:[{cN:\"class\",bK:\"class interface delegate namespace\",e:\"{\",eE:true,i:\"[^,:\\\\n\\\\s\\\\.]\",c:[a.UTM]},a.CLCM,a.CBCM,{cN:\"string\",b:'\"\"\"',e:'\"\"\"',r:5},a.ASM,a.QSM,a.CNM,{cN:\"preprocessor\",b:\"^#\",e:\"$\",r:2},{cN:\"constant\",b:\" [A-Z_]+ \",r:0}]}});hljs.registerLanguage(\"gradle\",function(a){return{cI:true,k:{keyword:\"task project allprojects subprojects artifacts buildscript configurations dependencies repositories sourceSets description delete from into include exclude source classpath destinationDir includes options sourceCompatibility targetCompatibility group flatDir doLast doFirst flatten todir fromdir ant def abstract break case catch continue default do else extends final finally for if implements instanceof native new private protected public return static switch synchronized throw throws transient try volatile while strictfp package import false null super this true antlrtask checkstyle codenarc copy boolean byte char class double float int interface long short void compile runTime file fileTree abs any append asList asWritable call collect compareTo count div dump each eachByte eachFile eachLine every find findAll flatten getAt getErr getIn getOut getText grep immutable inject inspect intersect invokeMethods isCase join leftShift minus multiply newInputStream newOutputStream newPrintWriter newReader newWriter next plus pop power previous print println push putAt read readBytes readLines reverse reverseEach round size sort splitEachLine step subMap times toInteger toList tokenize upto waitForOrKill withPrintWriter withReader withStream withWriter withWriterAppend write writeLine\"},c:[a.CLCM,a.CBCM,a.ASM,a.QSM,a.NM,a.RM]}});hljs.registerLanguage(\"ini\",function(a){return{cI:true,i:/\\S/,c:[{cN:\"comment\",b:\";\",e:\"$\"},{cN:\"title\",b:\"^\\\\[\",e:\"\\\\]\"},{cN:\"setting\",b:\"^[a-z0-9\\\\[\\\\]_-]+[ \\\\t]*=[ \\\\t]*\",e:\"$\",c:[{cN:\"value\",eW:true,k:\"on off true false yes no\",c:[a.QSM,a.NM],r:0}]}]}});hljs.registerLanguage(\"livecodeserver\",function(a){var e={cN:\"variable\",b:\"\\\\b[gtps][A-Z]+[A-Za-z0-9_\\\\-]*\\\\b|\\\\$_[A-Z]+\",r:0};var b={cN:\"comment\",e:\"$\",v:[a.CBCM,a.HCM,{b:\"--\"},{b:\"[^:]//\"}]};var d=a.inherit(a.TM,{v:[{b:\"\\\\b_*rig[A-Z]+[A-Za-z0-9_\\\\-]*\"},{b:\"\\\\b_[a-z0-9\\\\-]+\"}]});var c=a.inherit(a.TM,{b:\"\\\\b([A-Za-z0-9_\\\\-]+)\\\\b\"});return{cI:false,k:{keyword:\"after byte bytes english the until http forever descending using line real8 with seventh for stdout finally element word fourth before black ninth sixth characters chars stderr uInt1 uInt1s uInt2 uInt2s stdin string lines relative rel any fifth items from middle mid at else of catch then third it file milliseconds seconds second secs sec int1 int1s int4 int4s internet int2 int2s normal text item last long detailed effective uInt4 uInt4s repeat end repeat URL in try into switch to words https token binfile each tenth as ticks tick system real4 by dateItems without char character ascending eighth whole dateTime numeric short first ftp integer abbreviated abbr abbrev private case while if\",constant:\"SIX TEN FORMFEED NINE ZERO NONE SPACE FOUR FALSE COLON CRLF PI COMMA ENDOFFILE EOF EIGHT FIVE QUOTE EMPTY ONE TRUE RETURN CR LINEFEED RIGHT BACKSLASH NULL SEVEN TAB THREE TWO six ten formfeed nine zero none space four false colon crlf pi comma endoffile eof eight five quote empty one true return cr linefeed right backslash null seven tab three two RIVERSION RISTATE FILE_READ_MODE FILE_WRITE_MODE FILE_WRITE_MODE DIR_WRITE_MODE FILE_READ_UMASK FILE_WRITE_UMASK DIR_READ_UMASK DIR_WRITE_UMASK\",operator:\"div mod wrap and or bitAnd bitNot bitOr bitXor among not in a an within contains ends with begins the keys of keys\",built_in:\"put abs acos aliasReference annuity arrayDecode arrayEncode asin atan atan2 average avg base64Decode base64Encode baseConvert binaryDecode binaryEncode byteToNum cachedURL cachedURLs charToNum cipherNames commandNames compound compress constantNames cos date dateFormat decompress directories diskSpace DNSServers exp exp1 exp2 exp10 extents files flushEvents folders format functionNames global globals hasMemory hostAddress hostAddressToName hostName hostNameToAddress isNumber ISOToMac itemOffset keys len length libURLErrorData libUrlFormData libURLftpCommand libURLLastHTTPHeaders libURLLastRHHeaders libUrlMultipartFormAddPart libUrlMultipartFormData libURLVersion lineOffset ln ln1 localNames log log2 log10 longFilePath lower macToISO matchChunk matchText matrixMultiply max md5Digest median merge millisec millisecs millisecond milliseconds min monthNames num number numToByte numToChar offset open openfiles openProcesses openProcessIDs openSockets paramCount param params peerAddress pendingMessages platform processID random randomBytes replaceText result revCreateXMLTree revCreateXMLTreeFromFile revCurrentRecord revCurrentRecordIsFirst revCurrentRecordIsLast revDatabaseColumnCount revDatabaseColumnIsNull revDatabaseColumnLengths revDatabaseColumnNames revDatabaseColumnNamed revDatabaseColumnNumbered revDatabaseColumnTypes revDatabaseConnectResult revDatabaseCursors revDatabaseID revDatabaseTableNames revDatabaseType revDataFromQuery revdb_closeCursor revdb_columnbynumber revdb_columncount revdb_columnisnull revdb_columnlengths revdb_columnnames revdb_columntypes revdb_commit revdb_connect revdb_connections revdb_connectionerr revdb_currentrecord revdb_cursorconnection revdb_cursorerr revdb_cursors revdb_dbtype revdb_disconnect revdb_execute revdb_iseof revdb_isbof revdb_movefirst revdb_movelast revdb_movenext revdb_moveprev revdb_query revdb_querylist revdb_recordcount revdb_rollback revdb_tablenames revGetDatabaseDriverPath revNumberOfRecords revOpenDatabase revOpenDatabases revQueryDatabase revQueryDatabaseBlob revQueryResult revQueryIsAtStart revQueryIsAtEnd revUnixFromMacPath revXMLAttribute revXMLAttributes revXMLAttributeValues revXMLChildContents revXMLChildNames revXMLFirstChild revXMLMatchingNode revXMLNextSibling revXMLNodeContents revXMLNumberOfChildren revXMLParent revXMLPreviousSibling revXMLRootNode revXMLRPC_CreateRequest revXMLRPC_Documents revXMLRPC_Error revXMLRPC_Execute revXMLRPC_GetHost revXMLRPC_GetMethod revXMLRPC_GetParam revXMLText revXMLRPC_GetParamCount revXMLRPC_GetParamNode revXMLRPC_GetParamType revXMLRPC_GetPath revXMLRPC_GetPort revXMLRPC_GetProtocol revXMLRPC_GetRequest revXMLRPC_GetResponse revXMLRPC_GetSocket revXMLTree revXMLTrees revXMLValidateDTD revZipDescribeItem revZipEnumerateItems revZipOpenArchives round sec secs seconds sha1Digest shell shortFilePath sin specialFolderPath sqrt standardDeviation statRound stdDev sum sysError systemVersion tan tempName tick ticks time to toLower toUpper transpose trunc uniDecode uniEncode upper URLDecode URLEncode URLStatus value variableNames version waitDepth weekdayNames wordOffset add breakpoint cancel clear local variable file word line folder directory URL close socket process combine constant convert create new alias folder directory decrypt delete variable word line folder directory URL dispatch divide do encrypt filter get include intersect kill libURLDownloadToFile libURLFollowHttpRedirects libURLftpUpload libURLftpUploadFile libURLresetAll libUrlSetAuthCallback libURLSetCustomHTTPHeaders libUrlSetExpect100 libURLSetFTPListCommand libURLSetFTPMode libURLSetFTPStopTime libURLSetStatusCallback load multiply socket process post seek rel relative read from process rename replace require resetAll revAddXMLNode revAppendXML revCloseCursor revCloseDatabase revCommitDatabase revCopyFile revCopyFolder revCopyXMLNode revDeleteFolder revDeleteXMLNode revDeleteAllXMLTrees revDeleteXMLTree revExecuteSQL revGoURL revInsertXMLNode revMoveFolder revMoveToFirstRecord revMoveToLastRecord revMoveToNextRecord revMoveToPreviousRecord revMoveToRecord revMoveXMLNode revPutIntoXMLNode revRollBackDatabase revSetDatabaseDriverPath revSetXMLAttribute revXMLRPC_AddParam revXMLRPC_DeleteAllDocuments revXMLAddDTD revXMLRPC_Free revXMLRPC_FreeAll revXMLRPC_DeleteDocument revXMLRPC_DeleteParam revXMLRPC_SetHost revXMLRPC_SetMethod revXMLRPC_SetPort revXMLRPC_SetProtocol revXMLRPC_SetSocket revZipAddItemWithData revZipAddItemWithFile revZipAddUncompressedItemWithData revZipAddUncompressedItemWithFile revZipCancel revZipCloseArchive revZipDeleteItem revZipExtractItemToFile revZipExtractItemToVariable revZipSetProgressCallback revZipRenameItem revZipReplaceItemWithData revZipReplaceItemWithFile revZipOpenArchive send set sort split subtract union unload wait write\"},c:[e,{cN:\"keyword\",b:\"\\\\bend\\\\sif\\\\b\"},{cN:\"function\",bK:\"function\",e:\"$\",c:[e,c,a.ASM,a.QSM,a.BNM,a.CNM,d]},{cN:\"function\",bK:\"end\",e:\"$\",c:[c,d]},{cN:\"command\",bK:\"command on\",e:\"$\",c:[e,c,a.ASM,a.QSM,a.BNM,a.CNM,d]},{cN:\"command\",bK:\"end\",e:\"$\",c:[c,d]},{cN:\"preprocessor\",b:\"<\\\\?rev|<\\\\?lc|<\\\\?livecode\",r:10},{cN:\"preprocessor\",b:\"<\\\\?\"},{cN:\"preprocessor\",b:\"\\\\?>\"},b,a.ASM,a.QSM,a.BNM,a.CNM,d],i:\";$|^\\\\[|^=\"}});hljs.registerLanguage(\"d\",function(x){var b={keyword:\"abstract alias align asm assert auto body break byte case cast catch class const continue debug default delete deprecated do else enum export extern final finally for foreach foreach_reverse|10 goto if immutable import in inout int interface invariant is lazy macro mixin module new nothrow out override package pragma private protected public pure ref return scope shared static struct super switch synchronized template this throw try typedef typeid typeof union unittest version void volatile while with __FILE__ __LINE__ __gshared|10 __thread __traits __DATE__ __EOF__ __TIME__ __TIMESTAMP__ __VENDOR__ __VERSION__\",built_in:\"bool cdouble cent cfloat char creal dchar delegate double dstring float function idouble ifloat ireal long real short string ubyte ucent uint ulong ushort wchar wstring\",literal:\"false null true\"};var c=\"(0|[1-9][\\\\d_]*)\",q=\"(0|[1-9][\\\\d_]*|\\\\d[\\\\d_]*|[\\\\d_]+?\\\\d)\",h=\"0[bB][01_]+\",v=\"([\\\\da-fA-F][\\\\da-fA-F_]*|_[\\\\da-fA-F][\\\\da-fA-F_]*)\",y=\"0[xX]\"+v,p=\"([eE][+-]?\"+q+\")\",o=\"(\"+q+\"(\\\\.\\\\d*|\"+p+\")|\\\\d+\\\\.\"+q+q+\"|\\\\.\"+c+p+\"?)\",k=\"(0[xX](\"+v+\"\\\\.\"+v+\"|\\\\.?\"+v+\")[pP][+-]?\"+q+\")\",l=\"(\"+c+\"|\"+h+\"|\"+y+\")\",n=\"(\"+k+\"|\"+o+\")\";var z=\"\\\\\\\\(['\\\"\\\\?\\\\\\\\abfnrtv]|u[\\\\dA-Fa-f]{4}|[0-7]{1,3}|x[\\\\dA-Fa-f]{2}|U[\\\\dA-Fa-f]{8})|&[a-zA-Z\\\\d]{2,};\";var m={cN:\"number\",b:\"\\\\b\"+l+\"(L|u|U|Lu|LU|uL|UL)?\",r:0};var j={cN:\"number\",b:\"\\\\b(\"+n+\"([fF]|L|i|[fF]i|Li)?|\"+l+\"(i|[fF]i|Li))\",r:0};var s={cN:\"string\",b:\"'(\"+z+\"|.)\",e:\"'\",i:\".\"};var r={b:z,r:0};var w={cN:\"string\",b:'\"',c:[r],e:'\"[cwd]?'};var f={cN:\"string\",b:'[rq]\"',e:'\"[cwd]?',r:5};var u={cN:\"string\",b:\"`\",e:\"`[cwd]?\"};var i={cN:\"string\",b:'x\"[\\\\da-fA-F\\\\s\\\\n\\\\r]*\"[cwd]?',r:10};var t={cN:\"string\",b:'q\"\\\\{',e:'\\\\}\"'};var e={cN:\"shebang\",b:\"^#!\",e:\"$\",r:5};var g={cN:\"preprocessor\",b:\"#(line)\",e:\"$\",r:5};var d={cN:\"keyword\",b:\"@[a-zA-Z_][a-zA-Z_\\\\d]*\"};var a={cN:\"comment\",b:\"\\\\/\\\\+\",c:[\"self\"],e:\"\\\\+\\\\/\",r:10};return{l:x.UIR,k:b,c:[x.CLCM,x.CBCM,a,i,w,f,u,t,j,m,s,e,g,d]}});hljs.registerLanguage(\"vbnet\",function(a){return{aliases:[\"vb\"],cI:true,k:{keyword:\"addhandler addressof alias and andalso aggregate ansi as assembly auto binary by byref byval call case catch class compare const continue custom declare default delegate dim distinct do each equals else elseif end enum erase error event exit explicit finally for friend from function get global goto group handles if implements imports in inherits interface into is isfalse isnot istrue join key let lib like loop me mid mod module mustinherit mustoverride mybase myclass namespace narrowing new next not notinheritable notoverridable of off on operator option optional or order orelse overloads overridable overrides paramarray partial preserve private property protected public raiseevent readonly redim rem removehandler resume return select set shadows shared skip static step stop structure strict sub synclock take text then throw to try unicode until using when where while widening with withevents writeonly xor\",built_in:\"boolean byte cbool cbyte cchar cdate cdec cdbl char cint clng cobj csbyte cshort csng cstr ctype date decimal directcast double gettype getxmlnamespace iif integer long object sbyte short single string trycast typeof uinteger ulong ushort\",literal:\"true false nothing\"},i:\"//|{|}|endif|gosub|variant|wend\",c:[a.inherit(a.QSM,{c:[{b:'\"\"'}]}),{cN:\"comment\",b:\"'\",e:\"$\",rB:true,c:[{cN:\"xmlDocTag\",b:\"'''|<!--|-->\"},{cN:\"xmlDocTag\",b:\"</?\",e:\">\"}]},a.CNM,{cN:\"preprocessor\",b:\"#\",e:\"$\",k:\"if else elseif end region externalsource\"}]}});hljs.registerLanguage(\"axapta\",function(a){return{k:\"false int abstract private char boolean static null if for true while long throw finally protected final return void enum else break new catch byte super case short default double public try this switch continue reverse firstfast firstonly forupdate nofetch sum avg minof maxof count order group by asc desc index hint like dispaly edit client server ttsbegin ttscommit str real date container anytype common div mod\",c:[a.CLCM,a.CBCM,a.ASM,a.QSM,a.CNM,{cN:\"preprocessor\",b:\"#\",e:\"$\"},{cN:\"class\",bK:\"class interface\",e:\"{\",eE:true,i:\":\",c:[{bK:\"extends implements\"},a.UTM]}]}});hljs.registerLanguage(\"groovy\",function(a){return{k:{typename:\"byte short char int long boolean float double void\",literal:\"true false null\",keyword:\"def as in assert trait super this abstract static volatile transient public private protected synchronized final class interface enum if else for while switch case break default continue throw throws try catch finally implements extends new import package return instanceof\"},c:[a.CLCM,{cN:\"javadoc\",b:\"/\\\\*\\\\*\",e:\"\\\\*//*\",c:[{cN:\"javadoctag\",b:\"@[A-Za-z]+\"}]},a.CBCM,{cN:\"string\",b:'\"\"\"',e:'\"\"\"'},{cN:\"string\",b:\"'''\",e:\"'''\"},{cN:\"string\",b:\"\\\\$/\",e:\"/\\\\$\",r:10},a.ASM,{cN:\"regexp\",b:/~?\\/[^\\/\\n]+\\//,c:[a.BE]},a.QSM,{cN:\"shebang\",b:\"^#!/usr/bin/env\",e:\"$\",i:\"\\n\"},a.BNM,{cN:\"class\",bK:\"class interface trait enum\",e:\"{\",i:\":\",c:[{bK:\"extends implements\"},a.UTM,]},a.CNM,{cN:\"annotation\",b:\"@[A-Za-z]+\"},{cN:\"string\",b:/[^\\?]{0}[A-Za-z0-9_$]+ *:/},{b:/\\?/,e:/\\:/},{cN:\"label\",b:\"^\\\\s*[A-Za-z0-9_$]+:\"},]}});hljs.registerLanguage(\"perl\",function(c){var d=\"getpwent getservent quotemeta msgrcv scalar kill dbmclose undef lc ma syswrite tr send umask sysopen shmwrite vec qx utime local oct semctl localtime readpipe do return format read sprintf dbmopen pop getpgrp not getpwnam rewinddir qqfileno qw endprotoent wait sethostent bless s|0 opendir continue each sleep endgrent shutdown dump chomp connect getsockname die socketpair close flock exists index shmgetsub for endpwent redo lstat msgctl setpgrp abs exit select print ref gethostbyaddr unshift fcntl syscall goto getnetbyaddr join gmtime symlink semget splice x|0 getpeername recv log setsockopt cos last reverse gethostbyname getgrnam study formline endhostent times chop length gethostent getnetent pack getprotoent getservbyname rand mkdir pos chmod y|0 substr endnetent printf next open msgsnd readdir use unlink getsockopt getpriority rindex wantarray hex system getservbyport endservent int chr untie rmdir prototype tell listen fork shmread ucfirst setprotoent else sysseek link getgrgid shmctl waitpid unpack getnetbyname reset chdir grep split require caller lcfirst until warn while values shift telldir getpwuid my getprotobynumber delete and sort uc defined srand accept package seekdir getprotobyname semop our rename seek if q|0 chroot sysread setpwent no crypt getc chown sqrt write setnetent setpriority foreach tie sin msgget map stat getlogin unless elsif truncate exec keys glob tied closedirioctl socket readlink eval xor readline binmode setservent eof ord bind alarm pipe atan2 getgrent exp time push setgrent gt lt or ne m|0 break given say state when\";var f={cN:\"subst\",b:\"[$@]\\\\{\",e:\"\\\\}\",k:d};var g={b:\"->{\",e:\"}\"};var a={cN:\"variable\",v:[{b:/\\$\\d/},{b:/[\\$\\%\\@](\\^\\w\\b|#\\w+(\\:\\:\\w+)*|{\\w+}|\\w+(\\:\\:\\w*)*)/},{b:/[\\$\\%\\@][^\\s\\w{]/,r:0}]};var e={cN:\"comment\",b:\"^(__END__|__DATA__)\",e:\"\\\\n$\",r:5};var h=[c.BE,f,a];var b=[a,c.HCM,e,{cN:\"comment\",b:\"^\\\\=\\\\w\",e:\"\\\\=cut\",eW:true},g,{cN:\"string\",c:h,v:[{b:\"q[qwxr]?\\\\s*\\\\(\",e:\"\\\\)\",r:5},{b:\"q[qwxr]?\\\\s*\\\\[\",e:\"\\\\]\",r:5},{b:\"q[qwxr]?\\\\s*\\\\{\",e:\"\\\\}\",r:5},{b:\"q[qwxr]?\\\\s*\\\\|\",e:\"\\\\|\",r:5},{b:\"q[qwxr]?\\\\s*\\\\<\",e:\"\\\\>\",r:5},{b:\"qw\\\\s+q\",e:\"q\",r:5},{b:\"'\",e:\"'\",c:[c.BE]},{b:'\"',e:'\"'},{b:\"`\",e:\"`\",c:[c.BE]},{b:\"{\\\\w+}\",c:[],r:0},{b:\"-?\\\\w+\\\\s*\\\\=\\\\>\",c:[],r:0}]},{cN:\"number\",b:\"(\\\\b0[0-7_]+)|(\\\\b0x[0-9a-fA-F_]+)|(\\\\b[1-9][0-9_]*(\\\\.[0-9_]+)?)|[0_]\\\\b\",r:0},{b:\"(\\\\/\\\\/|\"+c.RSR+\"|\\\\b(split|return|print|reverse|grep)\\\\b)\\\\s*\",k:\"split return print reverse grep\",r:0,c:[c.HCM,e,{cN:\"regexp\",b:\"(s|tr|y)/(\\\\\\\\.|[^/])*/(\\\\\\\\.|[^/])*/[a-z]*\",r:10},{cN:\"regexp\",b:\"(m|qr)?/\",e:\"/[a-z]*\",c:[c.BE],r:0}]},{cN:\"sub\",bK:\"sub\",e:\"(\\\\s*\\\\(.*?\\\\))?[;{]\",r:5},{cN:\"operator\",b:\"-\\\\w\\\\b\",r:0}];f.c=b;g.c=b;return{aliases:[\"pl\"],k:d,c:b}});hljs.registerLanguage(\"scala\",function(d){var b={cN:\"annotation\",b:\"@[A-Za-z]+\"};var c={cN:\"string\",b:'u?r?\"\"\"',e:'\"\"\"',r:10};var a={cN:\"symbol\",b:\"'\\\\w[\\\\w\\\\d_]*(?!')\"};var e={cN:\"type\",b:\"\\\\b[A-Z][A-Za-z0-9_]*\",r:0};var h={cN:\"title\",b:/[^0-9\\n\\t \"'(),.`{}\\[\\]:;][^\\n\\t \"'(),.`{}\\[\\]:;]+|[^0-9\\n\\t \"'(),.`{}\\[\\]:;=]/,r:0};var i={cN:\"class\",bK:\"class object trait type\",e:/[:={\\[(\\n;]/,c:[{cN:\"keyword\",bK:\"extends with\",r:10},h]};var g={cN:\"function\",bK:\"def val\",e:/[:={\\[(\\n;]/,c:[h]};var f={cN:\"javadoc\",b:\"/\\\\*\\\\*\",e:\"\\\\*/\",c:[{cN:\"javadoctag\",b:\"@[A-Za-z]+\"}],r:10};return{k:{literal:\"true false null\",keyword:\"type yield lazy override def with val var sealed abstract private trait object if forSome for while throw finally protected extends import final return else break new catch super class case package default try this match continue throws implicit\"},c:[d.CLCM,d.CBCM,c,d.QSM,a,e,g,i,d.CNM,b]}});hljs.registerLanguage(\"cmake\",function(a){return{aliases:[\"cmake.in\"],cI:true,k:{keyword:\"add_custom_command add_custom_target add_definitions add_dependencies add_executable add_library add_subdirectory add_test aux_source_directory break build_command cmake_minimum_required cmake_policy configure_file create_test_sourcelist define_property else elseif enable_language enable_testing endforeach endfunction endif endmacro endwhile execute_process export find_file find_library find_package find_path find_program fltk_wrap_ui foreach function get_cmake_property get_directory_property get_filename_component get_property get_source_file_property get_target_property get_test_property if include include_directories include_external_msproject include_regular_expression install link_directories load_cache load_command macro mark_as_advanced message option output_required_files project qt_wrap_cpp qt_wrap_ui remove_definitions return separate_arguments set set_directory_properties set_property set_source_files_properties set_target_properties set_tests_properties site_name source_group string target_link_libraries try_compile try_run unset variable_watch while build_name exec_program export_library_dependencies install_files install_programs install_targets link_libraries make_directory remove subdir_depends subdirs use_mangled_mesa utility_source variable_requires write_file qt5_use_modules qt5_use_package qt5_wrap_cpp on off true false and or\",operator:\"equal less greater strless strgreater strequal matches\"},c:[{cN:\"envvar\",b:\"\\\\${\",e:\"}\"},a.HCM,a.QSM,a.NM]}});hljs.registerLanguage(\"ocaml\",function(a){return{aliases:[\"ml\"],k:{keyword:\"and as assert asr begin class constraint do done downto else end exception external false for fun function functor if in include inherit initializer land lazy let lor lsl lsr lxor match method mod module mutable new object of open or private rec ref sig struct then to true try type val virtual when while with parser value\",built_in:\"bool char float int list unit array exn option int32 int64 nativeint format4 format6 lazy_t in_channel out_channel string\"},i:/\\/\\//,c:[{cN:\"string\",b:'\"\"\"',e:'\"\"\"'},{cN:\"comment\",b:\"\\\\(\\\\*\",e:\"\\\\*\\\\)\",c:[\"self\"]},{cN:\"class\",bK:\"type\",e:\"\\\\(|=|$\",eE:true,c:[a.UTM]},{cN:\"annotation\",b:\"\\\\[<\",e:\">\\\\]\"},a.CBCM,a.inherit(a.ASM,{i:null}),a.inherit(a.QSM,{i:null}),a.CNM]}});hljs.registerLanguage(\"autohotkey\",function(b){var d={cN:\"escape\",b:\"`[\\\\s\\\\S]\"};var c={cN:\"comment\",b:\";\",e:\"$\",r:0};var a=[{cN:\"built_in\",b:\"A_[a-zA-Z0-9]+\"},{cN:\"built_in\",bK:\"ComSpec Clipboard ClipboardAll ErrorLevel\"}];return{cI:true,k:{keyword:\"Break Continue Else Gosub If Loop Return While\",literal:\"A true false NOT AND OR\"},c:a.concat([d,b.inherit(b.QSM,{c:[d]}),c,{cN:\"number\",b:b.NR,r:0},{cN:\"var_expand\",b:\"%\",e:\"%\",i:\"\\\\n\",c:[d]},{cN:\"label\",c:[d],v:[{b:'^[^\\\\n\";]+::(?!=)'},{b:'^[^\\\\n\";]+:(?!=)',r:0}]},{b:\",\\\\s*,\",r:10}])}});hljs.registerLanguage(\"objectivec\",function(a){var d={keyword:\"int float while char export sizeof typedef const struct for union unsigned long volatile static bool mutable if do return goto void enum else break extern asm case short default double register explicit signed typename this switch continue wchar_t inline readonly assign readwrite self @synchronized id typeof nonatomic super unichar IBOutlet IBAction strong weak copy in out inout bycopy byref oneway __strong __weak __block __autoreleasing @private @protected @public @try @property @end @throw @catch @finally @autoreleasepool @synthesize @dynamic @selector @optional @required\",literal:\"false true FALSE TRUE nil YES NO NULL\",built_in:\"NSString NSData NSDictionary CGRect CGPoint UIButton UILabel UITextView UIWebView MKMapView NSView NSViewController NSWindow NSWindowController NSSet NSUUID NSIndexSet UISegmentedControl NSObject UITableViewDelegate UITableViewDataSource NSThread UIActivityIndicator UITabbar UIToolBar UIBarButtonItem UIImageView NSAutoreleasePool UITableView BOOL NSInteger CGFloat NSException NSLog NSMutableString NSMutableArray NSMutableDictionary NSURL NSIndexPath CGSize UITableViewCell UIView UIViewController UINavigationBar UINavigationController UITabBarController UIPopoverController UIPopoverControllerDelegate UIImage NSNumber UISearchBar NSFetchedResultsController NSFetchedResultsChangeType UIScrollView UIScrollViewDelegate UIEdgeInsets UIColor UIFont UIApplication NSNotFound NSNotificationCenter NSNotification UILocalNotification NSBundle NSFileManager NSTimeInterval NSDate NSCalendar NSUserDefaults UIWindow NSRange NSArray NSError NSURLRequest NSURLConnection NSURLSession NSURLSessionDataTask NSURLSessionDownloadTask NSURLSessionUploadTask NSURLResponseUIInterfaceOrientation MPMoviePlayerController dispatch_once_t dispatch_queue_t dispatch_sync dispatch_async dispatch_once\"};var c=/[a-zA-Z@][a-zA-Z0-9_]*/;var b=\"@interface @class @protocol @implementation\";return{aliases:[\"m\",\"mm\",\"objc\",\"obj-c\"],k:d,l:c,i:\"</\",c:[a.CLCM,a.CBCM,a.CNM,a.QSM,{cN:\"string\",v:[{b:'@\"',e:'\"',i:\"\\\\n\",c:[a.BE]},{b:\"'\",e:\"[^\\\\\\\\]'\",i:\"[^\\\\\\\\][^']\"}]},{cN:\"preprocessor\",b:\"#\",e:\"$\",c:[{cN:\"title\",v:[{b:'\"',e:'\"'},{b:\"<\",e:\">\"}]}]},{cN:\"class\",b:\"(\"+b.split(\" \").join(\"|\")+\")\\\\b\",e:\"({|$)\",eE:true,k:b,l:c,c:[a.UTM]},{cN:\"variable\",b:\"\\\\.\"+a.UIR,r:0}]}});hljs.registerLanguage(\"avrasm\",function(a){return{cI:true,l:\"\\\\.?\"+a.IR,k:{keyword:\"adc add adiw and andi asr bclr bld brbc brbs brcc brcs break breq brge brhc brhs brid brie brlo brlt brmi brne brpl brsh brtc brts brvc brvs bset bst call cbi cbr clc clh cli cln clr cls clt clv clz com cp cpc cpi cpse dec eicall eijmp elpm eor fmul fmuls fmulsu icall ijmp in inc jmp ld ldd ldi lds lpm lsl lsr mov movw mul muls mulsu neg nop or ori out pop push rcall ret reti rjmp rol ror sbc sbr sbrc sbrs sec seh sbi sbci sbic sbis sbiw sei sen ser ses set sev sez sleep spm st std sts sub subi swap tst wdr\",built_in:\"r0 r1 r2 r3 r4 r5 r6 r7 r8 r9 r10 r11 r12 r13 r14 r15 r16 r17 r18 r19 r20 r21 r22 r23 r24 r25 r26 r27 r28 r29 r30 r31 x|0 xh xl y|0 yh yl z|0 zh zl ucsr1c udr1 ucsr1a ucsr1b ubrr1l ubrr1h ucsr0c ubrr0h tccr3c tccr3a tccr3b tcnt3h tcnt3l ocr3ah ocr3al ocr3bh ocr3bl ocr3ch ocr3cl icr3h icr3l etimsk etifr tccr1c ocr1ch ocr1cl twcr twdr twar twsr twbr osccal xmcra xmcrb eicra spmcsr spmcr portg ddrg ping portf ddrf sreg sph spl xdiv rampz eicrb eimsk gimsk gicr eifr gifr timsk tifr mcucr mcucsr tccr0 tcnt0 ocr0 assr tccr1a tccr1b tcnt1h tcnt1l ocr1ah ocr1al ocr1bh ocr1bl icr1h icr1l tccr2 tcnt2 ocr2 ocdr wdtcr sfior eearh eearl eedr eecr porta ddra pina portb ddrb pinb portc ddrc pinc portd ddrd pind spdr spsr spcr udr0 ucsr0a ucsr0b ubrr0l acsr admux adcsr adch adcl porte ddre pine pinf\",preprocessor:\".byte .cseg .db .def .device .dseg .dw .endmacro .equ .eseg .exit .include .list .listmac .macro .nolist .org .set\"},c:[a.CBCM,{cN:\"comment\",b:\";\",e:\"$\",r:0},a.CNM,a.BNM,{cN:\"number\",b:\"\\\\b(\\\\$[a-zA-Z0-9]+|0o[0-7]+)\"},a.QSM,{cN:\"string\",b:\"'\",e:\"[^\\\\\\\\]'\",i:\"[^\\\\\\\\][^']\"},{cN:\"label\",b:\"^[A-Za-z0-9_.$]+:\"},{cN:\"preprocessor\",b:\"#\",e:\"$\"},{cN:\"localvars\",b:\"@[0-9]+\"}]}});hljs.registerLanguage(\"vhdl\",function(a){return{cI:true,k:{keyword:\"abs access after alias all and architecture array assert attribute begin block body buffer bus case component configuration constant context cover disconnect downto default else elsif end entity exit fairness file for force function generate generic group guarded if impure in inertial inout is label library linkage literal loop map mod nand new next nor not null of on open or others out package port postponed procedure process property protected pure range record register reject release rem report restrict restrict_guarantee return rol ror select sequence severity shared signal sla sll sra srl strong subtype then to transport type unaffected units until use variable vmode vprop vunit wait when while with xnor xor\",typename:\"boolean bit character severity_level integer time delay_length natural positive string bit_vector file_open_kind file_open_status std_ulogic std_ulogic_vector std_logic std_logic_vector unsigned signed boolean_vector integer_vector real_vector time_vector\"},i:\"{\",c:[a.CBCM,{cN:\"comment\",b:\"--\",e:\"$\"},a.QSM,a.CNM,{cN:\"literal\",b:\"'(U|X|0|1|Z|W|L|H|-)'\",c:[a.BE]},{cN:\"attribute\",b:\"'[A-Za-z](_?[A-Za-z0-9])*\",c:[a.BE]}]}});hljs.registerLanguage(\"coffeescript\",function(c){var b={keyword:\"in if for while finally new do return else break catch instanceof throw try this switch continue typeof delete debugger super then unless until loop of by when and or is isnt not\",literal:\"true false null undefined yes no on off\",reserved:\"case default function var void with const let enum export import native __hasProp __extends __slice __bind __indexOf\",built_in:\"npm require console print module global window document\"};var a=\"[A-Za-z$_][0-9A-Za-z$_]*\";var f=c.inherit(c.TM,{b:a});var e={cN:\"subst\",b:/#\\{/,e:/}/,k:b};var d=[c.BNM,c.inherit(c.CNM,{starts:{e:\"(\\\\s*/)?\",r:0}}),{cN:\"string\",v:[{b:/'''/,e:/'''/,c:[c.BE]},{b:/'/,e:/'/,c:[c.BE]},{b:/\"\"\"/,e:/\"\"\"/,c:[c.BE,e]},{b:/\"/,e:/\"/,c:[c.BE,e]}]},{cN:\"regexp\",v:[{b:\"///\",e:\"///\",c:[e,c.HCM]},{b:\"//[gim]*\",r:0},{b:/\\/(?![ *])(\\\\\\/|.)*?\\/[gim]*(?=\\W|$)/}]},{cN:\"property\",b:\"@\"+a},{b:\"`\",e:\"`\",eB:true,eE:true,sL:\"javascript\"}];e.c=d;return{aliases:[\"coffee\",\"cson\",\"iced\"],k:b,i:/\\/\\*/,c:d.concat([{cN:\"comment\",b:\"###\",e:\"###\"},c.HCM,{cN:\"function\",b:\"(^\\\\s*|\\\\B)(\"+a+\"\\\\s*=\\\\s*)?(\\\\(.*\\\\))?\\\\s*\\\\B[-=]>\",e:\"[-=]>\",rB:true,c:[f,{cN:\"params\",b:\"\\\\([^\\\\(]\",rB:true,c:[{b:/\\(/,e:/\\)/,k:b,c:[\"self\"].concat(d)}]}]},{cN:\"class\",bK:\"class\",e:\"$\",i:/[:=\"\\[\\]]/,c:[{bK:\"extends\",eW:true,i:/[:=\"\\[\\]]/,c:[f]},f]},{cN:\"attribute\",b:a+\":\",e:\":\",rB:true,eE:true,r:0}])}});hljs.registerLanguage(\"mizar\",function(a){return{k:[\"environ vocabularies notations constructors definitions registrations theorems schemes requirements\",\"begin end definition registration cluster existence pred func defpred deffunc theorem proof\",\"let take assume then thus hence ex for st holds consider reconsider such that and in provided of as from\",\"be being by means equals implies iff redefine define now not or attr is mode suppose per cases set\",\"thesis contradiction scheme reserve struct\",\"correctness compatibility coherence symmetry assymetry reflexivity irreflexivity\",\"connectedness uniqueness commutativity idempotence involutiveness projectivity\"].join(\" \"),c:[{cN:\"comment\",b:\"::\",e:\"$\"}]}});hljs.registerLanguage(\"nginx\",function(c){var b={cN:\"variable\",v:[{b:/\\$\\d+/},{b:/\\$\\{/,e:/}/},{b:\"[\\\\$\\\\@]\"+c.UIR}]};var a={eW:true,l:\"[a-z/_]+\",k:{built_in:\"on off yes no true false none blocked debug info notice warn error crit select break last permanent redirect kqueue rtsig epoll poll /dev/poll\"},r:0,i:\"=>\",c:[c.HCM,{cN:\"string\",c:[c.BE,b],v:[{b:/\"/,e:/\"/},{b:/'/,e:/'/}]},{cN:\"url\",b:\"([a-z]+):/\",e:\"\\\\s\",eW:true,eE:true,c:[b]},{cN:\"regexp\",c:[c.BE,b],v:[{b:\"\\\\s\\\\^\",e:\"\\\\s|{|;\",rE:true},{b:\"~\\\\*?\\\\s+\",e:\"\\\\s|{|;\",rE:true},{b:\"\\\\*(\\\\.[a-z\\\\-]+)+\"},{b:\"([a-z\\\\-]+\\\\.)+\\\\*\"}]},{cN:\"number\",b:\"\\\\b\\\\d{1,3}\\\\.\\\\d{1,3}\\\\.\\\\d{1,3}\\\\.\\\\d{1,3}(:\\\\d{1,5})?\\\\b\"},{cN:\"number\",b:\"\\\\b\\\\d+[kKmMgGdshdwy]*\\\\b\",r:0},b]};return{aliases:[\"nginxconf\"],c:[c.HCM,{b:c.UIR+\"\\\\s\",e:\";|{\",rB:true,c:[{cN:\"title\",b:c.UIR,starts:a}],r:0}],i:\"[^\\\\s\\\\}]\"}});hljs.registerLanguage(\"erlang-repl\",function(a){return{k:{special_functions:\"spawn spawn_link self\",reserved:\"after and andalso|10 band begin bnot bor bsl bsr bxor case catch cond div end fun if let not of or orelse|10 query receive rem try when xor\"},c:[{cN:\"prompt\",b:\"^[0-9]+> \",r:10},{cN:\"comment\",b:\"%\",e:\"$\"},{cN:\"number\",b:\"\\\\b(\\\\d+#[a-fA-F0-9]+|\\\\d+(\\\\.\\\\d+)?([eE][-+]?\\\\d+)?)\",r:0},a.ASM,a.QSM,{cN:\"constant\",b:\"\\\\?(::)?([A-Z]\\\\w*(::)?)+\"},{cN:\"arrow\",b:\"->\"},{cN:\"ok\",b:\"ok\"},{cN:\"exclamation_mark\",b:\"!\"},{cN:\"function_or_atom\",b:\"(\\\\b[a-z'][a-zA-Z0-9_']*:[a-z'][a-zA-Z0-9_']*)|(\\\\b[a-z'][a-zA-Z0-9_']*)\",r:0},{cN:\"variable\",b:\"[A-Z][a-zA-Z0-9_']*\",r:0}]}});hljs.registerLanguage(\"r\",function(a){var b=\"([a-zA-Z]|\\\\.[a-zA-Z.])[a-zA-Z0-9._]*\";return{c:[a.HCM,{b:b,l:b,k:{keyword:\"function if in break next repeat else for return switch while try tryCatch|10 stop warning require library attach detach source setMethod setGeneric setGroupGeneric setClass ...|10\",literal:\"NULL NA TRUE FALSE T F Inf NaN NA_integer_|10 NA_real_|10 NA_character_|10 NA_complex_|10\"},r:0},{cN:\"number\",b:\"0[xX][0-9a-fA-F]+[Li]?\\\\b\",r:0},{cN:\"number\",b:\"\\\\d+(?:[eE][+\\\\-]?\\\\d*)?L\\\\b\",r:0},{cN:\"number\",b:\"\\\\d+\\\\.(?!\\\\d)(?:i\\\\b)?\",r:0},{cN:\"number\",b:\"\\\\d+(?:\\\\.\\\\d*)?(?:[eE][+\\\\-]?\\\\d*)?i?\\\\b\",r:0},{cN:\"number\",b:\"\\\\.\\\\d+(?:[eE][+\\\\-]?\\\\d*)?i?\\\\b\",r:0},{b:\"`\",e:\"`\",r:0},{cN:\"string\",c:[a.BE],v:[{b:'\"',e:'\"'},{b:\"'\",e:\"'\"}]}]}});hljs.registerLanguage(\"json\",function(a){var e={literal:\"true false null\"};var d=[a.QSM,a.CNM];var c={cN:\"value\",e:\",\",eW:true,eE:true,c:d,k:e};var b={b:\"{\",e:\"}\",c:[{cN:\"attribute\",b:'\\\\s*\"',e:'\"\\\\s*:\\\\s*',eB:true,eE:true,c:[a.BE],i:\"\\\\n\",starts:c}],i:\"\\\\S\"};var f={b:\"\\\\[\",e:\"\\\\]\",c:[a.inherit(c,{cN:null})],i:\"\\\\S\"};d.splice(d.length,0,b,f);return{c:d,k:e,i:\"\\\\S\"}});hljs.registerLanguage(\"django\",function(a){var b={cN:\"filter\",b:/\\|[A-Za-z]+\\:?/,k:\"truncatewords removetags linebreaksbr yesno get_digit timesince random striptags filesizeformat escape linebreaks length_is ljust rjust cut urlize fix_ampersands title floatformat capfirst pprint divisibleby add make_list unordered_list urlencode timeuntil urlizetrunc wordcount stringformat linenumbers slice date dictsort dictsortreversed default_if_none pluralize lower join center default truncatewords_html upper length phone2numeric wordwrap time addslashes slugify first escapejs force_escape iriencode last safe safeseq truncatechars localize unlocalize localtime utc timezone\",c:[{cN:\"argument\",b:/\"/,e:/\"/},{cN:\"argument\",b:/'/,e:/'/}]};return{aliases:[\"jinja\"],cI:true,sL:\"xml\",subLanguageMode:\"continuous\",c:[{cN:\"template_comment\",b:/\\{%\\s*comment\\s*%}/,e:/\\{%\\s*endcomment\\s*%}/},{cN:\"template_comment\",b:/\\{#/,e:/#}/},{cN:\"template_tag\",b:/\\{%/,e:/%}/,k:\"comment endcomment load templatetag ifchanged endifchanged if endif firstof for endfor in ifnotequal endifnotequal widthratio extends include spaceless endspaceless regroup by as ifequal endifequal ssi now with cycle url filter endfilter debug block endblock else autoescape endautoescape csrf_token empty elif endwith static trans blocktrans endblocktrans get_static_prefix get_media_prefix plural get_current_language language get_available_languages get_current_language_bidi get_language_info get_language_info_list localize endlocalize localtime endlocaltime timezone endtimezone get_current_timezone verbatim\",c:[b]},{cN:\"variable\",b:/\\{\\{/,e:/}}/,c:[b]}]}});hljs.registerLanguage(\"delphi\",function(b){var a=\"exports register file shl array record property for mod while set ally label uses raise not stored class safecall var interface or private static exit index inherited to else stdcall override shr asm far resourcestring finalization packed virtual out and protected library do xorwrite goto near function end div overload object unit begin string on inline repeat until destructor write message program with read initialization except default nil if case cdecl in downto threadvar of try pascal const external constructor type public then implementation finally published procedure\";var e={cN:\"comment\",v:[{b:/\\{/,e:/\\}/,r:0},{b:/\\(\\*/,e:/\\*\\)/,r:10}]};var c={cN:\"string\",b:/'/,e:/'/,c:[{b:/''/}]};var d={cN:\"string\",b:/(#\\d+)+/};var f={b:b.IR+\"\\\\s*=\\\\s*class\\\\s*\\\\(\",rB:true,c:[b.TM]};var g={cN:\"function\",bK:\"function constructor destructor procedure\",e:/[:;]/,k:\"function constructor|10 destructor|10 procedure|10\",c:[b.TM,{cN:\"params\",b:/\\(/,e:/\\)/,k:a,c:[c,d]},e]};return{cI:true,k:a,i:/(\"|\\$[G-Zg-z]|\\/\\*|<\\/)/,c:[e,b.CLCM,c,d,b.NM,f,g]}});hljs.registerLanguage(\"vbscript\",function(a){return{aliases:[\"vbs\"],cI:true,k:{keyword:\"call class const dim do loop erase execute executeglobal exit for each next function if then else on error option explicit new private property let get public randomize redim rem select case set stop sub while wend with end to elseif is or xor and not class_initialize class_terminate default preserve in me byval byref step resume goto\",built_in:\"lcase month vartype instrrev ubound setlocale getobject rgb getref string weekdayname rnd dateadd monthname now day minute isarray cbool round formatcurrency conversions csng timevalue second year space abs clng timeserial fixs len asc isempty maths dateserial atn timer isobject filter weekday datevalue ccur isdate instr datediff formatdatetime replace isnull right sgn array snumeric log cdbl hex chr lbound msgbox ucase getlocale cos cdate cbyte rtrim join hour oct typename trim strcomp int createobject loadpicture tan formatnumber mid scriptenginebuildversion scriptengine split scriptengineminorversion cint sin datepart ltrim sqr scriptenginemajorversion time derived eval date formatpercent exp inputbox left ascw chrw regexp server response request cstr err\",literal:\"true false null nothing empty\"},i:\"//\",c:[a.inherit(a.QSM,{c:[{b:'\"\"'}]}),{cN:\"comment\",b:/'/,e:/$/,r:0},a.CNM]}});hljs.registerLanguage(\"oxygene\",function(b){var g=\"abstract add and array as asc aspect assembly async begin break block by case class concat const copy constructor continue create default delegate desc distinct div do downto dynamic each else empty end ensure enum equals event except exit extension external false final finalize finalizer finally flags for forward from function future global group has if implementation implements implies in index inherited inline interface into invariants is iterator join locked locking loop matching method mod module namespace nested new nil not notify nullable of old on operator or order out override parallel params partial pinned private procedure property protected public queryable raise read readonly record reintroduce remove repeat require result reverse sealed select self sequence set shl shr skip static step soft take then to true try tuple type union unit unsafe until uses using var virtual raises volatile where while with write xor yield await mapped deprecated stdcall cdecl pascal register safecall overload library platform reference packed strict published autoreleasepool selector strong weak unretained\";var a={cN:\"comment\",b:\"{\",e:\"}\",r:0};var e={cN:\"comment\",b:\"\\\\(\\\\*\",e:\"\\\\*\\\\)\",r:10};var c={cN:\"string\",b:\"'\",e:\"'\",c:[{b:\"''\"}]};var d={cN:\"string\",b:\"(#\\\\d+)+\"};var f={cN:\"function\",bK:\"function constructor destructor procedure method\",e:\"[:;]\",k:\"function constructor|10 destructor|10 procedure|10 method|10\",c:[b.TM,{cN:\"params\",b:\"\\\\(\",e:\"\\\\)\",k:g,c:[c,d]},a,e]};return{cI:true,k:g,i:'(\"|\\\\$[G-Zg-z]|\\\\/\\\\*|</)',c:[a,e,b.CLCM,c,d,b.NM,f,{cN:\"class\",b:\"=\\\\bclass\\\\b\",e:\"end;\",k:g,c:[c,d,a,e,b.CLCM,f]}]}});hljs.registerLanguage(\"mel\",function(a){return{k:\"int float string vector matrix if else switch case default while do for in break continue global proc return about abs addAttr addAttributeEditorNodeHelp addDynamic addNewShelfTab addPP addPanelCategory addPrefixToName advanceToNextDrivenKey affectedNet affects aimConstraint air alias aliasAttr align alignCtx alignCurve alignSurface allViewFit ambientLight angle angleBetween animCone animCurveEditor animDisplay animView annotate appendStringArray applicationName applyAttrPreset applyTake arcLenDimContext arcLengthDimension arclen arrayMapper art3dPaintCtx artAttrCtx artAttrPaintVertexCtx artAttrSkinPaintCtx artAttrTool artBuildPaintMenu artFluidAttrCtx artPuttyCtx artSelectCtx artSetPaintCtx artUserPaintCtx assignCommand assignInputDevice assignViewportFactories attachCurve attachDeviceAttr attachSurface attrColorSliderGrp attrCompatibility attrControlGrp attrEnumOptionMenu attrEnumOptionMenuGrp attrFieldGrp attrFieldSliderGrp attrNavigationControlGrp attrPresetEditWin attributeExists attributeInfo attributeMenu attributeQuery autoKeyframe autoPlace bakeClip bakeFluidShading bakePartialHistory bakeResults bakeSimulation basename basenameEx batchRender bessel bevel bevelPlus binMembership bindSkin blend2 blendShape blendShapeEditor blendShapePanel blendTwoAttr blindDataType boneLattice boundary boxDollyCtx boxZoomCtx bufferCurve buildBookmarkMenu buildKeyframeMenu button buttonManip CBG cacheFile cacheFileCombine cacheFileMerge cacheFileTrack camera cameraView canCreateManip canvas capitalizeString catch catchQuiet ceil changeSubdivComponentDisplayLevel changeSubdivRegion channelBox character characterMap characterOutlineEditor characterize chdir checkBox checkBoxGrp checkDefaultRenderGlobals choice circle circularFillet clamp clear clearCache clip clipEditor clipEditorCurrentTimeCtx clipSchedule clipSchedulerOutliner clipTrimBefore closeCurve closeSurface cluster cmdFileOutput cmdScrollFieldExecuter cmdScrollFieldReporter cmdShell coarsenSubdivSelectionList collision color colorAtPoint colorEditor colorIndex colorIndexSliderGrp colorSliderButtonGrp colorSliderGrp columnLayout commandEcho commandLine commandPort compactHairSystem componentEditor compositingInterop computePolysetVolume condition cone confirmDialog connectAttr connectControl connectDynamic connectJoint connectionInfo constrain constrainValue constructionHistory container containsMultibyte contextInfo control convertFromOldLayers convertIffToPsd convertLightmap convertSolidTx convertTessellation convertUnit copyArray copyFlexor copyKey copySkinWeights cos cpButton cpCache cpClothSet cpCollision cpConstraint cpConvClothToMesh cpForces cpGetSolverAttr cpPanel cpProperty cpRigidCollisionFilter cpSeam cpSetEdit cpSetSolverAttr cpSolver cpSolverTypes cpTool cpUpdateClothUVs createDisplayLayer createDrawCtx createEditor createLayeredPsdFile createMotionField createNewShelf createNode createRenderLayer createSubdivRegion cross crossProduct ctxAbort ctxCompletion ctxEditMode ctxTraverse currentCtx currentTime currentTimeCtx currentUnit curve curveAddPtCtx curveCVCtx curveEPCtx curveEditorCtx curveIntersect curveMoveEPCtx curveOnSurface curveSketchCtx cutKey cycleCheck cylinder dagPose date defaultLightListCheckBox defaultNavigation defineDataServer defineVirtualDevice deformer deg_to_rad delete deleteAttr deleteShadingGroupsAndMaterials deleteShelfTab deleteUI deleteUnusedBrushes delrandstr detachCurve detachDeviceAttr detachSurface deviceEditor devicePanel dgInfo dgdirty dgeval dgtimer dimWhen directKeyCtx directionalLight dirmap dirname disable disconnectAttr disconnectJoint diskCache displacementToPoly displayAffected displayColor displayCull displayLevelOfDetail displayPref displayRGBColor displaySmoothness displayStats displayString displaySurface distanceDimContext distanceDimension doBlur dolly dollyCtx dopeSheetEditor dot dotProduct doubleProfileBirailSurface drag dragAttrContext draggerContext dropoffLocator duplicate duplicateCurve duplicateSurface dynCache dynControl dynExport dynExpression dynGlobals dynPaintEditor dynParticleCtx dynPref dynRelEdPanel dynRelEditor dynamicLoad editAttrLimits editDisplayLayerGlobals editDisplayLayerMembers editRenderLayerAdjustment editRenderLayerGlobals editRenderLayerMembers editor editorTemplate effector emit emitter enableDevice encodeString endString endsWith env equivalent equivalentTol erf error eval evalDeferred evalEcho event exactWorldBoundingBox exclusiveLightCheckBox exec executeForEachObject exists exp expression expressionEditorListen extendCurve extendSurface extrude fcheck fclose feof fflush fgetline fgetword file fileBrowserDialog fileDialog fileExtension fileInfo filetest filletCurve filter filterCurve filterExpand filterStudioImport findAllIntersections findAnimCurves findKeyframe findMenuItem findRelatedSkinCluster finder firstParentOf fitBspline flexor floatEq floatField floatFieldGrp floatScrollBar floatSlider floatSlider2 floatSliderButtonGrp floatSliderGrp floor flow fluidCacheInfo fluidEmitter fluidVoxelInfo flushUndo fmod fontDialog fopen formLayout format fprint frameLayout fread freeFormFillet frewind fromNativePath fwrite gamma gauss geometryConstraint getApplicationVersionAsFloat getAttr getClassification getDefaultBrush getFileList getFluidAttr getInputDeviceRange getMayaPanelTypes getModifiers getPanel getParticleAttr getPluginResource getenv getpid glRender glRenderEditor globalStitch gmatch goal gotoBindPose grabColor gradientControl gradientControlNoAttr graphDollyCtx graphSelectContext graphTrackCtx gravity grid gridLayout group groupObjectsByName HfAddAttractorToAS HfAssignAS HfBuildEqualMap HfBuildFurFiles HfBuildFurImages HfCancelAFR HfConnectASToHF HfCreateAttractor HfDeleteAS HfEditAS HfPerformCreateAS HfRemoveAttractorFromAS HfSelectAttached HfSelectAttractors HfUnAssignAS hardenPointCurve hardware hardwareRenderPanel headsUpDisplay headsUpMessage help helpLine hermite hide hilite hitTest hotBox hotkey hotkeyCheck hsv_to_rgb hudButton hudSlider hudSliderButton hwReflectionMap hwRender hwRenderLoad hyperGraph hyperPanel hyperShade hypot iconTextButton iconTextCheckBox iconTextRadioButton iconTextRadioCollection iconTextScrollList iconTextStaticLabel ikHandle ikHandleCtx ikHandleDisplayScale ikSolver ikSplineHandleCtx ikSystem ikSystemInfo ikfkDisplayMethod illustratorCurves image imfPlugins inheritTransform insertJoint insertJointCtx insertKeyCtx insertKnotCurve insertKnotSurface instance instanceable instancer intField intFieldGrp intScrollBar intSlider intSliderGrp interToUI internalVar intersect iprEngine isAnimCurve isConnected isDirty isParentOf isSameObject isTrue isValidObjectName isValidString isValidUiName isolateSelect itemFilter itemFilterAttr itemFilterRender itemFilterType joint jointCluster jointCtx jointDisplayScale jointLattice keyTangent keyframe keyframeOutliner keyframeRegionCurrentTimeCtx keyframeRegionDirectKeyCtx keyframeRegionDollyCtx keyframeRegionInsertKeyCtx keyframeRegionMoveKeyCtx keyframeRegionScaleKeyCtx keyframeRegionSelectKeyCtx keyframeRegionSetKeyCtx keyframeRegionTrackCtx keyframeStats lassoContext lattice latticeDeformKeyCtx launch launchImageEditor layerButton layeredShaderPort layeredTexturePort layout layoutDialog lightList lightListEditor lightListPanel lightlink lineIntersection linearPrecision linstep listAnimatable listAttr listCameras listConnections listDeviceAttachments listHistory listInputDeviceAxes listInputDeviceButtons listInputDevices listMenuAnnotation listNodeTypes listPanelCategories listRelatives listSets listTransforms listUnselected listerEditor loadFluid loadNewShelf loadPlugin loadPluginLanguageResources loadPrefObjects localizedPanelLabel lockNode loft log longNameOf lookThru ls lsThroughFilter lsType lsUI Mayatomr mag makeIdentity makeLive makePaintable makeRoll makeSingleSurface makeTubeOn makebot manipMoveContext manipMoveLimitsCtx manipOptions manipRotateContext manipRotateLimitsCtx manipScaleContext manipScaleLimitsCtx marker match max memory menu menuBarLayout menuEditor menuItem menuItemToShelf menuSet menuSetPref messageLine min minimizeApp mirrorJoint modelCurrentTimeCtx modelEditor modelPanel mouse movIn movOut move moveIKtoFK moveKeyCtx moveVertexAlongDirection multiProfileBirailSurface mute nParticle nameCommand nameField namespace namespaceInfo newPanelItems newton nodeCast nodeIconButton nodeOutliner nodePreset nodeType noise nonLinear normalConstraint normalize nurbsBoolean nurbsCopyUVSet nurbsCube nurbsEditUV nurbsPlane nurbsSelect nurbsSquare nurbsToPoly nurbsToPolygonsPref nurbsToSubdiv nurbsToSubdivPref nurbsUVSet nurbsViewDirectionVector objExists objectCenter objectLayer objectType objectTypeUI obsoleteProc oceanNurbsPreviewPlane offsetCurve offsetCurveOnSurface offsetSurface openGLExtension openMayaPref optionMenu optionMenuGrp optionVar orbit orbitCtx orientConstraint outlinerEditor outlinerPanel overrideModifier paintEffectsDisplay pairBlend palettePort paneLayout panel panelConfiguration panelHistory paramDimContext paramDimension paramLocator parent parentConstraint particle particleExists particleInstancer particleRenderInfo partition pasteKey pathAnimation pause pclose percent performanceOptions pfxstrokes pickWalk picture pixelMove planarSrf plane play playbackOptions playblast plugAttr plugNode pluginInfo pluginResourceUtil pointConstraint pointCurveConstraint pointLight pointMatrixMult pointOnCurve pointOnSurface pointPosition poleVectorConstraint polyAppend polyAppendFacetCtx polyAppendVertex polyAutoProjection polyAverageNormal polyAverageVertex polyBevel polyBlendColor polyBlindData polyBoolOp polyBridgeEdge polyCacheMonitor polyCheck polyChipOff polyClipboard polyCloseBorder polyCollapseEdge polyCollapseFacet polyColorBlindData polyColorDel polyColorPerVertex polyColorSet polyCompare polyCone polyCopyUV polyCrease polyCreaseCtx polyCreateFacet polyCreateFacetCtx polyCube polyCut polyCutCtx polyCylinder polyCylindricalProjection polyDelEdge polyDelFacet polyDelVertex polyDuplicateAndConnect polyDuplicateEdge polyEditUV polyEditUVShell polyEvaluate polyExtrudeEdge polyExtrudeFacet polyExtrudeVertex polyFlipEdge polyFlipUV polyForceUV polyGeoSampler polyHelix polyInfo polyInstallAction polyLayoutUV polyListComponentConversion polyMapCut polyMapDel polyMapSew polyMapSewMove polyMergeEdge polyMergeEdgeCtx polyMergeFacet polyMergeFacetCtx polyMergeUV polyMergeVertex polyMirrorFace polyMoveEdge polyMoveFacet polyMoveFacetUV polyMoveUV polyMoveVertex polyNormal polyNormalPerVertex polyNormalizeUV polyOptUvs polyOptions polyOutput polyPipe polyPlanarProjection polyPlane polyPlatonicSolid polyPoke polyPrimitive polyPrism polyProjection polyPyramid polyQuad polyQueryBlindData polyReduce polySelect polySelectConstraint polySelectConstraintMonitor polySelectCtx polySelectEditCtx polySeparate polySetToFaceNormal polySewEdge polyShortestPathCtx polySmooth polySoftEdge polySphere polySphericalProjection polySplit polySplitCtx polySplitEdge polySplitRing polySplitVertex polyStraightenUVBorder polySubdivideEdge polySubdivideFacet polyToSubdiv polyTorus polyTransfer polyTriangulate polyUVSet polyUnite polyWedgeFace popen popupMenu pose pow preloadRefEd print progressBar progressWindow projFileViewer projectCurve projectTangent projectionContext projectionManip promptDialog propModCtx propMove psdChannelOutliner psdEditTextureFile psdExport psdTextureFile putenv pwd python querySubdiv quit rad_to_deg radial radioButton radioButtonGrp radioCollection radioMenuItemCollection rampColorPort rand randomizeFollicles randstate rangeControl readTake rebuildCurve rebuildSurface recordAttr recordDevice redo reference referenceEdit referenceQuery refineSubdivSelectionList refresh refreshAE registerPluginResource rehash reloadImage removeJoint removeMultiInstance removePanelCategory rename renameAttr renameSelectionList renameUI render renderGlobalsNode renderInfo renderLayerButton renderLayerParent renderLayerPostProcess renderLayerUnparent renderManip renderPartition renderQualityNode renderSettings renderThumbnailUpdate renderWindowEditor renderWindowSelectContext renderer reorder reorderDeformers requires reroot resampleFluid resetAE resetPfxToPolyCamera resetTool resolutionNode retarget reverseCurve reverseSurface revolve rgb_to_hsv rigidBody rigidSolver roll rollCtx rootOf rot rotate rotationInterpolation roundConstantRadius rowColumnLayout rowLayout runTimeCommand runup sampleImage saveAllShelves saveAttrPreset saveFluid saveImage saveInitialState saveMenu savePrefObjects savePrefs saveShelf saveToolSettings scale scaleBrushBrightness scaleComponents scaleConstraint scaleKey scaleKeyCtx sceneEditor sceneUIReplacement scmh scriptCtx scriptEditorInfo scriptJob scriptNode scriptTable scriptToShelf scriptedPanel scriptedPanelType scrollField scrollLayout sculpt searchPathArray seed selLoadSettings select selectContext selectCurveCV selectKey selectKeyCtx selectKeyframeRegionCtx selectMode selectPref selectPriority selectType selectedNodes selectionConnection separator setAttr setAttrEnumResource setAttrMapping setAttrNiceNameResource setConstraintRestPosition setDefaultShadingGroup setDrivenKeyframe setDynamic setEditCtx setEditor setFluidAttr setFocus setInfinity setInputDeviceMapping setKeyCtx setKeyPath setKeyframe setKeyframeBlendshapeTargetWts setMenuMode setNodeNiceNameResource setNodeTypeFlag setParent setParticleAttr setPfxToPolyCamera setPluginResource setProject setStampDensity setStartupMessage setState setToolTo setUITemplate setXformManip sets shadingConnection shadingGeometryRelCtx shadingLightRelCtx shadingNetworkCompare shadingNode shapeCompare shelfButton shelfLayout shelfTabLayout shellField shortNameOf showHelp showHidden showManipCtx showSelectionInTitle showShadingGroupAttrEditor showWindow sign simplify sin singleProfileBirailSurface size sizeBytes skinCluster skinPercent smoothCurve smoothTangentSurface smoothstep snap2to2 snapKey snapMode snapTogetherCtx snapshot soft softMod softModCtx sort sound soundControl source spaceLocator sphere sphrand spotLight spotLightPreviewPort spreadSheetEditor spring sqrt squareSurface srtContext stackTrace startString startsWith stitchAndExplodeShell stitchSurface stitchSurfacePoints strcmp stringArrayCatenate stringArrayContains stringArrayCount stringArrayInsertAtIndex stringArrayIntersector stringArrayRemove stringArrayRemoveAtIndex stringArrayRemoveDuplicates stringArrayRemoveExact stringArrayToString stringToStringArray strip stripPrefixFromName stroke subdAutoProjection subdCleanTopology subdCollapse subdDuplicateAndConnect subdEditUV subdListComponentConversion subdMapCut subdMapSewMove subdMatchTopology subdMirror subdToBlind subdToPoly subdTransferUVsToCache subdiv subdivCrease subdivDisplaySmoothness substitute substituteAllString substituteGeometry substring surface surfaceSampler surfaceShaderList swatchDisplayPort switchTable symbolButton symbolCheckBox sysFile system tabLayout tan tangentConstraint texLatticeDeformContext texManipContext texMoveContext texMoveUVShellContext texRotateContext texScaleContext texSelectContext texSelectShortestPathCtx texSmudgeUVContext texWinToolCtx text textCurves textField textFieldButtonGrp textFieldGrp textManip textScrollList textToShelf textureDisplacePlane textureHairColor texturePlacementContext textureWindow threadCount threePointArcCtx timeControl timePort timerX toNativePath toggle toggleAxis toggleWindowVisibility tokenize tokenizeList tolerance tolower toolButton toolCollection toolDropped toolHasOptions toolPropertyWindow torus toupper trace track trackCtx transferAttributes transformCompare transformLimits translator trim trunc truncateFluidCache truncateHairCache tumble tumbleCtx turbulence twoPointArcCtx uiRes uiTemplate unassignInputDevice undo undoInfo ungroup uniform unit unloadPlugin untangleUV untitledFileName untrim upAxis updateAE userCtx uvLink uvSnapshot validateShelfName vectorize view2dToolCtx viewCamera viewClipPlane viewFit viewHeadOn viewLookAt viewManip viewPlace viewSet visor volumeAxis vortex waitCursor warning webBrowser webBrowserPrefs whatIs window windowPref wire wireContext workspace wrinkle wrinkleContext writeTake xbmLangPathList xform\",i:\"</\",c:[a.CNM,a.ASM,a.QSM,{cN:\"string\",b:\"`\",e:\"`\",c:[a.BE]},{cN:\"variable\",v:[{b:\"\\\\$\\\\d\"},{b:\"[\\\\$\\\\%\\\\@](\\\\^\\\\w\\\\b|#\\\\w+|[^\\\\s\\\\w{]|{\\\\w+}|\\\\w+)\"},{b:\"\\\\*(\\\\^\\\\w\\\\b|#\\\\w+|[^\\\\s\\\\w{]|{\\\\w+}|\\\\w+)\",r:0}]},a.CLCM,a.CBCM]}});hljs.registerLanguage(\"dos\",function(a){var c={cN:\"comment\",b:/@?rem\\b/,e:/$/,r:10};var b={cN:\"label\",b:\"^\\\\s*[A-Za-z._?][A-Za-z0-9_$#@~.?]*(:|\\\\s+label)\",r:0};return{aliases:[\"bat\",\"cmd\"],cI:true,k:{flow:\"if else goto for in do call exit not exist errorlevel defined\",operator:\"equ neq lss leq gtr geq\",keyword:\"shift cd dir echo setlocal endlocal set pause copy\",stream:\"prn nul lpt3 lpt2 lpt1 con com4 com3 com2 com1 aux\",winutils:\"ping net ipconfig taskkill xcopy ren del\",built_in:\"append assoc at attrib break cacls cd chcp chdir chkdsk chkntfs cls cmd color comp compact convert date dir diskcomp diskcopy doskey erase fs find findstr format ftype graftabl help keyb label md mkdir mode more move path pause print popd pushd promt rd recover rem rename replace restore rmdir shiftsort start subst time title tree type ver verify vol\",},c:[{cN:\"envvar\",b:/%%[^ ]|%[^ ]+?%|![^ ]+?!/},{cN:\"function\",b:b.b,e:\"goto:eof\",c:[a.inherit(a.TM,{b:\"([_a-zA-Z]\\\\w*\\\\.)*([_a-zA-Z]\\\\w*:)?[_a-zA-Z]\\\\w*\"}),c]},{cN:\"number\",b:\"\\\\b\\\\d+\",r:0},c]}});hljs.registerLanguage(\"apache\",function(a){var b={cN:\"number\",b:\"[\\\\$%]\\\\d+\"};return{aliases:[\"apacheconf\"],cI:true,c:[a.HCM,{cN:\"tag\",b:\"</?\",e:\">\"},{cN:\"keyword\",b:/\\w+/,r:0,k:{common:\"order deny allow setenv rewriterule rewriteengine rewritecond documentroot sethandler errordocument loadmodule options header listen serverroot servername\"},starts:{e:/$/,r:0,k:{literal:\"on off all\"},c:[{cN:\"sqbracket\",b:\"\\\\s\\\\[\",e:\"\\\\]$\"},{cN:\"cbracket\",b:\"[\\\\$%]\\\\{\",e:\"\\\\}\",c:[\"self\",b]},b,a.QSM]}}],i:/\\S/}});hljs.registerLanguage(\"scss\",function(a){var c=\"[a-zA-Z-][a-zA-Z0-9_-]*\";var f={cN:\"variable\",b:\"(\\\\$\"+c+\")\\\\b\"};var d={cN:\"function\",b:c+\"\\\\(\",rB:true,eE:true,e:\"\\\\(\"};var b={cN:\"hexcolor\",b:\"#[0-9A-Fa-f]+\"};var e={cN:\"attribute\",b:\"[A-Z\\\\_\\\\.\\\\-]+\",e:\":\",eE:true,i:\"[^\\\\s]\",starts:{cN:\"value\",eW:true,eE:true,c:[d,b,a.CSSNM,a.QSM,a.ASM,a.CBCM,{cN:\"important\",b:\"!important\"}]}};return{cI:true,i:\"[=/|']\",c:[a.CLCM,a.CBCM,d,{cN:\"id\",b:\"\\\\#[A-Za-z0-9_-]+\",r:0},{cN:\"class\",b:\"\\\\.[A-Za-z0-9_-]+\",r:0},{cN:\"attr_selector\",b:\"\\\\[\",e:\"\\\\]\",i:\"$\"},{cN:\"tag\",b:\"\\\\b(a|abbr|acronym|address|area|article|aside|audio|b|base|big|blockquote|body|br|button|canvas|caption|cite|code|col|colgroup|command|datalist|dd|del|details|dfn|div|dl|dt|em|embed|fieldset|figcaption|figure|footer|form|frame|frameset|(h[1-6])|head|header|hgroup|hr|html|i|iframe|img|input|ins|kbd|keygen|label|legend|li|link|map|mark|meta|meter|nav|noframes|noscript|object|ol|optgroup|option|output|p|param|pre|progress|q|rp|rt|ruby|samp|script|section|select|small|span|strike|strong|style|sub|sup|table|tbody|td|textarea|tfoot|th|thead|time|title|tr|tt|ul|var|video)\\\\b\",r:0},{cN:\"pseudo\",b:\":(visited|valid|root|right|required|read-write|read-only|out-range|optional|only-of-type|only-child|nth-of-type|nth-last-of-type|nth-last-child|nth-child|not|link|left|last-of-type|last-child|lang|invalid|indeterminate|in-range|hover|focus|first-of-type|first-line|first-letter|first-child|first|enabled|empty|disabled|default|checked|before|after|active)\"},{cN:\"pseudo\",b:\"::(after|before|choices|first-letter|first-line|repeat-index|repeat-item|selection|value)\"},f,{cN:\"attribute\",b:\"\\\\b(z-index|word-wrap|word-spacing|word-break|width|widows|white-space|visibility|vertical-align|unicode-bidi|transition-timing-function|transition-property|transition-duration|transition-delay|transition|transform-style|transform-origin|transform|top|text-underline-position|text-transform|text-shadow|text-rendering|text-overflow|text-indent|text-decoration-style|text-decoration-line|text-decoration-color|text-decoration|text-align-last|text-align|tab-size|table-layout|right|resize|quotes|position|pointer-events|perspective-origin|perspective|page-break-inside|page-break-before|page-break-after|padding-top|padding-right|padding-left|padding-bottom|padding|overflow-y|overflow-x|overflow-wrap|overflow|outline-width|outline-style|outline-offset|outline-color|outline|orphans|order|opacity|object-position|object-fit|normal|none|nav-up|nav-right|nav-left|nav-index|nav-down|min-width|min-height|max-width|max-height|mask|marks|margin-top|margin-right|margin-left|margin-bottom|margin|list-style-type|list-style-position|list-style-image|list-style|line-height|letter-spacing|left|justify-content|initial|inherit|ime-mode|image-orientation|image-resolution|image-rendering|icon|hyphens|height|font-weight|font-variant-ligatures|font-variant|font-style|font-stretch|font-size-adjust|font-size|font-language-override|font-kerning|font-feature-settings|font-family|font|float|flex-wrap|flex-shrink|flex-grow|flex-flow|flex-direction|flex-basis|flex|filter|empty-cells|display|direction|cursor|counter-reset|counter-increment|content|column-width|column-span|column-rule-width|column-rule-style|column-rule-color|column-rule|column-gap|column-fill|column-count|columns|color|clip-path|clip|clear|caption-side|break-inside|break-before|break-after|box-sizing|box-shadow|box-decoration-break|bottom|border-width|border-top-width|border-top-style|border-top-right-radius|border-top-left-radius|border-top-color|border-top|border-style|border-spacing|border-right-width|border-right-style|border-right-color|border-right|border-radius|border-left-width|border-left-style|border-left-color|border-left|border-image-width|border-image-source|border-image-slice|border-image-repeat|border-image-outset|border-image|border-color|border-collapse|border-bottom-width|border-bottom-style|border-bottom-right-radius|border-bottom-left-radius|border-bottom-color|border-bottom|border|background-size|background-repeat|background-position|background-origin|background-image|background-color|background-clip|background-attachment|background|backface-visibility|auto|animation-timing-function|animation-play-state|animation-name|animation-iteration-count|animation-fill-mode|animation-duration|animation-direction|animation-delay|animation|align-self|align-items|align-content)\\\\b\",i:\"[^\\\\s]\"},{cN:\"value\",b:\"\\\\b(whitespace|wait|w-resize|visible|vertical-text|vertical-ideographic|uppercase|upper-roman|upper-alpha|underline|transparent|top|thin|thick|text|text-top|text-bottom|tb-rl|table-header-group|table-footer-group|sw-resize|super|strict|static|square|solid|small-caps|separate|se-resize|scroll|s-resize|rtl|row-resize|ridge|right|repeat|repeat-y|repeat-x|relative|progress|pointer|overline|outside|outset|oblique|nowrap|not-allowed|normal|none|nw-resize|no-repeat|no-drop|newspaper|ne-resize|n-resize|move|middle|medium|ltr|lr-tb|lowercase|lower-roman|lower-alpha|loose|list-item|line|line-through|line-edge|lighter|left|keep-all|justify|italic|inter-word|inter-ideograph|inside|inset|inline|inline-block|inherit|inactive|ideograph-space|ideograph-parenthesis|ideograph-numeric|ideograph-alpha|horizontal|hidden|help|hand|groove|fixed|ellipsis|e-resize|double|dotted|distribute|distribute-space|distribute-letter|distribute-all-lines|disc|disabled|default|decimal|dashed|crosshair|collapse|col-resize|circle|char|center|capitalize|break-word|break-all|bottom|both|bolder|bold|block|bidi-override|below|baseline|auto|always|all-scroll|absolute|table|table-cell)\\\\b\"},{cN:\"value\",b:\":\",e:\";\",c:[d,f,b,a.CSSNM,a.QSM,a.ASM,{cN:\"important\",b:\"!important\"}]},{cN:\"at_rule\",b:\"@\",e:\"[{;]\",k:\"mixin include extend for if else each while charset import debug media page content font-face namespace warn\",c:[d,f,a.QSM,a.ASM,b,a.CSSNM,{cN:\"preprocessor\",b:\"\\\\s[A-Za-z0-9_.-]+\",r:0}]}]}});hljs.registerLanguage(\"monkey\",function(a){var b={v:[{cN:\"number\",b:\"[$][a-fA-F0-9]+\"},a.NM]};return{cI:true,k:{keyword:\"public private property continue exit extern new try catch eachin not abstract final select case default const local global field end if then else elseif endif while wend repeat until forever for to step next return module inline throw\",built_in:\"DebugLog DebugStop Error Print ACos ACosr ASin ASinr ATan ATan2 ATan2r ATanr Abs Abs Ceil Clamp Clamp Cos Cosr Exp Floor Log Max Max Min Min Pow Sgn Sgn Sin Sinr Sqrt Tan Tanr Seed PI HALFPI TWOPI\",literal:\"true false null and or shl shr mod\"},c:[{cN:\"comment\",b:\"#rem\",e:\"#end\"},{cN:\"comment\",b:\"'\",e:\"$\",r:0},{cN:\"function\",bK:\"function method\",e:\"[(=:]|$\",i:/\\n/,c:[a.UTM,]},{cN:\"class\",bK:\"class interface\",e:\"$\",c:[{bK:\"extends implements\"},a.UTM]},{cN:\"variable\",b:\"\\\\b(self|super)\\\\b\"},{cN:\"preprocessor\",bK:\"import\",e:\"$\"},{cN:\"preprocessor\",b:\"\\\\s*#\",e:\"$\",k:\"if else elseif endif end then\"},{cN:\"pi\",b:\"^\\\\s*strict\\\\b\"},{bK:\"alias\",e:\"=\",c:[a.UTM]},a.QSM,b]}});hljs.registerLanguage(\"applescript\",function(a){var b=a.inherit(a.QSM,{i:\"\"});var d={cN:\"params\",b:\"\\\\(\",e:\"\\\\)\",c:[\"self\",a.CNM,b]};var c=[{cN:\"comment\",b:\"--\",e:\"$\"},{cN:\"comment\",b:\"\\\\(\\\\*\",e:\"\\\\*\\\\)\",c:[\"self\",{b:\"--\",e:\"$\"}]},a.HCM];return{aliases:[\"osascript\"],k:{keyword:\"about above after against and around as at back before beginning behind below beneath beside between but by considering contain contains continue copy div does eighth else end equal equals error every exit fifth first for fourth from front get given global if ignoring in into is it its last local me middle mod my ninth not of on onto or over prop property put ref reference repeat returning script second set seventh since sixth some tell tenth that the|0 then third through thru timeout times to transaction try until where while whose with without\",constant:\"AppleScript false linefeed return pi quote result space tab true\",type:\"alias application boolean class constant date file integer list number real record string text\",command:\"activate beep count delay launch log offset read round run say summarize write\",property:\"character characters contents day frontmost id item length month name paragraph paragraphs rest reverse running time version weekday word words year\"},c:[b,a.CNM,{cN:\"type\",b:\"\\\\bPOSIX file\\\\b\"},{cN:\"command\",b:\"\\\\b(clipboard info|the clipboard|info for|list (disks|folder)|mount volume|path to|(close|open for) access|(get|set) eof|current date|do shell script|get volume settings|random number|set volume|system attribute|system info|time to GMT|(load|run|store) script|scripting components|ASCII (character|number)|localized string|choose (application|color|file|file name|folder|from list|remote application|URL)|display (alert|dialog))\\\\b|^\\\\s*return\\\\b\"},{cN:\"constant\",b:\"\\\\b(text item delimiters|current application|missing value)\\\\b\"},{cN:\"keyword\",b:\"\\\\b(apart from|aside from|instead of|out of|greater than|isn't|(doesn't|does not) (equal|come before|come after|contain)|(greater|less) than( or equal)?|(starts?|ends|begins?) with|contained by|comes (before|after)|a (ref|reference))\\\\b\"},{cN:\"property\",b:\"\\\\b(POSIX path|(date|time) string|quoted form)\\\\b\"},{cN:\"function_start\",bK:\"on\",i:\"[${=;\\\\n]\",c:[a.UTM,d]}].concat(c),i:\"//\"}});hljs.registerLanguage(\"lasso\",function(d){var b=\"[a-zA-Z_][a-zA-Z0-9_.]*\";var i=\"<\\\\?(lasso(script)?|=)\";var c=\"\\\\]|\\\\?>\";var g={literal:\"true false none minimal full all void and or not bw nbw ew new cn ncn lt lte gt gte eq neq rx nrx ft\",built_in:\"array date decimal duration integer map pair string tag xml null bytes list queue set stack staticarray tie local var variable global data self inherited\",keyword:\"error_code error_msg error_pop error_push error_reset cache database_names database_schemanames database_tablenames define_tag define_type email_batch encode_set html_comment handle handle_error header if inline iterate ljax_target link link_currentaction link_currentgroup link_currentrecord link_detail link_firstgroup link_firstrecord link_lastgroup link_lastrecord link_nextgroup link_nextrecord link_prevgroup link_prevrecord log loop namespace_using output_none portal private protect records referer referrer repeating resultset rows search_args search_arguments select sort_args sort_arguments thread_atomic value_list while abort case else if_empty if_false if_null if_true loop_abort loop_continue loop_count params params_up return return_value run_children soap_definetag soap_lastrequest soap_lastresponse tag_name ascending average by define descending do equals frozen group handle_failure import in into join let match max min on order parent protected provide public require returnhome skip split_thread sum take thread to trait type where with yield yieldhome\"};var a={cN:\"comment\",b:\"<!--\",e:\"-->\",r:0};var j={cN:\"preprocessor\",b:\"\\\\[noprocess\\\\]\",starts:{cN:\"markup\",e:\"\\\\[/noprocess\\\\]\",rE:true,c:[a]}};var e={cN:\"preprocessor\",b:\"\\\\[/noprocess|\"+i};var h={cN:\"variable\",b:\"'\"+b+\"'\"};var f=[d.CLCM,{cN:\"javadoc\",b:\"/\\\\*\\\\*!\",e:\"\\\\*/\",c:[d.PWM]},d.CBCM,d.inherit(d.CNM,{b:d.CNR+\"|-?(infinity|nan)\\\\b\"}),d.inherit(d.ASM,{i:null}),d.inherit(d.QSM,{i:null}),{cN:\"string\",b:\"`\",e:\"`\"},{cN:\"variable\",v:[{b:\"[#$]\"+b},{b:\"#\",e:\"\\\\d+\",i:\"\\\\W\"}]},{cN:\"tag\",b:\"::\\\\s*\",e:b,i:\"\\\\W\"},{cN:\"attribute\",v:[{b:\"-\"+d.UIR,r:0},{b:\"(\\\\.\\\\.\\\\.)\"}]},{cN:\"subst\",v:[{b:\"->\\\\s*\",c:[h]},{b:\":=|/(?!\\\\w)=?|[-+*%=<>&|!?\\\\\\\\]+\",r:0}]},{cN:\"built_in\",b:\"\\\\.\\\\.?\",r:0,c:[h]},{cN:\"class\",bK:\"define\",rE:true,e:\"\\\\(|=>\",c:[d.inherit(d.TM,{b:d.UIR+\"(=(?!>))?\"})]}];return{aliases:[\"ls\",\"lassoscript\"],cI:true,l:b+\"|&[lg]t;\",k:g,c:[{cN:\"preprocessor\",b:c,r:0,starts:{cN:\"markup\",e:\"\\\\[|\"+i,rE:true,r:0,c:[a]}},j,e,{cN:\"preprocessor\",b:\"\\\\[no_square_brackets\",starts:{e:\"\\\\[/no_square_brackets\\\\]\",l:b+\"|&[lg]t;\",k:g,c:[{cN:\"preprocessor\",b:c,r:0,starts:{cN:\"markup\",e:i,rE:true,c:[a]}},j,e].concat(f)}},{cN:\"preprocessor\",b:\"\\\\[\",r:0},{cN:\"shebang\",b:\"^#!.+lasso9\\\\b\",r:10}].concat(f)}});hljs.registerLanguage(\"cpp\",function(a){var b={keyword:\"false int float while private char catch export virtual operator sizeof dynamic_cast|10 typedef const_cast|10 const struct for static_cast|10 union namespace unsigned long throw volatile static protected bool template mutable if public friend do return goto auto void enum else break new extern using true class asm case typeid short reinterpret_cast|10 default double register explicit signed typename try this switch continue wchar_t inline delete alignof char16_t char32_t constexpr decltype noexcept nullptr static_assert thread_local restrict _Bool complex _Complex _Imaginary\",built_in:\"std string cin cout cerr clog stringstream istringstream ostringstream auto_ptr deque list queue stack vector map set bitset multiset multimap unordered_set unordered_map unordered_multiset unordered_multimap array shared_ptr abort abs acos asin atan2 atan calloc ceil cosh cos exit exp fabs floor fmod fprintf fputs free frexp fscanf isalnum isalpha iscntrl isdigit isgraph islower isprint ispunct isspace isupper isxdigit tolower toupper labs ldexp log10 log malloc memchr memcmp memcpy memset modf pow printf putchar puts scanf sinh sin snprintf sprintf sqrt sscanf strcat strchr strcmp strcpy strcspn strlen strncat strncmp strncpy strpbrk strrchr strspn strstr tanh tan vfprintf vprintf vsprintf\"};return{aliases:[\"c\",\"h\",\"c++\",\"h++\"],k:b,i:\"</\",c:[a.CLCM,a.CBCM,a.QSM,{cN:\"string\",b:\"'\\\\\\\\?.\",e:\"'\",i:\".\"},{cN:\"number\",b:\"\\\\b(\\\\d+(\\\\.\\\\d*)?|\\\\.\\\\d+)(u|U|l|L|ul|UL|f|F)\"},a.CNM,{cN:\"preprocessor\",b:\"#\",e:\"$\",k:\"if else elif endif define undef warning error line pragma\",c:[{b:'include\\\\s*[<\"]',e:'[>\"]',k:\"include\",i:\"\\\\n\"},a.CLCM]},{cN:\"stl_container\",b:\"\\\\b(deque|list|queue|stack|vector|map|set|bitset|multiset|multimap|unordered_map|unordered_set|unordered_multiset|unordered_multimap|array)\\\\s*<\",e:\">\",k:b,c:[\"self\"]},{b:a.IR+\"::\"}]}});hljs.registerLanguage(\"matlab\",function(a){var b=[a.CNM,{cN:\"string\",b:\"'\",e:\"'\",c:[a.BE,{b:\"''\"}]}];return{k:{keyword:\"break case catch classdef continue else elseif end enumerated events for function global if methods otherwise parfor persistent properties return spmd switch try while\",built_in:\"sin sind sinh asin asind asinh cos cosd cosh acos acosd acosh tan tand tanh atan atand atan2 atanh sec secd sech asec asecd asech csc cscd csch acsc acscd acsch cot cotd coth acot acotd acoth hypot exp expm1 log log1p log10 log2 pow2 realpow reallog realsqrt sqrt nthroot nextpow2 abs angle complex conj imag real unwrap isreal cplxpair fix floor ceil round mod rem sign airy besselj bessely besselh besseli besselk beta betainc betaln ellipj ellipke erf erfc erfcx erfinv expint gamma gammainc gammaln psi legendre cross dot factor isprime primes gcd lcm rat rats perms nchoosek factorial cart2sph cart2pol pol2cart sph2cart hsv2rgb rgb2hsv zeros ones eye repmat rand randn linspace logspace freqspace meshgrid accumarray size length ndims numel disp isempty isequal isequalwithequalnans cat reshape diag blkdiag tril triu fliplr flipud flipdim rot90 find sub2ind ind2sub bsxfun ndgrid permute ipermute shiftdim circshift squeeze isscalar isvector ans eps realmax realmin pi i inf nan isnan isinf isfinite j why compan gallery hadamard hankel hilb invhilb magic pascal rosser toeplitz vander wilkinson\"},i:'(//|\"|#|/\\\\*|\\\\s+/\\\\w+)',c:[{cN:\"function\",bK:\"function\",e:\"$\",c:[a.UTM,{cN:\"params\",b:\"\\\\(\",e:\"\\\\)\"},{cN:\"params\",b:\"\\\\[\",e:\"\\\\]\"}]},{cN:\"transposed_variable\",b:\"[a-zA-Z_][a-zA-Z_0-9]*('+[\\\\.']*|[\\\\.']+)\",e:\"\",r:0},{cN:\"matrix\",b:\"\\\\[\",e:\"\\\\]'*[\\\\.']*\",c:b,r:0},{cN:\"cell\",b:\"\\\\{\",c:b,i:/:/,v:[{e:/\\}'[\\.']*/},{e:/\\}/,r:0}]},{cN:\"comment\",b:\"\\\\%\",e:\"$\"}].concat(b)}});hljs.registerLanguage(\"scilab\",function(a){var b=[a.CNM,{cN:\"string\",b:\"'|\\\"\",e:\"'|\\\"\",c:[a.BE,{b:\"''\"}]}];return{aliases:[\"sci\"],k:{keyword:\"abort break case clear catch continue do elseif else endfunction end for functionglobal if pause return resume select try then while%f %F %t %T %pi %eps %inf %nan %e %i %z %s\",built_in:\"abs and acos asin atan ceil cd chdir clearglobal cosh cos cumprod deff disp errorexec execstr exists exp eye gettext floor fprintf fread fsolve imag isdef isemptyisinfisnan isvector lasterror length load linspace list listfiles log10 log2 logmax min msprintf mclose mopen ones or pathconvert poly printf prod pwd rand realround sinh sin size gsort sprintf sqrt strcat strcmps tring sum system tanh tantype typename warning zeros matrix\"},i:'(\"|#|/\\\\*|\\\\s+/\\\\w+)',c:[{cN:\"function\",bK:\"function endfunction\",e:\"$\",k:\"function endfunction|10\",c:[a.UTM,{cN:\"params\",b:\"\\\\(\",e:\"\\\\)\"}]},{cN:\"transposed_variable\",b:\"[a-zA-Z_][a-zA-Z_0-9]*('+[\\\\.']*|[\\\\.']+)\",e:\"\",r:0},{cN:\"matrix\",b:\"\\\\[\",e:\"\\\\]'*[\\\\.']*\",r:0,c:b},{cN:\"comment\",b:\"//\",e:\"$\"}].concat(b)}});hljs.registerLanguage(\"makefile\",function(a){var b={cN:\"variable\",b:/\\$\\(/,e:/\\)/,c:[a.BE]};return{aliases:[\"mk\",\"mak\"],c:[a.HCM,{b:/^\\w+\\s*\\W*=/,rB:true,r:0,starts:{cN:\"constant\",e:/\\s*\\W*=/,eE:true,starts:{e:/$/,r:0,c:[b]}}},{cN:\"title\",b:/^[\\w]+:\\s*$/},{cN:\"phony\",b:/^\\.PHONY:/,e:/$/,k:\".PHONY\",l:/[\\.\\w]+/},{b:/^\\t+/,e:/$/,r:0,c:[a.QSM,b]}]}});hljs.registerLanguage(\"q\",function(a){var b={keyword:\"do while select delete by update from\",constant:\"0b 1b\",built_in:\"neg not null string reciprocal floor ceiling signum mod xbar xlog and or each scan over prior mmu lsq inv md5 ltime gtime count first var dev med cov cor all any rand sums prds mins maxs fills deltas ratios avgs differ prev next rank reverse iasc idesc asc desc msum mcount mavg mdev xrank mmin mmax xprev rotate distinct group where flip type key til get value attr cut set upsert raze union inter except cross sv vs sublist enlist read0 read1 hopen hclose hdel hsym hcount peach system ltrim rtrim trim lower upper ssr view tables views cols xcols keys xkey xcol xasc xdesc fkeys meta lj aj aj0 ij pj asof uj ww wj wj1 fby xgroup ungroup ej save load rsave rload show csv parse eval min max avg wavg wsum sin cos tan sum\",typename:\"`float `double int `timestamp `timespan `datetime `time `boolean `symbol `char `byte `short `long `real `month `date `minute `second `guid\"};return{aliases:[\"k\",\"kdb\"],k:b,l:/\\b(`?)[A-Za-z0-9_]+\\b/,c:[a.CLCM,a.QSM,a.CNM]}});hljs.registerLanguage(\"asciidoc\",function(a){return{c:[{cN:\"comment\",b:\"^/{4,}\\\\n\",e:\"\\\\n/{4,}$\",r:10},{cN:\"comment\",b:\"^//\",e:\"$\",r:0},{cN:\"title\",b:\"^\\\\.\\\\w.*$\"},{b:\"^[=\\\\*]{4,}\\\\n\",e:\"\\\\n^[=\\\\*]{4,}$\",r:10},{cN:\"header\",b:\"^(={1,5}) .+?( \\\\1)?$\",r:10},{cN:\"header\",b:\"^[^\\\\[\\\\]\\\\n]+?\\\\n[=\\\\-~\\\\^\\\\+]{2,}$\",r:10},{cN:\"attribute\",b:\"^:.+?:\",e:\"\\\\s\",eE:true,r:10},{cN:\"attribute\",b:\"^\\\\[.+?\\\\]$\",r:0},{cN:\"blockquote\",b:\"^_{4,}\\\\n\",e:\"\\\\n_{4,}$\",r:10},{cN:\"code\",b:\"^[\\\\-\\\\.]{4,}\\\\n\",e:\"\\\\n[\\\\-\\\\.]{4,}$\",r:10},{b:\"^\\\\+{4,}\\\\n\",e:\"\\\\n\\\\+{4,}$\",c:[{b:\"<\",e:\">\",sL:\"xml\",r:0}],r:10},{cN:\"bullet\",b:\"^(\\\\*+|\\\\-+|\\\\.+|[^\\\\n]+?::)\\\\s+\"},{cN:\"label\",b:\"^(NOTE|TIP|IMPORTANT|WARNING|CAUTION):\\\\s+\",r:10},{cN:\"strong\",b:\"\\\\B\\\\*(?![\\\\*\\\\s])\",e:\"(\\\\n{2}|\\\\*)\",c:[{b:\"\\\\\\\\*\\\\w\",r:0}]},{cN:\"emphasis\",b:\"\\\\B'(?!['\\\\s])\",e:\"(\\\\n{2}|')\",c:[{b:\"\\\\\\\\'\\\\w\",r:0}],r:0},{cN:\"emphasis\",b:\"_(?![_\\\\s])\",e:\"(\\\\n{2}|_)\",r:0},{cN:\"smartquote\",b:\"``.+?''\",r:10},{cN:\"smartquote\",b:\"`.+?'\",r:10},{cN:\"code\",b:\"(`.+?`|\\\\+.+?\\\\+)\",r:0},{cN:\"code\",b:\"^[ \\\\t]\",e:\"$\",r:0},{cN:\"horizontal_rule\",b:\"^'{3,}[ \\\\t]*$\",r:10},{b:\"(link:)?(http|https|ftp|file|irc|image:?):\\\\S+\\\\[.*?\\\\]\",rB:true,c:[{b:\"(link|image:?):\",r:0},{cN:\"link_url\",b:\"\\\\w\",e:\"[^\\\\[]+\",r:0},{cN:\"link_label\",b:\"\\\\[\",e:\"\\\\]\",eB:true,eE:true,r:0}],r:10}]}});hljs.registerLanguage(\"parser3\",function(a){return{sL:\"xml\",r:0,c:[{cN:\"comment\",b:\"^#\",e:\"$\"},{cN:\"comment\",b:\"\\\\^rem{\",e:\"}\",r:10,c:[{b:\"{\",e:\"}\",c:[\"self\"]}]},{cN:\"preprocessor\",b:\"^@(?:BASE|USE|CLASS|OPTIONS)$\",r:10},{cN:\"title\",b:\"@[\\\\w\\\\-]+\\\\[[\\\\w^;\\\\-]*\\\\](?:\\\\[[\\\\w^;\\\\-]*\\\\])?(?:.*)$\"},{cN:\"variable\",b:\"\\\\$\\\\{?[\\\\w\\\\-\\\\.\\\\:]+\\\\}?\"},{cN:\"keyword\",b:\"\\\\^[\\\\w\\\\-\\\\.\\\\:]+\"},{cN:\"number\",b:\"\\\\^#[0-9a-fA-F]+\"},a.CNM]}});hljs.registerLanguage(\"clojure\",function(j){var e={built_in:\"def cond apply if-not if-let if not not= = < > <= >= == + / * - rem quot neg? pos? delay? symbol? keyword? true? false? integer? empty? coll? list? set? ifn? fn? associative? sequential? sorted? counted? reversible? number? decimal? class? distinct? isa? float? rational? reduced? ratio? odd? even? char? seq? vector? string? map? nil? contains? zero? instance? not-every? not-any? libspec? -> ->> .. . inc compare do dotimes mapcat take remove take-while drop letfn drop-last take-last drop-while while intern condp case reduced cycle split-at split-with repeat replicate iterate range merge zipmap declare line-seq sort comparator sort-by dorun doall nthnext nthrest partition eval doseq await await-for let agent atom send send-off release-pending-sends add-watch mapv filterv remove-watch agent-error restart-agent set-error-handler error-handler set-error-mode! error-mode shutdown-agents quote var fn loop recur throw try monitor-enter monitor-exit defmacro defn defn- macroexpand macroexpand-1 for dosync and or when when-not when-let comp juxt partial sequence memoize constantly complement identity assert peek pop doto proxy defstruct first rest cons defprotocol cast coll deftype defrecord last butlast sigs reify second ffirst fnext nfirst nnext defmulti defmethod meta with-meta ns in-ns create-ns import refer keys select-keys vals key val rseq name namespace promise into transient persistent! conj! assoc! dissoc! pop! disj! use class type num float double short byte boolean bigint biginteger bigdec print-method print-dup throw-if printf format load compile get-in update-in pr pr-on newline flush read slurp read-line subvec with-open memfn time re-find re-groups rand-int rand mod locking assert-valid-fdecl alias resolve ref deref refset swap! reset! set-validator! compare-and-set! alter-meta! reset-meta! commute get-validator alter ref-set ref-history-count ref-min-history ref-max-history ensure sync io! new next conj set! to-array future future-call into-array aset gen-class reduce map filter find empty hash-map hash-set sorted-map sorted-map-by sorted-set sorted-set-by vec vector seq flatten reverse assoc dissoc list disj get union difference intersection extend extend-type extend-protocol int nth delay count concat chunk chunk-buffer chunk-append chunk-first chunk-rest max min dec unchecked-inc-int unchecked-inc unchecked-dec-inc unchecked-dec unchecked-negate unchecked-add-int unchecked-add unchecked-subtract-int unchecked-subtract chunk-next chunk-cons chunked-seq? prn vary-meta lazy-seq spread list* str find-keyword keyword symbol gensym force rationalize\"};var f=\"[a-zA-Z_0-9\\\\!\\\\.\\\\?\\\\-\\\\+\\\\*\\\\/\\\\<\\\\=\\\\>\\\\&\\\\#\\\\$';]+\";var a=\"[\\\\s:\\\\(\\\\{]+\\\\d+(\\\\.\\\\d+)?\";var d={cN:\"number\",b:a,r:0};var i=j.inherit(j.QSM,{i:null});var n={cN:\"comment\",b:\";\",e:\"$\",r:0};var m={cN:\"collection\",b:\"[\\\\[\\\\{]\",e:\"[\\\\]\\\\}]\"};var c={cN:\"comment\",b:\"\\\\^\"+f};var b={cN:\"comment\",b:\"\\\\^\\\\{\",e:\"\\\\}\"};var h={cN:\"attribute\",b:\"[:]\"+f};var l={cN:\"list\",b:\"\\\\(\",e:\"\\\\)\"};var g={eW:true,k:{literal:\"true false nil\"},r:0};var o={k:e,l:f,cN:\"keyword\",b:f,starts:g};l.c=[{cN:\"comment\",b:\"comment\"},o,g];g.c=[l,i,c,b,n,h,m,d];m.c=[l,i,c,n,h,m,d];return{aliases:[\"clj\"],i:/\\S/,c:[n,l,{cN:\"prompt\",b:/^=> /,starts:{e:/\\n\\n|\\Z/}}]}});hljs.registerLanguage(\"elixir\",function(e){var f=\"[a-zA-Z_][a-zA-Z0-9_]*(\\\\!|\\\\?)?\";var g=\"[a-zA-Z_]\\\\w*[!?=]?|[-+~]\\\\@|<<|>>|=~|===?|<=>|[<>]=?|\\\\*\\\\*|[-/+%^&*~`|]|\\\\[\\\\]=?\";var i=\"and false then defined module in return redo retry end for true self when next until do begin unless nil break not case cond alias while ensure or include use alias fn quote\";var c={cN:\"subst\",b:\"#\\\\{\",e:\"}\",l:f,k:i};var d={cN:\"string\",c:[e.BE,c],v:[{b:/'/,e:/'/},{b:/\"/,e:/\"/}]};var b={eW:true,rE:true,l:f,k:i,r:0};var h={cN:\"function\",bK:\"def defmacro\",e:/\\bdo\\b/,c:[e.inherit(e.TM,{b:g,starts:b})]};var j=e.inherit(h,{cN:\"class\",bK:\"defmodule defrecord\",e:/\\bdo\\b|$|;/});var a=[d,e.HCM,j,h,{cN:\"constant\",b:\"(\\\\b[A-Z_]\\\\w*(.)?)+\",r:0},{cN:\"symbol\",b:\":\",c:[d,{b:g}],r:0},{cN:\"symbol\",b:f+\":\",r:0},{cN:\"number\",b:\"(\\\\b0[0-7_]+)|(\\\\b0x[0-9a-fA-F_]+)|(\\\\b[1-9][0-9_]*(\\\\.[0-9_]+)?)|[0_]\\\\b\",r:0},{cN:\"variable\",b:\"(\\\\$\\\\W)|((\\\\$|\\\\@\\\\@?)(\\\\w+))\"},{b:\"->\"},{b:\"(\"+e.RSR+\")\\\\s*\",c:[e.HCM,{cN:\"regexp\",i:\"\\\\n\",c:[e.BE,c],v:[{b:\"/\",e:\"/[a-z]*\"},{b:\"%r\\\\[\",e:\"\\\\][a-z]*\"}]}],r:0}];c.c=a;b.c=a;return{l:f,k:i,c:a}});hljs.registerLanguage(\"typescript\",function(a){return{aliases:[\"ts\"],k:{keyword:\"in if for while finally var new function|0 do return void else break catch instanceof with throw case default try this switch continue typeof delete let yield const class public private get set super interface extendsstatic constructor implements enum export import declare\",literal:\"true false null undefined NaN Infinity\",built_in:\"eval isFinite isNaN parseFloat parseInt decodeURI decodeURIComponent encodeURI encodeURIComponent escape unescape Object Function Boolean Error EvalError InternalError RangeError ReferenceError StopIteration SyntaxError TypeError URIError Number Math Date String RegExp Array Float32Array Float64Array Int16Array Int32Array Int8Array Uint16Array Uint32Array Uint8Array Uint8ClampedArray ArrayBuffer DataView JSON Intl arguments require module console window document any number boolean string void\",},c:[{cN:\"pi\",b:/^\\s*('|\")use strict('|\")/,r:0},a.ASM,a.QSM,a.CLCM,a.CBCM,a.CNM,{b:\"(\"+a.RSR+\"|\\\\b(case|return|throw)\\\\b)\\\\s*\",k:\"return throw case\",c:[a.CLCM,a.CBCM,a.RM,{b:/</,e:/>;/,r:0,sL:\"xml\"}],r:0},{cN:\"function\",bK:\"function\",e:/\\{/,eE:true,c:[a.inherit(a.TM,{b:/[A-Za-z$_][0-9A-Za-z$_]*/}),{cN:\"params\",b:/\\(/,e:/\\)/,c:[a.CLCM,a.CBCM],i:/[\"'\\(]/}],i:/\\[|%/,r:0},{cN:\"constructor\",bK:\"constructor\",e:/\\{/,eE:true,r:10},{cN:\"module\",bK:\"module\",e:/\\{/,eE:true,},{cN:\"interface\",bK:\"interface\",e:/\\{/,eE:true,},{b:/\\$[(.]/},{b:\"\\\\.\"+a.IR,r:0}]}});hljs.registerLanguage(\"go\",function(a){var b={keyword:\"break default func interface select case map struct chan else goto package switch const fallthrough if range type continue for import return var go defer\",constant:\"true false iota nil\",typename:\"bool byte complex64 complex128 float32 float64 int8 int16 int32 int64 string uint8 uint16 uint32 uint64 int uint uintptr rune\",built_in:\"append cap close complex copy imag len make new panic print println real recover delete\"};return{aliases:[\"golang\"],k:b,i:\"</\",c:[a.CLCM,a.CBCM,a.QSM,{cN:\"string\",b:\"'\",e:\"[^\\\\\\\\]'\"},{cN:\"string\",b:\"`\",e:\"`\"},{cN:\"number\",b:\"[^a-zA-Z_0-9](\\\\-|\\\\+)?\\\\d+(\\\\.\\\\d+|\\\\/\\\\d+)?((d|e|f|l|s)(\\\\+|\\\\-)?\\\\d+)?\",r:0},a.CNM]}});"
  },
  {
    "path": "presentation/plugin/leap/leap.js",
    "content": "/*\n * Copyright (c) 2013, Leap Motion, Inc.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:\n *\n * Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.\n * 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.\n * 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.\n *\n * Version 0.2.0 - http://js.leapmotion.com/0.2.0/leap.min.js\n * Grab latest versions from http://js.leapmotion.com/\n */\n\n!function(e,t,n){function i(n,s){if(!t[n]){if(!e[n]){var o=typeof require==\"function\"&&require;if(!s&&o)return o(n,!0);if(r)return r(n,!0);throw new Error(\"Cannot find module '\"+n+\"'\")}var u=t[n]={exports:{}};e[n][0].call(u.exports,function(t){var r=e[n][1][t];return i(r?r:t)},u,u.exports)}return t[n].exports}var r=typeof require==\"function\"&&require;for(var s=0;s<n.length;s++)i(n[s]);return i}({1:[function(require,module,exports){var chooseProtocol=require(\"./protocol\").chooseProtocol,EventEmitter=require(\"events\").EventEmitter,_=require(\"underscore\");var BaseConnection=module.exports=function(opts){this.opts=_.defaults(opts||{},{host:\"127.0.0.1\",enableGestures:false,port:6437,enableHeartbeat:true,heartbeatInterval:100,requestProtocolVersion:3});this.host=opts.host;this.port=opts.port;this.on(\"ready\",function(){this.enableGestures(this.opts.enableGestures);if(this.opts.enableHeartbeat)this.startHeartbeat()});this.on(\"disconnect\",function(){if(this.opts.enableHeartbeat)this.stopHeartbeat()});this.heartbeatTimer=null};BaseConnection.prototype.getUrl=function(){return\"ws://\"+this.host+\":\"+this.port+\"/v\"+this.opts.requestProtocolVersion+\".json\"};BaseConnection.prototype.sendHeartbeat=function(){if(this.protocol){this.setHeartbeatState(true);this.protocol.sendHeartbeat(this)}};BaseConnection.prototype.handleOpen=function(){this.emit(\"connect\")};BaseConnection.prototype.enableGestures=function(enabled){this.gesturesEnabled=enabled?true:false;this.send(this.protocol.encode({enableGestures:this.gesturesEnabled}))};BaseConnection.prototype.handleClose=function(){this.disconnect();this.startReconnection()};BaseConnection.prototype.startReconnection=function(){var connection=this;setTimeout(function(){connection.connect()},1e3)};BaseConnection.prototype.disconnect=function(){if(!this.socket)return;this.socket.close();delete this.socket;delete this.protocol;this.emit(\"disconnect\")};BaseConnection.prototype.handleData=function(data){var message=JSON.parse(data);var messageEvent;if(this.protocol===undefined){messageEvent=this.protocol=chooseProtocol(message);this.emit(\"ready\")}else{messageEvent=this.protocol(message)}this.emit(messageEvent.type,messageEvent)};BaseConnection.prototype.connect=function(){if(this.socket)return;this.socket=this.setupSocket();return true};BaseConnection.prototype.send=function(data){this.socket.send(data)};BaseConnection.prototype.stopHeartbeat=function(){if(!this.heartbeatTimer)return;clearInterval(this.heartbeatTimer);delete this.heartbeatTimer;this.setHeartbeatState(false)};BaseConnection.prototype.setHeartbeatState=function(state){if(this.heartbeatState===state)return;this.heartbeatState=state;this.emit(this.heartbeatState?\"focus\":\"blur\")};_.extend(BaseConnection.prototype,EventEmitter.prototype)},{\"./protocol\":12,events:17,underscore:20}],2:[function(require,module,exports){var CircularBuffer=module.exports=function(size){this.pos=0;this._buf=[];this.size=size};CircularBuffer.prototype.get=function(i){if(i==undefined)i=0;if(i>=this.size)return undefined;if(i>=this._buf.length)return undefined;return this._buf[(this.pos-i-1)%this.size]};CircularBuffer.prototype.push=function(o){this._buf[this.pos%this.size]=o;return this.pos++}},{}],3:[function(require,module,exports){var Connection=module.exports=require(\"./base_connection\");Connection.prototype.setupSocket=function(){var connection=this;var socket=new WebSocket(this.getUrl());socket.onopen=function(){connection.handleOpen()};socket.onmessage=function(message){connection.handleData(message.data)};socket.onclose=function(){connection.handleClose()};return socket};Connection.prototype.startHeartbeat=function(){if(!this.protocol.sendHeartbeat||this.heartbeatTimer)return;var connection=this;var propertyName=null;if(typeof document.hidden!==\"undefined\"){propertyName=\"hidden\"}else if(typeof document.mozHidden!==\"undefined\"){propertyName=\"mozHidden\"}else if(typeof document.msHidden!==\"undefined\"){propertyName=\"msHidden\"}else if(typeof document.webkitHidden!==\"undefined\"){propertyName=\"webkitHidden\"}else{propertyName=undefined}var windowVisible=true;var focusListener=window.addEventListener(\"focus\",function(e){windowVisible=true});var blurListener=window.addEventListener(\"blur\",function(e){windowVisible=false});this.on(\"disconnect\",function(){if(connection.heartbeatTimer){clearTimeout(connection.heartbeatTimer);delete connection.heartbeatTimer}window.removeEventListener(focusListener);window.removeEventListener(blurListener)});this.heartbeatTimer=setInterval(function(){var isVisible=propertyName===undefined?true:document[propertyName]===false;if(isVisible&&windowVisible){connection.sendHeartbeat()}else{connection.setHeartbeatState(false)}},this.opts.heartbeatInterval)}},{\"./base_connection\":1}],4:[function(require,module,exports){!function(process){var Frame=require(\"./frame\"),CircularBuffer=require(\"./circular_buffer\"),Pipeline=require(\"./pipeline\"),EventEmitter=require(\"events\").EventEmitter,gestureListener=require(\"./gesture\").gestureListener,_=require(\"underscore\");var Controller=module.exports=function(opts){var inNode=typeof process!==\"undefined\"&&process.title===\"node\";opts=_.defaults(opts||{},{inNode:inNode});this.inNode=opts.inNode;opts=_.defaults(opts||{},{frameEventName:this.useAnimationLoop()?\"animationFrame\":\"deviceFrame\",supressAnimationLoop:false});this.supressAnimationLoop=opts.supressAnimationLoop;this.frameEventName=opts.frameEventName;this.history=new CircularBuffer(200);this.lastFrame=Frame.Invalid;this.lastValidFrame=Frame.Invalid;this.lastConnectionFrame=Frame.Invalid;this.accumulatedGestures=[];if(opts.connectionType===undefined){this.connectionType=this.inBrowser()?require(\"./connection\"):require(\"./node_connection\")}else{this.connectionType=opts.connectionType}this.connection=new this.connectionType(opts);this.setupConnectionEvents()};Controller.prototype.gesture=function(type,cb){var creator=gestureListener(this,type);if(cb!==undefined){creator.stop(cb)}return creator};Controller.prototype.inBrowser=function(){return!this.inNode};Controller.prototype.useAnimationLoop=function(){return this.inBrowser()&&typeof chrome===\"undefined\"};Controller.prototype.connect=function(){var controller=this;if(this.connection.connect()&&this.inBrowser()&&!controller.supressAnimationLoop){var callback=function(){controller.emit(\"animationFrame\",controller.lastConnectionFrame);window.requestAnimFrame(callback)};window.requestAnimFrame(callback)}};Controller.prototype.disconnect=function(){this.connection.disconnect()};Controller.prototype.frame=function(num){return this.history.get(num)||Frame.Invalid};Controller.prototype.loop=function(callback){switch(callback.length){case 1:this.on(this.frameEventName,callback);break;case 2:var controller=this;var scheduler=null;var immediateRunnerCallback=function(frame){callback(frame,function(){if(controller.lastFrame!=frame){immediateRunnerCallback(controller.lastFrame)}else{controller.once(controller.frameEventName,immediateRunnerCallback)}})};this.once(this.frameEventName,immediateRunnerCallback);break}this.connect()};Controller.prototype.addStep=function(step){if(!this.pipeline)this.pipeline=new Pipeline(this);this.pipeline.addStep(step)};Controller.prototype.processFrame=function(frame){if(frame.gestures){this.accumulatedGestures=this.accumulatedGestures.concat(frame.gestures)}if(this.pipeline){frame=this.pipeline.run(frame);if(!frame)frame=Frame.Invalid}this.lastConnectionFrame=frame;this.emit(\"deviceFrame\",frame)};Controller.prototype.processFinishedFrame=function(frame){this.lastFrame=frame;if(frame.valid){this.lastValidFrame=frame}frame.controller=this;frame.historyIdx=this.history.push(frame);if(frame.gestures){frame.gestures=this.accumulatedGestures;this.accumulatedGestures=[];for(var gestureIdx=0;gestureIdx!=frame.gestures.length;gestureIdx++){this.emit(\"gesture\",frame.gestures[gestureIdx],frame)}}this.emit(\"frame\",frame)};Controller.prototype.setupConnectionEvents=function(){var controller=this;this.connection.on(\"frame\",function(frame){controller.processFrame(frame)});this.on(this.frameEventName,function(frame){controller.processFinishedFrame(frame)});this.connection.on(\"disconnect\",function(){controller.emit(\"disconnect\")});this.connection.on(\"ready\",function(){controller.emit(\"ready\")});this.connection.on(\"connect\",function(){controller.emit(\"connect\")});this.connection.on(\"focus\",function(){controller.emit(\"focus\")});this.connection.on(\"blur\",function(){controller.emit(\"blur\")});this.connection.on(\"protocol\",function(protocol){controller.emit(\"protocol\",protocol)});this.connection.on(\"deviceConnect\",function(evt){controller.emit(evt.state?\"deviceConnected\":\"deviceDisconnected\")})};_.extend(Controller.prototype,EventEmitter.prototype)}(require(\"__browserify_process\"))},{\"./circular_buffer\":2,\"./connection\":3,\"./frame\":5,\"./gesture\":6,\"./node_connection\":16,\"./pipeline\":10,__browserify_process:18,events:17,underscore:20}],5:[function(require,module,exports){var Hand=require(\"./hand\"),Pointable=require(\"./pointable\"),createGesture=require(\"./gesture\").createGesture,glMatrix=require(\"gl-matrix\"),mat3=glMatrix.mat3,vec3=glMatrix.vec3,InteractionBox=require(\"./interaction_box\"),_=require(\"underscore\");var Frame=module.exports=function(data){this.valid=true;this.id=data.id;this.timestamp=data.timestamp;this.hands=[];this.handsMap={};this.pointables=[];this.tools=[];this.fingers=[];if(data.interactionBox){this.interactionBox=new InteractionBox(data.interactionBox)}this.gestures=[];this.pointablesMap={};this._translation=data.t;this._rotation=_.flatten(data.r);this._scaleFactor=data.s;this.data=data;this.type=\"frame\";this.currentFrameRate=data.currentFrameRate;var handMap={};for(var handIdx=0,handCount=data.hands.length;handIdx!=handCount;handIdx++){var hand=new Hand(data.hands[handIdx]);hand.frame=this;this.hands.push(hand);this.handsMap[hand.id]=hand;handMap[hand.id]=handIdx}for(var pointableIdx=0,pointableCount=data.pointables.length;pointableIdx!=pointableCount;pointableIdx++){var pointable=new Pointable(data.pointables[pointableIdx]);pointable.frame=this;this.pointables.push(pointable);this.pointablesMap[pointable.id]=pointable;(pointable.tool?this.tools:this.fingers).push(pointable);if(pointable.handId!==undefined&&handMap.hasOwnProperty(pointable.handId)){var hand=this.hands[handMap[pointable.handId]];hand.pointables.push(pointable);(pointable.tool?hand.tools:hand.fingers).push(pointable)}}if(data.gestures){for(var gestureIdx=0,gestureCount=data.gestures.length;gestureIdx!=gestureCount;gestureIdx++){this.gestures.push(createGesture(data.gestures[gestureIdx]))}}};Frame.prototype.tool=function(id){var pointable=this.pointable(id);return pointable.tool?pointable:Pointable.Invalid};Frame.prototype.pointable=function(id){return this.pointablesMap[id]||Pointable.Invalid};Frame.prototype.finger=function(id){var pointable=this.pointable(id);return!pointable.tool?pointable:Pointable.Invalid};Frame.prototype.hand=function(id){return this.handsMap[id]||Hand.Invalid};Frame.prototype.rotationAngle=function(sinceFrame,axis){if(!this.valid||!sinceFrame.valid)return 0;var rot=this.rotationMatrix(sinceFrame);var cs=(rot[0]+rot[4]+rot[8]-1)*.5;var angle=Math.acos(cs);angle=isNaN(angle)?0:angle;if(axis!==undefined){var rotAxis=this.rotationAxis(sinceFrame);angle*=vec3.dot(rotAxis,vec3.normalize(vec3.create(),axis))}return angle};Frame.prototype.rotationAxis=function(sinceFrame){if(!this.valid||!sinceFrame.valid)return vec3.create();return vec3.normalize(vec3.create(),[this._rotation[7]-sinceFrame._rotation[5],this._rotation[2]-sinceFrame._rotation[6],this._rotation[3]-sinceFrame._rotation[1]])};Frame.prototype.rotationMatrix=function(sinceFrame){if(!this.valid||!sinceFrame.valid)return mat3.create();var transpose=mat3.transpose(mat3.create(),this._rotation);return mat3.multiply(mat3.create(),sinceFrame._rotation,transpose)};Frame.prototype.scaleFactor=function(sinceFrame){if(!this.valid||!sinceFrame.valid)return 1;return Math.exp(this._scaleFactor-sinceFrame._scaleFactor)};Frame.prototype.translation=function(sinceFrame){if(!this.valid||!sinceFrame.valid)return vec3.create();return vec3.subtract(vec3.create(),this._translation,sinceFrame._translation)};Frame.prototype.toString=function(){var str=\"Frame [ id:\"+this.id+\" | timestamp:\"+this.timestamp+\" | Hand count:(\"+this.hands.length+\") | Pointable count:(\"+this.pointables.length+\")\";if(this.gestures)str+=\" | Gesture count:(\"+this.gestures.length+\")\";str+=\" ]\";return str};Frame.prototype.dump=function(){var out=\"\";out+=\"Frame Info:<br/>\";out+=this.toString();out+=\"<br/><br/>Hands:<br/>\";for(var handIdx=0,handCount=this.hands.length;handIdx!=handCount;handIdx++){out+=\"  \"+this.hands[handIdx].toString()+\"<br/>\"}out+=\"<br/><br/>Pointables:<br/>\";for(var pointableIdx=0,pointableCount=this.pointables.length;pointableIdx!=pointableCount;pointableIdx++){out+=\"  \"+this.pointables[pointableIdx].toString()+\"<br/>\"}if(this.gestures){out+=\"<br/><br/>Gestures:<br/>\";for(var gestureIdx=0,gestureCount=this.gestures.length;gestureIdx!=gestureCount;gestureIdx++){out+=\"  \"+this.gestures[gestureIdx].toString()+\"<br/>\"}}out+=\"<br/><br/>Raw JSON:<br/>\";out+=JSON.stringify(this.data);return out};Frame.Invalid={valid:false,hands:[],fingers:[],tools:[],gestures:[],pointables:[],pointable:function(){return Pointable.Invalid},finger:function(){return Pointable.Invalid},hand:function(){return Hand.Invalid},toString:function(){return\"invalid frame\"},dump:function(){return this.toString()},rotationAngle:function(){return 0},rotationMatrix:function(){return mat3.create()},rotationAxis:function(){return vec3.create()},scaleFactor:function(){return 1},translation:function(){return vec3.create()}}},{\"./gesture\":6,\"./hand\":7,\"./interaction_box\":9,\"./pointable\":11,\"gl-matrix\":19,underscore:20}],6:[function(require,module,exports){var glMatrix=require(\"gl-matrix\"),vec3=glMatrix.vec3,EventEmitter=require(\"events\").EventEmitter,_=require(\"underscore\");var createGesture=exports.createGesture=function(data){var gesture;switch(data.type){case\"circle\":gesture=new CircleGesture(data);break;case\"swipe\":gesture=new SwipeGesture(data);break;case\"screenTap\":gesture=new ScreenTapGesture(data);break;case\"keyTap\":gesture=new KeyTapGesture(data);break;default:throw\"unkown gesture type\"}gesture.id=data.id;gesture.handIds=data.handIds;gesture.pointableIds=data.pointableIds;gesture.duration=data.duration;gesture.state=data.state;gesture.type=data.type;return gesture};var gestureListener=exports.gestureListener=function(controller,type){var handlers={};var gestureMap={};var gestureCreator=function(){var candidateGesture=gestureMap[gesture.id];if(candidateGesture!==undefined)gesture.update(gesture,frame);if(gesture.state==\"start\"||gesture.state==\"stop\"){if(type==gesture.type&&gestureMap[gesture.id]===undefined){gestureMap[gesture.id]=new Gesture(gesture,frame);gesture.update(gesture,frame)}if(gesture.state==\"stop\"){delete gestureMap[gesture.id]}}};controller.on(\"gesture\",function(gesture,frame){if(gesture.type==type){if(gesture.state==\"start\"||gesture.state==\"stop\"){if(gestureMap[gesture.id]===undefined){var gestureTracker=new Gesture(gesture,frame);gestureMap[gesture.id]=gestureTracker;_.each(handlers,function(cb,name){gestureTracker.on(name,cb)})}}gestureMap[gesture.id].update(gesture,frame);if(gesture.state==\"stop\"){delete gestureMap[gesture.id]}}});var builder={start:function(cb){handlers[\"start\"]=cb;return builder},stop:function(cb){handlers[\"stop\"]=cb;return builder},complete:function(cb){handlers[\"stop\"]=cb;return builder},update:function(cb){handlers[\"update\"]=cb;return builder}};return builder};var Gesture=exports.Gesture=function(gesture,frame){this.gestures=[gesture];this.frames=[frame]};Gesture.prototype.update=function(gesture,frame){this.gestures.push(gesture);this.frames.push(frame);this.emit(gesture.state,this)};_.extend(Gesture.prototype,EventEmitter.prototype);var CircleGesture=function(data){this.center=data.center;this.normal=data.normal;this.progress=data.progress;this.radius=data.radius};CircleGesture.prototype.toString=function(){return\"CircleGesture [\"+JSON.stringify(this)+\"]\"};var SwipeGesture=function(data){this.startPosition=data.startPosition;this.position=data.position;this.direction=data.direction;this.speed=data.speed};SwipeGesture.prototype.toString=function(){return\"SwipeGesture [\"+JSON.stringify(this)+\"]\"};var ScreenTapGesture=function(data){this.position=data.position;this.direction=data.direction;this.progress=data.progress};ScreenTapGesture.prototype.toString=function(){return\"ScreenTapGesture [\"+JSON.stringify(this)+\"]\"};var KeyTapGesture=function(data){this.position=data.position;this.direction=data.direction;this.progress=data.progress};KeyTapGesture.prototype.toString=function(){return\"KeyTapGesture [\"+JSON.stringify(this)+\"]\"}},{events:17,\"gl-matrix\":19,underscore:20}],7:[function(require,module,exports){var Pointable=require(\"./pointable\"),glMatrix=require(\"gl-matrix\"),mat3=glMatrix.mat3,vec3=glMatrix.vec3,_=require(\"underscore\");var Hand=module.exports=function(data){this.id=data.id;this.palmPosition=data.palmPosition;this.direction=data.direction;this.palmVelocity=data.palmVelocity;this.palmNormal=data.palmNormal;this.sphereCenter=data.sphereCenter;this.sphereRadius=data.sphereRadius;this.valid=true;this.pointables=[];this.fingers=[];this.tools=[];this._translation=data.t;this._rotation=_.flatten(data.r);this._scaleFactor=data.s;this.timeVisible=data.timeVisible;this.stabilizedPalmPosition=data.stabilizedPalmPosition};Hand.prototype.finger=function(id){var finger=this.frame.finger(id);return finger&&finger.handId==this.id?finger:Pointable.Invalid};Hand.prototype.rotationAngle=function(sinceFrame,axis){if(!this.valid||!sinceFrame.valid)return 0;var sinceHand=sinceFrame.hand(this.id);if(!sinceHand.valid)return 0;var rot=this.rotationMatrix(sinceFrame);var cs=(rot[0]+rot[4]+rot[8]-1)*.5;var angle=Math.acos(cs);angle=isNaN(angle)?0:angle;if(axis!==undefined){var rotAxis=this.rotationAxis(sinceFrame);angle*=vec3.dot(rotAxis,vec3.normalize(vec3.create(),axis))}return angle};Hand.prototype.rotationAxis=function(sinceFrame){if(!this.valid||!sinceFrame.valid)return vec3.create();var sinceHand=sinceFrame.hand(this.id);if(!sinceHand.valid)return vec3.create();return vec3.normalize(vec3.create(),[this._rotation[7]-sinceHand._rotation[5],this._rotation[2]-sinceHand._rotation[6],this._rotation[3]-sinceHand._rotation[1]])};Hand.prototype.rotationMatrix=function(sinceFrame){if(!this.valid||!sinceFrame.valid)return mat3.create();var sinceHand=sinceFrame.hand(this.id);if(!sinceHand.valid)return mat3.create();var transpose=mat3.transpose(mat3.create(),this._rotation);var m=mat3.multiply(mat3.create(),sinceHand._rotation,transpose);return m};Hand.prototype.scaleFactor=function(sinceFrame){if(!this.valid||!sinceFrame.valid)return 1;var sinceHand=sinceFrame.hand(this.id);if(!sinceHand.valid)return 1;return Math.exp(this._scaleFactor-sinceHand._scaleFactor)};Hand.prototype.translation=function(sinceFrame){if(!this.valid||!sinceFrame.valid)return vec3.create();var sinceHand=sinceFrame.hand(this.id);if(!sinceHand.valid)return vec3.create();return[this._translation[0]-sinceHand._translation[0],this._translation[1]-sinceHand._translation[1],this._translation[2]-sinceHand._translation[2]]};Hand.prototype.toString=function(){return\"Hand [ id: \"+this.id+\" | palm velocity:\"+this.palmVelocity+\" | sphere center:\"+this.sphereCenter+\" ] \"};Hand.Invalid={valid:false,fingers:[],tools:[],pointables:[],pointable:function(){return Pointable.Invalid},finger:function(){return Pointable.Invalid},toString:function(){return\"invalid frame\"},dump:function(){return this.toString()},rotationAngle:function(){return 0},rotationMatrix:function(){return mat3.create()},rotationAxis:function(){return vec3.create()},scaleFactor:function(){return 1},translation:function(){return vec3.create()}}},{\"./pointable\":11,\"gl-matrix\":19,underscore:20}],8:[function(require,module,exports){!function(){module.exports={Controller:require(\"./controller\"),Frame:require(\"./frame\"),Gesture:require(\"./gesture\"),Hand:require(\"./hand\"),Pointable:require(\"./pointable\"),InteractionBox:require(\"./interaction_box\"),Connection:require(\"./connection\"),CircularBuffer:require(\"./circular_buffer\"),UI:require(\"./ui\"),glMatrix:require(\"gl-matrix\"),mat3:require(\"gl-matrix\").mat3,vec3:require(\"gl-matrix\").vec3,loopController:undefined,loop:function(opts,callback){if(callback===undefined){callback=opts;opts={}}if(!this.loopController)this.loopController=new this.Controller(opts);this.loopController.loop(callback)}}}()},{\"./circular_buffer\":2,\"./connection\":3,\"./controller\":4,\"./frame\":5,\"./gesture\":6,\"./hand\":7,\"./interaction_box\":9,\"./pointable\":11,\"./ui\":13,\"gl-matrix\":19}],9:[function(require,module,exports){var glMatrix=require(\"gl-matrix\"),vec3=glMatrix.vec3;var InteractionBox=module.exports=function(data){this.valid=true;this.center=data.center;this.size=data.size;this.width=data.size[0];this.height=data.size[1];this.depth=data.size[2]};InteractionBox.prototype.denormalizePoint=function(normalizedPosition){return vec3.fromValues((normalizedPosition[0]-.5)*this.size[0]+this.center[0],(normalizedPosition[1]-.5)*this.size[1]+this.center[1],(normalizedPosition[2]-.5)*this.size[2]+this.center[2])};InteractionBox.prototype.normalizePoint=function(position,clamp){var vec=vec3.fromValues((position[0]-this.center[0])/this.size[0]+.5,(position[1]-this.center[1])/this.size[1]+.5,(position[2]-this.center[2])/this.size[2]+.5);if(clamp){vec[0]=Math.min(Math.max(vec[0],0),1);vec[1]=Math.min(Math.max(vec[1],0),1);vec[2]=Math.min(Math.max(vec[2],0),1)}return vec};InteractionBox.prototype.toString=function(){return\"InteractionBox [ width:\"+this.width+\" | height:\"+this.height+\" | depth:\"+this.depth+\" ]\"};InteractionBox.Invalid={valid:false}},{\"gl-matrix\":19}],10:[function(require,module,exports){var Pipeline=module.exports=function(){this.steps=[]};Pipeline.prototype.addStep=function(step){this.steps.push(step)};Pipeline.prototype.run=function(frame){var stepsLength=this.steps.length;for(var i=0;i!=stepsLength;i++){if(!frame)break;frame=this.steps[i](frame)}return frame}},{}],11:[function(require,module,exports){var glMatrix=require(\"gl-matrix\"),vec3=glMatrix.vec3;var Pointable=module.exports=function(data){this.valid=true;this.id=data.id;this.handId=data.handId;this.length=data.length;this.tool=data.tool;this.width=data.width;this.direction=data.direction;this.stabilizedTipPosition=data.stabilizedTipPosition;this.tipPosition=data.tipPosition;this.tipVelocity=data.tipVelocity;this.touchZone=data.touchZone;this.touchDistance=data.touchDistance;this.timeVisible=data.timeVisible};Pointable.prototype.toString=function(){if(this.tool==true){return\"Pointable [ id:\"+this.id+\" \"+this.length+\"mmx | with:\"+this.width+\"mm | direction:\"+this.direction+\" ]\"}else{return\"Pointable [ id:\"+this.id+\" \"+this.length+\"mmx | direction: \"+this.direction+\" ]\"}};Pointable.Invalid={valid:false}},{\"gl-matrix\":19}],12:[function(require,module,exports){var Frame=require(\"./frame\");var Event=function(data){this.type=data.type;this.state=data.state};var chooseProtocol=exports.chooseProtocol=function(header){var protocol;switch(header.version){case 1:protocol=JSONProtocol(1,function(data){return new Frame(data)});break;case 2:protocol=JSONProtocol(2,function(data){return new Frame(data)});protocol.sendHeartbeat=function(connection){connection.send(protocol.encode({heartbeat:true}))};break;case 3:protocol=JSONProtocol(3,function(data){return data.event?new Event(data.event):new Frame(data)});protocol.sendHeartbeat=function(connection){connection.send(protocol.encode({heartbeat:true}))};break;default:throw\"unrecognized version\"}return protocol};var JSONProtocol=function(version,cb){var protocol=cb;protocol.encode=function(message){return JSON.stringify(message)};protocol.version=version;protocol.versionLong=\"Version \"+version;protocol.type=\"protocol\";return protocol}},{\"./frame\":5}],13:[function(require,module,exports){exports.UI={Region:require(\"./ui/region\"),Cursor:require(\"./ui/cursor\")}},{\"./ui/cursor\":14,\"./ui/region\":15}],14:[function(require,module,exports){var Cursor=module.exports=function(){return function(frame){var pointable=frame.pointables.sort(function(a,b){return a.z-b.z})[0];if(pointable&&pointable.valid){frame.cursorPosition=pointable.tipPosition}return frame}}},{}],15:[function(require,module,exports){var EventEmitter=require(\"events\").EventEmitter,_=require(\"underscore\");var Region=module.exports=function(start,end){this.start=new Vector(start);this.end=new Vector(end);this.enteredFrame=null};Region.prototype.hasPointables=function(frame){for(var i=0;i!=frame.pointables.length;i++){var position=frame.pointables[i].tipPosition;if(position.x>=this.start.x&&position.x<=this.end.x&&position.y>=this.start.y&&position.y<=this.end.y&&position.z>=this.start.z&&position.z<=this.end.z){return true}}return false};Region.prototype.listener=function(opts){var region=this;if(opts&&opts.nearThreshold)this.setupNearRegion(opts.nearThreshold);return function(frame){return region.updatePosition(frame)}};Region.prototype.clipper=function(){var region=this;return function(frame){region.updatePosition(frame);return region.enteredFrame?frame:null}};Region.prototype.setupNearRegion=function(distance){var nearRegion=this.nearRegion=new Region([this.start.x-distance,this.start.y-distance,this.start.z-distance],[this.end.x+distance,this.end.y+distance,this.end.z+distance]);var region=this;nearRegion.on(\"enter\",function(frame){region.emit(\"near\",frame)});nearRegion.on(\"exit\",function(frame){region.emit(\"far\",frame)});region.on(\"exit\",function(frame){region.emit(\"near\",frame)})};Region.prototype.updatePosition=function(frame){if(this.nearRegion)this.nearRegion.updatePosition(frame);if(this.hasPointables(frame)&&this.enteredFrame==null){this.enteredFrame=frame;this.emit(\"enter\",this.enteredFrame)}else if(!this.hasPointables(frame)&&this.enteredFrame!=null){this.enteredFrame=null;this.emit(\"exit\",this.enteredFrame)}return frame};Region.prototype.normalize=function(position){return new Vector([(position.x-this.start.x)/(this.end.x-this.start.x),(position.y-this.start.y)/(this.end.y-this.start.y),(position.z-this.start.z)/(this.end.z-this.start.z)])};Region.prototype.mapToXY=function(position,width,height){var normalized=this.normalize(position);var x=normalized.x,y=normalized.y;if(x>1)x=1;else if(x<-1)x=-1;if(y>1)y=1;else if(y<-1)y=-1;return[(x+1)/2*width,(1-y)/2*height,normalized.z]};_.extend(Region.prototype,EventEmitter.prototype)},{events:17,underscore:20}],16:[function(require,module,exports){},{}],17:[function(require,module,exports){!function(process){if(!process.EventEmitter)process.EventEmitter=function(){};var EventEmitter=exports.EventEmitter=process.EventEmitter;var isArray=typeof Array.isArray===\"function\"?Array.isArray:function(xs){return Object.prototype.toString.call(xs)===\"[object Array]\"};function indexOf(xs,x){if(xs.indexOf)return xs.indexOf(x);for(var i=0;i<xs.length;i++){if(x===xs[i])return i}return-1}var defaultMaxListeners=10;EventEmitter.prototype.setMaxListeners=function(n){if(!this._events)this._events={};this._events.maxListeners=n};EventEmitter.prototype.emit=function(type){if(type===\"error\"){if(!this._events||!this._events.error||isArray(this._events.error)&&!this._events.error.length){if(arguments[1]instanceof Error){throw arguments[1]}else{throw new Error(\"Uncaught, unspecified 'error' event.\")}return false}}if(!this._events)return false;var handler=this._events[type];if(!handler)return false;if(typeof handler==\"function\"){switch(arguments.length){case 1:handler.call(this);break;case 2:handler.call(this,arguments[1]);break;case 3:handler.call(this,arguments[1],arguments[2]);break;default:var args=Array.prototype.slice.call(arguments,1);handler.apply(this,args)}return true}else if(isArray(handler)){var args=Array.prototype.slice.call(arguments,1);var listeners=handler.slice();for(var i=0,l=listeners.length;i<l;i++){listeners[i].apply(this,args)}return true}else{return false}};EventEmitter.prototype.addListener=function(type,listener){if(\"function\"!==typeof listener){throw new Error(\"addListener only takes instances of Function\")}if(!this._events)this._events={};this.emit(\"newListener\",type,listener);if(!this._events[type]){this._events[type]=listener}else if(isArray(this._events[type])){if(!this._events[type].warned){var m;if(this._events.maxListeners!==undefined){m=this._events.maxListeners}else{m=defaultMaxListeners}if(m&&m>0&&this._events[type].length>m){this._events[type].warned=true;console.error(\"(node) warning: possible EventEmitter memory \"+\"leak detected. %d listeners added. \"+\"Use emitter.setMaxListeners() to increase limit.\",this._events[type].length);console.trace()}}this._events[type].push(listener)}else{this._events[type]=[this._events[type],listener]}return this};EventEmitter.prototype.on=EventEmitter.prototype.addListener;EventEmitter.prototype.once=function(type,listener){var self=this;self.on(type,function g(){self.removeListener(type,g);listener.apply(this,arguments)});return this};EventEmitter.prototype.removeListener=function(type,listener){if(\"function\"!==typeof listener){throw new Error(\"removeListener only takes instances of Function\")}if(!this._events||!this._events[type])return this;var list=this._events[type];if(isArray(list)){var i=indexOf(list,listener);if(i<0)return this;list.splice(i,1);if(list.length==0)delete this._events[type]}else if(this._events[type]===listener){delete this._events[type]}return this};EventEmitter.prototype.removeAllListeners=function(type){if(arguments.length===0){this._events={};return this}if(type&&this._events&&this._events[type])this._events[type]=null;return this};EventEmitter.prototype.listeners=function(type){if(!this._events)this._events={};if(!this._events[type])this._events[type]=[];if(!isArray(this._events[type])){this._events[type]=[this._events[type]]}return this._events[type]}}(require(\"__browserify_process\"))},{__browserify_process:18}],18:[function(require,module,exports){var process=module.exports={};process.nextTick=function(){var canSetImmediate=typeof window!==\"undefined\"&&window.setImmediate;var canPost=typeof window!==\"undefined\"&&window.postMessage&&window.addEventListener;if(canSetImmediate){return function(f){return window.setImmediate(f)}}if(canPost){var queue=[];window.addEventListener(\"message\",function(ev){if(ev.source===window&&ev.data===\"process-tick\"){ev.stopPropagation();if(queue.length>0){var fn=queue.shift();fn()}}},true);return function nextTick(fn){queue.push(fn);window.postMessage(\"process-tick\",\"*\")}}return function nextTick(fn){setTimeout(fn,0)}}();process.title=\"browser\";process.browser=true;process.env={};process.argv=[];process.binding=function(name){throw new Error(\"process.binding is not supported\")};process.cwd=function(){return\"/\"};process.chdir=function(dir){throw new Error(\"process.chdir is not supported\")}},{}],19:[function(require,module,exports){!function(){!function(){\"use strict\";var shim={};if(typeof exports===\"undefined\"){if(typeof define==\"function\"&&typeof define.amd==\"object\"&&define.amd){shim.exports={};define(function(){return shim.exports})}else{shim.exports=window}}else{shim.exports=exports}!function(exports){var vec2={};if(!GLMAT_EPSILON){var GLMAT_EPSILON=1e-6}vec2.create=function(){return new Float32Array(2)};vec2.clone=function(a){var out=new Float32Array(2);out[0]=a[0];out[1]=a[1];return out};vec2.fromValues=function(x,y){var out=new Float32Array(2);out[0]=x;out[1]=y;return out};vec2.copy=function(out,a){out[0]=a[0];out[1]=a[1];return out};vec2.set=function(out,x,y){out[0]=x;out[1]=y;return out};vec2.add=function(out,a,b){out[0]=a[0]+b[0];out[1]=a[1]+b[1];return out};vec2.sub=vec2.subtract=function(out,a,b){out[0]=a[0]-b[0];out[1]=a[1]-b[1];return out};vec2.mul=vec2.multiply=function(out,a,b){out[0]=a[0]*b[0];out[1]=a[1]*b[1];return out};vec2.div=vec2.divide=function(out,a,b){out[0]=a[0]/b[0];out[1]=a[1]/b[1];return out};vec2.min=function(out,a,b){out[0]=Math.min(a[0],b[0]);\nout[1]=Math.min(a[1],b[1]);return out};vec2.max=function(out,a,b){out[0]=Math.max(a[0],b[0]);out[1]=Math.max(a[1],b[1]);return out};vec2.scale=function(out,a,b){out[0]=a[0]*b;out[1]=a[1]*b;return out};vec2.dist=vec2.distance=function(a,b){var x=b[0]-a[0],y=b[1]-a[1];return Math.sqrt(x*x+y*y)};vec2.sqrDist=vec2.squaredDistance=function(a,b){var x=b[0]-a[0],y=b[1]-a[1];return x*x+y*y};vec2.len=vec2.length=function(a){var x=a[0],y=a[1];return Math.sqrt(x*x+y*y)};vec2.sqrLen=vec2.squaredLength=function(a){var x=a[0],y=a[1];return x*x+y*y};vec2.negate=function(out,a){out[0]=-a[0];out[1]=-a[1];return out};vec2.normalize=function(out,a){var x=a[0],y=a[1];var len=x*x+y*y;if(len>0){len=1/Math.sqrt(len);out[0]=a[0]*len;out[1]=a[1]*len}return out};vec2.dot=function(a,b){return a[0]*b[0]+a[1]*b[1]};vec2.cross=function(out,a,b){var z=a[0]*b[1]-a[1]*b[0];out[0]=out[1]=0;out[2]=z;return out};vec2.lerp=function(out,a,b,t){var ax=a[0],ay=a[1];out[0]=ax+t*(b[0]-ax);out[1]=ay+t*(b[1]-ay);return out};vec2.transformMat2=function(out,a,m){var x=a[0],y=a[1];out[0]=x*m[0]+y*m[1];out[1]=x*m[2]+y*m[3];return out};vec2.forEach=function(){var vec=new Float32Array(2);return function(a,stride,offset,count,fn,arg){var i,l;if(!stride){stride=2}if(!offset){offset=0}if(count){l=Math.min(count*stride+offset,a.length)}else{l=a.length}for(i=offset;i<l;i+=stride){vec[0]=a[i];vec[1]=a[i+1];fn(vec,vec,arg);a[i]=vec[0];a[i+1]=vec[1]}return a}}();vec2.str=function(a){return\"vec2(\"+a[0]+\", \"+a[1]+\")\"};if(typeof exports!==\"undefined\"){exports.vec2=vec2}var vec3={};if(!GLMAT_EPSILON){var GLMAT_EPSILON=1e-6}vec3.create=function(){return new Float32Array(3)};vec3.clone=function(a){var out=new Float32Array(3);out[0]=a[0];out[1]=a[1];out[2]=a[2];return out};vec3.fromValues=function(x,y,z){var out=new Float32Array(3);out[0]=x;out[1]=y;out[2]=z;return out};vec3.copy=function(out,a){out[0]=a[0];out[1]=a[1];out[2]=a[2];return out};vec3.set=function(out,x,y,z){out[0]=x;out[1]=y;out[2]=z;return out};vec3.add=function(out,a,b){out[0]=a[0]+b[0];out[1]=a[1]+b[1];out[2]=a[2]+b[2];return out};vec3.sub=vec3.subtract=function(out,a,b){out[0]=a[0]-b[0];out[1]=a[1]-b[1];out[2]=a[2]-b[2];return out};vec3.mul=vec3.multiply=function(out,a,b){out[0]=a[0]*b[0];out[1]=a[1]*b[1];out[2]=a[2]*b[2];return out};vec3.div=vec3.divide=function(out,a,b){out[0]=a[0]/b[0];out[1]=a[1]/b[1];out[2]=a[2]/b[2];return out};vec3.min=function(out,a,b){out[0]=Math.min(a[0],b[0]);out[1]=Math.min(a[1],b[1]);out[2]=Math.min(a[2],b[2]);return out};vec3.max=function(out,a,b){out[0]=Math.max(a[0],b[0]);out[1]=Math.max(a[1],b[1]);out[2]=Math.max(a[2],b[2]);return out};vec3.scale=function(out,a,b){out[0]=a[0]*b;out[1]=a[1]*b;out[2]=a[2]*b;return out};vec3.dist=vec3.distance=function(a,b){var x=b[0]-a[0],y=b[1]-a[1],z=b[2]-a[2];return Math.sqrt(x*x+y*y+z*z)};vec3.sqrDist=vec3.squaredDistance=function(a,b){var x=b[0]-a[0],y=b[1]-a[1],z=b[2]-a[2];return x*x+y*y+z*z};vec3.len=vec3.length=function(a){var x=a[0],y=a[1],z=a[2];return Math.sqrt(x*x+y*y+z*z)};vec3.sqrLen=vec3.squaredLength=function(a){var x=a[0],y=a[1],z=a[2];return x*x+y*y+z*z};vec3.negate=function(out,a){out[0]=-a[0];out[1]=-a[1];out[2]=-a[2];return out};vec3.normalize=function(out,a){var x=a[0],y=a[1],z=a[2];var len=x*x+y*y+z*z;if(len>0){len=1/Math.sqrt(len);out[0]=a[0]*len;out[1]=a[1]*len;out[2]=a[2]*len}return out};vec3.dot=function(a,b){return a[0]*b[0]+a[1]*b[1]+a[2]*b[2]};vec3.cross=function(out,a,b){var ax=a[0],ay=a[1],az=a[2],bx=b[0],by=b[1],bz=b[2];out[0]=ay*bz-az*by;out[1]=az*bx-ax*bz;out[2]=ax*by-ay*bx;return out};vec3.lerp=function(out,a,b,t){var ax=a[0],ay=a[1],az=a[2];out[0]=ax+t*(b[0]-ax);out[1]=ay+t*(b[1]-ay);out[2]=az+t*(b[2]-az);return out};vec3.transformMat4=function(out,a,m){var x=a[0],y=a[1],z=a[2];out[0]=m[0]*x+m[4]*y+m[8]*z+m[12];out[1]=m[1]*x+m[5]*y+m[9]*z+m[13];out[2]=m[2]*x+m[6]*y+m[10]*z+m[14];return out};vec3.transformQuat=function(out,a,q){var x=a[0],y=a[1],z=a[2],qx=q[0],qy=q[1],qz=q[2],qw=q[3],ix=qw*x+qy*z-qz*y,iy=qw*y+qz*x-qx*z,iz=qw*z+qx*y-qy*x,iw=-qx*x-qy*y-qz*z;out[0]=ix*qw+iw*-qx+iy*-qz-iz*-qy;out[1]=iy*qw+iw*-qy+iz*-qx-ix*-qz;out[2]=iz*qw+iw*-qz+ix*-qy-iy*-qx;return out};vec3.forEach=function(){var vec=new Float32Array(3);return function(a,stride,offset,count,fn,arg){var i,l;if(!stride){stride=3}if(!offset){offset=0}if(count){l=Math.min(count*stride+offset,a.length)}else{l=a.length}for(i=offset;i<l;i+=stride){vec[0]=a[i];vec[1]=a[i+1];vec[2]=a[i+2];fn(vec,vec,arg);a[i]=vec[0];a[i+1]=vec[1];a[i+2]=vec[2]}return a}}();vec3.str=function(a){return\"vec3(\"+a[0]+\", \"+a[1]+\", \"+a[2]+\")\"};if(typeof exports!==\"undefined\"){exports.vec3=vec3}var vec4={};if(!GLMAT_EPSILON){var GLMAT_EPSILON=1e-6}vec4.create=function(){return new Float32Array(4)};vec4.clone=function(a){var out=new Float32Array(4);out[0]=a[0];out[1]=a[1];out[2]=a[2];out[3]=a[3];return out};vec4.fromValues=function(x,y,z,w){var out=new Float32Array(4);out[0]=x;out[1]=y;out[2]=z;out[3]=w;return out};vec4.copy=function(out,a){out[0]=a[0];out[1]=a[1];out[2]=a[2];out[3]=a[3];return out};vec4.set=function(out,x,y,z,w){out[0]=x;out[1]=y;out[2]=z;out[3]=w;return out};vec4.add=function(out,a,b){out[0]=a[0]+b[0];out[1]=a[1]+b[1];out[2]=a[2]+b[2];out[3]=a[3]+b[3];return out};vec4.sub=vec4.subtract=function(out,a,b){out[0]=a[0]-b[0];out[1]=a[1]-b[1];out[2]=a[2]-b[2];out[3]=a[3]-b[3];return out};vec4.mul=vec4.multiply=function(out,a,b){out[0]=a[0]*b[0];out[1]=a[1]*b[1];out[2]=a[2]*b[2];out[3]=a[3]*b[3];return out};vec4.div=vec4.divide=function(out,a,b){out[0]=a[0]/b[0];out[1]=a[1]/b[1];out[2]=a[2]/b[2];out[3]=a[3]/b[3];return out};vec4.min=function(out,a,b){out[0]=Math.min(a[0],b[0]);out[1]=Math.min(a[1],b[1]);out[2]=Math.min(a[2],b[2]);out[3]=Math.min(a[3],b[3]);return out};vec4.max=function(out,a,b){out[0]=Math.max(a[0],b[0]);out[1]=Math.max(a[1],b[1]);out[2]=Math.max(a[2],b[2]);out[3]=Math.max(a[3],b[3]);return out};vec4.scale=function(out,a,b){out[0]=a[0]*b;out[1]=a[1]*b;out[2]=a[2]*b;out[3]=a[3]*b;return out};vec4.dist=vec4.distance=function(a,b){var x=b[0]-a[0],y=b[1]-a[1],z=b[2]-a[2],w=b[3]-a[3];return Math.sqrt(x*x+y*y+z*z+w*w)};vec4.sqrDist=vec4.squaredDistance=function(a,b){var x=b[0]-a[0],y=b[1]-a[1],z=b[2]-a[2],w=b[3]-a[3];return x*x+y*y+z*z+w*w};vec4.len=vec4.length=function(a){var x=a[0],y=a[1],z=a[2],w=a[3];return Math.sqrt(x*x+y*y+z*z+w*w)};vec4.sqrLen=vec4.squaredLength=function(a){var x=a[0],y=a[1],z=a[2],w=a[3];return x*x+y*y+z*z+w*w};vec4.negate=function(out,a){out[0]=-a[0];out[1]=-a[1];out[2]=-a[2];out[3]=-a[3];return out};vec4.normalize=function(out,a){var x=a[0],y=a[1],z=a[2],w=a[3];var len=x*x+y*y+z*z+w*w;if(len>0){len=1/Math.sqrt(len);out[0]=a[0]*len;out[1]=a[1]*len;out[2]=a[2]*len;out[3]=a[3]*len}return out};vec4.dot=function(a,b){return a[0]*b[0]+a[1]*b[1]+a[2]*b[2]+a[3]*b[3]};vec4.lerp=function(out,a,b,t){var ax=a[0],ay=a[1],az=a[2],aw=a[3];out[0]=ax+t*(b[0]-ax);out[1]=ay+t*(b[1]-ay);out[2]=az+t*(b[2]-az);out[3]=aw+t*(b[3]-aw);return out};vec4.transformMat4=function(out,a,m){var x=a[0],y=a[1],z=a[2],w=a[3];out[0]=m[0]*x+m[4]*y+m[8]*z+m[12]*w;out[1]=m[1]*x+m[5]*y+m[9]*z+m[13]*w;out[2]=m[2]*x+m[6]*y+m[10]*z+m[14]*w;out[3]=m[3]*x+m[7]*y+m[11]*z+m[15]*w;return out};vec4.transformQuat=function(out,a,q){var x=a[0],y=a[1],z=a[2],qx=q[0],qy=q[1],qz=q[2],qw=q[3],ix=qw*x+qy*z-qz*y,iy=qw*y+qz*x-qx*z,iz=qw*z+qx*y-qy*x,iw=-qx*x-qy*y-qz*z;out[0]=ix*qw+iw*-qx+iy*-qz-iz*-qy;out[1]=iy*qw+iw*-qy+iz*-qx-ix*-qz;out[2]=iz*qw+iw*-qz+ix*-qy-iy*-qx;return out};vec4.forEach=function(){var vec=new Float32Array(4);return function(a,stride,offset,count,fn,arg){var i,l;if(!stride){stride=4}if(!offset){offset=0}if(count){l=Math.min(count*stride+offset,a.length)}else{l=a.length}for(i=offset;i<l;i+=stride){vec[0]=a[i];vec[1]=a[i+1];vec[2]=a[i+2];vec[3]=a[i+3];fn(vec,vec,arg);a[i]=vec[0];a[i+1]=vec[1];a[i+2]=vec[2];a[i+3]=vec[3]}return a}}();vec4.str=function(a){return\"vec4(\"+a[0]+\", \"+a[1]+\", \"+a[2]+\", \"+a[3]+\")\"};if(typeof exports!==\"undefined\"){exports.vec4=vec4}var mat2={};var mat2Identity=new Float32Array([1,0,0,1]);if(!GLMAT_EPSILON){var GLMAT_EPSILON=1e-6}mat2.create=function(){return new Float32Array(mat2Identity)};mat2.clone=function(a){var out=new Float32Array(4);out[0]=a[0];out[1]=a[1];out[2]=a[2];out[3]=a[3];return out};mat2.copy=function(out,a){out[0]=a[0];out[1]=a[1];out[2]=a[2];out[3]=a[3];return out};mat2.identity=function(out){out[0]=1;out[1]=0;out[2]=0;out[3]=1;return out};mat2.transpose=function(out,a){if(out===a){var a1=a[1];out[1]=a[2];out[2]=a1}else{out[0]=a[0];out[1]=a[2];out[2]=a[1];out[3]=a[3]}return out};mat2.invert=function(out,a){var a0=a[0],a1=a[1],a2=a[2],a3=a[3],det=a0*a3-a2*a1;if(!det){return null}det=1/det;out[0]=a3*det;out[1]=-a1*det;out[2]=-a2*det;out[3]=a0*det;return out};mat2.adjoint=function(out,a){var a0=a[0];out[0]=a[3];out[1]=-a[1];out[2]=-a[2];out[3]=a0;return out};mat2.determinant=function(a){return a[0]*a[3]-a[2]*a[1]};mat2.mul=mat2.multiply=function(out,a,b){var a0=a[0],a1=a[1],a2=a[2],a3=a[3];var b0=b[0],b1=b[1],b2=b[2],b3=b[3];out[0]=a0*b0+a1*b2;out[1]=a0*b1+a1*b3;out[2]=a2*b0+a3*b2;out[3]=a2*b1+a3*b3;return out};mat2.rotate=function(out,a,rad){var a0=a[0],a1=a[1],a2=a[2],a3=a[3],s=Math.sin(rad),c=Math.cos(rad);out[0]=a0*c+a1*s;out[1]=a0*-s+a1*c;out[2]=a2*c+a3*s;out[3]=a2*-s+a3*c;return out};mat2.scale=function(out,a,v){var a0=a[0],a1=a[1],a2=a[2],a3=a[3],v0=v[0],v1=v[1];out[0]=a0*v0;out[1]=a1*v1;out[2]=a2*v0;out[3]=a3*v1;return out};mat2.str=function(a){return\"mat2(\"+a[0]+\", \"+a[1]+\", \"+a[2]+\", \"+a[3]+\")\"};if(typeof exports!==\"undefined\"){exports.mat2=mat2}var mat3={};var mat3Identity=new Float32Array([1,0,0,0,1,0,0,0,1]);if(!GLMAT_EPSILON){var GLMAT_EPSILON=1e-6}mat3.create=function(){return new Float32Array(mat3Identity)};mat3.clone=function(a){var out=new Float32Array(9);out[0]=a[0];out[1]=a[1];out[2]=a[2];out[3]=a[3];out[4]=a[4];out[5]=a[5];out[6]=a[6];out[7]=a[7];out[8]=a[8];return out};mat3.copy=function(out,a){out[0]=a[0];out[1]=a[1];out[2]=a[2];out[3]=a[3];out[4]=a[4];out[5]=a[5];out[6]=a[6];out[7]=a[7];out[8]=a[8];return out};mat3.identity=function(out){out[0]=1;out[1]=0;out[2]=0;out[3]=0;out[4]=1;out[5]=0;out[6]=0;out[7]=0;out[8]=1;return out};mat3.transpose=function(out,a){if(out===a){var a01=a[1],a02=a[2],a12=a[5];out[1]=a[3];out[2]=a[6];out[3]=a01;out[5]=a[7];out[6]=a02;out[7]=a12}else{out[0]=a[0];out[1]=a[3];out[2]=a[6];out[3]=a[1];out[4]=a[4];out[5]=a[7];out[6]=a[2];out[7]=a[5];out[8]=a[8]}return out};mat3.invert=function(out,a){var a00=a[0],a01=a[1],a02=a[2],a10=a[3],a11=a[4],a12=a[5],a20=a[6],a21=a[7],a22=a[8],b01=a22*a11-a12*a21,b11=-a22*a10+a12*a20,b21=a21*a10-a11*a20,det=a00*b01+a01*b11+a02*b21;if(!det){return null}det=1/det;out[0]=b01*det;out[1]=(-a22*a01+a02*a21)*det;out[2]=(a12*a01-a02*a11)*det;out[3]=b11*det;out[4]=(a22*a00-a02*a20)*det;out[5]=(-a12*a00+a02*a10)*det;out[6]=b21*det;out[7]=(-a21*a00+a01*a20)*det;out[8]=(a11*a00-a01*a10)*det;return out};mat3.adjoint=function(out,a){var a00=a[0],a01=a[1],a02=a[2],a10=a[3],a11=a[4],a12=a[5],a20=a[6],a21=a[7],a22=a[8];out[0]=a11*a22-a12*a21;out[1]=a02*a21-a01*a22;out[2]=a01*a12-a02*a11;out[3]=a12*a20-a10*a22;out[4]=a00*a22-a02*a20;out[5]=a02*a10-a00*a12;out[6]=a10*a21-a11*a20;out[7]=a01*a20-a00*a21;out[8]=a00*a11-a01*a10;return out};mat3.determinant=function(a){var a00=a[0],a01=a[1],a02=a[2],a10=a[3],a11=a[4],a12=a[5],a20=a[6],a21=a[7],a22=a[8];return a00*(a22*a11-a12*a21)+a01*(-a22*a10+a12*a20)+a02*(a21*a10-a11*a20)};mat3.mul=mat3.multiply=function(out,a,b){var a00=a[0],a01=a[1],a02=a[2],a10=a[3],a11=a[4],a12=a[5],a20=a[6],a21=a[7],a22=a[8],b00=b[0],b01=b[1],b02=b[2],b10=b[3],b11=b[4],b12=b[5],b20=b[6],b21=b[7],b22=b[8];out[0]=b00*a00+b01*a10+b02*a20;out[1]=b00*a01+b01*a11+b02*a21;out[2]=b00*a02+b01*a12+b02*a22;out[3]=b10*a00+b11*a10+b12*a20;out[4]=b10*a01+b11*a11+b12*a21;out[5]=b10*a02+b11*a12+b12*a22;out[6]=b20*a00+b21*a10+b22*a20;out[7]=b20*a01+b21*a11+b22*a21;out[8]=b20*a02+b21*a12+b22*a22;return out};mat3.str=function(a){return\"mat3(\"+a[0]+\", \"+a[1]+\", \"+a[2]+\", \"+a[3]+\", \"+a[4]+\", \"+a[5]+\", \"+a[6]+\", \"+a[7]+\", \"+a[8]+\")\"};if(typeof exports!==\"undefined\"){exports.mat3=mat3}var mat4={};var mat4Identity=new Float32Array([1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1]);if(!GLMAT_EPSILON){var GLMAT_EPSILON=1e-6}mat4.create=function(){return new Float32Array(mat4Identity)};mat4.clone=function(a){var out=new Float32Array(16);out[0]=a[0];out[1]=a[1];out[2]=a[2];out[3]=a[3];out[4]=a[4];out[5]=a[5];out[6]=a[6];out[7]=a[7];out[8]=a[8];out[9]=a[9];out[10]=a[10];out[11]=a[11];out[12]=a[12];out[13]=a[13];out[14]=a[14];out[15]=a[15];return out};mat4.copy=function(out,a){out[0]=a[0];out[1]=a[1];out[2]=a[2];out[3]=a[3];out[4]=a[4];out[5]=a[5];out[6]=a[6];out[7]=a[7];out[8]=a[8];out[9]=a[9];out[10]=a[10];out[11]=a[11];out[12]=a[12];out[13]=a[13];out[14]=a[14];out[15]=a[15];return out};mat4.identity=function(out){out[0]=1;out[1]=0;out[2]=0;out[3]=0;out[4]=0;out[5]=1;out[6]=0;out[7]=0;out[8]=0;out[9]=0;out[10]=1;out[11]=0;out[12]=0;out[13]=0;out[14]=0;out[15]=1;return out};mat4.transpose=function(out,a){if(out===a){var a01=a[1],a02=a[2],a03=a[3],a12=a[6],a13=a[7],a23=a[11];out[1]=a[4];out[2]=a[8];out[3]=a[12];out[4]=a01;out[6]=a[9];out[7]=a[13];out[8]=a02;out[9]=a12;out[11]=a[14];out[12]=a03;out[13]=a13;out[14]=a23}else{out[0]=a[0];out[1]=a[4];out[2]=a[8];out[3]=a[12];out[4]=a[1];out[5]=a[5];out[6]=a[9];out[7]=a[13];out[8]=a[2];out[9]=a[6];out[10]=a[10];out[11]=a[14];out[12]=a[3];out[13]=a[7];out[14]=a[11];out[15]=a[15]}return out};mat4.invert=function(out,a){var a00=a[0],a01=a[1],a02=a[2],a03=a[3],a10=a[4],a11=a[5],a12=a[6],a13=a[7],a20=a[8],a21=a[9],a22=a[10],a23=a[11],a30=a[12],a31=a[13],a32=a[14],a33=a[15],b00=a00*a11-a01*a10,b01=a00*a12-a02*a10,b02=a00*a13-a03*a10,b03=a01*a12-a02*a11,b04=a01*a13-a03*a11,b05=a02*a13-a03*a12,b06=a20*a31-a21*a30,b07=a20*a32-a22*a30,b08=a20*a33-a23*a30,b09=a21*a32-a22*a31,b10=a21*a33-a23*a31,b11=a22*a33-a23*a32,det=b00*b11-b01*b10+b02*b09+b03*b08-b04*b07+b05*b06;if(!det){return null}det=1/det;out[0]=(a11*b11-a12*b10+a13*b09)*det;out[1]=(a02*b10-a01*b11-a03*b09)*det;out[2]=(a31*b05-a32*b04+a33*b03)*det;out[3]=(a22*b04-a21*b05-a23*b03)*det;out[4]=(a12*b08-a10*b11-a13*b07)*det;out[5]=(a00*b11-a02*b08+a03*b07)*det;out[6]=(a32*b02-a30*b05-a33*b01)*det;out[7]=(a20*b05-a22*b02+a23*b01)*det;out[8]=(a10*b10-a11*b08+a13*b06)*det;out[9]=(a01*b08-a00*b10-a03*b06)*det;out[10]=(a30*b04-a31*b02+a33*b00)*det;out[11]=(a21*b02-a20*b04-a23*b00)*det;out[12]=(a11*b07-a10*b09-a12*b06)*det;out[13]=(a00*b09-a01*b07+a02*b06)*det;out[14]=(a31*b01-a30*b03-a32*b00)*det;out[15]=(a20*b03-a21*b01+a22*b00)*det;return out};mat4.adjoint=function(out,a){var a00=a[0],a01=a[1],a02=a[2],a03=a[3],a10=a[4],a11=a[5],a12=a[6],a13=a[7],a20=a[8],a21=a[9],a22=a[10],a23=a[11],a30=a[12],a31=a[13],a32=a[14],a33=a[15];out[0]=a11*(a22*a33-a23*a32)-a21*(a12*a33-a13*a32)+a31*(a12*a23-a13*a22);out[1]=-(a01*(a22*a33-a23*a32)-a21*(a02*a33-a03*a32)+a31*(a02*a23-a03*a22));out[2]=a01*(a12*a33-a13*a32)-a11*(a02*a33-a03*a32)+a31*(a02*a13-a03*a12);out[3]=-(a01*(a12*a23-a13*a22)-a11*(a02*a23-a03*a22)+a21*(a02*a13-a03*a12));out[4]=-(a10*(a22*a33-a23*a32)-a20*(a12*a33-a13*a32)+a30*(a12*a23-a13*a22));out[5]=a00*(a22*a33-a23*a32)-a20*(a02*a33-a03*a32)+a30*(a02*a23-a03*a22);out[6]=-(a00*(a12*a33-a13*a32)-a10*(a02*a33-a03*a32)+a30*(a02*a13-a03*a12));out[7]=a00*(a12*a23-a13*a22)-a10*(a02*a23-a03*a22)+a20*(a02*a13-a03*a12);out[8]=a10*(a21*a33-a23*a31)-a20*(a11*a33-a13*a31)+a30*(a11*a23-a13*a21);out[9]=-(a00*(a21*a33-a23*a31)-a20*(a01*a33-a03*a31)+a30*(a01*a23-a03*a21));out[10]=a00*(a11*a33-a13*a31)-a10*(a01*a33-a03*a31)+a30*(a01*a13-a03*a11);out[11]=-(a00*(a11*a23-a13*a21)-a10*(a01*a23-a03*a21)+a20*(a01*a13-a03*a11));out[12]=-(a10*(a21*a32-a22*a31)-a20*(a11*a32-a12*a31)+a30*(a11*a22-a12*a21));out[13]=a00*(a21*a32-a22*a31)-a20*(a01*a32-a02*a31)+a30*(a01*a22-a02*a21);out[14]=-(a00*(a11*a32-a12*a31)-a10*(a01*a32-a02*a31)+a30*(a01*a12-a02*a11));out[15]=a00*(a11*a22-a12*a21)-a10*(a01*a22-a02*a21)+a20*(a01*a12-a02*a11);return out};mat4.determinant=function(a){var a00=a[0],a01=a[1],a02=a[2],a03=a[3],a10=a[4],a11=a[5],a12=a[6],a13=a[7],a20=a[8],a21=a[9],a22=a[10],a23=a[11],a30=a[12],a31=a[13],a32=a[14],a33=a[15],b00=a00*a11-a01*a10,b01=a00*a12-a02*a10,b02=a00*a13-a03*a10,b03=a01*a12-a02*a11,b04=a01*a13-a03*a11,b05=a02*a13-a03*a12,b06=a20*a31-a21*a30,b07=a20*a32-a22*a30,b08=a20*a33-a23*a30,b09=a21*a32-a22*a31,b10=a21*a33-a23*a31,b11=a22*a33-a23*a32;return b00*b11-b01*b10+b02*b09+b03*b08-b04*b07+b05*b06};mat4.mul=mat4.multiply=function(out,a,b){var a00=a[0],a01=a[1],a02=a[2],a03=a[3],a10=a[4],a11=a[5],a12=a[6],a13=a[7],a20=a[8],a21=a[9],a22=a[10],a23=a[11],a30=a[12],a31=a[13],a32=a[14],a33=a[15];var b0=b[0],b1=b[1],b2=b[2],b3=b[3];out[0]=b0*a00+b1*a10+b2*a20+b3*a30;out[1]=b0*a01+b1*a11+b2*a21+b3*a31;out[2]=b0*a02+b1*a12+b2*a22+b3*a32;out[3]=b0*a03+b1*a13+b2*a23+b3*a33;b0=b[4];b1=b[5];b2=b[6];b3=b[7];out[4]=b0*a00+b1*a10+b2*a20+b3*a30;out[5]=b0*a01+b1*a11+b2*a21+b3*a31;out[6]=b0*a02+b1*a12+b2*a22+b3*a32;out[7]=b0*a03+b1*a13+b2*a23+b3*a33;b0=b[8];b1=b[9];b2=b[10];b3=b[11];out[8]=b0*a00+b1*a10+b2*a20+b3*a30;out[9]=b0*a01+b1*a11+b2*a21+b3*a31;out[10]=b0*a02+b1*a12+b2*a22+b3*a32;out[11]=b0*a03+b1*a13+b2*a23+b3*a33;b0=b[12];b1=b[13];b2=b[14];b3=b[15];out[12]=b0*a00+b1*a10+b2*a20+b3*a30;out[13]=b0*a01+b1*a11+b2*a21+b3*a31;out[14]=b0*a02+b1*a12+b2*a22+b3*a32;out[15]=b0*a03+b1*a13+b2*a23+b3*a33;return out};mat4.translate=function(out,a,v){var x=v[0],y=v[1],z=v[2],a00,a01,a02,a03,a10,a11,a12,a13,a20,a21,a22,a23;if(a===out){out[12]=a[0]*x+a[4]*y+a[8]*z+a[12];out[13]=a[1]*x+a[5]*y+a[9]*z+a[13];out[14]=a[2]*x+a[6]*y+a[10]*z+a[14];out[15]=a[3]*x+a[7]*y+a[11]*z+a[15]}else{a00=a[0];a01=a[1];a02=a[2];a03=a[3];a10=a[4];a11=a[5];a12=a[6];a13=a[7];a20=a[8];a21=a[9];a22=a[10];a23=a[11];out[0]=a00;out[1]=a01;out[2]=a02;out[3]=a03;out[4]=a10;out[5]=a11;out[6]=a12;out[7]=a13;out[8]=a20;out[9]=a21;out[10]=a22;out[11]=a23;out[12]=a00*x+a10*y+a20*z+a[12];out[13]=a01*x+a11*y+a21*z+a[13];out[14]=a02*x+a12*y+a22*z+a[14];out[15]=a03*x+a13*y+a23*z+a[15]}return out};mat4.scale=function(out,a,v){var x=v[0],y=v[1],z=v[2];out[0]=a[0]*x;out[1]=a[1]*x;out[2]=a[2]*x;out[3]=a[3]*x;out[4]=a[4]*y;out[5]=a[5]*y;out[6]=a[6]*y;out[7]=a[7]*y;out[8]=a[8]*z;out[9]=a[9]*z;out[10]=a[10]*z;out[11]=a[11]*z;out[12]=a[12];out[13]=a[13];out[14]=a[14];out[15]=a[15];return out};mat4.rotate=function(out,a,rad,axis){var x=axis[0],y=axis[1],z=axis[2],len=Math.sqrt(x*x+y*y+z*z),s,c,t,a00,a01,a02,a03,a10,a11,a12,a13,a20,a21,a22,a23,b00,b01,b02,b10,b11,b12,b20,b21,b22;if(Math.abs(len)<GLMAT_EPSILON){return null}len=1/len;x*=len;y*=len;z*=len;s=Math.sin(rad);c=Math.cos(rad);t=1-c;a00=a[0];a01=a[1];a02=a[2];a03=a[3];a10=a[4];a11=a[5];a12=a[6];a13=a[7];a20=a[8];a21=a[9];a22=a[10];a23=a[11];b00=x*x*t+c;b01=y*x*t+z*s;b02=z*x*t-y*s;b10=x*y*t-z*s;b11=y*y*t+c;b12=z*y*t+x*s;b20=x*z*t+y*s;b21=y*z*t-x*s;b22=z*z*t+c;out[0]=a00*b00+a10*b01+a20*b02;out[1]=a01*b00+a11*b01+a21*b02;out[2]=a02*b00+a12*b01+a22*b02;out[3]=a03*b00+a13*b01+a23*b02;out[4]=a00*b10+a10*b11+a20*b12;out[5]=a01*b10+a11*b11+a21*b12;out[6]=a02*b10+a12*b11+a22*b12;out[7]=a03*b10+a13*b11+a23*b12;out[8]=a00*b20+a10*b21+a20*b22;out[9]=a01*b20+a11*b21+a21*b22;out[10]=a02*b20+a12*b21+a22*b22;out[11]=a03*b20+a13*b21+a23*b22;if(a!==out){out[12]=a[12];out[13]=a[13];out[14]=a[14];out[15]=a[15]}return out};mat4.rotateX=function(out,a,rad){var s=Math.sin(rad),c=Math.cos(rad),a10=a[4],a11=a[5],a12=a[6],a13=a[7],a20=a[8],a21=a[9],a22=a[10],a23=a[11];if(a!==out){out[0]=a[0];out[1]=a[1];out[2]=a[2];out[3]=a[3];out[12]=a[12];out[13]=a[13];out[14]=a[14];out[15]=a[15]}out[4]=a10*c+a20*s;out[5]=a11*c+a21*s;out[6]=a12*c+a22*s;out[7]=a13*c+a23*s;out[8]=a20*c-a10*s;out[9]=a21*c-a11*s;out[10]=a22*c-a12*s;out[11]=a23*c-a13*s;return out};mat4.rotateY=function(out,a,rad){var s=Math.sin(rad),c=Math.cos(rad),a00=a[0],a01=a[1],a02=a[2],a03=a[3],a20=a[8],a21=a[9],a22=a[10],a23=a[11];if(a!==out){out[4]=a[4];out[5]=a[5];out[6]=a[6];out[7]=a[7];out[12]=a[12];out[13]=a[13];out[14]=a[14];out[15]=a[15]}out[0]=a00*c-a20*s;out[1]=a01*c-a21*s;out[2]=a02*c-a22*s;out[3]=a03*c-a23*s;out[8]=a00*s+a20*c;out[9]=a01*s+a21*c;out[10]=a02*s+a22*c;out[11]=a03*s+a23*c;return out};mat4.rotateZ=function(out,a,rad){var s=Math.sin(rad),c=Math.cos(rad),a00=a[0],a01=a[1],a02=a[2],a03=a[3],a10=a[4],a11=a[5],a12=a[6],a13=a[7];if(a!==out){out[8]=a[8];out[9]=a[9];out[10]=a[10];out[11]=a[11];out[12]=a[12];out[13]=a[13];out[14]=a[14];out[15]=a[15]}out[0]=a00*c+a10*s;out[1]=a01*c+a11*s;out[2]=a02*c+a12*s;out[3]=a03*c+a13*s;out[4]=a10*c-a00*s;out[5]=a11*c-a01*s;out[6]=a12*c-a02*s;out[7]=a13*c-a03*s;return out};mat4.fromRotationTranslation=function(out,q,v){var x=q[0],y=q[1],z=q[2],w=q[3],x2=x+x,y2=y+y,z2=z+z,xx=x*x2,xy=x*y2,xz=x*z2,yy=y*y2,yz=y*z2,zz=z*z2,wx=w*x2,wy=w*y2,wz=w*z2;out[0]=1-(yy+zz);out[1]=xy+wz;out[2]=xz-wy;out[3]=0;out[4]=xy-wz;out[5]=1-(xx+zz);out[6]=yz+wx;out[7]=0;out[8]=xz+wy;out[9]=yz-wx;out[10]=1-(xx+yy);out[11]=0;out[12]=v[0];out[13]=v[1];out[14]=v[2];out[15]=1;return out};mat4.frustum=function(out,left,right,bottom,top,near,far){var rl=1/(right-left),tb=1/(top-bottom),nf=1/(near-far);out[0]=near*2*rl;out[1]=0;out[2]=0;out[3]=0;out[4]=0;out[5]=near*2*tb;out[6]=0;out[7]=0;out[8]=(right+left)*rl;out[9]=(top+bottom)*tb;out[10]=(far+near)*nf;out[11]=-1;out[12]=0;out[13]=0;out[14]=far*near*2*nf;out[15]=0;return out};mat4.perspective=function(out,fovy,aspect,near,far){var f=1/Math.tan(fovy/2),nf=1/(near-far);out[0]=f/aspect;out[1]=0;out[2]=0;out[3]=0;out[4]=0;out[5]=f;out[6]=0;out[7]=0;out[8]=0;out[9]=0;out[10]=(far+near)*nf;out[11]=-1;out[12]=0;out[13]=0;out[14]=2*far*near*nf;out[15]=0;return out};mat4.ortho=function(out,left,right,bottom,top,near,far){var lr=1/(left-right),bt=1/(bottom-top),nf=1/(near-far);out[0]=-2*lr;out[1]=0;out[2]=0;out[3]=0;out[4]=0;out[5]=-2*bt;out[6]=0;out[7]=0;out[8]=0;out[9]=0;out[10]=2*nf;out[11]=0;out[12]=(left+right)*lr;out[13]=(top+bottom)*bt;out[14]=(far+near)*nf;out[15]=1;return out};mat4.lookAt=function(out,eye,center,up){var x0,x1,x2,y0,y1,y2,z0,z1,z2,len,eyex=eye[0],eyey=eye[1],eyez=eye[2],upx=up[0],upy=up[1],upz=up[2],centerx=center[0],centery=center[1],centerz=center[2];if(Math.abs(eyex-centerx)<GLMAT_EPSILON&&Math.abs(eyey-centery)<GLMAT_EPSILON&&Math.abs(eyez-centerz)<GLMAT_EPSILON){return mat4.identity(out)}z0=eyex-centerx;z1=eyey-centery;z2=eyez-centerz;len=1/Math.sqrt(z0*z0+z1*z1+z2*z2);z0*=len;z1*=len;z2*=len;x0=upy*z2-upz*z1;x1=upz*z0-upx*z2;x2=upx*z1-upy*z0;len=Math.sqrt(x0*x0+x1*x1+x2*x2);if(!len){x0=0;x1=0;x2=0}else{len=1/len;x0*=len;x1*=len;x2*=len}y0=z1*x2-z2*x1;y1=z2*x0-z0*x2;y2=z0*x1-z1*x0;len=Math.sqrt(y0*y0+y1*y1+y2*y2);if(!len){y0=0;y1=0;y2=0}else{len=1/len;y0*=len;y1*=len;y2*=len}out[0]=x0;out[1]=y0;out[2]=z0;out[3]=0;out[4]=x1;out[5]=y1;out[6]=z1;out[7]=0;out[8]=x2;out[9]=y2;out[10]=z2;out[11]=0;out[12]=-(x0*eyex+x1*eyey+x2*eyez);out[13]=-(y0*eyex+y1*eyey+y2*eyez);out[14]=-(z0*eyex+z1*eyey+z2*eyez);out[15]=1;return out};mat4.str=function(a){return\"mat4(\"+a[0]+\", \"+a[1]+\", \"+a[2]+\", \"+a[3]+\", \"+a[4]+\", \"+a[5]+\", \"+a[6]+\", \"+a[7]+\", \"+a[8]+\", \"+a[9]+\", \"+a[10]+\", \"+a[11]+\", \"+a[12]+\", \"+a[13]+\", \"+a[14]+\", \"+a[15]+\")\"};if(typeof exports!==\"undefined\"){exports.mat4=mat4}var quat={};var quatIdentity=new Float32Array([0,0,0,1]);if(!GLMAT_EPSILON){var GLMAT_EPSILON=1e-6}quat.create=function(){return new Float32Array(quatIdentity)};quat.clone=vec4.clone;quat.fromValues=vec4.fromValues;quat.copy=vec4.copy;quat.set=vec4.set;quat.identity=function(out){out[0]=0;out[1]=0;out[2]=0;out[3]=1;return out};quat.setAxisAngle=function(out,axis,rad){rad=rad*.5;var s=Math.sin(rad);out[0]=s*axis[0];out[1]=s*axis[1];out[2]=s*axis[2];out[3]=Math.cos(rad);return out};quat.add=vec4.add;quat.mul=quat.multiply=function(out,a,b){var ax=a[0],ay=a[1],az=a[2],aw=a[3],bx=b[0],by=b[1],bz=b[2],bw=b[3];out[0]=ax*bw+aw*bx+ay*bz-az*by;out[1]=ay*bw+aw*by+az*bx-ax*bz;out[2]=az*bw+aw*bz+ax*by-ay*bx;out[3]=aw*bw-ax*bx-ay*by-az*bz;return out};quat.scale=vec4.scale;quat.rotateX=function(out,a,rad){rad*=.5;var ax=a[0],ay=a[1],az=a[2],aw=a[3],bx=Math.sin(rad),bw=Math.cos(rad);out[0]=ax*bw+aw*bx;out[1]=ay*bw+az*bx;out[2]=az*bw-ay*bx;out[3]=aw*bw-ax*bx;return out};quat.rotateY=function(out,a,rad){rad*=.5;var ax=a[0],ay=a[1],az=a[2],aw=a[3],by=Math.sin(rad),bw=Math.cos(rad);out[0]=ax*bw-az*by;out[1]=ay*bw+aw*by;out[2]=az*bw+ax*by;out[3]=aw*bw-ay*by;return out};quat.rotateZ=function(out,a,rad){rad*=.5;var ax=a[0],ay=a[1],az=a[2],aw=a[3],bz=Math.sin(rad),bw=Math.cos(rad);out[0]=ax*bw+ay*bz;out[1]=ay*bw-ax*bz;out[2]=az*bw+aw*bz;out[3]=aw*bw-az*bz;return out};quat.calculateW=function(out,a){var x=a[0],y=a[1],z=a[2];out[0]=x;out[1]=y;out[2]=z;out[3]=-Math.sqrt(Math.abs(1-x*x-y*y-z*z));return out};quat.dot=vec4.dot;quat.lerp=vec4.lerp;quat.slerp=function(out,a,b,t){var ax=a[0],ay=a[1],az=a[2],aw=a[3],bx=b[0],by=b[1],bz=b[2],bw=a[3];var cosHalfTheta=ax*bx+ay*by+az*bz+aw*bw,halfTheta,sinHalfTheta,ratioA,ratioB;if(Math.abs(cosHalfTheta)>=1){if(out!==a){out[0]=ax;out[1]=ay;out[2]=az;out[3]=aw}return out}halfTheta=Math.acos(cosHalfTheta);sinHalfTheta=Math.sqrt(1-cosHalfTheta*cosHalfTheta);if(Math.abs(sinHalfTheta)<.001){out[0]=ax*.5+bx*.5;out[1]=ay*.5+by*.5;out[2]=az*.5+bz*.5;out[3]=aw*.5+bw*.5;return out}ratioA=Math.sin((1-t)*halfTheta)/sinHalfTheta;ratioB=Math.sin(t*halfTheta)/sinHalfTheta;out[0]=ax*ratioA+bx*ratioB;out[1]=ay*ratioA+by*ratioB;out[2]=az*ratioA+bz*ratioB;out[3]=aw*ratioA+bw*ratioB;return out};quat.invert=function(out,a){var a0=a[0],a1=a[1],a2=a[2],a3=a[3],dot=a0*a0+a1*a1+a2*a2+a3*a3,invDot=dot?1/dot:0;out[0]=-a0*invDot;out[1]=-a1*invDot;out[2]=-a2*invDot;out[3]=a3*invDot;return out};quat.conjugate=function(out,a){out[0]=-a[0];out[1]=-a[1];out[2]=-a[2];out[3]=a[3];return out};quat.len=quat.length=vec4.length;quat.sqrLen=quat.squaredLength=vec4.squaredLength;quat.normalize=vec4.normalize;quat.str=function(a){return\"quat(\"+a[0]+\", \"+a[1]+\", \"+a[2]+\", \"+a[3]+\")\"};if(typeof exports!==\"undefined\"){exports.quat=quat}}(shim.exports)}()}()},{}],20:[function(require,module,exports){!function(){!function(){var root=this;var previousUnderscore=root._;var breaker={};var ArrayProto=Array.prototype,ObjProto=Object.prototype,FuncProto=Function.prototype;var push=ArrayProto.push,slice=ArrayProto.slice,concat=ArrayProto.concat,toString=ObjProto.toString,hasOwnProperty=ObjProto.hasOwnProperty;var nativeForEach=ArrayProto.forEach,nativeMap=ArrayProto.map,nativeReduce=ArrayProto.reduce,nativeReduceRight=ArrayProto.reduceRight,nativeFilter=ArrayProto.filter,nativeEvery=ArrayProto.every,nativeSome=ArrayProto.some,nativeIndexOf=ArrayProto.indexOf,nativeLastIndexOf=ArrayProto.lastIndexOf,nativeIsArray=Array.isArray,nativeKeys=Object.keys,nativeBind=FuncProto.bind;var _=function(obj){if(obj instanceof _)return obj;if(!(this instanceof _))return new _(obj);this._wrapped=obj};if(typeof exports!==\"undefined\"){if(typeof module!==\"undefined\"&&module.exports){exports=module.exports=_}exports._=_}else{root._=_}_.VERSION=\"1.4.4\";var each=_.each=_.forEach=function(obj,iterator,context){if(obj==null)return;if(nativeForEach&&obj.forEach===nativeForEach){obj.forEach(iterator,context)}else if(obj.length===+obj.length){for(var i=0,l=obj.length;i<l;i++){if(iterator.call(context,obj[i],i,obj)===breaker)return}}else{for(var key in obj){if(_.has(obj,key)){if(iterator.call(context,obj[key],key,obj)===breaker)return}}}};_.map=_.collect=function(obj,iterator,context){var results=[];if(obj==null)return results;if(nativeMap&&obj.map===nativeMap)return obj.map(iterator,context);each(obj,function(value,index,list){results[results.length]=iterator.call(context,value,index,list)});return results};var reduceError=\"Reduce of empty array with no initial value\";_.reduce=_.foldl=_.inject=function(obj,iterator,memo,context){var initial=arguments.length>2;if(obj==null)obj=[];if(nativeReduce&&obj.reduce===nativeReduce){if(context)iterator=_.bind(iterator,context);return initial?obj.reduce(iterator,memo):obj.reduce(iterator)}each(obj,function(value,index,list){if(!initial){memo=value;initial=true}else{memo=iterator.call(context,memo,value,index,list)}});if(!initial)throw new TypeError(reduceError);return memo};_.reduceRight=_.foldr=function(obj,iterator,memo,context){var initial=arguments.length>2;if(obj==null)obj=[];if(nativeReduceRight&&obj.reduceRight===nativeReduceRight){if(context)iterator=_.bind(iterator,context);return initial?obj.reduceRight(iterator,memo):obj.reduceRight(iterator)}var length=obj.length;if(length!==+length){var keys=_.keys(obj);length=keys.length}each(obj,function(value,index,list){index=keys?keys[--length]:--length;if(!initial){memo=obj[index];initial=true}else{memo=iterator.call(context,memo,obj[index],index,list)}});if(!initial)throw new TypeError(reduceError);return memo};_.find=_.detect=function(obj,iterator,context){var result;any(obj,function(value,index,list){if(iterator.call(context,value,index,list)){result=value;return true}});return result};_.filter=_.select=function(obj,iterator,context){var results=[];if(obj==null)return results;if(nativeFilter&&obj.filter===nativeFilter)return obj.filter(iterator,context);each(obj,function(value,index,list){if(iterator.call(context,value,index,list))results[results.length]=value});return results};_.reject=function(obj,iterator,context){return _.filter(obj,function(value,index,list){return!iterator.call(context,value,index,list)},context)};_.every=_.all=function(obj,iterator,context){iterator||(iterator=_.identity);var result=true;if(obj==null)return result;if(nativeEvery&&obj.every===nativeEvery)return obj.every(iterator,context);each(obj,function(value,index,list){if(!(result=result&&iterator.call(context,value,index,list)))return breaker});return!!result};var any=_.some=_.any=function(obj,iterator,context){iterator||(iterator=_.identity);var result=false;if(obj==null)return result;if(nativeSome&&obj.some===nativeSome)return obj.some(iterator,context);each(obj,function(value,index,list){if(result||(result=iterator.call(context,value,index,list)))return breaker});return!!result};_.contains=_.include=function(obj,target){if(obj==null)return false;if(nativeIndexOf&&obj.indexOf===nativeIndexOf)return obj.indexOf(target)!=-1;return any(obj,function(value){return value===target})};_.invoke=function(obj,method){var args=slice.call(arguments,2);var isFunc=_.isFunction(method);return _.map(obj,function(value){return(isFunc?method:value[method]).apply(value,args)})};_.pluck=function(obj,key){return _.map(obj,function(value){return value[key]})};_.where=function(obj,attrs,first){if(_.isEmpty(attrs))return first?null:[];return _[first?\"find\":\"filter\"](obj,function(value){for(var key in attrs){if(attrs[key]!==value[key])return false}return true})};_.findWhere=function(obj,attrs){return _.where(obj,attrs,true)};_.max=function(obj,iterator,context){if(!iterator&&_.isArray(obj)&&obj[0]===+obj[0]&&obj.length<65535){return Math.max.apply(Math,obj)}if(!iterator&&_.isEmpty(obj))return-Infinity;var result={computed:-Infinity,value:-Infinity};each(obj,function(value,index,list){var computed=iterator?iterator.call(context,value,index,list):value;computed>=result.computed&&(result={value:value,computed:computed})});return result.value};_.min=function(obj,iterator,context){if(!iterator&&_.isArray(obj)&&obj[0]===+obj[0]&&obj.length<65535){return Math.min.apply(Math,obj)}if(!iterator&&_.isEmpty(obj))return Infinity;var result={computed:Infinity,value:Infinity};each(obj,function(value,index,list){var computed=iterator?iterator.call(context,value,index,list):value;computed<result.computed&&(result={value:value,computed:computed})});return result.value};_.shuffle=function(obj){var rand;var index=0;var shuffled=[];each(obj,function(value){rand=_.random(index++);shuffled[index-1]=shuffled[rand];shuffled[rand]=value});return shuffled};var lookupIterator=function(value){return _.isFunction(value)?value:function(obj){return obj[value]}};_.sortBy=function(obj,value,context){var iterator=lookupIterator(value);return _.pluck(_.map(obj,function(value,index,list){return{value:value,index:index,criteria:iterator.call(context,value,index,list)}}).sort(function(left,right){var a=left.criteria;\nvar b=right.criteria;if(a!==b){if(a>b||a===void 0)return 1;if(a<b||b===void 0)return-1}return left.index<right.index?-1:1}),\"value\")};var group=function(obj,value,context,behavior){var result={};var iterator=lookupIterator(value||_.identity);each(obj,function(value,index){var key=iterator.call(context,value,index,obj);behavior(result,key,value)});return result};_.groupBy=function(obj,value,context){return group(obj,value,context,function(result,key,value){(_.has(result,key)?result[key]:result[key]=[]).push(value)})};_.countBy=function(obj,value,context){return group(obj,value,context,function(result,key){if(!_.has(result,key))result[key]=0;result[key]++})};_.sortedIndex=function(array,obj,iterator,context){iterator=iterator==null?_.identity:lookupIterator(iterator);var value=iterator.call(context,obj);var low=0,high=array.length;while(low<high){var mid=low+high>>>1;iterator.call(context,array[mid])<value?low=mid+1:high=mid}return low};_.toArray=function(obj){if(!obj)return[];if(_.isArray(obj))return slice.call(obj);if(obj.length===+obj.length)return _.map(obj,_.identity);return _.values(obj)};_.size=function(obj){if(obj==null)return 0;return obj.length===+obj.length?obj.length:_.keys(obj).length};_.first=_.head=_.take=function(array,n,guard){if(array==null)return void 0;return n!=null&&!guard?slice.call(array,0,n):array[0]};_.initial=function(array,n,guard){return slice.call(array,0,array.length-(n==null||guard?1:n))};_.last=function(array,n,guard){if(array==null)return void 0;if(n!=null&&!guard){return slice.call(array,Math.max(array.length-n,0))}else{return array[array.length-1]}};_.rest=_.tail=_.drop=function(array,n,guard){return slice.call(array,n==null||guard?1:n)};_.compact=function(array){return _.filter(array,_.identity)};var flatten=function(input,shallow,output){each(input,function(value){if(_.isArray(value)){shallow?push.apply(output,value):flatten(value,shallow,output)}else{output.push(value)}});return output};_.flatten=function(array,shallow){return flatten(array,shallow,[])};_.without=function(array){return _.difference(array,slice.call(arguments,1))};_.uniq=_.unique=function(array,isSorted,iterator,context){if(_.isFunction(isSorted)){context=iterator;iterator=isSorted;isSorted=false}var initial=iterator?_.map(array,iterator,context):array;var results=[];var seen=[];each(initial,function(value,index){if(isSorted?!index||seen[seen.length-1]!==value:!_.contains(seen,value)){seen.push(value);results.push(array[index])}});return results};_.union=function(){return _.uniq(concat.apply(ArrayProto,arguments))};_.intersection=function(array){var rest=slice.call(arguments,1);return _.filter(_.uniq(array),function(item){return _.every(rest,function(other){return _.indexOf(other,item)>=0})})};_.difference=function(array){var rest=concat.apply(ArrayProto,slice.call(arguments,1));return _.filter(array,function(value){return!_.contains(rest,value)})};_.zip=function(){var args=slice.call(arguments);var length=_.max(_.pluck(args,\"length\"));var results=new Array(length);for(var i=0;i<length;i++){results[i]=_.pluck(args,\"\"+i)}return results};_.object=function(list,values){if(list==null)return{};var result={};for(var i=0,l=list.length;i<l;i++){if(values){result[list[i]]=values[i]}else{result[list[i][0]]=list[i][1]}}return result};_.indexOf=function(array,item,isSorted){if(array==null)return-1;var i=0,l=array.length;if(isSorted){if(typeof isSorted==\"number\"){i=isSorted<0?Math.max(0,l+isSorted):isSorted}else{i=_.sortedIndex(array,item);return array[i]===item?i:-1}}if(nativeIndexOf&&array.indexOf===nativeIndexOf)return array.indexOf(item,isSorted);for(;i<l;i++)if(array[i]===item)return i;return-1};_.lastIndexOf=function(array,item,from){if(array==null)return-1;var hasIndex=from!=null;if(nativeLastIndexOf&&array.lastIndexOf===nativeLastIndexOf){return hasIndex?array.lastIndexOf(item,from):array.lastIndexOf(item)}var i=hasIndex?from:array.length;while(i--)if(array[i]===item)return i;return-1};_.range=function(start,stop,step){if(arguments.length<=1){stop=start||0;start=0}step=arguments[2]||1;var len=Math.max(Math.ceil((stop-start)/step),0);var idx=0;var range=new Array(len);while(idx<len){range[idx++]=start;start+=step}return range};_.bind=function(func,context){if(func.bind===nativeBind&&nativeBind)return nativeBind.apply(func,slice.call(arguments,1));var args=slice.call(arguments,2);return function(){return func.apply(context,args.concat(slice.call(arguments)))}};_.partial=function(func){var args=slice.call(arguments,1);return function(){return func.apply(this,args.concat(slice.call(arguments)))}};_.bindAll=function(obj){var funcs=slice.call(arguments,1);if(funcs.length===0)funcs=_.functions(obj);each(funcs,function(f){obj[f]=_.bind(obj[f],obj)});return obj};_.memoize=function(func,hasher){var memo={};hasher||(hasher=_.identity);return function(){var key=hasher.apply(this,arguments);return _.has(memo,key)?memo[key]:memo[key]=func.apply(this,arguments)}};_.delay=function(func,wait){var args=slice.call(arguments,2);return setTimeout(function(){return func.apply(null,args)},wait)};_.defer=function(func){return _.delay.apply(_,[func,1].concat(slice.call(arguments,1)))};_.throttle=function(func,wait){var context,args,timeout,result;var previous=0;var later=function(){previous=new Date;timeout=null;result=func.apply(context,args)};return function(){var now=new Date;var remaining=wait-(now-previous);context=this;args=arguments;if(remaining<=0){clearTimeout(timeout);timeout=null;previous=now;result=func.apply(context,args)}else if(!timeout){timeout=setTimeout(later,remaining)}return result}};_.debounce=function(func,wait,immediate){var timeout,result;return function(){var context=this,args=arguments;var later=function(){timeout=null;if(!immediate)result=func.apply(context,args)};var callNow=immediate&&!timeout;clearTimeout(timeout);timeout=setTimeout(later,wait);if(callNow)result=func.apply(context,args);return result}};_.once=function(func){var ran=false,memo;return function(){if(ran)return memo;ran=true;memo=func.apply(this,arguments);func=null;return memo}};_.wrap=function(func,wrapper){return function(){var args=[func];push.apply(args,arguments);return wrapper.apply(this,args)}};_.compose=function(){var funcs=arguments;return function(){var args=arguments;for(var i=funcs.length-1;i>=0;i--){args=[funcs[i].apply(this,args)]}return args[0]}};_.after=function(times,func){if(times<=0)return func();return function(){if(--times<1){return func.apply(this,arguments)}}};_.keys=nativeKeys||function(obj){if(obj!==Object(obj))throw new TypeError(\"Invalid object\");var keys=[];for(var key in obj)if(_.has(obj,key))keys[keys.length]=key;return keys};_.values=function(obj){var values=[];for(var key in obj)if(_.has(obj,key))values.push(obj[key]);return values};_.pairs=function(obj){var pairs=[];for(var key in obj)if(_.has(obj,key))pairs.push([key,obj[key]]);return pairs};_.invert=function(obj){var result={};for(var key in obj)if(_.has(obj,key))result[obj[key]]=key;return result};_.functions=_.methods=function(obj){var names=[];for(var key in obj){if(_.isFunction(obj[key]))names.push(key)}return names.sort()};_.extend=function(obj){each(slice.call(arguments,1),function(source){if(source){for(var prop in source){obj[prop]=source[prop]}}});return obj};_.pick=function(obj){var copy={};var keys=concat.apply(ArrayProto,slice.call(arguments,1));each(keys,function(key){if(key in obj)copy[key]=obj[key]});return copy};_.omit=function(obj){var copy={};var keys=concat.apply(ArrayProto,slice.call(arguments,1));for(var key in obj){if(!_.contains(keys,key))copy[key]=obj[key]}return copy};_.defaults=function(obj){each(slice.call(arguments,1),function(source){if(source){for(var prop in source){if(obj[prop]==null)obj[prop]=source[prop]}}});return obj};_.clone=function(obj){if(!_.isObject(obj))return obj;return _.isArray(obj)?obj.slice():_.extend({},obj)};_.tap=function(obj,interceptor){interceptor(obj);return obj};var eq=function(a,b,aStack,bStack){if(a===b)return a!==0||1/a==1/b;if(a==null||b==null)return a===b;if(a instanceof _)a=a._wrapped;if(b instanceof _)b=b._wrapped;var className=toString.call(a);if(className!=toString.call(b))return false;switch(className){case\"[object String]\":return a==String(b);case\"[object Number]\":return a!=+a?b!=+b:a==0?1/a==1/b:a==+b;case\"[object Date]\":case\"[object Boolean]\":return+a==+b;case\"[object RegExp]\":return a.source==b.source&&a.global==b.global&&a.multiline==b.multiline&&a.ignoreCase==b.ignoreCase}if(typeof a!=\"object\"||typeof b!=\"object\")return false;var length=aStack.length;while(length--){if(aStack[length]==a)return bStack[length]==b}aStack.push(a);bStack.push(b);var size=0,result=true;if(className==\"[object Array]\"){size=a.length;result=size==b.length;if(result){while(size--){if(!(result=eq(a[size],b[size],aStack,bStack)))break}}}else{var aCtor=a.constructor,bCtor=b.constructor;if(aCtor!==bCtor&&!(_.isFunction(aCtor)&&aCtor instanceof aCtor&&_.isFunction(bCtor)&&bCtor instanceof bCtor)){return false}for(var key in a){if(_.has(a,key)){size++;if(!(result=_.has(b,key)&&eq(a[key],b[key],aStack,bStack)))break}}if(result){for(key in b){if(_.has(b,key)&&!size--)break}result=!size}}aStack.pop();bStack.pop();return result};_.isEqual=function(a,b){return eq(a,b,[],[])};_.isEmpty=function(obj){if(obj==null)return true;if(_.isArray(obj)||_.isString(obj))return obj.length===0;for(var key in obj)if(_.has(obj,key))return false;return true};_.isElement=function(obj){return!!(obj&&obj.nodeType===1)};_.isArray=nativeIsArray||function(obj){return toString.call(obj)==\"[object Array]\"};_.isObject=function(obj){return obj===Object(obj)};each([\"Arguments\",\"Function\",\"String\",\"Number\",\"Date\",\"RegExp\"],function(name){_[\"is\"+name]=function(obj){return toString.call(obj)==\"[object \"+name+\"]\"}});if(!_.isArguments(arguments)){_.isArguments=function(obj){return!!(obj&&_.has(obj,\"callee\"))}}if(typeof/./!==\"function\"){_.isFunction=function(obj){return typeof obj===\"function\"}}_.isFinite=function(obj){return isFinite(obj)&&!isNaN(parseFloat(obj))};_.isNaN=function(obj){return _.isNumber(obj)&&obj!=+obj};_.isBoolean=function(obj){return obj===true||obj===false||toString.call(obj)==\"[object Boolean]\"};_.isNull=function(obj){return obj===null};_.isUndefined=function(obj){return obj===void 0};_.has=function(obj,key){return hasOwnProperty.call(obj,key)};_.noConflict=function(){root._=previousUnderscore;return this};_.identity=function(value){return value};_.times=function(n,iterator,context){var accum=Array(n);for(var i=0;i<n;i++)accum[i]=iterator.call(context,i);return accum};_.random=function(min,max){if(max==null){max=min;min=0}return min+Math.floor(Math.random()*(max-min+1))};var entityMap={escape:{\"&\":\"&amp;\",\"<\":\"&lt;\",\">\":\"&gt;\",'\"':\"&quot;\",\"'\":\"&#x27;\",\"/\":\"&#x2F;\"}};entityMap.unescape=_.invert(entityMap.escape);var entityRegexes={escape:new RegExp(\"[\"+_.keys(entityMap.escape).join(\"\")+\"]\",\"g\"),unescape:new RegExp(\"(\"+_.keys(entityMap.unescape).join(\"|\")+\")\",\"g\")};_.each([\"escape\",\"unescape\"],function(method){_[method]=function(string){if(string==null)return\"\";return(\"\"+string).replace(entityRegexes[method],function(match){return entityMap[method][match]})}});_.result=function(object,property){if(object==null)return null;var value=object[property];return _.isFunction(value)?value.call(object):value};_.mixin=function(obj){each(_.functions(obj),function(name){var func=_[name]=obj[name];_.prototype[name]=function(){var args=[this._wrapped];push.apply(args,arguments);return result.call(this,func.apply(_,args))}})};var idCounter=0;_.uniqueId=function(prefix){var id=++idCounter+\"\";return prefix?prefix+id:id};_.templateSettings={evaluate:/<%([\\s\\S]+?)%>/g,interpolate:/<%=([\\s\\S]+?)%>/g,escape:/<%-([\\s\\S]+?)%>/g};var noMatch=/(.)^/;var escapes={\"'\":\"'\",\"\\\\\":\"\\\\\",\"\\r\":\"r\",\"\\n\":\"n\",\" \":\"t\",\"\\u2028\":\"u2028\",\"\\u2029\":\"u2029\"};var escaper=/\\\\|'|\\r|\\n|\\t|\\u2028|\\u2029/g;_.template=function(text,data,settings){var render;settings=_.defaults({},settings,_.templateSettings);var matcher=new RegExp([(settings.escape||noMatch).source,(settings.interpolate||noMatch).source,(settings.evaluate||noMatch).source].join(\"|\")+\"|$\",\"g\");var index=0;var source=\"__p+='\";text.replace(matcher,function(match,escape,interpolate,evaluate,offset){source+=text.slice(index,offset).replace(escaper,function(match){return\"\\\\\"+escapes[match]});if(escape){source+=\"'+\\n((__t=(\"+escape+\"))==null?'':_.escape(__t))+\\n'\"}if(interpolate){source+=\"'+\\n((__t=(\"+interpolate+\"))==null?'':__t)+\\n'\"}if(evaluate){source+=\"';\\n\"+evaluate+\"\\n__p+='\"}index=offset+match.length;return match});source+=\"';\\n\";if(!settings.variable)source=\"with(obj||{}){\\n\"+source+\"}\\n\";source=\"var __t,__p='',__j=Array.prototype.join,\"+\"print=function(){__p+=__j.call(arguments,'');};\\n\"+source+\"return __p;\\n\";try{render=new Function(settings.variable||\"obj\",\"_\",source)}catch(e){e.source=source;throw e}if(data)return render(data,_);var template=function(data){return render.call(this,data,_)};template.source=\"function(\"+(settings.variable||\"obj\")+\"){\\n\"+source+\"}\";return template};_.chain=function(obj){return _(obj).chain()};var result=function(obj){return this._chain?_(obj).chain():obj};_.mixin(_);each([\"pop\",\"push\",\"reverse\",\"shift\",\"sort\",\"splice\",\"unshift\"],function(name){var method=ArrayProto[name];_.prototype[name]=function(){var obj=this._wrapped;method.apply(obj,arguments);if((name==\"shift\"||name==\"splice\")&&obj.length===0)delete obj[0];return result.call(this,obj)}});each([\"concat\",\"join\",\"slice\"],function(name){var method=ArrayProto[name];_.prototype[name]=function(){return result.call(this,method.apply(this._wrapped,arguments))}});_.extend(_.prototype,{chain:function(){this._chain=true;return this},value:function(){return this._wrapped}})}.call(this)}()},{}],21:[function(require,module,exports){window.requestAnimFrame=function(){return window.requestAnimationFrame||window.webkitRequestAnimationFrame||window.mozRequestAnimationFrame||window.oRequestAnimationFrame||window.msRequestAnimationFrame||function(callback){window.setTimeout(callback,1e3/60)}}();Leap=require(\"../lib/index\")},{\"../lib/index\":8}]},{},[21]);\n\n/*\n * Leap Motion integration for Reveal.js.\n * James Sun  [sun16]\n * Rory Hardy [gneatgeek]\n */\n\n(function () {\n  var body        = document.body,\n      controller  = new Leap.Controller({ enableGestures: true }),\n      lastGesture = 0,\n      leapConfig  = Reveal.getConfig().leap,\n      pointer     = document.createElement( 'div' ),\n      config      = {\n        autoCenter       : true,      // Center pointer around detected position.\n        gestureDelay     : 500,       // How long to delay between gestures.\n        naturalSwipe     : true,      // Swipe as if it were a touch screen.\n        pointerColor     : '#00aaff', // Default color of the pointer.\n        pointerOpacity   : 0.7,       // Default opacity of the pointer.\n        pointerSize      : 15,        // Default minimum height/width of the pointer.\n        pointerTolerance : 120        // Bigger = slower pointer.\n      },\n      entered, enteredPosition, now, size, tipPosition; // Other vars we need later, but don't need to redeclare.\n\n      // Merge user defined settings with defaults\n      if( leapConfig ) {\n        for( key in leapConfig ) {\n          config[key] = leapConfig[key];\n        }\n      }\n\n      pointer.id = 'leap';\n\n      pointer.style.position        = 'absolute';\n      pointer.style.visibility      = 'hidden';\n      pointer.style.zIndex          = 50;\n      pointer.style.opacity         = config.pointerOpacity;\n      pointer.style.backgroundColor = config.pointerColor;\n\n      body.appendChild( pointer );\n\n  // Leap's loop\n  controller.on( 'frame', function ( frame ) {\n    // Timing code to rate limit gesture execution\n    now = new Date().getTime();\n\n    // Pointer: 1 to 2 fingers. Strictly one finger works but may cause innaccuracies.\n    // The innaccuracies were observed on a development model and may not be an issue with consumer models.\n    if( frame.fingers.length > 0 && frame.fingers.length < 3 ) {\n      // Invert direction and multiply by 3 for greater effect.\n      size = -3 * frame.fingers[0].tipPosition[2];\n\n      if( size < config.pointerSize ) {\n        size = config.pointerSize;\n      }\n\n      pointer.style.width        = size     + 'px';\n      pointer.style.height       = size     + 'px';\n      pointer.style.borderRadius = size - 5 + 'px';\n      pointer.style.visibility   = 'visible';\n\n      tipPosition = frame.fingers[0].tipPosition;\n\n      if( config.autoCenter ) {\n        \n\n        // Check whether the finger has entered the z range of the Leap Motion. Used for the autoCenter option.\n        if( !entered ) {\n          entered         = true;\n          enteredPosition = frame.fingers[0].tipPosition;\n        }\n\n        pointer.style.top =\n          (-1 * (( tipPosition[1] - enteredPosition[1] ) * body.offsetHeight / config.pointerTolerance )) +\n            ( body.offsetHeight / 2 ) + 'px';\n\n        pointer.style.left =\n          (( tipPosition[0] - enteredPosition[0] ) * body.offsetWidth / config.pointerTolerance ) +\n            ( body.offsetWidth / 2 ) + 'px';\n      }\n      else {\n        pointer.style.top  = ( 1 - (( tipPosition[1] - 50) / config.pointerTolerance )) *\n          body.offsetHeight + 'px';\n\n        pointer.style.left = ( tipPosition[0] * body.offsetWidth / config.pointerTolerance ) +\n          ( body.offsetWidth / 2 ) + 'px';\n      }\n    }\n    else {\n      // Hide pointer on exit\n      entered                  = false;\n      pointer.style.visibility = 'hidden';\n    }\n\n    // Gestures\n    if( frame.gestures.length > 0 && (now - lastGesture) > config.gestureDelay ) {\n      var gesture = frame.gestures[0];\n\n      // One hand gestures\n      if( frame.hands.length === 1 ) {\n        // Swipe gestures. 3+ fingers.\n        if( frame.fingers.length > 2 && gesture.type === 'swipe' ) {\n          // Define here since some gestures will throw undefined for these.\n          var x = gesture.direction[0],\n              y = gesture.direction[1];\n\n          // Left/right swipe gestures\n          if( Math.abs( x ) > Math.abs( y )) {\n            if( x > 0 ) {\n              config.naturalSwipe ? Reveal.left() : Reveal.right();\n            }\n            else {\n              config.naturalSwipe ? Reveal.right() : Reveal.left();\n            }\n          }\n          // Up/down swipe gestures\n          else {\n            if( y > 0 ) {\n              config.naturalSwipe ? Reveal.down() : Reveal.up();\n            }\n            else {\n              config.naturalSwipe ? Reveal.up() : Reveal.down();\n            }\n          }\n\n          lastGesture = now;\n        }\n      }\n      // Two hand gestures\n      else if( frame.hands.length === 2 ) {\n        // Upward two hand swipe gesture\n        if( gesture.type === 'swipe' && gesture.direction[1] > 0 ) {\n          Reveal.toggleOverview();\n        }\n\n        lastGesture = now;\n      }\n    }\n  });\n\n  controller.connect();\n})();\n"
  },
  {
    "path": "presentation/plugin/markdown/example.html",
    "content": "<!doctype html>\n<html lang=\"en\">\n\n\t<head>\n\t\t<meta charset=\"utf-8\">\n\n\t\t<title>reveal.js - Markdown Demo</title>\n\n\t\t<link rel=\"stylesheet\" href=\"../../css/reveal.css\">\n\t\t<link rel=\"stylesheet\" href=\"../../css/theme/default.css\" id=\"theme\">\n\n        <link rel=\"stylesheet\" href=\"../../lib/css/zenburn.css\">\n\t</head>\n\n\t<body>\n\n\t\t<div class=\"reveal\">\n\n\t\t\t<div class=\"slides\">\n\n                <!-- Use external markdown resource, separate slides by three newlines; vertical slides by two newlines -->\n                <section data-markdown=\"example.md\" data-separator=\"^\\n\\n\\n\" data-separator-vertical=\"^\\n\\n\"></section>\n\n                <!-- Slides are separated by three dashes (quick 'n dirty regular expression) -->\n                <section data-markdown data-separator=\"---\">\n                    <script type=\"text/template\">\n                        ## Demo 1\n                        Slide 1\n                        ---\n                        ## Demo 1\n                        Slide 2\n                        ---\n                        ## Demo 1\n                        Slide 3\n                    </script>\n                </section>\n\n                <!-- Slides are separated by newline + three dashes + newline, vertical slides identical but two dashes -->\n                <section data-markdown data-separator=\"^\\n---\\n$\" data-separator-vertical=\"^\\n--\\n$\">\n                    <script type=\"text/template\">\n                        ## Demo 2\n                        Slide 1.1\n\n                        --\n\n                        ## Demo 2\n                        Slide 1.2\n\n                        ---\n\n                        ## Demo 2\n                        Slide 2\n                    </script>\n                </section>\n\n                <!-- No \"extra\" slides, since there are no separators defined (so they'll become horizontal rulers) -->\n                <section data-markdown>\n                    <script type=\"text/template\">\n                        A\n\n                        ---\n\n                        B\n\n                        ---\n\n                        C\n                    </script>\n                </section>\n\n                <!-- Slide attributes -->\n                <section data-markdown>\n                    <script type=\"text/template\">\n                        <!-- .slide: data-background=\"#000000\" -->\n                        ## Slide attributes\n                    </script>\n                </section>\n\n                <!-- Element attributes -->\n                <section data-markdown>\n                    <script type=\"text/template\">\n                        ## Element attributes\n                        - Item 1 <!-- .element: class=\"fragment\" data-fragment-index=\"2\" -->\n                        - Item 2 <!-- .element: class=\"fragment\" data-fragment-index=\"1\" -->\n                    </script>\n                </section>\n\n                <!-- Code -->\n                <section data-markdown>\n                    <script type=\"text/template\">\n                        ```php\n                        public function foo()\n                        {\n                            $foo = array(\n                                'bar' => 'bar'\n                            )\n                        }\n                        ```\n                    </script>\n                </section>\n\n            </div>\n\t\t</div>\n\n\t\t<script src=\"../../lib/js/head.min.js\"></script>\n\t\t<script src=\"../../js/reveal.js\"></script>\n\n\t\t<script>\n\n\t\t\tReveal.initialize({\n\t\t\t\tcontrols: true,\n\t\t\t\tprogress: true,\n\t\t\t\thistory: true,\n\t\t\t\tcenter: true,\n\n\t\t\t\t// Optional libraries used to extend on reveal.js\n\t\t\t\tdependencies: [\n\t\t\t\t\t{ src: '../../lib/js/classList.js', condition: function() { return !document.body.classList; } },\n\t\t\t\t\t{ src: 'marked.js', condition: function() { return !!document.querySelector( '[data-markdown]' ); } },\n                    { src: 'markdown.js', condition: function() { return !!document.querySelector( '[data-markdown]' ); } },\n                    { src: '../highlight/highlight.js', async: true, callback: function() { hljs.initHighlightingOnLoad(); } },\n\t\t\t\t\t{ src: '../notes/notes.js' }\n\t\t\t\t]\n\t\t\t});\n\n\t\t</script>\n\n\t</body>\n</html>\n"
  },
  {
    "path": "presentation/plugin/markdown/example.md",
    "content": "# Markdown Demo\n\n\n\n## External 1.1\n\nContent 1.1\n\nNote: This will only appear in the speaker notes window.\n\n\n## External 1.2\n\nContent 1.2\n\n\n\n## External 2\n\nContent 2.1\n\n\n\n## External 3.1\n\nContent 3.1\n\n\n## External 3.2\n\nContent 3.2\n"
  },
  {
    "path": "presentation/plugin/markdown/markdown.js",
    "content": "/**\n * The reveal.js markdown plugin. Handles parsing of\n * markdown inside of presentations as well as loading\n * of external markdown documents.\n */\n(function( root, factory ) {\n\tif( typeof exports === 'object' ) {\n\t\tmodule.exports = factory( require( './marked' ) );\n\t}\n\telse {\n\t\t// Browser globals (root is window)\n\t\troot.RevealMarkdown = factory( root.marked );\n\t\troot.RevealMarkdown.initialize();\n\t}\n}( this, function( marked ) {\n\n\tif( typeof marked === 'undefined' ) {\n\t\tthrow 'The reveal.js Markdown plugin requires marked to be loaded';\n\t}\n\n\tif( typeof hljs !== 'undefined' ) {\n\t\tmarked.setOptions({\n\t\t\thighlight: function( lang, code ) {\n\t\t\t\treturn hljs.highlightAuto( lang, code ).value;\n\t\t\t}\n\t\t});\n\t}\n\n\tvar DEFAULT_SLIDE_SEPARATOR = '^\\n---\\n$',\n\t\tDEFAULT_NOTES_SEPARATOR = 'note:',\n\t\tDEFAULT_ELEMENT_ATTRIBUTES_SEPARATOR = '\\\\\\.element\\\\\\s*?(.+?)$',\n\t\tDEFAULT_SLIDE_ATTRIBUTES_SEPARATOR = '\\\\\\.slide:\\\\\\s*?(\\\\\\S.+?)$';\n\n\n\t/**\n\t * Retrieves the markdown contents of a slide section\n\t * element. Normalizes leading tabs/whitespace.\n\t */\n\tfunction getMarkdownFromSlide( section ) {\n\n\t\tvar template = section.querySelector( 'script' );\n\n\t\t// strip leading whitespace so it isn't evaluated as code\n\t\tvar text = ( template || section ).textContent;\n\n\t\tvar leadingWs = text.match( /^\\n?(\\s*)/ )[1].length,\n\t\t\tleadingTabs = text.match( /^\\n?(\\t*)/ )[1].length;\n\n\t\tif( leadingTabs > 0 ) {\n\t\t\ttext = text.replace( new RegExp('\\\\n?\\\\t{' + leadingTabs + '}','g'), '\\n' );\n\t\t}\n\t\telse if( leadingWs > 1 ) {\n\t\t\ttext = text.replace( new RegExp('\\\\n? {' + leadingWs + '}'), '\\n' );\n\t\t}\n\n\t\treturn text;\n\n\t}\n\n\t/**\n\t * Given a markdown slide section element, this will\n\t * return all arguments that aren't related to markdown\n\t * parsing. Used to forward any other user-defined arguments\n\t * to the output markdown slide.\n\t */\n\tfunction getForwardedAttributes( section ) {\n\n\t\tvar attributes = section.attributes;\n\t\tvar result = [];\n\n\t\tfor( var i = 0, len = attributes.length; i < len; i++ ) {\n\t\t\tvar name = attributes[i].name,\n\t\t\t\tvalue = attributes[i].value;\n\n\t\t\t// disregard attributes that are used for markdown loading/parsing\n\t\t\tif( /data\\-(markdown|separator|vertical|notes)/gi.test( name ) ) continue;\n\n\t\t\tif( value ) {\n\t\t\t\tresult.push( name + '=' + value );\n\t\t\t}\n\t\t\telse {\n\t\t\t\tresult.push( name );\n\t\t\t}\n\t\t}\n\n\t\treturn result.join( ' ' );\n\n\t}\n\n\t/**\n\t * Inspects the given options and fills out default\n\t * values for what's not defined.\n\t */\n\tfunction getSlidifyOptions( options ) {\n\n\t\toptions = options || {};\n\t\toptions.separator = options.separator || DEFAULT_SLIDE_SEPARATOR;\n\t\toptions.notesSeparator = options.notesSeparator || DEFAULT_NOTES_SEPARATOR;\n\t\toptions.attributes = options.attributes || '';\n\n\t\treturn options;\n\n\t}\n\n\t/**\n\t * Helper function for constructing a markdown slide.\n\t */\n\tfunction createMarkdownSlide( content, options ) {\n\n\t\toptions = getSlidifyOptions( options );\n\n\t\tvar notesMatch = content.split( new RegExp( options.notesSeparator, 'mgi' ) );\n\n\t\tif( notesMatch.length === 2 ) {\n\t\t\tcontent = notesMatch[0] + '<aside class=\"notes\" data-markdown>' + notesMatch[1].trim() + '</aside>';\n\t\t}\n\n\t\treturn '<script type=\"text/template\">' + content + '</script>';\n\n\t}\n\n\t/**\n\t * Parses a data string into multiple slides based\n\t * on the passed in separator arguments.\n\t */\n\tfunction slidify( markdown, options ) {\n\n\t\toptions = getSlidifyOptions( options );\n\n\t\tvar separatorRegex = new RegExp( options.separator + ( options.verticalSeparator ? '|' + options.verticalSeparator : '' ), 'mg' ),\n\t\t\thorizontalSeparatorRegex = new RegExp( options.separator );\n\n\t\tvar matches,\n\t\t\tlastIndex = 0,\n\t\t\tisHorizontal,\n\t\t\twasHorizontal = true,\n\t\t\tcontent,\n\t\t\tsectionStack = [];\n\n\t\t// iterate until all blocks between separators are stacked up\n\t\twhile( matches = separatorRegex.exec( markdown ) ) {\n\t\t\tnotes = null;\n\n\t\t\t// determine direction (horizontal by default)\n\t\t\tisHorizontal = horizontalSeparatorRegex.test( matches[0] );\n\n\t\t\tif( !isHorizontal && wasHorizontal ) {\n\t\t\t\t// create vertical stack\n\t\t\t\tsectionStack.push( [] );\n\t\t\t}\n\n\t\t\t// pluck slide content from markdown input\n\t\t\tcontent = markdown.substring( lastIndex, matches.index );\n\n\t\t\tif( isHorizontal && wasHorizontal ) {\n\t\t\t\t// add to horizontal stack\n\t\t\t\tsectionStack.push( content );\n\t\t\t}\n\t\t\telse {\n\t\t\t\t// add to vertical stack\n\t\t\t\tsectionStack[sectionStack.length-1].push( content );\n\t\t\t}\n\n\t\t\tlastIndex = separatorRegex.lastIndex;\n\t\t\twasHorizontal = isHorizontal;\n\t\t}\n\n\t\t// add the remaining slide\n\t\t( wasHorizontal ? sectionStack : sectionStack[sectionStack.length-1] ).push( markdown.substring( lastIndex ) );\n\n\t\tvar markdownSections = '';\n\n\t\t// flatten the hierarchical stack, and insert <section data-markdown> tags\n\t\tfor( var i = 0, len = sectionStack.length; i < len; i++ ) {\n\t\t\t// vertical\n\t\t\tif( sectionStack[i] instanceof Array ) {\n\t\t\t\tmarkdownSections += '<section '+ options.attributes +'>';\n\n\t\t\t\tsectionStack[i].forEach( function( child ) {\n\t\t\t\t\tmarkdownSections += '<section data-markdown>' +  createMarkdownSlide( child, options ) + '</section>';\n\t\t\t\t} );\n\n\t\t\t\tmarkdownSections += '</section>';\n\t\t\t}\n\t\t\telse {\n\t\t\t\tmarkdownSections += '<section '+ options.attributes +' data-markdown>' + createMarkdownSlide( sectionStack[i], options ) + '</section>';\n\t\t\t}\n\t\t}\n\n\t\treturn markdownSections;\n\n\t}\n\n\t/**\n\t * Parses any current data-markdown slides, splits\n\t * multi-slide markdown into separate sections and\n\t * handles loading of external markdown.\n\t */\n\tfunction processSlides() {\n\n\t\tvar sections = document.querySelectorAll( '[data-markdown]'),\n\t\t\tsection;\n\n\t\tfor( var i = 0, len = sections.length; i < len; i++ ) {\n\n\t\t\tsection = sections[i];\n\n\t\t\tif( section.getAttribute( 'data-markdown' ).length ) {\n\n\t\t\t\tvar xhr = new XMLHttpRequest(),\n\t\t\t\t\turl = section.getAttribute( 'data-markdown' );\n\n\t\t\t\tdatacharset = section.getAttribute( 'data-charset' );\n\n\t\t\t\t// see https://developer.mozilla.org/en-US/docs/Web/API/element.getAttribute#Notes\n\t\t\t\tif( datacharset != null && datacharset != '' ) {\n\t\t\t\t\txhr.overrideMimeType( 'text/html; charset=' + datacharset );\n\t\t\t\t}\n\n\t\t\t\txhr.onreadystatechange = function() {\n\t\t\t\t\tif( xhr.readyState === 4 ) {\n\t\t\t\t\t\t// file protocol yields status code 0 (useful for local debug, mobile applications etc.)\n\t\t\t\t\t\tif ( ( xhr.status >= 200 && xhr.status < 300 ) || xhr.status === 0 ) {\n\n\t\t\t\t\t\t\tsection.outerHTML = slidify( xhr.responseText, {\n\t\t\t\t\t\t\t\tseparator: section.getAttribute( 'data-separator' ),\n\t\t\t\t\t\t\t\tverticalSeparator: section.getAttribute( 'data-separator-vertical' ),\n\t\t\t\t\t\t\t\tnotesSeparator: section.getAttribute( 'data-separator-notes' ),\n\t\t\t\t\t\t\t\tattributes: getForwardedAttributes( section )\n\t\t\t\t\t\t\t});\n\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse {\n\n\t\t\t\t\t\t\tsection.outerHTML = '<section data-state=\"alert\">' +\n\t\t\t\t\t\t\t\t'ERROR: The attempt to fetch ' + url + ' failed with HTTP status ' + xhr.status + '.' +\n\t\t\t\t\t\t\t\t'Check your browser\\'s JavaScript console for more details.' +\n\t\t\t\t\t\t\t\t'<p>Remember that you need to serve the presentation HTML from a HTTP server.</p>' +\n\t\t\t\t\t\t\t\t'</section>';\n\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t};\n\n\t\t\t\txhr.open( 'GET', url, false );\n\n\t\t\t\ttry {\n\t\t\t\t\txhr.send();\n\t\t\t\t}\n\t\t\t\tcatch ( e ) {\n\t\t\t\t\talert( 'Failed to get the Markdown file ' + url + '. Make sure that the presentation and the file are served by a HTTP server and the file can be found there. ' + e );\n\t\t\t\t}\n\n\t\t\t}\n\t\t\telse if( section.getAttribute( 'data-separator' ) || section.getAttribute( 'data-separator-vertical' ) || section.getAttribute( 'data-separator-notes' ) ) {\n\n\t\t\t\tsection.outerHTML = slidify( getMarkdownFromSlide( section ), {\n\t\t\t\t\tseparator: section.getAttribute( 'data-separator' ),\n\t\t\t\t\tverticalSeparator: section.getAttribute( 'data-separator-vertical' ),\n\t\t\t\t\tnotesSeparator: section.getAttribute( 'data-separator-notes' ),\n\t\t\t\t\tattributes: getForwardedAttributes( section )\n\t\t\t\t});\n\n\t\t\t}\n\t\t\telse {\n\t\t\t\tsection.innerHTML = createMarkdownSlide( getMarkdownFromSlide( section ) );\n\t\t\t}\n\t\t}\n\n\t}\n\n\t/**\n\t * Check if a node value has the attributes pattern.\n\t * If yes, extract it and add that value as one or several attributes\n\t * the the terget element.\n\t *\n\t * You need Cache Killer on Chrome to see the effect on any FOM transformation\n\t * directly on refresh (F5)\n\t * http://stackoverflow.com/questions/5690269/disabling-chrome-cache-for-website-development/7000899#answer-11786277\n\t */\n\tfunction addAttributeInElement( node, elementTarget, separator ) {\n\n\t\tvar mardownClassesInElementsRegex = new RegExp( separator, 'mg' );\n\t\tvar mardownClassRegex = new RegExp( \"([^\\\"= ]+?)=\\\"([^\\\"=]+?)\\\"\", 'mg' );\n\t\tvar nodeValue = node.nodeValue;\n\t\tif( matches = mardownClassesInElementsRegex.exec( nodeValue ) ) {\n\n\t\t\tvar classes = matches[1];\n\t\t\tnodeValue = nodeValue.substring( 0, matches.index ) + nodeValue.substring( mardownClassesInElementsRegex.lastIndex );\n\t\t\tnode.nodeValue = nodeValue;\n\t\t\twhile( matchesClass = mardownClassRegex.exec( classes ) ) {\n\t\t\t\telementTarget.setAttribute( matchesClass[1], matchesClass[2] );\n\t\t\t}\n\t\t\treturn true;\n\t\t}\n\t\treturn false;\n\t}\n\n\t/**\n\t * Add attributes to the parent element of a text node,\n\t * or the element of an attribute node.\n\t */\n\tfunction addAttributes( section, element, previousElement, separatorElementAttributes, separatorSectionAttributes ) {\n\n\t\tif ( element != null && element.childNodes != undefined && element.childNodes.length > 0 ) {\n\t\t\tpreviousParentElement = element;\n\t\t\tfor( var i = 0; i < element.childNodes.length; i++ ) {\n\t\t\t\tchildElement = element.childNodes[i];\n\t\t\t\tif ( i > 0 ) {\n\t\t\t\t\tj = i - 1;\n\t\t\t\t\twhile ( j >= 0 ) {\n\t\t\t\t\t\taPreviousChildElement = element.childNodes[j];\n\t\t\t\t\t\tif ( typeof aPreviousChildElement.setAttribute == 'function' && aPreviousChildElement.tagName != \"BR\" ) {\n\t\t\t\t\t\t\tpreviousParentElement = aPreviousChildElement;\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tj = j - 1;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tparentSection = section;\n\t\t\t\tif( childElement.nodeName ==  \"section\" ) {\n\t\t\t\t\tparentSection = childElement ;\n\t\t\t\t\tpreviousParentElement = childElement ;\n\t\t\t\t}\n\t\t\t\tif ( typeof childElement.setAttribute == 'function' || childElement.nodeType == Node.COMMENT_NODE ) {\n\t\t\t\t\taddAttributes( parentSection, childElement, previousParentElement, separatorElementAttributes, separatorSectionAttributes );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif ( element.nodeType == Node.COMMENT_NODE ) {\n\t\t\tif ( addAttributeInElement( element, previousElement, separatorElementAttributes ) == false ) {\n\t\t\t\taddAttributeInElement( element, section, separatorSectionAttributes );\n\t\t\t}\n\t\t}\n\t}\n\n\t/**\n\t * Converts any current data-markdown slides in the\n\t * DOM to HTML.\n\t */\n\tfunction convertSlides() {\n\n\t\tvar sections = document.querySelectorAll( '[data-markdown]');\n\n\t\tfor( var i = 0, len = sections.length; i < len; i++ ) {\n\n\t\t\tvar section = sections[i];\n\n\t\t\t// Only parse the same slide once\n\t\t\tif( !section.getAttribute( 'data-markdown-parsed' ) ) {\n\n\t\t\t\tsection.setAttribute( 'data-markdown-parsed', true )\n\n\t\t\t\tvar notes = section.querySelector( 'aside.notes' );\n\t\t\t\tvar markdown = getMarkdownFromSlide( section );\n\n\t\t\t\tsection.innerHTML = marked( markdown );\n\t\t\t\taddAttributes( \tsection, section, null, section.getAttribute( 'data-element-attributes' ) ||\n\t\t\t\t\t\t\t\tsection.parentNode.getAttribute( 'data-element-attributes' ) ||\n\t\t\t\t\t\t\t\tDEFAULT_ELEMENT_ATTRIBUTES_SEPARATOR,\n\t\t\t\t\t\t\t\tsection.getAttribute( 'data-attributes' ) ||\n\t\t\t\t\t\t\t\tsection.parentNode.getAttribute( 'data-attributes' ) ||\n\t\t\t\t\t\t\t\tDEFAULT_SLIDE_ATTRIBUTES_SEPARATOR);\n\n\t\t\t\t// If there were notes, we need to re-add them after\n\t\t\t\t// having overwritten the section's HTML\n\t\t\t\tif( notes ) {\n\t\t\t\t\tsection.appendChild( notes );\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\t// API\n\treturn {\n\n\t\tinitialize: function() {\n\t\t\tprocessSlides();\n\t\t\tconvertSlides();\n\t\t},\n\n\t\t// TODO: Do these belong in the API?\n\t\tprocessSlides: processSlides,\n\t\tconvertSlides: convertSlides,\n\t\tslidify: slidify\n\n\t};\n\n}));\n"
  },
  {
    "path": "presentation/plugin/markdown/marked.js",
    "content": "/**\n * marked - a markdown parser\n * Copyright (c) 2011-2013, Christopher Jeffrey. (MIT Licensed)\n * https://github.com/chjj/marked\n */\n\n(function(){var block={newline:/^\\n+/,code:/^( {4}[^\\n]+\\n*)+/,fences:noop,hr:/^( *[-*_]){3,} *(?:\\n+|$)/,heading:/^ *(#{1,6}) *([^\\n]+?) *#* *(?:\\n+|$)/,nptable:noop,lheading:/^([^\\n]+)\\n *(=|-){3,} *\\n*/,blockquote:/^( *>[^\\n]+(\\n[^\\n]+)*\\n*)+/,list:/^( *)(bull) [\\s\\S]+?(?:hr|\\n{2,}(?! )(?!\\1bull )\\n*|\\s*$)/,html:/^ *(?:comment|closed|closing) *(?:\\n{2,}|\\s*$)/,def:/^ *\\[([^\\]]+)\\]: *<?([^\\s>]+)>?(?: +[\"(]([^\\n]+)[\")])? *(?:\\n+|$)/,table:noop,paragraph:/^((?:[^\\n]+\\n?(?!hr|heading|lheading|blockquote|tag|def))+)\\n*/,\ntext:/^[^\\n]+/};block.bullet=/(?:[*+-]|\\d+\\.)/;block.item=/^( *)(bull) [^\\n]*(?:\\n(?!\\1bull )[^\\n]*)*/;block.item=replace(block.item,\"gm\")(/bull/g,block.bullet)();block.list=replace(block.list)(/bull/g,block.bullet)(\"hr\",/\\n+(?=(?: *[-*_]){3,} *(?:\\n+|$))/)();block._tag=\"(?!(?:\"+\"a|em|strong|small|s|cite|q|dfn|abbr|data|time|code\"+\"|var|samp|kbd|sub|sup|i|b|u|mark|ruby|rt|rp|bdi|bdo\"+\"|span|br|wbr|ins|del|img)\\\\b)\\\\w+(?!:/|@)\\\\b\";block.html=replace(block.html)(\"comment\",/\\x3c!--[\\s\\S]*?--\\x3e/)(\"closed\",\n/<(tag)[\\s\\S]+?<\\/\\1>/)(\"closing\",/<tag(?:\"[^\"]*\"|'[^']*'|[^'\">])*?>/)(/tag/g,block._tag)();block.paragraph=replace(block.paragraph)(\"hr\",block.hr)(\"heading\",block.heading)(\"lheading\",block.lheading)(\"blockquote\",block.blockquote)(\"tag\",\"<\"+block._tag)(\"def\",block.def)();block.normal=merge({},block);block.gfm=merge({},block.normal,{fences:/^ *(`{3,}|~{3,}) *(\\S+)? *\\n([\\s\\S]+?)\\s*\\1 *(?:\\n+|$)/,paragraph:/^/});block.gfm.paragraph=replace(block.paragraph)(\"(?!\",\"(?!\"+block.gfm.fences.source.replace(\"\\\\1\",\n\"\\\\2\")+\"|\")();block.tables=merge({},block.gfm,{nptable:/^ *(\\S.*\\|.*)\\n *([-:]+ *\\|[-| :]*)\\n((?:.*\\|.*(?:\\n|$))*)\\n*/,table:/^ *\\|(.+)\\n *\\|( *[-:]+[-| :]*)\\n((?: *\\|.*(?:\\n|$))*)\\n*/});function Lexer(options){this.tokens=[];this.tokens.links={};this.options=options||marked.defaults;this.rules=block.normal;if(this.options.gfm)if(this.options.tables)this.rules=block.tables;else this.rules=block.gfm}Lexer.rules=block;Lexer.lex=function(src,options){var lexer=new Lexer(options);return lexer.lex(src)};\nLexer.prototype.lex=function(src){src=src.replace(/\\r\\n|\\r/g,\"\\n\").replace(/\\t/g,\"    \").replace(/\\u00a0/g,\" \").replace(/\\u2424/g,\"\\n\");return this.token(src,true)};Lexer.prototype.token=function(src,top){var src=src.replace(/^ +$/gm,\"\"),next,loose,cap,bull,b,item,space,i,l;while(src){if(cap=this.rules.newline.exec(src)){src=src.substring(cap[0].length);if(cap[0].length>1)this.tokens.push({type:\"space\"})}if(cap=this.rules.code.exec(src)){src=src.substring(cap[0].length);cap=cap[0].replace(/^ {4}/gm,\n\"\");this.tokens.push({type:\"code\",text:!this.options.pedantic?cap.replace(/\\n+$/,\"\"):cap});continue}if(cap=this.rules.fences.exec(src)){src=src.substring(cap[0].length);this.tokens.push({type:\"code\",lang:cap[2],text:cap[3]});continue}if(cap=this.rules.heading.exec(src)){src=src.substring(cap[0].length);this.tokens.push({type:\"heading\",depth:cap[1].length,text:cap[2]});continue}if(top&&(cap=this.rules.nptable.exec(src))){src=src.substring(cap[0].length);item={type:\"table\",header:cap[1].replace(/^ *| *\\| *$/g,\n\"\").split(/ *\\| */),align:cap[2].replace(/^ *|\\| *$/g,\"\").split(/ *\\| */),cells:cap[3].replace(/\\n$/,\"\").split(\"\\n\")};for(i=0;i<item.align.length;i++)if(/^ *-+: *$/.test(item.align[i]))item.align[i]=\"right\";else if(/^ *:-+: *$/.test(item.align[i]))item.align[i]=\"center\";else if(/^ *:-+ *$/.test(item.align[i]))item.align[i]=\"left\";else item.align[i]=null;for(i=0;i<item.cells.length;i++)item.cells[i]=item.cells[i].split(/ *\\| */);this.tokens.push(item);continue}if(cap=this.rules.lheading.exec(src)){src=\nsrc.substring(cap[0].length);this.tokens.push({type:\"heading\",depth:cap[2]===\"=\"?1:2,text:cap[1]});continue}if(cap=this.rules.hr.exec(src)){src=src.substring(cap[0].length);this.tokens.push({type:\"hr\"});continue}if(cap=this.rules.blockquote.exec(src)){src=src.substring(cap[0].length);this.tokens.push({type:\"blockquote_start\"});cap=cap[0].replace(/^ *> ?/gm,\"\");this.token(cap,top);this.tokens.push({type:\"blockquote_end\"});continue}if(cap=this.rules.list.exec(src)){src=src.substring(cap[0].length);\nbull=cap[2];this.tokens.push({type:\"list_start\",ordered:bull.length>1});cap=cap[0].match(this.rules.item);next=false;l=cap.length;i=0;for(;i<l;i++){item=cap[i];space=item.length;item=item.replace(/^ *([*+-]|\\d+\\.) +/,\"\");if(~item.indexOf(\"\\n \")){space-=item.length;item=!this.options.pedantic?item.replace(new RegExp(\"^ {1,\"+space+\"}\",\"gm\"),\"\"):item.replace(/^ {1,4}/gm,\"\")}if(this.options.smartLists&&i!==l-1){b=block.bullet.exec(cap[i+1])[0];if(bull!==b&&!(bull.length>1&&b.length>1)){src=cap.slice(i+\n1).join(\"\\n\")+src;i=l-1}}loose=next||/\\n\\n(?!\\s*$)/.test(item);if(i!==l-1){next=item[item.length-1]===\"\\n\";if(!loose)loose=next}this.tokens.push({type:loose?\"loose_item_start\":\"list_item_start\"});this.token(item,false);this.tokens.push({type:\"list_item_end\"})}this.tokens.push({type:\"list_end\"});continue}if(cap=this.rules.html.exec(src)){src=src.substring(cap[0].length);this.tokens.push({type:this.options.sanitize?\"paragraph\":\"html\",pre:cap[1]===\"pre\"||cap[1]===\"script\",text:cap[0]});continue}if(top&&\n(cap=this.rules.def.exec(src))){src=src.substring(cap[0].length);this.tokens.links[cap[1].toLowerCase()]={href:cap[2],title:cap[3]};continue}if(top&&(cap=this.rules.table.exec(src))){src=src.substring(cap[0].length);item={type:\"table\",header:cap[1].replace(/^ *| *\\| *$/g,\"\").split(/ *\\| */),align:cap[2].replace(/^ *|\\| *$/g,\"\").split(/ *\\| */),cells:cap[3].replace(/(?: *\\| *)?\\n$/,\"\").split(\"\\n\")};for(i=0;i<item.align.length;i++)if(/^ *-+: *$/.test(item.align[i]))item.align[i]=\"right\";else if(/^ *:-+: *$/.test(item.align[i]))item.align[i]=\n\"center\";else if(/^ *:-+ *$/.test(item.align[i]))item.align[i]=\"left\";else item.align[i]=null;for(i=0;i<item.cells.length;i++)item.cells[i]=item.cells[i].replace(/^ *\\| *| *\\| *$/g,\"\").split(/ *\\| */);this.tokens.push(item);continue}if(top&&(cap=this.rules.paragraph.exec(src))){src=src.substring(cap[0].length);this.tokens.push({type:\"paragraph\",text:cap[1][cap[1].length-1]===\"\\n\"?cap[1].slice(0,-1):cap[1]});continue}if(cap=this.rules.text.exec(src)){src=src.substring(cap[0].length);this.tokens.push({type:\"text\",\ntext:cap[0]});continue}if(src)throw new Error(\"Infinite loop on byte: \"+src.charCodeAt(0));}return this.tokens};var inline={escape:/^\\\\([\\\\`*{}\\[\\]()#+\\-.!_>])/,autolink:/^<([^ >]+(@|:\\/)[^ >]+)>/,url:noop,tag:/^\\x3c!--[\\s\\S]*?--\\x3e|^<\\/?\\w+(?:\"[^\"]*\"|'[^']*'|[^'\">])*?>/,link:/^!?\\[(inside)\\]\\(href\\)/,reflink:/^!?\\[(inside)\\]\\s*\\[([^\\]]*)\\]/,nolink:/^!?\\[((?:\\[[^\\]]*\\]|[^\\[\\]])*)\\]/,strong:/^__([\\s\\S]+?)__(?!_)|^\\*\\*([\\s\\S]+?)\\*\\*(?!\\*)/,em:/^\\b_((?:__|[\\s\\S])+?)_\\b|^\\*((?:\\*\\*|[\\s\\S])+?)\\*(?!\\*)/,\ncode:/^(`+)\\s*([\\s\\S]*?[^`])\\s*\\1(?!`)/,br:/^ {2,}\\n(?!\\s*$)/,del:noop,text:/^[\\s\\S]+?(?=[\\\\<!\\[_*`]| {2,}\\n|$)/};inline._inside=/(?:\\[[^\\]]*\\]|[^\\]]|\\](?=[^\\[]*\\]))*/;inline._href=/\\s*<?([^\\s]*?)>?(?:\\s+['\"]([\\s\\S]*?)['\"])?\\s*/;inline.link=replace(inline.link)(\"inside\",inline._inside)(\"href\",inline._href)();inline.reflink=replace(inline.reflink)(\"inside\",inline._inside)();inline.normal=merge({},inline);inline.pedantic=merge({},inline.normal,{strong:/^__(?=\\S)([\\s\\S]*?\\S)__(?!_)|^\\*\\*(?=\\S)([\\s\\S]*?\\S)\\*\\*(?!\\*)/,\nem:/^_(?=\\S)([\\s\\S]*?\\S)_(?!_)|^\\*(?=\\S)([\\s\\S]*?\\S)\\*(?!\\*)/});inline.gfm=merge({},inline.normal,{escape:replace(inline.escape)(\"])\",\"~|])\")(),url:/^(https?:\\/\\/[^\\s<]+[^<.,:;\"')\\]\\s])/,del:/^~~(?=\\S)([\\s\\S]*?\\S)~~/,text:replace(inline.text)(\"]|\",\"~]|\")(\"|\",\"|https?://|\")()});inline.breaks=merge({},inline.gfm,{br:replace(inline.br)(\"{2,}\",\"*\")(),text:replace(inline.gfm.text)(\"{2,}\",\"*\")()});function InlineLexer(links,options){this.options=options||marked.defaults;this.links=links;this.rules=inline.normal;\nif(!this.links)throw new Error(\"Tokens array requires a `links` property.\");if(this.options.gfm)if(this.options.breaks)this.rules=inline.breaks;else this.rules=inline.gfm;else if(this.options.pedantic)this.rules=inline.pedantic}InlineLexer.rules=inline;InlineLexer.output=function(src,links,options){var inline=new InlineLexer(links,options);return inline.output(src)};InlineLexer.prototype.output=function(src){var out=\"\",link,text,href,cap;while(src){if(cap=this.rules.escape.exec(src)){src=src.substring(cap[0].length);\nout+=cap[1];continue}if(cap=this.rules.autolink.exec(src)){src=src.substring(cap[0].length);if(cap[2]===\"@\"){text=cap[1][6]===\":\"?this.mangle(cap[1].substring(7)):this.mangle(cap[1]);href=this.mangle(\"mailto:\")+text}else{text=escape(cap[1]);href=text}out+='<a href=\"'+href+'\">'+text+\"</a>\";continue}if(cap=this.rules.url.exec(src)){src=src.substring(cap[0].length);text=escape(cap[1]);href=text;out+='<a href=\"'+href+'\">'+text+\"</a>\";continue}if(cap=this.rules.tag.exec(src)){src=src.substring(cap[0].length);\nout+=this.options.sanitize?escape(cap[0]):cap[0];continue}if(cap=this.rules.link.exec(src)){src=src.substring(cap[0].length);out+=this.outputLink(cap,{href:cap[2],title:cap[3]});continue}if((cap=this.rules.reflink.exec(src))||(cap=this.rules.nolink.exec(src))){src=src.substring(cap[0].length);link=(cap[2]||cap[1]).replace(/\\s+/g,\" \");link=this.links[link.toLowerCase()];if(!link||!link.href){out+=cap[0][0];src=cap[0].substring(1)+src;continue}out+=this.outputLink(cap,link);continue}if(cap=this.rules.strong.exec(src)){src=\nsrc.substring(cap[0].length);out+=\"<strong>\"+this.output(cap[2]||cap[1])+\"</strong>\";continue}if(cap=this.rules.em.exec(src)){src=src.substring(cap[0].length);out+=\"<em>\"+this.output(cap[2]||cap[1])+\"</em>\";continue}if(cap=this.rules.code.exec(src)){src=src.substring(cap[0].length);out+=\"<code>\"+escape(cap[2],true)+\"</code>\";continue}if(cap=this.rules.br.exec(src)){src=src.substring(cap[0].length);out+=\"<br>\";continue}if(cap=this.rules.del.exec(src)){src=src.substring(cap[0].length);out+=\"<del>\"+\nthis.output(cap[1])+\"</del>\";continue}if(cap=this.rules.text.exec(src)){src=src.substring(cap[0].length);out+=escape(cap[0]);continue}if(src)throw new Error(\"Infinite loop on byte: \"+src.charCodeAt(0));}return out};InlineLexer.prototype.outputLink=function(cap,link){if(cap[0][0]!==\"!\")return'<a href=\"'+escape(link.href)+'\"'+(link.title?' title=\"'+escape(link.title)+'\"':\"\")+\">\"+this.output(cap[1])+\"</a>\";else return'<img src=\"'+escape(link.href)+'\" alt=\"'+escape(cap[1])+'\"'+(link.title?' title=\"'+\nescape(link.title)+'\"':\"\")+\">\"};InlineLexer.prototype.smartypants=function(text){if(!this.options.smartypants)return text;return text.replace(/--/g,\"\\u2014\").replace(/'([^']*)'/g,\"\\u2018$1\\u2019\").replace(/\"([^\"]*)\"/g,\"\\u201c$1\\u201d\").replace(/\\.{3}/g,\"\\u2026\")};InlineLexer.prototype.mangle=function(text){var out=\"\",l=text.length,i=0,ch;for(;i<l;i++){ch=text.charCodeAt(i);if(Math.random()>0.5)ch=\"x\"+ch.toString(16);out+=\"&#\"+ch+\";\"}return out};function Parser(options){this.tokens=[];this.token=null;\nthis.options=options||marked.defaults}Parser.parse=function(src,options){var parser=new Parser(options);return parser.parse(src)};Parser.prototype.parse=function(src){this.inline=new InlineLexer(src.links,this.options);this.tokens=src.reverse();var out=\"\";while(this.next())out+=this.tok();return out};Parser.prototype.next=function(){return this.token=this.tokens.pop()};Parser.prototype.peek=function(){return this.tokens[this.tokens.length-1]||0};Parser.prototype.parseText=function(){var body=this.token.text;\nwhile(this.peek().type===\"text\")body+=\"\\n\"+this.next().text;return this.inline.output(body)};Parser.prototype.tok=function(){switch(this.token.type){case \"space\":return\"\";case \"hr\":return\"<hr>\\n\";case \"heading\":return\"<h\"+this.token.depth+\">\"+this.inline.output(this.token.text)+\"</h\"+this.token.depth+\">\\n\";case \"code\":if(this.options.highlight){var code=this.options.highlight(this.token.text,this.token.lang);if(code!=null&&code!==this.token.text){this.token.escaped=true;this.token.text=code}}if(!this.token.escaped)this.token.text=\nescape(this.token.text,true);return\"<pre><code\"+(this.token.lang?' class=\"'+this.options.langPrefix+this.token.lang+'\"':\"\")+\">\"+this.token.text+\"</code></pre>\\n\";case \"table\":var body=\"\",heading,i,row,cell,j;body+=\"<thead>\\n<tr>\\n\";for(i=0;i<this.token.header.length;i++){heading=this.inline.output(this.token.header[i]);body+=this.token.align[i]?'<th align=\"'+this.token.align[i]+'\">'+heading+\"</th>\\n\":\"<th>\"+heading+\"</th>\\n\"}body+=\"</tr>\\n</thead>\\n\";body+=\"<tbody>\\n\";for(i=0;i<this.token.cells.length;i++){row=\nthis.token.cells[i];body+=\"<tr>\\n\";for(j=0;j<row.length;j++){cell=this.inline.output(row[j]);body+=this.token.align[j]?'<td align=\"'+this.token.align[j]+'\">'+cell+\"</td>\\n\":\"<td>\"+cell+\"</td>\\n\"}body+=\"</tr>\\n\"}body+=\"</tbody>\\n\";return\"<table>\\n\"+body+\"</table>\\n\";case \"blockquote_start\":var body=\"\";while(this.next().type!==\"blockquote_end\")body+=this.tok();return\"<blockquote>\\n\"+body+\"</blockquote>\\n\";case \"list_start\":var type=this.token.ordered?\"ol\":\"ul\",body=\"\";while(this.next().type!==\"list_end\")body+=\nthis.tok();return\"<\"+type+\">\\n\"+body+\"</\"+type+\">\\n\";case \"list_item_start\":var body=\"\";while(this.next().type!==\"list_item_end\")body+=this.token.type===\"text\"?this.parseText():this.tok();return\"<li>\"+body+\"</li>\\n\";case \"loose_item_start\":var body=\"\";while(this.next().type!==\"list_item_end\")body+=this.tok();return\"<li>\"+body+\"</li>\\n\";case \"html\":return!this.token.pre&&!this.options.pedantic?this.inline.output(this.token.text):this.token.text;case \"paragraph\":return\"<p>\"+this.inline.output(this.token.text)+\n\"</p>\\n\";case \"text\":return\"<p>\"+this.parseText()+\"</p>\\n\"}};function escape(html,encode){return html.replace(!encode?/&(?!#?\\w+;)/g:/&/g,\"&amp;\").replace(/</g,\"&lt;\").replace(/>/g,\"&gt;\").replace(/\"/g,\"&quot;\").replace(/'/g,\"&#39;\")}function replace(regex,opt){regex=regex.source;opt=opt||\"\";return function self(name,val){if(!name)return new RegExp(regex,opt);val=val.source||val;val=val.replace(/(^|[^\\[])\\^/g,\"$1\");regex=regex.replace(name,val);return self}}function noop(){}noop.exec=noop;function merge(obj){var i=\n1,target,key;for(;i<arguments.length;i++){target=arguments[i];for(key in target)if(Object.prototype.hasOwnProperty.call(target,key))obj[key]=target[key]}return obj}function marked(src,opt,callback){if(callback||typeof opt===\"function\"){if(!callback){callback=opt;opt=null}if(opt)opt=merge({},marked.defaults,opt);var tokens=Lexer.lex(tokens,opt),highlight=opt.highlight,pending=0,l=tokens.length,i=0;if(!highlight||highlight.length<3)return callback(null,Parser.parse(tokens,opt));var done=function(){delete opt.highlight;\nvar out=Parser.parse(tokens,opt);opt.highlight=highlight;return callback(null,out)};for(;i<l;i++)(function(token){if(token.type!==\"code\")return;pending++;return highlight(token.text,token.lang,function(err,code){if(code==null||code===token.text)return--pending||done();token.text=code;token.escaped=true;--pending||done()})})(tokens[i]);return}try{if(opt)opt=merge({},marked.defaults,opt);return Parser.parse(Lexer.lex(src,opt),opt)}catch(e){e.message+=\"\\nPlease report this to https://github.com/chjj/marked.\";\nif((opt||marked.defaults).silent)return\"<p>An error occured:</p><pre>\"+escape(e.message+\"\",true)+\"</pre>\";throw e;}}marked.options=marked.setOptions=function(opt){merge(marked.defaults,opt);return marked};marked.defaults={gfm:true,tables:true,breaks:false,pedantic:false,sanitize:false,smartLists:false,silent:false,highlight:null,langPrefix:\"\"};marked.Parser=Parser;marked.parser=Parser.parse;marked.Lexer=Lexer;marked.lexer=Lexer.lex;marked.InlineLexer=InlineLexer;marked.inlineLexer=InlineLexer.output;\nmarked.parse=marked;if(typeof exports===\"object\")module.exports=marked;else if(typeof define===\"function\"&&define.amd)define(function(){return marked});else this.marked=marked}).call(function(){return this||(typeof window!==\"undefined\"?window:global)}());\n"
  },
  {
    "path": "presentation/plugin/math/math.js",
    "content": "/**\n * A plugin which enables rendering of math equations inside\n * of reveal.js slides. Essentially a thin wrapper for MathJax.\n *\n * @author Hakim El Hattab\n */\nvar RevealMath = window.RevealMath || (function(){\n\n\tvar options = Reveal.getConfig().math || {};\n\toptions.mathjax = options.mathjax || 'http://cdn.mathjax.org/mathjax/latest/MathJax.js';\n\toptions.config = options.config || 'TeX-AMS_HTML-full';\n\n\tloadScript( options.mathjax + '?config=' + options.config, function() {\n\n\t\tMathJax.Hub.Config({\n\t\t\tmessageStyle: 'none',\n\t\t\ttex2jax: { inlineMath: [['$','$'],['\\\\(','\\\\)']] },\n\t\t\tskipStartupTypeset: true\n\t\t});\n\n\t\t// Typeset followed by an immediate reveal.js layout since\n\t\t// the typesetting process could affect slide height\n\t\tMathJax.Hub.Queue( [ 'Typeset', MathJax.Hub ] );\n\t\tMathJax.Hub.Queue( Reveal.layout );\n\n\t\t// Reprocess equations in slides when they turn visible\n\t\tReveal.addEventListener( 'slidechanged', function( event ) {\n\n\t\t\tMathJax.Hub.Queue( [ 'Typeset', MathJax.Hub, event.currentSlide ] );\n\n\t\t} );\n\n\t} );\n\n\tfunction loadScript( url, callback ) {\n\n\t\tvar head = document.querySelector( 'head' );\n\t\tvar script = document.createElement( 'script' );\n\t\tscript.type = 'text/javascript';\n\t\tscript.src = url;\n\n\t\t// Wrapper for callback to make sure it only fires once\n\t\tvar finish = function() {\n\t\t\tif( typeof callback === 'function' ) {\n\t\t\t\tcallback.call();\n\t\t\t\tcallback = null;\n\t\t\t}\n\t\t}\n\n\t\tscript.onload = finish;\n\n\t\t// IE\n\t\tscript.onreadystatechange = function() {\n\t\t\tif ( this.readyState === 'loaded' ) {\n\t\t\t\tfinish();\n\t\t\t}\n\t\t}\n\n\t\t// Normal browsers\n\t\thead.appendChild( script );\n\n\t}\n\n})();\n"
  },
  {
    "path": "presentation/plugin/multiplex/client.js",
    "content": "(function() {\n\tvar multiplex = Reveal.getConfig().multiplex;\n\tvar socketId = multiplex.id;\n\tvar socket = io.connect(multiplex.url);\n\n\tsocket.on(multiplex.id, function(data) {\n\t\t// ignore data from sockets that aren't ours\n\t\tif (data.socketId !== socketId) { return; }\n\t\tif( window.location.host === 'localhost:1947' ) return;\n\n\t\tReveal.slide(data.indexh, data.indexv, data.indexf, 'remote');\n\t});\n}());\n"
  },
  {
    "path": "presentation/plugin/multiplex/index.js",
    "content": "var express\t\t= require('express');\nvar fs\t\t\t= require('fs');\nvar io\t\t\t= require('socket.io');\nvar crypto\t\t= require('crypto');\n\nvar app\t\t\t= express.createServer();\nvar staticDir\t= express.static;\n\nio\t\t\t\t= io.listen(app);\n\nvar opts = {\n\tport: 1948,\n\tbaseDir : __dirname + '/../../'\n};\n\nio.sockets.on('connection', function(socket) {\n\tsocket.on('slidechanged', function(slideData) {\n\t\tif (typeof slideData.secret == 'undefined' || slideData.secret == null || slideData.secret === '') return;\n\t\tif (createHash(slideData.secret) === slideData.socketId) {\n\t\t\tslideData.secret = null;\n\t\t\tsocket.broadcast.emit(slideData.socketId, slideData);\n\t\t};\n\t});\n});\n\napp.configure(function() {\n\t[ 'css', 'js', 'plugin', 'lib' ].forEach(function(dir) {\n\t\tapp.use('/' + dir, staticDir(opts.baseDir + dir));\n\t});\n});\n\napp.get(\"/\", function(req, res) {\n\tres.writeHead(200, {'Content-Type': 'text/html'});\n\tfs.createReadStream(opts.baseDir + '/index.html').pipe(res);\n});\n\napp.get(\"/token\", function(req,res) {\n\tvar ts = new Date().getTime();\n\tvar rand = Math.floor(Math.random()*9999999);\n\tvar secret = ts.toString() + rand.toString();\n\tres.send({secret: secret, socketId: createHash(secret)});\n});\n\nvar createHash = function(secret) {\n\tvar cipher = crypto.createCipher('blowfish', secret);\n\treturn(cipher.final('hex'));\n};\n\n// Actually listen\napp.listen(opts.port || null);\n\nvar brown = '\\033[33m',\n\tgreen = '\\033[32m',\n\treset = '\\033[0m';\n\nconsole.log( brown + \"reveal.js:\" + reset + \" Multiplex running on port \" + green + opts.port + reset );"
  },
  {
    "path": "presentation/plugin/multiplex/master.js",
    "content": "(function() {\n\t// Don't emit events from inside of notes windows\n\tif ( window.location.search.match( /receiver/gi ) ) { return; }\n\n\tvar multiplex = Reveal.getConfig().multiplex;\n\n\tvar socket = io.connect(multiplex.url);\n\n\tvar notify = function( slideElement, indexh, indexv, origin ) {\n\t\tif( typeof origin === 'undefined' && origin !== 'remote' ) {\n\t\t\tvar nextindexh;\n\t\t\tvar nextindexv;\n\n\t\t\tvar fragmentindex = Reveal.getIndices().f;\n\t\t\tif (typeof fragmentindex == 'undefined') {\n\t\t\t\tfragmentindex = 0;\n\t\t\t}\n\n\t\t\tif (slideElement.nextElementSibling && slideElement.parentNode.nodeName == 'SECTION') {\n\t\t\t\tnextindexh = indexh;\n\t\t\t\tnextindexv = indexv + 1;\n\t\t\t} else {\n\t\t\t\tnextindexh = indexh + 1;\n\t\t\t\tnextindexv = 0;\n\t\t\t}\n\n\t\t\tvar slideData = {\n\t\t\t\tindexh : indexh,\n\t\t\t\tindexv : indexv,\n\t\t\t\tindexf : fragmentindex,\n\t\t\t\tnextindexh : nextindexh,\n\t\t\t\tnextindexv : nextindexv,\n\t\t\t\tsecret: multiplex.secret,\n\t\t\t\tsocketId : multiplex.id\n\t\t\t};\n\n\t\t\tsocket.emit('slidechanged', slideData);\n\t\t}\n\t}\n\n\tReveal.addEventListener( 'slidechanged', function( event ) {\n\t\tnotify( event.currentSlide, event.indexh, event.indexv, event.origin );\n\t} );\n\n\tvar fragmentNotify = function( event ) {\n\t\tnotify( Reveal.getCurrentSlide(), Reveal.getIndices().h, Reveal.getIndices().v, event.origin );\n\t};\n\n\tReveal.addEventListener( 'fragmentshown', fragmentNotify );\n\tReveal.addEventListener( 'fragmenthidden', fragmentNotify );\n}());"
  },
  {
    "path": "presentation/plugin/notes/notes.html",
    "content": "<!doctype html>\n<html lang=\"en\">\n\t<head>\n\t\t<meta charset=\"utf-8\">\n\n\t\t<title>reveal.js - Slide Notes</title>\n\n\t\t<style>\n\t\t\tbody {\n\t\t\t\tfont-family: Helvetica;\n\t\t\t}\n\n\t\t\t#current-slide,\n\t\t\t#upcoming-slide,\n\t\t\t#speaker-controls {\n\t\t\t\tpadding: 6px;\n\t\t\t\tbox-sizing: border-box;\n\t\t\t\t-moz-box-sizing: border-box;\n\t\t\t}\n\n\t\t\t#current-slide iframe,\n\t\t\t#upcoming-slide iframe {\n\t\t\t\twidth: 100%;\n\t\t\t\theight: 100%;\n\t\t\t\tborder: 1px solid #ddd;\n\t\t\t}\n\n\t\t\t#current-slide .label,\n\t\t\t#upcoming-slide .label {\n\t\t\t\tposition: absolute;\n\t\t\t\ttop: 10px;\n\t\t\t\tleft: 10px;\n\t\t\t\tfont-weight: bold;\n\t\t\t\tfont-size: 14px;\n\t\t\t\tz-index: 2;\n\t\t\t\tcolor: rgba( 255, 255, 255, 0.9 );\n\t\t\t}\n\n\t\t\t#current-slide {\n\t\t\t\tposition: absolute;\n\t\t\t\twidth: 65%;\n\t\t\t\theight: 100%;\n\t\t\t\ttop: 0;\n\t\t\t\tleft: 0;\n\t\t\t\tpadding-right: 0;\n\t\t\t}\n\n\t\t\t#upcoming-slide {\n\t\t\t\tposition: absolute;\n\t\t\t\twidth: 35%;\n\t\t\t\theight: 40%;\n\t\t\t\tright: 0;\n\t\t\t\ttop: 0;\n\t\t\t}\n\n\t\t\t#speaker-controls {\n\t\t\t\tposition: absolute;\n\t\t\t\ttop: 40%;\n\t\t\t\tright: 0;\n\t\t\t\twidth: 35%;\n\t\t\t\theight: 60%;\n\t\t\t\toverflow: auto;\n\n\t\t\t\tfont-size: 18px;\n\t\t\t}\n\n\t\t\t\t.speaker-controls-time.hidden,\n\t\t\t\t.speaker-controls-notes.hidden {\n\t\t\t\t\tdisplay: none;\n\t\t\t\t}\n\n\t\t\t\t.speaker-controls-time .label,\n\t\t\t\t.speaker-controls-notes .label {\n\t\t\t\t\ttext-transform: uppercase;\n\t\t\t\t\tfont-weight: normal;\n\t\t\t\t\tfont-size: 0.66em;\n\t\t\t\t\tcolor: #666;\n\t\t\t\t\tmargin: 0;\n\t\t\t\t}\n\n\t\t\t\t.speaker-controls-time {\n\t\t\t\t\tborder-bottom: 1px solid rgba( 200, 200, 200, 0.5 );\n\t\t\t\t\tmargin-bottom: 10px;\n\t\t\t\t\tpadding: 10px 16px;\n\t\t\t\t\tpadding-bottom: 20px;\n\t\t\t\t\tcursor: pointer;\n\t\t\t\t}\n\n\t\t\t\t.speaker-controls-time .reset-button {\n\t\t\t\t\topacity: 0;\n\t\t\t\t\tfloat: right;\n\t\t\t\t\tcolor: #666;\n\t\t\t\t\ttext-decoration: none;\n\t\t\t\t}\n\t\t\t\t.speaker-controls-time:hover .reset-button {\n\t\t\t\t\topacity: 1;\n\t\t\t\t}\n\n\t\t\t\t.speaker-controls-time .timer,\n\t\t\t\t.speaker-controls-time .clock {\n\t\t\t\t\twidth: 50%;\n\t\t\t\t\tfont-size: 1.9em;\n\t\t\t\t}\n\n\t\t\t\t.speaker-controls-time .timer {\n\t\t\t\t\tfloat: left;\n\t\t\t\t}\n\n\t\t\t\t.speaker-controls-time .clock {\n\t\t\t\t\tfloat: right;\n\t\t\t\t\ttext-align: right;\n\t\t\t\t}\n\n\t\t\t\t.speaker-controls-time span.mute {\n\t\t\t\t\tcolor: #bbb;\n\t\t\t\t}\n\n\t\t\t\t.speaker-controls-notes {\n\t\t\t\t\tpadding: 10px 16px;\n\t\t\t\t}\n\n\t\t\t\t.speaker-controls-notes .value {\n\t\t\t\t\tmargin-top: 5px;\n\t\t\t\t\tline-height: 1.4;\n\t\t\t\t\tfont-size: 1.2em;\n\t\t\t\t}\n\n\t\t\t.clear {\n\t\t\t\tclear: both;\n\t\t\t}\n\n\t\t\t@media screen and (max-width: 1080px) {\n\t\t\t\t#speaker-controls {\n\t\t\t\t\tfont-size: 16px;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t@media screen and (max-width: 900px) {\n\t\t\t\t#speaker-controls {\n\t\t\t\t\tfont-size: 14px;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t@media screen and (max-width: 800px) {\n\t\t\t\t#speaker-controls {\n\t\t\t\t\tfont-size: 12px;\n\t\t\t\t}\n\t\t\t}\n\n\t\t</style>\n\t</head>\n\n\t<body>\n\n\t\t<div id=\"current-slide\"></div>\n\t\t<div id=\"upcoming-slide\"><span class=\"label\">UPCOMING:</span></div>\n\t\t<div id=\"speaker-controls\">\n\t\t\t<div class=\"speaker-controls-time\">\n\t\t\t\t<h4 class=\"label\">Time <span class=\"reset-button\">Click to Reset</span></h4>\n\t\t\t\t<div class=\"clock\">\n\t\t\t\t\t<span class=\"clock-value\">0:00 AM</span>\n\t\t\t\t</div>\n\t\t\t\t<div class=\"timer\">\n\t\t\t\t\t<span class=\"hours-value\">00</span><span class=\"minutes-value\">:00</span><span class=\"seconds-value\">:00</span>\n\t\t\t\t</div>\n\t\t\t\t<div class=\"clear\"></div>\n\t\t\t</div>\n\n\t\t\t<div class=\"speaker-controls-notes hidden\">\n\t\t\t\t<h4 class=\"label\">Notes</h4>\n\t\t\t\t<div class=\"value\"></div>\n\t\t\t</div>\n\t\t</div>\n\n\t\t<script src=\"../../plugin/markdown/marked.js\"></script>\n\t\t<script>\n\n\t\t\t(function() {\n\n\t\t\t\tvar notes,\n\t\t\t\t\tnotesValue,\n\t\t\t\t\tcurrentState,\n\t\t\t\t\tcurrentSlide,\n\t\t\t\t\tupcomingSlide,\n\t\t\t\t\tconnected = false;\n\n\t\t\t\twindow.addEventListener( 'message', function( event ) {\n\n\t\t\t\t\tvar data = JSON.parse( event.data );\n\n\t\t\t\t\t// Messages sent by the notes plugin inside of the main window\n\t\t\t\t\tif( data && data.namespace === 'reveal-notes' ) {\n\t\t\t\t\t\tif( data.type === 'connect' ) {\n\t\t\t\t\t\t\thandleConnectMessage( data );\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse if( data.type === 'state' ) {\n\t\t\t\t\t\t\thandleStateMessage( data );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\t// Messages sent by the reveal.js inside of the current slide preview\n\t\t\t\t\telse if( data && data.namespace === 'reveal' ) {\n\t\t\t\t\t\tif( /ready/.test( data.eventName ) ) {\n\t\t\t\t\t\t\t// Send a message back to notify that the handshake is complete\n\t\t\t\t\t\t\twindow.opener.postMessage( JSON.stringify({ namespace: 'reveal-notes', type: 'connected'} ), '*' );\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse if( /slidechanged|fragmentshown|fragmenthidden|overviewshown|overviewhidden|paused|resumed/.test( data.eventName ) && currentState !== JSON.stringify( data.state ) ) {\n\t\t\t\t\t\t\twindow.opener.postMessage( JSON.stringify({ method: 'setState', args: [ data.state ]} ), '*' );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t} );\n\n\t\t\t\t/**\n\t\t\t\t * Called when the main window is trying to establish a\n\t\t\t\t * connection.\n\t\t\t\t */\n\t\t\t\tfunction handleConnectMessage( data ) {\n\n\t\t\t\t\tif( connected === false ) {\n\t\t\t\t\t\tconnected = true;\n\n\t\t\t\t\t\tsetupIframes( data );\n\t\t\t\t\t\tsetupKeyboard();\n\t\t\t\t\t\tsetupNotes();\n\t\t\t\t\t\tsetupTimer();\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\t/**\n\t\t\t\t * Called when the main window sends an updated state.\n\t\t\t\t */\n\t\t\t\tfunction handleStateMessage( data ) {\n\n\t\t\t\t\t// Store the most recently set state to avoid circular loops\n\t\t\t\t\t// applying the same state\n\t\t\t\t\tcurrentState = JSON.stringify( data.state );\n\n\t\t\t\t\t// No need for updating the notes in case of fragment changes\n\t\t\t\t\tif ( data.notes ) {\n\t\t\t\t\t\tnotes.classList.remove( 'hidden' );\n\t\t\t\t\t\tif( data.markdown ) {\n\t\t\t\t\t\t\tnotesValue.innerHTML = marked( data.notes );\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse {\n\t\t\t\t\t\t\tnotesValue.innerHTML = data.notes;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t\tnotes.classList.add( 'hidden' );\n\t\t\t\t\t}\n\n\t\t\t\t\t// Update the note slides\n\t\t\t\t\tcurrentSlide.contentWindow.postMessage( JSON.stringify({ method: 'setState', args: [ data.state ] }), '*' );\n\t\t\t\t\tupcomingSlide.contentWindow.postMessage( JSON.stringify({ method: 'setState', args: [ data.state ] }), '*' );\n\t\t\t\t\tupcomingSlide.contentWindow.postMessage( JSON.stringify({ method: 'next' }), '*' );\n\n\t\t\t\t}\n\n\t\t\t\t// Limit to max one state update per X ms\n\t\t\t\thandleStateMessage = debounce( handleStateMessage, 200 );\n\n\t\t\t\t/**\n\t\t\t\t * Forward keyboard events to the current slide window.\n\t\t\t\t * This enables keyboard events to work even if focus\n\t\t\t\t * isn't set on the current slide iframe.\n\t\t\t\t */\n\t\t\t\tfunction setupKeyboard() {\n\n\t\t\t\t\tdocument.addEventListener( 'keydown', function( event ) {\n\t\t\t\t\t\tcurrentSlide.contentWindow.postMessage( JSON.stringify({ method: 'triggerKey', args: [ event.keyCode ] }), '*' );\n\t\t\t\t\t} );\n\n\t\t\t\t}\n\n\t\t\t\t/**\n\t\t\t\t * Creates the preview iframes.\n\t\t\t\t */\n\t\t\t\tfunction setupIframes( data ) {\n\n\t\t\t\t\tvar params = [\n\t\t\t\t\t\t'receiver',\n\t\t\t\t\t\t'progress=false',\n\t\t\t\t\t\t'history=false',\n\t\t\t\t\t\t'transition=none',\n\t\t\t\t\t\t'autoSlide=0',\n\t\t\t\t\t\t'backgroundTransition=none'\n\t\t\t\t\t].join( '&' );\n\n\t\t\t\t\tvar hash = '#/' + data.state.indexh + '/' + data.state.indexv;\n\t\t\t\t\tvar currentURL = data.url + '?' + params + '&postMessageEvents=true' + hash;\n\t\t\t\t\tvar upcomingURL = data.url + '?' + params + '&controls=false' + hash;\n\n\t\t\t\t\tcurrentSlide = document.createElement( 'iframe' );\n\t\t\t\t\tcurrentSlide.setAttribute( 'width', 1280 );\n\t\t\t\t\tcurrentSlide.setAttribute( 'height', 1024 );\n\t\t\t\t\tcurrentSlide.setAttribute( 'src', currentURL );\n\t\t\t\t\tdocument.querySelector( '#current-slide' ).appendChild( currentSlide );\n\n\t\t\t\t\tupcomingSlide = document.createElement( 'iframe' );\n\t\t\t\t\tupcomingSlide.setAttribute( 'width', 640 );\n\t\t\t\t\tupcomingSlide.setAttribute( 'height', 512 );\n\t\t\t\t\tupcomingSlide.setAttribute( 'src', upcomingURL );\n\t\t\t\t\tdocument.querySelector( '#upcoming-slide' ).appendChild( upcomingSlide );\n\n\t\t\t\t}\n\n\t\t\t\t/**\n\t\t\t\t * Setup the notes UI.\n\t\t\t\t */\n\t\t\t\tfunction setupNotes() {\n\n\t\t\t\t\tnotes = document.querySelector( '.speaker-controls-notes' );\n\t\t\t\t\tnotesValue = document.querySelector( '.speaker-controls-notes .value' );\n\n\t\t\t\t}\n\n\t\t\t\t/**\n\t\t\t\t * Create the timer and clock and start updating them\n\t\t\t\t * at an interval.\n\t\t\t\t */\n\t\t\t\tfunction setupTimer() {\n\n\t\t\t\t\tvar start = new Date(),\n\t\t\t\t\t\ttimeEl = document.querySelector( '.speaker-controls-time' ),\n\t\t\t\t\t\tclockEl = timeEl.querySelector( '.clock-value' ),\n\t\t\t\t\t\thoursEl = timeEl.querySelector( '.hours-value' ),\n\t\t\t\t\t\tminutesEl = timeEl.querySelector( '.minutes-value' ),\n\t\t\t\t\t\tsecondsEl = timeEl.querySelector( '.seconds-value' );\n\n\t\t\t\t\tfunction _updateTimer() {\n\n\t\t\t\t\t\tvar diff, hours, minutes, seconds,\n\t\t\t\t\t\t\tnow = new Date();\n\n\t\t\t\t\t\tdiff = now.getTime() - start.getTime();\n\t\t\t\t\t\thours = Math.floor( diff / ( 1000 * 60 * 60 ) );\n\t\t\t\t\t\tminutes = Math.floor( ( diff / ( 1000 * 60 ) ) % 60 );\n\t\t\t\t\t\tseconds = Math.floor( ( diff / 1000 ) % 60 );\n\n\t\t\t\t\t\tclockEl.innerHTML = now.toLocaleTimeString( 'en-US', { hour12: true, hour: '2-digit', minute:'2-digit' } );\n\t\t\t\t\t\thoursEl.innerHTML = zeroPadInteger( hours );\n\t\t\t\t\t\thoursEl.className = hours > 0 ? '' : 'mute';\n\t\t\t\t\t\tminutesEl.innerHTML = ':' + zeroPadInteger( minutes );\n\t\t\t\t\t\tminutesEl.className = minutes > 0 ? '' : 'mute';\n\t\t\t\t\t\tsecondsEl.innerHTML = ':' + zeroPadInteger( seconds );\n\n\t\t\t\t\t}\n\n\t\t\t\t\t// Update once directly\n\t\t\t\t\t_updateTimer();\n\n\t\t\t\t\t// Then update every second\n\t\t\t\t\tsetInterval( _updateTimer, 1000 );\n\n\t\t\t\t\ttimeEl.addEventListener( 'click', function() {\n\t\t\t\t\t\tstart = new Date();\n\t\t\t\t\t\t_updateTimer();\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t} );\n\n\t\t\t\t}\n\n\t\t\t\tfunction zeroPadInteger( num ) {\n\n\t\t\t\t\tvar str = '00' + parseInt( num );\n\t\t\t\t\treturn str.substring( str.length - 2 );\n\n\t\t\t\t}\n\n\t\t\t\t/**\n\t\t\t\t * Limits the frequency at which a function can be called.\n\t\t\t\t */\n\t\t\t\tfunction debounce( fn, ms ) {\n\n\t\t\t\t\tvar lastTime = 0,\n\t\t\t\t\t\ttimeout;\n\n\t\t\t\t\treturn function() {\n\n\t\t\t\t\t\tvar args = arguments;\n\t\t\t\t\t\tvar context = this;\n\n\t\t\t\t\t\tclearTimeout( timeout );\n\n\t\t\t\t\t\tvar timeSinceLastCall = Date.now() - lastTime;\n\t\t\t\t\t\tif( timeSinceLastCall > ms ) {\n\t\t\t\t\t\t\tfn.apply( context, args );\n\t\t\t\t\t\t\tlastTime = Date.now();\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse {\n\t\t\t\t\t\t\ttimeout = setTimeout( function() {\n\t\t\t\t\t\t\t\tfn.apply( context, args );\n\t\t\t\t\t\t\t\tlastTime = Date.now();\n\t\t\t\t\t\t\t}, ms - timeSinceLastCall );\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t})();\n\n\t\t</script>\n\t</body>\n</html>\n"
  },
  {
    "path": "presentation/plugin/notes/notes.js",
    "content": "/**\n * Handles opening of and synchronization with the reveal.js\n * notes window.\n *\n * Handshake process:\n * 1. This window posts 'connect' to notes window\n *    - Includes URL of presentation to show\n * 2. Notes window responds with 'connected' when it is available\n * 3. This window proceeds to send the current presentation state\n *    to the notes window\n */\nvar RevealNotes = (function() {\n\n\tfunction openNotes() {\n\t\tvar jsFileLocation = document.querySelector('script[src$=\"notes.js\"]').src;  // this js file path\n\t\tjsFileLocation = jsFileLocation.replace(/notes\\.js(\\?.*)?$/, '');   // the js folder path\n\t\tvar notesPopup = window.open( jsFileLocation + 'notes.html', 'reveal.js - Notes', 'width=1100,height=700' );\n\n\t\t/**\n\t\t * Connect to the notes window through a postmessage handshake.\n\t\t * Using postmessage enables us to work in situations where the\n\t\t * origins differ, such as a presentation being opened from the\n\t\t * file system.\n\t\t */\n\t\tfunction connect() {\n\t\t\t// Keep trying to connect until we get a 'connected' message back\n\t\t\tvar connectInterval = setInterval( function() {\n\t\t\t\tnotesPopup.postMessage( JSON.stringify( {\n\t\t\t\t\tnamespace: 'reveal-notes',\n\t\t\t\t\ttype: 'connect',\n\t\t\t\t\turl: window.location.protocol + '//' + window.location.host + window.location.pathname,\n\t\t\t\t\tstate: Reveal.getState()\n\t\t\t\t} ), '*' );\n\t\t\t}, 500 );\n\n\t\t\twindow.addEventListener( 'message', function( event ) {\n\t\t\t\tvar data = JSON.parse( event.data );\n\t\t\t\tif( data && data.namespace === 'reveal-notes' && data.type === 'connected' ) {\n\t\t\t\t\tclearInterval( connectInterval );\n\t\t\t\t\tonConnected();\n\t\t\t\t}\n\t\t\t} );\n\t\t}\n\n\t\t/**\n\t\t * Posts the current slide data to the notes window\n\t\t */\n\t\tfunction post() {\n\n\t\t\tvar slideElement = Reveal.getCurrentSlide(),\n\t\t\t\tnotesElement = slideElement.querySelector( 'aside.notes' );\n\n\t\t\tvar messageData = {\n\t\t\t\tnamespace: 'reveal-notes',\n\t\t\t\ttype: 'state',\n\t\t\t\tnotes: '',\n\t\t\t\tmarkdown: false,\n\t\t\t\tstate: Reveal.getState()\n\t\t\t};\n\n\t\t\t// Look for notes defined in a slide attribute\n\t\t\tif( slideElement.hasAttribute( 'data-notes' ) ) {\n\t\t\t\tmessageData.notes = slideElement.getAttribute( 'data-notes' );\n\t\t\t}\n\n\t\t\t// Look for notes defined in an aside element\n\t\t\tif( notesElement ) {\n\t\t\t\tmessageData.notes = notesElement.innerHTML;\n\t\t\t\tmessageData.markdown = typeof notesElement.getAttribute( 'data-markdown' ) === 'string';\n\t\t\t}\n\n\t\t\tnotesPopup.postMessage( JSON.stringify( messageData ), '*' );\n\n\t\t}\n\n\t\t/**\n\t\t * Called once we have established a connection to the notes\n\t\t * window.\n\t\t */\n\t\tfunction onConnected() {\n\n\t\t\t// Monitor events that trigger a change in state\n\t\t\tReveal.addEventListener( 'slidechanged', post );\n\t\t\tReveal.addEventListener( 'fragmentshown', post );\n\t\t\tReveal.addEventListener( 'fragmenthidden', post );\n\t\t\tReveal.addEventListener( 'overviewhidden', post );\n\t\t\tReveal.addEventListener( 'overviewshown', post );\n\t\t\tReveal.addEventListener( 'paused', post );\n\t\t\tReveal.addEventListener( 'resumed', post );\n\n\t\t\t// Post the initial state\n\t\t\tpost();\n\n\t\t}\n\n\t\tconnect();\n\t}\n\n\tif( !/receiver/i.test( window.location.search ) ) {\n\n\t\t// If the there's a 'notes' query set, open directly\n\t\tif( window.location.search.match( /(\\?|\\&)notes/gi ) !== null ) {\n\t\t\topenNotes();\n\t\t}\n\n\t\t// Open the notes when the 's' key is hit\n\t\tdocument.addEventListener( 'keydown', function( event ) {\n\t\t\t// Disregard the event if the target is editable or a\n\t\t\t// modifier is present\n\t\t\tif ( document.querySelector( ':focus' ) !== null || event.shiftKey || event.altKey || event.ctrlKey || event.metaKey ) return;\n\n\t\t\tif( event.keyCode === 83 ) {\n\t\t\t\tevent.preventDefault();\n\t\t\t\topenNotes();\n\t\t\t}\n\t\t}, false );\n\n\t}\n\n\treturn { open: openNotes };\n\n})();\n"
  },
  {
    "path": "presentation/plugin/notes-server/client.js",
    "content": "(function() {\n\n\t// don't emit events from inside the previews themselves\n\tif( window.location.search.match( /receiver/gi ) ) { return; }\n\n\tvar socket = io.connect( window.location.origin ),\n\t\tsocketId = Math.random().toString().slice( 2 );\n\n\tconsole.log( 'View slide notes at ' + window.location.origin + '/notes/' + socketId );\n\n\twindow.open( window.location.origin + '/notes/' + socketId, 'notes-' + socketId );\n\n\t/**\n\t * Posts the current slide data to the notes window\n\t */\n\tfunction post() {\n\n\t\tvar slideElement = Reveal.getCurrentSlide(),\n\t\t\tnotesElement = slideElement.querySelector( 'aside.notes' );\n\n\t\tvar messageData = {\n\t\t\tnotes: '',\n\t\t\tmarkdown: false,\n\t\t\tsocketId: socketId,\n\t\t\tstate: Reveal.getState()\n\t\t};\n\n\t\t// Look for notes defined in a slide attribute\n\t\tif( slideElement.hasAttribute( 'data-notes' ) ) {\n\t\t\tmessageData.notes = slideElement.getAttribute( 'data-notes' );\n\t\t}\n\n\t\t// Look for notes defined in an aside element\n\t\tif( notesElement ) {\n\t\t\tmessageData.notes = notesElement.innerHTML;\n\t\t\tmessageData.markdown = typeof notesElement.getAttribute( 'data-markdown' ) === 'string';\n\t\t}\n\n\t\tsocket.emit( 'statechanged', messageData );\n\n\t}\n\n\t// When a new notes window connects, post our current state\n\tsocket.on( 'connect', function( data ) {\n\t\tpost();\n\t} );\n\n\t// Monitor events that trigger a change in state\n\tReveal.addEventListener( 'slidechanged', post );\n\tReveal.addEventListener( 'fragmentshown', post );\n\tReveal.addEventListener( 'fragmenthidden', post );\n\tReveal.addEventListener( 'overviewhidden', post );\n\tReveal.addEventListener( 'overviewshown', post );\n\tReveal.addEventListener( 'paused', post );\n\tReveal.addEventListener( 'resumed', post );\n\n\t// Post the initial state\n\tpost();\n\n}());\n"
  },
  {
    "path": "presentation/plugin/notes-server/index.js",
    "content": "var express   = require('express');\nvar fs        = require('fs');\nvar io        = require('socket.io');\nvar _         = require('underscore');\nvar Mustache  = require('mustache');\n\nvar app       = express.createServer();\nvar staticDir = express.static;\n\nio            = io.listen(app);\n\nvar opts = {\n\tport :      1947,\n\tbaseDir :   __dirname + '/../../'\n};\n\nio.sockets.on( 'connection', function( socket ) {\n\n\tsocket.on( 'connect', function( data ) {\n\t\tsocket.broadcast.emit( 'connect', data );\n\t});\n\n\tsocket.on( 'statechanged', function( data ) {\n\t\tsocket.broadcast.emit( 'statechanged', data );\n\t});\n\n});\n\napp.configure( function() {\n\n\t[ 'css', 'js', 'images', 'plugin', 'lib' ].forEach( function( dir ) {\n\t\tapp.use( '/' + dir, staticDir( opts.baseDir + dir ) );\n\t});\n\n});\n\napp.get('/', function( req, res ) {\n\n\tres.writeHead( 200, { 'Content-Type': 'text/html' } );\n\tfs.createReadStream( opts.baseDir + '/index.html' ).pipe( res );\n\n});\n\napp.get( '/notes/:socketId', function( req, res ) {\n\n\tfs.readFile( opts.baseDir + 'plugin/notes-server/notes.html', function( err, data ) {\n\t\tres.send( Mustache.to_html( data.toString(), {\n\t\t\tsocketId : req.params.socketId\n\t\t}));\n\t});\n\n});\n\n// Actually listen\napp.listen( opts.port || null );\n\nvar brown = '\\033[33m',\n\tgreen = '\\033[32m',\n\treset = '\\033[0m';\n\nvar slidesLocation = 'http://localhost' + ( opts.port ? ( ':' + opts.port ) : '' );\n\nconsole.log( brown + 'reveal.js - Speaker Notes' + reset );\nconsole.log( '1. Open the slides at ' + green + slidesLocation + reset );\nconsole.log( '2. Click on the link your JS console to go to the notes page' );\nconsole.log( '3. Advance through your slides and your notes will advance automatically' );\n"
  },
  {
    "path": "presentation/plugin/notes-server/notes.html",
    "content": "<!doctype html>\n<html lang=\"en\">\n\t<head>\n\t\t<meta charset=\"utf-8\">\n\n\t\t<title>reveal.js - Slide Notes</title>\n\n\t\t<style>\n\t\t\tbody {\n\t\t\t\tfont-family: Helvetica;\n\t\t\t}\n\n\t\t\t#current-slide,\n\t\t\t#upcoming-slide,\n\t\t\t#speaker-controls {\n\t\t\t\tpadding: 6px;\n\t\t\t\tbox-sizing: border-box;\n\t\t\t\t-moz-box-sizing: border-box;\n\t\t\t}\n\n\t\t\t#current-slide iframe,\n\t\t\t#upcoming-slide iframe {\n\t\t\t\twidth: 100%;\n\t\t\t\theight: 100%;\n\t\t\t\tborder: 1px solid #ddd;\n\t\t\t}\n\n\t\t\t#current-slide .label,\n\t\t\t#upcoming-slide .label {\n\t\t\t\tposition: absolute;\n\t\t\t\ttop: 10px;\n\t\t\t\tleft: 10px;\n\t\t\t\tfont-weight: bold;\n\t\t\t\tfont-size: 14px;\n\t\t\t\tz-index: 2;\n\t\t\t\tcolor: rgba( 255, 255, 255, 0.9 );\n\t\t\t}\n\n\t\t\t#current-slide {\n\t\t\t\tposition: absolute;\n\t\t\t\twidth: 65%;\n\t\t\t\theight: 100%;\n\t\t\t\ttop: 0;\n\t\t\t\tleft: 0;\n\t\t\t\tpadding-right: 0;\n\t\t\t}\n\n\t\t\t#upcoming-slide {\n\t\t\t\tposition: absolute;\n\t\t\t\twidth: 35%;\n\t\t\t\theight: 40%;\n\t\t\t\tright: 0;\n\t\t\t\ttop: 0;\n\t\t\t}\n\n\t\t\t#speaker-controls {\n\t\t\t\tposition: absolute;\n\t\t\t\ttop: 40%;\n\t\t\t\tright: 0;\n\t\t\t\twidth: 35%;\n\t\t\t\theight: 60%;\n\n\t\t\t\tfont-size: 18px;\n\t\t\t}\n\n\t\t\t\t.speaker-controls-time.hidden,\n\t\t\t\t.speaker-controls-notes.hidden {\n\t\t\t\t\tdisplay: none;\n\t\t\t\t}\n\n\t\t\t\t.speaker-controls-time .label,\n\t\t\t\t.speaker-controls-notes .label {\n\t\t\t\t\ttext-transform: uppercase;\n\t\t\t\t\tfont-weight: normal;\n\t\t\t\t\tfont-size: 0.66em;\n\t\t\t\t\tcolor: #666;\n\t\t\t\t\tmargin: 0;\n\t\t\t\t}\n\n\t\t\t\t.speaker-controls-time {\n\t\t\t\t\tborder-bottom: 1px solid rgba( 200, 200, 200, 0.5 );\n\t\t\t\t\tmargin-bottom: 10px;\n\t\t\t\t\tpadding: 10px 16px;\n\t\t\t\t\tpadding-bottom: 20px;\n\t\t\t\t\tcursor: pointer;\n\t\t\t\t}\n\n\t\t\t\t.speaker-controls-time .reset-button {\n\t\t\t\t\topacity: 0;\n\t\t\t\t\tfloat: right;\n\t\t\t\t\tcolor: #666;\n\t\t\t\t\ttext-decoration: none;\n\t\t\t\t}\n\t\t\t\t.speaker-controls-time:hover .reset-button {\n\t\t\t\t\topacity: 1;\n\t\t\t\t}\n\n\t\t\t\t.speaker-controls-time .timer,\n\t\t\t\t.speaker-controls-time .clock {\n\t\t\t\t\twidth: 50%;\n\t\t\t\t\tfont-size: 1.9em;\n\t\t\t\t}\n\n\t\t\t\t.speaker-controls-time .timer {\n\t\t\t\t\tfloat: left;\n\t\t\t\t}\n\n\t\t\t\t.speaker-controls-time .clock {\n\t\t\t\t\tfloat: right;\n\t\t\t\t\ttext-align: right;\n\t\t\t\t}\n\n\t\t\t\t.speaker-controls-time span.mute {\n\t\t\t\t\tcolor: #bbb;\n\t\t\t\t}\n\n\t\t\t\t.speaker-controls-notes {\n\t\t\t\t\tpadding: 10px 16px;\n\t\t\t\t}\n\n\t\t\t\t.speaker-controls-notes .value {\n\t\t\t\t\tmargin-top: 5px;\n\t\t\t\t\tline-height: 1.4;\n\t\t\t\t\tfont-size: 1.2em;\n\t\t\t\t}\n\n\t\t\t.clear {\n\t\t\t\tclear: both;\n\t\t\t}\n\n\t\t\t@media screen and (max-width: 1080px) {\n\t\t\t\t#speaker-controls {\n\t\t\t\t\tfont-size: 16px;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t@media screen and (max-width: 900px) {\n\t\t\t\t#speaker-controls {\n\t\t\t\t\tfont-size: 14px;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t@media screen and (max-width: 800px) {\n\t\t\t\t#speaker-controls {\n\t\t\t\t\tfont-size: 12px;\n\t\t\t\t}\n\t\t\t}\n\n\t\t</style>\n\t</head>\n\n\t<body>\n\n\t\t<div id=\"current-slide\"></div>\n\t\t<div id=\"upcoming-slide\"><span class=\"label\">UPCOMING:</span></div>\n\t\t<div id=\"speaker-controls\">\n\t\t\t<div class=\"speaker-controls-time\">\n\t\t\t\t<h4 class=\"label\">Time <span class=\"reset-button\">Click to Reset</span></h4>\n\t\t\t\t<div class=\"clock\">\n\t\t\t\t\t<span class=\"clock-value\">0:00 AM</span>\n\t\t\t\t</div>\n\t\t\t\t<div class=\"timer\">\n\t\t\t\t\t<span class=\"hours-value\">00</span><span class=\"minutes-value\">:00</span><span class=\"seconds-value\">:00</span>\n\t\t\t\t</div>\n\t\t\t\t<div class=\"clear\"></div>\n\t\t\t</div>\n\n\t\t\t<div class=\"speaker-controls-notes hidden\">\n\t\t\t\t<h4 class=\"label\">Notes</h4>\n\t\t\t\t<div class=\"value\"></div>\n\t\t\t</div>\n\t\t</div>\n\n\t\t<script src=\"/socket.io/socket.io.js\"></script>\n\t\t<script src=\"/plugin/markdown/marked.js\"></script>\n\n\t\t<script>\n\t\t(function() {\n\n\t\t\tvar notes,\n\t\t\t\tnotesValue,\n\t\t\t\tcurrentState,\n\t\t\t\tcurrentSlide,\n\t\t\t\tupcomingSlide,\n\t\t\t\tconnected = false;\n\n\t\t\tvar socket = io.connect( window.location.origin ),\n\t\t\t\tsocketId = '{{socketId}}';\n\n\t\t\tsocket.on( 'statechanged', function( data ) {\n\n\t\t\t\t// ignore data from sockets that aren't ours\n\t\t\t\tif( data.socketId !== socketId ) { return; }\n\n\t\t\t\tif( connected === false ) {\n\t\t\t\t\tconnected = true;\n\n\t\t\t\t\tsetupIframes( data );\n\t\t\t\t\tsetupKeyboard();\n\t\t\t\t\tsetupNotes();\n\t\t\t\t\tsetupTimer();\n\n\t\t\t\t}\n\n\t\t\t\thandleStateMessage( data );\n\n\t\t\t} );\n\n\t\t\twindow.addEventListener( 'message', function( event ) {\n\n\t\t\t\tvar data = JSON.parse( event.data );\n\n\t\t\t\tif( data && data.namespace === 'reveal' ) {\n\t\t\t\t\tif( /ready/.test( data.eventName ) ) {\n\t\t\t\t\t\tsocket.emit( 'connect', { socketId: socketId } );\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t} );\n\n\t\t\t/**\n\t\t\t * Called when the main window sends an updated state.\n\t\t\t */\n\t\t\tfunction handleStateMessage( data ) {\n\n\t\t\t\t// Store the most recently set state to avoid circular loops\n\t\t\t\t// applying the same state\n\t\t\t\tcurrentState = JSON.stringify( data.state );\n\n\t\t\t\t// No need for updating the notes in case of fragment changes\n\t\t\t\tif ( data.notes ) {\n\t\t\t\t\tnotes.classList.remove( 'hidden' );\n\t\t\t\t\tif( data.markdown ) {\n\t\t\t\t\t\tnotesValue.innerHTML = marked( data.notes );\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t\tnotesValue.innerHTML = data.notes;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tnotes.classList.add( 'hidden' );\n\t\t\t\t}\n\n\t\t\t\t// Update the note slides\n\t\t\t\tcurrentSlide.contentWindow.postMessage( JSON.stringify({ method: 'setState', args: [ data.state ] }), '*' );\n\t\t\t\tupcomingSlide.contentWindow.postMessage( JSON.stringify({ method: 'setState', args: [ data.state ] }), '*' );\n\t\t\t\tupcomingSlide.contentWindow.postMessage( JSON.stringify({ method: 'next' }), '*' );\n\n\t\t\t}\n\n\t\t\t// Limit to max one state update per X ms\n\t\t\thandleStateMessage = debounce( handleStateMessage, 200 );\n\n\t\t\t/**\n\t\t\t * Forward keyboard events to the current slide window.\n\t\t\t * This enables keyboard events to work even if focus\n\t\t\t * isn't set on the current slide iframe.\n\t\t\t */\n\t\t\tfunction setupKeyboard() {\n\n\t\t\t\tdocument.addEventListener( 'keydown', function( event ) {\n\t\t\t\t\tcurrentSlide.contentWindow.postMessage( JSON.stringify({ method: 'triggerKey', args: [ event.keyCode ] }), '*' );\n\t\t\t\t} );\n\n\t\t\t}\n\n\t\t\t/**\n\t\t\t * Creates the preview iframes.\n\t\t\t */\n\t\t\tfunction setupIframes( data ) {\n\n\t\t\t\tvar params = [\n\t\t\t\t\t'receiver',\n\t\t\t\t\t'progress=false',\n\t\t\t\t\t'history=false',\n\t\t\t\t\t'transition=none',\n\t\t\t\t\t'backgroundTransition=none'\n\t\t\t\t].join( '&' );\n\n\t\t\t\tvar hash = '#/' + data.state.indexh + '/' + data.state.indexv;\n\t\t\t\tvar currentURL = '/?' + params + '&postMessageEvents=true' + hash;\n\t\t\t\tvar upcomingURL = '/?' + params + '&controls=false' + hash;\n\n\t\t\t\tcurrentSlide = document.createElement( 'iframe' );\n\t\t\t\tcurrentSlide.setAttribute( 'width', 1280 );\n\t\t\t\tcurrentSlide.setAttribute( 'height', 1024 );\n\t\t\t\tcurrentSlide.setAttribute( 'src', currentURL );\n\t\t\t\tdocument.querySelector( '#current-slide' ).appendChild( currentSlide );\n\n\t\t\t\tupcomingSlide = document.createElement( 'iframe' );\n\t\t\t\tupcomingSlide.setAttribute( 'width', 640 );\n\t\t\t\tupcomingSlide.setAttribute( 'height', 512 );\n\t\t\t\tupcomingSlide.setAttribute( 'src', upcomingURL );\n\t\t\t\tdocument.querySelector( '#upcoming-slide' ).appendChild( upcomingSlide );\n\n\t\t\t}\n\n\t\t\t/**\n\t\t\t * Setup the notes UI.\n\t\t\t */\n\t\t\tfunction setupNotes() {\n\n\t\t\t\tnotes = document.querySelector( '.speaker-controls-notes' );\n\t\t\t\tnotesValue = document.querySelector( '.speaker-controls-notes .value' );\n\n\t\t\t}\n\n\t\t\t/**\n\t\t\t * Create the timer and clock and start updating them\n\t\t\t * at an interval.\n\t\t\t */\n\t\t\tfunction setupTimer() {\n\n\t\t\t\tvar start = new Date(),\n\t\t\t\t\ttimeEl = document.querySelector( '.speaker-controls-time' ),\n\t\t\t\t\tclockEl = timeEl.querySelector( '.clock-value' ),\n\t\t\t\t\thoursEl = timeEl.querySelector( '.hours-value' ),\n\t\t\t\t\tminutesEl = timeEl.querySelector( '.minutes-value' ),\n\t\t\t\t\tsecondsEl = timeEl.querySelector( '.seconds-value' );\n\n\t\t\t\tfunction _updateTimer() {\n\n\t\t\t\t\tvar diff, hours, minutes, seconds,\n\t\t\t\t\t\tnow = new Date();\n\n\t\t\t\t\tdiff = now.getTime() - start.getTime();\n\t\t\t\t\thours = Math.floor( diff / ( 1000 * 60 * 60 ) );\n\t\t\t\t\tminutes = Math.floor( ( diff / ( 1000 * 60 ) ) % 60 );\n\t\t\t\t\tseconds = Math.floor( ( diff / 1000 ) % 60 );\n\n\t\t\t\t\tclockEl.innerHTML = now.toLocaleTimeString( 'en-US', { hour12: true, hour: '2-digit', minute:'2-digit' } );\n\t\t\t\t\thoursEl.innerHTML = zeroPadInteger( hours );\n\t\t\t\t\thoursEl.className = hours > 0 ? '' : 'mute';\n\t\t\t\t\tminutesEl.innerHTML = ':' + zeroPadInteger( minutes );\n\t\t\t\t\tminutesEl.className = minutes > 0 ? '' : 'mute';\n\t\t\t\t\tsecondsEl.innerHTML = ':' + zeroPadInteger( seconds );\n\n\t\t\t\t}\n\n\t\t\t\t// Update once directly\n\t\t\t\t_updateTimer();\n\n\t\t\t\t// Then update every second\n\t\t\t\tsetInterval( _updateTimer, 1000 );\n\n\t\t\t\ttimeEl.addEventListener( 'click', function() {\n\t\t\t\t\tstart = new Date();\n\t\t\t\t\t_updateTimer();\n\t\t\t\t\treturn false;\n\t\t\t\t} );\n\n\t\t\t}\n\n\t\t\tfunction zeroPadInteger( num ) {\n\n\t\t\t\tvar str = '00' + parseInt( num );\n\t\t\t\treturn str.substring( str.length - 2 );\n\n\t\t\t}\n\n\t\t\t/**\n\t\t\t * Limits the frequency at which a function can be called.\n\t\t\t */\n\t\t\tfunction debounce( fn, ms ) {\n\n\t\t\t\tvar lastTime = 0,\n\t\t\t\t\ttimeout;\n\n\t\t\t\treturn function() {\n\n\t\t\t\t\tvar args = arguments;\n\t\t\t\t\tvar context = this;\n\n\t\t\t\t\tclearTimeout( timeout );\n\n\t\t\t\t\tvar timeSinceLastCall = Date.now() - lastTime;\n\t\t\t\t\tif( timeSinceLastCall > ms ) {\n\t\t\t\t\t\tfn.apply( context, args );\n\t\t\t\t\t\tlastTime = Date.now();\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t\ttimeout = setTimeout( function() {\n\t\t\t\t\t\t\tfn.apply( context, args );\n\t\t\t\t\t\t\tlastTime = Date.now();\n\t\t\t\t\t\t}, ms - timeSinceLastCall );\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t})();\n\t\t</script>\n\n\t</body>\n</html>\n"
  },
  {
    "path": "presentation/plugin/print-pdf/print-pdf.js",
    "content": "/**\n * phantomjs script for printing presentations to PDF.\n *\n * Example:\n * phantomjs print-pdf.js \"http://lab.hakim.se/reveal-js?print-pdf\" reveal-demo.pdf\n *\n * By Manuel Bieh (https://github.com/manuelbieh)\n */\n\n// html2pdf.js\nvar page = new WebPage();\nvar system = require( 'system' );\n\nvar slideWidth = system.args[3] ? system.args[3].split( 'x' )[0] : 960;\nvar slideHeight = system.args[3] ? system.args[3].split( 'x' )[1] : 700;\n\npage.viewportSize = {\n\twidth: slideWidth,\n\theight: slideHeight\n};\n\n// TODO\n// Something is wrong with these config values. An input\n// paper width of 1920px actually results in a 756px wide\n// PDF.\npage.paperSize = {\n\twidth: Math.round( slideWidth * 2 ),\n\theight: Math.round( slideHeight * 2 ),\n\tborder: 0\n};\n\nvar inputFile = system.args[1] || 'index.html?print-pdf';\nvar outputFile = system.args[2] || 'slides.pdf';\n\nif( outputFile.match( /\\.pdf$/gi ) === null ) {\n\toutputFile += '.pdf';\n}\n\nconsole.log( 'Printing PDF (Paper size: '+ page.paperSize.width + 'x' + page.paperSize.height +')' );\n\npage.open( inputFile, function( status ) {\n\twindow.setTimeout( function() {\n\t\tconsole.log( 'Printed succesfully' );\n\t\tpage.render( outputFile );\n\t\tphantom.exit();\n\t}, 1000 );\n} );\n\n"
  },
  {
    "path": "presentation/plugin/remotes/remotes.js",
    "content": "/**\n * Touch-based remote controller for your presentation courtesy \n * of the folks at http://remotes.io\n */\n\n(function(window){\n\n    /**\n     * Detects if we are dealing with a touch enabled device (with some false positives)\n     * Borrowed from modernizr: https://github.com/Modernizr/Modernizr/blob/master/feature-detects/touch.js   \n     */\n    var hasTouch  = (function(){\n        return ('ontouchstart' in window) || window.DocumentTouch && document instanceof DocumentTouch;\n    })();\n\n    /**\n     * Detects if notes are enable and the current page is opened inside an /iframe\n     * this prevents loading Remotes.io several times\n     */\n    var isNotesAndIframe = (function(){\n        return window.RevealNotes && !(self == top);\n    })();\n\n    if(!hasTouch && !isNotesAndIframe){\n        head.ready( 'remotes.ne.min.js', function() {\n            new Remotes(\"preview\")\n                .on(\"swipe-left\", function(e){ Reveal.right(); })\n                .on(\"swipe-right\", function(e){ Reveal.left(); })\n                .on(\"swipe-up\", function(e){ Reveal.down(); })\n                .on(\"swipe-down\", function(e){ Reveal.up(); })\n                .on(\"tap\", function(e){ Reveal.next(); })\n                .on(\"zoom-out\", function(e){ Reveal.toggleOverview(true); })\n                .on(\"zoom-in\", function(e){ Reveal.toggleOverview(false); })\n            ;\n        } );\n\n        head.js('https://hakim-static.s3.amazonaws.com/reveal-js/remotes.ne.min.js');\n    }\n})(window);"
  },
  {
    "path": "presentation/plugin/search/search.js",
    "content": "/*\n * Handles finding a text string anywhere in the slides and showing the next occurrence to the user\n * by navigatating to that slide and highlighting it.\n *\n * By Jon Snyder <snyder.jon@gmail.com>, February 2013\n */\n\nvar RevealSearch = (function() {\n\n\tvar matchedSlides;\n\tvar currentMatchedIndex;\n\tvar searchboxDirty;\n\tvar myHilitor;\n\n// Original JavaScript code by Chirp Internet: www.chirp.com.au\n// Please acknowledge use of this code by including this header.\n// 2/2013 jon: modified regex to display any match, not restricted to word boundaries.\n\nfunction Hilitor(id, tag)\n{\n\n  var targetNode = document.getElementById(id) || document.body;\n  var hiliteTag = tag || \"EM\";\n  var skipTags = new RegExp(\"^(?:\" + hiliteTag + \"|SCRIPT|FORM|SPAN)$\");\n  var colors = [\"#ff6\", \"#a0ffff\", \"#9f9\", \"#f99\", \"#f6f\"];\n  var wordColor = [];\n  var colorIdx = 0;\n  var matchRegex = \"\";\n  var matchingSlides = [];\n\n  this.setRegex = function(input)\n  {\n    input = input.replace(/^[^\\w]+|[^\\w]+$/g, \"\").replace(/[^\\w'-]+/g, \"|\");\n    matchRegex = new RegExp(\"(\" + input + \")\",\"i\");\n  }\n\n  this.getRegex = function()\n  {\n    return matchRegex.toString().replace(/^\\/\\\\b\\(|\\)\\\\b\\/i$/g, \"\").replace(/\\|/g, \" \");\n  }\n\n  // recursively apply word highlighting\n  this.hiliteWords = function(node)\n  {\n    if(node == undefined || !node) return;\n    if(!matchRegex) return;\n    if(skipTags.test(node.nodeName)) return;\n\n    if(node.hasChildNodes()) {\n      for(var i=0; i < node.childNodes.length; i++)\n        this.hiliteWords(node.childNodes[i]);\n    }\n    if(node.nodeType == 3) { // NODE_TEXT\n      if((nv = node.nodeValue) && (regs = matchRegex.exec(nv))) {\n      \t//find the slide's section element and save it in our list of matching slides\n      \tvar secnode = node.parentNode;\n      \twhile (secnode.nodeName != 'SECTION') {\n      \t\tsecnode = secnode.parentNode;\n      \t}\n      \t\n      \tvar slideIndex = Reveal.getIndices(secnode);\n      \tvar slidelen = matchingSlides.length;\n      \tvar alreadyAdded = false;\n      \tfor (var i=0; i < slidelen; i++) {\n      \t\tif ( (matchingSlides[i].h === slideIndex.h) && (matchingSlides[i].v === slideIndex.v) ) {\n      \t\t\talreadyAdded = true;\n      \t\t}\n      \t}\n      \tif (! alreadyAdded) {\n      \t\tmatchingSlides.push(slideIndex);\n      \t}\n      \t\n        if(!wordColor[regs[0].toLowerCase()]) {\n          wordColor[regs[0].toLowerCase()] = colors[colorIdx++ % colors.length];\n        }\n\n        var match = document.createElement(hiliteTag);\n        match.appendChild(document.createTextNode(regs[0]));\n        match.style.backgroundColor = wordColor[regs[0].toLowerCase()];\n        match.style.fontStyle = \"inherit\";\n        match.style.color = \"#000\";\n\n        var after = node.splitText(regs.index);\n        after.nodeValue = after.nodeValue.substring(regs[0].length);\n        node.parentNode.insertBefore(match, after);\n      }\n    }\n  };\n\n  // remove highlighting\n  this.remove = function()\n  {\n    var arr = document.getElementsByTagName(hiliteTag);\n    while(arr.length && (el = arr[0])) {\n      el.parentNode.replaceChild(el.firstChild, el);\n    }\n  };\n\n  // start highlighting at target node\n  this.apply = function(input)\n  {\n    if(input == undefined || !input) return;\n    this.remove();\n    this.setRegex(input);\n    this.hiliteWords(targetNode);\n    return matchingSlides;\n  };\n\n}\n\n\tfunction openSearch() {\n\t\t//ensure the search term input dialog is visible and has focus:\n\t\tvar inputbox = document.getElementById(\"searchinput\");\n\t\tinputbox.style.display = \"inline\";\n\t\tinputbox.focus();\n\t\tinputbox.select();\n\t}\n\n\tfunction toggleSearch() {\n\t\tvar inputbox = document.getElementById(\"searchinput\");\n\t\tif (inputbox.style.display !== \"inline\") {\n\t\t\topenSearch();\n\t\t}\n\t\telse {\n\t\t\tinputbox.style.display = \"none\";\n\t\t\tmyHilitor.remove();\n\t\t}\n\t}\n\n\tfunction doSearch() {\n\t\t//if there's been a change in the search term, perform a new search:\n\t\tif (searchboxDirty) {\n\t\t\tvar searchstring = document.getElementById(\"searchinput\").value;\n\n\t\t\t//find the keyword amongst the slides\n\t\t\tmyHilitor = new Hilitor(\"slidecontent\");\n\t\t\tmatchedSlides = myHilitor.apply(searchstring);\n\t\t\tcurrentMatchedIndex = 0;\n\t\t}\n\n\t\t//navigate to the next slide that has the keyword, wrapping to the first if necessary\n\t\tif (matchedSlides.length && (matchedSlides.length <= currentMatchedIndex)) {\n\t\t\tcurrentMatchedIndex = 0;\n\t\t}\n\t\tif (matchedSlides.length > currentMatchedIndex) {\n\t\t\tReveal.slide(matchedSlides[currentMatchedIndex].h, matchedSlides[currentMatchedIndex].v);\n\t\t\tcurrentMatchedIndex++;\n\t\t}\n\t}\n\n\tvar dom = {};\n\tdom.wrapper = document.querySelector( '.reveal' );\n\n\tif( !dom.wrapper.querySelector( '.searchbox' ) ) {\n\t\t\tvar searchElement = document.createElement( 'div' );\n\t\t\tsearchElement.id = \"searchinputdiv\";\n\t\t\tsearchElement.classList.add( 'searchdiv' );\n      searchElement.style.position = 'absolute';\n      searchElement.style.top = '10px';\n      searchElement.style.left = '10px';\n      //embedded base64 search icon Designed by Sketchdock - http://www.sketchdock.com/:\n\t\t\tsearchElement.innerHTML = '<span><input type=\"search\" id=\"searchinput\" class=\"searchinput\" style=\"vertical-align: top;\"/><img src=\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAABGdBTUEAAK/INwWK6QAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAJiSURBVHjatFZNaxNBGH5md+Mmu92NVdKDRipSAyqCghgQD4L4cRe86UUtAQ+eFCxoa4/25EXBFi8eBE+eRPoDhB6KgiiixdAPCEkx2pjvTXadd9yNsflwuyUDD/O+u8PzzDPvzOwyx3EwyCZhwG3gAkp7MnpjgbopjsltcD4gjuXZZKeAR348MYLYTm3LzOs/y3j3JTfZxgXWXmTuwPHIc4VmoOmv5IrI53+AO2DdHLjkDWQ3GoEEVFXtXQOvkSnPWcyUceviLhwbDYv8/XIVj97kse7TodLvZXxYxrPUHkQ1ufXs3FEdybEIxucySOesoNvUgWU1cP3MkCBfTFdw9fGaAMVmRELq7LBw2Q3/FaAxxWIRpw+ZIr/7IouPqzUBiqmdHAv7EuhRAwf1er2Vy4x1jW3b2d5Jfvu5IPp7l2LYbcgCFFNb+FoJ7oBqEAqFMPNqFcmEgVMJDfMT+1tvN0pNjERlMS6QA5pFOKxiKVPFhakPeL3It+WGJUDxt2wFR+JhzI7v5ctkd8DXOZAkCYYxhO+lKm4+Xfqz/rIixBuNBl7eOYzkQQNzqX249mRl6zUgEcYkaJrGhUwBinVdh6IouPzwE6/DL5w4oLkH8y981aDf+uq6hlKpJESiUdNfDZi7/ehG9K6KfiA3pml0PLcsq+cSMTj2NL9ukc4UOmz7AZ3+crkC4mHujFvXNaMFB3bEr8xPS6p5O+jXxq4VZtaen7/PwzrntjcLUE0iHPS1Ud1cdiEJl/8WivZk0wXd7zWOMkeF8s0CcAmkNrC2nvXZDbbbN73ccYnZoH9bfgswAFzAe9/h3dbKAAAAAElFTkSuQmCC\" id=\"searchbutton\" class=\"searchicon\" style=\"vertical-align: top; margin-top: -1px;\"/></span>';\n\t\t\tdom.wrapper.appendChild( searchElement );\n\t}\n\n\tdocument.getElementById(\"searchbutton\").addEventListener( 'click', function(event) {\n\t\tdoSearch();\n\t}, false );\n\n\tdocument.getElementById(\"searchinput\").addEventListener( 'keyup', function( event ) {\n\t\tswitch (event.keyCode) {\n\t\t\tcase 13:\n\t\t\t\tevent.preventDefault();\n\t\t\t\tdoSearch();\n\t\t\t\tsearchboxDirty = false;\n\t\t\t\tbreak;\n\t\t\tdefault:\n\t\t\t\tsearchboxDirty = true;\n\t\t}\n\t}, false );\n\n\t// Open the search when the 's' key is hit (yes, this conflicts with the notes plugin, disabling for now)\n\t/*\n\tdocument.addEventListener( 'keydown', function( event ) {\n\t\t// Disregard the event if the target is editable or a\n\t\t// modifier is present\n\t\tif ( document.querySelector( ':focus' ) !== null || event.shiftKey || event.altKey || event.ctrlKey || event.metaKey ) return;\n\n\t\tif( event.keyCode === 83 ) {\n\t\t\tevent.preventDefault();\n\t\t\topenSearch();\n\t\t}\n\t}, false );\n*/\n\treturn { open: openSearch };\n})();\n"
  },
  {
    "path": "presentation/plugin/zoom-js/zoom.js",
    "content": "// Custom reveal.js integration\n(function(){\n\tvar isEnabled = true;\n\n\tdocument.querySelector( '.reveal' ).addEventListener( 'mousedown', function( event ) {\n\t\tvar modifier = ( Reveal.getConfig().zoomKey ? Reveal.getConfig().zoomKey : 'alt' ) + 'Key';\n\n\t\tvar zoomPadding = 20;\n\t\tvar revealScale = Reveal.getScale();\n\n\t\tif( event[ modifier ] && isEnabled ) {\n\t\t\tevent.preventDefault();\n\n\t\t\tvar bounds = event.target.getBoundingClientRect();\n\n\t\t\tzoom.to({\n\t\t\t\tx: ( bounds.left * revealScale ) - zoomPadding,\n\t\t\t\ty: ( bounds.top * revealScale ) - zoomPadding,\n\t\t\t\twidth: ( bounds.width * revealScale ) + ( zoomPadding * 2 ),\n\t\t\t\theight: ( bounds.height * revealScale ) + ( zoomPadding * 2 ),\n\t\t\t\tpan: false\n\t\t\t});\n\t\t}\n\t} );\n\n\tReveal.addEventListener( 'overviewshown', function() { isEnabled = false; } );\n\tReveal.addEventListener( 'overviewhidden', function() { isEnabled = true; } );\n})();\n\n/*!\n * zoom.js 0.3 (modified for use with reveal.js)\n * http://lab.hakim.se/zoom-js\n * MIT licensed\n *\n * Copyright (C) 2011-2014 Hakim El Hattab, http://hakim.se\n */\nvar zoom = (function(){\n\n\t// The current zoom level (scale)\n\tvar level = 1;\n\n\t// The current mouse position, used for panning\n\tvar mouseX = 0,\n\t\tmouseY = 0;\n\n\t// Timeout before pan is activated\n\tvar panEngageTimeout = -1,\n\t\tpanUpdateInterval = -1;\n\n\t// Check for transform support so that we can fallback otherwise\n\tvar supportsTransforms = \t'WebkitTransform' in document.body.style ||\n\t\t\t\t\t\t\t\t'MozTransform' in document.body.style ||\n\t\t\t\t\t\t\t\t'msTransform' in document.body.style ||\n\t\t\t\t\t\t\t\t'OTransform' in document.body.style ||\n\t\t\t\t\t\t\t\t'transform' in document.body.style;\n\n\tif( supportsTransforms ) {\n\t\t// The easing that will be applied when we zoom in/out\n\t\tdocument.body.style.transition = 'transform 0.8s ease';\n\t\tdocument.body.style.OTransition = '-o-transform 0.8s ease';\n\t\tdocument.body.style.msTransition = '-ms-transform 0.8s ease';\n\t\tdocument.body.style.MozTransition = '-moz-transform 0.8s ease';\n\t\tdocument.body.style.WebkitTransition = '-webkit-transform 0.8s ease';\n\t}\n\n\t// Zoom out if the user hits escape\n\tdocument.addEventListener( 'keyup', function( event ) {\n\t\tif( level !== 1 && event.keyCode === 27 ) {\n\t\t\tzoom.out();\n\t\t}\n\t} );\n\n\t// Monitor mouse movement for panning\n\tdocument.addEventListener( 'mousemove', function( event ) {\n\t\tif( level !== 1 ) {\n\t\t\tmouseX = event.clientX;\n\t\t\tmouseY = event.clientY;\n\t\t}\n\t} );\n\n\t/**\n\t * Applies the CSS required to zoom in, prefers the use of CSS3\n\t * transforms but falls back on zoom for IE.\n\t *\n\t * @param {Object} rect\n\t * @param {Number} scale\n\t */\n\tfunction magnify( rect, scale ) {\n\n\t\tvar scrollOffset = getScrollOffset();\n\n\t\t// Ensure a width/height is set\n\t\trect.width = rect.width || 1;\n\t\trect.height = rect.height || 1;\n\n\t\t// Center the rect within the zoomed viewport\n\t\trect.x -= ( window.innerWidth - ( rect.width * scale ) ) / 2;\n\t\trect.y -= ( window.innerHeight - ( rect.height * scale ) ) / 2;\n\n\t\tif( supportsTransforms ) {\n\t\t\t// Reset\n\t\t\tif( scale === 1 ) {\n\t\t\t\tdocument.body.style.transform = '';\n\t\t\t\tdocument.body.style.OTransform = '';\n\t\t\t\tdocument.body.style.msTransform = '';\n\t\t\t\tdocument.body.style.MozTransform = '';\n\t\t\t\tdocument.body.style.WebkitTransform = '';\n\t\t\t}\n\t\t\t// Scale\n\t\t\telse {\n\t\t\t\tvar origin = scrollOffset.x +'px '+ scrollOffset.y +'px',\n\t\t\t\t\ttransform = 'translate('+ -rect.x +'px,'+ -rect.y +'px) scale('+ scale +')';\n\n\t\t\t\tdocument.body.style.transformOrigin = origin;\n\t\t\t\tdocument.body.style.OTransformOrigin = origin;\n\t\t\t\tdocument.body.style.msTransformOrigin = origin;\n\t\t\t\tdocument.body.style.MozTransformOrigin = origin;\n\t\t\t\tdocument.body.style.WebkitTransformOrigin = origin;\n\n\t\t\t\tdocument.body.style.transform = transform;\n\t\t\t\tdocument.body.style.OTransform = transform;\n\t\t\t\tdocument.body.style.msTransform = transform;\n\t\t\t\tdocument.body.style.MozTransform = transform;\n\t\t\t\tdocument.body.style.WebkitTransform = transform;\n\t\t\t}\n\t\t}\n\t\telse {\n\t\t\t// Reset\n\t\t\tif( scale === 1 ) {\n\t\t\t\tdocument.body.style.position = '';\n\t\t\t\tdocument.body.style.left = '';\n\t\t\t\tdocument.body.style.top = '';\n\t\t\t\tdocument.body.style.width = '';\n\t\t\t\tdocument.body.style.height = '';\n\t\t\t\tdocument.body.style.zoom = '';\n\t\t\t}\n\t\t\t// Scale\n\t\t\telse {\n\t\t\t\tdocument.body.style.position = 'relative';\n\t\t\t\tdocument.body.style.left = ( - ( scrollOffset.x + rect.x ) / scale ) + 'px';\n\t\t\t\tdocument.body.style.top = ( - ( scrollOffset.y + rect.y ) / scale ) + 'px';\n\t\t\t\tdocument.body.style.width = ( scale * 100 ) + '%';\n\t\t\t\tdocument.body.style.height = ( scale * 100 ) + '%';\n\t\t\t\tdocument.body.style.zoom = scale;\n\t\t\t}\n\t\t}\n\n\t\tlevel = scale;\n\n\t\tif( document.documentElement.classList ) {\n\t\t\tif( level !== 1 ) {\n\t\t\t\tdocument.documentElement.classList.add( 'zoomed' );\n\t\t\t}\n\t\t\telse {\n\t\t\t\tdocument.documentElement.classList.remove( 'zoomed' );\n\t\t\t}\n\t\t}\n\t}\n\n\t/**\n\t * Pan the document when the mosue cursor approaches the edges\n\t * of the window.\n\t */\n\tfunction pan() {\n\t\tvar range = 0.12,\n\t\t\trangeX = window.innerWidth * range,\n\t\t\trangeY = window.innerHeight * range,\n\t\t\tscrollOffset = getScrollOffset();\n\n\t\t// Up\n\t\tif( mouseY < rangeY ) {\n\t\t\twindow.scroll( scrollOffset.x, scrollOffset.y - ( 1 - ( mouseY / rangeY ) ) * ( 14 / level ) );\n\t\t}\n\t\t// Down\n\t\telse if( mouseY > window.innerHeight - rangeY ) {\n\t\t\twindow.scroll( scrollOffset.x, scrollOffset.y + ( 1 - ( window.innerHeight - mouseY ) / rangeY ) * ( 14 / level ) );\n\t\t}\n\n\t\t// Left\n\t\tif( mouseX < rangeX ) {\n\t\t\twindow.scroll( scrollOffset.x - ( 1 - ( mouseX / rangeX ) ) * ( 14 / level ), scrollOffset.y );\n\t\t}\n\t\t// Right\n\t\telse if( mouseX > window.innerWidth - rangeX ) {\n\t\t\twindow.scroll( scrollOffset.x + ( 1 - ( window.innerWidth - mouseX ) / rangeX ) * ( 14 / level ), scrollOffset.y );\n\t\t}\n\t}\n\n\tfunction getScrollOffset() {\n\t\treturn {\n\t\t\tx: window.scrollX !== undefined ? window.scrollX : window.pageXOffset,\n\t\t\ty: window.scrollY !== undefined ? window.scrollY : window.pageYOffset\n\t\t}\n\t}\n\n\treturn {\n\t\t/**\n\t\t * Zooms in on either a rectangle or HTML element.\n\t\t *\n\t\t * @param {Object} options\n\t\t *   - element: HTML element to zoom in on\n\t\t *   OR\n\t\t *   - x/y: coordinates in non-transformed space to zoom in on\n\t\t *   - width/height: the portion of the screen to zoom in on\n\t\t *   - scale: can be used instead of width/height to explicitly set scale\n\t\t */\n\t\tto: function( options ) {\n\n\t\t\t// Due to an implementation limitation we can't zoom in\n\t\t\t// to another element without zooming out first\n\t\t\tif( level !== 1 ) {\n\t\t\t\tzoom.out();\n\t\t\t}\n\t\t\telse {\n\t\t\t\toptions.x = options.x || 0;\n\t\t\t\toptions.y = options.y || 0;\n\n\t\t\t\t// If an element is set, that takes precedence\n\t\t\t\tif( !!options.element ) {\n\t\t\t\t\t// Space around the zoomed in element to leave on screen\n\t\t\t\t\tvar padding = 20;\n\t\t\t\t\tvar bounds = options.element.getBoundingClientRect();\n\n\t\t\t\t\toptions.x = bounds.left - padding;\n\t\t\t\t\toptions.y = bounds.top - padding;\n\t\t\t\t\toptions.width = bounds.width + ( padding * 2 );\n\t\t\t\t\toptions.height = bounds.height + ( padding * 2 );\n\t\t\t\t}\n\n\t\t\t\t// If width/height values are set, calculate scale from those values\n\t\t\t\tif( options.width !== undefined && options.height !== undefined ) {\n\t\t\t\t\toptions.scale = Math.max( Math.min( window.innerWidth / options.width, window.innerHeight / options.height ), 1 );\n\t\t\t\t}\n\n\t\t\t\tif( options.scale > 1 ) {\n\t\t\t\t\toptions.x *= options.scale;\n\t\t\t\t\toptions.y *= options.scale;\n\n\t\t\t\t\tmagnify( options, options.scale );\n\n\t\t\t\t\tif( options.pan !== false ) {\n\n\t\t\t\t\t\t// Wait with engaging panning as it may conflict with the\n\t\t\t\t\t\t// zoom transition\n\t\t\t\t\t\tpanEngageTimeout = setTimeout( function() {\n\t\t\t\t\t\t\tpanUpdateInterval = setInterval( pan, 1000 / 60 );\n\t\t\t\t\t\t}, 800 );\n\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\n\t\t/**\n\t\t * Resets the document zoom state to its default.\n\t\t */\n\t\tout: function() {\n\t\t\tclearTimeout( panEngageTimeout );\n\t\t\tclearInterval( panUpdateInterval );\n\n\t\t\tmagnify( { x: 0, y: 0 }, 1 );\n\n\t\t\tlevel = 1;\n\t\t},\n\n\t\t// Alias\n\t\tmagnify: function( options ) { this.to( options ) },\n\t\treset: function() { this.out() },\n\n\t\tzoomLevel: function() {\n\t\t\treturn level;\n\t\t}\n\t}\n\n})();\n\n\n\n"
  },
  {
    "path": "requirements.txt",
    "content": "-i https://pypi.python.org/simple\nalabaster==0.7.12\napipkg==1.5\natomicwrites==1.3.0\nattrs==19.1.0\nbabel==2.7.0\nbrotli==1.0.7\ncertifi==2019.6.16\nchardet==3.0.4\ncoverage==4.5.4\ncoveralls==1.5.1\ndateparser==0.7.0\ndjango-cors-headers==2.4.0\ndjango-crispy-forms==1.7.2\ndjango-extensions==2.1.4\ndjango-filter==2.1.0\ndjango==2.0.10\ndjangoql==0.12.3\ndjangorestframework==3.9.1\ndocopt==0.6.2\ndocutils==0.15.2\nexecnet==1.6.1\nfactory-boy==2.11.1\nfaker==2.0.0\nfilelock==3.0.12\nfilemagic==1.6\nfuzzywuzzy[speedup]==0.15.0\ngunicorn==20.0.4\nidna==2.8\nimagesize==1.1.0\nimportlib-metadata==0.19\ninotify-simple==1.1.8; sys_platform == 'linux'\njinja2==2.10.1\nlangdetect==1.0.7\nmarkupsafe==1.1.1\nmore-itertools==7.2.0\npackaging==19.1\npdftotext==2.1.1\npillow==5.4.1\npluggy==0.12.0\nply==3.11\npsycopg2==2.8.4\npy==1.8.0\npycodestyle==2.4.0\npygments==2.4.2\npyocr==0.5.3\npyparsing==2.4.2\npytest-cov==2.6.1\npytest-django==3.4.5\npytest-env==0.6.2\npytest-forked==1.0.2\npytest-sugar==0.9.2\npytest-xdist==1.26.0\npytest==4.1.1\npython-dateutil==2.7.5\npython-dotenv==0.10.1\npython-gnupg==0.4.4\npython-levenshtein==0.12.0\npytz==2018.9\nregex==2019.6.8\nrequests==2.22.0\nsix==1.12.0\nsnowballstemmer==1.9.0\nsphinx==1.8.3\nsphinxcontrib-applehelp==1.0.1\nsphinxcontrib-devhelp==1.0.1\nsphinxcontrib-htmlhelp==1.0.2\nsphinxcontrib-jsmath==1.0.1\nsphinxcontrib-qthelp==1.0.2\nsphinxcontrib-serializinghtml==1.1.3\ntermcolor==1.1.0\ntext-unidecode==1.2\ntoml==0.10.0\ntox==3.7.0\ntzlocal==2.0.0\nurllib3==1.25.3\nvirtualenv==16.7.2\nwcwidth==0.1.7\nwhitenoise==4.1.3\nzipp==0.5.2\n"
  },
  {
    "path": "resources/logo/print/eps/Black logo - no background.eps",
    "content": "%!PS-Adobe-3.0 EPSF-3.0\n%Produced by poppler pdftops version: 0.59.0 (http://poppler.freedesktop.org)\n%%Creator: Chromium\n%%LanguageLevel: 3\n%%DocumentSuppliedResources: (atend)\n%%BoundingBox: 0 0 2409 909\n%%HiResBoundingBox: 0 0 2409 909\n%%DocumentSuppliedResources: (atend)\n%%EndComments\n%%BeginProlog\n%%BeginResource: procset xpdf 3.00 0\n%%Copyright: Copyright 1996-2011 Glyph & Cog, LLC\n/xpdf 75 dict def xpdf begin\n% PDF special state\n/pdfDictSize 15 def\n/pdfSetup {\n  /setpagedevice where {\n    pop 2 dict begin\n      /Policies 1 dict dup begin /PageSize 6 def end def\n      { /Duplex true def } if\n    currentdict end setpagedevice\n  } {\n    pop\n  } ifelse\n} def\n/pdfSetupPaper {\n  % Change paper size, but only if different from previous paper size otherwise\n  % duplex fails. PLRM specifies a tolerance of 5 pts when matching paper size\n  % so we use the same when checking if the size changes.\n  /setpagedevice where {\n    pop currentpagedevice\n    /PageSize known {\n      2 copy\n      currentpagedevice /PageSize get aload pop\n      exch 4 1 roll\n      sub abs 5 gt\n      3 1 roll\n      sub abs 5 gt\n      or\n    } {\n      true\n    } ifelse\n    {\n      2 array astore\n      2 dict begin\n        /PageSize exch def\n        /ImagingBBox null def\n      currentdict end\n      setpagedevice\n    } {\n      pop pop\n    } ifelse\n  } {\n    pop\n  } ifelse\n} def\n/pdfStartPage {\n  pdfDictSize dict begin\n  /pdfFillCS [] def\n  /pdfFillXform {} def\n  /pdfStrokeCS [] def\n  /pdfStrokeXform {} def\n  /pdfFill [0] def\n  /pdfStroke [0] def\n  /pdfFillOP false def\n  /pdfStrokeOP false def\n  /pdfOPM false def\n  /pdfLastFill false def\n  /pdfLastStroke false def\n  /pdfTextMat [1 0 0 1 0 0] def\n  /pdfFontSize 0 def\n  /pdfCharSpacing 0 def\n  /pdfTextRender 0 def\n  /pdfPatternCS false def\n  /pdfTextRise 0 def\n  /pdfWordSpacing 0 def\n  /pdfHorizScaling 1 def\n  /pdfTextClipPath [] def\n} def\n/pdfEndPage { end } def\n% PDF color state\n/opm { dup /pdfOPM exch def\n      /setoverprintmode where{pop setoverprintmode}{pop}ifelse  } def\n/cs { /pdfFillXform exch def dup /pdfFillCS exch def\n      setcolorspace } def\n/CS { /pdfStrokeXform exch def dup /pdfStrokeCS exch def\n      setcolorspace } def\n/sc { pdfLastFill not { pdfFillCS setcolorspace } if\n      dup /pdfFill exch def aload pop pdfFillXform setcolor\n     /pdfLastFill true def /pdfLastStroke false def } def\n/SC { pdfLastStroke not { pdfStrokeCS setcolorspace } if\n      dup /pdfStroke exch def aload pop pdfStrokeXform setcolor\n     /pdfLastStroke true def /pdfLastFill false def } def\n/op { /pdfFillOP exch def\n      pdfLastFill { pdfFillOP setoverprint } if } def\n/OP { /pdfStrokeOP exch def\n      pdfLastStroke { pdfStrokeOP setoverprint } if } def\n/fCol {\n  pdfLastFill not {\n    pdfFillCS setcolorspace\n    pdfFill aload pop pdfFillXform setcolor\n    pdfFillOP setoverprint\n    /pdfLastFill true def /pdfLastStroke false def\n  } if\n} def\n/sCol {\n  pdfLastStroke not {\n    pdfStrokeCS setcolorspace\n    pdfStroke aload pop pdfStrokeXform setcolor\n    pdfStrokeOP setoverprint\n    /pdfLastStroke true def /pdfLastFill false def\n  } if\n} def\n% build a font\n/pdfMakeFont {\n  4 3 roll findfont\n  4 2 roll matrix scale makefont\n  dup length dict begin\n    { 1 index /FID ne { def } { pop pop } ifelse } forall\n    /Encoding exch def\n    currentdict\n  end\n  definefont pop\n} def\n/pdfMakeFont16 {\n  exch findfont\n  dup length dict begin\n    { 1 index /FID ne { def } { pop pop } ifelse } forall\n    /WMode exch def\n    currentdict\n  end\n  definefont pop\n} def\n/pdfMakeFont16L3 {\n  1 index /CIDFont resourcestatus {\n    pop pop 1 index /CIDFont findresource /CIDFontType known\n  } {\n    false\n  } ifelse\n  {\n    0 eq { /Identity-H } { /Identity-V } ifelse\n    exch 1 array astore composefont pop\n  } {\n    pdfMakeFont16\n  } ifelse\n} def\n% graphics state operators\n/q { gsave pdfDictSize dict begin } def\n/Q {\n  end grestore\n  /pdfLastFill where {\n    pop\n    pdfLastFill {\n      pdfFillOP setoverprint\n    } {\n      pdfStrokeOP setoverprint\n    } ifelse\n  } if\n  /pdfOPM where {\n    pop\n    pdfOPM /setoverprintmode where{pop setoverprintmode}{pop}ifelse \n  } if\n} def\n/cm { concat } def\n/d { setdash } def\n/i { setflat } def\n/j { setlinejoin } def\n/J { setlinecap } def\n/M { setmiterlimit } def\n/w { setlinewidth } def\n% path segment operators\n/m { moveto } def\n/l { lineto } def\n/c { curveto } def\n/re { 4 2 roll moveto 1 index 0 rlineto 0 exch rlineto\n      neg 0 rlineto closepath } def\n/h { closepath } def\n% path painting operators\n/S { sCol stroke } def\n/Sf { fCol stroke } def\n/f { fCol fill } def\n/f* { fCol eofill } def\n% clipping operators\n/W { clip newpath } def\n/W* { eoclip newpath } def\n/Ws { strokepath clip newpath } def\n% text state operators\n/Tc { /pdfCharSpacing exch def } def\n/Tf { dup /pdfFontSize exch def\n      dup pdfHorizScaling mul exch matrix scale\n      pdfTextMat matrix concatmatrix dup 4 0 put dup 5 0 put\n      exch findfont exch makefont setfont } def\n/Tr { /pdfTextRender exch def } def\n/Tp { /pdfPatternCS exch def } def\n/Ts { /pdfTextRise exch def } def\n/Tw { /pdfWordSpacing exch def } def\n/Tz { /pdfHorizScaling exch def } def\n% text positioning operators\n/Td { pdfTextMat transform moveto } def\n/Tm { /pdfTextMat exch def } def\n% text string operators\n/xyshow where {\n  pop\n  /xyshow2 {\n    dup length array\n    0 2 2 index length 1 sub {\n      2 index 1 index 2 copy get 3 1 roll 1 add get\n      pdfTextMat dtransform\n      4 2 roll 2 copy 6 5 roll put 1 add 3 1 roll dup 4 2 roll put\n    } for\n    exch pop\n    xyshow\n  } def\n}{\n  /xyshow2 {\n    currentfont /FontType get 0 eq {\n      0 2 3 index length 1 sub {\n        currentpoint 4 index 3 index 2 getinterval show moveto\n        2 copy get 2 index 3 2 roll 1 add get\n        pdfTextMat dtransform rmoveto\n      } for\n    } {\n      0 1 3 index length 1 sub {\n        currentpoint 4 index 3 index 1 getinterval show moveto\n        2 copy 2 mul get 2 index 3 2 roll 2 mul 1 add get\n        pdfTextMat dtransform rmoveto\n      } for\n    } ifelse\n    pop pop\n  } def\n} ifelse\n/cshow where {\n  pop\n  /xycp {\n    0 3 2 roll\n    {\n      pop pop currentpoint 3 2 roll\n      1 string dup 0 4 3 roll put false charpath moveto\n      2 copy get 2 index 2 index 1 add get\n      pdfTextMat dtransform rmoveto\n      2 add\n    } exch cshow\n    pop pop\n  } def\n}{\n  /xycp {\n    currentfont /FontType get 0 eq {\n      0 2 3 index length 1 sub {\n        currentpoint 4 index 3 index 2 getinterval false charpath moveto\n        2 copy get 2 index 3 2 roll 1 add get\n        pdfTextMat dtransform rmoveto\n      } for\n    } {\n      0 1 3 index length 1 sub {\n        currentpoint 4 index 3 index 1 getinterval false charpath moveto\n        2 copy 2 mul get 2 index 3 2 roll 2 mul 1 add get\n        pdfTextMat dtransform rmoveto\n      } for\n    } ifelse\n    pop pop\n  } def\n} ifelse\n/Tj {\n  fCol\n  0 pdfTextRise pdfTextMat dtransform rmoveto\n  currentpoint 4 2 roll\n  pdfTextRender 1 and 0 eq {\n    2 copy xyshow2\n  } if\n  pdfTextRender 3 and dup 1 eq exch 2 eq or {\n    3 index 3 index moveto\n    2 copy\n    currentfont /FontType get 3 eq { fCol } { sCol } ifelse\n    xycp currentpoint stroke moveto\n  } if\n  pdfTextRender 4 and 0 ne {\n    4 2 roll moveto xycp\n    /pdfTextClipPath [ pdfTextClipPath aload pop\n      {/moveto cvx}\n      {/lineto cvx}\n      {/curveto cvx}\n      {/closepath cvx}\n    pathforall ] def\n    currentpoint newpath moveto\n  } {\n    pop pop pop pop\n  } ifelse\n  0 pdfTextRise neg pdfTextMat dtransform rmoveto\n} def\n/TJm { 0.001 mul pdfFontSize mul pdfHorizScaling mul neg 0\n       pdfTextMat dtransform rmoveto } def\n/TJmV { 0.001 mul pdfFontSize mul neg 0 exch\n        pdfTextMat dtransform rmoveto } def\n/Tclip { pdfTextClipPath cvx exec clip newpath\n         /pdfTextClipPath [] def } def\n/Tclip* { pdfTextClipPath cvx exec eoclip newpath\n         /pdfTextClipPath [] def } def\n% Level 2/3 image operators\n/pdfImBuf 100 string def\n/pdfImStr {\n  2 copy exch length lt {\n    2 copy get exch 1 add exch\n  } {\n    ()\n  } ifelse\n} def\n/skipEOD {\n  { currentfile pdfImBuf readline\n    not { pop exit } if\n    (%-EOD-) eq { exit } if } loop\n} def\n/pdfIm { image skipEOD } def\n/pdfMask {\n  /ReusableStreamDecode filter\n  skipEOD\n  /maskStream exch def\n} def\n/pdfMaskEnd { maskStream closefile } def\n/pdfMaskInit {\n  /maskArray exch def\n  /maskIdx 0 def\n} def\n/pdfMaskSrc {\n  maskIdx maskArray length lt {\n    maskArray maskIdx get\n    /maskIdx maskIdx 1 add def\n  } {\n    ()\n  } ifelse\n} def\n/pdfImM { fCol imagemask skipEOD } def\n/pr { 2 index 2 index 3 2 roll putinterval 4 add } def\n/pdfImClip {\n  gsave\n  0 2 4 index length 1 sub {\n    dup 4 index exch 2 copy\n    get 5 index div put\n    1 add 3 index exch 2 copy\n    get 3 index div put\n  } for\n  pop pop rectclip\n} def\n/pdfImClipEnd { grestore } def\n% shading operators\n/colordelta {\n  false 0 1 3 index length 1 sub {\n    dup 4 index exch get 3 index 3 2 roll get sub abs 0.004 gt {\n      pop true\n    } if\n  } for\n  exch pop exch pop\n} def\n/funcCol { func n array astore } def\n/funcSH {\n  dup 0 eq {\n    true\n  } {\n    dup 6 eq {\n      false\n    } {\n      4 index 4 index funcCol dup\n      6 index 4 index funcCol dup\n      3 1 roll colordelta 3 1 roll\n      5 index 5 index funcCol dup\n      3 1 roll colordelta 3 1 roll\n      6 index 8 index funcCol dup\n      3 1 roll colordelta 3 1 roll\n      colordelta or or or\n    } ifelse\n  } ifelse\n  {\n    1 add\n    4 index 3 index add 0.5 mul exch 4 index 3 index add 0.5 mul exch\n    6 index 6 index 4 index 4 index 4 index funcSH\n    2 index 6 index 6 index 4 index 4 index funcSH\n    6 index 2 index 4 index 6 index 4 index funcSH\n    5 3 roll 3 2 roll funcSH pop pop\n  } {\n    pop 3 index 2 index add 0.5 mul 3 index  2 index add 0.5 mul\n    funcCol sc\n    dup 4 index exch mat transform m\n    3 index 3 index mat transform l\n    1 index 3 index mat transform l\n    mat transform l pop pop h f*\n  } ifelse\n} def\n/axialCol {\n  dup 0 lt {\n    pop t0\n  } {\n    dup 1 gt {\n      pop t1\n    } {\n      dt mul t0 add\n    } ifelse\n  } ifelse\n  func n array astore\n} def\n/axialSH {\n  dup 0 eq {\n    true\n  } {\n    dup 8 eq {\n      false\n    } {\n      2 index axialCol 2 index axialCol colordelta\n    } ifelse\n  } ifelse\n  {\n    1 add 3 1 roll 2 copy add 0.5 mul\n    dup 4 3 roll exch 4 index axialSH\n    exch 3 2 roll axialSH\n  } {\n    pop 2 copy add 0.5 mul\n    axialCol sc\n    exch dup dx mul x0 add exch dy mul y0 add\n    3 2 roll dup dx mul x0 add exch dy mul y0 add\n    dx abs dy abs ge {\n      2 copy yMin sub dy mul dx div add yMin m\n      yMax sub dy mul dx div add yMax l\n      2 copy yMax sub dy mul dx div add yMax l\n      yMin sub dy mul dx div add yMin l\n      h f*\n    } {\n      exch 2 copy xMin sub dx mul dy div add xMin exch m\n      xMax sub dx mul dy div add xMax exch l\n      exch 2 copy xMax sub dx mul dy div add xMax exch l\n      xMin sub dx mul dy div add xMin exch l\n      h f*\n    } ifelse\n  } ifelse\n} def\n/radialCol {\n  dup t0 lt {\n    pop t0\n  } {\n    dup t1 gt {\n      pop t1\n    } if\n  } ifelse\n  func n array astore\n} def\n/radialSH {\n  dup 0 eq {\n    true\n  } {\n    dup 8 eq {\n      false\n    } {\n      2 index dt mul t0 add radialCol\n      2 index dt mul t0 add radialCol colordelta\n    } ifelse\n  } ifelse\n  {\n    1 add 3 1 roll 2 copy add 0.5 mul\n    dup 4 3 roll exch 4 index radialSH\n    exch 3 2 roll radialSH\n  } {\n    pop 2 copy add 0.5 mul dt mul t0 add\n    radialCol sc\n    encl {\n      exch dup dx mul x0 add exch dup dy mul y0 add exch dr mul r0 add\n      0 360 arc h\n      dup dx mul x0 add exch dup dy mul y0 add exch dr mul r0 add\n      360 0 arcn h f\n    } {\n      2 copy\n      dup dx mul x0 add exch dup dy mul y0 add exch dr mul r0 add\n      a1 a2 arcn\n      dup dx mul x0 add exch dup dy mul y0 add exch dr mul r0 add\n      a2 a1 arcn h\n      dup dx mul x0 add exch dup dy mul y0 add exch dr mul r0 add\n      a1 a2 arc\n      dup dx mul x0 add exch dup dy mul y0 add exch dr mul r0 add\n      a2 a1 arc h f\n    } ifelse\n  } ifelse\n} def\nend\n%%EndResource\n/CIDInit /ProcSet findresource begin\n10 dict begin\n  begincmap\n  /CMapType 1 def\n  /CMapName /Identity-H def\n  /CIDSystemInfo 3 dict dup begin\n    /Registry (Adobe) def\n    /Ordering (Identity) def\n    /Supplement 0 def\n  end def\n  1 begincodespacerange\n    <0000> <ffff>\n  endcodespacerange\n  0 usefont\n  1 begincidrange\n    <0000> <ffff> 0\n  endcidrange\n  endcmap\n  currentdict CMapName exch /CMap defineresource pop\nend\n10 dict begin\n  begincmap\n  /CMapType 1 def\n  /CMapName /Identity-V def\n  /CIDSystemInfo 3 dict dup begin\n    /Registry (Adobe) def\n    /Ordering (Identity) def\n    /Supplement 0 def\n  end def\n  /WMode 1 def\n  1 begincodespacerange\n    <0000> <ffff>\n  endcodespacerange\n  0 usefont\n  1 begincidrange\n    <0000> <ffff> 0\n  endcidrange\n  endcmap\n  currentdict CMapName exch /CMap defineresource pop\nend\nend\n%%EndProlog\n%%BeginSetup\nxpdf begin\n%%EndSetup\npdfStartPage\n%%EndPageSetup\n[] 0 d\n1 i\n0 j\n0 J\n10 M\n1 w\n/DeviceGray {} cs\n[0] sc\n/DeviceGray {} CS\n[0] SC\nfalse op\nfalse OP\n{} settransfer\n0 0 2409 909 re\nW\nq\n[1 0 0 -1 0 909] cm\nq\n0 0 2409 908.7038 re\nW*\nq\n[0.747904 0 0 0.747904 0 -908.7038] cm\n/DeviceRGB {} CS\n[1 1 1] SC\n/DeviceRGB {} cs\n[1 1 1] sc\n0 0 3221 2436 re\nf\nQ\nQ\nq\n5.983235 0 2403.0168 907.20795 re\nW*\nq\n[0.822879 0 0 0.822978 95.330643 145.991699] cm\n/DeviceRGB {} CS\n[0.09 0.329 0.122] SC\n/DeviceRGB {} cs\n[0.09 0.329 0.122] sc\n231 798 m\n227 779 219 741 218 741 c\n49 640 69 465 125 365 c\n137 491 360 578 230 732 c\n229 734 236 758 242 780 c\n268 736 307 683 305 678 c\n145 288 645 258 749 16 c\n796 250 725 612 323 704 c\n321 705 250 830 247 831 c\n247 829 217 830 221 820 c\n223 814 227 806 231 798 c\nh\n330 625 m\n267 476 452 312 544 271 c\n356 439 324 564 330 625 c\nh\n226 704 m\n277 645 217 544 181 511 c\n242 616 238 677 226 704 c\nh\nf\nQ\nq\n[26.582434 0 0 26.585632 866.89978 103.116905] cm\n6.5 8.62 m\n6.513333 8.940001 6.52 9.303333 6.52 9.71 c\n6.52 10.116667 6.513333 10.473333 6.5 10.78 c\n6.5 11.139999 6.436667 11.496666 6.31 11.849999 c\n6.183333 12.203333 5.993333 12.52 5.74 12.799999 c\n5.486666 13.079999 5.17 13.299999 4.79 13.459999 c\n4.41 13.619999 3.973334 13.699999 3.48 13.699999 c\n2.46 13.699999 l\n2.46 18.919998 l\n2.46 19.106665 2.486667 19.243332 2.54 19.329998 c\n2.593333 19.416664 2.646667 19.466663 2.7 19.479998 c\n2.78 19.519997 2.866667 19.519997 2.96 19.479998 c\n2.96 19.999998 l\n0.54 19.999998 l\n0.54 19.479998 l\n0.646667 19.519997 0.726667 19.519997 0.78 19.479998 c\n0.846667 19.466663 0.913333 19.416664 0.98 19.329998 c\n1.046667 19.243332 1.08 19.106665 1.08 18.919998 c\n1.08 6.779998 l\n1.08 6.579998 1.046667 6.436665 0.98 6.349998 c\n0.913333 6.263331 0.846667 6.206665 0.78 6.179998 c\n0.726667 6.153331 0.646667 6.153331 0.54 6.179998 c\n0.54 5.699998 l\n3.48 5.699998 l\n3.973334 5.699998 4.41 5.779998 4.79 5.939998 c\n5.17 6.099998 5.486666 6.319997 5.74 6.599998 c\n5.993333 6.879998 6.183333 7.193331 6.31 7.539998 c\n6.436667 7.886664 6.5 8.246664 6.5 8.619998 c\n6.5 8.62 l\nh\n5.08 8.18 m\n5.08 7.833334 5.023333 7.533334 4.91 7.28 c\n4.796667 7.026667 4.663333 6.826667 4.51 6.68 c\n4.356667 6.533334 4.196666 6.416667 4.03 6.33 c\n3.863333 6.243334 3.72 6.2 3.6 6.2 c\n2.46 6.2 l\n2.46 13.16 l\n3.599999 13.16 l\n3.72 13.16 3.863333 13.126666 4.029999 13.06 c\n4.196666 12.993333 4.356666 12.876666 4.509999 12.709999 c\n4.663333 12.543332 4.796666 12.339999 4.909999 12.099999 c\n5.023333 11.86 5.079999 11.56 5.079999 11.2 c\n5.079999 8.18 l\n5.08 8.18 l\nh\n14.58 19.139999 m\n14.58 19.246666 14.553333 19.356667 14.5 19.469999 c\n14.446667 19.583332 14.37 19.689999 14.270001 19.789999 c\n14.170001 19.889999 14.043334 19.98 13.89 20.059999 c\n13.736667 20.139999 13.56 20.18 13.360001 20.18 c\n13.040001 20.18 12.753334 20.106667 12.500001 19.960001 c\n12.246668 19.813335 12.073335 19.620001 11.980001 19.380001 c\n11.900002 19.246668 11.840001 19.093334 11.800001 18.920002 c\n11.626668 19.280003 11.363335 19.580002 11.010001 19.820002 c\n10.656668 20.060001 10.266668 20.18 9.840001 20.180002 c\n9.306667 20.180002 8.840001 19.98667 8.440002 19.600002 c\n8.213335 19.400003 8.026669 19.140003 7.880002 18.820002 c\n7.733335 18.5 7.646668 18.133333 7.620002 17.720001 c\n7.606669 17.680002 7.600002 17.600002 7.600002 17.480001 c\n7.600002 17.460001 l\n7.613335 17.233334 7.653335 16.996668 7.720002 16.750002 c\n7.786668 16.503336 7.890002 16.25667 8.030002 16.010002 c\n8.170002 15.763335 8.336668 15.530002 8.530002 15.310002 c\n8.723335 15.090003 8.933335 14.900003 9.160002 14.740003 c\n9.213335 14.713336 9.256668 14.683336 9.290002 14.650003 c\n9.323336 14.616669 9.373335 14.580003 9.440002 14.540003 c\n9.500002 14.510003 l\n9.560002 14.480003 l\n9.800002 14.333337 10.010002 14.200004 10.190002 14.080004 c\n10.370003 13.960004 10.533336 13.846671 10.680002 13.740004 c\n10.760002 13.68667 10.840002 13.62667 10.920002 13.560003 c\n11.000002 13.493337 11.086669 13.42667 11.180002 13.360004 c\n11.300002 13.280004 11.413336 13.18667 11.520002 13.080004 c\n11.626669 12.973337 11.706669 12.84667 11.760002 12.700004 c\n11.840002 12.56667 11.880002 12.406671 11.880002 12.220003 c\n11.880002 12.033336 11.860002 11.86667 11.820002 11.720003 c\n11.766668 11.42667 11.630002 11.173337 11.410002 10.960003 c\n11.190002 10.746669 10.946669 10.606669 10.680002 10.540003 c\n10.560002 10.500003 10.446669 10.480002 10.340002 10.480002 c\n9.966668 10.480002 9.646668 10.546669 9.380002 10.680002 c\n9.206669 10.760002 9.080002 10.850002 9.000002 10.950003 c\n8.920002 11.050003 8.876669 11.143336 8.870002 11.230002 c\n8.863335 11.316669 8.880002 11.386668 8.920002 11.440002 c\n8.960002 11.493337 9.013335 11.533337 9.080002 11.560002 c\n9.106669 11.573336 9.123335 11.580003 9.130002 11.580003 c\n9.136669 11.580003 9.153336 11.58667 9.180002 11.600003 c\n9.353335 11.66667 9.496669 11.783337 9.610003 11.950004 c\n9.723336 12.116671 9.780003 12.300004 9.780003 12.500004 c\n9.780003 12.753337 9.690002 12.970004 9.510002 13.150003 c\n9.330002 13.330003 9.113336 13.420003 8.860003 13.420004 c\n8.593336 13.420004 8.36667 13.330004 8.180002 13.150003 c\n7.993335 12.970003 7.900002 12.753337 7.900002 12.500004 c\n7.900002 12.273337 7.930002 12.036671 7.990002 11.790004 c\n8.050002 11.543337 8.140002 11.320004 8.260002 11.120004 c\n8.513335 10.74667 8.816669 10.47667 9.170002 10.310003 c\n9.523336 10.143336 9.913335 10.060003 10.340002 10.060003 c\n10.660002 10.060003 10.976668 10.120004 11.290002 10.240004 c\n11.603335 10.360004 11.883335 10.530004 12.130002 10.750004 c\n12.376669 10.970004 12.583335 11.233337 12.750002 11.540004 c\n12.916669 11.84667 13.000002 12.200004 13.000002 12.600004 c\n13.000002 18.480003 l\n13.000002 18.720003 13.003335 18.876671 13.010002 18.950003 c\n13.016669 19.023335 13.020002 19.073336 13.020002 19.100002 c\n13.020002 19.273336 13.073336 19.413336 13.180002 19.520002 c\n13.286669 19.626669 13.413336 19.680002 13.560002 19.680002 c\n13.733335 19.680002 13.873336 19.630003 13.980002 19.530003 c\n14.086669 19.430002 14.146669 19.300003 14.160003 19.140003 c\n14.580003 19.140003 l\n14.58 19.139999 l\nh\n11.44 18.639999 m\n11.546666 18.453333 11.61 18.253332 11.629999 18.039999 c\n11.649999 17.826666 11.659999 17.626665 11.659999 17.439999 c\n11.659999 13.739999 l\n11.606666 13.793332 11.549999 13.843332 11.489999 13.889998 c\n11.429998 13.936665 11.366666 13.993332 11.299999 14.059999 c\n10.913333 14.339998 10.583333 14.596665 10.31 14.829998 c\n10.036666 15.063331 9.806666 15.303331 9.619999 15.549998 c\n9.433332 15.796665 9.286665 16.06 9.179999 16.339998 c\n9.073334 16.619999 9.006667 16.939999 8.98 17.299999 c\n8.98 17.599998 l\n8.993333 18.106665 9.13 18.503332 9.389999 18.789999 c\n9.649999 19.076666 10.019999 19.219999 10.499999 19.219999 c\n10.713332 19.219999 10.906666 19.166666 11.079999 19.059999 c\n11.253332 18.939999 11.373332 18.799999 11.439999 18.639999 c\n11.44 18.639999 l\nh\n18.32 10.08 m\n19.08 10.093333 19.686666 10.323334 20.139999 10.770001 c\n20.593332 11.216667 20.82 11.926667 20.82 12.900001 c\n20.82 17.380001 l\n20.82 18.353334 20.593332 19.059999 20.139999 19.5 c\n19.686666 19.940001 19.08 20.173334 18.32 20.200001 c\n18.26 20.200001 l\n18.033333 20.200001 17.826666 20.173334 17.639999 20.120001 c\n17.619999 20.120001 l\n17.606665 20.120001 17.599998 20.113335 17.599998 20.1 c\n17.293333 19.993334 17.026667 19.846666 16.799999 19.66 c\n16.609999 19.469999 l\n16.609999 19.469999 16.56 19.4 16.459999 19.26 c\n16.459999 22.58 l\n16.459999 22.766666 16.486666 22.903334 16.539999 22.99 c\n16.593332 23.076666 16.646666 23.133333 16.699999 23.16 c\n16.779999 23.199999 16.866667 23.199999 16.959999 23.16 c\n16.959999 23.66 l\n14.539999 23.66 l\n14.539999 23.16 l\n14.646666 23.199999 14.726666 23.199999 14.779999 23.16 c\n14.846665 23.133333 14.909999 23.076666 14.969998 22.99 c\n15.029998 22.903334 15.059998 22.766666 15.059999 22.58 c\n15.059999 11.3 l\n15.059999 11.113334 15.029999 10.976667 14.969998 10.89 c\n14.909998 10.803333 14.846665 10.746667 14.779999 10.72 c\n14.726666 10.693334 14.646666 10.693334 14.539999 10.72 c\n14.539999 10.24 l\n16.459999 10.24 l\n16.459999 11.02 l\n16.553331 10.873333 16.666666 10.74 16.799999 10.62 c\n17.026667 10.42 17.293333 10.273334 17.599998 10.18 c\n17.599998 10.166667 17.606665 10.16 17.619999 10.16 c\n17.639999 10.16 l\n17.853333 10.106667 18.059999 10.08 18.26 10.08 c\n18.32 10.08 l\nh\n19.32 12.46 m\n19.32 12.44 l\n19.306665 11.76 19.223333 11.28 19.07 11 c\n18.916666 10.72 18.666666 10.566667 18.32 10.54 c\n18.08 10.526667 17.853333 10.556666 17.639999 10.63 c\n17.426666 10.703334 17.24 10.826667 17.08 11 c\n16.92 11.173333 16.786667 11.406666 16.68 11.7 c\n16.573334 11.993334 16.5 12.34 16.460001 12.74 c\n16.460001 17.540001 l\n16.5 17.953335 16.573334 18.303335 16.68 18.59 c\n16.786667 18.876665 16.92 19.103333 17.08 19.27 c\n17.24 19.436668 17.426666 19.560001 17.639999 19.640001 c\n17.853333 19.720001 18.08 19.753334 18.32 19.740002 c\n18.666666 19.713335 18.916666 19.560001 19.07 19.280003 c\n19.223333 19.000004 19.306665 18.520004 19.32 17.840002 c\n19.32 17.820002 l\n19.32 12.460001 l\n19.32 12.46 l\nh\n24.379999 10.08 m\n24.686665 10.08 24.999998 10.133333 25.32 10.24 c\n25.640001 10.346666 25.926668 10.513333 26.18 10.74 c\n26.433332 10.966666 26.636667 11.253333 26.790001 11.599999 c\n26.943335 11.946666 27.020002 12.359999 27.02 12.839999 c\n27.02 14.859999 l\n27.02 14.919999 l\n27.02 15.379999 l\n23.040001 15.379999 l\n23.040001 17.439999 l\n23.040001 18.266665 23.183334 18.856665 23.470001 19.209999 c\n23.756668 19.563334 24.113335 19.733334 24.540001 19.719999 c\n24.793333 19.706665 25.043333 19.663332 25.290001 19.59 c\n25.536669 19.516668 25.750002 19.393333 25.93 19.219999 c\n26.109999 19.046665 26.26 18.799997 26.380001 18.48 c\n26.500002 18.160002 26.560003 17.740002 26.560001 17.219999 c\n27.02 17.219999 l\n27.02 17.5 l\n27.02 17.860001 26.98 18.203335 26.9 18.530001 c\n26.82 18.856667 26.679998 19.140001 26.48 19.380001 c\n26.280001 19.620001 26.023333 19.810001 25.709999 19.950001 c\n25.396666 20.09 25.013332 20.166666 24.559999 20.18 c\n24.24 20.18 23.913334 20.120001 23.58 20 c\n23.246666 19.879999 22.946667 19.699999 22.68 19.459999 c\n22.413334 19.219999 22.193335 18.936665 22.02 18.609999 c\n21.846666 18.283333 21.76 17.913332 21.76 17.499998 c\n21.76 17.029999 l\n21.76 17.029999 21.756666 16.773333 21.75 16.259998 c\n21.743334 15.746665 21.74 15.429998 21.74 15.309999 c\n21.74 15.189999 21.736666 14.859999 21.73 14.319999 c\n21.723333 13.779999 21.719999 13.489999 21.719999 13.449999 c\n21.719999 12.859999 l\n21.719999 12.379998 21.803333 11.963332 21.969999 11.609999 c\n22.136665 11.256665 22.343332 10.969999 22.59 10.749999 c\n22.836668 10.529999 23.116667 10.363333 23.43 10.249999 c\n23.743334 10.136665 24.059999 10.079999 24.380001 10.079999 c\n24.379999 10.08 l\nh\n25.68 14.86 m\n25.68 13.28 l\n25.68 12.773333 25.646667 12.349999 25.58 12.01 c\n25.513332 11.670001 25.423332 11.396668 25.309999 11.190001 c\n25.196667 10.983334 25.059999 10.84 24.9 10.76 c\n24.74 10.68 24.559999 10.64 24.359999 10.64 c\n23.933332 10.64 23.609999 10.826667 23.389999 11.200001 c\n23.17 11.573335 23.059999 12.266667 23.059999 13.280001 c\n23.059999 14.860001 l\n25.68 14.860001 l\n25.68 14.86 l\nh\n33.540001 11.66 m\n33.540001 11.686667 33.546669 11.74 33.560001 11.82 c\n33.573334 11.9 33.573334 11.966666 33.560001 12.02 c\n33.546669 12.299999 33.450001 12.53 33.27 12.709999 c\n33.09 12.889998 32.873333 12.979999 32.619999 12.98 c\n32.353333 12.98 32.129997 12.886666 31.949999 12.7 c\n31.77 12.513333 31.68 12.286667 31.679998 12.02 c\n31.679998 11.686667 31.806665 11.433332 32.059998 11.259999 c\n32.086666 11.246666 32.103333 11.236666 32.109997 11.23 c\n32.139996 11.2 l\n32.23333 11.133333 32.293327 11.036666 32.319996 10.91 c\n32.346664 10.783334 32.266663 10.673333 32.079994 10.58 c\n31.959993 10.513333 31.839994 10.48 31.719994 10.48 c\n31.319994 10.453333 30.96666 10.573333 30.659994 10.839999 c\n30.353329 11.106666 30.146662 11.573332 30.039993 12.239999 c\n30.039993 18.919998 l\n30.039993 19.106665 30.06666 19.243332 30.119993 19.329998 c\n30.173326 19.416664 30.22666 19.466663 30.279993 19.479998 c\n30.359993 19.519997 30.446661 19.519997 30.539993 19.479998 c\n30.539993 19.999998 l\n28.119993 19.999998 l\n28.119993 19.479998 l\n28.22666 19.519997 28.30666 19.519997 28.359993 19.479998 c\n28.426661 19.466663 28.493326 19.416664 28.559994 19.329998 c\n28.626661 19.243332 28.659994 19.106665 28.659994 18.919998 c\n28.659994 11.299998 l\n28.659994 11.113332 28.626661 10.976666 28.559994 10.889998 c\n28.493326 10.803331 28.426661 10.746665 28.359993 10.719998 c\n28.30666 10.693332 28.22666 10.693332 28.119993 10.719998 c\n28.119993 10.219998 l\n30.039993 10.219998 l\n30.039993 11.039998 l\n30.133326 10.893332 30.22666 10.756664 30.319994 10.629998 c\n30.413328 10.503332 30.523329 10.396666 30.649994 10.309999 c\n30.776659 10.223331 30.923326 10.153332 31.089994 10.099999 c\n31.256662 10.046665 31.466661 10.019999 31.719994 10.019999 c\n32.106663 10.019999 32.466663 10.159999 32.799995 10.439999 c\n33.133327 10.719998 33.379997 11.126665 33.539997 11.659999 c\n33.540001 11.66 l\nh\n36.240002 18.92 m\n36.240002 19.106667 36.27 19.243334 36.330002 19.33 c\n36.390003 19.416666 36.446667 19.466665 36.5 19.48 c\n36.566666 19.519999 36.653332 19.519999 36.759998 19.48 c\n36.759998 20 l\n34.339996 20 l\n34.339996 19.48 l\n34.446663 19.519999 34.539997 19.519999 34.619995 19.48 c\n34.659996 19.466665 34.713329 19.416666 34.779995 19.33 c\n34.846661 19.243334 34.879993 19.106667 34.879993 18.92 c\n34.879993 6.8 l\n34.879993 6.6 34.846661 6.456667 34.779995 6.37 c\n34.713329 6.283334 34.659996 6.226667 34.619995 6.2 c\n34.539997 6.16 34.446663 6.16 34.339996 6.2 c\n34.339996 5.72 l\n36.239998 5.72 l\n36.239998 6.8 l\n36.239998 18.92 l\n36.240002 18.92 l\nh\n40.580002 10.08 m\n40.886669 10.08 41.200001 10.133333 41.52 10.24 c\n41.84 10.346666 42.126667 10.513333 42.380001 10.74 c\n42.633335 10.966666 42.83667 11.253333 42.990002 11.599999 c\n43.143333 11.946666 43.220001 12.359999 43.220001 12.839999 c\n43.220001 14.859999 l\n43.220001 14.919999 l\n43.220001 15.379999 l\n39.240002 15.379999 l\n39.240002 17.439999 l\n39.240002 18.266665 39.383335 18.856665 39.670002 19.209999 c\n39.956669 19.563334 40.313335 19.733334 40.740002 19.719999 c\n40.993336 19.706665 41.243336 19.663332 41.490002 19.59 c\n41.736668 19.516668 41.950001 19.393333 42.130001 19.219999 c\n42.310001 19.046665 42.460003 18.799997 42.580002 18.48 c\n42.700001 18.160002 42.760002 17.740002 42.760002 17.219999 c\n43.220001 17.219999 l\n43.220001 17.5 l\n43.220001 17.860001 43.18 18.203335 43.100002 18.530001 c\n43.020004 18.856667 42.880005 19.140001 42.680004 19.380001 c\n42.480003 19.620001 42.223339 19.810001 41.910004 19.950001 c\n41.596668 20.09 41.213337 20.166666 40.760002 20.18 c\n40.440002 20.18 40.113335 20.120001 39.780003 20 c\n39.446671 19.879999 39.146667 19.699999 38.880001 19.459999 c\n38.613335 19.219999 38.393333 18.936665 38.220001 18.609999 c\n38.046669 18.283333 37.960003 17.913332 37.960003 17.499998 c\n37.960003 17.029999 l\n37.960003 17.029999 37.956669 16.773333 37.950005 16.259998 c\n37.94334 15.746665 37.940006 15.429998 37.940006 15.309999 c\n37.940006 15.189999 37.936672 14.859999 37.930008 14.319999 c\n37.923344 13.779999 37.92001 13.489999 37.92001 13.449999 c\n37.92001 12.859999 l\n37.92001 12.379998 38.003342 11.963332 38.17001 11.609999 c\n38.336678 11.256665 38.543343 10.969999 38.790009 10.749999 c\n39.036674 10.529999 39.316673 10.363333 39.630009 10.249999 c\n39.943344 10.136665 40.26001 10.079999 40.580009 10.079999 c\n40.580002 10.08 l\nh\n41.880001 14.86 m\n41.880001 13.28 l\n41.880001 12.773333 41.846668 12.349999 41.780003 12.01 c\n41.713337 11.670001 41.623337 11.396668 41.510002 11.190001 c\n41.396667 10.983334 41.260002 10.84 41.100002 10.76 c\n40.940002 10.68 40.760002 10.64 40.560001 10.64 c\n40.133335 10.64 39.810001 10.826667 39.59 11.200001 c\n39.369999 11.573335 39.259998 12.266667 39.259998 13.280001 c\n39.259998 14.860001 l\n41.879997 14.860001 l\n41.880001 14.86 l\nh\n47.880001 19.879999 m\n47.866669 19.893333 47.856667 19.9 47.850002 19.9 c\n47.843338 19.9 47.833336 19.906666 47.820004 19.92 c\n47.800003 19.940001 l\n47.773335 19.953335 47.743336 19.966667 47.710003 19.980001 c\n47.67667 19.993336 47.646671 20.006668 47.620003 20.020002 c\n47.340004 20.140003 47.013336 20.200003 46.640003 20.200003 c\n46.42667 20.200003 46.220005 20.150003 46.020004 20.050003 c\n45.820004 19.950003 45.646671 19.866671 45.500004 19.800003 c\n45.353336 19.733335 45.230003 19.703337 45.130005 19.710003 c\n45.030006 19.716669 44.980007 19.813337 44.980003 20.000004 c\n44.600002 20.000004 l\n44.600002 17.600004 l\n45.080002 17.600004 l\n45.053333 18.02667 45.100002 18.393337 45.220001 18.700005 c\n45.299999 18.966671 45.456669 19.216671 45.690002 19.450005 c\n45.923336 19.683338 46.273338 19.800005 46.740002 19.800005 c\n47.046669 19.800005 47.299999 19.746672 47.5 19.640005 c\n47.846668 19.466671 48.083332 19.260004 48.209999 19.020004 c\n48.336666 18.780005 48.386665 18.530005 48.360001 18.270004 c\n48.333336 18.010004 48.236668 17.753338 48.07 17.500004 c\n47.903332 17.24667 47.699997 17.013336 47.459999 16.800003 c\n47.299999 16.680002 47.133331 16.553337 46.959999 16.420004 c\n46.786667 16.286671 46.613335 16.146671 46.439999 16.000004 c\n45.973331 15.62667 45.603333 15.290004 45.329998 14.990004 c\n45.056664 14.690003 44.846664 14.410004 44.699997 14.150003 c\n44.553329 13.890003 44.453331 13.643336 44.399998 13.410004 c\n44.346664 13.176671 44.32 12.926671 44.319996 12.660004 c\n44.319996 12.500004 44.329994 12.353337 44.349995 12.220004 c\n44.369995 12.086671 44.393326 11.966671 44.419994 11.860004 c\n44.459995 11.633338 44.526661 11.413338 44.619995 11.200005 c\n44.713329 10.986671 44.846661 10.796672 45.019997 10.630005 c\n45.193333 10.463338 45.406666 10.326672 45.659996 10.220005 c\n45.913326 10.113339 46.219994 10.060005 46.579994 10.060005 c\n46.779995 10.060005 46.979992 10.103338 47.179993 10.190005 c\n47.379993 10.276672 47.559994 10.356672 47.719994 10.430005 c\n47.879993 10.503338 48.00666 10.536672 48.099995 10.530006 c\n48.193329 10.523339 48.239994 10.420006 48.239994 10.220005 c\n48.619995 10.220005 l\n48.619995 12.700005 l\n48.099995 12.700005 l\n48.113327 12.300004 48.066662 11.940004 47.959995 11.620005 c\n47.866661 11.340005 47.703327 11.086671 47.469994 10.860004 c\n47.23666 10.633338 46.893326 10.520004 46.439995 10.520004 c\n46.079994 10.520004 45.786659 10.600004 45.559994 10.760004 c\n45.439995 10.853337 45.336658 10.990005 45.249992 11.170004 c\n45.163326 11.350003 45.113323 11.54667 45.099991 11.760004 c\n45.086658 11.973338 45.119991 12.203338 45.199989 12.450005 c\n45.279987 12.696671 45.439987 12.926671 45.679989 13.140005 c\n45.706657 13.180005 45.743324 13.220005 45.789989 13.260005 c\n45.836655 13.300005 45.886658 13.333338 45.939991 13.360005 c\n45.979992 13.386672 46.013325 13.413339 46.039989 13.440005 c\n46.119991 13.520005 l\n46.266659 13.640005 46.41666 13.760005 46.569992 13.880005 c\n46.723324 14.000005 46.879993 14.120005 47.039993 14.240005 c\n47.413326 14.560005 47.723328 14.850005 47.969994 15.110004 c\n48.21666 15.370004 48.423325 15.613338 48.589993 15.840004 c\n48.75666 16.066671 48.879993 16.280004 48.959991 16.480003 c\n49.039989 16.680002 49.086658 16.873337 49.099991 17.060003 c\n49.233326 17.673336 49.209991 18.190002 49.029991 18.610003 c\n48.849991 19.030003 48.619991 19.360003 48.339993 19.600002 c\n48.319992 19.600002 l\n48.319992 19.626669 48.30666 19.640003 48.279991 19.640003 c\n48.253323 19.66667 48.226658 19.68667 48.199989 19.700003 c\n48.07999 19.780003 l\n48.07999 19.780003 48.039989 19.800003 47.959991 19.840002 c\n47.959991 19.860003 l\n47.946659 19.860003 47.933323 19.863337 47.919991 19.870003 c\n47.906658 19.876669 47.893322 19.880003 47.87999 19.880003 c\n47.880001 19.879999 l\nh\n53.82 19.879999 m\n53.806667 19.893333 53.796665 19.9 53.790001 19.9 c\n53.783337 19.9 53.773335 19.906666 53.760002 19.92 c\n53.740002 19.940001 l\n53.713333 19.953335 53.683334 19.966667 53.650002 19.980001 c\n53.616669 19.993336 53.58667 20.006668 53.560001 20.020002 c\n53.280003 20.140003 52.953335 20.200003 52.580002 20.200003 c\n52.366669 20.200003 52.160004 20.150003 51.960003 20.050003 c\n51.760002 19.950003 51.58667 19.866671 51.440002 19.800003 c\n51.293335 19.733335 51.170002 19.703337 51.070004 19.710003 c\n50.970005 19.716669 50.920006 19.813337 50.920002 20.000004 c\n50.540001 20.000004 l\n50.540001 17.600004 l\n51.02 17.600004 l\n50.993332 18.02667 51.040001 18.393337 51.16 18.700005 c\n51.239998 18.966671 51.396667 19.216671 51.630001 19.450005 c\n51.863335 19.683338 52.213337 19.800005 52.68 19.800005 c\n52.986668 19.800005 53.239998 19.746672 53.439999 19.640005 c\n53.786667 19.466671 54.023331 19.260004 54.149998 19.020004 c\n54.276665 18.780005 54.326664 18.530005 54.299999 18.270004 c\n54.273335 18.010004 54.176666 17.753338 54.009998 17.500004 c\n53.84333 17.24667 53.639996 17.013336 53.399998 16.800003 c\n53.239998 16.680002 53.07333 16.553337 52.899998 16.420004 c\n52.726665 16.286671 52.553333 16.146671 52.379997 16.000004 c\n51.91333 15.62667 51.543331 15.290004 51.269997 14.990004 c\n50.996662 14.690003 50.786663 14.410004 50.639996 14.150003 c\n50.493328 13.890003 50.39333 13.643336 50.339996 13.410004 c\n50.286663 13.176671 50.259998 12.926671 50.259995 12.660004 c\n50.259995 12.500004 50.269993 12.353337 50.289993 12.220004 c\n50.309994 12.086671 50.333324 11.966671 50.359993 11.860004 c\n50.399994 11.633338 50.46666 11.413338 50.559994 11.200005 c\n50.653328 10.986671 50.786659 10.796672 50.959995 10.630005 c\n51.133331 10.463338 51.346664 10.326672 51.599995 10.220005 c\n51.853325 10.113339 52.159992 10.060005 52.519993 10.060005 c\n52.719994 10.060005 52.919991 10.103338 53.119991 10.190005 c\n53.319992 10.276672 53.499992 10.356672 53.659992 10.430005 c\n53.819992 10.503338 53.946659 10.536672 54.039993 10.530006 c\n54.133327 10.523339 54.179993 10.420006 54.179993 10.220005 c\n54.559994 10.220005 l\n54.559994 12.700005 l\n54.039993 12.700005 l\n54.053326 12.300004 54.00666 11.940004 53.899994 11.620005 c\n53.80666 11.340005 53.643326 11.086671 53.409992 10.860004 c\n53.176659 10.633338 52.833324 10.520004 52.379993 10.520004 c\n52.019993 10.520004 51.726658 10.600004 51.499992 10.760004 c\n51.379993 10.853337 51.276657 10.990005 51.189991 11.170004 c\n51.103325 11.350003 51.053322 11.54667 51.039989 11.760004 c\n51.026657 11.973338 51.05999 12.203338 51.139988 12.450005 c\n51.219986 12.696671 51.379986 12.926671 51.619987 13.140005 c\n51.646656 13.180005 51.683323 13.220005 51.729988 13.260005 c\n51.776653 13.300005 51.826656 13.333338 51.87999 13.360005 c\n51.919991 13.386672 51.953323 13.413339 51.979988 13.440005 c\n52.05999 13.520005 l\n52.206657 13.640005 52.356659 13.760005 52.509991 13.880005 c\n52.663322 14.000005 52.819992 14.120005 52.979992 14.240005 c\n53.353325 14.560005 53.663326 14.850005 53.909992 15.110004 c\n54.156658 15.370004 54.363323 15.613338 54.529991 15.840004 c\n54.696659 16.066671 54.819992 16.280004 54.89999 16.480003 c\n54.979988 16.680002 55.026657 16.873337 55.039989 17.060003 c\n55.173325 17.673336 55.14999 18.190002 54.96999 18.610003 c\n54.789989 19.030003 54.55999 19.360003 54.279991 19.600002 c\n54.259991 19.600002 l\n54.259991 19.626669 54.246658 19.640003 54.21999 19.640003 c\n54.193321 19.66667 54.166656 19.68667 54.139988 19.700003 c\n54.019989 19.780003 l\n54.019989 19.780003 53.979988 19.800003 53.89999 19.840002 c\n53.89999 19.860003 l\n53.886658 19.860003 53.873322 19.863337 53.859989 19.870003 c\n53.846657 19.876669 53.833321 19.880003 53.819988 19.880003 c\n53.82 19.879999 l\nh\nf\nQ\nQ\nQ\nshowpage\n%%PageTrailer\npdfEndPage\n%%Trailer\nend\n%%DocumentSuppliedResources:\n%%EOF\n"
  },
  {
    "path": "resources/logo/print/eps/Color logo - no background.eps",
    "content": "%!PS-Adobe-3.0 EPSF-3.0\n%Produced by poppler pdftops version: 0.59.0 (http://poppler.freedesktop.org)\n%%Creator: Chromium\n%%LanguageLevel: 3\n%%DocumentSuppliedResources: (atend)\n%%BoundingBox: 0 0 2409 909\n%%HiResBoundingBox: 0 0 2409 909\n%%DocumentSuppliedResources: (atend)\n%%EndComments\n%%BeginProlog\n%%BeginResource: procset xpdf 3.00 0\n%%Copyright: Copyright 1996-2011 Glyph & Cog, LLC\n/xpdf 75 dict def xpdf begin\n% PDF special state\n/pdfDictSize 15 def\n/pdfSetup {\n  /setpagedevice where {\n    pop 2 dict begin\n      /Policies 1 dict dup begin /PageSize 6 def end def\n      { /Duplex true def } if\n    currentdict end setpagedevice\n  } {\n    pop\n  } ifelse\n} def\n/pdfSetupPaper {\n  % Change paper size, but only if different from previous paper size otherwise\n  % duplex fails. PLRM specifies a tolerance of 5 pts when matching paper size\n  % so we use the same when checking if the size changes.\n  /setpagedevice where {\n    pop currentpagedevice\n    /PageSize known {\n      2 copy\n      currentpagedevice /PageSize get aload pop\n      exch 4 1 roll\n      sub abs 5 gt\n      3 1 roll\n      sub abs 5 gt\n      or\n    } {\n      true\n    } ifelse\n    {\n      2 array astore\n      2 dict begin\n        /PageSize exch def\n        /ImagingBBox null def\n      currentdict end\n      setpagedevice\n    } {\n      pop pop\n    } ifelse\n  } {\n    pop\n  } ifelse\n} def\n/pdfStartPage {\n  pdfDictSize dict begin\n  /pdfFillCS [] def\n  /pdfFillXform {} def\n  /pdfStrokeCS [] def\n  /pdfStrokeXform {} def\n  /pdfFill [0] def\n  /pdfStroke [0] def\n  /pdfFillOP false def\n  /pdfStrokeOP false def\n  /pdfOPM false def\n  /pdfLastFill false def\n  /pdfLastStroke false def\n  /pdfTextMat [1 0 0 1 0 0] def\n  /pdfFontSize 0 def\n  /pdfCharSpacing 0 def\n  /pdfTextRender 0 def\n  /pdfPatternCS false def\n  /pdfTextRise 0 def\n  /pdfWordSpacing 0 def\n  /pdfHorizScaling 1 def\n  /pdfTextClipPath [] def\n} def\n/pdfEndPage { end } def\n% PDF color state\n/opm { dup /pdfOPM exch def\n      /setoverprintmode where{pop setoverprintmode}{pop}ifelse  } def\n/cs { /pdfFillXform exch def dup /pdfFillCS exch def\n      setcolorspace } def\n/CS { /pdfStrokeXform exch def dup /pdfStrokeCS exch def\n      setcolorspace } def\n/sc { pdfLastFill not { pdfFillCS setcolorspace } if\n      dup /pdfFill exch def aload pop pdfFillXform setcolor\n     /pdfLastFill true def /pdfLastStroke false def } def\n/SC { pdfLastStroke not { pdfStrokeCS setcolorspace } if\n      dup /pdfStroke exch def aload pop pdfStrokeXform setcolor\n     /pdfLastStroke true def /pdfLastFill false def } def\n/op { /pdfFillOP exch def\n      pdfLastFill { pdfFillOP setoverprint } if } def\n/OP { /pdfStrokeOP exch def\n      pdfLastStroke { pdfStrokeOP setoverprint } if } def\n/fCol {\n  pdfLastFill not {\n    pdfFillCS setcolorspace\n    pdfFill aload pop pdfFillXform setcolor\n    pdfFillOP setoverprint\n    /pdfLastFill true def /pdfLastStroke false def\n  } if\n} def\n/sCol {\n  pdfLastStroke not {\n    pdfStrokeCS setcolorspace\n    pdfStroke aload pop pdfStrokeXform setcolor\n    pdfStrokeOP setoverprint\n    /pdfLastStroke true def /pdfLastFill false def\n  } if\n} def\n% build a font\n/pdfMakeFont {\n  4 3 roll findfont\n  4 2 roll matrix scale makefont\n  dup length dict begin\n    { 1 index /FID ne { def } { pop pop } ifelse } forall\n    /Encoding exch def\n    currentdict\n  end\n  definefont pop\n} def\n/pdfMakeFont16 {\n  exch findfont\n  dup length dict begin\n    { 1 index /FID ne { def } { pop pop } ifelse } forall\n    /WMode exch def\n    currentdict\n  end\n  definefont pop\n} def\n/pdfMakeFont16L3 {\n  1 index /CIDFont resourcestatus {\n    pop pop 1 index /CIDFont findresource /CIDFontType known\n  } {\n    false\n  } ifelse\n  {\n    0 eq { /Identity-H } { /Identity-V } ifelse\n    exch 1 array astore composefont pop\n  } {\n    pdfMakeFont16\n  } ifelse\n} def\n% graphics state operators\n/q { gsave pdfDictSize dict begin } def\n/Q {\n  end grestore\n  /pdfLastFill where {\n    pop\n    pdfLastFill {\n      pdfFillOP setoverprint\n    } {\n      pdfStrokeOP setoverprint\n    } ifelse\n  } if\n  /pdfOPM where {\n    pop\n    pdfOPM /setoverprintmode where{pop setoverprintmode}{pop}ifelse \n  } if\n} def\n/cm { concat } def\n/d { setdash } def\n/i { setflat } def\n/j { setlinejoin } def\n/J { setlinecap } def\n/M { setmiterlimit } def\n/w { setlinewidth } def\n% path segment operators\n/m { moveto } def\n/l { lineto } def\n/c { curveto } def\n/re { 4 2 roll moveto 1 index 0 rlineto 0 exch rlineto\n      neg 0 rlineto closepath } def\n/h { closepath } def\n% path painting operators\n/S { sCol stroke } def\n/Sf { fCol stroke } def\n/f { fCol fill } def\n/f* { fCol eofill } def\n% clipping operators\n/W { clip newpath } def\n/W* { eoclip newpath } def\n/Ws { strokepath clip newpath } def\n% text state operators\n/Tc { /pdfCharSpacing exch def } def\n/Tf { dup /pdfFontSize exch def\n      dup pdfHorizScaling mul exch matrix scale\n      pdfTextMat matrix concatmatrix dup 4 0 put dup 5 0 put\n      exch findfont exch makefont setfont } def\n/Tr { /pdfTextRender exch def } def\n/Tp { /pdfPatternCS exch def } def\n/Ts { /pdfTextRise exch def } def\n/Tw { /pdfWordSpacing exch def } def\n/Tz { /pdfHorizScaling exch def } def\n% text positioning operators\n/Td { pdfTextMat transform moveto } def\n/Tm { /pdfTextMat exch def } def\n% text string operators\n/xyshow where {\n  pop\n  /xyshow2 {\n    dup length array\n    0 2 2 index length 1 sub {\n      2 index 1 index 2 copy get 3 1 roll 1 add get\n      pdfTextMat dtransform\n      4 2 roll 2 copy 6 5 roll put 1 add 3 1 roll dup 4 2 roll put\n    } for\n    exch pop\n    xyshow\n  } def\n}{\n  /xyshow2 {\n    currentfont /FontType get 0 eq {\n      0 2 3 index length 1 sub {\n        currentpoint 4 index 3 index 2 getinterval show moveto\n        2 copy get 2 index 3 2 roll 1 add get\n        pdfTextMat dtransform rmoveto\n      } for\n    } {\n      0 1 3 index length 1 sub {\n        currentpoint 4 index 3 index 1 getinterval show moveto\n        2 copy 2 mul get 2 index 3 2 roll 2 mul 1 add get\n        pdfTextMat dtransform rmoveto\n      } for\n    } ifelse\n    pop pop\n  } def\n} ifelse\n/cshow where {\n  pop\n  /xycp {\n    0 3 2 roll\n    {\n      pop pop currentpoint 3 2 roll\n      1 string dup 0 4 3 roll put false charpath moveto\n      2 copy get 2 index 2 index 1 add get\n      pdfTextMat dtransform rmoveto\n      2 add\n    } exch cshow\n    pop pop\n  } def\n}{\n  /xycp {\n    currentfont /FontType get 0 eq {\n      0 2 3 index length 1 sub {\n        currentpoint 4 index 3 index 2 getinterval false charpath moveto\n        2 copy get 2 index 3 2 roll 1 add get\n        pdfTextMat dtransform rmoveto\n      } for\n    } {\n      0 1 3 index length 1 sub {\n        currentpoint 4 index 3 index 1 getinterval false charpath moveto\n        2 copy 2 mul get 2 index 3 2 roll 2 mul 1 add get\n        pdfTextMat dtransform rmoveto\n      } for\n    } ifelse\n    pop pop\n  } def\n} ifelse\n/Tj {\n  fCol\n  0 pdfTextRise pdfTextMat dtransform rmoveto\n  currentpoint 4 2 roll\n  pdfTextRender 1 and 0 eq {\n    2 copy xyshow2\n  } if\n  pdfTextRender 3 and dup 1 eq exch 2 eq or {\n    3 index 3 index moveto\n    2 copy\n    currentfont /FontType get 3 eq { fCol } { sCol } ifelse\n    xycp currentpoint stroke moveto\n  } if\n  pdfTextRender 4 and 0 ne {\n    4 2 roll moveto xycp\n    /pdfTextClipPath [ pdfTextClipPath aload pop\n      {/moveto cvx}\n      {/lineto cvx}\n      {/curveto cvx}\n      {/closepath cvx}\n    pathforall ] def\n    currentpoint newpath moveto\n  } {\n    pop pop pop pop\n  } ifelse\n  0 pdfTextRise neg pdfTextMat dtransform rmoveto\n} def\n/TJm { 0.001 mul pdfFontSize mul pdfHorizScaling mul neg 0\n       pdfTextMat dtransform rmoveto } def\n/TJmV { 0.001 mul pdfFontSize mul neg 0 exch\n        pdfTextMat dtransform rmoveto } def\n/Tclip { pdfTextClipPath cvx exec clip newpath\n         /pdfTextClipPath [] def } def\n/Tclip* { pdfTextClipPath cvx exec eoclip newpath\n         /pdfTextClipPath [] def } def\n% Level 2/3 image operators\n/pdfImBuf 100 string def\n/pdfImStr {\n  2 copy exch length lt {\n    2 copy get exch 1 add exch\n  } {\n    ()\n  } ifelse\n} def\n/skipEOD {\n  { currentfile pdfImBuf readline\n    not { pop exit } if\n    (%-EOD-) eq { exit } if } loop\n} def\n/pdfIm { image skipEOD } def\n/pdfMask {\n  /ReusableStreamDecode filter\n  skipEOD\n  /maskStream exch def\n} def\n/pdfMaskEnd { maskStream closefile } def\n/pdfMaskInit {\n  /maskArray exch def\n  /maskIdx 0 def\n} def\n/pdfMaskSrc {\n  maskIdx maskArray length lt {\n    maskArray maskIdx get\n    /maskIdx maskIdx 1 add def\n  } {\n    ()\n  } ifelse\n} def\n/pdfImM { fCol imagemask skipEOD } def\n/pr { 2 index 2 index 3 2 roll putinterval 4 add } def\n/pdfImClip {\n  gsave\n  0 2 4 index length 1 sub {\n    dup 4 index exch 2 copy\n    get 5 index div put\n    1 add 3 index exch 2 copy\n    get 3 index div put\n  } for\n  pop pop rectclip\n} def\n/pdfImClipEnd { grestore } def\n% shading operators\n/colordelta {\n  false 0 1 3 index length 1 sub {\n    dup 4 index exch get 3 index 3 2 roll get sub abs 0.004 gt {\n      pop true\n    } if\n  } for\n  exch pop exch pop\n} def\n/funcCol { func n array astore } def\n/funcSH {\n  dup 0 eq {\n    true\n  } {\n    dup 6 eq {\n      false\n    } {\n      4 index 4 index funcCol dup\n      6 index 4 index funcCol dup\n      3 1 roll colordelta 3 1 roll\n      5 index 5 index funcCol dup\n      3 1 roll colordelta 3 1 roll\n      6 index 8 index funcCol dup\n      3 1 roll colordelta 3 1 roll\n      colordelta or or or\n    } ifelse\n  } ifelse\n  {\n    1 add\n    4 index 3 index add 0.5 mul exch 4 index 3 index add 0.5 mul exch\n    6 index 6 index 4 index 4 index 4 index funcSH\n    2 index 6 index 6 index 4 index 4 index funcSH\n    6 index 2 index 4 index 6 index 4 index funcSH\n    5 3 roll 3 2 roll funcSH pop pop\n  } {\n    pop 3 index 2 index add 0.5 mul 3 index  2 index add 0.5 mul\n    funcCol sc\n    dup 4 index exch mat transform m\n    3 index 3 index mat transform l\n    1 index 3 index mat transform l\n    mat transform l pop pop h f*\n  } ifelse\n} def\n/axialCol {\n  dup 0 lt {\n    pop t0\n  } {\n    dup 1 gt {\n      pop t1\n    } {\n      dt mul t0 add\n    } ifelse\n  } ifelse\n  func n array astore\n} def\n/axialSH {\n  dup 0 eq {\n    true\n  } {\n    dup 8 eq {\n      false\n    } {\n      2 index axialCol 2 index axialCol colordelta\n    } ifelse\n  } ifelse\n  {\n    1 add 3 1 roll 2 copy add 0.5 mul\n    dup 4 3 roll exch 4 index axialSH\n    exch 3 2 roll axialSH\n  } {\n    pop 2 copy add 0.5 mul\n    axialCol sc\n    exch dup dx mul x0 add exch dy mul y0 add\n    3 2 roll dup dx mul x0 add exch dy mul y0 add\n    dx abs dy abs ge {\n      2 copy yMin sub dy mul dx div add yMin m\n      yMax sub dy mul dx div add yMax l\n      2 copy yMax sub dy mul dx div add yMax l\n      yMin sub dy mul dx div add yMin l\n      h f*\n    } {\n      exch 2 copy xMin sub dx mul dy div add xMin exch m\n      xMax sub dx mul dy div add xMax exch l\n      exch 2 copy xMax sub dx mul dy div add xMax exch l\n      xMin sub dx mul dy div add xMin exch l\n      h f*\n    } ifelse\n  } ifelse\n} def\n/radialCol {\n  dup t0 lt {\n    pop t0\n  } {\n    dup t1 gt {\n      pop t1\n    } if\n  } ifelse\n  func n array astore\n} def\n/radialSH {\n  dup 0 eq {\n    true\n  } {\n    dup 8 eq {\n      false\n    } {\n      2 index dt mul t0 add radialCol\n      2 index dt mul t0 add radialCol colordelta\n    } ifelse\n  } ifelse\n  {\n    1 add 3 1 roll 2 copy add 0.5 mul\n    dup 4 3 roll exch 4 index radialSH\n    exch 3 2 roll radialSH\n  } {\n    pop 2 copy add 0.5 mul dt mul t0 add\n    radialCol sc\n    encl {\n      exch dup dx mul x0 add exch dup dy mul y0 add exch dr mul r0 add\n      0 360 arc h\n      dup dx mul x0 add exch dup dy mul y0 add exch dr mul r0 add\n      360 0 arcn h f\n    } {\n      2 copy\n      dup dx mul x0 add exch dup dy mul y0 add exch dr mul r0 add\n      a1 a2 arcn\n      dup dx mul x0 add exch dup dy mul y0 add exch dr mul r0 add\n      a2 a1 arcn h\n      dup dx mul x0 add exch dup dy mul y0 add exch dr mul r0 add\n      a1 a2 arc\n      dup dx mul x0 add exch dup dy mul y0 add exch dr mul r0 add\n      a2 a1 arc h f\n    } ifelse\n  } ifelse\n} def\nend\n%%EndResource\n/CIDInit /ProcSet findresource begin\n10 dict begin\n  begincmap\n  /CMapType 1 def\n  /CMapName /Identity-H def\n  /CIDSystemInfo 3 dict dup begin\n    /Registry (Adobe) def\n    /Ordering (Identity) def\n    /Supplement 0 def\n  end def\n  1 begincodespacerange\n    <0000> <ffff>\n  endcodespacerange\n  0 usefont\n  1 begincidrange\n    <0000> <ffff> 0\n  endcidrange\n  endcmap\n  currentdict CMapName exch /CMap defineresource pop\nend\n10 dict begin\n  begincmap\n  /CMapType 1 def\n  /CMapName /Identity-V def\n  /CIDSystemInfo 3 dict dup begin\n    /Registry (Adobe) def\n    /Ordering (Identity) def\n    /Supplement 0 def\n  end def\n  /WMode 1 def\n  1 begincodespacerange\n    <0000> <ffff>\n  endcodespacerange\n  0 usefont\n  1 begincidrange\n    <0000> <ffff> 0\n  endcidrange\n  endcmap\n  currentdict CMapName exch /CMap defineresource pop\nend\nend\n%%EndProlog\n%%BeginSetup\nxpdf begin\n%%EndSetup\npdfStartPage\n%%EndPageSetup\n[] 0 d\n1 i\n0 j\n0 J\n10 M\n1 w\n/DeviceGray {} cs\n[0] sc\n/DeviceGray {} CS\n[0] SC\nfalse op\nfalse OP\n{} settransfer\n0 0 2409 909 re\nW\nq\n[1 0 0 -1 0 909] cm\nq\n0 0 2409 908.7038 re\nW*\nq\n[0.747904 0 0 0.747904 0 -908.7038] cm\n/DeviceRGB {} CS\n[1 1 1] SC\n/DeviceRGB {} cs\n[1 1 1] sc\n0 0 3221 2436 re\nf\nQ\nQ\nq\n5.983235 0 2403.0168 907.20795 re\nW*\nq\n[0.822879 0 0 0.822978 95.330643 145.991699] cm\n/DeviceRGB {} CS\n[0.09 0.329 0.122] SC\n/DeviceRGB {} cs\n[0.09 0.329 0.122] sc\n231 798 m\n227 779 219 741 218 741 c\n49 640 69 465 125 365 c\n137 491 360 578 230 732 c\n229 734 236 758 242 780 c\n268 736 307 683 305 678 c\n145 288 645 258 749 16 c\n796 250 725 612 323 704 c\n321 705 250 830 247 831 c\n247 829 217 830 221 820 c\n223 814 227 806 231 798 c\nh\n330 625 m\n267 476 452 312 544 271 c\n356 439 324 564 330 625 c\nh\n226 704 m\n277 645 217 544 181 511 c\n242 616 238 677 226 704 c\nh\nf\nQ\nq\n[26.582434 0 0 26.585632 866.89978 103.116905] cm\n/DeviceRGB {} CS\n[0.145 0.22 0.059] SC\n/DeviceRGB {} cs\n[0.145 0.22 0.059] sc\n6.5 8.62 m\n6.513333 8.940001 6.52 9.303333 6.52 9.71 c\n6.52 10.116667 6.513333 10.473333 6.5 10.78 c\n6.5 11.139999 6.436667 11.496666 6.31 11.849999 c\n6.183333 12.203333 5.993333 12.52 5.74 12.799999 c\n5.486666 13.079999 5.17 13.299999 4.79 13.459999 c\n4.41 13.619999 3.973334 13.699999 3.48 13.699999 c\n2.46 13.699999 l\n2.46 18.919998 l\n2.46 19.106665 2.486667 19.243332 2.54 19.329998 c\n2.593333 19.416664 2.646667 19.466663 2.7 19.479998 c\n2.78 19.519997 2.866667 19.519997 2.96 19.479998 c\n2.96 19.999998 l\n0.54 19.999998 l\n0.54 19.479998 l\n0.646667 19.519997 0.726667 19.519997 0.78 19.479998 c\n0.846667 19.466663 0.913333 19.416664 0.98 19.329998 c\n1.046667 19.243332 1.08 19.106665 1.08 18.919998 c\n1.08 6.779998 l\n1.08 6.579998 1.046667 6.436665 0.98 6.349998 c\n0.913333 6.263331 0.846667 6.206665 0.78 6.179998 c\n0.726667 6.153331 0.646667 6.153331 0.54 6.179998 c\n0.54 5.699998 l\n3.48 5.699998 l\n3.973334 5.699998 4.41 5.779998 4.79 5.939998 c\n5.17 6.099998 5.486666 6.319997 5.74 6.599998 c\n5.993333 6.879998 6.183333 7.193331 6.31 7.539998 c\n6.436667 7.886664 6.5 8.246664 6.5 8.619998 c\n6.5 8.62 l\nh\n5.08 8.18 m\n5.08 7.833334 5.023333 7.533334 4.91 7.28 c\n4.796667 7.026667 4.663333 6.826667 4.51 6.68 c\n4.356667 6.533334 4.196666 6.416667 4.03 6.33 c\n3.863333 6.243334 3.72 6.2 3.6 6.2 c\n2.46 6.2 l\n2.46 13.16 l\n3.599999 13.16 l\n3.72 13.16 3.863333 13.126666 4.029999 13.06 c\n4.196666 12.993333 4.356666 12.876666 4.509999 12.709999 c\n4.663333 12.543332 4.796666 12.339999 4.909999 12.099999 c\n5.023333 11.86 5.079999 11.56 5.079999 11.2 c\n5.079999 8.18 l\n5.08 8.18 l\nh\n14.58 19.139999 m\n14.58 19.246666 14.553333 19.356667 14.5 19.469999 c\n14.446667 19.583332 14.37 19.689999 14.270001 19.789999 c\n14.170001 19.889999 14.043334 19.98 13.89 20.059999 c\n13.736667 20.139999 13.56 20.18 13.360001 20.18 c\n13.040001 20.18 12.753334 20.106667 12.500001 19.960001 c\n12.246668 19.813335 12.073335 19.620001 11.980001 19.380001 c\n11.900002 19.246668 11.840001 19.093334 11.800001 18.920002 c\n11.626668 19.280003 11.363335 19.580002 11.010001 19.820002 c\n10.656668 20.060001 10.266668 20.18 9.840001 20.180002 c\n9.306667 20.180002 8.840001 19.98667 8.440002 19.600002 c\n8.213335 19.400003 8.026669 19.140003 7.880002 18.820002 c\n7.733335 18.5 7.646668 18.133333 7.620002 17.720001 c\n7.606669 17.680002 7.600002 17.600002 7.600002 17.480001 c\n7.600002 17.460001 l\n7.613335 17.233334 7.653335 16.996668 7.720002 16.750002 c\n7.786668 16.503336 7.890002 16.25667 8.030002 16.010002 c\n8.170002 15.763335 8.336668 15.530002 8.530002 15.310002 c\n8.723335 15.090003 8.933335 14.900003 9.160002 14.740003 c\n9.213335 14.713336 9.256668 14.683336 9.290002 14.650003 c\n9.323336 14.616669 9.373335 14.580003 9.440002 14.540003 c\n9.500002 14.510003 l\n9.560002 14.480003 l\n9.800002 14.333337 10.010002 14.200004 10.190002 14.080004 c\n10.370003 13.960004 10.533336 13.846671 10.680002 13.740004 c\n10.760002 13.68667 10.840002 13.62667 10.920002 13.560003 c\n11.000002 13.493337 11.086669 13.42667 11.180002 13.360004 c\n11.300002 13.280004 11.413336 13.18667 11.520002 13.080004 c\n11.626669 12.973337 11.706669 12.84667 11.760002 12.700004 c\n11.840002 12.56667 11.880002 12.406671 11.880002 12.220003 c\n11.880002 12.033336 11.860002 11.86667 11.820002 11.720003 c\n11.766668 11.42667 11.630002 11.173337 11.410002 10.960003 c\n11.190002 10.746669 10.946669 10.606669 10.680002 10.540003 c\n10.560002 10.500003 10.446669 10.480002 10.340002 10.480002 c\n9.966668 10.480002 9.646668 10.546669 9.380002 10.680002 c\n9.206669 10.760002 9.080002 10.850002 9.000002 10.950003 c\n8.920002 11.050003 8.876669 11.143336 8.870002 11.230002 c\n8.863335 11.316669 8.880002 11.386668 8.920002 11.440002 c\n8.960002 11.493337 9.013335 11.533337 9.080002 11.560002 c\n9.106669 11.573336 9.123335 11.580003 9.130002 11.580003 c\n9.136669 11.580003 9.153336 11.58667 9.180002 11.600003 c\n9.353335 11.66667 9.496669 11.783337 9.610003 11.950004 c\n9.723336 12.116671 9.780003 12.300004 9.780003 12.500004 c\n9.780003 12.753337 9.690002 12.970004 9.510002 13.150003 c\n9.330002 13.330003 9.113336 13.420003 8.860003 13.420004 c\n8.593336 13.420004 8.36667 13.330004 8.180002 13.150003 c\n7.993335 12.970003 7.900002 12.753337 7.900002 12.500004 c\n7.900002 12.273337 7.930002 12.036671 7.990002 11.790004 c\n8.050002 11.543337 8.140002 11.320004 8.260002 11.120004 c\n8.513335 10.74667 8.816669 10.47667 9.170002 10.310003 c\n9.523336 10.143336 9.913335 10.060003 10.340002 10.060003 c\n10.660002 10.060003 10.976668 10.120004 11.290002 10.240004 c\n11.603335 10.360004 11.883335 10.530004 12.130002 10.750004 c\n12.376669 10.970004 12.583335 11.233337 12.750002 11.540004 c\n12.916669 11.84667 13.000002 12.200004 13.000002 12.600004 c\n13.000002 18.480003 l\n13.000002 18.720003 13.003335 18.876671 13.010002 18.950003 c\n13.016669 19.023335 13.020002 19.073336 13.020002 19.100002 c\n13.020002 19.273336 13.073336 19.413336 13.180002 19.520002 c\n13.286669 19.626669 13.413336 19.680002 13.560002 19.680002 c\n13.733335 19.680002 13.873336 19.630003 13.980002 19.530003 c\n14.086669 19.430002 14.146669 19.300003 14.160003 19.140003 c\n14.580003 19.140003 l\n14.58 19.139999 l\nh\n11.44 18.639999 m\n11.546666 18.453333 11.61 18.253332 11.629999 18.039999 c\n11.649999 17.826666 11.659999 17.626665 11.659999 17.439999 c\n11.659999 13.739999 l\n11.606666 13.793332 11.549999 13.843332 11.489999 13.889998 c\n11.429998 13.936665 11.366666 13.993332 11.299999 14.059999 c\n10.913333 14.339998 10.583333 14.596665 10.31 14.829998 c\n10.036666 15.063331 9.806666 15.303331 9.619999 15.549998 c\n9.433332 15.796665 9.286665 16.06 9.179999 16.339998 c\n9.073334 16.619999 9.006667 16.939999 8.98 17.299999 c\n8.98 17.599998 l\n8.993333 18.106665 9.13 18.503332 9.389999 18.789999 c\n9.649999 19.076666 10.019999 19.219999 10.499999 19.219999 c\n10.713332 19.219999 10.906666 19.166666 11.079999 19.059999 c\n11.253332 18.939999 11.373332 18.799999 11.439999 18.639999 c\n11.44 18.639999 l\nh\n18.32 10.08 m\n19.08 10.093333 19.686666 10.323334 20.139999 10.770001 c\n20.593332 11.216667 20.82 11.926667 20.82 12.900001 c\n20.82 17.380001 l\n20.82 18.353334 20.593332 19.059999 20.139999 19.5 c\n19.686666 19.940001 19.08 20.173334 18.32 20.200001 c\n18.26 20.200001 l\n18.033333 20.200001 17.826666 20.173334 17.639999 20.120001 c\n17.619999 20.120001 l\n17.606665 20.120001 17.599998 20.113335 17.599998 20.1 c\n17.293333 19.993334 17.026667 19.846666 16.799999 19.66 c\n16.609999 19.469999 l\n16.609999 19.469999 16.56 19.4 16.459999 19.26 c\n16.459999 22.58 l\n16.459999 22.766666 16.486666 22.903334 16.539999 22.99 c\n16.593332 23.076666 16.646666 23.133333 16.699999 23.16 c\n16.779999 23.199999 16.866667 23.199999 16.959999 23.16 c\n16.959999 23.66 l\n14.539999 23.66 l\n14.539999 23.16 l\n14.646666 23.199999 14.726666 23.199999 14.779999 23.16 c\n14.846665 23.133333 14.909999 23.076666 14.969998 22.99 c\n15.029998 22.903334 15.059998 22.766666 15.059999 22.58 c\n15.059999 11.3 l\n15.059999 11.113334 15.029999 10.976667 14.969998 10.89 c\n14.909998 10.803333 14.846665 10.746667 14.779999 10.72 c\n14.726666 10.693334 14.646666 10.693334 14.539999 10.72 c\n14.539999 10.24 l\n16.459999 10.24 l\n16.459999 11.02 l\n16.553331 10.873333 16.666666 10.74 16.799999 10.62 c\n17.026667 10.42 17.293333 10.273334 17.599998 10.18 c\n17.599998 10.166667 17.606665 10.16 17.619999 10.16 c\n17.639999 10.16 l\n17.853333 10.106667 18.059999 10.08 18.26 10.08 c\n18.32 10.08 l\nh\n19.32 12.46 m\n19.32 12.44 l\n19.306665 11.76 19.223333 11.28 19.07 11 c\n18.916666 10.72 18.666666 10.566667 18.32 10.54 c\n18.08 10.526667 17.853333 10.556666 17.639999 10.63 c\n17.426666 10.703334 17.24 10.826667 17.08 11 c\n16.92 11.173333 16.786667 11.406666 16.68 11.7 c\n16.573334 11.993334 16.5 12.34 16.460001 12.74 c\n16.460001 17.540001 l\n16.5 17.953335 16.573334 18.303335 16.68 18.59 c\n16.786667 18.876665 16.92 19.103333 17.08 19.27 c\n17.24 19.436668 17.426666 19.560001 17.639999 19.640001 c\n17.853333 19.720001 18.08 19.753334 18.32 19.740002 c\n18.666666 19.713335 18.916666 19.560001 19.07 19.280003 c\n19.223333 19.000004 19.306665 18.520004 19.32 17.840002 c\n19.32 17.820002 l\n19.32 12.460001 l\n19.32 12.46 l\nh\n24.379999 10.08 m\n24.686665 10.08 24.999998 10.133333 25.32 10.24 c\n25.640001 10.346666 25.926668 10.513333 26.18 10.74 c\n26.433332 10.966666 26.636667 11.253333 26.790001 11.599999 c\n26.943335 11.946666 27.020002 12.359999 27.02 12.839999 c\n27.02 14.859999 l\n27.02 14.919999 l\n27.02 15.379999 l\n23.040001 15.379999 l\n23.040001 17.439999 l\n23.040001 18.266665 23.183334 18.856665 23.470001 19.209999 c\n23.756668 19.563334 24.113335 19.733334 24.540001 19.719999 c\n24.793333 19.706665 25.043333 19.663332 25.290001 19.59 c\n25.536669 19.516668 25.750002 19.393333 25.93 19.219999 c\n26.109999 19.046665 26.26 18.799997 26.380001 18.48 c\n26.500002 18.160002 26.560003 17.740002 26.560001 17.219999 c\n27.02 17.219999 l\n27.02 17.5 l\n27.02 17.860001 26.98 18.203335 26.9 18.530001 c\n26.82 18.856667 26.679998 19.140001 26.48 19.380001 c\n26.280001 19.620001 26.023333 19.810001 25.709999 19.950001 c\n25.396666 20.09 25.013332 20.166666 24.559999 20.18 c\n24.24 20.18 23.913334 20.120001 23.58 20 c\n23.246666 19.879999 22.946667 19.699999 22.68 19.459999 c\n22.413334 19.219999 22.193335 18.936665 22.02 18.609999 c\n21.846666 18.283333 21.76 17.913332 21.76 17.499998 c\n21.76 17.029999 l\n21.76 17.029999 21.756666 16.773333 21.75 16.259998 c\n21.743334 15.746665 21.74 15.429998 21.74 15.309999 c\n21.74 15.189999 21.736666 14.859999 21.73 14.319999 c\n21.723333 13.779999 21.719999 13.489999 21.719999 13.449999 c\n21.719999 12.859999 l\n21.719999 12.379998 21.803333 11.963332 21.969999 11.609999 c\n22.136665 11.256665 22.343332 10.969999 22.59 10.749999 c\n22.836668 10.529999 23.116667 10.363333 23.43 10.249999 c\n23.743334 10.136665 24.059999 10.079999 24.380001 10.079999 c\n24.379999 10.08 l\nh\n25.68 14.86 m\n25.68 13.28 l\n25.68 12.773333 25.646667 12.349999 25.58 12.01 c\n25.513332 11.670001 25.423332 11.396668 25.309999 11.190001 c\n25.196667 10.983334 25.059999 10.84 24.9 10.76 c\n24.74 10.68 24.559999 10.64 24.359999 10.64 c\n23.933332 10.64 23.609999 10.826667 23.389999 11.200001 c\n23.17 11.573335 23.059999 12.266667 23.059999 13.280001 c\n23.059999 14.860001 l\n25.68 14.860001 l\n25.68 14.86 l\nh\n33.540001 11.66 m\n33.540001 11.686667 33.546669 11.74 33.560001 11.82 c\n33.573334 11.9 33.573334 11.966666 33.560001 12.02 c\n33.546669 12.299999 33.450001 12.53 33.27 12.709999 c\n33.09 12.889998 32.873333 12.979999 32.619999 12.98 c\n32.353333 12.98 32.129997 12.886666 31.949999 12.7 c\n31.77 12.513333 31.68 12.286667 31.679998 12.02 c\n31.679998 11.686667 31.806665 11.433332 32.059998 11.259999 c\n32.086666 11.246666 32.103333 11.236666 32.109997 11.23 c\n32.139996 11.2 l\n32.23333 11.133333 32.293327 11.036666 32.319996 10.91 c\n32.346664 10.783334 32.266663 10.673333 32.079994 10.58 c\n31.959993 10.513333 31.839994 10.48 31.719994 10.48 c\n31.319994 10.453333 30.96666 10.573333 30.659994 10.839999 c\n30.353329 11.106666 30.146662 11.573332 30.039993 12.239999 c\n30.039993 18.919998 l\n30.039993 19.106665 30.06666 19.243332 30.119993 19.329998 c\n30.173326 19.416664 30.22666 19.466663 30.279993 19.479998 c\n30.359993 19.519997 30.446661 19.519997 30.539993 19.479998 c\n30.539993 19.999998 l\n28.119993 19.999998 l\n28.119993 19.479998 l\n28.22666 19.519997 28.30666 19.519997 28.359993 19.479998 c\n28.426661 19.466663 28.493326 19.416664 28.559994 19.329998 c\n28.626661 19.243332 28.659994 19.106665 28.659994 18.919998 c\n28.659994 11.299998 l\n28.659994 11.113332 28.626661 10.976666 28.559994 10.889998 c\n28.493326 10.803331 28.426661 10.746665 28.359993 10.719998 c\n28.30666 10.693332 28.22666 10.693332 28.119993 10.719998 c\n28.119993 10.219998 l\n30.039993 10.219998 l\n30.039993 11.039998 l\n30.133326 10.893332 30.22666 10.756664 30.319994 10.629998 c\n30.413328 10.503332 30.523329 10.396666 30.649994 10.309999 c\n30.776659 10.223331 30.923326 10.153332 31.089994 10.099999 c\n31.256662 10.046665 31.466661 10.019999 31.719994 10.019999 c\n32.106663 10.019999 32.466663 10.159999 32.799995 10.439999 c\n33.133327 10.719998 33.379997 11.126665 33.539997 11.659999 c\n33.540001 11.66 l\nh\n36.240002 18.92 m\n36.240002 19.106667 36.27 19.243334 36.330002 19.33 c\n36.390003 19.416666 36.446667 19.466665 36.5 19.48 c\n36.566666 19.519999 36.653332 19.519999 36.759998 19.48 c\n36.759998 20 l\n34.339996 20 l\n34.339996 19.48 l\n34.446663 19.519999 34.539997 19.519999 34.619995 19.48 c\n34.659996 19.466665 34.713329 19.416666 34.779995 19.33 c\n34.846661 19.243334 34.879993 19.106667 34.879993 18.92 c\n34.879993 6.8 l\n34.879993 6.6 34.846661 6.456667 34.779995 6.37 c\n34.713329 6.283334 34.659996 6.226667 34.619995 6.2 c\n34.539997 6.16 34.446663 6.16 34.339996 6.2 c\n34.339996 5.72 l\n36.239998 5.72 l\n36.239998 6.8 l\n36.239998 18.92 l\n36.240002 18.92 l\nh\n40.580002 10.08 m\n40.886669 10.08 41.200001 10.133333 41.52 10.24 c\n41.84 10.346666 42.126667 10.513333 42.380001 10.74 c\n42.633335 10.966666 42.83667 11.253333 42.990002 11.599999 c\n43.143333 11.946666 43.220001 12.359999 43.220001 12.839999 c\n43.220001 14.859999 l\n43.220001 14.919999 l\n43.220001 15.379999 l\n39.240002 15.379999 l\n39.240002 17.439999 l\n39.240002 18.266665 39.383335 18.856665 39.670002 19.209999 c\n39.956669 19.563334 40.313335 19.733334 40.740002 19.719999 c\n40.993336 19.706665 41.243336 19.663332 41.490002 19.59 c\n41.736668 19.516668 41.950001 19.393333 42.130001 19.219999 c\n42.310001 19.046665 42.460003 18.799997 42.580002 18.48 c\n42.700001 18.160002 42.760002 17.740002 42.760002 17.219999 c\n43.220001 17.219999 l\n43.220001 17.5 l\n43.220001 17.860001 43.18 18.203335 43.100002 18.530001 c\n43.020004 18.856667 42.880005 19.140001 42.680004 19.380001 c\n42.480003 19.620001 42.223339 19.810001 41.910004 19.950001 c\n41.596668 20.09 41.213337 20.166666 40.760002 20.18 c\n40.440002 20.18 40.113335 20.120001 39.780003 20 c\n39.446671 19.879999 39.146667 19.699999 38.880001 19.459999 c\n38.613335 19.219999 38.393333 18.936665 38.220001 18.609999 c\n38.046669 18.283333 37.960003 17.913332 37.960003 17.499998 c\n37.960003 17.029999 l\n37.960003 17.029999 37.956669 16.773333 37.950005 16.259998 c\n37.94334 15.746665 37.940006 15.429998 37.940006 15.309999 c\n37.940006 15.189999 37.936672 14.859999 37.930008 14.319999 c\n37.923344 13.779999 37.92001 13.489999 37.92001 13.449999 c\n37.92001 12.859999 l\n37.92001 12.379998 38.003342 11.963332 38.17001 11.609999 c\n38.336678 11.256665 38.543343 10.969999 38.790009 10.749999 c\n39.036674 10.529999 39.316673 10.363333 39.630009 10.249999 c\n39.943344 10.136665 40.26001 10.079999 40.580009 10.079999 c\n40.580002 10.08 l\nh\n41.880001 14.86 m\n41.880001 13.28 l\n41.880001 12.773333 41.846668 12.349999 41.780003 12.01 c\n41.713337 11.670001 41.623337 11.396668 41.510002 11.190001 c\n41.396667 10.983334 41.260002 10.84 41.100002 10.76 c\n40.940002 10.68 40.760002 10.64 40.560001 10.64 c\n40.133335 10.64 39.810001 10.826667 39.59 11.200001 c\n39.369999 11.573335 39.259998 12.266667 39.259998 13.280001 c\n39.259998 14.860001 l\n41.879997 14.860001 l\n41.880001 14.86 l\nh\n47.880001 19.879999 m\n47.866669 19.893333 47.856667 19.9 47.850002 19.9 c\n47.843338 19.9 47.833336 19.906666 47.820004 19.92 c\n47.800003 19.940001 l\n47.773335 19.953335 47.743336 19.966667 47.710003 19.980001 c\n47.67667 19.993336 47.646671 20.006668 47.620003 20.020002 c\n47.340004 20.140003 47.013336 20.200003 46.640003 20.200003 c\n46.42667 20.200003 46.220005 20.150003 46.020004 20.050003 c\n45.820004 19.950003 45.646671 19.866671 45.500004 19.800003 c\n45.353336 19.733335 45.230003 19.703337 45.130005 19.710003 c\n45.030006 19.716669 44.980007 19.813337 44.980003 20.000004 c\n44.600002 20.000004 l\n44.600002 17.600004 l\n45.080002 17.600004 l\n45.053333 18.02667 45.100002 18.393337 45.220001 18.700005 c\n45.299999 18.966671 45.456669 19.216671 45.690002 19.450005 c\n45.923336 19.683338 46.273338 19.800005 46.740002 19.800005 c\n47.046669 19.800005 47.299999 19.746672 47.5 19.640005 c\n47.846668 19.466671 48.083332 19.260004 48.209999 19.020004 c\n48.336666 18.780005 48.386665 18.530005 48.360001 18.270004 c\n48.333336 18.010004 48.236668 17.753338 48.07 17.500004 c\n47.903332 17.24667 47.699997 17.013336 47.459999 16.800003 c\n47.299999 16.680002 47.133331 16.553337 46.959999 16.420004 c\n46.786667 16.286671 46.613335 16.146671 46.439999 16.000004 c\n45.973331 15.62667 45.603333 15.290004 45.329998 14.990004 c\n45.056664 14.690003 44.846664 14.410004 44.699997 14.150003 c\n44.553329 13.890003 44.453331 13.643336 44.399998 13.410004 c\n44.346664 13.176671 44.32 12.926671 44.319996 12.660004 c\n44.319996 12.500004 44.329994 12.353337 44.349995 12.220004 c\n44.369995 12.086671 44.393326 11.966671 44.419994 11.860004 c\n44.459995 11.633338 44.526661 11.413338 44.619995 11.200005 c\n44.713329 10.986671 44.846661 10.796672 45.019997 10.630005 c\n45.193333 10.463338 45.406666 10.326672 45.659996 10.220005 c\n45.913326 10.113339 46.219994 10.060005 46.579994 10.060005 c\n46.779995 10.060005 46.979992 10.103338 47.179993 10.190005 c\n47.379993 10.276672 47.559994 10.356672 47.719994 10.430005 c\n47.879993 10.503338 48.00666 10.536672 48.099995 10.530006 c\n48.193329 10.523339 48.239994 10.420006 48.239994 10.220005 c\n48.619995 10.220005 l\n48.619995 12.700005 l\n48.099995 12.700005 l\n48.113327 12.300004 48.066662 11.940004 47.959995 11.620005 c\n47.866661 11.340005 47.703327 11.086671 47.469994 10.860004 c\n47.23666 10.633338 46.893326 10.520004 46.439995 10.520004 c\n46.079994 10.520004 45.786659 10.600004 45.559994 10.760004 c\n45.439995 10.853337 45.336658 10.990005 45.249992 11.170004 c\n45.163326 11.350003 45.113323 11.54667 45.099991 11.760004 c\n45.086658 11.973338 45.119991 12.203338 45.199989 12.450005 c\n45.279987 12.696671 45.439987 12.926671 45.679989 13.140005 c\n45.706657 13.180005 45.743324 13.220005 45.789989 13.260005 c\n45.836655 13.300005 45.886658 13.333338 45.939991 13.360005 c\n45.979992 13.386672 46.013325 13.413339 46.039989 13.440005 c\n46.119991 13.520005 l\n46.266659 13.640005 46.41666 13.760005 46.569992 13.880005 c\n46.723324 14.000005 46.879993 14.120005 47.039993 14.240005 c\n47.413326 14.560005 47.723328 14.850005 47.969994 15.110004 c\n48.21666 15.370004 48.423325 15.613338 48.589993 15.840004 c\n48.75666 16.066671 48.879993 16.280004 48.959991 16.480003 c\n49.039989 16.680002 49.086658 16.873337 49.099991 17.060003 c\n49.233326 17.673336 49.209991 18.190002 49.029991 18.610003 c\n48.849991 19.030003 48.619991 19.360003 48.339993 19.600002 c\n48.319992 19.600002 l\n48.319992 19.626669 48.30666 19.640003 48.279991 19.640003 c\n48.253323 19.66667 48.226658 19.68667 48.199989 19.700003 c\n48.07999 19.780003 l\n48.07999 19.780003 48.039989 19.800003 47.959991 19.840002 c\n47.959991 19.860003 l\n47.946659 19.860003 47.933323 19.863337 47.919991 19.870003 c\n47.906658 19.876669 47.893322 19.880003 47.87999 19.880003 c\n47.880001 19.879999 l\nh\n53.82 19.879999 m\n53.806667 19.893333 53.796665 19.9 53.790001 19.9 c\n53.783337 19.9 53.773335 19.906666 53.760002 19.92 c\n53.740002 19.940001 l\n53.713333 19.953335 53.683334 19.966667 53.650002 19.980001 c\n53.616669 19.993336 53.58667 20.006668 53.560001 20.020002 c\n53.280003 20.140003 52.953335 20.200003 52.580002 20.200003 c\n52.366669 20.200003 52.160004 20.150003 51.960003 20.050003 c\n51.760002 19.950003 51.58667 19.866671 51.440002 19.800003 c\n51.293335 19.733335 51.170002 19.703337 51.070004 19.710003 c\n50.970005 19.716669 50.920006 19.813337 50.920002 20.000004 c\n50.540001 20.000004 l\n50.540001 17.600004 l\n51.02 17.600004 l\n50.993332 18.02667 51.040001 18.393337 51.16 18.700005 c\n51.239998 18.966671 51.396667 19.216671 51.630001 19.450005 c\n51.863335 19.683338 52.213337 19.800005 52.68 19.800005 c\n52.986668 19.800005 53.239998 19.746672 53.439999 19.640005 c\n53.786667 19.466671 54.023331 19.260004 54.149998 19.020004 c\n54.276665 18.780005 54.326664 18.530005 54.299999 18.270004 c\n54.273335 18.010004 54.176666 17.753338 54.009998 17.500004 c\n53.84333 17.24667 53.639996 17.013336 53.399998 16.800003 c\n53.239998 16.680002 53.07333 16.553337 52.899998 16.420004 c\n52.726665 16.286671 52.553333 16.146671 52.379997 16.000004 c\n51.91333 15.62667 51.543331 15.290004 51.269997 14.990004 c\n50.996662 14.690003 50.786663 14.410004 50.639996 14.150003 c\n50.493328 13.890003 50.39333 13.643336 50.339996 13.410004 c\n50.286663 13.176671 50.259998 12.926671 50.259995 12.660004 c\n50.259995 12.500004 50.269993 12.353337 50.289993 12.220004 c\n50.309994 12.086671 50.333324 11.966671 50.359993 11.860004 c\n50.399994 11.633338 50.46666 11.413338 50.559994 11.200005 c\n50.653328 10.986671 50.786659 10.796672 50.959995 10.630005 c\n51.133331 10.463338 51.346664 10.326672 51.599995 10.220005 c\n51.853325 10.113339 52.159992 10.060005 52.519993 10.060005 c\n52.719994 10.060005 52.919991 10.103338 53.119991 10.190005 c\n53.319992 10.276672 53.499992 10.356672 53.659992 10.430005 c\n53.819992 10.503338 53.946659 10.536672 54.039993 10.530006 c\n54.133327 10.523339 54.179993 10.420006 54.179993 10.220005 c\n54.559994 10.220005 l\n54.559994 12.700005 l\n54.039993 12.700005 l\n54.053326 12.300004 54.00666 11.940004 53.899994 11.620005 c\n53.80666 11.340005 53.643326 11.086671 53.409992 10.860004 c\n53.176659 10.633338 52.833324 10.520004 52.379993 10.520004 c\n52.019993 10.520004 51.726658 10.600004 51.499992 10.760004 c\n51.379993 10.853337 51.276657 10.990005 51.189991 11.170004 c\n51.103325 11.350003 51.053322 11.54667 51.039989 11.760004 c\n51.026657 11.973338 51.05999 12.203338 51.139988 12.450005 c\n51.219986 12.696671 51.379986 12.926671 51.619987 13.140005 c\n51.646656 13.180005 51.683323 13.220005 51.729988 13.260005 c\n51.776653 13.300005 51.826656 13.333338 51.87999 13.360005 c\n51.919991 13.386672 51.953323 13.413339 51.979988 13.440005 c\n52.05999 13.520005 l\n52.206657 13.640005 52.356659 13.760005 52.509991 13.880005 c\n52.663322 14.000005 52.819992 14.120005 52.979992 14.240005 c\n53.353325 14.560005 53.663326 14.850005 53.909992 15.110004 c\n54.156658 15.370004 54.363323 15.613338 54.529991 15.840004 c\n54.696659 16.066671 54.819992 16.280004 54.89999 16.480003 c\n54.979988 16.680002 55.026657 16.873337 55.039989 17.060003 c\n55.173325 17.673336 55.14999 18.190002 54.96999 18.610003 c\n54.789989 19.030003 54.55999 19.360003 54.279991 19.600002 c\n54.259991 19.600002 l\n54.259991 19.626669 54.246658 19.640003 54.21999 19.640003 c\n54.193321 19.66667 54.166656 19.68667 54.139988 19.700003 c\n54.019989 19.780003 l\n54.019989 19.780003 53.979988 19.800003 53.89999 19.840002 c\n53.89999 19.860003 l\n53.886658 19.860003 53.873322 19.863337 53.859989 19.870003 c\n53.846657 19.876669 53.833321 19.880003 53.819988 19.880003 c\n53.82 19.879999 l\nh\nf\nQ\nQ\nQ\nshowpage\n%%PageTrailer\npdfEndPage\n%%Trailer\nend\n%%DocumentSuppliedResources:\n%%EOF\n"
  },
  {
    "path": "resources/logo/print/eps/Color logo with background.eps",
    "content": "%!PS-Adobe-3.0 EPSF-3.0\n%Produced by poppler pdftops version: 0.59.0 (http://poppler.freedesktop.org)\n%%Creator: Chromium\n%%LanguageLevel: 3\n%%DocumentSuppliedResources: (atend)\n%%BoundingBox: 0 0 2409 909\n%%HiResBoundingBox: 0 0 2409 909\n%%DocumentSuppliedResources: (atend)\n%%EndComments\n%%BeginProlog\n%%BeginResource: procset xpdf 3.00 0\n%%Copyright: Copyright 1996-2011 Glyph & Cog, LLC\n/xpdf 75 dict def xpdf begin\n% PDF special state\n/pdfDictSize 15 def\n/pdfSetup {\n  /setpagedevice where {\n    pop 2 dict begin\n      /Policies 1 dict dup begin /PageSize 6 def end def\n      { /Duplex true def } if\n    currentdict end setpagedevice\n  } {\n    pop\n  } ifelse\n} def\n/pdfSetupPaper {\n  % Change paper size, but only if different from previous paper size otherwise\n  % duplex fails. PLRM specifies a tolerance of 5 pts when matching paper size\n  % so we use the same when checking if the size changes.\n  /setpagedevice where {\n    pop currentpagedevice\n    /PageSize known {\n      2 copy\n      currentpagedevice /PageSize get aload pop\n      exch 4 1 roll\n      sub abs 5 gt\n      3 1 roll\n      sub abs 5 gt\n      or\n    } {\n      true\n    } ifelse\n    {\n      2 array astore\n      2 dict begin\n        /PageSize exch def\n        /ImagingBBox null def\n      currentdict end\n      setpagedevice\n    } {\n      pop pop\n    } ifelse\n  } {\n    pop\n  } ifelse\n} def\n/pdfStartPage {\n  pdfDictSize dict begin\n  /pdfFillCS [] def\n  /pdfFillXform {} def\n  /pdfStrokeCS [] def\n  /pdfStrokeXform {} def\n  /pdfFill [0] def\n  /pdfStroke [0] def\n  /pdfFillOP false def\n  /pdfStrokeOP false def\n  /pdfOPM false def\n  /pdfLastFill false def\n  /pdfLastStroke false def\n  /pdfTextMat [1 0 0 1 0 0] def\n  /pdfFontSize 0 def\n  /pdfCharSpacing 0 def\n  /pdfTextRender 0 def\n  /pdfPatternCS false def\n  /pdfTextRise 0 def\n  /pdfWordSpacing 0 def\n  /pdfHorizScaling 1 def\n  /pdfTextClipPath [] def\n} def\n/pdfEndPage { end } def\n% PDF color state\n/opm { dup /pdfOPM exch def\n      /setoverprintmode where{pop setoverprintmode}{pop}ifelse  } def\n/cs { /pdfFillXform exch def dup /pdfFillCS exch def\n      setcolorspace } def\n/CS { /pdfStrokeXform exch def dup /pdfStrokeCS exch def\n      setcolorspace } def\n/sc { pdfLastFill not { pdfFillCS setcolorspace } if\n      dup /pdfFill exch def aload pop pdfFillXform setcolor\n     /pdfLastFill true def /pdfLastStroke false def } def\n/SC { pdfLastStroke not { pdfStrokeCS setcolorspace } if\n      dup /pdfStroke exch def aload pop pdfStrokeXform setcolor\n     /pdfLastStroke true def /pdfLastFill false def } def\n/op { /pdfFillOP exch def\n      pdfLastFill { pdfFillOP setoverprint } if } def\n/OP { /pdfStrokeOP exch def\n      pdfLastStroke { pdfStrokeOP setoverprint } if } def\n/fCol {\n  pdfLastFill not {\n    pdfFillCS setcolorspace\n    pdfFill aload pop pdfFillXform setcolor\n    pdfFillOP setoverprint\n    /pdfLastFill true def /pdfLastStroke false def\n  } if\n} def\n/sCol {\n  pdfLastStroke not {\n    pdfStrokeCS setcolorspace\n    pdfStroke aload pop pdfStrokeXform setcolor\n    pdfStrokeOP setoverprint\n    /pdfLastStroke true def /pdfLastFill false def\n  } if\n} def\n% build a font\n/pdfMakeFont {\n  4 3 roll findfont\n  4 2 roll matrix scale makefont\n  dup length dict begin\n    { 1 index /FID ne { def } { pop pop } ifelse } forall\n    /Encoding exch def\n    currentdict\n  end\n  definefont pop\n} def\n/pdfMakeFont16 {\n  exch findfont\n  dup length dict begin\n    { 1 index /FID ne { def } { pop pop } ifelse } forall\n    /WMode exch def\n    currentdict\n  end\n  definefont pop\n} def\n/pdfMakeFont16L3 {\n  1 index /CIDFont resourcestatus {\n    pop pop 1 index /CIDFont findresource /CIDFontType known\n  } {\n    false\n  } ifelse\n  {\n    0 eq { /Identity-H } { /Identity-V } ifelse\n    exch 1 array astore composefont pop\n  } {\n    pdfMakeFont16\n  } ifelse\n} def\n% graphics state operators\n/q { gsave pdfDictSize dict begin } def\n/Q {\n  end grestore\n  /pdfLastFill where {\n    pop\n    pdfLastFill {\n      pdfFillOP setoverprint\n    } {\n      pdfStrokeOP setoverprint\n    } ifelse\n  } if\n  /pdfOPM where {\n    pop\n    pdfOPM /setoverprintmode where{pop setoverprintmode}{pop}ifelse \n  } if\n} def\n/cm { concat } def\n/d { setdash } def\n/i { setflat } def\n/j { setlinejoin } def\n/J { setlinecap } def\n/M { setmiterlimit } def\n/w { setlinewidth } def\n% path segment operators\n/m { moveto } def\n/l { lineto } def\n/c { curveto } def\n/re { 4 2 roll moveto 1 index 0 rlineto 0 exch rlineto\n      neg 0 rlineto closepath } def\n/h { closepath } def\n% path painting operators\n/S { sCol stroke } def\n/Sf { fCol stroke } def\n/f { fCol fill } def\n/f* { fCol eofill } def\n% clipping operators\n/W { clip newpath } def\n/W* { eoclip newpath } def\n/Ws { strokepath clip newpath } def\n% text state operators\n/Tc { /pdfCharSpacing exch def } def\n/Tf { dup /pdfFontSize exch def\n      dup pdfHorizScaling mul exch matrix scale\n      pdfTextMat matrix concatmatrix dup 4 0 put dup 5 0 put\n      exch findfont exch makefont setfont } def\n/Tr { /pdfTextRender exch def } def\n/Tp { /pdfPatternCS exch def } def\n/Ts { /pdfTextRise exch def } def\n/Tw { /pdfWordSpacing exch def } def\n/Tz { /pdfHorizScaling exch def } def\n% text positioning operators\n/Td { pdfTextMat transform moveto } def\n/Tm { /pdfTextMat exch def } def\n% text string operators\n/xyshow where {\n  pop\n  /xyshow2 {\n    dup length array\n    0 2 2 index length 1 sub {\n      2 index 1 index 2 copy get 3 1 roll 1 add get\n      pdfTextMat dtransform\n      4 2 roll 2 copy 6 5 roll put 1 add 3 1 roll dup 4 2 roll put\n    } for\n    exch pop\n    xyshow\n  } def\n}{\n  /xyshow2 {\n    currentfont /FontType get 0 eq {\n      0 2 3 index length 1 sub {\n        currentpoint 4 index 3 index 2 getinterval show moveto\n        2 copy get 2 index 3 2 roll 1 add get\n        pdfTextMat dtransform rmoveto\n      } for\n    } {\n      0 1 3 index length 1 sub {\n        currentpoint 4 index 3 index 1 getinterval show moveto\n        2 copy 2 mul get 2 index 3 2 roll 2 mul 1 add get\n        pdfTextMat dtransform rmoveto\n      } for\n    } ifelse\n    pop pop\n  } def\n} ifelse\n/cshow where {\n  pop\n  /xycp {\n    0 3 2 roll\n    {\n      pop pop currentpoint 3 2 roll\n      1 string dup 0 4 3 roll put false charpath moveto\n      2 copy get 2 index 2 index 1 add get\n      pdfTextMat dtransform rmoveto\n      2 add\n    } exch cshow\n    pop pop\n  } def\n}{\n  /xycp {\n    currentfont /FontType get 0 eq {\n      0 2 3 index length 1 sub {\n        currentpoint 4 index 3 index 2 getinterval false charpath moveto\n        2 copy get 2 index 3 2 roll 1 add get\n        pdfTextMat dtransform rmoveto\n      } for\n    } {\n      0 1 3 index length 1 sub {\n        currentpoint 4 index 3 index 1 getinterval false charpath moveto\n        2 copy 2 mul get 2 index 3 2 roll 2 mul 1 add get\n        pdfTextMat dtransform rmoveto\n      } for\n    } ifelse\n    pop pop\n  } def\n} ifelse\n/Tj {\n  fCol\n  0 pdfTextRise pdfTextMat dtransform rmoveto\n  currentpoint 4 2 roll\n  pdfTextRender 1 and 0 eq {\n    2 copy xyshow2\n  } if\n  pdfTextRender 3 and dup 1 eq exch 2 eq or {\n    3 index 3 index moveto\n    2 copy\n    currentfont /FontType get 3 eq { fCol } { sCol } ifelse\n    xycp currentpoint stroke moveto\n  } if\n  pdfTextRender 4 and 0 ne {\n    4 2 roll moveto xycp\n    /pdfTextClipPath [ pdfTextClipPath aload pop\n      {/moveto cvx}\n      {/lineto cvx}\n      {/curveto cvx}\n      {/closepath cvx}\n    pathforall ] def\n    currentpoint newpath moveto\n  } {\n    pop pop pop pop\n  } ifelse\n  0 pdfTextRise neg pdfTextMat dtransform rmoveto\n} def\n/TJm { 0.001 mul pdfFontSize mul pdfHorizScaling mul neg 0\n       pdfTextMat dtransform rmoveto } def\n/TJmV { 0.001 mul pdfFontSize mul neg 0 exch\n        pdfTextMat dtransform rmoveto } def\n/Tclip { pdfTextClipPath cvx exec clip newpath\n         /pdfTextClipPath [] def } def\n/Tclip* { pdfTextClipPath cvx exec eoclip newpath\n         /pdfTextClipPath [] def } def\n% Level 2/3 image operators\n/pdfImBuf 100 string def\n/pdfImStr {\n  2 copy exch length lt {\n    2 copy get exch 1 add exch\n  } {\n    ()\n  } ifelse\n} def\n/skipEOD {\n  { currentfile pdfImBuf readline\n    not { pop exit } if\n    (%-EOD-) eq { exit } if } loop\n} def\n/pdfIm { image skipEOD } def\n/pdfMask {\n  /ReusableStreamDecode filter\n  skipEOD\n  /maskStream exch def\n} def\n/pdfMaskEnd { maskStream closefile } def\n/pdfMaskInit {\n  /maskArray exch def\n  /maskIdx 0 def\n} def\n/pdfMaskSrc {\n  maskIdx maskArray length lt {\n    maskArray maskIdx get\n    /maskIdx maskIdx 1 add def\n  } {\n    ()\n  } ifelse\n} def\n/pdfImM { fCol imagemask skipEOD } def\n/pr { 2 index 2 index 3 2 roll putinterval 4 add } def\n/pdfImClip {\n  gsave\n  0 2 4 index length 1 sub {\n    dup 4 index exch 2 copy\n    get 5 index div put\n    1 add 3 index exch 2 copy\n    get 3 index div put\n  } for\n  pop pop rectclip\n} def\n/pdfImClipEnd { grestore } def\n% shading operators\n/colordelta {\n  false 0 1 3 index length 1 sub {\n    dup 4 index exch get 3 index 3 2 roll get sub abs 0.004 gt {\n      pop true\n    } if\n  } for\n  exch pop exch pop\n} def\n/funcCol { func n array astore } def\n/funcSH {\n  dup 0 eq {\n    true\n  } {\n    dup 6 eq {\n      false\n    } {\n      4 index 4 index funcCol dup\n      6 index 4 index funcCol dup\n      3 1 roll colordelta 3 1 roll\n      5 index 5 index funcCol dup\n      3 1 roll colordelta 3 1 roll\n      6 index 8 index funcCol dup\n      3 1 roll colordelta 3 1 roll\n      colordelta or or or\n    } ifelse\n  } ifelse\n  {\n    1 add\n    4 index 3 index add 0.5 mul exch 4 index 3 index add 0.5 mul exch\n    6 index 6 index 4 index 4 index 4 index funcSH\n    2 index 6 index 6 index 4 index 4 index funcSH\n    6 index 2 index 4 index 6 index 4 index funcSH\n    5 3 roll 3 2 roll funcSH pop pop\n  } {\n    pop 3 index 2 index add 0.5 mul 3 index  2 index add 0.5 mul\n    funcCol sc\n    dup 4 index exch mat transform m\n    3 index 3 index mat transform l\n    1 index 3 index mat transform l\n    mat transform l pop pop h f*\n  } ifelse\n} def\n/axialCol {\n  dup 0 lt {\n    pop t0\n  } {\n    dup 1 gt {\n      pop t1\n    } {\n      dt mul t0 add\n    } ifelse\n  } ifelse\n  func n array astore\n} def\n/axialSH {\n  dup 0 eq {\n    true\n  } {\n    dup 8 eq {\n      false\n    } {\n      2 index axialCol 2 index axialCol colordelta\n    } ifelse\n  } ifelse\n  {\n    1 add 3 1 roll 2 copy add 0.5 mul\n    dup 4 3 roll exch 4 index axialSH\n    exch 3 2 roll axialSH\n  } {\n    pop 2 copy add 0.5 mul\n    axialCol sc\n    exch dup dx mul x0 add exch dy mul y0 add\n    3 2 roll dup dx mul x0 add exch dy mul y0 add\n    dx abs dy abs ge {\n      2 copy yMin sub dy mul dx div add yMin m\n      yMax sub dy mul dx div add yMax l\n      2 copy yMax sub dy mul dx div add yMax l\n      yMin sub dy mul dx div add yMin l\n      h f*\n    } {\n      exch 2 copy xMin sub dx mul dy div add xMin exch m\n      xMax sub dx mul dy div add xMax exch l\n      exch 2 copy xMax sub dx mul dy div add xMax exch l\n      xMin sub dx mul dy div add xMin exch l\n      h f*\n    } ifelse\n  } ifelse\n} def\n/radialCol {\n  dup t0 lt {\n    pop t0\n  } {\n    dup t1 gt {\n      pop t1\n    } if\n  } ifelse\n  func n array astore\n} def\n/radialSH {\n  dup 0 eq {\n    true\n  } {\n    dup 8 eq {\n      false\n    } {\n      2 index dt mul t0 add radialCol\n      2 index dt mul t0 add radialCol colordelta\n    } ifelse\n  } ifelse\n  {\n    1 add 3 1 roll 2 copy add 0.5 mul\n    dup 4 3 roll exch 4 index radialSH\n    exch 3 2 roll radialSH\n  } {\n    pop 2 copy add 0.5 mul dt mul t0 add\n    radialCol sc\n    encl {\n      exch dup dx mul x0 add exch dup dy mul y0 add exch dr mul r0 add\n      0 360 arc h\n      dup dx mul x0 add exch dup dy mul y0 add exch dr mul r0 add\n      360 0 arcn h f\n    } {\n      2 copy\n      dup dx mul x0 add exch dup dy mul y0 add exch dr mul r0 add\n      a1 a2 arcn\n      dup dx mul x0 add exch dup dy mul y0 add exch dr mul r0 add\n      a2 a1 arcn h\n      dup dx mul x0 add exch dup dy mul y0 add exch dr mul r0 add\n      a1 a2 arc\n      dup dx mul x0 add exch dup dy mul y0 add exch dr mul r0 add\n      a2 a1 arc h f\n    } ifelse\n  } ifelse\n} def\nend\n%%EndResource\n/CIDInit /ProcSet findresource begin\n10 dict begin\n  begincmap\n  /CMapType 1 def\n  /CMapName /Identity-H def\n  /CIDSystemInfo 3 dict dup begin\n    /Registry (Adobe) def\n    /Ordering (Identity) def\n    /Supplement 0 def\n  end def\n  1 begincodespacerange\n    <0000> <ffff>\n  endcodespacerange\n  0 usefont\n  1 begincidrange\n    <0000> <ffff> 0\n  endcidrange\n  endcmap\n  currentdict CMapName exch /CMap defineresource pop\nend\n10 dict begin\n  begincmap\n  /CMapType 1 def\n  /CMapName /Identity-V def\n  /CIDSystemInfo 3 dict dup begin\n    /Registry (Adobe) def\n    /Ordering (Identity) def\n    /Supplement 0 def\n  end def\n  /WMode 1 def\n  1 begincodespacerange\n    <0000> <ffff>\n  endcodespacerange\n  0 usefont\n  1 begincidrange\n    <0000> <ffff> 0\n  endcidrange\n  endcmap\n  currentdict CMapName exch /CMap defineresource pop\nend\nend\n%%EndProlog\n%%BeginSetup\nxpdf begin\n%%EndSetup\npdfStartPage\n%%EndPageSetup\n[] 0 d\n1 i\n0 j\n0 J\n10 M\n1 w\n/DeviceGray {} cs\n[0] sc\n/DeviceGray {} CS\n[0] SC\nfalse op\nfalse OP\n{} settransfer\n0 0 2409 909 re\nW\nq\n[1 0 0 -1 0 909] cm\nq\n0 0 2409 908.7038 re\nW*\nq\n[0.747904 0 0 0.747904 0 -908.7038] cm\n/DeviceRGB {} CS\n[1 1 1] SC\n/DeviceRGB {} cs\n[1 1 1] sc\n0 0 3221 2436 re\nf\nQ\nQ\nq\n5.983235 0 2403.0168 907.20795 re\nW*\nq\n[0.747959 0 0 0.748049 5.983235 0] cm\n/DeviceRGB {} CS\n[1 1 1] SC\n/DeviceRGB {} cs\n[1 1 1] sc\n0 0 3212.7659 1212.76599 re\nf\nQ\nq\n[0.822879 0 0 0.822978 95.330643 145.991699] cm\n/DeviceRGB {} CS\n[0.09 0.329 0.122] SC\n/DeviceRGB {} cs\n[0.09 0.329 0.122] sc\n231 798 m\n227 779 219 741 218 741 c\n49 640 69 465 125 365 c\n137 491 360 578 230 732 c\n229 734 236 758 242 780 c\n268 736 307 683 305 678 c\n145 288 645 258 749 16 c\n796 250 725 612 323 704 c\n321 705 250 830 247 831 c\n247 829 217 830 221 820 c\n223 814 227 806 231 798 c\nh\n330 625 m\n267 476 452 312 544 271 c\n356 439 324 564 330 625 c\nh\n226 704 m\n277 645 217 544 181 511 c\n242 616 238 677 226 704 c\nh\nf\nQ\nq\n[26.582434 0 0 26.585632 866.89978 103.116905] cm\n/DeviceRGB {} CS\n[0.145 0.22 0.059] SC\n/DeviceRGB {} cs\n[0.145 0.22 0.059] sc\n6.5 8.62 m\n6.513333 8.940001 6.52 9.303333 6.52 9.71 c\n6.52 10.116667 6.513333 10.473333 6.5 10.78 c\n6.5 11.139999 6.436667 11.496666 6.31 11.849999 c\n6.183333 12.203333 5.993333 12.52 5.74 12.799999 c\n5.486666 13.079999 5.17 13.299999 4.79 13.459999 c\n4.41 13.619999 3.973334 13.699999 3.48 13.699999 c\n2.46 13.699999 l\n2.46 18.919998 l\n2.46 19.106665 2.486667 19.243332 2.54 19.329998 c\n2.593333 19.416664 2.646667 19.466663 2.7 19.479998 c\n2.78 19.519997 2.866667 19.519997 2.96 19.479998 c\n2.96 19.999998 l\n0.54 19.999998 l\n0.54 19.479998 l\n0.646667 19.519997 0.726667 19.519997 0.78 19.479998 c\n0.846667 19.466663 0.913333 19.416664 0.98 19.329998 c\n1.046667 19.243332 1.08 19.106665 1.08 18.919998 c\n1.08 6.779998 l\n1.08 6.579998 1.046667 6.436665 0.98 6.349998 c\n0.913333 6.263331 0.846667 6.206665 0.78 6.179998 c\n0.726667 6.153331 0.646667 6.153331 0.54 6.179998 c\n0.54 5.699998 l\n3.48 5.699998 l\n3.973334 5.699998 4.41 5.779998 4.79 5.939998 c\n5.17 6.099998 5.486666 6.319997 5.74 6.599998 c\n5.993333 6.879998 6.183333 7.193331 6.31 7.539998 c\n6.436667 7.886664 6.5 8.246664 6.5 8.619998 c\n6.5 8.62 l\nh\n5.08 8.18 m\n5.08 7.833334 5.023333 7.533334 4.91 7.28 c\n4.796667 7.026667 4.663333 6.826667 4.51 6.68 c\n4.356667 6.533334 4.196666 6.416667 4.03 6.33 c\n3.863333 6.243334 3.72 6.2 3.6 6.2 c\n2.46 6.2 l\n2.46 13.16 l\n3.599999 13.16 l\n3.72 13.16 3.863333 13.126666 4.029999 13.06 c\n4.196666 12.993333 4.356666 12.876666 4.509999 12.709999 c\n4.663333 12.543332 4.796666 12.339999 4.909999 12.099999 c\n5.023333 11.86 5.079999 11.56 5.079999 11.2 c\n5.079999 8.18 l\n5.08 8.18 l\nh\n14.58 19.139999 m\n14.58 19.246666 14.553333 19.356667 14.5 19.469999 c\n14.446667 19.583332 14.37 19.689999 14.270001 19.789999 c\n14.170001 19.889999 14.043334 19.98 13.89 20.059999 c\n13.736667 20.139999 13.56 20.18 13.360001 20.18 c\n13.040001 20.18 12.753334 20.106667 12.500001 19.960001 c\n12.246668 19.813335 12.073335 19.620001 11.980001 19.380001 c\n11.900002 19.246668 11.840001 19.093334 11.800001 18.920002 c\n11.626668 19.280003 11.363335 19.580002 11.010001 19.820002 c\n10.656668 20.060001 10.266668 20.18 9.840001 20.180002 c\n9.306667 20.180002 8.840001 19.98667 8.440002 19.600002 c\n8.213335 19.400003 8.026669 19.140003 7.880002 18.820002 c\n7.733335 18.5 7.646668 18.133333 7.620002 17.720001 c\n7.606669 17.680002 7.600002 17.600002 7.600002 17.480001 c\n7.600002 17.460001 l\n7.613335 17.233334 7.653335 16.996668 7.720002 16.750002 c\n7.786668 16.503336 7.890002 16.25667 8.030002 16.010002 c\n8.170002 15.763335 8.336668 15.530002 8.530002 15.310002 c\n8.723335 15.090003 8.933335 14.900003 9.160002 14.740003 c\n9.213335 14.713336 9.256668 14.683336 9.290002 14.650003 c\n9.323336 14.616669 9.373335 14.580003 9.440002 14.540003 c\n9.500002 14.510003 l\n9.560002 14.480003 l\n9.800002 14.333337 10.010002 14.200004 10.190002 14.080004 c\n10.370003 13.960004 10.533336 13.846671 10.680002 13.740004 c\n10.760002 13.68667 10.840002 13.62667 10.920002 13.560003 c\n11.000002 13.493337 11.086669 13.42667 11.180002 13.360004 c\n11.300002 13.280004 11.413336 13.18667 11.520002 13.080004 c\n11.626669 12.973337 11.706669 12.84667 11.760002 12.700004 c\n11.840002 12.56667 11.880002 12.406671 11.880002 12.220003 c\n11.880002 12.033336 11.860002 11.86667 11.820002 11.720003 c\n11.766668 11.42667 11.630002 11.173337 11.410002 10.960003 c\n11.190002 10.746669 10.946669 10.606669 10.680002 10.540003 c\n10.560002 10.500003 10.446669 10.480002 10.340002 10.480002 c\n9.966668 10.480002 9.646668 10.546669 9.380002 10.680002 c\n9.206669 10.760002 9.080002 10.850002 9.000002 10.950003 c\n8.920002 11.050003 8.876669 11.143336 8.870002 11.230002 c\n8.863335 11.316669 8.880002 11.386668 8.920002 11.440002 c\n8.960002 11.493337 9.013335 11.533337 9.080002 11.560002 c\n9.106669 11.573336 9.123335 11.580003 9.130002 11.580003 c\n9.136669 11.580003 9.153336 11.58667 9.180002 11.600003 c\n9.353335 11.66667 9.496669 11.783337 9.610003 11.950004 c\n9.723336 12.116671 9.780003 12.300004 9.780003 12.500004 c\n9.780003 12.753337 9.690002 12.970004 9.510002 13.150003 c\n9.330002 13.330003 9.113336 13.420003 8.860003 13.420004 c\n8.593336 13.420004 8.36667 13.330004 8.180002 13.150003 c\n7.993335 12.970003 7.900002 12.753337 7.900002 12.500004 c\n7.900002 12.273337 7.930002 12.036671 7.990002 11.790004 c\n8.050002 11.543337 8.140002 11.320004 8.260002 11.120004 c\n8.513335 10.74667 8.816669 10.47667 9.170002 10.310003 c\n9.523336 10.143336 9.913335 10.060003 10.340002 10.060003 c\n10.660002 10.060003 10.976668 10.120004 11.290002 10.240004 c\n11.603335 10.360004 11.883335 10.530004 12.130002 10.750004 c\n12.376669 10.970004 12.583335 11.233337 12.750002 11.540004 c\n12.916669 11.84667 13.000002 12.200004 13.000002 12.600004 c\n13.000002 18.480003 l\n13.000002 18.720003 13.003335 18.876671 13.010002 18.950003 c\n13.016669 19.023335 13.020002 19.073336 13.020002 19.100002 c\n13.020002 19.273336 13.073336 19.413336 13.180002 19.520002 c\n13.286669 19.626669 13.413336 19.680002 13.560002 19.680002 c\n13.733335 19.680002 13.873336 19.630003 13.980002 19.530003 c\n14.086669 19.430002 14.146669 19.300003 14.160003 19.140003 c\n14.580003 19.140003 l\n14.58 19.139999 l\nh\n11.44 18.639999 m\n11.546666 18.453333 11.61 18.253332 11.629999 18.039999 c\n11.649999 17.826666 11.659999 17.626665 11.659999 17.439999 c\n11.659999 13.739999 l\n11.606666 13.793332 11.549999 13.843332 11.489999 13.889998 c\n11.429998 13.936665 11.366666 13.993332 11.299999 14.059999 c\n10.913333 14.339998 10.583333 14.596665 10.31 14.829998 c\n10.036666 15.063331 9.806666 15.303331 9.619999 15.549998 c\n9.433332 15.796665 9.286665 16.06 9.179999 16.339998 c\n9.073334 16.619999 9.006667 16.939999 8.98 17.299999 c\n8.98 17.599998 l\n8.993333 18.106665 9.13 18.503332 9.389999 18.789999 c\n9.649999 19.076666 10.019999 19.219999 10.499999 19.219999 c\n10.713332 19.219999 10.906666 19.166666 11.079999 19.059999 c\n11.253332 18.939999 11.373332 18.799999 11.439999 18.639999 c\n11.44 18.639999 l\nh\n18.32 10.08 m\n19.08 10.093333 19.686666 10.323334 20.139999 10.770001 c\n20.593332 11.216667 20.82 11.926667 20.82 12.900001 c\n20.82 17.380001 l\n20.82 18.353334 20.593332 19.059999 20.139999 19.5 c\n19.686666 19.940001 19.08 20.173334 18.32 20.200001 c\n18.26 20.200001 l\n18.033333 20.200001 17.826666 20.173334 17.639999 20.120001 c\n17.619999 20.120001 l\n17.606665 20.120001 17.599998 20.113335 17.599998 20.1 c\n17.293333 19.993334 17.026667 19.846666 16.799999 19.66 c\n16.609999 19.469999 l\n16.609999 19.469999 16.56 19.4 16.459999 19.26 c\n16.459999 22.58 l\n16.459999 22.766666 16.486666 22.903334 16.539999 22.99 c\n16.593332 23.076666 16.646666 23.133333 16.699999 23.16 c\n16.779999 23.199999 16.866667 23.199999 16.959999 23.16 c\n16.959999 23.66 l\n14.539999 23.66 l\n14.539999 23.16 l\n14.646666 23.199999 14.726666 23.199999 14.779999 23.16 c\n14.846665 23.133333 14.909999 23.076666 14.969998 22.99 c\n15.029998 22.903334 15.059998 22.766666 15.059999 22.58 c\n15.059999 11.3 l\n15.059999 11.113334 15.029999 10.976667 14.969998 10.89 c\n14.909998 10.803333 14.846665 10.746667 14.779999 10.72 c\n14.726666 10.693334 14.646666 10.693334 14.539999 10.72 c\n14.539999 10.24 l\n16.459999 10.24 l\n16.459999 11.02 l\n16.553331 10.873333 16.666666 10.74 16.799999 10.62 c\n17.026667 10.42 17.293333 10.273334 17.599998 10.18 c\n17.599998 10.166667 17.606665 10.16 17.619999 10.16 c\n17.639999 10.16 l\n17.853333 10.106667 18.059999 10.08 18.26 10.08 c\n18.32 10.08 l\nh\n19.32 12.46 m\n19.32 12.44 l\n19.306665 11.76 19.223333 11.28 19.07 11 c\n18.916666 10.72 18.666666 10.566667 18.32 10.54 c\n18.08 10.526667 17.853333 10.556666 17.639999 10.63 c\n17.426666 10.703334 17.24 10.826667 17.08 11 c\n16.92 11.173333 16.786667 11.406666 16.68 11.7 c\n16.573334 11.993334 16.5 12.34 16.460001 12.74 c\n16.460001 17.540001 l\n16.5 17.953335 16.573334 18.303335 16.68 18.59 c\n16.786667 18.876665 16.92 19.103333 17.08 19.27 c\n17.24 19.436668 17.426666 19.560001 17.639999 19.640001 c\n17.853333 19.720001 18.08 19.753334 18.32 19.740002 c\n18.666666 19.713335 18.916666 19.560001 19.07 19.280003 c\n19.223333 19.000004 19.306665 18.520004 19.32 17.840002 c\n19.32 17.820002 l\n19.32 12.460001 l\n19.32 12.46 l\nh\n24.379999 10.08 m\n24.686665 10.08 24.999998 10.133333 25.32 10.24 c\n25.640001 10.346666 25.926668 10.513333 26.18 10.74 c\n26.433332 10.966666 26.636667 11.253333 26.790001 11.599999 c\n26.943335 11.946666 27.020002 12.359999 27.02 12.839999 c\n27.02 14.859999 l\n27.02 14.919999 l\n27.02 15.379999 l\n23.040001 15.379999 l\n23.040001 17.439999 l\n23.040001 18.266665 23.183334 18.856665 23.470001 19.209999 c\n23.756668 19.563334 24.113335 19.733334 24.540001 19.719999 c\n24.793333 19.706665 25.043333 19.663332 25.290001 19.59 c\n25.536669 19.516668 25.750002 19.393333 25.93 19.219999 c\n26.109999 19.046665 26.26 18.799997 26.380001 18.48 c\n26.500002 18.160002 26.560003 17.740002 26.560001 17.219999 c\n27.02 17.219999 l\n27.02 17.5 l\n27.02 17.860001 26.98 18.203335 26.9 18.530001 c\n26.82 18.856667 26.679998 19.140001 26.48 19.380001 c\n26.280001 19.620001 26.023333 19.810001 25.709999 19.950001 c\n25.396666 20.09 25.013332 20.166666 24.559999 20.18 c\n24.24 20.18 23.913334 20.120001 23.58 20 c\n23.246666 19.879999 22.946667 19.699999 22.68 19.459999 c\n22.413334 19.219999 22.193335 18.936665 22.02 18.609999 c\n21.846666 18.283333 21.76 17.913332 21.76 17.499998 c\n21.76 17.029999 l\n21.76 17.029999 21.756666 16.773333 21.75 16.259998 c\n21.743334 15.746665 21.74 15.429998 21.74 15.309999 c\n21.74 15.189999 21.736666 14.859999 21.73 14.319999 c\n21.723333 13.779999 21.719999 13.489999 21.719999 13.449999 c\n21.719999 12.859999 l\n21.719999 12.379998 21.803333 11.963332 21.969999 11.609999 c\n22.136665 11.256665 22.343332 10.969999 22.59 10.749999 c\n22.836668 10.529999 23.116667 10.363333 23.43 10.249999 c\n23.743334 10.136665 24.059999 10.079999 24.380001 10.079999 c\n24.379999 10.08 l\nh\n25.68 14.86 m\n25.68 13.28 l\n25.68 12.773333 25.646667 12.349999 25.58 12.01 c\n25.513332 11.670001 25.423332 11.396668 25.309999 11.190001 c\n25.196667 10.983334 25.059999 10.84 24.9 10.76 c\n24.74 10.68 24.559999 10.64 24.359999 10.64 c\n23.933332 10.64 23.609999 10.826667 23.389999 11.200001 c\n23.17 11.573335 23.059999 12.266667 23.059999 13.280001 c\n23.059999 14.860001 l\n25.68 14.860001 l\n25.68 14.86 l\nh\n33.540001 11.66 m\n33.540001 11.686667 33.546669 11.74 33.560001 11.82 c\n33.573334 11.9 33.573334 11.966666 33.560001 12.02 c\n33.546669 12.299999 33.450001 12.53 33.27 12.709999 c\n33.09 12.889998 32.873333 12.979999 32.619999 12.98 c\n32.353333 12.98 32.129997 12.886666 31.949999 12.7 c\n31.77 12.513333 31.68 12.286667 31.679998 12.02 c\n31.679998 11.686667 31.806665 11.433332 32.059998 11.259999 c\n32.086666 11.246666 32.103333 11.236666 32.109997 11.23 c\n32.139996 11.2 l\n32.23333 11.133333 32.293327 11.036666 32.319996 10.91 c\n32.346664 10.783334 32.266663 10.673333 32.079994 10.58 c\n31.959993 10.513333 31.839994 10.48 31.719994 10.48 c\n31.319994 10.453333 30.96666 10.573333 30.659994 10.839999 c\n30.353329 11.106666 30.146662 11.573332 30.039993 12.239999 c\n30.039993 18.919998 l\n30.039993 19.106665 30.06666 19.243332 30.119993 19.329998 c\n30.173326 19.416664 30.22666 19.466663 30.279993 19.479998 c\n30.359993 19.519997 30.446661 19.519997 30.539993 19.479998 c\n30.539993 19.999998 l\n28.119993 19.999998 l\n28.119993 19.479998 l\n28.22666 19.519997 28.30666 19.519997 28.359993 19.479998 c\n28.426661 19.466663 28.493326 19.416664 28.559994 19.329998 c\n28.626661 19.243332 28.659994 19.106665 28.659994 18.919998 c\n28.659994 11.299998 l\n28.659994 11.113332 28.626661 10.976666 28.559994 10.889998 c\n28.493326 10.803331 28.426661 10.746665 28.359993 10.719998 c\n28.30666 10.693332 28.22666 10.693332 28.119993 10.719998 c\n28.119993 10.219998 l\n30.039993 10.219998 l\n30.039993 11.039998 l\n30.133326 10.893332 30.22666 10.756664 30.319994 10.629998 c\n30.413328 10.503332 30.523329 10.396666 30.649994 10.309999 c\n30.776659 10.223331 30.923326 10.153332 31.089994 10.099999 c\n31.256662 10.046665 31.466661 10.019999 31.719994 10.019999 c\n32.106663 10.019999 32.466663 10.159999 32.799995 10.439999 c\n33.133327 10.719998 33.379997 11.126665 33.539997 11.659999 c\n33.540001 11.66 l\nh\n36.240002 18.92 m\n36.240002 19.106667 36.27 19.243334 36.330002 19.33 c\n36.390003 19.416666 36.446667 19.466665 36.5 19.48 c\n36.566666 19.519999 36.653332 19.519999 36.759998 19.48 c\n36.759998 20 l\n34.339996 20 l\n34.339996 19.48 l\n34.446663 19.519999 34.539997 19.519999 34.619995 19.48 c\n34.659996 19.466665 34.713329 19.416666 34.779995 19.33 c\n34.846661 19.243334 34.879993 19.106667 34.879993 18.92 c\n34.879993 6.8 l\n34.879993 6.6 34.846661 6.456667 34.779995 6.37 c\n34.713329 6.283334 34.659996 6.226667 34.619995 6.2 c\n34.539997 6.16 34.446663 6.16 34.339996 6.2 c\n34.339996 5.72 l\n36.239998 5.72 l\n36.239998 6.8 l\n36.239998 18.92 l\n36.240002 18.92 l\nh\n40.580002 10.08 m\n40.886669 10.08 41.200001 10.133333 41.52 10.24 c\n41.84 10.346666 42.126667 10.513333 42.380001 10.74 c\n42.633335 10.966666 42.83667 11.253333 42.990002 11.599999 c\n43.143333 11.946666 43.220001 12.359999 43.220001 12.839999 c\n43.220001 14.859999 l\n43.220001 14.919999 l\n43.220001 15.379999 l\n39.240002 15.379999 l\n39.240002 17.439999 l\n39.240002 18.266665 39.383335 18.856665 39.670002 19.209999 c\n39.956669 19.563334 40.313335 19.733334 40.740002 19.719999 c\n40.993336 19.706665 41.243336 19.663332 41.490002 19.59 c\n41.736668 19.516668 41.950001 19.393333 42.130001 19.219999 c\n42.310001 19.046665 42.460003 18.799997 42.580002 18.48 c\n42.700001 18.160002 42.760002 17.740002 42.760002 17.219999 c\n43.220001 17.219999 l\n43.220001 17.5 l\n43.220001 17.860001 43.18 18.203335 43.100002 18.530001 c\n43.020004 18.856667 42.880005 19.140001 42.680004 19.380001 c\n42.480003 19.620001 42.223339 19.810001 41.910004 19.950001 c\n41.596668 20.09 41.213337 20.166666 40.760002 20.18 c\n40.440002 20.18 40.113335 20.120001 39.780003 20 c\n39.446671 19.879999 39.146667 19.699999 38.880001 19.459999 c\n38.613335 19.219999 38.393333 18.936665 38.220001 18.609999 c\n38.046669 18.283333 37.960003 17.913332 37.960003 17.499998 c\n37.960003 17.029999 l\n37.960003 17.029999 37.956669 16.773333 37.950005 16.259998 c\n37.94334 15.746665 37.940006 15.429998 37.940006 15.309999 c\n37.940006 15.189999 37.936672 14.859999 37.930008 14.319999 c\n37.923344 13.779999 37.92001 13.489999 37.92001 13.449999 c\n37.92001 12.859999 l\n37.92001 12.379998 38.003342 11.963332 38.17001 11.609999 c\n38.336678 11.256665 38.543343 10.969999 38.790009 10.749999 c\n39.036674 10.529999 39.316673 10.363333 39.630009 10.249999 c\n39.943344 10.136665 40.26001 10.079999 40.580009 10.079999 c\n40.580002 10.08 l\nh\n41.880001 14.86 m\n41.880001 13.28 l\n41.880001 12.773333 41.846668 12.349999 41.780003 12.01 c\n41.713337 11.670001 41.623337 11.396668 41.510002 11.190001 c\n41.396667 10.983334 41.260002 10.84 41.100002 10.76 c\n40.940002 10.68 40.760002 10.64 40.560001 10.64 c\n40.133335 10.64 39.810001 10.826667 39.59 11.200001 c\n39.369999 11.573335 39.259998 12.266667 39.259998 13.280001 c\n39.259998 14.860001 l\n41.879997 14.860001 l\n41.880001 14.86 l\nh\n47.880001 19.879999 m\n47.866669 19.893333 47.856667 19.9 47.850002 19.9 c\n47.843338 19.9 47.833336 19.906666 47.820004 19.92 c\n47.800003 19.940001 l\n47.773335 19.953335 47.743336 19.966667 47.710003 19.980001 c\n47.67667 19.993336 47.646671 20.006668 47.620003 20.020002 c\n47.340004 20.140003 47.013336 20.200003 46.640003 20.200003 c\n46.42667 20.200003 46.220005 20.150003 46.020004 20.050003 c\n45.820004 19.950003 45.646671 19.866671 45.500004 19.800003 c\n45.353336 19.733335 45.230003 19.703337 45.130005 19.710003 c\n45.030006 19.716669 44.980007 19.813337 44.980003 20.000004 c\n44.600002 20.000004 l\n44.600002 17.600004 l\n45.080002 17.600004 l\n45.053333 18.02667 45.100002 18.393337 45.220001 18.700005 c\n45.299999 18.966671 45.456669 19.216671 45.690002 19.450005 c\n45.923336 19.683338 46.273338 19.800005 46.740002 19.800005 c\n47.046669 19.800005 47.299999 19.746672 47.5 19.640005 c\n47.846668 19.466671 48.083332 19.260004 48.209999 19.020004 c\n48.336666 18.780005 48.386665 18.530005 48.360001 18.270004 c\n48.333336 18.010004 48.236668 17.753338 48.07 17.500004 c\n47.903332 17.24667 47.699997 17.013336 47.459999 16.800003 c\n47.299999 16.680002 47.133331 16.553337 46.959999 16.420004 c\n46.786667 16.286671 46.613335 16.146671 46.439999 16.000004 c\n45.973331 15.62667 45.603333 15.290004 45.329998 14.990004 c\n45.056664 14.690003 44.846664 14.410004 44.699997 14.150003 c\n44.553329 13.890003 44.453331 13.643336 44.399998 13.410004 c\n44.346664 13.176671 44.32 12.926671 44.319996 12.660004 c\n44.319996 12.500004 44.329994 12.353337 44.349995 12.220004 c\n44.369995 12.086671 44.393326 11.966671 44.419994 11.860004 c\n44.459995 11.633338 44.526661 11.413338 44.619995 11.200005 c\n44.713329 10.986671 44.846661 10.796672 45.019997 10.630005 c\n45.193333 10.463338 45.406666 10.326672 45.659996 10.220005 c\n45.913326 10.113339 46.219994 10.060005 46.579994 10.060005 c\n46.779995 10.060005 46.979992 10.103338 47.179993 10.190005 c\n47.379993 10.276672 47.559994 10.356672 47.719994 10.430005 c\n47.879993 10.503338 48.00666 10.536672 48.099995 10.530006 c\n48.193329 10.523339 48.239994 10.420006 48.239994 10.220005 c\n48.619995 10.220005 l\n48.619995 12.700005 l\n48.099995 12.700005 l\n48.113327 12.300004 48.066662 11.940004 47.959995 11.620005 c\n47.866661 11.340005 47.703327 11.086671 47.469994 10.860004 c\n47.23666 10.633338 46.893326 10.520004 46.439995 10.520004 c\n46.079994 10.520004 45.786659 10.600004 45.559994 10.760004 c\n45.439995 10.853337 45.336658 10.990005 45.249992 11.170004 c\n45.163326 11.350003 45.113323 11.54667 45.099991 11.760004 c\n45.086658 11.973338 45.119991 12.203338 45.199989 12.450005 c\n45.279987 12.696671 45.439987 12.926671 45.679989 13.140005 c\n45.706657 13.180005 45.743324 13.220005 45.789989 13.260005 c\n45.836655 13.300005 45.886658 13.333338 45.939991 13.360005 c\n45.979992 13.386672 46.013325 13.413339 46.039989 13.440005 c\n46.119991 13.520005 l\n46.266659 13.640005 46.41666 13.760005 46.569992 13.880005 c\n46.723324 14.000005 46.879993 14.120005 47.039993 14.240005 c\n47.413326 14.560005 47.723328 14.850005 47.969994 15.110004 c\n48.21666 15.370004 48.423325 15.613338 48.589993 15.840004 c\n48.75666 16.066671 48.879993 16.280004 48.959991 16.480003 c\n49.039989 16.680002 49.086658 16.873337 49.099991 17.060003 c\n49.233326 17.673336 49.209991 18.190002 49.029991 18.610003 c\n48.849991 19.030003 48.619991 19.360003 48.339993 19.600002 c\n48.319992 19.600002 l\n48.319992 19.626669 48.30666 19.640003 48.279991 19.640003 c\n48.253323 19.66667 48.226658 19.68667 48.199989 19.700003 c\n48.07999 19.780003 l\n48.07999 19.780003 48.039989 19.800003 47.959991 19.840002 c\n47.959991 19.860003 l\n47.946659 19.860003 47.933323 19.863337 47.919991 19.870003 c\n47.906658 19.876669 47.893322 19.880003 47.87999 19.880003 c\n47.880001 19.879999 l\nh\n53.82 19.879999 m\n53.806667 19.893333 53.796665 19.9 53.790001 19.9 c\n53.783337 19.9 53.773335 19.906666 53.760002 19.92 c\n53.740002 19.940001 l\n53.713333 19.953335 53.683334 19.966667 53.650002 19.980001 c\n53.616669 19.993336 53.58667 20.006668 53.560001 20.020002 c\n53.280003 20.140003 52.953335 20.200003 52.580002 20.200003 c\n52.366669 20.200003 52.160004 20.150003 51.960003 20.050003 c\n51.760002 19.950003 51.58667 19.866671 51.440002 19.800003 c\n51.293335 19.733335 51.170002 19.703337 51.070004 19.710003 c\n50.970005 19.716669 50.920006 19.813337 50.920002 20.000004 c\n50.540001 20.000004 l\n50.540001 17.600004 l\n51.02 17.600004 l\n50.993332 18.02667 51.040001 18.393337 51.16 18.700005 c\n51.239998 18.966671 51.396667 19.216671 51.630001 19.450005 c\n51.863335 19.683338 52.213337 19.800005 52.68 19.800005 c\n52.986668 19.800005 53.239998 19.746672 53.439999 19.640005 c\n53.786667 19.466671 54.023331 19.260004 54.149998 19.020004 c\n54.276665 18.780005 54.326664 18.530005 54.299999 18.270004 c\n54.273335 18.010004 54.176666 17.753338 54.009998 17.500004 c\n53.84333 17.24667 53.639996 17.013336 53.399998 16.800003 c\n53.239998 16.680002 53.07333 16.553337 52.899998 16.420004 c\n52.726665 16.286671 52.553333 16.146671 52.379997 16.000004 c\n51.91333 15.62667 51.543331 15.290004 51.269997 14.990004 c\n50.996662 14.690003 50.786663 14.410004 50.639996 14.150003 c\n50.493328 13.890003 50.39333 13.643336 50.339996 13.410004 c\n50.286663 13.176671 50.259998 12.926671 50.259995 12.660004 c\n50.259995 12.500004 50.269993 12.353337 50.289993 12.220004 c\n50.309994 12.086671 50.333324 11.966671 50.359993 11.860004 c\n50.399994 11.633338 50.46666 11.413338 50.559994 11.200005 c\n50.653328 10.986671 50.786659 10.796672 50.959995 10.630005 c\n51.133331 10.463338 51.346664 10.326672 51.599995 10.220005 c\n51.853325 10.113339 52.159992 10.060005 52.519993 10.060005 c\n52.719994 10.060005 52.919991 10.103338 53.119991 10.190005 c\n53.319992 10.276672 53.499992 10.356672 53.659992 10.430005 c\n53.819992 10.503338 53.946659 10.536672 54.039993 10.530006 c\n54.133327 10.523339 54.179993 10.420006 54.179993 10.220005 c\n54.559994 10.220005 l\n54.559994 12.700005 l\n54.039993 12.700005 l\n54.053326 12.300004 54.00666 11.940004 53.899994 11.620005 c\n53.80666 11.340005 53.643326 11.086671 53.409992 10.860004 c\n53.176659 10.633338 52.833324 10.520004 52.379993 10.520004 c\n52.019993 10.520004 51.726658 10.600004 51.499992 10.760004 c\n51.379993 10.853337 51.276657 10.990005 51.189991 11.170004 c\n51.103325 11.350003 51.053322 11.54667 51.039989 11.760004 c\n51.026657 11.973338 51.05999 12.203338 51.139988 12.450005 c\n51.219986 12.696671 51.379986 12.926671 51.619987 13.140005 c\n51.646656 13.180005 51.683323 13.220005 51.729988 13.260005 c\n51.776653 13.300005 51.826656 13.333338 51.87999 13.360005 c\n51.919991 13.386672 51.953323 13.413339 51.979988 13.440005 c\n52.05999 13.520005 l\n52.206657 13.640005 52.356659 13.760005 52.509991 13.880005 c\n52.663322 14.000005 52.819992 14.120005 52.979992 14.240005 c\n53.353325 14.560005 53.663326 14.850005 53.909992 15.110004 c\n54.156658 15.370004 54.363323 15.613338 54.529991 15.840004 c\n54.696659 16.066671 54.819992 16.280004 54.89999 16.480003 c\n54.979988 16.680002 55.026657 16.873337 55.039989 17.060003 c\n55.173325 17.673336 55.14999 18.190002 54.96999 18.610003 c\n54.789989 19.030003 54.55999 19.360003 54.279991 19.600002 c\n54.259991 19.600002 l\n54.259991 19.626669 54.246658 19.640003 54.21999 19.640003 c\n54.193321 19.66667 54.166656 19.68667 54.139988 19.700003 c\n54.019989 19.780003 l\n54.019989 19.780003 53.979988 19.800003 53.89999 19.840002 c\n53.89999 19.860003 l\n53.886658 19.860003 53.873322 19.863337 53.859989 19.870003 c\n53.846657 19.876669 53.833321 19.880003 53.819988 19.880003 c\n53.82 19.879999 l\nh\nf\nQ\nQ\nQ\nshowpage\n%%PageTrailer\npdfEndPage\n%%Trailer\nend\n%%DocumentSuppliedResources:\n%%EOF\n"
  },
  {
    "path": "resources/logo/print/eps/White logo - no background.eps",
    "content": "%!PS-Adobe-3.0 EPSF-3.0\n%Produced by poppler pdftops version: 0.59.0 (http://poppler.freedesktop.org)\n%%Creator: Chromium\n%%LanguageLevel: 3\n%%DocumentSuppliedResources: (atend)\n%%BoundingBox: 0 0 2409 909\n%%HiResBoundingBox: 0 0 2409 909\n%%DocumentSuppliedResources: (atend)\n%%EndComments\n%%BeginProlog\n%%BeginResource: procset xpdf 3.00 0\n%%Copyright: Copyright 1996-2011 Glyph & Cog, LLC\n/xpdf 75 dict def xpdf begin\n% PDF special state\n/pdfDictSize 15 def\n/pdfSetup {\n  /setpagedevice where {\n    pop 2 dict begin\n      /Policies 1 dict dup begin /PageSize 6 def end def\n      { /Duplex true def } if\n    currentdict end setpagedevice\n  } {\n    pop\n  } ifelse\n} def\n/pdfSetupPaper {\n  % Change paper size, but only if different from previous paper size otherwise\n  % duplex fails. PLRM specifies a tolerance of 5 pts when matching paper size\n  % so we use the same when checking if the size changes.\n  /setpagedevice where {\n    pop currentpagedevice\n    /PageSize known {\n      2 copy\n      currentpagedevice /PageSize get aload pop\n      exch 4 1 roll\n      sub abs 5 gt\n      3 1 roll\n      sub abs 5 gt\n      or\n    } {\n      true\n    } ifelse\n    {\n      2 array astore\n      2 dict begin\n        /PageSize exch def\n        /ImagingBBox null def\n      currentdict end\n      setpagedevice\n    } {\n      pop pop\n    } ifelse\n  } {\n    pop\n  } ifelse\n} def\n/pdfStartPage {\n  pdfDictSize dict begin\n  /pdfFillCS [] def\n  /pdfFillXform {} def\n  /pdfStrokeCS [] def\n  /pdfStrokeXform {} def\n  /pdfFill [0] def\n  /pdfStroke [0] def\n  /pdfFillOP false def\n  /pdfStrokeOP false def\n  /pdfOPM false def\n  /pdfLastFill false def\n  /pdfLastStroke false def\n  /pdfTextMat [1 0 0 1 0 0] def\n  /pdfFontSize 0 def\n  /pdfCharSpacing 0 def\n  /pdfTextRender 0 def\n  /pdfPatternCS false def\n  /pdfTextRise 0 def\n  /pdfWordSpacing 0 def\n  /pdfHorizScaling 1 def\n  /pdfTextClipPath [] def\n} def\n/pdfEndPage { end } def\n% PDF color state\n/opm { dup /pdfOPM exch def\n      /setoverprintmode where{pop setoverprintmode}{pop}ifelse  } def\n/cs { /pdfFillXform exch def dup /pdfFillCS exch def\n      setcolorspace } def\n/CS { /pdfStrokeXform exch def dup /pdfStrokeCS exch def\n      setcolorspace } def\n/sc { pdfLastFill not { pdfFillCS setcolorspace } if\n      dup /pdfFill exch def aload pop pdfFillXform setcolor\n     /pdfLastFill true def /pdfLastStroke false def } def\n/SC { pdfLastStroke not { pdfStrokeCS setcolorspace } if\n      dup /pdfStroke exch def aload pop pdfStrokeXform setcolor\n     /pdfLastStroke true def /pdfLastFill false def } def\n/op { /pdfFillOP exch def\n      pdfLastFill { pdfFillOP setoverprint } if } def\n/OP { /pdfStrokeOP exch def\n      pdfLastStroke { pdfStrokeOP setoverprint } if } def\n/fCol {\n  pdfLastFill not {\n    pdfFillCS setcolorspace\n    pdfFill aload pop pdfFillXform setcolor\n    pdfFillOP setoverprint\n    /pdfLastFill true def /pdfLastStroke false def\n  } if\n} def\n/sCol {\n  pdfLastStroke not {\n    pdfStrokeCS setcolorspace\n    pdfStroke aload pop pdfStrokeXform setcolor\n    pdfStrokeOP setoverprint\n    /pdfLastStroke true def /pdfLastFill false def\n  } if\n} def\n% build a font\n/pdfMakeFont {\n  4 3 roll findfont\n  4 2 roll matrix scale makefont\n  dup length dict begin\n    { 1 index /FID ne { def } { pop pop } ifelse } forall\n    /Encoding exch def\n    currentdict\n  end\n  definefont pop\n} def\n/pdfMakeFont16 {\n  exch findfont\n  dup length dict begin\n    { 1 index /FID ne { def } { pop pop } ifelse } forall\n    /WMode exch def\n    currentdict\n  end\n  definefont pop\n} def\n/pdfMakeFont16L3 {\n  1 index /CIDFont resourcestatus {\n    pop pop 1 index /CIDFont findresource /CIDFontType known\n  } {\n    false\n  } ifelse\n  {\n    0 eq { /Identity-H } { /Identity-V } ifelse\n    exch 1 array astore composefont pop\n  } {\n    pdfMakeFont16\n  } ifelse\n} def\n% graphics state operators\n/q { gsave pdfDictSize dict begin } def\n/Q {\n  end grestore\n  /pdfLastFill where {\n    pop\n    pdfLastFill {\n      pdfFillOP setoverprint\n    } {\n      pdfStrokeOP setoverprint\n    } ifelse\n  } if\n  /pdfOPM where {\n    pop\n    pdfOPM /setoverprintmode where{pop setoverprintmode}{pop}ifelse \n  } if\n} def\n/cm { concat } def\n/d { setdash } def\n/i { setflat } def\n/j { setlinejoin } def\n/J { setlinecap } def\n/M { setmiterlimit } def\n/w { setlinewidth } def\n% path segment operators\n/m { moveto } def\n/l { lineto } def\n/c { curveto } def\n/re { 4 2 roll moveto 1 index 0 rlineto 0 exch rlineto\n      neg 0 rlineto closepath } def\n/h { closepath } def\n% path painting operators\n/S { sCol stroke } def\n/Sf { fCol stroke } def\n/f { fCol fill } def\n/f* { fCol eofill } def\n% clipping operators\n/W { clip newpath } def\n/W* { eoclip newpath } def\n/Ws { strokepath clip newpath } def\n% text state operators\n/Tc { /pdfCharSpacing exch def } def\n/Tf { dup /pdfFontSize exch def\n      dup pdfHorizScaling mul exch matrix scale\n      pdfTextMat matrix concatmatrix dup 4 0 put dup 5 0 put\n      exch findfont exch makefont setfont } def\n/Tr { /pdfTextRender exch def } def\n/Tp { /pdfPatternCS exch def } def\n/Ts { /pdfTextRise exch def } def\n/Tw { /pdfWordSpacing exch def } def\n/Tz { /pdfHorizScaling exch def } def\n% text positioning operators\n/Td { pdfTextMat transform moveto } def\n/Tm { /pdfTextMat exch def } def\n% text string operators\n/xyshow where {\n  pop\n  /xyshow2 {\n    dup length array\n    0 2 2 index length 1 sub {\n      2 index 1 index 2 copy get 3 1 roll 1 add get\n      pdfTextMat dtransform\n      4 2 roll 2 copy 6 5 roll put 1 add 3 1 roll dup 4 2 roll put\n    } for\n    exch pop\n    xyshow\n  } def\n}{\n  /xyshow2 {\n    currentfont /FontType get 0 eq {\n      0 2 3 index length 1 sub {\n        currentpoint 4 index 3 index 2 getinterval show moveto\n        2 copy get 2 index 3 2 roll 1 add get\n        pdfTextMat dtransform rmoveto\n      } for\n    } {\n      0 1 3 index length 1 sub {\n        currentpoint 4 index 3 index 1 getinterval show moveto\n        2 copy 2 mul get 2 index 3 2 roll 2 mul 1 add get\n        pdfTextMat dtransform rmoveto\n      } for\n    } ifelse\n    pop pop\n  } def\n} ifelse\n/cshow where {\n  pop\n  /xycp {\n    0 3 2 roll\n    {\n      pop pop currentpoint 3 2 roll\n      1 string dup 0 4 3 roll put false charpath moveto\n      2 copy get 2 index 2 index 1 add get\n      pdfTextMat dtransform rmoveto\n      2 add\n    } exch cshow\n    pop pop\n  } def\n}{\n  /xycp {\n    currentfont /FontType get 0 eq {\n      0 2 3 index length 1 sub {\n        currentpoint 4 index 3 index 2 getinterval false charpath moveto\n        2 copy get 2 index 3 2 roll 1 add get\n        pdfTextMat dtransform rmoveto\n      } for\n    } {\n      0 1 3 index length 1 sub {\n        currentpoint 4 index 3 index 1 getinterval false charpath moveto\n        2 copy 2 mul get 2 index 3 2 roll 2 mul 1 add get\n        pdfTextMat dtransform rmoveto\n      } for\n    } ifelse\n    pop pop\n  } def\n} ifelse\n/Tj {\n  fCol\n  0 pdfTextRise pdfTextMat dtransform rmoveto\n  currentpoint 4 2 roll\n  pdfTextRender 1 and 0 eq {\n    2 copy xyshow2\n  } if\n  pdfTextRender 3 and dup 1 eq exch 2 eq or {\n    3 index 3 index moveto\n    2 copy\n    currentfont /FontType get 3 eq { fCol } { sCol } ifelse\n    xycp currentpoint stroke moveto\n  } if\n  pdfTextRender 4 and 0 ne {\n    4 2 roll moveto xycp\n    /pdfTextClipPath [ pdfTextClipPath aload pop\n      {/moveto cvx}\n      {/lineto cvx}\n      {/curveto cvx}\n      {/closepath cvx}\n    pathforall ] def\n    currentpoint newpath moveto\n  } {\n    pop pop pop pop\n  } ifelse\n  0 pdfTextRise neg pdfTextMat dtransform rmoveto\n} def\n/TJm { 0.001 mul pdfFontSize mul pdfHorizScaling mul neg 0\n       pdfTextMat dtransform rmoveto } def\n/TJmV { 0.001 mul pdfFontSize mul neg 0 exch\n        pdfTextMat dtransform rmoveto } def\n/Tclip { pdfTextClipPath cvx exec clip newpath\n         /pdfTextClipPath [] def } def\n/Tclip* { pdfTextClipPath cvx exec eoclip newpath\n         /pdfTextClipPath [] def } def\n% Level 2/3 image operators\n/pdfImBuf 100 string def\n/pdfImStr {\n  2 copy exch length lt {\n    2 copy get exch 1 add exch\n  } {\n    ()\n  } ifelse\n} def\n/skipEOD {\n  { currentfile pdfImBuf readline\n    not { pop exit } if\n    (%-EOD-) eq { exit } if } loop\n} def\n/pdfIm { image skipEOD } def\n/pdfMask {\n  /ReusableStreamDecode filter\n  skipEOD\n  /maskStream exch def\n} def\n/pdfMaskEnd { maskStream closefile } def\n/pdfMaskInit {\n  /maskArray exch def\n  /maskIdx 0 def\n} def\n/pdfMaskSrc {\n  maskIdx maskArray length lt {\n    maskArray maskIdx get\n    /maskIdx maskIdx 1 add def\n  } {\n    ()\n  } ifelse\n} def\n/pdfImM { fCol imagemask skipEOD } def\n/pr { 2 index 2 index 3 2 roll putinterval 4 add } def\n/pdfImClip {\n  gsave\n  0 2 4 index length 1 sub {\n    dup 4 index exch 2 copy\n    get 5 index div put\n    1 add 3 index exch 2 copy\n    get 3 index div put\n  } for\n  pop pop rectclip\n} def\n/pdfImClipEnd { grestore } def\n% shading operators\n/colordelta {\n  false 0 1 3 index length 1 sub {\n    dup 4 index exch get 3 index 3 2 roll get sub abs 0.004 gt {\n      pop true\n    } if\n  } for\n  exch pop exch pop\n} def\n/funcCol { func n array astore } def\n/funcSH {\n  dup 0 eq {\n    true\n  } {\n    dup 6 eq {\n      false\n    } {\n      4 index 4 index funcCol dup\n      6 index 4 index funcCol dup\n      3 1 roll colordelta 3 1 roll\n      5 index 5 index funcCol dup\n      3 1 roll colordelta 3 1 roll\n      6 index 8 index funcCol dup\n      3 1 roll colordelta 3 1 roll\n      colordelta or or or\n    } ifelse\n  } ifelse\n  {\n    1 add\n    4 index 3 index add 0.5 mul exch 4 index 3 index add 0.5 mul exch\n    6 index 6 index 4 index 4 index 4 index funcSH\n    2 index 6 index 6 index 4 index 4 index funcSH\n    6 index 2 index 4 index 6 index 4 index funcSH\n    5 3 roll 3 2 roll funcSH pop pop\n  } {\n    pop 3 index 2 index add 0.5 mul 3 index  2 index add 0.5 mul\n    funcCol sc\n    dup 4 index exch mat transform m\n    3 index 3 index mat transform l\n    1 index 3 index mat transform l\n    mat transform l pop pop h f*\n  } ifelse\n} def\n/axialCol {\n  dup 0 lt {\n    pop t0\n  } {\n    dup 1 gt {\n      pop t1\n    } {\n      dt mul t0 add\n    } ifelse\n  } ifelse\n  func n array astore\n} def\n/axialSH {\n  dup 0 eq {\n    true\n  } {\n    dup 8 eq {\n      false\n    } {\n      2 index axialCol 2 index axialCol colordelta\n    } ifelse\n  } ifelse\n  {\n    1 add 3 1 roll 2 copy add 0.5 mul\n    dup 4 3 roll exch 4 index axialSH\n    exch 3 2 roll axialSH\n  } {\n    pop 2 copy add 0.5 mul\n    axialCol sc\n    exch dup dx mul x0 add exch dy mul y0 add\n    3 2 roll dup dx mul x0 add exch dy mul y0 add\n    dx abs dy abs ge {\n      2 copy yMin sub dy mul dx div add yMin m\n      yMax sub dy mul dx div add yMax l\n      2 copy yMax sub dy mul dx div add yMax l\n      yMin sub dy mul dx div add yMin l\n      h f*\n    } {\n      exch 2 copy xMin sub dx mul dy div add xMin exch m\n      xMax sub dx mul dy div add xMax exch l\n      exch 2 copy xMax sub dx mul dy div add xMax exch l\n      xMin sub dx mul dy div add xMin exch l\n      h f*\n    } ifelse\n  } ifelse\n} def\n/radialCol {\n  dup t0 lt {\n    pop t0\n  } {\n    dup t1 gt {\n      pop t1\n    } if\n  } ifelse\n  func n array astore\n} def\n/radialSH {\n  dup 0 eq {\n    true\n  } {\n    dup 8 eq {\n      false\n    } {\n      2 index dt mul t0 add radialCol\n      2 index dt mul t0 add radialCol colordelta\n    } ifelse\n  } ifelse\n  {\n    1 add 3 1 roll 2 copy add 0.5 mul\n    dup 4 3 roll exch 4 index radialSH\n    exch 3 2 roll radialSH\n  } {\n    pop 2 copy add 0.5 mul dt mul t0 add\n    radialCol sc\n    encl {\n      exch dup dx mul x0 add exch dup dy mul y0 add exch dr mul r0 add\n      0 360 arc h\n      dup dx mul x0 add exch dup dy mul y0 add exch dr mul r0 add\n      360 0 arcn h f\n    } {\n      2 copy\n      dup dx mul x0 add exch dup dy mul y0 add exch dr mul r0 add\n      a1 a2 arcn\n      dup dx mul x0 add exch dup dy mul y0 add exch dr mul r0 add\n      a2 a1 arcn h\n      dup dx mul x0 add exch dup dy mul y0 add exch dr mul r0 add\n      a1 a2 arc\n      dup dx mul x0 add exch dup dy mul y0 add exch dr mul r0 add\n      a2 a1 arc h f\n    } ifelse\n  } ifelse\n} def\nend\n%%EndResource\n/CIDInit /ProcSet findresource begin\n10 dict begin\n  begincmap\n  /CMapType 1 def\n  /CMapName /Identity-H def\n  /CIDSystemInfo 3 dict dup begin\n    /Registry (Adobe) def\n    /Ordering (Identity) def\n    /Supplement 0 def\n  end def\n  1 begincodespacerange\n    <0000> <ffff>\n  endcodespacerange\n  0 usefont\n  1 begincidrange\n    <0000> <ffff> 0\n  endcidrange\n  endcmap\n  currentdict CMapName exch /CMap defineresource pop\nend\n10 dict begin\n  begincmap\n  /CMapType 1 def\n  /CMapName /Identity-V def\n  /CIDSystemInfo 3 dict dup begin\n    /Registry (Adobe) def\n    /Ordering (Identity) def\n    /Supplement 0 def\n  end def\n  /WMode 1 def\n  1 begincodespacerange\n    <0000> <ffff>\n  endcodespacerange\n  0 usefont\n  1 begincidrange\n    <0000> <ffff> 0\n  endcidrange\n  endcmap\n  currentdict CMapName exch /CMap defineresource pop\nend\nend\n%%EndProlog\n%%BeginSetup\nxpdf begin\n%%EndSetup\npdfStartPage\n%%EndPageSetup\n[] 0 d\n1 i\n0 j\n0 J\n10 M\n1 w\n/DeviceGray {} cs\n[0] sc\n/DeviceGray {} CS\n[0] SC\nfalse op\nfalse OP\n{} settransfer\n0 0 2409 909 re\nW\nq\n[1 0 0 -1 0 909] cm\nq\n0 0 2409 908.7038 re\nW*\nq\n[0.747904 0 0 0.747904 0 -908.7038] cm\n/DeviceRGB {} CS\n[1 1 1] SC\n/DeviceRGB {} cs\n[1 1 1] sc\n0 0 3221 2436 re\nf\nQ\nQ\nq\n5.983235 0 2403.0168 907.20795 re\nW*\nq\n[0.822879 0 0 0.822978 95.330643 145.991699] cm\n/DeviceRGB {} CS\n[0.09 0.329 0.122] SC\n/DeviceRGB {} cs\n[0.09 0.329 0.122] sc\n231 798 m\n227 779 219 741 218 741 c\n49 640 69 465 125 365 c\n137 491 360 578 230 732 c\n229 734 236 758 242 780 c\n268 736 307 683 305 678 c\n145 288 645 258 749 16 c\n796 250 725 612 323 704 c\n321 705 250 830 247 831 c\n247 829 217 830 221 820 c\n223 814 227 806 231 798 c\nh\n330 625 m\n267 476 452 312 544 271 c\n356 439 324 564 330 625 c\nh\n226 704 m\n277 645 217 544 181 511 c\n242 616 238 677 226 704 c\nh\nf\nQ\nq\n[26.582434 0 0 26.585632 866.89978 103.116905] cm\n/DeviceRGB {} CS\n[1 1 1] SC\n/DeviceRGB {} cs\n[1 1 1] sc\n6.5 8.62 m\n6.513333 8.940001 6.52 9.303333 6.52 9.71 c\n6.52 10.116667 6.513333 10.473333 6.5 10.78 c\n6.5 11.139999 6.436667 11.496666 6.31 11.849999 c\n6.183333 12.203333 5.993333 12.52 5.74 12.799999 c\n5.486666 13.079999 5.17 13.299999 4.79 13.459999 c\n4.41 13.619999 3.973334 13.699999 3.48 13.699999 c\n2.46 13.699999 l\n2.46 18.919998 l\n2.46 19.106665 2.486667 19.243332 2.54 19.329998 c\n2.593333 19.416664 2.646667 19.466663 2.7 19.479998 c\n2.78 19.519997 2.866667 19.519997 2.96 19.479998 c\n2.96 19.999998 l\n0.54 19.999998 l\n0.54 19.479998 l\n0.646667 19.519997 0.726667 19.519997 0.78 19.479998 c\n0.846667 19.466663 0.913333 19.416664 0.98 19.329998 c\n1.046667 19.243332 1.08 19.106665 1.08 18.919998 c\n1.08 6.779998 l\n1.08 6.579998 1.046667 6.436665 0.98 6.349998 c\n0.913333 6.263331 0.846667 6.206665 0.78 6.179998 c\n0.726667 6.153331 0.646667 6.153331 0.54 6.179998 c\n0.54 5.699998 l\n3.48 5.699998 l\n3.973334 5.699998 4.41 5.779998 4.79 5.939998 c\n5.17 6.099998 5.486666 6.319997 5.74 6.599998 c\n5.993333 6.879998 6.183333 7.193331 6.31 7.539998 c\n6.436667 7.886664 6.5 8.246664 6.5 8.619998 c\n6.5 8.62 l\nh\n5.08 8.18 m\n5.08 7.833334 5.023333 7.533334 4.91 7.28 c\n4.796667 7.026667 4.663333 6.826667 4.51 6.68 c\n4.356667 6.533334 4.196666 6.416667 4.03 6.33 c\n3.863333 6.243334 3.72 6.2 3.6 6.2 c\n2.46 6.2 l\n2.46 13.16 l\n3.599999 13.16 l\n3.72 13.16 3.863333 13.126666 4.029999 13.06 c\n4.196666 12.993333 4.356666 12.876666 4.509999 12.709999 c\n4.663333 12.543332 4.796666 12.339999 4.909999 12.099999 c\n5.023333 11.86 5.079999 11.56 5.079999 11.2 c\n5.079999 8.18 l\n5.08 8.18 l\nh\n14.58 19.139999 m\n14.58 19.246666 14.553333 19.356667 14.5 19.469999 c\n14.446667 19.583332 14.37 19.689999 14.270001 19.789999 c\n14.170001 19.889999 14.043334 19.98 13.89 20.059999 c\n13.736667 20.139999 13.56 20.18 13.360001 20.18 c\n13.040001 20.18 12.753334 20.106667 12.500001 19.960001 c\n12.246668 19.813335 12.073335 19.620001 11.980001 19.380001 c\n11.900002 19.246668 11.840001 19.093334 11.800001 18.920002 c\n11.626668 19.280003 11.363335 19.580002 11.010001 19.820002 c\n10.656668 20.060001 10.266668 20.18 9.840001 20.180002 c\n9.306667 20.180002 8.840001 19.98667 8.440002 19.600002 c\n8.213335 19.400003 8.026669 19.140003 7.880002 18.820002 c\n7.733335 18.5 7.646668 18.133333 7.620002 17.720001 c\n7.606669 17.680002 7.600002 17.600002 7.600002 17.480001 c\n7.600002 17.460001 l\n7.613335 17.233334 7.653335 16.996668 7.720002 16.750002 c\n7.786668 16.503336 7.890002 16.25667 8.030002 16.010002 c\n8.170002 15.763335 8.336668 15.530002 8.530002 15.310002 c\n8.723335 15.090003 8.933335 14.900003 9.160002 14.740003 c\n9.213335 14.713336 9.256668 14.683336 9.290002 14.650003 c\n9.323336 14.616669 9.373335 14.580003 9.440002 14.540003 c\n9.500002 14.510003 l\n9.560002 14.480003 l\n9.800002 14.333337 10.010002 14.200004 10.190002 14.080004 c\n10.370003 13.960004 10.533336 13.846671 10.680002 13.740004 c\n10.760002 13.68667 10.840002 13.62667 10.920002 13.560003 c\n11.000002 13.493337 11.086669 13.42667 11.180002 13.360004 c\n11.300002 13.280004 11.413336 13.18667 11.520002 13.080004 c\n11.626669 12.973337 11.706669 12.84667 11.760002 12.700004 c\n11.840002 12.56667 11.880002 12.406671 11.880002 12.220003 c\n11.880002 12.033336 11.860002 11.86667 11.820002 11.720003 c\n11.766668 11.42667 11.630002 11.173337 11.410002 10.960003 c\n11.190002 10.746669 10.946669 10.606669 10.680002 10.540003 c\n10.560002 10.500003 10.446669 10.480002 10.340002 10.480002 c\n9.966668 10.480002 9.646668 10.546669 9.380002 10.680002 c\n9.206669 10.760002 9.080002 10.850002 9.000002 10.950003 c\n8.920002 11.050003 8.876669 11.143336 8.870002 11.230002 c\n8.863335 11.316669 8.880002 11.386668 8.920002 11.440002 c\n8.960002 11.493337 9.013335 11.533337 9.080002 11.560002 c\n9.106669 11.573336 9.123335 11.580003 9.130002 11.580003 c\n9.136669 11.580003 9.153336 11.58667 9.180002 11.600003 c\n9.353335 11.66667 9.496669 11.783337 9.610003 11.950004 c\n9.723336 12.116671 9.780003 12.300004 9.780003 12.500004 c\n9.780003 12.753337 9.690002 12.970004 9.510002 13.150003 c\n9.330002 13.330003 9.113336 13.420003 8.860003 13.420004 c\n8.593336 13.420004 8.36667 13.330004 8.180002 13.150003 c\n7.993335 12.970003 7.900002 12.753337 7.900002 12.500004 c\n7.900002 12.273337 7.930002 12.036671 7.990002 11.790004 c\n8.050002 11.543337 8.140002 11.320004 8.260002 11.120004 c\n8.513335 10.74667 8.816669 10.47667 9.170002 10.310003 c\n9.523336 10.143336 9.913335 10.060003 10.340002 10.060003 c\n10.660002 10.060003 10.976668 10.120004 11.290002 10.240004 c\n11.603335 10.360004 11.883335 10.530004 12.130002 10.750004 c\n12.376669 10.970004 12.583335 11.233337 12.750002 11.540004 c\n12.916669 11.84667 13.000002 12.200004 13.000002 12.600004 c\n13.000002 18.480003 l\n13.000002 18.720003 13.003335 18.876671 13.010002 18.950003 c\n13.016669 19.023335 13.020002 19.073336 13.020002 19.100002 c\n13.020002 19.273336 13.073336 19.413336 13.180002 19.520002 c\n13.286669 19.626669 13.413336 19.680002 13.560002 19.680002 c\n13.733335 19.680002 13.873336 19.630003 13.980002 19.530003 c\n14.086669 19.430002 14.146669 19.300003 14.160003 19.140003 c\n14.580003 19.140003 l\n14.58 19.139999 l\nh\n11.44 18.639999 m\n11.546666 18.453333 11.61 18.253332 11.629999 18.039999 c\n11.649999 17.826666 11.659999 17.626665 11.659999 17.439999 c\n11.659999 13.739999 l\n11.606666 13.793332 11.549999 13.843332 11.489999 13.889998 c\n11.429998 13.936665 11.366666 13.993332 11.299999 14.059999 c\n10.913333 14.339998 10.583333 14.596665 10.31 14.829998 c\n10.036666 15.063331 9.806666 15.303331 9.619999 15.549998 c\n9.433332 15.796665 9.286665 16.06 9.179999 16.339998 c\n9.073334 16.619999 9.006667 16.939999 8.98 17.299999 c\n8.98 17.599998 l\n8.993333 18.106665 9.13 18.503332 9.389999 18.789999 c\n9.649999 19.076666 10.019999 19.219999 10.499999 19.219999 c\n10.713332 19.219999 10.906666 19.166666 11.079999 19.059999 c\n11.253332 18.939999 11.373332 18.799999 11.439999 18.639999 c\n11.44 18.639999 l\nh\n18.32 10.08 m\n19.08 10.093333 19.686666 10.323334 20.139999 10.770001 c\n20.593332 11.216667 20.82 11.926667 20.82 12.900001 c\n20.82 17.380001 l\n20.82 18.353334 20.593332 19.059999 20.139999 19.5 c\n19.686666 19.940001 19.08 20.173334 18.32 20.200001 c\n18.26 20.200001 l\n18.033333 20.200001 17.826666 20.173334 17.639999 20.120001 c\n17.619999 20.120001 l\n17.606665 20.120001 17.599998 20.113335 17.599998 20.1 c\n17.293333 19.993334 17.026667 19.846666 16.799999 19.66 c\n16.609999 19.469999 l\n16.609999 19.469999 16.56 19.4 16.459999 19.26 c\n16.459999 22.58 l\n16.459999 22.766666 16.486666 22.903334 16.539999 22.99 c\n16.593332 23.076666 16.646666 23.133333 16.699999 23.16 c\n16.779999 23.199999 16.866667 23.199999 16.959999 23.16 c\n16.959999 23.66 l\n14.539999 23.66 l\n14.539999 23.16 l\n14.646666 23.199999 14.726666 23.199999 14.779999 23.16 c\n14.846665 23.133333 14.909999 23.076666 14.969998 22.99 c\n15.029998 22.903334 15.059998 22.766666 15.059999 22.58 c\n15.059999 11.3 l\n15.059999 11.113334 15.029999 10.976667 14.969998 10.89 c\n14.909998 10.803333 14.846665 10.746667 14.779999 10.72 c\n14.726666 10.693334 14.646666 10.693334 14.539999 10.72 c\n14.539999 10.24 l\n16.459999 10.24 l\n16.459999 11.02 l\n16.553331 10.873333 16.666666 10.74 16.799999 10.62 c\n17.026667 10.42 17.293333 10.273334 17.599998 10.18 c\n17.599998 10.166667 17.606665 10.16 17.619999 10.16 c\n17.639999 10.16 l\n17.853333 10.106667 18.059999 10.08 18.26 10.08 c\n18.32 10.08 l\nh\n19.32 12.46 m\n19.32 12.44 l\n19.306665 11.76 19.223333 11.28 19.07 11 c\n18.916666 10.72 18.666666 10.566667 18.32 10.54 c\n18.08 10.526667 17.853333 10.556666 17.639999 10.63 c\n17.426666 10.703334 17.24 10.826667 17.08 11 c\n16.92 11.173333 16.786667 11.406666 16.68 11.7 c\n16.573334 11.993334 16.5 12.34 16.460001 12.74 c\n16.460001 17.540001 l\n16.5 17.953335 16.573334 18.303335 16.68 18.59 c\n16.786667 18.876665 16.92 19.103333 17.08 19.27 c\n17.24 19.436668 17.426666 19.560001 17.639999 19.640001 c\n17.853333 19.720001 18.08 19.753334 18.32 19.740002 c\n18.666666 19.713335 18.916666 19.560001 19.07 19.280003 c\n19.223333 19.000004 19.306665 18.520004 19.32 17.840002 c\n19.32 17.820002 l\n19.32 12.460001 l\n19.32 12.46 l\nh\n24.379999 10.08 m\n24.686665 10.08 24.999998 10.133333 25.32 10.24 c\n25.640001 10.346666 25.926668 10.513333 26.18 10.74 c\n26.433332 10.966666 26.636667 11.253333 26.790001 11.599999 c\n26.943335 11.946666 27.020002 12.359999 27.02 12.839999 c\n27.02 14.859999 l\n27.02 14.919999 l\n27.02 15.379999 l\n23.040001 15.379999 l\n23.040001 17.439999 l\n23.040001 18.266665 23.183334 18.856665 23.470001 19.209999 c\n23.756668 19.563334 24.113335 19.733334 24.540001 19.719999 c\n24.793333 19.706665 25.043333 19.663332 25.290001 19.59 c\n25.536669 19.516668 25.750002 19.393333 25.93 19.219999 c\n26.109999 19.046665 26.26 18.799997 26.380001 18.48 c\n26.500002 18.160002 26.560003 17.740002 26.560001 17.219999 c\n27.02 17.219999 l\n27.02 17.5 l\n27.02 17.860001 26.98 18.203335 26.9 18.530001 c\n26.82 18.856667 26.679998 19.140001 26.48 19.380001 c\n26.280001 19.620001 26.023333 19.810001 25.709999 19.950001 c\n25.396666 20.09 25.013332 20.166666 24.559999 20.18 c\n24.24 20.18 23.913334 20.120001 23.58 20 c\n23.246666 19.879999 22.946667 19.699999 22.68 19.459999 c\n22.413334 19.219999 22.193335 18.936665 22.02 18.609999 c\n21.846666 18.283333 21.76 17.913332 21.76 17.499998 c\n21.76 17.029999 l\n21.76 17.029999 21.756666 16.773333 21.75 16.259998 c\n21.743334 15.746665 21.74 15.429998 21.74 15.309999 c\n21.74 15.189999 21.736666 14.859999 21.73 14.319999 c\n21.723333 13.779999 21.719999 13.489999 21.719999 13.449999 c\n21.719999 12.859999 l\n21.719999 12.379998 21.803333 11.963332 21.969999 11.609999 c\n22.136665 11.256665 22.343332 10.969999 22.59 10.749999 c\n22.836668 10.529999 23.116667 10.363333 23.43 10.249999 c\n23.743334 10.136665 24.059999 10.079999 24.380001 10.079999 c\n24.379999 10.08 l\nh\n25.68 14.86 m\n25.68 13.28 l\n25.68 12.773333 25.646667 12.349999 25.58 12.01 c\n25.513332 11.670001 25.423332 11.396668 25.309999 11.190001 c\n25.196667 10.983334 25.059999 10.84 24.9 10.76 c\n24.74 10.68 24.559999 10.64 24.359999 10.64 c\n23.933332 10.64 23.609999 10.826667 23.389999 11.200001 c\n23.17 11.573335 23.059999 12.266667 23.059999 13.280001 c\n23.059999 14.860001 l\n25.68 14.860001 l\n25.68 14.86 l\nh\n33.540001 11.66 m\n33.540001 11.686667 33.546669 11.74 33.560001 11.82 c\n33.573334 11.9 33.573334 11.966666 33.560001 12.02 c\n33.546669 12.299999 33.450001 12.53 33.27 12.709999 c\n33.09 12.889998 32.873333 12.979999 32.619999 12.98 c\n32.353333 12.98 32.129997 12.886666 31.949999 12.7 c\n31.77 12.513333 31.68 12.286667 31.679998 12.02 c\n31.679998 11.686667 31.806665 11.433332 32.059998 11.259999 c\n32.086666 11.246666 32.103333 11.236666 32.109997 11.23 c\n32.139996 11.2 l\n32.23333 11.133333 32.293327 11.036666 32.319996 10.91 c\n32.346664 10.783334 32.266663 10.673333 32.079994 10.58 c\n31.959993 10.513333 31.839994 10.48 31.719994 10.48 c\n31.319994 10.453333 30.96666 10.573333 30.659994 10.839999 c\n30.353329 11.106666 30.146662 11.573332 30.039993 12.239999 c\n30.039993 18.919998 l\n30.039993 19.106665 30.06666 19.243332 30.119993 19.329998 c\n30.173326 19.416664 30.22666 19.466663 30.279993 19.479998 c\n30.359993 19.519997 30.446661 19.519997 30.539993 19.479998 c\n30.539993 19.999998 l\n28.119993 19.999998 l\n28.119993 19.479998 l\n28.22666 19.519997 28.30666 19.519997 28.359993 19.479998 c\n28.426661 19.466663 28.493326 19.416664 28.559994 19.329998 c\n28.626661 19.243332 28.659994 19.106665 28.659994 18.919998 c\n28.659994 11.299998 l\n28.659994 11.113332 28.626661 10.976666 28.559994 10.889998 c\n28.493326 10.803331 28.426661 10.746665 28.359993 10.719998 c\n28.30666 10.693332 28.22666 10.693332 28.119993 10.719998 c\n28.119993 10.219998 l\n30.039993 10.219998 l\n30.039993 11.039998 l\n30.133326 10.893332 30.22666 10.756664 30.319994 10.629998 c\n30.413328 10.503332 30.523329 10.396666 30.649994 10.309999 c\n30.776659 10.223331 30.923326 10.153332 31.089994 10.099999 c\n31.256662 10.046665 31.466661 10.019999 31.719994 10.019999 c\n32.106663 10.019999 32.466663 10.159999 32.799995 10.439999 c\n33.133327 10.719998 33.379997 11.126665 33.539997 11.659999 c\n33.540001 11.66 l\nh\n36.240002 18.92 m\n36.240002 19.106667 36.27 19.243334 36.330002 19.33 c\n36.390003 19.416666 36.446667 19.466665 36.5 19.48 c\n36.566666 19.519999 36.653332 19.519999 36.759998 19.48 c\n36.759998 20 l\n34.339996 20 l\n34.339996 19.48 l\n34.446663 19.519999 34.539997 19.519999 34.619995 19.48 c\n34.659996 19.466665 34.713329 19.416666 34.779995 19.33 c\n34.846661 19.243334 34.879993 19.106667 34.879993 18.92 c\n34.879993 6.8 l\n34.879993 6.6 34.846661 6.456667 34.779995 6.37 c\n34.713329 6.283334 34.659996 6.226667 34.619995 6.2 c\n34.539997 6.16 34.446663 6.16 34.339996 6.2 c\n34.339996 5.72 l\n36.239998 5.72 l\n36.239998 6.8 l\n36.239998 18.92 l\n36.240002 18.92 l\nh\n40.580002 10.08 m\n40.886669 10.08 41.200001 10.133333 41.52 10.24 c\n41.84 10.346666 42.126667 10.513333 42.380001 10.74 c\n42.633335 10.966666 42.83667 11.253333 42.990002 11.599999 c\n43.143333 11.946666 43.220001 12.359999 43.220001 12.839999 c\n43.220001 14.859999 l\n43.220001 14.919999 l\n43.220001 15.379999 l\n39.240002 15.379999 l\n39.240002 17.439999 l\n39.240002 18.266665 39.383335 18.856665 39.670002 19.209999 c\n39.956669 19.563334 40.313335 19.733334 40.740002 19.719999 c\n40.993336 19.706665 41.243336 19.663332 41.490002 19.59 c\n41.736668 19.516668 41.950001 19.393333 42.130001 19.219999 c\n42.310001 19.046665 42.460003 18.799997 42.580002 18.48 c\n42.700001 18.160002 42.760002 17.740002 42.760002 17.219999 c\n43.220001 17.219999 l\n43.220001 17.5 l\n43.220001 17.860001 43.18 18.203335 43.100002 18.530001 c\n43.020004 18.856667 42.880005 19.140001 42.680004 19.380001 c\n42.480003 19.620001 42.223339 19.810001 41.910004 19.950001 c\n41.596668 20.09 41.213337 20.166666 40.760002 20.18 c\n40.440002 20.18 40.113335 20.120001 39.780003 20 c\n39.446671 19.879999 39.146667 19.699999 38.880001 19.459999 c\n38.613335 19.219999 38.393333 18.936665 38.220001 18.609999 c\n38.046669 18.283333 37.960003 17.913332 37.960003 17.499998 c\n37.960003 17.029999 l\n37.960003 17.029999 37.956669 16.773333 37.950005 16.259998 c\n37.94334 15.746665 37.940006 15.429998 37.940006 15.309999 c\n37.940006 15.189999 37.936672 14.859999 37.930008 14.319999 c\n37.923344 13.779999 37.92001 13.489999 37.92001 13.449999 c\n37.92001 12.859999 l\n37.92001 12.379998 38.003342 11.963332 38.17001 11.609999 c\n38.336678 11.256665 38.543343 10.969999 38.790009 10.749999 c\n39.036674 10.529999 39.316673 10.363333 39.630009 10.249999 c\n39.943344 10.136665 40.26001 10.079999 40.580009 10.079999 c\n40.580002 10.08 l\nh\n41.880001 14.86 m\n41.880001 13.28 l\n41.880001 12.773333 41.846668 12.349999 41.780003 12.01 c\n41.713337 11.670001 41.623337 11.396668 41.510002 11.190001 c\n41.396667 10.983334 41.260002 10.84 41.100002 10.76 c\n40.940002 10.68 40.760002 10.64 40.560001 10.64 c\n40.133335 10.64 39.810001 10.826667 39.59 11.200001 c\n39.369999 11.573335 39.259998 12.266667 39.259998 13.280001 c\n39.259998 14.860001 l\n41.879997 14.860001 l\n41.880001 14.86 l\nh\n47.880001 19.879999 m\n47.866669 19.893333 47.856667 19.9 47.850002 19.9 c\n47.843338 19.9 47.833336 19.906666 47.820004 19.92 c\n47.800003 19.940001 l\n47.773335 19.953335 47.743336 19.966667 47.710003 19.980001 c\n47.67667 19.993336 47.646671 20.006668 47.620003 20.020002 c\n47.340004 20.140003 47.013336 20.200003 46.640003 20.200003 c\n46.42667 20.200003 46.220005 20.150003 46.020004 20.050003 c\n45.820004 19.950003 45.646671 19.866671 45.500004 19.800003 c\n45.353336 19.733335 45.230003 19.703337 45.130005 19.710003 c\n45.030006 19.716669 44.980007 19.813337 44.980003 20.000004 c\n44.600002 20.000004 l\n44.600002 17.600004 l\n45.080002 17.600004 l\n45.053333 18.02667 45.100002 18.393337 45.220001 18.700005 c\n45.299999 18.966671 45.456669 19.216671 45.690002 19.450005 c\n45.923336 19.683338 46.273338 19.800005 46.740002 19.800005 c\n47.046669 19.800005 47.299999 19.746672 47.5 19.640005 c\n47.846668 19.466671 48.083332 19.260004 48.209999 19.020004 c\n48.336666 18.780005 48.386665 18.530005 48.360001 18.270004 c\n48.333336 18.010004 48.236668 17.753338 48.07 17.500004 c\n47.903332 17.24667 47.699997 17.013336 47.459999 16.800003 c\n47.299999 16.680002 47.133331 16.553337 46.959999 16.420004 c\n46.786667 16.286671 46.613335 16.146671 46.439999 16.000004 c\n45.973331 15.62667 45.603333 15.290004 45.329998 14.990004 c\n45.056664 14.690003 44.846664 14.410004 44.699997 14.150003 c\n44.553329 13.890003 44.453331 13.643336 44.399998 13.410004 c\n44.346664 13.176671 44.32 12.926671 44.319996 12.660004 c\n44.319996 12.500004 44.329994 12.353337 44.349995 12.220004 c\n44.369995 12.086671 44.393326 11.966671 44.419994 11.860004 c\n44.459995 11.633338 44.526661 11.413338 44.619995 11.200005 c\n44.713329 10.986671 44.846661 10.796672 45.019997 10.630005 c\n45.193333 10.463338 45.406666 10.326672 45.659996 10.220005 c\n45.913326 10.113339 46.219994 10.060005 46.579994 10.060005 c\n46.779995 10.060005 46.979992 10.103338 47.179993 10.190005 c\n47.379993 10.276672 47.559994 10.356672 47.719994 10.430005 c\n47.879993 10.503338 48.00666 10.536672 48.099995 10.530006 c\n48.193329 10.523339 48.239994 10.420006 48.239994 10.220005 c\n48.619995 10.220005 l\n48.619995 12.700005 l\n48.099995 12.700005 l\n48.113327 12.300004 48.066662 11.940004 47.959995 11.620005 c\n47.866661 11.340005 47.703327 11.086671 47.469994 10.860004 c\n47.23666 10.633338 46.893326 10.520004 46.439995 10.520004 c\n46.079994 10.520004 45.786659 10.600004 45.559994 10.760004 c\n45.439995 10.853337 45.336658 10.990005 45.249992 11.170004 c\n45.163326 11.350003 45.113323 11.54667 45.099991 11.760004 c\n45.086658 11.973338 45.119991 12.203338 45.199989 12.450005 c\n45.279987 12.696671 45.439987 12.926671 45.679989 13.140005 c\n45.706657 13.180005 45.743324 13.220005 45.789989 13.260005 c\n45.836655 13.300005 45.886658 13.333338 45.939991 13.360005 c\n45.979992 13.386672 46.013325 13.413339 46.039989 13.440005 c\n46.119991 13.520005 l\n46.266659 13.640005 46.41666 13.760005 46.569992 13.880005 c\n46.723324 14.000005 46.879993 14.120005 47.039993 14.240005 c\n47.413326 14.560005 47.723328 14.850005 47.969994 15.110004 c\n48.21666 15.370004 48.423325 15.613338 48.589993 15.840004 c\n48.75666 16.066671 48.879993 16.280004 48.959991 16.480003 c\n49.039989 16.680002 49.086658 16.873337 49.099991 17.060003 c\n49.233326 17.673336 49.209991 18.190002 49.029991 18.610003 c\n48.849991 19.030003 48.619991 19.360003 48.339993 19.600002 c\n48.319992 19.600002 l\n48.319992 19.626669 48.30666 19.640003 48.279991 19.640003 c\n48.253323 19.66667 48.226658 19.68667 48.199989 19.700003 c\n48.07999 19.780003 l\n48.07999 19.780003 48.039989 19.800003 47.959991 19.840002 c\n47.959991 19.860003 l\n47.946659 19.860003 47.933323 19.863337 47.919991 19.870003 c\n47.906658 19.876669 47.893322 19.880003 47.87999 19.880003 c\n47.880001 19.879999 l\nh\n53.82 19.879999 m\n53.806667 19.893333 53.796665 19.9 53.790001 19.9 c\n53.783337 19.9 53.773335 19.906666 53.760002 19.92 c\n53.740002 19.940001 l\n53.713333 19.953335 53.683334 19.966667 53.650002 19.980001 c\n53.616669 19.993336 53.58667 20.006668 53.560001 20.020002 c\n53.280003 20.140003 52.953335 20.200003 52.580002 20.200003 c\n52.366669 20.200003 52.160004 20.150003 51.960003 20.050003 c\n51.760002 19.950003 51.58667 19.866671 51.440002 19.800003 c\n51.293335 19.733335 51.170002 19.703337 51.070004 19.710003 c\n50.970005 19.716669 50.920006 19.813337 50.920002 20.000004 c\n50.540001 20.000004 l\n50.540001 17.600004 l\n51.02 17.600004 l\n50.993332 18.02667 51.040001 18.393337 51.16 18.700005 c\n51.239998 18.966671 51.396667 19.216671 51.630001 19.450005 c\n51.863335 19.683338 52.213337 19.800005 52.68 19.800005 c\n52.986668 19.800005 53.239998 19.746672 53.439999 19.640005 c\n53.786667 19.466671 54.023331 19.260004 54.149998 19.020004 c\n54.276665 18.780005 54.326664 18.530005 54.299999 18.270004 c\n54.273335 18.010004 54.176666 17.753338 54.009998 17.500004 c\n53.84333 17.24667 53.639996 17.013336 53.399998 16.800003 c\n53.239998 16.680002 53.07333 16.553337 52.899998 16.420004 c\n52.726665 16.286671 52.553333 16.146671 52.379997 16.000004 c\n51.91333 15.62667 51.543331 15.290004 51.269997 14.990004 c\n50.996662 14.690003 50.786663 14.410004 50.639996 14.150003 c\n50.493328 13.890003 50.39333 13.643336 50.339996 13.410004 c\n50.286663 13.176671 50.259998 12.926671 50.259995 12.660004 c\n50.259995 12.500004 50.269993 12.353337 50.289993 12.220004 c\n50.309994 12.086671 50.333324 11.966671 50.359993 11.860004 c\n50.399994 11.633338 50.46666 11.413338 50.559994 11.200005 c\n50.653328 10.986671 50.786659 10.796672 50.959995 10.630005 c\n51.133331 10.463338 51.346664 10.326672 51.599995 10.220005 c\n51.853325 10.113339 52.159992 10.060005 52.519993 10.060005 c\n52.719994 10.060005 52.919991 10.103338 53.119991 10.190005 c\n53.319992 10.276672 53.499992 10.356672 53.659992 10.430005 c\n53.819992 10.503338 53.946659 10.536672 54.039993 10.530006 c\n54.133327 10.523339 54.179993 10.420006 54.179993 10.220005 c\n54.559994 10.220005 l\n54.559994 12.700005 l\n54.039993 12.700005 l\n54.053326 12.300004 54.00666 11.940004 53.899994 11.620005 c\n53.80666 11.340005 53.643326 11.086671 53.409992 10.860004 c\n53.176659 10.633338 52.833324 10.520004 52.379993 10.520004 c\n52.019993 10.520004 51.726658 10.600004 51.499992 10.760004 c\n51.379993 10.853337 51.276657 10.990005 51.189991 11.170004 c\n51.103325 11.350003 51.053322 11.54667 51.039989 11.760004 c\n51.026657 11.973338 51.05999 12.203338 51.139988 12.450005 c\n51.219986 12.696671 51.379986 12.926671 51.619987 13.140005 c\n51.646656 13.180005 51.683323 13.220005 51.729988 13.260005 c\n51.776653 13.300005 51.826656 13.333338 51.87999 13.360005 c\n51.919991 13.386672 51.953323 13.413339 51.979988 13.440005 c\n52.05999 13.520005 l\n52.206657 13.640005 52.356659 13.760005 52.509991 13.880005 c\n52.663322 14.000005 52.819992 14.120005 52.979992 14.240005 c\n53.353325 14.560005 53.663326 14.850005 53.909992 15.110004 c\n54.156658 15.370004 54.363323 15.613338 54.529991 15.840004 c\n54.696659 16.066671 54.819992 16.280004 54.89999 16.480003 c\n54.979988 16.680002 55.026657 16.873337 55.039989 17.060003 c\n55.173325 17.673336 55.14999 18.190002 54.96999 18.610003 c\n54.789989 19.030003 54.55999 19.360003 54.279991 19.600002 c\n54.259991 19.600002 l\n54.259991 19.626669 54.246658 19.640003 54.21999 19.640003 c\n54.193321 19.66667 54.166656 19.68667 54.139988 19.700003 c\n54.019989 19.780003 l\n54.019989 19.780003 53.979988 19.800003 53.89999 19.840002 c\n53.89999 19.860003 l\n53.886658 19.860003 53.873322 19.863337 53.859989 19.870003 c\n53.846657 19.876669 53.833321 19.880003 53.819988 19.880003 c\n53.82 19.879999 l\nh\nf\nQ\nQ\nQ\nshowpage\n%%PageTrailer\npdfEndPage\n%%Trailer\nend\n%%DocumentSuppliedResources:\n%%EOF\n"
  },
  {
    "path": "scripts/docker-entrypoint.sh",
    "content": "#!/bin/bash\nset -e\n\n# Source: https://github.com/sameersbn/docker-gitlab/\nmap_uidgid() {\n    USERMAP_ORIG_UID=$(id -u paperless)\n    USERMAP_ORIG_GID=$(id -g paperless)\n    USERMAP_NEW_UID=${USERMAP_UID:-$USERMAP_ORIG_UID}\n    USERMAP_NEW_GID=${USERMAP_GID:-${USERMAP_ORIG_GID:-$USERMAP_NEW_UID}}\n    if [[ ${USERMAP_NEW_UID} != \"${USERMAP_ORIG_UID}\" || ${USERMAP_NEW_GID} != \"${USERMAP_ORIG_GID}\" ]]; then\n        echo \"Mapping UID and GID for paperless:paperless to $USERMAP_NEW_UID:$USERMAP_NEW_GID\"\n        usermod -u \"${USERMAP_NEW_UID}\" paperless\n        groupmod -o -g \"${USERMAP_NEW_GID}\" paperless\n    fi\n}\n\nset_permissions() {\n    # Set permissions for consumption and export directory\n    for dir in PAPERLESS_CONSUMPTION_DIR PAPERLESS_EXPORT_DIR; do\n      # Extract the name of the current directory from $dir for the error message\n      cur_dir_name=$(echo \"$dir\" | awk -F'_' '{ print tolower($2); }')\n      chgrp paperless \"${!dir}\" || {\n          echo \"Changing group of ${cur_dir_name} directory:\"\n          echo \"  ${!dir}\"\n          echo \"failed.\"\n          echo \"\"\n          echo \"Either try to set it on your host-mounted directory\"\n          echo \"directly, or make sure that the directory has \\`g+wx\\`\"\n          echo \"permissions and the files in it at least \\`o+r\\`.\"\n      } >&2\n      chmod g+wx \"${!dir}\" || {\n          echo \"Changing group permissions of ${cur_dir_name} directory:\"\n          echo \"  ${!dir}\"\n          echo \"failed.\"\n          echo \"\"\n          echo \"Either try to set it on your host-mounted directory\"\n          echo \"directly, or make sure that the directory has \\`g+wx\\`\"\n          echo \"permissions and the files in it at least \\`o+r\\`.\"\n      } >&2\n    done\n    # Set permissions for application directory\n    chown -Rh paperless:paperless /usr/src/paperless\n}\n\nmigrations() {\n    # A simple lock file in case other containers use this startup\n    LOCKFILE=\"/usr/src/paperless/data/db.sqlite3.migration\"\n\n    # check for and create lock file in one command \n    if (set -o noclobber; echo \"$$\" > \"${LOCKFILE}\") 2> /dev/null\n    then\n        trap 'rm -f \"${LOCKFILE}\"; exit $?' INT TERM EXIT\n        sudo -HEu paperless \"/usr/src/paperless/src/manage.py\" \"migrate\"\n        rm ${LOCKFILE}\n    fi\n}\n\ninitialize() {\n    map_uidgid\n    set_permissions\n    migrations\n}\n\ninstall_languages() {\n    local langs=\"$1\"\n    read -ra langs <<<\"$langs\"\n\n    # Check that it is not empty\n    if [ ${#langs[@]} -eq 0 ]; then\n        return\n    fi\n\n    # Loop over languages to be installed\n    for lang in \"${langs[@]}\"; do\n        pkg=\"tesseract-ocr-data-$lang\"\n\n        # English is installed by default\n        if [[ \"$lang\" ==  \"eng\" ]]; then\n            continue\n        fi\n\n        if apk info -e \"$pkg\" > /dev/null 2>&1; then\n            continue\n        fi\n        if ! apk --no-cache info \"$pkg\" > /dev/null 2>&1; then\n            continue\n        fi\n\n        apk --no-cache --update add \"$pkg\"\n    done\n}\n\n\nif [[ \"$1\" != \"/\"* ]]; then\n    initialize\n\n    # Install additional languages if specified\n    if [[ ! -z \"$PAPERLESS_OCR_LANGUAGES\"  ]]; then\n        install_languages \"$PAPERLESS_OCR_LANGUAGES\"\n    fi\n\n    if [[ \"$1\" = \"gunicorn\" ]]; then\n        shift\n        EXTRA_PARAMS=\"\"\n        SSL_KEY_PATH=\"/usr/src/paperless/data/ssl.key\"\n        SSL_CERT_PATH=\"/usr/src/paperless/data/ssl.cert\"\n        if [ \"${PAPERLESS_USE_SSL}\" = \"true\" ]; then\n            if [ -f \"${SSL_KEY_PATH}\" ] && [ -f \"${SSL_CERT_PATH}\" ]; then\n                EXTRA_PARAMS=\"--certfile=${SSL_CERT_PATH} --keyfile=${SSL_KEY_PATH}\"\n            else\n                echo \"Error: Could not find certfile in ${SSL_CERT_PATH} or keyfile in ${SSL_KEY_PATH}, but \\$PAPERLESS_USE_SSL is true. Starting without SSL enabled.\"\n            fi\n        fi\n        cd /usr/src/paperless/src/ && \\\n            exec sudo -HEu paperless /usr/bin/gunicorn -c /usr/src/paperless/gunicorn.conf ${EXTRA_PARAMS} \"$@\" paperless.wsgi\n    else\n        exec sudo -HEu paperless \"/usr/src/paperless/src/manage.py\" \"$@\"\n    fi\nfi\n\nexec \"$@\"\n\n"
  },
  {
    "path": "scripts/gunicorn.conf",
    "content": "bind = '127.0.0.1:8000'\nbacklog = 2048\nworkers = 3\nworker_class = 'sync'\nworker_connections = 1000\ntimeout = 20\nkeepalive = 2\nspew = False\ndaemon = False\npidfile = None\numask = 0\nuser = None\ngroup = None\ntmp_upload_dir = None\nloglevel = 'info'\nerrorlog = '-'\naccesslog = '-'\nproc_name = None\n\ndef pre_fork(server, worker):\n    pass\n\ndef pre_exec(server):\n    server.log.info(\"Forked child, re-executing.\")\n\ndef when_ready(server):\n    server.log.info(\"Server is ready. Spawning workers\")\n\ndef worker_int(worker):\n    worker.log.info(\"worker received INT or QUIT signal\")\n\n    ## get traceback info\n    import threading, sys, traceback\n    id2name = dict([(th.ident, th.name) for th in threading.enumerate()])\n    code = []\n    for threadId, stack in sys._current_frames().items():\n        code.append(\"\\n# Thread: %s(%d)\" % (id2name.get(threadId,\"\"),\n            threadId))\n        for filename, lineno, name, line in traceback.extract_stack(stack):\n            code.append('File: \"%s\", line %d, in %s' % (filename,\n                lineno, name))\n            if line:\n                code.append(\"  %s\" % (line.strip()))\n    worker.log.debug(\"\\n\".join(code))\n\ndef worker_abort(worker):\n    worker.log.info(\"worker received SIGABRT signal\")\n\n"
  },
  {
    "path": "scripts/paperless-consumer.service",
    "content": "[Unit]\nDescription=Paperless consumer\n\n[Service]\nUser=paperless\nGroup=paperless\nExecStart=/home/paperless/project/virtualenv/bin/python /home/paperless/project/src/manage.py document_consumer\n\n[Install]\nWantedBy=multi-user.target\n"
  },
  {
    "path": "scripts/paperless-webserver.service",
    "content": "[Unit]\nDescription=Paperless webserver\nAfter=network.target\nWants=network.target\n\n[Service]\nUser=paperless\nGroup=paperless\nExecStart=/home/paperless/project/virtualenv/bin/gunicorn --pythonpath=/home/paperless/project/src paperless.wsgi -w 2\n\n[Install]\nWantedBy=multi-user.target\n"
  },
  {
    "path": "scripts/post-consumption-example.sh",
    "content": "#!/usr/bin/env bash\n\nDOCUMENT_ID=${1}\nDOCUMENT_FILE_NAME=${2}\nDOCUMENT_SOURCE_PATH=${3}\nDOCUMENT_THUMBNAIL_PATH=${4}\nDOCUMENT_DOWNLOAD_URL=${5}\nDOCUMENT_THUMBNAIL_URL=${6}\nDOCUMENT_CORRESPONDENT=${7}\nDOCUMENT_TAGS=${8}\n\necho \"\n\nA document with an id of ${DOCUMENT_ID} was just consumed.  I know the\nfollowing additional information about it:\n\n* Generated File Name: ${DOCUMENT_FILE_NAME}\n* Source Path: ${DOCUMENT_SOURCE_PATH}\n* Thumbnail Path: ${DOCUMENT_THUMBNAIL_PATH}\n* Download URL: ${DOCUMENT_DOWNLOAD_URL}\n* Thumbnail URL: ${DOCUMENT_THUMBNAIL_URL}\n* Correspondent: ${DOCUMENT_CORRESPONDENT}\n* Tags: ${DOCUMENT_TAGS}\n\nIt was consumed with the passphrase ${PASSPHRASE}\n\n\"\n"
  },
  {
    "path": "src/documents/__init__.py",
    "content": "from .checks import changed_password_check\n"
  },
  {
    "path": "src/documents/actions.py",
    "content": "from django.contrib import messages\nfrom django.contrib.admin import helpers\nfrom django.contrib.admin.utils import model_ngettext\nfrom django.core.exceptions import PermissionDenied\nfrom django.template.response import TemplateResponse\n\nfrom documents.models import Correspondent, Tag\n\n\ndef select_action(\n        modeladmin, request, queryset, title, action, modelclass,\n        success_message=\"\", document_action=None, queryset_action=None):\n\n    opts = modeladmin.model._meta\n    app_label = opts.app_label\n\n    if not modeladmin.has_change_permission(request):\n        raise PermissionDenied\n\n    if request.POST.get('post'):\n        n = queryset.count()\n        selected_object = modelclass.objects.get(id=request.POST.get('obj_id'))\n        if n:\n            for document in queryset:\n                if document_action:\n                    document_action(document, selected_object)\n                document_display = str(document)\n                modeladmin.log_change(request, document, document_display)\n            if queryset_action:\n                queryset_action(queryset, selected_object)\n\n            modeladmin.message_user(request, success_message % {\n                \"selected_object\": selected_object.name,\n                \"count\": n,\n                \"items\": model_ngettext(modeladmin.opts, n)\n            }, messages.SUCCESS)\n\n        # Return None to display the change list page again.\n        return None\n\n    context = dict(\n        modeladmin.admin_site.each_context(request),\n        title=title,\n        queryset=queryset,\n        opts=opts,\n        action_checkbox_name=helpers.ACTION_CHECKBOX_NAME,\n        media=modeladmin.media,\n        action=action,\n        objects=modelclass.objects.all(),\n        itemname=model_ngettext(modelclass, 1)\n    )\n\n    request.current_app = modeladmin.admin_site.name\n\n    return TemplateResponse(\n        request,\n        \"admin/{}/{}/select_object.html\".format(app_label, opts.model_name),\n        context\n    )\n\n\ndef simple_action(\n        modeladmin, request, queryset, success_message=\"\",\n        document_action=None, queryset_action=None):\n\n    if not modeladmin.has_change_permission(request):\n        raise PermissionDenied\n\n    n = queryset.count()\n    if n:\n        for document in queryset:\n            if document_action:\n                document_action(document)\n            document_display = str(document)\n            modeladmin.log_change(request, document, document_display)\n        if queryset_action:\n            queryset_action(queryset)\n        modeladmin.message_user(request, success_message % {\n            \"count\": n, \"items\": model_ngettext(modeladmin.opts, n)\n        }, messages.SUCCESS)\n\n    # Return None to display the change list page again.\n    return None\n\n\ndef add_tag_to_selected(modeladmin, request, queryset):\n    return select_action(\n        modeladmin=modeladmin,\n        request=request,\n        queryset=queryset,\n        title=\"Add tag to multiple documents\",\n        action=\"add_tag_to_selected\",\n        modelclass=Tag,\n        success_message=\"Successfully added tag %(selected_object)s to \"\n                        \"%(count)d %(items)s.\",\n        document_action=lambda doc, tag: doc.tags.add(tag)\n    )\n\n\ndef remove_tag_from_selected(modeladmin, request, queryset):\n    return select_action(\n        modeladmin=modeladmin,\n        request=request,\n        queryset=queryset,\n        title=\"Remove tag from multiple documents\",\n        action=\"remove_tag_from_selected\",\n        modelclass=Tag,\n        success_message=\"Successfully removed tag %(selected_object)s from \"\n                        \"%(count)d %(items)s.\",\n        document_action=lambda doc, tag: doc.tags.remove(tag)\n    )\n\n\ndef set_correspondent_on_selected(modeladmin, request, queryset):\n\n    return select_action(\n        modeladmin=modeladmin,\n        request=request,\n        queryset=queryset,\n        title=\"Set correspondent on multiple documents\",\n        action=\"set_correspondent_on_selected\",\n        modelclass=Correspondent,\n        success_message=\"Successfully set correspondent %(selected_object)s \"\n                        \"on %(count)d %(items)s.\",\n        queryset_action=lambda qs, corr: qs.update(correspondent=corr)\n    )\n\n\ndef remove_correspondent_from_selected(modeladmin, request, queryset):\n    return simple_action(\n        modeladmin=modeladmin,\n        request=request,\n        queryset=queryset,\n        success_message=\"Successfully removed correspondent from %(count)d \"\n                        \"%(items)s.\",\n        queryset_action=lambda qs: qs.update(correspondent=None)\n    )\n\n\nadd_tag_to_selected.short_description = \"Add tag to selected documents\"\nremove_tag_from_selected.short_description = \\\n    \"Remove tag from selected documents\"\nset_correspondent_on_selected.short_description = \\\n    \"Set correspondent on selected documents\"\nremove_correspondent_from_selected.short_description = \\\n    \"Remove correspondent from selected documents\"\n"
  },
  {
    "path": "src/documents/admin.py",
    "content": "from datetime import datetime, timedelta\n\nfrom django.conf import settings\nfrom django.contrib import admin, messages\nfrom django.contrib.admin.templatetags.admin_urls import add_preserved_filters\nfrom django.contrib.auth.models import Group, User\nfrom django.db import models\nfrom django.http import HttpResponseRedirect\nfrom django.templatetags.static import static\nfrom django.urls import reverse\nfrom django.utils.html import format_html, format_html_join\nfrom django.utils.http import urlquote\nfrom django.utils.safestring import mark_safe\nfrom djangoql.admin import DjangoQLSearchMixin\n\nfrom documents.actions import (\n    add_tag_to_selected,\n    remove_correspondent_from_selected,\n    remove_tag_from_selected,\n    set_correspondent_on_selected\n)\n\nfrom .models import Correspondent, Document, Log, Tag\n\n\nclass FinancialYearFilter(admin.SimpleListFilter):\n\n    title = \"Financial Year\"\n    parameter_name = \"fy\"\n    _fy_wraps = None\n\n    def _fy_start(self, year):\n        \"\"\"Return date of the start of financial year for the given year.\"\"\"\n        fy_start = \"{}-{}\".format(str(year), settings.FY_START)\n        return datetime.strptime(fy_start, \"%Y-%m-%d\").date()\n\n    def _fy_end(self, year):\n        \"\"\"Return date of the end of financial year for the given year.\"\"\"\n        fy_end = \"{}-{}\".format(str(year), settings.FY_END)\n        return datetime.strptime(fy_end, \"%Y-%m-%d\").date()\n\n    def _fy_does_wrap(self):\n        \"\"\"Return whether the financial year spans across two years.\"\"\"\n        if self._fy_wraps is None:\n            start = \"{}\".format(settings.FY_START)\n            start = datetime.strptime(start, \"%m-%d\").date()\n            end = \"{}\".format(settings.FY_END)\n            end = datetime.strptime(end, \"%m-%d\").date()\n            self._fy_wraps = end < start\n\n        return self._fy_wraps\n\n    def _determine_fy(self, date):\n        \"\"\"Return a (query, display) financial year tuple of the given date.\"\"\"\n        if self._fy_does_wrap():\n            fy_start = self._fy_start(date.year)\n\n            if date.date() >= fy_start:\n                query = \"{}-{}\".format(date.year, date.year + 1)\n            else:\n                query = \"{}-{}\".format(date.year - 1, date.year)\n\n            # To keep it simple we use the same string for both\n            # query parameter and the display.\n            return query, query\n\n        else:\n            query = \"{0}-{0}\".format(date.year)\n            display = \"{}\".format(date.year)\n            return query, display\n\n    def lookups(self, request, model_admin):\n        if not settings.FY_START or not settings.FY_END:\n            return None\n\n        r = []\n        for document in Document.objects.all():\n            r.append(self._determine_fy(document.created))\n\n        return sorted(set(r), key=lambda x: x[0], reverse=True)\n\n    def queryset(self, request, queryset):\n        if not self.value() or not settings.FY_START or not settings.FY_END:\n            return None\n\n        start, end = self.value().split(\"-\")\n        return queryset.filter(created__gte=self._fy_start(start),\n                               created__lte=self._fy_end(end))\n\n\nclass RecentCorrespondentFilter(admin.RelatedFieldListFilter):\n    \"\"\"\n    If PAPERLESS_RECENT_CORRESPONDENT_YEARS is set, we limit the available\n    correspondents to documents sent our way over the past ``n`` years.\n    \"\"\"\n\n    def field_choices(self, field, request, model_admin):\n\n        years = settings.PAPERLESS_RECENT_CORRESPONDENT_YEARS\n        correspondents = Correspondent.objects.all()\n\n        if years and years > 0:\n            self.title = \"Correspondent (Recent)\"\n            days = 365 * years\n            correspondents = correspondents.filter(\n                documents__created__gte=datetime.now() - timedelta(days=days)\n            ).distinct()\n\n        return [(c.id, c.name) for c in correspondents]\n\n\nclass CommonAdmin(admin.ModelAdmin):\n    list_per_page = settings.PAPERLESS_LIST_PER_PAGE\n\n\nclass CorrespondentAdmin(CommonAdmin):\n\n    list_display = (\n        \"name\",\n        \"match\",\n        \"matching_algorithm\",\n        \"document_count\",\n        \"last_correspondence\"\n    )\n    list_filter = (\"matching_algorithm\",)\n    list_editable = (\"match\", \"matching_algorithm\")\n\n    readonly_fields = (\"slug\",)\n\n    def get_queryset(self, request):\n        qs = super(CorrespondentAdmin, self).get_queryset(request)\n        qs = qs.annotate(\n            document_count=models.Count(\"documents\"),\n            last_correspondence=models.Max(\"documents__created\")\n        )\n        return qs\n\n    def document_count(self, obj):\n        return obj.document_count\n    document_count.admin_order_field = \"document_count\"\n\n    def last_correspondence(self, obj):\n        return obj.last_correspondence\n    last_correspondence.admin_order_field = \"last_correspondence\"\n\n\nclass TagAdmin(CommonAdmin):\n\n    list_display = (\n        \"name\", \"colour\", \"match\", \"matching_algorithm\", \"document_count\")\n    list_filter = (\"colour\", \"matching_algorithm\")\n    list_editable = (\"colour\", \"match\", \"matching_algorithm\")\n\n    readonly_fields = (\"slug\",)\n\n    class Media:\n        js = (\"js/colours.js\",)\n\n    def get_queryset(self, request):\n        qs = super(TagAdmin, self).get_queryset(request)\n        qs = qs.annotate(document_count=models.Count(\"documents\"))\n        return qs\n\n    def document_count(self, obj):\n        return obj.document_count\n    document_count.admin_order_field = \"document_count\"\n\n\nclass DocumentAdmin(DjangoQLSearchMixin, CommonAdmin):\n\n    class Media:\n        css = {\n            \"all\": (\"paperless.css\",)\n        }\n\n    search_fields = (\"correspondent__name\", \"title\", \"content\", \"tags__name\")\n    readonly_fields = (\"added\", \"file_type\", \"storage_type\",)\n    list_display = (\"title\", \"created\", \"added\", \"thumbnail\", \"correspondent\",\n                    \"tags_\")\n    list_filter = (\n        \"tags\",\n        (\"correspondent\", RecentCorrespondentFilter),\n        FinancialYearFilter\n    )\n\n    filter_horizontal = (\"tags\",)\n\n    ordering = [\"-created\", \"correspondent\"]\n\n    actions = [\n        add_tag_to_selected,\n        remove_tag_from_selected,\n        set_correspondent_on_selected,\n        remove_correspondent_from_selected\n    ]\n\n    date_hierarchy = \"created\"\n\n    def __init__(self, *args, **kwargs):\n        super().__init__(*args, **kwargs)\n        self.document_queue = []\n\n    def has_add_permission(self, request):\n        return False\n\n    def created_(self, obj):\n        return obj.created.date().strftime(\"%Y-%m-%d\")\n    created_.short_description = \"Created\"\n\n    def changelist_view(self, request, extra_context=None):\n\n        response = super().changelist_view(\n            request,\n            extra_context=extra_context\n        )\n\n        if request.method == \"GET\":\n            cl = self.get_changelist_instance(request)\n            self.document_queue = [doc.id for doc in cl.queryset]\n\n        return response\n\n    def change_view(self, request, object_id=None, form_url='',\n                    extra_context=None):\n\n        extra_context = extra_context or {}\n\n        if self.document_queue and object_id:\n            if int(object_id) in self.document_queue:\n                # There is a queue of documents\n                current_index = self.document_queue.index(int(object_id))\n                if current_index < len(self.document_queue) - 1:\n                    # ... and there are still documents in the queue\n                    extra_context[\"next_object\"] = self.document_queue[\n                        current_index + 1\n                    ]\n\n        return super(DocumentAdmin, self).change_view(\n            request,\n            object_id,\n            form_url,\n            extra_context=extra_context,\n        )\n\n    def response_change(self, request, obj):\n\n        # This is mostly copied from ModelAdmin.response_change()\n        opts = self.model._meta\n        preserved_filters = self.get_preserved_filters(request)\n\n        msg_dict = {\n            \"name\": opts.verbose_name,\n            \"obj\": format_html(\n                '<a href=\"{}\">{}</a>',\n                urlquote(request.path),\n                obj\n            ),\n        }\n        if \"_saveandeditnext\" in request.POST:\n            msg = format_html(\n                'The {name} \"{obj}\" was changed successfully. '\n                'Editing next object.',\n                **msg_dict\n            )\n            self.message_user(request, msg, messages.SUCCESS)\n            redirect_url = reverse(\n                \"admin:{}_{}_change\".format(opts.app_label, opts.model_name),\n                args=(request.POST[\"_next_object\"],),\n                current_app=self.admin_site.name\n            )\n            redirect_url = add_preserved_filters(\n                {\n                    \"preserved_filters\": preserved_filters,\n                    \"opts\": opts\n                },\n                redirect_url\n            )\n            return HttpResponseRedirect(redirect_url)\n\n        return super().response_change(request, obj)\n\n    @mark_safe\n    def thumbnail(self, obj):\n        return self._html_tag(\n            \"a\",\n            self._html_tag(\n                \"img\",\n                src=reverse(\"fetch\", kwargs={\"kind\": \"thumb\", \"pk\": obj.pk}),\n                width=180,\n                alt=\"Thumbnail of {}\".format(obj.file_name),\n                title=obj.file_name\n            ),\n            href=obj.download_url\n        )\n\n    @mark_safe\n    def tags_(self, obj):\n        r = \"\"\n        for tag in obj.tags.all():\n            colour = tag.get_colour_display()\n            r += self._html_tag(\n                \"a\",\n                tag.slug,\n                **{\n                    \"class\": \"tag\",\n                    \"style\": \"background-color: {};\".format(colour),\n                    \"href\": \"{}?tags__id__exact={}\".format(\n                        reverse(\"admin:documents_document_changelist\"),\n                        tag.pk\n                    )\n                }\n            )\n        return r\n\n    @mark_safe\n    def document(self, obj):\n        # TODO: is this method even used anymore?\n        return self._html_tag(\n            \"a\",\n            self._html_tag(\n                \"img\",\n                src=static(\"documents/img/{}.png\".format(obj.file_type)),\n                width=22,\n                height=22,\n                alt=obj.file_type,\n                title=obj.file_name\n            ),\n            href=obj.download_url\n        )\n\n    @staticmethod\n    def _html_tag(kind, inside=None, **kwargs):\n        attributes = format_html_join(' ', '{}=\"{}\"', kwargs.items())\n\n        if inside is not None:\n            return format_html(\"<{kind} {attributes}>{inside}</{kind}>\",\n                               kind=kind, attributes=attributes, inside=inside)\n\n        return format_html(\"<{} {}/>\", kind, attributes)\n\n\nclass LogAdmin(CommonAdmin):\n\n    list_display = (\"created\", \"message\", \"level\",)\n    list_filter = (\"level\", \"created\",)\n\n\nadmin.site.register(Correspondent, CorrespondentAdmin)\nadmin.site.register(Tag, TagAdmin)\nadmin.site.register(Document, DocumentAdmin)\nadmin.site.register(Log, LogAdmin)\n\n\n# Unless we implement multi-user, these default registrations don't make sense.\nadmin.site.unregister(Group)\nadmin.site.unregister(User)\n"
  },
  {
    "path": "src/documents/apps.py",
    "content": "from django.apps import AppConfig\nfrom django.db.models.signals import post_delete\n\n\nclass DocumentsConfig(AppConfig):\n\n    name = \"documents\"\n\n    def ready(self):\n\n        from .signals import document_consumption_started\n        from .signals import document_consumption_finished\n        from .signals.handlers import (\n            set_correspondent,\n            set_tags,\n            run_pre_consume_script,\n            run_post_consume_script,\n            cleanup_document_deletion,\n            set_log_entry\n        )\n\n        document_consumption_started.connect(run_pre_consume_script)\n\n        document_consumption_finished.connect(set_tags)\n        document_consumption_finished.connect(set_correspondent)\n        document_consumption_finished.connect(set_log_entry)\n        document_consumption_finished.connect(run_post_consume_script)\n\n        post_delete.connect(cleanup_document_deletion)\n\n        AppConfig.ready(self)\n"
  },
  {
    "path": "src/documents/checks.py",
    "content": "import textwrap\n\nfrom django.conf import settings\nfrom django.core.checks import Error, register\nfrom django.db.utils import OperationalError, ProgrammingError\n\n\n@register()\ndef changed_password_check(app_configs, **kwargs):\n\n    from documents.models import Document\n    from paperless.db import GnuPG\n\n    try:\n        encrypted_doc = Document.objects.filter(\n            storage_type=Document.STORAGE_TYPE_GPG).first()\n    except (OperationalError, ProgrammingError):\n        return []  # No documents table yet\n\n    if encrypted_doc:\n\n        if not settings.PASSPHRASE:\n            return [Error(\n                \"The database contains encrypted documents but no password \"\n                \"is set.\"\n            )]\n\n        if not GnuPG.decrypted(encrypted_doc.source_file):\n            return [Error(textwrap.dedent(\n                \"\"\"\n                The current password doesn't match the password of the\n                existing documents.\n\n                If you intend to change your password, you must first export\n                all of the old documents, start fresh with the new password\n                and then re-import them.\"\n                \"\"\"))]\n\n    return []\n"
  },
  {
    "path": "src/documents/consumer.py",
    "content": "from django.db import transaction\nimport datetime\nimport hashlib\nimport logging\nimport os\nimport re\nimport time\nimport uuid\n\nfrom operator import itemgetter\nfrom django.conf import settings\nfrom django.utils import timezone\nfrom paperless.db import GnuPG\n\nfrom .models import Document, FileInfo, Tag\nfrom .parsers import ParseError\nfrom .signals import (\n    document_consumer_declaration,\n    document_consumption_finished,\n    document_consumption_started\n)\n\n\nclass ConsumerError(Exception):\n    pass\n\n\nclass Consumer:\n    \"\"\"\n    Loop over every file found in CONSUMPTION_DIR and:\n      1. Convert it to a greyscale pnm\n      2. Use tesseract on the pnm\n      3. Store the document in the MEDIA_ROOT with optional encryption\n      4. Store the OCR'd text in the database\n      5. Delete the document and image(s)\n    \"\"\"\n\n    # Files are considered ready for consumption if they have been unmodified\n    # for this duration\n    FILES_MIN_UNMODIFIED_DURATION = 0.5\n\n    def __init__(self, consume=settings.CONSUMPTION_DIR,\n                 scratch=settings.SCRATCH_DIR):\n\n        self.logger = logging.getLogger(__name__)\n        self.logging_group = None\n\n        self._ignore = []\n        self.consume = consume\n        self.scratch = scratch\n\n        os.makedirs(self.scratch, exist_ok=True)\n\n        self.storage_type = Document.STORAGE_TYPE_UNENCRYPTED\n        if settings.PASSPHRASE:\n            self.storage_type = Document.STORAGE_TYPE_GPG\n\n        if not self.consume:\n            raise ConsumerError(\n                \"The CONSUMPTION_DIR settings variable does not appear to be \"\n                \"set.\"\n            )\n\n        if not os.path.exists(self.consume):\n            raise ConsumerError(\n                \"Consumption directory {} does not exist\".format(self.consume))\n\n        self.parsers = []\n        for response in document_consumer_declaration.send(self):\n            self.parsers.append(response[1])\n\n        if not self.parsers:\n            raise ConsumerError(\n                \"No parsers could be found, not even the default.  \"\n                \"This is a problem.\"\n            )\n\n    def log(self, level, message):\n        getattr(self.logger, level)(message, extra={\n            \"group\": self.logging_group\n        })\n\n    def consume_new_files(self):\n        \"\"\"\n        Find non-ignored files in consumption dir and consume them if they have\n        been unmodified for FILES_MIN_UNMODIFIED_DURATION.\n        \"\"\"\n        ignored_files = []\n        files = []\n        for entry in os.scandir(self.consume):\n            if entry.is_file():\n                file = (entry.path, entry.stat().st_mtime)\n                if file in self._ignore:\n                    ignored_files.append(file)\n                else:\n                    files.append(file)\n            else:\n                self.logger.warning(\n                    \"Skipping %s as it is not a file\",\n                    entry.path\n                )\n\n        if not files:\n            return\n\n        # Set _ignore to only include files that still exist.\n        # This keeps it from growing indefinitely.\n        self._ignore[:] = ignored_files\n\n        files_old_to_new = sorted(files, key=itemgetter(1))\n\n        time.sleep(self.FILES_MIN_UNMODIFIED_DURATION)\n\n        for file, mtime in files_old_to_new:\n            if mtime == os.path.getmtime(file):\n                # File has not been modified and can be consumed\n                if not self.try_consume_file(file):\n                    self._ignore.append((file, mtime))\n\n    @transaction.atomic\n    def try_consume_file(self, file):\n        \"\"\"\n        Return True if file was consumed\n        \"\"\"\n\n        if not re.match(FileInfo.REGEXES[\"title\"], file):\n            return False\n\n        doc = file\n\n        if self._is_duplicate(doc):\n            self.log(\n                \"info\",\n                \"Skipping {} as it appears to be a duplicate\".format(doc)\n            )\n            return False\n\n        parser_class = self._get_parser_class(doc)\n        if not parser_class:\n            self.log(\n                \"error\", \"No parsers could be found for {}\".format(doc))\n            return False\n\n        self.logging_group = uuid.uuid4()\n\n        self.log(\"info\", \"Consuming {}\".format(doc))\n\n        document_consumption_started.send(\n            sender=self.__class__,\n            filename=doc,\n            logging_group=self.logging_group\n        )\n\n        parsed_document = parser_class(doc)\n\n        try:\n            thumbnail = parsed_document.get_optimised_thumbnail()\n            date = parsed_document.get_date()\n            document = self._store(\n                parsed_document.get_text(),\n                doc,\n                thumbnail,\n                date\n            )\n        except ParseError as e:\n            self.log(\"error\", \"PARSE FAILURE for {}: {}\".format(doc, e))\n            parsed_document.cleanup()\n            return False\n        else:\n            parsed_document.cleanup()\n            self._cleanup_doc(doc)\n\n            self.log(\n                \"info\",\n                \"Document {} consumption finished\".format(document)\n            )\n\n            document_consumption_finished.send(\n                sender=self.__class__,\n                document=document,\n                logging_group=self.logging_group\n            )\n            return True\n\n    def _get_parser_class(self, doc):\n        \"\"\"\n        Determine the appropriate parser class based on the file\n        \"\"\"\n\n        options = []\n        for parser in self.parsers:\n            result = parser(doc)\n            if result:\n                options.append(result)\n\n        self.log(\n            \"info\",\n            \"Parsers available: {}\".format(\n                \", \".join([str(o[\"parser\"].__name__) for o in options])\n            )\n        )\n\n        if not options:\n            return None\n\n        # Return the parser with the highest weight.\n        return sorted(\n            options, key=lambda _: _[\"weight\"], reverse=True)[0][\"parser\"]\n\n    def _store(self, text, doc, thumbnail, date):\n\n        file_info = FileInfo.from_path(doc)\n\n        stats = os.stat(doc)\n\n        self.log(\"debug\", \"Saving record to database\")\n\n        created = file_info.created or date or timezone.make_aware(\n                    datetime.datetime.fromtimestamp(stats.st_mtime))\n\n        with open(doc, \"rb\") as f:\n            document = Document.objects.create(\n                correspondent=file_info.correspondent,\n                title=file_info.title,\n                content=text,\n                file_type=file_info.extension,\n                checksum=hashlib.md5(f.read()).hexdigest(),\n                created=created,\n                modified=created,\n                storage_type=self.storage_type\n            )\n\n        relevant_tags = set(list(Tag.match_all(text)) + list(file_info.tags))\n        if relevant_tags:\n            tag_names = \", \".join([t.slug for t in relevant_tags])\n            self.log(\"debug\", \"Tagging with {}\".format(tag_names))\n            document.tags.add(*relevant_tags)\n\n        # Create directory to store document in\n        document.create_source_directory()\n\n        # Safe document and thumbnail\n        self._write(document, doc, document.source_path)\n        self._write(document, thumbnail, document.thumbnail_path)\n\n        document.set_filename(document.source_filename)\n        document.save()\n\n        self.log(\"info\", \"Completed\")\n\n        return document\n\n    def _write(self, document, source, target):\n        with open(source, \"rb\") as read_file:\n            with open(target, \"wb\") as write_file:\n                if document.storage_type == Document.STORAGE_TYPE_UNENCRYPTED:\n                    write_file.write(read_file.read())\n                    return\n                self.log(\"debug\", \"Encrypting\")\n                write_file.write(GnuPG.encrypted(read_file))\n\n    def _cleanup_doc(self, doc):\n        self.log(\"debug\", \"Deleting document {}\".format(doc))\n        os.unlink(doc)\n\n    @staticmethod\n    def _is_duplicate(doc):\n        with open(doc, \"rb\") as f:\n            checksum = hashlib.md5(f.read()).hexdigest()\n        return Document.objects.filter(checksum=checksum).exists()\n"
  },
  {
    "path": "src/documents/filters.py",
    "content": "from django_filters.rest_framework import BooleanFilter, FilterSet\n\nfrom .models import Correspondent, Document, Tag\n\n\nCHAR_KWARGS = (\n    \"startswith\", \"endswith\", \"contains\",\n    \"istartswith\", \"iendswith\", \"icontains\"\n)\n\n\nclass CorrespondentFilterSet(FilterSet):\n\n    class Meta:\n        model = Correspondent\n        fields = {\n            \"name\": [\n                \"startswith\", \"endswith\", \"contains\",\n                \"istartswith\", \"iendswith\", \"icontains\"\n            ],\n            \"slug\": [\"istartswith\", \"iendswith\", \"icontains\"]\n        }\n\n\nclass TagFilterSet(FilterSet):\n\n    class Meta:\n        model = Tag\n        fields = {\n            \"name\": [\n                \"startswith\", \"endswith\", \"contains\",\n                \"istartswith\", \"iendswith\", \"icontains\"\n            ],\n            \"slug\": [\"istartswith\", \"iendswith\", \"icontains\"]\n        }\n\n\nclass DocumentFilterSet(FilterSet):\n\n    tags_empty = BooleanFilter(\n        label=\"Is tagged\",\n        field_name=\"tags\",\n        lookup_expr=\"isnull\",\n        exclude=True\n    )\n\n    class Meta:\n        model = Document\n        fields = {\n\n            \"title\": CHAR_KWARGS,\n            \"content\": (\"contains\", \"icontains\"),\n\n            \"correspondent__name\": CHAR_KWARGS,\n            \"correspondent__slug\": CHAR_KWARGS,\n\n            \"tags__name\": CHAR_KWARGS,\n            \"tags__slug\": CHAR_KWARGS,\n\n        }\n"
  },
  {
    "path": "src/documents/forms.py",
    "content": "import magic\nimport os\n\nfrom datetime import datetime\nfrom time import mktime\n\nfrom django import forms\nfrom django.conf import settings\n\nfrom .models import Document, Correspondent\n\n\nclass UploadForm(forms.Form):\n\n    TYPE_LOOKUP = {\n        \"application/pdf\": Document.TYPE_PDF,\n        \"image/png\": Document.TYPE_PNG,\n        \"image/jpeg\": Document.TYPE_JPG,\n        \"image/gif\": Document.TYPE_GIF,\n        \"image/tiff\": Document.TYPE_TIF,\n    }\n\n    correspondent = forms.CharField(\n        max_length=Correspondent._meta.get_field(\"name\").max_length,\n        required=False\n    )\n    title = forms.CharField(\n        max_length=Document._meta.get_field(\"title\").max_length,\n        required=False\n    )\n    document = forms.FileField()\n\n    def __init__(self, *args, **kwargs):\n        forms.Form.__init__(self, *args, **kwargs)\n        self._file_type = None\n\n    def clean_correspondent(self):\n        \"\"\"\n        I suppose it might look cleaner to use .get_or_create() here, but that\n        would also allow someone to fill up the db with bogus correspondents\n        before all validation was met.\n        \"\"\"\n\n        corresp = self.cleaned_data.get(\"correspondent\")\n\n        if not corresp:\n            return None\n\n        if not Correspondent.SAFE_REGEX.match(corresp) or \" - \" in corresp:\n            raise forms.ValidationError(\n                \"That correspondent name is suspicious.\")\n\n        return corresp\n\n    def clean_title(self):\n\n        title = self.cleaned_data.get(\"title\")\n\n        if not title:\n            return None\n\n        if not Correspondent.SAFE_REGEX.match(title) or \" - \" in title:\n            raise forms.ValidationError(\"That title is suspicious.\")\n\n        return title\n\n    def clean_document(self):\n\n        document = self.cleaned_data.get(\"document\").read()\n\n        with magic.Magic(flags=magic.MAGIC_MIME_TYPE) as m:\n            file_type = m.id_buffer(document)\n\n        if file_type not in self.TYPE_LOOKUP:\n            raise forms.ValidationError(\"The file type is invalid.\")\n\n        self._file_type = self.TYPE_LOOKUP[file_type]\n\n        return document\n\n    def save(self):\n        \"\"\"\n        Since the consumer already does a lot of work, it's easier just to save\n        to-be-consumed files to the consumption directory rather than have the\n        form do that as well.  Think of it as a poor-man's queue server.\n        \"\"\"\n\n        correspondent = self.cleaned_data.get(\"correspondent\")\n        title = self.cleaned_data.get(\"title\")\n        document = self.cleaned_data.get(\"document\")\n\n        t = int(mktime(datetime.now().timetuple()))\n        file_name = os.path.join(\n            settings.CONSUMPTION_DIR,\n            \"{} - {}.{}\".format(correspondent, title, self._file_type)\n        )\n\n        with open(file_name, \"wb\") as f:\n            f.write(document)\n            os.utime(file_name, times=(t, t))\n"
  },
  {
    "path": "src/documents/loggers.py",
    "content": "import logging\n\n\nclass PaperlessLogger(logging.StreamHandler):\n    \"\"\"\n    A logger smart enough to know to log some kinds of messages to the database\n    for later retrieval in a pretty interface.\n    \"\"\"\n\n    def emit(self, record):\n\n        logging.StreamHandler.emit(self, record)\n\n        # We have to do the import here or Django will barf when it tries to\n        # load this because the apps aren't loaded at that point\n        from .models import Log\n\n        kwargs = {\"message\": record.msg, \"level\": record.levelno}\n\n        if hasattr(record, \"group\"):\n            kwargs[\"group\"] = record.group\n\n        Log.objects.create(**kwargs)\n"
  },
  {
    "path": "src/documents/mail.py",
    "content": "import datetime\nimport imaplib\nimport logging\nimport os\nimport re\nimport time\nimport uuid\n\nfrom base64 import b64decode\nfrom email import policy\nfrom email.parser import BytesParser\nfrom dateutil import parser\n\nfrom django.conf import settings\n\nfrom .models import Correspondent\n\n\nclass MailFetcherError(Exception):\n    pass\n\n\nclass InvalidMessageError(MailFetcherError):\n    pass\n\n\nclass Loggable(object):\n\n    def __init__(self, group=None):\n        self.logger = logging.getLogger(__name__)\n        self.logging_group = group or uuid.uuid4()\n\n    def log(self, level, message):\n        getattr(self.logger, level)(message, extra={\n            \"group\": self.logging_group\n        })\n\n\nclass Message(Loggable):\n    \"\"\"\n    A crude, but simple email message class.  We assume that there's a subject\n    and n attachments, and that we don't care about the message body.\n    \"\"\"\n\n    SECRET = os.getenv(\"PAPERLESS_EMAIL_SECRET\")\n\n    def __init__(self, data, group=None):\n        \"\"\"\n        Cribbed heavily from\n        https://www.ianlewis.org/en/parsing-email-attachments-python\n        \"\"\"\n\n        Loggable.__init__(self, group=group)\n\n        self.subject = None\n        self.time = None\n        self.attachment = None\n\n        message = BytesParser(policy=policy.default).parsebytes(data)\n        self.subject = str(message[\"Subject\"]).replace(\"\\r\\n\", \"\")\n        self.body = str(message.get_body())\n\n        self.check_subject()\n        self.check_body()\n\n        self._set_time(message)\n\n        self.log(\"info\", 'Importing email: \"{}\"'.format(self.subject))\n\n        attachments = []\n        for part in message.walk():\n\n            content_disposition = part.get(\"Content-Disposition\")\n            if not content_disposition:\n                continue\n\n            dispositions = content_disposition.strip().split(\";\")\n            if len(dispositions) < 2:\n                continue\n\n            if not dispositions[0].lower() == \"attachment\" and \\\n               \"filename\" not in dispositions[1].lower():\n                continue\n\n            file_data = part.get_payload()\n\n            attachments.append(Attachment(\n                b64decode(file_data), content_type=part.get_content_type()))\n\n        if len(attachments) == 0:\n            raise InvalidMessageError(\n                \"There don't appear to be any attachments to this message\")\n\n        if len(attachments) > 1:\n            raise InvalidMessageError(\n                \"There's more than one attachment to this message. It cannot \"\n                \"be indexed automatically.\"\n            )\n\n        self.attachment = attachments[0]\n\n    def __bool__(self):\n        return bool(self.attachment)\n\n    def check_subject(self):\n        if self.subject is None:\n            raise InvalidMessageError(\"Message does not have a subject\")\n        if not Correspondent.SAFE_REGEX.match(self.subject):\n            raise InvalidMessageError(\"Message subject is unsafe: {}\".format(\n                self.subject))\n\n    def check_body(self):\n        if self.SECRET not in self.body:\n            raise InvalidMessageError(\"The secret wasn't in the body\")\n\n    def _set_time(self, message):\n        self.time = datetime.datetime.now()\n        message_time = message.get(\"Date\")\n        if message_time:\n            try:\n                self.time = parser.parse(message_time)\n            except (ValueError, AttributeError):\n                pass  # We assume that \"now\" is ok\n\n    @property\n    def file_name(self):\n        return \"{}.{}\".format(self.subject, self.attachment.suffix)\n\n\nclass Attachment(object):\n\n    SAFE_SUFFIX_REGEX = re.compile(\n        r\"^(application/(pdf))|(image/(png|jpeg|gif|tiff))$\")\n\n    def __init__(self, data, content_type):\n\n        self.content_type = content_type\n        self.data = data\n        self.suffix = None\n\n        m = self.SAFE_SUFFIX_REGEX.match(self.content_type)\n        if not m:\n            raise MailFetcherError(\n                \"Not-awesome file type: {}\".format(self.content_type))\n        self.suffix = m.group(2) or m.group(4)\n\n    def read(self):\n        return self.data\n\n\nclass MailFetcher(Loggable):\n\n    def __init__(self, consume=settings.CONSUMPTION_DIR):\n\n        Loggable.__init__(self)\n\n        self._connection = None\n        self._host = os.getenv(\"PAPERLESS_CONSUME_MAIL_HOST\")\n        self._port = os.getenv(\"PAPERLESS_CONSUME_MAIL_PORT\")\n        self._username = os.getenv(\"PAPERLESS_CONSUME_MAIL_USER\")\n        self._password = os.getenv(\"PAPERLESS_CONSUME_MAIL_PASS\")\n        self._inbox = os.getenv(\"PAPERLESS_CONSUME_MAIL_INBOX\", \"INBOX\")\n\n        self._enabled = bool(self._host)\n        if self._enabled and Message.SECRET is None:\n            raise MailFetcherError(\"No PAPERLESS_EMAIL_SECRET defined\")\n\n        self.last_checked = time.time()\n        self.consume = consume\n\n    def pull(self):\n        \"\"\"\n        Fetch all available mail at the target address and store it locally in\n        the consumption directory so that the file consumer can pick it up and\n        do its thing.\n        \"\"\"\n\n        if self._enabled:\n\n            # Reset the grouping id for each fetch\n            self.logging_group = uuid.uuid4()\n\n            self.log(\"debug\", \"Checking mail\")\n\n            for message in self._get_messages():\n\n                self.log(\"info\", 'Storing email: \"{}\"'.format(message.subject))\n\n                t = int(time.mktime(message.time.timetuple()))\n                file_name = os.path.join(self.consume, message.file_name)\n                with open(file_name, \"wb\") as f:\n                    f.write(message.attachment.data)\n                    os.utime(file_name, times=(t, t))\n\n        self.last_checked = time.time()\n\n    def _get_messages(self):\n\n        r = []\n        try:\n\n            self._connect()\n            self._login()\n\n            for message in self._fetch():\n                if message:\n                    r.append(message)\n\n            self._connection.expunge()\n            self._connection.close()\n            self._connection.logout()\n\n        except MailFetcherError as e:\n            self.log(\"error\", str(e))\n\n        return r\n\n    def _connect(self):\n        try:\n            self._connection = imaplib.IMAP4_SSL(self._host, self._port)\n        except OSError as e:\n            msg = \"Problem connecting to {}: {}\".format(self._host, e.strerror)\n            raise MailFetcherError(msg)\n\n    def _login(self):\n\n        login = self._connection.login(self._username, self._password)\n        if not login[0] == \"OK\":\n            raise MailFetcherError(\"Can't log into mail: {}\".format(login[1]))\n\n        inbox = self._connection.select(self._inbox)\n        if not inbox[0] == \"OK\":\n            raise MailFetcherError(\"Can't find the inbox: {}\".format(inbox[1]))\n\n    def _fetch(self):\n\n        for num in self._connection.search(None, \"ALL\")[1][0].split():\n\n            __, data = self._connection.fetch(num, \"(RFC822)\")\n\n            message = None\n            try:\n                message = Message(data[0][1], self.logging_group)\n            except InvalidMessageError as e:\n                self.log(\"error\", str(e))\n            else:\n                self._connection.store(num, \"+FLAGS\", \"\\\\Deleted\")\n\n            if message:\n                yield message\n"
  },
  {
    "path": "src/documents/management/__init__.py",
    "content": ""
  },
  {
    "path": "src/documents/management/commands/__init__.py",
    "content": ""
  },
  {
    "path": "src/documents/management/commands/change_storage_type.py",
    "content": "import os\n\nfrom django.conf import settings\nfrom django.core.management.base import BaseCommand, CommandError\nfrom termcolor import colored as coloured\n\nfrom documents.models import Document\nfrom paperless.db import GnuPG\n\n\nclass Command(BaseCommand):\n\n    help = (\n        \"This is how you migrate your stored documents from an encrypted \"\n        \"state to an unencrypted one (or vice-versa)\"\n    )\n\n    def add_arguments(self, parser):\n\n        parser.add_argument(\n            \"from\",\n            choices=(\"gpg\", \"unencrypted\"),\n            help=\"The state you want to change your documents from\"\n        )\n        parser.add_argument(\n            \"to\",\n            choices=(\"gpg\", \"unencrypted\"),\n            help=\"The state you want to change your documents to\"\n        )\n        parser.add_argument(\n            \"--passphrase\",\n            help=\"If PAPERLESS_PASSPHRASE isn't set already, you need to \"\n                 \"specify it here\"\n        )\n\n    def handle(self, *args, **options):\n\n        try:\n            print(coloured(\n                \"\\n\\nWARNING: This script is going to work directly on your \"\n                \"document originals, so\\nWARNING: you probably shouldn't run \"\n                \"this unless you've got a recent backup\\nWARNING: handy.  It \"\n                \"*should* work without a hitch, but be safe and backup your\\n\"\n                \"WARNING: stuff first.\\n\\nHit Ctrl+C to exit now, or Enter to \"\n                \"continue.\\n\\n\",\n                \"yellow\",\n                attrs=(\"bold\",)\n            ))\n            __ = input()\n        except KeyboardInterrupt:\n            return\n\n        if options[\"from\"] == options[\"to\"]:\n            raise CommandError(\n                'The \"from\" and \"to\" values can\\'t be the same.'\n            )\n\n        passphrase = options[\"passphrase\"] or settings.PASSPHRASE\n        if not passphrase:\n            raise CommandError(\n                \"Passphrase not defined.  Please set it with --passphrase or \"\n                \"by declaring it in your environment or your config.\"\n            )\n\n        if options[\"from\"] == \"gpg\" and options[\"to\"] == \"unencrypted\":\n            self.__gpg_to_unencrypted(passphrase)\n        elif options[\"from\"] == \"unencrypted\" and options[\"to\"] == \"gpg\":\n            self.__unencrypted_to_gpg(passphrase)\n\n    @staticmethod\n    def __gpg_to_unencrypted(passphrase):\n\n        encrypted_files = Document.objects.filter(\n            storage_type=Document.STORAGE_TYPE_GPG)\n\n        for document in encrypted_files:\n\n            print(coloured(\"Decrypting {}\".format(\n                document).encode('utf-8'), \"green\"))\n\n            old_paths = [document.source_path, document.thumbnail_path]\n            raw_document = GnuPG.decrypted(document.source_file, passphrase)\n            raw_thumb = GnuPG.decrypted(document.thumbnail_file, passphrase)\n\n            document.storage_type = Document.STORAGE_TYPE_UNENCRYPTED\n\n            with open(document.source_path, \"wb\") as f:\n                f.write(raw_document)\n\n            with open(document.thumbnail_path, \"wb\") as f:\n                f.write(raw_thumb)\n\n            document.save(update_fields=(\"storage_type\",))\n\n            for path in old_paths:\n                os.unlink(path)\n\n    @staticmethod\n    def __unencrypted_to_gpg(passphrase):\n\n        unencrypted_files = Document.objects.filter(\n            storage_type=Document.STORAGE_TYPE_UNENCRYPTED)\n\n        for document in unencrypted_files:\n\n            print(coloured(\"Encrypting {}\".format(document), \"green\"))\n\n            old_paths = [document.source_path, document.thumbnail_path]\n            with open(document.source_path, \"rb\") as raw_document:\n                with open(document.thumbnail_path, \"rb\") as raw_thumb:\n                    document.storage_type = Document.STORAGE_TYPE_GPG\n                    with open(document.source_path, \"wb\") as f:\n                        f.write(GnuPG.encrypted(raw_document, passphrase))\n                    with open(document.thumbnail_path, \"wb\") as f:\n                        f.write(GnuPG.encrypted(raw_thumb, passphrase))\n\n            document.save(update_fields=(\"storage_type\",))\n\n            for path in old_paths:\n                os.unlink(path)\n"
  },
  {
    "path": "src/documents/management/commands/document_consumer.py",
    "content": "import logging\nimport os\nimport time\n\nfrom django.conf import settings\nfrom django.core.management.base import BaseCommand, CommandError\n\nfrom ...consumer import Consumer, ConsumerError\nfrom ...mail import MailFetcher, MailFetcherError\n\ntry:\n    from inotify_simple import INotify, flags\nexcept ImportError:\n    INotify = flags = None\n\n\nclass Command(BaseCommand):\n    \"\"\"\n    On every iteration of an infinite loop, consume what we can from the\n    consumption directory, and fetch any mail available.\n    \"\"\"\n\n    ORIGINAL_DOCS = os.path.join(settings.MEDIA_ROOT, \"documents\", \"originals\")\n    THUMB_DOCS = os.path.join(settings.MEDIA_ROOT, \"documents\", \"thumbnails\")\n\n    def __init__(self, *args, **kwargs):\n\n        self.verbosity = 0\n        self.logger = logging.getLogger(__name__)\n\n        self.file_consumer = None\n        self.mail_fetcher = None\n        self.first_iteration = True\n\n        BaseCommand.__init__(self, *args, **kwargs)\n\n    def add_arguments(self, parser):\n        parser.add_argument(\n            \"directory\",\n            default=settings.CONSUMPTION_DIR,\n            nargs=\"?\",\n            help=\"The consumption directory.\"\n        )\n        parser.add_argument(\n            \"--loop-time\",\n            default=settings.CONSUMER_LOOP_TIME,\n            type=int,\n            help=\"Wait time between each loop (in seconds).\"\n        )\n        parser.add_argument(\n            \"--mail-delta\",\n            default=10,\n            type=int,\n            help=\"Wait time between each mail fetch (in minutes).\"\n        )\n        parser.add_argument(\n            \"--oneshot\",\n            action=\"store_true\",\n            help=\"Run only once.\"\n        )\n        parser.add_argument(\n            \"--no-inotify\",\n            action=\"store_true\",\n            help=\"Don't use inotify, even if it's available.\",\n            default=False\n        )\n\n    def handle(self, *args, **options):\n\n        self.verbosity = options[\"verbosity\"]\n        directory = options[\"directory\"]\n        loop_time = options[\"loop_time\"]\n        mail_delta = options[\"mail_delta\"] * 60\n        use_inotify = INotify is not None and options[\"no_inotify\"] is False\n\n        try:\n            self.file_consumer = Consumer(consume=directory)\n            self.mail_fetcher = MailFetcher(consume=directory)\n        except (ConsumerError, MailFetcherError) as e:\n            raise CommandError(e)\n\n        for d in (self.ORIGINAL_DOCS, self.THUMB_DOCS):\n            os.makedirs(d, exist_ok=True)\n\n        logging.getLogger(__name__).info(\n            \"Starting document consumer at {}{}\".format(\n                directory,\n                \" with inotify\" if use_inotify else \"\"\n            )\n        )\n\n        if options[\"oneshot\"]:\n            self.loop_step(mail_delta)\n        else:\n            try:\n                if use_inotify:\n                    self.loop_inotify(mail_delta)\n                else:\n                    self.loop(loop_time, mail_delta)\n            except KeyboardInterrupt:\n                print(\"Exiting\")\n\n    def loop(self, loop_time, mail_delta):\n        while True:\n            start_time = time.time()\n            if self.verbosity > 1:\n                print(\".\", int(start_time))\n            self.loop_step(mail_delta, start_time)\n            # Sleep until the start of the next loop step\n            time.sleep(max(0, start_time + loop_time - time.time()))\n\n    def loop_step(self, mail_delta, time_now=None):\n\n        # Occasionally fetch mail and store it to be consumed on the next loop\n        # We fetch email when we first start up so that it is not necessary to\n        # wait for 10 minutes after making changes to the config file.\n        next_mail_time = self.mail_fetcher.last_checked + mail_delta\n        if self.first_iteration or time_now > next_mail_time:\n            self.first_iteration = False\n            self.mail_fetcher.pull()\n\n        self.file_consumer.consume_new_files()\n\n    def loop_inotify(self, mail_delta):\n        directory = self.file_consumer.consume\n        inotify = INotify()\n        inotify.add_watch(directory, flags.CLOSE_WRITE | flags.MOVED_TO)\n\n        # Run initial mail fetch and consume all currently existing documents\n        self.loop_step(mail_delta)\n        next_mail_time = self.mail_fetcher.last_checked + mail_delta\n\n        while True:\n            # Consume documents until next_mail_time\n            while True:\n                delta = next_mail_time - time.time()\n                if delta > 0:\n                    for event in inotify.read(timeout=delta):\n                        file = os.path.join(directory, event.name)\n                        if os.path.isfile(file):\n                            self.file_consumer.try_consume_file(file)\n                        else:\n                            self.logger.warning(\n                                \"Skipping %s as it is not a file\",\n                                file\n                            )\n                else:\n                    break\n\n            self.mail_fetcher.pull()\n            next_mail_time = self.mail_fetcher.last_checked + mail_delta\n"
  },
  {
    "path": "src/documents/management/commands/document_correspondents.py",
    "content": "import sys\n\nfrom django.core.management.base import BaseCommand\n\nfrom documents.models import Correspondent, Document\n\nfrom ...mixins import Renderable\n\n\nclass Command(Renderable, BaseCommand):\n\n    help = \"\"\"\n        Using the current set of correspondent rules, apply said rules to all\n        documents in the database, effectively allowing you to back-tag all\n        previously indexed documents with correspondent created (or modified)\n        after their initial import.\n    \"\"\".replace(\"    \", \"\")\n\n    TOO_MANY_CONTINUE = (\n        \"Detected {} potential correspondents for {}, so we've opted for {}\")\n    TOO_MANY_SKIP = (\n        \"Detected {} potential correspondents for {}, so we're skipping it\")\n    CHANGE_MESSAGE = (\n        'Document {}: \"{}\" was given the correspondent id {}: \"{}\"')\n\n    def __init__(self, *args, **kwargs):\n        self.verbosity = 0\n        BaseCommand.__init__(self, *args, **kwargs)\n\n    def add_arguments(self, parser):\n        parser.add_argument(\n            \"--use-first\",\n            default=False,\n            action=\"store_true\",\n            help=\"By default this command won't try to assign a correspondent \"\n                 \"if more than one matches the document.  Use this flag if \"\n                 \"you'd rather it just pick the first one it finds.\"\n        )\n\n    def handle(self, *args, **options):\n\n        self.verbosity = options[\"verbosity\"]\n\n        for document in Document.objects.filter(correspondent__isnull=True):\n\n            potential_correspondents = list(\n                Correspondent.match_all(document.content))\n\n            if not potential_correspondents:\n                continue\n\n            potential_count = len(potential_correspondents)\n            correspondent = potential_correspondents[0]\n\n            if potential_count > 1:\n                if not options[\"use_first\"]:\n                    print(\n                        self.TOO_MANY_SKIP.format(potential_count, document),\n                        file=sys.stderr\n                    )\n                    continue\n                print(\n                    self.TOO_MANY_CONTINUE.format(\n                        potential_count,\n                        document,\n                        correspondent\n                    ),\n                    file=sys.stderr\n                )\n\n            document.correspondent = correspondent\n            document.save(update_fields=(\"correspondent\",))\n\n            print(\n                self.CHANGE_MESSAGE.format(\n                    document.pk,\n                    document.title,\n                    correspondent.pk,\n                    correspondent.name\n                ),\n                file=sys.stderr\n            )\n"
  },
  {
    "path": "src/documents/management/commands/document_exporter.py",
    "content": "import json\nimport os\nimport time\nimport shutil\n\nfrom django.core.management.base import BaseCommand, CommandError\nfrom django.core import serializers\n\nfrom documents.models import Document, Correspondent, Tag\nfrom paperless.db import GnuPG\n\nfrom ...mixins import Renderable\nfrom documents.settings import EXPORTER_FILE_NAME, EXPORTER_THUMBNAIL_NAME\n\n\nclass Command(Renderable, BaseCommand):\n\n    help = \"\"\"\n        Decrypt and rename all files in our collection into a given target\n        directory.  And include a manifest file containing document data for\n        easy import.\n    \"\"\".replace(\"    \", \"\")\n\n    def add_arguments(self, parser):\n        parser.add_argument(\"target\")\n        parser.add_argument(\n            \"--legacy\",\n            action=\"store_true\",\n            help=\"Don't try to export all of the document data, just dump the \"\n                 \"original document files out in a format that makes \"\n                 \"re-consuming them easy.\"\n        )\n\n    def __init__(self, *args, **kwargs):\n        BaseCommand.__init__(self, *args, **kwargs)\n        self.target = None\n\n    def handle(self, *args, **options):\n\n        self.target = options[\"target\"]\n\n        if not os.path.exists(self.target):\n            raise CommandError(\"That path doesn't exist\")\n\n        if not os.access(self.target, os.W_OK):\n            raise CommandError(\"That path doesn't appear to be writable\")\n\n        if options[\"legacy\"]:\n            self.dump_legacy()\n        else:\n            self.dump()\n\n    def dump(self):\n\n        documents = Document.objects.all()\n        document_map = {d.pk: d for d in documents}\n        manifest = json.loads(serializers.serialize(\"json\", documents))\n\n        for index, document_dict in enumerate(manifest):\n\n            # Force output to unencrypted as that will be the current state.\n            # The importer will make the decision to encrypt or not.\n            manifest[index][\"fields\"][\"storage_type\"] = Document.STORAGE_TYPE_UNENCRYPTED  # NOQA: E501\n\n            document = document_map[document_dict[\"pk\"]]\n\n            file_target = os.path.join(self.target, document.file_name)\n\n            thumbnail_name = document.file_name + \"-thumbnail.png\"\n            thumbnail_target = os.path.join(self.target, thumbnail_name)\n\n            document_dict[EXPORTER_FILE_NAME] = document.file_name\n            document_dict[EXPORTER_THUMBNAIL_NAME] = thumbnail_name\n\n            print(\"Exporting: {}\".format(file_target))\n\n            t = int(time.mktime(document.created.timetuple()))\n            if document.storage_type == Document.STORAGE_TYPE_GPG:\n\n                with open(file_target, \"wb\") as f:\n                    f.write(GnuPG.decrypted(document.source_file))\n                    os.utime(file_target, times=(t, t))\n\n                with open(thumbnail_target, \"wb\") as f:\n                    f.write(GnuPG.decrypted(document.thumbnail_file))\n                    os.utime(thumbnail_target, times=(t, t))\n\n            else:\n\n                shutil.copy(document.source_path, file_target)\n                shutil.copy(document.thumbnail_path, thumbnail_target)\n\n        manifest += json.loads(\n            serializers.serialize(\"json\", Correspondent.objects.all()))\n\n        manifest += json.loads(serializers.serialize(\n            \"json\", Tag.objects.all()))\n\n        with open(os.path.join(self.target, \"manifest.json\"), \"w\") as f:\n            json.dump(manifest, f, indent=2)\n\n    def dump_legacy(self):\n\n        for document in Document.objects.all():\n\n            target = os.path.join(\n                self.target, self._get_legacy_file_name(document))\n\n            print(\"Exporting: {}\".format(target))\n\n            with open(target, \"wb\") as f:\n                f.write(GnuPG.decrypted(document.source_file))\n                t = int(time.mktime(document.created.timetuple()))\n                os.utime(target, times=(t, t))\n\n    @staticmethod\n    def _get_legacy_file_name(doc):\n\n        if not doc.correspondent and not doc.title:\n            return os.path.basename(doc.source_path)\n\n        created = doc.created.strftime(\"%Y%m%d%H%M%SZ\")\n        tags = \",\".join([t.slug for t in doc.tags.all()])\n\n        if tags:\n            return \"{} - {} - {} - {}.{}\".format(\n                created, doc.correspondent, doc.title, tags, doc.file_type)\n\n        return \"{} - {} - {}.{}\".format(\n            created, doc.correspondent, doc.title, doc.file_type)\n"
  },
  {
    "path": "src/documents/management/commands/document_importer.py",
    "content": "import json\nimport os\nimport shutil\n\nfrom django.conf import settings\nfrom django.core.management.base import BaseCommand, CommandError\nfrom django.core.management import call_command\n\nfrom documents.models import Document\nfrom paperless.db import GnuPG\n\nfrom ...mixins import Renderable\n\nfrom documents.settings import EXPORTER_FILE_NAME, EXPORTER_THUMBNAIL_NAME\n\n\nclass Command(Renderable, BaseCommand):\n\n    help = \"\"\"\n        Using a manifest.json file, load the data from there, and import the\n        documents it refers to.\n    \"\"\".replace(\"    \", \"\")\n\n    def add_arguments(self, parser):\n        parser.add_argument(\"source\")\n\n    def __init__(self, *args, **kwargs):\n        BaseCommand.__init__(self, *args, **kwargs)\n        self.source = None\n        self.manifest = None\n\n    def handle(self, *args, **options):\n\n        self.source = options[\"source\"]\n\n        if not os.path.exists(self.source):\n            raise CommandError(\"That path doesn't exist\")\n\n        if not os.access(self.source, os.R_OK):\n            raise CommandError(\"That path doesn't appear to be readable\")\n\n        manifest_path = os.path.join(self.source, \"manifest.json\")\n        self._check_manifest_exists(manifest_path)\n\n        with open(manifest_path) as f:\n            self.manifest = json.load(f)\n\n        self._check_manifest()\n\n        # Fill up the database with whatever is in the manifest\n        call_command(\"loaddata\", manifest_path)\n\n        self._import_files_from_manifest()\n\n    @staticmethod\n    def _check_manifest_exists(path):\n        if not os.path.exists(path):\n            raise CommandError(\n                \"That directory doesn't appear to contain a manifest.json \"\n                \"file.\"\n            )\n\n    def _check_manifest(self):\n\n        for record in self.manifest:\n\n            if not record[\"model\"] == \"documents.document\":\n                continue\n\n            if EXPORTER_FILE_NAME not in record:\n                raise CommandError(\n                    'The manifest file contains a record which does not '\n                    'refer to an actual document file.'\n                )\n\n            doc_file = record[EXPORTER_FILE_NAME]\n            if not os.path.exists(os.path.join(self.source, doc_file)):\n                raise CommandError(\n                    'The manifest file refers to \"{}\" which does not '\n                    'appear to be in the source directory.'.format(doc_file)\n                )\n\n    def _import_files_from_manifest(self):\n\n        for record in self.manifest:\n\n            if not record[\"model\"] == \"documents.document\":\n                continue\n\n            doc_file = record[EXPORTER_FILE_NAME]\n            thumb_file = record[EXPORTER_THUMBNAIL_NAME]\n            document = Document.objects.get(pk=record[\"pk\"])\n\n            document_path = os.path.join(self.source, doc_file)\n            thumbnail_path = os.path.join(self.source, thumb_file)\n\n            if settings.PASSPHRASE:\n\n                with open(document_path, \"rb\") as unencrypted:\n                    with open(document.source_path, \"wb\") as encrypted:\n                        print(\"Encrypting {} and saving it to {}\".format(\n                            doc_file, document.source_path))\n                        encrypted.write(GnuPG.encrypted(unencrypted))\n\n                with open(thumbnail_path, \"rb\") as unencrypted:\n                    with open(document.thumbnail_path, \"wb\") as encrypted:\n                        print(\"Encrypting {} and saving it to {}\".format(\n                            thumb_file, document.thumbnail_path))\n                        encrypted.write(GnuPG.encrypted(unencrypted))\n\n            else:\n\n                shutil.copy(document_path, document.source_path)\n                shutil.copy(thumbnail_path, document.thumbnail_path)\n\n        # Reset the storage type to whatever we've used while importing\n\n        storage_type = Document.STORAGE_TYPE_UNENCRYPTED\n        if settings.PASSPHRASE:\n            storage_type = Document.STORAGE_TYPE_GPG\n\n        Document.objects.filter(\n            pk__in=[r[\"pk\"] for r in self.manifest]\n        ).update(\n            storage_type=storage_type\n        )\n"
  },
  {
    "path": "src/documents/management/commands/document_logs.py",
    "content": "from django.core.management.base import BaseCommand\n\nfrom documents.models import Log\n\n\nclass Command(BaseCommand):\n\n    help = \"A quick & dirty way to see what's in the logs\"\n\n    def handle(self, *args, **options):\n        for l in Log.objects.order_by(\"pk\"):\n            print(l)\n"
  },
  {
    "path": "src/documents/management/commands/document_renamer.py",
    "content": "from django.core.management.base import BaseCommand\n\nfrom documents.models import Document, Tag\n\nfrom ...mixins import Renderable\n\n\nclass Command(Renderable, BaseCommand):\n\n    help = \"\"\"\n        This will rename all documents to match the latest filename format.\n    \"\"\".replace(\"    \", \"\")\n\n    def __init__(self, *args, **kwargs):\n        self.verbosity = 0\n        BaseCommand.__init__(self, *args, **kwargs)\n\n    def handle(self, *args, **options):\n\n        self.verbosity = options[\"verbosity\"]\n\n        for document in Document.objects.all():\n            # Saving the document again will generate a new filename and rename\n            document.save()\n"
  },
  {
    "path": "src/documents/management/commands/document_retagger.py",
    "content": "from django.core.management.base import BaseCommand\n\nfrom documents.models import Document, Tag\n\nfrom ...mixins import Renderable\n\n\nclass Command(Renderable, BaseCommand):\n\n    help = \"\"\"\n        Using the current set of tagging rules, apply said rules to all\n        documents in the database, effectively allowing you to back-tag all\n        previously indexed documents with tags created (or modified) after\n        their initial import.\n    \"\"\".replace(\"    \", \"\")\n\n    def __init__(self, *args, **kwargs):\n        self.verbosity = 0\n        BaseCommand.__init__(self, *args, **kwargs)\n\n    def handle(self, *args, **options):\n\n        self.verbosity = options[\"verbosity\"]\n\n        for document in Document.objects.all():\n\n            tags = Tag.objects.exclude(\n                pk__in=document.tags.values_list(\"pk\", flat=True))\n\n            for tag in Tag.match_all(document.content, tags):\n                print('Tagging {} with \"{}\"'.format(document, tag))\n                document.tags.add(tag)\n"
  },
  {
    "path": "src/documents/management/commands/loaddata_stdin.py",
    "content": "import sys\n\nfrom django.core.management.commands.loaddata import Command as LoadDataCommand\n\n\nclass Command(LoadDataCommand):\n    \"\"\"\n    Allow the loading of data from standard in.  Sourced originally from:\n    https://gist.github.com/bmispelon/ad5a2c333443b3a1d051 (MIT licensed)\n    \"\"\"\n\n    def parse_name(self, fixture_name):\n        self.compression_formats['stdin'] = (lambda x, y: sys.stdin, None)\n        if fixture_name == '-':\n            return '-', 'json', 'stdin'\n\n    def find_fixtures(self, fixture_label):\n        if fixture_label == '-':\n            return [('-', None, '-')]\n        return super(Command, self).find_fixtures(fixture_label)\n"
  },
  {
    "path": "src/documents/managers.py",
    "content": "from django.conf import settings\n\nfrom django.db import models\nfrom django.db.models.aggregates import Max\n\n\nclass GroupConcat(models.Aggregate):\n    \"\"\"\n    Theoretically, this should work in Sqlite, PostgreSQL, and MySQL, but I've\n    only ever tested it in Sqlite.\n    \"\"\"\n\n    ENGINE_SQLITE = 1\n    ENGINE_POSTGRESQL = 2\n    ENGINE_MYSQL = 3\n    ENGINES = {\n        \"django.db.backends.sqlite3\": ENGINE_SQLITE,\n        \"django.db.backends.postgresql_psycopg2\": ENGINE_POSTGRESQL,\n        \"django.db.backends.postgresql\": ENGINE_POSTGRESQL,\n        \"django.db.backends.mysql\": ENGINE_MYSQL\n    }\n\n    def __init__(self, expression, separator=\"\\n\", **extra):\n\n        self.engine = self._get_engine()\n        self.function = self._get_function()\n        self.template = self._get_template(separator)\n\n        models.Aggregate.__init__(\n            self,\n            expression,\n            output_field=models.CharField(),\n            **extra\n        )\n\n    def _get_engine(self):\n        engine = settings.DATABASES[\"default\"][\"ENGINE\"]\n        try:\n            return self.ENGINES[engine]\n        except KeyError:\n            raise NotImplementedError(\n                \"There's currently no support for {} when it comes to group \"\n                \"concatenation in Paperless\".format(engine)\n            )\n\n    def _get_function(self):\n        if self.engine == self.ENGINE_POSTGRESQL:\n            return \"STRING_AGG\"\n        return \"GROUP_CONCAT\"\n\n    def _get_template(self, separator):\n        if self.engine == self.ENGINE_MYSQL:\n            return \"%(function)s(%(expressions)s SEPARATOR '{}')\".format(\n                separator)\n        return \"%(function)s(%(expressions)s, '{}')\".format(separator)\n\n\nclass LogQuerySet(models.query.QuerySet):\n\n    def by_group(self):\n        return self.values(\"group\").annotate(\n            time=Max(\"modified\"),\n            messages=GroupConcat(\"message\"),\n        ).order_by(\"-time\")\n\n\nclass LogManager(models.Manager):\n\n    def get_queryset(self):\n        return LogQuerySet(self.model, using=self._db)\n"
  },
  {
    "path": "src/documents/migrations/0001_initial.py",
    "content": "# -*- coding: utf-8 -*-\n# Generated by Django 1.9 on 2015-12-20 19:10\nfrom __future__ import unicode_literals\n\nfrom django.db import migrations, models\nfrom django.conf import settings\n\n\nclass Migration(migrations.Migration):\n\n    initial = True\n\n    dependencies = [\n    ]\n\n    operations = [\n        migrations.CreateModel(\n            name='Document',\n            fields=[\n                ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),\n                ('sender', models.CharField(blank=True, db_index=True, max_length=128)),\n                ('title', models.CharField(blank=True, db_index=True, max_length=128)),\n                ('content', models.TextField(db_index=(\"mysql\" not in settings.DATABASES[\"default\"][\"ENGINE\"]))),\n                ('created', models.DateTimeField(auto_now_add=True)),\n                ('modified', models.DateTimeField(auto_now=True)),\n            ],\n        ),\n    ]\n"
  },
  {
    "path": "src/documents/migrations/0002_auto_20151226_1316.py",
    "content": "# -*- coding: utf-8 -*-\n# Generated by Django 1.9 on 2015-12-26 13:16\nfrom __future__ import unicode_literals\n\nfrom django.db import migrations, models\nimport django.utils.timezone\n\n\nclass Migration(migrations.Migration):\n\n    dependencies = [\n        ('documents', '0001_initial'),\n    ]\n\n    operations = [\n        migrations.AlterModelOptions(\n            name='document',\n            options={'ordering': ('sender', 'title')},\n        ),\n        migrations.AlterField(\n            model_name='document',\n            name='created',\n            field=models.DateTimeField(default=django.utils.timezone.now, editable=False),\n        ),\n    ]\n"
  },
  {
    "path": "src/documents/migrations/0003_sender.py",
    "content": "# -*- coding: utf-8 -*-\n# Generated by Django 1.9 on 2016-01-11 12:21\nfrom __future__ import unicode_literals\n\nfrom django.db import migrations, models\nfrom django.template.defaultfilters import slugify\n\nimport django.db.models.deletion\n\n\nDOCUMENT_SENDER_MAP = {}\n\n\ndef move_sender_strings_to_sender_model(apps, schema_editor):\n\n    sender_model = apps.get_model(\"documents\", \"Sender\")\n    document_model = apps.get_model(\"documents\", \"Document\")\n\n    # Create the sender and log the relationship with the document\n    for document in document_model.objects.all():\n        if document.sender:\n            DOCUMENT_SENDER_MAP[document.pk], created = sender_model.objects.get_or_create(\n                name=document.sender,\n                defaults={\"slug\": slugify(document.sender)}\n            )\n\n\ndef realign_senders(apps, schema_editor):\n    document_model = apps.get_model(\"documents\", \"Document\")\n    for pk, sender in DOCUMENT_SENDER_MAP.items():\n        document_model.objects.filter(pk=pk).update(sender=sender)\n\n\nclass Migration(migrations.Migration):\n    dependencies = [\n        ('documents', '0002_auto_20151226_1316'),\n    ]\n\n    operations = [\n        migrations.CreateModel(\n            name='Sender',\n            fields=[\n                ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),\n                ('name', models.CharField(max_length=128, unique=True)),\n                ('slug', models.SlugField()),\n            ],\n        ),\n        migrations.RunPython(move_sender_strings_to_sender_model),\n        migrations.RemoveField(\n            model_name='document',\n            name='sender',\n        ),\n        migrations.AddField(\n            model_name='document',\n            name='sender',\n            field=models.ForeignKey(blank=True, on_delete=django.db.models.deletion.CASCADE, to='documents.Sender'),\n        ),\n        migrations.RunPython(realign_senders),\n    ]\n"
  },
  {
    "path": "src/documents/migrations/0004_auto_20160114_1844.py",
    "content": "# -*- coding: utf-8 -*-\n# Generated by Django 1.9 on 2016-01-14 18:44\nfrom __future__ import unicode_literals\n\nfrom django.db import migrations, models\nimport django.db.models.deletion\n\n\nclass Migration(migrations.Migration):\n\n    dependencies = [\n        ('documents', '0003_sender'),\n    ]\n\n    operations = [\n        migrations.AlterField(\n            model_name='document',\n            name='sender',\n            field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='documents', to='documents.Sender'),\n        ),\n    ]\n"
  },
  {
    "path": "src/documents/migrations/0005_auto_20160123_0313.py",
    "content": "# -*- coding: utf-8 -*-\n# Generated by Django 1.9 on 2016-01-23 03:13\nfrom __future__ import unicode_literals\n\nfrom django.db import migrations\n\n\nclass Migration(migrations.Migration):\n\n    dependencies = [\n        ('documents', '0004_auto_20160114_1844'),\n    ]\n\n    operations = [\n        migrations.AlterModelOptions(\n            name='sender',\n            options={'ordering': ('name',)},\n        ),\n    ]\n"
  },
  {
    "path": "src/documents/migrations/0006_auto_20160123_0430.py",
    "content": "# -*- coding: utf-8 -*-\n# Generated by Django 1.9 on 2016-01-23 04:30\nfrom __future__ import unicode_literals\n\nfrom django.db import migrations, models\n\n\nclass Migration(migrations.Migration):\n\n    dependencies = [\n        ('documents', '0005_auto_20160123_0313'),\n    ]\n\n    operations = [\n        migrations.CreateModel(\n            name='Tag',\n            fields=[\n                ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),\n                ('name', models.CharField(max_length=128, unique=True)),\n                ('slug', models.SlugField(blank=True)),\n                ('colour', models.PositiveIntegerField(choices=[(1, '#a6cee3'), (2, '#1f78b4'), (3, '#b2df8a'), (4, '#33a02c'), (5, '#fb9a99'), (6, '#e31a1c'), (7, '#fdbf6f'), (8, '#ff7f00'), (9, '#cab2d6'), (10, '#6a3d9a'), (11, '#ffff99'), (12, '#b15928'), (13, '#000000'), (14, '#cccccc')], default=1)),\n            ],\n            options={\n                'abstract': False,\n            },\n        ),\n        migrations.AlterField(\n            model_name='sender',\n            name='slug',\n            field=models.SlugField(blank=True),\n        ),\n        migrations.AddField(\n            model_name='document',\n            name='tags',\n            field=models.ManyToManyField(related_name='documents', to='documents.Tag'),\n        ),\n    ]\n"
  },
  {
    "path": "src/documents/migrations/0007_auto_20160126_2114.py",
    "content": "# -*- coding: utf-8 -*-\n# Generated by Django 1.9 on 2016-01-26 21:14\nfrom __future__ import unicode_literals\n\nfrom django.db import migrations, models\n\n\nclass Migration(migrations.Migration):\n\n    dependencies = [\n        ('documents', '0006_auto_20160123_0430'),\n    ]\n\n    operations = [\n        migrations.AddField(\n            model_name='tag',\n            name='match',\n            field=models.CharField(blank=True, max_length=256),\n        ),\n        migrations.AddField(\n            model_name='tag',\n            name='matching_algorithm',\n            field=models.PositiveIntegerField(blank=True, choices=[(1, 'Any'), (2, 'All'), (3, 'Literal'), (4, 'Regular Expression')], help_text='Which algorithm you want to use when matching text to the OCR\\'d PDF.  Here, \"any\" looks for any occurrence of any word provided in the PDF, while \"all\" requires that every word provided appear in the PDF, albeit not in the order provided.  A \"literal\" match means that the text you enter must appear in the PDF exactly as you\\'ve entered it, and \"regular expression\" uses a regex to match the PDF.  If you don\\'t know what a regex is, you probably don\\'t want this option.', null=True),\n        ),\n        migrations.AlterField(\n            model_name='tag',\n            name='colour',\n            field=models.PositiveIntegerField(choices=[(1, '#a6cee3'), (2, '#1f78b4'), (3, '#b2df8a'), (4, '#33a02c'), (5, '#fb9a99'), (6, '#e31a1c'), (7, '#fdbf6f'), (8, '#ff7f00'), (9, '#cab2d6'), (10, '#6a3d9a'), (11, '#b15928'), (12, '#000000'), (13, '#cccccc')], default=1),\n        ),\n    ]\n"
  },
  {
    "path": "src/documents/migrations/0008_document_file_type.py",
    "content": "# -*- coding: utf-8 -*-\n# Generated by Django 1.9 on 2016-01-29 22:58\nfrom __future__ import unicode_literals\n\nfrom django.db import migrations, models\n\n\nclass Migration(migrations.Migration):\n\n    dependencies = [\n        ('documents', '0007_auto_20160126_2114'),\n    ]\n\n    operations = [\n        migrations.AddField(\n            model_name='document',\n            name='file_type',\n            field=models.CharField(choices=[('pdf', 'PDF'), ('png', 'PNG'), ('jpg', 'JPG'), ('gif', 'GIF'), ('tiff', 'TIFF')], default='pdf', editable=False, max_length=4),\n            preserve_default=False,\n        ),\n        migrations.AlterField(\n            model_name='document',\n            name='tags',\n            field=models.ManyToManyField(blank=True, related_name='documents', to='documents.Tag'),\n        ),\n    ]\n\n"
  },
  {
    "path": "src/documents/migrations/0009_auto_20160214_0040.py",
    "content": "# -*- coding: utf-8 -*-\n# Generated by Django 1.9 on 2016-02-14 00:40\nfrom __future__ import unicode_literals\n\nfrom django.db import migrations, models\n\n\nclass Migration(migrations.Migration):\n\n    dependencies = [\n        ('documents', '0008_document_file_type'),\n    ]\n\n    operations = [\n        migrations.AlterField(\n            model_name='tag',\n            name='matching_algorithm',\n            field=models.PositiveIntegerField(choices=[(1, 'Any'), (2, 'All'), (3, 'Literal'), (4, 'Regular Expression')], default=1, help_text='Which algorithm you want to use when matching text to the OCR\\'d PDF.  Here, \"any\" looks for any occurrence of any word provided in the PDF, while \"all\" requires that every word provided appear in the PDF, albeit not in the order provided.  A \"literal\" match means that the text you enter must appear in the PDF exactly as you\\'ve entered it, and \"regular expression\" uses a regex to match the PDF.  If you don\\'t know what a regex is, you probably don\\'t want this option.'),\n        ),\n    ]\n"
  },
  {
    "path": "src/documents/migrations/0010_log.py",
    "content": "# -*- coding: utf-8 -*-\n# Generated by Django 1.9 on 2016-02-27 17:54\nfrom __future__ import unicode_literals\n\nfrom django.db import migrations, models\n\n\nclass Migration(migrations.Migration):\n\n    dependencies = [\n        ('documents', '0009_auto_20160214_0040'),\n    ]\n\n    operations = [\n        migrations.CreateModel(\n            name='Log',\n            fields=[\n                ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),\n                ('group', models.UUIDField(blank=True)),\n                ('message', models.TextField()),\n                ('level', models.PositiveIntegerField(choices=[(10, 'Debugging'), (20, 'Informational'), (30, 'Warning'), (40, 'Error'), (50, 'Critical')], default=20)),\n                ('component', models.PositiveIntegerField(choices=[(1, 'Consumer'), (2, 'Mail Fetcher')])),\n                ('created', models.DateTimeField(auto_now_add=True)),\n                ('modified', models.DateTimeField(auto_now=True)),\n            ],\n            options={\n                'ordering': ('-modified',),\n            },\n        ),\n    ]\n"
  },
  {
    "path": "src/documents/migrations/0011_auto_20160303_1929.py",
    "content": "# -*- coding: utf-8 -*-\n# Generated by Django 1.9.2 on 2016-03-03 19:29\nfrom __future__ import unicode_literals\n\nfrom django.db import migrations\n\n\nclass Migration(migrations.Migration):\n    atomic = False\n    dependencies = [\n        ('documents', '0010_log'),\n    ]\n\n    operations = [\n        migrations.RenameModel(\n            old_name='Sender',\n            new_name='Correspondent',\n        ),\n        migrations.AlterModelOptions(\n            name='document',\n            options={'ordering': ('correspondent', 'title')},\n        ),\n        migrations.RenameField(\n            model_name='document',\n            old_name='sender',\n            new_name='correspondent',\n        ),\n    ]\n"
  },
  {
    "path": "src/documents/migrations/0012_auto_20160305_0040.py",
    "content": "# -*- coding: utf-8 -*-\n# Generated by Django 1.9.2 on 2016-03-05 00:40\nfrom __future__ import unicode_literals\n\nimport gnupg\nimport os\nimport re\nimport shutil\nimport subprocess\nimport tempfile\n\nfrom django.conf import settings\nfrom django.db import migrations\nfrom django.utils.termcolors import colorize as colourise  # Spelling hurts me\n\n\nclass GnuPG(object):\n    \"\"\"\n    A handy singleton to use when handling encrypted files.\n    \"\"\"\n\n    gpg = gnupg.GPG(gnupghome=settings.GNUPG_HOME)\n\n    @classmethod\n    def decrypted(cls, file_handle):\n        return cls.gpg.decrypt_file(\n            file_handle, passphrase=settings.PASSPHRASE).data\n\n    @classmethod\n    def encrypted(cls, file_handle):\n        return cls.gpg.encrypt_file(\n            file_handle,\n            recipients=None,\n            passphrase=settings.PASSPHRASE,\n            symmetric=True\n        ).data\n\n\ndef move_documents_and_create_thumbnails(apps, schema_editor):\n\n    os.makedirs(os.path.join(settings.MEDIA_ROOT, \"documents\", \"originals\"), exist_ok=True)\n    os.makedirs(os.path.join(settings.MEDIA_ROOT, \"documents\", \"thumbnails\"), exist_ok=True)\n\n    documents = os.listdir(os.path.join(settings.MEDIA_ROOT, \"documents\"))\n\n    if set(documents) == {\"originals\", \"thumbnails\"}:\n        return\n\n    print(colourise(\n        \"\\n\\n\"\n        \"  This is a one-time only migration to generate thumbnails for all of your\\n\"\n        \"  documents so that future UIs will have something to work with.  If you have\\n\"\n        \"  a lot of documents though, this may take a while, so a coffee break may be\\n\"\n        \"  in order.\"\n        \"\\n\", opts=(\"bold\",)\n    ))\n\n    try:\n        os.makedirs(settings.SCRATCH_DIR)\n    except FileExistsError:\n        pass\n\n    for f in sorted(documents):\n\n        if not f.endswith(\"gpg\"):\n            continue\n\n        print(\"    {} {} {}\".format(\n            colourise(\"*\", fg=\"green\"),\n            colourise(\"Generating a thumbnail for\", fg=\"white\"),\n            colourise(f, fg=\"cyan\")\n        ))\n\n        thumb_temp = tempfile.mkdtemp(\n            prefix=\"paperless\", dir=settings.SCRATCH_DIR)\n        orig_temp = tempfile.mkdtemp(\n            prefix=\"paperless\", dir=settings.SCRATCH_DIR)\n\n        orig_source = os.path.join(settings.MEDIA_ROOT, \"documents\", f)\n        orig_target = os.path.join(orig_temp, f.replace(\".gpg\", \"\"))\n\n        with open(orig_source, \"rb\") as encrypted:\n            with open(orig_target, \"wb\") as unencrypted:\n                unencrypted.write(GnuPG.decrypted(encrypted))\n\n        subprocess.Popen((\n            settings.CONVERT_BINARY,\n            \"-scale\", \"500x5000\",\n            \"-alpha\", \"remove\",\n            orig_target,\n            os.path.join(thumb_temp, \"convert-%04d.png\")\n        )).wait()\n\n        thumb_source = os.path.join(thumb_temp, \"convert-0000.png\")\n        thumb_target = os.path.join(\n            settings.MEDIA_ROOT,\n            \"documents\",\n            \"thumbnails\",\n            re.sub(r\"(\\d+)\\.\\w+(\\.gpg)\", \"\\\\1.png\\\\2\", f)\n        )\n        with open(thumb_source, \"rb\") as unencrypted:\n            with open(thumb_target, \"wb\") as encrypted:\n                encrypted.write(GnuPG.encrypted(unencrypted))\n\n        shutil.rmtree(thumb_temp)\n        shutil.rmtree(orig_temp)\n\n        shutil.move(\n            os.path.join(settings.MEDIA_ROOT, \"documents\", f),\n            os.path.join(settings.MEDIA_ROOT, \"documents\", \"originals\", f),\n        )\n\n\nclass Migration(migrations.Migration):\n    dependencies = [\n        ('documents', '0011_auto_20160303_1929'),\n    ]\n\n    operations = [\n        migrations.RunPython(move_documents_and_create_thumbnails),\n    ]\n"
  },
  {
    "path": "src/documents/migrations/0013_auto_20160325_2111.py",
    "content": "# -*- coding: utf-8 -*-\n# Generated by Django 1.9.4 on 2016-03-25 21:11\nfrom __future__ import unicode_literals\n\nfrom django.db import migrations, models\nimport django.utils.timezone\n\n\nclass Migration(migrations.Migration):\n\n    dependencies = [\n        ('documents', '0012_auto_20160305_0040'),\n    ]\n\n    operations = [\n        migrations.AddField(\n            model_name='correspondent',\n            name='match',\n            field=models.CharField(blank=True, max_length=256),\n        ),\n        migrations.AddField(\n            model_name='correspondent',\n            name='matching_algorithm',\n            field=models.PositiveIntegerField(choices=[(1, 'Any'), (2, 'All'), (3, 'Literal'), (4, 'Regular Expression')], default=1, help_text='Which algorithm you want to use when matching text to the OCR\\'d PDF.  Here, \"any\" looks for any occurrence of any word provided in the PDF, while \"all\" requires that every word provided appear in the PDF, albeit not in the order provided.  A \"literal\" match means that the text you enter must appear in the PDF exactly as you\\'ve entered it, and \"regular expression\" uses a regex to match the PDF.  If you don\\'t know what a regex is, you probably don\\'t want this option.'),\n        ),\n        migrations.AlterField(\n            model_name='document',\n            name='created',\n            field=models.DateTimeField(default=django.utils.timezone.now),\n        ),\n        migrations.RemoveField(\n            model_name='log',\n            name='component',\n        ),\n    ]\n"
  },
  {
    "path": "src/documents/migrations/0014_document_checksum.py",
    "content": "# -*- coding: utf-8 -*-\n# Generated by Django 1.9.4 on 2016-03-28 19:09\nfrom __future__ import unicode_literals\n\nimport gnupg\nimport hashlib\nimport os\n\nimport django.utils.timezone\nfrom django.conf import settings\nfrom django.db import migrations, models\nfrom django.template.defaultfilters import slugify\nfrom django.utils.termcolors import colorize as colourise  # Spelling hurts me\n\n\nclass GnuPG(object):\n    \"\"\"\n    A handy singleton to use when handling encrypted files.\n    \"\"\"\n\n    gpg = gnupg.GPG(gnupghome=settings.GNUPG_HOME)\n\n    @classmethod\n    def decrypted(cls, file_handle):\n        return cls.gpg.decrypt_file(\n            file_handle, passphrase=settings.PASSPHRASE).data\n\n    @classmethod\n    def encrypted(cls, file_handle):\n        return cls.gpg.encrypt_file(\n            file_handle,\n            recipients=None,\n            passphrase=settings.PASSPHRASE,\n            symmetric=True\n        ).data\n\n\nclass Document(object):\n    \"\"\"\n    Django's migrations restrict access to model methods, so this is a snapshot\n    of the methods that existed at the time this migration was written, since\n    we need to make use of a lot of these shortcuts here.\n    \"\"\"\n\n    def __init__(self, doc):\n        self.pk = doc.pk\n        self.correspondent = doc.correspondent\n        self.title = doc.title\n        self.file_type = doc.file_type\n        self.tags = doc.tags\n        self.created = doc.created\n\n    def __str__(self):\n        created = self.created.strftime(\"%Y%m%d%H%M%S\")\n        if self.correspondent and self.title:\n            return \"{}: {} - {}\".format(\n                created, self.correspondent, self.title)\n        if self.correspondent or self.title:\n            return \"{}: {}\".format(created, self.correspondent or self.title)\n        return str(created)\n\n    @property\n    def source_path(self):\n        return os.path.join(\n            settings.MEDIA_ROOT,\n            \"documents\",\n            \"originals\",\n            \"{:07}.{}.gpg\".format(self.pk, self.file_type)\n        )\n\n    @property\n    def source_file(self):\n        return open(self.source_path, \"rb\")\n\n    @property\n    def file_name(self):\n        return slugify(str(self)) + \".\" + self.file_type\n\n\ndef set_checksums(apps, schema_editor):\n\n    document_model = apps.get_model(\"documents\", \"Document\")\n\n    if not document_model.objects.all().exists():\n        return\n\n    print(colourise(\n        \"\\n\\n\"\n        \"  This is a one-time only migration to generate checksums for all\\n\"\n        \"  of your existing documents.  If you have a lot of documents\\n\"\n        \"  though, this may take a while, so a coffee break may be in\\n\"\n        \"  order.\"\n        \"\\n\", opts=(\"bold\",)\n    ))\n\n    sums = {}\n    for d in document_model.objects.all():\n\n        document = Document(d)\n\n        print(\"    {} {} {}\".format(\n            colourise(\"*\", fg=\"green\"),\n            colourise(\"Generating a checksum for\", fg=\"white\"),\n            colourise(document.file_name, fg=\"cyan\")\n        ))\n\n        with document.source_file as encrypted:\n            checksum = hashlib.md5(GnuPG.decrypted(encrypted)).hexdigest()\n\n        if checksum in sums:\n            error = \"\\n{line}{p1}\\n\\n{doc1}\\n{doc2}\\n\\n{p2}\\n\\n{code}\\n\\n{p3}{line}\".format(\n                p1=colourise(\"It appears that you have two identical documents in your collection and \\nPaperless no longer supports this (see issue #97).  The documents in question\\nare:\", fg=\"yellow\"),\n                p2=colourise(\"To fix this problem, you'll have to remove one of them from the database, a task\\nmost easily done by running the following command in the same\\ndirectory as manage.py:\", fg=\"yellow\"),\n                p3=colourise(\"When that's finished, re-run the migrate, and provided that there aren't any\\nother duplicates, you should be good to go.\", fg=\"yellow\"),\n                doc1=colourise(\"  * {} (id: {})\".format(sums[checksum][1], sums[checksum][0]), fg=\"red\"),\n                doc2=colourise(\"  * {} (id: {})\".format(document.file_name, document.pk), fg=\"red\"),\n                code=colourise(\"  $ echo 'DELETE FROM documents_document WHERE id = {pk};' | ./manage.py dbshell\".format(pk=document.pk), fg=\"green\"),\n                line=colourise(\"\\n{}\\n\".format(\"=\" * 80), fg=\"white\", opts=(\"bold\",))\n            )\n            raise RuntimeError(error)\n        sums[checksum] = (document.pk, document.file_name)\n\n        document_model.objects.filter(pk=document.pk).update(checksum=checksum)\n\n\ndef do_nothing(apps, schema_editor):\n    pass\n\n\nclass Migration(migrations.Migration):\n    dependencies = [\n        ('documents', '0013_auto_20160325_2111'),\n    ]\n\n    operations = [\n        migrations.AddField(\n            model_name='document',\n            name='checksum',\n            field=models.CharField(\n                default='-',\n                db_index=True,\n                editable=False,\n                max_length=32,\n                help_text='The checksum of the original document (before it '\n                          'was encrypted).  We use this to prevent duplicate '\n                          'document imports.',\n            ),\n            preserve_default=False,\n        ),\n        migrations.RunPython(set_checksums, do_nothing),\n        migrations.AlterField(\n            model_name='document',\n            name='created',\n            field=models.DateTimeField(db_index=True, default=django.utils.timezone.now),\n        ),\n        migrations.AlterField(\n            model_name='document',\n            name='modified',\n            field=models.DateTimeField(auto_now=True, db_index=True),\n        ),\n    ]\n"
  },
  {
    "path": "src/documents/migrations/0015_add_insensitive_to_match.py",
    "content": "# -*- coding: utf-8 -*-\n# Generated by Django 1.10.2 on 2016-10-05 21:38\nfrom __future__ import unicode_literals\n\nfrom django.db import migrations, models\n\n\nclass Migration(migrations.Migration):\n\n    dependencies = [\n        ('documents', '0014_document_checksum'),\n    ]\n\n    operations = [\n        migrations.AlterField(\n            model_name='document',\n            name='checksum',\n            field=models.CharField(editable=False, help_text='The checksum of the original document (before it was encrypted).  We use this to prevent duplicate document imports.', max_length=32, unique=True),\n        ),\n        migrations.AddField(\n            model_name='correspondent',\n            name='is_insensitive',\n            field=models.BooleanField(default=True),\n        ),\n        migrations.AddField(\n            model_name='tag',\n            name='is_insensitive',\n            field=models.BooleanField(default=True),\n        ),\n    ]\n"
  },
  {
    "path": "src/documents/migrations/0016_auto_20170325_1558.py",
    "content": "# -*- coding: utf-8 -*-\n# Generated by Django 1.10.5 on 2017-03-25 15:58\nfrom __future__ import unicode_literals\n\nfrom django.db import migrations, models\nfrom django.conf import settings\n\n\nclass Migration(migrations.Migration):\n\n    dependencies = [\n        ('documents', '0015_add_insensitive_to_match'),\n    ]\n\n    operations = [\n        migrations.AlterField(\n            model_name='document',\n            name='content',\n            field=models.TextField(blank=True, db_index=(\"mysql\" not in settings.DATABASES[\"default\"][\"ENGINE\"]), help_text='The raw, text-only data of the document.  This field is primarily used for searching.'),\n        ),\n    ]\n"
  },
  {
    "path": "src/documents/migrations/0017_auto_20170512_0507.py",
    "content": "# -*- coding: utf-8 -*-\n# Generated by Django 1.10.5 on 2017-05-12 05:07\nfrom __future__ import unicode_literals\n\nfrom django.db import migrations, models\n\n\nclass Migration(migrations.Migration):\n\n    dependencies = [\n        ('documents', '0016_auto_20170325_1558'),\n    ]\n\n    operations = [\n        migrations.AlterField(\n            model_name='correspondent',\n            name='matching_algorithm',\n            field=models.PositiveIntegerField(choices=[(1, 'Any'), (2, 'All'), (3, 'Literal'), (4, 'Regular Expression'), (5, 'Fuzzy Match')], default=1, help_text='Which algorithm you want to use when matching text to the OCR\\'d PDF.  Here, \"any\" looks for any occurrence of any word provided in the PDF, while \"all\" requires that every word provided appear in the PDF, albeit not in the order provided.  A \"literal\" match means that the text you enter must appear in the PDF exactly as you\\'ve entered it, and \"regular expression\" uses a regex to match the PDF.  (If you don\\'t know what a regex is, you probably don\\'t want this option.)  Finally, a \"fuzzy match\" looks for words or phrases that are mostly—but not exactly—the same, which can be useful for matching against documents containg imperfections that foil accurate OCR.'),\n        ),\n        migrations.AlterField(\n            model_name='tag',\n            name='matching_algorithm',\n            field=models.PositiveIntegerField(choices=[(1, 'Any'), (2, 'All'), (3, 'Literal'), (4, 'Regular Expression'), (5, 'Fuzzy Match')], default=1, help_text='Which algorithm you want to use when matching text to the OCR\\'d PDF.  Here, \"any\" looks for any occurrence of any word provided in the PDF, while \"all\" requires that every word provided appear in the PDF, albeit not in the order provided.  A \"literal\" match means that the text you enter must appear in the PDF exactly as you\\'ve entered it, and \"regular expression\" uses a regex to match the PDF.  (If you don\\'t know what a regex is, you probably don\\'t want this option.)  Finally, a \"fuzzy match\" looks for words or phrases that are mostly—but not exactly—the same, which can be useful for matching against documents containg imperfections that foil accurate OCR.'),\n        ),\n    ]\n"
  },
  {
    "path": "src/documents/migrations/0018_auto_20170715_1712.py",
    "content": "# -*- coding: utf-8 -*-\n# Generated by Django 1.10.5 on 2017-07-15 17:12\nfrom __future__ import unicode_literals\n\nfrom django.db import migrations, models\nimport django.db.models.deletion\n\n\nclass Migration(migrations.Migration):\n\n    dependencies = [\n        ('documents', '0017_auto_20170512_0507'),\n    ]\n\n    operations = [\n        migrations.AlterField(\n            model_name='document',\n            name='correspondent',\n            field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='documents', to='documents.Correspondent'),\n        ),\n    ]\n"
  },
  {
    "path": "src/documents/migrations/0019_add_consumer_user.py",
    "content": "# -*- coding: utf-8 -*-\n# Generated by Django 1.10.5 on 2017-07-15 17:12\nfrom __future__ import unicode_literals\n\nfrom django.contrib.auth.models import User\nfrom django.db import migrations\n\n\ndef forwards_func(apps, schema_editor):\n    User.objects.create(username=\"consumer\")\n\n\ndef reverse_func(apps, schema_editor):\n    User.objects.get(username=\"consumer\").delete()\n\n\nclass Migration(migrations.Migration):\n    dependencies = [\n        ('documents', '0018_auto_20170715_1712'),\n    ]\n\n    operations = [\n        migrations.RunPython(forwards_func, reverse_func),\n    ]\n"
  },
  {
    "path": "src/documents/migrations/0020_document_added.py",
    "content": "# -*- coding: utf-8 -*-\nfrom __future__ import unicode_literals\n\nfrom django.db import migrations, models\nimport django.utils.timezone\n\n\ndef set_added_time_to_created_time(apps, schema_editor):\n    Document = apps.get_model(\"documents\", \"Document\")\n    for doc in Document.objects.all():\n        doc.added = doc.created\n        doc.save()\n\n\nclass Migration(migrations.Migration):\n    dependencies = [\n        ('documents', '0019_add_consumer_user'),\n    ]\n\n    operations = [\n        migrations.AddField(\n            model_name='document',\n            name='added',\n            field=models.DateTimeField(db_index=True, default=django.utils.timezone.now, editable=False),\n        ),\n        migrations.RunPython(set_added_time_to_created_time)\n    ]\n"
  },
  {
    "path": "src/documents/migrations/0021_document_storage_type.py",
    "content": "# -*- coding: utf-8 -*-\n# Generated by Django 1.11.10 on 2018-02-04 13:07\nfrom __future__ import unicode_literals\n\nfrom django.db import migrations, models\n\n\nclass Migration(migrations.Migration):\n\n    dependencies = [\n        ('documents', '0020_document_added'),\n    ]\n\n    operations = [\n\n        # Add the field with the default GPG-encrypted value\n        migrations.AddField(\n            model_name='document',\n            name='storage_type',\n            field=models.CharField(choices=[('unencrypted', 'Unencrypted'), ('gpg', 'Encrypted with GNU Privacy Guard')], default='gpg', editable=False, max_length=11),\n        ),\n\n        # Now that the field is added, change the default to unencrypted\n        migrations.AlterField(\n            model_name='document',\n            name='storage_type',\n            field=models.CharField(choices=[('unencrypted', 'Unencrypted'), ('gpg', 'Encrypted with GNU Privacy Guard')], default='unencrypted', editable=False, max_length=11),\n        ),\n\n    ]\n"
  },
  {
    "path": "src/documents/migrations/0022_auto_20181007_1420.py",
    "content": "# Generated by Django 2.0.8 on 2018-10-07 14:20\n\nfrom django.db import migrations, models\nfrom django.utils.text import slugify\n\n\ndef re_slug_all_the_things(apps, schema_editor):\n    \"\"\"\n    Rewrite all slug values to make sure they're actually slugs before we brand\n    them as uneditable.\n    \"\"\"\n\n    Tag = apps.get_model(\"documents\", \"Tag\")\n    Correspondent = apps.get_model(\"documents\", \"Correspondent\")\n\n    for klass in (Tag, Correspondent):\n        for instance in klass.objects.all():\n            klass.objects.filter(\n                pk=instance.pk\n            ).update(\n                slug=slugify(instance.slug)\n            )\n\n\nclass Migration(migrations.Migration):\n\n    dependencies = [\n        ('documents', '0021_document_storage_type'),\n    ]\n\n    operations = [\n        migrations.AlterModelOptions(\n            name='tag',\n            options={'ordering': ('name',)},\n        ),\n        migrations.AlterField(\n            model_name='correspondent',\n            name='slug',\n            field=models.SlugField(blank=True, editable=False),\n        ),\n        migrations.AlterField(\n            model_name='document',\n            name='file_type',\n            field=models.CharField(choices=[('pdf', 'PDF'), ('png', 'PNG'), ('jpg', 'JPG'), ('gif', 'GIF'), ('tiff', 'TIFF'), ('txt', 'TXT'), ('csv', 'CSV'), ('md', 'MD')], editable=False, max_length=4),\n        ),\n        migrations.AlterField(\n            model_name='tag',\n            name='slug',\n            field=models.SlugField(blank=True, editable=False),\n        ),\n        migrations.RunPython(re_slug_all_the_things, migrations.RunPython.noop)\n    ]\n"
  },
  {
    "path": "src/documents/migrations/0023_document_current_filename.py",
    "content": "# Generated by Django 2.0.10 on 2019-04-26 18:57\n\nfrom django.db import migrations, models\n\n\ndef set_filename(apps, schema_editor):\n    Document = apps.get_model(\"documents\", \"Document\")\n    for doc in Document.objects.all():\n        file_name = \"{:07}.{}\".format(doc.pk, doc.file_type)\n        if doc.storage_type == \"gpg\":\n            file_name += \".gpg\"\n\n        # Set filename\n        doc.filename = file_name\n\n        # Save document\n        doc.save()\n\n\nclass Migration(migrations.Migration):\n\n    dependencies = [\n        ('documents', '0022_auto_20181007_1420'),\n    ]\n\n    operations = [\n        migrations.AddField(\n            model_name='document',\n            name='filename',\n            field=models.FilePathField(default=None,\n                                       null=True,\n                                       editable=False,\n                                       help_text='Current filename in storage',\n                                       max_length=256),\n        ),\n        migrations.RunPython(set_filename)\n    ]\n"
  },
  {
    "path": "src/documents/migrations/__init__.py",
    "content": ""
  },
  {
    "path": "src/documents/mixins.py",
    "content": "class Renderable:\n    \"\"\"\n    A handy mixin to make it easier/cleaner to print output based on a\n    verbosity value.\n    \"\"\"\n\n    def _render(self, text, verbosity):\n        if self.verbosity >= verbosity:\n            print(text)\n"
  },
  {
    "path": "src/documents/models.py",
    "content": "# coding=utf-8\n\nimport logging\nimport os\nimport re\nimport uuid\nfrom collections import OrderedDict\n\nimport dateutil.parser\nfrom django.dispatch import receiver\nfrom django.conf import settings\nfrom django.db import models\nfrom django.template.defaultfilters import slugify\nfrom django.utils import timezone\nfrom django.utils.text import slugify\nfrom fuzzywuzzy import fuzz\nfrom collections import defaultdict\n\nfrom .managers import LogManager\n\ntry:\n    from django.core.urlresolvers import reverse\nexcept ImportError:\n    from django.urls import reverse\n\n\nclass MatchingModel(models.Model):\n\n    MATCH_ANY = 1\n    MATCH_ALL = 2\n    MATCH_LITERAL = 3\n    MATCH_REGEX = 4\n    MATCH_FUZZY = 5\n    MATCHING_ALGORITHMS = (\n        (MATCH_ANY, \"Any\"),\n        (MATCH_ALL, \"All\"),\n        (MATCH_LITERAL, \"Literal\"),\n        (MATCH_REGEX, \"Regular Expression\"),\n        (MATCH_FUZZY, \"Fuzzy Match\"),\n    )\n\n    name = models.CharField(max_length=128, unique=True)\n    slug = models.SlugField(blank=True, editable=False)\n\n    match = models.CharField(max_length=256, blank=True)\n    matching_algorithm = models.PositiveIntegerField(\n        choices=MATCHING_ALGORITHMS,\n        default=MATCH_ANY,\n        help_text=(\n            \"Which algorithm you want to use when matching text to the OCR'd \"\n            \"PDF.  Here, \\\"any\\\" looks for any occurrence of any word \"\n            \"provided in the PDF, while \\\"all\\\" requires that every word \"\n            \"provided appear in the PDF, albeit not in the order provided.  A \"\n            \"\\\"literal\\\" match means that the text you enter must appear in \"\n            \"the PDF exactly as you've entered it, and \\\"regular expression\\\" \"\n            \"uses a regex to match the PDF.  (If you don't know what a regex \"\n            \"is, you probably don't want this option.)  Finally, a \\\"fuzzy \"\n            \"match\\\" looks for words or phrases that are mostly—but not \"\n            \"exactly—the same, which can be useful for matching against \"\n            \"documents containg imperfections that foil accurate OCR.\"\n        )\n    )\n\n    is_insensitive = models.BooleanField(default=True)\n\n    class Meta:\n        abstract = True\n        ordering = (\"name\",)\n\n    def __str__(self):\n        return self.name\n\n    @property\n    def conditions(self):\n        return \"{}: \\\"{}\\\" ({})\".format(\n            self.name, self.match, self.get_matching_algorithm_display())\n\n    @classmethod\n    def match_all(cls, text, tags=None):\n\n        if tags is None:\n            tags = cls.objects.all()\n\n        text = text.lower()\n        for tag in tags:\n            if tag.matches(text):\n                yield tag\n\n    def matches(self, text):\n\n        search_kwargs = {}\n\n        # Check that match is not empty\n        if self.match.strip() == \"\":\n            return False\n\n        if self.is_insensitive:\n            search_kwargs = {\"flags\": re.IGNORECASE}\n\n        if self.matching_algorithm == self.MATCH_ALL:\n            for word in self._split_match():\n                search_result = re.search(\n                    r\"\\b{}\\b\".format(word), text, **search_kwargs)\n                if not search_result:\n                    return False\n            return True\n\n        if self.matching_algorithm == self.MATCH_ANY:\n            for word in self._split_match():\n                if re.search(r\"\\b{}\\b\".format(word), text, **search_kwargs):\n                    return True\n            return False\n\n        if self.matching_algorithm == self.MATCH_LITERAL:\n            return bool(re.search(\n                r\"\\b{}\\b\".format(self.match), text, **search_kwargs))\n\n        if self.matching_algorithm == self.MATCH_REGEX:\n            return bool(re.search(\n                re.compile(self.match, **search_kwargs), text))\n\n        if self.matching_algorithm == self.MATCH_FUZZY:\n            match = re.sub(r'[^\\w\\s]', '', self.match)\n            text = re.sub(r'[^\\w\\s]', '', text)\n            if self.is_insensitive:\n                match = match.lower()\n                text = text.lower()\n\n            return True if fuzz.partial_ratio(match, text) >= 90 else False\n\n        raise NotImplementedError(\"Unsupported matching algorithm\")\n\n    def _split_match(self):\n        \"\"\"\n        Splits the match to individual keywords, getting rid of unnecessary\n        spaces and grouping quoted words together.\n\n        Example:\n          '  some random  words \"with   quotes  \" and   spaces'\n            ==>\n          [\"some\", \"random\", \"words\", \"with+quotes\", \"and\", \"spaces\"]\n        \"\"\"\n        findterms = re.compile(r'\"([^\"]+)\"|(\\S+)').findall\n        normspace = re.compile(r\"\\s+\").sub\n        return [\n            normspace(\" \", (t[0] or t[1]).strip()).replace(\" \", r\"\\s+\")\n            for t in findterms(self.match)\n        ]\n\n    def save(self, *args, **kwargs):\n\n        self.match = self.match.lower()\n        self.slug = slugify(self.name)\n\n        models.Model.save(self, *args, **kwargs)\n\n\nclass Correspondent(MatchingModel):\n\n    # This regex is probably more restrictive than it needs to be, but it's\n    # better safe than sorry.\n    SAFE_REGEX = re.compile(r\"^[\\w\\- ,.']+$\")\n\n    class Meta:\n        ordering = (\"name\",)\n\n\nclass Tag(MatchingModel):\n\n    COLOURS = (\n        (1, \"#a6cee3\"),\n        (2, \"#1f78b4\"),\n        (3, \"#b2df8a\"),\n        (4, \"#33a02c\"),\n        (5, \"#fb9a99\"),\n        (6, \"#e31a1c\"),\n        (7, \"#fdbf6f\"),\n        (8, \"#ff7f00\"),\n        (9, \"#cab2d6\"),\n        (10, \"#6a3d9a\"),\n        (11, \"#b15928\"),\n        (12, \"#000000\"),\n        (13, \"#cccccc\")\n    )\n\n    colour = models.PositiveIntegerField(choices=COLOURS, default=1)\n\n\nclass Document(models.Model):\n\n    TYPE_PDF = \"pdf\"\n    TYPE_PNG = \"png\"\n    TYPE_JPG = \"jpg\"\n    TYPE_GIF = \"gif\"\n    TYPE_TIF = \"tiff\"\n    TYPE_TXT = \"txt\"\n    TYPE_CSV = \"csv\"\n    TYPE_MD = \"md\"\n    TYPES = (TYPE_PDF, TYPE_PNG, TYPE_JPG, TYPE_GIF, TYPE_TIF,\n             TYPE_TXT, TYPE_CSV, TYPE_MD)\n\n    STORAGE_TYPE_UNENCRYPTED = \"unencrypted\"\n    STORAGE_TYPE_GPG = \"gpg\"\n    STORAGE_TYPES = (\n        (STORAGE_TYPE_UNENCRYPTED, \"Unencrypted\"),\n        (STORAGE_TYPE_GPG, \"Encrypted with GNU Privacy Guard\")\n    )\n\n    correspondent = models.ForeignKey(\n        Correspondent,\n        blank=True,\n        null=True,\n        related_name=\"documents\",\n        on_delete=models.SET_NULL\n    )\n\n    title = models.CharField(max_length=128, blank=True, db_index=True)\n\n    content = models.TextField(\n        db_index=True,\n        blank=True,\n        help_text=\"The raw, text-only data of the document.  This field is \"\n                  \"primarily used for searching.\"\n    )\n\n    file_type = models.CharField(\n        max_length=4,\n        editable=False,\n        choices=tuple([(t, t.upper()) for t in TYPES])\n    )\n\n    tags = models.ManyToManyField(\n        Tag, related_name=\"documents\", blank=True)\n\n    checksum = models.CharField(\n        max_length=32,\n        editable=False,\n        unique=True,\n        help_text=\"The checksum of the original document (before it was \"\n                  \"encrypted).  We use this to prevent duplicate document \"\n                  \"imports.\"\n    )\n\n    created = models.DateTimeField(\n        default=timezone.now, db_index=True)\n    modified = models.DateTimeField(\n        auto_now=True, editable=False, db_index=True)\n\n    storage_type = models.CharField(\n        max_length=11,\n        choices=STORAGE_TYPES,\n        default=STORAGE_TYPE_UNENCRYPTED,\n        editable=False\n    )\n\n    added = models.DateTimeField(\n        default=timezone.now, editable=False, db_index=True)\n\n    filename = models.FilePathField(\n        max_length=256,\n        editable=False,\n        default=None,\n        null=True,\n        help_text=\"Current filename in storage\"\n    )\n\n    class Meta:\n        ordering = (\"correspondent\", \"title\")\n\n    def __str__(self):\n        created = self.created.strftime(\"%Y%m%d%H%M%S\")\n        if self.correspondent and self.title:\n            return \"{}: {} - {}\".format(\n                created, self.correspondent, self.title)\n        if self.correspondent or self.title:\n            return \"{}: {}\".format(created, self.correspondent or self.title)\n        return str(created)\n\n    def find_renamed_document(self, subdirectory=\"\"):\n        suffix = \"%07i.%s\" % (self.pk, self.file_type)\n\n        # Append .gpg for encrypted files\n        if self.storage_type == self.STORAGE_TYPE_GPG:\n            suffix += \".gpg\"\n\n        # Start with the (optinally) supplied subdirectory, go up in the\n        # directory hierarchy and try to find the file in question\n        root = os.path.normpath(Document.filename_to_path(subdirectory))\n\n        # Check if root really exists and return otherwise\n        if not os.path.isdir(root):\n            return None\n\n        for filename in os.listdir(root):\n            if filename.endswith(suffix):\n                return os.path.join(subdirectory, filename)\n\n            fullname = os.path.join(subdirectory, filename)\n            if os.path.isdir(Document.filename_to_path(fullname)):\n                return self.find_renamed_document(fullname)\n\n        return None\n\n    @property\n    def source_filename(self):\n        # Initial filename generation (for new documents)\n        if self.filename is None:\n            self.filename = self.generate_source_filename()\n\n        # Check if document is still available under filename\n        elif not os.path.isfile(Document.filename_to_path(self.filename)):\n            recovered_filename = self.find_renamed_document()\n\n            # If we have found the file so update the filename\n            if recovered_filename is not None:\n                logger = logging.getLogger(__name__)\n                logger.warning(\"Filename of document \" + str(self.id) +\n                               \" has changed and was successfully updated\")\n                self.filename = recovered_filename\n\n                # Remove all empty subdirectories from MEDIA_ROOT\n                Document.delete_all_empty_subdirectories(\n                        Document.filename_to_path(\"\"))\n            else:\n                logger = logging.getLogger(__name__)\n                logger.error(\"File of document \" + str(self.id) + \" has \" +\n                             \"gone and could not be recovered\")\n\n        return self.filename\n\n    @staticmethod\n    def many_to_dictionary(field):\n        # Converts ManyToManyField to dictionary by assuming, that field\n        # entries contain an _ or - which will be used as a delimiter\n        mydictionary = dict()\n\n        for index, t in enumerate(field.all()):\n            # Populate tag names by index\n            mydictionary[index] = slugify(t.name)\n\n            # Find delimiter\n            delimiter = t.name.find('_')\n\n            if delimiter == -1:\n                delimiter = t.name.find('-')\n\n            if delimiter == -1:\n                continue\n\n            key = t.name[:delimiter]\n            value = t.name[delimiter+1:]\n\n            mydictionary[slugify(key)] = slugify(value)\n\n        return mydictionary\n\n    def generate_source_filename(self):\n        # Create filename based on configured format\n        if settings.PAPERLESS_FILENAME_FORMAT is not None:\n            tags = defaultdict(lambda: slugify(None),\n                               self.many_to_dictionary(self.tags))\n            path = settings.PAPERLESS_FILENAME_FORMAT.format(\n                   correspondent=slugify(self.correspondent),\n                   title=slugify(self.title),\n                   created=slugify(self.created),\n                   added=slugify(self.added),\n                   tags=tags)\n        else:\n            path = \"\"\n\n        # Always append the primary key to guarantee uniqueness of filename\n        if len(path) > 0:\n            filename = \"%s-%07i.%s\" % (path, self.pk, self.file_type)\n        else:\n            filename = \"%07i.%s\" % (self.pk, self.file_type)\n\n        # Append .gpg for encrypted files\n        if self.storage_type == self.STORAGE_TYPE_GPG:\n            filename += \".gpg\"\n\n        return filename\n\n    def create_source_directory(self):\n        new_filename = self.generate_source_filename()\n\n        # Determine the full \"target\" path\n        dir_new = Document.filename_to_path(os.path.dirname(new_filename))\n\n        # Create new path\n        os.makedirs(dir_new, exist_ok=True)\n\n    @property\n    def source_path(self):\n        return Document.filename_to_path(self.source_filename)\n\n    @staticmethod\n    def filename_to_path(filename):\n        return os.path.join(\n            settings.MEDIA_ROOT,\n            \"documents\",\n            \"originals\",\n            filename\n        )\n\n    @property\n    def source_file(self):\n        return open(self.source_path, \"rb\")\n\n    @property\n    def file_name(self):\n        return slugify(str(self)) + \".\" + self.file_type\n\n    @property\n    def download_url(self):\n        return reverse(\"fetch\", kwargs={\"kind\": \"doc\", \"pk\": self.pk})\n\n    @property\n    def thumbnail_path(self):\n\n        file_name = \"{:07}.png\".format(self.pk)\n        if self.storage_type == self.STORAGE_TYPE_GPG:\n            file_name += \".gpg\"\n\n        return os.path.join(\n            settings.MEDIA_ROOT,\n            \"documents\",\n            \"thumbnails\",\n            file_name\n        )\n\n    @property\n    def thumbnail_file(self):\n        return open(self.thumbnail_path, \"rb\")\n\n    @property\n    def thumbnail_url(self):\n        return reverse(\"fetch\", kwargs={\"kind\": \"thumb\", \"pk\": self.pk})\n\n    def set_filename(self, filename):\n        if os.path.isfile(Document.filename_to_path(filename)):\n            self.filename = filename\n\n    @staticmethod\n    def try_delete_empty_directories(directory):\n        # Go up in the directory hierarchy and try to delete all directories\n        directory = os.path.normpath(directory)\n        root = os.path.normpath(Document.filename_to_path(\"\"))\n\n        while directory != root:\n            # Try to delete the current directory\n            try:\n                os.rmdir(directory)\n            except os.error:\n                # Directory not empty, no need to go further up\n                return\n\n            # Cut off actual directory and go one level up\n            directory, _ = os.path.split(directory)\n            directory = os.path.normpath(directory)\n\n    @staticmethod\n    def delete_all_empty_subdirectories(directory):\n        # Go through all folders and try to delete all directories\n        root = os.path.normpath(Document.filename_to_path(directory))\n\n        for filename in os.listdir(root):\n            fullname = os.path.join(directory, filename)\n\n            if not os.path.isdir(Document.filename_to_path(fullname)):\n                continue\n\n            # Go into subdirectory to see, if there is more to delete\n            Document.delete_all_empty_subdirectories(\n                    os.path.join(directory, filename))\n\n            # Try to delete the directory\n            try:\n                os.rmdir(Document.filename_to_path(fullname))\n                continue\n            except os.error:\n                # Directory not empty, no need to go further up\n                continue\n\n\n@receiver(models.signals.m2m_changed, sender=Document.tags.through)\n@receiver(models.signals.post_save, sender=Document)\ndef update_filename(sender, instance, **kwargs):\n    # Skip if document has not been saved yet\n    if instance.filename is None:\n        return\n\n    # Check is file exists and update filename otherwise\n    if not os.path.isfile(Document.filename_to_path(instance.filename)):\n        instance.filename = instance.source_filename\n\n    # Build the new filename\n    new_filename = instance.generate_source_filename()\n\n    # If the filename is the same, then nothing needs to be done\n    if instance.filename == new_filename:\n        return\n\n    # Determine the full \"target\" path\n    path_new = instance.filename_to_path(new_filename)\n    dir_new = instance.filename_to_path(os.path.dirname(new_filename))\n\n    # Create new path\n    instance.create_source_directory()\n\n    # Determine the full \"current\" path\n    path_current = instance.filename_to_path(instance.source_filename)\n\n    # Move file\n    try:\n        os.rename(path_current, path_new)\n    except PermissionError:\n        # Do not update filename in object\n        return\n    except FileNotFoundError:\n        logger = logging.getLogger(__name__)\n        logger.error(\"Renaming of document \" + str(instance.id) + \" failed \" +\n                     \"as file \" + instance.filename + \" was no longer present\")\n        return\n\n    # Delete empty directory\n    old_dir = os.path.dirname(instance.filename)\n    old_path = instance.filename_to_path(old_dir)\n    Document.try_delete_empty_directories(old_path)\n\n    instance.filename = new_filename\n\n    # Save instance\n    # This will not cause a cascade of post_save signals, as next time\n    # nothing needs to be renamed\n    instance.save()\n\n\n@receiver(models.signals.post_delete, sender=Document)\ndef delete_files(sender, instance, **kwargs):\n    if instance.filename is None:\n        return\n\n    # Remove the document\n    old_file = instance.filename_to_path(instance.filename)\n\n    try:\n        os.remove(old_file)\n    except FileNotFoundError:\n        logger = logging.getLogger(__name__)\n        logger.warning(\"Deleted document \" + str(instance.id) + \" but file \" +\n                       old_file + \" was no longer present\")\n\n    # And remove the directory (if applicable)\n    old_dir = os.path.dirname(instance.filename)\n    old_path = instance.filename_to_path(old_dir)\n    Document.try_delete_empty_directories(old_path)\n\n\nclass Log(models.Model):\n\n    LEVELS = (\n        (logging.DEBUG, \"Debugging\"),\n        (logging.INFO, \"Informational\"),\n        (logging.WARNING, \"Warning\"),\n        (logging.ERROR, \"Error\"),\n        (logging.CRITICAL, \"Critical\"),\n    )\n\n    group = models.UUIDField(blank=True)\n    message = models.TextField()\n    level = models.PositiveIntegerField(choices=LEVELS, default=logging.INFO)\n    created = models.DateTimeField(auto_now_add=True)\n    modified = models.DateTimeField(auto_now=True)\n\n    objects = LogManager()\n\n    class Meta:\n        ordering = (\"-modified\",)\n\n    def __str__(self):\n        return self.message\n\n    def save(self, *args, **kwargs):\n        \"\"\"\n        To allow for the case where we don't want to group the message, we\n        shouldn't force the caller to specify a one-time group value.  However,\n        allowing group=None means that the manager can't differentiate the\n        different un-grouped messages, so instead we set a random one here.\n        \"\"\"\n\n        if not self.group:\n            self.group = uuid.uuid4()\n\n        models.Model.save(self, *args, **kwargs)\n\n\nclass FileInfo:\n\n    # This epic regex *almost* worked for our needs, so I'm keeping it here for\n    # posterity, in the hopes that we might find a way to make it work one day.\n    ALMOST_REGEX = re.compile(\n        r\"^((?P<date>\\d\\d\\d\\d\\d\\d\\d\\d\\d\\d\\d\\d\\d\\dZ){separator})?\"\n        r\"((?P<correspondent>{non_separated_word}+){separator})??\"\n        r\"(?P<title>{non_separated_word}+)\"\n        r\"({separator}(?P<tags>[a-z,0-9-]+))?\"\n        r\"\\.(?P<extension>[a-zA-Z.-]+)$\".format(\n            separator=r\"\\s+-\\s+\",\n            non_separated_word=r\"([\\w,. ]|([^\\s]-))\"\n        )\n    )\n\n    formats = \"pdf|jpe?g|png|gif|tiff?|te?xt|md|csv\"\n    REGEXES = OrderedDict([\n        (\"created-correspondent-title-tags\", re.compile(\n            r\"^(?P<created>\\d\\d\\d\\d\\d\\d\\d\\d(\\d\\d\\d\\d\\d\\d)?Z) - \"\n            r\"(?P<correspondent>.*) - \"\n            r\"(?P<title>.*) - \"\n            r\"(?P<tags>[a-z0-9\\-,]*)\"\n            r\"\\.(?P<extension>{})$\".format(formats),\n            flags=re.IGNORECASE\n        )),\n        (\"created-title-tags\", re.compile(\n            r\"^(?P<created>\\d\\d\\d\\d\\d\\d\\d\\d(\\d\\d\\d\\d\\d\\d)?Z) - \"\n            r\"(?P<title>.*) - \"\n            r\"(?P<tags>[a-z0-9\\-,]*)\"\n            r\"\\.(?P<extension>{})$\".format(formats),\n            flags=re.IGNORECASE\n        )),\n        (\"created-correspondent-title\", re.compile(\n            r\"^(?P<created>\\d\\d\\d\\d\\d\\d\\d\\d(\\d\\d\\d\\d\\d\\d)?Z) - \"\n            r\"(?P<correspondent>.*) - \"\n            r\"(?P<title>.*)\"\n            r\"\\.(?P<extension>{})$\".format(formats),\n            flags=re.IGNORECASE\n        )),\n        (\"created-title\", re.compile(\n            r\"^(?P<created>\\d\\d\\d\\d\\d\\d\\d\\d(\\d\\d\\d\\d\\d\\d)?Z) - \"\n            r\"(?P<title>.*)\"\n            r\"\\.(?P<extension>{})$\".format(formats),\n            flags=re.IGNORECASE\n        )),\n        (\"correspondent-title-tags\", re.compile(\n            r\"(?P<correspondent>.*) - \"\n            r\"(?P<title>.*) - \"\n            r\"(?P<tags>[a-z0-9\\-,]*)\"\n            r\"\\.(?P<extension>{})$\".format(formats),\n            flags=re.IGNORECASE\n        )),\n        (\"correspondent-title\", re.compile(\n            r\"(?P<correspondent>.*) - \"\n            r\"(?P<title>.*)?\"\n            r\"\\.(?P<extension>{})$\".format(formats),\n            flags=re.IGNORECASE\n        )),\n        (\"title\", re.compile(\n            r\"(?P<title>.*)\"\n            r\"\\.(?P<extension>{})$\".format(formats),\n            flags=re.IGNORECASE\n        ))\n    ])\n\n    def __init__(self, created=None, correspondent=None, title=None, tags=(),\n                 extension=None):\n\n        self.created = created\n        self.title = title\n        self.extension = extension\n        self.correspondent = correspondent\n        self.tags = tags\n\n    @classmethod\n    def _get_created(cls, created):\n        try:\n            return dateutil.parser.parse(\"{:0<14}Z\".format(created[:-1]))\n        except ValueError:\n            return None\n\n    @classmethod\n    def _get_correspondent(cls, name):\n        if not name:\n            return None\n        return Correspondent.objects.get_or_create(name=name, defaults={\n            \"slug\": slugify(name)\n        })[0]\n\n    @classmethod\n    def _get_title(cls, title):\n        return title\n\n    @classmethod\n    def _get_tags(cls, tags):\n        r = []\n        for t in tags.split(\",\"):\n            r.append(Tag.objects.get_or_create(\n                slug=slugify(t),\n                defaults={\"name\": t}\n            )[0])\n        return tuple(r)\n\n    @classmethod\n    def _get_extension(cls, extension):\n        r = extension.lower()\n        if r == \"jpeg\":\n            return \"jpg\"\n        if r == \"tif\":\n            return \"tiff\"\n        return r\n\n    @classmethod\n    def _mangle_property(cls, properties, name):\n        if name in properties:\n            properties[name] = getattr(cls, \"_get_{}\".format(name))(\n                properties[name]\n            )\n\n    @classmethod\n    def from_path(cls, path):\n        \"\"\"\n        We use a crude naming convention to make handling the correspondent,\n        title, and tags easier:\n          \"<date> - <correspondent> - <title> - <tags>.<suffix>\"\n          \"<correspondent> - <title> - <tags>.<suffix>\"\n          \"<correspondent> - <title>.<suffix>\"\n          \"<title>.<suffix>\"\n        \"\"\"\n\n        filename = os.path.basename(path)\n\n        # Mutate filename in-place before parsing its components\n        # by applying at most one of the configured transformations.\n        for (pattern, repl) in settings.FILENAME_PARSE_TRANSFORMS:\n            (filename, count) = pattern.subn(repl, filename)\n            if count:\n                break\n\n        # Parse filename components.\n        for regex in cls.REGEXES.values():\n            m = regex.match(filename)\n            if m:\n                properties = m.groupdict()\n                cls._mangle_property(properties, \"created\")\n                cls._mangle_property(properties, \"correspondent\")\n                cls._mangle_property(properties, \"title\")\n                cls._mangle_property(properties, \"tags\")\n                cls._mangle_property(properties, \"extension\")\n                return cls(**properties)\n"
  },
  {
    "path": "src/documents/parsers.py",
    "content": "import logging\nimport os\nimport re\nimport shutil\nimport subprocess\nimport tempfile\n\nimport dateparser\nfrom django.conf import settings\nfrom django.utils import timezone\n\n# This regular expression will try to find dates in the document at\n# hand and will match the following formats:\n# - XX.YY.ZZZZ with XX + YY being 1 or 2 and ZZZZ being 2 or 4 digits\n# - XX/YY/ZZZZ with XX + YY being 1 or 2 and ZZZZ being 2 or 4 digits\n# - XX-YY-ZZZZ with XX + YY being 1 or 2 and ZZZZ being 2 or 4 digits\n# - ZZZZ.XX.YY with XX + YY being 1 or 2 and ZZZZ being 2 or 4 digits\n# - ZZZZ/XX/YY with XX + YY being 1 or 2 and ZZZZ being 2 or 4 digits\n# - ZZZZ-XX-YY with XX + YY being 1 or 2 and ZZZZ being 2 or 4 digits\n# - XX. MONTH ZZZZ with XX being 1 or 2 and ZZZZ being 2 or 4 digits\n# - MONTH ZZZZ, with ZZZZ being 4 digits\n# - MONTH XX, ZZZZ with XX being 1 or 2 and ZZZZ being 4 digits\nDATE_REGEX = re.compile(\n    r'(\\b|(?!=([_-])))([0-9]{1,2})[\\.\\/-]([0-9]{1,2})[\\.\\/-]([0-9]{4}|[0-9]{2})(\\b|(?=([_-])))|' +  # NOQA: E501\n    r'(\\b|(?!=([_-])))([0-9]{4}|[0-9]{2})[\\.\\/-]([0-9]{1,2})[\\.\\/-]([0-9]{1,2})(\\b|(?=([_-])))|' +  # NOQA: E501\n    r'(\\b|(?!=([_-])))([0-9]{1,2}[\\. ]+[^ ]{3,9} ([0-9]{4}|[0-9]{2}))(\\b|(?=([_-])))|' +  # NOQA: E501\n    r'(\\b|(?!=([_-])))([^\\W\\d_]{3,9} [0-9]{1,2}, ([0-9]{4}))(\\b|(?=([_-])))|' +\n    r'(\\b|(?!=([_-])))([^\\W\\d_]{3,9} [0-9]{4})(\\b|(?=([_-])))'\n)\n\n\nclass ParseError(Exception):\n    pass\n\n\nclass DocumentParser:\n    \"\"\"\n    Subclass this to make your own parser.  Have a look at\n    `paperless_tesseract.parsers` for inspiration.\n    \"\"\"\n\n    def __init__(self, path):\n        self.document_path = path\n        self.tempdir = tempfile.mkdtemp(prefix=\"paperless-\",\n                                        dir=settings.SCRATCH_DIR)\n        self.logger = logging.getLogger(__name__)\n        self.logging_group = None\n\n    def get_thumbnail(self):\n        \"\"\"\n        Returns the path to a file we can use as a thumbnail for this document.\n        \"\"\"\n        raise NotImplementedError()\n\n    def optimise_thumbnail(self, in_path):\n\n        out_path = os.path.join(self.tempdir, \"optipng.png\")\n\n        args = (settings.OPTIPNG_BINARY, \"-o5\", in_path, \"-out\", out_path)\n        if not subprocess.Popen(args).wait() == 0:\n            raise ParseError(\"Optipng failed at {}\".format(args))\n\n        return out_path\n\n    def get_optimised_thumbnail(self):\n        return self.optimise_thumbnail(self.get_thumbnail())\n\n    def get_text(self):\n        \"\"\"\n        Returns the text from the document and only the text.\n        \"\"\"\n        raise NotImplementedError()\n\n    def get_date(self):\n        \"\"\"\n        Returns the date of the document.\n        \"\"\"\n\n        def __parser(ds, date_order):\n            \"\"\"\n            Call dateparser.parse with a particular date ordering\n            \"\"\"\n            return dateparser.parse(\n                ds,\n                settings={\n                    \"DATE_ORDER\": date_order,\n                    \"PREFER_DAY_OF_MONTH\": \"first\",\n                    \"RETURN_AS_TIMEZONE_AWARE\":\n                    True\n                }\n            )\n\n        date = None\n        date_string = None\n\n        next_year = timezone.now().year + 5  # Arbitrary 5 year future limit\n        title = os.path.basename(self.document_path)\n\n        # if filename date parsing is enabled, search there first:\n        if settings.FILENAME_DATE_ORDER:\n            self.log(\"info\", \"Checking document title for date\")\n            for m in re.finditer(DATE_REGEX, title):\n                date_string = m.group(0)\n\n                try:\n                    date = __parser(date_string, settings.FILENAME_DATE_ORDER)\n                except (TypeError, ValueError):\n                    # Skip all matches that do not parse to a proper date\n                    continue\n\n                if date is not None and next_year > date.year > 1900:\n                    self.log(\n                        \"info\",\n                        \"Detected document date {} based on string {} \"\n                        \"from document title\"\n                        \"\".format(date.isoformat(), date_string)\n                    )\n                    return date\n\n        try:\n            # getting text after checking filename will save time if only\n            # looking at the filename instead of the whole text\n            text = self.get_text()\n        except ParseError:\n            return None\n\n        # Iterate through all regex matches in text and try to parse the date\n        for m in re.finditer(DATE_REGEX, text):\n            date_string = m.group(0)\n\n            try:\n                date = __parser(date_string, settings.DATE_ORDER)\n            except (TypeError, ValueError):\n                # Skip all matches that do not parse to a proper date\n                continue\n\n            if date is not None and next_year > date.year > 1900:\n                break\n            else:\n                date = None\n\n        if date is not None:\n            self.log(\n                \"info\",\n                \"Detected document date {} based on string {}\".format(\n                    date.isoformat(),\n                    date_string\n                )\n            )\n        else:\n            self.log(\"info\", \"Unable to detect date for document\")\n\n        return date\n\n    def log(self, level, message):\n        getattr(self.logger, level)(message, extra={\n            \"group\": self.logging_group\n        })\n\n    def cleanup(self):\n        self.log(\"debug\", \"Deleting directory {}\".format(self.tempdir))\n        shutil.rmtree(self.tempdir)\n"
  },
  {
    "path": "src/documents/serialisers.py",
    "content": "from rest_framework import serializers\n\nfrom .models import Correspondent, Tag, Document, Log\n\n\nclass CorrespondentSerializer(serializers.HyperlinkedModelSerializer):\n\n    class Meta:\n        model = Correspondent\n        fields = (\n            \"id\",\n            \"slug\",\n            \"name\",\n            \"match\",\n            \"matching_algorithm\",\n            \"is_insensitive\"\n        )\n\n\nclass TagSerializer(serializers.HyperlinkedModelSerializer):\n\n    class Meta:\n        model = Tag\n        fields = (\n            \"id\",\n            \"slug\",\n            \"name\",\n            \"colour\",\n            \"match\",\n            \"matching_algorithm\",\n            \"is_insensitive\"\n        )\n\n\nclass CorrespondentField(serializers.HyperlinkedRelatedField):\n    def get_queryset(self):\n        return Correspondent.objects.all()\n\n\nclass TagsField(serializers.HyperlinkedRelatedField):\n    def get_queryset(self):\n        return Tag.objects.all()\n\n\nclass DocumentSerializer(serializers.ModelSerializer):\n\n    correspondent = CorrespondentField(\n        view_name=\"drf:correspondent-detail\", allow_null=True)\n    tags = TagsField(view_name=\"drf:tag-detail\", many=True)\n\n    class Meta:\n        model = Document\n        fields = (\n            \"id\",\n            \"correspondent\",\n            \"title\",\n            \"content\",\n            \"file_type\",\n            \"tags\",\n            \"checksum\",\n            \"created\",\n            \"modified\",\n            \"added\",\n            \"file_name\",\n            \"download_url\",\n            \"thumbnail_url\",\n        )\n\n\nclass LogSerializer(serializers.ModelSerializer):\n\n    time = serializers.DateTimeField()\n    messages = serializers.CharField()\n\n    class Meta:\n        model = Log\n        fields = (\n            \"time\",\n            \"messages\"\n        )\n"
  },
  {
    "path": "src/documents/settings.py",
    "content": "# Defines the names of file/thumbnail for the manifest\n# for exporting/importing commands\nEXPORTER_FILE_NAME = \"__exported_file_name__\"\nEXPORTER_THUMBNAIL_NAME = \"__exported_thumbnail_name__\"\n"
  },
  {
    "path": "src/documents/signals/__init__.py",
    "content": "from django.dispatch import Signal\n\ndocument_consumption_started = Signal(providing_args=[\"filename\"])\ndocument_consumption_finished = Signal(providing_args=[\"document\"])\ndocument_consumer_declaration = Signal(providing_args=[])\n"
  },
  {
    "path": "src/documents/signals/handlers.py",
    "content": "import logging\nimport os\nfrom subprocess import Popen\n\nfrom django.conf import settings\nfrom django.contrib.admin.models import ADDITION, LogEntry\nfrom django.contrib.auth.models import User\nfrom django.contrib.contenttypes.models import ContentType\nfrom django.utils import timezone\n\nfrom ..models import Correspondent, Document, Tag\n\n\ndef logger(message, group):\n    logging.getLogger(__name__).debug(message, extra={\"group\": group})\n\n\ndef set_correspondent(sender, document=None, logging_group=None, **kwargs):\n\n    # No sense in assigning a correspondent when one is already set.\n    if document.correspondent:\n        return\n\n    # No matching correspondents, so no need to continue\n    potential_correspondents = list(Correspondent.match_all(document.content))\n    if not potential_correspondents:\n        return\n\n    potential_count = len(potential_correspondents)\n    selected = potential_correspondents[0]\n    if potential_count > 1:\n        message = \"Detected {} potential correspondents, so we've opted for {}\"\n        logger(\n            message.format(potential_count, selected),\n            logging_group\n        )\n\n    logger(\n        'Assigning correspondent \"{}\" to \"{}\" '.format(selected, document),\n        logging_group\n    )\n\n    document.correspondent = selected\n    document.save(update_fields=(\"correspondent\",))\n\n\ndef set_tags(sender, document=None, logging_group=None, **kwargs):\n\n    current_tags = set(document.tags.all())\n    relevant_tags = set(Tag.match_all(document.content)) - current_tags\n\n    if not relevant_tags:\n        return\n\n    message = 'Tagging \"{}\" with \"{}\"'\n    logger(\n        message.format(document, \", \".join([t.slug for t in relevant_tags])),\n        logging_group\n    )\n\n    document.tags.add(*relevant_tags)\n\n\ndef run_pre_consume_script(sender, filename, **kwargs):\n\n    if not settings.PRE_CONSUME_SCRIPT:\n        return\n\n    Popen((settings.PRE_CONSUME_SCRIPT, filename)).wait()\n\n\ndef run_post_consume_script(sender, document, **kwargs):\n\n    if not settings.POST_CONSUME_SCRIPT:\n        return\n\n    Popen((\n        settings.POST_CONSUME_SCRIPT,\n        str(document.id),\n        document.file_name,\n        document.source_path,\n        document.thumbnail_path,\n        document.download_url,\n        document.thumbnail_url,\n        str(document.correspondent),\n        str(\",\".join(document.tags.all().values_list(\"slug\", flat=True)))\n    )).wait()\n\n\ndef cleanup_document_deletion(sender, instance, using, **kwargs):\n\n    if not isinstance(instance, Document):\n        return\n\n    for f in (instance.source_path, instance.thumbnail_path):\n        try:\n            os.unlink(f)\n        except FileNotFoundError:\n            pass  # The file's already gone, so we're cool with it.\n\n\ndef set_log_entry(sender, document=None, logging_group=None, **kwargs):\n\n    ct = ContentType.objects.get(model=\"document\")\n    user = User.objects.get(username=\"consumer\")\n\n    LogEntry.objects.create(\n        action_flag=ADDITION,\n        action_time=timezone.now(),\n        content_type=ct,\n        object_id=document.id,\n        user=user,\n        object_repr=document.__str__(),\n    )\n"
  },
  {
    "path": "src/documents/static/js/colours.js",
    "content": "// The following jQuery snippet will add a small square next to the selection\n// drop-down on the `Add tag` page that will update to show the selected tag\n// color as the drop-down value is changed.\n\ndjango.jQuery(document).ready(function(){\n\n  if (django.jQuery(\"#id_colour\").length) {\n\n    let colour;\n    let colour_num;\n\n    colour_num = django.jQuery(\"#id_colour\").val() - 1;\n    colour = django.jQuery('#id_colour')[0][colour_num].text;\n    django.jQuery('#id_colour').after('<div class=\"colour_square\"></div>');\n\n    django.jQuery('.colour_square').css({\n      'float': 'left',\n      'width': '20px',\n      'height': '20px',\n      'margin': '5px',\n      'border': '1px solid rgba(0, 0, 0, .2)',\n      'background': colour\n    });\n\n    django.jQuery('#id_colour').change(function () {\n      colour_num = django.jQuery(\"#id_colour\").val() - 1;\n      colour = django.jQuery('#id_colour')[0][colour_num].text;\n      django.jQuery('.colour_square').css({'background': colour});\n    });\n\n  } else if (django.jQuery(\"select[id*='colour']\").length) {\n\n    django.jQuery('select[id*=\"-colour\"]').each(function (index, element) {\n      let id;\n      let loop_colour_num;\n      let loop_colour;\n\n      id = \"colour_square_\" + index;\n      django.jQuery(element).after('<div class=\"colour_square\" id=\"' + id + '\"></div>');\n\n      loop_colour_num = django.jQuery(element).val() - 1;\n      loop_colour = django.jQuery(element)[0][loop_colour_num].text;\n\n      django.jQuery(\"<style type='text/css'>\\\n                        .colour_square{ \\\n                            float: left; \\\n                            width: 20px; \\\n                            height: 20px; \\\n                            margin: 5px; \\\n                            border: 1px solid rgba(0,0,0,.2); \\\n                        } </style>\").appendTo(\"head\");\n      django.jQuery('#' + id).css({'background': loop_colour});\n\n      console.log(id, loop_colour_num, loop_colour);\n\n      django.jQuery(element).change(function () {\n        loop_colour_num = django.jQuery(element).val() - 1;\n        loop_colour = django.jQuery(element)[0][loop_colour_num].text;\n        django.jQuery('#' + id).css({'background': loop_colour});\n        console.log('#' + id, loop_colour)\n      });\n    })\n\n  }\n\n});\n"
  },
  {
    "path": "src/documents/static/paperless.css",
    "content": "th.column-document,\ntd.field-document {\n  text-align: center;\n}\n\ntd a.tag {\n  padding: 0 0.5em;\n  color: #ffffff;\n  border-radius: 0.2em;\n  margin: 1px;\n  display: inline-block;\n}\n\n#result_list th.column-note {\n  text-align: right;\n}\n#result_list td.field-note {\n  text-align: right;\n}\n#result_list td textarea {\n  width: 90%;\n  height: 5em;\n}"
  },
  {
    "path": "src/documents/templates/admin/base_site.html",
    "content": "{% extends 'admin/base_site.html' %}\n\n{# NOTE: This should probably be extending base.html.  See CSS comment below details. #}\n\n\n{% load static %}\n{% load custom_css from customisation %}\n{% load custom_js from customisation %}\n\n\n{% block extrahead %}\n\t<link rel=\"icon\" type=\"image/x-icon\" href=\"{% url 'favicon' %}\" />\n\t<style>\n\t\t#header {\n\t\t\tbackground-color: #90a9b7;\n\t\t\tline-height: inherit;\n\t\t\theight: auto;\n\t\t}\n\t\t#branding h1 {\n\t\t\tfont-weight: inherit;\n\t\t\tfont-size: inherit;\n\t\t}\n\t\t.button,\n\t\t.button:active,\n\t\t.button:focus,\n\t\t.button:hover,\n\t\ta.button,\n\t\t.submit-row input,\n\t\tinput[type=\"submit\"],\n\t\tinput[type=\"submit\"]:active,\n\t\tinput[type=\"submit\"]:focus,\n\t\tinput[type=\"submit\"]:hover,\n\t\tinput[type=\"button\"],\n\t\tinput[type=\"button\"]:active,\n\t\tinput[type=\"button\"]:focus,\n\t\tinput[type=\"button\"]:hover {\n\t\t\tbackground-color: #074f57;\n\t\t}\n\t\t.module h2,\n\t\t.module caption,\n\t\t.inline-group h2 {\n\t\t\tbackground-color: #90a9b7;\n\t\t}\n\t\tdiv.breadcrumbs {\n\t\t\tbackground-color: #077187;\n\t\t}\n\t\t.module h2,\n\t\t.module caption,\n\t\t.inline-group h2 {\n\t\t\tbackground-color: #077187;\n\t\t}\n\t</style>\n{% endblock %}\n\n\n{% block branding %}\n<h1 id=\"site-name\">\n\t<a href=\"{% url 'admin:index' %}\"><img src=\"{% static 'paperless/img/logo-light.png' %}\" alt=\"Paperless\" /></a>\n</h1>\n{% endblock %}\n\n\n{% block blockbots %}\n\n\t{% comment %}\n\t\tThis really should be extending `extrastyle`, but the the\n\t\tdjango-flat-responsive package decided that it wanted to put its CSS in\n\t\tthis block, so to make sure that overrides are in fact overriding\n\t\teverything else, we have to do the Wrong Thing here.\n\n\t\tOnce we switch to Django 2.x and drop django-flat-responsive, we should\n\t\tswitch this to `extrastyle` where it should be.\n\t{% endcomment %}\n\n\t{{ block.super }}\n\n\t{% custom_css %}\n\n{% endblock blockbots %}\n\n\n{% block footer %}\n\n\t{% comment %}\n\t\tThe Django admin doesn't have a block for Javascript you'd want placed in\n\t\tthe footer, so we have to use this one instead.\n\t{% endcomment %}\n\n\t{{ block.super }}\n\n\t{% custom_js %}\n\n{% endblock footer %}\n"
  },
  {
    "path": "src/documents/templates/admin/documents/document/change_form.html",
    "content": "{% extends 'admin/change_form.html' %}\n\n{% block content %}\n\n{{ block.super }}\n<div class=\"side-preview\">\n  <h2>Preview</h2>\n  <object data=\"/fetch/preview/{{object_id}}\"></object>\n</div>\n\n{% if next_object %}\n\t<script type=\"text/javascript\">//<![CDATA[\n\t\t(function($){\n\t\t\t$('<input type=\"submit\" value=\"Save and edit next\" name=\"_saveandeditnext\" />')\n\t\t\t.prependTo('div.submit-row');\n\t\t\t$('<input type=\"hidden\" value=\"{{next_object}}\" name=\"_next_object\" />')\n\t\t\t.prependTo('div.submit-row');\n\t\t})(django.jQuery);\n\t//]]></script>\n{% endif %}\n\n{% endblock content %}\n\n{% block extrastyle %}\n{{ block.super }}\n<style>\n.side-preview {\n    width: 100%;\n    height: 800px;\n    clear: both;\n}\n\n.side-preview object {\n    height: 100%;\n    width: 100%;\n}\n\n@media screen and (min-width: 1500px) {\n    #content-main {\n        width: 50%;\n    }\n    #footer {\n        padding: 0;\n    }\n    .side-preview {\n        float: right;\n        width: 40%;\n        height: 80vh;\n        clear: none;\n    }\n}\n</style>\n{% endblock %}\n\n{% block footer %}\n\n\t{{ block.super }}\n\n\t{# Hack to force Django to make the created date a date input rather than `text` (the default) #}\n\t<script>\n\t\tdjango.jQuery(\".field-created input\").first().attr(\"type\", \"date\")\n\t</script>\n\n{% endblock footer %}\n"
  },
  {
    "path": "src/documents/templates/admin/documents/document/change_list.html",
    "content": "{% extends 'admin/change_list.html' %}\n\n\n{% load admin_actions from admin_list%}\n{% load result_list from hacks %}\n\n\n{% block result_list %}\n\t{% if action_form and actions_on_top and cl.show_admin_actions %}{% admin_actions %}{% endif %}\n\t{% result_list cl %}\n\t{% if action_form and actions_on_bottom and cl.show_admin_actions %}{% admin_actions %}{% endif %}\n{% endblock %}\n"
  },
  {
    "path": "src/documents/templates/admin/documents/document/change_list_results.html",
    "content": "{% load i18n %}\n\n<style>\n  .grid *, .grid *:after, .grid *:before {\n    -webkit-box-sizing: border-box;\n    -moz-box-sizing: border-box;\n    box-sizing: border-box;\n  }\n  .box {\n    width: 12.5%;\n    padding: 1em;\n    float: left;\n    opacity: 0.7;\n    transition: all 0.5s;\n  }\n  .box:hover {\n    opacity: 1;\n    transition: all 0.5s;\n  }\n  .box:last-of-type {\n    padding-right: 0;\n  }\n  .result {\n    border: 1px solid #cccccc;\n    border-radius: 2%;\n    overflow: hidden;\n    height: 300px;\n  }\n  .result .header {\n    padding: 5px;\n    background-color: #90a9b7;\n    position: relative;\n  }\n  .result .header .checkbox {\n    width: 5%;\n    float: left;\n    position: absolute;\n    z-index: 2;\n  }\n  .result .header .info {\n    margin-left: 10%;\n    position: relative;\n  }\n  .headerLink {\n    cursor: pointer;\n    opacity: 0;\n    z-index: 1;\n    position: absolute;\n    top: 0;\n    left: 0;\n    width: 100%;\n    height: 100%;\n  }\n  .header > a {\n    z-index: 2;\n    margin-left: 10%;\n    position: relative;\n  }\n  .result .header a,\n  .result a.tag {\n    color: #ffffff;\n  }\n  .result .date {\n    padding: 5px;\n  }\n  .result .tags {\n    float: left;\n  }\n  .result .tags a.tag {\n    padding: 2px 5px;\n    border-radius: 2px;\n    display: inline-block;\n    margin: 2px;\n  }\n  .result .date {\n    float: right;\n    color: #cccccc;\n  }\n  .result .image img {\n    width: 100%;\n  }\n\n  .grid {\n    margin-right: 260px;\n  }\n  .grid:after {\n    content: \"\";\n    display: table;\n    clear: both;\n  }\n\n  @media (max-width: 1600px) {\n    .box {\n      width: 25%\n    }\n  }\n\n  @media (max-width: 991px) {\n    .grid {\n      margin-right: 220px;\n    }\n    .box {\n      width: 50%\n    }\n  }\n\n  @media (max-width: 767px) {\n    .grid {\n      margin-right: 0;\n    }\n  }\n\n  @media (max-width: 500px) {\n    .box {\n      width: 100%\n    }\n  }\n\n</style>\n\n\n{# This is just copypasta from the parent change_list_results.html file #}\n<table id=\"result_list\">\n<thead>\n<tr>\n{% for header in result_headers %}\n<th scope=\"col\" {{ header.class_attrib }}>\n   {% if header.sortable %}\n     {% if header.sort_priority > 0 %}\n       <div class=\"sortoptions\">\n         <a class=\"sortremove\" href=\"{{ header.url_remove }}\" title=\"{% trans \"Remove from sorting\" %}\"></a>\n         {% if num_sorted_fields > 1 %}<span class=\"sortpriority\" title=\"{% blocktrans with priority_number=header.sort_priority %}Sorting priority: {{ priority_number }}{% endblocktrans %}\">{{ header.sort_priority }}</span>{% endif %}\n         <a href=\"{{ header.url_toggle }}\" class=\"toggle {% if header.ascending %}ascending{% else %}descending{% endif %}\" title=\"{% trans \"Toggle sorting\" %}\"></a>\n       </div>\n     {% endif %}\n   {% endif %}\n   <div class=\"text\">{% if header.sortable %}<a href=\"{{ header.url_primary }}\">{{ header.text|capfirst }}</a>{% else %}<span>{{ header.text|capfirst }}</span>{% endif %}</div>\n   <div class=\"clear\"></div>\n</th>{% endfor %}\n</tr>\n</thead>\n</table>\n{# /copypasta #}\n\n\n<div class=\"grid\">\n  {% for result in results %}\n    {# 0: Checkbox #}\n    {# 1: Title #}\n    {# 2: Date #}\n    {# 3: Added #}\n    {# 4: Image #}\n    {# 5: Correspondent #}\n    {# 6: Tags #}\n    {# 7: Document edit url #}\n    <div class=\"box\">\n      <div class=\"result\">\n        <div class=\"header\">\n          {% comment %}\n            The purpose of 'headerLink' is to make the whole header\n            background clickable.\n            We use an onclick handler here instead of a native link ('<a>')\n            to allow selecting (and copying) the overlying doc title text\n            with the mouse cursor.\n            If the title link were layered upon another link ('<a>'), title text\n            selection would not be possible with mouse click + drag. Instead,\n            the underlying link would be dragged.\n          {% endcomment %}\n          <div class=\"headerLink\" onclick=\"location.href='{{ result.7 }}';\"></div>\n          <div class=\"checkbox\">{{ result.0 }}</div>\n          <div class=\"info\">\n            {{ result.5 }}\n          </div>\n          {{ result.1 }}\n          <div style=\"clear: both;\"></div>\n        </div>\n        <div class=\"tags\">{{ result.6 }}</div>\n        <div class=\"date\">{{ result.2 }}</div>\n        <div style=\"clear: both;\"></div>\n        <div class=\"image\">{{ result.4 }}</div>\n      </div>\n    </div>\n  {% endfor %}\n</div>\n\n\n<script>\n  // We need to re-build the select-all functionality as the old logic pointed\n  // to a table and we're using divs now.\n  django.jQuery(\"#action-toggle\").on(\"change\", function(){\n    django.jQuery(\".grid .box .result .checkbox input\")\n      .prop(\"checked\", this.checked);\n  });\n</script>\n"
  },
  {
    "path": "src/documents/templates/admin/documents/document/select_object.html",
    "content": "{% extends \"admin/base_site.html\" %}\n\n\n{% load i18n l10n admin_urls static %}\n{% load staticfiles %}\n\n\n{% block extrahead %}\n\t{{ block.super }}\n\t{{ media }}\n\t<script type=\"text/javascript\" src=\"{% static 'admin/js/cancel.js' %}\"></script>\n{% endblock %}\n\n\n{% block bodyclass %}{{ block.super }} app-{{ opts.app_label }} model-{{ opts.model_name }} delete-confirmation delete-selected-confirmation{% endblock %}\n\n\n{% block breadcrumbs %}\n\t<div class=\"breadcrumbs\">\n\t\t<a href=\"{% url 'admin:index' %}\">{% trans 'Home' %}</a>\n\t\t&rsaquo; <a href=\"{% url 'admin:app_list' app_label=opts.app_label %}\">{{ opts.app_config.verbose_name }}</a>\n\t\t&rsaquo; <a href=\"{% url opts|admin_urlname:'changelist' %}\">{{ opts.verbose_name_plural|capfirst }}</a>\n\t\t&rsaquo; {{ title }}\n\t</div>\n{% endblock %}\n\n{% block content %}\n\t<p>Please select the {{itemname}}.</p>\n\t<form method=\"post\">{% csrf_token %}\n\t\t<div>\n\t\t\t{% for obj in queryset %}\n\t\t\t<input type=\"hidden\" name=\"{{ action_checkbox_name }}\" value=\"{{ obj.pk|unlocalize }}\"/>\n\t\t\t{% endfor %}\n\t\t\t<p>\n\t\t\t\t<select name=\"obj_id\">\n\t\t\t\t\t{% for obj in objects %}\n\t\t\t\t\t<option value=\"{{ obj.id }}\">{{ obj.name }}</option>\n\t\t\t\t\t{% endfor %}\n\t\t\t\t</select>\n\t\t\t</p>\n\n\t\t\t<input type=\"hidden\" name=\"action\" value=\"{{ action }}\"/>\n\t\t\t<input type=\"hidden\" name=\"post\" value=\"yes\" />\n\t\t\t<p>\n\t\t\t\t<input type=\"submit\" value=\"{% trans 'Confirm' %}\" />\n\t\t\t\t<a href=\"#\" class=\"button cancel-link\">{% trans \"Go back\" %}</a>\n\t\t\t</p>\n\t\t</div>\n\t</form>\n{% endblock %}\n"
  },
  {
    "path": "src/documents/templates/admin/index.html",
    "content": "{% extends \"admin/index.html\" %}\n\n\n{% load i18n static %}\n\n\n{# This block adds a search form on the admin start page and on the module start page so that #}\n{# the user can quickly search for documents #}\n{% block pretitle %}\n<div>\n    <h3>{% trans 'Search documents' %}</h3>\n\n    <div id=\"toolbar\"><form id=\"changelist-search\" method=\"get\" action=\"{% url 'admin:documents_document_changelist' %}\">\n            <div><!-- DIV needed for valid HTML -->\n                <label for=\"searchbar\"><img src=\"{% static \"admin/img/search.svg\" %}\" alt=\"Search\"></label>\n                <input type=\"text\" size=\"40\" name=\"q\" value=\"\" id=\"searchbar\" autofocus=\"\">\n                <input type=\"submit\" value=\"{% trans 'Search' %}\">\n            </div>\n        </form>\n    </div>\n</div>\n{% endblock %}\n\n\n{# This whole block is here just to override the `get_admin_log` line so #}\n{# that the log entries aren't limited to the current user #}\n{% block sidebar %}\n<div id=\"content-related\">\n    <div class=\"module\" id=\"recent-actions-module\">\n        <h2>{% trans 'Recent actions' %}</h2>\n        <h3>{% trans 'My actions' %}</h3>\n            {% load log %}\n            {% get_admin_log 10 as admin_log %}\n            {% if not admin_log %}\n            <p>{% trans 'None available' %}</p>\n            {% else %}\n            <ul class=\"actionlist\">\n            {% for entry in admin_log %}\n            <li class=\"{% if entry.is_addition %}addlink{% endif %}{% if entry.is_change %}changelink{% endif %}{% if entry.is_deletion %}deletelink{% endif %}\">\n                {% if entry.is_deletion or not entry.get_admin_url %}\n                    {{ entry.object_repr }}\n                {% else %}\n                    <a href=\"{{ entry.get_admin_url }}\">{{ entry.object_repr }}</a>\n                {% endif %}\n                <br/>\n                {% if entry.content_type %}\n                    <span class=\"mini quiet\">{% filter capfirst %}{{ entry.content_type }}{% endfilter %}</span>\n                {% else %}\n                    <span class=\"mini quiet\">{% trans 'Unknown content' %}</span>\n                {% endif %}\n            </li>\n            {% endfor %}\n            </ul>\n            {% endif %}\n    </div>\n</div>\n{% endblock %}\n"
  },
  {
    "path": "src/documents/templates/documents/index.html",
    "content": "<!DOCTYPE html>\n\n<html lang=\"en-gb\">\n  <head>\n    <title>Paperless</title>\n    <meta charset=\"utf-8\">\n  </head>\n  <body>\n\t\t{# One day someone (maybe even myself) is going to write a proper web front-end for Paperless, and this is where it'll start. #}\n  </body>\n</html>\n"
  },
  {
    "path": "src/documents/templatetags/__init__.py",
    "content": ""
  },
  {
    "path": "src/documents/templatetags/customisation.py",
    "content": "import os\n\nfrom django import template\nfrom django.conf import settings\nfrom django.utils.safestring import mark_safe\n\nregister = template.Library()\n\n\n@register.simple_tag()\ndef custom_css():\n    theme_path = os.path.join(\n        settings.MEDIA_ROOT,\n        \"overrides.css\"\n    )\n    if os.path.exists(theme_path):\n        return mark_safe(\n            '<link rel=\"stylesheet\" type=\"text/css\" href=\"{}\" />'.format(\n                os.path.join(settings.MEDIA_URL, \"overrides.css\")\n            )\n        )\n    return \"\"\n\n\n@register.simple_tag()\ndef custom_js():\n    theme_path = os.path.join(\n        settings.MEDIA_ROOT,\n        \"overrides.js\"\n    )\n    if os.path.exists(theme_path):\n        return mark_safe(\n            '<script src=\"{}\"></script>'.format(\n                os.path.join(settings.MEDIA_URL, \"overrides.js\")\n            )\n        )\n    return \"\"\n"
  },
  {
    "path": "src/documents/templatetags/hacks.py",
    "content": "import re\n\nfrom django.contrib.admin.templatetags.admin_list import (\n    result_headers,\n    result_hidden_fields,\n    results\n)\nfrom django.template import Library\n\n\nEXTRACT_URL = re.compile(r'href=\"(.*?)\"')\n\nregister = Library()\n\n\n@register.inclusion_tag(\"admin/documents/document/change_list_results.html\")\ndef result_list(cl):\n    \"\"\"\n    Copy/pasted from django.contrib.admin.templatetags.admin_list just so I can\n    modify the value passed to `.inclusion_tag()` in the decorator here.  There\n    must be a cleaner way... right?\n    \"\"\"\n    headers = list(result_headers(cl))\n    num_sorted_fields = 0\n    for h in headers:\n        if h['sortable'] and h['sorted']:\n            num_sorted_fields += 1\n    return {'cl': cl,\n            'result_hidden_fields': list(result_hidden_fields(cl)),\n            'result_headers': headers,\n            'num_sorted_fields': num_sorted_fields,\n            'results': map(add_doc_edit_url, results(cl))}\n\n\ndef add_doc_edit_url(result):\n    \"\"\"\n    Make the document edit URL accessible to the view as a separate item\n    \"\"\"\n    title = result[1]\n    match = re.search(EXTRACT_URL, title)\n    edit_doc_url = match.group(1)\n    result.append(edit_doc_url)\n    return result\n"
  },
  {
    "path": "src/documents/tests/__init__.py",
    "content": ""
  },
  {
    "path": "src/documents/tests/factories.py",
    "content": "import factory\n\nfrom ..models import Document, Correspondent\n\n\nclass CorrespondentFactory(factory.DjangoModelFactory):\n\n    class Meta:\n        model = Correspondent\n\n    name = factory.Faker(\"name\")\n\n\nclass DocumentFactory(factory.DjangoModelFactory):\n\n    class Meta:\n        model = Document\n"
  },
  {
    "path": "src/documents/tests/samples/inline_mail.txt",
    "content": "Return-Path: <sender@example.com>\r\nReceived: from mout.mailhost.com ([212.227.17.22]) by mx-ha.mailhost.com (mx101) with\r\n ESMTPS (Nemesis) id 0M22yt-1bePTC1Tkx-00u3T3 for <sender@example.com>; Thu,\r\n 14 Apr 2016 16:26:53 +0200\r\nReceived: from [192.168.178.11] ([65.50.20.247]) by mail.mailhost.com (mr101)\r\n with ESMTPSA (Nemesis) id 0MB2G8-1ayNjv3pA4-009xHi for <sender@example.com>;\r\n Thu, 14 Apr 2016 16:26:53 +0200\r\nFrom: Florian Harr <sender@example.com>\r\nContent-Type: multipart/alternative; boundary=\"Apple-Mail=_E0BA9ABB-7689-4507-B940-34AA2DDB3DCC\"\r\nSubject: Paperless Inline Image\r\nMessage-Id: <C7EF75A3-22B4-40C6-B7A7-11FD6C82E725@mailhost.com>\r\nDate: Thu, 14 Apr 2016 10:26:36 -0400\r\nTo: Florian Harr <sender@example.com>\r\nMime-Version: 1.0 (Mac OS X Mail 9.3 \\(3124\\))\r\nX-Mailer: Apple Mail (2.3124)\r\nEnvelope-To: <sender@example.com>\r\n\r\n\r\n--Apple-Mail=_E0BA9ABB-7689-4507-B940-34AA2DDB3DCC\r\nContent-Transfer-Encoding: 7BIT\r\nContent-Type: TEXT/plain;\r\n\tcharset=us-ascii\r\n\r\nThe secret word is \"paperless\" :-)\r\n\r\n\r\n--Apple-Mail=_E0BA9ABB-7689-4507-B940-34AA2DDB3DCC\r\nContent-Type: multipart/related;\r\n\tboundary=\"Apple-Mail=_4D0B5162-526C-4D33-95B0-7037924B5757\";\r\n\ttype=\"text/html\"\r\n\r\n\r\n--Apple-Mail=_4D0B5162-526C-4D33-95B0-7037924B5757\r\nContent-Transfer-Encoding: 7BIT\r\nContent-Type: TEXT/html;\r\n\tcharset=us-ascii\r\n\r\n<html><head><meta http-equiv=\"Content-Type\" content=\"text/html charset=us-ascii\"></head><body style=\"word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space;\" class=\"\"><div class=\"\">The secret word is \"paperless\" :-)</div><div class=\"\"><br class=\"\"></div><img apple-inline=\"yes\" id=\"A1C06D81-A225-481B-8AAB-4509BA14D0CB\" height=\"254\" width=\"788\" apple-width=\"yes\" apple-height=\"yes\" src=\"cid:8536D9B0-0634-4B01-8584-BE7C49F413E3\" class=\"\"></body></html>\r\n--Apple-Mail=_4D0B5162-526C-4D33-95B0-7037924B5757\r\nContent-Transfer-Encoding: BASE64\r\nContent-Disposition: inline;\r\n\tfilename=screenshot.png\r\nContent-Type: IMAGE/png;\r\n\tname=screenshot.png;\r\n\tx-unix-mode=0600\r\nContent-Id: <8536D9B0-0634-4B01-8584-BE7C49F413E3>\r\n\r\niVBORw0KGgoAAAANSUhEUgAABP8AAAGbCAYAAAC7wzWwAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\r\nAAAN1wAADdcBQiibeAAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAACAASURB\r\nVHic7L3JkiRLlp736WSDu0dEZmTezLoD0FXsIsgGwYYId3wScknhk+BNsKII34JbcgOAwkEANoDq\r\nruo738zICJ/MTIfDhZqamXtEZFaxqrqaaD9X/Ga4u7mZ6Wh6fv3Pf9R/8V/9pQCICCJCSmn6W0Qo\r\n9tR3IkKlDB+zGONHvzdWPvr9p37/KdNaf+L6YTrOGIO1Fucc1trpvVIKrfV0TPlbKYUZcr0kCVOd\r\nxBgZhgHvPVdX65PrzXWa6xKppu+UUqDSE8cuvl/8rZRCGE6OWx4DIGn+bNl+8/HmUZuW487v+7wP\r\nAHiZjz0/D4AxH+8f1jbTOUu9ppQYhoFhGKjrGuccVVWhlCLGOB1rjCGlxGaz4fr6mrZtAQghEAZP\r\njJGuH+i6DhGhruvpPMYY6rqm3qzoug7vPc5Zrq+vefHimpubG9q2pW4M6/UaYzR93xPigLW57UMY\r\n+PXffEff9+z3e47HjhACSpnp/vq+B9FjexmsddRVy3q9pq5rtJnrN8ZICGGqN2stfd9PfS6EQAgB\r\nrTWr1Yq2bWnWr6jrms1mw2q1wlo71V8IYaqT875T/j2E3H+UUlijSCkQwgAxgUpsH/Y4q1FJOOx3\r\nPNzfcTwegYRzjnrzYhofxpipX0LuA69evZ7GVGmblBJK5TIeD2Fqd8jjvbSxUmpq6/Jd13Xs93sO\r\nhwN93/PTN9+RUj7XZnPN7atX3Lx8Sb1eYYyhqdZUVUVVtyhrSFEIKRLH7n1VKZQShESMnpQCqIQx\r\nCmsNIeQ26XvPYT/Q9x5JGmsrnK15+9krvPfE6NEGnHNonftGCAFb+Tw/pLQYt/PYirJlGDzd4UgY\r\n8rXiEOm7jmEYOOy7XCdDYOh6+uNA3/fEIZJSYkUevz55ouS+gwZjFBjN4XDI9z9Ehj4RRVM3G66v\r\nb1mtN8Q213NKaZprS3ss676M0dK+Zf6LOuR2F4j9wH67Y3//QLc/4L1Ha03btgRJ3G0f2B32RAXK\r\n5POv9PXU/6drG6a+FOKBGCNKKdq25erqiqZpUCr3pXVdnfz+qWdWsdIOWmucczjnuG6vpvKWMj11\r\nvvLvcuwopZA4n/8pW56znKeMdRHh/f2P9H1PN7Z3qeNybIxxOkdpi+UcG1RuM0lqvEd9cs/eR5A8\r\n94BGKwvM99RLPGnPZVunlKb5cnn/5/VwXu/Fzo9ZHluOj6F7st6e++15+aPSj37znJ3fe7bH64NH\r\nz9AnylaO06Lm+bN2rJuWpqqxY/91KkzHGvLzXTOXKcTH5VzWz/K5+FT7W2s/Wr7ym9Jfz+vzX/7P\r\n/9PHK+23tP/hX/zLpnPsD92RpBRaK5KAGsuqUSR+v7XcxS52sYtd7GIXu9jFfjdLotAaUoxcrVrs\r\nMAzAY+CmLCSXi8vzRbFSivQJ5+dT9tzC+g9lS+fvyeuH4pQLMc4vY+IJoGGMmQAZa+20GK+qBkNZ\r\nXDM50t73IxA0OjxkZ09SmJzQlBJa/Mn9nC/OC2iy/Gz5PkbNUz7P7AjMnz0FhJ47ZPmlp7+XDsfy\r\nuPJ3xQwKlldxbLNT9PH2XZ6/OKBPga3Lz5fHOmcQiYQwEGMBbjUaS0qa3W6HNeU8iuNhi4jw8uVL\r\nbl9eo+qGruvYbh+IMbLb7djtHtjv91xfX7PetIBmvW7HitWIlLY2vHnzZgL/ttsdx+MR7/1YR4r1\r\n6ooYI95HvPcMg6fvPF3X4Zxjc7Wa+lQBnJ8DMko9hxAmIKwZMrhSHNC2bdFaT33Uez+18bIeFz1g\r\nrFcFotDaUlUaYkIkYm1PVVVYBUZrUsig0/F45Hg8EnWFtZaqqqa2CSHgvSeEwPX1zVlfEoyZ29Za\r\nJiCmgJblHq21dF13AswvgZCqqoi3R/rO0/c9h8MOtBAlcZUCTbvCmYooGsGDgOjsjpqx3CFEqqrC\r\n6Ax49P2RJIGmqbC2nurSGDe1fXfM1xv6wHady28rByS6YUBI+bO6QVAkPCGV8cBpG9gW4yqaTYOW\r\ncTwmiD4DvYfdjhTBe58BwWNHf+zwPoOkpksjaDwQ4kBIHpEE5HlNtytCSGjlIXpCEHQ0qCDoAElA\r\nUkJSQknpZ4mUCvh6CvYLgtIakYTSGtzYp87mHQAlYPW4gYJM7Wy0QltDkIQM5Xf57Hm+1iCS+yQL\r\noG0Ew1JKGKOfHC/LV9kseAo0KeacewR+weONknPwqXzv3Lx5M5X77DwsAT0giZDGv5flK+OnlHV5\r\nvfLvkwCX6Ols5/dtjEGhUcqgcCMIOJsT9WheED2WTwskyW1enkvzTQFgF8+n8/stZZvqPc11qUfQ\r\nTln7aA3w3MbTOfic63N57OM6W1oZe8vjlNLPHr8sw7PfyXw2gzqZq/L7EVCXcn9qqjsRwZjqyX5b\r\n2mRZ5qfuI2+kqGmdUs673CT7FCj6h7Ld8agP3TG/KWNXxjWHAuH3Wyte7GIXu9jFLnaxi13sdzTR\r\nKC1ITFitsAUcewpwgFPw7NwZygvTjzPr4PlF9XiF3+n+f1f7FLjorFssvCGESIzp0e75EvgrQKDW\r\nGrdusU7jrKOqLMYocpVcAYl3797lc6i8659SZjBJiCgluJF5Nztt2fk9v+/nmBDPYWvTjrtRT56r\r\nfJaYQcL8m9PjPwb+ARg1A4VLxkj5rOtmZsdTTkgkAGkEKRPZvUxAQKlIjD1KRbROZ7/XgCaEhHOG\r\nlAIxeqrK0jTVxL40NjP+mqbBe8+x6zNjal3x5Vdv6VLFbr8nCfgQSccDPgaGEDn2A+2uxofEbXyR\r\nwSejQBlCTHRdoKoqnHMTK2m/P7DbZRBwGIbJyc2AYWbvxZA4HA55bKnMrmmahqZpJjCiMOAKU660\r\nQ3HyMqvH4x92BB9RaIy2KPQExGllSOP4WoKoSxAljSyg0g/yMQalIylprjc3ub/6Aasd19c3uf/r\r\nB3a7He/evaOqqomJWMDqAprt97vMEKzrEyC9sAG9nctUGFlLdu2y/5RzVlU1sV7qt5/R9z0PDzvu\r\n7u549+MPHA4HfPK8fv2ag1aIiminqUwGbLXNTr/WGo4QA0QleJ8QMSgEEYX3gRA8SunRX9ekmNlU\r\nQx9ISWg3VWaGOov3kd1un/vXasXVVYNWFqUSxmQwS2uNECdwNERIkhAliAanx7pwgkmJZr0Z+0wY\r\nAcGBFMLE7HS9w/uBvj/SD0dC6EkSUJL71mE/4H2kOgw0bmDoBaNrGtvgsLjWPgLsy/he9pdzQKd8\r\nNwwHtLFYpVECRkBHgZBQMdG0jto40IrOVXjnMwBrDVYSKtlH58/nzn/bERwqYHDZZClzcErxZF46\r\nL0NmYuppU6YAIlVVZfB4ZBUWEOW8vFX1GNxbzmV+QWaa5sg0l6WqmhNQJqUEKSExIimhtUWpmMec\r\nSmg9gzxp+v6Ubbmcb40+nZcz1ljuX9N3w4jYlWfKKYDWjf14Cajl8+XX+fx/XtbnNtee+v4plmA6\r\n2/x6qp5LX8j/5jKkUsf648zy5+5r8cnv9Ptz01pDStMum2beuFICKuX7lfHaSjL4W55kzmlk8V85\r\n58SsHftnBthPAWRG4F6PzFtTGNIp5uvEBHo+74h+zn//Ae2vgSZFYopjWTUZ8Qt5jaJAPrEReLGL\r\nXexiF7vYxS52sT+sqZTycjkJPkasDx8PxQg+TH8/BaRZbR999rvYH5v596ldb6PrMWw3TYBIcTDK\r\n75VKKCVonSZGYFmcH/c/UdcVTVvhnMnhgk7jXAY3VlcrtM5OrLEaCCQJ47Uiw/3SeS2gz+nO/WOn\r\ndgbXnHkcqra0c+frnEUgMpz89pxxovUps+P8GlZBBgzzgr+UY3JG49P1X64fjCGlGdDUWueyExE0\r\nWmf/TunMmppCkkWDaLRSpOgZfIerDEkcKIN1Gm0q6tbRtjWrVUsIDh97AF599oq3n7/lp7uE0S0i\r\nBhFDDMKuPxK8EAN80IkYZQJ02rbGrisqV2OMJQwDxhiqqqauG6qqnhhOfd+zfein30NhuUHwub89\r\nPDzgnJtYogVcLn2xMG9LfRWgrLAs/TBM4M0wDBwOB66urlitVjMIqGeWVOlP5fzBj2AAxZlUiEqo\r\npBDRGOOQIEQ01tgxdLpBa4e2lu/ev5sAyhhjDkUegUyt9RTKuAQwrXXEmMbXKfPpnGlcwJcle7EA\r\npFVVQaWJcUVVOVIKeP8Tx+OW+zsLJF6+eUNUETFCSO0IPDqsGwFR2+b+pQq7KZEksyBjFMCAGBQK\r\noxXGRIzOzDOlEh8eDmjb4GpDlEQ3pBzuahMrMXQHP24oeJxzNI3DugrBEdOAbiqi95mhKZFoDM7q\r\ngm3jWFNXJcQ0zxukWarAdzksdvAHou+Joc9h2ykgkjjue2IQfB8zEHhMSNQYXWFtxdGN/UfHJ9lu\r\nJQy/vGREhSTrCaBDJMMSCUJAx4QFamMQIPY9yVpEgQweQkDpzL4yQHxi3ilh4UophgXzMzNKh4k5\r\nWu7tqblpCaCV96UfnrL4lsfnVwGcyubWOfNu+bISz35/HnYJEytvZGSKRJRElKQplL+AwefhnQXw\r\nXFopR0oJ9BIMZBrXeQ4uz5bM4FziXPn+MxhV7ryEMC83cEwZf4uyLTePPhX2rBb1qxYbS+WetX16\r\n87CUeQl+fcqWx/z2bLeP/+ZT65OyuYNeRAcYgxtBSZXmDTWdtxXGq87PgzJ3ngOpp4D3GZuUuT+e\r\nh6wvQ33/2OurYj//s58z3H1L13UkpUBpkGXtXuxiF7vYxS52sYtd7O/aVCq+fsqRbZJm8O/pkKKl\r\nVtXZyf4Ai8s/Nfh37vAuQ6AKyLI89tx53IV+BHRsplRKxBhF01bUdc2Ll23+ziicNThXoU1dzohq\r\n6onhFcIc0rnU3Vs6eyKnTrri1OF9xNyMi1Cx0ctbhnFNIGepqzNHQ87AQ33GPDSyYBKox+2p249W\r\nP502J3pi2aE3E0lhDvEroNfs4BhjCIOn646AsFq1aD06uiiM0VxdrSdmmtZ6AqVevXpN267Y//pH\r\nDrsjwzGidQ4ZTqFn6CKd7YmpgyR0hyMvXrzgzZvXrJp11iyLEGO5VgajCju0qiq6rkOxo+s6um4Y\r\nAb7MOrMuA5paN1MYbWnnErpbwLCJMVTaYNFHRRtEEl1/JESPDwMxBWLKen+bzeaRZtTyPNYuwAzJ\r\nfTKloks39ueqxrkaJLMRUcJqfUXVrujCMOnw3d295/7esNlsuLm5YbVaAaMGY4hT3zDGMAyB47HH\r\nmmpi8i3DHovuZtM0U/kLEFDqGCAOo0YgLa/TK+q64tj3xJTY7R/gzrBarRARNpC1/0ofF6GiIYYI\r\nKqGUoW3XCJlFGqNHxKKLXprWOJtoGrA2IUkRdWLoI/cfHsbxqHG2IobE/YcHwHI89JN243otU5m8\r\nh6atiCnRDwMxBIwRqspmBqAGW4eZseUUtgajcoixiCDtBhMDOjqSH5DkUVqwCrRWfHj/gNUO0MQ+\r\n0R8DsU8Y43Cm4of93Un9no/fJbBb/l4e06TcHpUypCbS25q9reibI9GHSbczAatqyNdQgMvgSHLt\r\nCdhU+mYG+xU+1AsJAH0iv1BVFTrN4Y7n/wJT2PiSMVf0Pquq4qq5OpEXOJdGWI67Yst5eTW25bk9\r\n91kJ258AVckh5G3bThsAS53UUzaeTIzgibmrZ4ZdJhWmE/Zf35UwepNZhCyYcioR+8eaf+V8IoKr\r\nHof1Ple+6bTPAFX5jxkIzAc/HXFQPtO6MEPPwV39qH6euoenNrWW70to+W9TlqcsxkhC0GN4q+QH\r\nKaKzxp+MYda6hDynDJxLeW7qvHGWyHIFAEYbtDXTJtCSsSciJPJLEIzWiMq/T4u1nKh87iUQWP59\r\napz8vvbzn/8c/faGvh9G8G9xjfTHXeNd7GIXu9jFLnaxi13sedMCqJR1qe3J+m92voqlJ6JETr7/\r\nPRNy/LG3hj+1wM2sCCjOffnNDLA8DoteOhK2cmhjEJUdgRAHVFBESYQobHfvR/CpYb1esVqtaNoq\r\n69JpzdXqZnLqchign1ggmfm1ZN4sHPGYGTsyhOm+stN86gzFEKEAa0plx2IZyhWXxxdQZK47WYC/\r\nyMyUKR0iyDnj4vT6tmo+2haJSEqztlEG/xQKi1aSQ3c1GJ0vqVVJApE/O3o/Jf44Ho80TZOTXJis\r\ndyfGgq1QzlE3De3VTWZkXt8QxLB9uGe/2+GHjqZpMEqjEVKMOWlI8mzvH+gOR7rDEYkJBWw2m1wm\r\nbRBlkGRyKKO1NE0OnXWuxuia7XZLCO/pez8x4JaahqXtSx0A1HU9sdvOmVfLsL/VupkSBnTdAe97\r\nICes0Hpmyi3DF5dAjqpWMyMwpjGCTaFEQEVAY8c+k0LAhw5BY+oVlTH8/BeR9+8/8M03A/cPdwx9\r\nYBh6GLUgc7hvLmsIWdMvRY+1YQyXThOYsQz5zbqZnrqup+9LGNyynlIEawxX7pr1ZsOL7iUf7h94\r\n9+GO7XbLYbuDmLDKYrFZ96BWaHJYXkx5rAkR5zSuqtDa0IswDGES7odcn9ZpbBwddhXRlcOHgc6H\r\nEVRyGGMRiRyHLa9evSVIx6HvGAYBExGVsLZCGU1/7LKWX9cTY8RasMpCncO2Yzwuxk+epzKdbAz9\r\nlgTaoKjRxqIkU7vdCJK9tBtEFBqFwkEUwpDZxUoprnl5stmw/FspxfF4nPre+caEiDAcd5lVqrJO\r\nZNc0VG1DfzhOfayua0Qr1scbbrpj5vTa3M6DV4/6tlJqZGMqum41ld0YM4XYl4Q5x+PxBMxYglhK\r\nKa5uTtlq5ZgC1NfGTSD7kh27nLPOgaMTAOUZZnP5TQHAS9nK2Cv1eHV7nfUc+/5JlttSA3PeJArT\r\nOAgqPmL9xTCDqQ8PD6RJb9KMYehq3KgSxIRH9bacY5Q6rb+5LtQIVLpH97z8fU4OxCKc+fS4FFQ5\r\n26M6VBTm33hvZ4eICMJzYcmM1zVTOU7Bw7ktz9vsKXuqD+QLjGXSGtGKpBYAoFI4s5rAL5E4aqkW\r\nIPTpUPpl/3tOp/e3AfCeGg+f+s3vYylkvWQ0oDLHUefdxpEbfNH8u9jFLnaxi13sYhf7u7RMnpK8\r\n6R8jVlJ4dMBynTsxv5aL5MWx/JEWksWe29n/Q1nJcHkeMlYYfuchNI8dnTSG6Y56d5J/NwyZyWeU\r\nInjP0Av7XcDa/Yn+2uuXaqGZtqKtDDn5yOjIpTlsMkY/hoj1eG+zI0h/4myxcNJEhNvXb6awsnLO\r\nYQg5YcEw8ObV9cnxpRzl1TTNSX095zhMv0mPMxUuDnr0+8raHFm5qH9RGqs0javw7nG2ySyiDxIi\r\nbV1jR2Br6HLijXazpnFZa+v21ZsxDHU1ssVKCGxLiPDypuZqbbh3gmZAkZMjaAOVixwOcdRUEvbb\r\nLV8PA0N34KuvvuLVq1fYZqY2Dn0J6xO0stSVYRgG1psWY1+xPrRjQpEdD/eZEfhn//iXY0IQPyUL\r\n6fue1Wo16ZUt2U6lHxbA5GH7HsjajtblBBo+HLn7EHjYvudq82piADZNM7GKCsNoCGE6bxhBtqwX\r\nqEhR4VMCq3FGY1xNrTVqGBiCZ/CBunG8fv2C1arhs89e8e7dHe/eveM//Me/4njo+Wf/7J/Ttm1m\r\nM6oMvpUEFcOQmWHW2gnQyZlc1dRfC2i57JPLl64dpOx0ioC2htXVBltXvPrsNd9/857u0OP79+we\r\n9rSrNVdXN1N9KFdjnR3rgClzr4hkDUWd57+UMhAc4hEfjvRjQp/YO1xlctIQk4ADKWV2WbtSPDz8\r\nLd57qjphdE3lFFoPeQwPARMhDp405PceGA7HOdu4vs4bBk1DCpH9MYNqdZ3r1KfvJv06MwIcGdBM\r\nRA9JStIXw6pucI2jWi007uIwJagpyTPKe2st6zFse9nnTpjJKo71n4GpVT+chDDmLNqZPdZ1Hfvj\r\nYUpCo4xmOPQn5y59s4BFS/C7zCfWWqo6t9nNq5ePWE3LOfo8bLLM6WVcrW1zoud6HmZbkuksgcml\r\n5uv2wU/nX4L6S8BuOXedM/fqNpzU6Xlfv7u7m65V5onlRsHd/j6DgKGEEJ+CtLdvbgkh4YeSZduQ\r\n2b3ppM6XbbCs72V5l3VYPvP+NBvteRm1PW2PUxBZcKp+cnzPz485icZTmofdtH55GsQrzMHl58ty\r\nnH92boV5/SwALApRox6psxhrwWiMs3nTRKkx2UcG/5Sb71ELmMpgRU7qPKWswOpTPNm0EclagUoE\r\nXea/ZzQZC0O/rAlgGfX9x2Hilftj1DUE8rUlRxtcYoAvdrGLXexiF7vYxf5uTbKyFwWRsR/b7YZP\r\ng2+fwuaeEwT/be333aX+VPk+dp2nFv2Pfkc6yWJoR60fSUIIHtdcjdk7VU4WoNPIyMqO1ff9e6zV\r\nNG09atM1tKt6TB5iuLq6WlytMHCywx6ixyTziJWzfL/b7hYsQnuSXGIYhswMXNaTjMy/cbfeD+HE\r\noS7O2MQGUaf1fALiSc78uqxfOWMKLp2vyfFZMHQKILEU5D9xAGNOHjABZM6x3x3wQ9bPaq4MytQo\r\n44hStJcMyrr80gFtItpElM6oOGpAJJFEUzS6ih5j3yceHh746aefSCnx5ouvFg5/ZuCATO1b1zmU\r\nODM9IaUwZiauMUbxzTffUNf1BHwV1lvOXnuYWHtt207ZbpfWtktwJBFCT4wDXTe2l2omtiEwsevK\r\nv93RT/Vf+k1xOEudpzIWtMosM2MzSxAhpoDSUFWW9bodMxp3E8Dzq1/9ilW74cWLF7x8+Yr1eo1z\r\nWQtwGAa6botSiu12O/XNohvonMOPzM6nwE8RQVejJltShBAwQ8S4QNXUmXm0G5mFIZFG1pvvB7wL\r\naDyGnqznOYYRp0CMZYxaoB/7REKbgKuEmLIja2JiiBkA64cHkgREAtZpmqaiNhXagpaAHvtRlAhS\r\ngzIYl3DaYWuHM5ZYR1KaE5tYW9H3fQ4vHrMsCx4h4INA50EZlLZo4zLrVwQjFXYcp/2wx2g3jtWK\r\nIUDyYeybFV3Y0w89SilaZ1FKQ4popahGFt85I2wZIqzMqVbfOXh0PB6nfpvHTz9p2xljMP4MiFKn\r\n2UsV5mQenn5nx40Z8zgb/XJ+KcDjOShY/q7ETPW91MQsrwKWnwJKy/nv5mx+PJWNOGfzLetQRKjc\r\n9mQuPK/D9Xo93VthwxZAUSnF636PiJrapOjFzkzOfgwHBsWsk+jHZ8ix70/u51xuooSrn9fDPB7t\r\nSSbuMueXhDRLRmmeG4bpFWPEpfqkTy2B0fPn7zkAnfvHaVhrfjP/GfxpQphTgBhC9I/6xPJ9STi0\r\nvJflMVXdgDAq1J7KMyijCf38/NOULPGZ5ygKjLPT2DkHPuF0c/JkLTKyC9Ejc1ZOw+b1mNBIPQOK\r\n/rFMkZcP02apFIBVLtjfxS52sYtd7GIXu9jfsYlSoGRaM9vndo6LfQp8Ux/R7MmL5I8vOJe712Xh\r\nvHy/PO1TDlgW5X/6vn874PD3D0WZLyMn96u1Jskw33d8DI5VLifcUPeCc2bMGrtmc7Wirmt83IzZ\r\namuUsiAeW9W06w3OGYZ9P4E2PvQ5A6z36KBIyaDtGVOHzCAUHVBuwJwxLyY0b7TB9yBZ2DyLm+fl\r\nfc5enMPSHtfHglmhx38X30+i5084x+fg1pJxWd4v2TXeR3qfAasXty+JImy3W3wM3N6+xmmDMwpn\r\nDFEKQ6ywFLMWljEuJ7YQAbGZ9SaJGCyF2ZlSYdsMkwO62+2oVzfUdc1q3YzggSKliB5DZYu+W13X\r\nI+CmR1YTdJ3hw907RBJ1XQE5RDZfM4xOck8Ida5zrdC6Hq+Ts7SmyMLJzuDq0pHc7R7wvifGDMq1\r\n7XrKymutRRMgCUkyGy+lSIwKjCGpkm1Uk9AZZBA1Zgg2GcyMCmNyhmVrG7SuxjqsaOo93333LX1/\r\nZH/YcjgcePv2c25uXtLULdY47n3WOuy6joeHB2KM1HXN7e0tNzc3EwhY1/UE0gBzqLDJzMuUEkZX\r\nGB2wNlGNff7zzyuOxyP7/XFktEWGoeNw0IQwYIxCGEji5rlKCWrU3BOxY7IP0KpBMaBVhXOZgad8\r\nRwhj2HW/IwRPVVtQK5SuCXFM+BJz2GWSGiMWpUzuf3GTwS5ncfXIbqKwrCI+BNA9STKrGBVHrciE\r\nUpFj1xFCmECaApw5l8PGlTSQPChFGPQUIu6cA9UydIbgMxCcQo21FUaFkXWYQ65VSYKhcxIJUYJR\r\n43xiumlcnoMoAFu7fQTilznfGENtqmlsPaVrmef3x59P438hUfAcA/AcFFx+FtUM1qEUcQH8pZQw\r\nY/j9kkklIhOzyboZfDxn/QHst9uzOeuUCT3Y9el5z0L7Vb1CWYsyJqv1xYiOs07f9QIcPWfyAez3\r\n+6lPlP4RQqDruiypsNAXfAoE7LruBPwr558BP/sImF/KCpSxOgwDfZ+1L5csdH/czc+v8dm1/L4A\r\nfaffQdlTtP1p/S/rsmxoPMfaU0rR+ces0GX7ef/xbMQx5rBsoww6KXSKqBQRyRmcDfFRXzQwJr2B\r\nEOb1wdMMw/nfc0kNAI1BlCapM/BvwZIsny3tjwIEqjFreQn4VXOobwE7CziYEcLl+8yERCuSgERB\r\nrCYBlWi8FhoJDFHTOGE3OBrbEWixHIlRoaxgEkQMQWWw2+SdK8SZzDTVoILgrUVCoFJwJOJUhQll\r\ngwuSztIfzlhi32GtIyiwIRJNA+EAbgN+B6amksjBChLBAUoz6TJW2hCHPkuQAGgzrRNF1JgwSaPI\r\nQHFK6WS+dM4RRq3UZb8ux+S2VGhr8X1H5QyKPKaMtQw+4qxDna3tLnaxi13sYhe72H/6JpAltkc/\r\n1z7FloCnmVzFlsfOxL6nmHOFPfO8ZQaJenbBmtK8W1/EufOCB1I6DSs9v9e/i53uT9n5zv3yBaB1\r\nAZMCXZc1tg6HA/f3Fc5lQGq9XnN1dZUZWSoz+DabDavVCh+yc61cBiiiytlIbZMBImuuJqAkawrO\r\nzAvvoTVXJ22d72Vm8WiJlLbNeZCFmGIWWwNSCI+cm+X5nHkcdjX/LRMQl2071gAAIABJREFUCE8z\r\nd5b1t2TXFKaJ95HoB9Sq5fr6mpJBN6VE29ZgshaTjA78vOgW0GoClkp23sySA6XMCD54soZecX4j\r\nwyBst0LfH6n+5m+4vb3ljXnNer2eHbyRXZekm/poCS0tdWut5fXrzMQ5HjsOh+OYObgaQ8HXo+aa\r\nMAwerTtEmPTKjLH47jhdT+synuZQvGEIZHH5orkXiCFl9F/UWNaRmbGod6XUFPKWv8+JTTJLDozJ\r\nWlfW1FMSAaMjddVyfZ3r6/r6mqpyPDw88OHDPd9+9xv2hy0/e/sFb968YbPZkORqAoFzv7/n/v6e\r\nw+HAu3fv+PLLLyfdP8hlL85PSgkVisNfJLQySJ13ORLrdc5QXNc1h8Mha6ulga6PhFihdT5nXddT\r\nn7Iug3ClTxSGkdYKXWXQyoYMvsZOsFYjRGKyxNThw8D+MBCim9qjtIFWXe5bGQKgcmHszxmMNdqd\r\nas5pQTK/mCT5vdVQOYVzmq7PSVlSmpOliCi0zuHbRXOt1PFud6DrOppmhXMt3gsh47/YAEIe/yhF\r\nTIpj58/CWUt9539DGjX3ZKEPx/w0EG0QrUlKZ2dfGxTj5o3WJGVGzUKmVBQiccq3niRnHC/9u/TR\r\nmSH8fEIDGDUups2GafaZz1PNmnVq3NAolnOzL1hUambHhpGJac2cjTo9ATj68n48H+dzYXwc6rt8\r\nPnSDxybBWln0+7wRYFCY8nzUOm84nJ1rtbma7m+pp2lchRsGrq6uToDD82dmjPEE/CvjsAB+KZ7X\r\n+SmIWPrdUscW5s27/vB+Uadz1uMC/hUtxCJTUYDBcp8fvt89uuY5iLms3yXDUERgM4OvJ+0yWuVO\r\n1y/nbRSG3M8EA8qSMETRRNGEpDB1U5A7UBnmkfK3UoTjw6L/5tfyGbqUafjYWk0v+syyDz4befHH\r\nWht9Al+arqrm91Pda0GlkNeMDWivIHj6ytKGREJjtaXrBypjSeJyBmUxGG2JUaGNIfojurIQA2uX\r\n9Zf7sEOrFhVqDniuY4eKsLOOWlcQj6SqxQefnx+Sgcwh9NjK4MdNj84JThLJQLARpzWp6zlWoMTh\r\nVMAqwyHm9YVR0A+euloT0zCGyvs8/xudn1sISqVJMsU5NwHzhf0+b0CoaTNWYpo+E/JazGhNKomx\r\nXI0PAVtldu0n9uEvdrGLXexiF7vYf6Kmpv+BXe78P2VLzaLpBGcL/fO/l/8+x74rx1hrn92dP9/J\r\nXzJDgMmRee7e/j7Yc/VX7lPEo5Q+YVYcDofRadeEEFivD2y3R6ypJtBoszmw2Wy4etGM2YYNykCl\r\nr2hasDaDF9vde5yrqHQGcUSKNuHIttlXk0O0FJMvbeLqOdvseUifiLAaNe+eaj9gzGb4tF5b/lpR\r\n5IBOXsU5L8ye8T+jNM5Y6qoe+w5TYojNasUQQnayk2DGel06TQlBYmZUed9P7LymmcNji8OaUliA\r\nDqUvm+n7vu/5+uuv6ft+SlDQts3EgskJHOyJMxZjDo0tO/qr9pbtdsv79+/ZbrcjaNlyc5MZhUVz\r\nLAOEx6msTdOMOnPLcDx1xgYYNbZ8pJOsKdd3w6T/5b3HtatHDr61dgqXLOARzMyaZXmsmTXRlBKs\r\ndVOIctamq7m6usJay/fff88PP3zL8bhj8Hs+++wznN3QNO0Y+nyFMY7379/TdR3e79D6e6qqYr1e\r\nT4B3YS4aY4hhmZxBsv6+TmTmScI5Q0we68BViq4zE4gw+AcORwixIomnqsa20xWVqzHaItKRc2rM\r\niSC0chjdkFKgJScLqaoK5zT2kBj8EaUjMSUOx8PYDiBJjRsd2Vk1xrDbbaf6rqp67K9zG5qR6Zn7\r\nYU7YYK1FW4MywmozAmPKAgpJJaGFpaoc220Jl1+Gs+ZwWoVBdE1SmdU5RE0YGSNaJ7yAczk7sl4w\r\nx5ZzrP2E7MP1zeqjmzBPfbOcwSfoRc2gSTlGwQRiPAX+/TZsJ1et5usuNhfK3w8PDxPYnTOJK2LS\r\n+RUFMXouiJTbm4HQan316JoigpQNAH2qCXh+nzHN2a2XTLbCnBz2x+l6cxn0xCxbb66neV0AjMFq\r\nja4a6jSzsgygn2CgaZGp/4kIjDIOOfTaErq4uO4i/Ln0X2PQKaGriEtzSPfUp+X6o8+XAvYtGYHL\r\n6/3tX33zJMBYnmnLsN3z0OMQAnYzz1/n115uOC03tsq5U0o5wYcIhjmRTN00VOOGUjuM/XPB71r+\r\nV29uTuq73Ov5muh83E1lUh4hs4InRv0IWCulCBIebeqURv/7tFayWvOPXt7gjOabdx/45Zc/49/8\r\n6jfUdmBlao7+gHKWujaEDpQbCD6SpMNZS8IzREVIipVJeKDS8M9/8RVUa7rjHf/qr7+lUwfWYuhD\r\nxFfQKkUMgcEqVDqgNBhlcqZmiaDBGM3heMQ4zcY4en/EWQHfodTAzYsbblYtv/7+jrWFwQ9Yu2YQ\r\nT60S4ip60fzi85+hlMKHwA8/vqPrOlarNT6ErOM4Jv+SlJOKGa2JIeDGTbgQBpomJ/iCPAZDyMxU\r\n5xwhBNq2oWlqfvrpHVpprHKZKcus9XOxi13sYhe72MX+4ZotTv5z9qkFYtF0Wx773L9PnW9mwM0O\r\n13LXfrkLfv77p8DF38bh+7u0c626c02ort9h9Mj6GTNPFn05SZlZJUlzPAyIeILP59vvAvdNx2pX\r\n0TQVbVvjKoMxiqpytKsaZUHbFmNGFheJmHIIqMFmJqV2jxgRIcxhVy2b0XHyjzJVppSIu+7JMheH\r\npmmazHaAk5cu2oicOj3nbVpV1fR5YWMVsM5ai3GZBdeu1xPAkRfFgYeHB17UGySVPlWyR85lLXp6\r\nZVGtVE4yUEIpl4LrSwZUCUW8v78nJk+S7GB/9tlrNpvN6CzHSZKslCtnK11NO/x9N/eJuq7pug4R\r\nGcEvz4sXL050sJbOr4jgmmrhPM7OaXGUrWkmLa5TVg103cD6RQCup3o+d3IL+7S0a7GiQ2aUJaWA\r\nD54YMjjiXIVzFUrl+eH29paqtjRtxQ8/fMfxuOfrb37F3YfvefvZL7m5ueHVq1esVisK43C73TIM\r\nA9vtFmPMxIi9vr7m5uZmAhRTnMNAJ2aYLY58IMmA1pq6dlSVpW0rDocD+8OWvgfUgJBZbt4LKeX5\r\nsABd3nu0SogorK1ytlRAK0FpR11FtIHUdLjKYJ3m2D0QQgcqYUyH1gUwzm2QYiKmgGBBZZaQShYZ\r\n+rFv6RnkUdWi75kRJGzwMc8ZwadJH7CAf6AJ6cjgK4wRYgwkEtYZVqtmAhu1Aa3rsb0jYjURcgbh\r\nmCAZ+j4nKLKSsyVba0dgIZepdlcnY/cc3F+tVlOfK+WAOeN0sIskSnLK4haRCVQXFnO76On8FU8D\r\nJE+x0QpQeAKOR3PCmCph19oYtNJUbr24Ljk8UVmscVgDysyagk9tgCzH6+JmUDKy72WhWTj+Wxju\r\nANaANRZrRvBPLRJxaIPUj2USTjL3aktSilDaRZucTdpkFukym/B0A2oe6zFFwCKS+2QYGaYGRQRE\r\n1+XCc0vIfB6lTGZ0qZmdFoEYgSg4Vdpy/FeBMvOtGPcYDFuWsW1u8n0uwL9l2PFy7joPPw4hcLXZ\r\nnICO53qDRZ9yGZWwfA76BfNda41dJI/RWqNGzUGVHvc9ACf+0bjJ13+8sXl+nAJ06dZz954+V4A9\r\nCxUu+sSnDfWnNRFBSOg6sWodzdHyqtHctg1/8dUXGHXN/eEdtzdrktI4ZdilSHzY8u3dO3751Zf0\r\nCP/7b77lOEQaCWyPnrZt0KL597/6mi9uW/7pm58x6IF/dPWa9/uOH3cf+OWb1wwpsouK9z98y5tX\r\nr1FReHWdn7vaabq+44f371BO8dXLW971gU1tSHZFv3vHQzfwy8+/QKLiz9/c8O5hx398d0AFodaJ\r\n/fGAaV7C0PPh/p7VasXLTUt1+wLnHMfjkb7vuXnxkmHwiCT2hwN1VaG1Zr1e53tRCu8HDoe8EbXZ\r\nbKb1TknS1PVHXr24xqTAan3Foe+5u9+PDOiLXexiF7vYxS72D91s0dD6yAEn788dnGVYzW+7k/zc\r\njvZyYXzuyC0/f+5ezhfW58f/KWzJrCzlWNZVBhlOQ5VAg2iUAucyKDMMYYy0zeGHfT/gfeC79/3I\r\nilpnDTYJGKPYbNasNy0vX17hKp212kTwPuveqXFHuzFjGInWoEFbsNXsXGtVI8QTcDDG2bEKZvfI\r\ncVpqT6Fnx1mSTNplpR5cdeacyAwHighRZjaGUWCQLEuoFdoaDJqqSRhj6X0OoV61G/bdkeOx5+Wi\r\n/VNKpJDDIUv4czWG/Zawzww+ZQBWJNK2VychbDMbdczOqSL7/X4BmoYxpHU1nq+Ebc3gX2n3EAI7\r\nPVBVDucsbdtMrM/MTPH0/aypZm1JSJDo+45h6GnVZmIBnfevokEIRacskeJclhAGkhlD59Uqgx4T\r\nuHnKWj0fp+UzrVxmhekKqdsRJPaEmNuiaVpSilMI03rd8u7dj9x9eM+79z/RHy03Nzccj3tevnxJ\r\n0zRcX2+oazeBf5m5NLDd5nOnFEgpMAwtq/blyRjP9z6XX+LpfRtjso5glUGf46GnJGsJcThhvw5V\r\nBg6FhWO+ABNSSihdoQSstjRVBo4q1xBTDyQqN4OvBXgoTEtrq8wuYRn2J4iEMURdsCYz8Qaf280H\r\niw/dxPq8u3s39t92DEEt4cUZfHB2wzAmv6mrFle5cXz1+KAyuqSGHNJsxnCxURvKOsXD9m4C3V2s\r\ncamE4GYAEHWajfn870oEnxJhDEVzYz9NKREBlEXpOZsrZEWBwoCxzk6AS0oyzosLzb8xWcmyjyqV\r\nWVVlXpvuizLHzkDJGpvHRZnDSCQVieM4cMqS4jyf6ZFZpwvoN01WUCCrZT2E43h/Z+yxKWPrk7IH\r\n00dor9CSX0opSEUKA9CC0qfM4vPn4/E4TNIaxuT5KCU1zeUZND61XL8jUzr1jLxAGBNWZPa4JiUF\r\nUhjrczmW2ZBzyGJhDOffLp8VcREkft6H4DRbc8kAnY/LbXj99vX07HwKwGvbdqqTEl68ZP6teBz5\r\nsKxD7/3JnFg2VqbNlTFyYRlKbNW8SRSHDMqo9LSmYwyH6fPlJs8ku6Fnxu75d/nzU2b9+ThYbs6e\r\nl+3vk6kkrHzkl199RkODazW3Vw1aBv7Vb/4v/tt/8p+jhp5//+u/5S/+8Zf8P7/5nn/6+S31l/+I\r\nN63lfRe4cQ1h1/P2zStiHXIGdYk8DB0vxHB9u8EMLf/rX/0f/Df/5T/hZ7ef86//+q+J0fOLz98S\r\nqkhwkWbl+PH4E/cf7nn7xed8/dPXfPH5F7yuG4buyGebFXXX87/95t/yX799S9f37O7fYfFUJoI/\r\nIr7DaLi5WuGsY9sNGDGoOKCT46pp8HHgp+9+4PPPP8dcrfn+hx+JMXJzc0OlhEpD01QMxz2Hw54X\r\nNxv6/QO3Nzdjv8ibbnXV8uGnn7i9fY3f9fj9A3E4otoaQ6LWwmHoUbb+UzfzxS52sYtd7GIX+xPb\r\nlPADnl4YFvDvuUWj9/1HL7DUbJuvswjrTDMjROuZcVSc93PBbZFTMFDkaaZH+exPzfx7Cqxc3lPd\r\nVGM44Cn4l5kqemQwyOgI5Gy9ma2TndjjLiJhIA56XBBGjFX4TnHcJe7vPtA0DatVQ9NWWKupqjVN\r\nkwGv3f79eJ8aZTR6dCZhbAM9M8uSxPE+wwwO1s3kmDyVrXG73effpww4Ztxu1OI6d86fAA/KjjbM\r\nLMrCUoNMUBI0MUFIYGxFu7mCkSmjRkc7O9vZyYgSSSGSosdqhzMVztisT0jEaA3W0jYNq6aeAKGU\r\nEqQi4J7Ls16vp7DdGAPr9Xpk6+WFdlU3C4d11uNrmiaXNR1HdgmUzMK57oUYNcPQTcCZc3P4nffZ\r\nefWSJg3EqqonvcBSh303THVXkuNEJfgAqEjd1wzHDqfHsE5bITGSRIhDnBks439LcFEpNWmyWafG\r\ne7YMXhGSEJNnvbnO7CJj0NZgK4etamxVc39/z/bDPoegE0mSWYJNkzNeN23F9c1m0gLc7XY8bD8Q\r\n4pDPPayxNidaMRhQ6kSDLPdfByrr2IkkjKlwrvTZmXWTYp6LUoqZyZkCw2BYrTaZkZs0KVm0ytqH\r\nM3Ns1OkSAalwdoO1eXxqA02zmsCuvu85Hvc5Ucg4vxkXzsa/WvT/rMuYx4QfAZaEiMf7iPfQ9VuE\r\nAaUTWqeJPVzA5sPxbgQwLKgeax1RchBYSD3G1FRNTkZi7Aj82AJ0D6B65oEL6Ax4amNQKjH4J4A3\r\nrecEGfnLUZNOz+HDo+afqdyCWTUCSXFmD1uX50CVEiGOIafaYU1mnvbhcUKF5ZyrtM6Q6ogWaXUK\r\nMDW2mYGXcZNDUs5SSiKHz+Yhmec7MwKVlBDw8Ah4QZVNDEH8kMs5Mia1UlMIudaazp+CT4+esyn3\r\nEztpp8b8DEShROMHfzJ3nteBCGhlMfY0I68kn5ObpCfCpMfHU/ntpA86ammqMZO5ytS+k/ngnHlY\r\n+vqS8T6Fz2tNW61PirtkvwETeKgnwFmdAGBJBkCB1ogSlAHr5me/WoYY65xxuhpDf0MIuG6+v+Vx\r\n5V5LQqqlBMmS+be6WiHhlHVYyqZRVGlmLk6vUS8SINownXepeVj6//F4PPn98hkrIuj48Y3Tc/Dv\r\n76MppVBGcTSaf/fdt3zz/Xv+4udf4IeAMRu+unkFYtiamq2uuBPFg2oYmg3bwfLdsePf/fo7fgoa\r\nbMXDAPuuZ6USlbP82dtbbtaG+x/u+dnLz/jPXn+BTY548LxtrrjbP1BFy5ftDS/rDd2xx4pjNwjh\r\nwwE3KFqp+DD0PLy7Yxvf82cvXhC0JdUNB7PjVV1x//A1PzSGN59/wbvwPT98eA+qxfsBkkZZx/o6\r\nZwc/dD1t29KuVySEGAbaVdalTRJo2oqqcggRVEJpsszAiX7vMM3tMQohBpR1aFsRY2IYPE2zoh8C\r\nvfd/gNR2F7vYxS52sYtd7P/vdpLw45xtB0xMpeccrKqed8TPF6cpJWSIk+N1yszLv2/aOmcADP30\r\nvdaa1WrF1dUVu93uBFzKC/5F9lfsyc48PK1D+Ke2c7ZjMT8U5o9hDsNJmS2hcl2oJKgESCKEnhiz\r\nw5OZDQIc6PvieAt46LoMxvRdDm1drZtJL61t60k3DcMIHLmcSGIEejKzTYhxCe6OGlFaFoL+Yzhu\r\n4ybHcunE1Kt2YlsUh6WEX4UQMK6emQwpTdpFhRHziHmqTM42axyubhlUwo7hkNbVaG1xVSLJCB73\r\nPjvxMjpwIqQQMyOjjgyk6d5SSgjZ6aoqS107mqYmBIP3enLKsvObGUz7XvH69eusPxcD3333Hfv9\r\nli+//JK3b9+SJIzAnQPmkPYimF/VHmMVxiqs07jKUNUWd8jA9/39PSGSMzkHNzFhiqNZrzdTfS6B\r\n8eKgTkk7SFMyAFROHuFD4O59ojseOaw2tG3LarVBSR73lXMZmIoQ4hzubYzJSVKqij4NBEkEzwRu\r\nCgZXr7CV0A87bK3BWLQdchZhDNpWXN284n39Ix8+fODrr3/NTz99z4sXL3j16hVv377l9vY2s8Wc\r\nxlqFtVmDbbe753DIWnkxRtq2Zb1e0zQZCETMyDYq7LkarYTIzEDsuo7dYaCqRs1LJUAAiibmgETD\r\n4XDI13GJqgLn6hHEyufWC0BmGseSx6okwfcZsG8bx6pVbNYl22l2yodwj+glK2gEFuWU7bzUW4R5\r\nvs0SAZlVmFLCaLsALwx97ycAoxv0qA0Ixoy6jkMG07UydCLjBkMGrINPrJoy/iISEyFFouqn81t3\r\nw8RsGxOCZHZcvtfueJjnPtEEhBTHsiC4JJAy6J0zo4/zuuSxqsXhROO0RopEhYyAXExTVuPzZ8Bj\r\nzbTCPDt9HoQwg3fLcyzr+ZyxVQCelBJ1o6ZxAbN8RflNs24eh4zGgMFglJnKO9/XKXtdazuGjZfn\r\nQ2b9lXu148bQEjBagljBj5pvBojz/BBCIMXEcBweAXZLJpkxZprjc5uNmwApz9HO6YlRWTZ2JCb8\r\n4Kdn9rJeZt3MDJr7YQ6bneZ4Kcw+IYaUM8ajJ7FiSfPL92pi1xeg0TmHUpqUIkNIo+xFyTitc2i8\r\nZNai2AqlM6iZxn+LNkUGNc0ItI6sQ2QKmTYiHENEKYduaurF5kgZnzt5Ituv1rjyBA391JalHUuf\r\nVEqN8/op23gJ/qX+eFJvy75b/n4upPnvk6UE263n6IT9kPjb7+6584H4Yc9te8O//vprWtVwPCq+\r\nedchXvNXv3nH9hD56s0NL28/59uffoQYeX/0REkEFPcHjzOOb75/z9/ebflJCa+rK/7v7z+w6/f8\r\n/PYlMa74P3/8wC9eveSbDzse9occJSGavvPsguL43Y8c/JFfvPkCvzvwH3YHul7zb394z4fjgLrb\r\nY69ecFCOw0/3POz3pAQ/3e+JPo+f7RBR2pFS4u5hz5Vo6nrNDx+2dEPP7c1Lkok8HH1O5jZE9vsD\r\nSqm82UPPEIT+w3aUsqiJGu4OPR2Gu0OgO3i86hDX4DHEwXO/2180/y52sYtd7GIXuxgA6i//8i9H\r\ncsbTmnRLkfflAr58Vjenny0Xv2Xn+lxoe5mxr4AY1topucEwDFhrWa/X/Pmf/zm73Y53795xd3fH\r\n4ZAXQyXhwWHvJ0dnGT5TFrdLzbb/L/b7LpKfA/2KLR3Wp46LMT7pmD0H1k6stMl5ZWI1lCQgE5tL\r\nKdqrF2NYnxnFyh1NM2c/rZqSZKVklZSTa5guPXJ45gyngjJ6avfSnyAzOvq+J0W90BoMJ78t5V2G\r\nXAG0bcuLFy8yOHwsYF3FapXF+zMQIhn4ipkZV1UVtsqgT9d11HXN9fU1103L/f09d3fvcnILlaYk\r\nH1prrJtDnie9PJnZrB+2JVxx7stVZaf7e3mb9emur69xzk3aiQX8K+Uq46PruimzZYyRH3/8cQoX\r\nLcDbcqwFcZOTXtdZC7Gu6wW75owpc6b9o9VqCoVdtWs2m+sJSHOuRqs5G2qphxIGWlUVu37Otpnb\r\n7BR08XEOa/O+53g8jhpHeV6QcOTbb7/l3bt3U1sbY7i5ueH29parq6sp2QfAbrfj7u6O3W6X6ygI\r\n19fXvH79mhcvXo4AoJvqyOh6zBYs7Pd7tDKs12tEVNYTrHLIdgynGwy5DAoka3FWVYOzVdb9W4xH\r\nXZeEMgX9SxMzNo2glnMOVxWAwudw6xFEjrI96euSCuBUxvvpuCj95SRj6WhL0Ka8r2p3Ashn7Sgz\r\nZYx+2H9gs74eE7REnG25usphZV3Xo1UDUzb2UefRzHNI791Hnw8F2DALttvyvcVM5c73Pj5D0vlc\r\nWebJU92/OGZLPgkbXvT38zn3/L0JT8tVlDrUWp8AMkugJqWEW5sTxtf5s6icYzl+RGSah1P3fNvB\r\n42y75Zxl/iiSA2V+Ks+GZWbf5fty7gk8Sqd8oPO6WLbp+XMoHz+XvzCQC2OuZCk9P/fJNfTjDcVz\r\nsHXZvudrjJDUpEvadd20Nighx6WulklLlpqAAXm2fGVePe8TJ/dvZuaekqfB5fMNVrMoq0/9nDl5\r\nfA4s+9r59ZYboSJCJY81d5e21IpdynGUc/6P//1/9weJA/4X/8uvGtn+eBxKYpkl1DTqD8pHriQy\r\nbi1K3ugUozBj6L9YUCERjMJZR58SLkI0CpeEREKHiDMaLTnDtlSOKEIcQgZ3jcKh6L1gnKHyA0FB\r\ntDXaB5RNGJ/wKWKbmiGFrIECGKVRUTAp4Um4YAkugmqIqmOVao7pkCMnREMStNEoZ/EhYZRCJwhy\r\nWveSCasTcL6UYFzOP+U3+ZmQn0ul/5e5RmudM7ZbR4rDtPkk4yaMsQ61kPG42MUudrGLXexi/zAs\r\nKY2W7HdW1s3Zfs+dtXMQ8DwsZnqZOexwuUCHvIC5vr45Edruum4CAFNKdONnIkIYtZV8iChtEBQ/\r\n+/wLhmHg5sVLfvjhB3788Uf2+/0o0i8nTkNCQCuscdM17bPOzXJR9TzANzN61NnnxRH4ODj4lGP5\r\nKTtlfuhHn507YMvPJ9Bi0lEKo7PgGYZy3OzQrPaCGpkd1lqapma9XrNaZXC1aavpO+dGhp3Vk/Of\r\n1AdkYusBSmGsma5hraWuMiCyLE9KEGOiC9uJ8TCFPMXZ+er6AyVDsRoXu9jAkA7sukizekvf95nI\r\nMWa7NVZwI3t0u93S9T3KGlb1hiTCh/t7fAisNjkZQVVV3N7eTg680kvmyxyeLhQneyCEkcloZi03\r\nISf+OBw7uv7Ajz8Z3ux+xsuXL4lBuLm5yfVnMmAiSRFiN9VvacOSkMF7z+vXrzkcDjw8PHA8Hk+c\r\nf601w9FPupF930+gagEB8+FZ78uYJ0LQ0jC2hcf7Hh+GMRz2ChHB2jCO7Rw6aGJm1GWnQ5FSmTvy\r\nWBApAHHuX0lGTTgTxoyp4Jyh73N2wsatJzbe/f09h8OBbug5dEfe3b3n7e1rXrx4gXz2WQYCmxau\r\nAdEc9ZF3796x3W4B6Lqe1WrFZrNhs9nkDM5RFsDMmKV56HDOsblqGbxHK8GaGRRYJrUxJodvl75p\r\nTH8yB7b1Tc6uqfXYb8ZwvvGa1rr8KpsomJGVlFAKHKfZsp8Cf1Qz63ctM55qrUH1EyBQ2H/L+aGq\r\nqvx56FFiMIVNjEWSJonQ+w4fx2zB6sjhqMZMygJ6mBhQBoNVDkwNYtBiiWrBCBtDQ9X/y96bNUmS\r\nXNmZny62+BZL7rWiIOzuGcELSREKKS0U4cxPm59GEb7wgWxwHroBgpwGqgFUoXKLxRdbVXUerqqZ\r\nukdkFkAUG2jSb4pnRPhmZmpqanqPnntOmN1MRZVTCxvUFOiiik7NoHVgaL1grLGuWNpPEZsxG+Ni\r\nydsRcfwhYJR/Jl9sSPFgrDezS+opuCP3PYMmoASdjOXOUX8uWJQfZ9MFmKQFYjG4JOYR/JhNGVRk\r\ncwdUbsig/MSQT9eP6yMNDTcDzvm92BrQ4mKuMRNoJlqpGUDgwagZgc2MAAAgAElEQVS5nVL/ljFi\r\n/vv0+5PmXQii6/dgEQoYx8Twc9M9WQ5X4VwOeIRsrFDzIRMQzUkd9yXthyEQon5j7BMT/Q+0Mijl\r\nMEYRggApIfh4T5Z7jjCuU1vMQFxRGMDAEPUu9awpKMcnD/s9dtbGlnP7BQ8nc6hTUZTTBbuSFUbH\r\na0QFtHGYMMtqeO8FPEufU2BNwCsZvxfFx3XcpjLvEI7O8Snb8ocIRUB5UXFEe9JMJJXBq0f0FefP\r\nxhmZQliqiWGZ3LQLTQkQAjXyHoN8yKChFLOiCd7yHgOYo/MXECKzA6vl9TBGS3EFhaGI+1hlcySC\r\nn/arQIMJiO1Tj0Xh9UAZgcJIf5Xf3chkp6fATs2do3wZTJqfjgfvDUcvo0CGtrhvONmsdyftmNrj\r\nWD7nHOc4xznOcY5z/O8ROq7CBufF2yGBDqcr/BNzZkp25oQgZ4453x29ljMF4WGZWu7KlxKVu7s7\r\nbm9vORwOdBEILKLm2jgMrFcrnj97xheff853333Hr3/9a16/fs1+v8eaknGUcrGiKCa2Q2Es9bo6\r\nYpLlrLmkaZc0B08nw3MiOD1zwmJI7/ufd7L+kDhNXGfw4HEtqPR7O/TT+5VS7A4Hbu+3U1sWpTgX\r\nVlXFYlGxXC5ZLpdUVSWgjUplTRpjC7Q5ZlE451DBiSYb/qg/mGCo2RwxmU6ZKAL+hUkHLIFjZVmK\r\nU17nwYMPHjeOU+mZNQZrDMvFguZwoG0aLjYb0fFbSCny2I8ckONXRUVZpQRr7qtFkRgz4tA6DAMM\r\nBuUsNgTq0MXk000sD6UUh33Lfr9nv2u4v7+PoNzAer2eGHpFUdL1O0IQJ9d0HSUWjTGGq6urWMYm\r\nx50AnpTMWVtMgGoC/1LZfF3XLBaLo+vzlKHV93IduuiAmUB576UcOmkI1vVyMgdI7skJKMuvJ6WS\r\nQ2vS8ISYveK9gH9pDHHOgTuwWi14+vRaNCh3O3a7HfvmQNu2vH73lkPX0g49V1dXLJfCVLy+vubq\r\n6opFPJdd1/H69eupzV69eiXlvY0DomFFUaG1iyWE0ibDaDDmWKNsAnPDSAgzQypdI0fMtcgymkCu\r\n4KVU2ov+oLWJpSFA/Dh6nJPrRalZ7zIbeeL1KX8pMy+qWOMwejhic/Xj3bRP6TrOWT5t25LA36p6\r\nyMy7vHwyMaKEgWLwIUTdR4/BZMCuwwcYHQQMOgxoI5qG8RQjjGA5jhDELTagUVocY0MY4tHGkkqT\r\nJc0kwEwhVa6Kvh+Q9NjHBYWUKqc2UNPfaSw+Zo2dlkGe/O3zDDkc/wggkpHSp0NAHJKV+SCzULbx\r\n0IQhj2Om5wxYJsApMXtAXKUFnI5uvz4ChF7Gu1S2nsaNU3Cnbduje/opuJzA0VMW6QRedR2nc4L8\r\nOKqyOGrzNE49Brzm96D0PSYDp4L3GK0xWh9JDDz2uXSBOI2ALSECRSEaQin5W5nIwkznIsRjO/nO\r\nDwFhH1sYBHCjgKLOhQkcVSi0sRht8K47bjOO5xRaWQgmAmNS7q+YAdK+a47mZfL9yW1cJBw+FsYW\r\nU1/VmIm5n87HDxk+VIS0qBoNxvL5yA+ytY8cbvjgHyd/h49+TY63/XG79Pt8z+87f/xj3/d9x3yO\r\nc5zjHOc4xzn+F41BpL+QKgtbFeXR5DJntZwCBSlpzxl+xpbTRP80OYB5gvlYyY73nsVqGcsub9hu\r\nt2y3W/q+j2BTzd3dLWVZsNk858WL51xcbKiqkqKwvH//nt39geA9Q+9wjOiioLRFBIz8ESCTl9ie\r\nJmanfz82Mf6+1/8UkYN+eWKXMxxPGZz5eWrHbgZ5tcWj6IaRQ9tNrJFU5llVFYt6JXpvERy83ASq\r\nqmK9XrNa15S1mIoopUSsehgQIMDhfIfzDggoq9AKFiY562pCeOhcWZZPH+gU5cfw69/4qWSz67pJ\r\n4DwEYeRprWjbhq4TVtiTJ09Yr9fc3t5yc3PD02evqCrR5PPe00UNpbquWV8sGF3SN4tl5H6g72eg\r\n7PqqFF1KP2CNMGy6biA4jxsrdtut6Jd5xWHXstlccnX5hCdPnmAvFiwSeBS12hLolkC4pmkI9YLg\r\nBNBOJdSpNDjvk6lsbCqJG0fatp3OXQJM07Wc2lI+MzKOLU2TdBkHDk3Fen1BXUk5flX5+LnU/nYC\r\nQBKjB5Jhwxj3ycVxIgEx9hiEV5bNZkNVVWw2DYfDhu12O40HTdfjd1tG70QX6ckTrq+v2WwW0zEl\r\nQ5BhEODu7u5uWlRYLZ/iRj9tw5tjWYAqGg7IPgl7whqgjGBbZD+JRqXDOY+xStxelcEnHcyY2iot\r\nwJ5WCmUM/TBggyIgtCXnDT6ZJ6Bx48zIeGxMESassJLACttJz+WnRvcT4JJrn6XFlaFXKOux0dU5\r\nAUjSfwaK5XJmk+p5vDdGUZbmZMx08VoehAkbFNYu5HrWMyiTJ5lDdBr23gJejElcQOkCvKN3uX6r\r\nlvFKJx5QQBeGmcUM4CHIa8IYm0HPfIw4HfNPx/opjrb/8BzoCSpWwmpWYqaCCtM5zZnWM6g7G8OE\r\nibmVjFiE1WaMZcz64jHwJz+FJXlcSpzvf9t3R8ebFuby8uQc7A0hPNA5TOWtOSD4oQqAvA3z6zht\r\nN1+AS3IeKU4XniYg65F5Q16ynH/+wb44/+C855GDokn78rF7YT7XyY/x+wwz0gJXDrxaK+fP+1m7\r\n8Djm/TV6XgiY23XuLyZWVuSLN3mcauKehtwjNN4zsbQTk/CHRoOCHgg6GtCkJ1U2NzmjT+c4xznO\r\ncY5znOMc/8gh1bSyYGyxVVUdgXenpb3ANDHO2X0z+OcfTJzzxKCu66PJemKmJFCurmustTx58gTv\r\nPbvdjtvbW7qum3QAAZqmmbTJPv30U+q6Zrvd8qv/7zfsdjvu7u4iyyWyM7QmePcgOUyRwBytP1yK\r\nkj73sb//1PHY/uRAYJ4c5KBrOh/92EbgT0wRwOD9rCFVlSuCVwy9ONJ1rUfrfUzcDHcrMQxYrQ9s\r\nNitW64q6FnBWa83F5RKtEYMEKoahw7kZkLV0pMQ5B6CNMcK28WoCayaQMiVcPjpBxnNsrbyW2FtK\r\nzYzTcRy5vb2ZklRrLYfDgX70aKswhSUohzIVKI8pK2xVwzgniz6MBGcolMEU4tbruhtQFbYA0SFT\r\nNE3HYiEuwe/eijHFMIy8e3fDbtvTHBzea7wz1KsuMivnUmoiuDCO48SwTBqYwzDQNA273Y6maRg6\r\nSTi996AVRSXsvKIoUEazO+ylhNiNVG6kdOWk9ybtJiV3wqCK2oWu5dA4+r6cwCLxzwhYU8RzUIJm\r\nMhSZmVdRD5KYqEodZHzP7OQ9lY1TUNdLlstAXbcsl0tWq9XEHjq8fsMwDOz3+2mccc6x2+0wSovz\r\nq7WRFbgStuV+z5s3bwgh8MVnJc2hZRxHnj59SlEUsaxXwMhUGyXjQTIFkLbQ2qO0A2VAWZR2SMVt\r\nwDlJqqXUW4ETZpsxRTTTkPGwbQzWlvP3BinLkr5uCfruASiSfgcpqRyGY001AWwF4LOFFU0rL0Y4\r\nAux5+n6MZco13g145yBETTY83o30XU/QxaTHuVhUmFiSXpUFy+WSWb8wAkZ4cgavi2XeE2PxdCwy\r\nBUoGADya0QOjx+NQymdlw+IeLOdBoVTs1wlUTGtWYX4tgdB5Kesxu5sJ8DkdH1PkbLg0Rh6NqcFG\r\npl3s40LJEgAyzMedtnk6Hn/ovphKt2EG5U4/L/2dib2YgL90DSXg/mPMvFO27yk4mvYxB4/z7zqd\r\nH+QLeEA0+lEoZaK0QNLb9PH5h+Dd0TkID910Txd58udy9q1SijD2D44p1zdMx5S3/WmZ82Pn/eF5\r\nejzcODN700Jb8EZMbYKS/sMJ2zMDd4M+BhfTfk33nAzszft1+h5bfFzTWEfmozjGzu30GOD6x0bT\r\nO8YxtqmS1WXpL/64vPUc5zjHOc5xjnOc4xz/KOHViIlzPj8GbFHNzL9TZt+HGID5z9GJyLaGeWVa\r\nKeKSN2NkHthMcDsohYoT2r4XzbLlcsFiseDy8orVaj2VKyUh+nfv3tN1PRcXF1xeXrFeb+i6js3m\r\nOa+/+45vvvmG29v3wpoaR0J00/QxcdJT4pHEpOTHKRtgaqgTYewUP/SE+Y+NMKloHyePCdyckwVH\r\n0s6bkxyPNZJwe+cZvCRxSqWyWY1KDpMEgte44PCZmMz+0GOMONQulxXrzZLNZsV6vaSsLKuLpbAa\r\nlIjQaGvQUTPQWksxZsmymkv5JOENdF2Pi6WXRhuMES0h5wYGN7DePKVt1cQycW4GAYR5Ebi6uqKu\r\na5xzHA571us11hr6vuP12zdcXl6ijOyTCGQbUAptDEYVEWiMjq7KYEs9JWVVUbFY1VFzbWQcAuuL\r\nQN+NUavyBc55mkPHbnfgfrel7Qa6fuDufsv1MxNZrguWy3pizigt4OdiVTKOI0VVTgyTalFTVCWL\r\ntsXshlkLrpj1p4ZhoD00dG3L0PX0bUdfVdR1zRgZc3Kty3VcFBZrzcRUcU6+d3w/slweosbhEI12\r\narRRGAVVVZ4kze5Bsqq0judTZyCN9MuyqCdALoQGrS2X60sKXVAXJaYQZt9ht2d3v6VvO3b3d1RW\r\nQKrrpy8nQ5DlcsVqtZoYxG3b0nYN+8OOfujQRrHZbPAugQtgTGIJh+n6EIdVAR+16aPpgkLr6JIa\r\nZu2wrjmQ0lqtLYUVg5GqqimsZdQKjQYnrFC8RStFoaso8r+drtPHHn2v6bp2WvxYLBYYY2iahsPh\r\nwHqzPCqbT2yuBC52XU/TNNN4ulqtojvyhqpa0LbAuBdWG0uMFjDBqJKquMCNPSE4nE6gnyyuCAjm\r\ncS6pWh2X6weSNmU931+UQgeD8powCksy6Lk27pixrGK/rKe+JJEz+aRsUsbqMD2UmkG3xwC5/E+V\r\n3AjyyMZ45wMeKSVNmoNaBXzwUWfvYXxsgSgHqIwx6FJA51PmYjI0Gcc2gnjHxzUzNM3RczmIlpfN\r\npudzXcQcSMtZZfn+J/Avf+T72TbNtB+iBSvbSTqzx5/LAcC57DcvGc634b2fFhcee4/WYsaSH3N+\r\nPKdAYjr+HNTLma15uzwAgT8QyVQknz+kxabULvn5OA1tRlmsjLdUg0NN4G5AmzjWKAfxPiogvPwb\r\n/cfBP1PMmqI5SPpDg3//11df0T8V/Uj/YC7ycV3lc5zjHOc4xznOcY5z/M+KuKhMkt4qi6Nk5JTZ\r\nd1q2c8RkAIryuOw3T7pA3Dm11lJnnJI7pTBWGCvD6BldANWjtAU0i+WaerGiKAoxAGhbRhdwXgS2\r\n68VKyplMwV/8n5+wuX6CKkq8Vuzvt6IB1ouraFVUcbJM1FfysbwrlThV08Q0OaHKcUryn8p+TsHB\r\nvEH/1DEnUzOol+baw9BkCZGO+YOO+a2J5g6xLHd0OO8ji8NE0f9BwJCs7GjqI8rS+wLnR9zY0Bw6\r\njBlZ1BqtaqrS4MeOoC1ojdYOlEJpKKyOenrFtP0QNEF5HKI3plAUdYHxJibA0RhDebCBYDxFp0EX\r\neF/E8+UZ/cg4yLFYW3J5tcI5x83tewY3MvqBsi5YX6z49Tfv0VqzXNZoXccETUCNVEY7M0VmcMVa\r\nizWG1eJ6SvaK0jMOnnH01Asp+yvMmqZpePfuhm7o2TcHur7HBU/TNRSLJ4wuSL8OUkavtRaAyWiq\r\nqppMPLRz2BAwhcWWBcthoCibyUgnmUF0XYcbHH7sMMpD8PjRMeDQ8aHCiB8NZb08AvqBDED1orkY\r\nZdTHsY8g5RJYoVRNuainPhiCaGvNbBUl+nZIf5sco1W6xpQ43w6DAJTdiAoBUxcRoLW8evU5r1+/\r\n5h/+4Ve8ff2GfXPAdTUsV1PbpDLGtHiRsyTfvL6JZdQNi0WFjmxFYww+aFQoxQwgpGsmoHP2kHYE\r\nBZaCoAKYgItlzSEE2v0h6vkJaFgULX5YoXwA53G9A2NkPEGJcYTXeAIeOwGJIUjpsBaKJcIMgqou\r\n6HopoXfe47x8pu0O7Pb3ESDsJy3IxJZer2Ux5e+/+3vRUu06Kfu2FaulZbEULcjtTUdBgcNTF0us\r\nET07Q4HyBYSAViUmaqspFcDMIJQbE3gSBxx1vMBgtICDWuuoBSkLRYh0HT6W3QaimY/KxtoItBHS\r\n4kG++JJqzBMoGRBdwpkJ+/uAGx9ifk/MNgYZj5Qn4AioCAYGgg54L+OunhiK4eiRroP0WgKYvVcy\r\nnhVx3A7pnOfgmqLbDXFsLOLxmyOmnjhXPw6cTQZGGfhyyix8rJQ0f2++OPYYYDSMvSziGIuxcn9x\r\nzjG6gdEND8qG0z+mRYYoNaJmhvfRvmQP0sKiUvNzPhBcBMs4fhilo36e6I+6eH27jPlnimN9wtNj\r\n/L4+lLMwT+dAcMw8zAHJ6UEv18FklJL6svSL9XrxYO6RX1+2WHwQWFN5m6YHcv+fhBF/oPi/v4Lg\r\nXx0j62l/kyLAn8Fc6RznOMc5znGOc5zjf6cIwUzGgyiwtiyPJq6nhh2mKKaJctKxSuUozjnKwoJS\r\neKVA6ejNN+vJVEvR1FJKEeKkXWkliWAI9J0n+EDoPZ5emE+mQsf3V4sNQYnzqcfS9h4O/aRnVoWK\r\n1eU1X/z4x3iteff6NW3bstve0Q2O4BUmMs1MLAMd+pa+HxiGgauryyNmwWki5dPE9QMJ0vdUDT+6\r\n2v9DxjFz4TjBU0pRlOl8yushiG6ZD6IJpsa51NYaA0bYIuLqazkcWqwNGOPQU9nQiDUWYwaeP3uG\r\nMYaqKlgsFtSLkqoS3T+tA117i6KisBWFMXgdnYfbhqFT2OKYraiVFu0xY1BaAGN07FManHKAJ+iA\r\nLjT77h5jCoqqlJKz0eNCwNMxuEBpS1aba3EtLizv3r9m3+6p65L15ZLtz36JG3r6bs/19TUXFxes\r\nVgvKwuDGHjeIY6TVmv2+Z7fboZTi8vKSzWpNoGAYe7wXgFT5gTCO2EJK1He7PbYquX52jS4spix4\r\n8+YN3739luHbgc59TlVVPHlyzatXr7i6djGxF+DdRvbs6D0u9SWtUcagQ+DyYk3bWoyGtoW+DygK\r\nCrtmvVpwd3c3acAN/UjwI0PfTv354vq5MDejHuCpSH8yG+mHFucHur6h6xtG19MPCzZmZgYlNpYw\r\ntoqolydl5IkxB6CwVKWUCe63Thh4taUsa1Q04PFuRCMMt81ixVdffMnTq2sO23v2+z3Nfsf25j2d\r\nVwzDEIHfuYRQNAQ3k4nIfr/nzdtvud++Z71ec3FxAWqNC2kVRMcFCQFoejfiB8/od7PhRlWCAd91\r\nDKNoLpZqFtTPy9NRnmHs0MpiVIE2EeQaZSwdXMAF/aAWLh+DgAl8ToB7atd0zfziv/43Kf+NgGcy\r\nROl7GUtfvHhBF81cBOSezXqUUjyLLtchBEwRyyy1gCFFZdnvHTqW1ntkgWAcBKDQWmOim/OMyflJ\r\nAU80AgUcCU7GnRnojyWYdvmAzZUz1fp2PqePASw+dMLCC04WITL9tbzsNf/+I4DnhPmVl9Z677Gq\r\nF46Vjvst74q8K4+hhsnkJo2zXkBIFRjHAW1KlNIRtG2m81WWJSFKIKTFpgT+CRM1iImFUrgwIgqE\r\nAaOKCIYZgp/NXaZ7VmbGU8bFufyRgMPUPvk94/Sn6KYeyzHki4N1XcbfhS2cQHGlAkUxA4vz/VOu\r\nr9mVWLMoLBjNMMo9OYH4Sil6d1wWqxBzJx0A5ymNFZUEBNTSShNGYWlroGvb+dwrMb7BzAua983+\r\naOEj39/fh/2X3NpRopmrlRXWdupjapy2PV/j80KjMfXR9qfjzM5l6sOnjEWlFD4zTsvv+6mv26h5\r\n6Lyf9BXTvoQfeG7i5SR8RNrveyZL5zjHOc5xjnOc4xzn+GFDRTJA/NPmBgC5Vg5IAlAUxVFCmjSn\r\nkqB8VS7m7z6Z6KfJ62nykUffDygFPsAwBrRRKG1wzjMMUubrgybQETAMY8A6ULqgrDQuwGq14No8\r\n5/b+jjfv3tKNA9VqzRebS3a3N4xODBT66GxrtJp0xfo+lQXJxDRP5L33VFV1dExT0jqVIf1py1nU\r\nSVKRRwiB3W47sZ1SghrCnDDWaoM1FlskPSdJCDQGjeJiIyWiVSVaccaq+HdFWVrssp7Ao6oqKKN5\r\nhomuv027pSwD1o4oNaKCR0f9IaWgG3wECZiMDExQ6KjXOLHEjPSR4BM7xBNUwJQaa+R150ZG70CL\r\nhp8Pjvvdnnq5p1qUvHj1ktXFgv3+bkrCX33yIuob9uz3W6qqYLWqKQobgS9JmJLmWmJavX//nt1u\r\nx6tXn2HNCpWSLHrKIrKYgpldkyOIBp6iMOwv99FEwtM0t7RtS9/37HZPWK0XXF5ecn29lHOhNWUZ\r\nyzFjsp4Yb832wHK5nByZE1M2JdHL5fKIGZYnkcISjIC7NvEaOGYOCeAr52gcVXTWFsDO+xGvqugG\r\nXEeWsJpMS+T6n6+XhHQlU4w0vjjnUCAlg07HbUBRlATnqW3BoipYFhV31mCR/mGVZrfb0bYt2+2W\r\ni4tLrq6uuLi4mFgvWitWqyVFYYUR6Rxte8D7kd3unqsnX8XrOI592bE7P8QS5wSyz+6x2iDgTWsj\r\nAyyWDCsIzjP2YvqizZ4QKqCcvkOAM7k+vLekcsgQZu7ujJVoClsRysgu0gVaaawpqavA9fU1fS+l\r\n9+v1eioLTudEgPlqKo+UkuQZ/AuNwxayeBOCaINZWZlh6PppjFFK3Ivbtqcd2slIotKJMRXfF/tL\r\nisVKDAzma1nYfQkERFcPxjKVBMMQwxhZXPKgBdjJwTttZOwIyUwEL8zgxHhSIhOQmJXeAZmMmzNz\r\nmbTsf2IcSrm68818PAph/2Wl7d7Pshn5PSJFAvoSmJW/rrWmH8fI9gwROFIEL8Cpd1Akh+3IBIxX\r\nI4MbcYFpLM/LvXNA79QQ4hQgOmWUpZ/pkcadD+kKrlaro+dPF9JyBmYad/LS47KuqCJ7eHAjhjCN\r\nJbN267FBCCHgXPyObFFExUVIF/v6tKDF8Zwk/71Ohksn85+8TT8W19fX0+95P0iP08qBUxZmXrKc\r\nv28C9+KxpXvQtBCrZ+mMUw3DHCRP3306D/tQGfIfE9oHGQhS/1cq+x34CCx4jnOc4xznOMc5znGO\r\n/wmRVVDhgxh+5EnDKcgFPHAQzEHAnCl0OrFOn/3QxBugaYY52fDgxkH05UKA4LFGU1cl1kRtIO/o\r\nu5ayLCkLS+Mlcb+6uObzT37Eu9fvuX1zg9KKi2cXBCLQ1Q2Mw4AfZXsCPin6fojHkSbcAAEfBmGU\r\nuEUsz0mT69m8AECfJBcJmMrb5PH48MT7sc98iIFw/Lyev1eJDlZdraZj1alsbzJgABvEDbYsbWTr\r\naYzVFIXCWkNdXVGWVrTeKnmfaNQJiHBwbVZuqTEWtE4i+wNlFbB2Nl5BjQScsD+1RnkxBEilScEH\r\nwuT2qSX5RwTVjRG3GudmdklwnsG19KGj70a6dmQcgSCllu2hpdnvOCxqyspS6IqL9TWFKdnt7vn8\r\n80/Z7/ccDgdCCNHZdWAcHVobrC1iOwsYVZYVXddzd3dP13WsVsIiM1bR9S0+jJRRB69td1ISF9la\r\nCXhZrVY0TYNzjru7Le/evYlg4pa7uzuePL2KJbwDq9Vqcus1JgJ3fqQoLUVp6fZtZAnW8TyVdF1H\r\n0zR0nbwmf+sJAJSkOuoE3txQliXL5fIBKyxnmAFH2nLOjbRtw64JLJdLLi4uJhAyvfex0ss5sZVx\r\nyGPRthAmj/KgHKXW+NHhw4gtapQO2LqmrJdUi5q6WlKvlnSHhq/f3bDfH9jt9hwOjSTG1ggAbAwL\r\nWxJMoDRFPHfCgru9vZXEXF9grfTvxbKiLONiiFUob1F6JK2VSPlgQVEYjCnFjEaPk8bi7Co6AJ5x\r\nTI6tgXHw01go14vBaMsY5nbJr+ccDEj6jPn7ElPz5cuX9L2AdMvlkqKQ/pocuZNmWl6unoNDyiqR\r\nYwgBFwnbo/fouK1FFY1tYul43/ccmpY+ukqvjZTKOz/EazVpKYor8dhv4rg/TqW/AnwalDJQ5PeG\r\n8KC/hJDuSR4fQVMfHXMFxEgAhwIMioBWAWVi2e446zMG/9AtV9HhQ0AHHcfHNEbG+6TvM6AkflbN\r\n4Fihu8h2mssoA/Ie+a3FeU8/iHs6qkMbJwzT6RjDVDrOVPYbHY1DcntNIJ6Obtoe70eEceemku8j\r\nYFTro370oX52em/J35v60+kCXt4PT0Gl/JFvL4FWOSAWgqfr2kmuQPqsQSkYx4G6rh69LqbjKg06\r\nZJqJxPOmAS39W0U2Wvo5TYCUYlkuHwVv07GYk/v73C/DdPynx/xYFUH+ue9jEyaQNC1gwDyepgdE\r\nJ3A1HG07vTdfrM2/91Tz8YeM2fE7f5IP/fFohOl/dSRkoh68hw++fo5znOMc5zjHOc6R4nRuMT/3\r\nT3P+IKSGcFRV8tFQ039i1pkm76er+mlimFaQ02TydEUZjpOF/DseA/1OXxf2iz+auCYNr5x9UNf1\r\nZGyQl3R1h55xuOPy4oKLq2u++OJHvHv9jrdv3/L27S2rTU1dVSyrmsJYxqFju91ye3sbmV4RnFSS\r\n3BGCCNMbSZrd2MaGE8dTaQdIIFtiMM2L3TIlzdsvb6t5wj2X8hyd0JNJ+YfBw98vqrqYWEYpKRcG\r\nYEoOBoqioK5rikKYakVpIrOvROmRspQSNQGFRHxeFz3Begon7ptKjwQ0zgXGcT6GxVLAZaXnUjph\r\nF0ZNs0o0F6eSUCXgQfpM1zqSEYj3Y2xbPb1fG9nW2Du6vqNpB8ZBYU1FUQjjrmkavv32W2F6LEpW\r\nqwVKa8pyyWYtwFXbtrStJKH7/V72fbGYmK8pkVqv13jvJ4bdmzdvKApxRm1bEedfr9eEENhutxOL\r\nJQExqU8kra4n1y9YLBa8fv2aYegYhpH372457OW7P/30VSxTXVOWYujhg8vMeYRFlxL1siwpy4LF\r\nQkCZN2/eTmCeMF0FKBKhej/pwSXAMIGAi8WCsiwnN9FTVlBmp14AACAASURBVE/bxhK0Th8BLAk8\r\nTPuXJ5t5n54YLik5DYHklomSMkhLQddvUUGhFdiyZKkuKMuSzeUF49DR2pL9fs9ut5sYmd57ms2B\r\noii4urqaSiwXZTExMZOb9bv3ryfW5LKtJ7fhuq6jpmBD8IHR+ZPxzqK1wlTg3Oy8mhjRCeDo+34C\r\nCFIJn/SBIh7vQ1Dj9Pd0XpMGZTK3sdZyfX1N13VHbZ+/nphTeWlhKgl1zrGxy4ntOJXrcjz+oxUq\r\n6qPpwlKMxfSevhMn5a7r6PsuA3bkmrnf7qc201pji5mxZIyhXqfxbWYmHS8ylRHoS86vOvb3aDg1\r\ndCf9KpY1JnDQnxqESMFuCh96VNJ24NgUSrQuZ0mC1IXzfuB89wAQy+9dzncMoyMQXbHVKCXg2oEa\r\nmclXTsBQNMHn7DAfmcPp3mswsf9KibCb7sunIFMC2x6L0/t8fk/Or9V8cS9/Pr9ff+g7c+Zg+nvS\r\nko2AZe+PHejTWJnA6rqeDV9OHyCM/bxUO+3HY0Dlh36mSJ8/LaP9WKS5Udr+fI+LbrwR8D8FAedt\r\nzs/lr89tqfFexe3I3/NPTdd3DwHRD8yvvu/4/+hQ83WUPfmHfUeIDNcwX6UTaHv61vgzH1fPcY5z\r\nnOMc5zjHOVKkBdU0T/BxfpkBN3/Cvfv943RRXSk1eWn8YfM5JWW/jyUv6Wc+Kc9LWtKGTyec+c6l\r\nye/p6/mBVFVF3/dH5SxpuwmIWS6XrNdr6rqO4v2y2t11Hft9y+FwYLs98Pmnn/Djr/6Crh35f3/6\r\nN/z617/mU/UcFQybuuBivcFay9XlU66vtzRNw+gO4ozaiqOmsKMEiABQZZrUz8mF1lb05bSm6/uj\r\nfqMiupqOPwdGjpr+Ayfqh52QC0sORNOsqkWXb7HI3F7rA0VhMvdXM4ElRVEQ1P5IIyo5a2orj8ol\r\nMDeglJgm+CDv8d7jhxJ0ICg/AVchhFj6qWLCGyb3Z0m8o/aVUzgXpBxVBXyYywpVTKZXaxuNScBY\r\nxTh4vJNkoCoXDMoxDIH7+3v6vmexqHjy5IqqLkR7sNuyWCyi1t9qAsOappk0s1I/XiwWk5Zc13UT\r\n6JGXVCUWWUp8y7KcEvBUvquUmvr80ydPRa9tuRE9va5ht9tNjrUhODabFU1zLcy67FyVpWWzWk9A\r\nTgjCeFJliYnX0WqxpLQFhbFT+W/XdVht6Iuew6AmUCmV2Uk58jgBlzmDJGeeOOfphpYIm9OPY3SS\r\nFffdarGYwCCYxwYfNQxDCARjMUTWF8L0Cs4Twoj3ARXdeJ0SNpq2AasXaFvi3JJnz0QaYLfbcXNz\r\nw3a75f7+XvQn65q2bafzm8aQ1L+7rmPbNYyhY2gOtIOl6VaMfgB9ydKs8aGQ/qYjEyUHIHxgkcZF\r\nZuH/BAAegUAZk0f6i4A1TumjMTGBn7HBGPoeUxQU1uLHERdEA9IohSkKVvF6TWMpMAF+afxJjD85\r\nZ+6IqaiKFRoISmECYmmhZnf0phNmrzLC8l4sFrK9uK/dThhbnpF+DPRjNy3QAPTjbDohemPHunHV\r\nvp9LNOM4k2vKKeWm/jeD6GKWoZSi7cYHQM/8WdD6oRtqDmIbM7Olczf01M+LMo3HlhDGCLzM3zW6\r\n/mibeT8X4NYgZiBx3NQyLisVpGw+JFYiSD2yJheC9KPG2mLqM96PEGan36Qdl85ritz9+WNh7ENm\r\n7gyCHrdZ3v+nl8PxMeffo5Sa7n95xUBufLGw5dRPk8zGcrmM/UeR5DjyNpW2iGBiWaCz50+375zL\r\nQKTj6ysAuONz/hBcPF7oPG4njtr4QwscHwP/3Pih+322Jm00BI334J38JGgUBu8ywDMBbSG2F2Gy\r\nPyEaGgUlD5nP/PmV4aZx62PzoFOA+vtKs89xjnOc4xznOMf/vpFXsqU5xPfNNf6c4jGs7Q8H/eaw\r\np194+ntagc+ZP0nDrCgK2rY9+tzpRPex1fh8G0ZbCgsKSZrd6GNZl8Joy9CPjIXDjR5TWtFACjGJ\r\ndp7Dvufm5o73b27AKb748jM+//xL3r59z/vbLdvtnqEdGJuBZt9yebnh4uKCL588oywtd9tvGYaB\r\npmli+WczgYCpvDExeSRxF/BJtMwSePX4SQIVmVmPJUg6JpGPT8AfA0sfPz+zllr6XtLXKikNM0ZN\r\nifvl5SVXVxeTGcJo308Jd36+jDEYa3G+RNtCzBDUXIY0vT62GdibdkqLmHjQuFGjbHQL1oATJ1+8\r\nwgfR8kqgoITPkvckeB9iaV1qQwjI58rKIFXCSgwLioBrRob2QNePeBf1trTB2ALnFYdmoI2GL/vD\r\ne549e8bz588FVBst/dhLyTeefbNHKUVFhXUWW1qqRcXT509ZrpcM3TAltJvN5qh8/urqamKaAROo\r\nNo5iIrJYLNg3B0yhefr8CUoH9vs95u0b1L3C+YE3795yv9tye3/HZrPh6vqS6+trFqslytgpUXZO\r\nSjJTOXECBxJYk3TgEmBZVoWULZtlBNH3tG3LoW0Y3Eg/DlRVxdXVJR5PUJJk+SBmB0qpycVxHEf2\r\n+/20/XEcpz6VD1CnA1UIgXFynYygEwaMwiCfvbiykfHbMfYDLgE0ETx++fIl4zhOruJ937O7u2fs\r\nerqywSNlyW3f0Y8Dm5UwKCdzjE5A0bZtGceOw0E03caxZ1/v2ayfHIFKCXSaxrGxQytNUYQZxCr0\r\nBAqMo48lm3piNKefzg2QaabmIHG6zpWawdnUlql/ee8n0Pwx04I0difgLL++03MhiENzvg9Kqejs\r\nKwYlqYTaGIOywgom7sdQtvS9ZbG0LPaa5lDGsvkx3i/Au+gAO3q09lmfMGz3wwwM6gFrZuMZrTX9\r\ncMj02+bXJoCQ4QHoly9S5czrWd7CUtjIvKaNr8/agSF4gh8I3qPVXDatsCQQL41VhAFQBJ+BSjn4\r\nZ+eyVaUeGkQZI3IXYigiY5toQsbxdpwBJms5Ya62Uz/IWXU5EPZ9um46PHTwzeP7Pp9Yejl7Pz8H\r\nbdtOC3pH2opxm62Pq7FGxpbBO/pogoLRtFGnN7Xh6U/vjqsE0vbTv8lpNoF+ObgO+N5N4PyDkvAT\r\nkOmxuVLO7Ju2nb2euyU/vgj4ccMVudZFi1UitZ+AxNbqB99/CpTmzMq8nb4PGP7Hjscmt4/9/cfs\r\n92Pn8BznOMc5znGOc/yvG49Vwvw+i41/DvEYUPnH7rPNJ4U5YHeaUKSEM4E/abKZl/Wc7tBjv5/+\r\nrOoCusDohijaLqwOmbg6htEzjOKoqqMuX1FabJBJ8/Wl4fb9Db/57W959+4du+2WZ8+ecHl5yWef\r\nfca3v/6atu3pmpbt/T339xe8eNGhjMaWl1w9uZ4mycMw0jQNh8OBw+EQWVLtBA7OzMAM0AzpeDId\r\nLcXEznD+tCztuIwqzWNPJ7Qfm6Q+nPyeAoBzFEU1JSjBK9wogMQwOLR2YKNelYog21QTLomTLRai\r\na6iEKhvidgKagGYYw5SMyL5GwfSow9T1oLSlKGthSzoBcqWdhMmigkaFxICKgJEW4xf8CErJ7ikl\r\nryuHaIFp2kNDXS8xStycx37gsN9Npb+KiqpaoNAMXU8fFH6UskgfHMEFbt/f0jXdXO5ZiEHC0A0T\r\nVXhUI4MZ0Ah7b1kvWS1WU1mn1prVSpytE9stlawl8CaZeuRJ5rff/JaiKFivl9RFTWkty0VFYQU4\r\n/PrrX9LsDxx2e7Z39zT7A33Tx+OueXH9Qs6H0tiyYGk0xVBOTL71xSbqGCbgccC2lijqBmZBYSxG\r\naQpjJ9ZW33YMXU9wjsViEfUA67ljKQGeVUAMLvyAG0bGfsCPDjeM7Lc7NptNBpwdGwqp2DZSqmnE\r\n+EB7cOC8n1lW2lJUFmsHxlGYwmPf4Z1iua5iCbN8V1mW3N3dcdhKGfD9vWgzDsPA0PV0F+3EACyN\r\nZVnL8VttGIaoZzj27LZ3HPZb/KAmpmBV1QIwYwiRNTOOfur/1qoIqJXT+fXuPls4iWNrGFGDlLqX\r\nmVvy5FoasvHVFgJiOD/9DRHsQzFO+pfzuJoAr9zIIJVa5jcRay1ujCxOZOM6ATcR5GScNcUAdEjc\r\nXHkYO1JpjS1KFsu4WDOO07He3W1xY4hMQy8LJmiMAa0DBVEzDiNjqVOM3uGUjGkBJwsE2uOUZ9B9\r\n5uBrCMyGEKfg0jFoaybAU85T1J2MIJvWFUqltvEoM4qjOCY6+zo5YD0DKzJOHRtSpPF5Bv/Ko/tp\r\nPoZ77ykLM4FP8vqxtu6oZJEpmeh07QyW5gtyMtbP5l0JJM2Zt49FCLOm3WOLc4+xqvI7Ul72Or1+\r\n0u7H2ztm2HW9MIy1UvhhpO16wugiq9ETMt1QNX130o+FNsoY5Ey9vA/k85vHIpXFnh77Y+Ymj8Wp\r\nrMfp798XSVMx7zM5yHXqbp0vwBpjGPwg916tIsNUWH3Bi16kDCbySFxAl0yYwg9r+PFDxSmQm547\r\njdPr7c99An+Oc5zjHOc4xzn+8SOXr4Nj4O+fwvwh4W+Pzf8/tLj8sTiyAjydwKfnTpkEaVKdC/rn\r\nO5THKfPv9HfRyhKdt6JI7LN5Fd7agnHsORx2ODdMWmRS0upYLiouL9Z87Qb+2y9+xfbmPT/5yU9Y\r\nrVa8fP6Uu/ffSfLfjuybHYPrGVzPrt2xXC75q//jx8IEipp33nuaZs9+vxcdq6ETkfvDgd3uPmMF\r\nSlJ8976ZgMpJswxNcpk8XW1XsfQoeBWRjRlMzX8+dk4+dp4ejaDp+4FhGOl7Q9eNHA4td3ezFt3z\r\nL1dRU0wE442NTCEjgEegJW0iIA6ozjkY5NxX5iImIsUR+yiEQPCKthlBGZQuUEpMK8DL8aOpbTO9\r\nP513mLUmWyfMKhUil0MpwOK8sDLrYsmyXIsxx1iwW3bs7zpc1zG6jqosCONAPzh2u33sM+tJi7Aq\r\nK9qmpdk19E3PkydPWCwWuN5x2B9Yr9dSTuVgaAd00BgM5aKkLMoJWE3HnoTrQwhHrJjZhGPWZ7PW\r\nsr/fC+BoC6yyuH5EOc2yWrLZbPid/YZDf+CwP7C/39LsGppdw/2tOLsWqp40GxeL5ZTwJ6BxGAXo\r\nVkZjxhHVK1zwFGOHC5a2aQnOYXVgWRe44thVsj0cwEvJLS7XsDLxvEMSLvMhMIwjB+fww0Cz26HD\r\nrFlnqwqbaYgCdBFE0yAstqCkvygFOMbBTSxjrRcCXpqOThdSlr1wYAKoCltdsblacb294N27d9zf\r\n3/PtN99BZMhp7wluxI8DfrliLEvqiw2FLlGFptARuAoj3o8EB3e331KVC1arDVZDoTXKSO1ciOxV\r\nnTToTH49RkCmSnp/I34MeCfMQj84BqfRejEvrsTxUIeASddSBnzo0wE+yhEkKM57McRI4EgIUpqt\r\nlAdc3I/ELpPPpKLIxJBKZYEJBDRGXL9JgIFz+Oi4PQIhtCglOnRFVbKsK+aFCNHkGwdPb8IErk66\r\nocqDLubhyssoE7yP5bCOemEJU2mplzYcE0tY4ximcfAxAEvuIXbqg0XhKUvpsgLcRCal1ahYvo1y\r\n2Lhf3kVmIZbJKCkECOJQbfR8/T8G/llTCnip/NE9NAQPwVPEkl6dmTDJWJKYjW5inp+CiEqpydU7\r\nN+ZIUh6JEZz2KY+0r8MwM9NmIx41jfnfp6N3qs+bf/djC1rpkcaXwgoLU2uNd7L4EKJju1Zk8hCP\r\nb38YUl+Yn88Bs+Az3cZ4UeS7ZTJwM2fOpvP5GLiXH2MOqOfAZs6w/VikzU/dKisrD0Ec1ZVK5SpS\r\ndZCMZ9LrqVQ8ZCXYqa84p6WvTaXtyFil5m3/OcSH2vex19Lr/yMMwD/3Cf45znGOc5zjHOf44SIH\r\n+JxzfPvtt/zmN7/h/v5+WmTNZXP+XKOua16+fMlnn30m2MQHcKPfJ47KftOE+TSR8d5PZgjAkXlB\r\n13UTqyKfeKdomuYB2JevzA/DgLWa9XpJCFL2uN/vJybVcrmMYMaBvm/jZHc1naxFWfOjzz+jO+y5\r\ne/+Ob7/5DYXVfPrpJyilWF+sKBrDQcPYBwKebbOjGRuU1gzOsdlsePrsCU+eXAkjqF4TtMFWPc9X\r\nRSyVbDgcdmx392y3d8IMHFrKomDo3aQBJ5N3PxkKKMzEglHKUBQaa2a25G7fHJ2Q0wntqWB6Olfz\r\n70mfMP2EmZcDRgv44MaAG3vapge2U/u/uxcdu9V6yXJZs1zVrNdL1usVBs2hbSY3YGMt2ipGBvqh\r\nZRh7lL1AazDBS4mzz5OTwMgIDnyrKCxYU2FsjTUVWlvGPhlKzDqPOeM0+IsJLHLOTf3H+56+OWCs\r\nw3UNWnd4D+vlimdPAzfqnv2+EcMWL2xDP44EH9vhINvSZkbSm33L6/7NxCwKIXCxvsSNjqHrCKFl\r\nrw+Tlp+1lmpdTsm3UmoypQkhTPpviQHYti03NzcopXjx4gXr9ZrDtscPmtI4DAFcRWE8pbVUdsVX\r\nX/6Y3W7Hu3fvhNG2O3DYNXz3rcUWmkPjubi44MWLF1xdXaF0mACBxXrDuBXgzgAOjw4W4w01S2xV\r\n8vR6Qdu27Pf7qWTXezMljzfv7/CjY+h6qupAXS9Y1Cvq2oqBjo4MN++FSRKA0RNaF/tIR1VVrNdr\r\n1uv1ZKKSxoNSR7fYYWawWWspbYExNbt+JHjF0DtCGBmdlOProqAqS/bt7yZmIyEQdKBeVjxR1yzX\r\nCzmvuz13d3fcvHtDaQuur695+eIFFxcXOLXEFpqiqChshS8HfBiRMlDP3d0do2vo+gP7wx11tWZR\r\nb6jrleigWmHuia6lIiSty1ierKxCzF8jwKIUwxDwfsCPnrbxMziauarn5a0T20llBaeJPeUNBB1L\r\n7AM+6m4CwprCCEgZxwWjC0xk0WqlcfpxcIgEYCQGEbLv2szlwml8yT/vfQ6CeD59+RlN07Ddbtnt\r\ndnTx+zQaowNlHUGKUcrsQ1Boo9Fa2qJtD2nPY9skXUC53xyGY/ApB4fS38MwTNqcwGTwUpZl7I8m\r\nGhrF+5Ty030smQkIEJvAnhkwC0OSJFCoBB5JiwDi8izgocFGx96gTx1hNVof73+6RxaFpm163BjQ\r\nymIrTdu2vH37lpubG4wxPHnyhKurq2nxIV278z3poXnFtP8+AUEqiiCraIgi70/3/MdKqpVSBGZN\r\n2/w+n9o6aU6eLgyln5aAH3rQGqvAFHEeoWfmnnz3wweA1Q8XFQUAB0WgtB8vqz1dRT2+BB43GcmP\r\nP2c+5t99uk/55Cz/3Ydj5mKIDNx0zEPfg7IobeNtfZwWFn1w8f5/vBCbzw36/qEsi05u3H+mQFi+\r\nAPgYq2/WXv790ctTYPpDz53jHOc4xznOcY7/9eL29pb/9J/+Ez/72c+mhfK+7/+s50MpkpHjf/kv\r\n/4UXL17wr/7Vv+Iv//IvH8wvf9+wpyBf+j3Xn8pXtPPy39Rop6BhPhlOIvR55BPlqqpoGgHAyrLE\r\nOcfhcDgSps91hxJAlLZbmJKqtLx6+Zwvv/iMr78e2G7vefPGslhWlKXFe0vlCoxR6JjgOe9xfuBX\r\nv/yG9WbJ/f2Ow77h6bMnogu4ucIWmtHtcW6gqjWLpeXiasE4Xkl74Lh7s2e/a7i/v6dp2miaMEb3\r\n2IG6XNH3yRhCgJmhnxO0y6uL6bjm1fqZTZAnTI8lKHL60onPfxqIybSwIojP5ecBtvc9beFp25Ft\r\neaCsDItFxXJVU9cli2WJMT1laanqgrIU7bxFbYGAH0tEoyoBxknDT5gqttAEP9B2jq4bMKrG2gFr\r\nBrQqKYu5bHJmnEhJsFKGslhNrrFJK6+qKmlPZzDWT+V83nuM7gBLYSu6rmfoRTS+aweMaRh6h7XF\r\nBCYmoAxmFkvuRvru3bvYznP5Z36u+r6fwKyUrOZAeiq7S0YgSaMvAYV1dUFhCxQVhAKCxruevgs0\r\nZqSuF4ijtCRD2624Fw9DR98Hfvvbb3j//ob9fs+rV69YrVZoLS6ZChO3J4CkHUzc31mL73AnoH5R\r\nFNN1lYDr1N6pVD0933XdRD9eXlxOnSmlYsGNsXRT4QYp0cU78I7gZiMRYwzayrkX44WYkPnA0PUM\r\n2VgxUbYxaDVr0FGuGYaBspNyahXP41Sqq8UNeL1ccXd3R991tE3Dd998y/s3b9k8DazXSy6vLlgs\r\nCrQRlhzBoTSslpWA966nb8GPgeA0wQUpqa8XaC3aadpk4A2WQKAoE/hgKArLOFqs1QyDxvmBce9Q\r\nwaCCRwUB2yAQnJowfKX1VL03jRXJIMmuHqz+5DeC1G7JeCH1zXxMOR2bfQR/1MnzE5ABk/5mMt5h\r\nukfI+KOVgBWFNlhlKXTBslpORiMpBuXi+U/GOFq6ynSNJaAxAWshjmsCSJ6Wtabjy+9T+TGn703t\r\n0fctZSnXZlGme1la4DKgPNoYrAVx1033R5Gn6LvhUWBnBkP90f48YMf59N4I8Mb2SxqCwubU0yJQ\r\nzvzTWrPdbicH8qS1qZSaXNSnc/oBTb6+cw/2N/87/Uzt+IDtb2Ydysfu/3k/PC3HBWnndE4eMMcf\r\n6Z/5PgFYDZDelyQ3HARpymR8FAhTP53YmwB61ux7DOzLmX/5dk/BvXx/889/CKBKn3NuePD88bGO\r\npL4h7SzHm5iAJhoi5e2SL7Se7nfqC/k18ecU4zhOC8bL5fKoz6R9z19P8YdOfv9HWIPnOMc5znGO\r\nc5zjn1aEIAax/+E//Ad++ctfTnm49376/U89J/i+7ac5znK55Obmhn//7/89Wmv+2T/7Zx+cK38s\r\nbAgJNZSH/C2OcjLhkvJMrSVpnSdjJrIw1IPJWTqQU/DvQ6vo1topIayqiouLi0lzL08s8rLKhNp6\r\nP1CWJS9evOAv/uIv6PueN2/ecHt7R98vefJ0RVWUqMVcsixJX0/bBrbNjtH19H3LbnfP3f0tr169\r\n4OrqgrKy1HWJtUvKElw5MAwdAU9ZSinZ0/WBw6Flu90Ke+rQcTgcaBopF97t9gQc46gIQUp4jI1l\r\nOn6e/CcwSk5iLHHzLrrd5iLpx0BfOk+xhY9eAxOZAR/uWLutx1pP2zi0EbaAtYaqLiJjK5aVLipW\r\nqwWr9YLlsqauK2yh8b6J29eprkr0sQgoFViuCsbR03c9w9DifIsLJS6UGF3gnTpizknpNKRSJq3n\r\n0qkcVEuuuz50qNQ/jaG0Gxb1yMVG2GBDLxdF07SU5R1N0wGacRDh/jDoCXBNfS0lpMaYI2Zr3pcT\r\no0X1RD24ajqGXGMsF3xfLBaTlpW1UuL2+RevojFHRV2Lft2hERBVtlexqAfqaslqtWK7vef29pbt\r\n9o62bXnz+g5r9zSHgbYduL6+ZrmsubgQ85HNxSpeW8IAMVpMXEJ0XQ79fO1KCf7AOPYCaGlYrasI\r\neoiO1DAI885oOVZbL47AhHwcCCHQNA3W2slluOuituJCzBuW680RcOzczJpNbNl5DNITEJnaF0RL\r\nsjACygY/4oeRAk1pC1abS9Zty3KzZvl+xe17cQS+2d4zDAPLg+fycsPgnnF9fclyuUCbyF4bA+vV\r\nZWSODfSdgL3B3zOOPUVRsSBgi1gqH0uhlQ4EPwIBq5NOoiwWGGNjH3N4P9IMw8QwSyXhCew5BZBy\r\nRvbUz2xJKunLx9j895x9dHqDSEDMEXAQAUilHwIc03vSmBWiphqIOc80vss+HQZx8y2WJcWynByl\r\nEyttvRSGY1lUGCOlq84F+k4MlopSwL3gE6iiJmfcENTEqs3jFOw4ZQ0ldlwCAAXo9hSFoSgNVVVE\r\nJruO29N4l0ApkXdI4/Vj8Rj489j4+yHmUX4Op9LreO5PDSTSAkYIYXISb9t2Aq1y053HwD9jju89\r\np9qxtshLmREtOT/v53JVPdjn02NJCzYgpkdD7POLxWLax7RfOXAFs37qhyY2qc+k7Z862KZ75ryo\r\nlADOJDeQyXJkj/gpAdwj8J50PpXO9Dn1w+vpD5lEqvCwLDg/T4UpsNpiYumvCgpN0vjTOH8C4Klj\r\nHT9DNfdHMhanbOj33s9/jNjtdvzn//yfAQGbnzx5wr/4F/8CmNukbVt+/vOf8/TpU7766qvpvXkf\r\nSjGOI+/evcMYw9OnT4F5LA0hcHt7y89//nP++q//+uiz+fnLRcJPQd40Rzj9TP7efHv5QkxRSEXJ\r\n+/fvGceRTz/9FIBhGPjd737H9fU1q9XqwT491r+897x9+5Zf/epX/Ot//a8fXOun8+18Hx+LU+D9\r\nYyD2Oc5xjnOc4xx/6ngsP8nvuz/72c/45S9/yWKxOMKCuq6bzDDTvDjd25OmP8wL4Pl8Opewyred\r\n5iS5LM8wzESB9Pm8mjF9bvJomOa0nufPn/OjH/2In/70pwATNvE3f/M3fPbZZ4/mQd8XNunsnSaI\r\n8yRcmFMhzExASUgEmEnvSyhqavS8NOOxCUfOLEy/JzZPVVWTQUFiAKZSS+89+/1+WvltDwIGFoXl\r\n888/o2kONM2Bu/sbdBfoOjuVEGut6YeOtm0pSstydY0xRXQp3TMMHYdmz7t3b7i6uuLycsPnX3wq\r\noNdqhS1LQEfhdcc4jBR2wWZdUVdLLi/GKblJDJd3797TNA273U4cUWNSK+/p6fvT5EFPgKi1M9PD\r\np4T8BGjJ9dRPk950Xh6b5B2fB41zgXEUbTKle7puxNqO7f0eY1UskRMAcLPZsFyJ9mK1kMmttRpb\r\nQFFYjBEAZBbQT/ssoIBzY7zQLKET8Kyuw5HLp9GiO7jb7aTkLQK/1ipGnbJPLWVrCRQKs3h7XdfU\r\ndT0l7VUl4Fe1b/FeJtlFadhuxyOmWyrbzY0S8jbLwWeAYmmngSMBgEl/K+/TqVR+tVodgVuffPoM\r\n8FP/HoaB6qCmY7i/v6coFVVdsFzVrFYrFgvpj03T8PbmQNseuLm5YRg79vstFxcXNI2Y1nj/QsCX\r\n0lDXS5xzNM2eNvbTxaKM13HAGMUw2PiQfdQqZzoel3UC7HaHeHxmZvNlDKDE3E2fSYzhuhFQWZnN\r\nUfvkrtPeCyAj442argPp2wIWBm8hSDJrVMArg9IG1DYDGQAAIABJREFUbzUEiydQ1JZKl6zKJevF\r\nknfv3nFzcyMgfbtFG482nq5rWCykjTcXq+iUXKJUAWFEq2RaMdAPntG1eC3XalUXFD6W72o9lcbO\r\n4JtBKYvRHqOLWTtzIcn/PCYM080njX2ngPJRG8tVHK/5GYw6vRHmY8Dpzet0fM5B9u8LHWuRVQRR\r\nVOTmke4LKDQKo4WRZrXBKI1Rcj0vNmUcP0qMTm0RKMu4KufcBPx5n/qQyBh471kWF0c3ybzdpP91\r\ncZxMN3UYhnFadJEEWxOCw3uFc+DcXD4r/VduyMk9XRJ64n4fa/6dMr8+BgQ9Ni6ffvb0npxr8CWQ\r\nuKoqFguRb0jM3LRvj4Eief9IGqEJDM3Hazn/Mzjl3cfLYD90jLNUwwy85hOix8DJD8VjK5ynfTtv\r\no8c+n4eLSKbSWT/OSrJDLLWX9Yc4qVTxb4W42j/SBqfg7wfDfNhQJYQg24zmW2k/JoN0LUDgcRz/\r\nbayO10WYriP3gTnBnzL6vuc3v/kNZVnyb/7Nv6FpGv72b/+W7XaLMYavv/6axWLBy5cvp7Ydx5Hf\r\n/va37Pd7vvjiC1arFe/evePNmzdcX1+z2Wz46U9/ilKKf/fv/p3MB7znzZs3EyiYJCPu7u548+YN\r\nT58+5fnz5zjn+Id/+AeGYeCLL75AJAhaLi8vJ3f4qqp48+YN+/2eFy9eYIzhu+++48mTJzx//py2\r\nbfnmm28YhoEf//jHjOPI/f092+1W7jGbDX/7t39L0zRcXFzExb0t//E//ke+/PJL/uW//Jfc3d3x\r\nu9/9jmfPnvHq1atpfjMMA7/+9a8ZhoEXL14QgkjmfP311wD86Ec/om1bXr9+Tdd1U1XAzc0NXdex\r\n3W55+fIlm82G29tbfvvb33J1dcVyueTq6or7+3u++eYbnj17xsuXL48A1nOc4xznOMc5/hwjnyPm\r\nINt//+///YhEFoKQ07766it+/vOf88knn/DJJ5/w5s2b6b7a9z2/+MUvcM7xV3/1V1RVxfv379nv\r\n93z22Wfs93t+9atf8dlnn/Hs2TO++eYbtNY0jcilffnll9zc3PCLX/yCf/7P/znb7Zarq6tpvvGT\r\nn/yEv//7v59ke16+fMl+v+fv/u7vqOt6Agc/+eQTfvKTn/CLX/yCphGfieVyyevXr/nuu++mhdA/\r\nJMxf/9t/+//kCeVjZbyphE4E04sJpEmTkJQ4JOAkB+1SUpuXsubxgMmSGQLkSZzOEurk7qmUwo1m\r\nmhDZQsfJ7sBut+Xm5j3DMFLXwia0hYkJjmO5XHB5uSZ4MEYmyMPYx/13DMPIft8w9L2UipqSqlpS\r\nlUusLQQQwFKoAq0sWlnKomC5WLJZb7i6vOTy4pKXL15wfXXFcrGgKkvKwmL/f/bepEmS5M7u/Oli\r\nZr6Fe2yZWZWViQIKVSg0SQEpIxyIgDIUmdPwzo8xInOZMw/gZ5iZK0dm+yA89IUgBaAAvaCqgNpz\r\nicqMzTdbdJmDmqqrW3rW0t0zXeiOf4hL+GqLmqqa6tP3f09JpApC/FqOKXSBVppCl0ihgsFEbyTg\r\nHYHZJsJDEN7zDpx1rzAP8nL9uklZbCTWx+/JBDxKoXttsJKmqWlbS113bLcd2014bNYNy9stdb1l\r\nvd5Q1y3GWJy1CAFKhQn3arXBWQjMLRWAD+N7I5KWbmNJElP9QwqJVgH869ouaGX5cL7e+VQWoXxC\r\niiVuN3nDi5AWaR2lrii0TkwHpSRVFTQMtQ7M1hxwyutxl7GyYnnlIJZzDtunN0dAL9fIimm/AXxQ\r\nqe3kwBCuxrkWMEjp8M5iuhZBAOMEnkIHVqOMaYH9eWqlqca92QmerjOs1itubq5ZrVasVuueZdVS\r\n6JLpZJYALe9DvTqaVKheXF9Kie4ZlFpplFQ4Q79fiXe+vwZ9WThH08U26vYAkB04vWvPEZyJ526t\r\nxTqZQIdD/U/sm16XfmesQImCQo+RFAGgNB4hNLooMK1Bi2DsMiorxlWQCajGFZNJxbat8c5R11tu\r\nb5dsNlusBSlDu46aeYH5rNFaIaQHOqxr6bzDYfAEZ00hfdCsUwohZXAtxuNcAJ4io1UIjZQFVZ9i\r\nHutZrEPxHGM9zBdX8nJye55NOwZ3MP0QRAbesE/I+4bXAU1Dplm+jfi7HNw49PvRaLQH7EbzjfF4\r\nHPT2Rrq/lwRjAu9BSoXWirIsUCoA10VRoLTsQUa302WUGqlAa5mYe2Wpw6PSNO0WrSN4bINmpOtA\r\nOIT0zGbzvvzDIMHYDmO6TH6hXyGUkU0ZUyb7fsPta+XGNpCvIB7qiw+x8FKfnC1G5GUb731NExaw\r\nchmE0WiUTITy3+TXdwjWhc93bKT8Ph0/L8sqMODYBzVjOx6Nyj3AOD83IEkKRCZr3EfsD9u2fQVQ\r\nPAScvq4OSq1eObe8v/kmww4pdoDGoRXcIXh3qH3Ea5b3b8M4BLDnYO6hsVF8HetVDmzGtuRcaOe7\r\n1ODdaxAhdf3AccT9/9//4X/5968c7N8gfvnLX2rg3/1Nfx/bwCeffIJSivl8zg9/+EOMMfz6179m\r\nPB6z2Wx4+vRp+vzi4oJnz55xfHzMBx98gPeeDz/8kMViwdOnT1O/qbXmnXfewRjDcrnkv/yX/8LR\r\n0RFXV1esVitmsxm/+c1vOD095dNPP6VpGp48ecLNzQ2TyYSPPvoIay3Pnj3j3r17PH/+nA8++IAX\r\nL17w5MkTFosFv/rVr9K2PvjgA+bzOb///e9Tu/3jH//Izc0Nf/EXf8H5+Tl//dd/zenpaWJBv/fe\r\ne2m88OWXX3JycoKUkt/97necnZ3xhz/8gbZtOT8/Z7vd8vvf/56XL18ynU759NNPKYqCjz76iJOT\r\nE54+fcrt7S3T6ZQnT56gteaDDz7g/v37/Pmf/zmr1QohBH/84x+Zz+f85je/YT4PJll/9Vd/xdnZ\r\nGb/97W+5d+8eH3/8MVprFovF9w4wvou7uIu7uIu7GMZwntI0Db/+9a/T/Dxmox0dHfHee+9xdXXF\r\naDRitVpRVRX379/n6dOnSa7r5uaGhw8f8uWXX/LgwQPOzs549uwZZ2dntG3Lo0eP+MMf/oAQgrOz\r\nMzabDcfHx5yfn3N0dMRqteKf//N/zvX1Nffv3+fLL79EKcU/+2f/jKZpmM1mfPjhhzx48ICPP/44\r\njfXKsuTf/tt/y3vvvUdVVfyTf/JPAPj0008T/vbmm29yfn7+ndn5OjeUOBRDDbO8QOPn+cQ+Fnz8\r\nbl3XCQTIJ4Dxe5FWKYRIDITIaIgagE3TBEZUVaX9x8nR0XTaD/J8GqQ8ePAml5eXwSBhs2GzmTCb\r\nNZTVTptNqTAxfevREV3XsV6vub29ZbPZ0LWGq8trjDFcX18zn8+5vLzl4cOH3Du/HyatqsIJR7fd\r\nUpYV1Tik2EZDAiE8ZakwJgCVMQWzaba982twE35x0aSJV0yLzAGAeH0OTYiGaYCHIk9NG343/Dcg\r\nPchoVBDTnRwSj1S9JpP3tF04v7qx6OU2MCqXYYJeVkETcTqrmM5KJpPgnozwaGX6NOkKgaKSoIoC\r\n7wSr9QZjHE3ThXS/1lCWIaUvPqLIf5yohtcaKT1CFHuTotwNMU6io5lCWQWgILJdykohZNkzP0N6\r\nanRzjnVxu90mECoCF/G/EIKma4NGWs/OsN5hvcM4S9MFMXfrHVIrpOlwPXtTFRpVaNrVVxhr8BQo\r\nHXhSQXcOEIaiDJNb0wU35MBUMD0zz1GNpsFxVhWs12sur16wXC6pqhtOTk5YrkIn1HbBQfPk5IRq\r\nNEEXgSXkmysgODVX1Tgw85qO7bavi91O33PX7ne6UcZ24DzSCVrT9UyV4KIqhADpdowawDjLtqlp\r\nTVjRqA2Mqske0JGnKuagSg48xL5HyQrR02KU1JRa4UVJcN8GX7S9e3Vwch2VgaFajTSbZkRLMDNa\r\nLrds1ttw3rWlqT03s8DICFqNJeNJQTUq0BY64+g6gxEdnekwtqFpNVUzYjKZMR47ynIU6o/QPWBX\r\n7Bh7DvCeiNXkk/u4uBHBkggy5AsoEdhwYpeSFh5q0L4PMf9y+YD9lOFDz78uPPY1/UqfUuzNHliU\r\nA0VCCFQ0fHEWZyMbTSJFKKu6223f9/p/3imcDSY+N6uX6QYdTTyisQaAXukdKI0AsztlIQWtbZE+\r\nptSGhSuPRW03aK05Pl5gsXhZhT6o1zdFicDa6g4DPbH8clbb65hoQwbmEEzKAfTILAfSIkKuw5kz\r\njauqYrPZ7O3nFQBN7NITreuZf9AD2QR2tt8Bgjl4/7X1IgOuYj2Ov81THPIxQ37+r7uvDV83ffuI\r\nZZyDl1LrXe3uP49rTPT/5YHrdWhfh8BIILXPQyCu9z6NdYZt63VtLa8v+XtpsSlbXPLeJ7fusN/+\r\nN2K3TWPbYPgzACaHYPTfd8RB889//nM+/PBD/vCHP/Do0SPKsuSTTz5hsViwXq9ZrVacnJwkZuDD\r\nhw/Dfe/yktVqxY9//GN+8pOf9Az3bQL/INwvLi4uOD8/56c//SnX19f89re/5ZNPPuFnP/sZb7zx\r\nBicnJ/yn//SfmM1m/OIXv0BrzePHj3ny5EnS1IyL4ZPJhNPTUx49esTNzQ3z+Zy33goGR3/4wx/4\r\n7LPP+OEPf4jWmouLCx49esQ777zDj370I7z3iaEY2cMQNDDjYP7Jkye8++67PHr0iPv37/Of//N/\r\n5t1338U5x+XlJT//+c8py5LHjx9zcXHBW2+9xU9/+lMuLi744IMP+OlPf8p8Pme5XLJcLhPD8M/+\r\n7M+YTCb86le/4pNPPmE+n/P+++9T13UqkyBZs2Kz2fDs2TPeeuutv8/qcRd3cRd3cRd38dp43Xgm\r\njm/j/TtKLBVFwdtvv03btty/fz/hL8DO5I/dWCtfrI3swXxumo89lQomghHP+clPfsLTp0+Tp0Vd\r\n14zHY7744gvOzs72MmLysZkxhj//8z9P44Zf/epXPHv2jKIoEi4RvTe+a+wJzhwakMZCiicUCyAH\r\nqHZpge6VAXz+GE7eI/gXgZUIuMSUTYDNZsNqtdpjuyyXS+q6Dul2hUGIMLBrW8d4POWHb79DvW1Z\r\nLtc8e/YkpTmUTYlUIV24qiq6znJ6usB7z3w+5/z8POiBXQbmlDGGtml58dVLbm+WvPjqijffvOTB\r\ngzeZzWYBBBISYx2yd5/0vdC/9w6Bp24bnHeUo4Lx9BSlewaKCQyIjz54lnSwttttD1ZuErMjZ3IM\r\nU9oCq+fVi/66CUz+efyOVr4H0RwCl3SAJMGEwHShMXgnAIsXCtsZOhH0GLum6ic+rk9PlYwnJdUo\r\npIKeni1QsmA8dozHUBRVz5QsQEBZBc0468A0HdDRtAZjPW1nA1OtCPuwTWBlhjTNkI5u+opf9ACy\r\ntR3eGLwLYJfHIVQQfi/KEqn7lGqr8MLgfYEx5Y4tVAYAMDbatm37Mu9o2x0L1pheF6yUOGFpfYNp\r\nw0SwKApM26U0vMlkAs5jO5MabAS3p0cTmqbBe9GnLwtUEbTGhJKBWSSCUQ1S0BqD3NQY66mbDtfW\r\nKKU5WZwwn81RQmHaAHrWm4716kuur664ub7m5YsXPHhwj3v37rFYLKiqCuenIDo8LUJatPcoXSC1\r\nohwVCLkD4IOJzQ6gds6hPOAt1rQBB3Eeb13qnJRSyRwitH2PtxYnfQ+eXlOWG5p2m1ZAxuNx776q\r\n9kyFcgAjbrttIzNM4V1oG8YRUkuVwveAv3fBpdVLTzEqOdJHjN0EI6FtDavllqvLJTc3K7bbBmtf\r\ncHuzZLPeMhpXzGYTjuZjJpOKspIUOrCgTa8f2XUdXeOwncW0wR25LLcURa+JKEL6azDukGgZWFe2\r\nq9P5RHZUDn4OmUWRSR0XUopxlqYrNOF+tQMCnRuCT8MFg1fBle8EDPhgRhO3lUC28Iq63mbbDN91\r\n3mN8AHsLKqKmrNS7lSsbTMJxpmCX1uxxJnxmOkvXOVzXhfplDGgNPTgSz3k6GqXys96jhUD3iwFa\r\na9om1AmhABccwY1paSKbXAjKSmO7oC0bJQ6E1kgv91NEMwApB7q+rjyH5R3vr3HhAnbMr2FqeGxj\r\n1lrW6zWTySS9F49jaFCU71NKifXZPcIHVmW814eFjl73MGfk4V4537xt5mOAuP+6rvcGTnBYq21Y\r\nHrtFncOh4riiv15F5tqWgMxYVbNHej0Aw/JrF9vi1+5fHZZNieeY67wMI7bvb4p4LLEPyMFBmQQY\r\n81/IvdRh5y3OO76hKP9eI+rfzedz/uW//Jes12t+9atfJUDtRz/6UWIhf/TRR3Rdlz6bTCa8/fbb\r\nfPTRR3vbjLp6MWI5xnYshEjs2bydRqA6N/KK/W0E23NznfzzmB1zfX3NyckJ77//PtZa3n33XT75\r\n5JME2MffxnqS172madL38nF33q5jRkEcH+ZSEPF8fv3rX1MUBW+99RZfffUVsL9gHCcOo9EonVtV\r\nhUWOBw8e8PjxYx4/fvw30hO6i7u4i7u4i7v4/yvysVweUgYDzJOTEy4uLvbmWVdXV/z1X/819+/f\r\nx1rL48eP+eqrr/jss89444032G63fPrpp5RlIAm9++67XFxcsF6vefToEZeXl1xeXjKdTnn//fd5\r\n/vw5z54949GjR3RdxxdffIH3ntPTU25vbxNgeHR0xHa75fLyEmsti8UCpVQwpezJR5H89vHHHyOl\r\nZLFY8Pvf/z4z4gxzhZOTk79Reek4sA+Ft/tAiDjQEL3WFxjj+kGCSK/zUWccCOWpe8PV8+GkaPhZ\r\nBLdyV9foQNo0TdJVa9uW9XoNPujzFWUQQPQUHJ/M+cHbj1itb7m5CRonV1c3zOczFosFWpWYztPU\r\nNU3znNlsxtHREdPplLOzMx6+2XF7e8vt7S1N03B5ecn19TVt+yxVJmvDZHA2niDVqAeaArghVK9B\r\nJwSz+VF2jkHk3xhDazpaY/jRj3+QNGQCI3Cbnltref78+Q7wMwGgk6IHUL1HiHKvDMM12DUAm02G\r\n978XnldFlsJkBKLXtMK1eGsxTXug2mRsI6vxhPS4LQ6lPUUZUvCUUjRrl1bLx+Mxs+k8XcOqqpjM\r\npunaNj3QpnXQauusoahKjOudJgkGA501KKeR+OAq6x3K96i5VAjlEE7jnUFpBTLwznSpkH2aHkJQ\r\nVCXO9oYNRQCR4v/tNugBic1usG9tcIg2tkW1YUB+dn6OcB5wONvPrqxD+vDfOUcrJFpIXA/+lWWJ\r\nFhJZlBjnE2Ds+kZobGD5WRcmMAH8U5SyYmQs1bih3G5ojeb5s684Pz/n9Pg8TAScZbte0TQNk/GI\r\np8+es7694erFV3z17Clf3b/Po0ePePz4Mef3zhhVY6Qs0EWBVEELzQsocAglOO1NSOptQbGR6FKh\r\na03bhAmSqOsdEOAMzngsDgl4KfF2nxkW06+DG6dnu13hqhFaSEqlKbVGS4nwHtsz5oQTiF7zT/gA\r\nLimCi+zG1ggTUnRD++pZn71SvygKnLF4D8Z4cAKhSsqioBCCB1rRdZb1bMN4PKWqrrm6XLJabbi9\r\nvQXhqeqKrmtwLtDGtD5Kdbizhs5bbGup6wCUU4IWEmxwAVaqQBYyEGwFiHhsQmDwSLFLYSwoUcVu\r\n4mfcDvSzzmFNYJVKE1LSj1TPhlYKoTwQ0o1DyrKDrN2LXhtRxDbswYl94GYI6HxzRMBODB7hvaKo\r\nElAb+5mchdS2/f1C7PTpAshhenBoZ7IT8HyBkmHRQqCYl+FmWhQFSoJ3BuN2bEOtgmOus67/XTg2\r\nJXu5NW/B++Cu7HwweHC+rzOe9WpF2xSY1lL0LNKiiJN8B9bt3fOGzK8IWsf6n67FHgC7HzmIlN8T\r\nc1mNuO2YDjlckOu6jrqumc1mewAD7AAAKSWmCwYmiTHqgmxCXKBIx9mDyjugL7w+BI7lZQC7RSvY\r\ngRTxGHPW0yHg+RATLgezvc3YbDKA7Ln+ZByeeO/7ficAghEYjG3Pu2xRkl4+Qohk+CGjliWRGR++\r\nl5ft8JGfw6EIYLbdsYGzNpfASOfxcc+xfgYEHWcswZk8L5/8WktM2xIZ87Hdp/L23x8ThzjW+cu/\r\n/Evef/99rq+vUUrx1ltv8cc//pEvv/wy6C73YNd4POb+/fs8f/6cH/zgB6xWK+7du8eHH37IZDLh\r\nq6/6cWFR8PLlywTmHR0d8bvf/Y7pdMrl5SV1XfPuu+/yl3/5l9R1zZdffsn7779P0zT81//6Xzk+\r\nPubp06c8fvyYy8tLPvvsMz799FOklDRNw3g8Tm0xpu1aazk+PsYYw5MnT5jP52lVP+oFx2wWrTXP\r\nnz8PjvVpcUHz9OlTzs7O+OCDD5BS8tlnn3F2dpb6ugcPHvDb3/6W+/fv88UXX/Dmm2/u7n3Wslqt\r\nODo6oiyD2/3V1VU6tq7rGI1GGGO4f/8+n3/+OR9//DHX19fc3t7ys5/9jI8//pgHDx6w2Wz2gMi7\r\nuIu7uIu7uIs/hYjjKqUUjx8/5vPPP09j0O12y9OnT9N/ay1PnjxJ7MA4bojEtJjWGwG83//+9wmT\r\n+vLLL3n69Gma2wSiTNAFruua58+fpzHIxcVFwrRWqxUAFxcXSbojGuFF74Gqqnj69ClPnz5N44M4\r\npj49PU1mYd811L/4b/7bX3adIT6MsWGy1D+qaoRSGmsddd1gretTLkNqX9Ns95gFQ0ZAPqg99B1g\r\nj1nUtm16xMFVYPW1qTAmkwmj0QgpJZvtCiEd1UgznowQ0tM0NVpLHjy417ujXnF7u2Q2O2I8nrBe\r\n12y3DVqXzKYTxpNxGpBJKTk9O+Xs/IzFYs7t7ZLFYsHR0RHWGp4/f8bTp09Yr1cY03F6dsr0aEpZ\r\nVTRdy6auQQjKakRRVqw3S5QO+mMIiZAaqVVibi3XS6y3jKdj7j24x/037jM/PmI2n6b/06MpulQI\r\nBVJLhBIgPV44pA/mErnYfc7EGKb9JpZQ/+iaFmeCs2lUFA8ab2HipFWJVgVaFSgpez04iZKifwQ9\r\nPSEyBoIPTEFn4eWLK9bLmhcXV1y9XGE6T73pqLdd0GhTDqSgGo8YjcfosqAzhpvbW15eXYII6aRe\r\ngJASXRSoHhy0ziGVxFhD3dR0nQUh0EWJLkqULhCqdy0VgVknlUri6UIqsCHNMACUqjeyEamRWWv6\r\nQW84sci4jIYt1oSU2AjGeu9x1tK1LdvNBu9cSFG0lqauqbfbXaoYsG0bPAqly+DcKhTeK+iNKzbb\r\nms5YjLUhJVtJirJgPBlzNF8gvQVv2G5X4A1HRxWnp3PKUmJMzWQ8Qsqggdh1LcvlLS9fvEhswLYb\r\nUTcWITWqKBBK4LylswbjOrxo8cLjhQ8AXD8pRoQ0Z2wXwCwPzhqsMRjTBXfntgkMTC8otKYqRz2Y\r\nqVO5VOMReE9bh/LaboLOZtR31LJAIFFyX/Mw1DFwdBjT0DRbPIaqKqhGJUJA17UU5QipS7QOrsBC\r\nlTh00Br0Cmc3vYlHYEJMJmPG4xG6UGgtWK9WGNNibTSGcYHp1zrqraEoC0ajMdPJEVU1SufYtoab\r\nmxu22y3WGqQMLt+yZ6OG/tUitEii/ojA9pRKpXredG1YTFAyfcfTp5c7hzcBDHI2aOCFfrWf6HuH\r\nVkWvFdrrAPoAgHoXytfLrzemGLK5hswuoQo8on/0exYye8Rj3j2ElAipQlv0O9BsCBoJEbUo48Oj\r\nFBSFpKo01Sikc1dliVbBSCSCI75vj3iPEpJC6aCdKRXeObq2palrcDK4G7seGOoBWiUlWiq6psNb\r\nh2k72rqh3mxpm4au7ejaDu93OqFDrduhDtzeecX+t9fAi3IX+QJadBiPoEBiMNqdYdBsNiO4hY8Z\r\n9SzHyBof6kgeuj+/eHGT7v0h7SHUdSUVWheB5ZdSSz1SCpQWfZ8pe73R/TTfHCTIF5+G2p3xnF8X\r\n38SM896zul1SaM2oqkJ/utlQb7YIoNTFfn0YXmcEhSoTW9lZGyQMCMY0hdZBw7bfRoK2e+AP7+mc\r\n3Tu3/DrlgE5et/N7dbupA4DZ798ZizVmB1La7Lj7Yw8mO+GcpDQIbF/Xbf873zOMXQAInUP0xjsJ\r\nuAzrVfw//8f/+u9fW8DfIf62mn9KKY6Pj1FKcXFxgRCCf/pP/ymLxYLJZMJyuaRpGu7du8dkMmE+\r\nn/PgwQNWqxXX19dMJhPeeuutpHMX3fHm8zlt2yZDnOl0ymw24/nz55ydnfH48WPeeOMNyrLk6uqK\r\nhw8f8vbbb3NycsJ6vWa73fLjH/+Ys7MzxuMxL1++5NGjRzx69Ijj42OOjo6S5ubR0VFi396/f597\r\n9+7x4sULNpsNZ2dnLBaLdD6j0Si9hnjvmaTxbV3X/OhHP2I6nSatwffffz99Nx5f/N7Z2Rmz2Yzp\r\ndEpZlhwfH/P48WOeP39OVVW89957TKfTZIQSzccePnzI8fExL1++pCxL6rrmZz/7GZPJhM8//5yi\r\nKDg/P0+LN3dxF3dxF3dxF9/XOLRYDHB6esrz58+5ubnZaaY7lzL0hnrZQogkd1UURcq6iI/IwIu4\r\nlPd+T89/NBolADAy8nON55y1HyPPLsj3Gc8nZhzEBcdf/OIXaeHvu2r+if/xf/qffT4pyCcesXCi\r\nRlpM0Z1OpwBst1uq0U6rapj6k7M8cs2nfPsRVc2F5fPJUVVVvXnBipiykVsvWxcKdzYLAy8pNaZz\r\nBK04ye9++1d8+OGHfPHFE8qy5OzsHuPRtD+GAl3YNCATMlzk+XzOeFz1QI5gu91yfXPF5eUlt7e3\r\n1PUmXcTZdMGjx2/x8OFD5vM58/mco6Mjuq7h5uYG67YJyY0uLaGydSyXSy6vLnDOMZlMODs7Syu1\r\nm80mIdabzSYN9JqmYbPZsFwug+txN95LB8vLOZZR3gBixctTYPbZBvspRkEfbPfZbhtRe0jvbS+8\r\nt2N9OkdypgU4Pz/HGMN2u2WxWDA7LZNmV9TmywHjfNAen+cTrcAQ2tU7rcrUCJxzFKXH2t1xOUdK\r\n5RVCYGuTyiSC0Nvtlm0P0i2Xy6THmE/uY3mBXRdeAAAgAElEQVRrXSQ2X3TejIY4QFplH41G6bzK\r\nsmSxWDCfzzH43kl5TFHs9AvzlJ48ZS9/7Zxjs7xMxxQ7GCDpIy1v16mudF2XdHym0ynn5+c8fOtf\r\ncHy84P6DY45PppSVQMgOjwHhePb8c5QskFLhnaJtDetVzWq1od622HaDNT5pEUaGZKwLShZoXfbl\r\nE9KLBDuRft23s8BMkZRlKKuQ+jtiMj7qNfcmeyBIStESm/T7HFyILClEr7kVj8k5jHMB0vAe4S8C\r\ncNNZrA11ZbPZcHsT3Lm/+uqyT/8P9aSqxhwdLVjMgzPiyWlgDRdF0adv+5ROdXt7C8BoFByE87qb\r\nNFBH5V7/OYzr6+s94CA3lrHW4pousUHKcpTKOfavhR5l/WrPviOy8CQdzV6/nW4MfR+c61rs+oFd\r\niprQ1V7bz/vuIXhziB3VNvv3i2H/pIt9wCT2SXF/1uwbROQ3V2BPcy1Pm46gmzU7Zt4OPH0VzMqP\r\nId6XyrLE2J3z95DxBTCfzxPzcehqHdlDOSsulllcxMmdxff75d3xxQFB7GPigCUy54fln4NRVy/r\r\nAMgr+jZco5Ti6Ci4kSLi9enrh3B75TQeHe2Zk8TzHEqBDNlt+fEPyy5/nqfNDuuJEILNZpOuRSyv\r\nWB6xHz40BokPLctUL2Ldye8vsSxfG+X+/W+4/VyuYDhO8t5jt82eDnL8PKalR33H/BrmdVQWuaam\r\nAB9ZnT2j0mXlRtDN3R2D4H/473/yd4LoeO9HwPZv8fv0/xDIlA+889/kLNDX/f7rWGvDz77ttg7t\r\n+5vOL35vOFD/Np+97ji/6XjzbeZ9dPyuMYarqyustXzxxRc45/j5z39+8H5wF3dxF3dxF3fxfYzh\r\n/e1Q3Nzc8B//43/k888/3/tu/J+P13KZjXxxPp9v5lI6+T5ziZuIg8WIv4tzq/j7iLXF9/PzGZ7n\r\neDzmF7/4BX/2Z3+W5HO+6z1aCxlXscNDyqAvJnu3VtFnjuVkjjghkEokTZ98wpJHrrkSJ4V5itQQ\r\n6BhOHiOrwXufmIERpQ30x+Acu16v8V4wqiYoVeCsoGsN7733Hl3XcX19zdXVTUpnGk8qpAxsvzhJ\r\nn06naTAEJ5yfnzOdjrm9vUXpkGpy7949bm9vef78OS9fvmS13PZpkQ0P33oznV9kCY3G4wBImgBS\r\nOWf6yZ9mMpmyXFX9RQ/aVlJqRqMJWoeUq6qq0sQlCrsvl0tubm5Yr9esr8Jkp67rpBWYG1bs2B92\r\nr0KGCY7EdrmRQ9QIMul1oav+ukBM+8orZNhkSDUOFdnhvcPYtgffRkjtUUXQVluub+kak0So9aXb\r\nc/+MAF+cuEXH3ShWHVN/cgA5acv5YEjizS4NxzlNbBPO7RptrHu5iUzeiOK+tdYJEIygYUT64+Qw\r\nOLlarA2st6j7s9O2MjRN3R+Do20brDVsNmuKnrFjrd077/x/ziyKxx9B0kl5P1GM46RRSklZjJhN\r\n5zy473dA4HKZNAq6ruPy8pKrm99wcrLg+vYBb7x5zsnJnOmsYDSu0EozPzpDCp2utVYdAo1SBeOR\r\nod3Kvl5q5KZhu7V9PY8Ahccbg/MtxrQ9+FH2D4X3XapfQoB1Ldva0DS9ocykYTqdEvQtpxRFmXVy\r\nQccxsvKGKzMBvArMTSEJbBlBYKz2dVkyRiuHL8Nk2FpLVY6pyjHz+YLRaMxyueTly6vU5kI72zCd\r\nBnCkbR3T6bh3cy6J5jSzGaxWQechgsnJjGFUgChx3f5iR2qDGQiQgzUR5E1glO8F/dtYR0I6V1WN\r\n+36o67etA3tXBaAngAMe6XNDgn3zj7CvwPAOfdPu+EI3IPdSKdN1ie+JwDCM/YX3fnehRZ9G6T2v\r\npAv7LEXTF4ntFNxMAxMtstG83L/fDMGlqqrS83ifim0qAiY5Sy8OBGKZ56BMBA29D2YYgcHpXvl9\r\nzqyO2pXxug/BT+fCtQghUl9qTJcWe+I9S0rVs+12TLO2rffAwOHCWVx0ySM/v7ZtQ//Z30+VGqP1\r\nTn+yLCOzL56fQ4jA+ssHQsNrEPfzuvcO/W74G3jVbfd13x8C0GlxIDPPidvLGZbOZSYg8Z7mPcIH\r\nZp3NBm2HohQS5x2mrwPQg4dapXtSqOse15ddfI4QqGxBIAevZc9SJxs/QWSs90LUQuB815+bjGfB\r\nLs1Xoop+IcyG+3ogxMZU5+8PoJMPwvOBdD4oP/Td+Pp1vx9+Hl/Dq6zm4e9fBzbm2xj+Pj++Q8cK\r\nr3eQjud5CMzL/x96f/g8j2Haf/7cOcd6vebi4oLFYsHbb799sMzu4i7u4i7u4i7+lGJ4D1ssFvyb\r\nf/Nv+Pzzz/niiy9YLpffegHv7zusDR4IDx48SNkJ8Gq2zbcNnbOk4qQggguRlbcDMezexEYplSYX\r\nh1Zu88FMfAz1AIcDrRwcjN+JE5E4AYur8TnLIKTsapSME1yBdJLj42Pefvttbm6WGPNh0kyKEzPn\r\nAlDWtDWjcYVEJmaaMYbVakPXWapqzGg0QcqwzfF4zGKx4MVXL7HW8vTpUy6vXvLs2TMePnzI+fl5\r\nn4YVNHe0llRVQdt6TK/XpZTkaLYIqYHGs1nXQddKSgpdJTqqkopCS8YjyWRsmYxnHM0WAfB5I7Cu\r\nIhvw9vaW5XIZXIszhosQHmNyBlkPJni3d+1gMKCN8/GY+iVjJesZVp1JYJwQAmtJZiYAUjiElxSq\r\npHUdXRN1/UJ5rDa3NLKj3rasyy1VVSUQTErJvXv3ANhuGpa3axaLBcfHx4kVcXZ+ktx383S7WI9y\r\nxH3IzpBSUup95lVkIeYIfDy/WHciCBvBuDy1LpZ5rLunp6cBlOzBhnxl31qL7OtzZHRFFku8BqvV\r\nKrWHyMDNzy9nFeWrEDmIWRQFk8mE2WzGZDJhMpmw2Wyw1vL50wuMW9KaG65vnnN8Mufs7ITT02Nm\r\nsxmLxVl/vh2ma7DWo3XJ0VEJR3B72fVgfIvWQTux3rYJgN4BLxZDm8rde4X30PXC5YGNlpsGRcF8\r\nS9ttsK6jabdU5TixLIuiQPp9Jk1Okw7XOdTeUC5x0pNN6EyB7PP4woRZ4QvBeDxObKrZbNbvU7Ne\r\nbwOYVy/pzBZrm76cFkk7tCgmTCYjRqMS2Jkg5aw97z3OgrBur7/N+1fv/Z6rU2RqxP7aOcd43Lvl\r\nWofH0pktkaUVgGvX/76kKCyFdkDV1y+dji8c4m7Va9dmLBH03/XTsUwP67EN29vXRYBhg9RA6nOy\r\nP7xM4CJ4ZA+eeCJzeZ8lM3w+ZE4BiSkZgfTYbuN1ieUd/8fybttgMBNX6KL+X/x9bOP5fS5fEItp\r\nvjtgVSSN0wAYB0kBYzpWq1uur68TiOe9TdsDUp8XGfFVVaU6FK9JBDpzsC+2kZzpFo8tMOodUu7r\r\nAu7A3ldjeN/Pr/mhejEE6b4p8j7tEOAyHPgMz/UQQBmvu5QS4149lm/zPB1fnxgddGX7uiiDPi3e\r\nJVBPIJAya0c+jrt294r9fuv12oF7Za7i5zsQPf1OBHdo72J/EZmF4nsF/MX4LuX+Te99m9983etv\r\nu89v8/tvOzD/puP7rtvLY1j/Yz9XliU//OEPefvtt1O/Nvz+n8LE6C7u4i7u4i7+8cbX3X/zcVVV\r\nVbz77ru8884737i4/H2LiFPE+f3fBrjUQ3pinvICpMlDzjzKU0mNsXuD+SF4l4OKQ9APdmyrISMw\r\nZ2sIIVK6VPxNZNHoQmbpXA3WjfDeIoREKkHbGk5Pz3nnnXdYr9c8efKM1WrVg2uGk7MZt7e3bLfb\r\nxDozpuX29hohPIvFSdp/nIiHFLsypOkWgV1xfX3N8+fPubi44OXLl/zkJz/hBz/4AYUIk7miKJhO\r\nJ5RlkZwPA5B4hhA3bDYb2tbifduDDoqiCGCa6Fl3gbkmUKpkMlGMxzNmZZHAqJgevFqtEtPo5cuX\r\nyUk4mokYY/Cuwzqoqvke+JVfx5hS9rqI4ES4ToE1KoQijB/DRHVUVozKiq112M6ghKQsCrQMQpZW\r\n7iag1sJ229K2NjHfjo93KVt13dG2lu22TWmUEXzODQXyxpCYLQO9qTQhdDudJCl8MAHQwTDBOYmz\r\nARzyziCFRyuB1ZJC93VbFiklvmmaBOQF4pJnvd7stakIPoV209Js1ozH46CT1zYpRdhak9L2Yjpx\r\nBIxDOfeTyc6hpGTcO/Ll7cra4AIqpUzfkUJQ9qDBdrvFFx3GOLp2xbPnN1xdT7m9WVFvDaenHsGo\r\n32/FZFzhxxHgDOmKZRU0CINZSjgmpQRlF8pnebvtWZGurxMG67rU7q10/faLPiVY9GXneoDME9yx\r\nW1arkqoaM51Omc/nTMQM1/RAqN7pJngfTDSEEHvgT14/Yh9jTIlUu77GuRYITtIxzbgoNKNRxXx+\r\nlIyA1pslbbvm+fOa6+trlqsbzs7OMLalM01yLD47O+uBo3ZP0zT2o7bbAbQR9I79jBQSVegdC4jg\r\nwq0KjXYFXoDut9O2LaYzGAPOmWBKo1TvACyJJho74MAiZYdhn3U4bB9DcCUHHhIjJzKWMlAdEbT9\r\nfPa7PUZLfz1UoV9ptz7bXgBVcgOHnWHDt4n8xr/X7vvQhcRagZAea3fiwBGQ24H1EqnC92O/VxQF\r\neJnaf5RdyPvPPPIFgni++X0tL6P1es3Tp0+ZzWbJtCMuxuUyAMvlco/5PFz0yGUd8ntrSovPyjL0\r\nUQp6N19jDIXTe2U2vE75PT7uIwKGORB3qH592+uXg3757/Pt5ufwSj3Kfpu3/XDP+3qmYp6RcCjq\r\n7P6yuxfu3JqjRMkhYDqW16vH9Gr6yOtCZoz8CPgJfL/QIQPjrwf+Qh+wY/zdgTr/OGM4RorvJaYq\r\nX8/avYu7uIu7uIu7+FOK4f1rOHb8vgOBab71dxRaF+XeIBkhkUoHwwSlqOuQrtiZ3nDAB91pnMdY\r\nhy6LvcLLWSxK7dzNhivyhyaXh1gBeV50TA+Nn4VJx064MTEAhaYsQakAcmitOT8/57333sdaz9On\r\nTzHdV4FFdjpOIo1t2xIYciGNdrlccjQ7pqpKqjKwZYztUormZDJhVI1Zr9fc3Nzw8vIFFxcXPHv2\r\njKZpuLi44MfvPqQsy6QFmAAoLEJKqnKMVluc3YTJexcmUqZzeCf2zjdMKALYqnXRs99uw4RVe6az\r\nimqkOJqP0yTx/N4xTdOwXq/3WIFRa0oqsHYnWu+c6yfZEu8E3ue55K+mq0RGipRqrx5EkHQ6nSYh\r\n72h1LcQuv90j9yY7AhGyD43DOqibbm+7m21DZxxtFyiw44lO4EcETfK03iHjZTgJdGan+TcEP+Pk\r\nPEYU4ExgizEIWaQJfEzPi+UIcHl5uQcYRyAv7n+1WffmGpamaynrbdC8a+qU8j1lii4LlNJIEUCE\r\nmKzmeuZcBOlzcB5IgBIEFlRkrG42G25ubph4T71tublZcXO9ZrVZ0hlP3ThevFxxebnlaD7l7OyE\r\n4+M5RSlRXY1dG5qupaqKHgxxfbqgZtxWiUnV9K7AXddhOtubC3Q0qg7XotRp4lwUZdJsFEIhpMA5\r\nQ2st3bZBbBVaL9k2MzrbUrdbRkeTxHoKoEM47x0b0mT1K06Kd8+DEYjq233b1xlPUQikrNhuNxRF\r\nwWKxYDobMzsaMRprLi8d6zWsjE8s27YxrJYbJpMJx8fHLBYnzGY7QKaqQgp9qB89q7G/fpHJGsXj\r\n4znlTMbYroIRTZ9i6BqEiEzKIDXQmZa2DVp+0+m8B7Id0UG365rAjpYSVVVIseuvY93Ptcm+joES\r\nmW2HgNW8veVtbjj5zO8PMSKANDR8OAQEDd/Pn0dZilzzbe97okNKj5Qaa3e/iyB717m+zgi0DqBw\r\n3G5ZlnTtrq7lgr456BX3e+g4ImsvB6rjZxFAykG9CE5GXcznz5/v1Y98Ah9B37jwkIN+8TgjyzlP\r\nDfR+B2CJOvaHu349HuMhQDV/nV//vB4NV2JjvA5kiN8bbiOeY/xOvoCY6w0OY/8Y9+vV8Dt5/38o\r\nbGsPHkt+vb8uhiBovvCZP88/zyPed8N3+7IhAopQFFVWj3rd3mwh9i7+8cQQdM7bLBwGBe/iLu7i\r\nLu7iLv4hxXCc9X2P183F/jbHrvEuKDrFCY6SaCV7x0PBdBKAJGs6THRCFaCVhEJTFPuTrpzFJ4TA\r\nqVeZHdZZnH1VDBxeda0dThjjSnoEXwoX9LXCewZjVljjOTpSFEVFIKF4ZrMZjx49TLpn6/WastK8\r\n+OolR/MZVVXRti2bzSZNapsmWEBPp0H8vBqVgwtik+PcbDbj7PyUk5MTvvjiC1arFV988QXWrZlM\r\nJty/f5/T0yC+HgGFYl7RtmFQXpajVAbRPCHoZ8sELgXB/ghahMnn7eZFKkNVaFShKaoyTTCnR7NX\r\nmIHRPMQYw2Yles3CwEyKoE1MjfSizipYnOTtJg1a9uKVvkvHIaVKhgrjScXR0RFewOh6nBpcu93i\r\n2g4n9llEUklwIrjbuo6LZ19xfHzMfD5P171zhlo0OOO5GYuUGhdTWiNjMQLHeb0cMlBEP1n2ziXd\r\nJ6kUqk+fK3v2Xa75F8A3gmup0D0YuwP+ciA1RkwNhp0OpvceryTCC4QXmDakUNdlTT2qdxqAQlGo\r\nAtvZ9NvJZMJkPOFmUwdmlA0pg7sJp0CqgnFvAmGtBdEkB9HJtEHpktJuaCeGcTVhXG64vdnSNsFF\r\nc7uuuXp5zWKxYL28T/PGGfP5DKmCm2ShNGU57VmGnqKwlGVJ25rEcjs5OUnMt6ZpaOquT5EM7Det\r\nKrwzwe3SWKw2aF3umJwohNTgPR6D6TzbzRqBp6m3FJtgprFYLBiPJzvQqN9mofaZN8PJdGdd6OsK\r\njVIeJQ0UIGWF1pKua/t6CdpJpASlBJNpsHC//KpNrr7bbUPbGq6vb1mvtzSNpW1nKZU7LIyURI03\r\nKXfMHNN22M5g2g5nLN66ADD1bqr07sDeB/27qgifNZsVUpLSPZUyGKNSWqdzDi86PBaP7evhjoFd\r\n+OD86CmAak97LNcMjYsWQwCHrN/OQw4AhiEol/oU/yr4k4MzQ7AnDyF2adD5dof3i6FD7t53pUqA\r\nar7vGDljN9atCOQWRUHXNun3sez2mIUDw5EhABgXnuq6DgZaVcV4PObo6Ij5fJ5kCMbjcTKSieCd\r\ntcGsKgKkUW4gXreyLFOa8XBhJvZRo9EsAUWxbAKI3Ltb267vM3pmrtg/l7zsD12f/Prn4Nh3GbR8\r\n3XeHANawvuQLNkMWYM5QzN/P6+FQNmK4rzgeiX1cflzxWnzd+Qz1j3PgMBqX5DE8hmB+A4nB6CUe\r\n90qdzcGexISXXw9s3sU/rDgEtA/fv4u7uIu7uIu7+McSwzHV9zUOLZ7n73/X0ComZvWMGIVH4dH9\r\n89FohDEK6R1a0AMtwZXVl0E8Pp8MiEAb2AloO5dSwGRcvfceby3WGBw75kQcAOfi6UPNosh6iROY\r\nro3MQImzDtMZBC1VZShLQ1FqvIPxuErmHZ999glNE5x3b25umE6nKKlZNwEc01qD8Gw2NV8++YKq\r\nqpjP55ycBIfWkErlaFvH9fV1rzcYtAAnkwnj8TiZKnz+2WcBpLvZ8Mabm8TmCu6uI7SSe5OIeFEj\r\nEGmtTW6nkT0Wy0FrzeL4/JWJVZzYxXIsSs9o7JnODMe9Jl0E+a6/Wqe04PU6pAY39U6vbbmObqr9\r\nhAlFXtd0oei6CORKEAbjPGUV0hiFFpQTzUl1zHK9Yrle03UWCo8DXNukdDPvPV3d7OlkeWOpdMHx\r\n0ZzJZEItZGBa1Q2VLthuQtlb45FCU+iqN6jYsReFlMHpML5O4AAY34aJEwKkQg4aUlWWIBWu/7xt\r\nWxwCYR04T5UZ3oR03JCyakwAa87Pz/bMcJyzdF2bJvHHJ+c4HJ3v8MZjlcV1Dtc5urpjsVhQr+tk\r\nYhJZfpWusNpSjfaZsHui80pxc3OD65k8nbEgJNp5EBKlC+bVKWpWwJmgeeC5vlry8uUNV5e3bDY1\r\n29WaZruk3lxze33MvfvnPQvwmMXsiO32hrIM7bZrLVu3ReApdBX0N+UopUUWRYFW7V76OTb0FVaA\r\nMwanLL7w0Kd956B40KryuM5Qr7eYpkM1Dd5YtAjmRKG/CBNmJ1xqL1HTz/l99pdxdaAy22C+gFQh\r\nBVwppJIU1a5dCgVFVXKkj5nMpjjnmM86Li4uePHiRWg7zc4afrNZ0babBOZMp1OKokqGIAC0W3AO\r\nF+u8daheCQ/rDjKPJKBkzyAejfeuvTFujzHWNgY8CC+wXiJlbwAiAlioizEIiVAe4S04gQCUEAkc\r\nkEIi6UFqBumJRUjDVQMKPd7vbDwGgFwezgUgPaYKD9lkCXTMdBrzxYivAwfj8QyZael6CsGov745\r\n8LPPzntVdy0cUwBd4vHlIE0O4kTDkSHoF49D67D/0CcYguGTYDKZcXZ2LzB/p0eMRpNQXdrAGg2L\r\nQy2LxSK5TEeGbc7Az1nG3u/cguPxahnZijuX5Fh/jDFYF3+rU585XKA7VN6xTPMFvK/7PL5+HVPv\r\ndfXn0H4PXe9hikc8z+SA/Zptfx1zL4xP9F55xH3FRw4Ipu3n909dvLLvuCgax0Ov/D5/LWzfp+3S\r\n7uM5eU8CvHNDpPBbiZB/GoPeu/i7iQgCx+fDz+CwVtJO+uAu7uIu7uIu7uJPL/Kx5i5b4lXd8j+1\r\n+K6L6THUv/7X/90vvXc4G9h9ztkw+e2BjLZtwDu0koxGFVVZUBQ6pUUVWiMgMPlsYPR5t5v4NXWD\r\ns5Fd2E8encd0BmsMPgP8mqZJTIWogRUZFcNHnOA0je0H+9HNFYRQSBH0w5QOQNlms+bq6pJRVfHw\r\n4Zu0bcNf/MVfMJlMqaoRSmm6zuCcR/VsRec8dVOz2azYbNa9VpcNAA8W6wzj0VEapBuzMxOJbCRj\r\nHNttw9XVDTfXt1xf37JcrsFLqmrcpxoGQGi73dB1LfQpnaa/Hs7Z9Nx7F9iX/fXZ1DXW+fRwHpwX\r\nAcwSKkzspU6p3EU5ohpNGI2nTKYzzk5bFgvNbAbjsaGsOsqqQRctRdmC0wG0tQ6866+hxzuPNQZd\r\nary3aK3QpaJpNmzrFeNJwRtv3AOleOPNNzm9d4YXguW2Zlu3GO8xDpRrKQqN1kHw3poO7yxa9SCz\r\nknRtg/fB3KAsC0zXYkwHeGTRMxd75kxkL8bGPBqNUkponBzH1GOlFJ0xWOdw3ifGn1QK5z3GWkwv\r\nuqiLgqIs0UUBQuB8SLwd9engkf1TlmVK2xyNRkk3Lk9Dyyd7z5++YLVcs1lvaZsOZ30yQMDDerVm\r\nu9nStR3eebQq0KoAD13b0XmLJzCYEBIvxN7DeZBao3SB0gVSazwC6z0eQSEkUhQIwjaVVIyqEUez\r\nGacnC5QCpaBptiyXt6yWS+ptSFFvm5CmKIWi0KMewIVgcFMwGo13bCIXeoQciHAu9BXOgjUWa3q3\r\n1R5kCqBS1X8nfDc+wm8c63qdrn1MZw9tOPQTpgvrD94LnKUHxwJDBiRCh+vuRXACRoJUGqFCmRrX\r\nBeCQABB7eh07oZCqwJotRSGoRiVVFRx0u65mtbrm8vIr6qZmu60T0BAWOXYmEZPprn7mAE1km+ZA\r\nXr5IksClSZmurZAqOIEKgZC6P34LApx3WGcx/cN6i3GGSo/Doo9QQUuvL18lFUVRBrCcoD8okNAD\r\nsOEaeDprkL2OZ1kUKCn7z8K9IICAIvX/eJJ2Hx6ausZZS2Cg+8BAJzDRpRA4awIr19nssXuti2pP\r\nN234iPIGEXSL7+dsK2t3D2Ps3uuyrPpUX0kE/LwnfTciOYeAmbhI83Xgp3epcmE6Q103bDZb2qZF\r\nStWbPRWAoG07mrpJx1VVo8TyimnIudO49z7o2/b30mgY5FxwOT86OmJ5G/rMtosAoqWut5ksROzX\r\nIvt8H1yTPfP7EMga63KuAxgXQvIy+rpHZL3noEVurJQzUofAcQ6e5dc8/65SxUEAOf/eod/Hh5Iy\r\nOFGH3gQlJL1/ELjAkFYiLHwqEbRXlZQoIdFSJcmA3Agor6OR2ZrvM8+UMDZIKbRth3M+1cfUbziX\r\nxg1R6mA3fvD8X//7//bvXzM2/E7xy1/+UgP/7u9iW3fx/00MJz55f3Sob/omUP4u7uIu7uIu7uJP\r\nIQ7dw4b3uO/rY3jMw/f/JvdnnTsEDjeaD9KjiHiuaZSnOQ0PJtc1ygWxo7ti/MyK/QsQ9xn3FZly\r\nETjJXTGVUmw2LdaGSYu1HSARotcVazqqkUZKqKqdHlxZFbz55pu8++47vHhxze3tqmfkaMbjnW7Q\r\naDRBF75naTVsNitevDTUzYbxOACT9cbvgJ4MrIyTlOlkxpMnT7i5uUEIQds1LJcr2tbQdZbFYspk\r\nMknlElPKIlAVdb9i2mnUAIzpZKNqslfeEQANTD1B2Ws6DtPRYpmPxH3sxLKYWU4XNU3TUtdtmpBs\r\nNw2rVXASDiYigW1Z13VgPPbXwHvHeDqiKAWt9XhvAMvx6QnFpGQ6n3Hv4RtsO0dRTbi8vObi4gXn\r\n4zLVNefcnl5kbtARdQtjWq8Qok9/q145v5gyFfW+4vWJINy+Jt4oAwQDaBUmmgH8TcYyWhPE8CPj\r\nRzOZWDAtxogeGE6li+/BJaUqQqq2x9pwrsYY1ut1n/oaGGfW+qAB1xqUCvU4MIFk79IcvmOtp2m6\r\nnRnFRCctudiOcyZKZP7kzNpoODAajZBuN6kuC0dZdIzHzS6tvgwAynq17cGojqurK+q6pSxLHj16\r\nyGg0YjoN5gLj0RStyvT7yXiGkg34barbEdQPDs07ppHtpQAieGuMQxA07UKbFEipU911zoEIIHS9\r\n3QbykvN4C6btKIqK2XSB1P2kPcDWeDxKBGBFFeVeSqCSO3AN6NuyRMqoYeZ6wCPUoemsZDItOJqP\r\nWK1GTCYl01nBahWBSMd6ve4B6pBaP58fJwOXUhc4qdBSYdQuZdwai3EdWipsZ3DG4oxN4E7Z19Ot\r\nWfd1TvZAhkKpIvUHuZttBBjC9Q6p4aJwOGsAACAASURBVLe3tz2726CkJhgKqR7AFjgb+/UIGAiE\r\nkAlEUHLHSB2mg0bNucgcOcTMErI3CpKA8PiMgRY/fzVeZa0c0vPLr2M8nnzb3nsk+6m64Z/oGYsR\r\ntA7vC1RwG/YxNdOj1Kt6HPG/lJKmaVJfFvvynJld6JKmaXv3cNf3AduU2hvSVklO7U3T9uca+g1d\r\n7FI6Y9nHFPP4PH6eM3+apukZ6z14RzTeEam/iA7EhyKXU4iA1BAoA3oncJ3OPd7H43gg6hweAiOA\r\nXod3H/iK+88B3SHTLx+LDFd18+M9xITKjyMu5h0acHm/M66JmQ2uz3pIdWpQN/J94Pc1j4fnCDsW\r\nYDzn+F7cfgDowQY+Oro3TnLO0fULF3n7zK/ZHaDzjyeGQDbs91vDvnLYZu7Yf3dxF3dxF3fxpxz5\r\nvS///6cSw/t4Pu/6rvdn9a/+1b/6ZT4pj2lycUKeAyY7TSC/B6LkE698EhI/z5kH+QSgKAq8kHvM\r\nisAOkul1UZQJlKmqEWUZQLr43cDQiKzBnbi/c5amrVFKo3UwE4gTDq01SitG4xFffvksTYyLInwe\r\n2X1VVTKdzJLTpvcO60yfkrtltVrjnKBuarx3mcnA7hzv3b9HNaoYj0dUowBURXZaBDkC6OETqBSO\r\nVSeQIaZN5npPuc5ULPd9RsZO8yf+z9PB0uSuk+BLpKwoyxnj8ZzZ7JjF4oyTk3vMpmPm8yOmsxHj\r\nSTAUKUrQpaWsoKiOAwtOOJSSODytsVgErYe3Hz3m9PiU+dGCqhozmx5RVWM2my1XV9ccT4NLrbUW\r\n6x1Ka6rRCF1oPIHxFXWxYnrbeDxGqZCCqyvdm0jsHqG8Otq26yfaEcSWCcALGk3BAGOYijZsaPnE\r\nL9ahZNzh3Stlm08Wi5S+WjIejxmNQhpr1MBbr2siIyNoKjqsNRjT0XVteh4fXc96DGmCDQiJc55g\r\n+hDYr7EugUALtUvbRCR9QfpMv7LYgd0RkIusosl4yng8YTKeJsDO+wCIbjZrlsvbBGRG4DqyHvN6\r\ntzP02DnZxjpalBKtApM4lre1pmezNAHUd8GUQSmJ7kHAUFbgaAlGFh3GGjpjaLuGrm2p6w1FMcL7\r\nyLjcn2ALoUB6pFCJSSuQ0EsfKCHwouhTXQMbM34vntd0NEHKAikLRqMZR0cLppNFv5hQ0rYNnWnY\r\n1lvWmyX1tk93DqqRdF2T+tnQT45TP1eWFXW93Wv/xgSH0liXnbAH23Wsk4UObSn0Jzl7LZSfaWxf\r\n3mGBw7kOhCM0k9jn214WomfxZf2J1PtsxHgvyDXP4vPhjTfGoc/jY9ieDi1Sed8zAX1gJycqXWSw\r\n98/zz0NdAG+jYFr4iRT9dRaB1RU/C83T9//ZYzPu/kif9wgQzlqkCPVWK41A4Kzrma4WRzBicc5g\r\nTEvT1my3azbbNdt6g1LB9MY6Q9c1tG2NsV16z5hubzEo6MWGVNNYFwKQbtK1sTYs3qzXa6QIOqVC\r\nSIpSI6VIwLbSQZNSa9XfkyQIDwQTFKUkSlbpfh0f8X4e/+esyfh+/MzafTf5IQi33W737mlJry6d\r\nm0jbzscPh/7njwTyisOg9A7gda/UuUMsx8gEjw8GgF58ndf8+Px1K7ywA13yz/MU8pz5OGwn8drv\r\n93lir739n//h+8H8OwTQHvpOvB45oDoE3+/im2MIsh8Epwf//6GUb15fhnVnOBY8NC782+z3dc//\r\noZTtXdzFXXx/4tveGz30hq4+aIN7j7AdjVRo78A1QI+7iF0GhpQefMjCcUIifJhYhu1ILB7pw+Ky\r\nAZQIEiVxmT+QMsI+h4aif6eRjcEOvo7vfY/DA06ImNuBEY66z0TTopdd+w6h4w1uZ/SwSxnJB1px\r\nQjdMO4sxHCQMkdUcFMwnhxqfthnYeiGdKgxS6YG4OKD1RHBTKRGE9ycTrLVsNpt0vJEpZ4xJQES+\r\n6l0UBfP5nEePHvHo0ROeP3/O1dUVUu5YY1LCbDbrU5/CfpQe92XVUNdt7yw86hmIG25vb5lOp8l4\r\noiiK5JY8Ho8TwBrNRYIu2C2bjcfajqIoMKbFmDaljLqMmRXLzxiTzi8y2nLhcNgHZIfXJn+93PSm\r\nKyqYGQjhESpM8ACq2QRZFaiRZnw0oWmOaeMk1BismfHyxQU3N5dY19F0NQjHpm1Y3VwHwMIFYGgy\r\nqRCyBKFZrjZsNjVye7NLd/Jxbhlm2xJB3ZdTvMZCCI6Pj3tjiZbNpt6rZ1LuWHJta3jx4pLZbNa7\r\nry6ScH6oX5qmaVJZxElyDlgNNZfi5ClOtqUzid2ST67zFM24HSFEalfxGKoq17T0PQgQ6oMQIrlx\r\nBtdai/cW5wxd17s9e9fXo00C12LqcVEU1G27Vz9i3YgqX8O0svg8An3j8ThtbzabsV6vWa1WrNch\r\nDf7ly5dorVmv14mdGl2tc51OpVTfvoNGY1xk8Gi6zlLXOYPL0auG0jRbjFFpMcEUJjkCh0rSM16t\r\nwLm6B8pq6rpO2nqTyYTZbB6uvSozFqHH9jccgQw6esLhXJ+m7T1KghQlSkV5AdvfqEJ0my1d6+na\r\n0I9NJ2PGowCWzmYzlFLJabttG26X11jXsa2XVFXF8eJ0z6ymqlQAVZTomV4qMcUiW6tta5omXN/J\r\nYhr0CcXu+lpsMFHBUlYFzhUo2fUajEViZVprUaVOff6+K2gAVryzfX0PRixaO5QsdkADfTow+fXb\r\ngTWH2k8eeZ8VIwde8t8einDLEuBlklITfdp8vKeE/co9Pc98kejr+sdDK4RD8GG4zeECQvwsZ7wn\r\nBpaKi10aiI7McQEq9AOxX47AeNiG6/uLHWgP9EDe7j5XFEVvRrMFdgYksT1ZYVN5R/Zz0Ixz4AVK\r\n7zv89hy0cJ8QguimvQ/e5EDbsPxcP8ba19L7OlZSjDyFN0YcD8TNh+3sWJyHthfKp68f7a4tvw6c\r\nzn8/fBz6Xh5DzcAhoPCKVibg4yIrUPTXa+/Yske8dwxXg/P95fsclt/3Lb5pRX63QGRf+d7QGfwu\r\n7iJG3v4PMWhf1/8M72d/2/0fWuSCu7p7F3dxF3/zGI6XIr4C3/Z+34+bvOiHbhJPwee3UOCpZIlz\r\nYa6slApfE4Ju0yKFp9CartkylhqjPNpB5wydFIysw8ogsdI1bY/jSLQusc7grKHU4v9l702aZEvO\r\n88zHhzPFkNOdqu5FFVAAmxSaQ5t1GyVrtSAutNFCXFAbLbTWP+Av4V5/QGYy047NBSmZyWhGNiFr\r\nmaEbhJEAMRRuDXfKjPkMPvTCj/vxiMxbhQIhoprMryzqZkZGnDjh7sePf6+/7/th3f5/TOP8PQkp\r\nKgYjcd5SCIPUis5arkqNKIAvWL9Np4TRTpVE04dlf8t3oGNSZ4wJvjb5rnJMtGRYpMWCHc5YHJm8\r\nbpQURVlSHvmOdV6xNQEAWSKsVJUAj3gBRCafMWYE9aaKufH9SikuLi745j/6dazx/PBHP+DNm5sk\r\nTQQ4HDo8bpQMq5G1BGUZKjA6B0MvEhi3Wq2YzWY8fPgw+b+t1+sE9hRFQdM0zGazJHdarRRd19G2\r\nAbCIwMj5+fko3yqoa01RVMn7axgszh2QMkhhI3gQiogUqc9+Fn+l+dkDwCVQw3sDwkD0snJBYlg2\r\nNWdcZa8Li5Z2LXhwdTH6m23pTcdmd8HN5oZD13Lo9uz3W1bbDVoF8G++WPD48Tv0naN9/RPW6zVm\r\n6DDGBgmTmZJRpQqGIYLRPgF7Wpecn1/yZr0aR80ISMtxDALOej75+BV1vWW7aWkPhqurq1DgZRx/\r\nSuVViuPEGZNWf6sK6GkSGX3OVCZDi9eGtZa+78P5jAwmqzVD31OVJVVZslhOoHq+KA19ZzBWYJ3A\r\n2I7BaAZTMpgqgXu7rj9K9KuqYj6fJwCg7/t0PZ1WLhVC4E0G8DMBOPkcILVGK0VZFNRVxXw2S/6c\r\nr169ous6tpsNfdex3+1S4RulFMvlMrWVVqGgig8mfEgRvAcDEFejtaQoFV07SVSNccHXat9xOITr\r\nIMi4Z+PcMrK6RGDfMI6PcA1IVqtr+r4dAfuGqgrsy7quqXTD0Efwe5QUEwrHIEwqDiKFAKHHarmC\r\nsAMW/tbUZ3i/xZjAvtS6IBawifPSbrfj5uaG7XY7yjs7Xr/ZBllmUafrOo55XUwsyDhXRNavtZau\r\nP2Bs6FenS5RyaO0TyCplidIlSoN1XSpWIzWUo9Q59fMIBA69Hed56PsW5xxt21JXTRi3NlYQLtDa\r\nTT6aFOFa8T55CnrvQQpEAnFHpl0oKX+0kaHlVCjjbcyIzwpdFncmcOkRN0/CKJneOK6HvAjPCzHu\r\naI6YVQCmwZyAg+n43LHJFZO67LWFDm09WIMbJpmqKjS6LHDeABLvFUWpKCtNVRf0fZPuY7nFhnNT\r\npejgaTkxK/OENc4hRRHA3s1mg3NuBJirtCHhb+WcJ4xxdczKjJ8dF3DxPva29ldKYWx/JPcVInim\r\nDr09Ou4xaBiiKKNENQJ9AZRPn+VOqv1yPHakGoExT/CqHEeBF5HR99nVdHM2XT7OcuAgffYdi+zP\r\nWnh77xEyjiF/5/FTwaI0dv14fwrsRTuCr4j43gAepj6QsV1ywCEoDb5M4b1PG3GfBarmQGdcy52C\r\n9vdxH3fF6TUcI86tMfI1UD63/iI+P2dgx+OfgvP3cR/3cR9fNHKw767N6c8Lh0H6AoTHeug6y//5\r\nf/0lr19dI5RCVEXawDbDQDOb0fYTZiQKjXSe1g4Uo52MqkroDUaCdNPmR1o/GYsqR8zCq7ed2n0A\r\nQvZ4iqDhc8GTuxCS/+Ob3+Bb33yX2Rc8nm6aJsnKIvhXFEUqlLDf7492WmEaXM45vIwMigkczD1l\r\ntNYJiIt/izfTYRjQRX302nj8HIDIb9jRvyqxGUSQw1nnpuTLByAgPtd2HfvDIclFhZTIUSb3/vvv\r\nc3Nzw/XNa/b7wEbTWjOfz6nrGkRIbsJnDBSFYjabsVwGFtluO7Df77m5uWGz2bBarei6jtVqRV3X\r\nPH78OAGBOcgTE/mLi4sE/oXP3yefqNAH0/uiR5IxJkmGvbdHvkmxH05lQbFdTn8OOGegjgZwTQcf\r\ntsRi44hZEiRqMeEUlEBVF1xentEPe6zr6U3Hbr9n1x7YdQOyCGOg7Qz4jqKoUwXlxl0mH7PNZjOC\r\nIyax6wZzvCMbqyBHGapUU/IfAAaJ8wJjPcI5Du1APzi63rLbd6zWOy4vL1kulwFc1ZNU9xQcC/10\r\nuJVcHCVn45iNz8fX5AbupwvJWP3VOcf55bHEZAL+AlC+2WzGZFngvMS6jsEc6PoAMoni7Oicy7Jk\r\n2bVY7wLgYGxi8eXfK00Auk5gZe4TF18XPbdOvanidd00DbvdjtVqxX6/Z7VacTgc0vzx9OnTJJGO\r\n8mfvfQLiO7PBGj/K7jVa92gtMSbcaLrWJvCrNy2D6bC2wbng6Sj8NOcoHWSV4eZlsBaGvWFwHYPr\r\naPsZZbmjrpsRBNmj9NnYHnLc8FIEVlIA+ISYwHM8aKVBTHPTbNagdY1W25GtGa6n0BehqMLhcGC5\r\nXLLdrdlu12w2GzabFft9y49//GECbM/Ozjg/P+fsbBEYl+OGRWy/qQLrkPrq+vomSX6jt2VVNsn3\r\nrdsdwvkIhSpujzEhBiB6lYXvZa2j79sAop5PkkKlWrQKgGYEGp2uj+wHAjA2FQfJmTo5aB77zLtj\r\n8OSUhfd5SZHKQK9TYD5nRb0NqMmvhVMw722AQvxbfsy3nWcsspFvxOQSbevifVWgtaAoJFU1+eNt\r\nt9uj8z1tn6En9cfkETgx4ON9IpfKxvlASokz1fjxLh1nGDx29HpUmnF+DC/LmfveT+yrU6Z5njDn\r\nbROLLeV9ddov+e/5miAeKx9PhZrm39QuR08Embf30/iO9y4pBcPwxZLu035422vi308ZaqdjRsni\r\nCLA9/Tn3Y87fHx/9yOyG29Xe4xx7Fzh2ej18GeJnbdv837gu+bJ9l/v48sbpGggmhm6cK+Mc+Xng\r\n/heNPD/KjxkJCfdxH/dxHz9PfN5a9PNCoEFmW7BasToMbEWFLGp8t5vwm0KxNx4nNAE/8BTGse0s\r\ns8WSvu2oy4pufwg5uhV4N+BRtIOlrmoEA04rHApjHVLcs5/fHh5nCIVclUTKCmcHBtMj3EDzc9yb\r\ndJ4kxZtSTEzyG+BdiRUQmB3ej75YIIREFToln1VVBcbL0IOHoipHeathGCVMkZl3l2wyRp5Edl3H\r\nfr9nu92y2RxSclyO4JjzgYZaFgX73Q7G37VSyKrCGpP8mpQWvP/Vr7A/bPmrv/or9vsti8WMolB4\r\nb0+8yEJSZe1I4ReaR48CeLdYLFiv16zXa3a7HS9evEjfo2kaFosFQPI8i7uNDx48YLvdjse1ydsr\r\nPsICfpI7aS2RUiewxpiQYBwOB5xzybcxAlp39WG+qDFsp+TNRUQ+VDVFMMqOS6AYAdtjaZl0PWVV\r\nUdcl1s3xfsALj3GWduhZ7Q4UugpG9q2hrEYJaNeyunnD1599hcNuT93MkeolNzc3I1sueME5Ebyt\r\npBSEiswdL158As4GYFWpo8TT+1AAYhifO19ecDgc2Ky27DZ7DruW7tCzW+5HMLVhPp+zWCwQo38e\r\nxOIZkyl8DnBMBSrsLZ8nGRd2IpjAL5bLBPRObBoVJF1licceAWv5GIiy9Rycj6BgPJ7dkwAipVQq\r\nDNEdWqqqSmzQuq6ThDf3UUOObBFkMq3PPaGk8glM9x4QgaGkiwAaOGeYzecsz86SJLhtW/ajzFB+\r\n+imLxYLz8/NUyEYqRTMCWzcrgy98VhggPJ+qtNoeKQPrZxhCwm9dz6ENDDjRjxJHHcd9gZQaojTX\r\nS/o2MI/b/QGtg4S5awO4P5+FYgRlpVGixAuBkBkz0iqciIytyCKbEgczhArM8/kSa4fwcAOxiqjW\r\nOsiNC8l80bBczpnPG+qmYLvd8ulHu8T6DZLe0M/n536U9HdH4H8Ak1TaBOjaA4FpLenbjr7taGqT\r\nwNcIjsrkdwlOOLTUOAmiaAOwIxxKB/msc0Eyb11P103gd5qn/UDhCpQqsL1NVWaVCrtSzjuc9Xhn\r\nYdztC9WCw3/e3ZZTnYLLcX48Xcic/p6zJk/ZFIGxeJv5/DbWR/w333g6lZrmx4lzdv7304jg26kf\r\nW7yXReZXziTLLQOih2z8jFOW39Bz1D/57m/cpIlFf7z3aQzF767qBjkWLanrcvxcjzEBVBLSjRYb\r\nYdHn/HQuQkyMZyGP1whRdp02rKxBjOMn9sswDDgLk1eJSAVW0vrCkubT0EeMFZJHP0Yxed7Gv+e/\r\nl2XYRLDOJUawFiLI5JWGwZy8/zbz73TTLM7BkdH/Wf1/F+B2dK8a7+3ORe9fl4BN7z2HQ3vUt6cg\r\nYD8WBYtjMW4Eau1HOb44evjRE9YYezTOvwzxeeBKvimcX+tAWmvdx318VpxeP/G5fBzdtfHztwX+\r\nTueB/Oc4z9/HfdzHffy8Edd4b1vrfl5YBNqFpZVEUCiHFA5VSByWogiAk7djIUI7FgkUgBdo7ym1\r\nYugGCq3xQ0sh3Ki1kGjl8QKklhg3gOkoS01rLLKo4cT/+T6mEAIKJemsD1Jp4bFKYT04aYGBL6r7\r\n1bEiZWQLnC4w46LzdLcsLWRF7gUU5F5SK1QR2GL1rKHtO6QepYej3MmOkrDAbIvG3aFiZVFMi7zj\r\n5CxI+oxxIwAnWF/fUNc1fj4PMkBAiyn52+xXgVqKoJCKQip0WSKcxw0GIQouL895+vQdPvrop/z4\r\nx5+ODB7P2fkSYwVFoUbmUrhJW+PZ73rMsGa5DAl+YOycpaq0m82G/X7PixcvmI0yyeVyyWKxSBJd\r\n7z2zWU2oVkxIpq2n72/S9+uHdtrZt5lfogqSLCECKBdlmH3fJ/+wnIF5FzsDoB9248/Bdyr0vyLK\r\noZQ8ZpaAGEGEyAzrQp9LhVQFQmiQYSJQheXR42dsN3vevLnGChfAOmPYbla8fvmC//V/+UdU8wPo\r\ngs46Dm2PsR6lNXXTIPod+/0eC9RF8Epc3eyoSs2Dh5dUWiGETqBZLIgCIXE/Xy7xdmC77ti1LUN3\r\nwJke07cBlCkHjHGAZD6fGCtdN4ztMo3D/DpIi0PhEEoiBceLOCmCL4KXoX1GsC7IaBVIQVGVDH17\r\ndG1FVmdkQEaw+3A40LZtAn2T5IkqyBTd+NkWun1Htw8SqqtHD0fpX6guHb0kEwBYHi+EpQyJuxrl\r\nqx4xMRGtRcipOIiUkvXmmrKuqGcNs8WcqqlZr9djZWDL6+s3dEOP9Y7FYpFASqEkXsBisUxJq5Td\r\nmJgapNQ4xxFQKWWshuswJoAqDEEaV8wKJKAQ4KYEfT47D0l2P2C8YZADth/wxjG0PU1xhhMlOInw\r\nwaJW+BF4kDAMwVsNOd1IRTYPrjcbiiIwGgulEFZiOzfKCyWDNSBAF1WYEytNUZVUTc3Z4UChVqm/\r\nd/sVbbtntbpmPl9SVRUPH11Qlc04Z4xznCgCMwvJcj5V8x26ATu0mK6jb4O0cz4PnoBaqFBswoWx\r\n4p1HeE9dL5CiR8khXd8RWA7jsU/fNczFlmgToNSAp0JLEIVCRtq+d0ihkULSW5s2WqSQgennQY2b\r\nC4M79pY9Zf99rheSt+A9PpvbXGQcOoFWkWUWwTWO5j/h5SSJJHqqHTPcgKyoR1bew5NsL+48Ne8x\r\n1kzXvZqAKmeDfFXoqXjDbTBUUlX1rSQ1Z85Vpb5l7wCT7UO4riTz+TxdS3GutNYyawogAKhlOVp0\r\nuCAdD2DfcOzz6wQuY/wVqjoC/k7PM7BAx6q4SKQoUFLhnUGKIFsN95TIXovHmDwjI/YXAccoO/be\r\nY/xbfCFjO+AJWGG4xwE4ER7Gu1vtdtqXd/VtDraeLq5PX38K9p0+P2J/eC8SYz1uLgohMH0cPx4h\r\n3K3jh3uXG/s1rCPCdewAM/ZdbI4oKY6vu/XVvtRxunZJAPi4uRZ9Le/jPn6WiNdw3DzNN1hPN5N+\r\nkXG0STJuiAQbof+fXZD3cR/38aWLn5fVL+L/wkIYO3iUdxRYOmcZKMJ6z1ms7VEEgouzHus8Az2u\r\nmoEVGAXCOiolGbQMeRQO4w2imjEMB8pS4oWndz1KVDTifv57a3hwg6YcCTpOWBwS6w1Bf/nF71E6\r\nyHyGI/+UKKmMYMZUIEHeAkFMnrR4jx8GHDDYIDc0ztENA0KpwL4rS5AS6z3GOaQM1Vqt7RNTRusy\r\ngSD7/e5osRdZUAEYKGmqmq7tOOz2SUpa1zXWBqZPoTT77Y7tesN+u+PZs2c8ePAAIRV2MJjROP3p\r\n03f47d/+3yhKyQ9+8AM++fRjZvMK72LRAotSJdEIfxgs1nZofWA+nyd2RZTIxn/7vk/Azc3NDcvl\r\nkvPz85SMeR8A0IcP52MFYMvNzZq27TkcOoSULJfLVDwkeLhllfwQacES2UCxL4ui4Pz8PPVZvrsY\r\n2lmzWh/Qo/RV6xIp9AguBbCwaw9Y06XEUQpFWeiQ1AmBr6sRBPMj22M0gheSwnu8EZS65GxxTql6\r\nBmvougN1UfCVp094dRN8Et/5ynucP3jI8uyCn/zkJ3Rti64qjN3TNBVd17HZBqBEIlitrvmrv/oe\r\nX/3a1wPLSUmG3mBNBqZ5y3a9oVCaxw8fjUzRDZ9+/AmbVSjO0g4PmM127Hc9l5eG5XJ5VBREyCGN\r\nv3h9xPY1xiBVRBNCghVBhlBUw1M3oZpxnhBba6mH4OU27Nuj4wkUShZUZQPA69evKTRQSwpdJb/L\r\nUDG6x9mWrm3ZZYvYBLCJAI6fViiO7FClFEWjkmdkqHTtOfQDm30A7x4+fIjQHukcKpOLHvpRTlgW\r\nqOg1V2hQkqKuEnPv5uaGru/5yfOfImUovnF+fs5yuQwSVaXxPhTf0NpT1yJc13W4gV1fX6exHSXI\r\nMIzj09N1PX07sNvs0TosomdNkM3WZYUdMtaUkAgfEuqt2bGXB7pDKK4zH0H5silTW6kiME1j0ZVh\r\nlGjqkT3lnGPHFonE4pBCBkp2USIFAT0UBufsdE15RVE1nOmSxZmjLORYLAg26z1dt2e7O9B22zAG\r\nZQBsh+Ec56Cu5kipKYs5Wjm8Woe5yFmMHRh6yzAc6HqNUgW73Y6maZjPFyOTcGQqEeePIkiCZRGK\r\nm0iJtQPeKfCarj+k8WydwxuL84bBKJQSdJ0ciy4N4/gZ5eejtB84ArfiHBl95242qzS35wy3fM6P\r\ncRdAI0eYVYgJvPPOJTZuYJuONgb55kfa5LotVbUjYOm9p66qI8ZWPH70nYvA5ek5pwSPcVHlfU5L\r\nS4/ARoubLyfAmTiW3YNPTMf4eU1dHH12zvyDUGgqXrP5seJcABZdjBtswo9AtRo9MCV1PZtYeOn6\r\nF3jCMeWJR990LuGx3e7H62mG9562HfB+GOeqGbvdCq0VAplA0bTBJQT4sTp1VhF9CoFxWTVbcexN\r\n6L1nf5gKOkk5rWOCofW0WZP7JOa2C6eMzVNG0DQncevvkal2CtjlLM+iHu9VI0A5AZVhYV3ISdbq\r\nfPTry94vJ4ZsXK/Fc86vufxxl+zxyxJ3gan5+IvfJ0Yc13VdM5t9Udeb+/iHFDngFu81cT0lRKgs\r\nXpYlTdMckSDgFyP5ze1f4qZDzHPi+vo+7uM+7uOLxl3r5C8aQY82vlcEIojQCteHHLgSPdI5pBto\r\nCsVv/vr/TNcNXF/fcGh7Hs3m/PR6w9XVYz599RH/6Fff48nZkg9vNvzoRx/z9UcXzB+8y7azPP/p\r\nj/j6s3cptGBv4P/+3g/oq7NfQEv8PQ0J6A7hwbke6z1O1ljZY9WAZ0DwxdjjOiaxubzIOTcCbFMy\r\nFkHAKNuJj2IEN2KcSlRyL7E8AYkL676bAKsA2Ij0rxi9qhKbwVmc9TjrkUJRaJmKG8Tqt1EqGz3z\r\nojQn3mR3u11I9seiD9YOo1+YZLGc8/jxY9brm1TJ9OryEW5kGwoR/ZMCW0JJzXa7TW0TAbbZbEqY\r\nLi4uWK1WvHr1KjGiDocDZ2dnOVEKKwAAIABJREFUVFXFu+88RSmJd4EZUVcN89mC/X7Pm9fXeOok\r\n4YsJCYRFb9u2NPXyqO/i32L/7Xa7BAjlyUjccbw6e2dMHsakx4XkPvbZ+UUzsjLH8IGRaO2ANTbI\r\nP33YKVVyTHgAhERJgRAWIRxV2SCFDvLGQ4tWgvOzBd3QY7ahUMC8mfH0q+8xWy7o+55KF2xXn7Ld\r\nblmtVuy22zBWhtDPL1++5PLBFbq4Ct9PehBuZER6nDEjozIU94g+T86BtYZh6NnvOqwB7yR9Z9nv\r\nOs7Ozlgul8xmM4w5HCVWMblKMmBhj8Z7TMTyfsplfDl7QWtNMVscMfnyYjXeex4+fJxkwLnfY5SJ\r\nOlsceWpGACNeU0IIjBD0XUenNd04FiLAr3qZkqa6nvw3o0ffXT5UeQIWX5PLZeJYM8bw8OFD2rZN\r\n12csQrJarViv13zlybtoVVKVDUKI9N1i5eD5fJ7Gc77xEOcV5453uiJTEoJMuNAQmUUTq1UAgdHm\r\n3YA1Hc4NmKGlaIMsuGwm8CoC5UM3bpCosEgfjGE2a1J/CiHQSo8s2SBx7voN3sc5NgIMmlg9+PE7\r\nS9q2Yr4omc1LNusd7WFgGAyDMbx48QllWbOd79luW5aLM+bzc+pqRllUoLcUuqDQYEyJGaa+AEPf\r\ndcHeQEq8dWgdwM2qDOBb1w4jaha8DqWQqKJEqYqynLE/3IznPGQSWztKFAVSlCOrD5yxibVZKI0U\r\nJYE0eeK9Zx12MOFv8rjaabwvTNPNMdvn9N/EQsNHlC2SvtLfw998KH7g43vD63M5/tvYX3c9F6/l\r\nHFDJI7/nxdfdxQDDx88+BjoY5a3eCZTWaKXTde2sDXNZ5id4ClTl8lrguP3H6zkkwdEvNkj4w3cR\r\nR/1yeu2H5wJ+OdjjgihSxu8SvoSzYHC4JOkIcKF3Amtue/3lKoRT1lz+iNE5czT/5u+LrLD4/XNg\r\nNcn82gm8i/2VP+q6Pu4vboPTef+ejqNTz9S8/b33SBcuPynlaB2hQEwbrdN4CQ8hQIrpfAqp7jyn\r\n2I7RE++uc/9FABr/o+IUqIxtl68nYx9KGXx07+M+vkjEcRXXJnHdE6+Z0w2ov831knKYOzw4o/rq\r\nHvy7j/u4j583/rabFRILaBAC6wWDF3gUzoMsSg5OIryl1ppWwKBqvvuDv+bQ9rzz7lP8omQYQD94\r\nyMtPfkL/wx/xv//mb/H//vQ5+87xK7MzXu1bvv+Tj/DG8D8tLvjhj77Pk/c/oDx7QN+1v8DW+HsW\r\nHowrKQDtJNJ7BDV+UOhhgXDVFyb/6Zgc5J5mceGZg0QB9JoMw+OjWS6Ods1PPVlyNlpcXOc7b4d2\r\nn15vHXgmHx2PA+FReqyEOnhcZ4NUSHiUkkeARWRECSGSvDZ6LkVZ7Js3b9K5LZdLpAoyJoFguVzy\r\nwQcfIITgRz/6Ea9fv6Eoghl/YEdojHE4F47plGMwJBZV9PeKCwilFFdXV7x58wYpJa9evUoFK4Yh\r\ngI5d23N5ecnFxQVFqXn46AFVXfLxxx/zySefoDcWrcuRUaOpqkkeeioVS+PE+6PqoKkQQAR8RtZg\r\nZFMdMVXEJIWQUiJQKZkO7AODtfGzXUhEcsaFEGkMBgDIoVWNViBljzGOsqxZLARN03C923BoD9ih\r\np9YlDy6veHRxlRZj/fCI1c0N169e0rUt3lp2ux0vX33Kzc1NGmNFUVA3DR45yjcs1h37iU1sl8Am\r\n6fshFWYZhoHtbsP1zRuurq54Jp9RN9UoQy+S7Nna0PfxWPvD5lZCmSd3p1KOvL+klFRlOY3/keGW\r\ne78BR5KUCHBHNl/feYZBIIQfAcSevncZ+HfMbOq66dpVSiHLgrres9+1zOZ1YgZGtlvX5oV+gnRU\r\nZwxS5ztiUhpAFkehgwdfYLXqxH6N12DXdWz2u+DtaAV1XbNYLMaCPAVFETznpHQsl+cJ/CvLjrKM\r\nrMeRrWx7nBU457PkcD+CUAfqekhtpUWJEkFiFwGMoT+kyuH73Y6yqqiammrWUNYF54vL4KMoJcJN\r\nxQN6E75HrZaAGxlKHpxAyGmudG6eALMwTxqcDmxA7z2VfsKsNszqnnmzYzPfsFpt2GyCF+D19Qol\r\n96xXW2azNefnl1xcbDk/uwhzTROsEmbNAiFG39DOJNn4Zr2mbfdsNiu0DsDvfD5nuTgLmxQSlBpZ\r\nXwTwRimFJjBCi9InwLnv2yQXjeO6LATO9bRtTJQESlr6Xo4FLQwIFWTAUuEsae6x1iP1SbXWk4Qr\r\nFF0JLLj4/Cmz6jROE6t4rR3JV8dHzvDIj3UKJOXndAr0nCZz8bg5M/BtUZfVnaCgD3S3QMaL3eNH\r\n6Gz0T8T5dH87Pb/4mfmmwClglcu787bPYyosdffDusOt9+ftYd0AQiWfzJz94ry6BejkIHAE7uLv\r\np+sM7z0Ut70UTwHLeE53sfjcWK0uHwPxEdvvtE1P+/qz2u9tYyS934WiZIIAkmul4ISpfwqA5iGt\r\nP7rHxdflBUNinL73yxxxg2ez2fAnf/InvHr1it/8zd/kH//jf0zcOIvjJsaXGcy8j19unM6td81V\r\nMWLBOWOCd26MSJLIi3P0fZ/yozzivLrb7ZL3eXz/2yqk38d93Md9/Dzxt50/hCc6XIH3KD+WPJQC\r\nK0C6gMUshoFBDZgCvrKYM3z1PT68fkHZ7nBzx8IqFodPMc7SyTmuMwx2zl6/ZGF7zh6+Q9d1/OTj\r\nD3nXCspvfIDawuGwQ0j9GWf4DztC9zi8GP+V4IXFcgDdIoThC3v+HQ7B0D1n9kWwQynFZrM5AoZO\r\nmQwRPMpNsPMbYW7cnnsQTWyF8Lp8cZ4vwOONOGcGTMyW8L4gZwsHypNT51yqsgvhRrxerxMbUCnF\r\n/OIs7bw1TcPTp0/x3rNarXj9+jVv3rzBWpvaJWdWxYVnZGblSWEuAz47CxVFz8/PU1GE+Hj54hVP\r\nnz4NLKfFjMvLS549e4ZSisPhwHb3iuBvZFMFYqUk1hq8DwlS7L/Y1pFFlsuYYh/E750nS6c77DBJ\r\nvIZhf8T0zF8bktx8eAbGRw6EtW2fqvmCpuskRaEIBUQ0gxBjheSBzWZDrAirRQAgZ/Mr5s2CR1cP\r\ncIPBmJ52t+f1zTtsNhuMs0myKoTADAPOBk8zKYJUKk/8w9jwE5C2201sk0NYtEUwUUrJ2XlJVRU0\r\nTUjS93tH17UEee+UiN61iIwgwCkzJW/jvE2990eS8bjIjIBZBLzi+fV9T98FYKxtVfI7jKCfEJ5h\r\n6NL5hOtOYa0e2WcK23cJNK82VZK9NLMAAi7mF0wAzG3p/2A7vI9ghQ9yV6bvWZYlupAUpcKYeizW\r\no0A4nDe8fv2aqqpo2zYb36FITmTdxPEczzMHQz0d1gYQZOjtaGQ/WRhE+XtVNVSVhwKULBAClBIM\r\n1icWbd/3iP2e8lBRtQ1VXWMNGBcYQMbbYG7rchaRwvvgVeZtKHwQnvdH/ep9ZMF6hMsZmh0gKXTJ\r\ncqkpioqmWXJ+fgjAi3segLdu4Pr69VTo6HwTJNSXOlULDlJnTVFCUTmGAdq2HOfRAMBKKWnbfWDy\r\n2Y7F/BwhBIUOGxhSTcUowrynRpuB+FBpHDpnETJsCHRd9GENNgY5+BaA8mZkTDOy3QLTMGwuiHH1\r\ncTfAMTGfbi9yTqXCp9dZZIGeymHv/ozbCdldgMlpIpmDfXedV35+p5FvGOSPGG8DneLvUsmj++Hp\r\neeWJbvysfGPi84zm8/ffFZF5GY57u4/C53hgklTH9nJOpbkzP6ccWI0bhafsw/Q5dwBe+abLXeDb\r\n0fm5k7ntpD/ytj49HoA9AfNO+ytuTt4F0AGs910A/+LnxmPI4BHpvU+i6jvHoh1ut8nJv6dj67Qd\r\nvwwR1zD5JvFut+Pf//t/jzGGX/mVX+GP/uiP+Pjjj/nX//pfs9/vaZrAFm/be8bAffzs8bb5LBIh\r\nhmFIG/ht2/L8+XP+7M/+DIB/+k//KR988EGS6pZlmebRVIRtPE7f93znO9/h5uaGf/kv/+VRvpRs\r\ne8Td1gD3cR/3cR9/pyE13gZwSQTpCc50SOGReKxXIBVSS6pK8+p6zfd/+CNedS3ffPdrNLpk2F+z\r\nePSA83KGdopGllROUDnJWgo2r17wk08+YecsGyX473/zfX7jK9+kXCzo9rtfdgt8aUMAM18Ej3Eb\r\ni+1VVMKhfBGUW1/wFqJNH5gxEgHSgwsPbx3OQ1WUacFojEmVVONi1orJXDw3zz4F7OJCMwcPg9Ht\r\n/Nai/W0Vt2LkMskIoESZ4n6/p+97uq5LO3IRTIkLxQj01XVNtZilZFYpxXw+5+rqiidPniQAcLPZ\r\njABCWBDEz45ASARn4k09An9SStbrNUKI9HlnZ2dsNhvevHkTKqMeOm5ubjgcDszmDYfDgSdPnrBY\r\nLPjGN77Bd/6fN+x2W4SAuq4oCp0+Zzab0bVBzgpRxsDo4RfaKphgGxhBkgiCxWTq6uIMpTVFBh4G\r\n78HA2JzN6iSXjZWPISZH4O9INk776jQRlVImULYXJdZ5ural7Xs+/fRTlFKcXyy5vLzEGU9dllwu\r\nz5DC0x9ahouOx48fs+9a3rx5ncCovu9RQjB0HUoIqmZG9ACPC6zo55aq6rpJtusJYGosVrHdbnn2\r\nlQccDnsuLi6I/phxvHjvEfI4UT1N7vKEO0/CEyhkQhVMASglUVIhRYEUHqPEWO23oKnL1JZRGtv3\r\nPYe2H0GxMkm943eLzIkY3sUqzhaPwTqJpUhjoe9Dhc/tdpsKg9iHU7XjCOLmbKF6PK/JJyv2dSge\r\nEQtGFIUaC+cUVFURqjy1NfYQklczdGw3BjN0zOdz5vM5ZVkGWb1UaBWKNxRaUmhJpwNIa10zsoQ0\r\nQzmEwiZ9rMYc+rMwxShlD2zIwGqdPHaOWD82SNAHF9pw17bs2uDrqQqFLgvmSlLWNaWeof0Irtlh\r\nrJYdKovG44ZqrsBYAASpECLYGuB98E/zHj8Wy9C6ZNYUNPV8BFQL9vs9m82GzXpH13VcX79mu12j\r\ntebB6jGz2YzLS8XFRc18XqK0RMsGWTjee/88jendLrzf+Za2WyPkwHaslh7Bw1ClGPxYxIGRcTcV\r\nXgqM62ksGoIMeGR3u/B99jgG0ybv0DAG4jUgUQQmtRtBUiHvZtRZM7YjI6iarieSh97bgPfT+FnB\r\nt/yYdyVm+Vx3uulzeqy7QP/8OFFCjg9egsflwwEppgeM4yaAXl5AMXqT5ucZ79U5Q+XoM98CgN4V\r\np7LsvI0CSDOxWOLiw2e+fFJJlJITiOcJRV9GOmNk1p22bfyMnP13+prwi7z1ncLcHH6uqvroPaf/\r\n6uo2YHzaf6fvy3/u+qkgzunfgCMJYX6Op/fF0+8W7yf9ePy3gQODHZmd/nY7ADgzHP1+12d+GSLe\r\n14C08fWXf/mXeO/5/d//fQB+/dd/nf/0n/4Tr1694tGjRwn0y9mNn3X8+/iHG6frsbvms6CMCJtV\r\nMX8wxvCd73wHIQT/4l/8C25ubvje977Hn/3Zn/H+++9zcXHBd7/7XR4/fszV1RXf/va3+ef//J/z\r\nne98J+UZ3/3ud1mtVnzrW99KG/0w5UL3Y/M+7uM+fpnhhQjyXjxyLManlUAKjxChmBhKYAje57Z3\r\nfPRmxcFpnG5YDx6zeYktHL6Cr37jKZvrNc9ff4jxe5SyrPYrLh8/49e++j4/vXnBjz/6CevtiuvN\r\nK9TQgSt/2c3wpQ0PDKJFCI0sFE4oBuHohOUgHEYIvihvUufgRAR8ogGuEEEKmwNzkVkXmYJOjjdR\r\nAVKro0U0gPMehw90Reew1iF95pnmBVoFYM5ay+AGvAuLdyEF3oGzHoFHSU1Tz/COlMgqfyzdiswx\r\nCMBXPM+qqmiaJgEk2+02gHdNPQJikn4w6H6gqhuePvsKHsHNX/wFShf0g2G13iBkYCUhDPv9nvPl\r\nGd4RvAsHCz6waJydFhSBjRS9lQTz2YKyqBiuBpaLs+Dv9+YNL15+yuvXrzkcDjx79ozLy0vOzpap\r\neEL076vrmqJUOCdoO5vyQS9uJ0+q0Djvg7eesymJj8lhu9+mamMRoIwAWUhAuCMxEiO4cyxruyv5\r\njoUzYiIVj52Po6pqkCLKtg/juQUPn91mxdnZWWCweRuKjYgSlOTx+RmLZaia3HcB6Oq6AB7FBVae\r\nOwohEogVgeOum6S0HpeAY2MM6/WaflhxeXlJ27acnZ0lZl5ZhePEBCQHAOP3v4uNkfePEAEci0Bg\r\nXpglL7pzyhqJP2ut6U2Hsh6lPdoH2aW0QRoolUS3x8mmdeCGHmnDMerFo1CxCY81A94LusHQG0tZ\r\nDqhi9PYsqiP5eKwYLDKmTs7czeeMCP5E+W0E0odhwHeBdbfdbhOgGSXrkQUYjx/fH0Fc5xyqtFjj\r\nU791XU+nO4wJrKLtpsWYgbYNyaXu9mg1VTueNRdpfETQxA+BxTT0hoFN8IZs96FfmlBMaOEcQil0\r\nOQckSmqUBEQOjlis6yAr6MAIBIJESEdVztPc64VEK4VW01h5//2wIbBabbi+vma1WnE4HBiGjqE9\r\n8OqVpKpL9ocdu/2Wi4szzs6CpLeuNUoH0FXKcD7OxTm+xbqe7WqVfBUDWBLGnVSBtXlod6nvQvvr\r\nI5+52G5CuPEzBOBwvqfvLcaMYwHHYPrg4yolWoc+sL44GjtSBp/XWEcilz4mry+RMZczoClP6OL1\r\nFjc7pvO8DcCdMqJOWVOnc9tdf8/jdLPjbeBfzlA7jc8CHPO5JoJLp5tmdyW7uZde/NvbQKUYb/Oh\r\nOm3rU3bZ9BnTI/6eP691ecSelnLanAr3hwk8y4G49Ln67s3G+Ii+nW8L4W9v3OTf523tHyMfX3eB\r\nfzm4ebTJcPKIG6en4yECYnf1P5DYvDm7Pf8OOSP1LsDjyxT5WtQYQ1mGjedYGC1aqeQel/H193Ef\r\nnxVv2/DI11dxTEU1TVT8/PZv/zZ/8id/wh/+4R/yrW99i//4H/8jUkpevHjBP/tn/4ymafiv//W/\r\n8qu/+qs8ePAg2fz8k3/yT/jzP/9zPvjgAx48eMBf/MVf8Lu/+7tHVgo58/ltc+193Md93MffSSjw\r\nOLzzGOsZvMSh8CL45jsd8sqD6fjRx59yQEJR8Pz6Gi8N3ha8+e9/wzA7x/aWjw9b+vocWZR899MW\r\n8emHFEbSl/Bm2NNWF3znJysGp9G6+9zT+4caAmhQDNbjnEWpkM9J11ObHhX9Gr9AaDUyyTxg/Vix\r\nEo8UgbXi8Ag5IksjA0EKFUzIiwIfWSAjEIQPr5ciev7kFQFHgE5IitEYPxqxC0EwgncGj0PpkYlG\r\nYO8JGXaEq7pESNgfduwPO5b17KjiXi4zjgvr3I8vsmCiyW+1mLFcLgMY0Xcc8DRNw4OrS8pC8/JF\r\n8JbbbtYMfYeSwdxeCBEqzJoeqUTwtgIQPnjFjV5WVVXhCd9LCEGhi+ArVpfJjy8WIblZNbRty8uX\r\nL5nP55yfn/Pee+/z0UcfBSCqD4UAhAjVd+u6wTXhc28t8AltUOpRpmcM3hqIYJw1ODPwN89/HMCs\r\nIlTLWy6XLJdLFouz0cvw1Hh7TMbHOpvODbcS3Dw5iSBNTGLCeQc5Z9d1aCUQVUFZKKqqREtJP7R4\r\nYxnajrbd07Z7qrJkVjcMZUlVlczrGV5ALRc4Y6kbweLsDKEUm90O+iDdWG93AWyQk+w3/u51garK\r\njPknkoxjGIIf4Gwu2e32rFZrrq6uePDgARcXoYLywOQ9FRdvdyXUp0DAUaIWDdmFwDqXWGMAQkoO\r\nh8PR+wM4IsK1B0eV6aIfTZ4cX1xcpGRqkmtO4Nxus70laXdIcB5nLC+HQyjIMYLnw2yGaeYMZWAV\r\nNfOJyRiraeZJbVEUyVsysMMimyZ41RWzCqkUQkrU6A9orGW1XrPZblNhnlRQR+uoLcdaSzMyh2NR\r\nm7Lsj8BlKXTGTA5ee1YZrIsFEUYvyGKyBwgslB6cwUmRWL3ee4rDAZzHDuH7y3mdmJFKhbnRhysD\r\nj0KI2L8j+1koYkVogLLRYztNVbqtnfqpaZoEli4WMy4ulqzX67T5sV2P3oeDpWv7EUA1nJ8HObx1\r\nuwnonM2Cj2PXZvK6PvmQOufQhUrS72qsdHsMfEmUOgb04/gK44ps/vUj8OjG7zSMx1MURfBKUuU8\r\ntPk4fqQWIB2BHTn63omskqsXIzMutLJUt5kc+XWXg2On/mDxmrkL9DsFsvP33PW6HJy6S1aZb57k\r\ncRc4lP98F2iYn0e0rJjAs+P5Z5Kd3z6fnwX8O41TcKsoJ3D2LnDpOLkGRPg3PCdQssAYkeatotDj\r\npogBXLJbyI8bPnsE0tRtUCxnO74NnE3fJ4KGJ38/tS85/d45mHDX+IjPRYP//Lh5NWFkcQQCx38j\r\nGBg9jE+PHx+nYzoHEML1Pcmy8/iyAQ3594mbO++99x4Af/AHf8Bv/MZv8F/+y39hsVjw+PHjI1Dz\r\nZ2H+fdFxfh9/P+N4Dpmey9nScSzGuXmz2fBbv/VbfPjhh/zxH/8xi8WCr33ta3z1q1/lP//n/8yj\r\nR49omqBAWC6XSQ0U7tmLsFm4WPDq1SvgmOH+WdfofdzHfdzH3014QqnOUHjMSwFKonSB7wxKaLRf\r\nI4wDqZgpx9ANKC1RQoOwWKXQWkInsO2eQmvKWYHzA8IMSAFKQKk83lmEBu0sUigqBM59udYkX7bo\r\nhMAJidQKqQXS9EjpcT/n0kYjRZIYxSQ2ggHxJqa1BikmdpmUqEInpp+PNzHCotUZg88W4snHJgJ0\r\nIhSFEN7TD21iPIVkMuR8QvgReNLjAhq0lqPRcxkGGZNnUQ5uxMh31SPjLFL6o3xzc3NNpRVNOcoZ\r\nrQFraMqS5sEV7zx6SH/Yc/3qgOlalrMGP58hlQJrMCayGMYKoIPCmB7nqvF7BcljWU5FFiLwZe2Q\r\nqtQ1TcO7T9/hzZs33NzcsNvt2O/3XF48Yr3as9t2GOPoumGULAqcE8xG2eWUVLgJhGUEQ2UAVr3z\r\n4Mb+E4HGW44MrJv1Na+v3wSfvdkiFWB48uRJGBeqHMdFmforJBtTe5+CXEBieMUkKHnFjVJppYLv\r\nklQE3zHv2G6Dr912vcE6i+0HNpsdi1nP48ePqeo5EbTuuxanJIXWKCGYzZc0szO63mGRqVBHN/TR\r\nVoxCacz4/Gw5n8AqPzEjGcfsR89fIGUoLPPq4g2PHq14+PAh5+fnY3EMnYE/U7vEY0TPp1yPL5Bj\r\nJWtJUR3L1U49r+rZPP09th3xOnOOopxk53FcRyZjTDLj75FZF1/jvafdbzFaY0cmn1LhuhdOgXXs\r\n2xate+wwgCX41XmNcAKvPa30I5tSoaQOII304C0Ih5IlTgb6uLWWwTpExo5bXiwp64ZmvmA5ypnj\r\nw5jAQNSjJYEeK5xKIVFCgrQ0elq4KxWKSgRwNUh2FvPyqOBInB8CECgwQ/C/89aMgKwCKRBeI12Q\r\nnEvnGdpxzmg7tJcwhLlHmioxZ8syMFIDWBUACk/wN4TAZgsbLTL9LJVEKlC6xNoBbS3DoLFuBPWc\r\nQWrJrJhRz2pmy5r52YzNZhUKn3TrwOAd28s5ULKk0HVoewxCRECvYLEgk0Vb+u5VAI3twHYXAPqy\r\n1AxD8F+sG3007sI13uNHn8NorRBBfu89Zqz6670ZN0E8zk0epAGEVxijqfx4bKXGat0ghUaNXoBm\r\nlMVLKUKRiyyECOMhnlcOoMS5KIL5p8y+eJ1GEDT3lDv178vntRxYihtLd4GCp8yO/JzjMSFUSE7P\r\n54Dc+PF5wQ/vffpZijCLmBOLjFMJaw5GnYKEn+f3l5/n236P7KzTNo5x2j6nbEip5Xg9qJHJGEF+\r\niTKSuqmO+iC3GAlrDpXk4ELKo77z3mMy6vdd30U6gRDj/dtz1E53gcKn/cxJ/54CC/n74jFz5qwq\r\nVfjc0S+ReO7O43BYM8l+876dPt8SdeJhM+4YLI79ffvxOR3/S4w4Rzx48IB/+2//LX/4h3/If/tv\r\n/41vfvOb/PCHP+Q//If/wO/93u8FZvLh8PkHvI/7yOIuAD/+Hu188nWcUopvf/vbVFXF7/zO79D3\r\nPX/+539OVVX82q/9Gj/96U957733ePbsGefn5zx79owf//jH/Omf/mlaP19cXPD1r3+d3W53a8Mn\r\nKmDu4z7u4z5+WSEY153jWsj2htIb5P6GQha09QLrBlwLQgUMwhiHMx4tNHYYkHhqAgHiYAZ6Ac73\r\nSO8QXmJ9T2k8vQ6Wcra37OiR1mPK+4Ifbw+PdB1OFigMg+kYhp5CQC/gIBSzL3hE7bNdbx9WwQil\r\nEEqBlCzPz5NHmheCfmR4DNZivacQQXpUlEG+dVScwDmKRkeiBsKPkg7rcCYs8DobboRRUqi1xNph\r\nLF5gRpmHScBgkApJlss5zl3x0x8+5+rqiqqq0k10NgtswDdv3hzJfoQQqdJpBD9evvgEvEUrMe7a\r\naYa+xY5yzK999T1mTYWzAz/4wQ94/tOeqtQsl0sO+z2qKhmGqaJkOOcgfQseWlPCY+2QSXMcRaFo\r\n6maSofrABHz06FGSJpdlydXVY5yTfPrpx5hhxZMnNXVVstt21MVYWVSGCpDOhoQhfr+qqgLKjkMI\r\n8M4EVb8QCCX42je+zna75fXr17x69YbrN6/pP/k0JQnvvvMVzs7OePTwCY8ePaKoFgilsQ6ssWhx\r\nu9hFnogDibkVwbEA+o0VnIWlP2wZhoH5fMm8maGlCtJzJ2hbz3JxwfOffMinn1yzWD5A6Z5dG0C4\r\nwUsWZ2dopej7nkfvfoWzyyf8zQ9+wPe+973giziCPpH1F6XhQgiurq7SmLAuSLkjqyqMp2oEwT0f\r\nPX/BR89fcHZ2xrNnz3jy5AnLszJJiWOl3LyoyuFwSIB6ZElF6Xnsn5TUxbHhp2qxQTY+Vlsd+zQl\r\nglJSFjVKFoGdVzYJaI3JZdzN7rqOw+GQAMDI1FIy/Dz0LUMnR4l8gywFAkc5Vu1t9x3d3rBZbanr\r\nTZKHzy+zIiEjWyyctyYTv4IKAAAgAElEQVRUGg4STyn1kU9nHC/Xq1XqE6kU9WxGUVU0oxT1xYsX\r\naXEeZb91XQf5cdOgqBP45b0I7CIkWh2zJSdgymQMnCBF7QfBfh+uoUJX1LOGZragLDXCu7HQzJiw\r\n9wMb6+l2QQbcdwHgDTLbevQzLJM/YtdZ8Dk7LfRv/Hmz36VNAgjsa688SofqxMMQkn/nDBYLCsqm\r\n5EyfMTMzFgvNZr3j+vqa9XrF9fol7fARq+05s9mMdx5/QNcOdO1AXc8oimocK8EL7dmzInlExrHR\r\ntj3D0KXCK1VVMZvNaJoGXejE5gzX0zErKyQ2E/g9DObo7867sVLt2K5WjNdHidYDzpdYpym0S4zF\r\nwMScCixFG4eyLDn0x8yonFEBx75Kp6yPCL5G1m58fmKyyiOJ1tSHE1gfWUd3AXw5e+SUlZU+Kx4z\r\ngmIwAscjkMR488x+jrw3KUJBiVNWb5zPYqXtHDjKPz9vp7fFKZB1CorGgir5d8znrgjOnIKCqU2F\r\nSRt9UopxznDj75quO6TjxvEVrQGMMVhdHG1YxmQ6Pu5KqvPzMK1LmzcTwM3oVemTBPAucBVA2Nue\r\nhHnkG0P55heMG3POgnd4dwxIxOfKuJkg5a0x5L2nmjfpfbeAQe5mxd3FBP1lR75myGWY77zzDv/u\r\n3/27dL7Pnz/n29/+drJ0UeN9/z7u42eJU6A+bvZEBnhQAxxvqDx8+JB/82/+TZrPlVJ88MEHaX6J\r\nr8u9wP/Vv/pX6fqKbMJ33nnn6No7tWG4j/u4j/v4ZYQYLaOcBS89Cmhqwe/81q/iuj1zIbHeIpB4\r\nGeesuIZzFFLhKGCw+GGgLCuMsHTeUuoCaRwdYEooB4+R4I2jViV7euZFiR3u58HPCiE1xmuE9ygM\r\nDk/vPM+uzmj8McHoZwmdJ8ZwTIEXIhiaz2azdFOMN6wE5riJkZTvoOXP5Ul4XIzHm/DZfJaKcMTj\r\nR+Alsg9johUTDSEEs9kMrTXb611KzCPAEgs2LBaLxIiJN+UoO4036/1hzWazSaDNYrEASIv+uq65\r\nuLjg6dOn7Pd7VqsVL168YBgCay+n7cdjtm1L13UpQb3rhh/bI36nwDwLf4uehc65QIktFcvFGbvt\r\nnt1+y2azoywD4DC0N+mzY/tLKROotN/vb+1w5iyW7X4HUnBxdUkzX7DdblndbFiv1xwOB168fM31\r\nzZoXL69ZfPhTzs4uWC7OUkGGq/MJlImsK+f8+HBsd+t0fsnnEZjNg2/h7rChr4JfWqFlAHg9FDKA\r\nKJ0ReF8wWMlu2/PpJ28wTiFQHA6e+nwOUtFbh3Wgi4palVw8fMi7T59x/fJl6vdhLADhRz/Goii4\r\nvr7m3Xff5b333qOZ1axWKz788EOeP38eCr3oEu/GZN/AYHqMuWEYLK9eveHho3kCE2ezGYvFguVy\r\nmdrnVHYY2z6Ot8OhRakoVye1W2zDGKFt1VE/QvDMUsqjdbh+yvJY1rvf78exrxFCBaltMYF/3m/p\r\n++DhGA9rTJ8qB5dluFaULNA6FK8IYFvPMFha247VZi1mADsTo1w8+GgKwjWvC4mVFnyP8VOxnK47\r\nAH5M+uP3CtWMpIT5fJHAjXAdW4bB0LZB+j6vQvtqVTJrNFXZHIEhXdclcCBnqCUwDwMu+CckNtEu\r\nALSq0MybRUgQxARem37A9KFquUPTVhV9d0igZF3XzOfzUEk0m2yPwKnsuXD9qDH5dfiR+RIKa0Qm\r\nqsRj0Wi8t0hZUhSaRSNpmoq6CUU79vuWoTcJ6PW2pq6DnP/8XCEokULivYBUJCBsrJRlkC7n4+dw\r\nCIzjWFF56luBQFFVOs2BQdo/2S/kgNPEqIoVt80IeoF3FYLATg4FqApsGTy/BNETcCxKxcSEwwXw\r\nKQfrTllmObPvLlZWDsTnIPOphP8U/Muv59NrMo9TkCUHGHO/p9O/33Wc/N+cTZafcz7O4jnmjPN4\r\n7p91znmcSmhPQVSBzp4L9cLkuIkYKOdynFfECFyK0VpkihzQ+lnaIj+XnFF+moT/LIb6nQkJvBMg\r\n/cSqju8PYz04DUgpghxGiFR4RnE3Y+e0z+Na6JSBpz+jIMt4oDRH5GykdK//jBXfXYD06TrvyxgR\r\n5I3fNRaiAnj33Xf5vd/7vSPPUYD9fp/utfdxH6eRz5vx92kT0CZ/5bgxbYxJXpMw3SciwSGChnnR\r\nwRhxfRE/oyxLhmE4en1+HhF4vGf/3cd93McvJwJ4JJXHeQHOIL3hm++e0bBA9QPoKtRskBLvR8Wf\r\ncGFdZAyD0JRKhzTOGryCQYLyDuUAI/GVRAw9FBqMB6twhUN6Q9gKv4+3hh9AFDgbpNK+KDm4gkqC\r\ncAOoL7b+0aeL5+h3Fm9ocedeKTWya3wCNcLie0rk48I1N2mH2141eWIlyyIttPPId8zjTn98f2L+\r\nVBVPnjzh+fPnHA4HLi8vR0AlsAUuLi6S/DFW8YrMpMiK2B/WtG3L9fV1YnDN5/PEJjo/P2c+n/Pu\r\nu+9ireX73/8+r169wlrLs2fP8NkiId7wlVLJiDsWiYjtFc8nftZuNxVXUTKyA6bd71gtc7Gc89A+\r\nwH5iWd2sKXTJcnFG748XGkBifYTz2BOKc8ApNByYOIaiKGiaBculYLFYMGuC5He3O/D65Sv2uzUv\r\nPv0Y5xx1NeP8/JKLiwvm8yVPn5wlb5PFYjEWadChOqfwCBmlpxZnDUUxJjJCo5XAW4+WCicCeOAk\r\nqLJAl+H859ZhzIAQFuMN1+trqlkoTLJZ36DmoWCDHQymH9AzxbxueHhxweHRQ25urlFKUkLwsbMW\r\ng01t9fLVa64eXDJfzHjw4AFaa968eZNAjn7oKMVYIMIJbGfZ7/dst1u01tysmlGuViTPxIuLC87O\r\nzqjrOvlJzmazqZiClMix6utdvlv5NZIzd04BCSEEgw2AS7heJFCAyIHGMH6apmIYmkweHPqlKAVd\r\nG3ww+z5UyLXWYIbJJzCOVakarI3y9gGQ2H2oirffb9kf1mH8ZN+1LGZH1ba1Dr6Rof2nne/TZC7O\r\nAQ8fPkyedPv9nq7rknRZCIHrqyPmT1FU6XhhTtkgRJDzFsVwJL0zxiC7Ldb4EVx0oXptf0BE2ely\r\nSGxDpWui52VgIBk6+4aiKNjtqiPgbxgOI/O3SuMjZwDF67UamUvHGygjiINAiB6YqnRL4ZKPoXOO\r\nphQ0tWE+6zhb7Fmvt6zXWzabDX3f8+mLj2mahra9CP15NtDUsxGs1whp0oZDlMjmGzHb7RbnDMb0\r\ndF1xVOxFSsliWae2juP0NAmPc2N8wMTIs3ZIbK+QQEmkCMzDritTu0VJuhjBlvB56kimFZlAOUMq\r\nntcpqDKBIJNsMoA8AQyN5xTCjY8ASofXxWvruFrtaQTrinAM5/xR34fPPy5kEa+BWyBQNjfkwFL+\r\n+vy7nT6fg4H5578N3MxByvz503M4vW/H951ey2/7PvnrTkG6u5iCsW9jsj7YSW4cx1Y+1j4P4FQC\r\nhLd467F2YnTGJL2pFifrF7L+F28F/9LxM1A2B5dzpuFd83/2y9H8f9oeERx8Wwg1+rj6Y7afF0yV\r\npr8kkY/F0++U92NeATpupMX12n3cx9siJyPEiOz2uGEe1kF9Yn3/IiJ6BufnEOdhrTXz+fzo2r6P\r\n+7iP+/iikc8xX5hRLBjlmSDRIQWRmnIYsD5YumH6cY1q0zpJKYUbLFIIPJZhvHc7Z/FuvKcrRTuE\r\ndb7oRz/vIRJcDIUrMD+vcd0/qIgqjnFjvfdoegJ76ItLpnW+Y54n4RH8y5ltwBEA8Vm76qeL/RwY\r\nzGVBvTs2xAYScNA0Tao8nJ9LlG9KKWmaZky2h1TEIyagManNZUDRPD/egM/OzmjblsPhwHq9Zrlc\r\nBnnbKC2LCcV8Pufx48esViu22y1934fqu7Mm7VJHBtgwDGy3W7quo65rzs7OEiAak9QIBMR2TtLH\r\nIzBIoLVIQGKsOrvdBWbe+fn56PkTWAkhOT0uKlEUkydTXHDkDM7ZPHjKOeMDSOg8TV1TPHzI1aVl\r\nXpXsdjtWqxXr1ZbDbs3Q7dltrinLktcvmvQdLy4uuLy8TG0YAbF8lzUACzHBVEfJkbUWZ0FKT1nq\r\nJOUObM0ZRREqj7ZtmzwbxUxweXkZWJDFkHybZvM577zzDh9/8gl913EwNiWN3vsjmdybN2/467/+\r\na168eJH84aqq4uLigtevX6cxHBmOOUCy2ezScdu2Z79vWa02CSCZz+dcXFzw+PFjrq6uUtEFKR0w\r\nTDsocLQojNfXXcybU3ZTfu2EX6YxEFmk8djDYI/8AeeLgrYNY/mw7+h7M1bO7RG9x1lPqBLrMKP/\r\n1HQOEi/8Ectuv2uZz+fM5sEDT8kDVVWk8ZCz32Lilo+PfJ4BWCwWDMOQPDtPZct5Re8IYEUwMF77\r\nEUCK78mlg0o3GOPoe0nfmQSKRkCobfdYO4FZReFHACqAP8PQBUmuHei6A/t9Qdvu6boDs1mQ2UZZ\r\ndF2H8wvA77jrLyqkiNV4PaG7JYGNJzGmREg3zi/hHOLN13uP6dZIoairBiVLtC5TZeauHbi5WWGt\r\nZbtbMwwD+/2exeKMxWJBVdbM5sWtued0vohtFsdMnEOLomC7nTaO8k2O+P7j8XJcWdE5x962/H/s\r\nvUmzJMd1Lvj5EENOd6p7a0CBAMinxtOTWqZFt9qkNm1kWvEHa8OdNtJOklm3tYwUSAwFCqjpDjnF\r\n4FMvjh8Pj6i8heIjABX58pSlZd3MyBg83D38fOf7zgkgJqD3zI7KWWoW3hcAaoQgIISD9HoYDz7y\r\nReVYbjtl2NG+/OgcpJQIYthX/lu+pqEv0HxMqyKen0MCg++3vECFGFhw4OsbnmX3sQT5/4eetVPw\r\nk68zz++XX9d0/E33OQVdpuzGg/PN5HfTeWx6/PyzPHB16MUgX76PXKZbip6CZcJDisiWh4OEgxIe\r\nxeT2TM9birFs2/vAmmp4CBRqAOiG8xheuax2CpwC42rAOXjJc9YhkHRq+XVPjyXD+O837o8PSTae\r\nXvidFSI/qh1qg0N9P28XCmDOfozTO9ofqL0tmAAgBWzz9RfwZoDk+zoHYExyeF+ZuEc72tHef7tv\r\n7fB7WRjWvjwnsg+gtU7+OWNE7CuQagdvBGBJ7dWN5j1jzJH1/E4mJu/5V7/7fdZMN+eHz9RpyBec\r\n7CDmzD4ZyxeoWI0xCIkQ2RHAIJ+VMS+dlgpa6STpFcGlRX4O8LED3/f9CDTgbRiUk1Li6uoKQgi8\r\nePECbdviwYMHKYrHAEAuseJrU0ollt9ms8HNzU0CHheLBYQQSTastcbV1VViIb18+RKvXr3C6vws\r\nARtTqVHf93j27Bmurq6gtcbJyUlyonmBUVXVyNnkduWXlIhAgICUBc7OztA0DbbbLX77n1/jycNV\r\nuq6BOUTIu3NIbJ4p44YHZOFUZDqY+J2DlhJVSdVPay3QdSfYnlOV0c1mE4snrNF1Dq9eEuhJ0k8C\r\nui4uLnB2Ru3y8OpRAmZowiioenS8Tv68LMtY0bhFWdQRsNhAyRLb7Qbz+RxXV1fY71vsdjtU5Qwv\r\nnr/CE/2I2JmrJfq2w26zxbbZA85DxOtw1qJQGmo2A2Yz9H2Pu7s7NE0TGY47/OY3vxk5mtw+ZWyH\r\n3MlgUCAEYhIKKCBoBK/QNhbNfpP6HAGjN7i53uDi4gYnJySZ5lxq1u0SaDWWzhOgW1XlSPYqhEhj\r\nQ2udqmpPAVbaj0ddzjIgxUNLCy0VCkUTdmtCHKseWksY49B3XBSnRN8zcN6jaXoATWRiETOynA9M\r\nuxxY226LNL5msxmccwlUZ8dXa42ykolpkyfC53NmFi/3E87hyADw9uY1jDPou4BmLxIwxeBUXRXQ\r\nSqDQA+DUdR0QHLwTkEpDKcoxprUk8LMTCSj0waLrKcFq0wzAWlnW1F9kMbCmg0PXGzjfw9gW+6ZK\r\n582MQM6dV1UVlFZoGg8UClIUkDJASZLjBjgQy6zInFy6T0EGhMheNQ0Hb4Ci0FgsFLSqsZivYK3F\r\nfL7AbrfDer3Ger3G9fU1VqsVLi4usVqt4PwytRmxdgdmovdUvZAlvXk+yQTCujYDN+v0HMlBHQ6M\r\n8DsD8DyP0/MngvK9h/cWxnr4ENmlrorPCGYXavhgoX2Jso7zp8rY6yEgZMBjQECIgA6NCgp0eB+g\r\nYjQtZ2EdcvamQBbbuzA27gPM8n3w2M8lZe+y7ylgm59rDnxOAby3Be5y4+fGIQAQABVpQd5usb2j\r\nit/F4F7+b5D9CvgQ9w/ScguOQIeY41B4IAcpRYBUgJBRui6G/i8E1dh2EUT3QmBZ3y+FCCFAoBr9\r\nnQd2QgioijE4OF1MK/lmZeF8G15fcd/nY3B7TRmaUyZkzqidygtDCAePPwVp8/k57xu/t2PwnljO\r\npjra0e6zaeABGI8VDmBN5//vA/ybBgByywNlRzva0Y72P2PT9er3vW9ePzApinN/s/H8WhTFwXQs\r\nrCplUg9jO3lahKP9eKZd8Ch0CV1GRhMisCYFpFaUgF5Eh0kAUikIJeFDQG8NaqneeJjlCzEGVA7l\r\nZBJCYLlYJpCNF6l5Hg1+ZykZP6zzROyLxQJd1+HVq1foug7W2tTBmKmVn1cObCpNji9XGH3x4gUA\r\n4NGjRzg5ORlF9pVSOD8/x5MnT9A0DV6/fo2Ztdhut8mBVkphv9+nnIDb7Ta1gzFmlG9wt9tByjG4\r\nhCCowm2smFnVOjEdq4qOz8yn7XaLth0SnecLDF7sl0VN1wwDkhCOAcDd7TaBv4UuAJDz7kyP3jlo\r\nLaDrCvO6wPnpEk2zw2Zzl5iNr16Ro7/fddhtW9xcr/H821fELKoqnJ4+w3w+x9nZGc7OzrBarTJZ\r\naIGTk5MUNaB75+PfHYRQ8EKkyEBRVDBmQ+3bO5JfV9SmwXns93tcX1+TBNhS3rP9fg/b0XUz4Cyl\r\nTHkZy6pA0zTYbLdJ+iEEsS1ZSg5kDBhBAILLgXKpIaSG0mWUajtYF+C8R4DEerPDZrvHV89+i8Vi\r\ngQcPHuDx48c4Pz9HPQ9pfPG5FUWBoiJAsO97+DgGGbxwwUN4B28DlIzOrRxXKs2Blxw4J8AqQMgA\r\n5ySCGsCrotAwxqIvexQlye2LzkcmYIfO9fDewPcWXIynWFQEqHiqJm3jS0empfUGve1oXvEuVcWV\r\nWpHkDgRsa01sOKXkyFFdr+9GYKdSEmVZIATKNaFOT2FilWB+z+XKq9UKwJBbLw8wCCHQOwfvOJjB\r\nwCmBgt579F0OSFJxjqqcJXBxcX4OQCL4jJVs6LqN64G9H1jMZo/eLtHbOWZ2QWxENwMQ4L2J/cwC\r\nIgIGkFAy5rxT7EB4hOBiEaWAWb0aARZSAFU1MH6J/clsvDv0fYfdHghw2O3v0PeXo1QHfF3cbxax\r\n8AozJVOhhXitxu5jUSVCewamqQdAaSG4/YkppYBMKtl1ZQL/eB6gd5IHWGtghABEgLE9VcmWEkVR\r\noSgMlKIgTcCQU41zdIYQoKfUL2D0/OnagVk+lUtwUOpt9l0ASs5ynOazy8EfKmw1RE95Tv59LXd2\r\np87sIebf1KZg1BT8k2Lcnrwdj98pyHQfSHPI4ebfT7fLP9Nicv5KwUeQLYSA8jsKfiipR9dFyawl\r\ngqZ9aDl12u9vr3cF03KJel75822gLB8/X8uEEKDFeL4/BO7myoccWP5DWmz/sQCVR/uvs3ztDxxm\r\nK3+fLL/cpvubjvNDoODRjna0o/0u9n3PW2w5kJfXg2ByFYARAYnTtVHKoTaRPZj15xz5gqPin0f7\r\nUU176xCcJwafVPBSATIkdtB2vQF8GCQqSkEojeADvHVQswqq0EP+GCkGsDBGpkNkWoQACMgYnfek\r\nCc9yfeUMCGYQ5WBGzghiUFFImWimV1dXuLm5wd3dXSpU0vf9SK7JrDtmEe2bdcr5way2ly9fjthY\r\nfCzKnTbD06dPE/Nls9kkxgszYzjSv99TRdD1ep0c6uVymRwbIQTqWgLQaWEOROlRbA9rLWazRXIE\r\nhXA4PT2l3IHW4+bmFovFAkppaF1E+S/itgNDjRJzyjQI2YnZrV1kWXiIEI8BDwSqECwFg7sCqlIo\r\n9AKLeQn74Azee5ydFui6DrvdLoKRLfa7Hs3+BkIIfPPNcyyXywT8LRYLrFYrnJ+fU3EVuYsVKz36\r\nnkC7QtN5GGMwn5WgyshVVlSAbLtbw780mNczNDuq0rtdU66z9XqN169fQ0PgdLnC+elZilhQrrsS\r\n5xcX2PUtBICCZaHMcup7BO/huFAMVeWIVZUBZy2Bey7AWw9nHJx0CJEJo4QiKWIQcNYl5t7mboPN\r\n3QZ3N3fEwLocqqlyHsu6rmF7m6pAs7NY6nJgiLg3cz1y3jQhZaoYqlQRgSED7zwgA5TU0CXdV90A\r\npjTpWM5lYF/XodkbOFeh7yt0nUkAkHMWtu8hd1XqawSwBfgAuEDMm73r4AyVg+/bLrLyZqjrmIOz\r\nzoEXmeTrIViE4IkpKgSsdXBuYMxUVY2qqiHnsyTV3u/3CZxquw6i72PlepnYp0opFGUJqRR0UaBy\r\nKs03xhj0vUl5Ba21qEqVSV4dvHfoTQMfLHqj0AfOiVjHXJYCUgTABzhjYSxJ9vuuQde2aJsGi8UC\r\ni0WDsqghFFDGCsFUJVxGdpQGVT/Nc40N8lEEkh5X1TzNjbmTzyzeEHxi5p2fn6W8iSQB3qDvbGLt\r\nrlarlLOR5dM8TzH4Wtf1GASMhWmapoW1bgSw03lPqqNOHJzZbJYx1wj0CyGmghCUa8/7Hn1PCwxa\r\nWBRw3sKHEjrun8CUYgQ2CYCqmHliAibGlZSQSkIKiT7YNwJSOciSz6Vs+QLruxgbuewz/+0oAKW4\r\nUJIfAbnvwgbJ2WQ5i4zHFAfJpvJdPvd3AS+nC8oRQOqJhUcVraPj7KlSrfcBWuk3nmu0Fjgkb6a+\r\nzXMXBO2ffjM+fgJqRf9G38oB2/uARt7WucPVnOkYIuZRxei73Ky/32kPgQrScHSbn+E8Phnk5W1z\r\nAGJ6PnngNN9+yvDLpfp8HRzsmLL+3zew4T7Qk+1QkDm39+16jvZ+2dv6z9tYM9+HQz0Nahzq1z+U\r\n4360ox3tj994rZavE75P43UpF1ZlwC4vjpQDgYy/5Gm9+Lfsc+VKo6P9uKYLpaCESHVWlBCAlOkz\r\n2/f0GTMUhKBSw0Kg1AT6CSUhdWSMBQ/rHYF7IQyR9ZhQPTGY4v8ZqGOWRR7tz9kQ+SJWiEH6WBQl\r\n7u7uEEJAXZMU7/b2FiEEnJ6eJtkg74vBOf696ilPH+f6YACPgZW2bRNbLwcZmZ34//3ql6Nqwmw8\r\n+Pi42+0WIrLYOMEvI+g0IOrBiZEgQE4CAOU1lEJhs9lEQKLG6ckZmn2L1y+uoZVBX1mUBSKDKsqv\r\nAuUkAziySMwqciQiS2bOrCCqpEpyw5DaSKhBUiagUBQSVTU4+Kdnpylf4u3tLe7u7rDb7VJhEwIF\r\neuz3AztyuVymQiqnZ1S1mMBSytmoVR3llTKxKaVEJoGmyqRlWeJkuYK3DrfXNyRH3jfoug531ze4\r\nfvmKKq4KgYuLCxRlibbrsG8aqELj/PwMt59/DiEEVSlyHk3fwVuLQirU8xK2I/BYlXSfSqWhIADn\r\noSBghYVAgDM9Ou9G+SyVVpAIkEqiUBWcI/bndn2H9e0NAODR4/ME/rEslKWhZVlitVolySg7kM45\r\ndKaDNRZ704zyJwCBpMAMAku671IoeDgCAIWHVApSCiwWy1jF1SRglADzAkoVqMqhkmvXdRFkaxPD\r\nbre5G4FrUikUSkArkvHv9hu43sF0HfYbYonNZgssFgsCY1fFSBZO+fACAAJDtC7TQ4fG5MCKKooC\r\ns4pA23reoax32O3oxfk/hYpgt1TQoKI6UkgUFQCpsNR1oqOznJgebDr2xTLluGB2oXPEaPOe7kNZ\r\nVHCViWzWEqooIIIDvITwAt559KaHN4A3HsEIwErYymN2uoBzgHMCgErj0nsP6fUAZqV0XQohSPhA\r\n85NIVboAIR2k8lAR7A2BgiyzxRwXlw8QQsB2u8Xr16/x6vULbDYb7NdbVJWJeThlenlP+Q2992l+\r\nZAYhgWzUPsaK2Gcsus6kvKcMHs7n8zQnHmIl5Ww7DjANYJZFQIDzDsHbjE1uIaWHlB7WIWMuV0MV\r\nehkZ50EQW1AIBJ6fiT6L4EnqTgDcmPlH7wDl5PTxvvDfNL++S8EPYjn67MVgERcQEaM2yRduuTz0\r\nvsUczwf5wiuXmR4qyPG7RFmngNP0PQQGpPNciPnvJPhZRO0ZJcHI9xkm1znOT8jb5PvlYkmBmnH8\r\nu+w87Hcm7ae2OMTKPHT9U/DsbYvs6Xe5PJVfU3ZnvoDn96liIrcp+JcDgPzKwca3gRz/lUYBneq7\r\nNzza0f7A7X0F3492tKP94dqhNeT3aUJQ+qWuI0zh66+/hvceV1dXqTAjk5y8p3zsnAec07/xdyz1\r\n5UBtroA42o9jejGLBQgQCwwIGcEnqqBaKA0qfBglPPFzGfP39dZCag0FwIWA3lp0WbVgm+eZEQK6\r\nLFFFkE5EoJE7AhfeYP03d4icTcIARWI3wCVQhFkp6/Ua2+0Wz549w5MnT5K8huWz3Bnv7u5Qz6jz\r\nVVWF1YryZO33e7x48QLr9Ro/+9nPRotozuN2dXUFANj3Hb7++mu8evUKjx49IjZhZCCtViv0fY+6\r\nrrHb7fDy5Us8fPgQf/Znf4a6rvHy5UsoLdB2ezh7G509leXQmmO72aFr+5RjTakCgMB8vsRHH32C\r\nZnuHEDz2+xZSaii1QFWV8MHCmB5S5s4sOYnW9akDSE0Lbi2irBpuYJ6EAG9y2Z4AQkDwAi4IeAFY\r\nt8NsrrE6ucSTDy6w2+1wfX2N169fY7PZYBErzLZtg+12TcfKqps+evwQWstUJbeua+z3LawJsd02\r\nKCuaUGbzGj/96cfY7/e4u7tDVRVY39yib9rEVlotlyi0Rts0OFmt8MWXX6IoClxcXODi4gLnZQGD\r\nWNFaCpwsV5Hx1bNBgTYAACAASURBVEMJibqs0AUqKrLrtiR79AGWc1sqBREio8h5BG9jZfMAxyzR\r\nsoRWJbRWMGaoUi0FUBYKhR7YrK9f3qbFYAK0ZrN0Paenp1itVri6usLV1RVWqxWBZCigpQTqMKoi\r\n65yD8RbBEbAcTJtYW4UuIKyAdQa9M4ADChQR15exWIRAUVTQqkZV9gnEZQYtA311XcbPB6aZ7Q1J\r\nrqMkU2uNUlO+Nts7uL6D6Sz61qJrOmitcR5O4/4c6jqknJs6ykeNMQgyQAoHBGIyWeNjzj4kuWwQ\r\nAtVsBqk1yrrGPMr/WcbP457zAZZlSXNRIVKlXwIyqB0ECqAC9vt9Auh5zhnYjw7z+RLOGmz7Hrvt\r\nFloRUDabLRJwLSAQgoDtHXZ9i3ZncHu9pnM6eYXVaoUHDx7g5OQEVTlLgQZrfZLRMkhBfUVAIkTQ\r\nzybWXIBEkJY+l/S7AtQPPAAfPHRV4vTiFNW8gjEGL397l4oX0ZiiQjeXl5QTkPspM4allKhrAuyl\r\nlNhu1+j7PjGhnXVobIeupYd9s+8GKXt8ldl8vm/uRmAXAVNdlms1FiyCQ4jVd30ArBOA8WjbJhU2\r\nomrulH9VK06nMC6mNAVfuE2JlTaAYlOghE6RgZZ4RyTLm+83BmEZLBz2w7lZkQJJPDcOAOaQ9uI+\r\n5mTf9+lzTo3BwBFHZIdreLMIF4ODh3LA3cf4G51LZIsP4DT1TsEpQhL4R5VZBIhRl/IzTmSswVOg\r\nkAHBvIAMm5JDVWeIgm5O9vLZeStd33s9IVD6Aw6Mpe8pWgIIgd6a0bnm+YPpGTZIjKdtJQTJ5vlY\r\nHOQEkCLgvCieWr5d/lnO3guBAj1TUH0E/NkYiQ+emJQYcl469/7kGXsXZ+VtLMCjHe1t9i4M0ikD\r\nJf/7++pv+fyZHyMnPRztaEc72u9ih0C/7/sZyWsY8tH3+Kd/+id8+umn+Pzzz/GXf/mXuLi4wHq9\r\nTkH8X/ziF/j7v//7hId89NFHSVlZFAUePnyIr776CgDw5MmT0VrnaD+86TwHVl7QgB9IefWrPCn5\r\n4FANlTaZ/cbbcsXcXMLEQEJeBYactipJmKbUeBkBwjyZPINHZcyzRiwhKqpxfn6OzWYDANhutwkw\r\n6ft+JIcBkKLN/F1eHbhpGmw2GyilsFwuEwNQSon5fI5Hjx7hen2Htm3x8uXLJJdk1gU7C30/SJO2\r\n2y2++eYbXF5eRrkrOW8+IDFcWPZGDpyH90AIJl77cP5KUc687XaL3a4BgFRNNli+p7yA4Zx1zApg\r\nGZ2KwFRkF0CSFyc455JKx+O5ZLg/QFkHKOWhNTmp1WyB1WmJJ08vYK3Fl5+/wn6/x3q9TozAEAKc\r\nt3Ae+Oyzzwj0qG4g5Ve4vHyIn/70pygXJYxxUJoddkfAaFXAWHKQl8s5ekMy7q5tI5OH2KPMLGsj\r\nCHR9fY3z83MsFpRrrY8y3MVike4P3y8uYJInLuU+nDvmdA+GtmDJIlV/FdHZHxx9bkPvWQbvoVU1\r\nSP1sgHcWpt9htyUG2u0NycpfPH+N8/PnOD8/T6zJoigwP1NpLPB+AkIC/Pb7bQR9BSACQmQxlSUB\r\nOb6VkILAs+TQCg9fIF3vlNXK84T3Hre3a4Qg4Bzt2zuBENrUjkpF0ExoKIXUn4xxsNZjs9nQ/YiA\r\nGkufGfDnIAExzlTKF8Hzi3MZuCoViiJK1GMOuYuLsRS2702UNhNLTS5mCAHQqsR8RuwxlmjnFHZm\r\nPzJAy/OaUkUE6uIxwOOdAg51PY+SSLp2IvooCEFz5936Gr1p0PcdttstZrMZZvUiMj9rWMsgCyCi\r\nBJ/BFQQJKRoE4WL/dbF6qQYzCKVEKsrgvY958kS6r+5CpSJGTdOkXKTOOdzc3ODi4gIARonQGZDi\r\n+0PzSEj3hseK9z6BxlNwhPfRNO2ILVuWVbyPxei+CRHg3MAINIbYjQgFSUydhTMSVnSADwg6Fniy\r\n44qKHMCADxABkJontZDARf6bGWvD/Cfi+MkWWd9BnnLeRpCKK7LnjmhAUZSj7XOZMLdRPr6nDmrO\r\nDuTzzN+nzL/c8khx/pv8HN8mfwYGptr0eZ3nh0nzUhiKv0xzLN4nz82B2nxtkI6jyrTtwNAbmG9S\r\nDrmCB/A2viNAqVgEDJ4CW/HZByHTMzBEViPFQD2cj2AwTeZvXP+UpTdl5PF9EUKkKHreFtP9Te/Z\r\nofdD2wCAmlRLvm+799G+6/wOAa5HO9q72hT0OxQc+L5tOn/nnx/taEc72v+M/dCBC94XV/bl9ctu\r\nR3nQ//3f/x2PHz/GL3/5S/zd3/0dtNbYbrcIIeD58+f4/PPP8c033wAgQsWrV6/wySef4Ouvv8af\r\n/umfvlOKm6N9v6ZzYC9/8eL1UM6g3LGYzWcjqQpH6tkZzBftAEZVPYk5QzmrWFrGx2UwLs+3x/vM\r\n2REkKx0qJNZ1jdVqhaZpsNvtkrRmPp+jKMoIMph4ruWoSq8QIp0D56/j/H+np6cpYWXbEptqsVjg\r\n6uoqSYVvb29hrcVyuUxgqDEmVR3m/f72t78l1tujR9hFZhEBsAQAUdELgb5zqd26DpHZp6LTTXJI\r\nLnZCubwMus5gPmf5bu5McPIkEZ3c6LR5R04OoQvknEkBKUheOHVgpgsXZwOctbDGJwbOcjFHeU6y\r\nv7q4xG63w83NDW5vb7HdblPeMWs9WrTxPja4ubnBbtfg4uIigXK1rCMrh4AzBoIXyzlV+OzEKEcd\r\nV1ZdLpeQUqYiLjc3N/j222/x9OnTVH22a1vMNDmPDCozW4YZaK9fv04OLH/GfUprDalkus/Mypg6\r\nfgyU8N88hli2xqQVBuGNGcba3d1tAtu4cMrl5WUCMi/NA2JiLWpUVYGyrMj5BctkBbyXUdZJ93/o\r\nRwJej+8xO+ez2SKCT30EjYpE+e77oQjGAKpZdF3MA2dDassQ9uBiLaUoIT0QjE+5G/v4fVVVmM0H\r\n+TNL+As9S4wzZoHlgEPeN7ldOZgAILF8OScg95O2belawyBx17qE1iXKcqg+rFSRgD8C3wjQ5GP2\r\nZg8hVAJYXSyIwgAlS/sZCC00S9s8vNfouh286dE3e2zublBXcyyXS6xWJ1QYp1wlKW1RFFBSQwju\r\nHwE26R4DpWAQJDMVku6lDjNAMGjkoLSG1ApS07y3/AkFD9Zrjf1ew/QuMgE3uLnpEWDQtHMY22Ax\r\nX6U8qAToKZTlPP3N44Bf3P9oPjMwxqEo+qzytx49a/jFwC/P+Zxzse97Yuxm/S54DykJcB+klCaB\r\nzkVhUt8pNKcQUPFeAl4MLC62+4CX/Nl33/fTz3m/9y3M+LBjAC9tOQrcEKjlMCCOxEaOJFASu/L8\r\nw7vwb5d5BoTROd63UPyuz/N983pBSpmCYfk13hednrbRfaDV6PwnINj0WIe2H+c/fLOgSP7idcHw\r\njHZpbBOo69OzI89dzH2bg5w5gJkfh5nFOfNyeo7T6xq1yWR/0/YqMzbooXY72tH+V7AjuHa0ox3t\r\naL+/8TqxLEv8+Z//Of7lX/4FP/nJT/Cv//qvuLq6wsXFBdq2xdnZGaSUuL6+xoMHD3B9fY0QAn7+\r\n85/jF7/4RVJlfvvtt/jwww8xn89HipzjnP3Dms4X/iNpjRoYX/k7MET286SP09/nIN7UmBHC3zFg\r\nyHmi6rpODve0ym/uqIUQUnVfAKiqMgE/d3d32Gw2KVfYtKoeO+Qs35uCNLxoZzlcXdfpvAACPrXW\r\nOD8/T9e53+9Tbj8GbABCukMgFiUAbDYb3Nzc4OzsLDGk6NgCLjrQ1nr00sS2YSewg1JFBCoslCwS\r\nC4nlgZSXTaMoVWRUdSPnhZgMg3ObJ33/rtxChwBAk4pOsPRscMKLosCHP3mCvrd4tH+I3W6HzWaD\r\nu7s73N3dRWblHEVRYLPZkAxwv8fz588xnxMIkhdC4X7FYBH/P4SQZId8nxlEODs7i+DGOvUVBpYY\r\nYOb98bWxFCsvcNB1HdbrNYQQKTef9x5KDznaGBBjwIfZarlTmLdvCAFN26frYBbVVJbonEvgR9M0\r\n2G63uL6+xmw2w9fPf4uLiws8ffoEV1dXmC9oLFkTYK1BXc+ITSRDYo4G70HJsiSUHKoz5WOAz3W7\r\nHWSfDKqRTJoALqUJnGnbFs2+Q9sSuM7OcNuadP8IyIkyRkTGKYZ5outILtp3FvMFFQSZ1YDWAyN5\r\n6hQfYh7lbTyfz1Oi2aIosN/vsd/vk6z0LgNyeZv8byHE6H7mzJ0QAopCERgHNRpTxnaj3yoVJa8l\r\ntRsxmR2EFvDCo3cW3X6DXdtgvV9jvlmjrmucnlzEwMg8FoWZJ8mgEAGwPD9rAD4yewFviQHlA897\r\nPp0bAlCoAkoo1HWV5iuujNy1JuXv3Gzu0Pct+r5Fs+RiJQssygWKUkVAr0BdF2k+ZrCS5r42AXM0\r\nPmJRn3gNs3kxGhfTuYYZ3wyoMKjI/aDviSntfYC1EWx3ElKY2P4aUmpobWALm/ICUnGkIWechx8B\r\ngFNAfGrTc+X/T7+bbj/93HsGAzkIIBjPif+nFxdOGSTDnJ9xXI33vgXToXN52/aHzvuQ8TjI88zl\r\n4++QlI1BtHF+x8PVkIsJeJUDZRxcnF7f9Bqn7/n/+ZBT8DIPYB7aF1+3jqB3/uzheZzZtTnwN+0j\r\nPD9MmZDTtgQOP59DtlCefpeDzG/rm++r/b5982hHe5vdF4T4MY/7Yx/7aEc72h+n/ZDzCq8rcuLL\r\nbrfD119/DeccPv74Y/zzP/8z/uqv/irhO0VR4Ne//jU2m01KZVZVFf7xH/8R19fXSVV6d3eH9XqN\r\ns7Oz7+18j/bdphl4y6VafJN5UZovIHOgQikF5/2I9TTkbRoi4Lwvlszxon6QzjHzRo9+zw4jn990\r\nEey9R6E0ilhcgB1FLTVsbwEPvL5+hb7rUMbjiYKrunoIKbHd7hLrkCP1AGKC+xLPnz/H69ev4b3H\r\nxcUFlsvlKEmlCx4nJyd4/PhxynPXNA3quk7Xut/vASAxAne7HdbrNZ4/f46T0yVIXkbMIQJhSEZJ\r\nrEsGPDjfkon55DSUMihUFyWwywRACuFwdn6C1WqFuzub7t0hcCR4lpgxO1BAKZnkZ1OnKQd5Qwgo\r\nsoTlA1sioG17dJ1BoSnn0WIxw3I5x+XlBdqWqiTv93t88fmX1D5LgbKosF6v8eyrr1GVNf7iL/4C\r\nvenekIxxH+A8j3xOnOCegeUQqOjLcrlMv+ECMEVRYLVaoV1voyiXKv4uYoUiYwyctVguFtiGgL7r\r\n4KxF2zRQ8diL+Rwu9COHjUHjPDcTjyNmbebOGVezzV9KjaWUuXPZ9wZ3d2vs95TrDIXE+fk57u42\r\nePToJkqCZ6jqIrKrhvxqJJ3mPF8eCJKYU0JAZsUWAiESFN3Jcm5ppdKr0DYCqTQO2rJAVWjsC4W2\r\nFeh7koCKQPnUnDNoI6jKoLXWJWyPBJLlbMK+76G1xmrlUp4+Hnd5e/owyRk2AbXZqZ7NZom9yKyc\r\ntm3R7rfZvdCxIMkMs9kMWheY1SWcU9BKQElAK4G+F7CW7nnbC2gtEIKk8esFgh8CJ/t9BAFdD2uJ\r\nhdgXLXQX56rTAiLmR0MgmajrqZJ00+3RGZOq8Rq/gvUmzS1SaqiYq5NUigLEKPSxIAiBvNSvdGIA\r\nCq8oh6IC5nUFSjMw0PqttSgriXqmcXNzDe8dttsNuq5F2y5gzAmspcrNWi1ihepyVFGZ7wPnNWPw\r\nOn/OKKVQ1QPonM8huTSU7y/vryzL9Pfd3R0SsBl6BMvPiVg0yhLIp6RGUXQoiopYqFx9tagQhdTI\r\n8/cF/icQi1WRdDf/P4BUXCIH0n6XRddUtpvvZzpnT4EcAFRAi05keBfD31LHVBr8dX4cvF0W/K7n\r\nP2W25deQ3yveLgf+OE3DVNrL58rXnQeBcpk4z/P3Pd/uM97WGPfW3+eqhrwP8jsHFqcBxnwN8zbw\r\nj5UNOfiXn+P02ZCDn3T+5uA2bPe1gfwd+ujRjna0ox3taEf7X9PydR0X6vj5z3+Ovu/xJ3/yJ3DO\r\n4erqCk+fPoW1FqvVCn/zN3+DsizxySefAKAUa957/Nu//RsA4Pz8HN57fPrpp1gul6P10dF+eNP5\r\nonaaV4cXmlMgI3e+jbdwzgJunEuH9ucgtYKI8lFmDnHE3jkHLQfgj481zauWg4p59Js/Z7YOQIvu\r\n+XyO8/NzytvXblP+PgYjAUAqgaLQ2N4NOal4v8z6kVImhhrnPWNggGVr19s1IAROz8/w0//2M3gE\r\nvHjxArtmD10W8MEjCMA4i870lMurrmCcxYtXLwEZUoEHrYhJAx8QlbkwziJ4ckypfSWs6yBtZKeh\r\nSaCG9z4ywwyqmgpHAOzMyIElhfH9BMY5nnKHZ8oiyB31EAKaZp8dgySlUg65H589+22SrC6XS8zn\r\nCywWK5ycnKDvDB5cXOL6+jqBW1988QW++OIL3NzcYL1eY3WyzCSkY+ARGIpkMKuSgT8GGxjE5byP\r\n/Ft2ILeZLJNzzXE/7Ps+RStyOeN+vydJZlXBxVLmDKIzuJYzWaZOXf7/ohiAvlzOyGMxd5553PB5\r\nAEC1WuD19Q022x2+evYMp6enuHr4AI8fP8b5+TlsZJmVZQmlBQAFITPH1rQj4IWPy+3Dn/PfDNTz\r\nPemNhYxVmIWkcaU1yf2ccyiLOjEDKd+eg/OA9IDwAT4UJFsMHh4BLgDWB3SGysBLLWC9gQvDOFdK\r\nodQKUivAEdIhBKfg8qOgQR50qCoqwqK1QlVRCoC7VyHJVRmcYrZwHhRgsIjl/ClVQGvgHaC1QVHo\r\nlPuPwXqlmJnoYV0P5w2MGfLPSVGmeVFJDSAGNoKFD8But0bbKrTtDvv9DsvlFsvlaqgGPbvKWNjU\r\np7x0cI4YiTk4zznsAlzqc0IaVLWGVPUATEiLxbKEVAtUtU6SaWMM9s0aznfY7anK82rxMI1tZuMK\r\noaA1zY8+WCgtRnlhc8Bot9umZ8mUfZmD9RSQKEcBCBofOTOc870RCEqgESIwGwDBv7XwvoeUGsIP\r\n+QsT4CioSIsQgAv2rSBSzlabBsnexXLm9bsCN/eBjIe2v2+b/Ln/+5nM2pyKe/AhGYQdToFyt/IY\r\nobYbF2GZgn/e9298RzlmY1oROwYUgSEwlDMD87WDlDJVQze++U7wb/pZDlA7G8CpAEhyz/M9BfGK\r\nYsjpeih/ohI6G78D2A2Mwb/pvXuXz/hc8uMd7WhHO9rRjna0o/2ulqdy+/DDDxPDj4t+sDrSOYfz\r\n83MAGJFvnj9/jrIs8bd/+7eoqgpPnz5NNSSmgdGj/bA2kv2ypXxmcigGwuy+N26MD/DTqLwc8ptJ\r\nIWMhCw/bG0gMlTN1TOw+5NcagEB2FKcsEl7Up/1XKuXT895DKIlCayxPVuitweL2BJvNBr0xmIUA\r\nqRSkjznJHLH2vPfoOmKYMVDCbCv+nsEgziPIucmUIGZLoTSePvkgVYG9vb1Fs9vHiqcFlFTYb3fo\r\n2y5dp+l6WGNglIKJVWKlCFCCsD/vHbzL2juBCBEc8gJatqNCCOwEN02D29tbzGYDM27q3ACAnxA/\r\nclB1uu3UGQIA2YnodLMDZUB5lDivFkUK1us12qbDfN4k2a2UEh99/BM8fvIoAbTnF2d49Pgh5fnq\r\nW1zVl0kePpUo5w5ezi5lAM5ai/V6nVimzLLI2S6rkxPsdjvsmybmupthvljAeY/eGPgQUM9mgBDU\r\nj/oexlp0fU/iOzWA0XxODGTyOeQsyinoymzXqZyRrzEHEvP7ku6BD+jbDs1uj9sQ8PrVK7x6+RLP\r\nv3mBk5MTPHhwmnIFLlfzBHBqLSGUQNP2CXAJAOWs89THDFWbGDEWWdIahEcQEpWuiRVoKijdQxcF\r\nirJCFdvA9MTqq+dU9dmYIT9ibzv0XZ/AOQmBICxMB9g+VvH1PcqiRl3vEgOwrucQQUIJDZcYfgpK\r\n6TRfcbsRe5aYrdx3i6KE1gTWFgKp0jjLwn0IaLsOvTEw8f4VRUH58pSiKqZSQliLhVyl+YFA2YEF\r\n5L2HFDp9T7nvHJzvYbkLbjv0WqMv69jOGmVRUy43KdD1HYRQMH2PvuvQtx26pk0BCHdaxPlSD0EQ\r\nMQAZZVHDBxvnhjiGxQBGe99ASkBrwDkf2Uses1mF2byEFFUq2LPfb1O/3u/3sLaHswPAx9cshEgV\r\ngSlPYQGtfJZfdZiPun4D70N68b0aqqG+KYuk/9MzJmf+0j4YaIlTpndwjvuEgVU9tCthHS04CsQ5\r\nrSggQkkFQOTAxgucU09M3nlKxmFA7V0XMIfSa+T/57nqEFB36LPpcafMvu97gVUUCt4LeM9BjxxE\r\nA/q+HYFaQgTIVFOKiiKFQEWIuDiSEHx+IX3O2w20xgjqqRhs9D7luYUAhJSQigp0CCEgZIBUgFJD\r\n9WchBGzTHmxLvg9TcJb7ID/DvTMAJIpCHXy+KsXyZJJ4v7GNGrPCpzJpZhPS7xi8R3rm5gGt3L7r\r\nPh8j7Ec72tGOdrSjHe1djVMW5bUMrLV4+vTpKB/+dN3Ja+PLy0s8fvx4lA7lUGqY/DdH+2FMT6Pe\r\nzI5jZhuAxDLKI/QMNCkpIORQiVDGFy86uXIkM8acMXBReicEVYvhRTVLgJRSqVorybrGUr+cETib\r\nz0asLyFIClrNasyXC/z2m/+E2O9h+h7We0itUakSiGDfcrFIhQAAJFkgO6eLxSKBA8YY3N3dJVaT\r\nlBKL2QzXkZ1ycXYGLSVur6+xXa/Rty30fE6AAYDgHKz38FJChAAlBJptAxmAuigBpan9AKgkRh0G\r\nEYEzDsFZOBPZDmr4np0SgAC33W6H2azOPo+L/pwhEBAdYwaYPAAVnSRmguWOz5gFcXFxMWofAraQ\r\nQFyW0bZti7bbwdgeTVsmJlXb7RK7brGY4ZNPPsKHH36A3W6H7XY7yh/Wdd2IkRrCILNl9t0AapBz\r\nyMwhBhtzR9R7j1ldoTM90HckoZMxX2NVoqwrtG2b/l6KFTabDdq2hQsekALzWPU275/55JcD1fm5\r\nJ2cYeb4vqgjKFbSVUlHGPbDaBgZovOeBwGKpIluxafFy3+D1i5eQUuLph49wdnaGR48e4eHDhzg9\r\nXWE+n0OUJYQWcF5ABSBAQEgFoTS8Nwg+wFuDuo79V0UwxHnIoFCUJXRRwPkIuJUOZV2j7CzqyEx0\r\nzuHubgftHLQtoArKsygamdi07b6lce9KwJeArygXHqi/rm86aL0nFl41p2ItywDhBYINqJf6jaBA\r\nXiXWGJck9NwPmGmntYZESDkV27YdcgJGILDo+sQArOs6shELaCEhlEYtdQoMCCEjeOUT8F1VOoHA\r\ngEEIAxgVQoDsPax18B1XMC7gSwdYh2AsqnpJ821v0PYernPwhqTBZVnC+RdJqkyg+pg9pD0V+CH5\r\nauxDWRGIuqiICSwkgnBQQqKouKiShHcaRVlT/+9Wcazvsdvt0DQSXddgtyMwpiyHuYafFfP5PLU7\r\nFVPJq/Z6kuomxpyI1c0JIGQGFY1pzn9HMyH/pijK0XOJ2ply4XnvoVJ1smkRhZh7sqfgiQgOwgfI\r\nQM8IqQqCmDzPrXHeY9gvW5NMAaJ8vOfBq3w+4G2Umsp9QzbHEiA7nj9CmgN8rFhM8wgOFvzwdihY\r\nEXeUngGHgKGcbfYuCy+p6PkPFwAhISZF22xn4J2DDBl4qwhU9Z7YmEICwdM7nzm3QVFk6QgOBAGd\r\nNWneZKm3lFyZnsFEkbYh5u+gNGi6XbrmQ8y/abCFQcPEQK6GdsttCggzQJp/L4SAty4+D0R65ffF\r\nWt7vmzl3KXgRwT9g0r/j77O126HzO9rRjna0ox3taEe7z3i9kqvwyrJE27ajVD95sHpKzuH1X143\r\ngQkuhwDAI/D3w5pmwCZfUOYAHzMw+LucVcMSW0g1SG+sg8dQxGK/3Q2L5UICPsD2Bran4+66NknY\r\nWKrJjjmDgHmkPQf/AKA3LYSOi3Uf5cpaYFbOUM1rPP3Jx5C6xIsXL7DZNRCqQF3PAaXhPKHXjFYz\r\nSy0HILuuS1RWLiqxXC6xWCwgpcT69g6rRawsu2+gpcL/+O9/irqs8NlnnxEzy3RpfynHorHonMeL\r\nfYOrqyucLFfQsR29dQg+QEsNKQaJrnMBCDZSCCwEBqeT7w0xawAfSJpJ7L8ZFgtiCjFzi+9jUdSZ\r\ng/JmXqKcpTaVZAHAze3rdG/KajbsywHGRMlW8FDagYoRtOj6Bm1H21VVhd2+SKwuZi/NFyWq+hRt\r\n41N1Xi7awcfgwgHAAPYxiMwRibu7u1QogyXiqR2Mga5KLMQKQisqpHF3m3Io/uTBBX79618PwHBV\r\nYhYW6J2FBxCkGOWs4uNyX2ZQlFmkJuZvY5CSJlAAAlSgpRgmSucNjO2iVJeADx3kCNjy3mO/W48k\r\nuarUowH+7Muv8O1/foMvP/8Cq9UKFxcXePLkCT74gGTB85NT6vsqSmYhEMgLB6TALjIi6TwA7xls\r\nBZRWEK4i4EEFSO8hVYC2FmU8P6GqJKllZlxZtyjqCl3XQUYH2zuDdu/Qyy4Vx6AxqRCcJXmfEfA2\r\nIDgBZxyassHCzTJZL7VtWdQQJc0JdTVPsl6ONjkb0IMqVEutIbWGLktUsxnq+RyzpkHTNDDG4Pnz\r\n51Bdh6brUDbNSJLKIAsVZFCxGjFJ3wtN44jL3ed9EyBGEPVBiyAUHBwEJKw0sJ1F3xDofLJCAsDL\r\nsoCWGq4z2LRrmqdOdqnIERWiqRMQWJYlmmY/SLiFQAAScxgAZbuLFYIhApSmwjcuBDgDWEtBE1XU\r\nmOkSlfco6xq6rFHN99jf7eB8j90uoO87lCWNY2M7+GBhjBsl+xVCwBoCW71zOD05T2M5FWcyDn1n\r\nR+OKixpx+w3fIY1/eiZpqkCeiu/4BP7yMysHin3YxsBBGdu4pn4UKwMrVaaFz1S+D1ChED72lCGb\r\nM9c5QMH9YJjTxwVx8uPQHOFG4GKEeSLLERAiBjxy4Ip2Rlt7D6kUlBzy5ObBihDGaRTyuT0HxKbv\r\nwz1oRr9h2Zpj5QAAIABJREFUpttwvmNJLuUzJcafcwFVdZi5xsaFmKbzno3U2cVi9sazKwc7vR/v\r\nnwrOUPVpAheHyt25TRmY+bMwPx7nynwTS+Mxz8GdwxLizpq4L7rX0+cry9eHYxA4zEE2GStCBx8o\r\nXcjkOtyIOTi+tiMAeLSjHe1oRzva0d7F8pRgzrmUEovXlnmaqjzVSU7KCWHI9cxYC3AE+35s08Cw\r\nMM2ZS+wgKaWSYzOW7wxVOnMmHkuDmT14cnLyBrgIDHnQFpqqRyqlErOLj8/O09tkMVprCMmSIHI+\r\nqGNSRdLT09NYHfUWu90OXWdQ17nccp+YAMwAMoaS6ldVlZBtrXUqUsHVQrkoQe6k8jVeXFzgo48+\r\nwhdffIGuo6IcLINjMIjB1aZpcH19DedcLDRAlTutNdCaGBLOeYSYxD/ARsYEy+TGbEzv+buQch1W\r\n1VAtlZF3rTUQPAE5ipgT7NCwk0Qmshf9zROA1jI6IyT5YqaOVCyJdRAypFc6T6opgba16HsJY0pY\r\nW6e25vtd1zVWq9XIsQNIDsVSbf6OJ5pcIpuDuhyx6PshzyMDe3kBGmBgjz18+DAVcuH8BqvViirT\r\ndh1MOZZ75fnLeDJkGfCUmUHnmMsap4n/A5yzGRjAbU/SSMBDKR3ZQMTezIEDISjPppQySaBJur7B\r\n9fUrLJdLfPSz/w11XVORkKqCVMT4ogI0Q7VVpRnQYPCArkHJMl2PFx5SeEipUl90js9RQimqUp1L\r\n58oY+SGAjgA5a4dK4GVZx+MUMCUzVAk40LpDH9oR+DcFkae5/7h9GUQY8h9SXsyQ/GcBrQ3Ozy9S\r\nnyVJLzP0iDlUL2bQSqAqh/nPZMxHZk3nY5RfIQT0sRoyM2wRgGAdrPMQUGjkHkppmM6gL3poXWbA\r\nqMB6fY2qq9CaBvtuh1kzw3K5xGq1wjzM0VuDQgBCxyrmwcMhQET5Y6HmSACDAI3TjN276V9DCg2p\r\nmZ4fEmtba41SKHgf29MRAMjXqZRCoRmYJ+mjVpwbU4HwyGEu4nGQy9xJXmzT3DwNAilVxP5Bx1HS\r\nw8mhfTk3HN9zOQHBEhDvHWxvIIiMhlDQ9ZZFxtSVb+by03VxL/uYP89fU1ApijhT+5PK2EMwAC9C\r\n3IZ/x7kL6fyH9hwz9fLFVv7czOcGKSWEfzO4cx/779BzPG+PQ7+ZzWZpPEgpR/MRj43pfnLjeYC3\r\n4Wdsfk7TY+fg3HS7/Drvu458O57HGTDNj/NGCoYD55UXJGHLJew5MzTf3yHL+859UplD20+Pn9//\r\nox3taEc72tGOdrT7jNc7eW6+nHDDOBEH8hkXmQaQc8VeURSjwHC+hjq0lj3a92s6l7GkCogYgIx8\r\n4cg3mW8i5WQyo0h/DoBIKXF1dZWAGl4I57n9oAd2H1NAmW3ovUdVVenYY0YEA24s8SJmGSXeFuha\r\ni+12i+VyjpOTJZbLGn3fousa7PdFYhu2ZlxEgjswO+gEnFWpc7dtm/LpMaDHksC8k15dXWE+n+Pb\r\nb79Nv2F5Xg4AsrST2k6hKKhyZggEXnqvMSRTl6CcSQzOIMl1GVxCZAMS08UBQUIIkhMuFgpKiXQt\r\nzjnoeJ8YUMhBCmstMTsxLgiS32sGZ6YOBt9/igqwjBDpXJmJ07Yky6U2akcSxrIUkILAIGJpEMjT\r\ntm2SGeeRhtwx4v8zQ9N7yuu43W4TuMvAKwOOHMVgllrbtjg/P0/9crPZoK5rnJ2dYbfb4eXLl9hJ\r\nMRo/BGpIaE2MMCl1BET72L8A50KUVesEkvA+puyivMolWw4+5aB7PkYZIOHvuVDJer3G9bXGixev\r\nUFUVtq3D6ekpLi8vcH5+ivmijkAMtyO9km4UMrL/iKmi5HjM8xjKiwQx25Ip42VJAFbf9/CzKs4P\r\nBk3TohUtfOvBgIi1lJPLCQPnO1jXwxiSkWutse3UUKV3XmE+n8O6WRqzZTGPbSshJTGtkuTUexRq\r\nnMCf84dyMEBrnZijzAbk9pRSQgU35ATMAhU8f6xWq4HRllU0Hu5lE9srwFqXtmHpKppbUBEdSVVq\r\nixpVVae52nqL4BxM12EX++d+uUS736dx5IoCwcVAihBQOgPQXCQSw4GQRwGhBKSm/GhFP6f7CO6n\r\nAUVBD/e6NhDLFVUZ39H4pbHtEIKBkoCR+1iExxJ7L1bbHfrLUHAnrzyftwPNcbRPKTGqKrxYrEbj\r\nguY/NWIE5sEd7p9DDlsC0UMIcB6AQVqc5ICZlBpKcsEZne4J9xW+9/k8mANV0wDFFKC6b7HD55E/\r\n+5J8VkqEWMGb2WWMIA5/+3h9bvQ3byPB43pIA5HLhyVXM85fIcR0BSF9P/0d+Hp8gBISsqAggYRI\r\nnwldwE8KqkzbIa9mm6dtSACrGcui898yyDsFX/P/K/FmzuPcfGQYytg2fF2sKk7nPvk5y5et82n7\r\ndB1CprybQY1zwU7Pdwp2Ttspn2enATJgiNTn7TJtw/fJ8uvg53bODMjXovwZkMurfXoOsYOROy75\r\ncbz32O/36dmZA8J87Cm4ne+TnZzxfD7ImA6N6SkYm88Z7+P9YOPzLcsSi8UCzrkRq/2+3xxqD77O\r\noiiwWCwOXn9+L+5rm+n+poD+286L/ZD7tud1Ge/30DZ5X+NrPdrRjna0PxbjGger5QpSSJggUIc9\r\nrJ7B+gAIC6tmgG2hQUF0LQAfHIIq4CEgg4OCh8V4zv6uYOfRfljTwAAm8Ct/0HJ0Po96T23Kqsll\r\nWuzok7NYj1BeIQRUVSa2BDNlpixEPke2/EHMEk7OWxeLp6I3HTabTawwO8ejR08QgsDNzQ02mw0A\r\nYLVaUd6seNxcFsYyX3YyE9MlVtXd7/d49eoVzs7OACCxjXihorXGarXCJ598gi+//BLffvstNpsN\r\nqooAijwHHTPDmCnJ37NTmTMPuO14MZUXhGBnltqS2SF7SBVQVSWKgpgXQgJSjsEyfs+didw5ze99\r\n/n01r9OxczlZzjbJnQ12vPlYrh6qrRqzT8AeyxaVXKDvbay6GuW8xkErC63c6H5NF2l83Pl8DqVU\r\nzFPWJLYf9x9mcCqlsFwuU/639XqdqjtfXFyMaMxlWWI+n6Pvm9hHNZwjJmRRDGw8agL6m84RIGcc\r\nAMaOPPd1IJcxjheUU+d/6ixOF6F5kR4eYzlr8j9+9RnOzs6w2Wyw3V7FnIAEZhelinNDiCA74CwB\r\nmJykX9cDwyjvJxz5YRCOAWZOGJtAta2BVMw4q2Il3gEkM8YgZLmyvI8FR0KAMRKNDWluIUapAGJ1\r\n16IogKAT4E25FAfWEbdFDrzmQCw7CHn/YACQ+zznpWSmM/+eWU68XQ7e5GOsqovsPCSkLDDk3+Rc\r\nhRZS6tE4NyayV+cliARKqQRM16PdN9httqiqCufn5wlQ5zmqKAoIpaGlQvBx3mZGsHCQXsB7BSdt\r\nugbvFSQXaxASKAEpFWpVECNPtlCKcqdaMzBv23abWN1dV0Zm5iyr3EzALI/XHJwg5mwPygE4VMBm\r\nIP9Q0CnfBwUMqLhNWQ7tR20aJZuCciCGQOxlJxyM7anirxDwntqe7nGJsqhHc6Z340rC+RyUz9OH\r\nHFSeL6cAYA4OTNll+SuEABGZt/n+x/+nghT04mPR/wnIHxfxOvScP+SYvw2syL/L2Y/TayVwayzL\r\nlXJyXHgIDIBZesX7a/tYDToHXvP5DmNAadrP/ARAeNu1TO0+UCC3fE6fgphCCBhmNoYQMy0Ikufn\r\nIOM7WH59+TnnwaPpWHmfwKZ8vcFzKAMwvM7J15hTtkB+b/m7HDidPkd5DtFaYzabHfz+EHDFle7z\r\n/+fsTQ5eTz/nc7wP6P5DMA7ctm2b7hUH6vmZb4xJz/l8HcAgPt9nfgZ3XZcCbrndt57J10TTe5/3\r\nF/7+0Pjlccjg7fS4/PyfMl2mlrPU83F+tKMd7Wh/aDZ9No2CksEBEijEDN5qeGsghUYIHso3KGQJ\r\nBwX4ngqWegchPTwAXtIJiDeO9ba11dF+WNO8AAIGxkP+kM6j51PnQwiRmFX5zSqKIslm+aGfM7Ry\r\na60ZLZTyfefspqnTxNuO2RMO1vUQJso8ncHNzR3qusbl5SWstdjtGmy3W1jjoWSBoq6x2Wyw2+3A\r\nefmqivKR7XY7PHjwIB1DSpmut+/7UTESZtkIIVLVUAD49NNPwTKnzWaDzWYDa23K0UWFAkRajO52\r\nuwSY8GKKj5E7k9wWdV0nQIsWzhJKETOw7y209ug6iabZQRdUHbGMMswQArwb8kzxcaYLcT7W1Ini\r\n7dmmjh3/PmeqkcM3MHGqkqrA7vd7NE2b5LnMilzMJZz1sDF3mJI6sfZOT09xfX0NAQklNRAcSeSE\r\ngJKBKimqQeI3m1FOQgZbGRxmllFeaZq3+eqrr/DkyROcn5/DOYfb29t0b6uqQu8GWRe3Xd/3I7kd\r\ng0rMfuVjMXDNjs4hIHDa5nwcvl/sXOftn++LF8Q5KAUMzMzr6zXa1qJpOtzebHB2doKLB+d48OAB\r\nlssltAaKIgB1Ea9FjcYotwVfZ96H8v4zPT9mehWC8k9a42BqYrsSEEzMud22gXODXNYaC2cUjGwh\r\nhAJKaivuN2k7SxL7+RyprTmwMervktvOg4sr0PUMMncGK2cz6qvMAuz7HioCk85aBD/kfeS8pel+\r\nx7xrJs4FiYUWuih/JVYdjKdzCiq2FQPBPbrOxDQLOyhF92MmzinPYZRTwgeYroe3Du2+ge1NAv8Y\r\nAJzP58CSWFsSzIyJ+d9CLDXkFT3sFeUjdDBZX6Qq4d4BkCWqsoRWc8xnJwk47zoq6ELVoy263sDY\r\nBsaWsK7FbFbFhMEySraL0X3h/rJaLQBgxEbO73XTNKPxx/eawUVmjvP8nT9Xuq6D8x1Yzk5V6bl/\r\nxMrgO2LeqRh4cJVBwBxCBmihYR2PBwAIkaEY+5QAPJVbgQsEYon47oOH9e4N5tl00TN9/uXPQSEI\r\nFMvn4vsWVYfAPCEErcx4n6Au76nGcfwh0veJ+ofhXeTPo+x4ARMgSggWOI/26/O/4/cJVBOAKvTo\r\nunxsYxEGycmhtQEbg9f8HbfFMD9avNXieb/t+7cZVyDP2yhkbcyss2F344DcdwFE0+BPvg86vhp9\r\nx/vMg0LviyVAfRKEzYPAudToPsufPzkgNAWwjTEp0HrfuRw6Tr59/v98/uLPD4FabwPW32djMJTZ\r\n7xzQY7PWpgA/f26MGd0/3o8QpPbI+z/vk8HCPJ9zvrbIg/f8Gb9PA6b53JAHzPNj5mzOHDCcBm6m\r\n58LgYQ5KH+1oRzvaH4ONwT96FQCs1Ch1gHUlhC5RyBZ3r3r05QzCA+crTUojEYBAax3nbErRc7T3\r\nwzQ7p3l+vXzhyc4TO038oOOHIztSOViRgw3M8koyXwyOnPc+sWr482kEdwo0TUEwYiANfzPzxBiK\r\nqN/d3SVw7uTkDGdnmwQQbLdbXJwN+eXya+dr4cUCgzSz2WzEIhty6g25xtg5VUrhgw8+QNM0acHC\r\nuQIZAOIiEHwcBhSZlZjLQrgNcocnZ9vReXKFSl70OBjTYbcj4I+uc2Ak5Pcz3z8fd3oP+N7wb3LJ\r\nzDR/0XQxxb/ltvbeQwqd5fnTiVnFYGbfqtTuDLxS25Wxuuk4up/fL2Zv8rnmLNGUl817GAbQhIAu\r\nCkilyKkFsNvvsdluUVYVTs/O4LwfFp8nJ2iFT2DldktsK2IpygRgcv8HMJIfsmPCbKQpYJjfg5x1\r\nmI8H3iYff7msccqESpM5s8g80LQ9fFhj33S426yx3u6w3bU4OVlidUKy9qWbp2qyQg55HU03gNd8\r\nTnz/2QmYgoA5gF3rZVqA9z2xCtqmiwA64N0sY4baKG+38I6O1beRQdy1aLoW+7bDrmkxm+1RFAUe\r\nPDiNgFydWMhSSogIkjs7BtenQCq3HQNsvA8GiLvtetSfOBdk13UoiiIBzgx25pJW5xxEN7AIpSwi\r\ncD+cz91tA2LwugSCIgxzVOcpADCfz0csSykBBYGbV69R1zX6+Rz9jBi1pu1gux5tXWNeR4dVUf5G\r\nmarPAr53KCvKL+kdzSlCCQABUpaQEkAg0K7QAYUGSZPLEn1fk2R1y/O9iePSoOstnG+hWgUl5jBG\r\nwZgiAbRalwMAJyO7V9LCgZknPI9Oc8Ll7Mh8npmC55yqYbe/jf3Up/YlZquL/ZL7tYKxfZzbe1hb\r\nQ+sSPeQIbAwhQIDH73D8fI7l8wghQKpxMGcKUuVzZ/5dek6q4drzdjj0fsgO/S5vp3xM5Od0328O\r\nPSsOzWX8HODgYL6PfL/TIMh0HiwjuJaf8/T4wDhdxaHj3GffBb59l3FwZrq2yZ/Z+Zomf+f109uM\r\n+urwot9xugYOjvL3w7N52h/fB5sGtgBqq6ZpMJ/P37hnnEqBg6m8j3yb+5i3/P/p2vN3YXDdt998\r\n3XPomPnn7zJG3webXkv+nOe/OS/2ixcv8PDhwxQwYzAvH0uHmKdCUOD8l7/8JZRS+Pjjj1NKIG7T\r\nruvw5Zdf4uHDh6jrGs+fP8fr169xcnKCs7Mz/Md//AcuLy/xwQcfoK7rdI4cgOf11meffYYPPvgA\r\nq9VqlLeb5+sXL17gyZMno3Pzce13c3ODjz/+OEm+eRwf2X9HO9rR/tiM1rQCWikiJ1QKfb/Fi5ce\r\n/+9vPsff/99/gv/nN19hHzROqoD/43//b5AICMFCgnwtqALBffexjvbjmWbgiR1wYAyyleUgK5oC\r\nE+xE8cOZHdrc8pwr+Xc5eHgo11m+YM4BqTcdEpIw+ZhLzXsHVgkS0yegaXbJOV8ul/DeE3DX7tA0\r\nZWKRcZ63JlY4nc/n6f8McjJAU9c1lFK4vb0lBltVYbFYkHMdF+xcCnu5XOLjjz9GVVV49uwZbm9v\r\nibUzm43aqO97XF9fj5Kj3yf7ytkuVNykT5JKyh/Ww9gOi8UcNrIrASqcQGAG7a8s3mTsMdjBspap\r\nc5IvAI21b9wXvtf5vePFUX6/tdawxqdFolI6tRlXyW1bAgN3+y22uw3dA0eAx+npKXShEODhg4BI\r\nbC4gQAOC6MrsME6l7d577DLADgD2u11ial1dXhJbq++xvrvDcrnE5YMHqMoyVRHmCqY8fhh0Y0CZ\r\nj8vgAOcqzO/n1LE9JPk+VDAkH0dsDHyy08mSJj4W75Ovvy5rQHhYY2CNQd91MF0P0/VY3y5wdr6g\r\ncXByEvv3AIBxH8ltCk4AeMOZ4z6mlIKWkYliqf/rooDSBXRJ0ildhBGo1vdmJGXzLV2nBVUQN12P\r\nvu3QVAT+CVgUemC+kZy8TqB3VdWjth+cnIEhmbdx7lSWZQkVCMyT6fx6tLsd/GaDEAKurq4S8Ke1\r\nTsCysBYQAnNF1Yj7zkIKZqnk4KkCMFQkJaBxyB/YtS28c7DGjJirLJv3zqGPlXWb/T59zyzA0xM3\r\npGmYldl5kizUOLo3NoEUmnICQkJBQoLTRFAuORnzlrIzWNWXUWbeoOtoTAc4eG8BeHRmm+aCQlfx\r\n+F0ao6uTBYIfS6XLskZRUFBqt6NgDufp5Hcef3kwgOdtBoBDCJjP52m8MPhHfYDGzH7XxmcLgX7G\r\ndOhNh6altpTFHL6qIEKNoMZpH5QsIALlufMBQAiRBwh45xCch5fjCut5H+OAxRSoyYMBwY/nkun/\r\np2Mxf4bk3x367SGA6BCDanqM/O+cYTYNpL3td8Ozzb3xeb5tnmc0BwnyqPWh/adjyDdBl3cF/Hge\r\ne5vl0v88RQeA9JwB8EYbvatx9fXBxOj/UhJ4zwGEdwU9/yssB/UYWPn222/xm9/8Bn/913+NEEJK\r\nCbJer3Fzc4NHjx6hLMs093I+urZt03jnZ2q+Ppka38ccxMlZXrkENA9eTcFwtnycTBOg5+PrbcD1\r\n+2j5eo7Xhrw2v76+xj/8wz+k6vM///nPcXNzg+vra3z88cdpjZTPDfn1s7KCgnYP8PXXX+PTTz/F\r\ndrvFZ599htVqhcePH+Ply5f45JNPIKVMoN+vfvWrtP49Pz+ngFff45tvvkHTNLi8vITWGs+ePcNs\r\nNqNnZ9fh22+/hTEGH374IV69egVrLc7OzvDZZ59hPp/jxYsX6LoOjx49wqtXr7CPz1Cemw6lJTra\r\n0Y52tD90m64DZRAQwqI3LebVHM++ucZnX63xf/5fBfYo4CHR9A20BpwV8NYhaAFnHYAhv/LR3g/T\r\ndT04v7zozGn6uXwhB29yJ3i6qMqdac6px05ZHvXPGYLTRXkOJB5i4/E5OeshpYCAAoJE3/UAPDg/\r\nnFQiSdEI0KshBIFju90O/QzJERZCJNCJP3v9+nUC9ZjNFUJIrB6W8W42G9ze3hIglYFM6/UaUkpc\r\nXl7Ce4+b/5+9N1mSJDnOBj/b3D3WzKytqxoNoLERuFJ4JISkjAzJCy98nzlwXmOOIzIvQPlFeOCJ\r\nDwERgj8Jgg10dVV3ZWZlZoRvts1BTc3NPaN6wdJsAqktIdkV4eHh7mampvrpp6rX17i+vs6slQwi\r\nJBbE8XjEOI5Yr9c4Pz+fGZospQPHYFPJeBEi1SLxgLWuYBcMqKoeWlfASlOtrcTEvccoSePK9fFO\r\nsRaEEEAB8vGrBKzKbol8nQwcsTDYyGyF8t6MFui6mJxzC+dobphKIoLTxSVinOoVytS9OEYJKVd5\r\nTAnsqWc1Zsaux7pu0JgqgYwENu52O5xtd9g0K/zqV7/CZ69eo/qWxrNnz2CkQn9sMbQdtud7tG2L\r\ncSTmGgHmGoCEtcw+QkrHNtCamzs4xIgMypbzm9ca/+VndGoulADrEkTkMViu3RI4JjBQ5BRNbx36\r\nNuAGAUN3xPGOaleOXQ9/cQG/2cA3Hr62cFqj2VT3mL9L0P4U4MDHe5fqL8oAZQyqKAGhoTTpjaom\r\n8K8aBuiugx4G2HFKm619yZYKiN7D2wE2AsE6tHcGxlgE5wAPiCAgo4asJKSSqKpm5pwLMWcW1XV9\r\nz3nneVTXNfbbVW6m0rYtjsdjSmHvYJ3D9c3bDLYxU1Uogs60FBCuhlY1jCYdOQw2sSSI+dY0XK9t\r\n0ovGuAwGd12ACyOCnca5rmsE6+BT6rEPFsFO6dm9ovlLzXNEdtZ22E1zyvP8UgQaILGJpIbSGpoN\r\nA8tgs4f3FszENnWFShD4QCCugVQG/dBiHIfEtvVw45Cv2xiLOtSoUU9z0yOxHomRR0Chyfo1itQR\r\nVioECESRWJXOA84DUmWgVCmFKCSkNlBKQ0kJU4m8TviZEpuK1pmz077IAaSyLu1uLyERIBGgVZXn\r\nPISEUJToKgKg0hiKmACqAMh4H1hb/j0F5JV7oPcT+Md/5+BcBDXE4sYaVOswpqCISNeQk9xjnFJ2\r\nkQJo3N0dYpn1C8GpwMWLjkV+ZggRUS2CGJ5eAHWJn663BDnnQakMNGR74XSqa3muEjQ+lUkgxbws\r\ngRAi16YRQsCH+0Bc/i0hEMN94KcUYzSijAhSzbpQ8+tdTWH4Wt/V8GMS6s49XRu9N8/PJvCPShv4\r\n2fz5pkgZQGOgzDmHt29Jf7Jd9PHHH+Pi4gIxRtze3mb78ng8IsaIzWaTi5QrpfDBBx/kci7lXloC\r\ne/w83rx5g5/97Gf49re/DQD41a9+hR//+Md49eoVxnHEhx9+iJ///Od4+vQpVqsVfvnLX+KHP/wh\r\nLi8v0bYtfvjDH+JnP/sZnj17hv1+j5///OcZvLq8vMSf/dmfZSY4/+7/NCnnLs9TXmdXV1dQSuHv\r\n/u7v8PHHH+Ozzz7DP/3TP8E5hw8//BB/+Zd/ec8+KdcvjwuDtawvPv30Uzx9+hRt2+Lm5gYvXrzI\r\nAZymafDRRx/hgw8+yESFjz/+GCEEnJ2d5XkkhMB//Md/IMaYS+1cXl7is88+w263w7/927/h7OwM\r\nP/nJT3LAnlmGT58+xUcffYSmafCDH/wAL1++BEB+Es/X/wnA7YM8yIM8yFeR0p4MPkDICiJEtDbg\r\nl7/+NZ6/eI7//Z+fQGoF4T1kKscSpUJEhFaaGoN8gZ30IF+/aAYEgKlWGLPaymh6OnjGmmAaPKfB\r\nlYWa2ZnitGFmoywBgdv2mI2JJVDAxfZLVmDpgFNKiM0O5vHY4fb2lkAXqVPNLWJuKKVgqhpGV8lh\r\nCrB2QNuGgjE3sRQY5CvvhTf58u9+v081rgZcXV0BQC6yXxZDNsbgxYsX+VyvXr3Cf/3Xf+H58+fZ\r\nOGWm4TAMuLm5wX6/x6NHjzJ4Wj6nqSOyw263Q13XaNs+gQ8DZOqK6SwQYyqObgO6doTRIwQ0qkpg\r\nvb7PEFk6BwyGsEFdjk+lppTPEtQtWRh8zgmcnFJGpLhfM4fPQ4ZaiwgLCI8IAetSSjAspAoU0U31\r\no4QDnPOIwSHCAcJjGMh5Y3YlN7qQUmK326G9uUNwPqevruoGRmkE5/H26hpnZ2d49uQp3rx5g1cv\r\nP0H0AS9evMAH738L/2UdXn3yKZ48eYIXz3d48+YNbm9vqemElLCjhaw1+m7EOFDn5LM9OS5c/zEK\r\nP1ewBUhasgyWxcNPjVmO0CQmFZ+DjWgeo/n3+vR8BHSqMxeDxfFwg/Z4i/Pzc3jnMA5DZj+en5/j\r\n/Pwc2+0aN67LzMkS0OX76bpuNl/4xcfe3lF9xIAAoTSqRkJXASaBLIbXXlVBGQPdD7keIzGfClDB\r\nAzF4eCuoAYaUeHs1rZemPqb08W3uur0e15kNp3UDoaemNN57vL29TDXpqFYeOyi5bh8coneIUiBK\r\nAWk0dF3BxAAoiWPfYXAWvR1R9d2sKYgQAtIT+F9XCpVxkKKHklNX9LvEICwdJWbOAkDXtgAEAq+r\r\n6GFFpL9jn/U2g95SGQgEODvAuxGDu5yeTwIBt2d77HY7CnhoAak0KqUASeDP6Cb927d30JrGs1pR\r\nZ3AfbKq56oFALMp6vUO1WmNt95nFae0APx6JGdhb9H2HuzuR9op1AifHDFwT24+YvzY42NFBmRq1\r\nMqiaNfbnk+7uug593+PueMw6eBwsjt013t4esN/TPXaHt0WdxlViFiOPb9Mww4MAP54XvC+07R2G\r\nQaEh46hlAAAgAElEQVTrTL5GDiRR5+ETdSaL/y/BZR5j3neEEDPm9amXXERTTzuhYQawTboDEILW\r\nYQb/sEgvXjBaBObgXvkdpJcs9JkDEEOA5+CRoPp/iBHeOYoSh2JPT3Pbe4/AZRE4wCQlhACkkAiR\r\n1n6XgnpLB5z3kVm67Sn9WQIQ6aGUzzcugJpyLDlY+HkypM/5e3pRgy8s9DYAKJxmUJ8SqZbgZAID\r\nBTFMqZkSPVcdJWKcg43fNGGwk5lZr1+/xna7xX/+539is9ng+fPnePLkSa7TzKxwAHjx4gU++eQT\r\nCCHwve99Dx999BG01thut+8EiZeByzLIydfD+3DZCZ4ZnaX9zPYx23tsxyyD1+8Cqr/Jws/mlE1X\r\nguxd1+H169f4x3/8R/z0pz+FtRZ//dd/jX/+53/Gn//5n+dASplmzecOIWCz2eDly5f49NNPsd1u\r\n8/P+7LPPoJTCkydPcH19ndndH330ET799FOcnZ3lEi9lGaP9fo/r62t8+umnePToEd6+fYv33nsP\r\nl5eX2W45Pz/HarXCxx9/jE8++SQ3iOv7HhcXF3kvfPXqFV6+fDlj5pZp4w/svwd5kAf5g5RkUwwR\r\nWFdn+Nf/+BhKtnjv4hyfvPwVztdb+AhUGw2f/IMAicE6qi3+Dd/f/hhFc2oEgBkTjVlubECXUoJi\r\nzGYp02+W7DyWEkRi4UYgHOVm5hgw1XspDXuODLLxzSAlpfwS4w/gulqxSC0IGMeURhkpTffsbAfb\r\n32VHQWuN9Xqda/Y553I0kQ1MTosrgayqqnItKu7oy2ATNw9h8PDi4gLPnj1D3/c4HA5o2xbMJGya\r\nBrvdDt57tG2Ly8vLPDb8PNhQKg2cGOd1V2JkQAlwaSEqJeG9wDB4tO0IKSsAOkdBS0Yfj3E53uWL\r\nHWMhBKrN6iRr9FT9yNLIY/BGq8lRnBiAokh5JmeGWaMhUM03qiFmMQxtAS5NtY+QOukOcpqHE7Mn\r\n5LnDoHV5z+Xz5e/yGB+PR7x58wZ1XePFixeoqjoxSw9QSmOz2aa05SE9B5qPBGRaCMFzzWC93sC6\r\n6fpLBmd5nUvncGmAL4E/HodyzEoWbWmkqlxzLCaffHoGIUS8ffuWGpuMY0qt6mHtgGHocHu7wvps\r\nNatrtQQ4lqniJStQCIH97qJg3U1MR2YKHw6HtHaIraW1ScBRAmGGIX0XcMLDOyBGD+diGvM01tKg\r\nNyP6fsAwjFitNlQDUpKj5uqIukaafwpKCkgRsd/v87WWuo3Xmk8OIOtBbiDDAOXl5WUBFLXZkeTX\r\nfrWHtQHEUjVYrxWqqp79Vsk8XIJE5/uze8xETtsGkHXz2A+zmoWZWZpYdt7bvK562+NwuIUxBpvd\r\nFk3TYLUhMC4AgORxElitmUUbEeLEYmU96d28dpwUFZQyMIbusTs4OEeO8jiorK+pYciIGLhTdI2q\r\nCqhMjaoSMIbqG8KIfO/TfJNwjtKjt9tdMf8tYnQIIaLrengfIAN3iHaIYWLQLpnrrM84IMW6xLsR\r\nzgr0sUspzwZNs8ZQ9QQSmE3Wa3yOJXuvXLslw+1dgMAMQBALJjDmgRuuKRjfwZJj0HgJUEw64H6K\r\nZHmO5d5Qfs5rpPx3uQfEGKGNRIgeMQQIIaF0YjgjwIcIqQQiBEKI1KU+dYcWAYCPcAEQKtWVAUWn\r\nsy6B+sKaeQqnwb1TgFB5b2WQ6vOEdWI5nuX6dSHVZcXEOJw9ny9g/p0at3J8l++dAnG+CbK8JiEE\r\nDocDXrx4gffeew8vX77EZrPB69evMY5jBvSklDg7O8Pt7S0+/vhjPH36NGd5KKXy/nF+fj7bo8qy\r\nJPybT58+xV/91V/ldfj9738fMUY8e/YsX+Nf/MVf5HO8//77EELMasP99Kc/zed977338vP+yU9+\r\ncu+ev6lj8WWFdS7Lo0ePsNvt8C//8i/44IMP8MEHH+CXv/wl/tf/+l/40z/909keyjUAy/WltcZm\r\ns8H3v//9nGoLAB988EGuaUtNyKZ99uLiAus1lc44OzvLAOHZ2Rm891iv1/jWt76VM3I2mw2qqsLZ\r\n2RmMMXj06BGcc9jv91iv17MyPU3T4NGjR+j7Hvv9HtvtFm3b5kYj5Vx6qPf3IA/yIH+wEiOidnBO\r\nohqBi7Nn+D//j6c432n86tOnWEPAGgMtPJW1CQFKG8QgoIQAgsdpS/JB/rtEszMITJt5WW+MZckK\r\n402cwZMSJCwdmOX3ShFCYLRTw4ilsHMAMaWrLFlmVSVyHbUpLUyntNoBgIT37IxPDQi0UVitG/ix\r\nQ0j1ArWW0FpBCIUQCOTY7Xapw+eAEJCZHQR4jLmjMYNibdvi+voaALDdbrHfE9OF2YWPHz+esf+u\r\nrq4yMGiMwWazQQgBbdvi1atX2WDhBiBUP2vIYI4QlMallIBSEVIGSEndSjmVmOqEsaFSQwgPKQO8\r\nH6D0KjODuGEAPWckUHKeGjMBDZRKJJMTzMeUgNWyzk7pJE5snAn04TlTRsvX6w2kVJldqZTLAOEw\r\nDLi8vMJms0lGHaUOh0Apv0oJrNfzWnzZ0Y0CiBNIUd7jjJmRrruua2I69X2OIj9//hxN0+AXv/gF\r\njscDttst6rrCMPQYxyHVlpkAR0694t+sqi3arlxfFt6P8D7CWg8hyo6MMqUOY3atJah3CrxlYI7n\r\n5xKU4/Vw6gVQTbVxpO6tXVfjeKxxOBxwd3eH1WqFJ+Ex2rZF3/fZQGeQiRvaLJ3RMuWHmU9zvaCg\r\nlEGMAlVlYIxGXVdYrZqim2yq7RZ9mt8E9lhr4eyUujkMXboXCTUq9EOLrmtR1we6Pticlrter7Fe\r\nr6cGNFKh0ecZzBttn+Y3A3iU1mqMItagmDogl2n93M36eDzOOhxKKaFh8lrhJhRV0QBIJL1K9zgF\r\nJVzqLrzaVPmzYQjwNiBgAggDPIQXGN2AwWpUtpqNT9UTMzMqBe9G2LFH2x0gNN3LdkO1Hs8uzrHd\r\nbmHqClBA8BJWCpw3mzyezk0OtRYSSkoE5SEigypI4LdCZagQvIqky+pqxFANWZc7Z2HtCDeapB+G\r\n2TjRPKngxqLGXlGOgoJKAcbQehyGAUKkNMwY4ZzFMPTQiHnPKOtY8st7m/YFejlH+yUDgEoRwDyO\r\nFtZPtSmrqknBJGKoGFfnmobUMVsRYG2T/pMTQzBiWh+lUzntpR4c8FHQCMVnAHKaLgD4UAIc99lm\r\n7MCWQMiS2TOty3kgj/f/5b5eHn8qeDH7TUhoZSBFYsOCdLMUCkaTjqZu7gkwF4oaqggBoSS8D5RW\r\n7Ol6fBGYij4kUPF0DcQYI0IBNi3BvlNBlvK58PiU77/rOb3rGWmZgjQh9z0GQAxJIeU702X4N06V\r\nWyj3Y7btltf/ruv575RynJRSePHiBZ4/fw4AGbzjf/N7LC9evJgFhQHgxz/+8T1gjeddyQpdfs7X\r\nUl5TeVx5TDk/yvs4dQ6WU3bwqe9/04TtNA628Dzq+z4Hlf7mb/4m12XUWuNv//Zv0fc9VqtVzgLg\r\n75b1//j8UsrZuAI0F54+fZr/vd/vARBY+Pjx49mxvDfw90pyA4AM5LJwcJ//n899dnYGABlwXH4O\r\nTPOg3Hce5EF+13JqX3mQB/l9S2lTAALS1aiFhRMRjy8EYhQI1uHFeQ2tFEKIUMogBCrRU2kJD48Q\r\nKSgtMLeveC8o7c8H+fpEs7PDUebSUFkCCUujpgSEgInRxwbpMlWRnY2Zkarn3fxY+P/rajVjitF5\r\nTQLokB2xZQS1vDZ2nhk44+ugdCGJGCkFmECzGkoJaC0RgoJzVENwqhN4lxxCDWMUxnFqVuKcy5Fm\r\nTkU6OzubGZxVVeHRo0cYhgFN06DrOrRtizdv3gAgg5bHZBgG3N7eQgjqdssOe1kEfQJaI7SuYEyA\r\nECr/XowOMYqCBTkmx1PBWg9tYjaASjalTI0YuL5VmdINAN4TAGEWTC4WdqjLebEcewb/SibUkiXB\r\nqTacKspsUB7LYeghpczgHP02IGVquOEnoDHGCMR0DyLNYylPPMspmt11HUIIaJomA713d3d5bKuq\r\nwvn5+cxJLusLEWA5pULzXGRwYbtdZ7DIWppnJCExsXy+9xJk51e5tk4pz2WaTbm2SnC+fL/8d7me\r\nmH3Jxn/f93DCYrVaYbfbYbvd5vR1viZmoy2ZL+W65N/lNSMls9h8Hn8+V1XVMKaCMak2ZyVyWvzQ\r\nWwyDxTjaieUZFWJghgU9j35oMyjpQPN/s9lg3NnMFqhTvTwhqWkMRMhAOxXPjwROqgqiYJfGGCkV\r\nMwbE4HFxcYFhGPL5KJW1z9c3JDCQgdDdbof1mlKRpRBYpYL1IQTYFNQYaEDgASCGDP5XlYZSYjbW\r\nk5MWElOWmm04R+m0YpXS04yGhkYUET56SC8BKXBrr+DGHs6P6NoDqqaGSeChqgz6OIEL9AxSAyYh\r\nEaMAvECIU302GksGqgU263MaV2NRVT2MmTr5Uio31cYMzsKHEc4PGG2HZiDnUjerrFdZP0opUiAA\r\n0Nqk31Koa1oL4ziibWkOWDfMghWccszj5dzUPIT0cszHkR5xsKOHlMA4Ets8pA7r3ts0NtS8xlce\r\nITTpPKn+4jA1lFJKpTTekF4RQpxilBBwCAA5nrpc+rJ8O9Xxm0rV5fdiFFkX8xxmYX11SpZA2Skp\r\ngzxLvcr61rpi74ZIacOSGI0igZ9p7woxphqDZSBqYtLyeUtQh5tqlfZFqSttYr6X9740UJfPhc9X\r\n7oflMV/FWSuzCJaBTSnlvZqw5e8DmKXTLG2f/0kG9fI6l4DbqWOWsky7fNfx5XycBQS/wvV91c/f\r\ndewp8PCbKLyuuLs6l0Bg3TjVlZ6aFJX1hoHJDpxqM5/u+PsgD/IgD/IgX15O7R+/rS5lv7rU1aX/\r\nyqITUYx8RD+zXfi7jAW51CCU94+Zb/4gX6vo0gFfOozvqmOxBNVKUKFMoeUUqdIYLQ1jcjrNvfPz\r\n53QtxNohR2heb4euTczOVxrOQohcc5ALtS/BjvV6ndkabJywI8lpI3xsybrhJiDGmNmC4H8fDgeE\r\nEHK3VX5/GAZISQ1A9vs9Li8v8emnn+aGIfz7fK7D4QBjTK47wo7iEgDiZ84p22w4s/NQjhen+lpr\r\nobTLtRiZ+VICpyW4y8+fmgoIGKNmjiM/ozy26n4nQ/5bAj783hIo4uvnmoicTs210Nq2hRCAMR26\r\nrgJhefPnU9fUfTkGIGgC/8qofwmU8HVzynGMMYMQHAE+Pz/P6d1cDPr8/BybzQaXl5c4pO7BWusM\r\nYpRgG99XCFRXDsJnJcvCv7mMkJTslDKF8NT65Pf5WdBamoPG9xl39w3xZboiA4AAsQqdGNG2Nfq+\r\nw/F4yCzVs7OzDALS98t1K+A9sVP5+iaAt5ptMpzCRfPbQEqbj3XOIZjE/BsNBjOg0xK9ihjH1Gk0\r\nruA9N3QICMEiegUfPKTUuLs7QusBfT9SuvbQYbfbYbMhsL1ZTTpF6xW4aL4PdhpDYDYmfDwxk01O\r\nL1+tVmjbFofDIRewh6Px7vs+v2ctAaqsA8pUel7/E6N3RAgCIQhoLxCCms1pTtHPtUt9hA8jpE2A\r\niVVTDauGmm0orSEEIILA6B06RATv0B0OUJXJacBN00A5la+Tr3Vayx6r1VQWYAm+CCGgdAOlIoyJ\r\nqP0GTW0xrsaU9utgXZeZu85ZDOMI6zp0PQUo9Oo8l0xY1llVRkMbg5B77NJnVdNAVxWqpoFr72bg\r\nCzMP21blcSvvj3Q5d1GVkEpBqZE6GEcHTp9XipoOjXaAcCOspfqz3Kk4s+s1zRUT7nfPjoi5Q1qM\r\ncWKGzdbpifVffCxxOm211MXvcsB5P793/q8AKi33bGBquACAmHvFNS3BrnnQbwJCecyo0UuEj4n5\r\nFwONtQAgAB8LHZcuOSLXhpili/N9lUEqBjLKez+1j/G/v6ooo6lplgBiwhGlUmleKVh/GvzLt3QC\r\nSHqXMX0KUPumyKk5+lWu84sA11PnV0qh67rP/d6DkPBcl1Lm0jS8X7G+LzM2GChkfda27YyRWpaf\r\neJAHeZD78gCIPMjXKafmG4N/wOQ/lqXRjDH5fc645ExG3hMYa8hN+uJU5o2zE78o+PYgv3vRbPiW\r\nG3MJ7p1yDEqgjZHcEkiYGFgTyPKuyHsZOT9lSDOLjc9XRvmdc1C6ou6TxsA6B3gPCEHvMZNLKWhj\r\n4EOYOcMxRqy3E7OwBMYYAOQJTiwQYmiVbKyyscLEivO5Xtlnn32Gx48f57okzATbbreQUuLDDz8E\r\ngJzOeHd3h/WaHOuqqlL9uB7X19cIIWC9XmdnN0ZqHMFgA7MZy7Hia2WwZAnwWluy/WS+9wnpJ5Cm\r\nRP9L0GkI7l5UAJhqjZ1iI5TzSpt6Nt9iJEc9+W4IiNBKQkiJ6AFdGWz3O0QBcozS97qug/cexkzd\r\nZ6WU8G5K6+NnUnb25Og/31+Z8s7gUzk/VqsVLi4ucHl5iaurKxhj8P7772O/31OHV2szgMrRjSVL\r\nhn/Pe4+qngDB8nvLdVMCveWaLFOWAcyOKdkf5biVc7V0tkvnsfyN0qBnkITHu/VH1HWNfhxw7Foc\r\n2iOOXYtj12K9XmO/3+f52mgFbVKzHJ4HUYBqIrL+YMc6IISpptC9oEEGjRWUIjBGpJeUgFIDnBMw\r\nmtiaxFgYYa0HpU0iNQep4IJPL4vRjWj7I5o7AvYvHm1ys6LVqoE2BhoG3hv4YDF0PZi1JEE11mpt\r\noLRAVeu8PomRNukvpRQFHIYJmB3HMQcNxnFMdUnPZt9hoI7no3ND1jdTWjCxHAm8IJCMGIsC1jpQ\r\nZ94U8DHIIFc11rDVCqaZQPYgPMYwwtsOkcHxZoVNt8FqtYLtZG6Gsl5LVJWCEJKGMQrEQGmcSk5N\r\nTmZgigsQIgACkEJBK5Pni/ce1t1lvdn3XTYurLWI8IAnYM5ai74fiuYdU3kGABnE4XXBIL/ZrXO9\r\n1q7r0A8thrHLz2e/O8+6fmIWTnowBJuYhgpC1Indx/OVOoDzPiaEgEo1bOk8Gnq9Ted3MMbN9KYQ\r\nAkFONevK55ef4cJgi1+AYSz38yXTeglunXLOfxNQZrm384uDO3zOMp2W9XCpr0q99i6Aq9R3vJ8v\r\nAbx8HUVa8NIA5XnyLpCvtHl+E0et1M98v+V9fNVzluDq8rpOAZZ/SM7ll5mTS/uTbbI/pOfw+5Kl\r\n3uFU3DKrZZmJUNbCK4kEbD+Uuudd6/lBHuSPRR4CEA/ym8rva+6UdiEzvI/HYw60s/0GEMGKbW62\r\nadiO5kyZpT1V1t590P9fr+h3ReZ5M18ykHigSsCJv1sCA6WjdcrpY2n7Ib2/SC8S9O+m3iandiyc\r\nJgnnR4x2hInUSaauKjhrKY0HQGUMqsScq4yB0Rp1VeVuupwuw5N3tVoVbJop1ZWRb34O7AAKQbUG\r\nmdEnhMiAHXebPB6PAJC7ik3sJpOB0+fPn+fndnl5mZoqjNhsNgBo0R0Oh/w+MwZLx4jHrAQiy/dK\r\n4IB/a0rdlAhhqrPGBho7/5wSXIJ2M+aOUO804EqHqvysZFkgkAMWikYG+XtCQEuV6yIhRGip0Kxr\r\nSAh46+C9S+nRdzltkmrtEXAnBXVuq2oDbSYGW8nyXLJC2dnkucEg3s3NDdU/OzvLc/nt27domgZP\r\nnjzBxcUFpJQ4HA7w3ucx53pvMcY8R2IkVmGIyEDFsuHN8noY3OUXM0qBeSONU85xed8lE2uZ9lSy\r\nE/m8y3PyGiGJGMIANzp0xw7H6oju2GHoBqzXa4z9mFmTYRtyl10hBCQkfGCWMaXU8vXw/GQm2XQ/\r\nEVorKJXSnw2lIXGH1mEYUDdjbrLTtR6V9zDjCF0NCfxyE6hgPbz1sEOPvgPao0FdmzROGu2RGHtn\r\nZ2cIZ2fYbDa0pkCdM+u6ztfKz7YEh8q05XKMmF3a3/XYbDbYbrc4HA6Zecap7aXO4GBDua6blZrS\r\nngeJcRRQbppDwzBACerYq7SANjLp01R7CRbOW4RhxDj26KsW9VAn5rOBrCa2IaSAlBoIAdE7jH2H\r\nwy3VsORafPVqlRnRSil4ayGKQImUklhOaTwlgBgTzB8p1ZP1vBARo/WJwVujaepce5HHcHQq6QIP\r\nN7ZZd203e4ggIVVKO0jz37sUnJAKVWPQaJmiklPQgGuq0niJ2VrJa08xeyhtpFpDKZ3XWIxpzQTq\r\nNk9zw8M6Bx80rKM5opGCL3JiF9IeQ8xzr6a0ZCX1bH0KIfL9nArSAUBc1IxbGlgl0HgqULNkF5fH\r\nsL74PCmBslPn53NMtWanNcLvleup1JEhBHjnZ5+X11he+/IvH2+Dzedb7lX8XqkDTz2D8r3l3zK4\r\nuRQORC3tr/I5fJGcYm8v9ffy/v8ngH+f96zfJafGaPl5eX4hpoY0D/LVpawnubT1eP2yvOv/gblu\r\neJAHeRCShzXxIF9Wlvvjbzp3lgHP0l4o/U8mKazXa9zc3CRyxGqWXaa1xvF4xM3NDV68eJEbZnIW\r\nI/vdDAw+zPevV3RZR+xUxPgU2wi4Xxi5NJjZeV+ydvj40oEpsh2RAUAxGbTO94gI0EZSnSQVQEwh\r\nB8ADPkJCoNYVvHGwcoRLBr0xBqMy2SiUWkDUgILMQB+DisZoABIxjgghJocNWK02ySGnbr9VZaC1\r\nATVlGDKQwUAZ3xc3QdBaZ8CRU9OYHtt1Heq6xn6/x6NHj3KTAO4szGARFfOndGFubpEBFIn8AkSq\r\n+cWga0w1Dek9ZgA5F+B9YnZiA0AgRqQOmR5ae2hdZeP4VE0icn7lPeeSr3sJhJxiVgCA7bhrpps5\r\nfkhOaVVViC6lLA5Up0xpg02zAs7O8fbuFn0/pEYKEU2zRtMIENOG6qGF4ABISKlRNxWEBGIb0PcW\r\ndQI3lynOS1YGswsZ5GUA8PXr17i8vIRSKhcjv729Rdd11CAhRUcOh0NmAZYRb++5UzUSa4nYlgwC\r\n0bXw2gESpQq8HEsDnMepBLfKNZefLSZAMRfHjxPLZ+lAlp+XkX8hBNzoEESAEw5WWjjjAE8po25w\r\ncAOlTI/dCNtb2K3N4JCUEqapIXPNPE4znJ67EAxashMtABEgQCw705zN7t1UK1T1iDoxdCGO5GAr\r\nqmEn1AhpS0AxwLmAGB386BHsCD9quGGENhJDV6NfjfBjhB8jxs5lAFNKiXq1SunPLqUfe4Rg83rZ\r\nbHYT2A4PYRSMrhGbNL/8DVYA1psN6qbBzc0NjscjhnHEaC1sotAzaMy/m9eVB2IQEFDQqkLUAlIU\r\nQYA4rTkO5lhts/6TLsDHAB88fPQI1iFGD65rqlAlB5lq7AU4EMHaY+x7uGGENMS2W6/X2O6p9uN6\r\nvYauKoTUMT0UtdcgC3AiJo6vAEKcGjQoldiOsYECoLSDqRrUfoS1U6Dm7raHEB7B25TWHRC9wSAl\r\nlAhoVhUARbo9BASbUkhNBaMVnA2IQUKrGuu1hDErNM2Q1xB1aAa4/qYQIgN/Qgicne1mYDwBSZj0\r\nZZRpTU4BF9KhtJ7jOCaS5Ai4CnAOMkTIKkJqjegjhKT0YglJQG4ERCAdELi4X0ysv8g6OI15sZ5L\r\nQy7r5HC60QX/P4NTpW5nWX6vlPK9U2AT/7+SOr0S+CcjBEJu/CEgiQUukGoCppqRALQycI4ayiCk\r\nuoaB6gIS4KsQxZyNtAxklONW6kcao/vAZ7kvLAGOL/MMltfirEuA+H1w9F2gSHmuUFxzeezyXO8a\r\nhz8mOQVmAw9O9peRd63xU4GD5TGlbXEK1D01fx/kQR7kQR7kv09KvcyvcRyxWq1weXkJay1+9KMf\r\n4ZNPPsHTp08zzvH48WPc3Nzkkk23t7e4urrCfr/Hp59+ivfeew9N0+C99967hyM9yNcn6u///u//\r\ngZ1CTqdisIlRWY7Ml40L+D2ujVcCPMzy4Hzukmm2BCR8nOif3ESC/5IDZiFTR02pAO8trO3h3IgY\r\nPR7vnwMxwlmLoR9wuLvD7c0t7GihEuMjeA9nLTmW6T/vHOw4ApHSzbiLYAzkOJGDQTUFtTaoTA1E\r\nQUBTN8C75KCIqR5RmULKXXrfvHmT63gxmMWADUBU2YuLCzx9+hRKKVxdXeHq6gpCCGy32zwmDAyy\r\nA1rXNdXTihZSpQ6R3AVSxJwCKZKTKQRS5St6AYllo2oCB31I3VJHeD85HT51UaRxraCUpCYIac4s\r\nncsZgIf7DtSSuRLdHGxjYVXQHo8ZRKzrGnVVQQBwKcVRmTrVgiNHvu8GDMMIISQqU0NrleaTTfdB\r\nXUepI5GHwn1mIs9PZgGVtQp4Xiqlcke7u7s7XF9fI0aqIclNL7jDHTOnYox5LvD9bDc7eBfQ9wNC\r\niKirBqtmDSEkgo8YRwvukKqkhhQKiALeUXfVujaz9blkrywd+iXIySDKMtIzS8M+ASROzCKR1o+G\r\nFBoxAHZ0aI89bm/uoFWFcbAYB4dxcHDWw7uI4CO8i4iCwB8hJIQUCCGCOiSntPKhB1JHVqkAmZrx\r\nVJVBXWuMNiJEgRBFqmdH/x8hISSVA1BaA0IwbAoI6qQptUKw1M3VGNZl1KzDOY9xsNDKwLuAsfdo\r\nDx3aQ4extxBRQgmN28OBGrVAQUlDL1WhMg3qeo2IkGsOsp5QSoMBd6kUqrrOjTSU0ZBaQWn6e3c8\r\nJHAuwHmP0Vr4GOgYoxPQQefU2qRmKFX+9zCM0/NN84iPq+sGLowQUuSqeIH/xgAXPG5ubwmIHl0K\r\nFihKcVYKAgpjb6kZh7dwdkA/dOjaI+7ubnB78xYhEJAYg0cApVxDxDyO3pGSEkIjCokQkcaPxoo0\r\nFUU3hNQQUiUwzEBqBe+PENIjgliMQkQoDSgdEWFx8/ZtYoFaADGtRQWjE8s5aihlUFUNKlOhrhp6\r\nhprYd82qTmA1Mc58sKn7+xFte8Th0KLr+qQz6RkjSgog+Yi6XkFrkxlrAIGwvM/Cj/B2hBt72LGF\r\nHTuMfYexbzH2LUQMCM4CwdNuFFPTixAAHxFSgxWK/oj84muxiICUiIJeuZWIoO+YlI58ihnHjFRl\r\nGbsAACAASURBVLgyeMDp5iVbr/xeKUuduvyM9hc/u2YpVX4JIdE0K0ipEgBLDOG8PwtJc1ESGOi9\r\nR+CyE0rBaJ3/jRihpIRh9mmkzsBsv8wA9SJAs0w3XpZfKF9L9t6p+y1ZUlSWImVWxNTxl8s9MKMv\r\nphIYQtCeyMeWxxTXsnz2S3Bl+fr//t//5/8+OUBfUf7hH/5BA/i/ftPvn7q2r+oQvOs7y/sv3wPu\r\nA1LfJDnFLv2mSHk9JXlgeZ3luii/u9Q1D/Igf6xyap98WBMP8lXl1H7xVfa35d5bZi6UZJ6bmxv8\r\n+te/xjAMePnyJfb7PX7xi1/kxqXOOVxfX+Ozzz7DarXKWZQ3NzfY7/cZMCxtzAf5zYRtya8qmllN\r\nQohZDTueAEs65jLax6zBEkRgo5kBFH4PmG/0nM41AQwp/1tOqT7H9i2EiHC+R7ABzo0pXY2M5H/9\r\n13/Fzc0NDocDxnHMRYjPzs4yOMMPp1wYnK7b931iSVBHSGMqADYxsoacukkAGjkcMYbsjPAzKZ9Z\r\nmRK93VLa8uXlZQZ8+JmUtee01tjtdnj27FlO8W3bNqeE1nWd2Wdv377FarXKqXBUi5DArBgDpGQn\r\nEIkxFdM104uZY1IKtG2fOuVWEEIBUcLZqYYeNW1QhWNEqZp5Lsi5QV1ShkumC39e/gXud4Ze1o3h\r\nFFlOuy5r9a3Xa9y1I5Q00KqC1lOqnrUeQlg0zfRbNHe4YQTV/LHtOBuvMtWS6zyWwA1HPwCgaRo8\r\ne/YMzjm8evUKr169gjEGz549gzEG19fXGejlhg9CiOxAt20LrU1KeU1dUlP6qzEVNhsBpXRm8zk3\r\nrS8G+5gRmruFFvfCEfdTTExejwxKl8Jr/FRU/p6DGSSBNQEIYmr4E0Go891tS4XV2xFdO2LoHcbB\r\nY7v1lDIrOC2e2Joh+pSGjhxIMJVKz5HTlT2IJaiw3ZzNUpnLIEOMMdfB49qZ3ISFj7nynyLGFHxw\r\nBH/FOAGoh7uOUsMNAbRt26HvKX247wdEJYkJqA2kMDNdIKWEkPbeeyULIgogIiIkQG+1WQNSQFfU\r\nxXxM3WZjjDh2U5diBpcvNkvmmUzgCK317XY3eza0fnzWeevtKjPTrLUEzAaP4COQlq73HsMwpPUX\r\nYOoKZqTu2rXapjkhEH2AHy0GH2CNzftAXdcYhgFVT8/S1FRD0dQVhE1de42ETABVhAc3iAkuQMjU\r\n9VbEe/O7qQbYkVL8hyGl6AYPZw9wFoihwdC3cHaANU2q5drAKwchFCq9hxARQQRaf5FYuICEEFSb\r\nle6bgi9dz3rVZWafswFdO8C7CGPGvOfQcbRmynRtBv6895BxQAycWiwQvIMNFiEoWCsx9C2MMajr\r\nFVYri7pawRgPlRjtNqa9OMxr4gohACngxx5AerYxwkcCz6irsJzp6yVYVOqCcs/mfZTLISz1Ah+3\r\n1CmnReb1Pukl3jtcuk8FYySMmbPKOUj1eVkIXOu2TN1dMv2WgRIW1vWsW5dBEdblvF8swcNl4GUZ\r\nFFsecwo4XOph/pyvo2Rrl5+XtXT482+ygR1CyBkPv6mUgNKpz4Dp2ZR2aTkPvqnyeUD61/X7wH3Q\r\nrtQFp/TH8vvL9fcgD/IgJJ+nn7/JuvtBvhlS2gplaaCvKqUeZ3COhfdNrTUuLi7wox/9CH3fZ/zl\r\nBz/4AcZxxO3tLWKM6LoO77333oy09P777+P169cYxxHr9XrmHz3I1ye6NJ7nkTgCOtr2MDOml8dn\r\nMC767BCFIpWIGQ9Slik3IddYM+aYC9BLmVJvLTmTSik4K6gbb28xjg7WkgMbA03EV7/+L9zc3OD6\r\n+hp3d3foewKznj9/DqUUnjx5Uly3yH9DVBDSwNoR3FyAamtpADE5kwOMYVBFwBiNEAwAcpCtDRhH\r\n3EvFKxfe+fk5bhN75vr6GqvVKjcT4eMAupeLiwt897vfhRACn3zyCW5vbyGEyJ1uGRC8urpCXVNd\r\nrsdPzgBQ+qi1Ljn+kzPS90MaU5kZR5xKGWPEbdvTRNAaWkdIybXoHIahh5IG3vh8Xq2nepBCiNyV\r\ncOlELcHj0tEpndRgAzVzTq+p1laEjx5VXeUac0NKvdZao1IVIJFBOgZHyam2aFuHrhMw5kme02Wa\r\nK33HQPqpIzIfx9fP4DSz9cqaByFQR+fdboenT58ihIBXr17h9evXqfnBOtdLXNZd7Loup4VP6dsE\r\nKnvPHUMFqspgtWpyJ1hiZXLdMQkhAOcCkX5AoCedS0Nr+svPUso584/Hwphx4VD7fJ251ttC5o4I\r\njzk/uwBKs6R7uLl5m++9aRq0LTGmttst6rrGuX+Mpmmw2axoPBTXABPpGRBYzuAFrz36XYcYxnxN\r\nZZ02mueAUh5CaEi5IsaX0YkJRnNhu10n0JeZrwJy9DmFtBsP8EFiGBm8qWAtzYe7uzusz7Zw3kJI\r\nYC3WNNYqsYSihx8jEDW0kvnemIEmBDCODNQoBKmghIQSErWheV9pk8G3ow8Y/YDRWoz9gDt1Czyy\r\nmYFd1iPVmnRWCWoT41Tken8hBFT1OoOCUko45WYM7aET8CHCO4txDNAqwBgLU6UuzNuJeRohEyMV\r\nCCOloQ5DB2MMjm2qI2gMqqZGvSIgbltfUI1FNNCGAD5GHXkPotRPASGpaUmEglB0jY15jGCAVe1S\r\n1/ZxVrOvHQYQkOcxjA6qN9C6g1bE+NquJaScmNtAgFAg1riRWNdUm9EKSRzhECCjhBQavrYYh5CM\r\nnAFdN+TOwNNYjLlmY1VNzVpy4GecautSUCDC+xHWJiNOVBgGmRqSHFHXK9TVqqjJmMA3lfYSrSFV\r\nTcxMJWAGBw1igMcgABHheOlKRQTwIojHa6lkt5V6ozQmP89g+7KGXAwTi1RAEfM+l/8QCCktVmpF\r\nIG1g1jnpwqpqZvvNEgAs3+fnzPfAY7G81hLoLJ/HEoBhnVM+kzILApg3VFp+713PbwnkLQ345b2e\r\nkmWw5r8bPPoyUjItOSDK47MER/kz4PPTz1nKkiWsEwHMyl7wi+04bva2LAVSBszfBXb9tsK/xYHC\r\n5f0t5wjfG8/Vsv4zXzM/h/I5PjhcJOVzWuq/U4BnGUhYBqzL91jvPDznB1nKlwHA32WDf973y6AG\r\nH7fcpx7kdy/leCwzJlhKXVDaJcvAX6kvyvMuPz/1b/ZTf5v96dT5ORjKTUfPz6kZ3m63w8XFBZqm\r\nwd3dHZ4/f44uNbZ7//33M3np7du3ODs7g3MOjx8/nnUKPlWO40F+v6KX3c6myDUxw3hilrR+GjA2\r\nNHhiSnJG5JIpMLHMONWNUvuSEd/2yeiLOBxuqTtilPm7x8OAtu1xe3uL47GDHV2a0IkxFj2sHRGi\r\nRYgW1vXwYcTVtQKEx3a3ymBYLjgfAQgDKYGw2WQDixfNEsgrHQlmcnFadAh61iyiLGxfNn0AyBF4\r\n+/YtdRG9uMh0WF6wq9UKz58/R4wxpZYRSFSyBNiw4E7CzWpqnc0F49m54PTS8vqXaaF8rSGE1EkT\r\n0FqihoEQBofjLeq6SkAKIAQBNEoRK81hznYsU8FYGHQrQVE2bJWQBMpSFjJEBAKK2krF+4JPGyKC\r\n8/CUAZXBD56/zJx0Ka2rrJXGIFfJhCvTckvDD5hAgVP3ZK3Fxx9/jOfPn+PDDz9EXdd4+fIl/v3f\r\n/x0vXrzAkydPMmDL18L3zWvk8vIyN3xgp6JMq1utVvk77LzyNVpr4cOYQQtg6hSqNaGpfU9ps/yi\r\nrq8BQkxOFP8m/y03pOUmcMoBBubp3Dz/ymOFELP09bZtUVUVDn2P9XqNs/M9ttstVqsadW0gUgou\r\nNU4Q2em3o89NQoSICP4+w+jUZjt1aZVJD1GX3t1+k8EvCjAoSDlCOQfKSKyByLqO1nCPNrGGO/TO\r\nomt79N2AzWaDZlXPgDhtUj3VmIAlEfOz5+vi58POB4NFZfHccRypY3LToG1bAuhDwJs3b/L858ZC\r\nXFf0VCojM6F4vK3rJt2mayhpCnaXhHdHSlu2lkApaWGdhnGG5piX+Xq11pSKrCSiEKmxh8foBvRj\r\nBygCcarUHbiuawyVzeDvarVKoLMAAchIAaFkHEV6xegQ05g4DnYYg5WqYCqHupmYdUoOuYzFOA6I\r\nsU/rncYnODaw5WzcpCFw9thPbCShatQrBV01aNb0/N6+vcq6gBjYLs8ncrjDrAMxNwZhfSNWNB7j\r\n4FKQwRfjAyhDgPo4TmxwvnYlDXb7C9JRRiNWFQwALwRE1JBQkJQrChmBIOmvBj1eJQNE0LO9oWT2\r\nsX7g9bxc56ynfhujraqn4CD7JiEk4xiADR4iBojENg8MiARPqempJmYOJhWAR7mflzqf11u5H54S\r\n/rzcf/m8S5blKZCtdMLKFzCBhL+pLB2Id32+BCZOHfNNkRJU4ZIxZU3b8pjSnigBwnfJxMSd9jUG\r\nxJbzuAyAlax/Xg/A/NmVmS6/K1k6f/w7SqkZcHzqN8vr4X1k+Wz4efD9sR3wxyq8llnPLQPapW3D\r\nc6dk1y4zXlhOAQAP8iBfVpZr/NQeDSA3c2ThPYptem6q8CC/P2H9ycSJZZmzEEL2U5dBx3L/Ktno\r\nwP2siVO4xO9Tx5QBYGMMhmHAo0ePsi/xve99D957aoqYnsGjR49mgLMQImc1GmPw7W9/e7YPc3mt\r\nB/n6RAdv5+8IAQiVa8uIiFxrhurJcdQZVG8Higptp0xTHkzePI/HI7E2YmJv0KkgYiQQJ0gMg0Xf\r\njZkNxewN5xyuLlt0bZ9ZfQQyUgH3EAJePNuhWVVYrZ/i7GyHu7sbdF2HEEZcXr7G8xePqBONXmWQ\r\nJMYAYxSMUVCyziBbuZmzQ1t2/l0uSgY0cgfiwlBkwzTGmIvhc+cbNsqYBcisMq011us1Hj9+jMOB\r\nGJe/+MUvcrMIZvuxUXp5eYn1hs6zWq3QNJRCTY6ohfcOUhLgysDrkvnHqagMMBA4pFHVGlIqHA53\r\nGAZDTIuwwmazQVV0ndSSFmzJDCkNZDZCS+NpFhVJYEiua6cmIIrOSZ9xXT/+HWJpOUizgRAEVFBn\r\nzghrPWK08D7ieOwASBhTp7pdKo0TFeZXhEwjKkU1lGLJIIvQSsFJCZ2AOcXgaaAOxW/v7qCkxIsX\r\nL/D+ixcQAD755BNcvnkDrRQ2mw1WTQMB4Hg8wllqMrJZryGFwF2iS4/jOAMhGShjZuB6TayyZdoq\r\nCz+v0mEt5ykt4fvpOmUH6DJqxecqu1GW55pS31hh8/wqGQUig9GcpjcM1FBnSM1b2jFgterRdQN2\r\nux7b7Rqb7ZqYgb6G1kDUAkoX8xcKnBZqmun8NKfnjtPy+lcrnxhiBAp1d9yow0FLAa0ElCRGbwgS\r\nRimEwAwMBqQDnO3g3YjeBRyPHY7HDk1zg/Vmhd1uh/1+i9VqBYix0B8GlHofQbVCI6rKzIABunSV\r\nAyYM/nKNz/V6jbZt0bYtBQjuDnDOYxgOuLs75OYgrFs2m80C0Bap3l+q3XE7MSeDRA7KUG21iLqm\r\n5kZKeUqjLRzkGCO8vaNxSGw3k9J6VWWgpIINDkoocK224CL6sUebGIG7FZU2aId1BgSbmv7SOZv0\r\nPAq2SqwmdvA4FkCMSIw4D2NSMEd0WUfngE10sK6D8wJ9P86un8FTZmZTPcKSaVXNQBzvp7TueX3W\r\nAX3v8z7IkVAGaHNJCkEpuEoYVEbBWgISx4GYgNEz6M/AlYRSAzXJUAoqMRi1MfB2hLUVdDXV3PWM\r\nbcWY4P8IKaihilKAG11xb3OmyynQaimnwKVy/X2RQboE2MprCCFAJIfc+XnDKZ3283EcASGK8AYB\r\nhIjUSdpxECJ95gPVtOTngxPMvKXwsUv2WNnso9SLpT4tg1L8PMq04dzk7B1C2QpTwIDvkhjWlGWx\r\nfH7L4FYppwI33xRZAnilHVHODba1ymAVf/ZFwnYWgFlwtAx6MdDHduAycFrOgxKw/G2YNaVduXwm\r\n/Lcc0yUQxYxWBk7ZFuW0/CVIXYJcn/f7fyxSgnbvcrpLPViOBT9bnhenWDcl4/hB/niltMH577uA\r\nnlPgfqnTl4ScMoBXnq9kKj/I709KxjiArId5DNgfLvcP4P4cAO77astjeeyZmf51MDtZx5X7Tt/3\r\nM/3HmMhS7/E913WdG6HyfbKf+02zR/7QRQdfpMjIuSEjhIDWZLzSwExRdSE48jApHfoOveecz5+T\r\n8xyL2mVTrbubgdJr2aE9HA4EkqQFdPOWnFyqzRczhZQXUj8csN09wfn5Obz3OB436Do6V9d16Psj\r\nqDMwGcyUijUtkrpu8sbPbBrgPnrPTA4uXDk5f25mFCxZAsMwZAaXtRa3t7e5OywA7Pf72fMWgrrJ\r\nPn36NFNlGRQFkJ1Tay36vsfV1RVWqxX2+z32+312NtjoYzCpZD2UC7iqVALNplppSinqICoErB3A\r\nNdYgQmIo1rn76OgoOq+0BryHCx5RIKe/HQ4HSCGomUMaA+8LoynOHUBWaqwkh2HIiqZsusHMHqMn\r\nJVmm3PF5uGZTmV7L53fOoRbm3tiVKT3sDPA5S/BSa43z83NcXV2h6zp873vfw3e/+13UdY3Xr1/j\r\n5cuX+PDDDwEQI3S9XmdFzWy/Lo0rK8yyMQC/X7IAWXl2XYdxHCHFnHG3jN4vDYXl58yILA2Hco6w\r\nki4N49Lg9e7+hlMaNsvaSgAyswkAblP33MPxiLtDi+1uTeBZN2K1qrHdrXLKJKeWcqq5NhLRc3fY\r\n++wbjlSVjltZI0trjVrt89ofBnq2faczk8uOIjHHACl5/AHnLJzrgKAxOot+HKCPEvWhQtsfMboL\r\n6vZcTYxcYj/zuCgoDWg1RWdLA46vkZrXEIjaNE2u9VdVFdq2xbZZUUrw8Yi2bfNfZuKdnZ1lQJ7X\r\nQcmUWq3qpBvSGI9Ue471dtOs4X3AODgIeHgfgRTIASKO3S2U4Fp2FWpXw/kKxlcQSkHWhpqvJKa4\r\nS0ZKCCN8MLBdm+b0Gm27Rl03MwDw0aMn6Zmkaxakv2XCXZS3xTPj/YmCAMEFPDp7BOdG9P0K/dBi\r\nGDpYO9A8FxHXbw8QQmAcFYahQt+3GfxTSuHi0XtzcCwFuyK1jsFms8lzznuPYezQdQIQAdZGxPRc\r\nuU4oA5Acja91R4zG1ASlkgLUgEQjRoGrqysC7BQbh2nvFcSAPaTSEMpoalxTV3mMoQBhqjzuUhMT\r\nUWoFJahG5eju14cp9c9SZ5Qg07sAg69ixC0ZdDFGqoHoKMXXrCQEIpDq7EpQcxtjDJRS+bnyGPG1\r\nlYY43x8DtGVAanm/y/tYfrYEqEqDu9xn2b6Z1fc8ASZ8kZwC8EowujS8+XxfBxvgdy38nPu+xyZl\r\nYwhB5U9ev36dn5+UMu+Jm80GFxcXeO+9977QueXnwOVBvPeZVVgy/0pwcflvPmYJssYYZ+nBv839\r\nv+sz3kvLubsEkvn3+d9Lx7EErPh5sr3xhwBOLdfmV/1u+cyWdZ5ZlsAr/7+1dpZaDdzPiniQB/k8\r\ngP+LPi8DAEsQEbi/vjnQwfrrYQ7+/qTc35n8wz5duTfwPlUyuEvWNY/RMijD5+dzs79QEj5+n8K6\r\nrswAOR6PqKpqpncZoykzSktbpCyl8aAX/3tFCyUzyw9AYv7xX4GApDQSO4uYe1xziyLqiID3QHT3\r\n2QIM9HEaK4MWzHZ7+fqQ0d+uO+Z0TWuHzNiw1kJLgc12g7OzM6xWdXaohOhR1xq73RqAxGrVwNp9\r\nYtnd4vb2gO0WuTYQTd6ydhvyBOY6f2wIKaVwOBxmhiUvAgZFbm4PGWDg9C82qsqoMad+MWvv5uYm\r\nL3xmGU6AK4FKm80Gb9++xeXlJd68eUNMpa6bGSpv397AOY+qqtE01BmWFAkxfMqNgBwSZg/MjUea\r\nAlPawjiOkB3QNARYMTAacz1HenZQGtEHxFSZq9ImG5zlv5Gml2SDKXV1lWHu/JUAYMlAY1lS160d\r\n8vcp1ZUaQ1DTDIW7OwtrB3LIERLjRiaA2mHMTRXTs0hrgP/aBPpW9TTnQoyAENDJeQgx4ub2Fq9e\r\nv8a3v/1tPHn6FNY5vH79GlfX19jv98SwlBLO+8xmCSHg+fPnuRFF13WZGcRzh2nSPB95M2EnYLQT\r\n86EE/1jxMmC6fK6lsubzls+cj2Hwtfz9Ut7FMCzB7yVgOGOmmArj0CF4i65tcfO2wm63QXtxgc1m\r\ng6Ff52dCgExae4bYxBF+MY+ne6Nrwey3ub4nUtOb7X6XmH8e1TCgqmvUzZgBmqGn+p/K6ASOTw0w\r\nMEb4GIBAYJANEcE7xOAQnEd3PEBpYtdyjcPZs4waSlNXU2bkLplUSukMdvNaMMZgs9nQc3Ckc1ar\r\nVQ6g9H2fGWgctGBQnIMnDJ4Qg5LZuxpKOTgb4JxMQJ+CFBFK1qiqCGfDzPBYrxv6t7NouxGj7VHZ\r\nGpWroesK0ckZ+B4R4QOA6BGDg48S3o0YhwFS3CXm4grbDa2Zvh2S7mxQmTp1z9WpxIREozeAKLtY\r\nOyhEqncnDYQmdnejJFSlYJrEYk5Bm9FNNcZidLA2IHoLN1L3aiENlDIwSqd02wgpNHQKINX1Ks/7\r\nECgFVaduz845dN2AEFwGnUIINEZDCyEEdpuQmhVRd2YhFKSmoEiMAvWqShN5YigxUBtCgB2JSS7H\r\nVL5gNDPmvUhAJnUsNkCae3ABcAHOTY2ClsAeMEWvlwx43usYQPlNjTjnPWSMkDFCxInF4L0HQsDt\r\n23amP1QqCxmcR0zp6AJUo1FKSczsSJ1wfYxw1uZ9N6bPvPe5L3I4AcqdkiUjI1//O2oG8nNiPV6y\r\nAWdAA77AaBcABDVPInsrBTZSh3Ms2Ecsp/bOUud/04T3i91ul22o169f4/r6Gn/yJ3+SHYYyOHt3\r\nd4fXr1/De49vfetbXwp8K0uQlAGtkgk3pewjA7hlQJDf5+PL/fT3IUvHkp9DGZBkBv/yvnhe8Fpd\r\n2gVLttv/ZPltxmAJzpe2zkR4mAOsLLzeeU0vmaHvCpI8yIN8WeG1Wjbk5DXPZQpKkK+sNTuOY97X\r\nH+T3J+X6L5l4rKPLPbrUEUswd1mGogxoLnULf/dUua3fpSznX3k/5b3ycVy2owQ2GfDk+y9Z9g81\r\nKb9+0UJWCfxLxmlqHMC1+pThWmg+G57MEBQQ8H4CkVgRlcw+BtUOhwNubm5wd3eXAcAQAsaugXPk\r\npEaEDPwJIbBuGvjQQ9WUznVxscGTJ3tsdxt4T8w3O2pstqsE4BErIHhACgNEg5cvf43ReIyDR2Ui\r\nNUJIrBGO2HGqXLlwl8ZdycopFx4biWUdN17gHF3mRcIpfF3XgVthP378OKXsToCPlDKn7n3nO98B\r\nN4m4vr5G13WJsUMssK6/y6AgO2Il+60EckpmG1//OHIkWc2UExvgZ+c7CBEQAnVl7PsRgEQMCnUt\r\n0KwV4Dk9VyRXRlAtPyEhQoQqoqXeeYTCAfIxGZ8QUHICoRAAEQUMphqGudYTAjnISsCFkJk4ACBk\r\nhDZUs1B7atRADNEWEAFKp9RALaCjhOsnhyGVFAMkJbQjOY9Kakil6DNHDEZIAZGYhRePH6HrOry5\r\nukQUwAcffIDHT5/ABY+XL19CaoX9+RlWmzV8DOjHAUJJrNcEZFxdXeU0TgDZUWdmSwghMzmZhchG\r\nfttNCpfGlVI3hZjYbfn+YpyNPYMlwNz4L8GdMoWlFFbUWs+ZLdMmRsd0XZdZm8x8o1qi6RqjRbDA\r\nMA4YRMCgNYLrgeAw9i2C22bGGwOAdV1DRHKbuTYbNQNwCIGDE3RPDOxzsCIESiFW2gAwWNW0IdnK\r\nQhkDqSpINUAn8E9IR80G1JRq5izN4QgAo0vrJoGPLmDsAm6sw/GO1qnbBIiggA3VldOVhpEVjDJw\r\nwYGa8UhwUxZ+vkIQC7jrutTwxeaNnueA7TpQYw8JYzSqyqBtTZ5Px+MhH0+AF4GfzpkMmFMKqIJW\r\nElpVCGaaA+1xADXe4KABEGFpn4DFetMQa7LzGIYR1g4Y3QBjK+hOQ+jEml01mU0nhKAabi5CyhXg\r\nWd+MEELC9g5ucOibBocbTmVep0Y6G2I+GkqbtapK2IgGRIomQkEn/dL7jtatphqFsjbwPtUEDBZn\r\nInWIHomRDE8syBACAka8SR2867rBql6jqamRj1T0/GXSuTxmxihQd9o6rbGbtH/YDMhaN8D2NgFc\r\nFZRyqOsVqkrAmFSfUtH62iVmOOuAYQDGvscwUnCMgydKKUivYZ2ElBpCUhkF7QO8dfDWwRiqOWh0\r\nDVkryDixmCfwfJ7iyPveUo/w/S7BwlK+DBPHhwE+8N7BQaUAn2of3ty9JYauJvYsdAUJC6SdptaU\r\nXi4jIALVNAREDkrK9FIUvQSkgghUciS6yaYp72HJxGBGfKk3+fhlxL5kaQGYfc77+0xXCjX7bnkd\r\nvGdPJRUEOO13sjXug5Kn7oPH65ssbBvxs2vbFk+fPs3ZEcA8vZrtqbdv335pcKWc3xycZrC8tPtK\r\nZ+R4PGK1WuW1UO5zZWbF7xLgWYJR5fvLWoVCiJw6BUz7fgkAc3MbDhwymM/yP4kl+vuQDMYXtmlp\r\n95c1oYFpf16Cp2Vwugx2fhld+CAPspTlnCv1DJFf5nuNMSbrAvYfHoDnr0dK3VHaUqxDuD4x7zvM\r\nul7uK7PgYHEOYL7/Afhc++t3KTzPyiAZYyZ8b2VpFN6nyveZCRljzPsR31/53Qf5ekS7wJFkSrOh\r\nZgDEkhJCpNpUyP9mp16kNKShI+zQuYC+p/Szu7s7HA6HXFuLWH3kwDIrhY3oXXOBtm0RgofWEqPl\r\nroYVHj0+h+sHrNdrbLc19vsK+32Fx493qGpN6VydgzEVIAK8B5wNGEeHrvUYh4DN+hGcdbi+OmIc\r\nAy4uzrDSKwTv0Xc9lFzlCcgMlTKtdL/f43A4oOs6ABOwxtHUi4uL/DmncjG7r+97XFxcZOeMozNC\r\nCBwOB/R9j5cvX+L8/JzAzvUaAGbA6be+9a0c4RFC4ObmJgMBdL0advS4vrrB0FuIZwpPHUDQ3gAA\r\nIABJREFUnmxzPj5EQIgu1bOTUNIASiJ4wAcLqickIUSElCqPPS/Ww11P4GS9hnMj2mOL9jjA2Yiz\r\nMw1rb7HdbnNtMe602TQN6lUFO4w5DS2GCG/dLBXLRqp6RA0Ciro6SPWbQOwMHyOiEBBFrSUhBOLA\r\n3WqnRhgxUgdcqhUoEYJLIJpDjD4DrQAANdUeiBGIEJTQJxIjNkj45HAFophA6OSgIgJKwjQ1bPDo\r\nbm/w2dUltmd7PHv2DN/53ofQdYU3b97g+Iv/wHe+8x08fvYUQitcX19jcFT/jwulXl9f43g8YhgG\r\n7HY7bLdb7Ha7zEgFkJlb1FxgzAqW11neJNhpLDpvJ9+XlGwC8wfbzRSClDI3SOENpQT1CeAwqOvU\r\nhVdxFGdykCcWEXVo5TnowyICLiJiZGZgAs2jQ9feYRxaXMr/n7036bHsuq4G12lu87poMiP7ZCeR\r\nkCDbEAQRtmBARk2EAgrwqGpQI/+SGrB+ReGrGn1ffVaNLRg2INnQQIItwYYhqLWLEpliitlFdhHx\r\n3rvN6Wqwzz733JsvkxJFukgxDnDxIl5zm9PvtddeW+Lw8BBVVWGxWCQAkMHAqiqg6ypjBtbxfk0W\r\nwj4kD3LexLHFOoBAb2cIQcJDQxUStahRVANLh8daPZ+PsskGKaDKAnLdxn7nwHIC3hm0xsBvPJzx\r\naLcdNqdtuu/lchmZgB5ehSEsU4gBjAjEBLR2m9qd5x2eW5xzWK1WyZjjepjP58nBwt/dbDZ4+vRp\r\nYoxw6PB8tg+lfASeKPGFEATEKwnIlUrnh7GAsJCK+pcQJZxTqS+kTLZ+cAAppeB6A9N2KaFGSn4h\r\nBNrWRnC4BGUoJiN0u2mx3bRp7uR7ns+XqR8URYEgZ9FRUsXkEYDzAdZ0CCFgsUcSCQQuekiloZSE\r\niFmUq4LWi0626PsADwFrDfrWoOsMqmoGOItgHXxv4TsDV83gdAGtSxQH8xEoJKBRlYMm6tA+JF2x\r\nbdZRkoKkLayboesdztYNpOwo83GUdlBKYW9/HvuvR2EtVGkAJRGkgNAK7dkTKKEAX8A6wDtK9KN1\r\nCaU1tAvopUSnSxRFj6qsUVUAnIDrgcYPzFCep3MQid9jqQseVzx/5wyiHDzhTd4HAU66YEZkiONH\r\nwZoO680am3UDLUt479BZA98XsKqDlsWwOS4G50M+hw1s8LFswdQhVs7q0f/TzfeUac7Xyp2Dw/ox\r\n/j2ApInDDH+uF75eJJ5OmHv8OWDt4HSk88o0pwGAFEOW9lzfjcO9NpvNCJDM6+aTZBTmAAs7ttq2\r\nxXK5TPuxHLhjFgJJvWw+0PjJHbcA0l6N93vMTJ62Pfd/Hhe8t2Ot5lzf6KOuj+n/ufElxBBONgXh\r\np2BAbmjmdZH3048avPw0lqkDE8Boz87zIfe/nNkHUAQRy8zkDNPnAbnn5bz8tiUfm3mkDjCsR9xX\r\nc1ks3j/tWsfOy0dXuH2sJRkjYCyVlDuXWO85n3P5fxMjFYBnATQ+D7ftf3ab5uvvyckJfvnLX6Kq\r\nKty8eROHh4ej+ZEBaHY2aa0TJrS/v5/wjPx5zst/btGUNddBQhFgEFkeaQPkOcxUg/TaSNeINLF6\r\nnDwqkoHJYWe54ckod9dZdG2ANRLeRSFnkHZW123hvMGymGN/f4l6prDdrvHgwR0sVhrzxQGOLh1g\r\nsaxR1RIQPawz6PoGdX0AFqcvigJaaXjXQYgegEKhZ/C+gTEWm3WbFm4GN6bivHmWTR5geVhv0zTo\r\nui6x74xt0gYLGLwx3LFzL0xuZDEzb7vdJuNWCDGAKnHTYIzBfD7H1atXU+jY2dlZJqSpoBTd32bT\r\n4Pj4EZQqsLe3B4A3LS4yogSkpGQppF9mUdc1iOnp43dCZAcBlKmSjGNKsBIA0Aa9bS2ADWbzIR19\r\nnlXXOZeeLQ/pnWra2UBGOVEbQgqDCiLqamlABhEBt3HIqJ9sqHgRzA25PMMu91MAWebNgY3Bk3Hu\r\nYcup28AgQs4ANnvb2RPSdR3u3r0LALh48WJiLTRNg5OTk0SJXi6XlBhgQ0yHvb29dO/MEGrbNi3k\r\nfB0Gfbi+ldIR9POwlo3oIekObwA4QQZtQinoLYQQ2z9gahTnwF9eDzxWGKAuimcZfzR/EHRbljlj\r\nyIGbbFj0itTnOPQV8Ekz9NGjR8RwbZrIkC1T4ouqqrB34SKFpwJwriCwka42bIAUIJWAFhIiJp/g\r\nTZF3lNxICkmODuXB4bc0p1AdK6Xj2GH2ItVlpRSMieCy4/oRMGZgzill0XcOfW/gHDHM2pbCWZcH\r\n+6gqASkKaK3i2WOYfJAJbMmNV34u7z0UohaaRATuNKSkbNx9r6PmKDGElBrCQZwz6HsPb+cJ/Ksq\r\noORkEZoZzltQCL2E0lR33gM+9LE9KxIRyO5Pxrrnnha8h7MWJv7NyXKUUghiH8EFwDuIQkLqsZ6V\r\ndw7O2nRYY2D6Fv2MtCDDDOjh4XRArSgsXCoBVdC4abomjVWaZ2soHevBGFSihlIGSkjMZgIySDhL\r\ngG3TNPDOAQ7wzsJYj2AsfG/gihpad1h7C6WG0GZdyOh4iHNcMAkwBwh8JyYjAaWmi8xJ3yF4B2sU\r\nOniYnsBLY7u0bvA1FotFWnNK0cV2Emgbi6Zt4VyAVi7qQtLnZVGjrh3gJEJQMH2AlD3EbOxx5TVx\r\nyvzLQbx8vE/nDf5urnvzouJFgwAHCAEhFaTUCF2PtjvD6foJ+nXcPMekT6WmkPVakwNHLWfpXMP6\r\nIhPz3BoLB8CKLOO1IG1iH8bM5txAnz7z80oeBZB740fjYQK0/C5lKrWQA4wAnrkm3zt/Nv1tzvz+\r\nJBUGkHO2lFIqOZBzNiQ//1RX8YPOv9lscP/+fRweHqLrOqzXaxwdHcEYgwcPHuDatWuYzWY4OTlB\r\nXdc4Pj6G1hqLxQIPHz7EhQsXkpPt+vXrmM/naa39z9DU4v30w4cP0fc99vf38ejRI1hrcXR0NGIB\r\nnp2dIYSAy5cvJ8mYw8NDPH36FKvVCkdHRwCGzMZ/qGXa/59XcgCF/+f90/HxMZ4+fYq9vb2UBHC9\r\nXienJDu+b926BSkp+Rs7S37beeS8fLYLr0G73p/OK7dv38Z2u01jPoSAw8ND3L17F+v1GtevX8fp\r\n6Sn6vsdLL710rvf3n1iEEPjlL3+Jpmnw+c9/HtZa/OY3v8H169exWCzw3nvvoa5rLJfLNN9QboIW\r\n169fx+PHj8HkIO89Dg4OwJGAnDAUAC5dupRANLYH/zPYf3ycnJxgPp/jpZdews9//nP8yZ/8CW7f\r\nvp0ITJyj4eWXX8atW7cwn8+xv7+fkn28++67ePnll9P8KqXE66+//rHe/3kZF/U//k//w1s+9Ajo\r\nAeHgvYNzPmYdtDB9gLVA3wW0jcPZaYvHD9c4fnCC4/unuHf/Lh4+eoD79+/iwYN7ePjoAZ6ePMbZ\r\n+gTbZo2m2WCzOcO2WcPYDj5YAD4ZqF1zBuZ5lWWBS5cv4urVywgh4MGDY8xmFS5fuoKr165iudiD\r\nFAoCCgIFpCR9JSkllCQjXQhJWf0sZ/mjZ+r7Lh0ELBDTQOsyGVe5l469vAzescd3syFdwrIsE2BD\r\n2XMJv3KOjXEVgQ1ioEmpEnhAWW01yrLCkyePRyGWDKDxJkQpYtbM5/OEqDMAyR5o3lzkHnJOEDBl\r\nNOSFjNLIhMlCJ52zMaGBhZSI4ZQ2AQhSAtaSRqPWAgQmqgSSAALGWHRdj9mM2Fh56PGIAREo+6QU\r\nMRd0CAg+pMy7RLZT0EpBK00gTfwOQoB3Y6NgasTlXnEG1tgoIoCsesY4y4059uKyEZvE9DFsnLn/\r\nAMDZ2RmePHmCEEjr7eDgIHnomfXK7ay1RrPZJiZUTo9mABBgsKCGlDIZH1przGYzAowEadkRgDbW\r\nnHKOkt3wc1Hh0DGgKMeM1LweeOM6YjaJAZxhYCo3QHcZurvOy/fCYHB+3rzPNs0WxnD21Cb1fa6f\r\nIFQEPWM4q+PQWJnGbAjUt0IQKTycxqNA8GOjeWq058kxct1OZj9qiciYK6DjWELgug4wljKPO2dg\r\nbYfe9Oi6Hm1L4JIsFHzwqU1SMokYpeicAwIlutAF6cKlMF2t4COYx/eXZwSfvk7bOYSAZmtgbANj\r\nWhjbwvkOAcTwA1wc1wpFUaIsyqRRSElBFDGJqfYYU071RXNYfK6MHcb9u+s6BBQpHDk/uH/2fRfX\r\nJJqXuC80zRabzRrGOdi+jUcPZwzgLSQEtBToGgMEiUIXqIoKhaY5RAQBEQKEAqSsoMsKZVGjLGeo\r\nigplVWM2nwNCklZnCDCW7tt4C+ctrDc4aTYwpgexjUMM32Zjz8O5ACmof1DGcdIDLIqSgEipUuZ5\r\nXUhIJeA9yRS07Ra92cJacpBQn6bvlmWBuqbQ8bKcA0Il9r73Dj44eG9xdraBtSY6S2wMP+5gTIOu\r\n28IipLoNqR+SLi6Hz5PjgEJOvTej9ZvmUxeZr8N3+eD3n3d49BBCQasKSlUIDuiaHpvTDZpNj+NH\r\nj7BpNmi2DbabDdqmQd8b9LZHx0ffwtie2MfwLJEHIYG2a9L9cd+SUlA9lpoY58lxIZ6Zi6bz4vTI\r\n157nzXX5PJo7mmj9e/Y3+TnF5P7yzwECpfO5N79OzsJ8Hnj73//rf/nf8RGUt956SwP43z7s7/P1\r\nhEFANgpmM0pqNJWW4aRnbdvi6tWraV2fGkEM4vzgBz/AvXv3IKXET37yE7zzzjt48OAB7ty5g7Oz\r\nM1y7dg2/+tWv8Pd///d47bXX8MMf/hBd1+H+/fu4d+8ejo6O8P3vfx9d1+H27dt4+eWXd4KuH0WZ\r\n9hPuHw8ePMC3v/3txDL7l3/5F1y5cgW//OUv8U//9E+QUuI//uM/cOvWLTjn8OMf/xjvvvsuLl68\r\niPv37+Nf//Vf8fjxY1y+fBnL5XJ07j+EkgPfPBYePnyYGO9ceF+X/45/mztNvfc4OTnBd77zHRwd\r\nHeFnP/sZ5vM5vve97+HixYv46U9/isuXL6NtW/zDP/wDrl+/jr29vbQnzJnS5+WzXUIgiYLTU4qW\r\n4vfyPXau45kTGBjAU0rhnXfewXe/+1184QtfwN/93d/h+PgYBwcH+Md//Ecsl0s8evQI3//+9zGf\r\nz3Hx4sVRvz8vH28xxuBv/uZvoLXGj3/8Y9y+fRuPHz/GrVu30DQNfvzjH2O5XOLtt9+GMQZ3797F\r\n22+/je985zv4whe+gG9+85to2xY/+clPcOPGDdy5cwd/+7d/m4DDJ0+e4Oc//zm+8pWvpHV96uTL\r\n7T/+/8OWqYxB3/eoqgpnZ2e4ffs2rLW4du0abt++jbOzM5yenuL09BRHR0c4OTlJSU7rmnCA4+Nj\r\nPHz4EC+99BJu376NpmkSi77ve1y4cGGkV5nvxf5Q1qiPuuQYx+9StC4dAAcEAed6GOvQtYNY/Gbt\r\nETwie89gu22xWTfYbLboewsfNnCOs2V2iZ2Wb8Byrzh3WGISso4UHbqQ2N9fxQV0ibLUkCpgNlvA\r\nWRKbFzJASo+ikKjKGkWhQZeSECjgnYDWiJ43YLttISWH8xps1sxK7ClzZr1Km0oeNMz0Y8CGK5iB\r\nHv4+MQCBstTwvoRzJur59VBKYDarYriwj9paIoa2FTEc1ePJkzp5pdlAZ8CPNw+8Ab58+XIaGPfu\r\n3cN6vU6ZPRkc6vs+if4vl8vEOsnvOw+7HdhgEgABJcQYpDbsOgNjHKz1EEJhNqvSdZzrsV6vowFI\r\nAOFisXpmQ5wDacxky4EwYNj8j/uIeMaoAQY2Sj4hTDt/bgjkGYnYYOCyXCxHgyj/fQhhtElkQHga\r\n6sXht8vlEtvtFmdnZ3j48GFiBly8eBHz+Rzvv/8+tlsSsOe2ZQCZgVxibAInJydomiZ9P2fT5M/C\r\nYCQBgUNyCGY6Tg3UaX3lOnO7mCLcf5jFw+Ob76dpmmcAphzEy0MTpuwNvmZ+vWnJNTVzYNRaS4zA\r\nnkDW1R6FnlMm6hLBzwDIxApkbSzvAAiR+jmXXUY9MA7b4/Ap7hPee7hKprmva2msKGWIRSgACA2E\r\n4ToERm6T5pIToPtfrbBYLFDVQ7ZWDqtWmin/vBCy/IIArEn3ki+UzEZhFi4nfWAvI8/VfdfB+xCT\r\nMAl0vUTTlkmf7+DgIAszIT27lI0VFlINQuekPThkSKf+M2brMkNViMiUtqfPMKKnQCWBhyQtQSBq\r\nnz57uiV2LLNCh9DnOr0vpQS8AMkWBgQHBBdfZRFZZ3SvMkh46aGFg1AOe6KEqQ2qkhLy2N4C3sN6\r\nB997NK6HMRrWtjCmRt/PRgxoHxwUFETMVpxr50lpMWMGoDGwbgBFNxtOmLMd+ppzqOs8WYtMoe5U\r\nfwQsEvPexjmXHF19T+tSq1v6riZnQwWRxritW9goK8DtD+XhRUCQEWCWWVZUADx8OWkNgcJ0eA9Q\r\nZMF4bOfjS8oy9hVBDFBQtuNqNsfCOOztt/DWwfUO3jr4YND3DQAHbTVcv01zEQPy+f1PHUFU/yWk\r\nLON43O00etGclJcP2pBOQbeceRdCoPkBQ0jNi645fT8HyvJr5c4rdkrtco590th/wLDPYraf9z4l\r\njcodd6RhSnuwfEzlhedCXqPPzs7w5ptv4uDgAL/4xS/QNA0uXryYxlZZlnj77bdRFAWOj4/x+c9/\r\nHgcHB7hz5w68J43Bo6MjvPnmm/jud7+Lvu+xWq1GxsrHWUKghChf+tKXsF6vMZ/PYa3FarXC2dkZ\r\nvPf4xS9+gRs3bmCxWOCP//iP8a1vfStFJQBDoiAeGxzZ8mkP+833FsCwnrdtm7JFv/nmm0mW5t69\r\ne/jFL36Bz33uc7h582YWITEkRmPn7tWrV3Ht2jVcvXo1AanXrl3DlStXcPv27VGkDjNFae7u0n7+\r\n42blnJdPfmHw/tatW/izP/sz7O/vJ7vsnXfewd27d/HlL38ZFy5cQNu2yQ5lsglA4/fVV1/FO++8\r\nAwCJ4furX/0KN2/exNWrV3Hv3j380R/9EU5PT9O18734efnoS+6sqesaf/EXf4FvfvObePToEf7q\r\nr/4K3/rWt3Dr1i189atfxRtvvIFvf/vboyi45XKJH/zgB2nvyLZyXdfY39/HP//zP+PNN99MjO3F\r\nYpGkxnj+ma7nH7UzikOSWXLq6OgIb7zxBsqyxJMnT6CUwo0bN3D//v1RhMrR0RHu3r2LK1eupPnw\r\n9PQUzjmyeeJ+jYkBjMPkUi3n4N9HX9T//L/8r2/BV3BWom08NusOp6ctTk+2ODvt8PDRQzx58hTH\r\nx49w/94jPLj/GI8fneDsrEGz7bFpjtH1LbynhB2Ahw8uGWnsiZeRMSbiwd+zpkVRkpFrbYeyLHB0\r\ndBFXr13GtetXsVgssbe3D+c8Tk5OI9hQUpZFKBRVpJvEfLMhSHDCEgBotmQEOe+iUUref2sN2naL\r\nul6MPHN5eGdRFGjbdgRk5QCgMQb1rEyfM7DGxrcQg5hnXnIgkT9jQIOBodwA5sITAg8M3vzyJm6a\r\naAWgSSK/Vr45mhrqeWHAKdeRY5BxlN5buJHmnLUGQEjsijw7UA7q8TUcxmwy4Fn9ppw9MTWQCAh5\r\ndlLg9xiYS8a4H2crZeNzajgx0MfnyNuGN3NsmPDmn4EhgEAeBu6Y5s0byhyoOdzbT/pGbKwxuMRt\r\ny4Abg3wcUsLUagIByhELlOsnZ+PldTMAiuO6H9ftoB803VTnTI1djJn8+s+btHl8TNkNOeCbQAgg\r\nLQ55X19vKKNq27Romw6mN5FNoxCChLUGAhSyKjnTDyihCyWyGLxju8C/fHHNQQY+6gLQijJbKwko\r\nKSBjcgyBgLIgLTulJKQQpLXoA7wzcNZi0/TEZOoNMZNNH/sTzVNKB3BCD2pbThRADKZSDsxNKcbi\r\nz2zkUZIHOsqioL+LAmVRIMDF+ZfCrZ2zkV28xXa7gZQyzmmRwSwKKFlA6wpFUcd5PR/TACcfKYoY\r\ngpnmsWeZTcaBmMbOxjk6vnoH62w8ByAVaZ2JxECj7/amhXc9nO3Qtx2a7RZd26DvKIOw6Q1MbxJT\r\nGF4S6OcFBBS8LABZUIIoUdAK5gEPAQ+BUtcodYmiKlBXNYqyoD4T+7msACEDnHcpQz0/i/djYEYI\r\nAQSJ4AEi2YmkP0rrTYmqKmN9idj/h40dMdf7BII45+B7ynarlcasnmE+q1HXM5Sx/oP3kCJQRuW+\r\nQ9duI/udDtN72L6DMwbBOoCTYTgPbywkAuA9RKDX4BxECNBSolAKfUzWQZIhw9zMc6wQAlOzN3BH\r\nASjxjqdQa28DMSVBIb6z2Rx1WWI5m6MqFbQS0BLQClAyQAqPzoXE7BvmhQFEbdsmrk2DYzJnkrog\r\nntlc5q9T0Gx6TOfb6VwydXhMvxdiX8rrbzTfyjzTb3ST5vfgTXIE0M9ZtoP2OmVZjD7jVz7++r/9\r\nX58I5h8XBkzIMfoEzjlUVZXkLgCak1nLkNeDy5cv72RA5OXp06d4++23U9/80pe+hLt3744A2ceP\r\nH+Pll19OIb/z+Rzr9RqbzQYHBwf41a9+hYcPH2K5XOJzn/vczjXjoyx532RQ9N69e3jw4AHKssTZ\r\n2RmqqgJAMiO8X338+DFOT09JmiZKxzB4yJqpq9XqGe2pP5TC+4gQQmKgXLlyBd57NE2DH/3oR3jw\r\n4AFOTk5w8eLFFIbH/SDfv/d9j9u3b+PKlSs4Pj7GlStXcP/+fVy5cgW//vWv8fDhQyilcPfuXaxW\r\nK+zv7ycndz4//KHV8Xn53YoQJFWwXq/x6quvJgLA8fEx/u3f/g3r9RoAcHh4mJi9vKfPgR1rLd59\r\n990UjbRaEYHl6dOnuH37NrquQ13XeO+99/DKK6/g4ODgPOPvx1x4rBtj8KMf/Qh37txJcwFr473x\r\nxhv44Q9/CCEE9vf38dOf/hSnp6cp/NUYg/39fWitEzvUOZccTKvVClVVoes6vPTSS4lQw9fN25dt\r\n/t+3TLX4eK3TWifCghCUzJTXqNVqhYODg7R+9n2PxWKBS5cuQSmFy5cv4/T0FDdv3kRVVaOcB5zE\r\nC8DITj7vu88vH5r59+6t36QFbrvdYn1GzCUOb5WSsgc12w5NwyGzgJIEgjT9JhkvUkoEBHg4uGDh\r\ngkNZkiYPL6oAmd4CvPkPgLDw3sH0Bvcf3KXsvdXncXR0hMPDQzjn8PDhQ5yenkV6qEPfO1gbMFtU\r\npBkElS2ww4abwRjaLFMIknUtKCkA8OTJE8rIGZlEPGC4Qjm5Ap+LKaqbzYYy7JYDIFjXdRrEZKz1\r\ng4c/KzxIpJRpkPDC0DQN1ut1uu9cT7AoCqxWqwQIaa0Tg44910IIdF2Hp0+fJsBoSIhQJiOU7zG/\r\npxxgy8N0ue0YoGSAqq5rtBGgGhmk3mO1t0Bd1zDGgQTo2TsqYC1rCsoEpD2PGTLqN2IIxUpekzBQ\r\n5HOGEf+G2U8M3OWaBF3XQYkmheGyhp4UavysqoCTHggC1jBLlv6fzWZYr9ep/8zncxwcHCRA7/33\r\n30+MFN6As8cmhEFQn5+HxxL3ubZtE5DI4B9P9sz6ZIAqB425H+R1OO2L+VjJN8sD00uOFhB+j40n\r\nvm7O9Mvf2wXoTg0l1sjka+8C4fK/82sbY2BCQFn2aLsO26bDptlivW1wtm5Q1yUOL+zBespNS55U\r\nQEoNHfXZ+rZ7ZgzkfW0K/OfgcwgB0tvE6i1KTYk3ugJlqdF1GtbIBEr0vYG1PrVtCAHbllhkLnh0\r\npkXVlKhnJRYtjZ/VXpUlWMlF3QvKWu5JBgFBIjCLM0goGeBESHibkgFalemoSpozqpmOQAmxltum\r\nR9/bNI6fPHkCrcqYVIOTrsxRFDWULNB0T0AJgwbWRN7PlNKJ2cpsxHx8nrUdZfZ2Ar2V0EaP+rEu\r\nnwWEpSQQUABQzkFCAt7AeQ9nAGc62L5FW9Z4fPw4Miv3sVgsUNczVOUseRutj3OxjuFixkAoD6kc\r\nCiGh431WokJwDsb0aNst2oa0BGeFi2xiAteM6dD3JbquRFFUWMwp+ZLpfXQckFxFWdRAwWvR4BDQ\r\nahjjVVXB+Sqxlbtu+G4a80FAKR1FpAfnjNYSbatAyY4UhHTwoYftDNWPo7FdWarPTmt0bYm+W6CP\r\n2eeLooDpY7bmKFJNc6mC0xpWKUBXO4H/3InyoiJlEWUcNLw1AAS01JjPyVkzrxRM16PdztDONmjb\r\nLY0fOHgA1vIcQyG/zjsEY+D8s3MQrxu5d13oVVq/c1Y3j7Ops+nDlF3z74scXruAwvyz/FVk5981\r\n107ff946+/934T1EzlTktWaxWIySW/F6LaXE2dlZAmn4d7vOXZYlvvKVr+Dk5AR7e3t47bXXUBQF\r\nXnrpJfR9j81mg/l8jtdffz1p6bED+OrVq1iv11gsFvjGN76BzWaDmzdvpjU7T7TycdaPtTaBjm+8\r\n8QYWiwVef/11OOcwn89RFAW+/OUvjxI9Xb58GY8fP05RBuzw5f3lJ5H9+WHKtC/zHkFKiUuXLo3m\r\nzdlshq9+9auoqgp936Ou6ySlwvufPLphPp/jT//0T7G/v4+vfe1rqOsaX//616G1xp//+Z8n/TU2\r\nYhm8zvet/N55+ewWIYas3KznrZTC4eEhvvGNb6T5Lk/wyIw9BukBYD6f4+tf/zqKosDXvva1ZP+x\r\nPurh4SFOTk7wxhtv4OLFi9hut7SXmAA55+WjLd57VFWFv/zLv0TTNLh58yYA4L333sONGzdSJMr+\r\n/j4ODw9x4cIFFEWB/f19vPbaa6NEouy4YfsdQFr7WOKC15uc/f9xldxGCyGkqDaeV+fzOV599dVn\r\nIhHKssRisUi4CYe7v/766+Awd2bgTxn0eZTbefnoi7p29fW3Htx7jLvvH+PObx7g3t1jPDx+gqdP\r\nzrA+beCsjTo7HZxtEbxBCD1C6OB9C6U8BAKCd/DOJo+zlAJaEVMFwZPRLZgZAzADbzmvIARp5RGg\r\nQaAaGz8XDi9BSoXgga7r0XcGIQBVVWM+W0CpQJlrXUDwzPoDjCEDtiwqeE9JSqwPnvOcAAAgAElE\r\nQVQ1EJLujdh/Ft6P02hPmVLTTTowMBu89yjKgRmVI9TGmPQc+WZ8eo7cUGI2U36uHAnPjV9G1XlB\r\nYa8Rb56Zmsvnz0GhXSDQFJTJnzs3gHJQkIAnQ4ycCF6yHhszVwSGEEUR250ZCFIKyEKPjEZ+zqnn\r\nIr927gn3/tl6zdsuz6LEC2rujW1bSxprUiR2kUzaWhpd15ImmyBFNh9ZFYj3zwwwAIklmScFYQYK\r\ng4N51kwpJQo1ZDjk++L7XiwWaRPJYOQU6MyBuulz87V2LQz8XaWf1bFiYJqfI2+Laf3nG4ppP59u\r\nyKcAcw7m5v0vf0Y+/zR8ePh9gRAIXGubBtsNaYM12y22G9I1a5sG1lh456OWpIjTkqDMtTv69y5D\r\nmeskBwrKEjHzrabsqkUBpYe/pSrje8SuE5L6l9LERgSKyMwy6Lo23msfk2JYdO023bt3Hs46eOeB\r\nAEgoFFrHcypIpdJ1AgAhRboPuheVrk/9XUEXlOSjqkqUZYVCl5FlyIxCRaB3BC+NcXA2AIHDi4lF\r\nSTG1DBgT6ywXIR7qMxv7kdXEmqOI60gI9OzOWZi+gzE9nLNgypx3Fs4aOGsio5IStoiYpdw7D289\r\nrDHYrjtY4+CinMVmvUWzadF3Fqa3MCJmxJaSwpkjUKylhi5KeNdFFUaPIIjlJxSgywLlrIBSDAoP\r\noa/0LKR35yyis4rYnVx3XL9CUKIbYktLyrIcGdNaF5ASKAod5446AtgyrZdSSFhnYayF88M85byD\r\nDx5lVaKsNMqqQFHqqCsIBDg4b2A6D2tJk9J7G+vfIXgLa3tY06e2cNbAxjBzEZmtxLwb9Fklj/04\r\nZsJkPE0Paz2CJ13ExGxF1ICNmW1Zv1MXGmVdoqwqlLMKVV0DskhgXp5NOs/kymtVns04rbdePnf9\r\nz+elFx353JfPc3ydKfCXzyOs+TedA6fzdH6NfG4qYoKTEImt9LYA6wzTPojC7UkPMoy++9f/7f/8\r\nRDH/chDQe4/33nsPDx8+xHq9xoMHD/D48eOkm3X37l00TYNXXnklyWdw2VWP7IDLNXSXyyXqusaF\r\nCxdSCFLXdTEbOwHbbLDNZjMsl0scHh6me83X4Y+jTPdqfM8cSbBcLrG3t5cYxLOYCGk2m6X73Nvb\r\nS2w03hdMndqfdvbfLuci74O43fJw5/l8noxW3k/ke2X+Lu9B2OnOdcghmfP5HJcuXYIQIvURTiYI\r\njPctn+b6PS+/X+G54ujoCK+88soz88VsNhsRSDgcP7cJOAqDAWmen5jYQM5NijLKNelze+O8fDyF\r\nxzvbbQcHBwnwunLlSmr/y5cvp9DZw8NDVBXJaM3n80TgqOsaBwcHqOs6OWHZWc1zPs/dfO1pwo+P\r\ni/mXP+s0Eo/7WB4Rxs4Ultqa2vDsOMv3S7l9l5fz+XN3+bDMP3Xj6hfe2q47bM5aNJsYNucAJSiZ\r\nRtucwrke3hkgWAAWCAbetfC+xbyeQyLqKfkAEQAlJYWY6QJ916WdphIyfQ+BEj1cv3EJxvax4wj0\r\nvcHTp08T62o2q1FVNWazWWQoWhRFib29faxWBwgwEfSjDbB3ZFA4S5uysirQ9y2ahrQJlSZgx/sI\r\nGLQmbRKmtFk2FLiTs3eFDQr2GJKRwsaagnM+GsoWVVUDKbsqGYh5AhAXBbt5oOQCwbzxZDCMATbe\r\nmPCE0bYtNpsNAKTJAhjCkBmB5+cZAygUVsihdJTR2aZQKkooQaAdvwdwQgUF593kuTkMVgBBoKw0\r\ntCaBeohAIVm2p3NoSWlKs048NcDyyWIaAkObtBeDl9xu03BoPuf6bJuepyyLlACFw6e6ro2GPVId\r\nOWchYnhjWVYptftms0meZU4WAwz6favVChcuXEiivt57mK5PQDdvGpnVw4u7cy5pteVgGC8aeVvz\r\nZMtJRDhceVp/XM9Kjw3PHHhVSqUEMtMJn+8zT5QzNXCnwPcuwzpvKy45OMBtNmV+pbB4oSBCgHcW\r\n1rTou4YAo75D37X02nawxiA4TyyzIAAQYKGKMRCZP2vueWVANK8bAhUUpNID+KaG7MBFUUJIAgIZ\r\ncAODRPGaVVlBiphNtu8i2OIo7NIRQOVj0ggB0q4j0K9EqSu4YCiJiUAC9rjDCimhC9K0S8B1CKPv\r\nay2iMcPZrzW0HoMpUoo0truOQpON7dF1LVarFYjLHZlW4LGD1C+pThn0FxEwI1DHOw8pSH1RIKS/\r\nqaoC2u2WQlK9o3jc4Cn81DsE56CkismCQkwY5Cls1VOmYArIpv9N36JrGnTtFiaGwMqY7Rqxr8G7\r\n6KySEfj08AFwwcM4BxfHjy4ogYdzlLCCskHLKD0R5zlj0WwbtO02OkV6BDgoJaALqvth3A1z2pDQ\r\nRcPHMVaWlCxEawL/CMQhpqB1Fl3fo+upXayzsM7BB4t6VqEoNepZhXpWo6w1sRxlAKRH37DDLibL\r\nEFGiQxGzsusbOG+pPmMyMFo7TXSmFRAIUNHZp+VwKClgTU/1GfO4M2iIQKHENgI2KmVIjslhgoNx\r\nFlqRzqTUCkVZoKxqVLMZytkc1WwG6xwlwokHAZzDq5BAVZeo6or0NEsC4iNOC2OGOWjELJ0AfNP3\r\nphuu54F/zIifghP8e87OLvk3wwlpHqXFd/z+gPJBRXDeu5jsJeomiljbprcJ9Nt1/D9//ckI+2XQ\r\nj9d2IQRWqxX29vZSXc0iI5UBrAsXLuDll1/G5cuXE4Ocy9RQYOZczjDntYXnqDFjeWDI5c5ZXgOY\r\nKcb3+3GBO9M9T67jymsVRwIA5HDMmUNcr/z8fA7+m+thV519msou5yEwyF9wG+bsdAaY2XjOP5ue\r\ne+rcz6Ve2rZNfYCvn+9b+Bzn5bNb2MbkfsPjD8BoTuLxrLVOYzpP3JjrxAFjLT/uf7zn5zliatue\r\nl4+v5HMQa9pzOwCD5ioDufl8wu0PYPQdtsO4cLgvzy9T2RLgowf/cttoapvndmMOSuZzIttL+TPy\r\ns+frFddh/r1dQOB5GcqHBv/mC/nWtnmM3pzC+TP4sIVzpzDmBH3/NGrGkDEmRYCSgBQxeYXSCI42\r\nnoOMDIE+RNKIOnw+wDsPayi011kPJTXqqsaly4e4du0a9g/2sFlv0XUUH26tw7vvvou9vT1UdYm6\r\nnkWAw0HrEoBIgIpSBZQsQYyIAGtj1k8P0oQKLuoMEnDDGlZKaXStGQEVU4BkCv7l3tKqqvDk8VNo\r\nXWA+W0Drgq5tHD1fPUvhocEjGZRaFyh0Ca0KCBkSKyEPl+TOz4sFg3cARgAQe4CttTg7O8PJyQm2\r\n2y0AYgHy33m4E3cU7z1l9syAP36FCIAggI64MHRAhGQcQlAoYVlUKMtBC88Yi7ZtsNlsYGwLxEzO\r\nRaG5k4B1wXo7BleA8eZt6nmYgn8IQxKOXJstb9NpO3JITNu2WCyWcM5is1lju93AexeZT8zGEaOM\r\nyKl+IoNptdofef+5LXgTnrMCmdGwt7eXqNCnT0/SYp9neeYNeh3BiZwVmtcFh7Qw0MigHz9nHqq6\r\n06CVz4akc91NwzT5PnnBYZCSmYn8jKytNQ0BngKA+aY6n+Dz//ONeL7QDG3ZQwjOtCqgJAF7xKRr\r\noKRE17bYbrfYrNdomgam7+GsIyaTN6PxlPctrTW6rkvjhstguPsIrsWEDqqAUhV0UaEoa5TVLAFw\r\nUqkIwgm4BMJRmKl3lEFVa426KmnOFaSDdnpyBtNb2D7A9A7WeARHsgtSaJw1JzDWRqafTBphzAZU\r\nWsOHkJhh/B0hiR1YlzWk0AgeoGoQCXiezeY4OzuLbWkjUEF4vYy6rZtNi7438J43rUWsRwIffLBZ\r\n2yMyaxEBLpCGIG8MgAgyRVZWHEPBezhrYfoe1hgCQ2I7eRfgnYusTgL5gncJrOr7Lazp0fdb+ts2\r\ncK6HtQ2M2eJk22CzPkWz3cD0HYKzgyxFCNAlAbhCaAhZEAgrS0AUEKKAEiJm8aWEGzy/MqCH2Ddp\r\nnrUI6OBDD+dbyrLcczIbBkgRAeKBhVsUFbTS0IrWjUKXqKsZ5rMFgggQSiEgwHoHYy162yUA0Hnq\r\nG1IpVHWJ2WKGxXKB5d4C+wf7UKJAUSlYZ9G0W2y2G2y2azRtg02zRm96OBcglYzgWwldEIPUhwDj\r\nPZy38BE8DIH+J+1GO2Tfjbq/6e/IBCfN0WH9EULE80RWlaQxgyBJH09qCFUASkHqErrUqGY1yrpC\r\nURErsKjKdFSzGkVV0viTAkJJSK1Q1sQcLPQiMaHYu56HBedJk6brSO7ceB74x+fKQ9nzOdF0NvZZ\r\nH/uxSyxfYkTKCPZhDPzF94jV59IcTUfOmhYvPD4p4B8wBgB5Tt7b28PR0RGuXLmCS5cupeQLly5d\r\nwoULF1LoJoN0L3ICspHBcze/5uHEIdB+LE8uAgzRCLwH5HWP16gp8+KjKvl+lK83fZ7ciMxfGfTj\r\nPQQ/L/82Z2v8oRhXUyfldN/B/SqPWuDP2VjP2xrAKOQyd5wzQMNO29xg5fO8iI16Xj5bJZ/XyrIc\r\nOSS48LoHPNuHuX9NJQ7yeYh/N7UTzpmnH3/h+mXbDxjacMq8ZEAvf93lIOS2zee1PCQ8j/7Ky8fB\r\n/MvBu3wO5LmT18EcjMpBzFxKARj6eu6EmpJCpvuq8/Js+dDg35Url9+inSUxugI4cUcAscJICH4A\r\nZARCkABUPJ7d9AJjpBjAaNMLDMkrXn7lKq5fv4GrV69iPlugqoi2vFrtpTCMoiigi+jh9gTuMdtt\r\nuVwAYDF/EcG/GDorAWMaCmcKzybFoPsawmR5UPFg7bouxdvz8/HrADANCUCYdaXUEIqz3Tbg5CO5\r\nJ5A0yyzKSo86PN8na5rlqPou/TUhxkkopqGtORDD9c5AIm1eWnAINhufFJJH7ByfGB8EEjJjh9hA\r\nDlKyJ0rEvsALVQTLwhB2NWWYAYD144mKJzT+znRzOp0gw9hJOxiN2THtm3mCkrOzzWiCy71lnIGI\r\nJ6HcizxMhHTOPCMuJ+pgbY98UebnZv1BZ2wyengizNuSw3kGYNWk8OKcFTnKMJrd46DT9axBRPU1\r\nTvgy7tvjDMN5YWBi13nz7+eLYA7a5QvJ84C/6aZn13kYTM4BWT4Amiu4zmjs9zCG9Nm22y0c3Gjc\r\n54xDrm/WUWODOh/DTEYbsmTznEBM4LKkcE0+OOvubDajoy4TQ4meH/CeAfQW3okIzBGbuOv6jKkS\r\n4NCltsjbig82THhu4rGf3hM0d0pJ98vsMgaj8yQ/RaETKO6chbE9vFWw1sFZH5NcMEBLSU4gQgQL\r\nKcQ6Ur/TXOP9uK/lB7Nnp+OZ5/Cu66BFGZ1LITKkBKSQ0VklIKUFYAAYCGEjABkAWDjXwXgNayj5\r\nio9jylqL3lCyCPgCzkbPvaJEJ1IS4BuChISNz8rgjo4OHgrhsK4BhEdAT5p7roWxLfp+i7Y9hel0\r\n6pvErPZxSeV1kx0iAIdsUnh1bNsIGrP0AmKIMrV/PmdFgCh4eB/Z5jKgLihESBcxyYhg5ibPL4Ax\r\nPGZoHPV9j7bt0LYttC5TuG/+KuJN83tKynRIIdIhtIyMVBq/Uk02jloDEAiCxleApL+lQhAKVREd\r\nabqA1kUad9RWxEhXUqf3lSQQVUkNJTWKYj7Knjydn3KP+3T+y+el54F/u343Zjbv3tTumvume6pd\r\nc+eUBTJ1vkwBkW/+3//lEwH+5XsXnqvYOOZ5l1/Z0TVlJXyQcZC30ZS9kIN3vF7znM/nZeNkCv7m\r\nQOBHXabO6BzE47VoOufn9VEUxTOsyLxM1+FPa8lZKdP3870jj4d8Dwcg7b2mBIAcwJuCrnlbcF/I\r\nr5/vuT/t9Xtefr/C81uuQc+RM/w/MA5/5P37dI/NOt9TkkPulJ6yCvm35+XjKbkDgUO3gcEezXX9\r\neU6eri/TtnLOJRs0B8jYMcGRXfx/3r4fNfg3BeJykgqA5NjMnWv5epRHHeZ1lq9X/Iycx4Dfz6PL\r\nzsuz5UODf5cuXXmLABsKrwEUEOIBDSk1OCiLQ1eBfLLafeK8YXNvI3+2WCxw4cIFXDw6wPXr13H9\r\n+nUc7B9iuVzg8PACfXbxAn0fCnW1wOHhERbzPfQ9aTf1pkvgBmcFzcNWhQCsddFw8iPAhMtySboI\r\nXdeNwBfnXDRuhsQbeegsn282q+GcTb+n7xXx2Yd7SRpvKZsrGfe6GIe6AsO98kY3B8PY0M83fGyg\r\n86aEgS2eNPJNNGugcHhw0zUjppCUURcsvvaGRNg5TJn7gI0sTCkKECiooDQz5gAhaLOzbbYRWBwz\r\n9qjdBDzGYaT8rKx/wABo3pfyzbD3u729U0ArrzOuV+cc1uttep8Zgbwo13U9CvXZdd7ttk1AtpTy\r\nmczAm80mtS3rQLL+32w2wyIyWjmxB9fPFEBjjRkGPvj6TdNACJH6JoMX/MwsIpuDK/mGH3g2xCUH\r\nk7itcoYf32dVVSOAejoJ5eE2+fmfBwTuMpjzTfgUhJwClrvmIApDNxmA0aPrOjQNMVObbpvGLt9v\r\nzqThsc9ANC+GA7Pm2ftQillgJSjJED8b632pmNm1ouylOsoARGAdYMFyC6U8fDAERnUxU2vUM+37\r\nHqrMMyb7UVtTP1IRjBoSadB7kd1gHaQaEt4UZQkVdQSFEKhjsiAGAPPPIAS6xsI6qltre/iYfVQX\r\nIkoG8Fim/qnis3J4pxDFqG/mmZSLokDXdaNxx/XO7FqpFIw1xDaLOnc+DExl54YQXiljBsc4Roy1\r\nsKGAtTHTctehbRrKENuS/qJzPYxpAXhilkZ2KYcow+eaJTnwW9JRqJhkhPQUpSSpArp/h74Lse5M\r\nclgJOXYuhYmWGwFdlFAEIUTQq4AuOEO8hgA5JphVSPUWNS/B405jtVigrgedPJZ5IEYZO0k6Ap7b\r\nPsle8DmFqjPWYs4qe3YspnaEgw90QMpsTqWwYyGQnFFaFohR6vQdEcda1AWksUlZu3NmPR+kkziE\r\n4nP78Guh6zTHDevSMNfsCkfJxzyPvefNb/kcmL+mZw67gbldR36N/DW/7nSu/6Bz/vUnDPzjwsbv\r\nLmAtr9scuPpdjNtd9Zn/nRsqz/vui875YcrUMOI6eZ7x/kHPvKufvOheP+3gwK76eFEdTdv1eeNq\r\n+vcuNsoHXePTXrfn5fcvu/rmru/kQPGwnihYKAgA3pMEl5ABXjh00sEpAeU1seRBdho5ywQS3R4v\r\nOIKMUhGR2CPGnyFIKKcpuaYyCMLBW0+yKiIA6ADoj6PaPjWF2206X+fzBn+e2yvTeWX6u9+mn+T3\r\nAHy82X6VUjg+PsbTp09x8eJF3Lp1C0KIlJ/Aex+TfZrRPeSJboQQuH37Ntq2xeHhIf793/89YRTW\r\nWjx69AiPHj3CbDZD27ZYr9cp+zEDgmx75vf2WSwfGvy7fPnSWyKyZHIGDb9O/+aDN+nTMkVnczFh\r\n7ghFUeDatWt47bXXEGCwWCwwm81QlTVWqxUODw+wWCxTNqRCl1gslrh8+Qr29lcI8PCBUPGua0eb\r\nXWAM9E2N9ZxBQp2oGnnScwYf3zuDizl6zedi+jYDA3lYAbMGc8/MlAGZM+Ny5hbfb9u2Iy9lzpLJ\r\ndSFyAIR/t91uE8jH4CgbKsxs895A54ZC3qki2JQYHbkBF8OUSOuLJ5sc0KH76bptYsMxGFmWmfA6\r\nngWLxuDe2IOQG1rUZs8aSPn3ckMs9/YzIxJhAP6YMcr1aIxJ+n3TdhtCwMcsNm4LLl3XjbwieeIR\r\n7z0uHl4Y9cfceONMSOwBnIK+AGJG7mHw5yArg5Hc3tPfK6VgXZ/ueWq48vvc19gYzr1BOTjK589B\r\nmrw9cg96DmRP22/697QNp23JZZdxm98r3wsnw2nbFm1iNJnErGOHQYganczkNYZDX2NIq+d5UIza\r\njdmxSklij2X3xyAUA10ClgAxBWjFwIUikEnTOCIWMYXzDZprjpIwwaHr+nRvOVAvI+NpqjNKQAgB\r\nSMJ7FFpDZ6G3afxLSbp58blS+GIWxkgsMp8YlcZ2CYTk+mamGoEuOibnUBS6LMeA9LQvCiF2gjJc\r\nnOXkTuOkBlxXrJHHABG3G3/feUnh36aH7XvSXex7mK5D37aU4TdqMTpj4K2FdzExhncxoVEE3ASH\r\nCyM9M0ki1CiLCoWu4rgirUPneD11lL1Y8P9itKYEz1IbGlrpqHNIyZQCQmRsatIFLLn/xPUw9uEA\r\nrpfIugwEoBWqiPMLsVRJniGGFxcF+r6Lfc/DeRPTcVAIN83fIun/0Zo4ZiTnoG1a1+xwCK0yAE2k\r\ndkoOI8ikz0djYTzHhxj6ym3K45aPup6l/s/gad4fuE3yfjUF6/Lxm5cpYLVrDt2lmTOMC9Dz7Zi3\r\npsf0Hl4EXORHzmjcdfz3//p/fKLAvymQl++ncsD1eWvFB5Vd9bnL2PogIGj63kdhePDamffDqbNx\r\n1z3uKi/qEy96jk9redHz5t953t8v+u2uOntev3ned87LZ7s8rw/t+nzXnlcIGSk4AgISEgWkLyCM\r\nQuVrVK6AVy0gHIRwwO98WIRgY+SfRRAWgIv/GwTpICRpTHvvIUIBFSqEoCCDhJAlaUl/xsuL1pLn\r\nfc5rdP4+MJa/mp7redfJ7b+PEvzL70NKiadPn+L4+BhVVeHOnTtYLpd49913cXx8jOVyiZ/+9Kd4\r\n8uQJ7ty5g/fffx/L5RL379/HgwcPcHp6iqOjI9y7dw9aa+zt7eHOnTu4f/8+QgiJmMMMycePH+P+\r\n/fvYbDao6xq/+c1vsLe3l54zf+7PYvk9mH+X3gLGi970/12bEd4YTy86ZfEwQpvTQbXWuHHjBr74\r\nxS/ChwYURuYhFRlL1KCA1grz+QJ938E7j+Vyifl8kYAFrTXW6xMIMYSqighkDskpBqOPQ3GRMRRM\r\nz8wcmZhfRM0tMZvNR/TTwYggg4MApHHCjvxZmU1B3x/0Avn7BM60I1CEQRoufP08zGDKQmPjiRlo\r\nSqnEcGKW1i7mllIKZaWfMVoYNOFrT42jHJwcM/V0dv/cT2jyYMDFWkLrq8go2jRdujbXUw6+5kBZ\r\nMoYzkIwEzp+dDKcA1vS9AQStEQJlkm7bDsZYWEuAytnZGsvlCpy8QUoFDjsPAcmA5PpgwJeFpDls\r\nnOs+Z54aY7DZbHDl6FLUequgpISNGYKllKhi//Heo+86SCGwmM8xm83gI8BbzwbmIAOBOU2amaPc\r\njjmQSeCASRm4UzZuSewmJQVM34EzHytJGUzzrN5kSI/Dg6dtkc8Z3G7P25znx7T9XrQJf97EPwWW\r\nclDFWovekpZe1xlsNy2abYe+t8Qo9QTsKEX6eoCEFBplWYPkAiSkZLbdGBznPkFMLZ2Yd9OwXwWD\r\nolAodYGyUCgLjUJzhlMJ0xlIEZMpKAIFg/PouwbNdoveejTbDm3bD5qAnry+CJL+DzlApdKhVYlC\r\nka4lj0/K6k4h/lIMIXg5C7SIr1VZoiiAqtIxMUNIun0uavaxDp9I4bgaUmgoWUDJgjISZ8Bx3l94\r\nTHGfZQAwr1+WeeDM2jz/8njjsJpd65j3HkpXQPAJzMu1Txnka9sGTbPFdrtB22xhTE/f8w7eKXIA\r\nCEr6Qux5XmMI3CGdwPhZYKkABSE0gmggBBBg4b2BczbNAX1vYA2xm5UqUOgZtKoBaASv4ayAD31c\r\n/xh01lCaAN6yrNIYQALEAvUN0P99u4W1xJLXSsfMzzVmswqL5RxCCtR1Ba0j2BhIR5D6SwshKfTE\r\nhxi2HIb6o7WRmX27xrEAtExJaISUMVs16WNCCAhJAGd0Q2ZLN33mHNWP95xHTAxsB0jK2Bzw7Hdi\r\nmH6hi1Gf4LkhZ1BPy3QfNN2g7wL/8s/zOpjKVkzLrjlweq5d//+2oNQnCfzj/cY0OiPf4+T7TW6r\r\n5+1PP23HVN4gd5idl/NyXj47Zeokokx1Bs4bdN4gaCLkeWERhIFzLaRXEE58qEM6CRUURJCQQUJ6\r\nCekVpJf0npdowhm0inIq8GDZLx8sfDCUyusTMI9+Ug8uuY2Qz/t5m+/6/u9ynV2O8g9Tps5NjoR8\r\n/Pgxnjx5gosXL+LOnTvJtjw6OsLdu3dhjMEXv/hF/PrXv8Zrr72GO3fu4MGDBwCA9XqNq1ev4smT\r\nJyjLEgcHB3j//fexWq0wm82Sdjwfe3t7qKoKzjncu3cvEsQOE6Hms+5k+bDgn+YNFb8+z3Df9feu\r\nMu24bKzx39zJq6rC4eEhpG6S4Xl6eorVKqCu5gghYLvdUmgTKJPqnTt3sNk0qbGVEikmfr1ewzmH\r\n+XyewAhiJY2R9Omm6uGTJwmgYUCGARSO3edn4jh7rmyitvaJFQOMNfbykCBuHGbAsUYbA4XMPONn\r\n4zC7/Ppt26b6nM9Jq2i5XKJpGnDIcZ7tt65r/OxnP9v5/Py9g2L5TNtMw7Tz307BGSFiuGy3hVSA\r\nELPIANSQEpjP5ynMsu97rNebBF52XQdRzeFjBkihJApZpuftrYHk0EEA0jkgAhU+CtxrTf3DMZtF\r\nCEAAImYjho1Zr7wng1FI6LJAPZ8BUkAKCp8MYfCYcH9qmgbL5RKLxQJ7e3sE1kRGXggEOsznczRN\r\ng+12C2stFovFM+GyDMABSDoNbdvi7OwMDx48wGKxwHw+R1VVCTTk8bdcLlPfAwYG32azgdYaq9UK\r\n6/WakqtEmjWHCHPbTCdGBqapXdudwCoXBsl4THFm45T1WgzMPf4ttx+DtrlxwyHLIQwadLsKn2fX\r\npJbPMS8yhvm7z/stAOiiRtdbGLvBetOgOF3jbL3Ftumi9ugKXU/tLEQMry6qGAJbwlpetPkZx8Z+\r\nVVWjhX56/epwPzFj+57mwWbbQkoQsIj9BG4Ru8nBwsM6+m5oKKxbtQZNa7BterSdRdvZCETrCDjO\r\n4niODNUI2uo4n/E9wgc4ZCK/9Vicl9uF+0ZVLimcverQNBJdZ2ANzTE0rgDnAkIQCF5Ba5/ARyUl\r\nhBozdacLec744T7FGw3vPawZ2nXQQvQJQOfv5yDi6BreZvp0AvAe3gZYb+BIjlcAACAASURBVOGl\r\nhAgDYK+UQl3XaBYLLJfETN/fvwmvSUdPO5I9INkE1iyN2eSFRllUMdx/ACnXDSXAstbH0HQDhD4x\r\nCctyQ/NCWCIEg6KoIISK4zWAmlIRaCZJn7fwBcpikJrgEHFjughcDuPddmdQcgiz1rqAVBKVYk3f\r\nCzDGoG1bNA0lSeq7Hl3XUHsU0QPb0rxTVT1mM+57JSB0ai9IShImsn0GQxtpbHgQGBi1NFXBoKV4\r\nZuwIIaBkMRpXU0cW90VmB4bE6CVwcRczb7qJns4d03vIx0T+vQ8Cbmh+K174HRE1GOMv4jMivSfE\r\n2FAc/ubx9OlhY+ROurwtgd37zVw/69Ne8ueczn/55+flvJyXP/yS72+FiHw/V0BDoJQCCAIumJh9\r\nzUFoFZ2+H/J6iM41CjygvZDge6G3tZ6RM9fSegwlIJSEF5T0s/w9rv9ZKtM9w3SNm/6/y9bZdU7+\r\n7scFhuV7mqqqcOnSJRwcHODy5cuU/PTJExhjsFwu0x5zNpslJ/7h4SEA4MKFCyiKAqvVCvfu3cN2\r\nuyUCTF2TDrsb6/yzDX3jxg1873vfw5e+9KV0Px8G9DovVDQw3nA8D33Oy4s+A8YbZo7jZmaH9z5l\r\nWiWwZIXNZgNrKby1aw2sWSMEgdlsga7rIwOsw+PHTyGEwsWLFzGfz3FyYjCbLbBeU6ZWaz3KssZ8\r\nXsO5AO87FAUJs3tP2gQhODin4L0CMAj15kBdCAFd1+Hs7AzL5RJd12Gz2aAsS6xWKywWi0z7bwgF\r\nZX01Zvi1bZve5xDO9XqdwKYQAmbzWTKUARrEuQjswcEBZSrdbBIIU5Zl8pIzo4gNcx5UV69exXw+\r\nx9OnTxP4xtljOVz4yZMnqOpB/ysHjgCMshDlHoB8YFrjYV0P0Ydo/FUYROoprJqAQI3tdp3CmAEB\r\nax1mKwJRq6JMhqph/SsxpvX6AATnIQKgpEwhcDmjjg1NZgltjOXExUAIJDhflFBCoi4rPDanWK0W\r\nADxOT0+xXq/RdQ2M6QB4vPfeLRweHsbwxoNocARia5X0XJwVkvUWWUB+sViMdCMBpGQg3I7/79tv\r\n49KlS7hx4wb29vYwl5SFtWkaNFEPIQBQ8RxKa5QA9g8OIJUaJaVhIx1AAhO5T+b1w+PQe4+ymqWJ\r\nmp8hB8d1USFAwFhilhZlDakK6KKLYO565GXi+ue240QmOSDOR85qyX+fv58b0PkiODXOn+eU4HGR\r\nfy/vL956eAzjvhUt+rZHu20xm82SZ+rg4ABVVWE+n8Nbj9lsRousspN7Gmcv5nE9lPH9qUIjCABC\r\nQRcO9WyGejZHNavRdR1ML1IIPwFGUehdC6iC0u5672G6HrY36bVrSFB4uSSmaHAhjm0yJpVSEFpC\r\nKAVdEFNKKQ1b2dFc2PV9CgVmB5GUEloSm9WLAF1q6LKge24HINNaC+sdXN/DOofeOBRFRay/OK6L\r\n6lkh4dxhtN1ud/YPXlfKokws5TyZE/f1zWYz6pe5nqCUEi7TrGRSWYhjAQB8fAUAF7/fty3Wp6dQ\r\nSmF9IWquzkqSrqiKpHUI4bFaLUZ90/sCVVnHpFqAeHoanQE9hDAwPYFUiJ71rpFwBvG6HeqK5h2t\r\nZ9BKwkVNSc96fiKAEmCRph8B9AM7e5iraI3yEghwsI48+MZ2MRw7aj7W85RBvK5rNE2LpmnS+t1u\r\nm8FpUpAOkLcetrfQmsKk2ZnG2ZBz+QQ9K+m+OYQenIRGQELAmi6CxTHkSZDhw0MpMJoXQmq/lEwE\r\ngGO2ffyc54xdG+TnMeeeBwyGEJIjaHpMpU52A3QB3r0YIKT7GMC/HADkPh4CS2aM2eXTdfuTXNjh\r\nOS3W2tH6uatMAbNPc5k+yx/Ss52X83JefreSj38LC816fqQWAmgBAwsBCf17au75ALxoqhE+ooBl\r\nBAalhxeO4gh0hc+65t9vW6aOyo+yTMlGH1XJySRKKezv7+PggOzh69evYzab4cKFC2iaBkdHR9hs\r\nNpjNZnjjjTegtU4El+PjY8znc/R9j2vXriV84ZVXXgFArEDep/I+iqOkNpsNbt68STZYxExy7ON8\r\nnfzdih6SeVCYzLTTmJjwgQEbYOp5HhtvwNgAz7PB5Gmht9stnj59inoe4B2gVRmNOmJBkCZdBdN7\r\nzOoFzDxgs+5gegetSqhSoWuJ9rHZNOh7C6UoXI+0rohhovWQrSsJtivWLApYLOaJWROCR1lyyKRH\r\n02yxWi0RArMyelCoI7BarRLQxUYnswGdc8lAYgYfAzFDOKBI32eaK58nD1VkuitnwOFwXh40OYMq\r\n15RjZuXLL7+M4+NjdF0X60CldqWslhHgiy0qpYSQMgn/N01DYXtSMmWCmBux7Rm05WtT6OmA2CME\r\nCg+MDL2zszO0LWXZDUFgvtiH8AEKAloqyAAE4eC8A0JAWQ7e/QAHLSQcAmSgxUgrAnVtYEF7YjUp\r\nnZ0vPlwIkWEIoJCKkq3IgMVyhqouUJQqGsI9hAwASvzmN79Bb1ooLVCUCnt7eyjKAt7HUGTrUv0z\r\n+MYg63w+R9u2ydjNGUkMwt57/w6CAKpZjWpGma6Fkmj7DuuzUwKHQkAQkREhCDBa7e9hvlzgvVu/\r\nTmAxjzeeFJVSWC6Xo7BcLknHz0WAzFr4IOBislFm55SqILDAewRL7FKlFSqhIFWR+tWUvcXnB/CM\r\nQZrPGzkIyKAPL4zPA/SeN9fwefMyZU7k5yZQINOnQ0DwHn3bwJke2/UZvPdYn55gc3aK5XKJvb09\r\nBGfhzJLA8tnALKPTjOfDIdvxcF8UIsnh3wHeC0BSWK+AQlESKEtjWRCApWTyigUPVDzPbB2M8TDB\r\nwlmH4CyCszBxjlDiCBIBpdbQGeghJSAD0LmYVa6eoZzRour6ITty1/dw3gPZXFMoDVHT8zw6bRCE\r\ngC6qCApXUEUJGcPQnY0Zer2DMy1c8NDKQXkG/waWas7k4XmSgeTEFMsASO89pNCwFqCs1SIBZ5zF\r\numk2qW/xOK3rGkLEbNzddhQGnxwNHIYhqsFT6wV8oAQnTUt9ynhy7MxmsxGDlzIjExNyd5+l59lb\r\nHcFai7Jo0ZV9Ak2ZQGo6lRxJxhAouQgBSgnyxDvecJMzK8WRiiGr+C7Gtvea1jt1EPUje3StifXb\r\nD6HeMZS4KEqUZYX5fJGcd33f4/TE0E7AS2JRBk85eQMQtMNpv0lyCGUZs0brMq1vupQQIYB4hvQ7\r\neEcs7hBQqjKbN6LRE4b+wIlSsgkALFAOISBi302jT6SIYghBLMNpeREoOG7DYc7Kw3am8+DzCvWp\r\nD2KtDUAfg3/8P+/D+FkQ9Zk5wRivN5+Wkhu6rA/Mc0LOOs6dQ39o4NgUdM7/Py/n5bx8dspobhNA\r\ngIQDoALLXyjAAQXKGO304RnQbBtFzt+znwMIgrSpAYEgAnoRAEhoKEjKI3ZeXlDyOX06z/PfwNim\r\neRHzfVfJbbznMQo/bOH9P+MS7ISfz+dQSiVilJQSyyVFFPL/nDzz2rVro/MdHh6O1ngGFHkPxbjK\r\nhQsX8M477+DVV18dEYMAjOzr8/LbF/XSzVffUkpDCsoq6JyHMRamp0NGnSIW22ENIz44qyswNtp4\r\n88lhb8wq6/se2+023cDVq5ewXO5BCImnT0/Qth1WqxVWqxUQJLbbFrPZHEVRoWt7NE0Lax2UIn27\r\n4EO6XwTSDNSqiELaEj50sI4Eya0zlGXQOxjbw9gegAQJ6BP4J5WA0hRqY51BVZWo6hKLxRwBHpvt\r\nGl3XoqwKrPaWIAabTaGdbGAy4Ne2bRrsU+CPmClnyaBlI4+12zgkkpNzAEDbtgn8Y2CQvft8TtYW\r\nYzT+/2PvzZrsuq4zwW9P55w75YDMBBIJgAAhEgQpkRQtq0TZ5Spb7S637a4qW68V5ain/hut/gn9\r\n4IiuKbq7XMNTd9sdUXbLCqvC1bIdVpsSB4kiOIEYiCEB5HCnM+ypH/ZZ++57MkFSEhUiKWzEiZu4\r\nwxn2sPZe3/7Wt2hHnUKrSThza2sL9/bvg0uB4WiEwWgIxjm0NdC2BXwCyhcOEoZrAcDA/F4kXkg1\r\neIKAfNbeW+g7giuoVoC/KmuMDydQUmIynmA6mcJZi0wpFHkOeMBo0g1zEDzoM2UqQ6aylvVHErhY\r\n9D9rl1ggVC9LbUAh2dZCKNEK5HMoJZHnGQCPspxjMhljOBxA6waTyRhlOYeUAr1egTzPwDmDNQt9\r\nRAqFTSftfr8fQ7zJWBGYW5Yl+oMBjLMoqwqeAf3hAIPhMDD9GENZVRBKIi8KCCnhvIdtwViVZeBY\r\nMEXTkHYK9UvZkNZazOfzmEQkz3NYxsC4CFk3wRBS+zBwISGkWvoMjMOz8ArOwYVEro7XYqP26Cb0\r\nSA8gMByJHUhtlWbe7Go6dAHB9Lc0rtKw6y7jJp0IaQKJWoct8witZqgxGv1eAcCjqSvMZ1NU5RxN\r\nXaGpK5TlPGzAWhfsIadEAoi9j4ZOYK5S5m9KkNCA8QyMS3ChACbgAwQCDw4wgbppwIVA0euhPxgg\r\nL3ohC7fRaLRGv1Ah+2xrh3mruxcScNQYHx4EnbpGw2jdJunx7VhS4P0cngkYBxjrYRzAhUJW9NEb\r\nDFFkgS0XQdl2DcJcGGtOcjAuA4+NhT6T5TnyokDR68M4G8IrnYX1HtZbGKdR6wpVUwLtDh6BwIvw\r\n04XOXzpuUkmCLMvQ6BqMA1KR5qgA44jt51qNOmtNsP+tLh1p0lGmWsaWdWMX7eYioJImvorgETi0\r\nCWGws+kMk8kE8/k86PUZA+cEnOMQIkeW9ZGpHgTPAC/gHUeWS0iRQ8mQlVbJDFIoSBV0HxuzC+MO\r\nUesD1HoPtX4Abfeg3T5qfQ/zKYPWBh4L/c2gS2pgdBDxjosi5tt5I0NRhGzjTjN4L2AtgzWA9wKc\r\nZ5CygJQFqlIDPiRrUTIAgHlWoMh76PcGyDKJLOPwzsKYGk1TwugKxlRt9udWe9eT7iNrGXyhKh1v\r\n9UPhQshvm8yGMnSjTdDiXNCy5K0GZ0hOkqPRZWg3wUBJdrhoz898yChM1O/2iEAZXBhniX04skBK\r\nWIrd0mX2dXf0GVskSErXROlGCBcsJmN82JH2ObAFCBifJXk2j5YB6Ay8d6jqss2Effzxf/9f/+l/\r\nOvbhfszy02r+UUmBPWIaVFUVZS3m83k7vprI8iU7/2kHyLpzY5fN8Gl/vkflUXlUji/HAT5L9sAD\r\nognrk9prWOZhuYXnHo67mAAMP8VByacC0ph81s7ZmhlwBjhYGGbC/AMGqQVg8Ij49yHlYT5Q9zvd\r\n/39U4O+jnOvHLd2kjaRfTyWV/qL1EK3R0++Rb0bnIaITYRhpVBr5dOlvGGNYW1tDr9W4Tze0vfcR\r\nJPxFLD+x5t9kMgWw3DGDA94yM1rHbxlYWCxgs3zZUKU73SnbyXsf2W/LWVzu4eRJhpWVVWxuMhwe\r\nHmJ8OIU1Qdeu3+9DygzOciiVoSwDa0ypHKPRICa5yLJsKQyx3++jKApUTbWkZdbV5guMFgnngkYd\r\nDbTwG4e6LtswK9WGEFvM51Ps74fvr61uLiWn6Cb1oIUppaWmNNfE5CNmJNUdgUSk/UYahgToEcjY\r\nNA1msxko9Iiy0kYtrKgTFtha6+vr0RE5PDzE4eEhBoMBrHCYlXPI8SE8A3q9Hop+D74MIapMtDpW\r\nnoM5F5gUFBboFzvyqYNe13UctEoRc4PE+zMo5WFMEOvf39+P7BRqx9g5E/Am1UNMmRZluWDWpSFX\r\nNCjSuk2/011Up3VMrL1Un84Yg/l8Hu93bW2tDaldXKMoisjIpL546tSpJYeP+iv1CRoLWuvAhC2K\r\nWBdbW1t48OBBBPJS0AMIdU9/p9mK6TVtC6rP1FA0TQPLFszRFKhLAbW0X3VZLczKJWCOHN60nqPm\r\nV2ITjmsrMuD0Hfpd6linDBsCF+m8VLrnPe73aWho+CxdgC2cbQLRANKeqKB1jel0DCklVstN9Pt9\r\nrK6GXa+8oJBJYhgCjBMg4FuQWYHzwIQt526pzq237bVDwo88L5YmOCkX2c37/T64c2iyBlLxlmlH\r\nk+uiH8zn8/iaZRn6/QFGo1HQMVwbQDIK+88gOQfl/LXeR61D1zJxeBt66XSwLzlYsG1YOODBJhgA\r\nDFtbW6jrOjrsZCNDYh0DYxbMNGqzLFsww1JAd2GXF0CNUjJpb9YyvwnEW+wIkj0n9rYxgfEseBH7\r\nPyXrSQGflGFNNigNQZ7X+wiZk0MyFc4k5vM5qqoOCxUjoFSDXs+i1/Px2QABeI6qnLdjSaEoFLLM\r\nBHDYNu09LzYWCMxvag94jab2YK6ClALWZrC5bYFT3moDeoAtkg1ZFxJ2hPESxsyJtZ24ITefz6Mm\r\nbQg1BgAOaz3KsobWNjKIQ5so9AcGKvMQ0qKuPLRugVXXwDUaxmTRdlA7KaUhRCsv0dho07KsAFd5\r\nALMhAQEIQXNAu7jxPOhS6hByDufiZhQPaG1kqQIPISMkn3v+wQvrj8IuO25Tobu4f9h3aI55WEkT\r\n1hznBHTP2Q1pJkmIT0NJn5GxwHh+++23W+1nFYE+2hDyrX164okn4rrq01qOW5c8Ko/Ko/KLXeI8\r\nBY9SjfHDe6/jP//d/4NdvwuT1eDMoeASaDyajxF8S9f6cU7hOTIvwbSHF0EXWegMX7nwFfx3z/42\r\nNtjmx3cDn9FCfl9d1xEXSSXRaC1KsjRp+bA1yMPKxzGnkB9I62nKV0AlXZ/T3Pww+SZgEZFC0mIA\r\n2kSrKq5jSPIjknbcIkqLcjrQWv3DpEEelaNFpjoraQfq7oR3wUEqNngID13wpsAbgW95nkNrjd3d\r\nXfArAXy6dOkSVtZWUDdNEIGsZjgpTqKfr4fwWl5jPB4DsIFlMZsAcOj3e+j3+xHUms/nbdjmBvJi\r\nDc4CDAKCKwA6dlhK8jEZz+C9AJC1WoCu3VE28N5iOg1JR/K8hywrAgOxnmJ//xBV1aBXjBYsqkR7\r\nCkBk5xEwExzvfgR/gh5YcK4AC8ZEHPRaW1RV02YWDZk6s6xAUbgWLLKYzYKOX5qIoguQOeewvr4e\r\nQ9K01jFBxe3bt3Hi1DrmdgZvg+6SYOFZBAtOVtYO0sDMYfAs6H3RrrvtaALS32m67uAskhNHTA4P\r\nISTG44Mo6EkGg/oJaQCm4FKXwdWYJmSpSp5ZMAHjDLjl8KylyPsWsGICTCyMCbeLjIyMsVYnbRgN\r\nD4UfTSaTmFSGjtXVVQz6G0v3RuCXMSY67HGwJToG9Iz0bE3T4ODgIILS586dw+ZmCAmczWaYz+fR\r\n+UnHH4F2KduN2KHOuaj1SPRsomtH3b1cHQl75JwvMVm7db9kQNp+f9y4pzolsICuS/dDdUsTYrrB\r\nQCBMv99fAu664OFxOx5dBk6qSdgFxtPxQr9NnyW9LwBRfy/LAqhxOKswGAwwna5idXWE/qBoQ/0X\r\n2X3h6R5Zck3RShAsT6B0v/SM6b1Q+5MNtdYCJsgAZFmGum6zZLXZi8PzWFhbYzyu4dxeAGx6Q6yu\r\nrqHf72PoVqFkYIEVRQGpMgiRJH7iHkXBAHA0dQln2nZ1oY5zIYNWYAs0pu3EGIu6l6LVp6S2J+ZO\r\naqfShB006QNIwCaxNP7C9xabU6E/iNZWidh/yS4H22yh9WIjQQodbSfpZxLzkADuLuicPp92pJcZ\r\nZDMAoG4yNLrCbJ5hPp+1mzP9djNriCLvt/ZNwrNwfcaJ6RhCcoUJ99/vGdjMIlMNGl219RbavKpK\r\nyFafr24kcq1QFGHzIssVAqO/FyKCM6rnBbjonEPeExBSgYsCUnHUtVpqG2sX9pzaMQVKe8UAmbJQ\r\nModUzZKEhfceda2htYXWtu2n5dLiVvYkpJVL7SplFjJBs5aRwFo2JgTanCxRszAdI0vjhbXt5Zc3\r\nI4/+/WFJORbzWvsOIguvtQ8p6JbaH9rASO1Veu2PsihPF83d9Rh93n2f+m66EP+kly7w17TrwOFw\r\niOeee27pedPNqxs3buDatWu4dOnS0u+X6pszzOsar1+9gZwPcflzJ3H33hSv3HkfX7lwEZxN8fI7\r\nB3j28bPYWmWYG4Z37s6x1ePYPtGH9xwzY/Da29exIhQuXjyLN2/fx4PDfTxz8TFsDwowrzGvHV6+\r\ndgvODPHUpXXcvn4TU7uGL10aIPcA+E8GxNKzl2WJV155BbPZDJcuXcLZs2eXnjeNIEnX4rTxc/36\r\ndVy+fDl+z1qLe/fu4dVXX0W/38fly5chpcR4PMaZM2eOJHyj+TpNAkZOXNr/P62lO06oH167dg0X\r\nL16MrBQiRKRrD1rPX716FTs7OxiNRq0tW05KY4zBtWvX8N577+GLX/wi+v0+vvvd72JnZwfnzp3D\r\na6+9hvX1dTz55JMwxuD27duo6xqf+9znAATn+uDgAN///vfx9NNPY2trCy+99BL6/T6++MUvHukH\r\nv6hsmE9b+bCxw8AAo/Anb/wp/re3/hU211eQ6QIlZ5i7CQpmwb1CySfI7RoM24PlfSgHcObgoaA9\r\nwKSHn1mM8hEaX6MRNeAkemYILabQTiCzDhsbp1EgRw8rOFQ3Mb7fwJYl9tZmGJhRuCOroazFK/P/\r\nD7968R9gY/gI/HtY8fDw3oA5iYYreG8wf+ddoCdQDAbINjYRpPIdnG8QohYNmM+CzMmHDOOfte1N\r\n1/VETko3yVPMg6StgEUi0fQ+07mEPkvXSnQ9AkVTXzL9/JFt++mK+MpXfuUbxAIhMCJ1llLUFVg4\r\n8wQ2qEwssQFSRxtYAB4p2JGGv9T1HHVVgTOOQT9kSm1a0MQYg0F/NS5kiHVIToLWOsabE1IcNNds\r\nYOrJDDJb1ihMJ3jOGawNGWCDk9GGCjvfhh5ZpIt9Cg1lDKiqEoeHBxgNV6OzmrLLUoS6e136O4iv\r\n16CwMroG5wwUliZlSKeehqSl2j5dh4JK6rimoXQEtBCI0RsuaLTd++uCJ10HhvOg10QlZXfQAnE0\r\nGi3dV8o8Y4yhrsukbRchzARypPeROk1RvF4bSCFa2juWQn4ZACVlmDg9IiuEM9YmDBEoW826tF+n\r\nACSxMb33MfyoTn6zvr61tHNDzi/pHHQTs6TfpTojQI/6NBDChSnhRNeZSYG4XC5CJOmg7yyzdRcg\r\nPNW/9x6y1bjsgnwpC/W4vkXtmCu5VGfpd6hdj6vbrsPcDYejIw057bZTCpYdBxCndZtqHqZ1kzo4\r\nXaec+ll67vQazjlMZzXqukGjNZpWKiEAH6xlcBbwPtEBA4PzQVohSAIs31+3HrvgRjqOhBAYDnJI\r\nKcBFSHQQgCQGMAfGPFQmwRgPYa+tTbPWQDcadV1BG4u6rGBNyHrbrSfAwsHCMw8pZMi+LRhcKxXL\r\nkvrpAq3Up9NFQ57nSwxwdPpn2j7pe/T7FAikPtude9LvdPtFtx4pG2x6zVRblRJkpGBsen3P2lDT\r\nNitrCBNe2OcAmtWo67rdDNCtfqwJmeIl9YqgqeodYKyN2rcBsA8yA5nK2/lnkQE2yA6YIGthmqTO\r\ngs0Loa1Uh7RgotBbDqtN0j5hfgsZohWyLNjfrm5d2v9VxkHhp4IHGQgpOIQM0QMcIQw+1C3dp4U2\r\nBqaVXXCWkvCgfW4DoxdJV2ihJ6RoQ3pZa8o9QrwRjt6fA1JtwPDqj3zPQcT5/2FH6C5H/07B/O7Y\r\npTpKN3zSPtS1Xw870nulcpx96M6PaR/9oOM//ft/84kI++2uj4wxuH//Pnq9XmThL1jDC6kHYwwO\r\nDw+xvb195JxUJ1VV4fqtu/jWy+/hR/fnUJnEN//uTZSG4eWbd3FmZxvf+u4V9IYK50YjXL27j//5\r\n//xjrG9u4ImtTZSNwX956x385VvXcPtwipsHJf7ujXdQWoF3rryLLzz1OJzheFCXeOv9Xfzw5i3M\r\nDycoegX+/KVX8ctPX4ASWWCmPqSk7fewMh6P8ad/+qe4ePEiTp06hatXr+Ktt95C0zQYDAa4cuUK\r\ndnd3YYzBj370I2RZhjfeeAPvvPNOBO2KosCrr76Kuq4xGAzw9ttv491338X58+fxne98BydPnsR8\r\nPsfe3h7u3bsH5xxeffVV9HpBg/av//qvkec5vv3tb+POnTsRlPoo9/9pLLPZDH/2Z3+Goijw1ltv\r\nYTKZoNfr4datW+j1erh27RoODw/x2muvYXt7G4eHh+j3+3j99dexu7uL9fV1vPnmm7hx4wa2t7fR\r\nNA2+973vod/v42/+5m8wHo8xmUzw7rvvYmdnB7u7u7hy5Qq+8IUvYDab4Y/+6I9w/fp1fPnLXwYQ\r\nEmB985vfRFEU+MEPfoDJZIJbt27h8PAQxhicOnXqoZsLn8X2+ayXdFw1vsZ33/t/cXXyDgwEXrz4\r\nIv7emecwuz/FjHkMxQqeUk/gPqbYUefw2PAxMMVwwp5HISSkNji9chaD4RDTpkImFFTew0ZvFZZN\r\ncVaew+bGSfz65V/F/MEcp1d38OznnsNsbw8nhifx60//fUzuNICssc12IDMOkXNkeojff/b3sabW\r\nf8619QkuHq2iooGzNZzkyA7vY/oXfwF1bgPDs4+j1BwcAsJnkJkEIOBZWEtyxnGsGOPPuKTAW+rT\r\nVVWFmzdvYjweR/ITzTHEwuecR/u2traG2WwW/06JPYyxmDgtXfOkQF93fZO+/qKX7lrxoxbxu7/z\r\n339jdXUVw+GwzVaYJYv/EKIkZci+ByA6SIHBoaEkh+Acggtw1gpYex/BlTwL+m3e+aj3E/7vQoZC\r\nZrG/v4/5vMRgMMCJEyciW66qKnCoBXgiFBgQtKasAwPQ6AZKZRgMhpFdUtd17HxZvliUkwMQHLPQ\r\nsZp6wT5JnZqUrZf+PRqNUBQhE+d4PIYxAbEeDAZR3JKQbQJR0rBJ0vRTSmEwGMDDLoFGKauEcx4S\r\nbrTP3w2pXmZg2uikpuAYFTrHYDCISUam0ylm1Wxpp5AYG71eD6urq5G51mUY0PXkElDglxwd52zU\r\n0EvvN4CcQaMr6DQtwpyJAUiAZQpKURgoMRtC/SpIGQ7W2R4hJlCLLslxjgAAIABJREFU+S0BReTw\r\nWe+S+1o4YsTaIsOUAqfUVvP5HL18BYILDPoDZFnQoLQmMI/yLEdVV/G+6Xm6wBwxuVJQkEBypVRM\r\nJiCEQFmWMfOzECIkLhECWaKTxhCAoEihZgvGm2uNuRACSkpkvSIadAL8qa9Q3z8OuKa/cyGilhcd\r\nggcwRHAOo3X8W4pwr2QvpJBRcD+tk+61uuAL9QFiHaTlOCf4OMecfpcyzI57TcdYFwwHAOczWOtR\r\nVzXmsxKz2Rx13cBaD6N9ADzacEnVsuq8Rwt4eBRFgVRnrn3y9jqBJZteM3XcpZTIlQfnbXtLDiUF\r\nhKCwTo9+0Y+allIEtiHzgNF1SNxQ1jCNDtlWfdihdM7Bo9W4Yx7ggJACIpNgksPykCWW5QySybgh\r\nwdgyIynYwEXbpO0WX9tn6varNHlRd+MpPcgudCdAaisCDB8GflBocHrP6eZUyjaMIJRYbHi5dmMm\r\nmJMUYAr2MCTpCIBf02g0Td0eDcpqDs5FC0DSL0NIcBhTArzVsVMqQ54XreZpDiXzyKBnLLSX8yF7\r\nbBjrAWC2rmn1bAHa4OJMhoMr6Goa2i7ZYBKcQUqBTEnAMygp40EbLTSHGzdrF4itrIMSUC1wmGcF\r\nhGzD3EWY92leMFYHTWHBI/AXxjhg25B12kRZ3hgASGuIcwZn6mjvgt1hS+G/4T0s2SfKBMwZg+dJ\r\nQqnOJsNxgEZ34yJl/h23AXLshhlbZhunNofu5TjA/7j78H6xQUmalIwt61fS38cd/+Hf/etPBPjX\r\nLQT+Ecs0DZOi/tA0TZwPT58+HeQQk+ZK54uVtVVsnD6F9+/t4tJ6jhv7B/iHzz6JN29dxYuPb+P+\r\neI5h3sPgRB9/+cM34fkQp09sYmY0rt3bw3hvjJ3N09gsBjh8sAcrOe4fPMC5cztovMeNu+/j4vYO\r\nrMtw5doNfPnxizi9uYYfvf8AX734GJR6uHbkRynee8xmM3zve9/D6uoqtra28M1vfhPr6+t4+eWX\r\nMZlM8M1vfhM3btyIgKAQAq+//jrKssS1a9dw7949vPPOO3jppZdw/fp1PP300xiPx2CM4fnnn8d7\r\n772Hmzdv4tatW3jjjTdw+vRp/Pmf/zlu3ryJH/zgB7hx4wZ2dnaQZRnu3buHEydO4OzZs58J4I/G\r\nKY1Leh6tNd588008ePAA4/EY9+7dQ1VVeP3113H37l28//77ePvtt9Hr9XDlyhVcv34dh4eHuH79\r\nOi5cuID33nsPf/zHfxyinDjHhQsXcO7cOdy5cwej0Qiz2QxPPvkkqqqKUi93797Fk08+iddeew1N\r\n02BzcxM7Ozu4cuUKVlZW8IMf/AC/9mu/hmvXri3dq3MOjz/+OACANHTTzz/tbfQLXRgwtgf4r+99\r\nE2+O34BUfVwePYMvrj6DC9ufg7UC//Cxv4+nzjyHE2wNL5z6Is6evoh/cOFXcXH7SezkZ9EvVvFP\r\nLn4dT2w8hqv77yOXDn03wD+9/Hu4ff8Av37p18FzhS+sfx5VZXB27Sx8w3BqsAELgV/aehY7m+fh\r\nfIUXn/wqXr/zOiyATAzx+5f+MdbyEz/vWvpEF2YNwDQYz2DHDKNzp+BdCfEf/wIYZVCPnQQTHkxS\r\nToV2ZcZYWGf+HMZvGtEHLCILdnd3sbu7izzPce/ePayuruLOnTuwNiQ73d3djZEit2/fjmG6FMm2\r\nu7sLAHEj5f79+9Hn7/pwXZv8qCyXnxT8k0899VR0tChckPTorLV47733lj6n71BYJ4FTdBPEtKEF\r\nWlEUS/HdBFoQsCIyoK4b3L9/H++99x5GoxE2NjZw4sQJzKZl1CHSWmM0XMHa2hoYY9jf3w/6RN4l\r\noaWLLDPOuRCe12ZVXcSOL0IWOF8k1Ui1pMixdi5oqlGYbJ7nMcvvcDiMyRPG43E8TwoUEXCS6pKl\r\nbBYCWAhII7YjgYMpm4wxFuuSRC/TXfC0zRhjS3WSlsFggJ2dnbg4eOv6m5ToGdpqaKvBBEN/2Eff\r\n99udBw/PPFz7z8ODS45c5fC1XmKOUd3TIj0NFUvDvciorKysoK7rGFJLWoYhIydrNR8XgEFqANJ6\r\npdfUUSTAi/rmcYsgqv+U2ZjW2crKCqy1sb/SbgaF6b711lvY3t7GuXPnYqIaxlgMu021+mKoW6Lb\r\nRwkd8jwHFyHrsjEGe/v7KKsKUqkQXjwYACwkAKlbgNQ6F3Q3WjAiDftWKmTppazTpLmWgiXee3gl\r\nlv6fhvCkDm1354f6MAEzKYslBbvp+VODnjJkjbPxOinQSOel5CTEREwngm57Hucop0A8PWN6D8dN\r\nLOn/u+Bn9zdChh2rRhtU9QzzqkTVaNSNxXA4x97BAwwGA6ytrbTt2At9WSnIbLl/Ul0TGB6Yg3m8\r\npxSQipOxtfBewDkBLnKoTLZJGCSaJoPRHFJqcM4gJYXcmtZeNMiaHkpbwtYa8+kMg/EAKytD9EdD\r\nFEWBvBf6quqFLM8MHHAcOVrt0v0y1gnV87IWyFEtVBqX1loMh8MIilOoOZ0jZQJTHVA7dtuhC+Cn\r\n4DqND9IpSW2Ebo7qQdIiJW3v7u/Jrpe6jkAgsT0ZYxBeBZvpQj+ynsNYC20bVE0FOZuAcwojE1Fn\r\nNGjV5gEolgLGzlvdVQIxFaQskGVFWzcWIUlXCK911oXEJrVF0whMZ4HdmiXSFZkqQkgwX4ypCGa3\r\n447astfrLY0j2vyguUrrGpxrSJkBzEEwGZKCcYGQs0bBOUAZDtOE8F/dEMCqMZ7OFvUrcxSFRlEE\r\neQIpJCazWaz7TDlIaUB6gYwxwLnjx7FvNxlj2C71ouX5MGXudftZ1y4cB3KktozORd+lejzut2mf\r\nS7/ftTXHOe/Lr2LpftPf0jzbtYuf5EV017aXZRntAoGtKUjTNE1kDaR1uDRfeY/7e/v4kz//Dp5+\r\n6gs4sbaBaXMFt+7dR64NJM/Q6BKKOUzGU1x/9yr2G46bNzl2Rk+il0lkiuH9B4fIAUApzA6nOHnq\r\nDO7fn+Cx7dPg2QD3JjMcVBPkA4m9wz1sbvZhUIPlEv4hWTR/nCKEwObmJr785S/DOYfRaITLly/j\r\n+vXruHv3LjY3N/HMM8/g7t27OH36NIQQWF9fx9raGm7evBnH7enTp/HMM8+g1+uhLMsoDTKZTHDh\r\nwgXcvn0bGxsbOH/+PL797W/j8ccfx8bGBt58802cP38ew+EQV65cWWqnz4Jzlo7ZdOOc/IXPf/7z\r\nePDgAYQQOHXqFL7zne/gD/7gD/Dtb38b29vbeOmll9Dr9TAej7G6uorz58/j1q1bKIoCL7zwAnZ2\r\ndlBVFV566SVcvXoVX//61/Gtb30L9+7di0xM0vHWWuPdd9/FnTt3wBjDV7/6VcxmM5RlkE3Y3d3F\r\nfD7Hb/7mb+KVV17BK6+8gt/4jd+I4XTdtfFnoX1+0UuPDdHL1mC0BfczNKrEX99+BbNqggsXTkE6\r\n4D+/9Cf4R1/+Gup6ju+88R187fSv4vvT1/Ds1rN4au0SNJMYT6d44cyzOCUH+Ot330TGhrCixlCt\r\nY7z3Du41e1AyB+c5IBlyt4Jy7zbu7u/hlduv47d+6XfxowevY2ImUKwHs65RuOLDH+AXvDRCwVsJ\r\nIQzAJ2j8ClYvPY/Z7xWY37mB7A9fhb90FsOvfglufQuAgnAAkWo+CQlVUhAwRFmaiM+UZYkbN24A\r\nALa2trC7u4sTJ07g4OAAAHD69GncuXMHWmtsbGzgxo0bEcdJCVFU0nXOwzZBH5WfvIh/9s/++Tco\r\ntGI0GmF1dRUnTpzA1tYWTp48ieFwiJMnT2JjYwNra2sYjUYYDocYDIJoPOMMvf4ARa8PlWUA43At\r\nxRWMo9EaHgAXYQFknYd1PmYtzYsAEhDAxjnH6so6VkarAXirasznoZPlRY68yEPmSGchlcJ8Pm8X\r\nuke1vbTWbfz8InwvJCtZhN5ovexsAouFcxqOmTLP6BpKKczn1RJYQuyrLjslZQISm2Q+n0OIo4L2\r\n5CinoWtdsIPOnTrLKRCTMl7oGUhQczgcRs2m8XQMJRWcdWjqJrDWWGBuWWMx6A9iJikpJJRUEFxE\r\nNifzywsM0vNzbiGSTww8IULIGt170OtaOEwpKEBGJRUWTcFMAj4ZE0vvd0Or0pI6BbF9pFj6HdVv\r\nCsKkrD36LtV3VQVWj7UGjLPIeuGcwbesQqp/YgxSPyAwlCHsMFtjAitOCDhrUc7nAYTwHkWeo1cU\r\nyBKdQO89vG3vmzFwYpm2QKmUEmVZxh0VtM6TpsxMUoakXlh2CNP+tkhQsOyYxhBeuPbaISxPSNm+\r\nCkglAQZIJUN2aLTaFwAYDyL9BDZ2+3rqGHfZffRZCgyl956OvVRHrtvGXSbtw/5O+0x3QrJWgjEX\r\nd+WscTC6QVPXKOcVmqbEdDLFdDJDOS/bjLvBQDqLI4yQlrAUwYoU0KVCdRU2GWowziBlYMjkRQGV\r\nZVBZABiHw1VIpUJCBMEhlYKQPGY17xdDwId7rpsaxjRt2KVGXc1hWmkBLiQ4Z7AusNQCdUpAuqOJ\r\nOYLNA4CF3e2ydsnejlpGawrwH9ffUsZ5CsB12yXtH1RX3SNtQymzI/0gBQtpQyUFDdN7qXUFYs4F\r\nm2jhXWClMwZYY9vPQhi2d0F3T+saTVOhaUybIKSKiylrF+EOTVPBWQpjbRlvLGioSqEgMxsZpaxl\r\nj8aaYB5V2bTJX0IoMSWE8W3YbL+XxfayZLt9S2JkDFyEjN8hK23oQ4xzMO4hJIfzdVufxC52MYzX\r\nWouiVwQmYcs6JWah4IDgHFVtQgSA87HPh/pi8M4BnsMaB91oNJVGUzfQTZinjHaQGQcY5egGnAec\r\nDzbGM4Rs5UvpcxnAwjOErOUL8C4tx7H4unYgZWqn4Fs6PquqArA8JwOI9fNhDnlqr+jc6f0olQWg\r\nNQlFDhnHg4QJsT3pSD9jjOPf/+//8hPB/OvaN2MM9vb24JyLm53pOKTXsizhnMPW1lZIVJSwj6ld\r\nddPg3v4B3r21j9xa9PIBzp45iyvvXMVXn/s81ldWYDzH5lDi0ulTeO6ZS8hGfVw8tY5funAOp9ZH\r\nGKwUuH7rFtZ6Av/gV56HcA7u8AAvXn4Cz17Ywum1sIn5yuuvYn3YxwtPXUY/55jVFS5ub0AxygL/\r\nk9eP1hrXr1/HW2+9heFwGBmAAPDcc8+hqoL+7OnTp7G1tYXz58/jypUruHLlCk6fPo0nn3wSzz77\r\nLA4ODjAYDHDu3Dl47/Hqq6/i/v37eP7553H27Fl477G1tYXHHnsMGxsbODg4wLlz53DhwgX87d/+\r\nLbIsw8mTJ7G/v48LFy4c24aftpLOselGgLUWs9kM58+fx/r6etDJHQ5x5swZDAYDXLp0CVVV4Z13\r\n3sHXvvY1cM5x+fJl3Lp1C9evX8fzzz8fWS9PPPEEAOCv/uqvIKXE/fv3cenSJVy9ehXr6+t4/vnn\r\no6bg+fPncfnyZZw/fx6rq6t46qmncO7cuSgF8/3vfz+21/vvv4+NjQ28+OKLR6J90mf7NLfPL3zx\r\ngDYG/+Xaf8Xrez9Ev1fgxHATXOaoygZrbIDaaTz3+Bfw1t134bXAfD7BicEq7lUltofruHL/Ctb7\r\nq7g2uYK/vPV9vHr7e5jlM3x+9ATOnrmIddHHlbtv4POnn8LMjeGthmMWQje4eXATW4+dxRu3ruA3\r\nTv83+Pa738L+bAzmGXKX4Z9f/AMU/f7Pu5Y+uYUxOACCM2hTw1mLXl6gubsHM58i9xb7b19H2c8w\r\nuPgY2GAEBhG2KlnrL/0cxm93852kuO7fv488z/H000/jzp07ODg4gFIKs9kMWusoBzGdTjGZTDAc\r\nDjEajXB4eAilFJ544gncuXMHnPOYs4AxhvX19SMRYMCne275WZeflPnH/u2/+XfBTUsmiHSiCADZ\r\nQiOOkg8Q06ysy8jwoe+UZRkZaXfv3o1suBTYiovXzEYUua5rbG/v4IUXXsDTTz+N1dVVXL9+E/t7\r\nh/De4+TJk1hbW0NVVTg8PITWGuODSQRS+oMiMp6m0ylmsxmcayKwSSyaRlcxlHA2LVHXNcqyjIL0\r\n6UK+qkxkLFJHpdBZpRRu3rgV2SWj0QgnTpzAcDiMDm66UKUOTtTXsiwxHPUjk4c05ShkQymFfmtQ\r\nU8ZYCkQdHu7HaxBYQyHIeZ7HgUVh1EKIuJieTqf4/ivfw3g8xt7eXsyqNxwOIzPtl3/5lwEsmB8p\r\nmBIW1tXSZ6lzTt+hbMSUgTm9/8nkIDpR6fNzHsLFtre30ev1sLKygsFgEBllMbEKX2gn0fuplkD6\r\nd8oYigOgTVZATJYumEp1SyFGk8kE+/v72Nvbw3Q6hRT9GJ67tbUVE3UQk2k8nkY2LbFeqQ9lWYam\r\nDGNmOp3GPkb3rbVGURRYX1/Hzs4OTp06BaUUJpMJ9vb2ov4g9QsCTlJH9tq1a7F+SXPBGIOiKELf\r\nUFlsHzLsaQj82traUvsuwjnD59bMj4B3KRMlhMabyDoguxAXpn6ZKdoFeVLGZQogRfAxcfTSkrLM\r\nUhZPFxxM76XLoElZu8edO3w3j469x3LoPecceS5jhmeyQ+vr61hbXwn/XxtFoCAFPel+QwKI4/UQ\r\nvfdwdhafnzEG+AVbOGSnVSjLEtPpNNps3SyS0WQ+6FLOqmD/vPfoDfogKQiRB6mA1dVV9Ic9MNmy\r\nDnkAyfoyi/p4aQKPReKH5ghQm34+6vVjuHnKvCN5BGL9pJsbKchIdirt8+n47TKS075lrQVrZSVS\r\nQJGuwRjDZDJZ6jepfqoQAkwgspopjJjmTcEVjFkw07pMmQBz5fF50j4S7Xc/j3NBV1c2gLL1EnM8\r\nHIuEOrNp1T6PjHaiKIq4+bM6GrR1QcxMtzSWluyhp7lxsUl2cHgvbtoYY+Btu8nSNsfqemDqI9kM\r\nso2JdnreLDQ9CXgNdRyeO8/6S23LY2KU8LqysRL/HxZAbd20jEupEiDZE3C2ANwtHs6MS0HB49ow\r\nADJHM5unYeX7+/tL9hnA0nyTJjRKz9/d4Ohel/5WMl+S/DiO4fNBNvK3vvb8x7Kq9t4XAMqf4vdL\r\nfzdNgzfffBMAsLGxEe1DCm7QnFaWJb70pS8F6QLBj7QnEDKXe8bAvYcHA7eAlh4ZDLwHmFcA8/DQ\r\nqK0AlwKZtwDCZjZnBvAKoYMbOKngPYdwFhBBe9LbAo1AYAd6DxgDqyQEHJiVPxVzo1s/tDlM/083\r\nUGkNMJ1O8d3vfhdXr17Fb/3Wb0WwL/0tfT+t0y4LNrWjlAite91Pu3OW1gvZu5RhT/8Hjn/WNPNk\r\nes7j2oXORZ9RnaZ1n36/O2+k95L+Pu0jXRve3cx4VD5dxXuPqZ3gD7/3h/hXf/cvgbzBADm442BM\r\nwHoOyzTWijXcNbsYmQGmvEbPMziWQ3qDpqkwXN1Eg0PoOUNWOYwHHhvVCHzVw0wV7qgHOOM3MM0q\r\noHbwTEG6CpViWMMQK8M1/OOd38b/+sN/C+c8GnaIZzZewB/+3r/GDj/3866mT2zx3gNGA8LAGAZn\r\nFJSrcO1P/g/kL18FvvYrcC88DWMsTp06g1xKwDGAe9h2a1Oxo77Ix36PnUKyX/SZlDL4C7MZ3nrr\r\nrYg1KKWwv78fo5XOnDmD8Xgc/VNiU9O6e3t7G7u7u1hbW8OtW7ewv7+Pc+fO4dy5c3Etnvqyj2zX\r\nw0tX4u2jFpmGqnQLASpCiJgtdnNzc6mTzOoAxB0cHKCqAhBEeniTyQSj1TU0TRMBDm8drLOAbzVq\r\npMVoNEJ/NMRkMsFkPsN7N65jfXMDg5URNk5uwDGH+/f2cOfeHUCExWB/1G/BF4HxeIzD8T7qJks0\r\nAzPUdYnxuIFzgPcMg0GrscUknDWoa43RygBZLRE2zx1Qu8i2AoIgPDwHg4A1ASz0jkFwhUwV2Nra\r\nwt7eXnx+cmBILy0Fn9J6JUaV0RacSSiVgRUC3jEwhDAM3VgYtXDkQ9hx0GyyrbNFmWkJDKNQ7HSw\r\nDYfDGEY7n88xmUyQ5zlWVlbw5S/9Pdy4cQNvvPEGZpM5GqthcwfHw6Lvh6+9jjNnzkQhYQoRYSy0\r\no+Ct7hrnoZ6kAGcLR5qMxXxWwTsGKTIoyWG0W0rYQt8lh4ee5/bt21hbW4uLHTII0eHLFmGRjDFI\r\nxiASg1FNJkvMSga07JsWTGl0dLxJQysFAre3t+PuRWBaqE4iEoHpdIrpbAbGLYqeRJZzrKysQGV8\r\niblFyTyIsdA0DQqhMBoM0S96ETw3xqDIcowGw+DgTKa4c+s2BOM4efIkVoYjCMYx7A9w8+5teMag\r\nnYU1C7YoOcendk5HXaTc96CKPDqf87qCmZbo9/stOJAthehbazCbLcI6g1MaDttqi4Gx4Fj5wGqK\r\nICsPCVh6gwAuyKaBqGuILgDYZo+lcZIuigkoPw4coOcjGYB0cZwytFKgpFs+bGI5jhHU/a0QFow5\r\n+BYY4cyDt5p7nAN1VQF5Ds4YxlpjfHiI+/fuYWVlBaPRAKsbmxiNRlhbW0Ov10NIOER9i4PzZc0w\r\nGis01lU+WDj/NgjHCaFQ9MN4b5oGvr2ZrCjaRBM6gn+z/UNkfYmsP0JVKcxnFar5DLpucLh/AC4Z\r\npMojy2RlZQWqCJmB+1k/aMUxQAoGwX0EVDMVrlPV43h/dM/kZKXAHb1HYyvLMlRVFRNuEIBOICMx\r\naLuh3F3mII25lNFHjFBrLThbZlamcgrWWvR6vWiT6DMKRWeMYTjsw2oD0+h2U6Pd2HAMnusWkG3Z\r\nnMmz0v1xxeAsYB2DdTWMrdDoOaazvN2IWYFSCkXej5snAWiUrU0J2jC5YsiUhckb1HWZJB6S8J7s\r\nsYH1DebVBFVD4/kCAEBK3m4stQx5ZyLb3loLZgy0DmMcWDi1W6d2FqEfVY1G13BmAdQe7h8Eu9ky\r\n/yQXEIqj17Y9m6ebLxrWNHBWw7dAT1OXi7DfLIMQHowZGFNBaw82Z1Aqb8OEiRXN2/HHYRzJOSCw\r\nJ4MFjm3e6NkSszvdeKE5tAu6pf1FtmH/KWifsvoorJpsamz3BEimMZFuUJHt6u6Ad+1PSOBjI1uU\r\ndG+7QDYBo+l4e5ht+yQUGq+0lqH6Sccz2ZoIhPCFrU/nA8aCzqMFwAmV5gyiZUoGcDrkfeaMI5cC\r\nBh7MG3ivwEWou8CIFfBCoHQWOQ/MUoeQdka0dt97g4pJ9FRgu9cwUELi43LdUoA43eRMIxM45zED\r\n7IsvvhjDqbpr0a6DldpO6qc054TNqKMJstJ6/jSXdK3QBfoexqgjph593jQN8jyP9ZGO6+PqkM7d\r\nBXO7TI40+oUIGTRX0vm6gB+120/CCnlUPnll4If4F1/6F/jy+a+g0jWkdsgYQ+MB6yUEPJxyMI1H\r\nAQs/GsLM5pBOwHAGKIeslMgEQyU0wDQ0c+g3IzQeyFGhzBx6GpizGrnogZscPpuibhhq5vHk1pPo\r\n1RkunvkCskZAFSV2hk9im539eVfPJ7/IMF7BNMZ8DPsX30H+xjVs/o//A/bMOur5DKNeBuVCksp2\r\nrxIysvp/voX8DsYY1tbW8MILLyxtkGxvb8doGe99TNSVkkoARFLH6dOnl0hNw+Ewrlu6NuuzML98\r\n0opkEU1eZLLzFPYDDyHSRqBF8GICXFlZg1I5BoOQ2p4ajdggk8kE0+kUh4eHmE6n0ekk9qDqLSZP\r\nlRXB8TIGd3d3keU5Njc2sLm5Cc45dnd38WDvHopeBiVzlGUJIRiUEpAyTK4BgLTw3iLLJIqi3wKS\r\nGko17Q58Bildu2u/EMmmZ6Y+tnDAGYRYZH0MGksGWpvIziOwajabIcsyrKysxAw4wAKUoHOQ86u1\r\nASWlCGFyLRDIeAsSVS04VUAIgbpu4JxvM2bmoHUELQ5S5wMI2cqstZFp1uv14j3Q6+bmJp544glw\r\nznHnzh0cHh5GJ5m0ZXq9XnSE8jyPICPnEox5ALYFhmxblwyAR1U17eJHwDmgLGsAvBXy7sGjinVN\r\ndUmghXMuAsneBxba2tpa3GlgjMGIJNmJdzH6KQICWbvjyTw8c4vQ0xZU8eZo2HVgbAVQcTKZRCYr\r\nvU/6BGEhFw7GHKpqhv39+8hzCe8Ner0eimK4ZCAJzCIwpOirJcCYnMTUOSNWJFGmQ5IIHhlZFDII\r\nIPY5cgiKooj9ghaN1BfrukamehGwJ1CEnOE0oQY5DWk4ufcezi8z0uha9BuyBwTspvUQQONlJzQN\r\nzaTw+JRxSu1DR1UtEqqkbMB0wd09uvf4sB3z4/5Pv6XfLZh5CwZRuIegN0Z9k75vrUZdl3DOwJgG\r\nZeNRzhs4y9DvL/Qze70esl6O4VDG9k1DpGMdcREAR3Y0MUYYqyHUTwiJLNMR2Aq2RwOmacFcC+kE\r\ncktJaQjkEKjKEs54MM/RVAZ5Hli8dmQxXBsBPgBQFJrAmYc1APxCb4+OCFoSyMfFUrum7NVUd4/G\r\nBwHCKUuQgF4K00/Zcd3+kjI+rbUQPF9inALLGY9Ju5P6VHc80PNoHXTvssy2fTG0VVEsMxNDH1w4\r\nmUrSew7OO9S1Df2iDPdQzkNb9fuBCTkcDtHvD+I4dyaHkMRmBZR0ULIHUwRN3v2DW/Bo5wRn4Bwl\r\nAbHwsKjKnbjY0rltwcWQaY6zZTab9+3Obcqm5T1wISAkg1UeyntYbiLTL+NiAZ5qA8c1FGdgQkDy\r\nBQud+iPZxbIM2ldFT8F5ATAFMI2MZa19ChIS0/kMShk0RkMKys7egoGZgjUsbDQ6B3CEzbV2svfg\r\nCLlLHKwz8EgAN+bBOCDkMrs4BU8YY9CNWfp/10581LIM8HOsrfQhBENZ1jg4nMXESN3zOr+cRThd\r\nNKc6m8cBOw8DFn/eheqYZCu6zgCNc9KpO3GiFZoPFL2ldlj8HdYjzHs4a6BlBg6LQMezMCIE78Ny\r\nOAlY7wAegOSQUoVDMgAI/STnATqEB5gzUCJcI3MOsKZlbnjAOeRS4qP3hIfXSdruBPbRK9VJ12na\r\n2Ng4cq6U1dYFA9PrdUHGz3JJ67cLrALLY47ec87FeYwK6U8kvMCvAAAgAElEQVR2z9uty26dHvc9\r\nev+4du1et9s/uhEgvwht+FkuDAzgwCls49SJkNncMQ8rNBg8JBTgOOA0vJRgaOAbCWw5MKcAeIB7\r\nQLdZYyVgYCEhYKyBFB5wCoZ7cK/hmIQAB9MejZwhwzCQYxoOnzuc2jiPwitwa+DAwBzDx7a78Vks\r\nwSEArAKYhKgrZIMNjL7+dRzKAWb397DSl9g4MYCHRpyv0BJNPgHgX2o/mqaJ5CL6jHMek60CC+1U\r\nWseTD8o5jz500zTY3t7GmTNnlnzVVFKla9selY+nSEYJHfzDFqvLu1TdxQI5ZpStlMKJFmGCiGwz\r\nCj2rqnkMs62baQReiJECANNxiavvXIfkOc6dO4dM9bG/N8F0MkdVGqhRD96zwHIp+gB4+3sNawOL\r\nrCiGMAZxFz8AgEEnTgiFLAv7srTQzPMCAFvKMtnrZ3GhyZxrwxQt6jpoPa2urkZ2yGw2iyBNGqLb\r\nDYdNnXPq2M4F0CzLFBgD6prqo4FoMz5671DXGsZoCMGR54EBEphCJuxKe9c68wHmOjycQGvbhkuF\r\ncCopF46W1jomlCBndnd3dynr7oMHD8AYi6G3x4Er1BfSfgGEmP8YFumXM7oyxsB4CJ1qf4U870EI\r\nFUVEtbYoyxp1reNzBOH6VjvRa3AwCBbqpwuAKCEXwE/6GeNgnMFhGfxLk0oAwMHBQQzpSIGJ1dXV\r\ntj1tbMuyrHBwcAjGgobW6uoqVlcKKCWg1LANay6XgJyU8UbARF3XS6G1xKzZ39+PbM8TJ05gfX0d\r\nJwWL90iAKbAAmwlkDkBEEUE+an8lQ9gdAZwUetjv95FlWQwFpSMNT/U+aGulYWdh8yAgsM55ZFnR\r\n9nmBmFkGIVTBOQePZVo5LXKpLy45um6hAUhjlOqMJpoUAEwnkBRIPQ4MTPttGiLTdZipXmkx3Q2D\r\np+8uwFIGwLVgn4lAIP32YFIFxvN0jMFgEEPCnV8F40Ch+wiPwMHYIqlA6vCFZ+RgLNUfC+OpKIrY\r\ndxdh2z6yWxWjDNYGWaZRFBq6se140xDCo2k0ykpjb99gXk6hZI6VldXAMPMNiqJA0SZWCnp2Birj\r\nkCqHNv0lJma4/gK8427ZMSEWA4VKk6NKgHTKIvTeo6wqWGJVaY1G66U+yjkH90FjNoKmvM1QLyUE\r\nky14R1qwHpSBPNgE14YbLtiCab+h+Sr0lWoJOA8g5OBYuxj6AGBMlQCC7fd8AF3DJkgI6ZrNe5jN\r\nZpjNZhgOR+j3hzETqjcSjKnwmzbZhkQGxmqMRmFTTpsaWmfQuoZ3YcHvvMFkfjMCvbnuwbohnB+A\r\nt8xCZQUCEMihZAbBkegGejABcOagPAPzHIbn8MZGWwse7IyvazSNh3cG3jGokDAY1pp23ZBB5SqG\r\nfJdlCaMNdMNhmIPRDkY5OAtkWQDxArMvMA11XYFCgvOsANwArGXBhkW0w2JvKGjYMsYgpApZrh0C\r\nqImO1gxfMIAYx5LGLW1wdTcUfpyS2hTGGLZODPG5x7eh5MKTarTBO+/dwfu3945cI+2TZKvoNQV4\r\ngKPaqZ8kRlAKstC64+zZs5hOp3j55ZeXxnO6htrZ2cFjjz0WTsKXgZPk5MHf9QCYAJMCGQOAoF0M\r\nCEhyzgQHByCZAHzQUhQshIwzBnjIMIOFpm/zx7TMq/ZaXhbhbS4h2yr+OFy3tI5ovZKGf3bbM90E\r\nod+nv30YuJVeq3vdD7qvz1L5IFAUOJ6dR58/DERMx2IX5Ou+l16b1iMf1b58EGD5qHx6C+NtG/KF\r\n6eGsZdC3b3ge/Ef4HOEjAUbCcWCAavsG85Ct/ZMicMs8Z8GSsay1bwxQQIZha784kIXXPghEDPbw\r\nUe/6KIUBwoNZh0ExhH3xBVTeI3PA6ZPrMbkaa5OStbz0j3Tm48gMXTvw09qAdO5INw/JXqX+WXc+\r\n75JryP8hnKQb4ZWuWbpyCo/Kx1PCWE86TOrIpg2RNkb6XppldhFesmCg9XqDuFDr94t4fnLiprPD\r\nCK4R+Ed6T1pr3L+/h7W1Ey3gsQnn7mM2K6FUjn5/CJganAeWjTENmqaGtQJA2P0fDHqYzRyapkJV\r\nWUjJIQRrHUoOxgOyHtgoC02pGLLbsh0YNLxj0E7DWoe6DuwJEuAlp3V/fx+TySRmb6RCrJYUJABC\r\nqmtiQzLGFkkg2IK5QgMrBSAIEOIisI6EYMgymdSvDo6e9yhL3z4zg1IrLWvCA1hoaeV5jlOnTsUw\r\n4bt37+LBgweoqgoHBwfxXigEi56J2joFS9LdzTQE1dqQ5CQk6mgBDLkAcujcBOB47zEajWK4HwGJ\r\nALC2thYAh55a6o8piJDqp3Q1vVIAJgWJ6Bmozw4Gg6X7SxmRgalnYx3t7e1HfTUC8XQTQlNXV1eR\r\n5z04BzR1mwSHiRCO24Ycp6nOCUwLAIxowes6tjtlRqJsxATqpaCZMYF9SABgymhiLGRSbmob9Top\r\nMzAZ3K6uHrDIfEftamyDIB4fkudYa2L9SymQZe34YT4enAPGtDqPZjlb9ActuNMJhvo5Mf+IpUh1\r\nmLYhlXSSSsdRd0F+XH9KS7qr3gWD6DxpvdHkRc+Zju2ynEUmdNB4K7C2thbDz7WZxPPS+FgA74GF\r\nTOcicC0dj/1+sQS4k52idsllGJPz+Ry5VgibKCZqu4Y2V4le4xxC1BHEK3UTE0X1B73WzmXxWevG\r\nH7H5xizCvl0T2NMp+Esgc2pz0szoVDdkGxshgLYtvXMwCbuVzpnaIWoDxhgcC5IQIeydH2mnoli+\r\n98WmFtXzgoXUNAZaWzSNgVKkAbW4Vgrw83Yhr5tWJs3TZpAIbGruwFkAH6mfaK0xn8/b7PI5pJTY\r\n2tqKbLfQ9wWECAk5GGMYDtfa+2taNn7YdGt01T6HASVnSgHy0E84jOq1dRfsh+ACgiebOMKCcwbP\r\nckjBIYyEJ/1A5mBtmokZsJoYwx7eeszL6VKyFyU5kCtw5qF1u0HgHYy1sE5DmxqyltG+58M1cDgI\r\nxuBt6Fu20dB1BaUmWF1ZT8atDAAhZxC8DZtm6eaQjYvt6IijnTPCdBlgw8Q2OPfT7UinY/bszgYu\r\nP3HmyHcyJfH0k2dxbmcTV95+H3sH03iPXUAgnd9S25d+N7V/n5TSXW8659Dv9/H888/j6aefjp/T\r\n3JtKhaQyHOnrkUKfL7139PP0M7b8x7G/7XDFf+aO8I/rCB0H5P0k5/ysO2Af9Hzdzz7qdz+s7j/q\r\nex92zR/3Hh+VT1k5apqW3+zaog9penaM8Tr+nMf0zw8+9aNyTKGq9H4RWZKydx/ma/w0pbuJ8NOU\r\ndGOCyDB5nmM+n8e1WDdkl9bgJOFDz6yTDfqyLJcIY2lUDmMs+nWp1uyj8vEU8bu/80+/QRlwu4f3\r\nQAjX9FhkyQ1Z4rxH+L9YgAmpw7tYaNoWEPAxGcVwOIzHxsYGBoMhirxAr9fHcDDEsP1/nhcoih6A\r\nkNVuNFoBZxzjwzGqskKeF/BOxyQAFMpIceYpjbQL/JCDp3XQ6SPHEFg49AAgeA7O02yQC0CJQJbA\r\nlhpAStU6pyR8H+ordGTe6haF81lrW+rrgpGTOohUaFCkCSPyPI8gTwBflkHD1FGl9+i56RrkTNP7\r\nFNa6urqK1dXVGFJDwBKFlRK4opSK2iYpixFY3oFOGUrENktD9oajAhR6LaWAUiGrqDGB4Uj/Zyyw\r\nRCizbsjuzCCyBcuU2jEVpE53TbvtzxiDswtGUAqi0Pco1DAFE+gZCWQiwX+qRxLeDxRoBQaOPMuh\r\npGrHTpJAozEwOui1MTAoqSCFBA/xaIGhAtY63QLOuvh97zx6o0FsS+99TLjjvV9KRJCOTXquXq8H\r\nzhZJaIgNRt9JnSyqs1hvbf/PsmVm3MOArzT0c+k8ZjnjJf1N7dAN5e3uKHVB8e550n7fnWC7/aHb\r\nj+m+H1Y+yNnsfkbnpU0Aeq66sdEWNE2Dpg5HVYXkMvNyjPl8HoF0IWiDJdx70MAithpvP1++/+MY\r\nx0CwYb08bBrkKkNRZMgyBSXDebJMwurASJaCFiuh/9V1ibqqMKvqqOForYv9OM8LFL0CxlRLwFuo\r\nh0RTynkwhMyvLDQKvHNtptfFZ5yxJJ9peE8KgV6rGZoeZAMpJCHV8Uu1Ua0NGWOpbgiAov5NwONx\r\nYcM0fxCzMu2T1C/TTa2uXaHDuAaMBX1IIQW4QMwc7byFyjI4b1uN1wbahKzMdV2iqubQjUZZzlHX\r\nFULSDgchycYLKNWD4ApSFpBCgfMMQigInkPJAkK6BPMIdCZnHYzRaJoKxgQw2DkXQ2ZDP2rDuKUH\r\nuAjtIwKbGjKw5MA5vAOElJBZhjzLQuZpxqDtQnbDewtnKTmMAUNgWua5aheGYQ4IzG67dAS9UdIQ\r\nTgBwZ+FbbWHdNNBNDWtC2HNg74VNCEjf9kcX8pAzgAvehjKLJeYzYwtgJ9obz4/Yla5t+SDbQ3Oj\r\nFBy/9OzFOHaPK1kmsbN9AqNhD4eTWbvOYEfsWGojj7OX6fX/4x99MrL9AssOULqWoHGZJk5JdRqB\r\nR2GNj8qj8qg8Ko/KJ7Mcx6x+2NrgpykftAHwk1wjlROjQuv5qqqi30tJOlMCCq1tgIWcE+EMtBbJ\r\n8zxiA+kGZbrRp7WO0ZWPytGSku5+nCJ+93f+yTeA5R3otKQx3en36KLzpg66M963nhkDFwJSSUil\r\nQhgN4+AihFlJJcE4DzpEzmJ1ZRWcCzDGIUQIve33B+j3BxgORyiKHqx1UCrDSvvd8XiCqqohpQJn\r\nC/AgZWRQB0sZQF0QCADy4ig4lnZChix2VHL4QqcEgsi2j4vSlNVDnZbqiYAY6tBUhynj6TjwlELf\r\n6Fy04F2wvRYDJQ1NJeeVtOtSoCQFGYsiMINo8FJob13XkaVHzDAAceHd7/exsrJyJBvQcQv4FNBM\r\n6957j+GoFx3vLmOLNAHoM+99ZPxQnZe6hnUuOmxgbKHrBw8ugug2WAgxXry2YWdmOcNaKi5OINlx\r\nTnzax6hNvPcRYCAwxzsZnyWlL4cQNQmThA2m4AG1EV0nZU8SO897D5ZJgDGotv/FMDAArGUuiqRP\r\naGNgnWvrgSPPiqU+S9df6JjJI8BFagekWnY+u2PgYYL5MazSLY/RLvhN/bkLzqXj9Djwj+7xYaBk\r\nOhY+6Ogy+1IQrwuopuOYDgrhTjcUqK2ttWAyC/3QWRgbDt2GPk5nM9R6Dm107K+u1YYDAxgPYDGF\r\nqVL9pWAbJQRIbfairzkUWSC8SMmhsgx5kUFJGZnCDBJCcCgl240EwFgDYzW8t5hWFo3WaHSDRjcw\r\nlnKThTDKxszjc1nn4v3TfCGx6Avp4oT6PPX/7gRHdTkcjZaemYACqouU2Ul1TmM5gN3uSP9ImYop\r\na/O49ib9zbTvpn2TbEbajxbhzxaqrxJ75GM/sE7DWA3nQ31T3QWr5uBh4bzDwf442ulQV0E3NsyN\r\nEkaHcFfvGTiTkCKDlAWULJBlPXDhIUQGzmS7ESDhPaC1QdNoWB8SOzlL2X4tQsKMcJQ2JELwrE3y\r\nI0Rg1XEBJiS8sRBCQmU5lMrBBbHagyTaoF9AShEBuMBEDNfw3qE/7EEqHnV9KTFX0C7UqOY1vLOQ\r\ngkEKSuEQ5DngHaqyhG4qOBvAQOYpBNjBGh2y/ToHzsLvhVyeq3y7yeJdAEVt0n9D3th0Y3DZdqQs\r\n+A/aeHDO4eTmKk6fWrAUP6gM+gXO7WxCSoHxuIFtN2qDPnFYS9HmrFIZ0Oo400EQOmMc/+GP/pdP\r\nDPgHHAXxHrau6K6TPk4H6lF5VB6VR+VReVR+VuVnAfw97DrH/f1RS4r/EFZB2MatW7ewubkZcQaa\r\nu51zcV1MpAVaUy0ij7KlaKSUGEJreboW6UE/mt+PLz8x+PeP/tvf/kbqHKaLKeBoiEjXuWm0jmwM\r\n73zL3PBRDJkz0b6P+J6zHrox0I1p2XJBK4ySXUipIKWCUhmKore0gFUqQ78/AOcCs9kcRcaXQj+6\r\n4Z0LZl5/iRnFOW9DIpfBlZSV5b0HA4XqEjOPBONty7TwMRyPwCsCqaqqilnW6F66AAWBbqnuIdFf\r\nCbgjRyJlzxGg6LyJn6eFwDEKQSVHmkCpFIDpAhZ07pWVlXjPxKik8D8hxBLbkO6zC4KkYFLaUckx\r\nzvMFM4wMh/c+an5RIUYaOffETORCwBoDhqDjJ3hgzBmtYbSGkjJ+Fg7W9tXAUhJcLrHZuqAQ9Yn0\r\nvbSeUrCVQsCoPwRAOAPgYYwOrEVnIXhgOBZFyAILxqCNhvOuBckDiOm8h1QS1gXghHEewU3rHLTR\r\nMC70dyUlsrYPSiEie8i0RjMyr0JHBGcMogX/un2ACgGNaUh2F4Cxto71lIarp+OP6iRlvFEfUSJl\r\nhLEjbZHam+PAv3RnqnvNrt06DkAicHIZFPNL/fa4cPHjnNF0TNG1upsnVD+R+el5tJeylSLgnMFZ\r\nC900qOtZeK1qzGdzzKYz1FUdMiuDNM0WSYlCHcvk/pad5PbJk+cxkCroaKos+//Ze7dgy47zvu/X\r\nl7XWvp3rXDEzBAYESJAEYYqyTEqiKZm2JDNkbDmqlP2Qsv2W8lvKfo0fHL8mrkpSlVRKviR2bJdT\r\nUtllSRZFOZEpirJkkBRFUpQAEBeCwABznznn7Mu69CUPvb61e+8ZUBRBioA8jdo1B2fvs9da3V93\r\nf9+//9//SwCOTjZYjSpGoylFWVKUJaPxCGOTPSqtqEYlSpV451guFiwWc5qmHmw9AS/LlIYbxOaG\r\nGpsooCwSG2wTuGcAp4213/K93L5SEaRyGFOlkuZhbpdiV8MpYlwflIiW4Hb6wrb9bAM82+/n478N\r\n+Mo1hBncuYau7Qje9+gMEAPB9yBYSPtqv0ygVOz3UI93HfVKCuK4vt8TaCeVw9vW0TRtnx4uzPUE\r\n/CilMYXGmLROWZsq5hIV3gVc5wFH8B0+dHjfgu8IoSH49Gop0j6f+MlJryaoHnDUlNpidLLRqEg6\r\nQkqhe0DQWDmMkeOa9F8qIBWIWuG829BrNUZhjcZaTdu4AThMTE43zA2t0vrnvcM7j+taXOdwXbLP\r\ntm0SkOhdAvj6tTExTyOim7s5rrYvspP6Tyv7huuBjPm3A/6dO7PP4cEO325TSrG/N+XCQwdpL5wv\r\nezvs2Zu9fzIej/r5HjZeYk//4i3C/NsG1e+33srvtwOaB8Dfg/agPWgP2oP2Vm1/XGDft7rud9Ly\r\n+CqPx5xzXLlyhaZpeO2117h79y7T6ZSXXnop6TU7x40bN5hMJrz22mtcv36d4+Njuq7jlVdeoWka\r\njo6OePXVV2mahtFoxHPPPcfJyQlVVfHNb36TmzdvcnBwsJF99qDd275j8O8v/tTH/x7kwQUwhFmb\r\nL3lPnO2Uymspi/QyWqGIw7/EQHCB4DzeBaLvT89dwLUO1zqUWVdMzMGXnBmnlBr0AMfjMadPn8aY\r\npJemoicPZgQkdM7Tth1KaUajMaPRmBhhtapp2w6tTQIYy82AbjvgjzEmxgOiaSiBSgB6VkBM/SOA\r\nmDG6Z5Y0VFU5dHbq35T2ZoweQKyceSbXFTAlT30U8E/AQWstxprhlF8CPK0NRVFSlhWLxRJjLJK+\r\nnVK4IuvT/7UmljAAlVLMZjPOnDkzBMOiB7darQbAMq88m1N5c+aMUH2FuZgDhiGEvgJl3Bg/YTAY\r\nYxmPJ4DaAIhjhKZpOTmZY42GGCltQWEtWil85+ialrZpGI9GaBRarV/0IDUhUpTVPcBPDuLkdiis\r\nx3yilWWR2cwaSJbndH2qmfddP66aatQzrEqbCm4Q6VxH57rEJtFrdmJRFgPjR36/Zk8lBouKUBYF\r\ns8mU6WRCYS2u7WjqmvnxCSoygIPWGIzS6z4xprcBAbY3g8fVakmMAa1Vz/5KWn7ymbQmpDRAGTNh\r\nnuRMk3x881dpN8HAbXAuf+9+zBpJ2dxuuW7ENni4/X3y/3kTWxBG1XoOb4K/+XdtA0PDIpudaOX3\r\nAOkgRIC/srCUNumdxeAJ3tHUK7q2o2s6mlVDW7cEn8BuFcEWE/rsRhSpSm9ECjhtzvEEDGbrnY54\r\n51J11NEIbQzOpXXE2ILRaMzO7t4AwAljWylNWVVMp1N853FdQ71a0DY1wTmICTBqmxXBJ2BLxZTO\r\nqkl2ZrRO81WbAdSWV97HxiZma1orhDEoeqE2FdxQwjbv03b779NaY7dSA0P/HTEK2MMAnEnarKzP\r\nqdL9t94bZR/M98h8PnVdO3zOezdIF7RtQ9un77q2T/vvQTSjNFabPrW5SBp1ygxrV3AO33W4tsWW\r\nFaiIDy1d11A3NYv5gvl83ldtTxIKOeAj0hVKKaLVJFFwi7El1hRENF0PmBVFv9eHrh/LZmD/ET26\r\nKDAqYHRaT0w6aknpsGhKUya7hGHfkUM0ay21q4k6gbla7NP0YuJacXx8ktjewaNIzEat+urIwVMU\r\nI4zRw96WxlFALjkESCnUSbok/ZvG3BFVWqREB9ColH7ue6ZfaQtUv7YlW03MOoWFfkzutzbl/sT9\r\n1pYczIoxcupwl8P92T3r2B/WrNGcPbPH2dN7zBc1dSNM/NQHqW/WadJrUO2tBf5JP2yvqfJz3u7n\r\n6D4IDB60B+1Be9AetLd6244nvhvtjfyPN9sE/IM18SvJpXVcv36drus4ODjg6OgI5xxHR0eMx+Oh\r\nUOhkMuH111+nrmsuXrw4SKW98MILzOdzHnnkEa5evcrJyQnGGB5++GGuXbvGiy++OLD99vb27iFN\r\nPWjr9p2Cf3a7NP12kxRL0dSTYFiYbqvFWvBRvidkQXxVTkngAPSl0fAh4DtP13bM58eDoUpwnILU\r\nlCI7n8+x1jAalb323BKlIs61jEYloQ2slg3LWCfB/NGUwlYEf4fl4i5lMWK1bPAuOdx7uwdUZSqy\r\ncfvWXQ4OLwwpYEqla0+n06FDU1ENg/UQvFTMi5SlRuuCUKXPnMyPCNFxcHBANSrZ29/BWMWtWzeS\r\nzqFKpdKbdoVSakgD3t/fHwpaCEtRGEN1XW8U1xAGlwBwq9WKs2fP9pVx02d3dgp0aYlB0XaOg/1T\r\nNE3DapnSdsuypCwqXBe4c/sISBTdvGiJjDvApUuXhmtLEZDlcsn169eHz+7v7zOdTjfKekthCgFE\r\nhXGY6/5Za1ks5htVXauq2mAkKpUKU1hrmc/nHB8fD9+7s7PDlVde5eDgAKsNVptBQ64qSmaTaQL6\r\n1gSoxJZSGm1SkO0F4A1r7a+cCSqFNOQl4GbOZEyVpUcYY4cCIVKtWFJ0m6ahaZbcvLWkbuacOXOG\r\n/f19lsuWYlQw07OBldrMm6HibuMadKEZVaNUCXNR07hmuCZd5PbNWxzducut/X3OnTuXCoHMdtb9\r\nEaGtGzQpvboqyvS7tiWqiLGakoIkhrV+6U5hbHrm+eIEHxzO7wzjUZR2sFXnUsVZAQileukaVHbU\r\ndTvYcFo/KmKvuSm/F2FXAZZFv3B7fGR92U6nzFl1uS3L3+fp19baAey+H/AoIHz+/9vyCKK/uc0Y\r\n3GYhymfyppSiLPq0wZj057xrSYVREphSmBIVFW3d4VpPvWxYzhfcuXWXsizZ2b/Fzs4Op04f9kVw\r\nSjRSKMGnCqVqTdlP4FMqnOCcS/bqFW6Z+iGqAlum9HEXAp1vMUXBzt4esxiZrGqq8QmLxSJpdk4r\r\nykIxHq3nfr06oalTUYJz587RFkXSB+zHdTweDZWNl61LsJk26EJTFSVl1tfz+RxdlJTGYqvNwhsh\r\nBMrxaA3Uhv6UUivK8YhiVKX9w5TMqpLJzmyYm8Jk1iEOacApvbajadc2N+k1BWW/s9ZiC0NRpv4U\r\n+0xsWob0bBF3Hk/ulV3YsJGoIUCzaukaN2ipVlUq6MHAeAsbdjYwlO2yt6uA84rOWawtadoKrS3z\r\nxS3G41QYaHc3rdOT8ax30EqwJdp6itjvMTFQtiW6TBpzKqR+6ppA2zV0pLWkKpJP4NplOhgxFdaO\r\nKHWFMQValT2ruUApn342QPAE1esKR4epJmgNVhtQgeg8TVPT9lqSe3vFoDlbL5MzWFhhXK8PB0HY\r\n1wlQl4MqkQoxxqCVpJLEYV22BXT1ivlRD+zbpIVaZYW8gofWufTd0aGUQZnYH2w19z1gyP9/8Iu2\r\npBO01hsaq2+m7e1O+OEfehdXr9/huRdeY1V7jFK0Xb1eh5SA0+mA562El0lWQs6U3mZuC/NA+vR+\r\nrOoH7UF70B60B+1Be6u1+zH/v9tNDtAEs/lugouwjrcEFxJw7vbt24zHY06dOsXVq1c5f/483nuu\r\nXbs26ANOJhOeeeaZQb/PWsvh4SGvvPIKtj/IXywWxBiZTqdcuHCBw8PDDSmuB+2712zTrJ1DcVbz\r\n1LWisHRdEhWXgNkY27PBln2abjKCPMgWgIdo++AzaVMppXv9HUXwcHR0NARWeYolJINLRQUSe07A\r\nR/lcWZa4kJh/KYUvpQtrbZjNdgDVG1Niw6W0MI33gbbtCCFy69YtRqNRz2AzQ0oW0F833YsEnW2b\r\ndJgMKXWpa1MF08Tq6AjBoXUSz4cJJydHhOBYrRYI0GaMxrmWul5iTTmAqXlKmlJqAP5yyq18Tvro\r\n5GTe/77swaqWEOIQPKa+t0MxEmFF6r4a5BC8smbl5SDHeDzmzJkzKJVS6JRSvP7665ycnAz98vDD\r\nD2/o9cl1BSjeTh2H9em91om52LYdxjQI609+3zRt/1lFWVZMp7Oklecc3qfgPITA8fExADs7O4OO\r\nYdM0QyGMPEDI2VeNXzM9c6aYjMG2PW5rEuQpYYmBuV3+XMAK01eiDtT1krt3b9N1TQ+OQ1GY3mZC\r\nz5RsODnpBi1J6d/xuOrZPI62rbExjZdzjtVqxfHx8QAuTyYTUqXQdRXfnZ2dAWAGiHZTl0GAItGa\r\nPDo6GgDb1Wo1PNtkMklzVluIfbp2WGsoGm2pyj64jWr9ok8JDOl/8+rOMselyRyQsZGWj2ceXMt4\r\n5QDdtk6jNOnP7UqR2+zV+wWW+fXz+73fhr59Arf9mcqkGEAAACAASURBVPRdkhoIab1Zf15re8/f\r\neR9ZrRpWqwYXRzRNR9d5FvMlk8mE8SRVGh+NSnxoEltqmJsJuAohaW50bSBLTEVSgtM8VBvaG2kM\r\nkn2Mx2OccyyOjvF+NABqqfCEJ4ELitu3b1NVVarM3TskiQ0nD1gNFFEl/az6w4cIk/FsA/CStFkB\r\nAOtukdL4Y0T1KbyStolSFD3zemDnErExEBUYbyl6EFypzbmbbL6jaeoewBbmVEmMa6kAYXZvAs86\r\n03jMdTzlc8KCg67LZQZiApgCdJ3vD07uZa/mc9WH1TB2CgXRpTTZ6BkqDWswS/C+Y7mcMx7PB/BV\r\nTUegAoVOlbnLsqA0Fh8qYgzMzE4CTKsVzWqJa1NRjq51+M6DnROdRdkROjhCkVh0Whu0KlFRQ1Ro\r\nIkpZgkoFYVABIinVXJ6PQFCGQoEuCkbe063q9bN2CXBNzL+Icx5jPOlQMfTPK6zN9Nl0otyDtqbs\r\n15uiB+31sI8pDKawlKQ1y3YOh8K7no1mUjVolFQrTiBjvi7dr4nsx/b6k8sbpJ+/5dd82+382QPO\r\nnNrjm1du8o1XrtM07T1rkLS32mn69t68nhfr4lO5lEJ+QPhWe5YH7UF70B60B+1Bk3Y/xt93E9DK\r\n98v7xRzfjWuJBvxoNOLixYsDiHfhwoXhvYsXL3L+/Pnh2vv7+5w/fx6lFJcvX2a5XHLq1KkBI7h0\r\n6RI7Oztcu3aN4+NjLl26NOh1S5z2h/lZD9ofvdmcobJdEEJ+v1wumc/nGGPY29sbKrw451DWE1SA\r\nqIlK4fv0GoVBm4KAJ/hA5x1lmQJAZVLg33nXVxRs6bq19leubZeCxXJIH00nxHUfSGp0WZCqw6aU\r\nrVQJVjMaVRijWS4XQ6pVUUiF2xFd19I0NTdupLzy0Wi8UbFVnHJhLqUTekUI69TQEAIdbiNArut6\r\nAE92d3fXbK6eQSbVIbuuY7FYYM3xAD4KYCVVeoUxB2uwTLT7IDm/8/m8Z6eUKAVt29B1LTEmYCx9\r\nLvWHACFt2wwA1mLR9sDpOqV1e5Ha29tjOp2yt7c3TPBbt25xcnLCarVAqYgxiv39/f79VIG0LG1f\r\n3YfhJVUWJSCWvsuBQnk2WQDk+QWcFC3D5TKBHU3TcPfu3YEmLMyxXLsr1+sSu07XS9pSOfARwjrF\r\nL6VPpYB8DVimFFhJN9M6oHXAWjXcuwBLIlZaFDVam0FDbz6fU9c1hwe5PmB65uVyObBBRW9PRFRF\r\nw0wAPXmerus4Pj4eQOqDg4OhKEvOlGiaZkhLrqqKebPaSDUX5uVolBhVwrIUcOfk5GSYH9PpdFgr\r\nTM8M9sHhQwLXqrLELTq0URRbIFb6nGM0GWNMArlSEZQCrZcDM0vmVR4s5/Yp4K6AU9t6n8LsywEj\r\nsYlttl9u83kgej/G3jaz735/L3Z7Pzag/GytiPGv15W8eb8O3kNYp/7L51tvOTk54u7d24wnI2az\r\nGQcHe5w6dcDu7m5aL7QGm66llEajwUDE47r6vsyk7SI98rPYn6xX47LqD4dWLJdL7KoYqkbHGKmb\r\nhqZtWSyXg311bgZK43zAlgJorQ8N0hzSKGUwZg3A58U6tIEQNEqPhjkrNuDxBJIdVMW6r4MJWG0o\r\nbTUcTinvKMuKsqwG+0jvxSyVNFVwt7ajbbthHdo8JCsH+8zZiVLdewAfh0OGHmA2Phv/vmJycLSt\r\nsOEXwz4kzMMcMJfqaellIRq8U7jYEUO611WoaZsOaxNLfzweM52mQ5LdU2cwxuCrAh001qc1eVZN\r\nGNuKqCLal+g2pVU37Yq2XqUDCt+h2gKFwbWBznS4sqYqNVWlsVZR99IXVVUR0bRtIDgwylCWBqUy\r\nZlpI9mmNIeoIBSgd0UXS9/NdSQzr4kuJbRyJ0W3sG7KXpXXLDe8HmwqllCqgTYGxFnecmPhoTYiG\r\nVDG4pWmTLnDV6yAWo4qyGqOLBNKnMQuMx2tm5+aaEO75fd6+l2CVMZpHHz7LQ2f3ee7F17l24+73\r\n7FrfrZavxd77dLDbVwwU+ZB83RYwUPZH5xw6lXIB1oXUhqDBKILymAAex0iNaJVBuSXKBGw3pbGO\r\nEQW+W9EVHcZOULXBWE2tVtheUiYoS2sVOjgmzuJJoLOLDUq1lNrQdIYCRSwC+EggHey92ZYXMZL+\r\nyPcX8Q/zQFAKd+X7i/z8rewwP+DK96Whv7X+tr7n7dK2nzdnnUpfik+S4pKOoiiGQ+O85X+b26+M\r\nkXyP9KX41UVRDPt7HoNJk9hB9kopiPdG/oh8T35I+aC9/ZoCLAGHIsaCqBRBtaA92kNBRasilo4V\r\nBWOVZJJWUTHVnjYYdPRJpqqMjFZjYlmzNCXGzSniGBUtOih8AbrtaEagvQdlMEHRmA5nG8a1pjC7\r\ntKySvi8lWId6gM+8cVOgqCl9iS9LasC4lqS6YnGtB2VTFKqSDEr0Hq08hVb4riXq4o2//j4HZt9t\r\nYFGarFOnT58G0nopZJFTp04NGMjly5fv+bvTp0/fQyg4c+YMMUYeeeSR4bMXL17ciEsesP6++838\r\npf/yp/+eOMu5nlkugH5ycsLR0dFQ8VWCHmMM9eokVcvTGq173TofKAvLbDolBt8X/Egn/QrVMzOS\r\nBlHUiWUimnX5K4RI23bESM+YagbNPtF/MypjdWwxzJRS1HU9gAMCDOUb8ao+2QCGxAnNX3klyvxa\r\n6VnXjqu8Jxu8BGk5c0muL6mJZTHaMOzttBZxsvJgXD5XFAXL5XKDNZUDuDmoJ86fgKoyjq4HF6SJ\r\nkyD3Ic+T0vXGA3gptrFYLIdAGdSgNSg6fd4H8iqEkoMrf2PtpuC+OLR5AZYc7JQ+lfE1Zh1wC7gJ\r\nDOlzufh+3k/S/z7zle53YiJ9mYNFuV0kLcLNv89BxslkMrAw89+vi8qo4X5zUEGukRcgkMBWUqBC\r\nCPguZPfiB8AwT53dZjCKHRZFQeu64Vnzltu7aDQm4Lgd7kmuc7/xkvvPC9rkNizPXxUFSkWsNVhr\r\netDn3mIK+T3lP98P2M3nyDbwkgNc22vF9ne90Su//jYYmX9Pbgv3O4nLN+rt6+af27apYey9JwBt\r\n19I0S5bLBXW9ouvWKefrQDlVWre2IEZ6qQO3YZfyyu0vZ0Hma4uM+aRaSwbY3j6LIa276IvxrNdN\r\n7/vKsb0trep0+CNguzDslKIH2DclAIZ+TqqV2EJsKzEVVa+3J//ma+f6udRgb6Uthmfd3gdl7c5B\r\nPXkJAJWP4+Y17nfde/cYayusLRBd1ly3VvbEEETDkeH3ISTmW1Bre1ZKEwPDe8753l7ogczEEG3b\r\nJHPR1B0oRVPX+LYluF4rLyRAEiLeJQamVbq/T5N0Q00C6jvv+vuMeCf7dsD5Dte1rOolSkds0Rey\r\n6edfWVaMRmPqriVGKfDT+wAhogQcNwVGG6wuKE1JYUsK3WtbRlAGUmVg2f/TS7IBpBq21mp4L10n\r\n7RelTvqTWis04J1LWoyrFcvFAqUMnevwzvX/+tShvX2NRmN0pgkoNpez17fX3nyuiX2dPtzjYG9d\r\nHOy70aw1nDuzz+nDXU4WK+qmu+cz//yfvnU0/wTsK4piADXEZ8ulZ/I9cujbmJivUtk+lxbRRg5x\r\nLIYCHSPOFbRdYFxV/fwqcWicX2FHJUFN6VzElorGtRRqRBEMpjUoIoXzlERSOr6npsEqi4oT2mAY\r\nFZZOK3AlHRaF+0P3lT9sz5E+Ksty41BQ9l0BomC9v6WiatUAQMk+LtUW5e/k+/Mm/l8OLsnn8nuS\r\ne5Drvh1f8izyHGJr+WF77ouHEAaAWvojD1LzvVPGQvpfspek5UCiHM7mIvf5S9gwQ/zQ20Lud21f\r\nL/cjHrzenq+oYF44yjCitBprI5qWUk+xtqA1mpFSqOipihJ6ne7KWlQMWF2AshTGYil6/SNLqRQ2\r\nVmhtoEzSHN6AKQxeRwptUCYRHQpVUFGCsanAV6FRVlNEcNGg1dpepX2/++0t8wJKCuZAiIYRimg0\r\nQUFYtFR2jI0OowKagA0RS0QDLkaCSYf2b/T9eX/L+pPHTfln/ihtm3GXEwHyegXAQBLJswflXvLD\r\nohwPUWqdrSX3eL8DjPzZHrTNlo/1H6XZlG5pNjTfRANPHIzRaMxk0nFycsLVq9c4Ojrm8DBpTIXo\r\n6JzHWEVhxoSQ2EJNm36XROgTe6INNUoZrEnXms3GGJcAusViMZx45U6SADqyGYqWXNd1jEYjDnam\r\ngzMomnLi0BRFweHhIfP5fGCKAYPGnVIKbQ/ouo67d+/Qtg17e3tDam4y5DVLZLuzY0zsNrkv0RnK\r\nGUtSZRiSPtR8Ph/ufX9/n+ANznm8rwcdQGuLAVzLiyekQh56SHuVNE5JVZYKueKcSKVfpdRar6p3\r\naqCf2IohpbNt24H1NZvNGI1GLBaL4bPWWg4ODoY+mE6nvPrqq6xWK15++WVWq8SiGI1GSTepqoa0\r\nKmHCrFORE1ildGJsOiegZKQoLFWVCqck5lwSandOAnrVF9oYpdTZqiKEVKxksVhsgFH5SXgODq8d\r\nM7MRLErKpQRtCdQUJodCKRn/Pm04S6vaXoxlQRPWojhzxhhWq9XAmJKx3N3dZTKZMJvNKMukcTmf\r\nzwdbkP4VexcHXmzR9Eygrm05unuXrm05ODhIWgyHhwNzr6nrXk9fDfcjC7SANDLG4/F4mDMSjC2X\r\nSxaLxaBTOZvNhmcUp1eeaRtQu4eV0NTr8bJJz0uNSgqbAo/jo3kKXFC0IRKVZhDzj5vp8tLvg8OU\r\nOeXiIMs8lTVF7jkH68VulFI0TbPxXfdr25vvNsi6/cxyT3mwkWwu3vNvvh5uA5xKKULsmVNB4QOE\r\n2BJiqiR7584dVqsVk8mEvb2Dfm3rr++Tltl4vCk3sA325QBYfm9yL2W5qaFYVdVQ4CcH9QU0Fjse\r\nAiCTUoKns/FGarDsR5PxugiCjJMcfIQQ6NwyAxbTvExpt1J1vduY8zloANAtlhilEgidMdqbPhAr\r\ne0ZGrlXqu47Ysz1kfHJNQOmPnLkhfSjjOIDG0W44RHnFYQk+5ToCYAvzRylFMSkxRpFAiIBWGWAe\r\nI03TUZYKa9dzs6k7mrpD6wU6JltvqoJmvGI1HTOerNO0K1ugNWhTEIuIKUpsNaJwSeaC+VoqQ/yG\r\npllRlH3BJA/aeIwFoy3OpRTbwhYYPaGs2vSszuN8C9GlQkY6pW1rrzFRJWa7DhgVcYXD6F7KIiS7\r\n6kgalTFCDJHgFUTPzmyMc5JJkA4mU85uqtxb9ofpAZnjkRBVr3sK3tW4VtGslihjsWXJaDSmGo8o\r\nbMVRNhb5/BT7stYSsvkkY5P7EOlvvnfMqb3dCR/64Lt5/dptnn3hCm3rvmfX+k6b7GsSPAjAcePG\r\nDW7cuDH4dcKkF9/q7NmznD59Oives04JhvUaGkmSkx0OrSOlCihjqFkR6RibERZPoSesmhZfNBRK\r\no4KmtCUutKxKmBYlnWuTni4G7zpMjKjxCKLDhpqAoYmBVmumukX17OU3M8T5eiLAqOyvAhxts8Vk\r\nTxa/C9Y+iRzKCcCXa+3ma7es/7mfsQ2SCRD1nQQgb5Umc1jWVvGF8yB1m4knfShMvnwvb9t2I0NK\r\nAL6qqjb8A2ENii93P6mf3J+UInL5PMhZrtt/I3+X39uD9vZrCsWsG9GGlmeufh1X1WnPby0+amKh\r\nsUGhlcHHDmIqGOZCS2EqXOioxw1FpzGxpdYlWntiq7BEVJHYZ6NxknCx0RCMpgqwDI6RKQhtgQ01\r\njC21a9G2IETPw9NznFUX6Mo1UPQAqNlqUYFTqFGB9hFWLcE4MBpdltzoloxpkixNWVIYgw6KSCou\r\nplTyZ75fLR/P3H/NgbntdU2wBvF7tkE8iYPu9/cP2ve+2du3b1OW5cDqkqBLqbWG33g8JsbIarXi\r\nzp07Awuwrmv2Dop+048oHWnaFTdv3iDGyO7uLkUxTsEQpmdLrDDGpKIBxRSlLW3nOZmn9FhxWIZ7\r\nCFA3TbpZaxG9vrbz+ADTah1wifh+vgGKNlVd1wMbRr5La83e3h537tzh+Ph42PDl2jlyLpt8HiRD\r\nYibkm644U4vFYsM52NnZQWvNYrGgruuB5dWGNVtQPjsEoE0CtmATCIA1q2lvb28ANsXJEKBUHDgB\r\nciVAz4NfkwW3SqkBPBSHcDQaDcGd2MLZs2eH5++6jqtXr3J0dMStW7eYTqeUZcmpU6eYzWaDkyp9\r\nKIyZgTUzVFHWw313XTc8j4CNEvwKaCCB9t27zQBMLZfLIUVdtAJkrHNWnSxc3ntMYVEhoEJAx3X6\r\nzHphS6dugThUsEYq5fa2moO9efAnwE/uPOfjqZTi+Gi5waRr25bJZEJZloxGo2FcQghDqnhVVUOA\r\n5Do3PFdu5wLOhRA4ffr0UKSj6xKILxqA472d4VkFvMmD+TwVP2f5CWiZpx6Px+MNltb9TpzyuRRj\r\nxLuUdq50BL8G3uT9tnEb9rkNnkTFPc6uOOpvBKrIgYLMM7EnCS7z4Fy+J5+D8vP92vb7OTMw3/y2\r\nA6VtdpB8Lt9kc/BYnPlGpXRarXqGcXDMFwtWdY21JaumZjrdYbGqaVrH7u5er/loQZU41w7XstYQ\r\nozBxxZ4ZmFPG6A17Tmmqa6ZzDsrJmiiFfkT6QMZitVqlMSjHNF1L6zqKYjWMRUpxn6C03QSQ+yq8\r\nOvbOgkqHB3kKYA5ipirnYTh8yMdDKYgZuCZ9K2tFVVXDPcualYOAwLBnSQAu65LYZM6Ikd/lY+o6\r\n7jtX5B7FLvMDi/wZJoVCe4/zBq09xhQolfZbULiQUh1DD5aHqPB91VcVFMe301rZlJZV1WKP56ng\r\nyGRMVRWcP38ODWgFOhqi0ShjMIVDxYqxSyn8RdHRtsu+kEw7HAwYY1kse2fQVBBLrK0wGoyOKF1g\r\nNGjrMKYgWEcMrn/mgCUSVCAGh1EaoyLWupQxYA0hKpwzdJ2lbR1dKwzfVKDjZH4H0T5MNpSqkaeu\r\nDj27T6GMRiuLtgbb21zUqf+8Cz3DMWBNie8aop8RyhY1mgFrcH6dFSEM/+6e8Zfx/eMMypWCC+cP\r\nOXdmnxdfvsoL33gd0Z18KzQ5mMnX9tu3b/Paa6/xyCOPDP0m/pUxSfLk6tWr1HXNw+94GOfWzMY8\r\nsNB9HwcHY6sJriMScRrGQdF5g1OBUntcBGULxkYRmxqv+wJiCnwsWHSRXTPGaXABymBQBoqVpwiB\r\nODJopymLgsJHPA2FT9Wv3ZvAxqR/xA8X3wwYgNLct8n3l9x3EOkWYNjf67oe/MZbt25RFAWzWdJa\r\nzX1VuUZ+iLcNer1d2/YB3TaTUd5LB0rJRxO/T3wJsVnRVd4GUIWgIH0ueqDL5XLwC3MgN8/yyK8R\r\nY2SxWAyyPhLTCLAovqb4o38Sxuc/9xaJrOwt/u/n/in/8Ol/QhMcRTCgHEp7SizBVtAaGrPEdiXG\r\nGlpdU7QVvugwMRDiiMKvcEWBiZFoLLQKQ4vXijp0mADj0RTXeMqgWWlPYTRtcATrmHhNYwMuFGin\r\nePLcE/yvH/8HHPCOBwDOG7So4GSksC4QXeB2c4RzDfXxnOlkj/HePj5oQnCJJT4ytHgUkUoXBB9z\r\nKfDva5MDETncyIsmShwK9x56w3o9zTGUPKa7X3sAJH9vmvnQn/nhvycVEEVnLK++2nXdoA8WQhg0\r\n7CSYns7KQXcoOWQLrl+/xsn8mBB9z4xKhUNC8CxXC1bLFUqBtZplXbNYzAdtPqMVWoF3HU29outa\r\nlssFrmuHtMDgU8CntWK1mA+gSg7OSSC6DQLkJ8NFUVBWug/uUvpSSlFNaTvyGXGkcgdBAAzv432v\r\nmQM5+Sl/zlKKMVLYasPB2P4uOYnMGSubk2YNBghgm+uSwDqVV8AdAVZSEHvv9+eOjgCCeVVoCc4F\r\npBI7ybW/lFJDpcxt5tLmCUBewTWlSqXFId3fdDpDa5OBlsKCFE29zTRu6YsQAqvVamMxyu9D7NWH\r\ndKpmtMFok6pS9uwRedGf2uc/K9L/ywIo37/9jNupsDlwo5QaQPHFYjEAnvI5CXRywFbAB3mOqhgN\r\nqU5sgQghJvbMwHLUGiv2GZK+pC7sAGKK7mAORE0mk3ueJ9dmy1MgxUHdDhCGZ83AO3kF36H6MqkR\r\nNYxvJPZVUy3a2D5bXCU2kOmrNVu9EcDmG5C8BDTM+z7ffO53f7JWbKfnvFG7H8gp35sHYdvPnh8u\r\nbH+H3J+sP5uAdLaJ0qCVSZVmQ2+jPThtjKZtPPWqZrlYslgsWc6XtI3rpRcUzi/71HU1vNIas14z\r\nZb5JgLh+ppQqKX2bp+flgLusH8IIzueMD2BNmndN3XFyPGe1XCVnJypc11Kvaro2pV7GvporsZ+b\r\nJPZuPv/S/ayB2+2xESDTGIPrHEprjLUUZYktClAKHwLOe2xR3PPSxqCNSX+X2ZMA5nmKeQ5C3M8G\r\nYG2X0r95unBeSCm3reGlIt45XH9d711an/riF8H1VYiJxODxziFp1RqN7fr57gNN21HXLXXT4FpH\r\n1wU65XrguKELHg8EHXsRV8NIF1hb9vesSKYRQXkiAWMqgoeuc7RtwPtIjArvUxDdhRbvHVJgppA0\r\nX5WYC7Z/9nTwkkw0qpQGjdLYEmyRxq0oSmyRxtHYpENaNytCTAz3ZCaRSCBEnxiGTUMnFbC7NC+U\r\nTvIVVVHS+j5V2HuIIf1NTFW5u66hCRHXJX9EgPJUeMz262xLJBVD2vQfEggZ+grVpw93Odhbs1y/\r\nV01rxamDHS6cP0XnPP/H//6/vCXSfuHeA5Vr165x+vRpzp8/PxSoqaqK2Ww2aCprrTk6OuLw8BBC\r\nRBu9sU7KgeM3r1/n//z13+LZl65z6vxD/PKzL/Dp//g0S18SjOFnf+U/sDuuuHjqFHcWS/6vX/ks\r\nWhc8cmYfHwPPXVvwL/79Z/mD129RHezyS7/1G3zu95/n4UsXmE01AbhysuT/+Y0v8p+ev4IpDb/9\r\nBy/x777weyzVhIfPH6Did667plQqXvev/tW/4urVq0ynUw4PD5POas/YyyVPtNYbB3Pee15//XXO\r\nnz/Pstdf1Vrz1a9+lZ//+Z/n6tWr3Lp1izNnznD79m329vZwzjEejwfASql1EbdnnnmGtm05PDwc\r\nDnLfzkGarMsyP2XtXi6XfPrTn+bixYvD+6PR6J5UW4mZrl69ymw2G75DGH2Sruuc45d/+Zf54he/\r\nyJ07d3DO8Qu/8AtcuXKFRx55hE996lN885vf5L3vfS9t2/Krv/qrfOUrX+EDH/gAkPyC559/nl/4\r\nhV/giSee4Pr16/zbf/tvefHFFzl//vyQCSTPBKyzbN7G4/Ofe1MoVGv55Wc+xRdu/DYTO+Ld++/i\r\ncHzIjaNbuFLT1UuMi1AFbIS6XhKMowyaLtaYUKD9BFyDnha4pqPVkaIdEWyHXhmqyYwzk0PG1S7v\r\nPPcY77r0LqrJmFB37OoJd1VN6JJ0l9EWbTVuGfnph3+anfHBA/DvDZqKkcoHqAzed+wqzdFzzxNu\r\n3mb3YAd2R9g4oqSgcIrKlGht8RGMUaS0t29//ubxxZtpedpv7r/AOuaXuFHWR/Fdtw+GcjAQuCcW\r\ne7A+fWftOx1rC7EvfrE+JSqKIlWNHI/7VMOU9jedTjg42CeEBGzV9Yqbt28l/SVtGI0nhBhpu46m\r\nbemc487dG0QFk+mUsqqI8znz5QnoyGhS4RpHdB4VIjqCChF8crZ9T2tvV+lka1KNqKoRKqTAwbcd\r\ny3qd5ikApRhZLoa+XVBDWFFlNcKakrIY0YSGrvWslg1GF5TlOtDNtT+AAWir4yawJA6SvISpJWyt\r\nyWRCXdc45zg+PuZgv+r73PaAYWI5jkaj/iSvP7UO6wqaSq1164TRJSwmcfikP6TQSO7Q5CzGuqmH\r\nvx9Aoz6QlWeU+xfwKcbIzs4OOzs7GCMBX+DKlSvcvn2Lo6M7KBWpqoKHHnoIaw30IFeMvtf5U30A\r\ntwmuSOAszoqcPAurMw+s5d5y5qU4ZqvVitVqNQQMwuiRcZBxDXWzwcYQ2ElpBdrQdeKw97pC6wxg\r\nUAprR0OfikOYg7Pyb862zMFI79TAjhLwXUDMnD0kjqMADAOzdTZNizKgjKbQJcrodYXepk6VTQtL\r\nOaqYTqeYwtJ0Lc2iRa9WG3axBrXXWo/yfp5KLfck1YDlvoCN6t152uz2dZRSRJsKNvgQExCrIlqv\r\nn380TmlL2hiU0aAVXdesmWmdz8ZuDbbl7KocdMzncM6QyNMp5ZRenlnGcBvQhE1wd/sl19je1PK5\r\ntv15aTkwmDNV5b1hThPA+5QmGRUqxgSiaENp0sFMu3I0yxXzozlHkzsc7d5hf3+f8WjKzmGaEym4\r\nTpXSIYE0EIdqt9b2UmdDH6j0kjVJNp8Yh5RygL39fdq2ZTyZDDayWq0w1mKsJc6XqOjpmlX/fs8E\r\njhCdp2vKDOhP67RUbNVaU4xSmpRWup+3Ea191v+JfSV95nsGl1IKVEh2ldkHQPQ+zSe9rhor9ysv\r\nmV+u/zc/dJH1SNac3A62X4Xd1HnMgWc5bBMWXFp4Aqk6dBqfru6QA5QBmC8VOmqUKSiMgtDRrBrE\r\nxKy1mGJEURqca4nO473CK0+IkaItSBp6jvnLt9NeMhkznY7Z2dtltrtD1R/8BN9hjMf0YLxtRevT\r\n4FxHUVS0jeuZxjWFbXC+xbkGYyyhi5R2DRBrk6WXYDBlYlI5pQhO1v6+sINSaBPRBoyN6VVsVoMO\r\ny77verFzpXyqSt4fBO7oEcGTNBKjQ3tPFSMuQtFVhN4mBh2bXgKibWvaVtPM6wHoHo1GjKoJrqoo\r\ny1F/KFkQBtCw3w+CVD8GN7D/vj3H95ee+3e8+9S7ePepd39bn3+jNhlXfODJR4kxfgr420qpZ97U\r\nF77Jtn2wKgWmJA1VGLY5mCUMqrquscbQhc3Dkfx7R+WI9z/6Xr724su8/PXnePWVI37sAx/gP/7e\r\n1/nAO87x0JlL3OgCdRv50vPX+dLrt3jiPU+CRZLS4gAAIABJREFULli0ga++fIVLZy4Rg+Yzv/4b\r\ntL5jdPAOPv/7X+e/+tAHaCLsTnf405ffw9MvvMzXvvr73AoVP/LEU3z19/+AP/uu85RvkoAVQuDo\r\n6Ij3ve99TCYT/uW//Jdordnd3eX9738/n/3sZymKgt3dXa5cucJHP/pRnn76aVarFY8++ujgQ3zh\r\nC1/g3LlzfOxjHyOEwPve9z5+5Ed+hF/8xV8c1p/PfvazvOMd78Bay4svvsijjz5KWZY8++yzvPe9\r\n7+XZZ5/l8PCQhx9++J4Dz7djE/9kWxZHqVSx/nOf+xyvvfYa0+mUD37wg7z44os8/vjjvP766xwd\r\nHXHz5k1++Id/mKtXrxJC4POf/zynTp3iXe96F1/84hfx3vPn/tyf4/Tp0zz11FMopfjMZz7D8fEx\r\nH/rQh3j55Ze5cuUKTz75JF/5yldwznHnzh2+/vWvp7T2zJ+4fPkyX/7yl1mtVrz00ktcvnwZay3P\r\nPPMMp06d2mDBy770ILD+E9AUxFYztVNKSh6ePsoHHvkgX939Pb7w8hd57KGHuXD6Ib787O9x/sxZ\r\nTp85TRM6TAdX717nyvx1njz7fjp1l9985XcpfEVVFHzw4R/gy3e+xA+e+kH8bsH7L13mP37pK5zp\r\nznBpdJFb1+Y8fvhu/sITH+NXXvgPvHr1Du84t8s3rj/HLXfCtCiZq/XBRk4eGW79gf2BCrBYMQ6K\r\n2kQuPvluvvHP/x3+9SP2/+qf52YVqJQhrhzBx6StrJIfpqz6XiqD/KEtP+iw1nJycjIcAD355JMD\r\nCzn3Y4UwVNc1k8lkiA8lAy0nYm0fkj9o3/tml6v5RlqoBJp7e3scHh4ynU6ZL455/eoVVj1QMJ5U\r\nTGdjtNZ845svpVNHFKasWKxqlk2bGDnGMprMuHHrDvNlzaVLl7jwjkvsHR5wdHTE1RvXOZgdQPQE\r\nn5h+Sq316crCsFjUuC4BdqtlShECKGyvMaYSoHfjxg1msxmz2YzxeDw4jFKgQjTsmqYZUtBWqxVl\r\nZYnRYO0I70UkOdI0Hgigmg3WS85qEsFdMeqBYZUFk4vFYth8hSlnreX4+JjVasXxyV3G4zGTyYSi\r\nNISYAJ6TecNiqTk8PEzBjPcYeiZIz0zxYe0UJw3FtVacgEnT6XQA8wTgEPbfdDplOqsGBxrWVN66\r\nrpnP5+zu7hJjHP5GQNDlcknXdZw6fUBZ2cEmXnrpJe7cucONm9douxpbaPb391NlWG2IGFCBEDVt\r\n59DK9lWiIzEogk/FXWTjuHvnuAeeYz+WBVr1jlBYp0nISbUwWK1NVS1v3bo1pK3L+OWbUmnXwbn3\r\nnhBB98Lhxhg09wI+CiWSUKlicw8Q5QBAzkS8X/qGAAOTiRrYUbdu3eL4+HhYGE+dOsXZs2cRlqY4\r\n2TKWTdNw298dqgArpenaltY7AhFd9BXhvOPmndssm5r9/X1msxm7B/vs7KeU8aTT1fTacHvs7OxQ\r\nFMWgnyj3mjNIBRibzWYsl0tOTk6S3Z6cEGNK+Ze5960AsaKaDIG494nmrpQBbVHGYEuN8p6oVQK4\r\ntEbZdUVugtpI6cxbCIH9/f2BhZtrigqYLJqWeWGSXLtNdA5zwC0f3/ywQa4J600wP4XPwWD5eRus\r\nhHVBJWFvbNuf2KpSimqU1uGU5rluGkNwnuhDj1NriJ6urTk5DjQ9K3Zvuct0OuXgwOF30xzTWlIg\r\nLVR66I8cxJUxrJt5AsqNFCkKPTCzBi6VNZR6RDFKQP1oOmG6u0PXdRzdvpbkGFZtcm5ixLmGxaJh\r\nubzDeDTFmKIHVyaMxx3j0TRpF1pL26R+0Eb1zOGIUlIVTVLg1v0W+pRX51O6+Wxvf5i3gw0ZSzWx\r\nVKS03nX/K1RfasRqg7KesgfHhf0qQP58Ph/YxzkwJwcQciAhcywPoH3wRBJzbjQuN2wtZ6zGGKlX\r\nDtDpWX3AhY7gIq3u0MpibByY2gJIxaDwvmO1bLC6BLfunwQoW+KypusKlEnjuJobVlXFyZ3bzGaz\r\nYS87PDw9rLUzOyWEPep6yWqVZAc6tyJGj+8P43x0uNCiwpKoLc3SQFmhcRBaHFmldFPStG1aa2OB\r\nsSVWKUAPdVNv3nmpn589A7Uo0bag6HVBD06dGqQg6iYBqUr3oCGaGEdooASKKP0fmK9aYmwoqnUV\r\ndmMMRm1mAYx0StXpVh3dasXKnlCV66rszHbXByY2rSUxyGm3R9v7Fyt6o/bbr/42f+3n/hp/8wN/\r\nk7//5/8HTk9Of1t/9y3ax4GfiDH+E+C/V0rdfLNf+J00WWOFLSDrotaa+Xy+EUwKiypnDHTOJcp4\r\n5nuJXzYajdhTGnNzwd5D+1y4fJHitdvMdsbYUcTFhhJHGQKvzWs+//xLXDp1lpuvvM4v3nyVVXCY\r\nrmQ22yEEQ3G4j55M+fyLN9mZPcS///KXuDY/5i/9yI+yt19yvLzLzqkxvlWcOb9DeLZh5WpKM3pT\r\nfRRC0gXe2dkZDrM/8pGP8Ou//ut89rOf5ZVXXuHixYu89NJLPPXUU9y5c4fz589zcHDAc889h1KK\r\n559/nsViMaRNS5PD4lu3btE0DcYYnnrqKX72Z3+W8+fP88wzCRv+G3/jbxBj5OjoiNOnTw9+zZ+E\r\n9F85QBdbEwmUGCMnJyc89dRTHB0dcf36dZqm4Td/8zd56KGHODk54WMf+xif+cxnKMuSmzdvcuHC\r\nBX70R3+Up59+mq997Wu8+93v5urVq5w/f55z587xqU99ip/4iZ/gd37nd5Lv38vWSKZQ27b82q/9\r\n2sC8/MY3vsHTTz/Nj/3Yj7Gzs0Nd1xtMxKIoOD4+Hp4D1oAm8LYfmwcNovWEsmUVGrQZ4Qu4evsq\r\nEzPix9/zUXarfa7cvMqPv+8vsKLmzq07PHH5fbx66zWeunSJh5tj/vSZH2Be3GaFZhpHfOP2qzx1\r\n+v184843ePfFJ/jazRdxxw0Pnb7A+fI0qlU8+vDj3Lr5Csc3VpwZzXj88XejdyJfee1LuNhQuxVh\r\nfC/A93Y/EPiuNgVORVbTkmql8G2g3h3zyCc/ypWf+/fEf/yL7PzUh/A7Uzg8JFhD10VM1AQcFArj\r\nv39zWHxYibtmsxnnzp0bgL1XXnmFxWLBzs7OQKy6cOECV65cwXvPwcHBIAt28eLFgUx0P7LMg/bH\r\n02xRGNo2aeTEGAdgDALT6Rit6VN9F0MaXHol56ysxiyXS27dvsvu3gHVaMLpM+fouo7JdIejoxNa\r\n12GcJaQEGKKC0WTM3sE+btFSFJbJZIy1ZmBwifO3u7vTpwyH/qR3NaRzTqfT4WQ4F5WXYFV0NHJG\r\nVn4q4ZwjBk1VTqjKxMhbLpcEH2gbj1aBamQ2Ai8BdIRBpmjvYQTlGmLipEpV3ul0ymg0GoLEtq0x\r\nRmF7MLMoDEoVmT5Zk4Eaihg9kIIdazWFTYGu9E/uFMszijMsTloebCSmzLqC2TZAJYCapIbmadTJ\r\nSWkoy4LTp0/1rBpPWRbcuXOHq1dfZ2dnxsWLF4Ezg7NSVWVfyVPjOtUDJHpgE6WfU182TUeMCmNS\r\nellKMdNDsB5994bMMmHjicaYgHRSgTc9X7tm/PRsl/Q9cYNhk6pErsEl31d5jmbNcstPR6T/2nat\r\nqZauETdYdDGsi06InYrmYYyR8Xi8ASaLrp7YuoATMj65XmcOtgkAtlqtNgCtnNHZtm2y/952cjq3\r\nnCLfT+9BijwI21aADylqI3Mib3J/ZVGSKnGuxz1GhXM9+yybWwOIEtdgqx2ZgWWbU9TFjredX5kH\r\nYi/bYHDOsMtTx3NA8I2a3F/+/9vg3/ZLwPT8vrbXG7nvvA2Aakip63n6vIx/nuoTo1SX9njf0XVp\r\nTq/ckul0OhQjmkwmA+tYQOvcfvPvNcZgCrsBbod+riRmXUoj1tokMDIE0ElDUxlNOaoI7gjnLGWl\r\nKEr6au4xFWfoGeZKCdM82eeoWg3rbzmZZSnHUjhGABWxbzswB53rcL4d7M+1Kb0Uo1Ek9lfI5npZ\r\njNYHAyqg8GhlCabfS0I7rDH5XBEGSX4Suq2FkmxFUpelSvGmvmK+tuU2PbBBnThMIbOL/iAiOnyd\r\nqkc2zapfHyTluk/RqPyG/SutUdHQtDVtpxiZVPAnGANtl15dh6/rXpxe9+BiAjWNTanMZTnBmALn\r\nFaNRxWhc0DQrmmaF93NCB61TeDdD4zE6MfsASlNilUYXGhWKBNZpjY49wNyDdAHFdLLXr9OJyZn6\r\nyg3rtYxjURQYO0XrNBfkwCNkjDvpO1RiGCsY1pV8nuZBjVIORSo0EkJH5x2+czR1OpTT5DqmZb+G\r\n9BWmjaHxTX/tb//Uuwsd/+h3/hH/5pl/zd/9sb/L3/ozfwuj3lRgYIH/FvivY4x/H/jflFJ/rFVB\r\nZI4JO038i+Vyyc7Ozj1rthRtkrXaGouPLqXsZzqkcpD5/Mvf5Oc/9Rv8yJ/6Qe7e7KAw/NJv/A7v\r\n3J0wK3ZoelB310YePjfjS6/cJkbPX/yRpzjxga98/Tb/7+9+ldlkl//iB57geLVgL9ziB8+c4/2X\r\n91m2jquvXeVXv/YSvtxjZ1pwa9Xwbz73ec7uP8ThdIZ3b65LlVKD7rZkLwiwf/r0aeq65tFHH+X4\r\n+JiiKDh9+jRf/epXee211wZ/59KlS9y8eZP3vve97O/v88ILL/D8888PwOvjjz/OM888M/gdjz76\r\nKKPRiMcee4wXXniBT3/607znPe9Ba83Vq1c3fMG3c8sDTyEgSJaQHHrLnjgej7l06RLPP/88P/Mz\r\nP8PP/dzP8Vu/9VucP3+e1WrF4eEhzz//POPxmOl0yoULF7h06RKXL1+mrmv+2T/7Z0i6+mQy4XOf\r\n+xxFUfDhD3+Ya9euAclfee9738szzzzD7du3uXjxIp/85CeHfVb238PDQ55++mmKouAjH/nI4BvK\r\nmORZHA+C67d5U4pgPIW22FVBVIHX/CvMT05415n3UBaeI3eLxznDQi25cfubnB9PuLJ4hafG72Ja\r\njjg+nvPla19l1ZxQaM+cmnIy5vBwh71qF187bEiVZU1QRB8YTSvq1Yr6IcUrL36Dv/Rnf5J//Xu/\r\nxp3QsGNKSj2mbDS8ubONP9EtAkFrJp1GOfBmhMXQKsPDf/nHudscc/Mf/GNW736Yh/7yTzF652O4\r\nGCl1QYiw8o7vJ3wvWILIS+R+rRzyS2x5cnIykEWuXLnCmTNnuHv37hB/P2hvjWan0+nAUMvZX8I6\r\nAQbdLNFwkn+VUpwN57hx4wbBRXwXGO9OOHPKDJWtusZBSI6Y7xxd02KUZlylAHOxcgOQIJVFYc2i\r\nstYymUyGVN2jo6Ohsq2wvoANgEeAkLIsB+bFdlsj2S1FMelF8BVNU9O0SzpX03YrbLHbP68F7YaT\r\nQEltDH4+BBSwPokuS5ty9aFP51wBgaIwPVOrxPsxx8fzDXZPXolYwJqccSen2QJAKsx9J6KAlNvo\r\n+hCk95/1zqG1YTSaDOlmbesGx2G5rKmqiDEFReFQStJRU5XcFAMpptMZjzwyZm9vn9lsh2effZb5\r\n/AovvvgSdd3gnOfs2bPs7Oz0wWiDMV3PSoqAJaV8gnNrCvBisUBSha3VKBWHMTdGsar9hmYWaLyP\r\nfdpiuk+A5bKm6zxN09F1np0d+mImaz2bnKGWg0Z59U3YZH2Vk3V1Nvm8pPqJHecAjjjZWqv+BKUa\r\nKNLCDDo6OmKxWAyswqIoBkdSNNOkCrDMC7EBmZsyb4eqqBmgKPcrtiatbduh8M10Oh2o2vJMklYu\r\nfysFSSSwkDXDe89yuaSu64H9JwBpDkyFEKjKNRAagmgHtoN9xmhROtlIAnYU1uv1dzQRYzq0XgM6\r\n6yAx9PNuTS3Pry8B4jYzMWfx1XU92EBeNEa+L6+amDP7pOUA3v1aDuzKfef9I2Di9nfkYFx+3TUo\r\n0TMrtwpG5MVTANxJYjUcHR0NYz6bzYZDir29vY31ROx4CPp6JpzpiyiE/v9j6NPns/s1xlIYSyzK\r\nYT6V6vxgw6tlw2Kx6m2nWVcN9muwpq4LlnZJWaRqtOPd5TD3hVEn46S1xhZJ/64spRhJhXNrsFij\r\nB1vx3qP1mgEYQqAo1vqLaVzWVXdjjBRZQRGZb7nun6TxS3/JQZXIMwjT0to1Mznpzdp71poU0G0W\r\nNIkje89n0rWTfTdNqnKbKt56rO02CpI0al1QxRiDIrGvkx1Fgmk21q+iLihXyyEQrn2aQ6NRmaRC\r\nJmlvK3oNvhASCFr5lrJosGbBcrkYKj6PKmhWLa7168OryqO9IrYB123pdeqkMxlCQAfFeDyVmdY/\r\nv8MhWjWSyrfWTVQ69mngac3p5tugmxqePe23bb9npj7dnuvJb5A9NbHWna9pu6SpKYU/UiZD8nmE\r\nhWmMIWpFUL0+6x+x3V7d5u98+u/ws7/zD/mffvJ/5Ccf+8k/8ndstUPgfwb+VozxbyulfuXNfuG3\r\n2/K1Gdg4jGzbdmN9lj1pg2kvGrEZyJEfGl1+6Dz/3c/8JMF7DvYK/vo7fpA7N29x5uwpRmXBX/5T\r\njzIqLDs7E/6bj/4QP71YJPmCWHBYGD78TsMjex+gqkoO9w+4ccNx+c8/yYVzZ+i8o6wqHrpwjk/Y\r\n9Bznz58f1tXTZ87gQuTNQi/T6ZSPf/zjzOdzZrMZH//4xxmNRvzUT/0UZVnyzne+k67rePLJJwc/\r\n/YknnuB3f/d3+aEf+iF+4Ad+AKUUV65cGdbM97znPYNNfuQjHwHg8uXLxBg5ODjgE5/4BNeuXWNv\r\nb4/HHnuMV199lfPnz3Pp0iWOj4+p+0OAt7umXG5fsE4rL4qCT37yk8Nh5iOPPDL43o8//jjT6ZS/\r\n8lf+Cjdu3OCxxx7j7t27zGYzLl++TAiBixcvDrYgrL6PfvSjg71/+MMf5tFHH2VnZ4dTp05RFAXn\r\nzp3DGMMHP/hBnnjiicHHyIuCfOITn2A8HvOe97xn0Bi8dOnSRnwgz/V2HpcHTVo61BrHfZZzjzq4\r\nyzN3v0rldvGd5qj5AsoG3vGOd/BLf/Bpdvf2uNncpDlqU/FJveDazRs8/sijrIoF37jyHHeaI3Ym\r\ne/zqC7/MY6ffyW/d+k9cOXoZpg2d63j56LnkPx5Hrt++Ttj/da6Gu3z9xg2+cvQVOrPCLM5Qjzo0\r\nm2mbDxh/m00BJiT97G5UwaqF6HB3b3L8/32BedFx/Nf/KqPZFE6dh6CIylPHBo2ijOb7XvBD/Bxp\r\ncsBwcnLClStXmEwmg96/+KMHBwdUVcVDDz3E3bt3ef311zl9+vTAXH+wNn3/mt3b2xvSTkVzLIRU\r\n1XU2mw0boACCkrYkp6oHpw6ZjFKq6XRcURUGo0pCaZPAe5WQYO89pdWp5Fo/6Cr6dYpPzzIStozc\r\ni2i4CQAjKZzCmpFAVN7Pwck84BeDzAOd5Fh2wHIwamExLZdLlouaooypam1psGatB5IAkYKiqAgB\r\nrE2BYQgifszAjtTa9WwDR123aJ1YANOppuvWGndNX9VY+lpSL/P+zimyxhiImylDuTahsL1y1mO6\r\nnzWzMkSH1utiGimI8iRB8kiMHudalsvYgzOjAVjVWietNklBrKrBcUkMv4oXXniB27dvD88g/8rz\r\nVuUU27NFhP2VgEVx3GucC9T/P3tvFqzXdaWHfXs65/z/fwfcSwIgRoI0SUlsDdHs7nbSTCKRVrXd\r\nsR3HlbfkpV3lpzy48pYB6lT5pVOulF2pSru6K52qllMZ/NAdyVanu5kHDS61rMEmJYoUBRIESZAA\r\nCFzc+0/nnD3kYe+1zzrn/hcAAVIc6m7q6P74hzPsvfbae33rW2stGwBzOBd6efw4U5QXJOCgHeUP\r\nonBoMjCisY8eCMTlhWSLNlK8sAWNwXw+z/3Ow79z/i2mCPtATfxeVa7ncSePMwE2N27cyHPHGIPt\r\n7W0cPXo0z4kYdq5yiDfRsXlBBf48ZEgRcEjnJHkGkOc/AZHUN9SvXPkTW5FYWGVZ5sIlVDiIWAij\r\n0Qij0SiDMpzp2DHeuorCzrX5GRWxoTQARFDdOZXCtB2IoelcH0CztpvvNA58ThCIz3/DARSSEQ7o\r\nklzw8aLXw0Z9R69XNVoAhzK3CuxbdQ7+XToHvx/OYhyCnACgimi40bgppVKYfQT/jh49itFohPX1\r\n9cw67YU/ox/yzNk4/F6GoAnde6noPgOatcjsm83muVo1D6etly2co6rNDWSrMW/7FYKpaj3pB60T\r\nE89QcQ6VnDIKSnko2QdGneuKOEXwp+6xW2JF3a6qpk7jwh0QnH1N36U1bFh1mDM0hsAyOdxorg31\r\nE4C8iaLz0xpH/UtVOwmgpLHnRQHo+hwU5HLCGYh8Dkkp0aRnLMsS40ncM6yvr6ewYN09n6qgRiWU\r\nNJCigECBWtZpLEKa723uIwLbg5dZFxVFlXWqkiYW/oCkCZL7CEHGnMFOQKq4jnUsS5LL9My+z+zP\r\neiABoM63CJApDLsP/gkhUKLMa31cdwJ4EbDd3Zt5rTYm7p1G1STrTD8yKZXHSvVwR+1n136Gv/nP\r\nfwu/+dhv4n988nfx0NZDd3+y2D4K4F+FEL4O4L8SQly41xPeSSPwzxiT1zMClkhOaYwpNJXmUmR+\r\nducZnndUVnj0wQehJeBTyo6NsoQxCs5a3HdkE0CnL8fJEU36rCwLnD19Cs55KClx6oETSe8FSCHg\r\nnYOCwLkzp/P4b66tY2tjE1KK5HC5t/7RWuPRRx/Nz0TOBmIdP/zww2lPE9fpvb09eO/x8Y9/HJ/+\r\n9KdRVZHF/JGPfAQhxLzZa2tr+MxnPtMDVieTSZ7rR44cwcbGRl7HPvrRj2Z9t7a2lvvog878A1bL\r\nTY7wYTqX9k60/t933305L9/Ro0fhvce5c+cARB1y9uzZrFeklPjkJz+Z9aL3Huvr69kpvLa2lvdF\r\nzrmeg3a436J97kMPPQQe5r7qOQ7bB70JFLrAp05+Av/xjd/A1F+H8xJWCQS5RAOHdiHw0isXoasS\r\ntW2xtrmB2rZQhcHOdA+mHOG1198EEHDs/jO4rzgF7wIWS4sXLryEtmghjcb13Z2ca33ZxsiltY11\r\nzF/fw1997AuwwmMjrOHxzUewvXY/PvLgY5hsjXL6kN5dH8oeawFKVgh7FnXlML74Gi597RvY+sTH\r\nMPnNfx+TGeCCj5md2T5O+LhevZdwKneo0d712LFjGZN5/PHH81q0ubmZU649+uijWC6XKMsS29vb\r\nGI/HORUZtycP5eSX3zRtrKlKFBkItNhprbPBMgwt9N5jVFY4unVfDPOtxoD18Ik5VkiNzSPrGJky\r\nswiFC1BUXTWIDDDQBpk2dLSwlWX8LYVPUlgaAR4cyCLQkO4R6Fd4pcZZWm1rUdcN6rrJbCZaZOu6\r\nzjmZyrJM1y7RtjIbQGR48rxltDkSQuSk1WQEzmazDNJQ1bq9vT3s7u5iNpvl3xOowNlIBHJyj7ZA\r\nv3otf17OWOPGJuU+c85ByI45NwRkaCNOABoxcSaTSTZWi7LCYrFI4XnAaDTC9vYWHnvsURw9ej+s\r\nbXHz5k1cvPgy9vZ20TQ1Tp48mVhFG1jMu2rDBMCRoUobneH1qX95tV8pYwHKCFTFsOimQXouwNoG\r\nTdNisWgT09BjuYwhRVz+eF/yHAec+ccBvVliutHmi/pwNBplAJfGj1hX8XUseOI9EEKs/miMhJSR\r\nvQhIjEYTvPnmm2nMHIyZoSxHiBVCDSaTdYQQ5ygVkZnNYnh+rjaZ7o1AAg6G0vym+UJ58MgwIOZh\r\nNrgzu7KrtkzMOC5/9JoK3pAOoYWC2FlCCCxmyaBWAkoVoPDVeL2AZT0DXAwdjc8tAGhoDYRQANKj\r\nljVEABof4EOsxuIDIAJgVAeEhlQkwCgAWsBLDzDwh8aOM+/4HKTXBI5ygJeDJiS/3LM1BL2okRHL\r\n5yAHAWlDPzwHtdsl8+ZA3FAPAoBIQD2XTdK3o9EIdV1jNBphY2MjM0/piLobvecnvUrvTafTHljC\r\nnyXqrzg+2ggYVaLQBaqiwmQ0TiHkezEn4HKJhYp6xvkWITgI4TFdLCBSaOVyWWCxKHthy1U1zjJO\r\nehgQ8D46G5TqM4Vo7HNagdDppO7+qchMrFQc9UcE9Clkt2OW9pmBlO6Bzk8sTPqMZIr6kIeRUz/2\r\nQs+DzrqFZIgDjKS/+drEw8CaOmRwuyzRC/UGYtXb/SAg4H0E6/emu/me9qYF9vb2sLc7zWsbAf5l\r\nOUJRlBiPKhi9hqqM+lyoZU4tEcHdeJB+MsZAK5PYSTYZviVibkcFIQqEkNYs18K7qB9iCDXl7UUE\r\n70J0YCEoGK1QmArK1qlPkBmSwbvEIwvQMm67RfDw1gNSIjB5ny+ifCtJaQFkcmbFtnNjmtZtoGmW\r\nqOsCy+UCRRHlM5TR8Wrt2012nUofs/aNF76BP7/w5/j7n/lt/Hf/4X+P9eKeqwf/DQBPhhD+FwD/\r\nrRBi915PeLtGzt8u8mCOra0tTCaR4ckdHbSfKooi67lVjRybwrmY79K2kIhzV1gH4Ty00bGStac8\r\noR3QCADOxhycIQQ0vkVZFBAAbFpr8z4tVSL3aT4G77GsW8SiZ3ffhvtAvkejfSFfM0KIRdmeeOKJ\r\nvDfhAN+Q5UbAK3eSkfOCPqN80cT+5/tF7nT4ILbhGkr9S42eNTvNU9+QI5Fyf5Njm37DdboQXQE7\r\nugYBt9wBzMeAR+/QOJBTsW2jnryd/B+2D0ELgLYVfuuv/C185exT0EqhcYDTEgoB2jkoXWX54k4A\r\n2hOYskK7qKGgII1EI1sEARhnIFvAKQttur06RTFEXSjQtgsUZQnvSvzdx/8ejAFcA2yoCpiWaMu2\r\nd8uHgE7XQgCsN6hCgKsA5Za4/q1/g1Of/STwn30Zly9PMYLFaG2C8doEkALOupRlWrynwN+wkS4k\r\n7MZ7j6NHj2adJaXMDqTNzU1sbGxkW35jYwMAcvTmB33d+CA39cQTT5znVVCrqopMt2Q0cJYLGacA\r\nco49OIfgPQpjoJWK1Q/bFoUxmIzHaOo6qvw5AAAgAElEQVQawftcAVJJCaM1yqKA0RqN3c9I4yyH\r\njY2NrLyG9HfKNzZkv/DNEWcacSOPGhUHoXNPJpNYETUZWD50YX0EOBEA4r2Hs/08QLRp4uwzYsoB\r\n/RxCxPLioMGQ2UeTYxXzx6XN7BDc431Bz8+ZTZyJ4xJT8SAGEeWuGgLDJAfjcdn1BQvDoYm+trYG\r\nay2uXr2K3d3dDHZsbm7i6NGjmM+W+XmGzCUOnnFmCw8j9aHLQ0n3QX1G7MRVTBbOXuFgN+97Hg7M\r\n+5W32aILjZ/NZjkHH/VZVZWIIWRd+CCdKz6j6d0zr5Q7XMRJNjg4ub62CUDAtjYaKL4rTIAQjRYp\r\nFQpTxFDCANjWom0tbGtBoXEHAVj82pz1SgAFFQGi/uXyoVSXVJz3Ie9v79I1QQCFRwjd/IGgDXcK\r\nQ/S0sU7hdKKfa5HrqHivHWtxFQCltNr3O36vPHyGG1zUPzxselUbMrX4XwJ9uFxxkG7oGVt1DOfs\r\nQZ9zmeF90XibQNHkWYxp+iBkrOR7/cYNLOsaddOko06V3Fs0bQvAIeb46997URgUhUnzXbJ7QurP\r\nJPO+gJQaSproENIKWhtorbKeL4oCplApTygS8JPYnkJCyIAAB+scrGvTvcX79V7CWpeqSQd4H5k/\r\niPVW4YPNzyuVgtIivY6HD4BUMubCS9+RSuaqv8L33d00vnzNIACdF43qgPS+sceZb23b5twpw3Gm\r\nMYzpDfrsSn5+zj7mMkyvu2rmq9mppB/5nOVzqPY1rLNobYO2tWhai7ppsFg2mC8WsXhWY+F8ZNsp\r\nXcKYMapqDaPROqSeAiLpFhErVcd/R8Y5AHhvU4ErC59BeQEfYv7FmBNQIeaF1VBSx0p5ygACkFJB\r\nIOUstTFA1JjIJDRSQGsFrRWkFAk0pFy43V+qtBzd8CknrAyYzeZo2ybmkfRpLoDGSKBplhBUHUoE\r\n+ECgb4O6XuLajRmausWZ08fxwLHtW+oSAHj6pf8P37n0nSQ3Weiivgfgg8dfvvZ9fO2Zr2G9XMOn\r\nHvjUvRphCsAXAfyX58+f3zt//vyPvvrVr+4TlPPnz2sA/83dXoSAENpbUWqQy5cvR0B5bw87Ozs5\r\nlHZnZwdXrlzBYrHAiRMncmGyYevmo4AUgGtbaNL1gYpyyZgLlLGwhzIfczIGGK2g0/fjOhXBYS0l\r\nlI7vkyOA5/K8VwMnr5fD/VsC7OgzAoboetyJxcFMPpdpLaN+56lt6BzUaG9LemTIBP+gNt4vB7VV\r\njjwaBwLxyGFOAAoVDaFxIqIAgGwH0F8OpnIHDx8nDjTzfS/J6mH7cLYgAhZygQIaxpaQwUAGCS0l\r\nTJDQUJCIkQgKgJES8B6FUoBzKLRGaxtUpoQSGtKH+HsI6AAoCWglAOcgE5gtQoCR8Rq+bVGZCUIb\r\nC3mOdQVlNXTQUKqAEwEe/SiWw9Y1AQElC7SlgG92Uc7mmB0/AvuRvwJAY7FcYn1tgvFkDKkVbNIR\r\nWiqIgIihvI3wAE6KupfGdX/I62U/TzqtSRzIG2Ia3D7njnTSfavW7sN2Z+1ux1o98cQT53mOMKBL\r\n5s+T1XNDhozSaLyFJNgxcXoEHQIQAO8cFvMFEAKkkBnFptfBB3hBVSJdz8jhiyoZTZyBOBS2IXBB\r\nrAoKdaDGBZJ77Op6mTc8nLkSqxV2AEnM4dOFcoXQhZsC2AewEQA1BG+8jyGYm5ub+wBL/vxDUIu+\r\nS8UZgD5AMDQ6h89N38sbGcnyOaWQadqQECtleH56r21bQERgK8pFZNUIIVCWFcbjSQ4dp1xKFNZn\r\njIlhI6FvrHLPKt+AUht6RseTrqgLbbj4vfKx5xOkly9oABxxsHjoUeXgltYaPj3vfD7Hzs5OLnZB\r\n1yDjfQiO5OfwXYg4GZ5kNNB7RWEQQ8gj+BUBsAiGGVMAAtBadd8J0Xj2wSMgso+MiWwYl94XiaFE\r\njFwe9kf9T89OjEv63hBQHoIbXP4ISCV5J9YTtaoaQQjeryT7sR+koo2vQywoExCLIkS2zaiqIKSA\r\nDynnkxAMxIoADgTgQwSGfIgMDqkktOnCEofjQscQnOfMMNJHPNySOxhIflcBj0N5pj4fAqmkS24F\r\n7g3vm8sv10XUOLPWOgcpJLSKgIkkICEAwQfUyxreOdi2xWK+wGw6xWw6w3w2w3RvD1ICTdPCOQ9r\r\nuQ4XWRfE+U0hpZGFk0Eop9N4RXCNAEIpVWSDaoWyKlFWJYqyRFEV0EYl8E0BMrFBAxCSjDjbwlkH\r\nZ1vY1udw/7axCSQP8C7AO48QHBAEW7finIzTK4aXaiV765tK8ikF4BPzkvc912feB6ZTYj6/LL8J\r\n4O+z7bpQQ5ItqlTNmdwdONFnFHHdxFko/DMuD0qanjHfk40EQNJ1SZfyeQDpEbyPa7mL7DhnHdqm\r\nRb1cYjFfYD5bol4u0dQN2sbBth7Oxpx40kxB+QmVligoxYjiRjYxUxtY5+CsjYCga4Gg4KxPuoFy\r\n0JKOUGiaOoXbFjCmgJTkLACCj0aPkCIfpBe00SjKIupJHXMNxmkREgAYEOCBILJejmu/gw82MweV\r\n0jCG9KPKui6C1A3mdezLB8+ewOlTx/bph2HrwD8CmET6Xx+YmDZT/MsX/xW++fM/xePHHsfpjdO3\r\nPfdt2jqAvwngb5w/f/4nX/3qVy/xD+8V/AO6UFaStc3NTYzH45yKgq/JWmusr6/jzJkzOH36dI+l\r\ntaqFEOCChVBRv8Q1UCGIVCqHbaD5/OAOL4kY3kv7W6m6QlhSxerqCNHJLUUEF2lv7J2nAburxh1c\r\n3KnDQZ+hc54bBXwPyqM8AOR9Ip2Xnp8DUcPrcGIA5WD8ILfbOdOAvvFLfQNgnzFMax79hvqXbBla\r\nl7njmX4HoCeHZIt09kfHxOT7kkPA5cPdBASKUEK0KjrSNBCUQxAtPDyskGgC4KWClwptAILS8a9U\r\nsELAqRgO45yLsQvawAqgRQuvgcYFOCHiAaD1Hk4ItCFAaAPvBKTWCM0SAQoICgExVDVgCaS9yKEc\r\n7m8BAU1wmFgPV2rYskR19AEsjMGGNDgyGaMcjxHQseeUUgjOxzVFyiHR/5bt3QD/uB6kf/NrcIwB\r\n6IhD9F36nNtJh7Jy7+1ux1pzsIuzDzh4MjQquWfKCJMXpcxUERGoW9YtQgBk3mEBBE5YlzYzRdkz\r\nPMhzRgYUVcklg4bYWsSQorAy2hhxVhfPz3aQd5KAFCklfLCYzfdgXYOiKDBZGyFgMxZfmC7gHWB0\r\nme5PQ0oHY2gCKMT8eAW8t6kPIwMuVg2LTBWlRGJc1KjrBRaLI5BS9qq6dqGhLhddoPACAL1xIvos\r\n33BwLzCdlwCXXo6c+OXkdY/J7Y2hHEkOQjhYy0HPjm2yWNQAaszmN7G9vY3t7W0YYzK4Q/czHo9x\r\n9uxZVFWFixcv4sUXX8SNGzdw4cIFeO/x8EOP5JCYaHQCxigABlJSzjWRwntJwVjM51MsFjOsrZ8Y\r\ngKYEFlE/BcTqkxUo1yKFvVIuIaDbOK8CDTkLgDZ6JK9lFcMvAiysq9G0NeYLAakCTGOwubnBFF13\r\n/qKIpbFiWGwH1LZtC+db+GDhg8V9929FKv+ezszJZT1HxFk9FotZCqszADysbXob/7qOzBMpuxDo\r\n2L9xzlPBGVIeo9EoyxOBAJxdQI4Bks+qqnIfkWKnhYtAscVike+dQECao1tHjiFWn0Uakw5k1EZB\r\nqwLOJYPQuSivXiB4BS8AqQy0AcoKEDKyFiAa+CAgg0BAi+AAkfSQt4HZYH3K+aqNP+lGPne4jgTA\r\nCtB0zDqSE9I/JEPUSN+SIcWdA0NDj77PG3eS8M9XfY8bCHysvPcJWI6gXwgBPgQ4a2G5o8JaLJ3D\r\nMj3jsixRL2LFXamQwjtjcRdyIPA8kPx5u7QCMeRdKZE3kN4lYAUCkNFTOkk5GZ1zKNsaZlFAKgOp\r\nplH3mQhM16rGchnQtgSceXghsNjrwtvLcoTxeILxaC0VojGQyueQd2k0hJSQAdFY90ChNUJQCMrB\r\nJS94lMekY1nBGG5g8/eocZCWxh1gLHo2XjS+e3t7+furQPaymOyTVS4DXdiO7KVVyHLh+s430vfO\r\ndbqKH0PmaGXKmPcx0DkdbAgINsBJiflezCO5d7PAaDTB+tpGYoRvRLnZBILXUFJAq1jVHQCKIgKP\r\ne7uzNOdsvk/nWjgfw+naNjCwU67sA65vgQ789h4ISiZAL8T8gKq/iWqdBbyAREAQHvACPhWzCQCK\r\nssu/6n2TwncjMzAEg8KMe2uK91RZPZ5/bSQBWHhb491oP7z8Q3zpD7+Mv/2xv4V/9OV/hDMbZ+71\r\nlJ8F8K0Qwv8N4L8WQly897vsh0ByRtsDDzyABx54oLcmc30MdLl4ubOTn5caN1aCizqHNy07UIfr\r\nUyGic4HPW6k7Zy+tlVJEyp/1LuVxlGitjRzjd8DG4fs6oL9nGUZ+kOFFQCnpf+4QoDWKdASBWkPn\r\nEnc6A+it87Rf/zC2IbtlaP/QuPMCWjzVCgdQgS7KCOgMNhqXYVQE/YbGA4jjT2HEHKil8/H7PWwf\r\nrhYQMNNT6MKkMmoBwnqUrQRQIigJJaLDNoQACQG4ABEAbRSauk17rRDXWShYH1NwSRiEtoURJUSg\r\niBwPGWRXEE0oNLrFwi0xlgHQFnUIUD6g1QGll5QN5bAd0ApRwwYD1BoTXaKZ19gyAj54KGjUrHig\r\nRKy07Agsk8k5/R41bm9wW4Kz+ri9A3S6i9jkAHq2JXdkvBNA5WF7e0098cQT57lRSIwvAqCGXi9u\r\n3ACADxIuBFjn0bQWTTIcQ4y3SckrARdCzMOlVMwzJWJIFc+NxRFM2rhwsK+qKozH47zA1nXdbeYG\r\nG8O+QdPPK0fAYVEUaG2N5XKB1jaI4AmxAKNhXFUjWOtyxVopVaoqWaGqRjEJuBIpH0w8IFLCMVAY\r\nU0gVS5GYcum78NjbnUGpmDyZWIqrAEsOKpCxU5Ylbu7s5Xx4tCnhm0IyKskQpwIHdV0nYFXBWgfb\r\nOrSthXORzaCVQVGUsK1DpDx0uZ68C3A2Mn2aZonClBiPJihMieARw+ych3Medd1AypjsXECibSyW\r\nyxrz+QI7OzexsbkGIQGlZTLwPIrSoKpKGKPRtjGXoBCAkECAzywu61pYGzdTvAAIhUcQq5Mz0Yby\r\nQowRzuDiYDavQE2KjJRX0zQIIrL6iKFXFAZCANa2WC4XqJsabRMVXcx1V0IIlQHdra1NhOAxn8+w\r\nXC4QgocxGmVZoKpKUEillAKjUYXJZIyiMGiaGnt7u5Cp6rKUAlVVYjSqoHWsYr1YzHN4UpZNFooU\r\n+1XlXJlN0/Q2udyw4B4d0gMEMnL9wOchD5PvkvYXvfk7n83RNEtoHQvoKC0zwyYEh7IYpYkTEnga\r\nD5/kzLqYIFcZg7IaoSgrKG0QhEAQApAWutCROVYV0IUGJOC8Q+tarE82VhZa4AAeH/8hsECLFxkB\r\npDep/3iOTi53B/096BrDMeGb/1UHtYMYMXROwf6LaRkUjDYoixJVWUJAQCudmG8KCAHOOjR1jcV8\r\njqvX3sLOzk3s7U4xnc6wWCzR1G3WD1E+gVijNQEnAZBCRR1TlpBaIogQAcCAxE4FAgSKcgSpFbQp\r\noE0BU1Qoqwqj8RomaxtQwqEqiwigJ3aOFDKxbwTKxLwOPqanCC6Cm02d5kfj4VoPBJkY6TKz/qLO\r\nS7pYCGilYHRiSWoJYzS8QwxTVgZKakihsr5EiOGoUiTGHzr5jaGpBqNx1ZsjtC7RQZskvqbx/IFt\r\n67Lu56xDHhLGf0//pus4H5HxrGPZQboiFlmJTDVr26QzU/VbEQF173xiOiH1f9KJRkHAwzuHtlmi\r\nbZdomwZts0S9nEOqCm3jEwBYwehYCbcqJ6iqCaRErxiYDy3atsZiOcN8Po1MwrR2x/Dy6NCztkXT\r\n1BhPxj3HStPEHH+0n5BKQUgVaZxCMhaqhFQK1WiEsooypwsNZXQKiQeC8JCI+pfYi1nX+nQfbVeM\r\nLM28NPfi+FTKQYUWZ86ewpkzt2fn9Zl/US+C0jyg2/+IbhABAM9d+xn+1x/9IVpn8flTn4eW+4Gy\r\nt9EEgF8B8PfPnz9fnD9//nvp/Xti/lEjhhSBqqRHaT/D90cEGt4OgBLEjgwCAnGuBx+glYlzNghQ\r\nSgmgizzIIE/aJ0jVMTACAoJAZpCH0FVXH+7hAt4ZlgOtATzfEtCtQ5QqhGScGu2N6JmGTgmgvxYR\r\ngEjn5c59bvhxoPGDzOJYBRLzvQDQ9RMZssP9OQfjqM84+4XnR6TQ4CG5gv7N9158/efMmaFt9kHu\r\n/8N26yYgUGAMYyWk9/BBwKCAFtEZvxQOCksIEZ1QZangfQ1jBEJoIYRFIQ08ElEhtAjeQUkJrQHv\r\nYy505xpIGQB4SOlT2gsf3w8xAqlQFeqmgRIShSjhrIXyOuvFQzlc0QQArSC8QhkMrHcQRqIIMaWE\r\nkwFaaigpARejKRBCTEWTdPfb6dd3g/nH2d68ee8xnU6zDU66cDqdZhuc3iPbD+jLyaHM3H2727FW\r\nX/rSl87zSoO0cSGWD9AfGL44xaOAIGRLUE4kRUhXDIcIAc57CCHTZlvC+wDn9oe08caNXC54BEbw\r\nTcswpLULy+0qA5ORxdkyRalynhZirnhPrL0CMeWNSEYbhYsmQAwCSiFv/olFyI0AHsZLYZxA56EV\r\n6JhFHHSisFry9FHC+j7LTQKhS/JMfTLMXzbsXw7ehhAZaTzJfLwX2bufEBDZNGmTS6Fr2sQwNmtj\r\nv4QQjWGTcszVdQNjClTVCJPJGtbXNzAajdG2Fnt7U+xNd2CMzlVqjdEJ9Gsxm03T9Xn+AJcNrWz4\r\nMKCJwuhIjjlgEnLevZCeQQApiTdnuBFQykPyOPOGzqeUgtQyg9MErvI+ns3mCUDlm8XOW6t1F85+\r\nENuQz7choyUmvd8P/tA90aLBwSUOJAH9OcU9PNQXvH8IUB+GZXPWJH8dGVZ94No5h8Vigfl8Dk0A\r\nhZZQmkALkcKYVWJydazOKKMJzPDk6USej8EHBJaKwPm612/UPzSewfYrffI+4glpuYLljhD697AR\r\nSEMG1Cr9NgRLV40xByKHRht/nlXnP+jehmwuko9V3x2Ch/w6Qgi0mcnncwJyqtS+WCwAdAnmeR/T\r\nfF0slj2GqbVNdkCRUR98TKQfsWsBKWKOQGNKKNkyva5AVVdj3kCddQcxx2JVcaQwZYvgVWYK2tbH\r\nfJi2zfqMwk/j8iZAuQopzFPrMus7rSMjnFJD8EOICH6G0OncGALtsjxyAJrGbujMGTrhnO0z+YZA\r\nM9cHw9dxbJhzhYF+3FngUy47+ssPAZ11QnftkH9HayZV7/bewfnIbm7aJeYLYDFvUdcWbRtzEHof\r\nELwAoOBcAyHi2qk0zZF4n/FvdLZQWC49g1Qy5fGL6RMIGBzOqbimpZDlxOiTsgPnesa3or4jlq+E\r\nllRcRLJnj3sC52xmVsbP+LyOY1DJBRQCzpw9g5Onb8/K64F/8UTpdXr+zgLr5ml6z3qLb138Fv75\r\nM/877hvfj08c//htr3ebZgA8AeC/AHAdwG/d7YkIxONyTgAKZ5zRegSg931+HqCf4kOI5NzwEZh2\r\nzqX1QSP4ANtaxJQl/T0k14e0HqwyXHyc0IAArLMxj6yiPLUClILinTBvOKOe+ofuVSnViwSh/Q/p\r\niyFYxNtwDzpkotH5qC/4tfm6+WFqeY8u+gxI0h2rim1x4HQo03yN57I9ZLUK0RW9od/S/pDOezun\r\n5GH7cLUAwEJAewcNRMd2UAg+wKkG1ljoYBBzGcsc8RSCgPOA1iWC0/BQ8NJDyAJClPBOwrkYQRMg\r\noXQRf+8DlC7QWgdAAkIBwcL7Fq1X0NpDCyC0HkYDIWjEXLiHMriqiSCg2wJOO3hVwykLqzQaB1RF\r\nAetrCC9j3nbmePGJnf52nUfvNPjHnRPcCW2MwWw2w0svvYTt7W147/Hiiy9m3cdtYqDDargeO8z5\r\nd2/trsG/J5988vwqT2AP4BgY9r3FTChIOVx8aJHsCyt9jxtPwH7W0NCQWWWg0maMG6dDsJCHQpDA\r\nEcAHpM2j6s7VbZTipi3maxIZkHLOYTqd5iIHsS8ISKIB6MAdpRQWi3k+v9YGlPOKQCgpdGYMUZhs\r\nVVWZGUUFMoj9wPtEKQWjywz+EQMQ6HK4rWJycQCEvN3d5oYb+AHj8QhSdmAqGXRKUc6qeP9U8RdA\r\nZq0Mw002NjawtbWVkyC3bYtLly4CAMqywmg0TlVyFZomAp/j8XjlmKYR74VRcHYfbUqHoM9QtiOY\r\n2M9Hx+WeMy35RprANaiQGXdVVWbmX2Q+Ouzt7cYwXh/ZIDR2MQ9VmcGE4byje+a5dDo56gBJIivw\r\nuUEsQ5IjOgf1H9/AUuEMUtYEunCZ4YADz3VHBgcHy4ahr6tYfySv0YMeMquCwMaiKDN4PJ/PmLFN\r\neSXJyAvZsA0hhe6lvF0qGf8+WPRzrfVzorV1P68pB9o4c4obTrxxQD0DMq6rFks5A7ks8UWc5gln\r\nHQ7Bv2HjsrzqO0N9ehBAuAok4t9f9bzD5tHPQ0qg7mw2w97eXk83UBoG0gcxHKDNY2WMzjLSOR32\r\nA6ScvV0WEmU5QlWNUJVjlOUYZVmhKMpc8beTGQr5bBI4OQeCSjLdoG0btLZOAGR8T0oNl5jOMbQ1\r\ngQKJHVgUZb7XVUbeEHgbjqPzbe+ZhgU66BlWhbMKIeBsx9YfVncfhh/TfByea9W9098h+Mt1QQRR\r\nVC8cnsvekPFCTq/Imo79vzvdw3S2i8VyjrqZw9plTF3gajTtElp1BWG0LmB0ASU1lDJQqoBPOpXW\r\nUJIxevYuD60E5QGMwJ6GEJLpzzQ/EPWEgAKlgezmhIQUKusirTWMKnuAL607pCcROgYbMSZpvikV\r\nGaqQBqcfPIsTJ0/ecq4BwNMXnsa3X/kOWQN9gK8H/hEu2IFO9N3dZhdff/7r+PbFb+OTJz7pjk+O\r\n36uVsIF7AP54o/WXGxtDEJDPAXr/IGYE35MGxGgLkQBuCI8AB8AlJy7y+NF8obECGDs7AAgSIggY\r\nKGgowPrInBYxZMs2cT8nAoDkjLpX9I/r6aHOpnaQc4jviQDkwhP89zTfKZSLA1/Dvlilyz4MbZXT\r\nfAiC0ufArddnvv5TXxOATfqSmJpDcgMHVrkNRExwuh8CpN8JQ/+wvX+bCAE6eMAINMFBCQNpYzQC\r\nBCC8hUAsIAYWYUBrHyAQUuEpCQURaB4nmy/+Ku1rQlyXAq0rHlIJNFJgbA2MExAKsKKBVHEP0ADQ\r\nHxId8K41ibR/lBBBQYU4YsEFyKAAFRftXn7h1ARf2w9oQ3zknQT/hrjL66+/jr29PTjncPnyZYQQ\r\ncP36dZRliddeew1aa0ynU2xtbWU7atXa8WFZN97Ldtfg31NPPXV+FTA03DQcdEQPfWyrjFAOWA0X\r\n1INopL0bZCFL3BM3BHr4PXAhk1JmUCOE0KumGjd43b1Qo5BOCiumjSDdNxlby+USa2sjkLd/CLKR\r\nh48MOnoO+m7cGKh8PnreoXFGmwcA+0AUypFEYEOPFcj6Y5VBSjkUDwIGvPe9asqrNpxChB7Ywb2j\r\nBOYQK4gDT1TwY2fnOqSUGbgkoJPun9in3Jjl40/PXtcxZ1IMye6KgNA1D+r/EFzPk8ENZpIZkmO6\r\nFhkoWmt4YaGNTsnkJfu+RFWVaBoHkdgGbWMTa7Qz9oXogxq8eMxwfnBQKjNXbMjywavKcTYvycow\r\ncT8AaF3k73Jwk/5S2HRZlpBSZgObA5PkvRmyR+kz+i5nZlL/0yaYcjDS94aMBr4pp/eooEKnUzoA\r\ngs4jpM2snw5oZewQ33dw0DW7/tErQVn+l9/XEAAkFsVB+oGMAz5n+LzlYcNDUI9kYtX8Hc79VZ+v\r\nepZVOvxWTai+buTVaonhuVgsuqIbCaQinUf3xYEpftC8pu8M5UvLWNHZmAj4FUVkGZdlmVNEaBOr\r\nuSoZmWAhOLR2ibZtUBQlvLe5AAPlzKQxbJoaTVOncSCGS8cuHDbeX/zZVgGEQqSNNRt3rj95br9V\r\nwKKUErb1K+WO/vI5f9Aazs83dHoM9wBDeQ9B7GMD8/vpf7cPHFprsWwi6OpcDCm2NlYOJgapMTo6\r\nnKRAZATrzLKMDrkuNxat2fwg3c6fvz/XU5iy7Nj9cQijU885i2hAdWw/pTSUjuMvwpCxO5g/iVna\r\nOVY69rRzDkZGs+v0mTM4cfLELecaADz90tP4zqVvJwFjcjYI+4Vgc5oBgvRvIQRe2XkF//T7/3Tn\r\nlZuv+F8/8+t6bMbv2U6cdAfXwbQf4E5MoJ8HjWR86AjerzNj+pmQHLUhsX+l0oCQaJo2ywaNDb8O\r\nndtamyt/++DRegfrYw5A52Ola4gu4qW1LcDWlFW6/E4Pfh8cYFr13H0mbvc+fz6+n6XXdM6h3ucs\r\nt+E57/W53g8H9Sntd6gPh/bJ8DdDfb9qvHgYO1/TqV+BjtHJxxXoV1vneze6V57T8b3uw8PjXTwA\r\nBMhYzE8EOGnRhAZNaJJDQ8XUJiFVpR8cIbjs6EghM0BI/0b8LAgPj1gQL1BRK+HhvIX1Nn4neFhp\r\nsZAekArCAr51MGUBP3D+HR788KliLxKSF4BA0X8ARGKQYzU4difX4Db/Ow3+0TnpXqbTmHPbGIPl\r\ncok33ngDIQQ89thjGfR76623cPToURRFkdO3DXGNVTbJYXt77a7Bv6985Svnh2AZN0aGxuXw8I7A\r\ns8D+0umJMeZBVTo5sLGK+bdKoEMIvU0ON6hC2G9s0flDCJlltlwuszHOwQViXvD7ohafp6t+KKXM\r\nwFvTNJhOpxiNYu6VeG3kic7BESE6NgBnwhlj0NT9DS/dt9Yao9Eo531aLBZ5Y8JzIFG13+GmMITQ\r\n27ANgYeuzyTbVPs8jmTIxOqIsfomhbUBIhnvFs41OX8SJfakvDwhhJzHkLMhpJRYW1uLiqGMAB5V\r\nyg0h9IoG8LDJgxrfrA9DN7nCIr1PkRYAACAASURBVHnmhq1z3aafb7woJyIVuBh6zkmOgqSw2hQW\r\n54nZR2HAJZQ0aJoWi0UMh7Q2GRVBwroIvhIoTfdL5yA25UHgB0JisPiQcy3SHPQ+pGq68XP+PuVk\r\npDlJoNxwPi6XsQo2Z0BysIf37VCpD/t/CAJSMZoQQmZecrYQ0cZ5yDvNIZK5COiQTPfDpr33MEWf\r\ngUzPRa2UJbRSudJtrHaLnEWLV8Dl70uRKsCuYFLRNfizcL1C48jHm+S4m3voyRvXDasW/FVtKNfD\r\n8XknFl7JwFF+X3Tt+XyeAWMaYwJmlstlzzHA+40b9avCXmkMpY9hwFrFvHtG65SzsEBZlOlvAZUc\r\nPbEoRIBMuWyE1AjomFmU087aeM/z+TzNWRvZfy4ghMQQg4IQ/ZxMw2MILFP/E6gRwEPHqO86JjOt\r\nJfHfMufGJP0YfJeHlOSE57olp8oqVh6tM3QtfhCYz+V1CGJG5xbJZndeOjfpGGLSx36I7Lu8LpkA\r\npQCqnkvrBzFIvffZMRBYuLQUGlIaVKMq32fHTve9NYEDzsP5Y0wV1zUZ5zOt48Tg987nf9MwhRAS\r\nixvwtiuQQP0YCzglfS6oQFLnNOTArIZC8MDZB8/ixKk7A/++fek7BPUxrDHQLWcZozWcyx39m7RZ\r\n7ZeLH73xI/f7P/r9pZEGnz35WaPkL79yawghO0BpnDhQNZQtknOgY6zdah8Zq8FLBAg4H/NPQ8TC\r\nYM7HsF3Brj3cR9I9CiEAmXIAhgCpJGxwsN5CiFix2geXjsgWplQvIdw9SAZ04FKf2dpfX4frG+/f\r\n/eH53do9BAR5Hw91+/C8H5aD+mE47ndip6xyfoSwnzG5yiENdBWTOQBI98HzvhKhgM49BGvf6z48\r\nPN6lwwfAK8CLWHTKWQgdI7CE0wjLxBgLq4/gidV38OfeucgIDAB8LHoWXICEhBIKykc7QmgFGyTQ\r\nKBS+hEi/9XiP++h9faRuDQFEQgghpGJpYd86M4wkOsiRSgff74SwP5LnbhvXfbQWEGnoypUruHnz\r\nJqqqwsbGBkajUXZszGaxUNuJEyfQtm3OUXvY3vl2t+CfBtBbTHgper7oHNwONqzpxviCSt40jiTf\r\nqq3yQobQAVvdhrureMsRcB4m6ZzLgI73MQzYFDIzxebzOYQQKMsSTdPkIghkOCilMJlMUJYlnIuV\r\nYpfLZRbuqqoyMEcG72S8HgGcsNzHXIsAj80hGE3TYD6fZ4CM2CtDBgP1Zdu2QIjPt7a2lisLc+YN\r\nZx4BYNc16br7cyfyzTfF9VPsPm1mOHuBwCvqE6rqGkLc0I9Go1xFdihrn/3sZ/GTn/wE8/kc0+kU\r\ne3t7OU/c5uYm6rrO56cx5R5vki8KL+QyUpblPqBjCCCPx+Ms55yBSNWVNzc3s9yOx+PMLMzfb5GV\r\nLilKLo/BGwgo1HWD5bLGctnAuZto2xa7u7vY2trsGEos5I8/J40njT0Zu1JKCHQbRz728/k8VglO\r\nzEkqEMM9xrFCYtEz5un7dB5ecKcH+mdmVNMzsnkYq5QSGxsbGejhIemj0SjLDM1PCg+9efNmYv0Y\r\nTCaTPG7UL/z8SnGGSzf2NGam6Kjq1IQQsK5BCEClq6zriNnI9c0qFi43Nj26kDMOPFCbzWYZXOUG\r\nAmct08GrsfLv0Xtcvw7lmT/bqsX+oIV3+Hs6x50u1K2zUKBiDD5uACM6CqFkrJZqBfwiYNnU2J3u\r\n9XTl8ePHoVQXps5zbQoRK2dKKXMRD3qWXF22jekkghSQEpBSoyg0jIlzMRbOqVBWBmv1GE2zxHI5\r\nyqDe7l4DZwGXKps7hwjI1wRw03xuUZYWVRnQVkBVxUTZ5agfIs8BVz6W/Du9cZQ2s8L4Jo/kmzZc\r\ndI5hCEXwOssvgVykK/jGkf7NmazDMae/3EHEPb90Ds4yFyx3Cx18AzoE5PaBocLBBcB7AddaoE1M\r\ndCSmtXMoihKj0QiTyTpG1SQ5haLeOrI1SkysmE+Y1uu8ToaAumnQtC2WdZ3ljp5/bUx6IQGUIhb/\r\niInTPaR0iKFRApQTLm7euzBRelZ6rjjfE6BlVNLPda8wF43JYrqENBLW2Tuab9Ti3UaLIgggFrJI\r\nczaI/jfjl+M40suBirixuBH+4f/7D2e//8PfX/7jp/7x5K8/8teLt3VD99iEELm4FvXn8PWt2p1+\r\nb/jdIbvrlucJcewhBEQR3wgAShj68YG6N75/b0wMfq/DdeDga95ZO+j7q9hvH9ZGfTDsi7fbl6sa\r\n7REA3JFsDz/j6zTZK+/k/R22939r4WCggQB4ryBUQEh59VEAVt09uNKtuKz5nPMi/g2IxfIQoCEg\r\ndayTBVEgCAo7PmwHNrYOrxqpd2sG326tuJMmhMjFO7z32N7exsbGRq5JQPbrYrHA8ePHUdd1jhrk\r\nGNBhe/809dRTT53nm3VudJBhzttwoy/QMQFWMZMIkKDFj38+BLRuhZzzxsOGeNWzIeLNjfmhUUa/\r\nMaZjEFIYGoFPw3BWHmpM55zNpwAox16/2EMU/NR/YpgUOYUfhj4bj/cFn1gEKhIgQ5MxBJGNaRo3\r\n/sxkCHEWCp3fe4+qGvU87EPP93BjTM/QheO0+Zm5gUpgCM8DyJN/0n1WVZGZgOvr6/DeZwYgAQEc\r\nUCHgh4zQISDFQ19pLLl88GeK/XIwrZrep/4kAI1YaG3bAqrLxxI9aCH3dwTnKJSR/lK1Wp+AM9uT\r\nreH8oEbyy8F5733MgZWT2UeZ4gVohIiha0J0ie+JiQAEUNg5yQln1HI57nL09YEnHmJIMsTlpSzL\r\n3twcMk8JXCaDnGSG5/AKIeRwd3r2Thd054XAvnEWMhUakpSnK+ZVMyl/mG1crNqYegRCZDBB6ZRP\r\nRYpE1Rc55CuCDd2itgqg47K2KjSej/NQRulzApqHACSX+aGMcIbmKsOA399Qxla9vlUTsqsYHHwK\r\nbQCgEmDnXawoJyBSxdcGbdPAWYu2aeGdx3IRK8DatoWPVLJ0Lso9kzzfoTuIhallCSBWjvfBpzGM\r\nTGWlJbTRqQiVhNIautDQRsEUBcqqhFYlqqqAKSgVRAJ0Uo4waxNT1sa8f84FOBfQNh5NYyFkJ6vD\r\nMNshWLsqbL9p6zT3TXbIxDkuM/DY5auUWZfE8dXgKQTotyQv3AlGc5PfJ83nITOVyxdPCzF02gkh\r\noKTp6VOuN/mawuWfO448lllXee8RnE9FeyLTr1la1MsGTe3QLB2auo0VfluPpm4hpY2MBaSK9klP\r\nGJNYoFSwyFo4axF8qjzctqiXS8Br2NYheM7e0xlwFnnd7PJGOt9Vszeq21PEPom/J50mQHIVGch8\r\njySlhK0tfHB46OFzOPPgnRT8eBrfycy/PGIdE5DyNlFjURg98EHE7zWhXvAzXZtfC1979mvL7736\r\nPfu5U5/T94/v/6UgP3RvPKcZraNAH4TiQDL/jMvtvgNADHNLujevf0Dch3lA7N+H5f1P6O5TUELF\r\nICDg8/kFVGSKSpU+S2tGzr119wdde7g+DPtwCDANz0HPNlwX+JpO+uJW11h13nt5vvf64M9wUN/c\r\n6TmG4PKq73GgkV9j+PtVfbvq97eV/8PjA31AAFYsIRDiupRz+iUdJgWEiGDc3RwiLwlx3yPA3kzv\r\nCyGTX8nGMpgC8MLBCg8vAH1A8cHDI+mCFMUBeh9pxT7g+1wv0Fp4u2scpPOHOuZOG2f+8XWWswBp\r\nTwMgpyDIzvtk3xG54rC98+1umX/qy1/+8vkhO4FAOedcr1LLyhMow4SKG71xc9s0NUhBdcaDSHql\r\nX5SB2kEGKX3GKbEEDq0CFwhA48AXfzbnHLSRGfwiFtMwvCmELtyQMzyUUphNZ+AJxHthOEg5gwSB\r\nQd2GwHubQBmzcqJy1lVZlpkBNZ/PsVgsIIRIobZdrjnOxKP7JECTM0+4EuFMvi4heb+wRle1OGWe\r\nYGzLyKAKPfCIh2ENx3cfeCxjaPCRI0cwGo2wWCxw8+bNHOJMoZHD0E9SSsR644YAvyb12xDwoKMs\r\nOzCSh2SQQb2zs9PLy0KGGwFfutCJEQAI0RnqFIYrZd8wj0cM52vbJrHvukI0NI58bLjRzQHsOM86\r\n4I/WaiBWN7WuRWQqhAh4mHRtRHDQOQutysx0HIK3AHJePl4MZcg+oL7gjBt+n9R/QweBEJGFyPNw\r\nchYTLz5C/TNUct51stpVA+7mmXMOCBJaEyhQQOsClKS/rpsI/dEGRwoIGb2pSmss6zptiCisjgOB\r\nAnbA5BkCP9w5wVlY1H80d7m+43qMGJf8M/45B1v5+3QcBP4N5wnXQcO/t2pFYfaFTMcQyngE7xP4\r\nhwy8EIAXvMd0bw/z2QyL+Rz1sgMBnbWwbYvCGCCEfH466JxSaoK8EYJPSa0FpBJRHyM5XFmIttIF\r\nlNY5JD+yeQsUhUl6PPcUbBvnSaxQSww2B+cd2rZG3ex1YcEM5KIQZ2LSUhuCs3W9yM4dcvAAXQ5X\r\nyrXJx6cPLHZrEXcgcJ3IAWgOyPGclEPQml7zvIyrrq91kfurO0f3N4ZRu8Gc7g7n6jzewQWCkSGC\r\ngAgBzTJ+5m0E+byLMuStg2tbeB9/jxB6cicR5aQqSgTv8zW8cwjOp3M6tG1MdxHlXUJKneZRAlFB\r\n7N8up18IIVeeHpUF65cOEKUUGULEKsFKyxiarilvYAwPnk13YZ3FQ488jHMPnbvtfHv65afxnVe+\r\nw94R6E3T4ZQNg7cDwebxnSH4R19+8fqL7p/94J8t9po9/8VTXyxKXb59y+Eu2tDYoZQtlGOZmAfD\r\n3LN3ZNiQ/ibnS3o75mKKhWFyZyYdHwB4HytLd79n+7VkgEeWTASL4znpVAQSinumdgydRtRfd2r8\r\nAX2gdAiuDteAg0CwYTvoWh+0xmWPDFce+XSrZ+T7Nm7XDPtmCGrz16vu46D1ezguq7532D5ELQC6\r\nNZBSJQKeBAIgQpIj4VIqkrv/zwt6FZ21Ids1ScaEAAIgQypkJD2CENDQUFZCqEP5u1XLujWvvvmT\r\nuDbcwinzdnTsna4Fd9KGZI4QQs9O5ftHjsN09nXZK8p52N75drfgnyZAgoMLdMJhCeZVRqFUCThh\r\n1Xvpt1JKbB5Z7+W6CXAxV4qMLCSgXwaa/+Xvrwp7o0UW6Ifn8YWXNov897R5tNZibb3KDEJCqAnV\r\nLssyhyfSuciQIcP82LGTWC7nWCxqeA9s6DUUZQUfbAKweDgQIEQAhEXbyripRNFj6/EFX0qZw16B\r\nCMRsbm5isVjAWovr169j68jR3vjw3Hs8FJXAHedcDsM1xmBZz6G0wGRthGpU5KrBOdzZt4BQUEJA\r\nKsAUCmXZMUya1uT7p9/w4g9UNIWDrxwIq+t5lrvNzU089NBDqKoKb731Fq5fv462bbG9vY2tra0E\r\nJsfnKMsS6+vr2NnZ6QFTsVpwvM50OoUxBuPxOIcUkaFOOdeWyyWUUlhbW8NkMkHTNLlS6XK57BW6\r\nmE6n+TkmkwmqqoIoZLq2SwZdNPapPxaLaNxrk6ozG40QfMopJnHjxk4ep9lslsMfJ5NJDn/khjPJ\r\nNoUfLxYLhAAYoyCEgVIx/NF7C+8tZrM9tG0B720OvY7fLVEUGvNZvzAAVeatqgpVVWG5XGYQlnIh\r\nklOgCx3viqZwphD3AHG2SwQNon44cuQIgGh8kFyura3lHJfXr1/H1atXsbOzg42NDRw5cgTr6+t5\r\nUz6bzrNOMFLnudrJe/SQOsfAU4SY3wsek/UuFxdnN4akV8Zraz09RM+Zw3KlyvqFA8j0+Ww2y3OT\r\n7pmYjUIIbG5u5rB6Yj9yBwUv+MH7keu3oZ4cGgMcsOWA362cLPT5bTcNnniTgAiASoCbgEBwHqUp\r\nus2ADAhKd/o7AFppOOswa6aYT2fY3bmJyWSS59d8OsvOD0q5IIXIoK9TKUxbRBYihIib0FjGHfN5\r\n1G+mrFCkvm2aJVRK6aBlnfotZIBhNl1gNpulauMctHLwYYZlM8Oijs80mYwywLcqRQY9O61TQ0fM\r\n1pH7enIlhU05DKNTa29vL42FgEDMTUnxOUIILHyXYgHghaREZu4PGbp8neHOIVr3ONhI1da5sUqA\r\nPK3h3gNChsickn0QsaxMb92N9+pgnQMcoFKOVK01JDwgXQRqVXQgmgnJS0DwNeplC9tOMUv5+W7e\r\nLHL+0MlkkvPkZvZ5ayECYJSOBkuSWdp9LxY1XMrjSECT1hpF2bEGEQApFISKoGCXYN+hVKnfRIsW\r\nlLtSwDkKs45sUimR1wFjmc6wk7iJ1ne4eWNbo97cTIaZWPVF0Fwns4OOW7fWtfjd7/7u/A9/+IfL\r\n3/mPfmfy25/57fG7lQ9wCHQIIbBYLPCLX/wi5w8iMJAMDikltre3cerUKawxPb3y/AJwQUbDOXYV\r\nfIgFFoOU8CFWqxRABvyoGFzsWgGXPqN9dnR2RCZwnPuRMWwtoDXgIeAcoBV4xNddN+7Qocb1ykE6\r\nnO+Zh/OYdNfQWcfziNJv+TlXvf9BbrxfqY/I/qH+uF0j+Rz2HZdtOuh7RDzgDhq67ioHHn2Xjyn/\r\ne9g+nE0gplW50e7g3177EZaygahjtfGABk630H50T9doYXMEh1IGwkfdVigT01KUDt4pFKJA8EvU\r\nooHUFR4sHsbHth97h570Q9qS0ymEANu2sE0D13aEGWkUbNojUZQcsB8LufUl3j0dQGsH2aL0b25P\r\ncOIV4Q51XWeb+TD09/3VNN/wA32kl4NrqwxKAIjVUuNBOXFii0JR10sAcSOlVJe/yrkW1gZoVaXz\r\nhJV/+ULHJwIJGmcBDll5BDRxphh9Rr+hpOJkWGqtewnoqX+qKt4nLzigtcZkMkrv+wQcRUc6MTna\r\ntkkbQw/vRaq4hGQQSLi2e04e2ssPMujonNGAjSzF6XSagRr6LfcuRnBof/h0zrWmOPsnJCMlJsYX\r\nQiXwMcRcWFakja+Hc7rX16tkha7hnMv3QeBjlImYQ5GMUgBYX1+HlBKj0Qg3b95EXdc9pqMxBhsb\r\nGxmIXVtbywAjjRsPMVssFnmsR6MRqqrK4G9d19Ba9DZnBApWVZUVHAGC0+kUu7u7mM/nOHr0KDY2\r\nNmBkBe+RDb4QWgQvYvENG/K4tG2Lomzgg4EpkhFYqORdi0Bl27ZYW1vLwDPPP0fyfFD+P+p3roCH\r\nDDtaaAiYNcZgfb3I+S0JBFssFhmI6gH9sgv3I5CLG9rcY075Muk+hlW2CRAGOgOG9z0922g0yuDi\r\nYrHI+oDAa878JbmmppSCSmH3VKxBqmGe0C5/KN9Qc53DwQsOdJLni2/gKV0AyVwGEFjj5yaQks5P\r\nBgHXcfSaf48/I93zqvMPF2a+YNM9DtvbMe6Gz7aKpcCvwY1PGit+H1Rkw3ufc0AWRZEZz+PxODs4\r\nVhlBIThY21VRDCHAOwELn412BA2jR5CigEVnVHGjTSqgbQs0zQJNI1DXIemXfjjr7m7H3F0ulzmn\r\nHJ2L8pDy9YyvU/F7ABCSM6w7nHNYX9/sOb+GjqyqEj2dwOc+dyrRv0kf03l4NeXhwe93mKuv0/0J\r\n/BOJjyDRG5M4DhRiGY8c4hti2gEurxFIcey6HUNdKQUFhQAJGRJYsexYYORsIUceMSpJn1IOml56\r\nCyggSPaeS8zsMZQ0GUKjwi4EqsXXCpEpL9Kza9AeiDtAurFHKjhjkrxLIESHg9L3BqqJ/H+spZvv\r\npmhY+fnt2tXFVf8PvvEPdv/gh3+w+Cdf+Sfrv3rmV9+VfICkd2ktv3r1KoqiwOOPP77Ss900DS5e\r\nvIirV69iMpncUlfVjcWF195EYTROnDiG6zf2cO3aNZw8eRJCCLz6yit45OwprK2N0TQWb731Fqqq\r\nwtbWEQABN/emePHVV3H61CmMRyVeu/QaCqPw0JkzsbIvgHnb4OLFS9DG4NSpE3jttcsI3uOhh89B\r\nACgPvLs7a3Vd4/nnn8d0OsXZs2dx+vTpfWAgb3ztqusaly5dwmOPPdbb61y5cgXPP/88RqMRHn30\r\n0Zx3+vTp0yv7fLiPBD6cwBP1Ecnh/fffvy/X3rC1bYtLly7h2LFj+8Bo6iNrLd588028+uqreOyx\r\nxzCZTPDss89mEPuFF17A+vo6Tp8+DQC4du0a6rrG2bNnc7+/9tpruHr1Kj7xiU/AOYcf//jHeOSR\r\nR3Dfffe9Cz1x2N4PLSBgV+3ga//2f8Pv/ev/GbPRHGO9hrIpYNs9oPBo/a2j9G43TxWtyRBYm6xh\r\nXKaoKRuwO93Frr2CotiC8iWsW0BOBJppwK9t/Tr+h//8d3AGD71jz/vhawEOHlIASgvMdxfYees6\r\nnHOYTCZY39iA16q3X6D2ftCvpPd51XKyA4HOPu2isGRvD3TY3n9NPfnkk+f3A3qdscs/W+XN4m2V\r\n8UDMIc4w5MaLVsVthfsgryMZCNwoH97DKuOG/h2BnWV+Tq0LlGUFYwqEALRtrPrIQ1mJZQYgsaTK\r\n3Fex2mo0dpQWMEZDCgOpiH2UGBjegkKF2ybmZeP52LocSA4uxOT2SCFFvCqslBJ7e7MMklBBB94/\r\nBFAA+/OOhRBQlAVi6FDMi0b3Ra+tdQCoWmFXvZEOYjbyUOmuP2z2YvJr8/4fjcrMhCLQjwz80WjU\r\nC/kBkNlhBOBy4InLyJCJRX1HYFVnSMdcFvT8vC+0NqAQ3rpu0DSJ/ZOq5rathS5NNq67Pm7hg4vM\r\nlQQSE9ADIOcNFEJgNJrAWovpdJpBTp7/js45nIM0fpxRR/OMDF8C08gIJ2YbKXFjDKpyLcsU/x43\r\nEFbNQepfDmJwMI+fh48B1wXUL1x+eD40WmhorHnhELq3qipjKJ3u+p/OGedJTDMQgofzrgeSdCHI\r\nnewPDwrfo3DukEIhSAaqwvTunYMjfP7xxZAbZbSAcqbuKqbGQTpxyNRa9b1Vn/F7pPvjjTsQ+HvD\r\n8/Lv3umaQG3VNTkwTxVfZ7MZFotFHntywHjvU6gJpZXorsHn/vA+6JmLooAUoedYobnQFSWpUBRl\r\nyhVpUpoFjRAEQogMRCACWpHN2/TCWonl633kDVE+Tucs2rZBWVYr+4nPCX5ffKxIhvk4clkD0NMF\r\nw+/xauK8/zlTEOgcXkO55TK4CuAfzoXV+weR5xOtj6Q7YtElgKqYD9ef+H2fv0v6gQ5yFhAw3+VT\r\n7JxTMDMEMUfbzlA3UzTtAtY28CGOnxApnDxEsA/BAKGAQAGBClrF9QM9Rl08hJB5/QRET6fk3KPG\r\nwJgCZ86cwcmTJ3G7Rjn/+PxCvNrgm4Nw4PRef8IBLdqVYb+rXr8+fd3/wY/+YP7ijRftF059odgo\r\nN96xOJ6hbqjrOoN66+vruYgYzwULRDna2dnB0fuPxnBeuR8Ma9sWv3j1VfyLv3wGL11eYKw0vvHs\r\nz/DSlSkuXr6GM/cfwf/5veewZgxOHR3huTf38D/9X3+O++47goceuA8CwHQ+w7/43k/Q+gIP3W/w\r\n756/gqdfuoK/9shZtAporMMzF97Av/zL5/HydA7nBOzyJv6fH7+MX33kQVRKrRiPt9d2d3fxJ3/y\r\nJzh9+jSOHj2Kq1ev4vnnn4dSsWDSz3/+c+zs7KBtW1y4cAHGGFy8eBEXL15EURSwNrL/f/rTn6Jt\r\nW4zHYzz33HN49tlncezYMXzve9/DyZMn0bYtdnZ2cOPGDSil8NOf/hRVVaGuazz77LMAgD/7sz/D\r\nzs5OBqneDwbqvTa+ntHr+XyOb3zjGzhy5Ahefvll7OzsYDwe48qVK9Ba4/Lly1gsFnjuueewvb2N\r\nvb09jEYjXLx4EVeuXMH29jYuXryIy5cv4+jRo1gul/jud78L7z1+/OMfY2dnB6+//jouXLiAkydP\r\n4pVXXsFzzz2HT3ziE5jNZvijP/ojXLhwAZ/73Of23dPHPvYxCCHw3e9+F3Vd48EHH3zP+u6wvfst\r\nWOBPX/hT/HDnhzhSrePXTvwH+Ojxz+HadBdzs4d1dQT3rd+HhV3iiJ5gtLmJMQzWzDqM0rCqxnF1\r\nGoUKCKbFRAhIoXEc23CTBY74szi+fRyfP/sb2LEzPD76FP69h7+A1+srOClP4zfOPoWLsxehlMKW\r\n3IBVE6wJizfH1/F3z/4dHCnvf6+76H3dgkjkn8bDlRL68kuYfuvbWD97AvqB43A+MjlF8NBFkZnm\r\nASKWinoPVOyQDMZfryKD0etV9sZhe3caJ++9naaefPLJ88M3Vw3o0LDjG/pVhh9nr3CGBp03GxHo\r\ne/6HG7chuEeGBvcSczYE/aYD95p9ACZnLtT1gqHXMgJ2CSzwKZSZdy5nGkZmT5HvIx7RGCVjcDQe\r\ngXIgeZ8KJqQwoEgkKHvgAjcepIw5hyhBOYBetdl4/20PXSfQhJ6PwmA5Is9BOm1ENpwJgBQC+b0Q\r\nPIQAeBGJELr8fwREcvBjCPgM2SocHITwubJuDv9Kfc2NSB7yOmQPZSCAgVB0EFjAPRT8vCH089wN\r\nje8h85JA4LquYzhSqgRJrFGSETLMybgm8IrOR+BXVY0BoHePfI7QOHHGHj07l2OSe14Jl4fzk+HE\r\ngcQIvle973LQZDivhwAF9+zwORBCyAAO/5yfg+6be5G4HFH4MbELpYyU88VikUOPuTzwStQA8u+5\r\nfHCZonssCgUCZUimCUwSiZHFX/N/Symg5f7iCpzdRdc8CCzjDF8OVvHnGMrlQWysVfqajyPdH8nK\r\ncMHg98efZdXY07lvtegcBEgO2yrgnoPV3OAnoIfYqjbJNcnCKhBtCI72+g6+pxMIkOEpHzj4xsEt\r\npRTGo3UURQkpVQak2tbmQyndczCQjo+P3FV45mPG+47mB3eecfYazym4CshdBfIO+2IIEPL5STpj\r\nGNI+ZI3y8/ODFyAZznNewZ3aEHzkwDhfR7r53xUsIicSlw8APTb8sF+8aFLfu7xmW2dhbYO6qSGF\r\nRtM4NE0sNOJcvKZSMTRbyWVPH/C/QnTFlg7SKeSMOnHiBB544IHbzpWnX3oa337l29kZmGUlWwar\r\nwgDZZ3x7FQALe8fgH7VnZccBCQAAIABJREFU3nym/b0f/N68sU34/KnPF4Uq3pGdPTcovPd46623\r\nIEQMPXdsD0TjaK3F7u4uFosFTpw4AaDP4ge6CIeNI0dw/wMn8dKrl/Ho/RVefuM6nvqrn8ZPL7yI\r\nLzx6Ctf2LKpRhaNH1vGvf/oyZnqEY9vrqOslrl7fw5GtI7g2D1Ah4CNnjyGoCV54/U184ZFTeOm1\r\n1/DG1Zt4c3cPa5MtnDj5AK5cfQOffOxRvPDym/j1jz2MVsWw4nvpm8VigR/84AcYj8c4fvw4vv71\r\nr2NtbQ0//OEPMZvN8Bd/8Re4cOECnn/+eVy/fh1FUeD73/8+ptMpXnzxRVy7dg2/+MUv8P3vfx+X\r\nLl3CRz/6Uezs7KCqKnz605/GSy+9hDfeeAOXLl3CM888g+PHj+Ob3/xmPuerr76anSLXrl2DMQbn\r\nzp1baS980NpQNwBRFzVNg5/97Ge4evUqrly5gldffRVt2+KZZ57BzZs38dJLL+GZZ56BtRavvPIK\r\nLl26hJ2dHbzwwgvY3t7G66+/jj/+4z/GpUuXYIzBgw8+iHPnzmE6nWaZPnfuHLyPqWy2trbw1ltv\r\n4ZFHHsHPfvYz3Lx5E8ePH8eZM2fw8ssvYzwewxiDCxcu4NFHH0VVVbh58yYA4Ny5c+9F1x22X1Jr\r\n3BLffuPbeP7mT1FYjY9sfgyfPPdpnNp6ANVS44unfgO/dvwLWNf34bMnvoBPHf80fv3RX8W59cfx\r\n6PhhGGfwn37s7+HsqQfx8rUbmNsWZbWO3/yV/wSvXb6OL/3KX8NorPGpYx9Hs9zFA9VxjGCwNjJY\r\nkyN8+sEvYP3YOqpmjC8+9mv4+ZsX4DDHVjiOv/3Y38FmtfVed9H7uAnIAEgn4aVHs6wxOf0wRnOL\r\n3f/jmzAnHoA5cR+CtzCFToShAIEA4VuIEGI4yi+5cZuUGu3fQgi9aMWDnPwf5HXhg9DuFvzTtIHn\r\nYB1nAAw99kA/ZItfdGgoDs83ZN1oreFs3+Dkr/lGjs5D56LrRO9/3JTH9yI7h+6BKvAq5fcZE5EB\r\nJWFti+l0FxS6PJlMEuMiAgjEQqEFmnLF1XWNGzdu5DxtVVXFJPD1Ak2zxGIRKb1xcCLd17oAuA6o\r\nEqLKmwCbEskHAZiygAHQzBs0Pho18+kCIkiE9ciAW59U8E4lpkONEICNDZPCE0RkpmmNokDqE5mM\r\nOQ/vU2Xjkc4GFQeLeD43AkD5+BEgSwU3OODIDcxhsk8CXYDIolwsd7G2tobNzc0clmVtCyCgqkoc\r\nO3YU4/EIxujEjpsjBJ/y+FVQQsR8hOiMPBtLdMILgdKYCEQtFhDh/2fvzWJuO67zwK+GPZzhH3ln\r\nzuQlxcEcHMqGY7fktiw3Ak+AG27EQeAE3UAQJG9+SIIkfhASBEbegn5q9IuBAEY6lhNbsCLYkiyZ\r\nokXTlkxFMk0NFCeRMnV5h3840x5q6Ifaq/ba9Z//criSOfhfF/ue85+zz961a1hV66tvreXjuVmW\r\nQQkBK8lV0MXnyLI+TtN4HNqnaSSaRnTMzxZtG2KF2Usu1sHW1tYgjgs9N+/7HGiUUgJexrhvs9kM\r\ni8UCy2WIY0fALXfT5WOMg0Uc/CAhVz8OVhBwtlqFuGa2zSObclQqCEgsxTKMb4/oUp0a8dSW8/k8\r\nGgQpMEnABu8r1Hcomc1oNFoLzBDwR26TFHvRex+ZPaSHiB1CExGvY5qUCCThbuEBEO31Cr8/tQ+f\r\n/DiIQolQRMuSZ3gJ4SWstxDCQUqPUSEH9zQwEN7A+pBluLUBfEhZf5x5l4Lr9BxcD/Iy8uehPpKG\r\nPaBr8TZKgcfjQKlUxx8n3Ag/Tjj4uw4gJUCdB/pfLpdRD5ezQxRFgel0GuN28sQZx02KEVxl48nT\r\nXKV694syD27xo6KIOr+qKqyyLLDKRR7dTXlMPdKZ+/v7oCzhFNeRuxfP5/MjoD2vM+5+T/VBZad2\r\nJOGbLXQN3r703OnmGR+jHGjzPsSspLFA8dZIx/Fyp9elg9zeubsxvz5vaw5W0+c0fql/kh6hOhmP\r\nssHzCWGgtYXWQe/t7x9Aa43ZbB713MA1W3pIqG7jD7C5RdtaNM0KVbWEsyqOmTwrI7teCA+vPKTo\r\nxylfp/D6Xvd8/XgKGwqUDOztSrie6K5H0rNi+01Fqtvuv7d522W79P/uiX83+82v/Oby3//0v9/4\r\n1Yd/dSLFjRMB041ia22cD2nOI88LoNdn9L1g4Cf1SQDYPzjEH33hS7jn4oM4fXaK+i9fwquvX8FY\r\nl1C6hHUOMlO4tHeAb337W7haCXwnb3BTcQckAOs9pKmh8jx4YjgL7cJYX9UNlssGY5XjuweXIQtg\r\nKoODuvctGmdRihsz3KhOdnd38eEPfxjWWozHYzzwwAN47bXX8Oqrr6IoCjz66KO4cuUKbr75Zjjn\r\ncMstt2Brawvf+c530LYtZrMZTp06hXvuuSfqG2JVLpdLnD9/HsvlEjfddBMuXLiAxWKBO++8E5ub\r\nm3jxxRfxMz/zMyiKAt/85jdjaJQ3o+ffa5LOvc453H///RFo29jYwJ/92Z/h537u5/DVr34VDz30\r\nEJ544gnkeR6YqKdP44EHHsCf/umfwlqLRx55BKdOnULbtnjmmWfwrW99C7/4i7+Iz3zmM9Hzg2KJ\r\n0ibXs88+G+MdP/bYY3jllVews7MTQ//QWLH2jRMznsh7X6z0qPwSLRpAFmhFjWef/wusqgU+cPNF\r\nZLnC73zld/CRh34Gld/D09/5n3jkpvvx8vJF3LZzNz6486NQvkTdrvDjZ38IW5Mp/vTVr0FlI9R6\r\nia18F9+48m28bvYwxiZEmcN6jzOT03jme8/je9/7Hr67eA0fuvsn8N3DS5i7K4CucQb6fTf+fxBS\r\nAyh8A+UkGjHBWEqM7r0I4RrIr34Ne3/+ZWw8dBG4/yJcvgvlM8AA0Hl4eYfLT2KtxWw2w97eHsbj\r\nMXZ3dwfEixN5b4j66Z/+6Y8BR924jvM9T5km12OeBGZcdoStAPQsJSIPHKc8UuONs7xoYubn0oIm\r\nBRs5G4GXG6KP4UWAAAcnpexjeHFmGj1fXVeQkrs86cjyqusKea46ly90u/3BDZHun2WTIwYTBxiU\r\n6GO9RUNZSUilAAGMO7dRio/F6zI1rlJXuCBDN9zjWDJDttwws/BxwADVU9o/hgBMGxNcEFOPwDRu\r\nMNPihpgoMTFFUR5hWvEFFMUX5EktqC2llPDo25WMCzLctdYYjwMzj2Lh1HUdjdk8zzFbLQAhoHTY\r\nremJmwJCCkAguKSKkDkwyzMUZQmlNSAAZ/wAPOP9MAW7OUBF9UzGPf+OtyGBf8QcojaJbDMjBgvd\r\ndBwHpucwyQXVjdYaq6qKv3HewzoH61z3/N0OEbV51+50jk2AS84c4v2IM684uEou+ClgwAEucv3j\r\nzCmSaMSv0RG8r3O9krpPwg7jW6QHP5+PCzqcP7qzxsdragyn108Nr/Qe3FDm16dxwPUn/T4FUNMx\r\nvk7fHydvtCN1Pbdc0oF0H87wIsBtUVdYVRWatglJp1zoX85TPwRcB3KE8Si6z4IbOGyLo4DMsBz0\r\nnsY89cMsy+C8ONK2XF9SLE0qO2emkb5O3b7TuZffn8A2Kgs/j/cz3pZpO11v7l7Xvlxv88QhBMiu\r\nY69yXZHel9+fP9O6cZTuPKdgGqAGOiBdw5CeINCWYuVG3SpDAjIhu4zgRdDNzovQP6QLLsC2hfXB\r\nHdjDwMPA+QbS20Hf4c/J247Pm/ygpjl//gLOnj173bECMOYfaxcAA9Crfx2+FwIhizK5BHsBI946\r\n849/d1gf+t/7xu+t/ujFP6oeOfvI5MLGG7suv5FQnc3nc9R1HUEmaksAkW2wXC7RNA3Onz8fErp0\r\nayyuV+qmwWuvX8ZXvvk8VNNgWpbYuWkL337+JTxy1804d2oHh8sKFzYKXLz5VAC7xmPcfWYbH7zv\r\nLpw/tQ3lLFarGtvjEW45tQlrBaqmwj0XTuP06VO4cPY0puMSL73yMpyp8L/+6GMYK+BgVeHem08h\r\nEzyL+NuTtm3x7W9/G88//zzyPI+x4RaLBR5++OGOyZ7jzJkz2NnZwe23345nnnkGzz33HLa2tnD7\r\n7bfjgQcewMHBAU6dOoWbb74Zs9kMTz/9NK5cuYL7778fN998M5qmwc7ODi5evIjxeIzFYoHbbrsN\r\n586dw1NPPQWtNc6dO4dr167hlltuiXPIexkASMtOuqRtW+zt7eHMmTPY3d0NLNLNTdx2220wxuCD\r\nH/wgXn/9dTzzzDP4yZ/8SSilcPHiRbzwwgt47bXX8OCDD8br33vvvbDW4jOf+Qy89zg4OMAdd9yB\r\nZ599Fjs7O3jsscdigrC7774bDzzwAM6fP4/RaISHHnoId955J8bjMZxzODw8xO233w6tdYw1+2aY\r\nwyfy3hXXOjz5wpP41utfx0RPcPqmM2h1jbmdIS9KaJPhgZs/gCuHe1Be4eqlfexubWO+NDizdRNe\r\n+uuXsTXdwivz5/HFF/4c37j0DOarPTx66n7cefZ27I5O4euvPov7L9yHGquwToKF8MBfX30Vd912\r\nEV9+6cv4hYs/iz9+4U/wndk3UaoJcq/xyxf/ATZGG+90Fb17xQO6BnxuUakMhZPImhrtcg8i19gT\r\nKzRfex6Xqzm2Lt4NNdmGswKqcwZcAijeAf2ahpxK18XERCYs4ET+5uXtMv/Eb/zGb/jjADy6MDB0\r\nBaPXN2MEUsdYByYCiOADvwd/JfbNcfRTQBxxCQYQjRMepJczB8hwqeoFnDMD0Gc8HmNzM7BItC47\r\ng7MalMF2RuNisepARhHdxYTwqOsVqnoJKcMAGY/7LLytqfvFqR/HckV2EGMm1quqN7ZsH6+N2Au7\r\nO2cjG4ayABNwRuyGddcnI0gqG41sinuVsryozshgJQCOmJCcKZi6naVMKzJIo5smQuyZ6XQaATD6\r\nvs+q6CP4Rlk4qf2Loojlo/vUdR2BOu4mRmAwZQAuyxKnTu0cYaNwgy0kbWlj/LG6rgeJOBof6q8s\r\nS2xvb2N3dxfT6XTARqA+SEAAPVdd16hW7cC4pucko4aeMfShcWSuEAAmhIjtwkE8MjQPDg4GAA7V\r\nzWKxCKw+MYaUMmaY4i62xhgsFosBsMhdqqWUsR9xt9o0sQcfr7xtqZ/yz3jfA/rszLzfLhaLmHgl\r\n9uNu3G5tbUUWID1HqneGwMDyCGBDbeG9H7Q1Zx9Rf5buaEIQDoBwJtg6F8Z1CXm4Xo2xGcsyst1S\r\ndh/JOtCGZ/nmgAx3c+X1kr7n2YT5dykQfZykjIR1bbHucxL+rCnQBQBWINYPZQTmSUGCDtcD3Qb0\r\n7VtmR8NWpCAa1x3UJ4gF2NShjSnGHG3CUH1XHThO7ZGCy5zVu06HEtMs/R1dk7tD835Fn6WgU+rC\r\nS/MM/56Dd7y/83vQ8/D2WAfmjUajI2083FwYJjLh9yZ9xX+TrjucVYM5Ix3HvH8To5hY+lmWoZgW\r\nUY9SnFnahGnbFkqbwQYMPWOWhb5UqtFAf3BdTnNN+nwcfKQkKY899hgeeuihtWOAy6//0a/jP37x\r\nP8K7hG3lRZ/0w1P9gLkHh7+9I9fjcN4Ky2v0F4gWKGICbz94f53zhBC4bfO2W375gV/Gv/yJf4kz\r\nkzNv+CxvRvb29uK44rqE6pe+e+zv/B34DvxbJ9Z7OCHg4KG8hTSAyxQkWkhYeDuCFx7SGziVofZA\r\nKcIjwgMwDWxWwHmPTFg4p1BJYAwLJwB4HbZRuzJ4eMBUELpE5i280JA3YBzxMUSbl0Dv1szPoTG/\r\nWCzwpS99Cc899xw++tGP4q677hroOs7WIMA01ed8Q5rfg36z7v17WdJ5GMCReqF1HW2s0t/pK/0u\r\nzRa8rp7Ta6/bFKPvAcREWPx3b8cAPJH3hnjvcWAP8P989f/Gbz75/0JojUkxQSvbkAl4JeBlg5u3\r\nz+PbBy9iS2+ggYPSHvVSYlQKXGsXOL9xM/yqwVXMoW0DYzxuElOUm1uYLRrMsivYcjehKmroCkAW\r\nvOsatcRNyx1MT23jZ8/8FH7z2f8PTXmIduVx+6nb8Fv/++/gnLz5na6md6147wOQCoVlXaFq5rip\r\nnOLgv38Sl7/8lyg/9GFkj90DA4GNnVOYjkeBQ2IMID0AC6FuLJvzmyljKjwmNIAjaz+eEf1E/7wz\r\nQmSAtyrR7ZcvXPkCgbPs0kmIJirOFqHvaKFbVVUsHE2Y3MVNijz+Jr030E+UBAIe3eEPsbqE6GPt\r\nhAW2QUi+kbMJGfEIbjYCzgpIWUAoB+9aGNOgqhpkWQutLYSw0Sir685V0oYd1pCJ1HeumqvIChuP\r\nyxgvav/gGuq66ZJHaAihIEUO5zswzAfjWisBJRWk8BBwgLchuQQsskIjL4Ob2WK1xKpu0PgWuc0x\r\nGQeX0el0AucsFos5jDHY2NhAUeQQAsgyjTzPIrjUNH09LZYzOAeETIUhw2/IwBiSfIQYgApKAVoD\r\n1nq0bRcbqQMaU/A4NYSIocXjFpLhW9UVlssljDHR+OIJPShhjFIK4/E4srko+L9n/c0DgcGRBXad\r\nVCoa39p7+M5d1FgbmXgxcL8DnCP36F7JeR9YiBsbW5hON2Osv9lshqqqkGUKpjVYNDN4Y0NcB48I\r\nOjjr4NrguiY9IKWChIA1FrZpu37K2bAKRZGjaWrUtUPTtGv7ODHg8rzPSsx3adYtHoUQESihxX/b\r\nCFhrsFw2MKaB9+MueUyGPB+66nEQhK6dKw0nZA+ItQbGecg8h9AiGE80rrskGV5ICKkgRA+uURtz\r\nQ5vuQQY31yNAAH2uXr0aWWCcFUKAJgdC+SYBuYa2bY2Q8EMjxN6kOH3kIpkNQJEA+lGMMKAouGsz\r\nEDuA9cFFX3Qu4FIC0sOL8CocIBygGnVE33LwI2XqUrtRHVB517E2qY74psWQ9YsjdU2STuSkQ6nt\r\nqQzp9VJZt6BIjUb+/HxOIfCS/4YDcgDg4NE6B28tnDFoqgqrxSICffLs2dAPEFx8LZs74D2sE7xg\r\n4WN0bEGag3xghpHxLqSMumZnexwB+/k8g9YSy6XoQGuPyWQ0mPPS2CjO9S7K/PmoHigJEB8HHCQk\r\nHcyNxhSgo894e6QgFf9dOs8S6E6/59cjnc43dXi2XYr7yY91AAI9H5/bAQzqJu1XAfypY5147zp3\r\n/H4Xuihy1rcc2raBcxZNE8IZqHkWdcJoNMJ02nbzjISCwsakYIzTCs62MM4AzsBbDQfB2oQzLSWC\r\nzg4xRcP49JDSQ6m+rze1hXcC8G9y4SyG9cZqpMOdetfeIRLmEZKWJL//PnrqOO/w8Wc/jv/x3P/A\r\nP33sn+Kf/cg/Q6FuLMftzs4Otre3sb+/j/39/bguIFdHWh+uewwOXEkh4IxDlglIWEAXIfwCJJSw\r\ngCSwVEN4gZEAAA/R1ZnXBRRC2BB4QHqLEVR4HyIzQ0ICwsIYgUx7QGcIxG4DoW7caYuelcaEc24A\r\n/KU6sigK3H///Xj00UextbUVf5+C76Q/+Pij8Z+yv9Pfcmb6ex0A5PMP/U16iQt9T+1AAGxa/9xA\r\n5sI3GLl+S0FFkhQstLaP9bquTU/k/SmbbhP/+OH/E/dv3Y8GgGl9x0IHMjGGtys4BVhhURiBee5R\r\ntkCel6hNi5HJMS8r5NbD6gZ6CaDchXMGmcmgYNCKGZQrscwqTJYZfAkYL+FFBas17t69H1tW4aat\r\nu5BroFEGD579IZy1F8KUdyLHivQKMMBEKGido/7U43j9q3+F23/tH6Man0W1mKNQGpvlCIBACw+v\r\nNQALAYn8jW7wAxRa9/EY5ETISOeFE3lviL58+XJcUHDXQKDfTeKsML7wIBYEn3xSQ6JpmsgO44sK\r\nulddraeL8t1LiuNEQsYPALSmHhgTAWSwgHAQ0qM1vfERLuyhMwmpgtFeVyHmmIcNxruxaBuHatVA\r\nihUmk0kEr5QS2N7ehnOBEbW3txeZBEAAxqy1HeAZFg1FPkFTt6irQ4zHJTY3NzEebUTAIpN80SSg\r\nEGLFaAE4rVCMQtKC1hhk0BipUWB1WIOqWeHK1dexvb2Nzc1NnDq9i6LMoutAa2oI6SGkhhAyAI4+\r\nJNkoRz0rsG1bLOYrLOaryDIbjUYhVtJiwRhcElrlKHIBAQWrLUJQgj52F+9LfFHJjU0yJGM2YAfU\r\nVQioTq+bmxJqnCHTRQQTvfdQMoMUIdh627ZYNFUwe5SEdw4eAkILaAjILIfKg/FW1zWcaGA7g8hC\r\nwELgypUrkQlCYAOVi8AjzriJQKMP7rqLxQy5Dq6Jzlhcu3IVpmmjm4gQgG1NXEhHN3jr0EqFnd3J\r\nEbe5LFeYbowxGhc4PDwMTKN6CQgH61pUdR6B0sDo6ME/zuShuEA0TokdSMlJQgbA3i3OmArzRYOq\r\nnkclvzG9KdYfZzVFhqExyJRGrjMYFUACZx1M00J4oJxMgvFsTXCjcx5KSEB7SCVw9do1FEURY2MS\r\naMANGOo3xMbh4B89KzEaDw4OsFqt4pjY2NiIbDlihRKIBwBa0+YAYIzrQL0egNva2ur6dsf0kxpS\r\nGgAhfqbMOrAyISYLMhKFBBwAB3jpIYWElz5+Np1O4/OlAAxvN2I8EruYWIDj8XgArPBrcQCHZ1de\r\nB0RRe6Zuynxip7Lx61FShZTdxTdvYn3geAMxNTBTwyn9XbyPDX3KGYsWDXzX9+g5TBPCClA8QGIF\r\nlmUJnWnMqqMx94AA+FFdCRFc2MH1dA7kSsM7C6mAoswAMUZeaEw3xnEsz2azCJ4F1nDI/kvlr+ue\r\nWUmxAYnlSwlruJtFZAx3MS9pk4GDABxEXiwWUceTpMxsfn7K/GvbNq4JsiyLTD46ZrPZ4J40/9Gm\r\nCy0Y++zJ+SA+LJU5ZcRR/Uyn08H3XFd67yGVDHO3A3xrYWwzuK7SQ9A67edKlt2miAKcB5yDbdte\r\nZ7Sqi+k7QTmZdjpkhWbVoHIVtJKDOS9lPStJbLWOfRdKFrqSAGSMBffWF8/rAJl0fHBUrD/tB7tQ\r\nX7ZL/Ken/hN++9nfxr/48X+BX7rvl27oekII7OzsYGNjA/v7+1gul91mbI35fI6dnS7QvDj6u0Hd\r\naAnfAtAaBkArNHIABgIQHgoIGRm7UIjeC3gBWAtkysN7CwgdDuU6pqWEtR5ahljTkB5aq24nEYAS\r\nADSEFTcctInmeNLj9DetyTlwRxt9p0+fPhYconVO2/V33pe4jiB3YroHAX7p/d8PQvoqnfeOe8YU\r\n+Es3NtLxyc9bB5weBwjyv7kNdsK2+dshAkF/nMMt+Nk7fwFOZhAQyOBhnIXr5pms8VjlBmNk8PCw\r\nvoZCCTgLqApoFIQt4UeAh0ULgwISvsngFCCUQ9tY+NygNKOos6wzaKRB4QsIV+Pu0w+j2yaFNhmE\r\n+8HOKe8LsQBEjUZL1HOPxVaO3f/rl7A4fx7zF17H5ijD1pmbYKWHg0cGGdYkULR8eMeENnf5mpjb\r\n9uSJdiLvHVFnz5792NWrV3H16lUcHBxgsVhEl6a6rqN7Hbk9LhYLzOdzzGYzHB4e9q6szPWI75hN\r\nJpMIeHB3ORLTHmX5cDeaLMuiGx9dm3Z/QyBoA2JGhey8BiHGno8sqbjY7jxWBpk9u2y78MQQCnvo\r\n3neMh7aOu8xZRtkWXXT1rOsaWZZ34JHsDPWQfCNk0M3RZ/GV8ZBSQ+scztbREAArqxCAkAINZ3MJ\r\nhMUoASHOQnsZnztkrg3PbK1B09Qwpu2YECGbcYg3KOI9rA0EF2qzUO9B41vrWAB9MtjCs4R2UrC2\r\nGRhm6ww4vsBJQTSlAjDJMx3zzMcBlOlYkF3WTKU0tM6Q5wXqpj16DR+uoaSOiVCEkBCQkCJc27tw\r\nXbieDRaM6Cwu5mgRHQA2KjeBK74r6zCbLgdHvPeRZUef8XEAAFKrAVhKbUAGc1EUA7CK6lop1YF/\r\nMrrM8h1pzsgkoJwWlrSQD0CaR8A1wkTunIH3ob9IKaBkEY3aNDmEtRau7ROZpO6SzoXELOl31toI\r\nfk83N6KbHbmUcyYg1Slnw1FdEjCYunJyFlHP5OtdK3ldSaGgZDhiRlYISCEhhUSRF8Go6/qQVjr2\r\nNykkPHpGFAnXYdQfOPjFDSzphyBIOnZSw42PIXouXv+83ddNyHR/6mMp0y4tB78mfbcO0EuNSw7m\r\npQYRP7huSMuR1isXrltSNgoH2wiIIrfcxWIRmcN1XSPLC/BMvAJBN/BDShX0gsqi/lAquH5mmphf\r\n4Qj1GhJIUP3S38O5jZiuQ3cyGldU/nWAKG+jdZ/x8ZL2GT4WqU05u4W3AWcCcQAybT/SXanba9pP\r\nUgCPNg7TchKYmWVZdFvn/WeoTwjUCoOUstGnawL6m2e1l1J07UvP34WHsA3atoExNUyTw1kB7xSs\r\nBUIuKQEpc2hNCQ/CXMk3X2ilHuYRGk98DITyt034/Pz5szh37vTavs7lcy9+Dl/8zhcHbXWcrAMd\r\nBNhv/NvL9rvuOyEENovNTX6feTPHHz7/h/jSX38JD55+EKfGp67/cG8gUobQDm3b4utf/zpee+01\r\nTCYT3HPPPcizfPhsSJ4fgPIOUjUwXkK3DlIJCFvByRzaAJAtrHMhzhJs8Gr2Hkp1DHYhYYWEF4Ht\r\nJ5wDRKcbhYAVHtI5wCt4KeCkhHTh5lZK3EhOl3WgHP2d6gf+3Hy9xXU4nx/4Bgt9x4FEzlxL+xsv\r\nz/X64rtd+HxLczb/7DiQPd3EWMccBPCmzqHzaMNnnd7n10q/ey/X/4lcXzw8GuERUvLpkOgQAjCA\r\nFAJetMiMgs1aFC4HfINKWBSmhFcNpMvgZA6vNGQmIFpAWAmnAOUUhHaQQqJxFnmmYFFDuwK+Yz9L\r\nKZE5DSEFhNdhzoSEbAL72ebL6MV3IutEYCUBJTWktyi8RnXmLEa7pzGZrSB3T6Hc3e7sCgcFBwcL\r\niDC3SCHeEfBvXbg1vl7kLOYT/fPOCF/LvxVRFy5c+NjBwQGuXr2K+Xwess52CSQODw9xeHgYAb8U\r\n+JvNZgAw+H61Wg0flJZgAAAgAElEQVTiZNG1CFTkzCRjDJq6j4EF4MgihrIEEgBJqDPFYdP6KCNr\r\nnTFD70mofEpSwggAwnWGg4VzAURczFdQKsN4XCLLNLzvYwPmeY7lsopMEsB37pqUITXDZDJGcDEO\r\nhggBcVmmUZYFYE1gB3lyOZWDw7ge/JNk6YiOheM9cpFFZhC5LvEkFwSekJFGDM4IbiFdEPYuwcYY\r\nbG1tsfL3RlUAEGQ0dILx04NiALkNd0BJZ0AHYDF8Z20AK1O3RjooZiM3ZskIJTZqa000PtPBoLVG\r\n0/RMEDIohRDRVU+KIaDEwSHqZ2mf4ecHYETFZ6LDGIu6blCWowAa6QxSqvidJxfgbBiQn8pN7C7O\r\nkqEA51VVIc9zTCYTtI0ZPBstXgmc5jGBeL+lRSYBFmSQEoAaymmgVQ4pBbQmUEPHtqmqCsL1rqmc\r\nuUcABgfh6D70XVVV2NjaHIAeabw8cu3iY5sATGJmEiOZAxJ0DxoHAAbso96wCbtqETDoQPeA9oVx\r\n6rrPpZLI8gw6C8ldpJJwbgj+8fKRyy0HPjmQopSCcEdDKqTgSyq8vug5uP7kAAo9Owds+MYKMSm5\r\nMcLHYRqLMR2n63Qr/ywtfwpQpb/lktbHukNrGXWW9w7OUUiC4FLftk0MAdG2YWOGPjOmhe6YwSm4\r\nfFx7pGCsVt1Gg9Ldq4p/a50hy3IWfzWLmwtZliPL8sD1Zqw+znCl8cPHRQqW8nKv6yspmJbGc+XA\r\nYPoZfc7B37T/chdfvgDh5eTPROsLOkhXcEObrk399zjgkvpj2i68PtJNqbRvOUdAZe/W3zYGTd1i\r\ntazhfIvW1DCmRojzazoAUQXdwHQVhcLo24TizRpQ4iSaY0OfFZAitMmFC2dx5sxNa8cBlxT8488T\r\nD/Dx3DP+hBCMCRhYiD9I8I/evzp7Ff/lL/8LvnP4HTx24TGMs/EbPuf1ZDwe484778Rdd92F8+fP\r\nhzAi0R/6eFA0fKbDekvJAODJDAoCIVGxCuB+2P4BBCWF634rBML2AOkF2Z0bzpEAIEJyL9GdG4oR\r\n1m43ahpdT0+mR/qbdfos/W16/vXuue6+7xd5ozrjf6fPfb26Pe46qayzXdadf73vTuR9JgJBTwna\r\n7Qr6hJKYSShAAhKq+1ohg+5IYwqQQQfF0CVKAApQII+GkKxQd/OoRhE+Eh1RBOy+XcgsQMTrSJHh\r\nxjXc+1gEkHVzgBAKIteYlAVynUGORigyBS0EQo7IQBASUH39v4mxna7/vh/6YB34d5yc6J8fvKRM\r\nceAGwL+HH374Y7RAllLGpAvkUpEu1vmuvTEGs9kMs9kM8/k8AnRVFeK4zWYzXLlyBZcuXcLly5dx\r\ncHAwCEDfNA0OD0JGN2L9cAahtRar1Sq69JExRGUMDz6slJTRQK+8sriRZ1oycAKbQ0jERXtgDQSA\r\nJMs1lArsgKHx2hvpEVBksUAIaOBGEI/d4m07AEZSkMvCd5l9BVpn0drO/TALAJH2fYZYqhtKoiCl\r\njEAsB074DnCmiyMLlmgEdS5f3K8/rcuuaN0it49L18emU5BSxLiDATDsYzLyGHKpAUuApRBikOl1\r\nUP9rOj5/zhSgoM+oHxeZiiwb730E3YToGXopKMANVL5LTMZmHyOqiZ/zZAPUvlmWwbg+AzFdi7uQ\r\npdlOye2WWIGrVR1359cx/KhfUJ1xo9lai6LIGVNQDdo/KP4sgtJAB+Z0GSOV0hC+B//Sevfeo6qq\r\nCPKkjESlFJbVKrqfcoCJmIFpQhmqa6pnqlfuLsyNfwoIT+6+adzAlKnImctpiAPOgusBh/XgXhzf\r\nfsiKTIEMJfSRa/L7XI/dxQGV45heaZ2vM9g4GMTvkfb51PDgn60zImkMpcKv/1ZdxtLyE6iesofp\r\nPX3vOwZx25p4NE0L42yMH5qGLlBKRfdaXjd8jDvbDjac0jqcTqeDjOWcJRdAuaPg2Trwah04TuMq\r\nXRDwVx4rM3VJvZ6Ryts47bf8fALe1/btJG7VuiPNEpyCmwAG4yG9z/XKT3qezxccYA3AuBzULV/f\r\npNmMKSREdAUXPWC7Dnyl+6fPxiXTYfPx7NlTOP02wb8jgABjGB6R+F14f6PZfvl9jwP/SCd/48o3\r\n8PFnP45Sl3jozEMBhLsBSfvYiZzIiZzIiZzIibx1MG7dGopvmr6VjYgT+cFJWtcpeeTNinr44Yc/\r\nRkZEWZaDpArz+TyCVyTpInd/fz9mQKVF82q1wmw2w8HBAfb29nDt2rUYi4sWw1VVYbFY4GB/3gGG\r\nNVarKoKHq1XVAQcedd1guQznCCE7kIMMS8aMYxRUqhT+3TqDB54ABYDcgqRUIFcgpTqXTlPBOTOM\r\nN9i2HZurZ+Hw7znLkZeDjOKmaVDoPl7LurIKreAEYGwP/PmOeaC0hrTDtiFjO8/z2JZUVgICubGU\r\nZcURYEiIPsg7PRsxSLgBGc7t3UR436D3nIXHATx6Ts7M47/nIC4BS3SdAQDk17s10rX6eIxD5gfV\r\nQ65lvBavG86cOm5ghfuYyDYit2spg2u4MS1WqyUAjzwPbuPkdk6Aaev6ZB8ECnAggJhZ9DkZqVSm\r\n1aqOjFpqG6ovDv7xPsqBTQL/1rFnhBBwVsIaFxKU2OAaQMzE0WgEmBDbyBoL130vGSNCdC608AgZ\r\nKhES2xR5gbIoMV8tBvVJ7c0BN+rT61wLeVzGtP6klJjP+80F3pbU5tz1lUBGzo7iTJ51AE9R9GBi\r\nqidJ1gF7MU5b6yGFgJIy7swqKaGkhFbBpUIrFb8LGHtInuKsg0nAIBrLHHROQbl1ZTxOOCBG9ZaO\r\nxetNPHxMrbvvGxnv68DKVFLXZq5faL4hMJkOcgNuTBszX/OQFByI45Mr13Pee2TCd+3h4F3IGERt\r\nmGcZMq0HbUffZVqjyHO0xh3pH7wvcx2cAlR8bKe6jQ6ub1Mwj+J9pXXMy0Dtv64t0n7Fy03MbOrr\r\n6dxLwtcO1Fb0jMT85mER+PhP2zvtI2l70bVpLmyaBt5JtO0wA7f3YEdgcgcgz7Ky2m4+7fUU34Dg\r\n2ZG5OzAfo9Za1HXom+fOn8bZt+H2m9anEEPmH72PB0fsPGCF/RsB/+i1tjW+8NIX8KnnPoVbt27F\r\nHdt3vOEzv5G8nYXviZzIiZzIiZzI+1G+X/Mh37w/mWPfeVm3wZ3apW9W9MHBQXRtTBlC5HK3bleb\r\n73ynhh1nKHDWGAVAr+s6Go6mXW90cGPcex/jNxVFge3tbRRFcNfa3BpFcIS7INEiP2WFcXCKniM8\r\nYwfeqZ41J0QDY1o0bYW6CedwACsYI1lkFlEAfgKcCHBI2Qqc0THOmOEi+6QoVIdqUkL5Pm6Y1hpK\r\n9gyr5WIe3T3rusbe3h5WqxV2dnawtRUyAXMmAzHc6DdKBgMxZC7uGWtUn9Q3OKjJkwfM5qvYdzjj\r\ni8pPv6E+QudRwoK6rqNRl7KarLW4dOkSxuMxNjc3Yx3Qs2utAWvi/ZRS8VnpWpQQgVhgFOSa2sm1\r\nofzBEAsxLql/kNstB5uoT5Hbqfd9+3LmKhmyy+VyANxRgH5q57zI1xovBELQ+AsZnaeRLUVjili2\r\ny+USeZ5jd3f3CHBBdUXMQ+5+y9uMjHYOutUrGV33yZW4LEtkWWDk+bJP+ENjjveRUEdDV25iKkop\r\nMZ1OY5+jzOC0CZHnOa5evYqyLLGxsQEC1+l5OGON+hR3mSbQjyfMIDZxyIZdRFYWtQdnVEkpY2gD\r\n3jf5+N0odQR8KZYYjXvnbAcEc5f+wIyNbMiyz3DMwY/UnZP6D4EkVM5VXcW2ShPHcDYo9YOUQcbH\r\nXaobgQDOrHM7pTao6/rInJACUete0/fHyRtNaOvuz3/DXUN5/6P6XtnAbi7LErPFHBvLDWysljHW\r\nKYFPWZZBe87SVJBQkPZoTEOgT0ZD+p+uURRF7I/WWtRNry8JkCL9kdYZB/yoHNSGpJ/ThDnL5XIA\r\nyvFNFdJjXOemTLYUrOLC9QudQ5sP9HsaVxS+g0Aweiba/OFjgIN5FNczvS/VNdcvKQAOBD2UgqcD\r\nYF4UcU6hOYTWPxzkTwHrns3ZJzOhvsLnP7oOvz55MAghUBZbAADn3rx7zbr6WOdytW7svJkx9zch\r\nL+6/iH/y+/8EP3HrT+DXP/zruLh78YaveWKcnMiJnMiJnMjfNvl+zut83UN/v1vWDSfSyzpixVsR\r\nddttt32ML8g544YDAeuYAUKIwUKWCgQMWW5kZHNQju7Z1EM3mzRY+2w2Q1VVmM/n2N/fx2w2i2Bb\r\nVVWYLw5jGY5zb+MGD68s5xwyPUJwQ+0YWKoHBIMxE4x6IUISDSp7lhUYjfrYNfweKTuLDHMCNigW\r\nWFVVkGDZMzu3xoEhFjINBANPZ5AqRJzxNjBNFI66i9HzkfHBOwvVO7VvWQyfgQNDZIhRXXFghIzJ\r\nulkNWB9pX0gZHfRbnk2XgEQeo5DXJxnt/DsCf1x3Pe5Wx/sxZ4bRcwB9Zk1yuyZDund3DULZWHm9\r\nkbFLzDnqV3RNAs25yy036PlzOdG7KRM4R1lpKZMqj1nHg3MHZpOLGRDH4zGm02k8h7PM6H5pfXM3\r\n9gBQiQFQIYSG9w5tF0MtUPgQQPGmRqY1lFZQWkFIGZLROAeIEBskyzNAhOypzofvjA3Zq1vTYrq5\r\nMehfvNycbZYyVzkbiH5DbCPOSFMqJEYhXZaCszQWeb8k5g6B4CmrifqDMQZZnrrXDpPV9C6o4X1o\r\nB/pchAhSUsDT1yLEcQlHiMNC8QWFlF2MF8T65WOWC7Vv6k6eupcSCJtuUPAxwcdOypDlfXHdJMR1\r\n8DqmUro5k8o6fZ7q9pS5mjKh1jGWI7PXWjhrYVqDpq5RrSosF0vMZzMc7B9AAGjqGtaYyOoTfVNB\r\nytAWoX/7kOBTa2R5jrwo0LQtIASkUvHQWQadZciLAs5i0G95jMWU7Za6rNJ44K6lKdDFN5voHN7X\r\n6X160P25Ll7HTORtvK7d49zGjnRO4m2Xbv7QhlUKPtNrOuenfTjdJOD9NfTvIeifugDze3JXe1qj\r\nOGcjmJuGLVk3dkiv0O/LcgzvHW655TzOnz973bEAXCfmH46OrbXjkTMBIf7G3H7pNf3s1cNX8V//\r\n6r9iv97HD5//YRTqKNh7IidyIidyIidyIm8s62yBdZ+/Gbme2++JvLNC7cFturciejweR4CGo7u0\r\nSE9dqlLjkHbKOeOHGAhSSiwWi0EBOSDknIsZggi4CskQ+p12As2CwdlnsXVuhPF4hGt7r0f2B3c5\r\n4sZECvxwtlNeaEA4eFAnd/FVCN8x4nLUzQqr1QLz+RLGOEiZQ0oNKRENNu7qI4RAWZbRQCP3LWLx\r\nREaDN4PnTcElj47ZoRTyXKPQgS23MgEAHRXTgYFGWZHJCOGsk9Sw6uMe9UY2GUDUjvQ3Zcwkd2IA\r\nHdBVDMA+fm9rLQ4ODjpGnoO1HpTpWKkMQqjI/CJWHrUT9aeNjY1Y1tVqNTDGyrKEynojmUCJtm0H\r\n/ZLqhQNM1A7kCkrPSkbcahVsopDwREZ2FbUt9bU8LyGEghAtY+sBUmoIoVAUIanCclnBGIdwiozM\r\nM2N7t3WqPwL+mqaJjExi/xVFgclkwvrIIZqm7n5XQQigLIsICATDN2R61pqzoEKyC87MpSD0HDzz\r\nroH3LdpWoGk8jGlALFkA0JPNAHpmBVSm4Fehr9dtjda2cEjSv4tuMurcgGnsEqOQxgK5ZZ46dSr2\r\n06qq4hgbj8dxU4H0FOkmuh4QANOmaTCbzSIgS7EYjTEYleMAchQePkds57bp72PRgSYecMT08gG4\r\ns5ZCBYiuXwso5aFUyBzOE26EsAISIbNyEOtCum0lBUCHtfAWgPfQoh+3woZMk14AMOG8vHt2HlqA\r\nno02Zzjoy4FCGu9ct6cTfBpnkTO9aQzx33MW4bqdQ+q3NyK8jEWRxbKsOwLTWXd9GtBaImDTIuhu\r\n0TEfrUVrLUzTYLVY9IBRN+4IWLfTKUajUeh3SqFumwHrTEoJ50OcVi0lPNWrDK7cqmPAqQ5Y293V\r\nR1xRKRMxub1Sch0SDlRVVdVtAvQbLGl4BaofPh/yeWHddUnncBb1OnYg6VnO8k/rgyQF+AAMxjxd\r\nm29GzufzuLlDGyt8fqf+xPsu71+p2zLNEyRN3WcFdiy5Vg8mCoSf+8G90GUXXiwWcWxRGamctNmZ\r\n9ln+9/7BNSil0JoWb1eEECyRx9ozuvPe9i1+oGKcwX/+6n/G73/r9/HPP/jP8Q8f/odQ4vsTyy91\r\niT+REzmREzmRE3k/CZ/j+EbojVyLk2hO5J0XbkdxobX8WxXNmTRk2PHFMoFGdF7KStja2opgBY9r\r\nk8YqI2OKABda6PNsvcHItyG7Znf/ctS79QiZBxCqXmK50ihHATi8evVqjD146623oixLEHuNnokM\r\nYs5aCEBAMKqKglh35LoYYrM1TRsMA4sIWDkrMTtcoFq1OHtud2B880U/GT/EPKrrGgcHB9BaYzKZ\r\nYHd3F/uXvxfjTRXWRvchisdkjEFjDUzTRmMtH09QZsEld7FsYgfgYC2V6eDgIGYALssQXJwMy7Zt\r\nsVw0mE6n2NgIDKzlchkTfZRlicViMWDkcUZUYEbqgREmhQN8yFRkhEGelR2IJGBahwoNvBOwxnds\r\nx9ARKYkLsSI42FMURSy7tTYCys456A7o4uwYfv7Vq1d7oKpj5tF1AMT+u1qtYv92zmE+n8c4lTs7\r\nO9jd3cVkMolJbciIPjg4iC7AZIw751CWZQTuyDW3bVscHh5Go7osS2yf3gGACHbSOONJAqi85FY3\r\nGo2iu1uWZfCwwd27WuBwto+86Ng1zsEDcM7Dw8XPhRBQOhx1xeNSuSPGapYLlF7Do0RdUzbLfjeo\r\nNjWccMhkBqEFsjKDE2H8t65Fu2oHzEzqo9ZaeBeMewI1CYjgTOBr165hMpkEF+2ufg8PD2GMwWQy\r\nGYBeXAHSvWi8bW1toSzLmK18sVjg4OAAi3mF3d1dnDlzBuMxxTeVKAqFohh1E6iB97RBQmCZgFJZ\r\nF+9NwHUxQ50D4CWk0Mi0hHcdIMb+ccaMKnvwisZX27ZAN94EYx3BGHgh4iGUgvK9Oyi1ibU2bjYs\r\nFgtkWYbRaBRd3XkstqqqBmAHlYUOzhLkC4peX5tY9ykgQ225Tkgnc1AkZXXF58bx7DLr2sH58X0X\r\nUzMvOrd90S1ihAeEC0w9C3iXTJoiJHxyHQv29e9dimERJpMJNjc3sbGx0bsFT4Peypm7p/Mey7pB\r\n1Ro0tku+o3SgCXYbXFUT+nfJmE60KTQajQax8Cg0AnedTV2xqQ+Qez61xfb29gD4JUCU9NR0Oh0w\r\n9Dj4Zq3F5ubRbNxULucc6rqObc5dcEk4aEntUxRFPG+5XMZ7rWPckU6ne5KuIAZ9mq2as/94f+Yb\r\nlbx8AaRP3IIdS/CyGm5GUhvRPC3Qs6jpldpLShnDFaSbpnT91SoAzaZt1o6TdXK9HXgf1QtnABLb\r\nOH7SA4HvonX93moP/+EL/wG/943fw7/+0L/Gj1z4kRu+Jmf0pxvZJ3IiJ3IiJ3Ii7yeh9Xi6rn87\r\n1zmRd4+ss3M44eKttpcGcMRYo0UwGe20ICdjg4MtfCEPYMAm4EwB7kLKEWUhfLe7LgEQO4ySTwSW\r\nTNs2HRCp4X3WGRweWaawubkZXYNmsxkuX76MxWIRAcrt7e1BHB8CgKjimtp2YCCVLWU/yWjABsZP\r\nAEcoY+RyWQ7AH55YgLNmiCXBDTACb6gumiYYAAT+lWWJxXyOTEg4EZJ/SxcYkJmQkEpjKXrQiJ6J\r\n00ApFqH3fpD5kZh581kV3c6IMULPIoTAaDSKcfI4uEuA5WQyjcyIUA6KbRbiYpXliPUBC3KDlFIB\r\nEJCqjxPGXVKBnnJMhjCVU0oZ49xNtjYj24K7t9JRlmU0jIUQ0b0ugtTCxr5KgDG5y5HBsFqtcHh4\r\niNFoFOMFkttWGHDhmYJhWEJKFcFSax1CAhkFIIDbVVVDKQ3vATWbHXH3o/JwwJ0btNS+1lqMRiPs\r\n7OzEZ+PufAQwcpdlzu4EepCM2o73o1AfBmVZQGuFomhQVXVsj2CU13DOgOJhZpmClAWkBHN1Bqxt\r\ngY7FGto5pLNvmt4djjOSCAwk8ICAT87iJXC4d1E+moTg1KlTUf9UVTVgNVZVBe8kVqsVLl26hMVi\r\ngel0GuMN8p0WDrKQngvtMozNR/WcxjpcF0+N9zvuvkvveYwyvjFD5wQ24JDxx9lJHHij56fxwfsK\r\nv27qAkmSAn8pyMP/5swuXp60no5ja/G/00mNt23QEeZYVhUQso0P5xtKyNOVec01qV0AYNGxAJfL\r\nJRaLRQSNCXza2NmOYBD1meiKLDTKoluEQcC7AMRLoVHko5BpnbUf1ZdzLsZb5a7npIOpPxPQlLLl\r\neF+ZzWZxTl7HCJwx/cN1AT3HcrkctEkKnuV5HuuLM/6o/mi+W/dbvrlIc7S1NoKQNN6orAQC0ufc\r\n7ZjrDg6w0fokLV/fX2mzrGf7iw44DuOhB9VJ1ztnYEwTfuv78UPzF69nXi6+cUrnV1UAa41dD5Kv\r\nEx9IhxBr1nqCSInp+Wvl3bm4f/bys/jV//6r+MidH8G/+dC/wS2bt9zQ9TjzP/VwOZETOZETOZET\r\neS9LukZet6n+dsC8GwEPT+QHI9xmSkkvb0XUvffe+zFaMJMxkbL26IY8fhCBHwAGroO9UTZ0EeO7\r\n62Skcroi/x4YxiSi63LDhphRk8kkuqSmzAHn3CDWE33HjRFnjx8UQgiUZdGBkGk8osCAct5EsILq\r\nkAwTAk55rC0yXIjhVuSaLI2B0UQgZVXXMYYUhIjZPWlB2xgTwTchQjIBcvEMyQdqUHbZLNMoy6LL\r\n8CohpUC1amP9U70TQJYaVLzTEUNJqeBC2rcTAQGuY3n0yRTSeHrhR0fjvPEDQDSCqd211miaBvP5\r\nHG3Xnzi7lLdfygThhlie54Bfn82S/gYQmTIEhpIhQQAuKVe6Jgd9ed8l4WOIXEq5gU5jgsBhKgs3\r\nIKl+iDFJ7tij0WjgAp3WBS+PEAJaUbZfdaTe6VwC14qiHMQlDOy8oRs0b0NeDg5Q8PY2xq0tH31P\r\n7rq8LtcBgBzc5/1gPB4PYqdx1nIALgL4t7+/j/l8Ht0mqZ/xjYwhgNSNB+E7IAkR1FZKx1d6L4SM\r\n54XsoQAQNjRSphLVB2fSpbHNIhAsjsbq4/2X6zrOFuMuomm/ouflgDEfD+vGCgc4eVuta9dB/bHr\r\nrgP5jgMZe7fSUI/Dg0v63fAeSmZH6pULBy4585nYwotV2ITok7z0+owOXv98wtZaQ7IYbNTfODBL\r\neoF0C7nH04YHhThIgVlqXz4+OKDaH31sSrA4lfQqhITWGbIsHxx5HvSBEBiM+3U6NGW8HTfWafxy\r\nMDLV67wu+XqFz/kc3CNd3IP1/Vx+vX5Kwl1neL1RGZq6ZymvG191XQ9iFqb9m3T/PfdcxG2334o3\r\nkhDz708G11g3bqjvcxYgfUUgJgC0aN/RmH/Xi1X40v5L+G9f/29YNAs8fO5h5Cq/TmHeWOI8BQ8L\r\nAaMUvKhQeAtrSxTWwhcGwmton8FLAyuBTOYQxkBDoVUGWqwgfAYnNHJnYESOpnMPF6IBlETWGKjM\r\no/UKwtdQcgSI4/vbWz24bh66o/djLgXg6T0H2IE+ORH9no8RPt+SjiLPECHEgAjwfjhoLUl/0/qd\r\n91/ej6meqY64Hub6jjbf+SYnb590fPBxQGXibcjbi76nsvI1Vtr/T4735gEB1JkBnIDyGQABIRWk\r\nU1BOQgkB4QGVt1BmBOkdrNfIcwVnAGQO0nakFy3hhIa3HtoJZLmCdQLONyjkCKZpobMM0hoIkcNl\r\nM+TNGMgNRAXIrEBWSazKBZTPkQmJZd5A2/XjhPrpO12H7+gBgcwLGAjILEfuFBwEnAyRfnIvYLt4\r\n/hoCwgUPSKk0hBRwDqCwTMfVLxdux6X65DhZtynGMZz0Gpw0Ru/TNRVdlw6uu9aVnc9LQgznnpNj\r\nWF/0Xoi3BwCqu++++2N0ER7TjIwQagBqNL7QFkIccafgBaLfcrcdDvxxQI4HyabOxAOO072ICUB/\r\nl2UZYySlnZOeg7s80UFMGCn1kXLz8pPxv4414L1H01Sx8qmeuDGUuhoL0bsgt20L4XvwhD6nNqA6\r\nIqOFG9jxmlkJrTNIqSKoQCCE1lkXQxGwNiR0UEpD6ywCE20T7kUGC+9MnDGZssZ4XXCmSWrU8/pL\r\nj/C7ISuSG7L8ld+f97/WmkG78b7DgV9eBjpHKQV0zA7OwBKiT3gCIBpwAAaAEIDoXsyvzcdMaviS\r\nRCDBNJFpuC4xAY9vRX9zQ5u+TzN90vnU3+j5OAhtrY2uresOWlCuA4DpWtYOF6F0rOvzKTgU2kEP\r\nfs/bhhiaNC44wEf6ik8kHGAhcJzcG7niJOBvMpmgbW1k7FJ8PKovAlYiUMrah65lbIXgBu0iyM6z\r\n/9KrEGR8B2CcfkPZn1NwnU/EKXhNr1prwA2NtnTSJ52buopSXdEY55NLCtAd90rvuW5MdQGXdBJ7\r\nMxM7n1t4vcR+9gZzXqrX07IolQ3qPu3HBK5zHUKur03TYL5cHskqzcu8jkU56OvwXR/pQS8aLwRe\r\npRsWoQ8GQM5aE89Zt+BbVxb+fForSBnoYs5ZGNOibRs0TY2mqeP3tKGkteoy3GbIsqMJQXjbcj2W\r\n6hY+563TOxys53+n1zzOrZz3Sb7pQPXAF6PpvXkZ0vpKwWdnMRhTfE6kOSRNyMKZm9Q+99xzEbff\r\ncdv1OzOAz73wOXzxlWHCj3ULwu6vDtJ9b4B/QoiO0difV7c1/vyVP8fv/tXv4qbRTfjA6Q+szWz8\r\nVkRIBSUlIAQKCxjngELDC4XKV5CQUMhghIcXDZwTgCwgjMOqzCAtYDBCJoFW1ii9R24bOFdAOcD4\r\nHNoA1ndJ3LyGMR5S3TjjkPoLxbLl4905N/Cc4JsPNH9RHFFaR9Nn3JCjz3j/52u/PM+PxEpONxvf\r\nqyKljGxrelhXQqIAACAASURBVA2blCbqC6BPpkdA6jowjusO0lV8PZyuxfh8SL8h0JDbBMaY2Abc\r\niyXtE7xMHBQ8kfeeCC8wqkpkmYaSHkI5aCkhBSCyFsgqCKUgVyOIEnDSIPMZnFshKwqoVkAKAaUA\r\n6S0yoaGlgiwU6sYizzLoTMNWDvkkh1cC0itACnhpoUUBaSVk2WWmFw6FnEBJBdFI5G0Or4ZeKPQ+\r\nPsP7QD/ciAgAy6ILXbVaQmYKrbDQVYvWGJjWw7sAziLT8CKMfwUBjS7W95sUvhZMQaO3IhwToDmA\r\n6xLe1vy+qS1Ma6qmaQZJFuk3VD7y8CPbk/Qiv+aJDGXduv/NiHawXdZCDZVpFCKAGUUe4tQ1TQMh\r\nNZQWECrA1LJtQUH/besGRj4/gD7gNnUc7spEjU5MM2JPcGOL3E554PEAugUj6+DgAE3TRKMIAA4O\r\nDrBcLgfxiigLKt0rggSCys3dKiWkZLG2ICClQpbl8B6Qso/p17TBFaxtW0ynU2xubsb4ZLTopwmc\r\nAAluDFLMQT44jTFYLpchIUHHNKNFB7lb0sIiy3r3RFpQEJDaNA22t7djnDpiNk0mk1hXOzu7WK1W\r\nWC6XqKo6xFx0HmVJwB0tziWyLA+AYdeGTdPEGFMBSOqDnZMRW9d1dGGmslF71nUNpceDRQrtKHPX\r\nKc40raoKSqnIfnFdpuaqqiI4TYAcBx8j2Ice5A6LJwUgB+ChlERdh8ktyzSCQexgreqSRhwiZHes\r\nsbGxgel0AkAMwGve1gBi25Ehy5N5GGNgO/CVgsUTMEXjibf1OiCRxguNE35uHL/MGOdAUepOTOdx\r\nkCgFv4HAFJhMJiGWpe7jki2XVfy+j/EXkmB4LwD0CrxtLYxxKAod+z0tgqmNpJRIExKRHkjH02q1\r\nQlVVMTkDjQcyYuh8qmPahadYjtPpNGZNvnLlSsyeTItqYlwJIWJSBhqLJHwcUj/mrpocSKVzeUgB\r\nGgc0fgDEfj0ETHvArcyDISfRA2XOOXjh4CAwKsoIVllrYZ1B4zyc6VkCxDImtiPvYxzs4JMvN0RS\r\nIQCQwCuu345bhPBn5ADfcZP+m10IcIOMgx/8Hv336w0lDuak9VBMQh+p6xqHh4coigKbm5vY2dnB\r\nxsZGBOx5LFeqI+pb4brDeqBykh6VUg6AJWPCXEoJkUgH8cyz3KAEepCKdIIQIsb8O469QwlFeL/l\r\nbUisIc7aF0IMdGFaf7weOYCfAmxUZs6MoQ3BFEyluuObNgCiTiBPAe5NQHqZ5s0UxOZ9Y125rbWQ\r\noq9fKXtGr/d9Pwo6NYS9aFsDreuoH5TqGPxvIebfuudeB4iJgOkCAmA5huA9wJMOvVvkyJiz/QbF\r\nldUV/KvP/Cv81l/+Fv7tT/5bPHru0Ru6lxACuQB8kUE6wBsJKwCVbcE5QDgHLQ0an8MLDfgapiww\r\nsg65N3AA5kpgw0+wtBISHmUOeC+hvICcKpgWaFyNXLTQmYKHfsNyvVGZaQ3Vti1Go1H00qExyjdx\r\naY4Dgr45PDzE9vZ2DFdCa27SEVmWYbFYYD6fY3t7OzL8+IY710Ok/98PwB/ve7SmoJApHGTj5Aig\r\nt2/onPl8HkNA0NyfsvL4xhfpMQpPQ+3aNE1cU/P652t8Wh/yWLB8bUHPxdduJ/IeFQHUZY0nvvd5\r\n/M7XfhszNYf2BVwlUIxKrNoFiqyArSu0ssSGEmgcIJWHMoDNHBq7RJYXcI2BdgoWCqvCorAZtLNw\r\n2gLWQ0BiYRpsIIP1BRp1DaXbQpUDWrXQVQ6RWbiVRpPX+PDZH8OvPParGJuNG1qrvZ/FC6ARApsr\r\nh4WoUViD9vXXYZYrzLdHGI3HkAZAt1YfFyUy1YUjkR72De/wgxe+LiV9n2XZwJty3dpaKRVDLpVl\r\nidVqFRO9kT1F4WNo4wlAtNc4IepEvn8SVyNSygiQSSnhbL9DrpSCkH6w6CaWgtN+YGDQooImv4OD\r\ng0GcHnpPixVqdJq0iG0I9MYKN4SB3uBYLpfY2NgYGMtk9FDG1v39fezt7WHaZWnc2trC1tZWnDiz\r\nvKeOpEY2XY/v3vEEDN57WFdFt2PnXDQyCOjkz0L1TOBUnuc4uLKAD5Hnw6DqmEHWtKidxcZ0AmcN\r\nnDXwziHTClJ08Y+aGnlWRiAnNdTJ+KI2bZoGy+UyLmy01tiYTmN8KVo4cnCW7yLzHV6q89msX/xw\r\n4cwx6hMcoeaGIC93yn6jBQ25uHFmjdYa0BLWOzSmhXEWjWlhvYuZU+l+KtPwAnCND/XdxZnUsmev\r\n8FhM1B9op4MStiwWi3h+qIPeFYkYQJSkhPoBZ+0QsCelDAlbzBJoBebLBSADk5ESXGitISDh4OHg\r\nIehVIGZ95Qo5dY9LA+en4A0Hk3h7cfCPX4ODfzROlTSRFckZLQQeUSw+uge/tvceSg9TyUspoVwf\r\n32+6sRHGYAe2GWu7PJtBZ5TsmnycAojgOWdOpX1xOlXY2NjA5uYmxuMxLl++jNlsFhO0CBFcvQPY\r\nO42gZtRhZgjGcz1C/Znuz4FoKi+PQcVBWvpdH1dyyJCLrAA3zNRN9+fGIH3P2zK279xGI7BpmoHh\r\nQuXk4zbVMQTG0P25ccPLdBz4l+4Mp2Acv2+qo9/MonLdgoHr+HWgSToHXG/RIVTQP6a1WNUVFqsl\r\n6rZBaw2W1SqCqhtuY6CTHHzQU8gQenPfdhRTLuySFhBCQUpASsfqtIH3IZkU0I892lSheZDc5tNw\r\nGBxc432OH+uYy3yuT8FZ3jc5mEb1SaAgncvBwXVzl/d9HFz6DZ+XOHiYMu44QMF1Gd+Yoe+5fuJ/\r\n87rin6UMZnr+lGXJWVcENNJmRL/eyeJ65a1KBP3WdM8j/VqsffuuEqpLeqW+mWVZfJ6vX/06/tHv\r\n/iP8wgd+Ab/2Y7+GU+NTN3ZPSGhZ4FvfuwSrgPvO7uLKvMLHv/Q07rvlDH7knrvgRINXrl3Bx594\r\nGn/3h38Y9585hU88+QUsfI2ffuxBXDx9Ac5ZvHytwif/9AnobAM/+chD+O5LL+O55R7+jw/9KDZV\r\nhi4r1NuWw8NDfOITn8Dm5iYeeOAB3H///YN+S2stmnNpY1Brjdlshtdeew27u7ux/1lr8eKLL+LT\r\nn/40zpw5gzvuuAP33Xcfrly5gp2dncG9+RwihMBrr72GLMtw7ty5gZ5/rwqNUQJDqS4XiwWeeuop\r\nfOhDH+o8BdqB/inLMhjrXRzo1157DbfeeiuKoojX4GyZuq7xxBNP4Lvf/S7uu+8+nD17Fo8//jjO\r\nnDmDj3zkI/jDP/xDTKdTfPSjH0XbtvjsZz+Lqqrw8z//83GN/uKLL+ILX/gCfuVXfgV7e3v4/Oc/\r\nj6Io8FM/9VM4d+7cwEuFg49vhx1yIu8ecbbFn/zV5/C5lz8FP5XYFDdBtwX2//oAeqKBpkZTVhi3\r\nm2iaFZrSYryQcCMNtA1UpmDdCLVpMSkUJibHAnPk7RhVvoJoNGzuUTYZxme3sYURIEeo233s772A\r\nPTcHihaqUlAlkIkcM7eH17/3bfxvF/8eJtPNI2ulE+CvEw84CNQjCdkqVH4O9+KrWFmDaXkB7aTE\r\nVAo4KWCEQFtqKCFg2wbBM8NBundu5qZ2JJ1C+MpiscDZs2ejTUTMPaAPZ0D2MK2dxuNxXEORbf/8\r\n88/jwoULMeEdYRA85vOJfH9FPfLwox9TUkErhcl4jM2NTYzKEMvHOQvTNsgzjUxrOOtQVzVM20JJ\r\nhTwrjrgFAogLNh4Inbvw8EU0MRsoZhl3W+AMMlqIEzOKFvFkfJKBTkiyUioydwJrKxj0QojIQrPW\r\nYjSaDthPJHyxz42C9AD6hBGcUUaL2PF4DGA4eAaxjHxwx22aFta5EN8vyyFEzxZo2jaAHVojLwpo\r\nHRh51jrUrRkYMSlzhD8LgAFQEr7TA1AzBXyo/qldU+ZZiDXYu5by8zggxQ0zOifsKjcDEJCXlxuW\r\nHKCjtlsul5BKBRejUMmwxsK0BtYYNHWDIi8Cs1UIhH4e+rLqXH8kPCiuFblP9/VGgCDVC8WxDG7V\r\nzvmY2ZFiPhKIQm1NLBtu8HF2CSQghQwsBxMAXilkVz4F7zyctfDOxefovEcBZlRTvXE2C42XlA3I\r\n2Tjww9iE6UHXWMcU7Kocsot3RO6u3jtYa9C2DSgWZUgYkiPLNIQIiRqsNXC2c0nuni0da9YYyA5s\r\n1krBOwfTLYK9G7qacmYSGY80AfGddn5+lhWDvprqnNVqdYRtS+eGsdwnB+J9lzObObBB3xHTk28Q\r\npOOWJAVkOJO0yHMorSGVhM40lFYQMri0QQgoraC0glQSUklAAB4e1lkYawbAEHdP5Dp4HWBHz0mg\r\nBXfJ5PowfTb+e66X1k3wHAxYd44QIWEQ1sb1C0cPiPNr0HVEzMaclovKRm3LPxvoIecoUw7gA1vJ\r\ntAZ1VWG5WMQ5s6nD0TYNrDFw1sJZh0zlsNaFHV5Q+AONPl5kGE9A70ofQiW47vx+U4EOAudJJ/HQ\r\nAameIIZJCp7TuXxDhB90HQ7WpX0jBQ/5uObXWTf/ppsax40Bug+1Mwfv+PPS+EuZfSl7lwOPBE7y\r\n+6V9UMqhmzbpHc6E5PXDdQE/fujBB/GBD9x7ZAyk8rkXP4c/+c6fAD7o3Ninu7/XgdbrAfdwvJvc\r\nfrlwfUnrknieAL5x+Rv47Wd/G41t8MjZR6DljbHqbtqaYnc6hnMSTz33Cj75P7+Buy7chrvOnUYr\r\nBLTSePVqjbY1uGX3LBa1wLXDObyvcfe5C7CrFn/x7RexV3mc2j6F717ZxwO3X8BfPPsy/pd77oBS\r\nBPK/famqCl/60pdw77334tZbb8UnP/lJPP3007hy5QpGoxH+4A/+AM8//zxeeeUVPP744xiPx/jU\r\npz6Fp59+OnobLBYLfOYzn8GlS5dwyy234OWXX8ZoNMJHP/pRfPGLX0TTNNjf38eTTz6J/f19XL16\r\nFU888QQODg5w+fJlPP7446jrGk899RSuXbuGBx98MG6Qv5eNNN7fyB4h2+HJJ5/E4eEhPv/5z+Ol\r\nl15ClmX4yle+AqUUvva1r+G5557DH//xH2NrawuXLl2CUgqf/exn8fLLL2MymeDxxx/HV7/6VZw/\r\nfz4yXu666y58+ctfxnK5xJ133on9/X0URYHTp0/jhRdewEMPPYTLly/j05/+NLTWeOSRRwZ68Jvf\r\n/Cbuvvtu5HmOc+fO4erVq7DW4ty5cwPvIiF61+z3cvv8bRcPYCYbPP69J/DNw+ex4Xfwdy/8OB69\r\n5YdQr5aozBI7423ckd2FWXuIM5PTuHnjVmzkY+yMdzEyIyxy4M7ydmypMeZiCSM93NjgVH4abdbg\r\nZn0nTp05gx//wI/h8GCF28c344fuehSzqwfYGZ/CL1z8eezvHcJLhY38FJwDJmoHVo/w9+77+zid\r\nbw7mOpJ0bv/bKAJAaQAtBExVYaMooLdGmH/ySYwPK0x/+CJgAsVDwEN7idwC0oWlvPEWCm8evOfr\r\nqxsR7p4L9Bum1lp84hOfgPceL7/8Ms6cORPstc6WIBb53t4exuNxJM7QRtRsNsNoNIL3HleuXMET\r\nTzyBe++9NwKKeZ7jypUrUZeRx8aJHJW329Z6XG6gbWtIKTEuR5iMxnDeoG0qwLeYjAMQZUyLtm5g\r\nWxMS3joBb4e76sCQSTAejzGZTOIkulgsMJvNsFqtBjT6AZOIgXbOhYD+lMSAHpIANSAoFgIZyaWP\r\nDP7xeAylQtKAg4ODCAYQIBmM03CdoLSGiStERFnCK33Wf+4H2Q4JZCTwjyeH4DHLeiNOYLyxGVx8\r\nVysY5yC6mH1CB6Bq1QFJjXWYKo18lCNTCl4qtM6jXa1gbW+QFkUGrWVc7DVN1RmACt5nAIidFbIV\r\nOnsYE0VIWcJ7AjwaeO8wnU6OMEfCQi8AOuR6wjPAUjtyBghnG1GHVUrBdsHQOSOMG6yTySS6sZG7\r\nadM0ODw8DAk//n/23ixWs+s6D/z2cIZ/ukPdqlsTySqSRZEUZ9mONcRtt2TTU9Jpw0b7wWgnL240\r\nkId0I0heggACGt3oII9JHnp4cADDL92OFUOGYzQkyzaTdlu2FFGkRFIiKU5VrGIN9/7jmfbe/bDP\r\n2medff9bt1ikLA61yVP3H85/zj57WHutb39rrbKEcM7Hv5AScA5NVWFR11hJibw1iImJB7TJKoTf\r\nYRFAcKOh+9J4EEIEcIOYe9Rv3k26wHA4DK6mQnQxdGj88lgtZEhyEDyTScvSaQBjUUKgUBqZTpDp\r\nBFZw5owD2tiNAOCshUqTnuFJdae/1B+0+PI+UErBNJ1SyI16UoJjt1/uYuicj7mmIJDlCSAshHQQ\r\nlQvMo1Wx8O6OydAnrYEChEVjJIwFVrNFAMNkmkJKBS0kpJAQEFhMZ5hMJhiMx3BKw9YNGlt59iZE\r\nAM942wIIDFFi++R5jsFgENzSgwFuvKueUgJZlkDKCbSWUMrv+l+5cgV1XcI5A+cFH6T0LOIkSWAs\r\nyTwNKWvmZkXuj5QQREBKzfrSt/nGxkZg2xJrlLMB+eYBBykIcNBKhXAMYf4Yz2yV2oM7wsnAOiPG\r\nmbPGs0hdPxNxJ//89SkzOr8nN/RisCVmQR0GDNF7ft11wAWVdQCKf30w5mf8ft3uc5gP0fyIgSOe\r\n1Cduf/+cXbxSUPtYi6ooUJclbDv+FnmOxXCI8XjcucwnCQZ62AJ/AlJLCNEHmDrwnT2TgJ93TkCp\r\nrn8IrCIZxAHdJEl6iSnomRaLVfts3hXfu+ZXqCq/4zoeU5+ZXrtQmw4G2YH24fXnzNC4j2l8xbKS\r\ng2Z5nvfGCAfOOHOQ5jpfR6ztsgPz33FmMukrnBXIFSm+eUUH38Rp6j7zMB5rTdPFX/XhJBII0QXv\r\nnk6nbTiI4sAYXVdc71W3AeM9BrqvQnuH5C2kt4Qh5P/5gBIz4jYH+jJQQGBRLvCv/+Jf40vPfwn/\r\n9Kf/KX7uvp97T/dUUgIS+MlP3IP92mE6rfHv/9NzEGKFLzz+MAZZhlFtsTPRuPfEcbx85Qd48v7H\r\n8bX/9ztYzvbhxsCxrQ1sDBNcvLqHyRAY5RmEKQGn8F45l6QzEdt3Npvh85//PL72ta/h6tWrePnl\r\nl3H8+HHUdY1HH30U+/v7OHPmDDY2NvDCCy9AKYXnnnsueKrQ2OPXffvtt4PsuP/++/Hbv/3bOH36\r\nNJ599lkkSYJf//VfDzr19vZ2T5f4sLN8rLVBTtJzkc555coVPPzww5hOp7h48SLm8zmeeeYZ7O7u\r\n4tq1a/iZn/kZ/Omf/ilGoxHefvttbGxs4Atf+AKeeeYZfP3rX8d9992H733ve/jc5z6Hc+fO4Y//\r\n+I/xUz/1U/jud7+Lra0tXL9+3ScAbPXU1WqFP/uzP8P29jbSNMXLL7+Mb33rW/jxH//xwN4EgMlk\r\ngsuXLwMAPvWpTwHwGeqJ/Umb5DxO9Z3y4SsCQAYB52oYWyGVEhsY4r7jd2M0TvGd117C+a1P4tRw\r\nG9+dvo6z6Q6agcXp7TPYu3YFRdng+zd+gP/y/N/Gspni91/8MuarCk1a4AsX/it85Tv/D372oafx\r\navkK7h/dh9W2wyl9DMk0wcO7j2BveR0XxqfRPPxpXLr0Nu6+/zz+4Bv/F9yqRj5MMGhMT/+7U9YU\r\nCUy1RS405rZCtrONs7/+ebz1b7+M7X9zHeJX/jbsYACxMUGjBGzloCGgnEMC9SOl7JOOzIk6Unov\r\nxqtXr+LrX/86zp8/j2effRY//dM/jel0iq985Ss4f/48jDH4xje+gfl8jp2dHezt7WE0GuHEiRNI\r\nkgRvvfUW6rrG5cuX8c1vfhPWWmxubuLq1at4+umncerUqZ4HyJ3y/hT16EOPfdHUBkoq5GkGrYC6\r\nKlCWS1jTBgJVAqlOMMhz5OkQSmhUZY3FfAGVdu67ZChSJsSiKLC1tQXAAy6E6pLrC8XUIHYSATBp\r\nmraGiUeKT548iclkguVyCWNMiHNEisrOzk5g0ezs7ODuu+8ONPzJZIKTJ0/i7NmzmEwmAYTSWoc4\r\naca2LCRrYF0XvJ/iwCklobQMr6VqA6AnCqvVshe3iEAImigU3DI2QACvzJVVjSRJ28yJ/n1Z1RBC\r\nIk0zTCYbqOsGi+UKdWOQJCm0TmCtQ90YDIYpIByMbeCchVLSB4XVvs5CIrynwO7EzGqaGoCEsQ2s\r\nMxAS0IlCkvrzHSyuvHPZGy2pRpp5w8U6D5r6IPD9bKj8oMDEZPwQyMvBL4fO4ItdrMhQJGYdj5cl\r\nhGdwVmVFOGzLABQtcORlZbFaAQ5IkxRSSJjGswKVlMhbIKgqaywWSxhjfRbLNIc1DnXtmWlSKiTa\r\nZ7lUUvu2rxqURYWm8XFxRqNRcNclZmJZlkEJA/qMGzIy8yyFNQamMZBCAM6hKks0tWcB5lkOKSQS\r\nraGVhlYKcB74g3PQadIDL7ghCiDMKZpjPLGFlBIC61mtAZxl4OW679EmLKDxQIkBkkQjy1Islws/\r\nr2yXIVtKgSxLMRoNoZEiTZKWtdmgqevAgIRzSJMUcA51VaGuaggIpEmKLE2R6ATz5SKAwwB6sRPJ\r\nqOeAGs1Lilc5GOTwcbcSpC0zkRIaDIYDnxlbKyxXS+zt3cD+/h7KqoTSCjrRLXCoA3MUrbFNR9N4\r\nkJIn2iHWbtMYpGkHOPCNAQIy1wELdI7WGmVVwTrnbXghIKSEVApKayitA2OYDp0kSNIUaZYhy3Pk\r\nIYFEPzELxXGk+cbnLz83uKdHwCCB5WRIxaANP/ewneJ1Y5KDjbQD6SMhCwhI/1dIf8BnWA4+8ujO\r\nE5CA87Fc47FN84jLophxGVznGhOYx1J42UPMXSkkitUqyBw6mrpBXVWeRd+IFnRzUFJDtGPDhzio\r\noZQHinTiZblt1yrAQAgH3YJ/tKZQ3agdx+Nx2Nwh4Jv3lVYZlNSeAWwRZNtqVWC5XMFa51npjW1B\r\nJtlnJrZRM+I+pXYjuR23HzHgYzZfPP45cLju4GAinz90XZK5HVhrg9tKnKGXy81Y5tHmDWdV5nkO\r\n6yy0VtAJO9h7KQWEBBx8kp+6qVDX/iirAoC/9lOfegqPPPLJo/Q1/Akx/9qRHAwCFg2cWHcd4Np+\r\nGv2F+2Al/ODXcs6zaNftaAshWlDT99Xeag9/8vqf4BuXvoEHjz+IneHOTSp9dMkSjU+e3cH2KMEn\r\n7j2D0zvbgFZ4/tKbUKnGeDzAv/z3f4BkOMDJTY0nzp/FyfPbqAqNP3/pZVxfzPDj99yHYabxF29d\r\nwScfvhcTkcLhvbnGFkWBb3/72zhz5gy01rh48SIeeOABvPzyyzhx4gTqusYjjzyCLMswGo2wtbWF\r\n5557Dnt7eyH8xfHjx9E0DR577DGcP38eb731Fl544QU0TYNr167h3LlzuHbtGobDIR566CFcunQJ\r\nGxsbePTRRzGbzXD16lUopXD16lWsVis8+OCDPb3tw1pITlAhWVQUBb75zW9iMpngxIkTwabI8xzP\r\nPvssfumXfgnPP/88rl+/jkkbomR3dxdvvPFG0Ff39/fx4IMP4uGHH4ZzDr/zO7+Doihw/vx5XLt2\r\nDa+//jqm0ymefPJJ7O3t4dKlS3jkkUdQFAWuX7+OS5cu4ed//udx8uRJHDt2DMYYfOtb38IDDzyA\r\na9eu4Xd/93fx0EMPYTgchs1okmu04U3PeKd8eItoBJ65+J/w3Py7qAGc3D6Dq/v7eOudG7jn7EPY\r\nyTT+8K++jCfu/wSsq/BnL38NZ/Q2vnXxOzi5vYH7JyeRmTEuF9fRjBZ4bPc8lvvv4JHJU3jp4vfx\r\nyN0P4zs3XsCWG+FqvYfj4y0YaSBGGq/vvQalR3j20kv4xcf+Hl67fhH/+Z2/htEVNpMd/J17/y42\r\nB91mwM02cj+OxQmHSltUdQ2RZRAVgFSgWS6x/cm70ezm2PuXvwd36Qa2NraQHdtGowWcEH6b7102\r\n4fvN/HPOhQ1SrTWKosBzzz2H+++/H/v7+9jZ2cHzzz+PwWCAJ554AlJK7O3tIU1TLBYLvPzyy3j4\r\n4YexXC6R5zk++9nP4sUXX8T+/j4+//nPh7VlNpvh3nvvxXQ6xQMPPIALFy6ETd3343k+iuV2+1o9\r\n8einvliVNYpyhbIsUBRLrFZLSOkwHA4wbA3gLBsgTTNo7ZM+aNWCIWk/1hMZeWT8TafTXgwtAv3I\r\nIKFzyRAoyxKz2QxlWR5wv1sul4EdQ8yewWCAnZ0d1HUdgu0Oh0NkWYadnR3M5/MgfLTWISmHlBKr\r\n1SokdqBDtMw+AjSMaQIYSBk6+d91dHrORCDDgWewiYMkx66x3EAhA4g6ma5PzyMECVu690EAzd/H\r\ntc/lARoqaZqH7I5CAINBjsEgB+DQNHVoHwJuKOMjtY1pDjJ7SFCQy2vMBgQ6sJDGbMwQonM4OBAb\r\n6JxNErtlcmYHAV4c9CUQg1g3Snl3a3K5pgQv9No5bxjT+ULIYPzS83LWK2dGEVOOu31SHfM8C+wU\r\nAkp5Ugt6tsPc6CzcAcOVG6oErkvZJYmgc/xufZ/Jw4EYbvTGLrV0Hq/TYaANsQK4eyF9p0XWG/v8\r\nO+o/7kLHYyemaYrGmt68iMFPkhPrwBwKZh5/T+AVBZuN3f2ovnVdQysP6OX5wI8XYtq4NjFQY1qw\r\ntksG4EMmeMBfa9Ebr/EzrLs3B0i4q1Ls6hi7VcZMGiEEmqpjqcZHPHd4+5ESwGO4rQOheT34ebys\r\nY0zx68SFX8MYn5CJDu+2L8NBbU5zlp/LkzzF9eJjfd19Y5kU15WeicekozWBJy9azmusVkvUtd+M\r\n8f0pkGg/PowtoDWx2WkOtQGRFaBV3mtrDnoB6MW4i8eG/y5h7SBBYQ+8rPMhDnzdvewjYNKzvSs4\r\nHATSbtZWMTgXgwYx2Av0s8HF44W7ZcfPGK89h7kKx2M2Xks4eB2PVed8f5G+QLoCHTyTMukNtAEH\r\nOKyWJay1+NSPPYXHHnv0wFiPy1de/Qr+4+v/sdde7av2PQ6w+fw5ffCPQLcPKvhHsh9YzyrjfQN4\r\nhtZbs9cUwAAAIABJREFU07fw7174d3hz/008dfopDPTgJpU/ukyGOXKtMEpSwDXYHR/DuZ1tbEqB\r\ns5vHcdfJ4zgpFU7snECuM5zdnOD8xg4+ceoUHr9rB8PE4NzOWZwZKmhUsOKI1ORHFKUUtra2UBQF\r\nJpMJHnjgAWxsbODcuXO4cOECtra2kKYpLly4gLNnz2JnZwdlWeK1117D+fPn8elPfxoPPPAABoMB\r\nxuMxtre3Q5zvwWCAz3zmMzh16hROnz6Nu+++GxsbG7hw4QKMMThz5gweeeQRlGWJEydO4L777kOW\r\nZdjc3Az1+7Ab+SSvaV0FvHw5ffo0zp8/j93dXRw/fhw7Ozs4e/YsHn744dBeaZri05/+NE6fPo1z\r\n587hxIkTsNbisccew+7uLrTWOHXqVCA3HDt2LHyvlMIjjzwS3ILvuecebGxs4PTp03jwwQfx4IMP\r\nBrY44OXh6dOnAxi5tbUVdNrNzc2wWcfnB/Dh75+PezHC4Kuv/RFeuP5tjKzGfZtnIesSTVVAO4Gi\r\nrvGT930az13/HnSdYraokWZDFFWJyXAbf3X9eUxGx3Bx73X8fz/4c7xy8U28LW7g0c3HcOH8KQxx\r\nDM+//R08duJhLGQNOzWAFaiFxaVrb+GBk4/iW299E587+2n8xct/iUvzy1A6gayG+MUnfxE7yfEe\r\n+LdO1/s4l0Y4bOoh0usVmkQCaQL3xkVMv/ZXKN+8BPzUJ1E9sAt170mIwRCidkithHV41wDg+w3+\r\ncX2MiFrf//73cebMGbz55pt4/PHH8dd//dd49NFHsbu7G+LzX7x4MXjInTp1CqPRCMvlEru7u7h4\r\n8SKGwyEuXbqEN954Aw888ACKosC9994b7LZz584FLOhOWV9ut6/Fb/zqb7r5YorVagknLIQ0yLIE\r\nx0/s4MSJHag0gRQaUioAEqZ0qKoGVVXD1g43Vlcxn89D7DPaPSO2Fk8kQQocGUFN02Brayu4JWmt\r\ncePGDVy7dg2j0Qhnz54NGWp5sgcuVMbjMY4dO4YbN27gypUr2N7eDjtku7u7mM/nYTG31ie6oMC9\r\n+/v72NraOgAYcMFVFEXvfvQs3EWVx8zimRYBn8Vrc3MTW1tbUEphtVqFIP48IQSBRMvlMoCc1vos\r\nxfQ9uWMkSYLJZOKfo1mFetG9CVDl4AY36Hk9lfS++eRevbOzg/F4DGttyDRaFAXK0ruGE4OElPPl\r\nop+dmTKhUjbU0WiENE0xGAwCS4jq2jQNhHQBZOAsITL4aCeT3CGoL+m5KCsyB9coOysJjLL0BtZo\r\nNMLOzg62traC6yfQj9UY9y+5M69Wq9B3BM4BwHI1DSANKdSj0QgAem53NB4ophzNE61Vr8/p+kKI\r\n0M9pmgZmIbkLUvssW9uNgz9cGMxms/CegxHhHNcZJOuAEG54E5uRxiGNXT6uOAjgnMNqtQosO2Ic\r\nUvbTJEmQy8kBt1c+D7mxzoE/asNZseyB7dy1n4Jux4wxCipL33NQIAYip9MpyrLEfD7HfD7HarUK\r\nzw4AZ8+exXg8xubmZlDOeTZgchvl7lHEHPLgGU+WYnvAkGfO9hMixH1NSZBicCIGPznbqRfbr+6P\r\neS6nqc8JCB0MBhgMBmFzhTZruGLAmYM0H7nsiWVsbJzEB43b+KDCEw2tG7/v1fhZBz4e9v261+vY\r\nZD0gXwyQphrD4RCTid+YGk+GGAw693Q/3lWQlXVNgLYBXBbaG+grAnxMrFujmqZBVdowTmlc8HOy\r\nLFu7IUDjLx/o3ufEEKUNAx7Tch1AXVXNgU0vPo5pDYrXMPreZxI/CNpRndex7ukAgNVq1fueP6cQ\r\nImT4jlm5fLODfhuHr4g3pvh96R515deOf/gP/3v85t//b48cj//sK/8M/+KZf8EAPtED/IQQ7WsO\r\n8lEYExFcgv0AAZZueR3hXXsVgZZK3GaZcuH7Q88TQuCuyV13HQr+OQb+sTocAP/Yd1XZZarn5/Fr\r\nWGvhrMNoNOqAZAds5pv4B0/+A/zG47+BRL4/hgP16zoZY2wbt5YMJGMAbjC1799LiUHxw3RWWvP2\r\n9vbw9a9/HdZafPazn8XGxka41rrNGR7faZ3hvm5z46NSYhkXl7g94s1CvpbFm/T0PQ83EF8L6K9V\r\nt1K/2OAjskG8oRK/v1M+fMXBoZAL/M43fhv/x1/+b1iOVkgwQG4yNLaATRtYm/W8dQQEbJtIEg4w\r\ndYN8kENAoDGdDug9kHIUtddF4w2xQAwQGo9NHsDjdz+MP/qrP8LF4XU4KPxE/in8r//N/4K7zLne\r\nmL9TWHEOiXFYZRnssoDNGwzfuYy3/83vYXT3Ocz+689gqIaYzWY4sbsbiAfc++HdFI7F3HoV+/Jd\r\nCLE2JnKSJKiqCq+88gqWyyXuvvtuTCYTfPnLX8bP/uzPYnt7G3Vd480330Rd1zh//nzAZ06fPo26\r\nrrG9vY3ZbIYsy3Dp0iWkaYozZ87g7bffxnK5DBsao9Hozlg6ovBwV++maK018mwIKQUsDCAaZFmC\r\n0cjvDspEQzpAigRCKNhUoqkM6qqNqaOKHqBALncE2HgFv+oxcIqiwHK5xHw+D0AJAQKz2QyAB81O\r\nnDgBYwym02kAb5xzARAkY5uMldlshsVigf39fWxvb2M6neK+++6Dc64XT4vqQobpOqOSCl9g6fsY\r\nJIhZURwMIfCRACliXJBBRvUgdiBPbU2ABt2PMwdXKw/6SGV7SQqIkUSGhhCidz/qJ/pNXTlIqSGE\r\nQl0bLJcFpCTXMe8OaS3QNP6ZiqJqP0+hdYo8173JSUoQd7fkCiaPzaa1Rt2s4Bk5GlIiGKV1XbZC\r\nx7auC54lKETS1l/BWoHhMG8NTNf2a4O6dnDOoK69O67WEsY41HWJ/f0bqOsyAInj8Ti4clFcSoov\r\nQAA2BzBiNgiAAA7ydh+Px8Fw5n3NwSaaJzztOT+/aZogIOMdtTRNe4rkOvYXPUNsrITF3DnvaoyD\r\n7Ax6z11PuRsfgXyxMRS3FY03DkI45wJYoWQXU5GAdAIe6roOrvq028QZsVJK6EHXP2T4EAjJ21gp\r\nnzmqKIoA5GZZhmPHjq1VdOgz6kcC7ObzeYg3WZZlcH+q6xobGxtB/uV5HsBuqg8BmwQQ8DbvAAUP\r\nSNPCK2Xfpb6rm2ex0QJP7cz7lmQVlyN0UN/pNOvJK5I9sTwkwJuAIpo/FFeVgBGSxwB6LArqn3hs\r\nxDuLYs14jEtv/K7Z8TrKkHs35ajfrwPa+EEhLPj8pzEshECaCBgjUTcFinKB+WKK4X4eQH4aU34T\r\nxMtkrTKIxMuLsugYmbGMovrH4BttkFhrUaZ+U00nsje/lBZQVZeNtjsshGVupehYzKSAcKYWgcMx\r\naEjt5sE7Gqdox3snX7UmxjLCIWU3V2Pwl4PFvH/oevH4Wwfc8e8Wi0WYn7HLN30ej4d1oMlh7sWe\r\nBejeFTDknGMgmYNzIpDwHIXAEP7zAzRAAgl/lAGEbqHwMew3qfzn8Xim72PdbVpO8a/+8l/hD178\r\nA/zjz/xjfO6ez73nOvFNWpJnPd2Rv/cP0Xv/Xlqcg02xvrruM+cctra28PTTT4cxTnOFn8+vz9eX\r\ndbpwrD/w3/LvP0plHUjHX/O/1H7xdxwcPGrNitt+XV9weR9/Ftd53fs75cNXBAQmZgu/8uhv4OGz\r\nT6ESJdzKYiByQNUwsoSsMkjVhkKBZ6Nz4MiIzj4TEJCq8waSQkDYw0Fiv64o3L1zBsIAn935L4Ah\r\n0JQWD248jLuLe1AndzKzHlacAPZzYFg7FEpCTQvM/uw54IG7sPkbv4zq2gyrosBmy94G0LOb1q1x\r\nP8zCZX1s31MoKco2X1UVXn75ZXziE5/A5uZmIHncf//9gRR28uRJ7Ozs9EISECHqwoULAdu46667\r\nwjpLYYc+yuvLj7LoJMl8LKD0GHQqYV0FCIPxeIg0bdFEISHhs5IqraFEAq0chBXINs9gOMyDey2B\r\nEl3MJ9djgZARvlgssFwu4Zzp7VgBnTFMGYCLooDWOhjqQgisVqsQU4rH+zLGYH9/H7PZDPP5HM45\r\nbGxsYDgc9sAFAnb4gn2zycUXbK7Ak3CNXYjoOVarFfb391HXNTY3N7G5uRmYh2Wb7IKMAwL/qJ2I\r\nlUBGGSUuoDrMZjPoBCGxCs/MSe1Cxidv177CUvfcTcnlmuLXWWsDa48A2+nUJwkhlxGu3Fhre661\r\n1EbEhOKsPB+zrO+qSwYkCT4SJDEgFTNoaLwQQ3S1WoX6cACormtMp9Pw++Fw2Lt+bCgT85OeJ8/z\r\nngt6liTIWoHWNA0WsxmcMXDGx6aEtdBSQqVpAFaqogiJAJzzgJBSIiRl0bpjedZ1CQ8GOUiJ3kFA\r\nKDesaWzQeObxv3i7kiGq9MExG4/fdeAijSNiVca7U/z+NL5ox4gzjIyRAXzNUz+2tdRYuRWccXCm\r\nD6oIIWCUgdEeWHJa9rKKExuNxly8I0IAIW0ALBaLHhjNMxoDCOOGAPPhcBhAvf39/QAWF0WBxWLh\r\nmVvjcTiH5joxmDhLy8s9E8Y93cO3b4001WEB5LLHtRa+bw/q3/UsNSmpb1Q4pNQBiEzRsZkb1aCW\r\nHTvQOotUd8lRKOGTqRvUiZehlLErljHUzrRzSTKeg570PHzccaOa5nps3K4zdvm4469/2AoDl6Xr\r\n5hEHBfnnAbiXNaxzKEuHslxgsVAtuzUPStNgMEBVNRgMBgF8ShIffkPKZRg/B4Gljg1C84BYQTT/\r\nsyxBVWkUhURdE1CtUBSA1m1SIANUlXdbBQx86ANi7vVlN8lgzm6m+nBgksYBbS7Q9WL5Qr+PAVT+\r\nnDGQx9f0WO7xjTvnHIbDYQ/45kx5AEH+c9YhZ/7RBme8AcLXRLo/Kbi8/nnuN4huB4zrMEMOLfVf\r\nOydaIJA+agHBNbjgB6lQO4ZMsmuYf4AfU1ma9WQGL6/tvYZ/9B/+Ef7W2b+Ff/LZf4J7t+99z/Wi\r\n7KmcKUdlHaj2fhtthzHEaF5zLwy+qXaYLFx3vb9JQ/ODUA4HPQ62w7ttm1j23+z3N1vP4s/j7+4Y\r\nxx/h4oDGAifTXeyePAElBOAxPkA6WFdDirQv1+k1XxoQfcZLfF70uTOAlQ5W1jizdR6JyqGsgHCA\r\nLT5e8uLdFuGA8aKBzRMoKBTOwTx5ATvDIfamC9gKGAwH2Nzc7JGCYn34h1345kS8CcFfe93P2+Za\r\na9x///1BB+XrD4GWRMYoyzKECyJdkf7Svck2ISyBdL93y2S8U25e1Bd++ukvjkZDHDu2jeMndrC1\r\nvYF8kPkkEconTpDoAqijPYSQEEphsj0ITJetra0QDHcwGGAymUDrtHVpmmBjYwOTySTE+/PupSa4\r\n8llrg2sdd1Uk1goZ+NxYv379OpRSPddUMsQBhEwy/Lc8HgZX7Nft3NGA5EATB4k4cBQzsQj8IqDP\r\nWhtcFum5YlcBbqwQkErGCYGrxLzyKbF1uB/Vh4MlQAdWxiCRB/y6bMsAAkuTvqcJSAovuYd17LVO\r\nESZlmLt/cUCKQB86RwgREn7E7UfvObNj3Y43PQ8HbjjIMp/PA2ONjAnauSBjlYOPVHeeNZO7spEg\r\nJtBWwAZDl8BKXueYiUL1pn4qq86tnMAyAkfpPnG/8jYyEt4CbA8HwDqHxjRojPFJKQBAAFJJKK0g\r\npEBjDOqmBlw/2QqfCxy0WQds07PF3/HPSGgT05QzVK21qJZdXKfYMBdC9IzyeHwppWBlnzkXM28W\r\ni0UwfDhzh8sW7nJOdQnM2CjbM81fAupp7BMgTOfHij4BHTz+ob9n381ZSNdLKCSETxTiY7F17Usx\r\nxHwCkYNMObomb1febmFOtwy0dcBtLAd5CeCuVocwmg66oMZjp2N/9WNZ8vG2DuSLwZb42fl577Ws\r\nu9fN7s3/8r6I5XI4UMLYGsYaWOsBV2t9vNWmMe3a4Tc0ysK/bhoLZyWck5Cyk898A4rGMM3fuA+C\r\n3Exal1DpE/akaRKS3iSJhpCAVOQ2CkA4OB9pFM5ZmKbPdCeWKwHiHNzrjfM1Yy6uY9yWfF2gcbzO\r\nrZ8fHNhYdx0O7vPrkrznMT/X9Sdn6a+Tz/G1Y/kkhFeYf+zHnsKTTz5x5Hj86itdwo9eO7VCni4t\r\nWDKQtWOz/bJB84GM+UdrYWA/2INMK+q/LM0OrEPx67dmb+FLL3wJ03KKx04+hlR1iRBup1DfUl1u\r\nRQa9F3kUz5d116SNTl4XGpd88/qwOh52j6Pqf9TvPizlsGeIwbvDfhcz+uK+/2G300ehD+6U9cUJ\r\nhzpdwpkaiVUQxsEJi8o1aODglPKJA43xuoRrdfj2r7EGjTMwzgASMM6iNjUaa+CET+IY7DjbP7pr\r\nOQhTQLoaqUhgDNrzK2hdw+IOOHNoafV/2zSwxkBMMrjNIQajCRKXINnawmiQBZuH68234/rL9et3\r\nX9WDscfj9xxH4bo6gXtAl2ySSqx/0hoebAnVD0HF2Y4flTXmh1Fut6/Vr/69X/1ikvokDlme9bJP\r\nKqUghYJKUm98SgVAQSoFqSWElIDyu8pJkiLPBxBCoq4bOAdonWA0GiLLUqRpAqUkeCDsJNGBVQYg\r\nAEsEGhF7i8eCI8YeGdEEqFEsLmKiVFWFJEkwn88BdOAJxa9yzscj425p61yC1rEK+GcE0HGlnpRB\r\nYjkCHQDHXW8JjAS62EScpUZ9EAOF3LCgmHU85h13TSKFkCdtoGv4ASN7k4wbTQRkJUkS3NDo+ehv\r\nXfddPzlwsw68i0HWfJCG+/Pn44AjKbHrYpIR4MeFEX8+cq+LgVxqU2o7MuCALi4b7UhwwIgzU5Ik\r\ngdQCQsqQbVUqPz/qpsF8sYCQni2bDwZIswxCShhrw9E0VXArpechoJKYUxwA5gAY4BdxZ13INBrM\r\nupbcoZUOKQ6UVFDSA/qmMWjqBk3NXfr6zBrOIojBIDqfxj8VDiLSwrUuThb1cV3aFrR0oU0ggCRN\r\nkeU5HDxo2XLdIKRos9n6w0n0ZAT1DfU5zRuekIXGFsmHdbHo+DinZyVGK2V0JqCW5jl3GazrGsvl\r\nMsxfPkZ5OxhT9xdWC0B049SD/R3w5ytpAeF89lfjEwfQQSCNlB5ApPf8c/pOKQlrTACFpZKAEBDS\r\nAwc0rn0GYX/Qd9Y5rxyumT/xIk/tyudlDNTERiwHUsJji4MA/WFK0VEG262WeMzGR8yauRWwkLeB\r\nQxnYWJR4g1AVaw3KsumSgywp7mjLCq4Mysqvb3xzgteDy7xYUfPMP2Ja+zGRJDokGEkS3c5h1YKB\r\nSbspyMBa0TFl6Zoxk47HwV3HTDwMPKbnimVvfPA1gM+zeO6tO2fd2IqzEfMYo9S+MagSy8dYV+CF\r\nn5don635x378KTzxxONHjsevvvJVPPPaM9GnnDfYveavupuL7iMHNOKDB/4FmYFOD+CbLnwTZp18\r\nOexezjk8/87z+NKLX0KmM3zyxCffF/kQM1xjoOf9NFzWgeO8cHnIx3QMAK77/VFA5cfd+Ir7k8vS\r\no34Tv363Zd16FtfjTvloFwkNbTWU0KhMiUYaOOUgnAYaBU8F9OXgeFg/Rvj6dRj7nMa4cQZpMoAr\r\nAVgJIwEnAQGvs7s74N+hxbdfA5UkEFohg0IuNBwEdD6ChYBwnU4RA1+xLnxUuV1AKF631m2eckIP\r\nvef2HtWXk6y4zk/vyR4jjCLGN+i3/J53ysFy2+Dfr/3Kr37RWgNjaw9UqM74kFICSkMqDaE0nACE\r\n1JCpglAKTgCz2RSACJlRy7LCalWgabx70I0bV9E0NdBmvKuqEsY0SBKN4dCDhQQq0WDgbqgU364o\r\nih4Ljf5OJhOMx+MwQCh+mpQyxHMjIHGxWIQgmmQEAH2mSwz2UYlBAVLuqa68rFMKyNWQKK3EHOLP\r\nzgE4bpyQgc0TiRD4JGQ/HpoQIrQPz6bIAbmDBncHHHjDz4O0lOkYcAGszbIUSkk0TY3lcoG67sA8\r\nzvYjgCgGBEk4UPw178q9Lgun/8wYC+d8Vk/bZkylrJRSqgA4O9dl4xVCQusEaZqFz5vGBEA6SVI4\r\nB9R1g6JYHUiywbNMx0xR/hxpmqKqyxbE8yCn1hoQAmVVYblc+vZQCknL2AQ8cOL8g7SZjNKWweWf\r\nnV47h/Dsdd2grhtY6yClCmwwOAvhACUllPAHhUcXALRUkBD+c+H/wjofgNw6FKWfj8b0jXBvuNfI\r\nsrQnfMmw921hgzs9nwN80eJu4XxuBaPEeOCvbmqUVYnGNBBSIEkTpFmKJE0CW9HB+V1IZ+Hg2Y26\r\nZecR+MeBbgJxCQQEuoQrHBiM5zWNXQK+CcQgpknnmqtCQFpiO3H2EzGRqV4E8sYbBbyvAec3XLRv\r\nn0Hetq90CKwrZ8Kcta4P/kG0AKAEIPx7wAOFQh4EAaVUPpRDC6YKKQPY5wFBBZ3o8J0D/Hg3Bo1p\r\noNpFPAbmOUgX7yDG8u1WlZpYfvHNhXXjj+71Xgyko36zLuYcP+LNoVi5ShLvht1lKRaAIyANIROw\r\nH1+0BvjM61VdoW6K3hhet0F12PNLKSEVg4paudqxQ30m4D7Y0gevtU5762l8H4qNSfMiXl+l9LIu\r\nlvs0H7ROwNcGfvi69DP5coCd3EvWgYbU/rw+9Fncj+sYe7y/D9MdSNegsm4TcTgcQwjgU089hccf\r\nf+zI8fjVV76KZ96Iwb8+/NdP6sHYgD0wTAAOMB9A8G/de/65nyMHzzsMcIvrVDYl/uLNv8Azrz2D\r\ne7fvxanxqZs85K2V2GD7myjr5jN9TusO1xeP+v1Rsu7jCjCt0+dvBo7eysbTu23LeCzz+9zuNe+U\r\nD1MRAFLASRg4WGmhtYSWCZSVkI2A07bdrPW6MhESqLQqpLcPWnKAdIJUxE45jA94kA9KoLaAVSka\r\nAQAGSaJRmgaNTPDuUw58fIoAkEBgVpXQWQqzKmGlQKpTyMqhcg0E01c5YMZJGLdabhcQigsnKxGZ\r\nhoC9mLBDnhixTcV1JC6jaI2i1/y7OEzFuwU/P07ltsG/X3j66S8a02YKVPCAAlwLmgAWApDSuxJa\r\nB6EEVJp5GrKtkekcAhL7+1P84NXX8Morr+KdK1exWhUoViVefvUFn0m4ZfuREaqUhJTe7ZS72Tnn\r\nQiy8ALC0GTAJTCDFPk1TbGxsYGtrC5ubm9Bah7h0QojgWkxGAAX6J8bSYDA4VHmkQn7tVAg04DH1\r\n+OdCiPAZ/56zGmhyE6uMmHVCiJApVwgRGI7cVS82RAZDzxzgBjjdg9B0zgyk63TGooHSngWktOxc\r\nvCSgtESaJVgVS+zv76FuKmRZisEgh3MWVVUiTYYhppkQIsREIxdhYnUCHThITCmfCdWDcFIopEmG\r\nNMmgZAd+pWkGpbQH+GwL8BmHpjaoqjqAzFonyLMB0iSDEBJNY9DUBlK0QJlQcBYt081CSY08G6Cq\r\ni9AvvH5kvBGwzNksJNC01kgGGXSSelaskHAQMM7BWAcHgVVZoqobOAikeY7RZII0y1HVDRbLFYTr\r\nB23mAjV2ZebsUUoykqVpy/LzzD/P/oN3k6IFPnwuYBoD0xg46zwLUEto7Y1orRWSVEMnKoyFxtSQ\r\nSkAnKowNrRXyQYbxeARr+i7YsVvpulhDnGEjVQJIoDY16qb24B4sGtugbmrP7oODa7UVzxD0wEdZ\r\nl8iyvBerq9c3SYLjx4+HeVxV1YE4TTTvOsCzY/DxhY1A7V6yhhYUoQzi4/E4hC9YLpeYzWahz3iG\r\nY7qfbxsPdljrWlDHwbOjAWfRuoQ28AlvhFf4tEaStm7B6Bh+Xm7bAA4Z0wQ5yxl/UooAAEJ4gE9I\r\n2VP4PACowmsIEYA/OqxzyJIuoQVnplKfU0w06nPa9KCD2pLvDHLmFcnfwwAWvjO4DmTjsnIdMHBU\r\nuRWDOAa9eB3XMd44oGSsafu6Bf0s/V6EnVTfXxIe7DWo6xKrVYHFYgbrmpBAi+Kq0jrJ3daBfvgH\r\nGo9VWbWgs4AULdNf6bBJYhoLrRIkOkWaZMizAfJ8gOFghPF4AqALRcFjsfINA86MIrlPa7E1ImzM\r\n0MaHVkn4W6xKNI0Jm0BwAgISqgVM80G6NiQDD5XBj3gtX9fHfOxQuI4YHCQZR7FDOQhMbU1zgSvE\r\nXHdJ07TdzDB48qknbh38e/0g+HcYGHYAi3L910aaDxT4x+dQ73z0n6tfjVu/F//s6uIq/vB7f4gX\r\nr72Ix3YfwySb3ORhjy40LuJx9n6WGMDmJY6xytmv/Pf8L7/mze71cTe8bgVoWzcGjzr3sPJ+/eZO\r\n+egUKxysMDCoIRVgGgtTN3AwUCmgjIUwFhqAtA7KOSgHSOcgnYVpvUWE8G7E9B8EIAWgrGvPPXj4\r\na1m/I+cMEi2hbA00NVKZeFLBnXJocUKgTAQmTsNaAykVMpWhrCoYW0MPNCQ6ljaBf/HG5K2W9wv8\r\nWy6XYROzR9pghB+ud3Hdj+xovglPz8EBQqonj0/N5S21wx35tr7cNvj3c5///BeJNcJUhLDzvmxq\r\nNMaibgyquoaTAkp7o2VRriBanXexWODy5ct4++23sb+/j/39fVy5cgVltQhGt1I+O+RwOAyMiOM7\r\nu8Eg4GwO75KUYXt7OxgrFEifgKWyLEP2UQq0z8G0NE2DQU6GOxlIpIDneX5AyeGDjMCg2Mc9NnII\r\nECTQzjkXMvICXTpm7g9PMZE4qBmj3dQuZGDFhraxHahHAAVNRmpDYD0jBEALAnB2QzsChGiNTtGC\r\nIRZCoAcmJImGQAd+xqg+T97B24/OVUoFNhsY84MLj77BT+2CFpx2LXNS9MYs1V8phcFg2NZDtL+x\r\naBqDsqywXK6wtb0BIUQA04qiCODwcDg84G59gHlkHWhNpGfwzJ2ujvTeGAvTWFjj2XtZmsNZHpOL\r\nmHUeFErI3V7weFS6BQJat7FE9Z6XCwFqay6IeQZmpZRf9Vn/xe7T3O2OC2963zQH3TPj+/M5RXXp\r\nGLyJB6FadqnWPgQB4MEwArWUkoGVKoQHrf3R7S7FY5+PeQIIgD7Llpi7XICSy3tRFD3Xcx5bja41\r\nO0d1AAAgAElEQVTD4wnS59zwXwdacRDMA9ae+SkkzS16TgEhbfvsOrhcQpBrdQPgcFYSLbK8z6hO\r\nXZ+rXj35/KVxwNuGP2uSJBAMbIljRxLwxQHzmHHNrx0D3DHlP5bPJJu4fInl8s0MsFspR/3uKCP/\r\nsO87FrGCgELMfuZ9BHRMTZoP1jWomxLOuQBs82QVxDyluUbMPaC/UZQkKYsp2THv6L0xtvc5PzwD\r\nuWPirxuHHGyP+9cYA9OA1dsF+VdVnknbZ07yo12bbBcSJO63WFavGz+38nk8tjgjkAOesQzhzD8+\r\nL/g6TO73Tz31FB599NGbjiXgJuAfe+7DPls3Fz5o4B+xFoUQ/Wvg5te4HfCP7vXG9A38/nd/H6tm\r\nhUd3H0Wikps89NElrK04Wj7cTjkMiCKjjO4fy3R+7s1eH3Wfj0s5rO8Oa4d1ICnpI+t+1+l96+9z\r\nK0zDdTbLnfLRK8I5JMYhlQ7OGSTIoU0CrVI4DRSoIJDCQMBJBSMkrJCwUsFCwIo2Xn9LUACL3+8/\r\nk7Bof3PI4QTZBd7bxKkEFgmEDyLoL3enHFIcYIDECdTCQEuN2lnUqUSqBNDUAPqgGtn6nKxzq+V2\r\nAKFYlljrczA0TXPAwzG2J2IdqyM3HJRPdD7hFiTniPzFbRb6ewf8O7zcNvj3808//UXP4ujitllQ\r\nTCcLpRUS7eOGNcZ4+qrWgHNwxkIJr9yWZRky7BblEmVZoChXqOsKVVXDOSDPM2xsbGA0GoVOV8rH\r\n3ZrP52EXnaPFw+EwPCD9ZrVahXsRsw7AAUMzbTOsUgIS51xgBhIzJ0kSrFarnkstgJ6Bwpl+PLYV\r\nnwDc4KfByg1eDvwRCHkzcMEYExiQ5L7IARwCMJqm6k0+OoeMv/F4HL4j5gWxFAhM6sCdzu2rcz/t\r\nYqp5I80DV8QcEegAR+4SSs/D4+dxhZi+Xy4XzNjvg4zU32TwErPJu5Db8JqYTvy3PE6Q7yOKR9X1\r\nZdPUyPNOqJErMu2ak7FMyjRdjz+rUF0MwJipR9ck4JlidznnkOc5JpMJqqqAal2Fw/gFvPulEFBa\r\nt+74HfMTrXBtjE8S0DQHXaK19uwZv8vU9f+B8as7gIc/A2fwkUDmfUpjySf/6Rtc3PCm11wBJvDL\r\nt2cWrskBujjJBwEYB7O/dmBfzAijMau1DhsOMRuL77LRPKBzKFsVsWa11oG9R/PQyzDVc+PnbofE\r\nHCL2Mg9tkGUZtErbvvLx9IjhZQzNUw2lUqRphkRnkEp5YNk6CBxMlHGzsg7go/5b13ccVFt3aK3h\r\n2v6JwQ0ayxSLle/+8fFC42odEEPzij/bOtbfYb+9FaVh3W9udu66Nj3sOuvmxa3cb93vORjI+5Gy\r\nsxMASHK/KIrAcqe2J9lE16HNId5+VPg6HLvT8mM4zJGmSQDmOcOUYlVy0D5mphqD9jVPGFKhaWrU\r\ndYXhcNA+K60D3KVchvWPj2k+Pvm85mOEXvMNPX7tdeN/3We0+ch/Q20bh72Ixy7JFCEEnnzySTzy\r\nyCOHjj0qR4F/vnMPBxpi5p+V9oMF/kXfrTtv3TVu+V4CLfWlrb4QcELAGYNnLz+HP37lj3BieBz3\r\nbt/bd6W+jRLGAxxko+Hk+iy9t3ttWrfoNYDg5cJlCDeyaDxyYyE2wkiHpPvwa5BuBPQ3Fz9KxlkH\r\nzPfbhMv6WO7Ta14Oaw+SO9TG/L5xkiY6j/qAA7ycPXOnfPSLtBbOppAigRElrLQwTsNCwUkD5fph\r\nVMLYEKI7+AYjv7gAGuEZhUp6txPhI9H58d5ChlYDqpZIkKJ2FZxskDaARAr7Psq3j14RcDJBISvk\r\nElCNhXESLklgnEPqLJzo67lH6aM3K/GmOnB7mzdlWQIA0tRv9Ismh4KB1hUqk6JxNdK8wY2rBtNa\r\nY7EqMB5kaJoaKmnJP0JAOgu3Zo2/WblVefpxL7cL/mlnOqMNYICWtf5IElStEbdcLiGECC64VVMD\r\npWfreBZBEph2ZVliPp/DYgmdSEjl2W7T6TQoJ9YaSLGHxWKBuq57AZxvhnaHOsIbP6vVClevXg3B\r\nxUmppoWUgKqtrS0453D9+nXMZjPcuHEDzrnA8qIsxARUCSFC0hEOfgTDXevAIqRzgD6LKl6geZ0A\r\nT6slo43Yi3ROVVVBmSuKIhgbUso28HuJxnQGBSkEHCBcLBYBkCA3zNg1jwsZ7hYmhGfEkYFIBiUZ\r\nhd4lVoa2IECTAC66NoEiNHZ4/+zv7weghhtIsfFPxiu1OQEyxG7h4A/1U5Ik4X50LWKS0PlXr15F\r\nnucYDofhOYUQmE6nKIoCJ06c6IF+cYwvGrMxeESABz0XxXwkYZrnuXcXHQ67pAlNA2d93A44v9hW\r\nxN5RXbIOZy2sMXC2y75sTA1jOhYM1Y33Ka8vZ8RxQ4EDBKTwE4jGxwzVOU0OKhzcGIjbjM8PAD3w\r\nnu7l3cF9X9JrDiTSPFBKoSw7hh0BzwQkUL8QqED93wGXCEk5OPAupQxuqUVRAOgyVxHIx5OAcDCB\r\n3IgpXIEQIrAIaf4URYGqqjAajZAmo7aeCfJMQasKVV22DNQGaapaEM15l99EIkn8OCVAmdqKspNS\r\nf/G5zscsB5K4UUjPwYEfkilxEgcCTzPV3ZMY3tS+9BuKqUkJmThgwo0cmuMczKH5y9mAXE7wHdJ4\r\nE4TaiI/PuC1u9p7a6GblqEX3KIWFG+Rc8aPCN0w4yE2FgGze1pyJR+z3ra0tTCaTsLbxTYoYUOSF\r\nG/r0vBxwyPO83aBKwpEkWZiLw2GXcIfWOc5SbOoOiKQ+5OvRbDY7ALjx7/kGG1d26Vp8bSbgncs/\r\n+j2Nk7h9OYOKA9x0Trz7DaC3eRKvF+tAKg7eHFluUf8N6y/6xkT8+oNWDpsHXG4BOADMxQZOODca\r\n0gICzllIIVu6vqP/AThcmr6Nf/4n/xz/93d+D//DZ/5HPLjziff0PEIIJDqBg0XTvD/GMclX0oUA\r\nBLlJunm8EU3n8c0t+h2tkfQd6VT0OelrJFtoPpNs4Js7H9YSA3uk+9IzURZLkiU8pAkHQHmmTn5d\r\n0hPIO4jsBjqHrlEUBfI8D/1D8oNIAOTtRLYByToOTt4pH73i4FAPAFs20FCwpoFWCpkEqrqBaCyE\r\nqCCc9+CTQAv2gbtD9a4ZrwCJymErgzro251HEwA0rgSk9ra8qWAkoCBRSQfjCkj7wVxTPihFwcIK\r\ni9oBAhrSAbaoIaSFcyIQsKhwPOGoEm+Axl4z77kICScFtHaoagFrGrxxaQ/PPv99/OIvP47nv/ca\r\nSmGwMZA4dexhaCV8ZmMADgJKrtncW7NpcphO/kHVVz7MRQshAON80E/rAHVwsFVVhf39fdy4cQON\r\nNT32S7FfBiUgBn2SJIFQHuTQWmOxWGA+n4UdrCRJYI3CYDDA5uYmpJQBIKFkHrTAktJOBoRSCpPJ\r\nBNeuXQPQN474+cPhMAAkBHZMJpMAZl2+fDnE/6N4dZzBQwAhGaZZlmEwGITst3FAb25kcKWAG9QE\r\nuGRZFtyXebZeDkRJKbFcLkPyiNFohOFwGICwoiSDxDMpqO2FAJJEYzabsvpqSDkI92qaGkL0GR/c\r\naCbwhz8D4BUSYpwM852WWTlEmmYARAtMVjDGYjAYhOzP3ljX0Nq1ipLBYDDoMSEIvCVgZTKZBCM/\r\n3tEmQC1miZFiRsorfRYzJ40xWCz3A6A5Go0CeLNarbC3txfGOoEWBDyRAle7DljkCHzs7kZuxeTu\r\nPZvNAACDtIuFxoEzAkZIEaexRuAvgUpluQzt0M1bnxSCg5akpHJgUCkFI/sxFchoXbfzxAEizgjg\r\nIE58Lw5EUOmBOK3rrlIJ8lwhSQyEUDDGwRiHqvLMxsVihaKoAkiXJBmybIBB3iXbqKoKprGAEj4B\r\nivRzkwB2AlwJmKOxQ2OBNiAI+EuSBNevXw9jczqdommaMP+ovbj84WA3jdvFYoEbN25gOp2GGBoU\r\nD3NzchJ5nmM8Hvng/wPPbHZWwtkCprHwS6iP++c3HzSyLEeee5YgGQDcLVS0DNimOZiNlIOV1vQZ\r\nfxwUobkejwECS5xzcKi7JDMOqFF3btXOQULA1A2WZoGmqtFUNdx47NswbeMNir4LAXch5sYmHz9U\r\neFy3mAUZX5eXdQrVj8J4OgyUpLpwUIjXj14TwA9084oMTDoovt50Og3ZquM1hmQQX8NoLeXgIN+I\r\n4Zsc9Hv6S7+n+UXGLoWxINBSsbWlaQwA0+vD2Wzek0sUG5gANg6+r2tXDvYRSMjHOK2FvE3jNufz\r\nIe6DWB5y8CAGKfk16B6LxeIASPh+FSFED/zyc5KNrw8YViCEaNnPa9h7iNiyjN14U+bfmvPaICPe\r\nQhaeLS/CeQoCwLevfBu/9Qe/hV/+xC/htz71Wzg2OPbenk1LZCp7T9fgm3hUOIjPx95hAG/8Ob/m\r\nut9w+cI36vhrmlsftXIUSM7bhgpvl/haAHr2wrp7kDyjcD3xOQRADofD0HeH3fNO+SgVhxJz5NkY\r\nngIwgAPQwCFNNAAJA3PENaINE3QZfgUEpLWAQssS9GfABYo0HAaoYf0pcJBIICHgdA0HgwzvTb59\r\n5IsBUjWChYG0sk3E2Da3s22/+vLBA7scjLNw1gBSQ6UbuHjlImbFANcWCUw6hhI1qnoJpQDbAFJY\r\nJDpHY01Pb7pTPhhFc8CCG0y04BjGmlJKwaJTmuu6xnK5wnA4DIABgWOk7DvRZbk0xmA+9+66tJso\r\nhXcFJuWjqqoeW40+jxkkgFecr1+/HgAZcgsksHK1WuGhhx7CbDYLhjux9sgIeuedd9rnWGJvb6+3\r\na09gI7UNMYfIeErTFLu7u8EoiV0DyMjhwCQZLAQyXblyJTzfcrkMizsx1MjQ4RkT6bM8z6GTfttw\r\noFIphfl8HkCj4DaKzoAuy+oARZhAC6VUcH0k111iMAUWmx30npdiMhKwwpO3AJ1hRe3QNFkwNnmi\r\nhWAcMkZQ7L7FXZhpnBCzjuL2cYYRAYbEMBNCYHt7G0VRhHoaY0LMRiEELl++HBI6jEajAAbSGJgX\r\nqx5YEbcvGZvEAiMmEzFWT+8e6z0TMdMABKCbM06onzqWWufK3WNluQa5yZE2w7bv6B6Aj6/nXb4b\r\n2yVUWGd08Zhq1Ma8D53tszW5sUzjiPoPQJgTNFb5/TjQDHSKMH827o5E45L6lYNSHYChesCrECIA\r\n9wBCaABirXGwi9wi6b50HRrPMejJwSeq+7Fjx8LmR5IkWCx8DNT5fO4Zz2XSMmi9q7aPAziEgEKa\r\nVKjqeaiXsRbGULYtz7Ki+3IGHM1b/7pjK/C+6/qor2TERhzvW74+dK7ftjcuqO+oHwgI4iArn2fH\r\nju8cuBc/KIEKZ6dwOcsTWvDno76JlY7YeD4KFLwVpeVmitrtKHFHGZ38ewLs+BpDgBzgE66Q6zWt\r\nBYPBIGx0TCaTsM7EoBrgs/Vy1m3QC0w/KQ6wnr25WCx68peuQ+tcserc7zlguA5sJBY8jQMhBIaj\r\nPnOZ2of+kjyOAWE+rumeJD/iccwL3wjj8o7PC7qmMSbE/Y3BP3q9Wq0OtON7KTcDfqgc9f2Pqjjn\r\nWmbe4QBWWDPQn8Pv+nnodOcNXX8N9qXzmdX/8Ht/iD959Wv4+0/+Jn7tk7+GRN5+PMD30uY0F/h7\r\noJ/hN77Hurbj58XXPKx+sRyNmWZxHT6sha+ffM3jz87tEZJz8XOTjs51NjqHfhd/TjIwBgdjYJXq\r\nxD/ndb1TPprFOSAzPiGRMICTGkJ4rM4XHwbj8Au0f8Uh79F5BXtQEQAsu4eDaIDUSqAVgcoBqACR\r\nJMi0fs9hEj7Sxe84+RAQUHCyTaYKQMIBQh7aej/Kec11SyEqaL2Jqp5jtRjg1R+8heHWGC+9eAlS\r\nOzS1hW7rKl3rgYga1vldtpsNzzvlb76oX/r5X/gi4HUgqQ4Gj9d5FoCfJEkwHAwxHo2gW+N5lI1a\r\nQ8IDJFtbW9jY2AhMuuGoS7pBgNV4PMZwOGgNkXGPSUcsAVrQyA0QQGA9kYGe53kAHLMsCxk3adfM\r\nOe+aSiAKGaOhbu3uWexiHBuH3GjgRqUxBsPhMMQv4woVByAI2ODGFV2T3DQA9AwgvpgTyMGZa0Ab\r\n38XGbkU+5puvp0SW+Wy7HbOQ4sH5uH5ceeGuVVR/YrtxI4yezxgDZ3Uwluh7Hm+Px3Hk33PlPmbs\r\nULvHrrxcGYuNQ/oNBw+JQRr3IQebKHsqgB6IKoQI7tccHBKicynWWkMlfVYbN5SV8qxWzjah+pIC\r\n2VRFADk4kEVgCXfRo2ekvu/cJ0Vv7Ph2sEzRNCHOFmeFSSlQVOWBOIC8jcn1hcfa431pmn5w1j7w\r\n1hnR8finMeWzdh7MREsxHLMsBU8AQoe1Bk1TI0kzQAA60dCJhlI+xlJVlSjKojdOqI95rD4CPzhL\r\niRufBJYQWE+ZSrnxz9sjdqfkY542KPj8qkpyka3Z3O9iHArBQAZLcS+BpjEoihI6Eb15j4ghs27s\r\n8Llc12btHONjOGY29QxN5zxbR0pI5TMES6WgtD8gPJtHqi5jsHUWjWlQlF3CCi7z+EGyghcuM3io\r\nCA6qxHOdFw7CrLt2LGtuVmJQ6UD7rLlmfPBz49eHPTcdBEzzZ+f3pOfkMpGYgPP5PLii05zgv4nH\r\nBb8uHxPxa5JZZBzTazpofSCgm68x/DlpnQS6tZFYvhTXsDFdLE3eDvSawL+4/TiT8LCYfgQ2xiB/\r\n3A7r5g+teaT38HvwsULX+omf+Ak88cQTNx1rAPDVV9fH/Ov10S37BgNOuQ9MzL/Dzl87rl3//a3d\r\ni5Fa2hhWQnSfded5Y0UIX7va1vjrS3+Fr776VZwen8bdm3ffpFF+OIXPS94u/C8VWo8OA0/5tbju\r\nQmOdriGECLp2DHJTnW5Fbn2YSjxuqB24fgSsBzzXrSVxH1C/HLYm88LP4/oG9UG8Zt4pH90iIAAn\r\nUCmgUQZSWjg6RA0lRCvH3PqDyzngwHvAYwDeTVN29xQC3i2wZQBqAysaOOEghYPQCpCAbazX8e6U\r\ntcUBsAKAI+8ctLkVGsA6KNl5EMVygMrN5vg6/e/d/P6waxZF4XGANIVOAFumyLMMr756EavVEvdd\r\nOImrl99GlviRNM4UTh/fhrMNIH1McanIBrnD/vthlHVrx60UbeEAKaCE8gEZpfRdJD0SXbTupqnW\r\n2NrY8KCF9VlgVm6JyWTcsd7gGTGj0QjGGOzv78OYjbB7Tsq/dU0IUj4abgYFg8A/AvXSNMVqtQqG\r\napZ5lthyuQyg3e7ubrgWXUMphZ2dHTRNg8VigdFohLNnzwbARQgRwJbJZBJiVhFASAw/iqFFhgQZ\r\n09wo4YlCuGJPxso64IkmqbU2sCQ5q5HijDVNEzIcK6VQFEXP9ZDYgQBC3WIjiOKDEIAVG6gckOJK\r\nJRlp1GachcefYT5dwJgGPsmGz0iqtUKS6BZMK1rApQbgkKYJkkQHV9UY8ONt45x3gYwzsnKFh+pE\r\nbU2sIm5AEluT2pGuYYxBY9CLg7VcLgM7L01TjEajMFmqqgpxL6lt8/HogLLI78tj5vBdXWrT+aKE\r\nkBKD4dDnTRYeIGlaAHBzc7OtpwnjmzM4syyHz5Zcoq59ApCgKFqBpZ579z6ZQ1ifJVRKCQgLIQ+y\r\nZjhQS88Tu37zuVBLYsb02UcdeOAXBUrgkrQAnXdJVbCWwE76rfNBh7WAthJpmqOqfJwRIV1IyFJW\r\nfh4PBqO271TLhHOo6xJ1XYZ+pH6nPqT5TuOC5gABSQHYZqAsAa00jwgwoXHCQQYOJNIcpfnK2air\r\n1QpXr0xRFAtU1QpVVaKqVxiPx4FlStem+U9yghhv+WAEn5yHNhQUfNYwAJBwrouJGINE62J/xn9p\r\nzsVuk3StRnYxAnmcP/psPp93imbLsKmaGnUbooDaj9hoxKzlcxTox57jz8BjLHHDKpZxhyk+N/tu\r\nnVF1MzDwKKDwsHKUUsfPif+uVqveHI6N16IoekAa9SnJ89VqFdiBlCCKxjrJG17P+BmlBCj7OBU+\r\nzvK8i7FpjEKSqN4aZRrVzsUERVFAa9VjOwf3ctdPlBE2FoSfX1VV9diLfJMlbmfe3jG4TWOdjy+6\r\nNz0bB/w4kE/9xetKLHJ6lrj+/LfvtdxsLH8YCwHWtPERA5y0/vts6eqIq/WLX9sclBdKwQHOtYHw\r\nO5Aw/ALXVzfwg70f4Cfv+kko8e7uR+V2ZQSNH842Wzee+Xsu/+INZeAgoMTHMrUn6SyHgYhcPt/u\r\ns32QStx2fG0B1rMD+d/YeI/1ZX7tdb+na9PGLX2+Dmzk6/JHoe3vlJsUB7gaWMoZXrzxXUgroWqB\r\nGhYysUBVQ6js0HnqSz/xHn1PJYFP8imchIb2dog1ENJBKQFjJVxSo3EGwihI6+CUw3ZyAvdv3n9n\r\nDN6kOLg2lruAcMBiNYezNZS1cDrBSqjg9kubo+G3EbB3WLmZHvteimht0rpySLWDKQTOnNzG+fvu\r\ngkqB++85hnLWQKQjKBQQwsEKQEjVrqcGtjHveo2+U364RTetAgAhIFp2BuCVKykFMpEG4IIMv/3Z\r\nFMVyif0bN5Ac08jyTeSDFNPpHuq6xJkzpzAcDmFMjem0wXK5wGAwwNmzd2NjYwPz+RR1Xbexs1Jc\r\nuXIFe3t7kFKG4OSk9J84cQJJkmC5XOL69euQUuLs2bOw1uLGjRs4ffp0MDzJNVZKGVg2b7zxRjDe\r\nAYRYX6T4nDhxohf0OM72OpvNglvxYDAIbsV7e3uYTqeBOcSD3RNoVpYlJpNJaGwOTnGGH12f4toR\r\nu8E5F8AnzvYgN1ICxihOozEGjWiBzKYNBN/4cwa5N0KqskFVNgGIoBiHBEZ4wNYzGieTCfb29sK5\r\n1tqe2+N4PIYUnkk1m+9jNt8PgNlkMsFkY4RVsYBU3oiqmxKzeZd9eWNzjOn+PDwf0AFoJPD29/eR\r\n53kAZzgzEUDImExx3JbLZXA5p4DYHFgmZYoMMGp/nriDgB2fdMFgNBqF8UPuuhsbG9jY2EBl+xkd\r\nCVjirrGDwQBSepdoYqyQodkYh9lygVXlDe/NzU3Pgs0zfx0BlE0dYmXlAoCSMMY/wygdYjjwBvvG\r\nxqZnvLWu2fP5HNeuN9ja2sLOzg7G43EAAaQEtJbIZNYzSjn7hSuXXEmlPqrrGkrTs7d9BgchyXDy\r\n9/GENBtki1SAcgJCKiTat8ly2bSxIb2iMRzmyPMUde0zMmstMRj4BBzL5RJFUaCuayyW+z0mZpJK\r\nTNQAg6GPFTfd9+y/qqp6ICaBgDT3w8ZEO7dIDhhjsFwuPdCb5yEpD4El77zzDrIsw3g8xmQyCWOF\r\nmIIkSzqw1rOUh8OhD+6djbC3t4fZ/AaWqymmsxybm5s4c+YMNjaGWK1ckF9pmmKxnKMoOkZCWRik\r\nqUKiOxlX1zWk8CChTjp3XwLcabOE3IJ5iRWFdcYPV0YqFvtNtWMfLbgkrMVwPO4xZ+l3VCdqR8rC\r\nTiAg39zgQH4MYnK3Vw5AkhxdB2TyDYfYrZPqdqufcXkSn0P3vFk5jHFL1yfwjbc7B4yGw2Hv/Pj3\r\npETGdaTNMmK/U+iL2WwWmK7EeqUwB5yZTP2ZZvrA5oExFH/QgyvWOsg2xJyCgFQK5ExUlUCSKgyG\r\nGZpm2EuOQ3VSrM+4jOUgM33G4wLyecf7i7c37x8+RqgMBoO16zbvawJLCAyk16QDxGOC14vL3Fsq\r\nN7EBblXJ/zAAhNTmUrahHaJ4SOQeTOPgKMPCWovaWCipkGgFY4GqNsgSCSkEiqrCIE3hBFBVPvFW\r\nmmjkaQIBiV+48Av47z71W9gZ7tz0Pj+sQmP/pZdewnw+x+nTp3H69Onedxy4o7WNwGtjDN544w1c\r\nuHAh6MhSSsxmM7z44osYDoc4d+6cX1MXC5w6dQpAl4SLy1nSC/g4pvt9mAvJBw5+1nWNixcv4p57\r\n7gGA3nfxpm/TNLh06RJ2d3cDUYF0UB725p133sHbb7+NCxcuIEkSvPTSS9jd3cWxY8fw6quvYjKZ\r\nYHd3F2+99RZef/11nD59GufPnw913Nvbw5tvvom77roL4/EY3/3ud3H33d62ulM+okU4zNOr+J2X\r\n/i3+zz//31EWJcZyG7VysFkFuBrOdkD9On2Fg/V8cx8AhBSokwqyUVCNgDQaWigILWGkQWMbpHWK\r\nWs0gkhRpPYCzBZrM4bHjP4b/6e/8zziPe//m2uNDVgQEFAwgFUpj0dQN7NVrKPb2MT5zGstxjhy+\r\n/9atZbeyZr/f63p/Q1lCqCEAB+gSG0kOJx3qosZQKWxsa9QGUEgBU0MIDeMELAANh1TKIyNS3il/\r\ns0VbOJ+KmSugsnOTkBBo6gZN5VM3O+dQFSXqsoJtDFarBYpiie3t7QCCTad7SFONwSDDbKZw+fI7\r\nUErhxIkTyPMc167dgLUWk8lmcEOirH6UXZaM8WPHjsFaG0CTxWIRwJfJZILr169jPB4H98r9/X0s\r\nFovgGjscDkMcwTzPQ7IPn3xkjtlsho2NjWBEEVuQDMfNzc1gaBOAQ+6gZLySIURsIgJwKM4hN464\r\nMct3T7l7BTF7jDGB6TcajQLgRgrFcrmEcwPmqpTA7+6IFhzysSJ8ljli7hCbz8KYMoAkVLfBYBCU\r\n6TiYPrG9uKudUgY+cjYxJgyapkJZruCcwWjUZzZ6d9QKVSVgbRc3hQMUQBcz7P9n702fLTmu+8Bf\r\nLrXc5e0P3ehudAtoLATQIACCgGBRHAgSKdFcJIYshRXh0ITksC1NOBwjOTQR/jBhh/zZoYjxHzGf\r\n5os0MkdDyqIwJiVQkrnJMAgDaGFvoLfX/e67S92qysz5kHWyTuWr190AmmKj+Q7i4t2+91ZVLieX\r\n88vfOYeAP9qUkjuxUgp5nocFjAyFIcueS4YXLYScpUV1cegyOcm4ow3udDoNhiWv93zuE23oPAvA\r\nEJ3UcqCMsjQTKESbQOc8u3K68P1cmRrT+QxOoE2qk3nmoNQKqnGvrkwNVC3jkZg9LYiZBuFtmGUA\r\nACAASURBVIMY8C6WPPZUG2vRg7bpcKVzCsjZYBxw4ZsGzgKMAZlYz7lLcXzSzRlavF24HvTF36F/\r\ne92xsLZCVRkYwxk8/jUYDDqGO49nRvMKPYP6j1jGnFVKoDf1ITH4aG4gkJCAFM4U5KATgPDdysqK\r\nf44GdNLW7eruFRhbY9HMqw6Ni+Qgg1QisACrqkKxqFBXDqYG6so1OqqRZxp5BlRmsi/WHoHhWmtU\r\nZX+Mu/hv/J4bPrw/Y0YElTV2K431gownAmkBb3gNBm1M0fiZQJsNkYNefaAOf3GJQc24rnye7msT\r\n7n4Vl+FGhZctBjd5+8bXxOWO3/P2icEu+p4OFWi+p7iWNMeurq52mNMxGEkxXmPgtQuQtW5H3q2f\r\ngXm2zbLr1y4FIIWUgDEJtG5Z9H7NNfCJb/xaFs/xBFYQqM/BVapnn3s+9WWsK3x94XEB4/6J5z/6\r\ny+e1vj6KwfWbKbER+FEA/bjw9SVuWw6aWnNt5qRzDmVV4+rUe5GMR2PMFwtY55CoEuPREFf2ZsDI\r\nQacprkz2kDZhJM4ceQS/85P/Kx7cfvCm1OmD9oFz/iD0q1/9Kj7xiU8gSRK8/fbbmEwmOHLkCNbW\r\n1nDu3LkQ1mZnZwfb29vY2dlBXdedJHdvv/02NjY2MB6P8cILL+D73/8+Hn74Ybzwwgt45plnQiI8\r\n5xxWVlZw8eJFbG9vQymFt956C1tbW/j2t7+NtbU1fOpTnwLQxuf9qEq8dyGdm81meO655/Dss8+i\r\nKAqkaYpjx45hOp1iZWUFu7u7AIBLly7hvvvuC2D0xYsXUdc1Tp48iUuXLmGxWOD06dNYLBZ4/vnn\r\nkSRJAO1ee+01CCHwuc99Dm+++SYuX76ML3zhC/iTP/kTnDx5EidOnAhjeT6f47nnnkNZlnjxxRfx\r\npS99Cd/97ndx6dIlPPvssz/CFjyUH6Y4B6h6hLfeuoCFqDFaG+HU+k/ACuClt17AaCRROYNw7C58\r\neBiv0qJZe5W/EYAkIXdyFualSrGSrmCcj7GWrWJzfRPZIMfFvSt49/w5mDWHq4sFaucP8ZI8xVzP\r\n8N75HajpAGLlozv+f+jiHGAdnHAwwiFPM+ztTHDhBy9D5zkGx+6FWtjOniKWG5lfP8j+8yDheyAp\r\nJWonYSyg9S5cvQJbJ8hSibrQcMkEymaAs6htBZHkMA4+6aKrPPkDh8y/W0l0HFdHCAEYFtzXGlg4\r\nWGfhWGa/4XCIjY0N7OzsBKYTnTzN5wXm8wJapxiNBhiNBphMJnjrrbcC44CDWATWAF7hKDEHz7xK\r\nTMHlcomdnR2UZYmtrS1MJpOG9bQKKSVms1lg79AGfz6fYzabYWNjA5ubmwEgunLlCubzeWAK8iQj\r\nxAzibndAu0mgGIPvvfde2FTNZrPAviEjg0BE7l5ERgiA4PrKgSPeDhcuXAjtSiClUipkMOXGMpWV\r\njB7+opNZMkaozZNahBNKAqnI0CEmBZ9ICKwjo6oqDepaALCoawtra1TVEvO5RVUl2NragtbSM8Ak\r\nxR6ssVh4YHE4WO81zukZo9GoE3evLMvADqL+IoYeMShpk0TXUF0o4ytldU6SBBAt+4sbGrQBnEwm\r\nIekLMSABBNAXiwLD4RCAbABoD76QniwWS39qIiSSxLtk+uQOnqlY1QvUwrNWF7M5ymKJuqywsbGB\r\ndGUFWirIRHgQvgGc67KCSACpRZMBt0kM07jUCgF4d0+L2tgGkJ94plljxHtDFxAsYQI3fgnEijfE\r\n1Df0GQc/+hacrgtwN94Q6SGxO0i3+HxAjAMej4hYoMYYzGZTZpyb8J13P9eAQwME244ukO4s5kWI\r\nXZimHgBUUkPnSSgf6V1VzlFXJmR+TpvTfdLP2WwW2pjA/yxrmZU0zslA4/NBnudhnprP57h8+XLI\r\nCJ1lGVZWVjAej0P81L29PT8HLP3cWxQFqrrcB9TIirJ7+0MAfvgghMDMLvf1z0HAH39xofmN7ssB\r\n/aIowpwYJ4lwzgF1667PgV+a1wgAoPmJximVkwMxVH6ar2le5huiuPwt5kLxFOP6iWY8ufCbln51\r\ncJw9rucHbcT6gCZ+bR/YySUGxePPCXztEw4Ckv5yIJDamoBAnuW+jTXapEuFZ/dZ6xrbQnhDAxyo\r\nUVDKdvpCCIGqmVupjylUAs11PCwGMfv5fMMTB5E+0JgUQoQ60bxAusjnrj7gmDMNqR2JmU8vf40/\r\nbKPDL76Xcs42B3L948c5hyzDNfvpZshHHZRxzjvlcpAdwL6+O0iEEMjSBBurGldncwjr86dvjAe4\r\nMi+gBZCnCSz8migFcGTlGP73Z38P//D+n79JgeybiO8fQugQdHd3F1VV4Y//+I9x7NgxfPvb38b9\r\n99+Pb37zm2FtH41GOHPmDL7//e939tsvv/wyXnzxRYzHY/z6r/868jzH6dOn8YlPfAJf+9rX8I1v\r\nfAPWWuzs7OCJJ57ASy+9hKtXr4Z43rRuXb16NRyYH7T23w5C4/Iv//Ivm7AEGg8++CBeffVVnDx5\r\nEufPnw9zzBtvvIHFYoFz587h7NmzePTRRzGZTPDVr34Vw+EQzzzzDB577DF88YtfxEsvvYSzZ89i\r\nZ2cHn/zkJ/H666/jwoULuOeeewKg6JzD+fPncfLkScznc1y5ciV443zxi1/E1772NRRFgXvuuaeX\r\nwX4ot5nIElmWoLYWtQV+YnQajx1/DC9tPoT/8vpzeHj7bjy8/SC+8cY3cXxwEse370AxKJBcHuPc\r\n9HW8NjmHT931aczNLr7x1p8CS8DdUeGnNn4ef3Ppr/DM9tMwQ4OfPvUp/N8vfAWb8w2sbh3Bpcl5\r\nPHTng/jsPZ/Bn73x/+Glyy/igRP347sX/gYaA+927G5O6IrbVRwAIwHlaiR1AmcGWPvko3AX38Dy\r\n//xDpP/LrwEnTsFWFtbpsMU0zkFKB58e5IMnm7qhMvaso6PRqFl/gQQ1LCxg1uCchVYWVWWhM6Cs\r\nU/jY8wJCexvcO3xVgBAwaA/0iRUNtJgTtyPj8tC+iwvfB/RdeyjXF33QiTPfxNImiww7YjptbGyg\r\nqiqcP38ek8kEo9EoxOnb2dkJhtiZM2fwxhtv4Ac/+AHefvttPP3009je3sZkMgkb/vF4DADhZJ0Y\r\nflVVYTqdIk1T3HHHHRiPx3jjjTews7ODoigwGo2CqxCxwTjzyRgTYuUJ4bO78ky6gM9oSK6uSZKE\r\nU9L5fI7d3d0AKnGGGbkOJ0kSnkegBbktkassGTacOUZC4B+1LWcnGGOwt7eH2WwWlH11dbUDHlDC\r\nEGIfUVnI9Ylc/Ki8VO8+5gyvJ7U9GeQ8CyqPm5fnw+Y7BSHKpgzedcaDgYAQCkmSgYAvYjZaawA3\r\nD23DgUYh2viK5BZIIDPpFemkEKLjtktgJmVq5a7U3CXXORfanAMXZNw657C9vd1JBEEvApFkaqCU\r\nwGKh4BkprYu8Z+IRoGgaHakAWCglkCRtwHnqC2KYceOdkuQQwEQu4Zx14vvIh+v1/eLd9CZ7O0En\r\nSd+zLIVPmCGg2aTZx3w5aELm13CJFxDSOSonf4a/oAWPeOIVMuRj5h/vJ19vw1z+TRifBBxpnYPi\r\n4EnZuEFZwBoHZw2Wy90AClg3QIasmR8admiSwsGiqktY4//KUsC6lkXIQQeaK4k9e/To0X3tw5lC\r\nSZIEw4xi3lHsSWMMLl68GOZUYwzW19eDa72UEmVShfoTuEllSdMUSntdS1MNKYE01Q17qpl/lraj\r\nQzQ2qI9jxtJ+8Kyb3KTve2JicWZYGKuoOgcUnP1HY5ncTgnQ5K6Vg8EgzL2cTUj6RYcBfSCP128q\r\nqwexpOwCby3IQ4GaeVbQ6wN019qQXA8YvN59+DOv9f21ysD7jLcTzUE0Bnkf0Nzix2sbC1IpBSUV\r\nlGyBGb5uxqxA59CJKUh1oXUTQAjBQAcvdFhI5R2NRp31l49BOgSitYTrH69X3B78fQxs8DmonZcc\r\nhHCBReHHv+3MfV3g2IXPaC3+sOBfnx5cr+9vZek7eOgcHLGhdlAdCTQEAGMt9mYLDNIMSaKBRYm6\r\ntlDGe77A+X4bJDl+72d+E//sk7+JXOcfuh61saggkKoPx3sgvdvY2MAzzzyDqqqwurqKp59+Gl/9\r\n6lfxyiuvQCmFj33sY9jZ2Qkxrk+ePInt7W28+uqrKMsSly5dwtraGu5u3EhpfrbWYjKZ4MSJE7h8\r\n+TLW19dx+vRp/Pmf/zkefvhhaK3xzjvv4HOf+xystdjc3AyH87eb0DzIXfOVUnjsscdw+fJlGGMw\r\nHo/x13/91/jsZz+L733ve/j0pz+Nb3zjG0jTFO+++y5OnTqFhx9+GN/61rdQ1zUeeOCBQDo4e/Ys\r\nvv/97+OXf/mX8Wd/9mfBfiFPIZrvnnrqKYxGI3zlK1/Bl7/8Zbz88ss4c+YMtNYoiiIcZlNStkO5\r\nvcUZwNkFhtohd4CpClycXISYOXz+7p/DZn4nXjj/Aj5/8hdRpDOcu3QBZ/KP463kLD5+7Ckcv+sK\r\nHl97DMtqiiqZQboUL+68iAc2z+Ds22dx730fwwsXv4er7+7h+Pg4tvKjqObAx+/6BF7/uzdx+fJF\r\nrAyG+Lk7P4O1rSG+98ZfwcoF6mwKperrV+DHWQRQOIeRS2BhscQCQyhsPv0UFshQ/6f/ArU5gr7/\r\nFMQj92Mu1qGgkTWJXgB5Q2dHP4z5mB+Ckr3DSUycgMQxgpiwYYzZN1+RLUceWJy4xPfgdO++A9sf\r\nVr1vd1G/+OVf+n0hBayznt3XZPWhzI3Wee6wz+joszYqraATjSz3mTansykgBNY3NpCkKarax5xb\r\nlkvUxmB9YwNSKVy4eBHT2QzD0RA60ZjOpigbd1Bi71EMIspCSECilBLHjh3D+vp6yFRY1z6eGRkp\r\nBFYRgEPGQhvfSnVYC2R413Ud7pfneXCxBYDZbLaPYUELNAGG3CglYJSj1fHGnAMZPJsqB9VisIPY\r\nD8RCIxdmAuWoTDQwOeAIoANgkUgp4UDXiMBU4s/jDJGuK1cTk0pnHTYOgI6xxzdSBEjSb+q6hhS6\r\ns7mPmSe8DbjrJAcJyDDlrmsUay+O88f70k8wLajN3cR4hlYO8PB6OeeQZFm4P3fXpmeQ+yjVmZ5P\r\noDdgO8/gCWaMMYHNyeNYURtYa6GaYPvGGDj4TLG+Pr7/fbBexfqwG3dN6rQD7HPWFJe+f1P/xJ/z\r\n/jqIFRjGBLrAK4G4tADwoNf8JKjNKK1Z++5ngVgrISChdYIkSZHoNqmH18EWfOL63YLbedBJan9y\r\nA55MJhiPx6E/yZWWz0ekq/Qb7m7IGbkEbtAYpP7e3d3FfD4PIAi/j9Yaa2vrAUCo6ioAgG2CHw8I\r\nJ4lGlqUMtGn6C2rfeOP92Dd3xXNUzGjmrpUc8KXPO2A7Y1mRXnAwkuoTj126hg5yDnpx/eMvEjoU\r\n6dPrG9Hfg0CbuP0Okj6Aqe/7uA/ez99rSXzgEvcnse0485pey+USs1mBoihhLaBUAq3TzktKDX8w\r\npAIIT2w5awHnuoky4vYDEOZhik/LdUgI0QGEY8ZerK/0rNaNuAWdOfgdg6Hx+kPf8/7nv4kBK5IY\r\nRKfvH330UZw5c+a6/fX1v+vP9svbrfPv61gMVtlbKtsvbxNTd5P9kPA5yRgDMBC571nOOZR1jb1F\r\nAdA+VivMFwsMB0MkiUJdG/z8fT+L/+Mf/gE+c/pnoeWHj1+3rAz+89+8iJ84eQSp+HD8Qed8/MiX\r\nXnoJr732Wpj37r77bkwmE5w5cwZlWWI4HGJzcxObm5u4++678d3vfhcvv/wyVldXcfToUZw5cwa7\r\nu7s4ceIEjh8/jkuXLuE73/kOLl68iNOnT+PUqVOYzWZYW1vD/fffjyRJcPXqVdx3333Y2NjA888/\r\nj8FggOFwiJ2dHdx7772hjLeLAUZzBuDXB2LcEXEgyzLcddddmM1mePLJJ3Hu3Dm89NJLeOqppyCl\r\nxMc+9jG88sorOHfuHB544IFwEPfQQw+hqir80R/9EYQQmE6nOHr0KP72b/8Wa2trePLJJzGdTrFc\r\nLnHy5En84Ac/wIsvvoiHHnoIjz/+OO69914Mh/6w/S/+4i/wwAMP4OTJk5hOfVI3igF5KLen1Mbi\r\nubefwws738dID3DH+lHMxBxX9nZwbPUIhNa4sLiMzfEmJvVV/N25NzEajHB+7xzG4xWkpoR0Kb73\r\n9g/w6vwt2MphXuziyZNPoDATPHDnPXht52Xcs343ZvUeRnkKISxgDC7vXcDWkW389et/jV9+/Nfw\r\nlz94Dq9NXoVIgVGa45dP/2Os5us/6ia6dcUBqVVY2hqZs6hQAWmK6vIVpKmAuSPH9OvfwaXJVdxx\r\n6hTS1VVoKwDnvSsqKaB+BNMrZ9yRzUx7osuXL8M5H/oFQNj/k8cY2SqXL18OcxTQTd5Hh7K0D6XQ\r\nKmQPx2GaOPjX55H54yh8X/p+RPMNP9BtRI70UqcTwEHXHTt2LLCRiI1GbLi9vT1sbW2hKAqsrq7i\r\np37qp7Czs4Plconz589jPB5jPp0FBSKgg2fKpL8ECGZZhs3NzQBOjcfjkOhBa43hcBgALGttYNVQ\r\n1lQySCmhBSkaATrcmBBCBICJG/ec8UPPGg6HAbikehDg2Gc00AaW4tZxYJEzJMbjcSfJARmrVIbh\r\ncBiYXQR+EhjGXSbJwOEGqR9AMhhAi8Wiw1bwAd5lJ1YYBzeoPfuMbgLBZrNZcNGMGZdpmmI+82Am\r\nAaG8bjQxxCAoGZ5Ubp7IgurFAVD6jPqYrlVKYW191HGJpv6nCWY0GgUWGQE6dKIhhEA6HATDkQYi\r\nua7leY7Nzc2ODvDfAkBVzxt2k3fZTRIdXLqvXClgrUFZjgC4xq3YA3ue8WagVHNabErUxk+saZpA\r\naw86jtW4wwwj4IqSjhyRaccdLkmSjvF8vcm1ZbYg/I76k+4XM6+of+h3MUDSBwRyI54b6TT+/HUq\r\n1BFoAFFjoHXrdt+6jAo4V0EpE0BXPlbINThN09AOVFc6qaf4PgRscQYnjcUrV66EEAZ08sXZnsTs\r\nFKLNzEpuw9PpFLPZLLjBUoiF+XyO1dVV71qcZAHohnBhjiB3V4cWHKfxp5RCkiqI2sGaFpjm8wSf\r\nD+N5Kz5AiIXrCbk9t0xNGxb7siwhkzQAS/QcDsLSeOPsXe56yscsfwZnP/L7xgyxPhCTr4fEMOS6\r\nzf8eBJLT3+stygcBdTEQwoU+/6DfcwnZVHuAVV4u7k67XC5bENsqDIdDrK9XMLWDGXeTlNDG0D/D\r\nh72Gc80LYXx1GYFddiZfPwm85vE0qW9pb7JcLsM96P6ckcvXFHJriZ/H3dg5sE0SH0zROkPlicHf\r\nWN9i8O+GN67vc38bA6q3uvAy0ntrbQAJae2I2+9aui6lxCDLcNd2DtEweyUEXLN2fGz7Y/jdL/0u\r\nHr/z8ZtSBwcPaqda4LP/4BEoOMBUgEqve+21ZH19Hb/xG7+B5XLZyYj+7LPPIkkSnD59OqxFdHBy\r\n5513YjqdBvDIWov7778/7PMeffRRPPLII6jrOux7Tp8+7evhHD71qU919jsUb5D2a7ej8D3weDzG\r\nZz7zmc6BGX1/8uRJaK3xS7/0S6H9AN9u1NZKKZw6dQrGmPD9b//2b4e5KMuywOZTSuHuu+/G3Xff\r\nDeccPvOZz4S1k/aoSZLgySefxCc/+ckwjzz++M3R20O5dUVAQDgBLUeYzxR0UuCdnbdgJDCvl3jv\r\nrXehofHgifvwhy/9X9hYuQNzcxXPX7mM5cTisrqA986dwyfu+SR2xC5e3/kfWCwMsrHA1//bV3Hk\r\nxAr+8+t/gZeuvAqlV3DJXIK7YJHkOZyqce7qOzDvaFzBVbxy+VX8YPdVVBIQRsFc0ZD48Czp21kE\r\nBJx1yKTDDCWWKsWwBoq/+e+48BffQfXpx2B+938GlMSVzaMYixRKAdYYn0QRP9pkSjTX8MPNCxcu\r\nQGuNhx9+GLu7uyiKApubmzh79izW19dx11134Z133sH58+eR5zmMMTh27BjOnTuH7e3tACAKIbC1\r\ntYXvfOc74bCkqqpA9JpMJtjc3MRLL72EEydOYG1tLdiBh/LBRSdKo3Y1rDNwpmFXSAkpBZRUIaC2\r\nAOBMazjRpjfVCY5stxlzJ5OJN2iHI0gIrIw8+JbnOdZX17AyGuPq1asQQmBlZQV7QoaFjQxoYnGR\r\nklHGXP5vKWWI60dJKqhcBIBRBlg6LSMX15Y15I3w9XV/YmGtDYYl/Y6DW/GmnRv9nNFDyUfIaCfD\r\nIQYBaXNA7zmrjDNbaFM7n8+xXC4xmUzC5o8ARx5ni0AyMrKTJAku2pRdMwxkpUAub8ZYLJclM6jT\r\nYKTH7BjezhyF5wYTuVwTqMcBFepja6YHuIS5fe1Nm1r6S88l13BqE3L95icKVB5qX9KH6dQFVgk3\r\nlKhPyZ18dXUVWusQO4/0Y7FYhN9SPxF4slwuA7ATl4tAjfX1jZDMxjlACM9SazPa1tjbm6KqfNIX\r\nysKZJN41tV7WELKb9ZTaW0oJnXhGTp6r8B2PMzmZTALIHgNzpFckfWAQl5jZQWAx1ZkDSvxF9+JU\r\nbyofZ9BS33PDe7ksAqiVplmIDRbi+9UljK1hrO7oQp6nyLIEi6Ib2oAz9gi8jsFI0j86vSfwlLPQ\r\nqNyTySS0F92bzz10wEL3JPCY9OnIkSOoa595msY+ARyj0QgCLUhFYQvotwQUpqkJeIvvTwfXnCoO\r\nBnloe56chPqKu5hzPSC5XqwhDp4ReMLjm2ZKh/rxdqP5hpcjjt2ZJElwKeZgIJ+rODhE9eDAcyz8\r\nuX0S6zwJ1+WYdXQt4eMgfkZ8T/55H/DR933fGD2oPnz95Bs9LpyRCQBK5jDGoqpqzGbzEBeQDsCK\r\nYrlvjdQ6AWWZVrpN7hMDvwA6BjWVn8YagBAfi9bPsiyRJEnQFzo8iEFt6ufpdNppQ1pnOOjXsrRb\r\nMJd0lOZHvu7RusTXZc4ujuebvn45lCimpe0eKnGAhkJHXE+EILa5/9/6YA3/7Il/jl99+Fchxc1x\r\nm/R66iDqJaAzaNcku/mQ9+VjmZIgAeiASqRr9HtrLR544AE89NBDOHHiBIB2DqY1lIA90m/updAe\r\nqnWTVZHQoTwHvG8H4XsYWp+BNj4qb2/6XRw+gOYRoJskDdjfB7xN4/0RXcc9IHg7325tfyj94uCz\r\n+j5531N4d/4uFosrSGuNsq6xmjsUKDCwA7z95jncuXIMxjpsr2yjQo3RSgKxsDi+fQpvn78Apx0e\r\nO/oQ8lKjUhXkIsEblydIKo2TK3djMtmDzA1W9DaW1QKVA06tn0I9sfifHn4GUjscHR7DdrYFp2v8\r\n9D3PYLh6CP5dVzSwAOBkBiEk6j/5Fi7/zd9i9X/7VdQrd6KaKSjrsCmHQC1g4JBoCcA2rx+taz9n\r\nQxOxhewRyhg/GAywu7uLtbU1AMCFCxdw/PhxHDt2DMvlEi+88AKEENjZ2fHkn/k87O+J9GKMwblz\r\n5/D6669jOBwGtvXe3l7Y79Nc/L4PTw8liPZOce3Lh7D274WDTy5ACxEEpNKQSQtmVWWFldEYo9HI\r\nM9DmCwghMMwHyBIfmP7YsWNQSuG9995DVVU4escRKKVw5coVHD9+PDAHyfigmHZ5nqOu65Dwgp92\r\nklFJwKEQIjDCCDTjp/q0UaFNNxkwtPmmOH88Zhs9hxtZHKDiQow2pVSIfeicC8Z/bODRewKS+KaN\r\nQAQhfFZiYvg550JbTadTSCkD84k2b5yNRPcgwI0Ma+6eOhzmLfBY15DSwibouFJxg5q7nfp/Czjn\r\nWVd+c50A8Fl/vUstYEyFsiywXMompplElnkjcTZdhk0Nld0YE1wfY+YCgZlk1PFrqB08KLTsuOBy\r\nY47HfiqKlrFHf/mEQuwhAmzocwKbi3nRtH3LFjHGoShKVJXBlSu7IVi+7wPPOvPZaWtkSQKtHbS2\r\n8F3YusQBsolTaFCWNWwTP3E49K50UgpUtoBwXbaKz6js61jvlYEN693wSgA1pNTQOg3MMmpXDiLH\r\nrpZ9YAIZuQB6xwXXHTI2SN+dc4DgbsgA4TZCAFqrhjXqA7EDrgMMAa1Lra9723dUlsIsYa2AtbJx\r\nSyTmrmp0dhSYZ1VVoa6Mj7HhBJwFZtN5OLxQUkMqhTSRwFAg0SmWZdEB9jjjlEBVGl+0uBHYTPpN\r\nAAO/nvSbAOarV6+G+Y3A3eVyCSlUYBZmeaunWuuGPTqDNTXqqkBZtrHTqHxStOBsPEfxeYv66yAw\r\n6SBQiRsn3Eihume6ZUHSfWhe5qwpfjhAIA/pKmc0xiAMB//4AQDdN037wRmqKz8UIMO+2xatC0PM\r\ngu0bLwfJtX7XZ/Tx6671/UGgLQk/NIjLDrSAYAxo0itNJIypMZtNURSLoIu0aVtZWWnYyCmEAKTs\r\nxnZV2oV5lrc9CT/o4YdA/HCQ+o/0gsJ9EKhM8wX9lh90xPMR1x96T3NYDAT4zwS8SzNfOxy0TiFE\r\nG5uSs079mtTW82YY7zdy/fsByn5UwtuC5sD4M/7XWgsl97sF948Vv7fVSuNXHv5V/NYT/wLjdHyT\r\nyg0YYyGVP0iFzuGcX0qsAxKZfGi3X6Bbb85G5ftH+jscDnHq1KlwD5onaL2nwzT+Xfwc2l/HrFX6\r\ne62DlI+SxHM1tW98oEPzJa8vB0oBdNqFz0+xFwXdgw7FqRz8HvTb+ECLP+uj3vaHcmMyMmv48h1f\r\nwi/+3OfgEs+iFw5wwqJGjQQpmgjuUHAo4eGiBBIlLCoAOSSUA4AaEBolLKSRgAS0sIA1gJQoMUNa\r\nrQKihtEGCgq29jaHgMBvPfDbABwKOccAQ8DKw2Su1xAHhwoVBmWCWgHi4iVUdoG1L/8s5LG7sPfG\r\nVQyTBJtH7oSQ3ttXAjDOQkMCxuKHnO/j+nVo5sf4QDNJfGJPslE2NzfDnJTnecAriKTzyCOP4OzZ\r\ns1gsFgH/McZgc3MTUkq8/fbbUEqFXAxPP/00rLWBgEN7AtqnHTIAP5ioz//C535fniSTdQAAIABJ\r\nREFUANBKIU0SJFpDSQlnLUxdYzwaIU0SKCmhlUKiNbRSfiPjHBKtw3spBPIswyDPoZWCFAKrKyuo\r\nqwrFYoEsTbG+toY8y3z2GK1RN8Hnib3BXXZpIx8z67jBzBM9EGiYNXHYiMHDDUNf1G4sn9h3nIND\r\nxFDjMeCIeRDHSCNjgbO7OFjGN2j8uRxsBLrGLmdeUV2stSH7FwEG4/E4AITceCYXVB4rkFyxvAuX\r\nB5W0TpEkHiByTmC5rDCfF1jfWOkAQ7x+xhgICUA0p9vN++acCkIA4/EISktYa1BWS9SmgnMWEM6z\r\nTa0KbBHnfID2+Xze0QneLjTQqf2orjwmonMu6AKxLw6Kqah1G9+Q2ovrDwF91H5k2JJRVxkH4SsO\r\n370CQsgGWJKYzeYoywo+sYDPgql1gjTNkOcDFMXCAzhJhizNkegUUijACUihmph4EnVtsFgUWCwK\r\nGGORpTmGwxGytGWNtbEo24D6vp00tE4wyEcYDUcYDIaQUsFah8q24GgfOM1B8JgFJIToBP3uY7d0\r\n4suJHkaU8LrinIWDj0+HJqmClAJCIrhDp1kCpSWcs6iqEmXpMynz8Ul6SmPV2Ao68dmmIXziFQcD\r\na2tYV0OKvAEdHXjGUjLmjLGoa4OqqlHXJvQj9WGxXIQ5g+KjEcvTZ4FuQc8+d1oCrjjwwA0Oymy9\r\nsrISXH2dc5hOp7h69SrgEOaJPG/johHgv76+iTwfwifaqVGVBs4JKJlAqxQ+O3Qbj49e1JbkLszj\r\nTcbMCD73xf1L83mffimlUJftHE2AJIGjeZ6Hcck3GxzsoUOWg4BL7ibaN1enmYLSMugazWNSCigl\r\nkaYJlPLfxy+lJKTQ+57N/83ZopxRRs+PJQbhuHHN2z0G4w/6Pv78oN/2lR1AByjre3mQrYIxNYyp\r\nUVUliuUC0+kednevAnAolgtUVQlrfVxSCBdeSnUDP/PwGrTJ5P0V6xLXTV5fanPO8uf6zV9crwkc\r\nofUbaOPLcuCd7u+sBJyf84WQkMIfKiilkegUxKqn9YFePoi3gE58vT/+8Y/jwQcf3KcPsXz9tf0x\r\n/z6I8R/AHuVuqZh/dJ0QArLxCqmqCqZJ5hQOtRomp5QSeZZ3xwn69R5C4OkTT+M//MJ/wBfu+zzS\r\nD+mGC5CLr9/xQAq45uDcQEAJ0eT4dbBC3pSYTfFhHICOWy4JgXXURkDbDvzfdC3fD/P70hiM5/aD\r\n5tvbQWJgMwbYCIzj7ch/09dOfTYA3YeDq/wZAPb1S98cH19zKLenLGUJLQ2EUn7fAeFnGgMokUJY\r\nCdVgcMJKCCeRCAlRC2ghkZYSUgkUtoaSCaQV0FZCCQkF+IMsKWCEhkMNLTO/J5IpDODjM1sBqBpu\r\nqSETgUQIABaVMFDiR+uaekuLABQknJIwEpiaOZJ774S8YxNlLaHGq1jdGsEq13APfKgLKZpEH/Lg\r\nuNA/TIk9YOjgCEAIHbW6uhpCFI3HYzjnQ2ttbW1BKYW33noLu7u7WF1dRZ7neP3117G+vo7xeBwO\r\nUyg5qRA+0aq1NiQ3PH/+fPBoItuAJD70+nGUPg+dGxHNFxBueMRAVhzzjcfO4S5rPLsfdyfkABzF\r\nGfLPdZ3nUGW4uxhfCOl7XnEO5lE9+EaHn+oTgMXddvhpaPxMbrDzk1Ziz1F96d5Uzvg0sG+R5swD\r\nKis36pxzHbdHAjjpHgRaTSYTONe6G1McRAIkhGhjYlEfULmLhYGAN2KsEY1RoqCVglYZrly50gFZ\r\nYwNruSw6AGYbk05DCDTMCwOtFQYDiv9ksVjMUZZLZMl6h/E5HA5DO3IwhT+DGwFc8WkzRaCrECK4\r\n2nLXYq4LzlVBdygzpHNtDErO2ODAg1I+uYtKR607Yl1BKYskgW9HJZCmGQQklkUJZ4GqrAM4ww1c\r\nzm6RUmIwGITYOgRo0his6zpkg01km0wFaN3RiOFFY4YngxFCIU1zKJWgXs4CmEwulRS/koBjbnDH\r\n8wOPnxZvbIUQQf+44R67vVH9aexwkIZ0g55PgDAxOJdFFZ7pQTzbKcPKyriTrMADo7QZJxBGI00l\r\ntE47emKMg2exCghhIaWBlDWInUkhCqhdSCcp3l4ImSDEPn1aLBaYz+chXiUdKnAmJTe46Fl8nl0u\r\nl9jd3Q33muz5BZbcw0ejEZZFCVNbwBWoK4eqLlGWNYrCu0eurAwC8MJBVGoDnk2cGx4csOTtHbMn\r\nSHd5nwvRspvnten8nsYSP7jh+hG/p2zIVF9iudJ8RWsKX9to3AFAbRaw1ic8ck1WNcr468dNG9eq\r\nXVMI0IF3n2bzNwfG6LkkMXDG73mt67jEBma8OdsHeGC/WzC/d7wuHVS+vutofPp/A575bcM4FELg\r\n4sXzYczyjM00F2xvb3fmdh4jlPdzXxtS/blO0BpJazl5FBCQQQxbnuyDrqc6cXZoWZYdMJEOmshN\r\nPU1GYQ/E69EeVgL+cMiEQwbRHJY51+4//j43r306cisKrYPWWlB23zDP2DYO64247J5aO4V//Q/+\r\nNT596tM3qXQOzjXlEuSQJWFtDUjrYzTZEkpqQNQAvHfAB5UYYALaMUa6zr+jPREPRxLPKbS/5L/n\r\na1mfbh60T/6oSzzHxDZGLJxxwtdHbmv0tU38Wcxk5b+Ly8Hn8bhPYpLAodx+ktkUkAaWMsAaB6Uq\r\nOJ2gBqCUAVBBIEMlayQQgFGw2kEZCZc6lFhioBQACyEVHBxqlNBIII1A7SpoKGg38msXJISPYADj\r\nHJQUMKiBXGOGEmOTgvy9Dpl/15YKAoktkEqLtbVtaADSlhhKBTgFKwDZciKYiLDO/KiFhzza2toC\r\n4Oel48eP44477ggh2MgLY21tDY899lhgCK6srODIkSNh3aHQXABCiCP6nuLmLxYLJEkS8jbEuEq8\r\nvz2UGxP1xc9/4ff7FioORPQJ33ADXXYdGZMEXNC/AewDEisGxnAgJ3azOUj6FkMqHy9bXD4OKPGT\r\nObrnQc+KDTzOGIyBka5x1K0f/b7PeOPMEB4TKDbU/EAElssSy2UJKRWGwxGGwxGU0rDWoSiIHaWh\r\nlAYx0oiFBsdPJT0Dy9/b99lstgdjbGAqePZUu7kht2VfN3I7RWP0CBTFkoELGkIQq7Py34k2bgyx\r\nfsjIIpctamcy3uJNbgxMkf7Q5EHt3QdQ+YnMG2kUu8o5BGYXtRP/jbUOSmlkWY40z6GUhIPz7Bdr\r\nYK0BMdiSRMNag9rUqOqqyS5rfHZta5AkKpSdb+apLQgM43pDxmxVVdBKBPCDJkwe67FP5zzQ6uMu\r\nVsaz2cql74+qrAEnvL5Ir0MCMrAQySVWiqZNsD9IPwf6eFBwrsPUZweBF7wf43uSoe0Bz3auoXah\r\nOiqlmnbR8Myb/YlHnPWuDEmikaYJkkQHw9xnRvZ/jakDw4l/nmYt07ANRVCiKBZYLOZIkjQA20mS\r\nQEDCGIuiWGKxKFCbOgAQcfvxuY3rP7EaB4MB9qZ7qE2N2XyG6XQaxiOBiaPxyNerqRsPl0CHMGVZ\r\nwRiLJEkxGAwDM5QYS1onYQzQXEJziGfFdVkJHCynf/O68fZCA1T3xU7j+sEBf86SWC6XHZfg2E2V\r\nAHQuXJd8eAIqv2Tvfd37+sYze2XTRt3DBxpn9JfWCz7+4rUp1vsYbD1obNA9+e8PMjr77hMDun3f\r\n9wH69OLtGDOD+FjjzGyKR0lgPB3WUFvFDKa4TvEGj+YX+g0fJzxTOs0Z9G8aQ6SPcT1a/XD76kT6\r\n5g/XqgAm+szF3ViMvg0sKKuxB0kJTJTQTQiVM2fO4IEHHrhmvwEfjPnX6bfIgrjVsv3G34W2km3C\r\nJqVU+DfV6aBnraQr+K0nfwv//mf/Pe5Zv+ea7XTD4hxC9EB6fqiHhOd4CAjRzJNCh9/dDLnR8Ru/\r\n77uefxbvq/qu559f7zkfVbmRduW/62uLg9r9WveInxN/11cmAPvmzEO5/cTPcQAdWAs0ngrwe2AJ\r\n0hcNCEAJH7wLsrlWiuZz7e9BjHSBZm/vTzAksfeECGuVUACEhAy/15ACSNFl298K4NStK8IzMoUG\r\nkECJZjUI3l0CMqwl8ZVN37/P9r0ZBzR99hnHWyjmLA8lwbEPfrgR7yX5+75/07P4/HYj+9sfN/nA\r\nzD96cxBqGp/C02d9HRmz7wAP9tEmnG+euRJxUCJ+9vXQ3JgtEf+ex7/jRiopY3yyxv+SMcGZfPEp\r\na6yU8akfXRcDm7ERG/+lMvB4WPxe5CrgExyUmE4LCOGQphpKrUFricEgg5QEuFZYLi2MqRogTkLr\r\nDEqmgfFVVWV4VnD31AIQFrUp4WCgHV2rIIQO4C61NQexYrddAh3ot3Q6QO8pLh65NnLdIyOPykUG\r\nHGUojl0CyU2XYgAKIQLzioMFomH9AALLZYmyLGBtDaUElPLgQ8sk8vELrTUNOJeiqF2oJ4BOcpM4\r\nGx5ndQHEWmnBY2KNcD3k7Cvn2kzFZECnynUMXAI7rfXZsSkWJNCdJAgkzAcphHRNtuAaZWWxKLxR\r\nap0fuw4GEF0XXg9IqtCfpLux0UDgS2zAHzTmD1oM6Dp6T8+hLLoEJHAGEI1vbuSnaRqS0Pj2r0AB\r\ndUm3tPaRUpLEx53g80FdlzCmQl37mHNKr3TcjantjXEBwKY28L+X0FYhqVuGE8Umo/4m1jSPx8SZ\r\nj9T+xhicPHnSs/4mEywWixALFAAWiwXuuusuaK0xHo+RZRmGwyGm02mIP7hcLsIcaUwFpXwGVCl9\r\nPM88TxvdlNBaoq5VU0YJa9v+54dBMQBHuhv3rxAiuEYTC5tASZpraX7hwC5/UVxX5xwWi0XQBRqz\r\nR44c6bQfLwuf/zkDl4OMfYdPfJ1RsnWLi9kjfWsX13feJn3v49/3yfW+P4gtEl9/0Pd8/bnW8w9a\r\nhzmzns/TdEBBJ8IUToEzA/vmjFji/onXcH6ISJtU3r9UBpoPeTxc/n3M/Ka6V2WbqIauLcuy40rM\r\nXxxsBAAhTUcPb6b8OG+SpZD4wv1fwO88/TvYHGze3JuL/QYacLBtdrN64YMAfDdy/Y1ce7vLjbbH\r\n+5mPD/rt+/38Rp57KLe5eKSonUtE+N/B80uEx/XNWuEz0f99z+OiDw/lRsS3X9RffWO6t6FvTN7P\r\nvvGD3DsOswN4+2s+nwfGn5QSy+UyeJ7RXoonRLrWHHnQIcgPq14/zqK+9IUv/D5wcKPyBAAxI4U2\r\n1dyoijfSBKDRJpqUgTbBxnXZWBw1Psj44nIt5QFa5JobEdyVk/87dk2jssdgJwcx+4wjrrQcNIzZ\r\nEUALZvFrqR24yy//jn/P254YFh23VNUGRif3RxqkHrDIOnXidbXWYjBMICWxqjy7gbN3iNlERg/V\r\nl4CsOCYTr4uUEtYQW80wUC8N4BJAQC1CLDsCQbROAAso2ZxcOcBZF15wQLEoYI2FFBKJTpAmKbTS\r\nIZ6CQ+sORu1EAALFHqBn9oG4KmljmvG25uw8Mha5DrRGaNtfBCLxtuqwHVTLEgzjy9Yol0tUZQkl\r\nJUbDIQZ5DgGgKktUZRnicUohPGvBWp9C3lokedrRJ07HJtc2KgfXP6oLAfm8fUj62DwxK6jvVCfW\r\nc34dj/nkgYNs3+95Wal83CWPz1/WAtaZJiNwDed8HEutJdJUw5gKQgLW1uHlnAHFD6xr0wFu6dn0\r\nPAKLfUw02/Z1miAf5B1GNMUU4+3GdYA/g16bm5sBYI9ZVrPZLGT4JvCbu4c751AU8zBfk04RoMef\r\nRbrJY9glSdJhpvYBNXme7wNy+Dygm3Hr9VMGPVVSIdEJnLVQUgIOdFYN1TCBlJRIsyzUm5efXqQz\r\nPP4bZ2srDVC4Al9XduIt0Aln4Mvt3f0889OG+fMgifU7/ntQu/R91ifXOxzru/9B463vOn5Y0Sfx\r\n+heDs9T+HFjjLzqkINf1oig6bEsOgPO5h7vZ9q2r8ZwQ15mPKR4SI37xeb1Px+s6PqRqM1LTePY6\r\n6d1+u+uIgrV+vD/44IO4//77r9nWQJf5dz0duZGN8keB+fe+ficEnjr+FP7gc3+AX3noVzBI2sy4\r\nH0auN84O5VAO5VAO5VBuBTloX/d+heMndAjPbVMC+gjr4fskysyb53n4/lBuvnxo5l8sMeAVb+AC\r\nIBhiH+13i7HWehYJBGztwQYJASF9liJbG0D0u0NRGWLjo0+BqDz0l/+Ob/75tQcxHXgdhWgzTxKo\r\nRffnDJ24jfi/4+yA9J46jPuw8/JzBh2vTwxC8lhJi8UCe3t7IXPp2travuxkVG56ftqATb4eLoAq\r\n9MrQZStS2b27qupkJuYsPgABgCRAmLcPgcHzaQsYE0hB8e5Go1FwZeVGfczuoHamvuax/SjuGnc1\r\nJAMSAITZ72bJ60EvIUSHxRjApaaP0iyDThLoJIGQPnOAI9c25yCkhLEW0lqgrlE395zOC+R5jtFo\r\nBKEkUq0a6reDgIN0CloAmQAghQ/8qiSE8vHMJlcuwTkXmIfEoKG6UPIUai/OLrPWQq8kUIlEplLo\r\ntHUbNrZGXTsslnNYGEA61LZq46VJ590BesYM1+PYLT4G3CmbaswujueZGKSnz4aDlV7QiRYqygpL\r\n7DsCr+g3xYLAxFa3yWVWa6/nUiIwaL2ulqjrsgHUhgHEoIzAQkjkmXfDvnL1Uhg7dV0jSboJg+LE\r\nAsT0lNL3L/UltUkMZDjnQiwNAviKokBZliiKAlr7TOHUZuROvr6+3gCNVQALq6rC3t5eKBMxBTlg\r\nArRJLAjYIaHDEAJMiNUVrwmdvhJdcIeE7k+Z04m1ybN4O+cC85ffm55VliUWiwWGwyHW1tawtraG\r\n0WgUyq+1Rlm1MUVpnpNSBuZwzFinuYDmOF4fKnffuhIz4/jnH0Y+yIaKrwd87MT3utYayX9zvbKR\r\n7sRrm3MujB16VpZlmM/nod9XV1fDfN2XuIVYonzu4YcD3J2c6zD1NwfbORhI+rW3txd0omXIGjae\r\nklAnfihDnxE4yZPo8OQ5PicjOnPf+5EPuqG+HTfid47vxL/6yX+FL97/xZt2z0PQ71AO5VAO5VBu\r\ndfn7WNNpH+VtmXbvQ3YcD+mWJEk4BD2UW0+uGyWWM/uArnHjnIOl6CfSMziEkB60EACsBypq5uIq\r\ntWrZVcUCySDvNTqAD0/3JMM4Bv24EcJfnE1H9VwsFvtcGfuAyr7yktESgxv8/mQU9THv+H3itqHf\r\ncWYiZ/Xs7e1huVxie3u7w96h7wngyrPWaOJB8snAWSyKphze7a9lfDmUZY0kaY0pcrXj9eBJYTjI\r\n1hrXXcNpsfDZUweDQSfRCNWZgwjk3udZf43ONQAZ6VllakAKVKaGKJcwrmEqKYlEKziZd8BCcjsj\r\nkIGYKHVdh4zKPCi9aurvrPXgthDI0hRaKdjBoOOOWpUl6uY0hAzAuqywdD4KB6yDzU3LrtIJTFVD\r\nSwWdKaQ66bzKsoRdNswta7Fz9SoqY7C2tuYTTOQ5nGhZtDQxQ0rPAHQOZVG1zEXRAItOwsC3cTFf\r\n+qxhqoaWCYX8g6kshDP7xksM0sUgA/89GcfcTTQ+cCCwNz6MIJ2ggPykXxTQnwAiyj7F3TkJZPBz\r\nWxEYsVVVwboaVQ1AWBhbIR+0ruJVJcN9jTEwDRBYlgrz+TwESU90G7tyNBqhqtrxZu2yHcMW3g2Y\r\ntQG1GwF4BGDwLL5UXwLYCIBPUx/HcTabBbfe3d1dFEWBoihCghFK5uKD6e4BQEgiQwwsGmsx+4m3\r\nPe9f3rfURzQP8LmMn1D5eaDqADcQgGiy6/rxpf2/tUKSpUiXyw4AWJk6XMufF4OBxKwcjUYYjUah\r\n/4m53M7xPqZnkgBSUvxIgHiHFLNUqcadtd5/2HTQfN33lzO74zXlRta897MuxgdH8fXx9/G9+57F\r\nQas+UJGvnfH6SQct9J76sKoqzGYzKKXaxBqNGwkB8xzA5f3ODx34s2m89M0lfH4gAJCvYaQ/7Rhu\r\nn1dXXU+A2EWY1j+6P3dpF0Igy9uxdDPldgP39u232D8HyQC/+fhv4p9+4p8iU9lNeV58GHUoh3Io\r\nh3Ioh3KrSnx4frP3ABwn8fkAZtjd3cWJEyewt7eH8+d9creNjQ2cP38e1lpsb29ja2sr2NeHcuuI\r\njo0VYP8pOW3MCSQgo09rjYKy4QkBqZQ3kRqj1DkH2ST1KJtNcJqmkErBWYvaWqTs+TF4xl2KDgLc\r\neBn7/hIjqo9dRNdzQyB2YeNufBy0OIiFE9fjetIHcMYMJt4GsSiVNAakhdY+o5w35AtMJlNonWI0\r\nGjUxvxSWy2UAKowxkKLssCqIWbFcepBisjsPzMAsS3yKeCFRVxZV6d2ZOEhHxhsxJjmoysGBFhxy\r\nUMoHyfb1c6jrCkXRZjgVAiERQxuf0Jc/yZrsx5LprGzvnw0887AyFapFBV0xIEUnQCVhTI2qatmK\r\nPvurzwJL7TSfFwAklEqQJFnjBmiRKm8oGmvgrIN0QKYTiAZUWOoWRCxNDWMtYCykA4R2gLWwdY2y\r\nKHzQXucgAagGQBQNwCuEgJYSsBbOGMBaJEpByy0UReHjuC0WKJZLFMslNjY2MB6PkTcx8QK7qxmv\r\nSZJgkGWoqyWcEHAMAJRKw0DAwLPQalmiUhpaSEgHaCEhpIOwDlbYfQY+N7CJ7t0FWNqxHYNBBwHf\r\nMSjIv+sD02n+yfM8uDBzAJRiQda17VxLTDZimm5sbHSuI4Oe9EKrFHVdYLl0IZ6mSQ0cLKwzyPMB\r\ntDaQQmEJn726XFY+87OukQ+yUB6KSUnPpn5LkqTDyOXjiJjH5LrIWVBJkuDdd9/FbDbD1atXkec5\r\nVlZWsL6+jvX1dYxGI+T5MMTxUCrBcundhIElhFDIsrqZ613jMkuMPxvATj5n8edTXXgfxfN4bU34\r\nTjUJg7yLb5N0CM0hR6IhtYJQMgDQrgJGo1EAVvihBT2HYmCWZYnJZNLESF0GAHRjc2WfSycPtxAD\r\nzvF6s7dcdPQ71vU47EQ8v8dhHeLfxHT+D7qBOmhN6vuc1rc+ALDvt9e6J88WTr/nLHIeugJoM0QT\r\nKEjMXcoWTHEBCVyPY8rydTP+nB++8b6OQUtax3h5KXYxZ4Q751A4inPr3cSNAYQArO2G0vAxQPdn\r\nj5ZqFMbK35/cmsCgc64D6nE5KF7Vz9/78/i9T/0ejo2P3ZQyENB7aKgcyqEcyqEcykdNuGfTzQQA\r\nyauOSBvvvvsuXnvtNWxtbeGtt96CtRabm5t44403IITAkSNH8Oabb2I8Hv9QwMhD+XASwL/4NJw2\r\nxZRYQEqJwWAQDOTg0lUufSwxckkUfpsmnAxGm7IGirLdKQmlWzZHDKiR0Oc8Wyv95WU9iK0QMw+A\r\ndqMfX8dBQW60EduLGyz0ORkBZDiTxJt4zmrgdaNrKDg4uQMRYEIsAx7QngOY1GZ5NvblSVrX2LIs\r\nAScBV+LqlQmq0kAKjdFoBK1SJNpAyaRxb+q6rXEQwZdtu2VtSgGfrcgnB6hrg8s7F7G2thZij5Fu\r\nEEuDjDgOGBPAmiQJhoMklJlexXKO2dwb8ZT2WyqJVGn4MIAW1nnX2eliGlwCk8YFq65rmMrAWIN0\r\nkIb7G2NgagNXetCqshXGgzHGIz+pFUWB2WyGuq6QpilWxiPs7u4CzaQ33ZtjMV9iNJphbW0Nw+EQ\r\nZZPNWEkJnbSug/5ZNQZZjkRpKCGhhAz9Oi9nAIB8oAHr3ecrUcLn6BJwxsJojTzNOjrpdAKZCwwy\r\nz5h977KFFRIDCAjtWZe1AyazOYqqbpifCiqVUA4ojUVtDGAdhAMSlXqdLg1Ek9RDKQUIASElZOaB\r\n/NneHPPpAlmWYTweY2VlBWqgUZSLDnjM3eoOcvXj+tYHHHYmqIaFE48lbsDHGcRJ9wAEBtFwOAz6\r\nSS9rLdZWN4J+UCZSziybyFa/BnmKLB0gz8owL0JYOBiUZYG69uCwL2/DfjSUEGaANM07Y7uuS1R1\r\nGdxrCcijeJPGGOzu7gbQgQOaxPbjbUefJUmC4XAYqPmTySTE/5tMJp2EBmtra2yzoJEkGRaLRTCA\r\nJ5OpBzm1xurqKgaDATwLOEWa5hCidY2n8vF4kPG8xYE55xzyppwAICn+YQMYaq0hGjZtIiXSPMfA\r\nWoxWVkIdrly81In3x4FTAh85kEa/aROxuJBkyB8IaDgrIGDgrJ8n+4T0dGVFd+rX1xbxQVHfunAQ\r\nUBWDjX1luFHpO2g6aENGZeOuHfEzeTmv9Uz+O973MbgZtw/QxqYkAG65XHbmmrW1tZD5mhL78P0B\r\n9QtPRsWfF+8T+JwF7E+4xeMX+jVtFvq9rgWslR0dJ4Z7AAEj/Z9MPPj7flxj+vrs2htrAY+q+b+3\r\nwxb8kSOP4N98+t/g8Tsfvyn3o0MdDhAfyqEcyqEcyqF8FCTGSG72vckOAPy+bDKZYHNzE5cuXcLx\r\n48dx9uxZFEWB9fV1vPnmmwAQsAAeHuhQbg3R8WYX6G6KfdB60zllL4oCcQYXuo6EM3+4wQ60G2Fu\r\nxMdliF1t+XX8xb+PWRJ0TSyxAcMZavw67jrGQUrOWuJMSPpdfP++9qHveJvE9Y+TZMQsFP9eAhCw\r\n1sE5cs9NYK2DEL688/kCwBU4hyaengcZ0jTFdDoNfZQkOri1knuhc0BdL1GWPuNsljUujTIBlAzg\r\nAYEL5M4KIDCD+Kaavqd4ALPpErJJsGCthDGiYVFIOCdQFHMkSRLccZUSEMLB2hqA9f/ZGlXlPyMj\r\nO0lUc08L2WQubRkP/hpjHIpiyVxGEwyHI5YowIS2IuPAu0xXmM8XcA7I8yywsTjrjEAA+pzK3zIX\r\nPXiRZe0YoudWVdW5ro1B18avovZcW93wBrFKIYX2bsqVQV0tMBcFpGjBsERnUKOkBUAWJfQgCbrj\r\nQTzf71XlDe2VBmgh8BQooVQBn+nXIBkmwSjm7rsxs4ZLH6PvoM9jF9OYZQUnD5xPeDISfn/6tzHG\r\nQ60RCKCUCsY9Z27RMwh4yLIMZTVvGHoGZVVC1k1CkKbMpgayDBgMksbNWAEDQhJPAAAgAElEQVSQ\r\nkNL3dbHcC/UnF19yFx4MBh3wgdi4dV0jz/MASsbzA4EjzrmQ5IPimFVVhel0GuLhVWUdGFVpkkGO\r\nFbRKgrt7hQqLeYFisYSAhLNt/Mw0y+BQduZQLjRX0twau0TS93yNiBlacd1IaKytr693XCoJlOUA\r\nID/cobKSPu/tzZCmVcNktA2DWXXA2r5NVdvWbQZY0lHOEqX4qn1rXR+QzevPD3ni6z6oxGvQ9Rh+\r\n13t+3zjm/+5ztaX7xtJXDooDG7PTae2lTHPcnZ3H1aN78piOfK0dDAYdgJAD1nF5aN7hoTwGg4zp\r\nXzceoBfSD0qa5eATV1kArhPv84cjnpHonAj//iijf0dGR/Avn/qX+EcP/SNI8eEzJNMYPQT9DuVQ\r\nDuVQDuWjKrH3ws2+N9kUAHDlyhVcuXIFg8EA77zzDu6//36cPn0ar7/+OhaLBfI8x9GjR3H27Nk2\r\n3NSh3FISsv0C/XF5yL2GjFJuEAOARTczZR+QxzfgBGrE4BqPKwW0Qdt5tmEuHFzgbnvcmCJDLAYM\r\n43txg4ADA2S4XcvYit3e+toyLlMMWMaGH7UXb1f6Pn6vVALKPunvRww96guL+XyG2WwaQCoPGiRI\r\n0wTLZQFrDeq62tcfnnVlYK1BVZUdEI++zwc6xOoj0IpcKqkdOWjJwRvSJyov4MJfel/XFYSAdwHU\r\nKvxWKYkk0Vg2xjnXS2I/kRtlrDcdENq0wIWPrZYhSXRT5wpKcb10oT2MqUM8J14/6htqS+rDOKsk\r\n/d450yn/QZlX+8BgANBp192T6kX3IBYXgfd5nockKmVZQgrX0TcqO5V/PB53wBXufmqMQZLvT+jg\r\nbBMfDRJCdF9SqOizA4dWp02pHeNst3D7wcI+Nk/MvqJ/J0kW+oQnzyHAtCiKfWBA6wafwTXZX+u6\r\nQlWV3v3bESgvUSwWAFyjvwl8Vtk2m2hRzEL/E/grZRu/j8+XMauNDmA4o87PCapTD/obu+X77KoL\r\n1KZGkmikmWfPaq2QpgnyPENZlahNDWPqoP/GGiitkOUUX0vse/mieBBfSp+5m97TgYX/dwuW0YED\r\ntQMdHBw0foUQWB2PQwIVnlAhSZJ9a1c8zxIYypM6UftRmxFAGd+D2pyPPa6jdA31Z98hF58Luetx\r\nPPff6FrC70vXcxfGvuf1HY4dBJbz7+h9DGDGz7jW4Vdct77vqP9p/MUMfFp3KLA0j5XJxwXff/A5\r\npA+U5HXgh1nxHEDgOyWk4WEzaK6nTXP8XNITkieeeAKPPvpobztw+fprX8c33/jmPjfYPrdYAv58\r\nWzav6BdW3jrZfvm9AECKtn8SmeCffPyf4D9+/j/i8TsfvynGRGUsqnoBixpSZqjhIOFQWQ3ngMwV\r\nkELCWg3tLEooSFlBwqGARpEoSFTQZQmpBOAEnFtCywx17Q/InFWAqCGQAvhwrt1c//r2HMB+5iq/\r\nhuYDrnfx73jIA7o/B8H5AQD/bd8h30dR+uwMmsOpzrSPBtqwBn3XEvud2j4+wOT3pWfR5/QdHahT\r\nH/A1n+9zaP2KWTaHRvftIc4BxiU+/rcClNRQQkE5BSUkZGKhoKF085lWUFJBwb+HENBOA4mCUj7E\r\ni1oqlPkSKXIYXSOtUqgMUNBYqgq5zCChAK3CntWpBRI5AJSFrhMgVdAVoKyGEaZ3rjjUwbb/lK2g\r\npIORKRwklDCQACqhYCHhrIOSKtjzRNoXkO/r0O5mAYB8LaD7Oucwm81w55134p577gn7offeew9Z\r\nlmF7extra2u44447UJZlSNrWh1/wz8kujUlY8QE0X8/6ysfvT0L34HM1ea/27cnjZ9xsMPVmSowT\r\n3ajoGx2YzrmOcUodLq3p/T3dlzozBvaocWkzwsvBN/h9YB1/Bjc+qJz8+X0nun2bJ15P/kxKKBBv\r\nXOMyH2QkXcuwAdqspNz4pM9jReT3it2l4t/TxkxrHVwai6IIbn+UxZNcual/efZEirVEA4VcmAgg\r\ncs7BCc9c4MlCKEg7lYMDSlQmMprTNG82Uwmk1JBSQ6kkMK88eGVRFCWsbZmD3uVQoKi7rthd1kXb\r\nNgTSxkwg4VrjkjNK6H7UFqQT8bPiAPFUPtocUpvxPqJ2VUphNt/t1Vt6Ty6KNAlxN0IpJerKu+Tn\r\neR6M1SzLguvqbDbDYrEIbb+2thaAKw9eMJe0Hh1cLpcB5ODjhlxkRdoaySGLpWKAmwKA/ZnD2/F5\r\nbYOBxlrfRtk3XLuJ5p8Ho5Gxk6mOnT6z7WaejHbOAKJsspwdxPuSdNE5ASFUmCM9CFHD1MQIU0F/\r\npfRtmSQJ1tbWAhBLfcYBG+7eCyC4PtI4JVdHDg5z/Sbdpyy3BJKRTuzu7oYFtCxLDAaD8Btqd6UU\r\nZrNZBwQmlt3KyoCVVYd2Jf2gdu+6W8qGiduyHfniTnNiDJxxneDzS9/cTIs6xXwkd24C+ojRRzHl\r\n+Pd1XQcWGY8ZS8+jeSHemMQsceovrpd8PucbZf4bXv94PouvJSOw75CIb5T4tfx10OaJ/zsuJ5eD\r\nNh0cjOgr00HPi+/BD0ros/iQivqyKIrQ9wQIr66udsJqxMDfdDrd1yYcHKF1lI93PgfRWKM5hYPz\r\nVD6+bpD+0G/4ev1+5Fp90rQsRGM4HPT9rSi8XtRmP3f65/Dvfvbf4eTayZvzDGvgXAUnU6RCwBkP\r\nywmhkNQ1kkyiFgKFzVA5AwUDAYFBc6ADSIyhUC8BbTM4laEUDokpgHyIyknkYgBXLrHMNVxRIBcC\r\ntfpwBgQHjimWLtdFDjaRTtLfqqoCS5b2NyQEGNE8T2sTzb8UPoJ0muZ4DkQtl8t9nkAfJekDT2l8\r\npmka9nG0NtPcSQfdtB7PZjOMx+PO4S8lISMvKtJvWvdo7xGvFbSvo70bgBC6hIdj8B4kWVh36eCB\r\nh9zhrJ1D+eiJEECiC3zr6nP4w7/9I+wtDaTIIZRFIh2SUmKpHAbWYSk1qnKOUZKhFgqlK5DLHLJW\r\n2EOJzFVQSQ1d5pimNYZuC6j3UKY1llmJdKGwSAySuYOUA1g1h1QZZG2hXAIrLCAscjPEPJ3j8aOP\r\n4x8/+OvITf6jbqZbVgSAvK6wHKUoygr1pV1obWGXu7CjEYQbIDMLOAHYZu8iZQJnAdOkVb1VVuw0\r\nTbG1tRXWnKNHjyJNU6yvr4d9UFH4RKF33XVXWIcAhLWIuw/THpHmUKC7h+aeQpzAwe3hPiIO/Zt7\r\n4dF1NH/SOkrX0LNo30dzZwxK3g6ieUBu3tj8xRubG74AIDU7FQfgPEwNABBSoi4NEiUhlASaxjXO\r\n+t9J0TF0eefwwNpc4g0vN7j6FjfuthcbSfFnsRHJlYFvCrhRxrMJ0+cxkHmt8vM2p3vw/ohPYeO6\r\nOudfQFy/lnWzsuKQpllj7Mywtzdt0HiJjY0NpGmGNPWxvjx7YgljLGM0JBiNFNK0Ysaz3yzOi0kA\r\n84QAjKnhXOu+KKWA1qr5zjQAQgXXZN0VaOOUxSAxBVk3xgTjnAw7cnukzVDcB5w9xA0+DkIS8k8A\r\nGwE+BH5IKTGZTDqAGwcRAQ+C8Y2VEG0mWW74ErhK9/GJTASsK0N5uS7T7zjzZblcdlhnNF44C4Xa\r\npiiKTmbauq6xt7cHay1GoxHSNMVwOIR0ZQCfyIhumU+eGUpt5xPKoNOGV69eRZqmAVwK/ScsrHMw\r\nJnbVBYjZyYUbffFYjsEf+r1/Izpjjhv2fP7ihj3pmXMO1rSGjJTE5lSgTK8bG1tBPwh0qyoDpRrX\r\nbOX7jMaKqR2qyqCuLUxt4ZxAWdaYTqdNvDLfR4N8hCzTWFlZCTFVSQeJzaS1xvr6OgAEneKs0Kqq\r\ncPny5cAS5LEASefoPjRuSD9ms1mnTpcuXcLu7i6GwyE2NjawtbUVMm5T/xJbcDqd+gQz8zmMGUMp\r\nxdzy26yqHJihMcMPOggU1do1hpKGEA5aE9CmwafPFjjycxvNKaQjHLCkZxLIyZlZPGsrscR4u9Jh\r\nSZZlGI1GYdzTOOOGdlW1sdqkJN2ledkhywadAyU/xkm3fZIYDuZz3efgIq//QeBh3/p3o0Ab//5a\r\n69e1fsuf2YL73WzAvC43Uiaab+P7xwAczxpMLGcKLUFhI3jG7HiTycFz/ox47oj3B0C7geUAId9E\r\nxqxuvv6QHt7wxvID2e+EAnKg+YPe64crXB8e2HwA//bZf4ufvOsnb8q9r04X+G9n38LD99+Lv3zl\r\nKl597WU8/dA9OLoyxH/6q+/hF564B8c3hvijbzyP2W6JT338ATz8sVNwTuCN3Qn+3//63zEaAD/9\r\n8Ufx7Rf+K+r5Aj/z9GM4ORwB1uHdpcD/8+ffglAan33icbz+yv/AKzODX/uZTyBVEjAfzrV7Npvh\r\nK1/5CqSUeOyxx/DQQw+F8UV7c9oT0DyXpmmY015//XU89thjgU1mjMErr7yCP/3TP8WxY8dw3333\r\n4dixY5hOp7j33nvD2kHrDo89e/78eSilsLGxAQABfPqoSt9+XwiB5XKJb37zm3j66acxHA7DWKWQ\r\nNoCf47IsQ1VVePvtt3Hs2DFsbW2FuYdAQlpfnn/+ebz77rt49NFHsb6+/v+z96axlmXXfd9v733O\r\nufOb6tWr6uqau8ge2KS7KQ5Nii0KckQZESU6suAYMpT4mwwbDgz4i2HBsAx/kRHAgD8EHuIgH4Ig\r\nURApimQ7ikVTUtyUKNKkxKGbUlc3e6zu6ldVb353OufsnQ/nrH3XPe++quqBYnerNnDw7rv3DPvs\r\nYe21/vu/1uJLX/oS58+f54knnuCLX/wiKysrfOITn+CLX/wim5ubPPTQQ3ziE9UcGI/HPPfcc3z1\r\nq1/l0Ucf5eLFi/z2b/827Xabz372s6yvr8f1Teug2rC+V96LJTCeDvn33/5tfvXq/03a7pKOUtLU\r\nMSz2cMaSm5KJM3SDweI4DAUdHwjWEYyntBP6don8AKbdIfg2y2XCQVEQshGtvM+hHdHZTzh5boNe\r\nmWFMm6nfYmf/gNF0yqRtSBPHtDwgLVOCSfmj63/E5zZ+kjOr9y+0V+8VwATKToDDnCxpQ8cz+d5V\r\n8mTI2uQE9sQS08QTMHgsGIchELwnxZCYwLshap7IMLGjZI0QeSP6tOjHIv+0TSI6kZa52ibT9rI8\r\nR2xzvcElwJ7gMHpjReuImhShdWcpepzKJoxsmulNnPdbSTSQp4s2cJooqbCMpOO1e01TYW4CILoD\r\ntAKt2SFNxV4+N+sHs925RewIOW+RoaLBAulcqa8G4I4zUvTzm8aI/nu3u2362YsGcPO58S/22OcL\r\nECXG+XQ6ZX9/n+FwGN+92+3Gz8IiksE/Go3iTrFmRumYWhKAXeJBNkEk2RmV3VEBD2P/czQOlt5Z\r\nlfpMJpPI2NGGWtZu4cpZJtBo1Bc5FDm9pFe1h60BAwLBl5ShytCr26woiphoQUDdJrhrzCzmm7VV\r\nzCktsOQc+V2UYs300G6EgaUj4IO0rQi/EEJMhmKMiYCo9z4mzWnONagMgPX1dQ4ODtjb24vxHb33\r\nDAaDyGrSTCkNxgvzT4Cjplum9z5mjtabAgJAVfN35tLdnGdVu94e3NcbDk0B3NwJku80k1GPPyma\r\nVVVy1ODXY1ESCQibch4EzKsM2MlsTPgSkqRkMskpTAUCyo78eDzF2ioeRuUaDe1uO84T6WfNBJRd\r\n/Bi3sZ5/Uv+tra0IUomsFCBS5pCAYiK/BSw8ODiIc2o0GnFwcBDdxKXtJaagZOza39+P87EoCg4P\r\nD+P6oEF2DZZoIFYv3NUxk6OiFMj4al6vQwgsknXNQ8awvIewv3RCF60UyNwQlkySJJw8eXLOvVOD\r\nx9V4nI/5p+tTPd/N/d6s83R61P1B6q2VnuPGZ7M99DqgZcIikFDLq2a99d8mYNdca5vluGfpfr9b\r\nw0Bi4h1XmkCjyBgZL6PRKMqvTqcTAUCRv7Lm6bGmNzfkd5lPTYBDg8+yiaXPkbVQ7yBrr4bhcHhE\r\nPt1tmQHh858XnDn3XzznXWqbLbeX+dsf/9v89Y/8dZx5c4zIRSWEwK2dHX736Rf40+t75MNDvndt\r\nn4cuLvGfvvsS//UnH6adeK7f2mVlqc23X3uVj37oSU6euYgBRtMx3/iTqzifYMvA17/xHdxgieuH\r\nI/7ouZc49bGPMhxP+PbVPyWfBFZPLfP1Z/6Ev3DpPr781B+T5NPapfjtMeOm0ymbm5s88cQTbGxs\r\n8Ou//uscHh5y6tQpHn/8cX7nd36Hfr9Pr9fj5Zdf5pOf/CTf+MY3GI1GXLlyBWstV69e5etf/zpn\r\nz57l4x//ONvb21y8eJHPfOYz/Nqv/Rof+chHGA6HfPOb3+TUqVN0Oh2++93v8sgjj2Ct5bvf/S6X\r\nLl3iW9/6FqdOneILX/hC1FneywaStj/05tV0OuXq1asAvPrqq/R6PR599FFef/11Ll++zLVr1xiP\r\nx7zwwgt85jOf4fDwkP39fX7v936PTqfDhz/8Yb7xjW/gvefJJ5+k0+mwsbHBfffdx1NPPcWpU6d4\r\n+OGHefHFF3n11Ve5fPky3/nOdyiKgmeffZbHHnuMhx56aE5H/drXvsanPvUpvvrVr9Lr9fjUpz7F\r\nt771LZ577rl6M3+WlVwAyHtAzHu9GGzSwvkeYdyinaY8+cEnWU5W+MOrX+FWcoMlO2DdrfHS9BVW\r\n/RL39zsMiz265RJjDtgf77HSPU3RmzIyr+FMShEMJ5fOMeQWy2aDc6eXeGT5Af7kxaucP3E/9585\r\nx9NXv0a/5fnIqYf4nZd/j5uHB1zorjEupxxOEqwB4496aNwrsxIChCLQbqVMRhMGLiVkGaPf/gP8\r\nZz5KOHc/btzDlQFbBlKT4lNDaQpm3L8fvHwV/UZsRa1nyxqg9VINBErReuBx4SK03ip6sxB1ZLNF\r\n2wxyf40tSRGdTp4roF4IIeJXWrfT4OT7lfUHNfNPwAgNHoiCql0ENagT432YmXFfel+NclODLUBi\r\nHdZYTJAA+JVh6ZKExCWUKmC9FG3o38m40DH3mr/JAJXvNYigQYMmaAOzQbvI7UgPlubgvd3u5yLB\r\nqA1GDTYuevdF4CVhsbCVdxJQwXsfGTxi6G5vb2Otpdfr0e/3I5tuNBpFgOHg4CCCHxr4EcBvWqQU\r\nRclwOFIAoQMMk8mUKgGJuPk6nKvi6UjbTicz5ukiV2p5loAXApKJO2t/ZRmLIXUJNjMU1kVgpixL\r\nypqhaJ3Fuio+hgnEbLcyPmTC63hRAhzpsSiGpXwvwkPqpsE7Addk7GkXRZlf2ljUY07aQYNf0o/S\r\nBuPxmP7KcgNM44ix2utVAKgAmwL+5nlOr53UfZngXBJBHe8DeV6QZdLvJWU5VqCAJU0zCjMzYgVE\r\n6nbbdWKZlMS1MaZuA2urTKpuHrTXwroJZmiXOz0m5LALQA49jxaBhxpkdzap5YSpmVsB8FRJZSpm\r\nWgiWJLExiYxzhtGomkNFOSUwkxGmTl4DLZKkZHg4quWjoYqt6WMcwfFkSBm6Uf4KMCFAb1FUjEEB\r\n4GRsyLjU7rLCGhyPx3Q6ndj+ssjJuIEZi1DuOZ1OI5tvMpkwHA7Z2tpiMpmwtLREkiT0+/2YFbff\r\n78e5Ph7Pkofs7+9H41MMDm1IaUVAFIiqj2QuOcpSkv/4+i/qXI/EzQo129ktAIQ1ICRjR89XYcPI\r\nGNRgjwZgpW0kw3W/349sSHmWc4uz4TbXhEomHK3XwcG0ASbeXu43v9cbKYvaQSsteu7o+y4CALWx\r\n2Xwv/fk4pUgDchr4WzTPb1ea79X8X+8Oy32bTDthcg6HwwjiCpA7GAwiM7bJCNSAuZ5verOzyQZs\r\nblY2wWu9m6y/X8RwvLtSAehGfw6AqROABTPzxHiXsv2kJDbh5x79Of7OJ/8OS62ld+SeMsfbnQ6n\r\n11e4MS65fOE0T1+7wfn7L/Htl27QSgsG/QTjMlKf8vhDj7F1c5d/+8Z/4r6NNmZYMjWO+1dO4cyU\r\nkpxHL11k68Y2j97/IP/xP3+TndEhg6TLytoaS6sr3HrxhZi0Caj0nsURcu66iMyQTdetrS0+/elP\r\n8wd/8Adsbm7yve99j8FggPeeBx98kBs3btButzl9+jTPP/88xhi++93vcuPGDba3t/nABz4Q2eLi\r\ntvXss89GvfmjH/0ov/Irv8LKygq/+7u/S6fT4Wd+5mdIkoSbN2+ysbER5/F73TjSMk8D+iInrl27\r\nxvnz59ne3uaNN97gtdde49q1a/T7fXZ3d/nEJz7BU089RavV4oUXqr7/7Gc/yx/+4R/yta99jVOn\r\nTvH000/zIz/yI1y4cIGnnnqKJ598kmeffZa1tTVu3boVQ1DIZuxDDz3Ezs4Ov/Ebv8ETTzzB1atX\r\neeSRR2i1Wpw4cQJrLffddx97e3uMx2Mee+yxuGELxHvpTad75T1cipIin9Jbyki8IZk6Hjz3KKtr\r\nJ/nj732NR048zonugKdfe45zKydpL/dZbnU5PJywdesmz41f5Efue4Jhusv/8cy/YzrJMe2Cv/LQ\r\nj/PFZ/4Dn/3wZ3hx7zqPnb6C289Z6izRGhk+sHGe7XzCh+/7MEXH8sobr/Oh0w/w777164RsjC27\r\nTDuH98bY7YoxTKwjdyUuKdgKOcsPXSbsbbP1a7/HfbtTDn74UUzLYm2L0gZMURKCJ5hq2T6KlPzZ\r\nFY17aP1R2H4i/zUZrLkJvwhg0ww7+V5wpmZ4CR2STNdF4zCLNp5Fl9PfN3Vt0eX0fUW3Fjvq/VaS\r\nprIP8waAKAfCENGob1EUuDTFBLAV4le581L9b6gUUWekw0pCWdPqk5TUJZQqdoXuLOlkjS4vqqsG\r\nY/Q5TQbE7Q65j2b7iTLejMUjA1YbAJr9dyewctF3xzEhFhl1R428KtmH92IEihI2S0RQJfOoaLnd\r\nbgcI0dC/cWOTPF+pAv7XSUC8r4ROxYAZxWdo0KQ6N2NadKNx5ZyLMcOkrcQtdpY9eLYjcLTNDMYE\r\nnDOEYGvgpSQEE8EXYURNJpVba7tbZURtpSmm3vEcG4MvCoqyxBmDhepv3Z7eGJwxBGOOGI/NWH8C\r\n4GkXdBmfmpIsc0OMZQ3WCeAghqI2TNudJN5bhKl2I97b2zsyXmdMsjGhTkiig81LvQSUS9M0AoDS\r\n7zLuEpPFeS4sM3EZzvOcTqcT66sFd1RSadXvP62BzykhqBhZNhDqmEkEizUQgoDvHrFMFwETiwAN\r\nPc9l/BtTJbqprg31+J0tChX4WM2JRXIuBAgYAobSg/XgQ4DgKcpqYUtSR5q1yFoJSWoxNjAew3g8\r\npMreWVKW1eJkTUaSVCD4ZFJlyZXnVdk+c8bjesyESQSXut3uHBCR5zlbW1vxPfRGhHZF1wk8dNxA\r\nidcp/aXvIwud7NhJ3+/v7zOZTNjd3WV/f5/xeEy7XcVyESNxaWmJbrcCLV9/fUwIBZNJznA4rhiP\r\nhWd5eZlOZ+byqjdFjIDBBqzz+CCxqSqAOCktZRnAeKyTUBIeYwNW9jzqvg5+nlne/KxjV2nWqby/\r\nZhTLuqYZipK5TOa0yARpfwH/muN0Vo+8njOSBEXaQJIboc4NR/6/3SaY/C6KitRRF/1/8x6LQL/m\r\nb8cpU8etWYveRZ/fvMedyp1AMa0raDBNYlJqME+zaYUNK/Kx0+nQ7XajviMyVGSl1iv0+q83dPS8\r\nlENfrzcfdDvJGnFX5RhmXxVztP4MMZHGnLPvuylwUKN8+tyn+QdP/gM+sPaBd+R+MpdDCBRlwQuv\r\nXud//a0v88MffZTNYcmB6fL/fP1l1joGWkvsTDPuCyUhsYz29kjLlJXM8bFHP8z0oOCZa6/y1asv\r\n0MpKLm1s8L/8+/+XEysDhuUhn7hymQNf8tK1bf74W08z2L3FXzh/jqIIjIZDDn2gbVLKd8BxS8J1\r\nyHwXz43BYMDS0hIf/ehH2draYmlpiV6vx3e+850YM9gYQ6/XwxjDww8/zGAwYDgc8sILL7C+vs7+\r\n/j5Xrlzhueeei/NheXmZjY0Nzp49y9WrV3nmmWc4e/YsSZKwubkJzHS5pq78XipNAoDodQLUi/fM\r\nYDDAOcd9993H7//+7/PzP//z/NZv/RbPPfccy8vLHB4esra2xo0bN3jhhRfiBsOHP/xhHnnkEfb2\r\n9vjN3/xNRqMRH/rQhwD4oz/6I4bDIY8++ih7e3vALBbu0tISN27cYH19nU6nw9LSEiEEvvKVrxBC\r\n4Pr16/zqr/4qn/vc5zg4OIgkjkWbL/fKe7yYhLznGbFPp+zRSRzPfO9bHAwP+aEzH8W7kv/rj3+d\r\nv/T45zjMb/D/fecP+Iv3f5xv71/l0Y0P8diJR8jsMpsHB3xs7WOcyXr84a1vkPk2B97QzZY5GL7I\r\nK9euU2AwvS6jAgYr67z44vO8/Mr3eGn3Vf7yAz/Nd3e/y74/IISccTsluUPs7j/vxQBdnzKxBQFP\r\nfwyu41g+e5r+X/tR9l94jcl//68wD56n/8TjpPefw5DggqHEVfFiww/O8VdsU00KE71T5L7Wn5vs\r\naUm+KUCe1v0mk0nEDDQhRrv0CiYjAKAcYsPocjs9V+os5Jg8z+cSg8o9obJzJdarfs/3S3F/9Wd/\r\n9pe0AaHpjhLHoglOaNcnX5Yxx6OtARZnbQW0AL4s4/+EyofdAGmSkCYJxQLgrsnK099rJoc+p7nj\r\nLu8jinwznk9TeW+yDY8zTLTxqCmjwiqRoPpyaDaXHrQaoDnuGU2gQ9ctghuJw4cKrKtYRw7nbLXz\r\nj4/AHSZgbAWSyG9iLEzzCaPxEO/LKstnp4VzloAnqe+fF1MCnlYro9NpY52hKKtsuO12h1bWxhpH\r\nPi3I8wJrXB1HcFwnPagsjyRJybIWaZKRJClp5rCuZkWVOT6UWGtittGiyLHOYF0VOzBJq/Pl3abj\r\nHF96rLFxTCXO1Z9TxqMRZVFSFiW+LAm+Yoslrvp9MsmP9EkT+bfWRrcx7RotCRKaBraAgOISLWND\r\nPs+xR5jFMpDYVAJMCCChx7+OX1CWJYWfxcfUCqycv76+Ppe0QLNZvZRbGhsAACAASURBVPcUkylg\r\nyNIW7VaHNM2w1uF9wJe1tRgMhlnWVmsqZmcI0O61I8BWPcPXdZ8wHo/o9zuUfkpZTin9BChxiSdr\r\nWbKWYzqZzzSsmQQa7Fo0H4wxtDutCphLE9IswbrKCPa+xIeSNEswFgIeH6oxlhdTiqL62+32kLiU\r\nFWA3A8FbrQrEs9ZEAD0ET5pWIPpg0Mf7Mi50ZVnMKdvWmipxRKuFdVW26ApIrTIDV4vijE2k5aww\r\n/GR8jcdj9vf3o+u2/C5sXQ2eCvgxHo9jwoNFYLUk/pGxLeCHdr/d3d2dYz815WOWtej1+nQ6XZIk\r\npSw902kej+XlFSSzs3MVuzTLWrTbHdrtDs7Nsn3rQzYu2u1W/N9aQ5V9286uCUczvDcBoeYOoDAr\r\nZC43s7XqQ95Z5rOOF+i9p99brsDdYPBlwPtQg3zVRkww0xnwbMG66h3kb7fTnwverse7nu/NdU+D\r\nTXojqrleNOfLnTbBdBGFqykfm+vXcWMDOFL/Jgh7O5ARZnFi9V8dx7QpF2RdFjBbG8OaESgu/Hoj\r\nU37TLG79/k05H0Ko4qY29BW9KahdjLWOoLPRO+d4+OGH+cAH7gx8femFL/HUy08d+f444940fw/6\r\nXENpyx9ott9LK5f4pz/+T/m7T/xdTnRO3OZhd1ekP0VmiY5W+ILl5QErScKp9RM89sAZTFHwqQ9d\r\nYbnfZb3dYmN9wHKvg3GO1W7GDz9yhbVOh16rxdn1JbqZ54NnV/n4xQuUieHE0hK9fptLnTVW+h1O\r\nLndYGRjOnxjwsSvnaJspp08uc99KRpp7vH3rxoOMtyRJ2Nvbo9Pp8MEPfpC1tTVOnjzJww8/zMrK\r\nCiEEHnjgAU6dOsXGxgbD4ZDnn3+eixcv8vGPf5yHH34Yay1LS0tsbGzEhBIhBD796U+zsbERwb4z\r\nZ85w4cIFDg8POXv2LFeuXGFvb4/l5WUuXLhAlmUsLy9HmXo3YP67ueh5Pp1O4ztJe5w+fZqVlRXW\r\n19c5e/Ys586d48KFCzGb5Sc/+UlOnjzJlStXou306KOPct9991EUBadPn8Zay2g0irF+P/KRj1CW\r\nJQ899BCXLl0iyzJWV1dZX18nhMDu7i6f+cxnWFtbiyxlicv4iU98InoLCFi4tra2cN3Tf++V92aZ\r\n4PnSS7/LszefZsW1WVteZ5gU7BcHtK0F0+Hxc1d4fusmmTFs39rlxNIGu+MRy9kqz229wkarzStb\r\nL/C1177OV994hh2zy4dWHuSD93+Aftri+Rsv84HTZxmHEWM/od/rMDzY4tb+LucvneHpa3/Kj537\r\ni/yH13+Ll3ZfYc0uY1opf+2+v06/t/SelwHfrxJCYEJJxxusd+QuoZ3nDHevM3rpNYajKe2ppzyx\r\nQufieUJ/iRyDDQYbwAHB3H3bNvWVt1q0O61gLOIhsbOzw7Vr1zh58mR8ppB89GapEEqGwyFLS0tz\r\n9zFmFibq+vXrFEVBp9OJuhwQyWcCzLXbbba3t3nuuefY2dlhMBjEe2ibUerZ1KtFXupnyDvu7OxE\r\nYoPefH83M9vfal+bf/Mv/1VoMrB054ny1FTSpaFHo5nuuEiBF0qoVr5lQCRJwrjI556pS7PTFhkJ\r\nxszcthaBI3fKQKYNkuauvrynrkuzLIpJpM/Vvy8yyjRoswh01EbdovOEISQMSR2XrYpJ1orMIE1p\r\n1TFBhP3SarVYWVlhZWUlgg6Hh4fRDVEUDDFmgCp+WX0/YaMB0VXYuVl2Q4mxpI1dY4s5406zdITV\r\nJMaZvLfE5BqNRpTFLMOtdmeUPhQDrwkAiFE3GuZz47LZTxrolbbVrrfyHL1LLPcwxkTlTFyAhOIc\r\ngzKns+zX8h7GzFgqAr5rEFnGVZ7nkMwMcg1aiLEpseBkDIxGo9h2eZ5DUfV7t9uNQBAw9z760KCD\r\ntRbbqhP0lNN6oZB6VuesnujjnKnZj3W22WzW/uPDbG4XRxYbHWi8OX+0fNIArfS7jH0Z003AXM/R\r\nbmcwN2+bLqAC8kqsSinSNnk+ZTKdtWmRe6x1pGmLxGUkSaZAhRno5svamEvnwSgZL5opqhN86M0G\r\nay2DwSDWvQmSeO/jQtZut+l2u3EXTWSn9LdcI26/khBkc3MzAo3dbpfBYBBZimmaYrBxnonrsAT/\r\nFTBb/oo80BtN2FF8PwFCoNoNlJijzXeX9i+KAlu6uf7U8rO547for457qN2tRRZp5pYGZEWOra6c\r\njP0n/aV3QLv9+Wyvel6FEHC2Fd9PZJ+WMbq/5jYNVB9GWQBzdWjKo+Y80uW49U3v6i76qw3NRevT\r\novZvgnvN7xetg8c9X3agm+/WnO/HvbdeD2Te6aQgmo2rAWF5pgb6dFtLP0qf61AUum1kZ/nzn/88\r\nn/vc5xb2gS6/+B9/kV/+T798xH3XaCRO/xYafa+Y1gSYuumWuqquWHTgCHOfb3OeMYazg7NnjwX/\r\ngtLxQhXX7xd+6Bf4G4/9DTL3zjg0abkNszFi62Rz1iU4D/iS0k9xaRvKccXYdgNyPGk+xSQdcJ7S\r\nH5KbFBMSWkUOWYcQSvJyQuK6jC10ioKpyZkaSxoyksRTFg5MQfCBNEkoywmG1ttmbsgaqeMuiQwQ\r\n3UzWRO+reLxPPfUU0+mUz372s6ytrc3pWJotrBkPImdFjovOIuNen6vn2PsFXBK5CzMGnpYj0uay\r\nCSzGqRTN5NU6k+joetNGt6f8rwPoy3VSRM/RrnJ6I0WHaQhhFt/q3Wy83it3UwKlOeB/+Pq/5F//\r\n5/+RMpvQbq8y8QmpmdLODyhDj5XWKi/5l1ib9tjvOVrTEWa6gmsVDIsDTqZLlFmX7dEmJR4YspZv\r\nkHVXCOMx19JtzoQlxsmEUVGSFRm9pGCrLFhniZXBOk9e+TH+p2f+NYwMSRG4vHaZ//kn/3fWOqtz\r\n8+Re0SWQGBgDYRjw7RZJvs3uv/7fSA4mmL/8o+T3n2N4OGZ99SRZ2qrIC6mlKMd4PKm5+3VSewrd\r\ndQ0X6ICinzSxmLIseeGFF3juuef4sR/7sZgwUOz8paUl+v0+r776KmfOnOHw8JAXX3yRJ554guee\r\ney7qWjs7O5w9e5bXXnuN7e1tzpw5Q6vVYmdnh9XVVfb29uYSV125coU0Tbl69SqdToderxdt5pdf\r\nfpl+v08IIdq3xpjIXn/ppZcwxnDq1Ck2NzcJIdDv99na2iKEwJUrV/jyl7/Mo48+SgiBmzdvcv/9\r\n90cb6926von++mZLopXkZgcDR5RcWbjutJsk38vCqEE/zTSUcpzQWGR8LGIrNOu7yEjR/8cGSCzC\r\nVmoa0FJfUXoWAYIaNJSi21Qvus0dOa28iQLXrGPTqNB91QRimwaeGKX6vgLoilEp7Jf9/X329/dj\r\nwo719fWYFCLLsujaK0atZlXo+mnWkPeefr8fny3Kj7Rb9YIFYJjFA5Q+8BRFiXOzTJshiDJl8T5g\r\nrWM0nBBCyXg8ZDodzxlxFaPHRhcwEQbWgrUJaeoI7VmMAQEYNLNF3Jk19VjYQmmaRpcaeW8NHnnv\r\nOTw8nHNdF3qz9LE2VqTdtLEpCRikbnoMJkmCrxMKFIWnKKY4V5IkpWKsSEy/Du12l3a7S5q2sLaO\r\n7VgexhiKeZ7TbrdjYPwkSdjZ2Ynjs8nUMcYwHgv4b7AmqZmMUBSesgxs36piRvb6CWmSYcggWMrC\r\nUIT5LJma/SfyQcCi4+aNKNd6jDfllP5dG+7S/lo+NGWfZg7pRCfynKWlJUajFEKV7CP4cRynpckJ\r\neQCqfsjSBGcTElcHrg0zEFiDT9L+aZpG5p7MNwERJpNJZBbJ+NSJmQSs3N7ejgtnURTRrVHeS2+a\r\nyCHxB2VejMdjDg8POTw8ZHd3N7IfJL6fw2JdB2PBWGISmGk+YXev2klbWlrCWGi7NtbZKquZMqI0\r\n61ZA82bMTb1RouVNU+7qcbJo/dCfBTwSJpa0rwYBtZu+/CYbDcFXwKoGRH0oKtSkCJhqz7ZiGyez\r\n8RXX22BjX+jx2QwfoNcTvY4IYCrfy3zRmyW6fZptcCejUK/RTfBdZJb+7m5Au0XgoH53/fm4v1Ka\r\n4N4iIPB2ZTKZxHaT4Piy3hhjIttGsgU358/BwcEcG1LeUW+YaHmk2wKYS5bzZotuk9vF8juuTX8Q\r\n8f+ssXzhoS/w9z/z998Rph/A1tYWy8vLlEUJZoFbegBCwPuc2Whx+KIAHBiHr4G5wjkgr/NQtbCh\r\nukFuHZSykZtQ+pzEQwGY4GgFgIKQg8FXYCfUz7DwDrj8ylhvbjhL/zY3ynq9Hj/xEz8R20Ffp+eN\r\nDmmi7ynrZlM3f78b+E0W46J4T9p+WUQA0H3RvK5pLzTbU+676LkaoF10jS5H5sG98p4tAcBl/NyH\r\n/xs+uvYEO8UeJoWyKEmcgzyAKzBqR2ZW6i0fw0zum8b6GORPOHIPA4RgcNMW991/H4XP+VDvEXwe\r\naNmM0yfO0O638fn7Wy68rRKg8NBJM/bTEa1yh9H/+dv4Vpfuf/ffsnOroDjcY3UwoN2yGFNgfOUp\r\naXFYfrAupxo/EVmztbXF/fffz7Vr1xgOh6yurvLGG2/Q6/W4ceMGxpiYELPT6XDixAleeeUVbt68\r\nSbvdjmzonZ0dsizj1KlTUd+11vLMM8+wsrLCxYsX+ZM/+RM2NjZ49dVX+eAHP8h0OmVjYyN6Jt24\r\ncSPaKHmec/HiRa5fv87q6iq3bt1ib2+P7e3taNOOx2N6vR6bm5ucP3+ew8NDbt68ydraGp1Oh698\r\n5SucOHGCF198kccee+yILv1+KBEuPI4ZoBXqRcZD85pF12pmnijWEdAI/si95yqoEM3mQqaVE20Y\r\naarnIkVlHji0mDlBWOK9KPCBKkg7cyDFzICZGU9iSGvgEJhjbtxph7RpVDWNPX1Ok6HYNIL1zqTU\r\nQ1Ny5TxtyOzu7jIajeaUSWNMNIg6nU5kCUp/CjimAxUL0CCMoMhyUQCl1L3V1m5hdg44rMCXmf+/\r\nvKf0RcU8SlUcwAnOFVQxAjOMcbRaKdYmdT9LsHXI85KyDBBmYJ5mKeqst1InaTNh+QijSpgdGsiT\r\ndx2PxzGhgsRhkzbPsgwfpkcMcc3Q7HQ6McuvVijlnDR1dX2FpVfgfUFZiqt7qCnR1KyWFOhiLbTb\r\nGaNkNhcFUBKAuIoR2Z1zhdPjOIRAocAjaw1QuyGGKmnIcDhusPM8aZkiHlDOeNX/8yC7nivz8+54\r\nlpcY2U0wRcsEfZ9mpmL9WeaN9LUAQprx6X2I4wAqeTWdVnHv8mkJyFxMsMbFcSsGhgYSpX81CCzz\r\nSuafZKsFYoIVkTHCVpJ5KM8CInNXj0Fh4gqAJO8vGx5pmnLhwgX29/fZ2tpiZ2eHoijY398nhMD+\r\n/j6rq6vRbbjf78fPOgFMURRRCdDAmXNVHEXpA81E0cwJ6TMN/olsS8JRZlwTXGqCRvo76Te5vwCw\r\nwr5wzsW50QQEnXOUhaXVyuLv0kfGONLEMc1Hc2N43kUuMB7NwmmIXJM1pGlALgLX9FjVmxC6LfQc\r\n0XOlWRat6Zpt2ZyP8szbAW7HAQXNTSDpMz3Pm3P/uD68XbnT7zLW5TwZYyKzdnZ24iaPyEIdF1C7\r\nNcv7eu/nNpKknTQAKM+TufxmmDnH6Wp3W35QgMAnz36Sf/gj/5CH1x9+R+43HA65evVqjEPadEO+\r\nbYm/m3idmfu++sYcOV/NgaNnzX2/4C5/ZkX38Vs1XO52jLzfwKU3M7/e6XdfZEe9nfu8E/e6V37w\r\nxQRD+7DPfZ0+65fuIyQl9fYCKa4OPXKXa4iIAtP47g7DJHjABspQ4Nc9zjgcSbVXMvL45P2XFOEd\r\nK8ZAZhiPc1JS9g53SB//AKf7A7bynGI6iWQbIOqHsHhT9c+6yBoidsVrr70WbX8B84SF1+122d3d\r\njZ5CL774IpcuXWI4HEb9+NSpUzGZaFmWkSTT6XS4fv16tD+AyPDrdDocHh4SQqDdbrO5uRmZiYPB\r\ngLIsY9zVbrdLr9eLoVXE5jl79iyHh4fs7OywtrbG/v4+AL1eL9ohOzs7nDhxgsFgwMrKCjBLLPd+\r\nKu6/+sIXfkmUX1Fi9aF3rpuGcVNJbxZR7jX4I4ZvNG4WuPPq65vxkJp10bvrMFvotIHWNO7lPt77\r\naPwtMmq0e6uukwbXmozD5rs0WZLN37VbwKL66efoZ0fXVUyVTbna1iFUyCVGMmEGibNoSJOEdqtF\r\nmiQE7ynyAtMAPQQ4kUyjYgzJe4iBLGCQZAVe5HobQojgnwAR4psvgJJzs7ZO04QkqeLHyftrt00N\r\n7MyO+Th6WkjqttVAioAQ4/EYZ9Mj7677WScqaYIKwNz4XFRPqZfEmBIBI+5lIZRH5pMeXzp7koyn\r\nOaZPOh/vTeom7aOBKg0yiitmZqsYib705NMpRV5Q5AW+LCnynDRJcdaRJimJS2IsT2E2BGeQWG5J\r\nItky6/hnZZ2wIUAp9y/LirVpqhiCZXk0RluTTaTnl24nPb+a8ktTobXMas7FChQ+Ov/kryweM7A1\r\nnZMJsus/A3aSCmyuY9FNJlNCMBBmz6tYriJfEpytWa2lr2NTenzNfDX2KCgm86jVasUsv9qtUOqt\r\nXe9F3mo3cu2etEhGWmvjAqqzoRZFwWg04uDgAO99BKdFARD3ds2QLcsyAuEiT5xz+DABJBalbfR3\r\noNWaJQ8SIFWKMZCatBpL9SHxZavPLspDYf9U8rD6P/hQZQFvMB/1+NGbI7Pnzuo4GefkeaFk4sx9\r\n11oLppgblxKrUDRwY45mq9dyoAkKNddJzUxtsrGP22w6br1urvEi75v10/8fd50cer1uPn/Rurjo\r\naNb56Bw+vtxJaZb53NRrpP0061OHAJAYNjp4tX5nKbIeNhMy6XOttVy5coWLFy/etq5Qxfz78stf\r\nvuN5sT4cH9ORAN7573vMvzNLZ/jHP/qP+cUnf5GT3ZN3VffblfF4zNNPP803v/lN+v0+DzzwwJsC\r\nT++Ve+VeuVfea8V7C7bi5VnA+oDNA6Y0mNIwJacM5ffn8CVJmVBMcwh1gs8cKMB4C0UgJO8vZtQ7\r\nWwKUlddakiSUxmLWB4QTfXwB/c6Adis74h3wVjcDNDbxdor2jBJ9UDCBM2fOcPny5Qj4ie4vR7vd\r\nxnvP+vo6y8vLWGs5ceIEnU6HJEno9Xr0+32Wl5eZTCb0ej1WVlbo9/sx/NjKygpLS0sxvrk8Q8C6\r\nNE3Z2NhgdXWVPM8ZDAbRZul2u5GUsL6+jjHVZvapU6eiq7DEUhVbR+7f7XYxxtDv96Pu9oMGYI8r\r\nb7WvEw1QSNGK/CJKO9wd8Acz9pg0NswGVOW2OO/C1KyLBg81I2qRoi3PbYKBTUBB/hozH4dDsxj0\r\ndbczMrShLNdoV0UdM7HJTGkCPXK9nnAakNKsDqlnWSPScl4z7o28nwYydSwocQ8MIUSjfTgcxlh5\r\nwgyy1s7Fuoox4+pnSIBkYQk249LIczWCrtu1ya6TOpdFwJfgSzB2Bl5JO3c62RwwKq6K+r2acQq1\r\nQSssHx30X4SEMN2ahqgYggCrq6tzxr0ICS0sdawvSQIi5wXyufgM+nzNEtNGvtTPWktIHVhDMGCc\r\nisVjoAy1G3LwTIuc8XQSASExSm0xcyWSJBGj0Shmyjx//vzcOJX2iXHKWhkBiw+Ar+cNFmMTLBab\r\nVH2Ql55iPKHwgaL05EWdjMeUcwCzng/a/WYR+C/g7KI532TpNue+/PXHbFbKNTLG9aaF/C5AWNXv\r\nrj4vw7kpzgoYV7n9EgwhGEIQELd6B80g0oxZ2dHyoYxx5iQhhwYRmu7mGiSWOStjZzKZxLkq40ti\r\nZGhmrYw3Y0yM6drr9aL74+7uLnt7e4xGI7a2tmJG6BBCjIEk46vb7UagUGTGaDSKc8O6ydy8022r\r\ngTgB4eX3yD7OZ7JW2mFRvy8Cr2ScSNHjW+RXnudzc1DCB0TZ5s3cRsh4PIoMwVarxWA5nXsXmDEY\r\nmyC3Hrd6003qK9fImij9pftd7qfZ2M3r9dqj543+qzcK9H112y3SAZprpd5MaV6z6Nrj+qnZl4vW\r\n/rdS9Hxe9DcmjKiB8/F4PAcYitwScFx+kx38KOfDzBVbA/WyefRmlftmebvXfz9KJ+nwCx/7Bf7m\r\nx/4mLdd62/eT9Xo6nXL+/HkuXboUExQtcnu8V6rSnFP3yr1yr7y3SjBQdHMoC0zwGGHkOwfeAxZz\r\nt8y/t1jGdgiuqgtQgX0eEpOQtNI6VMK9srAESH0gWMPQezqdHsG0mU6HLJuU0G7hy+Id0Wm+n0X0\r\nyX6/H/XUEyeq8B0hhJgDQMAz8ZLI85yNjY1oE4gnldxPNj6FkCC5IiTU0erqavxe9KbTp0/TarWi\r\nrXTp0qVI+BK7rCgKBoMBIQTOnTsX9TGxo8SOkCQjYlOKLaFxlPfbBqP7qZ/8/C8tchMShXU8Hkdj\r\nQrNeBKTQbjNN1zlr7Ry4Isb8HPh3h8AzEpOpyVxqMpu0Mdc0OOSzLtr4kt+azDENvjVZDRqc0Mad\r\n/l0btM1ny70FnNMgX/NdtVup1CsacASsc1jn8KFyw/Qh4JKErJVhnQNjKL3Hh1DRZUwV0yEwY1Zq\r\nQAsqdyRh/gloYO181ts0TecCmmtXWWkDSRzSNDxnxmrlOll9D1V2Yg0Y1oHrQ9HoYxPBG23sNsE7\r\nnehE96OUCpyZB4Q0kNcMSK/rpseKMB8lTpkAB4viPEkfV20+nRvTut91vEkBJgRclfrmRVGz8EzN\r\nfjIxszahAoeFUSafg68OX3paWYaxFuvs3F8hnedFTlGWuMSRpEkdry3gg4wgV9+vYlJJRuUK4/Kk\r\nSQIefOEpi7ovyyqTcD6dZ+YeBzToeaznmGb3NfumeZ9FxRhTZzGe3bMJJGlAXcBY3S8VyOXUtVWG\r\n7FarRbfTo0r+kdRjrWI9SlIUY0zMTozMyODxwVNlK56xj5rsTS1vZNxoAFDGl/yvZZTM6fF4HBfX\r\nJoCkAQtpdw0MihyQcySRjDD75NAJE2QNEBbgcDhkMh0SAiRJinMJVWbgGYsSzNycqN6hyjYNYHEY\r\nW7vuGaJ8w5j6e1Oxm62px7aZ+yxzUcsmeU+RjTIXFzHEsqxTg3FHGWLj8RgfZgmVqmfM2tcYQ6fT\r\nn+tHfWiAVwOh+rfmmG2O7+PWL3mvZky/5rFIbsmzmuvnovm16G/z83Hn3un6uwEA7/S7vmdTxocQ\r\n5tzPZzJ7vp+Hw2HcMBPlVNpJM6+b7yLro3OOy5cvc/78+dvWFeB3XvidI9l+7wTqzLVfUP2Mwdt3\r\nnvlnMPzkB36Sf/PT/4Yfv/zjJPbNB6NulqbeKMmRBBB8vynm349yD/y7V+6V92gJYEqDDY7MtHAh\r\nwfoMY1KCSQjGkXiLDccfLrgYP84Gh9Hfq/8XHw5rUqxJwBtsSEhtCxcyfFHp/uaeCL5tscZAaRin\r\nhqSEVhFIXYINlqmfJ1kdpx/d9bPeYeYfzBOrxAtIYt7LprvYvLK5L/aF4CRNIpfYLJrYJFiD/C66\r\nstxPt4noVxpbkvOFaCQbrtr2WZSQSZ4hup3YVdKO79b18y0z/xYxAHSsGvldGxCLmHhybrM0DY7m\r\n5ybbTpTkRYbF7YwIqY8GmmSwaPCg2YGTySju2GtQDoRdpZmGM4ZZ5apm8H6eIdhkWsjAFqBP2lJf\r\n02REyERoZvfU7Lj4Ps5G5pcnUNbgQbU7VJKkFcDqy8qVswx1GxnAGk6cOMHu7m4Mlil1lsy9m5ub\r\nZFnG6urqnH+9AIE63p4AgJ1OJxr6y8vLMQGAsAkFKEvTlOlEEmaE6khkvNRjxQbwvgKUgqeSRQFj\r\nmnEJHdZWse1CKCmKKWUpgfszQqgy0VYAtqHTadFqpezujOK404JDwAphKTVZd3JMJpPIPhCWpPdV\r\nrENhDQlwp/tdYoS12m4O6GuOU93fIlTnmLG1eymmgo+8qfu/Hr+Uyqg1gdznGG+ghDIp6ay1yNot\r\nbOLI2i3aoxGj+sjznJ29XTqdTuVuULuq1l6sBAM2QAgGFIxvbKixmErVqGpWuaBTVIzEaZlTJjNh\r\nrkENeXftbtsEbWWOabBrEXiviwY94jyeYUX1uBJgpvquLIs4LipZIPPc1m7q1eI2ngzxocB6Aa8S\r\nnKs2S6oNlGE1p6dVLMS8qFxlU4TtGHDOEIKlChBfJb2R/haXcZljZVnGpDYaQJXFUM9JnW1X5Jz8\r\nvre3h3MusvXKsoznOefodrtH5KuAoDI2Dw4O2N/f5+DgIAKAKysrdLvdKIMlHqDE/hPwr92pYnFm\r\nWZskybDWIeuYAIHGBEIoCcHEtq8S2XjyscjIWR9GJDBQA4WKzVYfIVShEYppfmTMyHyd9d0s068G\r\nhowxJC6lLKsxnhcTSp8zGpdM8yoeysFh5fosLg69Xo92JyNNK8Zy4mZhA3RsTFm3FrHG9dooSor+\r\nTYOJc++u5s2ismgt1yx2/Ztes/UGRfNYpJTo83WddLvq++vv9Fq5aI7fCfxv/q71j9vdQxRDvSkg\r\n803O0fNImK/NhDx6k6p5/3e6NNtR//1+lcdPP84/+tF/xOOnH39H7ieKu9ZJ5b0k5pAkJNNteq/M\r\nyrvVaLlX7pV75e6KAVyoSBu+9DFxUQBCPb9zNz72ekngIfFHAyGqSncbk9T5NgSDpdJN8mm9DjpH\r\n5dHy7mat/SBLMLBtPKvW4WzNJAtQYHDWY8Lxesq7RX5rXUnWW7FvZVNfe2LpcEWi38qGuiTcEALZ\r\ncDicI0CJTqv1WWDO5haAT5iFWqfUgKDGVIC5JKh6A1z0uub3YoO+34r76c//1C/JP4uUdx2cXlBa\r\nmLEhtHKvjRTdcU3WwVxDqt/1ebo+2iho3k+jys3frLVz2VW1QSMK+Wh8QJalJKmLBqR1BggUZU63\r\n2wFTGf5J6sAEJtMxRZHjfYnBHQEd5HkCGoiBLnGhxKDXLmVyvrTrdDplf3+f69evx4GsDcMIJBki\r\nS8s6R5KmGGvJi4LxZEKSpkymU/YPDtje2WF7Z4fhaATGkGYZRAdBpQAAIABJREFUO1vbkRb74osv\r\ncvPmTVZWVhgMBhGg0oaZAJjiRy/xvnS/N8FcGQfiWiuGVOXnvwRUMeGKQhJtgLWmNtxDPCoAL4Ap\r\nwQQCnna7Q5I6XGJjtlFjIUkdWZbifXVuUebk+ZSyLDAWWq2MdqdFr7sc47oJg0OElFCXdcw0zT4Q\r\ncLCZ6EWAwF6vx2g0in3WZM7mec5ofBiN/mZsKGNMvH8THI7PP5xULLsajbPGkbiELG2RpS1aWZss\r\nzep4fa6K81QzAfNpDg6KsqxZfy6y/ipmH7gkoShLRuMxpfe02m36gwGtdps0y/BTX8UBNEAIGHyM\r\nN5k4Vz0jgLNJHT8wwWCrmHZ5SRHyOZmiWVaSdEHeWS8Ozc2HJsChgVp976Z8kfGBqQE/W489Z3CJ\r\nZTIZ02pndLsdjIHRaMhoPMRY6HTayCaAc4YkcbikkhHeV3MlSZN67Cr3fmvwvqAocopyDMaTpo6s\r\nldQgNoCnigc5n/AojpuaaSfyTWJixCy09bkC4uo5KAxVSVYjwLwA1jKGBfzSGxu6H6Sfer1ejO9x\r\neHgY5xDMFmENfAjlvlpfMqxJ8CVMpwVF4QneVMCpTXEuxfvaswVLmrTI0jatVodW1sEljqzVIklT\r\nXJLEMYwxlVIK8f+ZJJmNb3yYm5t6DIrLpwZsNIux3W5T+rIa+6YCcDUIWW1W+JrtWW0eWetwVmJD\r\nOvb3DyKApwGi5jjWRY9fDbotWmfvxCaUsaCTsOjnabd0PYeOY+rqzTiZd833aNbvON1g0XrfvG7R\r\ns/V9jjtPK4nNtes4sHSRDqHlvtxHMz87nc7cM5v9Id9dunSJs2fPcqfypRe+FJl/twMN47vewbB7\r\np5h/55fPu1/+L3558E9+7J9wZnDmts+8m6L1JxnjIsNkR1/WbXhzCVPulXvlXrlX3kslmECwBd56\r\nSuMJLoALVL62OfgcF7KKoXe3B2/i3OAoXYE3RfVc5wm2xCSeYAvyMCUx9zZfji8GrCMLUBYTnAVn\r\nHTkBTJ3L9xgd6K2U7xfzT+6t7QEdgkYTXDRAJ/URPavVasWQQsaYmAugqX9lWRZtQLmvhJATLEUI\r\nVlrHlXiAois0N5w1NtFqtebcevV5OvTUuxUAfKt97X7qJz//S3AU+GveeCFwx1FlX99Lrl8EKkaF\r\neoFCLvdbdM+mAV9leJ0ZZ9L54hYiCqP+XYCn0WhEt9eKjI7RaMR0OqkHdpUFuNXKGI/HTCbj6NpV\r\nDexWnVlmlu0WiACfPHc6nUak+eDgIAJ+goALfVa7UWdZ9czt7W2MqfzmBWHPsox+vx/vuXdwwMHB\r\nAXt7e9HoluyawsgRZp88z3vP1tYWr776Kr5mE+3v77O9vR3BJjFeBoMB7XY7xg6bTCbs7+/PxRLU\r\n/SVArAgG+U36TpcKZEhqsM9FwK/KGjtjWVX9XwO8TsZUBboIE3AGEM4+z8YbNUBXVGAP1OwhgzWt\r\nubrqmIli1Onxo4FXzdSRcdk0JJvna2OlMrZnIJVmHsqh43Y13cestTibKfdImLlQV27U9eyp23E2\r\nb6SeuZ8eAd+k/3TcxqNZbqvvu60uLpkZ0lUbyzkFFYvNxPpJv8o7lMzHVWzKC2nDJngq9ddAySI5\r\n0eyj5hhsAh7NDQwBZWSRk7YS9qr3BSK2ZKwZY2Nm32qTIFAF+k3JshTnZJErCSHHGLC2OqpxXQGQ\r\nlTtxFttBAw16Xukxqt9F3leD9rJoNxdwPSc1yCggnQZRtGzudruRKajrqdnDGog1por/KjIveENR\r\neMajCaPhmOkkj27hRV7S6w3qIDMWZys2pTEO76EsPCEcjZPSBKeOA5aqQRuizJXxomN9HBdDcNbe\r\nlmaSohBKvC8RpnKVNd5TFHkd761gMpkymUznACDN7NWyQsvWpmvvoo2v5ly4Hei26H5NkEv/3wTF\r\nbqcTyPWL+ua49Vxfr9eM5ns0n3OcYibPP+73JsAEzMnA5s6zVoCdcxweHs7dQ+SGxPUzxswlyGqC\r\njHLtxYsXOXfu3MI66tIE/44rd6uovl3wr2Vb5u99+u/1fuVnf+XED535IfNOKMjN0AV6B1/Gu978\r\nuVfulXvlXnlflwB4U4dQMLhgsN7gfCDzlgRXxf3m+3MAWA/WG2xpcKXFBQse8BWQdbcMwj+PxQTo\r\nFAmhLHCpiUzMzKTgQ705fTQG8lst3w/wT5fpdMrNmzfZ39+fS+R569atyi7sdjk4OGB7e5uVlZWo\r\nNx0eHsZwQWJjHhwccPPmTYAjNras+aIDaKDOGBPxE3ln0WlbrVa0X0RnkHtlWTbnkSmuyk2dF+aB\r\nwHerrvGWwb+f/nwF/h1X7vTCi1hvWrE/bvBE4zwsTqihDdVF32uDUoC+aFDWg0WYWdqwkmdLhppA\r\nVf/ptDLKrHXRECyKgna7HWNiCRhja+ZGkqSMx/P0V3m+gAMwG0wz98GZcWEtDIeHbG9vsbe3y3Q6\r\nIc+nTCZjptMJS0urOJcwGo3Z29tnMpniXEKaZhhj2by5ya1bt3jttde4ceNGBABFOX7jjTe4desW\r\nu7u7hBBiNhthBZV5Bf5JrCJtkKVpOpcwQADJnZ2d6O4kwT6l32UQCoCoJ5SOmyX9WBSzdq3YMBXr\r\nEuMr8I+kBldmrJkZOAjBV+CSBresFWZcC8lAOwMlPLKchQDtVj+OMw2eCEAs/SUMGd2X2jDURrMW\r\nGBLTScZuE0ysvRIjW0QzWZ1zMRCpBgT0GMqydmxz74WBWEYQowJaNHgjjKQKDB3n0whOSdZeGV+t\r\nVrtuP0dZevK8IM8LiqKKXed9oNvJSNOELEsxhjiWqjoeBdWq8TBTK4ownWtPDUY0AZfmfWSeLzp3\r\nEehxtB7MJZLQv2vwVu8cicE5Y+wWNXgnbsspictIkpQ0zRiNhlhbnd/KWnWbiou3xYdc3bsCbGdA\r\nYYYx1XivYmHO4mNqkEFvcEhdNUAl81HkmB6DnXY3Km7eh5qRWTCdTBmPxmRZC196qD1mhcFm6my6\r\nnU47xkGUzL7GVLtyw+GQw8PDuXilOllJmqakWYpLKreRso5zKGxK6yxZK6uUImtI0qRmVlbu2HmR\r\nU7kEz4PHMnckZueiNUzOS5U8ao4NGQP63s3Ye8Ji1CBelE0BINSbRnl0tZZjNBrRanXm+l3mhXwn\r\ncRB1u+v549w8k6x56Llz3Gc9X5q/a6C4ec1xG3v6PouUkuZG0SLlahF4e6d6NwHFJrC4SC5ot109\r\nfrRcb9Zdv79WRJuyQ8ArAcFFvjdlXQiBBx544B0B/4wxR4ywufdX2X8NhtKWbxn8+yuP/JX2v/25\r\nf3viZx/52W7msretGUt4A9ms0HGAgLl56b1fGJNX7+BrkBVj8CHg/YgQqri2UK09PjiCn2DLhCIJ\r\n2OApfE5iLWYypcwg+BwPhNxjS7AGCnJCKDE+QBkIPlDaKqSFM67aCAvVOUmwlByNKflmDxkzWjbp\r\n95cxKedqtoUey3qDQ49Zrb9IyAZ9PxnnIldlE3jRRsV76dDtKe8km/HN9hSZodu3eT+Z47p/5H8d\r\nR1ePX63biZdJk10s1zvnIvGhuSm46F1+0O1773ibB4FgJpSpJy+mpAQSE5iGgmBsJXuMx1gofUHp\r\ny0pvxFOUBcGESv4YwBoKX1ZJROq/pfeEspYVMSJ8wAdfJ/QLBFJgjCWlMAm5HVKGnBJL4Ty2vDfO\r\nbnv4kpyS4Exth1pKSrzz5H6C5ehG61s5pCzCVd5s0fiNyKssy3j99dd59dVXabVavPbaaywtLbG3\r\ntxfPffrppxkMBpFAcuvWLVqtFt/5zncoyzLmAijLkm9961skScLu7i6nT5+OoGGv12M4HJIkCYeH\r\nh6RpyubmZvSiPDiovGb29vYigLezsxO9nYbDYfS+29raiskK9/f36Xa7PP/88+zu7rK+vn5kE7xZ\r\n3q3AH7yNmH93OuFOLy2Do6l43+5+elBOp/MBx+WvLKr6+xCOxgkS5FYAB1n4RqMRIVQLqYA4i1yW\r\nh6NqwIpSLimqxcCThBEChBljojus3pXWoJ+g0cIa0gCDxM2T9ypLz3g8ZWtrh83NTcqyZHl5mbW1\r\nNbrdPv1+l6IoODzc58aNNxiPx9y6tcrGxgb9fj9m04Eq9tZkMsF7z8bGBisrK/F5kqHTOcfa2hpL\r\nS0ssLS2xtXmDg4MDptMpWZaxtLQU65amaXT70+9YliXD4TACgdoQFtBP2ifP88j0EcBEzq/YQVW/\r\nCUrvXB0HEmG+5FRulRVQaowhUFKWeQ1yzTN9hFHZHFPyDgJyijGW2P6cG5/ePRClSgA5qb/scmgX\r\nbnlX3efNLKai1M0ZNH6eLQjETLshhMhKlXeU62S8Zuks46TEl9Jx4UT5kzF/xPgtc/J8wsFBwWQy\r\not1ux6yyaZqRJJZOp0W7nbGzs1PHdtsjzyd0Oh0OrInupuI+KItQE5iTY85Qr1lwAmIJaCkMWWnD\r\nEI6yKHVMT73oLZI3Ug/9VyvFTdnU3Hlqsi6lDjOjB2DGSK1iUhoGg6XqvYoq26/3VYzEdruWZWYS\r\n+6lyEfVzAJPEt3MuJU3rRAN5HZS2zj4qMsp7T7fbjfJH5pr0u4wZkYfOOWiZ+Eyh2Et9Qgjs7+/H\r\n36SPNYgv7SHAuGyqCBP51q1bjMdjtra2Ihi4vLxMr9ebyzwtskbPqclkEtnPEj9NniPvm6az2Hia\r\nOSv1krkrh2aueu8hzIMHzXHQZI7JmiLnaiBQyyEBJmScSLtKX4m8894fyeZcyRlJKFXFM0wScUmY\r\nN+Y1C0r+12UymcTPxymVi+Sl9IFm/sl3zXmj771oft2uNHWFRaBbs976O10ffd3dPFfLqGY9muPo\r\nOCBQdrGb9ZSi13tJsiMxa0Sn0DFo3mo5rq0XAatvt/zQmR9K//lf+udLP3zuh99+Ct+6yBgWHUJc\r\netvtNjDrZ5H5UOmekvTjOB1x7hklGNuCErwDU6b4FJwHbB+oeOqOSjE2AEmrxtkLvHXYGuMMBBwO\r\nUzPbTX1dDMECeLI64i3x97fbRs33bL6v6LBv5976uzzPYx/o82S8iu4pQNh7vYjOJZ9l7dGlqWM2\r\n313/3zTGRd6LLNOxxhc9Q2wPXeR6+f64vpN1+V55n5SyRUW3BgrwBrKski3WB1w9BvRwKctAJvsy\r\nofKWsMaSpelsY0cEFp4QJERKGTeRfPBYk1JgSEMLSEiAEDrVJkodi9C03r0AybulpD6ADfjUYIWq\r\nCeAyjsuYcrs1bdG5ML/eL/ruzRZZn0UWSpy+w8NDrLU8++yzUS71+/2IAbzxxhtRp5MYf5PJhG9/\r\n+9t85CMfYTQakWUZly9fZmdnh52dHZ5//nmccxwcHEQ5NxxWMdOHwyHWVh6VJ06cqOKGt9vs7+9z\r\n4sQJbt26RZqmTCaTWI/nn3+edrvNtWvXKIoiApXj8Zh+vz+n3/55Ku4LP/VTv3TcDvrdNMadrrud\r\n4g7VzkMTkNB/5fNxyvxoNGJ3d5dbt27FASJo8M2bN9nZ2WFvb4/Dw8PIuNjf32dzc5NXXnkFH3LG\r\n4xHb29vcuLHJcHhYg0FprHMFTJRxZ1qAicGgT7vdi0buaDSKjJbJZMLOzk4E5GQQC0AjE0J27kaj\r\nEQcHB/Eaif934sSJCJ4Nh0N2d3djAo08z+n2ezHzptxLFJh2u83GxkYELafTaUTFxVBPrGV7e5vd\r\n3d0YmF9ALkkUIPfsdDosLy8zGAyiUiHgQ8VCyyI4IEbweHw0CK1mvlWss6p/K9fSOpaipXYJFmZo\r\nwFaJiwEFwvijrm7aDVzeVcfTkj6dTCaUhaUoBBR2iv0mMedmscvKcub26VxSs6LqXWHZfRUjLoT4\r\nOYRA4hyZAoZFmGLmd8zlswAEYvDoNtPtVRYAkqCkVd/fRWZeNc7mj6pvqncN1sf2EMBWjGIBMoXV\r\nJcwuAV/yPCcfTfBlWcf5c6RJQuKSiqFpbM1PMrVVFOqsxFVMQGssrmVU+x7NmKpdvrRckO80wHic\r\nTNJFg3sSG6Ip/HVMNA3gaLBPnlmWOSGIfKrriM5InFIxuSrwb74uliTRIOmM1SIAqDUZzlZjrZW1\r\nSJOZe633HmcdwQeK2pV0OplGdqsxllYri/0nC7e07WQyYVrkVdbvLKXT7dDutCO7LhDIi5y8yJnm\r\nU/Iip/RlnWG8il2o204AOgHpBNgwxjAejzk8PIzyR87XIFpkg5ezbMSiRMzmnZsD32S8y3iukjLN\r\nXG3TNDvCnqsYqRXTNa9lsx4TWn4d5zbeBIr1tdLeOnGKGH4auBNlppnJXQO3GizXz9HjU9pPztF1\r\nk/ofNxcEMJQ66n5YdL/mu+s5uUiO3QkQaLoVH3fvpozXbbWovk1G4XHXSztqgE/mushduR/MEpE1\r\nGYKLxoMeL3ozSeScbNLkec4HP/hBLl++fNu2guOZf8Loa5bjXLGMqZl/5u6Zf+vddfvPfuKfDf7F\r\nf/kvVi6sXHjHAzzJ5pjIKRm/sh5psDa+g5kPKbCon4F67fFgcwiOwARrDNbkmNJhbA4kmGCo922Y\r\nllX8WgxVjkxvsAZsCNjS43DY0lTucBY8JZZqzaMoK7CwBG8hYHC30bPvdMj7NA25Zp/LeNOuTHJO\r\nEyjXRa+r+jvd3hrUWiRT7sQEfrcfuh2agJ7IAg1CyzrUlHG6LW/Xh7ot5b5av1gks3XR95f/NejY\r\nfNYPun3vHW/jALAl3jgCBmMNxsHYlBgCzlTeO5W9NFv7JGGlNQaMr2woG6iAPl/jTfWWRTDxWlNv\r\nbJhgMb6qQ2lyEgwERxE8zlUxjrF1vHVzb4wddwCMypzMuSqMjTEEUwGApqRK2sn8fG7Kgbt5RvPz\r\nIrn0ZkpTLxW5cuvWLfr9Pg888ACbm5uMRiOuXLnC7u4ug8EgJuIAWF9fZ2dnB2Mq+fbggw/y+uuv\r\nc/bsWfI859atWywvL/P1r3+djY0N9vb2uHDhAm+88Qbnz5/nT//0Tzl58mT0alxZWaEoCi5fvsz+\r\n/j5nz56NNk2/3+fChQuRXV0UBTs7O5w5cwZjKjv53LlzbG1tsbRUETPW19fvuFn8bi5vlfkXY/7d\r\n7sa3G3CaDXPcgJTf9T3FiMvL4rYDuckkbA7s69evc+PGDW7evBnZa0mSMB6P2dvb45lnnmFnZyfu\r\nYPb7fbIsYzKZMBwOWV1diu6s4h4rcaqyLGM4HDIejxmNRuzt7bGzsxMD7a+uruJL2Nra4o033mB3\r\ndzcCbLdu3eL69evs7OzErHRCdc3zKq23ZMtNkoTBYMBgMMCYKsmDBhnb7XZky8hu32hUAZaTMifN\r\nMpaWl2l3OkzzKbt7e+zu7bK9s0Or3SYQSNKEALUB70nSlFa7xdrySlQaOp0OKysrrKysRDBxaWkp\r\nJr9YWVlheXl5bmd0e3s7vo8Yv2L4ttvtmApc958c1feyaIXIfpqNEUtRTDFGrpO7qIkaFhutUoS9\r\noo08+R6owb9izo1XG/LaxWNRwg+JXyftocctMAem6QQ50VWDmXGu2VRihMq50kfN+TAez9q+Gb9N\r\ns2d122sAgRQwhqIsmOYV0FOUJUVZMs2rsYWpXC6zVouslWGdo/SeoiwZHwyPCE7dhouYRdrFmmSx\r\n65G0t84GLECkBs+lLY4D/zTQ2nR/MsYsZC7rQ7vQLzIwtbtTtJQVyNfp9CBYZokf5gGeLJu5EGsh\r\nLu1gac0Bv7PfK1g1SebBbGGWyj1cUo35uSRBqh2k1ZpghjxTNi6amzjSPxIiwZh5NpjIrV6vNzcP\r\nBNRsbgRp4FC3hQB/+r30upCmMwxCu1MuMmKbfWutxTSAZd3O8k4aHJPzdP/ruak3GoS9pMFKPdag\r\nkuMCdmuXUGnjmQv9TCbptl60Pur3FSN1ETiojdfjgKzmGtxcmxddq+tyXNHzdtGxqK2a99R1Ow4A\r\nbNa5+R6yGXNcfRbNSd0fesw1AT4Ju6DrrOeOJO4Zj8c88sgjPPjgg8e2l5QvvfAlvvzKl4+69i4A\r\n+e6m/e8G/Etdyt/6+N/q/upf/dWVJ88/2bLHMBTebmmCe3DU/bu5EdQEQBbdU871xpIj4wNKU+lE\r\nWMeUQChznEmi/Dau0jkcYMoALuBDSbAQbLV5ZQzgICfHETChlkcGvPFYHN6AJbwjEbHEFVS/X1MG\r\nwOJYl832kyJAoZyj5bmskfoZTWbb7dr/vVa027gG7kWXaf7WfO8maKjbexEYqL+Ta5vtqe+h+6L5\r\n7OPspPdL3/z5LgFMoMQTTImlhApDqjbUQ8U1NhI2qfYYqLYd6jFW32luDFETKky8Gb6obDIJImhM\r\nBVQFAi7UbFNnCOTkVEkv742xO5VAai05Fld1JVMjbE2Dt1QALYtBu7cCTt1OPtxt0W6/xpiISUwm\r\nE1599dUYeiBNU5aXlymKgm63G0k/gqPs7+/HxKLiijsYDGJswM3NTdbW1jh9+jT7+/vcuHGD06dP\r\ns7q6yvb2Nvfffz+dToc8zxkMBgAMBgOm0ymdTifmVhB9rigKOp1OJCKUZUm/38c5x8rKSqyPMATf\r\navu8G8pbBf/uuHt7p0HXVESahlcVFP+o4S2V1kU3vhgmTaOzufMpIIy4HspRliW9Xi/SU4uioNVq\r\nsba2xtraGoPBgLW1Nab5kNXVNdrtDta6mim4z8svv8Ibb2zS6/UioDidTtnb22M6nTIcjgh1zLi9\r\nvb0IGo7HY7rdblTuQwgcHh5Gd7hOpxMVjBCqAJbj8Zgsyzhz5gz9fp9ut8uNGzfI85wbN24QQmBt\r\nbQ1rKyZglmVsbm5y8+ZN3nj9OiZAO2vRbXdYWVpmOq6Azel4ws3NGywtLVUuwlmLfrei3vZ6PQa9\r\nCgg9e/Ys6+vr5HlOlmVVLMQQYjpuyZojhmfTRclaG130JpNJdF9LkoSlpaXIKhuNRkwmkwgMzoAD\r\nHw3vqo8rgGCaj+l02hEYLIoaFEyEsVFTzsO8258AF9ba6BYkCpyMJRFk46GJzEt5L3H/tdbS7/cj\r\nsCIgJxDBCFk4rXM4Nf7z/5+9Nwu2M7vu+357f9OZ7og74DaGRgPd6IGDSUomRUWhZXYil0IxskNX\r\n5DylrCqn7Kek8uQH26VUVHZeJFcllXJe4hfHFTlWXDSlUkhLdBSxSZHmILLFoUl2NxrdjUYDuLjA\r\nHc70TTsP+1v7rPPdA6AnqgkSG3XqHpzznf3tbw9rr/Xf/7VW424Ls8yiVUObNtaSdTqkWUZRjgMg\r\nol0URWnb398P7mFSNLhQldMA8mmWhLivj0ajuxrW1hmSKKbX6RLbxpitao4ODhmaI8q8CODv0tIS\r\nK0vLdNLM8xtqR2a8a/zNW3t0xp0g0DGNURFHuAqc87FE/H0B6/usrKdza1raKEa0BJQVlozMmzcq\r\n8NrGTHhuO3MTb/eLlmPafVMr3bO6tLHayC/jcLV/XxQFjoo0jQOQqY3/soqCW2236zdNyTqd5zm1\r\nqSjKmtrNs5B6vQ7dbkZeTCkKi6OmKGryYoob1ZRVQTpOGU9GdLvdwOiVwwOh6JdliQGKPKduXOri\r\nOCaOPIvTwIyRWRRUzd+8AWKTRv7KHBQAS+KgagBQ1pkcosjGK+2TrMHCZBYGt4RZkDUqBzke4NJg\r\nrk+WAjJGBJni9x/vBiNzAAxRpxPAN5jtZ7ImNTNt0UvPL83Ga7O8RCaJLJX9UOKvinwZj8cMh8OQ\r\nSEXYgxI+QYO4sk5EzrSNTv1ZmwnSBk7axqLMMw3Ii+xvA72L6tTr6I2u0UWftZmBd9ID9He6TffS\r\nXzTzt91n7foXfSbz5k5F6pR5Jf0p95X6tHv2vYpzztuCb1FZfTO/++VHfzn9rV/6raUnN578kady\r\nNMbMHfjUtU9MJrGMhXEua2wwGHDixAlOnDgx97t2nVJsBUkU4como7txmNJhIkhtDBEYV+GsT+Bj\r\nqaldCSQ+yB/4mFpIMqi08emtSag9vCe3qytifED82DqgqedtFs2W1nuR/kwDhIvAvjZApd1KRQfU\r\nv7sT+0/ut+ge92OR/b6tD4gcbOsbi2SQyGatL8u10ldaF23/tn3AqMdSg5Dt3+r69f7QPnh6UO7T\r\n4gwcxdCreXVymWl+gKkjjO1QVwZT12Dr4M1irfVxnN0sNqohBufdeCMb+Xh+snYNjNMR1hkiExOb\r\nOJBWKiriKKYqHSv0GBYFLoGorjBRxEbvJGtu4N2RH5Q7FAOmwjpDXjlSa8iqioIpFQZbZVg300Hf\r\nSXn6TtTlnCcYdLtdptMp29vbrK2thdAbxnjPwjNnzgQyk4QREvxCy7UnnngieAA9+eSTHB0dhRAq\r\njz76aNA/AT7wgQ9Q1zWrq6sMBgPiOGZnZ4e6rjl//jzOOZaXl4OstNaysrISZN+ZM2c4OjoKIKC1\r\nNnhZLC8vzx30/zSVtx3zTxsXurQVFP35nYyCNjChr7+TgbC6ukqapqysrASQRECf9fV1nnrqKS5f\r\nvsy1a9d49dVXQwILibFUHU3Z3Nyk3++zsbHBpUuXuHr1KleuXGEymXDq1ClOnDjB5uYmcRyzt7fH\r\n66+/zu7uLjdu3OCpJ9/P0dFRMNrFGBMATMeBE6VAB/mNY89uy/O8AVj6PPTQSeLYNtl6x1y7doOD\r\ngyN6vV4T569Ht9snjg9IIqCuKaZT4m6XjfV1lhrfelEWpC3OOTppGoxaCwGslNTbYmTLwtEuvc65\r\nAODFcRyMdQlef3R0xGg0otfrsby8TLfbZXl5OcQhFGaSBrlkHGVhCghWFP43vV6vcbkWZoDD2hhn\r\nIhyWKDLH2FwwY8uJ23KI8QVz7r/UeXCBnEzG0CTEEEBDsrP6pBmmidlVURReGUw7md+YnWkMBINr\r\nGF7CqyqqEldA5WqSWrHXjCFOusHdVsACDSTkeT4DKhtGahRFAQQrC1kjNXk+n/naG0uzGHplOYuJ\r\n5sEvg60axlISkdhk5m459cHpI5pM1hV00y79Tp+km1D2S1zpKErv3j4eHjEtckxkiZImTp8BE1mM\r\nH6lAiLNR5D+PLNXU4RzgPJNCThpt40Jw+9aBB/NLD6jeIP0WAAAgAElEQVS52lCVLmyQvX5nodBu\r\ny5JFcqjNYNCHFFLa4E9bps3YEK17NvbSdDrCGEsUx6RRhCGirHJMXuGowcziMCbJDGARGVFXJXXt\r\nKEsfIFjWYpL6eWTGNdaCcxUg7NSC6bSmKPy67Pf71HUdAEBhIxljmE7yQJmfjKdhbvlTs5R0kIW5\r\nN5lMGlfznCKfHWD0+336/X5gmmmXKDngkNAFEtLg9u3bIQt5t9sNTGc5bBCZKZs9EFyA9cFPnMzv\r\nI8YYotgQN/1aVVXj8uca9xiDUYzOpDmAkDnQVgIWMWc1s0vHw9LzTO4tB0FpI3cl6YOseWMi5eJc\r\nUhQVZVkznXrQ3Qcj9iCztVUAm03DOnLuOPi0aH7q7/T+u4jVp/tB+ule4Gf7vZRFgKR+v0jp0oDG\r\nIuCvfa1uc7v9dwLv5Ds50NFyUYzmdr3t/lwkE9qyph0wu72+ZX96o8XxxhTUe4GW9ypPnHgi+if/\r\nyT/p//Un/vpfqEmngb+bN29y6dIlzpw5w9raGjA/3uPx2IduqWs2Nzfn6jk2r5zDWUeOJYtrXAVF\r\nk4gJV1FgiXFgLBMgcpAaQ2QijANnoXIG62IiHJE1VICrIZEEP1HEBB8+K44SXFXhYo8HJmaWaOyt\r\nFHmWNiO+LMtjSasWAX8SIF0bYXrPg9lavX37NisrK0FvEt1Vx1sUL5tFQNT9WBaBczrpzCIDsS2n\r\njDEcHR2FeJ4wA+80GNcO1zCZTIJ+LvVquVtV1cI4g7qeNvAnn+lyv4/RT3NxOEbdQ/7l9/4l/9uX\r\n/xmT6JBetEQxckQxpB0osUzzaQgN02ZtRViKoqTTkGOs9Yk8qqpJbEMOlaPKoZt0wEHlKmxiKauC\r\nyhaYylCnMSkJZlhRx4b3nfwQ/9Mn/kdOmrPvYg/9eBfnfBioyEUUieH6wT7d3T0m1YRqfYVO1Atr\r\nWMgxeq+Dd3f9GmNCpl3w8kcONySuvOi4gg+IV2N7f5HrtZwTkpjIS5G50+k07D8iW6UIniJ1i+zT\r\nB+Ji++pYhTqRq25T2+vgJ71En/zEJ37jbhfo5BWLXsL0kA4PzBFx62MewBNwQlz4impmvLQnuabW\r\na7cq/ZJ6xC1V4ttlWcbKykpQYjyQdsjh4SHT6TQAhhsbG4yGY4bDEUuDZba2tknTjPFowng8YTrJ\r\nSZKUs2ce5uzZh0nTjKIoGQ3HXL92gzhOGI/Hof0adOt0Opw8eZKlpaWQzebq1ascHByQpimrq6tM\r\npkOiyMfmStMEjMNGhl6/y/r6GoYU52A6zcEZ+r0By8srrCyvsr52grXVZVZXVun3enSyDlma0ck6\r\ndLIO3U6HleUVup0OibB0krT53scP04H8tUuDMCqFGisJVISJ4pxnBuqgwzIPYOaGKmMnMeM0KFDX\r\nNVmWkGUder0uWSaMO+/O54VNw6JyjetjlGBNRF1DWVTEjVujgBriNijB9YUtpOeKgJqeebRMFHnm\r\nVFWXVFXzqkvKqmBpaUCSxiSJzzpclDnTfELZJByZlqVn8nU79AZ9Ot0uJrLkZcE0z4nTpInnADWO\r\nqq6Dy2xRlUSGOQVcryFRQIGGbToKsSu1MVC7iqouqZ3P9OuocdTUdcVgqU+cNBmSjXdbqqqSosgp\r\nypyVpVXiKMYan/HVhNh9CWmSkTfzzhpLXTnKosLVjk7m55ZJLJ1ulzTLwBimec54MqEoSxywsrpK\r\nnCREcYyNfNBGcSmeTKcYo8FIceedxW3Lsg5gFPuyDOu70+niXHVMIdfypL1hyjzVCVq0sa7de7Ub\r\ntpZjWk75uJTHWc+BWZjGRLGPA+Wca5gktZ/jqc/qO9u0Zi6kWZZ5xpxpwD0qP76uDECfo6LbzYgi\r\n47NGmxoatkpVF5RVjjUzw62ddTeOY7IkBeco8px8OqUqS3CuiclomniOkMQxWZqSJolnA5Yl+XTq\r\nM8O1jA4B7sQo1axnHRJAgDFRAhZluxYwUJ+GyrP49X1AWRYkSUy32wlZp8uyCJnTq6oEXMhKHUt2\r\n4aqkm82ULj2uIv/k/zJHtcu5yDk9N9qMVH2t/F6DbVUJVVWHDNqmyWoOhrpyDI9G5NMCnCFu1mSa\r\nZqRJRhKnRNG8IS9tkD22HS9Uu45L+6XNi4xFkfciO/V7YW7rflm0R2t9oQ2OiWHcBiNlzrY9AKSv\r\nF633ReVOgL28pH36r37fvv5Odcm99AGCPJNmT7ZBU9EXPvCBD/Ce97znrs8Cjdvvy1889vzH3IBb\r\ngOWdwMDSlHNuv2vdNfOPP/6Pe//8V//50nu23vMjZ/vpIv0iTNxr165x4sQJdnZ2WFpaCge2ctiw\r\nsrKCMYbd3V22trbuWu9r12/wLz73Bf78xiHb21v8yXde4g//9D+wW2c4Z/g/PvvvOdHvUMcpv/O5\r\nP+G57z1PJ45YXV3BYXjxxh7/8o++wItXrjBYW+NL3/oun/vy1zHdLuvrK0TGceXmkN/9f7/Md3/w\r\nCqsba/z5s9/lj5/9Nu+5eIEENzsRegvFGO8F8K/+1b/i5ZdfJkkSTpw4Eeao7GWL1oywpa9evcr6\r\n+jpASDz03e9+l3/9r/81ly9fZjgcsry8zOHhYWBEiC6l9f26rnn55ZeZTCYhVM39Dizp9SwMvCiK\r\nODg44POf/3xgtOiYfzBPfqiqisuXL7O8vByu0XGnjfGxb//dv/t3/Omf/il17WO+fvazn+Xq1auc\r\nPXuWz33uc7z00kucPn2aP/iDP+DrX/86xhh2dnYwxh8+f/WrX+Vzn/tcCJb/mc98hh/84AdsbW15\r\nrwv1THc6uHhQ7r+SFzn/9tl/yzduf510ELPTO8NqtsHNo10myQGTYRnWqzCuyspn/nXOUZuSss4p\r\nqpyizjExTIsxJoaiyomnMV07YGOwyVK8xPlTFzi3c47UZrgCurbLuBwziUvqvMRQUQwq8oOKX33s\r\nk6yk6+92F/1YF2OAPMLFMMlziteuUL78Kqu9JZL1FaydAVT3YrG3yyICxDux3jWArPV7mB2Miw4n\r\n8k7fV+t8AvSJTBRdVBiA0mat//V6vQAial1bPGFg3runjTXJYatmVYtdLbrGIhb2/VTeqBdcu7yh\r\nmH93O/nX8dJ0QwTFTVvMCv0XPBuq/Z1swDI4iya2FFFsjDEBLRdwRNhswurrdrscHBxw/fr1wGhb\r\nWlomTTP6/QFpmhFFMdZGxLEHpZyD0WiMMZYkSalrR78/YH39BFnW4fLly4HZ0e/3Q5B7AZhu3boV\r\n3Pgk+YcAg75vywCIghhBM9BiZXmTTscrvZJsI46TxrhwpNksC6YYZmIsiwDRimDb0JOFK0aINlCl\r\n/4WZIi9ZlOvr63PZQPWpvY7tJUxMLSSkLXk+xTlRuuS+M2aLMR5c8THTPANGXmCJ4uPgGczif7Vj\r\nOrXBnV6v74ExXMMw9OBYXVc457OJ1nWFMd5VyGfhlLZBzbxh2D5Jbxt+UuQ3sTXHAD9pv44XqF0/\r\n5Pe+b00zXwhtFPZiXVf4gL91aLsxBOCjqkpcbUOcRd+m+cQgM2W3Vmt9lkik08uOsYfaAIeeV23w\r\noXazbMR6U5Hnb7tRtq+NosVG+CJjuw1G6NNyvQ40gLII/JOx1fdrt3G2fjxTFONdxoxtXM4i50Fn\r\nFR9QQMR5oMOPnb+VgIsuzNM4tjjn56fPlG2wFjyo6nAuDnNSb5CyPtPIM1cjG5EmKWniE4z4JCIe\r\n6PXgb0QcJSGZi8ES2ZiiKkK97b6Loii4M7ZdgnWYBjnhk4Qgzrng1t4+AGoDMUU5Pga6yPgIWCX3\r\nl7U0t1HWwrqcyU19T1Es9MGGBgNljbRDWsj7NgtHA3B+zs3LYmkDGHzSkoqqqikkoUueUxTl7MDN\r\nzoOOWv61T0Xba6yuZwznNmiu27zoc130mOixabeprQfAvOKm11Wb4XQnhfJO7bpbW/Xv76Rb6O/b\r\nYJ++x6LTYj03FoGq+jup/82Af89cfmbO7dcYgxACF7XzTkqtYQb+WWP59Q/+evbpv/Xp5acfeTqN\r\nbPQXrgnLuItyfu3atXBgIMxg8SDQh3vD4ZCTJ08em38aTByNJthsmUuv32R5mvPnl6/wl598ku+8\r\n+BI//9hZXt4bMogt0fKAZ779Qx59+BEeO3uWfjdhOJ7yH773Q6pslV6UMLx9xIWLTzEqDC+/8gof\r\nuHiOalLy58+/ytUcNjd3uHLtMn/pqYt88Qcv8jNPXKTjI+K/5b4R5sNXv/pVLl68yLlz5/j0pz/N\r\nN7/5TV555RU2Nzf5zGc+w/PPP88rr7zCM888w2Aw4Pd///f55je/yWg0YjqdcnR0xGc/+1lu3rzJ\r\n6dOnuX79OkmS8PGPf5wvf/nLVFXFtWvX+MpXvhK8Wz7/+c8zGo24evUqf/Inf0JZlnzlK19hf3+f\r\nxx9/fG6PvV9LW3aInCyKgq997WvcvHmTZ555hueee45ut8u3vvUtoijiG9/4Bj/84Q955plnWFpa\r\n4saNGwD84R/+Ia+99hpZlvHHf/zHPPvss+zs7ARvmdOnT/P1r3+dw8NDnnrqKa5fvx4IDK+88gqP\r\nPPIIzzzzDOfPn+f9739/MKrH4zFf/OIXefrpp/nWt74VgPGXXnqJjY0NNjc3j4F+cP8atg/KrEyZ\r\n8uXrX+SHu99muejwkfWf4z+++HE63Yy9w13et/E+Pnj+A9S3Ks6tP8zPXPgQZ5ZPc3H7MXqVB1E+\r\n9J4PcWKwwfjWGDeBQTzg0TOPUR5VPHbyMc6eOMtH3vcRDl8/pB/1Ob11hoMb+2wvb/Op9/2XFKOa\r\nooTHNs8T5Ybb9T5rdpVPnf8bLPVW3+0u+vEtBsDhYkM5dmSRZWWQcutL32Ty+k1673sUa5NgK7Uz\r\neb+V9ftOgn9t21Wzoduf63vL/0Wm6j1eQDzxftB6t46nrPU00Wkln4AAiVJ32y6T+rQ+J692OIX7\r\ntbxl8O9XP/mf/0ZbWW0rx3d7aXo6zLsVeWbXzGtE/y4YTC1FTeqQNi36f2h8FM1ljtQDKJPMOcfK\r\nygqbm5v0er2Qmffw8JDxeBziKAlN1TmfqlpOmo+Ojtjd3Q2JLay1IT6VtZZLly6FmGghtl4T704M\r\nUGm7uLHJdWmaYqws7nnmkyyApcFacMPrdGbZI2dAysxQFqBLnl9ANzE029/rzLMyjnoBCRiS5zmT\r\nyYSjoyP29vY4PDwkTVPW19dDAFABfOQ3mi2ojeu2QVQUZQCVjIE4nmW5rOsZiFXXFRrkEhBL3H51\r\nQgD9/HcyCAI4ECcg2a6a+gU8q6oS52rKsgAcaZrQ7XbIsjTcv2xuqcEfmMWi1MJvEUhgcWFs0jSd\r\nE4pyuqFPlzXQorPhasBF5r5uj+5/+X1ZlkzG0yDIZwCkMHgELHRMp5Mm+c24YVL5fur2e2ru+heY\r\nOcCiLCsEPE+SNFzjHOTF+JixDDNwYj5m2wxIledP0ywwpoyxnsFoLAaf3dXV+O+alzURkY2JrGeR\r\nenDteED/AM4q8EG3U94vSjKhrymKEnH30nNRMs7WFcyy1UbH6o9jvbbn15i4oM/mW6bYtR5M9KeJ\r\nbsb2LMrAmptOpyRxGmJQdpvwABhDXkyYTMeBUWojSxTNGJwif8bTUZAfOqSBBjdkLkr/yNqQEA3W\r\n2vA8YuDLmpK5IPJTZxMHyPNheDYJKwCOOJ4lx5CxFYTENCC5d2c/zkbX80Fibeq1ND8PvKxwTYDt\r\nNsAu8kS+8/Jt9tcYzyr2r6RhMkNVleFZvNv1mNFoGEAQ6W+/Pphbg7L+qqqmnQlZ1p1cnyTzCXSk\r\nyDpog9/6rx/nBsxWL+nf9sGEfC5/Pfi9mJ2nWYxS5teP7FFV6ONFL5+Qyc21Y17eH09W0lZoFynR\r\n+to7HezofmzXq2U58ObAv5efOdaOOTCQ+ee4W/tLU46fPv90/Om/9emlv/Ohv9PtJ/13BSVog7tV\r\nVbG/v09ZlgwGg+DuL3JE+k0ODHZ2do7VpQ99bJryyuER3Rz+0sVT/NmrN/jwxQ0uvXCd9zyyzcs3\r\nrtPvn+DcxjK2qLmZW5594TI3bt7ghddeZ1hnrHRWMDHYasKpUyf4xgsvE2cDbt4+5BsvfJ86MpTZ\r\nKltLETf3x1x8aI3vXb7Nzz5+ljhC8gC/5TKdTnnuuee4ePEiS0tLPPvsszz99NN873vf49KlS7z0\r\n0kskScKNGzd47LHHQl+cO3eOy5cvc3BwwA9/+MNwCC3ZGcfjMQ8//DAvvfRSSCTnnOMjH/kIv/u7\r\nv0u/3+fq1au8/vrrfOpTn2J7e5vDw0M2NjY4derUMR3rfi/auM3znO985zsAXLx4MXx2+/Ztvv/9\r\n77O8vMz169f52Mc+xhe+8AXG4zHXr19nbW2Nj33sY3z729/mS1/6UghLdPr0aeI45itf+Qof/ehH\r\nuXbtWuhPsQl2d3d54okngjeVALlf+MIXWFtb46WXXuKpp57i+eef573vfS9ra2u8+OKL7OzssLW1\r\ntVDe/KSMzU9zycsRX7z2DN98/dvEbsDDW+cpzJQsjjnbu8B7159i7/YBH9x5L1s7O+xf2+eDOx/w\r\nYN3gAg+tr/LxwX/KhaULuLpma2OHg/yAp899gpdeu8QvPfLLvDp8nbVoFeNgY/U0lI6Hl87y6uQq\r\n68kmZVTx1OoTnF07w9euf4MJu6TpOp/4S3+D9Xjt3e6iH9tiHFBbTA0VFW5aUK0us3ZmB/u175D/\r\n2deoeylZx+K6CVVsiYmaHcOB8yFi7li/ksHvpCxuu45LvWJ3io3b1uEEUNP6m9iei3S69uHRoudo\r\ng3htfOhu5W6HIfe7bHyr4F98p05po6d3KprZoI1WTY/Xylob4AtxwO7Q+EXtayvRbaBQszH6Tfw7\r\nyUJz8eJFoijipZde4pVXXgHg7NmznDhxgrqu51x1rbUcHh5ycHAQlMzxeMxgMAhteOyxx4IhK2wW\r\nMdYl0Ko2ZOQ7AWmqWvzfxUCa9aEHXTxzRlwOfMZQE4LpjyczxsudAFs5SZfkD2IU53keMuZoA12z\r\naJIkCa6mEtdQri+KgoceeiiAERo4kYV/eHiIgH/yufQBEAADiZcogLHMKw0qSpsEaHPO+cyzCoBp\r\nA9iLQEHNpCsLhzERSZLR61niOA3xuHwg/oI8L0PMtX4/Jkky+n1/bXEwDPNQQBABW6MoCrEMZA5q\r\noLWqKmJmlGMB7ySWjgT6l3HVJxXSPulL+b69foXeLG0CQmzMJEk4PBjPXSfjpllQwvYUwEHm0Xg8\r\npiAPoOFg0CNNY4ZDz0ar65Lh8JCq6jSsNKjrpJkPEUnSZZofhmcSOWCtnUvco+e1JEeoqspnko5c\r\nWAuy9owx4aRNmHAzVty8Ud4G/nQ/t4HAECdSFYkZpgGJRYco0v52kfWpYwRJbEcB1gUE1a70ck8d\r\nPzNJZvNI4g6NR/OyoCgKyqLCGJ+Fuxt7uRVZSyqHAw1yGJmYssxxVU0+meKqWbxMCSPQ7/fDuOhX\r\nWZZMJpOQSUtKW04LACguvgIADodD9vf3Q0KQpaUlBoNBGGNJAlK7QQAO83xKnvt4nFUFWSaHT1Fw\r\nj9UHG35sq7kxknEWoFyD+MLolnHyMjfCd5mMibg/e7lSVU1MS2ZzIoogihLiOCWJCe0XV3SR+Xq+\r\nyB6S5znD4TDEgZpMj+bcqr1sF9Zn40rcAOJ+X/T7hx4DPe/1PBe5rmWnjOFszqVzQJafz/Pro33o\r\nZ0w914+LFDGtRC5SbGd6gOgNM3BXv7+XUqSztS9SRNvKrwbz2rpHG+i705rX5e0qnrqt8n7uL/NJ\r\nXnQ5tXyK3/yl3+z/2nt+LXu3FWAta/UBVxzHIWbwZDIJcw9m+6CwBNryeXZAkPPylav8n5/7PD//\r\nvr/M5aMKuj3+7z/+Cpsb5xgnCcPa4Oox1CWHe9cYFzFb66s8/ZH3MxoXfPeV6/zR17/BiZUuP/vo\r\nBb72lT8jHY9Z6VT80gc+QFme57uvvMa3v/Qs07TiZz/8c0Q4MldQ5wU2fnvJPqRfiqLg6OiImzdv\r\nsrS0RJZlOOfY2tri4OCAxx57jIODg3AIfe3aNa5fvx4Ogc+cOcPNmzd573vfG+Tt888/H0IwnD9/\r\nnueeey4csjzyyCP0ej3OnTvHCy+8wJe+9CUeeeQRyrJkb28v6Fxt4+1+K22bQmwICXIv+7Tsqzs7\r\nOzz//PP8yq/8Cr/3e7/Hl7/8ZU6ePMlwOGRtbY2XX36Z73znOywtLbG9vc358+e5ePEiw+GQ3/md\r\n38FaG7ySvvrVr1LXNT/3cz/H1atXgxw9PDwMNsPDDz/M6dOnAR+k/o/+6I+w1nLt2jVefPHFsIe2\r\nE+bAvWXgg3J/lJgMN3J0k5TIGsZujDssONwfcv70Y4w7E/Z3bzPprnFrss/Vo9dZOVjmxWuXee+5\r\n99DhBK+Vezy79yyvutfo111i4/XKEzub2LSmriZgp0Spw8Y5kYV8cgRuysTs8eLN7/J3PvTf8Jnn\r\n/4C9yU1WBxvYcszqOH2Q8OMuxWGYWAn9ZCgzy5qr4WiI+dW/TH10yP7/8m+oz5/i/N/8BFw4wwRI\r\njMFUBhu9u2u4LdurqmJ3dzfEkd3Y2Aj2iNj7e3t7GGNYWVkhinz8+k6TYE/H5NfxY7Udrb3gtN3Q\r\nbtOifedOe9HdQMCfthL96ic/+Rt3u6BtwLZfmjEgG5A21DUw1WZ9OddEJ1uAHGvlX4pm1sh3AmZp\r\nwE8bNXEcMxwOA0VUgt7rmF+SNGQ8HgeXVslUs76+ThRFDAYD1tbW6PV6wdCKoojNzU1WVlZCUo1u\r\ntxti04jLio5PKEqV9E+atlkXM4MiiiKGR9PAANKKb8gcWUxJk8Qz2By42sfrMhhcXTOd+DhedVWH\r\nmG4GmpchjiLqqqYqfWyvOPJxAbM0JUszyqLgxvUbHB4c0u106Xa65NMpB/sHHB4ckqUp49GYsiix\r\nxjSx4rz7YBInTMbjpl3+Hq6uiaOoiU2YYaMZSKfZh2IASAwTrdSLUeoz00UNM3DmLi1AKhzPnKTn\r\nYRRZqurOblrCSBIXyUWGaJx2Qvs10Kjbr9ug3S+rqsIyH6tA2qgzg7bbr9ePjuOm277ofnr9hMQP\r\nzs4YoAoAjqwlUYCTlT5q1l3I3lxOAzAiALhmp0qf6SQHMi7+GaMAXurnl7Uiv9dFbxCzJBczBrJm\r\nculDiTm5o8Bi6ad2/7YNG/2dLu0YZ/rEa6HMUyB2HM1A1rZcFWVe6tHMThlDn6RG+mTWHsmA7mrP\r\ndDTBjbTlAlzVYW5rQDSO48awrIOsFZaulrFZL1NM3fm6pe36N+1xkLb2+/0gd2V+SZzLdmZUKSIX\r\nI5v4RDCVo6ocdeUTsJRFTV2Bqw2RTYijlMgmGBOBs4AlbWKGyhrXrvbtTNDS51o+6eQpeuz1OGpg\r\nQ2frraqKJO4gLLwoionjBM/QAxBGuGbFeuaetHc0PgqZgsOBiJ0xvSUhgD5sEZkihwu6b9tt12ui\r\nLVva17eZq+3Pdb2BGWrANWksbGSJ4ggbRR66Mz5Dus+WPvtXO/9Z7ZxPEnSXci/wzcY+DqmxjVum\r\nAWObwwNjfMuaz32bZt9h8Hut6o+2XnSv+8v3b5X5J/ed+79m/rXcgXHQT/v8/Y/9ff7F3/wXfHDn\r\ng8cOgN9CGQH/M/Dzb6cSDa4659jb2wtGgKxRDcbqQ0Nh/rXHAgh64KNnHub8Up+HVgZ84OJD7Kxt\r\n8h89cYGVLObUiRPsnFxnKY1YX1lhc2OTDz11gb5xdBPDiZVlTp3c5smHH+LCyU22T6yzsbHKz77/\r\nKToG4ghOLK/w0M4pLj78EBdPb9KJYrY2T7Kz0sGUBURvPYSiyKSdnR0mkwnr6+s8/vjjrKyscO7c\r\nOS5cuMD29ja9Xo/HH3+cra0tNjY2mEwmXL58mQsXLvCxj32MRx99lE6nw9raGisrKyGDYr/f56Mf\r\n/Sjb29ucPn2ac+fOsbGxwSOPPIK1loceeognnngCgFOnTnHu3DlWVlZCfLs77Y33W2kf+GVZxtbW\r\nFo8++igPPfQQW1tbbG1tcfLkSZ588knW19c5deoUg8GAD3/4w5w8eZKLFy+yurpKr9fj0Ucf5eGH\r\nHyaOYzY3N4OX0Pb2NnEchzF83/vex8bGBktLS+zs7DAYDNja2qKuaz7ykY+E2LdxHHPmzBm63S4f\r\n/vCH2d7exlrLY489xiOPPHLM+6l9MPCg3L+lcGP+5PIf883X/wwX1xhbcTQ95HB0wN7BLV69+RoP\r\nPbzJ1773TXIm3Lh1nbHLORje4rAY86VXvsRyssSo2Oc7l77FSweXOHB7pEcRZ7c3uXZrn+/vPo+J\r\nLbdGt3l9/xa7hze5dXSLF/dfoZ/FfHf3EueX38fnXv4Cw+om0TCjZ7p88vFfY7m79G530Y9xccS1\r\nI3GGGMtkMqSbOg6+8xz5//Ul6qGj+i/+CtGHnqTYPkGU9kgAU1bYyNu0vAvrd5Hbr7WWg4MDXnnl\r\nFVZXV0NMvkuXLoVD6cuXL/ODH/yAjY0NhsMhV69eJU1TXn31VW7evBk82p5//vmgZ165coWyLH2s\r\n86aI3aCz3D8o8+WtMv/uCf69kRtr40izU0Rh04PWNgCcOQ746evaxnv75ZwLrm4BuIhmQZAlXXmv\r\n1/NMmPGYw8NDkiRhe3ub1dVVNjc3Q1ZJYRw551l3PttsHdBtYTkJc0q7sIkBKxllxuPxHJAUsryq\r\n53HM4kgtYgpl6Szgfbv4Z5/19yLXQ6lb2qkZXXEcc/PmzbkMPrLYJeHAjRs32NvbYzKZhCDbAmjG\r\nccz169dDwhPpA4m9qBX3mZvizIUvSRKSJqi+dhvUz6AXvQaXpa1RPDOwtPE9A4fm3Tnb8zCJs7k+\r\nabNYtLHfdu01xlDRuNXFMVEUNwZjIE+RZpk4GwbjUQzXunYkdhYPTZ5fg3Nt5knbLXHRqz2f9NiK\r\nMA0AWZwGkE6AgbaLpgBpGrgWt+S8ykPftxMDSHYo6VcBbDUQtLzcVyfVVROLsApt8eNuGlfJuHGV\r\nFPCloqinFGVBVVdUdUXtmmQnrqKsStIswViDsfDF9xcAACAASURBVAIy1OG6qvbgm573sm4COBfH\r\nx2SO7nsNxrVBvjsBjzIeAEkyi5nYBluk32Ss9PzW4I4GMPVasNZSlfPJHmbApAeSqsYNWMBZYWLN\r\n4uXpzK/1MYAv7aZhfko7BeyVGKHC1JT+kPZba+n3++E3IY5dY3QNBgP29/dDv2nWr3zW6XSJoji8\r\n2m7nVVVjTAMSRjp+qGfA6YQ78lx6rGWc9PyW9VLXdUgKoueOBjH0els0TnGUzo23rG/5v8xBHQRa\r\nWJWj0Yi6LubWrWaay5prywJdtJu1Bp11wqE2qKXHUO/1eq+TZ2nP53YdtTvOytbyTf9eF3m+eMG+\r\nqMs9Dy+jxYlI9H3bbZ/rC7M4UYp8rw8vF5UfBfinXYD1e2ssn3rPp/jd/+p3+eQTnySJ3h4brSm/\r\nD3wC+D3gH7zVSvQzyLzf3d3FGB/LWdjmsoeIbiXzt+32q0Ecay3dTsbWWp/t9T79bkw/gY2VHh1b\r\nEFEz6MYkNia1sDzocWJ1idSCbfSz1EZs9busZx3S2NLvdFjqD4hjQ2kqDI7EOtYGHVb7PRLjY7qu\r\nDHxCEWsdbyfhB3gZtLy8zOnTp0NYGmstvZ5PWrS+vs6JEyeaTO0ZeZ5z+fJlVlZW+MVf/MUQ4kYO\r\nrEXPEHdR2bu73S6DwSB4wmxvb9Pv90nTlI2NjaAjS7KP9vjdj6UN+kkxxgS9XvpHDjj7/T7GGHq9\r\nXkg40+/3iaKI9fV11tbWiOOY5eVl1tfXw96xurrKqVOn2NjYoNPpsLGxERj0Ag7KHnjy5Mm50Eky\r\nJpLcMIoiNjY2QoIWvYfpw82fFHD2p7YYcAby7pSbh7tkNiWuY6b1BNcpmbghBTnXblyh7sBovI+J\r\nHRNTEEeO25N94l7M1Wt73KgPWF3fYLOzyXqyRjGt+eHRS9zev8kkzRlNDjmcHjCNSg5Gt5m6IWXm\r\n2Lt5wEef+HlWTJ9Xblymu9RnuXeCXzj3C/zVi3+FzHTu/Rw/xaU0JdbF2BKqjmH41W9y8G/+P/q/\r\n9jSTn38/3XQFZxM21zaIa7BVhYkNmJoah32b+8dbKe0417Kf3rhxgziOuXDhAqurq+zv7zOdTnn9\r\n9dd5/fXXQ+LVqvJJkPI858aNGwyHQ5aWltjb2+PatWsMBgN6vR7PPfccu7u7jMdjVldX53AS0Qce\r\nyK/F5a2Cf7EGFxaVewVCFOVVG2ea2aINCm38BJZXEs9tWLDY9VgDYtookHolzhzMAAvnfEZa3T4B\r\nCzudTnBJ04ao1C/x6oQZIcwm7d4qhp1mvWjXTHHL1ACMZismSUJVz1NdxSVLSq/bDYa5Tzwxc8uq\r\n65okjWagWhzhDMFNJooibDxLsiAuZRKPT+JHCZgnRmQURcHNbpJPuXlrj9FoxInNDVbX14jThDhN\r\nAsJfVCV7t2+RlwXL4+XAdouSmEGWzu6XTynrisrV5GURMi6Ly5/EXRQQQrO3dPwuMXT9WADIHGsA\r\nOAiAhgCR/iXzQGL61XPGmyjDMrfE0JBTCol9KPfPsgybdj24FEdYA5E14d5lWXF4sD+b/wbiyIKL\r\ncHWFwwVXpna8PmFLLS8vM5lMGI/Hc6w5rawKUC2Ai7BPJcOyXpfa9TiKIjrZAAcevPQ0SH99XVNO\r\npyDrt4n1ZqwNIGaU5xT4Ptnd3WU4HNLv91laWgrMV2sto9GIg4ODBqzwbZE5G8Wyli1Z1iGK4tDv\r\nRVE2466NC8VbNRYaZtC0zqmKmjKvKPMqxN2MTDwHNhjjk1dgIIoW08C1oqzBkzboqpVr/Vnb1X9R\r\n/fK5BrfbDDM5RJDvZMxkvVZVxfr6epB9eT4DkKfThjGcSPa/iLqOiGLLdGJwzsdi9C8oiil5Pglz\r\nV1h4SaLdwJPwXAFwsvNxLsVNGWauscL4lLWtWdGTyWSuz+LYZ24XIGttbS2s9f39fY6OjkK24DRN\r\nQ4zHLO2QxKnqizzEtJSEJVU5A52Thi1dN8lOZTzaYJaWizLeAkhoMFWAWlmPUoRBrvdCed6iKIhs\r\n5xhQIfJG9il5folJKwcEch85OJhOp4xGo5ANVQ57dOIUGd92giG9P2pwXrtjtEFSaYver9vrScsq\r\nqVf/PoliLIbIzPofIDLWf5bMH3Lo376Rk+B7KYxGeQobdUDjmiObqq7mvImdcxJRwP/eLn72d9vY\r\n1vqUc46fOfUz/PYv/zY/f/ZtkfN0+Qbw3xpjnmnu8bYsP70GYMb+Pjo6mpOF2igQvUhCoiyS5bp+\r\nn3EJqEtKYgyOymZEePfoBIcpa1ycEGGo8L/x/ikGjMOahh0KdGM/X4yz4CqwjkiYonUJNvZHLBba\r\net2bLSJX9HqVz7Wrp14XvV6Pj3/84wvrkmvbhxUig/S9dB9qHf6tGBw/zuVO61X3VzskiO6/9u+1\r\n65rWE3ScLDlI0oczeZ7PHTpr20fq0V4NWg7qMdGy9idtrH7qioO0yPhrO7/CL/zqL9KjT+ISf5hZ\r\n18SxpXTAtCRPHR28rj6uCrLSUGcROYf06yVql2NtTGFq8qqmb1Py6pDULOEs1C4nqiMqazGFwyaG\r\nwpW4qCB1fUZM+Nsf/K+ZuDFxbUhZgdrA/Zsz4UdfDMTOQOUoDNiDEebVPbqf+gWy9z3G8LVD6qTg\r\n5M42lfUhpogib986y7vs9QvM7zXdbpdr165x69YthsMheZ5zdHTEaDQ6Rv5wzgUWOsD6+jqXLl0K\r\ndr/gKpubm6RpGg47FnljPSjvXInvpEBr4/duRbOlYBbDp82c0pukZnBkaXLH00NthMA8CCj/l9M0\r\nMc6kftl0e70eh4eHDIfDEBdsY2NjbsMVIEJcuCS4tLRdB4PXmWm0EiqAhQB+ci8NWmn30fCMypDx\r\nfejAzdgF09y7ItfOJ02QmGX+WWE89QuqrMoA+kk/51NvxI8m42B4HxwcBDbfeDzm1KlTwVAcDofc\r\nvn07GN0nTpzwhnRZUFQlw/GIw+ERZVXS7fvMZDWO27dvs7u7y97tW2RZxvr6Ouvr635h93sekCxy\r\nqubFxMd6LKoynKjqBS99IWBWGxyDmfID9UIFZwamHi/yXV3XxNG8cLEWsiwhTb0yLcyjOPbB/SeT\r\niqKY4lxFWeb0aFhY1pJGCaU1WFdDVWJqGB0ezLHmosZ4cNZgnaEoZ27Cus0COskJvMy5NvOq24DD\r\nMrdEodQMJZnDGpSXdW1sCgaSLAXrM2WX0yll5ddTSuZBUwM2ikhMSuX8SZSJLPnIx0QcjSYcHBzR\r\n6w3J8xLwCSKSJCPLHJ1OSVW5hgXmyHP///FkGID1LMtIkqyJozdpEjhIHEcBZObjiqZRA6YUJUVZ\r\n4coKqhqqxhU5zWaMqgbAtArccep9G7iRe2gZp2WVBgQ1MKJjUrazlZpj9zvulq3rT5JYzQuLT3Jj\r\nAdewIHvKKJ4GEFgynvd7syQ7fg35JAll5XBl2TBnPdiRlzlufERNRVkXpEmHpWWf2ChOEwwzhqiA\r\na6P9ERILSZjTuh/EtVQSjOiEFZ1Oh6Ojozl5KSxYKWtrayHZkGSslLiASZLQybpBfkiMVYlTqteV\r\n9IuAahI7cDg5nGPcyVjoOLECdmo5I2u6LHM8i3LG8qpr1/SzaRJ4SAw+/9dnba6al4QrkDlnGvff\r\niCxLKYoZoEmT5VmSi9R1RJxYBZZPyPOSoqjI85Isy1hdXaUsfaZ03zYfn9DHKJw/+GiDfM65EO9K\r\ngw0aLKhrOYCBRQCHzzbuWdBeLxCg278iYzHWZ033NSiQ39hj4GFFA6wHZ2G9bmZ/5aDnXiUyzT4i\r\nz9TMGanKYsJ3GhSUv8bO4hu3DfFFSmu7TXfSfd5M8YDk4t/vLO3wj/7qP+LXf+bX7+ki/QbLVeA3\r\ngP/dGHP3k+M3WXQfyAHklStXwlrXOmkURUwmE5xzXLhw4TjQp+p0zoN2FkNdeQZF7BxUBXWcQnPm\r\napyBKJVKMA4qa6kb3NA5DwAKkz+q8evZGIyLgdLHsHYOY6PGRd0RGYt72+k+Zs+iwT6YHSC1D660\r\nnqzBOum/RX2l34uOoPcwqecnEQTUgB7M+lvKIjukDfzJ3iEHdPp6fZ3uszYAq9nkul5t1+j2tcdg\r\n0XM8MJ7v72IwuMiRFAmrds3vT6XBZA4TGypT+gQRWUJkKqzz8ySLDLFNcNSk9QoUYLIOdQUmKulH\r\nCcYZMruCszmGFGsMrqow1hKlMWU9JIl61GSYCrokWAy9OPOyz4Jv0IM5dvdicDHEBqZjy/SXPsRq\r\nlDAZlwzW1+h2M8AS183pko+J4tXLBg98t4omH1RVxerqKltbW1y5coWtra2gV58+fZosyxgOhyGG\r\nbL/fZzqdsrW1xWg0Ik1TNjc3ybKMK1euUNc1TzzxBFevXp1jOQupS4hAD8o7W2J9YgjHXXTu5bYi\r\nbLu2O1db8dBxmzS7gXim3LeND+BYRloxvIRRIpucGI5yjQBH/X4/JJAQAEnukec5g8EgKFQ6sKTc\r\nL8/zORBP7iOsEFkMOq6VtF3qEDcJYWLoIOhlUTcuuTrT5AzkKYqCKDINo22mcJnaG1L97hKHh4fs\r\n7u1x+/ZtJD5hVVUcHBxwdHREr9fzrs3Ly0zynEmeU1QV3X6f2wcH9JeWOLG5yfrGBkmWeeru9evs\r\n7u2xsbHB9s6OD8I/HvPCpUv0eh74G47HVM5hoogkyyjrmjhNiZKEOE1JOx3Kuibrdsm6Xeq6DizA\r\n/cNDb8RPc9bX11leXg4AUFmWDIdDDg4OwpzSiQ9kHNI0ZTQ6oiq9u2hdgTUNo8UmJDE+Hpiad22w\r\nRtyGNfjir/NA46DuhXGME0sUm8BMLMopN3evh9g5aeqThRhq4qgBfMvcA1fUnh2AIbJg0xiIKZMo\r\nzFtJ9KDdC4+OjsLzCvAsAIpmVWm3P3kemf8afJS1GGLk2WYeG0OcpURpQpQm4RknRY4pZ0kQ4jim\r\n0++RdPw41WY2zz0AUbG7u8dwOKbT6bC1tUWv12d1dZ3JZMLNmze5ffs2ksnUGOvjrzmLNT77cmQ9\r\n0BRZz/wwGKJYJckREL2qKULm4cZIryCfFNSllwuD3hJRBJEBrI/t5Zkafl91Zib32gzkRS69i4xM\r\n/bfNDmgz+9rg32h8NAOfopnMrRrwtT8QcFeYWz4BC83vy3KWRMezIWdtrKqKvVvXA7ja6w3oZglZ\r\nJyLNLNNpwuHBEIOjrqEoCyZFzjif0M0nZGmH2tRh/gQX5TgiNikmjignHsiT0z+Je7q0tMTa2lrI\r\nHKnn5XQ6DYcmMi/1fiH9lqYpvV4vyOnhcBgAQJEjQHBTk3iu3V6HKLaUZTfM47IsyRtQ0WcvNtSu\r\not/vh/kkgKmMR5qm3Lp1K8ggzfaTft4/GGOsI4oNVISDGkeNjWAy9cpOL+uEUBBFWRAnlm5vCWtm\r\n+9b8PALrLFGcAindXkZ/0GU8Hod+yPOcJM6IrF8zUsdknJNPvTt4WdTs3z6k1+uF5CmdLPXx0oYT\r\nong+oY0eAzmAkfUhslEfwqSZnQvZINeKHuADQOMBETxTzroZSJZFM2bhorWU53lI32GMX7+1+r6i\r\nVDbHPAhoDMTJPCDXvk+sQc/mJcikc46sYYLfCUjM6/mERO3r2i7MurQPrN5qMcbMHr0paZTydz/8\r\nd/mNj/8Gy9ny274HUAD/DPiHxpiDd6LCdmnL3pMnT1LXdQgsLutS1ku/32dnZ4ednZ07gn/6fUkB\r\nkcHifLiO2FICSVRhiXD4QxW/LzkiY3AY7x0glVTegPNRAxzOL3sSC47mi7qkiBJiPOjoXIWz0dsi\r\nxmiQR4N9bSBQXy/XtMGhNoDU7nsx8nS9WjfSn/0kgUrt/V0zT9rXwQxE1SChGMGa2df+3SJwrl2/\r\nBnmln+/khaXBw0XP8aDc/8XhmEQ53SjxZgQ1rhM3TPUa65zXa0uwiQ2JnmITQ+0PqUxtcElNxRFJ\r\n1PX7cW3A1GC8TKQEE6dEiWFMTdeAiTLAYB1UsaMiJnI1kfMHe7n/0YN8H/coDktpwJQ1/ZUVuvUy\r\ntTWs1A5X15goCrpMjWvcEhyGCosF3j0ATOxSsR87nQ6nT58OsqauazY3NwPhJI7jQNw5c+ZMkIdi\r\nJ4vNsr29zXQ6JY5jVldXfT+1sJ57eac+KG+txG1lGI6zU+5WjjNZZkqKPu1qK7lyXTEt54zidlsE\r\nUBMDTYwy8PR47U4MBPaJsJ1kM9YbbfuEXjZYaXen0wnASl3XwRVUXEwEkZZ26Y1c6tGLQoOaGmSU\r\n3/iMkGVgOek+n69Xx8MDaz3T5dVXX+XSpUvEcczOzg5xHDMajTg68sHgr1+/zssvv8yZM2c4efIk\r\njz/+OFeuXAl++wcHBxjjs/JITJfXX3+dvb09XnvtNXq9HktLS6yvr4cxGY/HTKfTYHjr+GOSFEWU\r\noPZ8kUVtjAnux/J/ydwq99AKqdxbQNcoiuh2+zg3oijG5HlJFHnWmU9u4F/aZU+M97p2lGUVYk7N\r\nG2feLdi3RzI2VyRJDHSIIhtAN2sNk8mE/f39EAdS5l9RFCwvL8+xwmRMZR6J26MIzQAKt+L/Sf+I\r\nEihzWgOiWjnUyTUk019we1VzSrsT6riQwtKCmVuhsFp1tuokTsN6mloPyJRFxdTkuBr2bt6iLCpW\r\nViydrMuJ9Q2SOOXo6Mi7UU8nczH+dCxNvU6lrdqoSZLEs/zU+DlHGFtrHbu7NwOI5JPyGOJY98E8\r\n81KzeNouvcfnyTxQog9NtLuPHlf5TK6dscWOZ0PXhx4ip9qMjKqcgWVJ4hlt4trpT8yiIDsmkyFV\r\nlTbPBmka01/qNXKKJkZfTlkXFGWCjQpu7d8OjOdebxDcbdOOBwKrvVmmcM1AletkrojbngDUo9GI\r\n0WgUKP91Xc+56EuRZ5Y1k2VZkD1VVXF0dBTuq+ePyP04jhsG6QyckphheZ6T2kEYE4n1KuNaVVWI\r\nXSIvfdDjf2ewNmqut+S5lx1yeGCMyHDPRvNMQBlfA67GGIcNSZYd82zAmbyPY0uaxlRVinMVcWzB\r\niXJkgNl+JKENbtzYbRKqTJhMpiExle+bhCielzlaTi8yStuf+Wc1pGmCczNgpiyLY+DArB9n+3VV\r\nHQ/poY3Y9v3bLJnKFcfWpZlj/Ql0yLH6nXPUzMuPthHdXu936pN2+/Val35YJEP09+9U+ZXHf4Xf\r\n/s9+m/Nr59+pKn8f+O+MMS+8UxUuKm0AL45jzp49y+nTp+dkoehrbb1r0XhJvQ5HTBymQwRgYyLA\r\nuCYWqPHuvRZDRIWrwRAFN17jPMDnhPHnKs/iNwbnIs8QxBvamghjjMW9A6yYRS6mAoa251lbh7zb\r\nHFsEDopOovXiRf0KP3kgoJRFz6QBVQ2OyrVt0K89JgKs6s/atpfsLW2vgTu1T+sfi9qr2/Gg3KfF\r\nQOS87MEYiAw1JThDVDdyLaogaQIWGItz+PeRZyUXscMSAT0oI4j83ChMTkwjCw24uoY6Ios9mBjF\r\nQAEuKT2xgcSzyCsYRxU9J65B71rv3CfFkNQwji2xg8gZaqCyhsga8iYYhQWsA2yEeGg48+7yKmXv\r\nFVxFGHzabpFrnPNh02Sfboe8GY/Hc0lXxXNT20pycNyWow/KO1fiO21C2n30jZTjRsHi09d2ERdb\r\nbXAvot0LGKcpoNpQFoNbJifM4g1pY1zfawYE1XO/l3u2QUFteEubtIK0iCUp3wvAolmB/r5RMIg1\r\n8Ndun3bFmhkcLhjEEgC42+0yGo2YTCYBYS+KgsPDw0CrPXnyZGADHRwccHBwwO3btzl58iSPPPII\r\ng8GAsiw5PDwMi7LT6bC0tBQWqhjcko233aeLGA/CHpPnq6qK8eERh4eHc+7S0vdra2uB4ab7SMc7\r\nEaBQwCOdvVIzatrzUf5ftcAjryjL3DKNEe+ZgHFcIUkFosiDguPRNMRLm07HLC0tNUxTQ1XBYNAL\r\nmXHLcgayWQtRlMy540p7NVNWC0QBAHWCm+FwODdv5VqdaVXPrfYaqZ0LTEIBBTQAJ/NWAECpX8a5\r\n1++G+/gkGzEur5nmEybTMXkxpawKotiymqzSH/SIk4g088l3ypvjwIgSd06JAyHgjbB4ZQ4ImBTH\r\nMWVzeNAG2WVM9/b2AiAm12gmrzPu2LrV61nma9stVwMEWg5pAFaDiW15Jd9redeuu10C4NqAW0mS\r\nUKmoDHqd6LiDEqtyMplSFLPsrx4UHVBVRcNYLcFVVKWPYVXkOZNqTGRjimlJVdTUpcP0LUkUE1sf\r\ngF4AZFl7wu6TE8L2gY2w1/LcJ4tpx6oT6r/IhHaSkzRNQ/37+/sBcJxMJvR6vTB/ZL0IWC7rQrO0\r\nk4bZ6F3Ok7De5Dppi54Tun/7g07oe++SbkkSnXhlPlapAHQiL6eTauG80kWvW/m/uDhPJ1UDtkXk\r\nuWeCyvPNnqNgMhlzeHgQkjYtLS15WatAK6lb78OyP0vb2gCgZCOWeS9seYkn2d539XM45zCxXrce\r\nBK3r2Zq0IV6ajq3rGqCU4N6k175WFGduxrPDAakLFns26PXY1oHuBAa2wb3Z/lItBBQX9eXbLU9s\r\nPMFv/fJv8dce/WvvVJXPAf+9Meb/eacqfKNFA6paH2wnkblXHeG9Np2MuG5LmCrvzhvp+lwcjFkD\r\n6GQdIRe39UwNSZtiw8+jhqMhdzVv2y5ug+htAFlfo/tu0e/bpc0c03Xe6Xvdjp9Eo6wNRLc/X8S2\r\na89V3TfydxETUP//jfTnm+nvN2PDPSg/3iXBQhO21BnrsTszO9yYySgPBvppEjfyKw5yKnL+EtsE\r\nL00kUUcjEA0RWC+zTOwvdgmYUBce7IscPSJ+Apf/j6QYAGvoyn8iSMIBryWVXSIcHN0pmMdffFlk\r\ns7TllcZKxD5dJNPEW1IfmOiDER3iQA5D2gcdQLBPhZEohy4COMq9dPv1feUZpA4JGSTELrn+Xnkv\r\n7tcSLzq9m1ee7+7221bCFoEsM7BqfgD16dmiOgTw0Aa9vq9mKolhJ0CFGL1tl4g2EKSNHT2xNXtP\r\nAytSRxvxbtepQUYN6ki9i9olE1NeAj5oo1OAlwAMWsP29jYbGxsYY7hx4wavvfYaRVGwvr7OYDBg\r\nfX2dW7du8eqrr/L973+f6XTK5uYmW1tbdDodiqIIcQDX1tbY3NzkxIkT4TklRpaweCSjcRRFgX3Z\r\nZmvpMW4rrrpfXOHRC2HzCNgkDBUBLwX8BW9E68x08lcLGwECJWaXdtuUMY6iiLy5v/5OB/HXQkQr\r\ncmFcSx8/y8c0K7B2TF1L0pm0AfggSWqqyjXxz0ry3AsYyeymXQn1c0wmk2Doi3DSbEBhp8K8YJP5\r\nJew9mAWS1gkTho17oIBhAhhoFqwGE+U+ss4koY12z9frdzweKzZQydraWsho59lZOxweHrK/v0+e\r\n54xGo/DsMsayXjQDQdaLCHsNkup1LvNJr2MNANbVTK4sAqzlmaTuNggo4KDMC12kPzVw1N482zKx\r\nrai3GYEaYPfrreBOxRjD8vJySLSik2vIveM4Da807ZBlE0ZDP5eLoiCOktCPdQ1lWTcAns942OlG\r\noR90CARxo5XvBMTT8kzm/CxBzgzIlQ1XEpfI8+o1WhRFSAjSBogl3IIAgPJe2iag+HA4DBu/vh6Y\r\nO5GUftdrUSst8l5ATrmHHmN9GDV/2HCckSbvvdvsTGZJPwuYecg4PL++l7RJ9kZZr5I1dTqdkiQJ\r\nK6v9MC4663m7HdLW9hxvJxqQ+S3AvXyn57NmvkYqoYjeI2drJZ5bQ+CZklLKcj6j+6L37b9z7838\r\nems/370M50WgTFtRbte1qM63A6Csd9f5h3/lH/L3Pvz3iO074hp0C/gfgP/VGHP3oM8/gtLuU1gM\r\nwCz67J79GKxXxaQwc/8Lny2qybTemWNf/MWYa29kvrzZObXo+kVj8Xbu8eNa7vYcb/S7Rfv/O9mO\r\nt/qbn5Qx+qkuessw5pjIasNEZpFMm138Jj43i7+6W/0PyrFi7rShNN/e8b8/Jl0s+pfE6e42YbxE\r\nhxc9WfRyIIQ4E/26jQVou0xsOWH7yW/EVhFdXN4DIbaq4DxiS7QTD2rdtNPphLBDGosRosFkMgkA\r\npDzDvTCw+7XE7cG4m4K6qLRZK+1TyHvVI8bSovtqJFeDM9oAlAmhDXPtLqjjEC0y3heVtsEzb3zM\r\nu+21gS65l/SDnoAa5BFARYwtbZSLS6ssKv0MbTCyrD0YKK634gZ3eHgYjDmJV9XpdDg4OODatWuB\r\nWdfr9Th58iTLy8th0TjnWF5eDkw/Mc5hltFTx3Zsu0jqPmgbjPK5sCo71scGGI1G3jCf5lD7INn9\r\nfj9kg6R2uMrHQCyroomt4wIgKC6DYuQKQKVjTep5Kf0t1OU2c0yPkTb+9e+dcyGjroAdAmJKRlOZ\r\nw+IKbK139Z25Dc+ASD1vpC/H4/Eci0vAX+n/leVBAD6mU8+2wflYesYY0iTCGkc+HVPk3r26rnqk\r\nSURk09B31npX9qOjI4AQU1HuJwwu6TdJoLC8PIsnFcdxiDEo/SDJCiTBzO3bt1lZWQnxx1ZW+qHu\r\ng4ODORBH4lfKmtNxPeVvFM3GQ7NvZZ0IeCnJbgSUGQy8C6uL3dxcXSS/2oCElgHtbKiLZEx73eqN\r\nUI93+8BBgwl6LQng6Melnnt+DQADDAaDAMoL+CUAb1VV4Px6TrOYTtZrYshNsHbMZDxtZJMH/coi\r\np8grppOCNJ2QpBGdbhRc9TUALDJD5rrE9ZDX6uoqxvgEM8PhMDABtduwyEUBu2TeS/8nScKpU6fI\r\n85zhcOjj6TUuvaJESPgBYUXLXJCYeXUxIq9L6qqgyCdhPXvgOUJ4PnP7mQVrLM4ZqrqgrmdKijEC\r\n0PoT8SSZrRnnIIp88powV6LjruOLwECtgMge4Zyj2+01hwIlSZISx7NMxyE2ZmAr1kynnpU3mUyJ\r\noohpPiTLMvr9PoPBYOEhh7RFg5kBaKzmmYt+XkYkibioz8I16EMAqXO5u3Ls2fX60de215lzjsQk\r\nc5/r/VqDb7o/9bpy9WJ21BvVXzTYp8FXYWNVVgAAIABJREFUKdptRbfjzepZi0psY/72h/42v/n0\r\nb7LR23jL9ahSAv8c+AfGmBvvRIVvpehxkqIBc93nD8qD8qA8KA/Kg/KgHC+LbN+3UkTnlBwI8pm2\r\nWcS2EdtUwDnBDrSXpcZDNIYjB8aiv/ukevPea/oAuR2bttPpzBE+xFNUDsIlG7G0T4hEAhzCzONT\r\n7qvv95NU4jazBY67q92ttK/RYJf+XivGWgGOlXLcNp7bgJquQwxYMW5E6dfMLWNMQHLbDDzN9tP3\r\nke8WGRrSTh2AUoywRaCXGB5tY1+3pR2zUPfZoknX7s9Ot8NwPOLW/m2WlpbY2Nrkiaee5NVXX/Ws\r\nKxxFVRKnCWcePkuWZSHJyXg8ptfp8tBDD4UFLQwvYeuMx2OyLAtMLXkeAbvi1CPjRTWLgyWAozWW\r\nJJsHR5oItUicrF7q3XaFJVTXdQCg6roOAfkFRJPFL66GJrJz2T7ld4LmayBQByOV9iRpHNrbNsQ0\r\n21L3uZxMWGvB1XPgnmQ21bRozawRBlR7LmtXQAE2xO1O+lzinM3AiZjB8iAEhpYgq9r4F/BL5qAW\r\ncADj3GfEztIMjGU88aBe1aQ4NMaAsSRpRpJmgUE2zQvyopyrW7vjitAfDochfuD+/n4ADcVlvNtd\r\nDS7oQACNxBVUTmbkeSV2XDtrtj4c0IcF+gSpnbygKAqyQRZkhpS2218bkNH3EllwN/DvbhuwrnvR\r\ns9zJbV3+Spw6GQfZJEXGyKYnGb0FjB2NRqGv5bosM+GgwNUWayImkxyYyUa5t59LETWWLpBmGZGM\r\nfZaRNOM/Go1wTbIN2cx7vR5Zsx50f4nskc1bx54SBrKOIShjJbH+JBGGrAGZl8IglnkkB05xHFOO\r\nZyCZzDs5KBHQUPe7Bp6rqsLG8wx3ve4XxSfTioWcUkrd7f1G6lgEFMkcKaN5N3hhA8sau3bt2pzc\r\nkrGTTKl5MQynuCJb27G+9O/b60HmqHallvXvn23mDqd1Clk3FtNsCT4GonMOZxRgV9VgmJt3deOu\r\n63BzwfXbIH173SwqsY3m+1d+d4f1SuvzWiX80J/L3/ZhziLgT4OUb7R8/PzH+ae//E9579Z739Tv\r\n7lL+PT6u35+/UxW+2aINCVjspXEn0PTtgKgPyoPyoDwo90v5cZN1Wi4/KO9ukXH4UYFVom8bY3jh\r\nhReYTCasr69z9uzZoNPJPr67u0un0wkH/aLTa32nKIo5opQk/Lxx4wY3btzAGMOpU6dYW1s7pkdK\r\n2J/19fXw3OKJKG0V4E9siDzP2d3d5eTJk3Q6HS5fvsz29nbQI4X9B8yFF/tJZP/Fd5ogb/Rkus2U\r\naf9GgAltfIhSV5YlFMfd1rQirIM+6gktAJB8rhlUOsHHdDoN4I4YbNJeHW+tfTIvn8uk0BlStSF0\r\nN0NfA1bSNp08RO6hjSv5/SKjT/uvB+PSQb/bI49yXFWTxDGnHzrF8sBnAbbWBiNTGFdVVfkYa71+\r\ncNtsu3uJQafd9GQxSZ3yPRgf7FoevXY4fGymyFocrkmsYaidZ/X5B/GhI7CGtJMFluFwOOT2wT55\r\nWVDWVbhvlsxcUE1hMU1WYAHe9BwUEENcHXWRMfPgazbHStGGvJ6PYlzL/eW6lZWlABqIO6sAKsJm\r\nkliGwiqSOvM8D/NAC23NDm27vUu75fvR2FOYbZTQ7cXESRayoZZlGYxqYx00wMV4klO7Q0bjKVl/\r\nmXw6gSbxRRJHWOPdBvLpxIPCjVFsrcVGlk6WUlcl1jDndixzUwOY0m9ZlgW37lu3boVkMVETdFj6\r\nRuL/ybNKYFk9RzUtuyonx0A5XUSQa7Bf+sYYwyqrc6CQTqyi5YF+PgFbNMVdF72OhK2oT5F0Xdqd\r\n+k4gz6L34fnVQUSbFe2cm4upKsw/kSO+H6GqSqZ5SVUXZGkXa2PSLMFGs/ADZelfrm7krytxVUU+\r\nNX5uGP9XMqsncewPdpr1Mp1OmRYFRZ5TlSWlchnXsR1lTQiArt2FhY0q4yTjGUVRcP/PsiyAgMI8\r\nlBM+OciQOjudDsQmtC/Pc8rKr4+irInjHGPjuX73wJAPvGMjS5IYynJMWVbEsSGOE5XRnZCtWED8\r\n2X5pAYOrjx9+6Vcb2GrvxxoolgMPub8cpLTl2//P3psF6XVcZ4JfLvfef60FhUJVASwBICiSICmS\r\n2qzw2JInLEfLnramZ2LmwTH2g6cf53ke+0F+cUzEPE+MI+yYth3uaEfboh2SLMmbaFmWpZYokk2Q\r\nMgiRAAEUFgK117/dJTPnIe/J/9ysHyBFkRJIIxk/UVX/XXI9ec6X3zmH16MoJmF+UgIWHuKh3+8f\r\nmnMc4CpL2oMVpCQA3f+9LKfZKnn9+foY55NGOxofCOi0CRAL4ZOsCDfdQ2LWawzWx3t7Y41ZMXWp\r\ncjS+02uVbMZ7CXKBzwfnDtWdrp3l9st/5+v37ZQzi2fwpf/tS/i3D//bH+u+u5QfAfg/hRBferce\r\n+E6Kc9PM0m9X94yNzg/ayfz9cr/cL/cLlXsFZKM68H3uXqjXv/ZC48BtlHdzbEjXybIMGxsbGA6H\r\nOHv2bPAm3NzcRJZlmJ+fx8bGBra2tnD27FlcvXoVe3t7WF5exvb2Nqy1OHHiBMqyxM2bN7G6uoos\r\ny3D16lV0u12cOXMGeZ6j3++j3+9jY2MDWuuQfJTCuo1GIwA+ZNjOzg7SNMVDDz2Ey5cvB++h3d1d\r\nLC0theSh/X4fr776Kra3t7G6ugoAIblpq9XCiRMn0G63g23BvTM/aHNcx8Yolbdzak73xEYpFw4c\r\nsIsVNSllYHxxI4Yr0ZQJlteJBzQnRguvN2eQkJFOBi8HIgnEio1yagdn9XBjbNapPm8D/3Cwkeox\r\ny6DjoA+vD/8u7kvnHPZ3d9Hr9dBptTzrZTSCUgpLi4s4euQIxuMxRqMRkiQJwfkHdXbfY0ePwtSL\r\niIxEAkGo/gTaEGDCY05J6ROQSykhtW6MvQwGXNNQEpFRVkoJoSSytncbVEWBSeGZYmY4gEq8y6lK\r\nNJLMj7MoJSwcLFxY1MRA4XRg7uZIY89dqvmYU324gczHmM9P56b0ZK0lqsoBsNBaot3OoLXEeDzG\r\neDzBZDKqQa0iAIBSAq1WijTV2Nkpg4Dm84H3P2esUl1pHt66vRUyLrfbHbQ7fs2IwSAAn0IID84I\r\nA1dVqIxBORwDwzGOCAVT5DA1qJImCaBk/T4DV00TZYBAWK2gOm200wR7g2EAVwgY5gwjPp+GwyF2\r\nd3cDIONPaTx7p9frBVdgYuvx2GwEnhDoQ6Bi6cpDMdg4kE00b+6qTmCHtRatSSuMJZ8bHCTh8oyv\r\nY6UUDg4OGnODf7jxz90pOZgRlxiomCV7uPzI80njffVTQD/yzLFCoHZlTSEEkKYJRqMxrCW3caCq\r\nCrTbXaRJC1nWhtYSxjgUeRniWpZliaIGl8ZDD74N9vaDa+00m6xGt9X2p3sOgblajCewZYWJUmj3\r\nfIIPuo8nAyEXXg7+0TtobuV5HmKSEjBIfcTXDc03n7W4E+ZZq+Pd5iEULMXuLCpMcg9EGIsg70Jc\r\nUyWhNDHYpuxUHhaA5ih9x/cIvrf6mKHT3+N9KM6YFs8bpZqxI332YQGl/Dw/dmw5gKCU2If2FCkl\r\nJjUTl1iaPDM2rcsYDOdrwRg09ieqa1H4ddlqN6/nzFwAKPM65uqs/4SAFZ7hBwXAAUJ6V11nXaMd\r\n/DSY15PLTP4JinINUDvn4KyFiZiDQjUDRseMwDsdetLvcb+9FcD/VuXff+zfv+1r71Ymkwm++MUv\r\n4jd/8zc/IoTI35WH/gSF5Cqf/3djL8QHdPfL/XK/3C8f5HKvyLxZ4N/98tblbnjKu9GHnEh0J9LA\r\nT1LoOaRbU+ikdruNnZ0daK1x48YNXLt2DQ8//DCSJMHe3h6uXr2K5eVlXLp0Cb1eD6urq7h69Sqc\r\nc1hfX0en08EPfvADJEmC4XCIBx54AFJKXLp0KeQmINCR7jt79ix6vR729vawv7+Po0ePYmtrCxcu\r\nXMCNGzeC3krhzTY2NnDs2LFAglpZWcG1a9eCrbqwsIDBYIDhcIhutxtsBzpQBw7jPe/3ojk4xd1d\r\ngbfnjtJut8OkiN1/7uTqAyAYC2kydYuKDR8hRIj9NOs0nRI9EGBGlNQ8z4PBRwkVqE2xyyU9806C\r\njBufvK1U51nZijlQR3Uhyiln+lCsLKo7ZwUSoyUGhjiqL6VENahQFSWMqADrkCVpw401S1Jk8971\r\n1pQV4Bzm+3O+HdYhLzwzcm5urrG4CQTb398PbfeufmUI4tlut1FN8prBJ2EwZVYq4fthvwYaqX+0\r\nbBpT47KAZmw45RyydhuuNnT3BwMcDIfIBgPMzc1hbm4OaasFJwSMcyFOFXdVI7CHJ4KhuGPkSkpj\r\nZKyeMgtZllH6ECOBu1PSfEjT1DNtUgUhMzg3DfafZhpZK8HOzg6MLZEXgIOBsWUAEZI0Qb/fD+CW\r\nzwjs5wcBGQRQz2ImSimh0gwGAsNJjrwy07WRtdBNM+zt7fkxNZ6JaRxgPJEPALC9dTtkck60hEA9\r\ndyFghYCSgDUGVZ1QwFkPckgBaOUTShDATIY/9S1nS5IgnZubC8lZAGB7extSSoxGI0gpsbq62shc\r\nfXBwcGj90NhqrZHUzCoat/jAodvthvEmOcE/u7u7DaYUgBCDMGY10/ccPJyfn2+sT84q5WuZg4Yc\r\naCaZG8s+ftBB3/N20jxrtdOGzOHr11qLdicLcpnWblEAEBZSAe1OhvF4iMFA+Fh51QRmUEHrEZRK\r\nfPusQJYlKMssuHDnua9bQnktHVAVJUqpoKVCojQgHYqJZ6Z2Wm10Wu2Gi22ZF3ByGuuDGHlKqRC3\r\nbzgcHnJ95vJ6bm4u9A+NSZZlOHrUx0AbjUYYDofY29vDwcEBRqNRcJ3vdDqwQkDoBGlbQiYp0pp9\r\nSGt+bzD07r8QgNJ14Ga2Txog0Rla2bT/88k0gcloOGm4wTrnYKzx60wAMpkCZvHewpV97j7M56Rz\r\nebjHfwHP9lUKzklYlyJJlY/p2E6DHPQsx6Kxn9L6GI1GIdEKnaBSFmaedMV/b+CcgLUOQpCbcIIs\r\n8yBsXhwEOcDnOo2h1uVsoNtZOOsaB1EEfsZrmB+cAdM4gXzf5+uK/zsposNHraDEFMQNB4D1/TEI\r\nyMclfjY/YJoF6tP9wE9PsXTO4Rvf+Ab+4A/+ADs7O/it3/qtnznwRyVe37MAZ/476ad3M6rul/vl\r\nfrlf3u/lnR4WvRclfn8sn++Xw+Wt9qh3A9jlnoHvtj7BbWvnHLrdLm7fvo1r164FPX0ymUAI72G0\r\nu7uLvb09rK6uotPpoNfrheSD5HGptQ76fb/fDzHj6ftjx47hiSeegHMOL774IgAE7IGuIeJJt9vF\r\n7u5uiPO9uroKYwwODg7Q7XaxtraGa9euhffOz8/j+vXrYVwODg4OYVdkd3zQQD8qmrOl6HM3Zkpc\r\nyGin+0hZ5kbCnYqo6SizTuVjo4euJ4WaUF0yrmOmDndRbZzksxNma6dZJen51Ja4HUDT+Kfnzcr2\r\nSc8GpmwiYHbMJv48HrOOwD8OLMwyZLIsC3Ull0V6NwdfA9OB/cyNpNjwpL4Ise2iehNgZeukFVRv\r\nAq844BKzoeKx5kwxIURgnfAEFGSUOucCONNutzGuBg0hYO00Sy2xdUhYkFshd9ulvuILn88FyqIZ\r\nswSnIF2CehqHQsybJNHo9bph7KqqhDcbHbtmWj8AGA49k45iclFCCXKBnD7Lt7ewU5YjCTbe771e\r\nL7gl8+QxYTyMn1skuHlMQQI4nZu6ypLwnYKMU5YQ9S2xMeP1T+uR1q0HgmpX5Jq6DUwBO9oICLQl\r\nJiMfv3bazARLhdo6a+5T/1AoAALp+TxuuIZGhc8dAtniNcrfFa9dvga48TprfdM48e/57zwsAhUC\r\n+4wxAdDmdaJ17d2Wx0hTjW63DaUEiqJCVVkYU9XhAUiOa2gtASTwMQArSAlIoxrrjye+ITd47lI9\r\ni1lJyVg4e45cT+PYnZQYiBjhPLsX/cvHpdvtTg+a0in4devWLWxvb4eEKPx9NOcoHokQopFxnLcl\r\nSVsMzCW55vsrSRSAElonUCqBtQ5VRYCVQlYzmTmgFe9Xd2KuUf8pRXOJ5KeDlATuC6SphnMKxiho\r\nLaGUgJT+Pn9Qdti9mAN0N2/eDMziTqcTGJYhjEHSjInorIN1DtbWh4qqGQeR5OyUBT9l19dPAWeu\r\nEszm60R1NXDOQgg09hXqS84u5DExZ+2ldobbLe9fXmLlPNYlZt3HQV2+Bvnv74bi/3bKq6++it/7\r\nvd/Dv/zLv9xzgNks45aD+lxXoWsasXfx1gbW/XK/3C/3y/uxcPs8ZkT/NOVe/N5ZOsn9cri81/s7\r\n7/9ZttdPWmi/pfcsLS2FxHlra2swxmB7ezuEitnd3cX6+jrm5+exsLCAnZ0dLC0tYW5uDp1OB6dO\r\nnUKr1cKVK1ewsLCARx55BNeuXUO324VzDouLizh69Giwv0+fPo2dnZ3gqkuMQwpzk6YpVlZW0Ov1\r\nsLCwgNFohPn5eRw5ciSEfjt16hTm5uYCZkQuvpcvX8Z4PMb6+jqWlpYaMew/yEXHyijw9mKtUOFs\r\nPg6okasUxdy6U7HGHDI8eJ24yy/9yxV5it3FAUwOfnCgYFYb/PoQAOheWjACzqE2nqhuh5X8OI5h\r\nLAh5QPf43dTWOwED/DsOrJKxSEBKDGByFgSBNzF4FQOtXKmmdzjnwgKjfuQMqjzPodEExjh7lBJO\r\nxP1O3xF4yoEQ7ionhAggUVEUmEwmGAwGYYH3ej3ImqJL19GH3kMu4UIcji3mjYopABmDlFzY8T5p\r\njmFSG6V+znhgRdY/KyRJ2sh66mNkCQgh4RygVFK/K4EQbQjhgnvecFjA2n5gtsTJAowxMEIemnN0\r\nPRlH5FrP2YzT+S8DUETJDrrdbmD6kDFNLEdyAQ9x1+o5opQKST0IuOQxyKYJAKZBXn3/FzX4WGBr\r\naweTSYH5+Xn0+/2akdiC1mMY42qgsERV+evL0qCVtEP9uEygOUbyY5bhLoRAVVlYU8FUDmVhUOQV\r\ninYVstcmOvPywck6w6vz7C/nZQb1Jwf8+bvIhTk+VeLMQi7PYhkSAwVxoY2Ku6vzeUrP4DKCQE//\r\njrKeWymyrI3JpMBw4F3WiyKHlAJJkiLLfBw/xcAcrUuYSdXILEuMNwLlyrIMSYZoPlLfl2WJCi6s\r\nb1r3tLET2E3gLzHSeBInAqPJlZcn1OFtp+Qdw+EQg8EgZEWnOHdzc3Po9XqBbcvXP8kLAojJ/ThN\r\nUyRpAsDBOQtXM2qF4Ew0cksFrHWwFhDCx8dTStdA3TTGagz+zQKuOCDIZRS/l64h+UrygABSkh8U\r\n7oHGkOYF7TW8z7MsC27TJB/m55Ya+4cxnt3srH9eJ8v8urEC1jXj5voPJaZh+7Or56o7HAeO7tPa\r\ngz6URZr6gTOlSb7xNRYDgNbcOZtwvOb4mrrbmuT15DKBhwKg73miq/eqbG1t4Y/+6I/wjW98owGO\r\n3kuF6x80jpPJBBcuXAh7O13DD236/T5Onz7dCP1CbQQYo0I4KC0gKwmHEYoyQZa1YMoSVuVI0EMF\r\nA5gSyFoQsFDVCJWQKGUCZUufWRoJjHGANEikhjUGZTWBFm1YbSGVQgXhGcECqCRQmgqZdXg3epwf\r\ncvE4oqQP8jbHc1gphTzPkWVZODSigy5gClRzPT4+XOJGEWeu34tz6scpvK9iWUN9QvKBko5RvxML\r\nhctBegZ5QgDTNU7yimdPp0Mw0rN4nyqlwljz6+md1tpGYjMqsefV/fI+Lg4QRuBf9s7hq6/+JcZy\r\nCFMqaNWBcBbO5HCpBgqLQlukCqishCwM0NHQEwXoHJURULIFCYnCjWFkiVQr2EkFq1O49gR2nCGD\r\nxNhMkKELayawHYlWqTCQFh0LSOfjcOzqET6z9Cn8u5O/gSqp7s+3uxTnvA7UsgZ7kxJCtjA52ETW\r\nT9EpMuxnDsIa9FspkjRFXhSQSQuVVYADtLhzfOBY7rx3bZh6PB47diy82znvhUfXkCdhiK2+sBD2\r\njqqqMDc3B601PvzhD4f9+sEHHwxysN/vN7AIYg9yN1xrLVZWVoKcIy/KI0eOYHl5uSG3jx8/HnTD\r\nbreLqqqwvLwMKSWWlrwOS2zBWJbzxHwfpKKB2SDULOV3VuEnr6Q0xKfxdyuzFGpeJ/qZgxvcuJmF\r\nbvON926LwRt42i9KS/fShu+BQa3TYLhX1eG4YrHSHoNofDPmdeMKGf8uNvhnGS+8X7hSPEvhi+sV\r\nfy9FM2YUKR1UuFJBABoH5WJ3Q/4MzlribYiByLjfeJ8Q+EgGKGfEZVkGXRu1HCAjVh65gBPowNmo\r\nBJiQcOL9FBt3s067Zrng0r/xXOVusDSXCERrt/rMME+RZa6ei7IGUfK6P6YgL2f3CDUFpymeFy+k\r\naBI4RsI3BgFJSOZ5HvqAYmbShzIHE7gGTAFFYpNx93CSBzQeJBtoHnmWVhGuL4oc29tjTCYjFMUk\r\nADJCOHQ6LWgtQ795oCnHKJkCPCSL4rhffNz4z845QHumUlUUKKsclSlgbAnrKqQmRa/facwFiqk2\r\nNQqm83aWvIvjWPFr+VyM60zf/6SbeXBbrNckB9sBoKom9fcCxjgIoeAsz9Bas1xdCZtIKJVASo1W\r\nq4M0rWBUFZh4ZAzRWFd1Qh6aC1VVhcy7Qoh6vNAAa8lFn/qFGHkUhJdcVglk3NvbC2BWWZaBhcrj\r\nehITmOIGEog1dWHOMRgMwmEFzyhMoDb1Jcki33cVhJnKFL+Omyz6sszr9ekieeOBPymnMWjpOXx9\r\n8oQ/8SfeC+JDNAABPOMHAqRA0XUE3FJiEpJRznlmOck0Yv8SEJqmKbRqQ6mpi79f3ymk0HDaIUmn\r\nbD1unPrr0PidylSuAnleNNaN1lOGJ4EZvP/oWRx0i/uP7zHWTF2Ref2oDtT/fG3yEu+98f4/S2mc\r\ntf+9FyXPczzzzDN45plnGv3E1/+9WGgN3Lp1CwsLC1hfX2+sAxq7oihw5coV3Lx5E6dOnQpjNwuE\r\nyUuDS9c3kRqJkx86js1qiPMbF/HY2jJcYfDq9dfx6PpxzCcJzl+8iuHBAKeXenjgxAlUEwOnNV66\r\n+gZ01sWZ5WVc37qF21v7+PCJNfTm2kBZwuUFzt+6BViFU2sn8Mb1KzAqwyNriwAEnExmtvftFmMM\r\nzp07h9FohPX1dZw8efIQuMyBdQpW7pwP33Lt2jU8/vjjASyy1mJvbw8XLlyA1hoPP/wwiqLAcDjE\r\nyZMnw8ENMNXtCTgEEEAvGq/3O1OC1gUxxGm+EWuFQFLSi8jgJNBuMpng0qVLWFlZweLiIgCE/ud7\r\n/bVr17CxsYGzZ88iyzKcP38eCwsLeOCBB/Diiy9ifn4e6+vruHjxIq5cuYLV1VU88sgjYX7v7Ozg\r\n6tWreOCBB3DkyBGUZYk33ngDa2trDaZ/vEfcL+/jIhzGeg//5fX/hD9++Q+RZhqJ6GKsKhQ2R1e0\r\noSaA65ewAwUFi2GrwKKZw7jyh7ijJMe87aKY5HA9CUDCmALtURe6o2Eqh0G1j9Rk6BzpoY8OpEhh\r\nkzG2Lu1iaIawbYNO2UVpCiRaYZIYfO/Sd/DUA5/Cevqhn3Uv3dNFCw3IEvtaw04cyiuvokodRuII\r\nxEIf/UpgJArsVhadxEHLBK5ykNJBJBKo3vod79Vap300xlu4vunqw9o4lAnpmnQ917e4zksHfuTN\r\nGB+A8ENq+hsnX9AzhBCNa7jNSoQEslWcczh69GiQ5yTL6R6yK+9lfemdFvXvPv/5L8Sn0T9OoZh8\r\nQHMi0O9v1WlCNeP5caOYBp4mSuxeQy6KswCa2L3n0HuZsjTrpJ9Pzvg0jYxCQpL5vVRvng10FqjK\r\n/0bv4SeqtFhI4eCgGV1LQA4HM+7GopzVB6ZeYLOuo7bTe3ksw1AHJ6CV9qwgKX2iDwgPykkFZ134\r\nm/ANgbOeIiMAZJ12aHMcq4naQIYer4u13lXU5CWsMZBCQkkJAaAqK5RFgXwygVYK1ljAAYlOkCYJ\r\nEq0hhYAUEoCp6+frRh/P6wLSJAnPpWsEfEITJSWUbmaMnjV/yfDm7m9kaBZ5FQABig3G3W45iEyC\r\nj5hurVYLThxOBMNBt+Cey1wj+fxOlXdZFuRq5yysNaiqEnk+Ca7KiVYe9IKDgINSEkpJWKEC8AJ4\r\neUAywbG5RcKUG9+eEahD8gUCGHgmbIqZmWVZcDskwW2MASqfPdYaAwFASRkyzaZJgqosAedgjQnX\r\nOWvhrPXXp/rQ2qFC7+UHDXFfx0AxrX0OhnBGVQyI08+xDOR1iNck/5nkQAz88/iCvG6H5VMOIYi9\r\nTHWiGKctVJWFZ6lK+Iy/0000y1rIVAqttD9EYP/BwbuAGgtrbL0mS1RlBWtsuEa30kN1o7nCDTAC\r\nLnnSHlII+OEAzR0CuWK2JbFQaT7RGMSu5dyVnN9L64cOFkxZNFjYnNHJWXrUHgJC48ORO+1T3FV6\r\nlnyO9+744yL5Hh8sxbIpfjaFWOBtmLKmKzgn698JxJsmP0mSBNYVoX1+fdnG86eATbMPZte5CaxR\r\nH/O5ztcZPyWO75sWeehdfGx4v8RgPO1Nse7B3xXvmVRnrscIIfCRj3wEjz766Iz6vbPy3HPP4Xd/\r\n93fx3e9+txFnmArV5Uc/+tHvvBvv+8IXvqAB/Ief5Bl8D7XW4ubNm+h2u+j3++HQj/Y1YnwWRREy\r\n+hG4whnmxB5+7fIG/vw753F+5wBKpPin5y/g6pt7uHZzB2vzK/ibb72AVltjvpXiv/zNs5DZAo4t\r\nr6LbbwPG4NvnLuBvXrqBi28OIKCxcX0br97YweWrN/CRhx6CEArXt0f4zoUreOXSbRyMKuQC+Kv/\r\n+kN88rEPQ+kMPlzCOy/7+/v46le/itXVVSwvL2NzcxNXr14NbIbXXnsN+/v7KMsSr7/+OrIsw5Ur\r\nV3D58mW0Wq0A5p0/fx7WWrTbbZwSH2DIAAAgAElEQVQ7dw4vvvgijh07hueeew4rKyuYTCaNJHAv\r\nv/wy+v0+rLV46aWXIKXE3/7t32JzcxMPPvhgSPb1fi58fRZFEQ4SB4MBvvzlL+PIkSPY2NjArVu3\r\nMDc3h83NTaRpiuvXr8Nai1deeQXLy8vY29tDr9fDxsYGbty4gfn5eVy9ehW3bt3C4uIiRqMR/vEf\r\n/xEA8NJLL2FnZweXL1/GG2+8gdXVVbzxxhu4cOECTp06hS9/+ctYWFjA2toa5ufnw2HHX/3VX2Fn\r\nZwevvvoqnnjiCZw/fx6///u/j1/8xV8MwepJDr3fAdn7xRcHgYkw+OtLz+LS7lUctav4zIlP49Hl\r\nhzHY3YMSgE67OIpVTNoGPdtDv70MJy3m0xWvowGY02toqx60MVgq5oGWwLxcwUEyxHK+iBNLp/Bz\r\np59Cbi0e7XwYTzz0FPYPdrCij+PnH/jvsb+/Back5tN5dMdzyEwXvd4CfnX932Cpc/QDCZK8G8U5\r\nh8JUSNIWkmGFQpTQe7vY+Yfv4tjyErK1dZTWg1KJ1eglbQ8WWgvpDKSp4GYQne5UYjvjnRZ+oMaJ\r\nChyrAKZyJo7tTAAcL2TrAlP9LbYX6TrOaOe4A9WHnhHbD3HbSc/lzFR+cEXv4s8lPSS+714r73Ss\r\nNXXALJYMP2W9U8NHdXbZmE1FJ81kYN2pzFKsZxk5vI4cheZMqxj8ApqbX3wqT6ejs4Ay/k7+4f3D\r\n6zLrGqDppjGr7bNO5vhYcJYVH2C6lxsQs0DQOxmMU1BpNruNJn7spsUNIiEEbFWEBcnHiF/P+5cL\r\njbIsUY2bi5rHpQMQWDw8tuJkMsHBwQEAoMjagQ5MIBIpSdR3PM4fjQkZjFJlDcCMzx8yIKnvY2AS\r\naBpy8VymvxGol2VZSOwxHo8PuSoT84gEKLnsEiunyZrxz1UAZFT/ylhUxhvdlbEhsYxOUkil4SBg\r\nnVcotDKNdhALj9hNrVYrjElwhWVjMTYuABqtloPSCZI08wkShAwggQdljAdi62QTEj7AvhACiUiR\r\nmRaKyr97NBmjqLyx0u12ASnQ0wo6TZC5Fipr/MFBMQ7zlBhjNAb81OZOBwhaC59cBnVSFAClKSAK\r\noLIlDob7YSz4J2xArik7Y/CFK+Ix2BPXZdYhBA8rwNcn/Ruv8Vgu8L/P+rfd7gaZDdRxTlXK3PUV\r\n8kmJ0WiCqrKHNsb5Vo8xvvwzaW5XVYVerxfGhuY9dxs1SS0nlIJkp3tFzezLa0OMYs3pJIHSGklt\r\n1FOMTMpAXFY+m3VlDFp57t9vLSAEXF1vnSR1QgwHCJ/oxNbJQMqq8hlfnUNRgwckKzKloLQGhEA1\r\nHqOsKqAyDXCFlB0OENM4xgYygduxTOVyNJapJJP4ARifP/H+R3Xjz+GsyHa7HZQ5DgzTc+OQAbSG\r\n6Ppbt24F+eJdM7rodDpBVtCanO7VzWy/5O4rxDTmn7/W90Wadhp6Bc0PigUTGxtxX/G9je9j1D9a\r\nT/d4qmMs0+N9dpa+Ee978VjSM7lbdTxX3o1y6dIl/OEf/iF++MMfhnHn/RLLhXul8LkZh1KgPYS7\r\nScbzMUmS8D0denEvgDOnPoT/ZX4Ff/+d57AgclRlif/hk0/ga9//AbpZgQfX1yAqCW0kslYX+2Pg\r\nxv4Y+9U+1NjizdEATz20hpYT2N+5gp9/+qP4z9/6b6j6C7h2dRebk1185MwpPPXoY/jKP30H7cUu\r\nPnxsDt+7tAnnCmirUP2EwyyEwGAwwObmJk6ePImvfOUrOHnyJF544QWcPHkS3/nOd9DpdKCUQrfb\r\nxXA4xLlz59DpdPDKK68E4O/ChQvo9/v4jd/4DSRJggcffBBPPvkkrl69iu9///swxuD27dv4xCc+\r\ngb/7u7/DaDTC9773PfT7faysrIQDsXg83g1j82dVpvrAdC8jsFRK2QDRDw4OcPnyZRw7dixkm+z3\r\n+7h16xYODg6wsrKCN954A4899hheeOEFPPvss8iyDL/0S7+ET37yk/j85z+Pl19+GcPhEKPRCB/7\r\n2Mfw2muv4datWzh9+jQODg7Cvn/lyhXMz89jcXERt2/fRqfTgXMOn/3sZ/G1r30NFy9exMWLF3H2\r\n7FmMRiMsLi425BRnuNyrxuv98tZFAGhBoIsESAxGYhtpBnzsQ5/CA4sfwnM/+h4eW3kY69k6nrv9\r\nPD60voa5hWWorMLkwGB7Zwuv77+JT3/o5zDS2/jihT/HcL9A2tL41Yd/GX//+t/iV578HN4sD/Bz\r\nxx/F3ljiRPYAsnwOH154HGYI/PzJT2Kxn+KVi6/hsSdO4xv/7VsYmF2MXII0Ojy8X6IiAJVJGANs\r\nthyO2Rbk2UeR7O9i8J+/jvLzQP/jD8JAwkBjZA3gHBIBJEJ4UsbPuAkkT7iuw+1DYMraJ9uL9DTa\r\nH/iBL+k+nPRDOiPJYm5rckJWIK/UYRKofoDXeYkURnUmPY3qR3YcD4NB7SEvJmIJxgSMD0rRd2IF\r\nxEbIrCKECKdkdAJOCCvw9jLYkSETM/W4UsEVef7uWPnnCjn/G13P76NCk5cbSXEbuQHOgQSuvN8J\r\nQLubQIyNiZi1B8yO6UX1IUU57hPeNxyxjr8HAGEPu/vGJ4c8biEpffQ84ywkHCwcakocnAWs8+ye\r\nsirD+BlrYWrXaUiBrN3CuJzGrZFShgDtnOU3mUyCi3Gn00FZlhgMBt79TI9QVKUHkeoEGjpNoOos\r\n0h4cMLBVCScAlWi0pIATnnWqdTbtX6IU0/wxBorFnJwFqNCpAJ9zHNTlc2dqcOoQM2w4yEN/c8Oa\r\nxmdubq7BSqJrpmOgIQQgpGcyWjGdM9Za5BMDZw2UFD67qJTI0gQCDmmiYWvwjMARH7rQgzFCCFTG\r\nwYxz5EWFdnvqVkkCWEqFNKlBDWcxGg4CWNJuZTDGG2BayQBgOmtQ5BOUhUCrpesEARZKSHRabWg5\r\nZXkWkxywDs5Y5ONJAHh7nS56nS6q3GeZGo/HyMsSlbXTeIRSotvvT8FHYhRSG6UErACsgDOArRws\r\nDJwBnAGMtti6vR3AjXa7DZs52Gp6QkUU8VlAnJTN+GNTwGMKZpD7VSz76Pnj8bhxb1w4wBgD0PTd\r\nnYA/Dub7dT51Ta1KWwO6rQD0+DiLJaqqgHN+PQ5dfX+i0dU9pK0MaSsL2XqrqoKD83IBPv7VcFyv\r\nWSnRt/PBLT0w7YRn1Yqa2UOszap2KdA1y1grBdTyIJd+fjlrUeQ5Bs4hn0xQ1TEBA3hYv0PUa7KV\r\nZYH5m2gd1tje7i72ACwsLIR4gVmWQdfXSyE8g9iWASSjvbDVagV3ZX54Nmt/IxcyUpZozyOFioNQ\r\nNCdmHTjx/YYrabP2s1n7Hw+dwF0r4tNQei8d3pjK1OtvhOFwgOGwE5KDpGkKnVbRAdid96V6WYY1\r\n4tvk3zs9YIxBSB0OeLj8pH0r1gliXUJguufRd3w9UV/zvTkG9OM9m+8R9F4+RrwvOZj+k5TBYIBn\r\nnnkGX//61xuHtvzkns+9exEApDGgvvAyZxJkIPUzzVMKAcH7/k5l7+AAz/7X7+PUhx7CkSNz2Dcj\r\nvHlwC0oaaGUwqIY4Zjpot1t4/LHHsLXncO6lF/HUkw9CTxyk1NgeHCC1FnNdhTf3R0jne9i4/Sau\r\nL3QwRoHt3T3kkwJZkiAfD2HLFvLxCMaWEOLuh+Bvt6yuruKzn/0syrLE4uIiPvnJT+Kv//qvcfXq\r\nVbRaLZw9exZbW1s4efIkkiTB+vo6jhw5gtdffx1VVeHGjRtYWFjAgw8+2NBlrbUYDAZYW1vD1tYW\r\nVlZWcObMGXzzm9/EQw89hH6/j2vXruETn/hECJLe6/UO7W3v50JrmcefJUNQKYUnn3wSb775pj/0\r\nmp/H888/j1/7tV/Dd7/7XTz11FP4h3/4B/T7fdy+fRvHjh3DRz/6UfzTP/0TjDF4+umnMT8/jzzP\r\n8cMf/hCvvfYaPv/5z+OrX/0qdnZ2UBRFcCEej8dI0xQf//jHMTc3h69//evodrvY2NjA448/DmN8\r\ncH3nHG7cuIHLly9ja2vLe8IwI5vbNffL+7w4ALmCRoLSFigzhYkb4YevvIyRqfD46afQSTr44gt/\r\nic88/W9QmQH++tVn8d+d/ARe27yEB1dO4Rf6y1joHMPBsMKn1j+DRczje9e/izm1CJUD3U6GWxuv\r\n4Nq1FP0sg+4WqDBCL0uxsXUVG1ffwPXBm/j8U/8Tzm9/D7fGm0gTCWPHSN4l+faBLQ4QEwvTGaKb\r\nS+yMHJYWEmSPPoRxItG+dhHb/893Yc6cwNzPfxzy2ApQAMICuXAoE4nsziH/3vvqswNS0i22trZg\r\na3trcXHxEDuOZBGx8WmvIEY1xfajAw1uE3GsYWtrC0IIHDlyJDD5iUjD7WWSexx05LoEgGDTTCaT\r\nEN/bGBMOD4uiCLrjYDBAt9sNz/qgFc2VW35CzgcbuPPmTveRoUPMIQ5Wzbr/rUA5+jkG1+IPxWPi\r\nz4vd3fg7uQLuN3sDwEIp0bjXZ270jIRp3YgpWAVjY2HhyKE+mwUExfXh/UsgIvU1TchZBgfVZRZN\r\nlr+T/k79w4HZBsvEmkaf8LqSIchdjMmgD8aVAIyzQP0cYw2Mq+sK4UFB56YMDzWN9VRVJcbjccNQ\r\n5qAvxRKj9pGiT8ZyURQY7O8jLwsYZ5GXRQDV6ARXagVhJIypMClyqImvs1IKkALtTnvqwmctnDGw\r\nbJ6UTHmKDW8ASCMDkZQuuoZOJriBwrOaOitCn1ZVgTwHrK3qvgCSJAPFY7MWYd7leYmiqJDUAkxJ\r\nCSEFLASEBUprAGM8w6kqUeUCwprQd+00AdIE+1UJOM+UqqppzM74BDwvPABYVhb9ft+DcDUISG3P\r\n8xx5rTi3222k7TYAB6kkdJYiVbKRFMIYg8JNjWM4IJEJVDplf+R5DlMYHBQHGA88a4wySHU6HUxS\r\nCSElypolVtQMMGrn8vIyIIQfUwAiWlswFsI6KAgIWcsN62DLCkVZoco9oOMqAxjrP5kN/WMZwECF\r\n5gEZVly+xUB/LCepLzioz+dbXO4EOnD5Gcsd/swp0OzXPrlvG5PDWYMkkZDSA6lSAZMxkBdjFGUO\r\nVxiYwgRWa5ZlSLIEaStFu+vX1e3bt5sgFRxKU6Ky9WHLfs00q+PwJUkCrRSStD4EKErYssJ4kmMi\r\nRiH+H80/KA0FAekAVctnVxlMyhFyIWBLfwpoOx2IjoPM2Dp2DtIBmU6gOl1kOsFI+U1/NBr5+B9K\r\nw7XbSKRCqjR0kiBVGkhSKAg4qxrMXJ+UBvCu1BJpmrG+TgIY7OfDbJdbvv6IQR/vY/RvbNzFbHWe\r\nMGsWEEX3EABLRm/MICSwbzKZBAae/1tVr1Ngko9QlBOUVY688HJ9fr4LAQWtZB0WQsPYkmYpBHww\r\na+cAIf2eS6w/KWXwLNB6msBIawlriSU6BTD4oVS8Dmhv5e7BpDjy/S9m8lHYDvou3iffSn/hfU5/\r\np/2Uj+c7BeOqqsLXv/51/OVf/iWGw+Eh0DJe9/xg6l4CAEmHjGOfEoDBT+6JjUpjQSAvyVz6nZhb\r\nVVXh1u3buHV7BzK7iWMtiY9/+MN44V9ew8cefgjddB5r80fRX2yhtAXevHYZxUThlz7xFB45vQaU\r\nDkc29/CV759Hv9/Bx06dwasXzqPcPcDnnnwMT59ehbTA5RvbeP6HL2Gp28Wp1RMw2uHkyjGkSR8T\r\nP9N/okI665e+9CU8/PDDWF1dhRACx48fx6lTp3Du3DlIKbG+vh5Yeq+99houXLiABx54AEtLS1hd\r\nXcXzzz+Pfr+PbtezdF9//XUMBgN85CMfwdGjR3H+/PnAzv6VX/kVXLx4EWtra1hYWMBXvvIVPPXU\r\nUzh+/Hgw/u61ufROCt+bO51OMDyVUjh69Ci63S601jhy5Ai63S5OnDiB0WiEM2fO4OLFi/j2t7+N\r\nz3zmM7h27RpWV1fx8ssv46tf/SqefvppHBwcoCgKLC8voygK/PM//zOyLMO3v/1tPPzww3j++eex\r\nvLyMBx98EG+88QbW19dRliV2dnbw/PPP46Mf/Sgef/xxnD17FlVV4ZFHHsG3vvUtPPTQQ/j0pz+N\r\nxx57DN/+9rdDkPxYnnwQDdd/dUUATgsclCUkMnTLOQhkGM1NcGvvFpIKkIXAL370F7B7exNZW6BV\r\nJTB5BVsaKCi8PLiIR9sSl/cu4Fs3voOk6gLIYY3FLz3+y5hrLUKVEgvzy9gfSBgLwABz7XlU5gr0\r\nisbruxv4td4Crr5xHVJnaO330V4BzOT9LwPe0yIEqrZGZ2whywI2awOlwGR7H5hMMJC1TjXOkVYG\r\nibUo4X1xrPO6kx+Qn1X1m/rRYDDAtWvXgsdHu93G7u5uHQ4oC553Kysr2NzcRFVVWFpawmQywZtv\r\nvomDgwOcOHECQgjcuHEjsNX39/chhAjJOC5evBgAOUrUQaEVkiTBZOIJIQQE5nmOTqeD0WgUAELn\r\nXAgdMhwO0ev1MJn4mPLtdhs3b95Ev98H4FndRGb70Y9+hCeffBJA03Pmg1LEH/9///EtW3S3RtNG\r\nw5VvKWUjs2p82s6NX5VNs3TGJ7ikEHIWGFeqCQGmnzmoF/+N3wNMY6BBVA3FmMAbCgSvZxj3HHxM\r\nk07DpYe7YTnnGjE4uIFA4AcZf5w9OY2n5DAejwPQxmN70Tt5/MG4fVT3mEFCfWGMQdJuNRB9cvkU\r\nQiDLssCE4bReAI2/Ubvo/XwcrbXY39/H/v4+AJ/AQ2sd2GxKKYzHY0wmk6BUzc/PY3NzE5cvX57G\r\ntnMOBwcHjeyOVVXhypUrSNMUnU4H/X4fCwsL4UPJQihAPbFYCGiUUqI/1w2GLbkq8vlGpwKcNcRB\r\n0FbttsrBW/reGBOyHvF+4wCYECL0BZ3cUnKNNE0B24ypSVmPiVnV67ca84MAAQIjeBZEMpS466oR\r\nOoCfPNg/n6u8ru12G/1+P2TjNfkozDH6EIBADEeaB1QvGu+yLNHKeg0DOi7D4bDBTlBKodfrYXFx\r\nEb1eD1l/Wn9asxRbzYPzC6H/iQ1IWV4nkwk0mokBYnCO5BaBI5R1itxWkRxOEMPdOGcx7/jzeVw5\r\nKrF7JV/vfH1R/TioT/fTON4pWzr9TKdz9OF/p+uGwyEGByMYQ+B2if39fRwM9mCrrOHWzkF8AGFM\r\naH7TZkz900najfvpGQR+0ckbjSsBlrQeA8hf152upfVB8oYn++CHA/zAwVp7yC1/b2/Pu/zW4GTM\r\n6uNrkssYAngoqxm9k9YBjQ/FxIsPtahQAHeaA4GZyfYPPp/4HKH+iL/ncyDP88ac56xha20Ir8DX\r\nL2fZCaHYfJ26W1J7u91uUBAppIEQ0/e3293wfGO8nIGYsvcGg4Mg37SuT50FtcFgPLIz+42vRSoc\r\ndAtupGgmVIlDA/D+iv9Gay3WD/j65zF5ZzHUqM6//Mu/jN/+7d/Gj1N+8IMf4E//9E9x8+bNQ2NP\r\n7+QHobNkwDPPPPOuIAPOuRaA8Tu9n9YejVlVVTh//jwAYGlpaaabNM3PPM/xsY99LBxcAM2TfsDD\r\nzFomcNLC5AWUTDFJBDJh4KoSTrZRSofEFCh0BjiHrKwA4WCtgk58fOBJ4dCRAlZaTEqJjgSgS6BK\r\n4FKBHAAqi5aSsLbACAl6roRxgBU/WVw8OhQtCn/ISfOLxpjmALHRJ5MJvvnNb+LSpUv43Oc+hzNn\r\nzsyMb0Ru0sSY4CwN7tpLeyTfZ2g9xayP92Ph/UK6E9en+XfE2CcXM8qKzHUIuoe73gIIyUGccwGc\r\nJuLErOfy2KUkV4qiaGRtprHnru7v9/G4X5qldBP83z/4v/Cfzv0xnKnQSxZRKp+0MTMKEzHBA/0P\r\n4dX9V7GgujBGQycWk7JCV7WxX97G4sIKrAD2d7chjUCpKiyKJXTmuxiOS2yXWzjaWUHuJhClQ1VK\r\nuHSEcVngaNZDO53D/7z+v+I//uD/xaC9BzHq4vTaGv7oV/8Uy63VBvHlfpmWmriJrk0wKfZhtUBS\r\nSdz64y8ivXId+n/8FYweXkaVlzgyfxRJ2oFTEsIJJJWBKAxc9vb3j/iA8W3VcQbOQ1nG6Tt65o0b\r\nN7C/v4/HH38cZVlib28PN2/exHA4hDEG7XYbZVni9OnT2N7exmAwgNYao9EInU4nyLejR49if38f\r\nu7u7cM6TZaqqwvHjx3HixAk899xzIa5smqbY3t7G/v4+iqLA+vo6dnZ2gkzc3NwM7TbG4OjRo7h9\r\n+zbm5+chpcTu7i4WFhZw48YNLC0tBWxpMBgEub6wsIA8z7G6uooLFy7gF37hF+550G9WSKG3UzRX\r\nFGMQ7E5sA/4vdTQHDYCmUhxYZpFCdrdO5Sf2HPjjE5pYShzYmjL6DsfC40wcUiLzYnqK7A1CzzJI\r\nEg3gsFtu3D9kXHFjnF/DlX7OGiAQiMos0IUUiLux++JYK9Tv3EUsHlteeN24gRfHKozBS/qZu23H\r\nY0fjV1UVdnZ2An13YWEBx44dC0Gr8zzH7u4udnd3QxsGgwEGgwGWl5dDxlBqFxludCqb5zmGwyGG\r\nwyEODg4CiDY3NxdObGmsqH2xsS2EgFY+S2UlpuCdFBrOCpjKAY5OuQWk0Ei0ghCmIWhj0IgUa95n\r\nHGwxpkKSaPR6XWitArOmKHIYU0HLafB8/x4N7wonoFQB52xjXtN7eHbjGJwjA1EpBd2axhekewlY\r\nIGWXxpnGhuKsaa3R0lNGKYGkNI/G4/EhWULAJim0Re5ZoXx+cmaqELJm/egw7qPRGEJIlGWFrmvX\r\nzxZIdFYziaTPWGtLDAfeHk2SBGhLtNsp0kTBpA6mcjDFiGY4m+uo+9iBEhlUlYExFj5rq0We+6xQ\r\nrX4ryKXgklr/LKXEeDyeaXTHhV8zC3CIAUYqtP44yDDruvj99C+XLfEa9n+3SBKFVjudGjDCoNXW\r\nsK4N2HZdR4s8H6Ms88Z89e7BAlmWQAiHJGkm7gkM0BpA4yAgn780htQn5PLX6XSmrrwMdKNryWWQ\r\n/tZut9HtdtHtdoPrIN1D85xcnTnIVlUVBoMB8jwPLuDeHbiDJJnOGZLjvj8ddnf3wmkoxQ/0a19B\r\nSoXReBT6fNbcoD2Oxom7XfC9LmYX071kTPL1zOcGVxo4AEjPI5cMzoQhAH06jn79UeIYwAN5gMXe\r\nnsVoNEGel+j1ypC0Ryn/3qKgZwooRVnVFJJkeqDhxaeFdZ6ZTYkTnHNYXDzSAEX5v8650H5qK5e/\r\nSilY05zvXFaTHOd76CwQL9YP4r/xddeUbdP4Ny+99FIDTLlb2djYwJ/8yZ/g3LlzDV2B6h0z+Kkt\r\nfC3da8AA1+34Xkbyja6hTH30O4EdfG7POkQ2cBjJCXq5gkodxrCQBpDOonA5EtdCUuZwsLBVCSkB\r\n5caonADSHspqhEQYZEkfpfVxQXWWorAFKuOgIX2IAQFIJWHLEsICrQw4qARa8PrkOy1cv2y1WqGN\r\nBNhxZusUmBd47LHH8PTTT2NlZeUQOEpygx+c0JzkB8skg6geXCZ9EEA/oNm/BPwR8CmlbADTAEKf\r\n04E56c8EUMehE7jtwzNicuCPHxZQMhvSd7ldBaBBrODjwd3d6DsqH4Rx+tdcWqKL33zqf8fD84+g\r\nKMZQrgUDASQljB1A2T4cSiDVwKhC1QXUxCHRXZRmBCVbEJWDdg5QFgUqIBGwBhBVAiFLZEJiDAcn\r\nJsiKDoROMEl2IGwLxjo8vvQkpJHofrqDjrMYJRoPL5zBarKMitnc90tUHNAqE0CUgFMQeY7ir/8B\r\ncn8Tx37n/8DlUQV1UKCfzqEr+4ADysrBuQpKKEgNlG/9lve8cHlPpJrBYIC9vT0A08PkRx55BLdu\r\n3cLOzk7wPrx16xaOHz+OlZUVXL16NRywk70+GAzwxBNPoKqqcOhMts3169dDHNv19fWQxIoO+dfX\r\n17GxsYHTp09jOBxCCIGjR49iMpmEREoU33Zvbw/Ly8u4desWhsNhYLlTAivSqzqdziH5+0EqejKZ\r\nGh+HDW9xSJngJ8z++3Y47Y/ZZfRMYLbhyQEyXvj7OauDP4823lnAFgdg+Lu5gklKzjRLoYSUDkqJ\r\nmrmYQcppTL3YAPD94GDYKVtcb6oLGSf879wYAHBH44zYgLwfuUHBlTX6jjZ9HhSdj18M6hEolmXZ\r\nIdCSlMTYfZArftSumHUCeOYPgUJlWWJ3dxej0QitVgvz8/Not9vY29sLRjgBAVLKwJrZ2dkJ95DB\r\nDngWIWVQc84FRtz+/n5wIWq1WsFIIKWMWGLkgkdMFW6cU1upX7ny12Bi2iKMM/UnB1T4iW8MinrD\r\nZupCmqYZtE6Cy2FVFTBqBIcUSgOJktA6hVIeECuKAnkxDAKSxpvADKoH1YEHZg1jqj2ziK4npXNW\r\nLCWaK8ScE0Kg355mTiVmHc1NGst4LRPAI4TA7s6gBll4UGoyuoFWK2N1BwCHsixwcGAwGg0xrvrN\r\nmGw6hVJJcLHc3t6uFW0JrQ2kLOt6aLTbXYyqyaF1Hcsi3nYObCqlsKSWa2AJEFBQUgSw2EkPME7l\r\ng0S8hcRygTN3aJ5wIIHTzzloT/Wia2h+vlWh580C/gjoTtMWpNQBWKG50mp1YKskZIekOUOAC42z\r\ncy6sfwL5eBIeqj/NLfqQgUPygwBqmuskt+KYfsTMM8Zgd3cX3k0+D5/A2q2zUhMoxN3xaZ0vLi6G\r\n9pGyQsxSkhlCAGmaQOspYEhj4e8RyPMpsNlut6dZdEWTmcfHguY9Z3bS+ubzgOQwX9t8fGOwic8x\r\nGh+6Lwb/OLhMgD+FXKD1He+RvvoO1hoUxbgexxxFMQmALcnaLO3CCQGh/P4rRFLP6xr4FEmdJ97B\r\nGgfPGhSB/cdZSvR+zpDnsosO3Mjwjvda3ld8f50F/MXPjtctl/+xXhAb5845bG1t4Wtf+xp+/dd/\r\n/Y5rdTAY4M///M/x93//9zPHmq9dKlwni6+dBTb/rArvWwJUsizDzs4OFhcXgywj2ULBuvn3d2M8\r\nSQBtI2EVAKuQ1EBcBUCIDn7qe9cAACAASURBVAwqGCnh01D5Uok66VHNEDUuAVzt3QIJYUo4ABoa\r\nEAa6vtMaAEICCoBxyOAPkt7tQuuZz2O+b2itsb6+PnNf48+4kw7OD7vfau58kIyjGNTkOnO87meV\r\nWYDo3fp/1ndvBarG9/Cxeqt33i/vz2JgcCo7hQcffbBhE/+0Ct9Lfu5Dn2rY29UMVvv9Mi1CAEJW\r\nqCqLlkqwvz/E9tnH0PvUpzAYAXJvgE63i16vA5nUjG74A2ULwKi3L1/fK1lM+qC1FkePHsXu7i7O\r\nnTuHtbU1SOnDcfR6vSA/6eCYXGkfeOABFEWBjY0NpGkakgFaaxvJOp1z4d6TJ09iY2MjgHn9fh+X\r\nL18OHmgE8FHypclkgn6/Hw5xSMfvdrvhcGVubg5SSnQ6HaytreH69esBSzDGoN/vB5vj4OAAnU7n\r\njnL6/Vx0UVTsJLxWfgQBVADgM+8BtLibQauJ6cONFq7k8mCJ8WnsrL/NAtC4csOVlfjvMajIjWWu\r\n4NN7Z53Ux8/lyS64kk/3ckYGF4Yc9CFAKAYspwBQ0+CLwVdeR6pXbLDxOvI6cGZk/Bzet/zd3Hji\r\n9eXtpPaRiwlnYXIDKU1TzM9Pg/rfvHkTk8kkGOVkBB87dgytVgtLS0vBVXZubi5cRwGRuRsTueOl\r\naYq5ubnG2BRFgc3NzeCmR0wdqiOBBwRY0NhwBhA3mHlmXj5GaeR2F89/HnORnt2ck1MXRwpez0Hd\r\nYmIhYCBFBSk0tBaQUiHLWkiSFEKahpsxFQ4U0HygNcFPpEs3bLg1czdIMvLjed8Ap2zZiDtGbsac\r\nORobz5z5SO8lRmYMYNF65UYzjV1RFCgcZWvqBRdDrSW63Taca6EoJnWdK4zHQ5Rl3nD77nQ6DVfK\r\n+ACj3+83vicgmECZ8WToN0SXwsHAwcDYab2FpPXlgAgAAKZsi1jZ50Y8l12xnJo15+5mqMSyk8uH\r\nWKYJ4V3SkyQJ/UTAO43veGgb9SJgjdh5R44cCYAc9R3NSeccUp0FUIYAzBgM5SyzKVDuwcC9vb0w\r\nFwiMI5lAMQTJ7ZjccofDYThsWFpaauwDnFVHcUb4HkAMZIoxsru7G+YqrR+SdbTGqG9muexy+RnL\r\nTmAKHtE1sWLH+4r/Tm0imcDXHQcAOfOPH+rFoBetUTr4oFimo9GoIU+DOzPTBYwx4YR2PB6HkAZa\r\na6yttiGlZ+t69qCAc5VnI7B4u1IoCOn1D98XFZz12Z75eiHGM5/zPCZjvMcDTXeJeM+NwfdY1vM9\r\njx/C0TtitiHVi57D18Jf/MVfQEqJz33uc406GGPw7LPP4otf/GI4Eefrg9c9bsssuXIvKrF83lrr\r\nw7msra1hc3MTL774YuhPrmdIKbGysoLV1dU76jRBhhKkJxq/eZk8vZr9P/79cN+GJ4nm9fTcWfV5\r\np2XW2PKfuT5IheuFb+cZb+e7u133fi4z58w76IP43rfqr7u968etx9t53/3y/ixhXVvAiibB4qf6\r\n/rpwHYHv9ffn2+xSay6QSgIO6PR7yDptCC3hpMSRpSPQSgf9LNznfJxs4K3X8nu5r5NeRDqLUgqP\r\nPPJIeG+SJFhbW2sc2M/Pz8M5h+PHj8MY0zhIJvuLDvq4bkr7vLUWS0tLIXQT2f70u9Yax48fD897\r\n6KGHQl2JzNTtdoPHD+ERJ0+eRKvVwuLiYgAGkyTB0tISsizDmTNnAvmI6k2EpA9S0XwgYoYBNzhm\r\ngWvcSOFGCJ+kscJL5U7PoHs4AMbLrL/HIAOvf9wOXh9jDLIsZUaBhbUGzk3ZD9NU0wTsicBAstY1\r\nAB3/fdNAiOvCwZ+472JjPQbfYpCPns+NNm5kcHbALCAUmJ6k07O4MULX87rx9sTt4G2hupLhT4ka\r\nlpeXcfv2bWxvb2NzczMY8vPz81haWsL8/Hxw+aNTBIoHsLCwEAxH5xzm5+cDg4TGgYA/YvhQsGWK\r\nQ0DgAQED1EfE5iH3QALEyODnBh43yBNMkweAAaT0yZ2DMyYkE6HvlRC1gaAOzVFqEwDs2wKAQJ4X\r\nKMspy4nqD+eZSLAOtqoZOw6wQsJCQEsFJaRPjCCiRDKVwaQYBhYed1/mv/MYghwgllIiH+/DmhLO\r\nVjBVM+GKTnWYCx74KA+BpN2OP20paiNM1oLbGoO8ZmfR6ku0DllWCWQYlaPwTBobAgFpfAl04IxP\r\nGuO21nBKwSiFirnrBOXKWkgAWkrI2lXZGANTlqicw/7+fpjj7XY7GK6xuz6fFzxuFQ9wP8uAjcG6\r\nWGbSxskzMFP9m/JrNvv6rQrJHx6WgLO8kySDEApSaiRJ1mD1eeZbHtYUZ1wq5Zm55aBAhQq2TjZj\r\nnUVpS8ACVeGZZkYb7+lpAWSok4J4UIWCs9O6j9tOge15wF+KOUljRRl6/X6QHdoPac1RoGCSLcYY\r\nbG1tNbJBcxAd8Nm6ObBNACRlBk6zpkIRA4EEZM0CeQhY4/shrU0CnQispXGk+RuHmYjlPD2PH97x\r\nvY67E3OFkCfzob/HwDDFbZVSopUu+rXTyeo5AggxZS5nGd//LRyasWfzvJnQKv74NWGgFCnVDsZU\r\noS+U6jKdopnR2DkHJXWQ7VLU+6horlWusMf6ClcYZx2ixId7f/Znf4Znn30WTz31FBYXF7G9vY0X\r\nXngBm5ubM8H8WeVOwFCsE92LheZgURSYn5/Hpz71qQAccx2EAGlinE8mk3cU9+aDVuL5d6+O8/1y\r\nv9wv76zEuuLPqg73y49TfDIzBwHjHHSaIFUtVMYnyNRpAuGmOgLX6e6Fvo7xiNijgcAxuoYO8Umv\r\n5JgAhVQg24faS7YM3UM6spSyYSeRXsfj//PQCsA0WWmWZSF7OuA9ESnOKultlBsgTdPQDnoeAYkf\r\nRFBb8/huHDgCmtR/YKp0cYOBAkLS9UBzsnJwKQYPpZQw0X3ciOGGbmy0chAhXhyxcOQn8aRsk4HS\r\n6bYaE5EmNQd5qK58AtAiTXQTLKUPp7NyNlHMyOLMv1kAwCy2FQdJZ7k+3wmIjPtfCJ+N19Rx4zQc\r\ntFJQ8Ma9UNIDWk5C1IxPQcAs/N+dgAex/NEG4ABnXbgXzqGqAyupRGNx6QiSLEXWbmFvbw8vvfSS\r\nTx7RaUNqBSeA0cS7VLZaLfTm+lhZW0Vvrh8Q+k6vGwx/ieY8oUVLAMX+/n4DuCNWEIEleVlMmXOV\r\ngTS+TSrRgPTtklpBuwSQ05gsxlmYyiKTqtGnvN+5S048d+keWnvx3wgALCbjAB4Q6OCFpYJzU0Mc\r\nQDC+ybjnsYC44cTXhGEMSJqP3NgngUj30DoJwOAYoU7E/qHsTwSe8vlM7Scgsd+bbhicecZj5sT9\r\nQkBPWZaQULDOYTQZozQViqpEaSr0nUVmM7Q6bSQmhdQ+u/NkMvHz0Qg4AWRyyvTkYCeBI9w1lTOm\r\naIx39rYDA7VTdNCtuuihh47qQKkURZmz9e4zOLsA/M5m882Sw7zw3/M8DzKFyyEO8sb3cjk7a3z4\r\nfI2BJb62/Fgqvz7SBEmWIm1ljYQuB8NBmEfE1qPrhBDYLbYb65cDR0KIsDHTHCWQjdwECFwjl94w\r\nL+o+5HvbNE5fOyR8OTjwCSUoaxh9CASkuUltaLVaAUSuKp95zBgTEiNxt16+91GfcRdkAFg+tnho\r\nfDh4R+uCu+LyPTk+9Ik/lC2d7zs86D+fC1RXfgDE68XfQ9fSOqExihmAxAyM92t658aGd7no9bzM\r\naLXTOrFKAq0T5MW4ficgZQIggXOG1bXJbON1AoBer9cI5UBt4YxI/vfDwOHhAzf+4Sw0oHlwCaAR\r\nZ43a/1bg/NbWFr7xjW801iTNxXhNcyZ8vHb5uL0T4P+nXfge7ZwL7FxiX/MxobHirN+fNhvmXiof\r\nROPkfrlf7hdf7ra+f1pr/17dN94PRUBASOFtYwEYV4cMUwICEs4ets/DvfeAbCfdkeuMZKdx7xW6\r\nFpjGnOZJiYAmsQiY2qQc16DwLKTD0v7O8Q1gSp7g4CLpsBwcpMJJEtQOjv1wAJMSa5G30gdt/qvP\r\n/OKnvwBMgSTu8kng3ixDkg8w/R4r4WT08N/p2gCmyeYkj42M2JWGnsWZEbHhzOvPf+asGzLssyxp\r\nGFRCkOHNA+Z6V8upUU51Fqiqw8BefLI+K+4bB6T4/fQdAT6c2cfHgBspvK3xZJ8FLHDDP0lTFHkB\r\nZ60H/qSENQbWGMA5z7CpWyyFgJISUnjqsgAa/zrr4KwNHzgHZ4kV568h5la71cL83ByGg6F3nXEO\r\nWZqhlWUQELDGwlkHJSVaWQvdThdpzfhpt1rotNtI61MB3lY+l2lu0AIn9g0wzZCT6AQCQFVWMFVV\r\n19sLa193/7OSClppaKUgAFhjYY2Bh0/hQdH6AyFgrEVlDJTW4W8MHw1/s9awcWkaqEIISOFjivnx\r\n5y7HvtONLevnCUglIZXywFINyo4nY1jnIJVCkiaQSsIBKKsSZVVCqKQx5zjwIoQIJy8kGzgwYK2F\r\ncA5C+Ph81no2bGUsqsqgKCsopWEdIOoEB0IqUMISCAk/zbycSNI09FcAzBgADgBKa0iSUQCMreq5\r\n58fDVPSpUOQFEq19psd67KQQoP+UlChy3z+oge3w/vqTF4Un3RPwzcbYX6/C5m0qW68BP8jW+J9p\r\nHs36xDKVz12e5a8xJ5icobGKASL+rFnKQwxicJlL8ovkK2cWk8s0AbCpbkErBa0UEq2hlax/VkgT\r\njbIoPIZuDayparlioaSAFAK2cr4PpaznL/WvnyLWWZiaEWishbEGlalQlCUm+SS0j9h3dMJHgCDN\r\na6o/yQdiaxKwHccR5LKZlIHYtZfkC8lo7n5Pv/Nx5QlM6F1KN0E4ei69g+8TnJEa77ez/kYACl+/\r\nHCiOD/P4/TQv+bqPZS21fZqYQx56FnkW8HbRe621GA5KVFURQJw8LwJD2Jgp0w8Q9VkSTzAikbVS\r\nSKkANNcAfXzcXmKsJkiStLE/WuMAZyFrPF4K+IOt+hMWs1/I/v3OwtUeAjwmL2eL0lyZTCaH5Ccf\r\nI16XWOHnOsGs8aa5HI85P/Tjz4+fI4TAK6+88juHHvoOyhe+8AUN4D/8JM+IdTUhpgnVONuY5s/d\r\nYvz9ay+zDn3ul/vlfnl/llnredZ+/V6WeG+fpTfcL7OLA/cmUBBSwNYJJIWs9XjcfUzfqo9j/OTd\r\nGBPuPUgxnykEDOk75B0SH3zGWAg/sOOsOvLQInCR61IE4PE+IaIJPSPLsgYJAsAh/TbYq1F9YtZg\r\n/IwYt7oXS0wWebtF5/kYlJHRGAVrJSibHgBYO43nZQwaRo9/sTo02bhRSb8Dzc6jQeFobTxpOEIb\r\nA3l8YcRspvgZvPD3+PYdZtVxpZuUz7juvD3OubBISNEn0IRipsWLmhuXs4AVYm/dSRjEg30nYzDu\r\nq7hURQFLcZqqCk5KgECd+iP9w/wzfUXC3wyNX32PpPdSfYW3qhpjqhSSetGdOX0aOzs7Hl0XAmmd\r\nbZOuJbZPWhtSxhjv/lkDw3RCQIE9rfWxxshViAx8Dv4RWKC1hhICEkCqNUAgh/OMOFgLUccJ1DXo\r\nZKX0bXQOFYDKlD4wq7UetMAU27F1/8Vj4JwHSYUQ0Iq7gk7HPcwnlUAnQGolhCQXdYNJPsQkHyJt\r\nJVNjU3oh6gRQWZ+ddjgeIbMZIAWkrkEzgcD4TFkGVZ5AgQwuEpDxmqDEB5n2hreQ9dg6gbyoUFYW\r\nwBhKezfIJKnjoikBqSyErLO8ViWUs3ACgRWmEg1dJcFd18LHvRBwsHAefPVIMrqtbgB6yrJEOSlh\r\nS4ti7E9rEpkENlcraSHTWWB9mcpgvw5GS9ekaRrAPdTzOF5jqgYJnXNIs2m2c1cZ5KMxhHWwZYU8\r\nTUNWWSgbPkI7SK39M2bIrrut6VmFA0MxkMfZMLM2Mg70xvLbWu8WS0Afsd9o7RVFgVY6BQcNAGgJ\r\niQSJEjAmgYQNrL2iKDApJiikRF4rEd3eon9PlYVkIDwpR4gBCAknHFzlUNkKk2JS19d5hnCvF+QG\r\nATIAQrBhHvOD5jTgmWE0f4g1SPVIkiQEASYglPqVGMRCeDbpYDBouCeS7CW5RHUit2DaG/b2doLs\r\n57E3Y+YfhaOojw7gD6kE/n/23u3X8uO68/tU1e+yL+fS59YX9p0UybZEUZTEsSVRjjKGHeSCIHYG\r\ngyDIIH9AngLMQ4AgATQIECCYtySPyVMmD4nkmRi2B9YYtsca60ZJliiJItlsdrPJZpOn+/TtnH39\r\nXary8Nvrt9eus7slUbLZpLoaG/v03r/9+9VlVdVa3/qutRoGcFgYNz1+MeCnx1qzxvXBifSdKGRy\r\n73iv1vdYtvfUdd1mJo1Zsy1AWhsoKmpfMi2GZFnGZNphPG7CEWxtH4nqtrgPxjIfr7PT6XRh7dL7\r\nprWWg/GgGSsBvnGzwwfbHEL5xWQmzNbuGRK59FBUg+jxHIsPqOLPl5VloKC+jx4fLXsyhh+Goo0L\r\n2f+stQtgPsz1NSmii8ZuP4/Ko/KoPCq/DuXvA/h7VH7JIno3i94a3nvwkETeFtoLSn/+8z3qV+8W\r\nLiCbHGoLqUt0WwHtNBMvTVOGwyGdTmdBJxX7EubZ6UWPFN1YdIDY7Vd0K53AU66Tg0Gx87XnmQ6D\r\no/VB7bWhQUINHn5U9Qr3m89/+suNgttAFmF2uu19TV1XpGlCmiYzpdtjrSHPM5LEzRTjw6f9UpYB\r\nb7BoYIhLqC4xSCafLVOCNTihXazuN3BaIQ8hkKUZYcZaahR+C8Hg6ya7YF379jO5zvuZ/76HXq9/\r\n6BlSby1Emg2grxdjWuokC4MwU2JU/UHg5jLmhQZUpR76+Sv9PolrGHBpkuCsnTHxGkCvk3casMO6\r\nGTPQKRZcssDoc9aSJumMoTe/lhCoq5rgPdY0zEFh+3U7HbY2t3jsxGPsbO/Q63Zx1mGNbX+fpWn7\r\nWVPXOYsrmLmhKQalGA29Xg+gje8mC4xO9pEnTV07eU6e5VhjqauK6WTCeDQmTZJZ++xC3RsmpOVg\r\nPKLyvoHLjcU4h00SkiwjyzsMhiOCMbg0JUkzbJIQjKHynrKqSZ1mdoYWvJC4fiHUJKklyxvGY6eT\r\nkSQW7yvKcsr+cEjtPdY5sjwnSVOscy1bLc0y0hmg1TCoAsZasjyn1+8TwmKsv9i4EvlpALy0fbWu\r\nyWlKkmW4JMVYhw9QVjWTacFkWuCSlKpuIDtjHca59t0mCUmaUnvPpJhSVA2L0SaufXV7PaxzlHXF\r\npJgyLQoqX2OcJUlTVjp90iQjcclMXpJ2jIKH4WBEWZQz9l9KnuVkaT5jmXYYTIcY68BYsBaMJRjT\r\nhphzSQrGUnlPUVUUVUUdAljbtMP7Zp1oWX9ztl8j8w1L1Kh/jRw3LFZv5jEx9Lok68j95rtmpGlm\r\nlX4J9V0zxjRjWObDsvVLQITpdLrg+iyAnMyx1DogzFh9VcuIIngMAWcbgNu5WeKo4KnrirKYMpmM\r\nqTGUdQkWXOpI87R5ZSlZJ6P2NRioQ01Zl+3/bdKwLof7gxa0k8MUOQwQ4FVifw4GAySAr7gga5ZR\r\nDKSIOztAp9Oh1+vNs/QyZ8uK27es5fK827dvLw37oF2IQ5i7HAjgqa8V92M9prqeSTJ3G13GBtfx\r\nC5cdrunYlDE7L/6t3ofke2Cp7Ml6ked5Wx9REKX/m++YJTEK+FDPWIBTJpMRo9EAY5rs3iF4nDu8\r\nf1VlhTWOJEnJ0rxh9tmk3a+TJCV4qKq6fYUAzibNb2byaZmzU0NdN3Jc1+B98wqzAzEC1jTZY50x\r\nYOdK+7K5KqCu7kvpL5EXzayMX7rfl72W3VuvB8JsjQ8vZZ1/5ZVXHhrmH7CQ8Ed7TEjRfSV9LnP6\r\nUZmX++nkj8qj8qh8+Mr95nN88PR3+XpU3n8RvV8AP9E752zAw/HzYTHG/oPGID7E/VWNmz48lENb\r\n0TuuXr3KjRs3MKZJzin6pgb39IG5tFn6QIfk0biMhA2aTCasra0txGiXPgkh8NZbb7G3t8ft27dZ\r\nWVlpwT5JDCr9cOPGjdaFV+tUWi9vx8nM4xTK/+O42g9bed/Mv4BvlO66pKwc1hmMVcG9ncE5S8BT\r\nlBWmsY8xFnyoIcwHc1kF4sUp/k6fistn91vQ7lekrpp1oY0UfU/t/tXctzFem3cAcWGEug50Or2F\r\neui6i7AvAynl/9pdRf9OK666xAuuRrlh7kKsB1wbrvG9YoQ7NgRHo9FCXWLlejQa3bffgXZCCiAg\r\nE1rXUxgoYvgZY9rrxXiRPhPlX8f/kcyaUu84VpW0VY+NvGuDVoA/7RY2GAxa1pd2IZd6C3NTG1e6\r\nnZ281z63rgLBVzg3N7rzrNuMJQbBuQ2uAURswLm54R/C3JCWtqZpMgNvmkyyTe4OQ95JsQ6qGVVc\r\n6tk+N8/J85zBYHDI9VEzi0RGRVak33WAVRnj2AVYU8L1piPjKgt57J6l2Ugw3+AEcJFr5Ps0Ten3\r\n+238QR1fzCTy7Matz5j5qVHT7hJjxljrCAF6vd6s/SnWOrY2d1oW43RSUldB9Y1px8rgcHYOMNdV\r\noAoVaSfBWoNzOtajZzotKIqSoihn7CfN2PLtIYJnLtd6XYiB+3h91AqEgAwPAg2l6PVP+jlek/Tc\r\n0ozmWMFwziFemVIHmRvx4Ycwe+KDjv39u20cvgZYczhnsBaqytDpZC3LsKqaw6m6LinLQF2XJCZt\r\n56nIr7DnpA0C2sm6MRgMKMtyITmHuFgLkCjrhOwrwg6UWH4yj7rdbtseySwua9p0OmUwWIx5KKCj\r\n1K+s8na+yZ4xb2+1ABbJHiDuxXpe67mvx1yz9JedBsf7l56XUvTvtGIkz9TXa7a6AKP6dzH7L4TD\r\n+18IDWvZ+4q9vb2Wudnv91lZWVlI6NNk+zXUtWYmGpxLMUbWqIYx2HzH7NrZPjNzHxHWpfS/dp/X\r\nddN6hTGG2sxjOWovhZiFp+dyPA7x3NOHL1qvkPd4PdDv8XNifULXST/ngy6xLqT1Qs1Alf1BPtfM\r\nv0dlscRy9rAaL4/Ko/Ko/HwlXueXffeoPIQlzEL/GNNm721BpUBDUHBzgEz2aL2v/azx/bscf7m3\r\nxN67fv069+7dY2dnh8lkwmg04urVq2xsbLCxscGNGzeYTCacPXuWt956i+l0ys7ODmtra1y7dq3V\r\nge/evcvOzg53795t7dJLly7xiU98gul0yvXr11lbW2sT692+fZujR49y5MgRbt++Ta/XYzwe8957\r\n77G+vs7e3h4bGxtMJhPG4zE7Ozvcvn2btbU1JpMJR48eBWjtTWmP1pXSNG3jDcd4yUepJFVZq9hU\r\nzctgsbnDJQ6CgWAwWJxNcDbBYFu2S5IEwGOMxRhxeES96wUL9d3c8Jei3YqkCPDw8wh2vDAK6KR/\r\nqwGz2OBe9pw4Zo6U2CiQ62IjOcuyQ7GkRPBihtWyl84+qQFMqWts3GvlX4ytZfeX3+rECgLq3A84\r\nWFY0wr6sXwQMiPtdjFo9vnHMJjFul/Xrg4wXXQcx6IRJIAH3vfdN0P7JtF2EBQCUBSCEwL179xb6\r\nXbfF2iZNuLgKCktTA6iaKq0N7PY+oZwBQovxveYMju6MfdUwqqRuAih4k7ZggGRH6nSzFoQIoamf\r\nZGGNjaQGMFsEm3X/SzB1Pd5iLAvoGC+ewsIwxrSu2rKRSQYmARKlv9I0bVllQuMW9pBmykhmR0ko\r\n4ael6itxhQRhMZdl0bKYp9MJ/X6ffr9Pr9cjyzK2eluMRiMODg5at00NUglzSdwvxX1cwJdAMo/5\r\nSMOWreqaIEFkRyOKssSHQO09nbqmE0LrWlwxj50Rgyz3W/OWgTvL1jABbu938LBsvsYlPjzRiklV\r\nVXTSDsEE7OyffFcUBXXZsPUqX7Wvsi4pqoKibGRxOGrkQeSy2+0uHBRYa5cmvJF1AbWWyjwQFp4o\r\nE5J9WcA4mQuZcssWllqWZUwmk7a/dJbo4XBIr9dr5UdkVIPXsn5I/YfDYQsgFkXRJgQREDrLmmzW\r\nMudkDkynEussI0maw6n5fDGEYIA5yK1f2iXjfmtkDNbH67gUkR9dP/lbHwzIeqwPSXR9hIEpL1k3\r\nJLnDMtd1Ywzj8Tz5k4xFWZasra0tsDB/lmzrNmtgSU6VZa2RsdBM0vi+mh1Z154ksSTJYnzipq/q\r\nmSzLXJI9cr4XVtV8fmnmvwYSlx1sxfNT6zJ6f8/zfOG39/Ok+KCLMabdZ0SO5F3aIsq6Xs+0PhPf\r\nT8p87DzWOAIVhoQ6FDiTUYcSZzJ8gIn19CpDMIbCBSwVFoMLFoIFD6UDTMCFKdZARUJCAngIFYEE\r\nqKlISM0Uj8NiCGG5Lvl++krLhW671n21br0MiBZ50K5Xus/lmvg+8bM+CqDD/fpNyv36T971gYg+\r\nOIv79n7yGtdFu8LF941B/AetD3rf/iiM069z8aaJgGuCJa1oPCLMBFyCCQ7rzcyvlIaaLmZ2AIwH\r\nWxBwNH5+nhTXLGbOUJsKZxLqWsgztF5d3qvQ/AEKV1GbAZ3ySLO3WQhMwWSH6vyozEug2Rv8DPBL\r\nAhS2wuPohDkouKz8rDVDrvm7LsL8m06npGnKqVOnCCHw8ssvk+c577zzDtPplL29PdbW1rh8+TJ3\r\n7tzh1KlTvPXWW6ytrfH222/T7/cZjUbs7Oy0+v61a9dYW1vjyJEj3L17t9XD7t27hzGG3d1dOp0O\r\nt2/f5nOf+xwhhNnhb7POiZfTq6++ijGGJ554gkuXLrG6usorr7zCU0891eqhYoOL3aHX9DjczUe1\r\nJEDLuNEbxVy5rRcUS1HS55uYmSmzdva3WiUQRdse2rhaRdUuP8F+kPGri54U8aYcGzbSNrlGrl/G\r\noNNgzTIDQK4XhTUGzJZRWqX/YkVdAy+xUh4z4/RvNGgQP18b6WJU6DYLyCRFg2/agJH23W9hiUG5\r\nGATUhrH+PK6j1En3h1bEYqVr/puf78RfXAEFbBJmzXQ8WQCzxJgXcGo0GrV1kd8suOHZuRufgA9i\r\nIMdjqZVKYcjkCQv9tBG3HQAAIABJREFULvWT8ZB+EuBLAy8NSNbsvt5DUTSgmPceg8OaZM7gnbVJ\r\n5FraA34BrNQx3TSgArSgXOzmp10W9byRcdYLswZotHtgt9ulqqo2i6pmEMV9KLHWsiyjGI4XjFq5\r\nRgz0xsCu2lhyAvxUVdWwiY70WgaXtEUnf1iW8ETaVJZlk8BCnmtMc8JhmliYIQQIgbIoGA2HVGXJ\r\ndDKh7PXmiXGSsACE6vlxP6M2Xo/ud40AxRpc0H21zKCI/162BmvZdKZhhSd2vsaWVUkxmTIajbh7\r\n9+4CeKfj+XnvmU6rts+n0+lCtt0kSej3+y1gLwCejJ9mymk2qMiXJAHRBw29Xq8FfUSxEOBPDlqE\r\nVVbXNQcHB+3+GM9vqaNm3AngD7TzVeomgLX+fTpbX52TBCtz4Kmua4bDMUmSUJbzTOVNW3LSNKcs\r\np+18EdnX66ne+5aNZbx/aBBQr0VSH304oA1QeZ7sSRqUlP7X4yyMcgF5ZL6L27O8BBgWV5DhcMhg\r\nMGAwGNDpdNjY2FiYm1IPHadR2q7ngJbhWKbjPT7+nV6X6nrOFLc2wRjZbwXsO8zY0/Pc2nksu2Xz\r\nLF4X9Fg9CPySEs9/fY+HCfzTRR+uwfyUXuRK94mswzprspRYJwpYymoWyiGAp4n5i8nwwWBMwOIb\r\nrdin5ADegZ0ltTJQW0+KhzrgXQdfN1AfLhCwmNYAtjiA0ID7wejD71+uxGP3IDBKDJlYRuQezrk2\r\nhpPWt5YBTXB4TYmf92EvGnSGpm1yaAPLQcJ4LKQ/tdeLvl4bl/fTcfU6rPt3GRtZg7hx/WIg8lH5\r\n8BZXGmxaUpmCKrUzC9vi5HDB0cTGtm0aQgCquiK1CbbqIA5uzoAJzbpUN7F2INQ418T8D963B9TW\r\nWDCBEQW9kJGFhMp0IIVASelrMvJf3QL3ES2BBOcNrjZUSaA2gYwZwaoGkzzYrfdn7dd/l/u53m9F\r\nxz04OGBvb6/VP8WtVrPmxuNx6/EiOl6WZWxubtLr9djaasgXu7u7rc0sur3o76+++irPP/88u7u7\r\nrKyssLW11dqkp06dAuDKlSvtQf90Om1BxHfffZfRaLRASBGvtFh/vV9fPqx60i9bEr156AyzMggS\r\nKF27FmmDv9PJDwE+UmJQSm9y8kpmJ7n3M2jDz+h3e5+NcNmzYkUGWEB/Ya5wxq6QGkDTbY3ZCnE/\r\naGZEy1ZhPpnFWIpBymUKemy0aEBQC7BWSjSDQYOIYojpYJzyDGmXGN0PKppZIG2IjRX5Lh5bay1V\r\nMXfjMYAztnFtNfaQMdb+fvav+Wzep8tK3C/CFhFG5qgqIdSMhgdMJyOcc3S7XVZXV+nkOZsb663R\r\nKRmF8jyHPIdQk3R7rRKt4yxpV0ENRknfCgDguskMdHR4L2NTzfbRxoVU5EBkUjMERb6az7KZPMJ4\r\nPGU6Len1GsBTgAMZU6mjtYvBZTXwKfPC+3kcBolVJskxRLHVJyoxM0hkVGdRlfTvSZKwsrLC6upq\r\nCzyOx+P2mpipIuBfnjfrzn69yJqRzUkzOIuiaN2Pi6JoY78Nh0PGVa8FhgQomkwm7O/vt+ykWAYF\r\nIMrznGJ80NZL5ECD2hr8nEwmrXwIoJL20oV1IAb/tLK/bKOKDfr4b21kyLu+T2x43G+tjNeh+T3l\r\n8Ce0QNd4POHWrdvcuXOHvb29dm+J2V0AxmaK7dYk6hF2XZ7nbGxsLNRB1hiRJVsn6v6eEBr3+RCa\r\nOG9pmjEcjphOi1kczS6dTrdlj06nk/bgSxSOeTw628q1AHdlWTIcDtvEOLKeCHgo4LiAh/1+vwW7\r\nhFk6Go1aBWlzc0ut/yk2SbEzNm9t66aOk4rJuMTaMXmet+zVZu1dBLDmoNRht1Upy0Bm/Xe8j8ay\r\nL9dqlpoeVw3OSLZbidkSQmhZmcKKFnBV3O/lXjDfP/WaWVUVo9GondviNi5rkp6LWqbj9gCUddEa\r\n+LJ+ybhL8gk9F6WuwvL2Nm3XG80Clf7SJ8v3e2ldQMu5nmsx+BeDAsvmvnwvbdd6zoMAw4ehyCGb\r\nuPZKO/WJvMi57DG6/w4ZS8ZgQiBNmrWBqsKlCVQ1LknABIIvsNZDcMzImY2BjBjaNdC4o1uTEipw\r\ns8NrD9gAVRVmYXMsJjRxo62Ter3//lgGSItMCkC/DLCL+2sZAKiBv1je4r+XgVZa5j+sJQbUYQ6Y\r\niWuYZqFqVrUGPjU4qtdWa20LCmo2oAb1YgBVA93xfh2Pz/3AQvl/HJ7hUfmQlQDBhmYdA5KQgjD9\r\n6hpIwIUmGrkBi8hwIHNJ+7m2p70J+MRTiTVlDFVdk7p5IjoHgiHSw2EqCA6SurH7gk2pbUKozYIt\r\n/qgslhACPogOZZoDo+AhgDEJwS3axbKP6zXng5y/Wn+aTqdsbm4yHo+5fv06J0+e5KmnnuLixYts\r\nbW1x+vRpLl26RFmWPPnkk3z/+9/n2rVrPP744y2ZSPRssZuPHDlCkiT0er3WTlpZWSFNU86ePcvm\r\n5iZPPPEEBwcHrW62tbXFu+++S6fT4fHHH+fevXtYazl9+nR7MH/s2LH2M/Hu0geiOizOr1tJ4pg/\r\nYnQL+AcssIEEUILFeEEipHoDE+VE/o5LDFrJdb+IYqqNfs2U0sb0spds3ssAS/2ZbPwComl2ljYs\r\npO56s9aTVgNjYhRoEE8rUNqYkn7WSrzupxj8W9bncj8NAsaA0rI+FcU7Hj89NjFrTdqigT4ZCzHS\r\nNRtkWk8W2q/7T5SkGEhcUITr8lD94vGMQSFRwJxzUPba8ZDg6LIoyDgLaCYAlswPAD/LgirsId2/\r\nAmrEcbc0+ArJwlhLv0h/FUXR1kMri62SlyQks03duGaOVqVnWjT9XPmyNY6zPCMJAayhDn6WbKdh\r\nqVUzZTRNU1ySNG6ss1dVVfiypPaeoiyxzpGkKcZaEsUslDougFszw0yDAwtZl2fJSNyMfZdmGZh5\r\noolSMRWlH7RbZ6/XW2BkSdF9JXIKtOCngI9TPyHP8zZgrLAKtYu+tEUbVy0QWx4ONB/PKxlHzQgV\r\nmbCVbcFUYYotY/vE8h3PiWVzc1m9NLCgr18GHuhnx/NfrzvxHJ9Op9y5c4d3332X/f39hevi9S7J\r\nkxb4qcYVyWTMtCwoqoa9F4wK8p84ctfBpfOMoExNC2rImAlorNdM5xyrq6ut/MgasLa21s5FYYVO\r\np9MFgErWDD2G4/G4Za/puK7CGtRMJH0SOhqNFhIOpek8G7Cwe51rXs1cqWhi4EkG8JIkaV4606+W\r\nGZkvOitbPKb323fj9VfLvGYRS3t1qAO9H8lzZO3UIJhmV8u+quuv4xhK23RCB1mrq6rijTfeoNfr\r\nsb6+zpEjRxbcga21C4eZiwclzf3z2f4u61PtPcFaTNJkd28SYLHwWpB9Mz84lboCC/0h7Y77f9me\r\nFX+m3cj13Iv7eSngNauHPpyMgdGHqej6N2zXZo5cvXp1oY0im2macvToUdbX1w8BJ4f0Fe8xwRPs\r\nzJZ1BoMHBybUM7c4S+aBOhBSqELAuQqDow6WpCpxaQdsCsHjjCEYT0GJISMLFUnauP8aPyUYg3Up\r\nZmbk4X717DjNVIvXWKBdA/Q81u/yW21kxuOhP9c6NiwCVB/2otspMgb3B0KXsR2XHabJ72QN0wBh\r\n3J+6DnKNMFsftLdrF2P929g2eFQ+xKWGysLuYJeO7VGXBp/UGFuALwmugw+zsEGY1tPHGEPwni6O\r\nqS9xWUKYNrH+bW5myRcdlQmkLqUYFaQua9jRYbbXAYaAp8bkBlul+LpPYESyukI3rHzQvfPQl2Bm\r\noJ8PVKYgJUDpCXnCqISOm+vS7W/uoyd8EEUfLGRZxvnz59tDOu89n/zkJ1td7/HHH2+xon6/z7PP\r\nPtuue+J9Izp1lmWsrKws5Avw3rfErAsXLjAejzlx4gTHjx8HYDwec/r0ac6dO9fK+M7OTus9JDbo\r\n0aNHW13nyJEjC6EUtB4XHwr/OpSk2+0unKqLcSyDKoOh3QJhnukwTQ+fYsNhxh0sT1tdl4eZW8ao\r\nU4SfMR6iuMimp58rind8b10H7WKl6y990uv1FowpvakL4KGZgbqd0k8wN2Dlt5ptIvWSeguYIeCb\r\nVu5iAE9v7lrB1/cUZV8DkG3/14vBzWPQNHZ3iCeIjvmmWX/ytzA/YsO0rYM1TWgJ01DWUWO3zGBd\r\n1t77jTHMmZ2y8Ggw0xiDW1lrjUmR+6KsGY4m1L5JFlDXAWMTsryLS2busHWgHE3IjV1QrqVuYsiP\r\nRqN27GSREnloTlGKBcBvLh/VQj9oKrTuY+dSvHdkiaNMHEVRUZqSxDX3mUwHBF9hAniJQRUgTzsk\r\nNqWq5qyshmwY2lfwnmomp4lzBAF46prxaMRkPG5jpmlQRdohIExsvMYK6eDggLIo2lhqSZKQZxlW\r\ngABjqAQ0DYEC8AJWzp4nbDCZH3quWGtbVpCw/+TdTFhwF5XEIpIkYjweUxRFG7swZvnI+qDjFcoa\r\nIPKugQc5XBH2mM1ty3YS12MNWsVMorhoJV+XZQCe1Ev/fxmwHv82vk4DEBIfL1Hj4L1nOBxy+/bt\r\nQ/WKD2bwARNmjN/ZCXU5LTioaobWNrFRZiCczKk8zcjThjFeuzlwr92JZV3b399vAXzpcw3Q5Xm2\r\n8Hv5rU64Ya1tny+AhLD4BoPBApO4YcN3FlixxszjieZ53rqgV1XFcDCeyVRJllVtG4V92+uutKzI\r\nsmwS0oxH0/bdJtN2LdDP1Ht6vCbq/+s5I/Kq9w+9r8pnGiyAuS4g3y+7ZhmoJXuG7ud4HkvYBQHm\r\nNfAluoqMl8TulKQgOqOz3tt1feowy36uQFLvm6zo9Wzts9aSzg5Apa2yP+sD0GUHNboPlu1f+sAi\r\nBmD1Z/cD/37W4Vg85g8zWysGngaDARcvXuTEiRMLgLToTEVRcOXKFU6fPs3W1taDAVZjqI2jAFLT\r\nsPAKmlhWaYCicfila6BOoKTxKjEeynKKy3pM0w5gyAjUvnGzA8hodBhvA5UBgiW1CVUw1AYSYxpD\r\n75fsm3jf1PvDg+aZ9NV0OmV1dXVBXmKjR+aTDo+gDzI06Kdd7R8mI/X9Fm3raN1ZDNQYgI4ZOjqk\r\nidxP97W+v5TYJtLzXua69H/cv8I+14CBZhLGdXhUPrwlEDhIDvhXF/9v/sV3/k/2/ZhARm3AuIo8\r\nbdxHq7LE2RTj53tDkmTNwX3S2AB5Ioz7QJakVMVsD0lqfBXAQ5Y0sY/TvDm8N6456PAmYOqS3OdU\r\nGbhiyMdP/Rb//N//X1jn+AfdTQ91sd4DjoDn7p27JGXJ/nSM7fQ42j3CQWj0TyEDPEzzNq7LdDpd\r\nsOlhfqiq94i6rnnuuefaA3A5nJekGiGENq6z1jUFGBQyiXyvwUexpfTztGeVXvvKsmyxALnHMtzq\r\n16m4L/32C1+GxU1CGw+iPIgyq437uaIqLg0BYyAETwgeCHhf02TDnAfjD8HjfZPAoKo8vvYE34AN\r\nhDADIeSk3Rw6edcvzOFTdr15a9ZVrFjL52JsaCRYBFmMEW3cx4CZBrRiwdeGVAwA6jrIM6XfdZ2k\r\naLBQM21igyJ+j40KPZHlHtJvGtgQUFUMHt1ubXxoZkF8fzHspM0x0Fj5GoyR2LL4EPBh5tZrmpMn\r\nHzyBoL6jfUc9b9lE7nQ6rUzLNfL/EAJpkmNdgjGWgCFg8AG8D5RVw4wzxpJmOXnewSUptQ9Mi5LJ\r\ntKDX77VGnCws0q8adJWxkH6SWHd1UWKNw9mExDUZaMHgfeMyZMwiuzKW5TSxGDzBVxAC1gQSZ0iT\r\nhDRxDA8OMKE5tbOmYbFYHM7YJl6hcXPQzwcsTTBaeYXaz66zLQsm1A0oWBVlw9wzc+ZffIItbEoN\r\nCOs5YWegpK9qLIbEObIkJXVJ437gPdaY9tn4QFU2MeUm4zG9bu8QICeGuAA4Mh46tl4LrqV2AfwJ\r\nIbQxCHu9Xlt/2bQE7J7T1hflKYTQyrMPgcl0SoCGReQc1rkmlsrs+6KaHpo7ev5oQ0GvA/Ku3Rz1\r\n7+4H9iz7bBlooD+LDwQWQIzZ6bB1ljRLwcBgOGD3xi63bt8iyzNc0iSPStKkfclnxbRq3P1twyK1\r\nzQaBr2t8XbexEZ21ZGlKnmWks1ibiXNNgiozr/MCi6tuGHPN/mQOgXppmhyK2ar/1uu6AHKiwGh5\r\nkTU7TuoEtNfo+aHl9ebeHt7XYGZ7J7792xjo9jq4RCWyMc2eWlUl02KCD1OaREC0eywE6rpqP5e9\r\nWb9kj3ZuzqiLdYAYCNbXaIBPr7+aAawPg6Rf9T2XsbViWdPhAaT/YX44J8ZvWZZtaAIBSnWsLnne\r\nIRA7VBhnsTN5tInDEyjrirIq59/NZNYmDuMsWINxDWNZ9BzpU/lb+ln3d/yq65+d9GtZv8SHC3HR\r\n+4T+O16rv/e97/2zQz9+H+XLX/5yAvwP7/f3MXA3nU7Z3d1la2uLkydPtjF8+v0+6+vrrK+vt0ze\r\nvb09dnZ22t/G96zrmhu37vAv/+I7vH7zNqeOHePbP32Hv/h3/44q36Ccev7fv/i3rK6tYK3l//nL\r\nb/Cj166QV57j62tgMy7fuMNXvv4il965wZmtTWrv+eMXX+XO/oBz20egrrg1LPjTf/si3730Nuub\r\n67z42tt848UfUqZ9TmyuNPEFf4myv7/PV77yFd544402JMIy0E0z1rXe9fbbb7O9vd32ifeeixcv\r\n8tWvfrXNyNjv97l9+zbr6+vA4bARxjQHcru7u5RluWCkPkzG6vspMRhqTJNw6Fvf+hZHjx5dAABj\r\nHRqaPn3jjTfazPX6vvIqy5K//Mu/5Fvf+la7X3z1q1/l9u3bnDx5kq997Wu89dZbHD9+nK997Wt8\r\n73vfYzqdcvz4cay1lGXJj3/8Y/7sz/6sPcD8wz/8Q27cuMGxY8dazwVdx0cA4EejTKqSP3v5T3lx\r\n90WqHLbXjtLNetwe3mTo9xlOK4pQU4SacVUy8RUVgWExZRoqJnaILQPj4QGh66ldxXRUUpQTyEvq\r\nUYkNhn6as9rpc+r4SU4ff4wksYwOBtg646AeMPH3MKXlrhliKBgelPzn5/+Afnf9g+6ih7uY2d5G\r\nTZo6br38OvmdAzr9DNZ7pC5r7aRlMWw/iDm8LFSIgGz64BbmbGmxh8Xe0kXbEMv0R9lfYM6QFiKa\r\nXCN1EjtMQL37HaQIIKlxDrlOt2kZk/vDUKQff9GSTCaTQwqmZrIJKiudJG5L/X6flZUV9vf3Dyn8\r\nOtC192BMIIQa70UxC1jbDE6W5QsVikEqXT9dZDOtfFiYMBocS5KkZexoAdBtzJTbT9yZmiUTA4xx\r\nfaUPdPZN7UItQisGqgi/VhKa/lp00ZX6AAu/1/T+2KjSfagRcqmLTrQgRkDMIJBniMKjgSs9aeOT\r\nYz0+8iw9djr2HYCLspEaFk8/x+NxA6bMQBUbyYewMaXv4r6QBBK6fWLIN/JRgUtIOw6bZiQzlldR\r\nFEzKKbfu3mNzc5OdnR06/X6zMLmEJO/MGE77rUx1Op02i6yMv8hXzLCR9vb767N4cCXOidtgjnMz\r\n98UwWehnGRuZa9mMth88WGNxnRRjbAsg72xtt6f+++N7OOfodGYx1TodhoNxE19xFrcNH2bzs8lA\r\nnHZ7h0CVBuS3BEKbMKHT6SwwqmQeSIiAWK7k/1Uxy95qGhYYvvlMGI55nmOS+YYhCq+AOHfu3GmZ\r\nV/JckTsNVsv8kTkhp0ejctiuBTqpw3jcxFdbW1tr14vRaMRgMGjZEdPplJXVDjhLsIYkZO0aIf2f\r\nu/lcCSFA3bAWq7oiVCWYOair2cNavvV8lu9iOdL3kM/02nG/EruFxoBPfKhxCCg0tmFJhdDEvUoS\r\n8m6XlbU11jc2DgEW8Ylbv5O0YyNyGnzDNE2SBGeauKD75T3Gw1Ebj3NlZaWJy4dkkk4py5SyzBbc\r\nc1u3NNsAPb6GalQwngyx1nJ05zidTqeNoSd7nMQH0XuH7CkrKyt0Op3WVVjGW54rh046GYheJ/UB\r\nWpblrbw1ySzqVu5WVlaYTseztSUjz9NW7ubJQxbdY0WuZV+ZTCZLQVGRlyw7zAbVf2t322UgsShg\r\nArLJHBUWZX+2ZupELSLDwIJbsJ6HOnu6ZjHGbdXrv1wre77E7BO3fmEDyhwNIYA1VL6m8nW7J+bd\r\nDkk2d5ny3lNUJaEs2rUl7zbu2tNpgQ8VLjE4l7T1r73H2Ag8nQGxhvlel7t5v+n1XctKDOrLeIk8\r\n6t/He2Dslhkrxg9L0fqF1G08HrdjKCC6tF+f8us9JgaiZG6GANvHH+Onu+/y45++wQ8uvcOnP/40\r\nL778U/7Lf/gPMJ0ut+/eZaPT5a339njmk5/isfNPEDIYTKb85Op18k6fqXW8dPkyW5s7/OV3X+I/\r\n/uJvgU3wFvLU8PjHPsb33tjl6994kTtmnY9/7Em++6NX+AePHxeV+H2Xqqq4d+8eFy5cYG1tjT/5\r\nkz9hMBhw7NgxPvOZz/BXf/VXJEnC5uYmV65c4Ytf/CLf/va3GY/HPP3001hruXz5Mn/7t3/L0aNH\r\n+dznPsdgMOD06dN84Qtf4I//+I/bNe0HP/gBR48epdvt8sorr/Abv/EbZFnGSy+9xMc//nFeeukl\r\n1tfX+YM/+IOlAOSHtcSgeVmWXLlyBWMM169fx1rL5z//ea5evcq5c+e4evUqk8mE9957jxdeeIHB\r\nYMC9e/f40z/9UzY2NnjmmWf4/ve/j/eeL33pS6ysrHDmzBnOnTvHN7/5Tba2tvjN3/xNXnvttTYu\r\n1ssvv9wCic899xwf//jHW515Op3yox/9iC984Qt897vf5b333sMYw7PPPsvKykpbb1kf4jY9Kh/e\r\nYo1lYjxToD/Neebkp3h85zQvv/MjXt19hZ3NU+zs7HDp0mV2drZZXz9CMW5itt/dv8fb46t8+vRz\r\njMcjfnTzhxShYsNscvrsY1y+9VM+duwZVvtHePrxJ/nOt77HRthmu7vF6EbNhZ1jfOnJ3+bPf/rn\r\nXN+/xJnNC7y6fwW4x8QZqvRRpt8HFgNFqOnYhKywHGA5+fQTvPF//X88duseK//JJsNyfliqGcLL\r\n7Ou/76Jti263y3g8bnWh+HCxrhsdVoBBbZOI7arjw8s18nvBWiQmdJZlbXbh+ABTdEfBQYqiQLxZ\r\nNTlLezxq8hKw8N2vU3EvfP5zX46NSinGmAUKpRjZuqNNkxBIMROANiVDwDnbfuZ93TK6hA1IeLBx\r\nGiPPEBmoCnTTqDPMYzFpYZnHVTocQ00ARC1kMaCm3TPl/7p+Me2+qeJy5pvUTwN+MQMxNsr1WKQR\r\ncLZskdCIeWx8y+cxo0zuJ5NGg8FxX2g3y2XGh/TF/Z5hoomngVQZTw1gxG2MgeHYQF1gmUXj0LBK\r\n0gXjSF+n+0pTmhfZbfPTA91OvUhpsEN+14IKoWH8ZVkHaxOqylMUFXXlscZR++mhui+yckqqumjA\r\npFDTeE7PZS9JMlVf6Rd92uEWZEPGSwwuHScrlkdjzCxu4OGi26vvq+XFGEOWpIfapeeEBrqWMdz0\r\npqHHfdl4ayOllWnqQ/Ijz5YNKo5TqTflypdMiylFWeJDs7bV3jOeTBiOhuSdWRwW79vvdTxFQ1h4\r\nrp47Ut9lbdLr0/3m57K5Hsu3XnM0AKNB0/h5C3MbTx1qAh6bWKwzVHXJeDqm8hWVr3CJJUkdaZaQ\r\nZAlJ6khSh0ssw3uj9l4C8si6EyfP0bHgBGTp9bokiZux+FKSxJEkDucszlmKomHGNVnBG0adfGdt\r\nk61Vu33LOIvrt/SBJP2Qw4QQwiE2vJZxkZ/pdNrKaOwOKkpPlqWk6Zy12tSlYDIZk6ZJW+9mHOex\r\nROu6wod5/EDtTixjFO9P8XhW1WE29zJ50/NDrwHxqWP8ffxZLJ/6Wbp/dP3l/tLXsdtcrLxJW/RB\r\nQQwcyv65stpbqIeulwCb+p56Xs7nbePd0Ol0Zntiw7qcu6g24zdv+/wF7tC4xP2kxy4ev2VjE68f\r\n91sPQggPDfMPFttflmV7sCxGAMw9KoA2e/h4PG5jAcl9tFwlSUKapAymBfvlhOfPneLS9Rs89/RJ\r\nXn/7Jp86c5p37t1lK085u3mUacjZOxjx+huXeOfOLS6+tcvY5BzLEvr9Td6+eZ239m7R7e/gqLlx\r\n7zYvvfYmz547xnBS88OLb3H+WJ+bU8NzT57l6tVrfOb8Dmma835LCI171E9+8hPOnDnD+vo6P/zh\r\nD3nhhRf4yU9+wpUrV3jttdcIIfDOO+/wxBNPtCz1s2fPcvnyZe7du8fFixfZ3d3l4OCAxx9/nNFo\r\nxGg04vz587z11lvcunWLg4MDBoMBn/3sZ/nqV79KnudcvnyZ3d1dfv/3f5+jR49y9+5dTp06xfb2\r\n9oKO+WEuy+ZUXde89tprTCYTzpw50xIK9vb2eOONN+h0Ouzt7fH5z3+ev/mbv+Hg4IBr166xtbXF\r\nF7/4RV5++WW+/vWvtweTjz32GCsrK7z44ot8+tOfZm9vj+3tbYbDIevr62RZxt7eHhcuXGjl+/vf\r\n/z79fp9vfvObbGxscPXqVZ599lkuXrzIuXPnSJKEl19+mW6328a1kvbE7XtUPrzFFxO+9d5f8cPB\r\n3+JSw/nV8+zYo/TyDdb72/zGY09ihoFPnH6ane4W3TLl2Sc+yWrocerIKU4eOcUXTrzAk1uPM6mH\r\nbKxtsTJc47mnPsn1G2/zhae+yPj2kK3OBnmVceLIMVwJxzePUhyMOdLZJuv2OdE/ylM7n+Qnuz9m\r\nHG6Qr23wj8/+I1Y7ax90Fz28JUBSe8bWNt6M4yn2SI+jx9bZ/evvwKVrFB873x6kLhAG+ODm7jL8\r\npa7rdj0TG1FsNTmUg8VDZI2dlGXZHvoKeKjjZmtCk+htmoQkerLWKeXvLMtazErIYPoAW9oh9dfA\r\n5Id1fXzfzD9Y3PRiA9T7eVwnUaSstS3z4MiRIzN3Qos1bhY8dK6IZpkO+N+4v7QKuzWtgR27xIqy\r\nvQzYkbrAnEUfuW+QAAAgAElEQVShlXNR3sVlTxetFGvmQAzmieA9yHiS5+tkICK8WumW+4mBo40L\r\nLXwxAALLAzKL8SLPjvtF10/uE4MW8gwZc80Q0P2pDUm5n/w2pvzqhUqer2MaweFsZcHZhTGLr9OZ\r\n1jQjUq7Vhl8MOOmx0CCRBndWVvoLfaHHTT6rqor9/f02Zk6/328XDgGSxciU18rKCr1eb6FeMo4C\r\nZgj41sQIS2dG/ISymjZy7XIMzZxqxn4+XrLATQvJUJlAkNiXliRJ6XRyqqrEunTWJwlF0QAH4/GY\r\n8XjMkfXNBcaqGMzCbtMsPWmLlsdQly1rS2RC4nM559pTGMkarQFA7z3dPGvbo8dFx77TMd+snbvv\r\n6rgRmuWl3deFOaOv0e1J03wmfwK+e0ajCaORMI6be0k20V5vhTyvWxdDX0+wGKybu8pjHa5n6eYN\r\nO8zOkqocMsiNbbKl1TXjYsp0UjIZF0y6Bb1es6murMzbb02CmYG1crhS1cV9wQOZH8vARP2ulYxl\r\nZdl92/vPGKOh9lRFicWQuoTNIxtYDDdu3FgYcz33ZX7rcZZxkjppZpeO51cUxUJCDsm02+l0WjBM\r\nu2nrdUuvEePxuAUQ8jxv3b0lAYvIo4B+UudutzuTn7RdK5xzbYzIwWDAcDjEOdeCiL1ebyGpiwAb\r\nxpg2wYhzjuFw2AJ5oqho+dfxNV0S5glTqpoQmkQg1iaAJc/nWeubzMBuYaz39wcL654w952zNIcE\r\nMlZmBkDqtT6gsw3r9UFkK3a716e1sn4K6KvXdWHo6TidOgTFHLye70Xz75sXwHRakqZTJpOC8XjK\r\nysqYlZWVNgboyupKO09kbdD7tOyfGpAMYQ4Yy/ySNUfkVNxeJA6g7hs9B6QtMYApbdGeBMv2VzgM\r\n+ulrlinIuj4PW5E5Kn0vema8fmn9ZNk9pIhBcvmd6/wfX/trfvvZz/LONKN28Offe40V55mmwLik\r\n3rIMbM1osEc5HXHkyBpfev7ThGnBj15/g7/46XvsdG7w5OnH2Nu/x5VbV8jNFv/RF3+XXl1x+cY9\r\nvnnpCp1ewqTsslbd49+8+AO21jNc91cXEN9ay3A4bD0NvPdsbGywvb3NJz7xCe7cuUOn02F9fZ1X\r\nX32Vg4ODVu5OnDhBkiQ899xzrK2t8cYbb/Dmm2+yubnJZDLhYx/7GBcvXqTX67G6usrJkydZX1/n\r\n3LlzXLx4ke9///ucOXMGgOvXr/Pcc889lHL0foroofK31huANnN7nuccO3aMv/7rv+b3fu/3+KM/\r\n+iN+/OMfs7m5yWg0YmNjg/fee4/XX3+dTqfD1tYWn/jEJ3j66aeZTCZ85StfAWj1pB/96EcURcHz\r\nzz/P3bt3W51G4sd67zl27BhbW1vtfvL1r3+9ZaHfuXNnITaWrv+j8tEozbGfYxo8oaxZSTt4U/LT\r\n4euMR2OePHqONKTcvLnHyuYqpS14+fWXqXuem+/d5Nyp8xwzx7hdvstPb16iqCtW+iu8m++ymmWc\r\nsx9jw23y6vAtxt5TWU+R1CRYQl0z8h5fFvzw2jf5bz73T/nXb/wJt6vr9JIeSTkiq7ofdBc91MUA\r\nwSV0fYUPBft5YJWUu26D43/wH2IHt7n55f+Z4dPnOPOP/lPqk2cgJAj6UAOHAwD9PdZf6cwAe3t7\r\nXLlyhX6/z8bGBo899lirryRJwo0bN1qPC2j0nKtXr3L27NkW+LPWcvXqVW7fvs3W1hZnz55tnyf2\r\nvuhV4vqrc1GILSxeXlLHTqfTYj+xHic62K1bt0jTlH6//0Db56Nc3G+/8PkvLzPupEOkU7UyqTur\r\n0+m0HapPlOUacaWK3R7lN0VRLYB/omSLgRDHGIyBFJY8N6aZxqwYYVcIgBKztaS+OpiklLgeWjmX\r\n73V9NdAnRoKOW6TrLffQ77pf9BjFgKB+nnbB1tkY45hs8vyY5aP7bRkldlk/LzMyNHKvlRHNQrCJ\r\nWzqumhkTP0NfG8tuXNeYXSK/mbdvMYua7kMNHOng+boOaToHmqQvNbglJe5/KdV0MZaftQ2Ibo3D\r\n+4BnCibMmEqLLJeG0SQxsVKMpXH/tQ3DNc87NDHPLMY0xjwsuqUaFlk1Wj5g7namgWF5OefwZj6n\r\nNMAT95OwavUzoAGPtOzpuSFMLG1c64VfG9OarablL2YNCfgifZDkrmXhNMCGp64ryrKgLAusNRTF\r\nlLqusNaQZWnL1EoSR1XPM0Tr5+R5vrAJSYnniQ8lPjSstIBv8qn5irIqmBYTksThfY0xYF0DyhgD\r\nzXDOmVH6ZE3PifsBADKfdHzPeGz1//VvtRwI+BEzewWgCiGQ5/mhcRWQvJv1D7nISt0bVly2tF2y\r\ntmgwKF4rRVb0PI4Zjs6mC+uZZj4KkC1t0u/6wKSdt0v2qcFgsNDnmpUuSUI02KTXnjRNGQwGC4cF\r\n8lsJCp3lWTP3ozkeAtS1ZzKZUlU1xjQHAmma0cT5a64py2kL9umYgcKWbEDAxZh2cyYiDywC/i0b\r\nG/lex6jSc1z6Qo+/fKe/l7lBFMvQ+xrv69nhY01RTBmPR0wmY6bTCUUxZTqd0Mk7lGWN92CNI3Ep\r\nySzbsrPJjDndAKkhzMDQYDBYjGnYrLFuIftmp9NpFVgtH1reqioc6h+RL723y/3j3y/bW+MxeNDr\r\nxRdffGiYfzBPJFFVFbdu3QJYmCfCBJa5PRgM8N5z/PjxpWBH23fWsHN0i1MrXY6tdHjm6XOsJvCl\r\nz36KI3nCztoKR9fX2er2WOn02Fpb4flnPsGqNXQTx/aRdTbXjvDJsyd47qnTPHX2MZ556mM8ffok\r\nJ/opHSr6vZzEGh4/vsUXn32CU0e3OLKS8/lnfoPV5JePu2atnYUCaGLznT9/nu3tbU6dOsXTTz/N\r\nxizMwtNPP81jjz3G1tYW+/v7vP322zzxxBO88MILnDlzhk6nw+rqKltbW6yurrZ9/PnPf57jx4/z\r\n2GOPcf78eTY2Njh58iQhBE6cOMGFCxcYDoccP36c8+fP0+v1OHLkCPDRAJuW1d85x/b2Nk888QRH\r\njx5tQbjTp0/z1FNPsbOzw9GjR0mShC984QtsbW3x1FNPtSzgCxcucObMGabTKSdPnmwPjXd2dijL\r\nkmeeeQbnHB//+Mc5ceIEKysr7OzssL6+ztraGsPhkN/6rd9iY2OjPbA4fvw4dV3zmc98huPHjzMa\r\njTh79iwXLlxodWa9jjzMYP+j8vOVgOEuFd987xv8+L2XsSGhm/cYVHc5mNziYHyHvYM7nHjiOD+8\r\n+ANGjLgzuUPpSm4NbjO1Jd9+64d0+4GSA35w8Qe8uv82u/U+ndRw9rEdbhzscfnWmyR9GPkD3ju4\r\nzp3RHgfVXa7cukq+kXFl7wpnVj/G9658l3f9NQLQpcvvP/VfsPYrPOD4SJbgqTE4MphMyXODvXaV\r\nwfd+wo23r5N99lmqs6fonj1DkvVxwWBCo2h5Ax9ERLqYLAHNmnjr1i2stZw/f54333yTuq4ZDoeE\r\n0DDP33nnHYxpyF2vvfYaxhiuXbvG/v4+9+7d4/jx49y5c4dr167xzDPPUNc1nU6Hy5cvc+XKFVZW\r\nVrh58yZJkvD2228TQuDSpUvUdc3u7i63bt3izp073Lhxg93dXfI8b1ntu7u7DIdDer0e7777Lm++\r\n+SbOOa5evcru7i5pmnL58mWKomBrawv4cK+N2kb7RYr57/7pfxtg8TRZgzbT6XQha54YZBKTSFMq\r\ntXIvSqm4bGgWmbAAkiRhPC4XlH5tmHvv6Xa7S41LeU7FYVcX/ZLYTPrZchos9FXtlqVjlRVFsZBp\r\naxngJPcXhokGJKRP5Fn69xrcjJX5Q2CQtFW5vmkDEbhv/0jMRmGWAAvB6bVbrzxPgznLAo+KjEj7\r\ndP/EioZG5JcZHy7PloK0UmKDPAbqpC76HrEMaFaYAAFz5mJ26B66HwUE0HG2kiRpGYDOzdmFknFS\r\nGDsCgAhzR4AnHcPq7s19BSQKqDRnvU3LewvggFHMmxACk+l+O7beQ1X6mVz2yPOc/f2Dpn3eUVW+\r\nZTFJ/K1yUrf1EzaR7vfxeHxo3PUY1MmiPIlMSBvkdLvT6bSKr86WWgzHh2Q9hNAaeZrR1el02v9L\r\nn1vr2my8OpmDGNMivxo4lWy7o9GIfCVdkBPdlrpuMvDK6dLKygobGxusrq626+FgeLftU2FLaqBT\r\ng0VzhtY87lnti4X5Gs+vjY2NlmmmGWmyxggDTY+NDiEg4Jz+Xo+fAHTLvpP5G88tPUdkfdcuu3os\r\n796928a0Ozg4YH9/n8Fg0MaOPbp2YgGQi4ue/xoQmQN8aWvMrq2t0e/3DwUaljhWw+GwZWzK8zrd\r\nfjsWmjEq9xA3Kg1eCnApa4EwBnVGZ2nLrVu3Fu4t8QVXV1fpdrutLOg+1vJ37dq1dlxkHe/1evR6\r\nvVlclcXs1tqFWdbePM/p9/tt3+j9J1A8cPx/lkufBlXjwxnZf2S8dD2lrcJe1zHdBCSVvhEmp8iX\r\n7LeSbVnkJA6dIfukPpCRPpT4pBsbW23/SIbv+NDnfnIYQiDLQ8sK1Qa3rFmyft5vDhkOB+iPxyIe\r\nF319Hfx9f6PHbdm9Qgj87//r//Yr0XpDCB1g/DMvfPA9WuBiNBrx+uuvA7Czs9Myx2VdEUalgOuf\r\n+tSnlq6fMo619wRjsXVoAG7bwMUmAFUNiWtw8zqAMU00mmCasAxG5mgCvsY4D8GASWYJh2pMKAkm\r\nIeDAGExdE4yh8pAmBuNrcMt1qZ+3b+I+Ej1Gg8Ja955MJnzjG99gNBrxu7/7u3S73aVGgvZw0fdY\r\nNuf1tfK3vH+YDah43dOfx3KlD9S0niu69DL2oIxVDMpp/UCzXaRIpmFo9rFlLnUy3vqwXO/7cs37\r\nMRAflYejBALj+oA/euMr/Msf/ituD+9i05wJI2zmwKfUk4qsm1KECR4PzuCLmjzrUE1rcjJCXVF2\r\nDHiPsc0psptUBOswVJRuZsPWgdo2CQCtMVQ2sDLMOffkeT6x+ln+zXf/NYPePXKT8fSxp/if/uE/\r\nZ908SvhxvxJCoKbChYThuMYnBavXr7L3L/4Y1jfg97/EKO0TrGF7+ygdm5DMNqhgPDWQ/B1z/5at\r\ngUJeiPWP3d1dxuMxTz75JC+99FKrZ25vb3Pz5k2qqmJzc7MF97z3/PSnP+XJJ5/k1Vdf5fnnn2d/\r\nf5+33nqLCxcucPHiRU6fPs2lS5c4d+4c169fZ3Nzkzt37pCmaRtyR0IBXbhwgTfffJOTJ0+yt7fX\r\nrm9Hjhzhvffeo9vt4pxrQzAIY/vEiRPcvn27De925syZBYLRh7For5NfpCSxG0qsHEpWS2ttG4Oi\r\nrmt6vV7r5qQfLgbHMhafKN+yuWl3Dtn85G95vmyI+nPNtsDP41Vpo1Ar/9I+bYRIe8WtVJ4Vu/lq\r\ng1TXQW/aMaVUG0Tiq64BxlYhVca5VhC0AheDZXGR9sjGHwuwNrjku9iAkf9rdpf8dtmzY4BNf7es\r\nvvHv9fd+5r7o1Uv3by2ZfglNhkUWWV91OXf70YrVMpmO62athSB93WT4bbpIubZ6yLMmLp/BUlcD\r\nqrKmmJakSYlLfLuQiMEHtMapAFjyfAEVZNx7vV4LKhpj6HY7LaCiM+XO67xozOXks3Y3bn0uMY2r\r\nsAl4P3OZDM24CiAnoGRd19ya3FlgT4UQFq6TYOpaVvRY2nSRzRizsYS9J4CKVl6dc4SiWph/Isfy\r\nDO0OqNlYcljQ7fYOgXxyP+3Gp9lloEAvM79G3gUk1oa6uOIIICDJA/r9xu2q08kZjUYtEOB9TV3P\r\nwTEIs1h0nRZAKssSbMBYg3VRvNBZ6ITxdERZF9Shog4VZV20wIVzjtznbbtj4F3PBT2Gen0viwez\r\nj5Mkmc3QeuZ+7ht3Zebf6/Vav7z3rK+vt+5I0u7JZNKye27fvt3KjMilZgpKworYkBEZ8X4xiZH0\r\noTDGxMUgZjIKmKT3DbmvrJXWNuEtNHgfM7MElJD6yv4mbRDwR+bEYDBYOBCRhBj6cEr227quOXny\r\nZAtcTiaTOWg+Mwr7/TWcE6DdkGXzxClzcMziXIG1CXU93yu89/T6WVs/fcii92stDyJf91vfY5BJ\r\nszDlcz1HY+aoXpvFmNbrhciJXKPXJ+njeUzEw4CytE/ciK+/894sg2xJWdRMO2W7Ti2yrJt11VmH\r\nUza0sZOF/V7qog9/9B4rdWp/Uy/22cLeBO1BUtyGtq+j/UDGI2br6r8fBO58UEXLCzBb27uty6ok\r\nlBGQtdNpEq4MBoOfqx1OGFHOwmy/N2YWczVxBEOTadsGjEkwBGpf4ZyZ6SVNjJzgZnutEQZoIHgL\r\nLm/+3xBnCbNYwKlrUMZgk18238eCXOl1NtbhodkPer0ev/M7v3NIp43lQO4Xz+n4N1qf1vKj5+VH\r\npfwsQFT3j8S90mvbsv1Y6zZ6H9HMDXmmXCf2CdC6t2mShCYj6DrHOvDDNNcflfdRAnTrVf7xE/81\r\n/8Hp/wybZVggTEfkJiUUGSQZnpo6VCR5QyoxHsqiopNnlG6MKaGoPf1Oj0nZhE6xYj8HR5bnjMfj\r\nRm/yzd7qvcdmKXUoydIMX8M/ufBPsAHSOqPb6WImBh55/t6/GPDB42qoe47uoGL/b15icGaTs//V\r\nH3Bjr8CZDiu9Lj3jMHjaDSOA8+GD9fudFU10uXXrVpvY48SJE1y/fr0F2ay1bdib3d3d1i7WenGv\r\n12M8HnPz5k329/fbNe/evXskScL29javvPIKzz77bBvaYH19nZs3bwLz8Dt6DZXDcalnr9drD75H\r\noxGrq6tt1vvRaNSum/CzkyN+1Ir74heahB8xYw9owYoQwgKzR4wsMVi04h67rsRZ2uQ5YqyFMD+1\r\njN1PZQDjE31d6uAXjDgNLsbgof5ejAtt9MXAmQZMYsafFDmVgzm7COZsqF6v1xprcr34sIsB9/Nu\r\nzBrEknbExlrcBu2qKvfQbRUmiNRfs85EMdTyIffQMYnkt3qM5XdihMcuX3L/JE0b5dgHgvez9zDz\r\n4grkWYazFmdngVJh8folxo3+TLudazZM24dJirENqIFKRmOdxTpLmqUN4GYa16F0llQgBM9kOqGq\r\n5plnZb5o9pwGr2KAxRhDN+/NZMIB85h7rTwnc1C4GWcBm5vP804GmLlRyXzOTKfTBhgwDmub19yw\r\nNqRpQl2DsZaqrimrkrIq8cFjrMU6RyDMTgjFsa51sMOHQJKlC+Op54EAPPr7mL2VJ4tMpHj+i2ES\r\nM/KkP4Q5q5+pjRWZ/3G20NaIsotggnyn57IGJeUAROa0teBc0jLzsiyf9XPjhlkUJWBIkrSdC/Nd\r\nfRZHbUZDEbmX+KnOJpRFSV3VVGWTBKYRU4OzDoNdiDcaz/N4zdXAwvy7mcFqApjQuhNjGtdOkXVx\r\nowx4jGmSZiSJm/WBXYgZKUaIHHwIOKszMgsYXE49VV0zLaaUVdXKWyNfTZKUGR7fzkGZm8YaXGIJ\r\neIqyYDKdUFZFk3zENYCqD3XjVm0C1pl54pE0IctTmvh4izFY9fohWWpF9qQ9wvbT7OiYASvrn4CG\r\nMWgm8ivz3do5I17qI3ECNXAtMTuHwyF51mtd/Z1LDs13ZxOMsZRlxXg8mbsBY3EuIUmXM571/qLn\r\nQLwX6L0inv8yxhrgW3Y/DZzFAIRWyOI5LvfV/bNMgdOMTs1aahjdFXXtVcblUZvBOcwOhLyXuTQP\r\npyFzXJiTaZq2bnmyP+p9UvpGfi9u397P98N4bRQ9Qb6XouVI1gxrmt3RGruwUMvns+kz+79MJ8N3\r\nvvOdh8btN9aDBoMB77zzTsvqPjg4oCxLDg4OGA6H7O3tMRgMOHHiBOvr64eALf1/aNpbhboNFWMw\r\nBGOojaRdou2/qqpJEkdtxOXKYY3BY6hna3bwYBx4a6gxeNME0ajrCusSWiTQ2Mbd65fEX7TupOef\r\n7rdYH9KAnP5dfIgX30M/S7tZw5wNLutDvK59GMuyumsZelD7Yna0eNTc7zlxv8djAYeZgDGAKGCr\r\n/m0sC3qsf90M249iCabAGkM37ZKZnMQkdNMuadIjTXPSLJCmlk6Wksx0/CSxdPMMYw3eZvSTPl3X\r\nw5Fikg7OZTib0rEdXNasX2KPSKKkLM1IjSUzHZKQE2xNP+nSsT1Smza7S1ZgzC/OPvq1KQFc8OAc\r\nWVEzunuH6fF1ek9+DPJ19g4m7PS6rHY7GBPAeDyBikASHCbY9qDv77PE+AEwIzt0Wrvr7NmzbWw/\r\nCQWxvr7eMu0GgwHr6+usrq4ugHFJknDkyBHu3LnDE088wfr6Or1ej8FgwFNPPdXGDNze3mZjY6ON\r\npb+1tdV6QXU6HVZWVlhZWWm9aSSm8+bmJqurqzjn2NzcZG1tjTzPWV1dZXV1lRBCW+8P896lD49+\r\nkeL+vS++8OX4h3rjl81GxxsSFsdkMmnBFfld/NKBF7U74PwZ9990teGujX5tbNRLwEc9kOPx+FC8\r\nQV1EQV92b2lvbPDoPtIGklYWpN4SsFej07Lh6zroZ+q/40DoAkgK00yYVXH9NSAYP0f/LfWPFZwY\r\n/Fum/Oj+1n2kjTedOXnZNUnimpN47wneQwitkWKNoZPnM+CPhevkZdV46/vKc2Rya1cw3ScNuO3b\r\nl47/Bo2LUF03mTWtbQAzY6CqSqqqpK6rBfBP3FxFzu/du7cgL2LkSX1W+6uzLKUJVV0wHo+YTidA\r\naLKiJg1YpA3RgIwzZGlKXXmqssbXAWOa66uqpiwr0jTD2gYsaoxWad8sbpdNGsUgeKq6ovY1fsa2\r\nrH1NkiYoa7E9warqiqquSFTGaW2cS1tlPmiXdX1tal17SCCgmswVbajLd3qeN/3aPEeUlbmrbWh/\r\nW1VN9tQmxqdvQZZOJ6eoyrZvG2C16VcBU6x1sz501LWnKEqKoqQsK6qq5mCwT137GbiX41wDtkhn\r\njccTJN5akqTtPa2dxWkMNfiAr2p8VUMIJNaRuoQ0SSgmU0LtwYd2bsj31hjG08kCYBADJ/F6fHj+\r\n2VYmJOabngMyDw5Bv7P5UtfzEATS37JvxGCqTsIigKCvZvI663tjLBhLwOB9aPvK2gaoT9OMJM1w\r\nSUqSZgSqWYzEkqIsqH01Ay+ZyXCFDzUusWR5Rt7JyfIUlziSNMGZdIEtofcC2fN0pl9hc4uyIeCn\r\nrNWyFsh91tbWFvY8vT4LWCjsNQGENBgp8qzXD3Hvld8XZROT0vsG6JSDDGubwwFjaGNI1nWFsZBm\r\nTXZkH+pW5gWwFvnVcixrUAsbtdcu7l9azjQoHAN/cZv0nqLfpS/0fqMZnN7Tzimpb7tOBuh2G0Be\r\n5qasjdNpwXRakGWdVm51oiOpV5oejgmr21dWo3afE1cTfdig26F1oPn+Pc9iq70D5PvxeHwIjNEv\r\nORKT/XG+d9r2fQ76mYW/rTF869vffmjAP1g8tJCwMpJ9VnROYb8mScKZM2c4c+bMYaAvArOsMRCq\r\n5iALjw2e5jShpq5KEmvb+EowAwHr5r8Oiw0GKLHGEHyNM2DsTC5p9s/UGgwV1kJdeawBY+rmeThU\r\nlX7hsgxYkgMDrdPpuRXru8uALLkHHHZFlX07Dv0SGxsfduBPyoP6as40b95138d9qQ9pdD9pfWjZ\r\ns+QaDdrG/Szv8uzYdlsGxi575qPy4SveGJxxECwVBmObg8+aQDCWOjRxaD0Wj8OQ0PCVHcY4shCY\r\nVlPSJAFrccHgfEN2wEJlEhwOg6MIFmcdNQ6PwxlHMAYTDM4m1KXFJFDZRsanpiLlEfj3wFI3noom\r\ntaSrfbrrG3RXtzFkbK+u4voG52Z7uZkf0BnjWgLG33uV60XPqMbWasb56NGjrK+vt3rq6upqm7Fc\r\nwD2A7e3t9vuqqloWv/dNWLejR4+29+/1emxvb7f24sbGRnsAur293cZSN8YsvGuPIQnrYq1tM6Ab\r\n07AAQwht8sZ+v3+ofR/G8n7BP/PP/sf/PsSn09oI0so7LApBCGEhnpCwAaWje70e1s4zA6dp2lIy\r\nJ5MJo9GILOu1RoI2wgQo6Pf7h0AbrXyPiulS40DqKMaZKNPaUNNKvgbj4o1Tit6gdR/Eg6BZTsti\r\nFmoQULNE9HP0KzZK4zpqQzU2EiWbZPybuN267zSAKuMZ11E/Q997meKhwcU4qYQ2tKUumikov9Vu\r\nabovg1vMNhwDqdrgjvv3/2fvTX8sO7I7sV8sd3lrLpVZC4tdrOTSJJvVJLqbkrrVassaSzJGEgR/\r\nsN0Dw4AB+w/wF9tfbMCyABsYYOYvGNjwjGfGhvWhJRjqZaSWNGq1KKgpNcWluZNVJGtjbZn51rtE\r\nhD/EPXHPjXyZVewqqblUFB7q5Xv33RvriXN+8TvnUN/FrFY+5zl7jVieBEQBnp1A8R7pVIHGnIxz\r\nms8EXpFw7Pf7SGWbUbSqig57iIAG3h++zi24kOU6vPdzKw4abz3DR2so2bD0QEzaGouyjX/IY5lR\r\nvXlAVLovGWFlWSLLemE8OEOO7kWuKqQYk/AmkKOn0wDuzedzLBaLjhItpexkbeXKtbUWm8fWQ9w1\r\n6isOfgshOsAizUECaIfrG6H/ubtkzGzlrrq8HsYUIeMVnSzx+X3t2rXA7CJKepIkIY6kdG2GaKov\r\ndznkCSMIFKD4h1prJP00xJHj7rJ8Ta9iNbefdeUPl1V8o+ff8f0iTfsd4IIObIghOR6PDxxE8Htc\r\nubQXWGxFUYT1TXOQDCg+HzryRVYdcJHkPF83nKlHYA71OcokxASkOb2KgeoT6GQHwP3xeBzqG88f\r\nwCssNN/rug7uuzTOdH+qH8XdpL72e2Qbo66ua8znc0wmEywWC1y5cjXcK8sy9Pt9DIfDMB+ccx3w\r\nktYRyePRaNhZD7QnEYi5ubnZiVVJc4LYdlW9OHCoxZn63IileU3ygQAcvg+skuFcjpI8D/uhaQ8n\r\nyaWc5h6PxRvvMfzefE/g8iFJEqyvr4eYksPhMDD7aG7m/YPhL/hBI+2fq/ZOANCq16kfP6SifuN7\r\nMt9XjJoZb78AACAASURBVDFIhOz0FQcZpZQHEg7F5Z/+8392T7Red5cx/+I+5GwlmkfU7zyUyio3\r\n1BgIJPDPWQunAOMcdG0hpIaTDbPY1BBIgCbBjTCuYQVab3DXDlZXkNCNe28zj4QPq0HUeCEqOAjA\r\nNYdm8Mxv2ATiLty2eHtux+Ti38d60GGg+2HPjMdjFYj0STac4hL3Cdcfeb8d1Wbe50DXhZji9tH/\r\nR92L5GHM3qTPeWzSVfeh9RHX53755JUwhmhkm0M4l/NvG88lCMC55lRcoq4L6DQFuU9UABIAJQAN\r\nAWGBWjmfTMJZaAs4YpgJwDkJB0Da5vlOeJnXxEEoUCATWajb/bK6OOdDV0kIoDnws4nfN2QNQDoY\r\nZRvPHwGFlo3uhH//9+31u2o/4DH/YvyF/4bsP67n00En2V0koziuBHTlFH1Hh05kQ8Z4BNnlMeYS\r\n26G8TfxQjNjsaZqGWIKf1MLJFx+laNpMqFO5+8wqECwGvoqiCMpynDCgKAqMRqMwmGTwkuHkM2K1\r\np4pcMefg2GGADikkq5RrmqDka071ocLvRdfGSiO/jheueHEjMQbDYncnmvxcUefGAZ+c/FnxBOb1\r\nXrUoaYEJITptXgXO0TPIcCMjhKPJMegZ14P3CVcW6TcciOEn1wSu8OfGz+Pjyxc0XbOsuzHp4vdx\r\nfePPOVsqNrIIfOMALbXHOReAhhg84uwmLrScc4GJSvcZZJQtW7C1U4Pc4evawlrAGAelaHxlw3QD\r\nnKsC84UDpTT/ioIErwKEbfqQYgcqZJlqxhtwzsA5BWtrWOufv1jMAniuddaMl2yuNUHg09hxwIX6\r\nM2a5kqEOAAZlAGuor3hChhjMigX7YjFr6lTD2jqAikJ4Vpu/p4JzGkLQ2BnUdQlra8ym83DfNMmg\r\npEapygAeSKEa4xHh+5BUoSyQpB4MvnXrVqCl88QBdAJFwAsBHjQ38rwXxo8DEXXt+7Tf7x5+WOuw\r\nXBaoKr/x6VKHEy1uZFCbxuPxSgOhBWpWGx90PWcv0e/4vI4NSi7nViULiuUiZTGk8Aj0OYFz8/n8\r\nAKDB13GWty788XVCCObC6dtD4xLmtOp1ZDCBzTFTnABvcg/l1/N29fv9IA+MMZjP56jrOrgpbG1t\r\noaqqEB+S4iGS/KvrOpxM8ky3fM4TiC6lxGg0DL8riiXqugqZbemQgQ4BvIxRqKoWCJvN5o0S1Ma6\r\n80CdZ6oC5O6q4RzNCwT2q9JHh8yIQYd4n+OKIt+DuHzmbJaYTVpDQEpv9CSJZ/ASM9HPXdnp2xhk\r\n5PsPl/FxzNbZbBYAQBqbLMsgdRHWCWf70TyOE4bRc/k64XsQ7d18bcX6gxBtlmTUpnO/eA2u2rPj\r\n9x+XwmUK18f4HsCzb68C/ng5CHZJVPB2sFYKMPBB8R2gVOrDBwgD4YBEAf6YzBd/eQLhAOkAOAkn\r\nPSFbAJCuCVUACQfl2YDGAUoDroa+h90ds2H5WMe63ar3R/XXYfeO9buj7vNJLLEezcHOuJ1xP8Zg\r\na9wntN+RTATaWLkk31Yx+FYBvIfN+1Xjcti975dPXhEAHErP+BPCe4A6CRBMJBxCJvomdIGpLbTO\r\n4Gxz+GFEE6/WIRGugZccYADlJCoSs67xnLAOtkl85BFAwMgCNQwymcIVAlmWAE3Sqbs63fgMFAHh\r\ntxwt/XmQcN7zR/sDKFVrQPmuts4Dsz68LMXC/9muY47JEPhGng78YIgfOHD9lu/nZKvE7HWSbfQb\r\njhXQb6kOXHfj8pXs6+7e3+pGgE/USjp97N3xWSmaM+BiIIw6GTgIQtH1RVGEU31SSjkgMBwOw4Tg\r\nJ/EtQKI7Gy/dl4NYq8A/2tCk6iol8f95ngdghj+7zZDaBSbupMTgFK93XKhvef/GhnJ8b67Mk7LA\r\njQdeOBsuBsri/uDPpv95IgNuhBx26hi/J/SdgwK8/jH4Fy9IYrjF9+ZutLzE81C5FvCK+8M5FyjG\r\nq+YubzdPRBEranHd+DzM8z6McSjLGsY4FEUFpUokib+GsrEKoWCMQ13bBtRYoigqYNhmh6X//fhV\r\ngUHl2yLgXMueCczIaC7yteJ/5/fyGDSlY0MOmsT/k3Cktc2TlQBowMUu4ETjrJTqAO+0jrnLIgAY\r\nJwLIqrVuMiirwMCiMacNJVZkZ7NFc7pkUNcWdW07cdY8mKGhVAKtq04IgbquUdr9wKxK0xQ6UZBK\r\nQEigLBvmjhRQ0rt+eb3Kh4AXErDWoCgqFEWFxaLAYlFgY8NCSo1+P8V4vB7ALAJ8/Bh4gCXLWjYy\r\nB4HiNU2KPAcyAMAWTYZnJ2FqF7XbJxTwqS29S6CzfF6048VlB80v51wnc3UMlFM7eFgFuobmMwf0\r\nOEOM7pmoBP1+3mEHtkxYD7StOuCh+by23g/3pX7k882759dYLheoqhJVVbZjrRX6uh+UGHqV1TLI\r\nJWtaNltVtUk5vGu0xI0bN4LLJ7HzAISEOpxxV9c11tfXQ9ZNKWVwM40ZtySfuPwiGUeHDl7+9LBc\r\nLjGdTjGbzVCWJRaLZROzjFzMaUzSADQrVTf1WzQg6SKwB8mNwp/Oti7ESskOeGathVrhGcCBPw5o\r\n83bRHIpBQH4QRfsf/ZZ+T8/xfaGafcofiCglkSTepdkrmDIw5XwIB9lZX3TIQrKLH0IJITCfe3CU\r\nMlWPx+MQvybLMgzHqqOjcFnM1wrfvzm4FwMMfJ/kspzqxhmuSikU9fzA3OcyhJ+wf5wVXD4vYl2H\r\ng1DAapBqlW7UAUTgbdO0MaMBT84DBFRIMiaR8e0RQBp+LJA0aY6cbFguogEC2fVAE6IEDrRVCfHT\r\nZ/ld2ZZDwKjD/o/78U6ecdi9D6vDp6Hw9nDZdLv5GF/Lr4nvHc9h+v1hdTnsPrd7Vlyf++XTUFIo\r\n0SSDQ3Mo63E/n2VcWg8CNrHLRYImVRE8eNSYcg0JEI36BgXAwvp4pXwqhrnjYBUgawGpUqQSMK4G\r\nvGrSQFL3AeYji/C8SEWMTTgo53cfCD+Gfnxat180B1B+6ATbY+6scHl199Vv9RGyDbhnCQf8+GFt\r\nvEfHsor2cc7go7qTXcKJJUA33EV8DdcRjyr8nh9nvejvs2iOrPKNJT4N5yXeVCjDZVmWGI1GwRfb\r\nWhuMNzJKycBxjjIJq8A8XMUe4uAclVgR4v+vqmsMGsYg1FHlqA38MMXosOfzz+JJGoNiMQjHDfBV\r\n9+RtWgVIHgb+ceCGt5f+jxdH/FxC4An440KCux1TneIA8AQeE/BFbSYwgMCHuF1UF0LtY6ONK1bU\r\nf6sWeWyAxW2MjQ6utHmDWiHLEtR10pw4GJTlElVVNNe02XN7vQxSAsslucIX2N2tgus8uSUSMM4B\r\nEWpjzEIUPPPkinnI2TfchZvao3R3/XNghkAm51xg6nE2izdEW4N1FQAbsuq6FhAOwIq1yGSbMIbm\r\nAYEoBJpRob7onPZIB2MqLJc1qqpAWXrwgvpSynactJYwRnfcGOcN+B0D2AT8kns37xeSZ845zGZ7\r\nqGuKS+rZhICFMRXm8x7G4zGSRCPLBsjzFPP5PADuSgksFosOqBMDAJz5RoY/BwOsq1BWS8zmAtbV\r\nAbxJUoUkVVgsZy1QbNtwCkQV58wAbsRw8CWWTfyl1GrWNa1BkvVUYiBPJj5um04khEjDOBNzbrw2\r\nPDBnef0Gg7yzX9DvaT+R0mcdm0wmHZdccitI0br0E/hVlr0wPxaLloXq2+GBMFqndKBEdeNANu15\r\nxAje29vDcrkMQCF3B+ZJRSiUAAVE5muZZAk9a2NjA0VRBEBwPp+HOpVliVu3bgV3c3oeZWjza7td\r\nq3ys+DygsaT9uP1tN2YsVw5jec2/p/vHjLcYBKQ1QYXvmQGQLdvruQzhc5szs2n8SZaQCzYvvK60\r\nbkjHofAEe3t7SNMUJ05uhGcqpZEmXZC8lVn8UAawFgF45M+lNpD8KcsyrBcuo7ms5X3JQcD4N/w5\r\nq/Sqj1M5Som/HbASvweYfojW+O38DW92OQICuaUl6B7MHiZbjD/Gsd+J6Mf3EIP5qMbcYf2ySida\r\n1a/3og4f93LUXLvd+8M++yj9dxiweKflTupzv3ySi4CoHaBl49zbyHlnoKRPFihcFLt/5V2a4o6+\r\nLhR+nWrmaWUhpWLC8E5u9BkvET7h2F7B9x3e4V4W/IPW8sjC7eSiKHDp0iUMBgOcOnUq6NpkuyRJ\r\ngqIo0Ov1gg1P30+nUyil0Ov1Oky9K1euhDwJGxsbuHHjBobDYSCRcEyCfsc9xI4COw/Daj7LMlKv\r\n8hWOwT8qqzqQUy/n83kw7sn4ns/nnRhMZNwSYpxlq8ExuoZT3FehyIs6zmYbKbVLn41PqgSZSsIk\r\npFdtD2aziRrd3jv8zwwYOueNADlOkY0ZL7yPVz9y9Sk4/83t0Gp6DoEnq4A/AB1m4VH/x0Y/vQiw\r\niMElDpTEwCRvE7kv8edwJgMH5GIwWgjRYZ5wxlrsJhW3gf7m84EzEGPQlM9JbuwK0bpg0XPJSCTG\r\nCYF75PpXFAWm06kHgiYzCAcoIf1csg0orhOIJAVsy5wM7sJVDWe8cZTlDWjFgBtjDGpjYI1pszs6\r\n5198jsC7E/v2tww5/94byqORDDG0FouiYdaZDtOXA5McGODjx4EADg6WdRn6ieKpBZe6hllFTD7q\r\nAw6AGnvwWVQXpVQIPEuADH/VdY0aHqSlWGG0sfDfxHEYAYS5XddZiGtBgMRkMgmMyVu3bmE8HmN9\r\nfb0DvFAWWYUq3LOtm4JSPRiTYm+vYfhZA6Cdzz4RjPJZrxsQw8dgzELcDEoIRCAen+8BzGxco9ss\r\nv17kqTBeK+INWQdrG/nMvlsls+J1xEEkIQTqyrucc7ahMd7NDmiTcfBncGafEBKUPIXmpFcG6gZ8\r\nzpGmGQCB2WzWzCEDa5dYLJawqd+bvKttjjy3zVxfNAliXCPDvas8jRWPbcLZmGXJmYW6yQCdhuQN\r\n5DpMcoGvI2LHE2OQy0MC9+jwhPqVgOQ0TTAcDiClwGyGUP/lctEAjD5BESlcSaJZ8qI2xh8H+sll\r\ng8f4k1KG9jjnUJvlyoPCeKwPMo8PsltWGdcxq/MgWBb+hFKAlAbkpuzngQ7gn9Zt5maqz2Kx6Kxn\r\nWif0ikNRVFWF/f19TKdTP39N2Ym12OtlUCpha6DqtInfl7MZab88CK6rTswbkm3UBrAQHfHapj0x\r\nBsxvpzv8LAr1ySoWFD8MWcUe/SjtOQzs+qj98lH78F72+Z0CdHda+LyM11d83Z3U6ZNaPg7tOwqM\r\nPawen4a+v1+OLg4OTqMJLWCb5E0OVlrUooJxNXro/fT3v40YcXAoUUILbyt48pqLL7pfblP4WuX6\r\nI3A40YbL5zu9Nz+AvFf15p4HV69exY0bNzAej7G/vx/s3ePHj6MsS1y5cgUbGxvY398P+uOtW7dC\r\neJ9erxdifR87dgxaa5w/fx7b29uYTCaYz+cYDn1Im6tXr2I8Hgfd7cSJE7h69WoTFqmPV155BV/6\r\n0pdWhhm6Xw4vHfAvBlqMMcG4j7+n91mWhVN1HieJgzeksHHDhZTfVTHp+O+42wov8bW8XquAhzhm\r\nFP/+qBI/gxfnHOyK9vK6rKojL5wxt0rBXQVG8Xtx5iY3AuhabjQdBgDSveJ7031XtStuxyqGAYGf\r\nZBhzdhUXJqv6hxtEh9XXOQco2YBbEsJa/1Jd99dQVzptCX87uNp0+owzo+LYZrxdnP1FBhq573Eg\r\nkgCEmNVGqdLL6TywbsgllNh1dF8+rlS/AIBJccBA5mswBk9iA9ClKZzz2Q2FEIAUUIlGIgCpFfJ+\r\nD2o+h3F+rZZ1BSeA2nqDLHUNK01paCFhrIODoeS0QMjeaoHmGZKyuboaSaJCwoU4mQaBIrztPIYb\r\nACiddsBE3j+cRROuZ8w+KSX6ogX3qrpGbQyM9RE2tNYYDofhucvlEoaAnkbW6TSBcho6bcHJqqpQ\r\nzBv2VV3BwkElGiM5gko08n4PkD4Tuqi78b1ozGleDQaDMG6cERvmdmJRWwNbN2BGMUdlShhXo6wL\r\nn6QCKSCb+ESw3o05kdCJQmk82ieUhFjB/OvMH+vgBBqnZwfrLDKtIJyF1E1cIynhBGBsk+RFSUjR\r\nyAcp/XOUj8kIOAhNCoUAxWQEDLRuXZ35+ncOEBYQ1p+KVqUFrAGMgBMMZJY+9k2/5/uaxoBALnot\r\nlwsYQwCrDaEo8rzXZIlNQ8IYAtRojAGEhCZh3Bt2IcWFM8ZgMBjg2LFjqOs6AEfEACXQj8A1Orwg\r\nhhox98gVl8tRms8ki0jJyvM8ZES9fPlycJ8mOUPXCiFCxjMCsGkNEvjIQUkC/aieAGCsOLCvUl/G\r\njEguO2PQ5rB9NgaLDwP/OIAYHy6RXOYMc1pD02nSuW8MzFGwal5n51zop0sXr6Df7/usd8ZPxTRt\r\nQaw2jENXPktBzN1yZZvp2vjwMLj7N7IAEUjJ901+Es/7hK/vj0uhPuVhZuhz+psf6FHhfcJl1U/z\r\nfF5W6RuHffcPWT4KIHcvylH67/3y0Uusz6/6jr6/nXyMP/tZzsv75e+/OCcgoaAg4azxYJt0gHJw\r\nzmLuitve46hyJPgN+GRJxvlNzlFCKgEnHawzTUS7++WwEtvXsU2/6jO6lj47qvC9knue3KsS6yHk\r\ntTefz3HhwgX0+/0Q/7yua1y+fBnT6RSPPPIIdnd3kaYp3nvvPaytrSHLMly7dg3GGNy4cQNPPfUU\r\ner0eTp48CSEE3n77bezv78M5h/l8joceeghvvfVWIITM53NsbW0FgPBetvOzUkLMP+4+QuWoCUj/\r\nU+BGiq1njMFisQjgCX1OBtFwOESWZcFI4kYBXwTcWD8M1BPCBzB1rgGD+D/nIASQ6KY9zsDU5oB4\r\nut126W7DfrRNzLk4th8VUt5jt1gyPsgI4wYdNzLI7SeOuUXGCQFQMThHxgEZH7yPubFDRizdk/ev\r\nc61fPzcW+N/knsmFVyd+FsueuQpgpN/TNdR+aitvX1wHP6xdlzM41xCYPKhhnW0PpGh+8b9FN6kE\r\nZ5XFLEUOwBBIGzM3yFgm13diG1GiD2ICKeWTA4jNlskxW8yxLIuQ+TPErnMOwkhAeoDDVhUsxW6r\r\nmuybrM9c008WQMr6l4ArrkCW0wmSJAksJCm8P5MTAASglESWaJg8gxJtBmFTNSzH0oQEBVpprxQ4\r\ni1o088TUcNZANO6SAYyGA5wM2cvaGG11J94fZwwD6AANUkoY23VX5uNEc5oAHAIw+AnbcDDwcdIA\r\n2AZYq7xPHqwxWDT9miYJEq2RZxmWy6UHV+oaaaKb/pKBvSkhUKGCFRawDrPJFKaqMZ/OAo192B8A\r\n/QHqYhbkI6hnnP9fCInhcBTc3318ONuRNaZqQH8oWGdha4flvIBwU5TLCv1+3wOIPT+nfewzCdGX\r\nyJIcSZMBWjgBmFae8TVHfetbx/pa+rUmIaClisbAwNYGaZ7AOK8k+nt4ditss04b1qtwgGGsUa01\r\ntFQo6wa8ILkqBJr/4OAgk8YtGQLOWFjb7g2ieVaWpFgbjdHPeyEjLGXdRY1m35pguVwgSdJOxmBy\r\n8aVXUXQz+q5ylaWxJHCPZBtlA0+SJGQ3ns1mBxJmcTdtAnsppl/Mwuv3+x3QmGQHKUXczZnmEL8H\r\nP1zhoTlIL+D143KeM/JjvYHWMe0fnDHNDVb+92GHUkcpvEIIZFkbEzb2VqBDnFi5JoDVORdiElOd\r\nqM+o/ZwJyJOPBflZVrB2hqqqMZ8vOgxvOjzg4F8ruxSkVJgv5kGW8X2Z2kGHrxxApXHL8xzVYtlZ\r\nr3w8+PMOY19+XAodyHBZHrv+xu2h7zhofq/rxMudAoCHXXc3/X4U+HMn97/T+t4vfz/ldmPFxzee\r\nM4eN3f1x+wwVARhUEK6GkilgvE5EieKUTODuBv8QRxP3/NMSWBiI5mDWAahQAMIf+ib1febVYeVO\r\nDlFWrfX4EOB2z+A6zr0+HCD9gfbg7e1tbG1t4eLFi9jY2MCxY8dw6dIlzOdzbGxshGSHp06dwqVL\r\nl7CzsxM8VegwfWdnB1mWhQNnpRQ+/PDD8BxrLR544IEAOO7s7GBvbw/D4RBnzpzBZDK55yDnZ6Vo\r\nY+sGILEABASBCJ6w0ypUgSzlQTWaULXx7ktJkkJpjwKXVYFloaC0RN7LPFHZWlR1iaouoROFNEt8\r\nUP2i6iiqMTi2yoUQYFTZVAVjucF+wgtAAw4eftqt5NECS4qImdYYlxw15Ip5fGINdF3ewn2bic2z\r\nAfL7cfCTL2K+kGM2Ai8cPIzrwV+cMbDqVGIVsMjrQDGryMik+3LG2qr6cQWfJ2HgbDXvVtnN9sxZ\r\nXs555lVoj7+xP6XiAo+3jV6H1IfXl/ohBgK7QC3FYCPDUyBNW7c/a70Lnn8VWC7LYCAmSYLBaOjj\r\nSVmDsizgqhLG2cBWkk1MPkgBqRUUHIyzEE0g/qqufNKPpp0BXJMSEoBUqu0TALYBtYIhaByscLBK\r\nQCgBrXQDYknUsAAsskRBDXroZUlg+S6XS9i68m4IWgFpAqU1UiWBpp4BvLYW0jkoqaBkY+RLDzIq\r\nqTrMPAK66P329vYBQITmjB8jj1LyseNGblnWACSkrKGUf69UO/bjtRyJVJDOH6JSAgZTVrBVjWrZ\r\ngrFZliHTCRKpoIVsaOhFAJoUFKSS0EIjVWnY5JazJfZv7WM33cX6+jo2NzcxHA6RpinW19dDfxLo\r\nyd0Se71ep01cTgohsCzn0KJNiEJuucV8gboo4WoDW9UwZRuUVymFAgIwFnneZln268Mz+mwTC87U\r\n7ZoM8lk6KDQAqrFQTUZYoAEZjIGrDWBs4ybCsqJbv38I6yCs/711NRyB6TSuEEAzLnAeOCahLqyD\r\nbGS8Tribpg+GLYQITNZi4bM5p1p5EDtLkWoFCYdESRRzD9Ytlgs46wGw4XAUYifO55TARiNJUuR5\r\njbJs5d1ksnvgcIYUFQK/CLgjUM4/w/+/t7cXxo3kH3fh5Mw1n8xjERKMpGmKoihRNmPbfWloneD0\r\n6QexXC4xmUwC4FiWFYzxrtHEGiR5xZnkPAEGMZjpQCkwk5ODMWNjGc1lerz/rAKtVinKh8lr3QEh\r\nvRgEFLiLtnM+WUmSaFDGY2obJWSKD6CoHb1eL7SfZ/Nt9zYEkHSxWGA6nWI4HGIwGIRkLcQ25IdM\r\nfM2tUsr5gRLVjesEYY6wsBCrwl1QHajOfGw4UPpxKNywiEFlOmQmNiMHn4H2kPV296cSG1WrwJmj\r\njKajQJnDyt0YX6vqEn/2097/sPbdyXX3y52Vo+YSn4ur5uVhQOHtPrtfPk3FIZFNWBRXhaQeChqu\r\nsbeMPbhmP8Ltj2TCCAco6yCUhIGBtSUgBbJmD4QJm+/9sqLcCQB32Hd3urZjnOReygS+F5elt2Gv\r\nXr2K1157LSSxU0phfX0da2trmE6nQYdWSuGBBx7AO++8g8lkgtOnT3cOwSmu9XA4xMsvv4zhcIhH\r\nHnkkMAPJTjp+/DiKosDOzg4uXLiAl156CY8++igGgwGm0ylGo9E9a+9noYj/9Xf/R0eKI9Bl9FHw\r\nRa7Qc5cYrqwBWKlUHjt2LAQ3J+WTTsT7/T7299pswQQYceWfB7zmJ+PtM8vO34cpLbHS1Lq1ZUd2\r\nED/5XwUe1ui665GyTuyQfr/f6Zf4WgI6YoCN3vOEFqtO7gl840YJjR83GPhvuJEan65zpVtK2QEP\r\nqS9jlgKvH+9vbrzERgk3cDlwGruF0z14ohDOzoiNyrgPecymGBhyzmFZVweASF5XnhGaG6zUP7NZ\r\nEeoX9z2xfcgopLHmzL5eLwlsN4oDR8CCcw4bGxsdpg71DV1z89b10BYy5EPShyQJsanidUV9IW1r\r\nMBLDhwBp51oWE11PQBW5QN66OQkx0/whQMsoUkrh1q1bBwx8Pl96+ajD9uPXEvhF/cWTkNDcaOO4\r\n1Z3Pqc2zmU94QX1CyRaIAUjrhjOEOBg9n89Dv9BvgPYUbG9v70Cf8jlGroMkx/I8x2g0CuDAiZMb\r\nHcBouVwGl1BiS3PZQeuF2IJVvTwwtlxO0ZjkeY7BYBCAZ/p8uZx3GKsADsQ4pLnODyLoGcTypvAR\r\nfO2sYh3ROuJyKRzkMKCDgK9V8qn7m+RQYIjuyT8n+UFtK5YWs9kMe3t7mDYu+HnWx2g0Qq/Xw2Aw\r\nDHWiTN1lQfPDYTq70TnAoOfEYCCtTQIAiQFKrsLz+RyLxSIoOz5+XC/EoQQQMkaTTPbPUCGhB8XZ\r\nJRlkrcVgMAghBegZ3MVeCIT1SzKDZCGtdxpDHhKB1uVgmB1gpFP/xmBme2DSzie+T/F+o7EG0HFH\r\n5gdKvn51Z3zjEssGDrQaY1BXtrNGKfYnl0ckb3kmZqoHuUdTu3hMUSklNjc3w9qLEzoppZBmspPw\r\nhe95MdONrxlqq4Y40Od8/6PTdAJ3Sc7Q+v6n//yf3RMLwTmXA1j8tL+nMaBCfcx1UwL46AADQFhX\r\nxGi+g3qu1HcO+44XfjB42HWr7nWvjLEYHL0TUGjVPeLrV4Htq/6+DzDdXTls7nHZydc7gAN/A6vZ\r\n0SSz75dPZxEQ0AsN9AADAyQOpvFy867A6q7zbRw1ewQAYSygAAvjPY4hIZ0Cmi2w0tURd7hf+HqP\r\n5TDZdfT3Ry3xYSLXHT5K/eIS2/9cp6OkebHOTzaUECLok9evX8d7770HIQTOnTsHITxxaDKZhANK\r\nLr8odE2SJCGWOemjPNkePe+zvDdx++ujFH1Yp62aCMBBhhQHd4AWWKLPyC+clGH6nLLsySbbJyno\r\nZBSQoblcLjufcUMDuH1WuBi44d8d1sbD+iH+PQAo0RqwBCSsWuQx4EX3PkyZWwVexSDoYW3g4xOD\r\nXxzwi5U+voh5n8X14n+vcoXibeR1WdWfqwA7/hu6Dxk2vC+4u0/sNkxzJQZTqT30WRwPLna3I4WM\r\n9wMH+bLUZyKyxjPqqP5aJfBZ3CW0SpBnPQh4Y8ZZz3i1xmG5nHbmBU8wQQYNBZTnAAzVJ9GtW7Zv\r\nl2YPWwAAIABJREFUpISzogmD5pAmeWfs/Pqj7JPwLrqMXcvdsAl8ohIroFmWwdSt8UmuzQQs0XXx\r\n82nspGyzwcbzlfqDJ6zhAq4Fz0uQC52UXVnkr/Pg0HLpGU+LxbIDACaJXilXqK4866ZPGqA7YOx4\r\nvBb6ysd7bI9Q/Rj5pANpSv1kMZvNYa2vk9IOeZ4346uRJBmyzEEIhTS1YT4Q6NLKW6AsayRJGvqf\r\nnqkUTxDgAtOrLCsslwWWyyK4n2vdrgeuMNCzeMyxmJXjnOuwwPia4UlVeJ/y3/sxTQMorrVnIbYZ\r\ndA8m/iHubru2uwoT9blz9Bsu6wh8AtK02XeqAlmWYDAYAACKooKxbVKH2WyOJPHAcZr4V5WaFkBz\r\n/QOuolyG8rAFnNVKsffG43GIa6m1Dmtof38fs9ksHL7xeH4Eivh5XaKqDMqyxnJZhrlNLsR+LBNk\r\nmYAQCkoloc+9nFmG/ZiARzoA4AcaPHartTawBSeTyYHDCS6nOJjFgXXues/3Tj6WfL4cBvBy/fZA\r\nsi8AQvi4gFIizAGfZbeZG2jj/1G7aC3QfsjjLNK1XGbzevKYo0II7O/vh/lMspEnNqqbeJM0xrEi\r\nG8fya+d4qx/E+xIH22kc4v3zKL3pZ1HiwwIhfCb0999/H9evX+/oExwkOXbsGM6ePds5pDusrDIU\r\n+N/8vvQdn3ske1fdg4PCcensz3dRYhm86jD6qLIKNIrZyrzOH6f58WkoXG8HDrJbARzYY+P9L7Zj\r\n6DN+iH6/fPqKhcVstI/3997Hc6/8JfbcLmzqY84nKkdd1YCsb3+jI8pRskRAQMkUta1gRO3191Ij\r\nqTI88cCT+PKjX8aoGtzV8z/thfZtri/G65xjJavW/mEltp85DnEvCydJ8D0jBv04Ucdai+FwiIce\r\negj9fj/YFcvlMnhW0G/IzqEMwfRM0nOIEFBVVUeHvF8+etGHAUmrFAL6nE9Kmgwc2ANa45Gy6REK\r\nDPiJQkZQnrXGMylf3KDkilOsIPrPV7tncIP2qELGI29zV+lr2QZStgZNq1zrjvHAXV9j1kkMdMUs\r\nNH4tbwcvMRDK02jHigQH+/hz+JjHbkX07Jg5yOvGDYf4Gn5vXpcYUKT6xWNM18TMwFXgnv+tgXMG\r\ndZM1tgWWSNjS+LrG4HPBIAQALbsJb6guJITjtsV/61Q3RnHLUFBKQSvdAilaIstT6EQFkKisCpRV\r\nAaAOsbo4s482hslkEoLO86yPNHYEDnCGBLmpkYtePH5xe+k9gRNkrBrj4/nxMeWgnjEGGxsquCN6\r\n1zj/InBtMOgdYN/4MfQvGjO6N5+PJOSpnjwJCv0/HA46zBzOWHPOIc/b7LreRbJAWRYoCs9yIvo5\r\n0Abn533E3drJgKfszlJKDAb9BqQl0MnLJIo9l2VpIxOAuvax8MrSoq49sGudB+KMMQHgJVaVcy4E\r\nveWHKiRjkiTxLt84CJBQ/ajeJCeIUUjZZsfjUTOWjsm51iDMsh4Dr7hx4YEUDhDRnKT+WwX8xYXm\r\ngV831O8WUgJat7Ker68WYOomNFgl4/iBEm8X1SfvJcjyBINhD1W5hsWiwGzms5CVZYnrN6bo5QOM\r\nx2Ooke8PpQWU6qGqNHTSAr/Ut7UpUddVA4K2zG1jLKqqbgDraVCYCEij+G6UrINkAMkiigtISbb8\r\nPF80wHuJ5XKO5TLHcDgEMIKUvSDLsixBliXI8xRFkQU38+mUsv16YDhJkiZOpITWCfK816xZgSQx\r\nAVQ1xmI+X6CqlyEhSZ7TSa8fGyEshOBx9zyg65wHr+vajzOXQRzI5uA7H3cOzMXZeeN1ELuH8nsJ\r\nIQBNWYFbl2kOuJNsoWdz2QK0h0ekE3AdSAiBvb29EPaBPCA8o3SAPM+hkzYpEQdM4+fwevP/NZNV\r\nvH/4ZzErcNV1P+sSr11rLS5dugQhBL7xjW+EOUFjT2v73XffxYULF/DYo4/BOguIg6w7qRRqY3Dx\r\n6jUIMcADJ4aY709xfneOneMbgF3gvSsznDqZYZQO8fa1Ca5P5tjZynF6cwxTKSylxOX3PoTKNDY2\r\nN3Djxi4u37qB4xvrOHtsE9b5PfP89RmcVdjZXsf7ly/C6A2cOqXRM4AVR3uZ3K7UdY0LFy5gf38f\r\nn/vc53Dy5MnO3ONeImRg0VhPJhNcvHgRTzzxROgXY3xCoffeew9JkuDs2bMhA+PZs2fD/OOHnZQY\r\nSGsd9hTasz9NYCHpplVV4ebNm9je3g79S1nQOfgvhI+n+8477wS3NgChr+i9cw67u7u4ePEiHn/8\r\ncQjhg9tvb29jc3MTr732GjY3N7G5uYkrV67g8uXL2NjYwCOPPBLWcVVVePfdd3H69Gmsr6/j/Pnz\r\nqKoKOzs7RwLZn6bx+awVH9NY4d++/K/xb//u/4JKNHq2ByNrFK6ElikcHJQoUNgeFPah1BDGllC1\r\nhEw0SrXAwiVIhEJeZJBiiQoJnDaQRsNkU9QFII3BeG0bgzqBFkPs9i6j3pWYYIocEqpWMFKgrzwr\r\n64F3z+L/PP4vsTYY3RV77dNc/DYukLoE03oJUdVILl/FEgboDZFun4RwS1SmQi1q9NIenKshkMA6\r\nAQEJ3CahSmyf/v20oxuiheQk6fp0CMdxB5KV6+vr4fM0TUPyRq7PAe3hH9kvhBHE+go/ML5fPnpR\r\nv/qPfvl3eMdzlhMpEVQ4qMPBHa5Mxqdb83k3oDW9D5unaE/aOeMPaAN2cxZCDFQRuBMDary+8avb\r\nHg008QKJEYUm2L4QEsbYxpjxMZ88q0Y2RhCg0yQoUvFzYwWbG6VUjjqt44AP/x1XbOl/fiJ92P0P\r\nA+k4mMmvjQ0ZPsaH9TMZT3R6sep58YufrFN7uRG46lSDPq+qGiYE+hfhRWOkdRLG0oO3fiwDU2xF\r\n3Xgf3+5zYq4e1rfcaOHGXXA7q8sD/UZgACXG4acqnI0YA2EcGCdAggp3naZ6GWOg1UGmDh9zoOvG\r\nfAD8VFnDuHMdRqG1HiAYDIZQSoeXjw0nYIwHdKw52Gd8vsVux5w5yN1VD65r/yJWFb06seuYzODt\r\n5c/n4Fa8sXLw4bD1Ts/ibnwkL3ysuVmHPUv3IUBlNpt1wF1ukHl52QJucd9xVtKqPvbgbn5gXXEj\r\ng2LOrQJW/bzuui3FMpj6If6b15OvEZrn9HccdoGvJVIKYqUn/pvvS7w+BMhRf6dpgjRJm3WokCQp\r\nptMpIBwEiGlI+4FEkqRwMB3ghg4COAO0e7AB2CYTMmXh5e6e1CckB8iopLXMXfr9uu+GQyCQPcTl\r\nbNYMP1SjF7lS8IM7/uJhFWKAitplbNm0p0ZdV/CZk32MRq0VrDXNHGnb7g9g/N8x4MfHiPrtMP0E\r\nwIG5z39LSiafB/H1WqdhbZIc5fKXlFeu68RraZVeQYWYnDQmPKxDXddNlmtAawWtKVahQV1XqKoS\r\nCNFa/cta0+lvvUIH4y8CLrkMomKtxQ+fe+5/wT0ov/M7v6MB/E93cw8uh621uH79eggPQ3OAs09p\r\nnKfTKY4dOwZYh7pxS6I5orVGWVV468L7+H///CW8evU6hmmKP/zxBbz8wWWcv3od22tr+Nf//sfY\r\nGPSR5z38m+/+OSqR4Piwj+31EUrj8Fevv4H/5/lX8dqVG5B6gO+88AKulSVOD9ZxbHuMSqa4cqvC\r\nv//x63j+vWuYLSxuFjX+8Eev4itPPIlEJRBHOtbdvkynU/ze7/0etre3MR6Psbu7iytXrkBKiTzP\r\ncf78ecxmMwDA+++/D6UUrl27hsuXLwe52uv18O677wLwa+fll1/Gc889hzzP8Xd/93c4ffo0ptMp\r\nqqrC7u4ulFJ4++23Q6bxt956CwDwJ3/yJ5jNZjhz5kwAwz7JhYPPBKRWVYX5fI7vfOc7WF9fx4cf\r\nfojd3V2MRiPs7u4CAG7evImiKEIWy/39fQyHQ1y8eBEffvgh1tbWcOXKFVy/fh3b29uYTCb4/ve/\r\nj8lkgpdeegn7+/v4yU9+grfffhunTp3Cm2++iVdeeQWPPfYYfv/3fx/OOZw4cQKbm5sBjPzOd76D\r\nDz74ABcuXAAA/PVf/zVOnjyJra2t0AYCHMlA/jgB/ffLT1cq1Pjjt/8dXp6+jP6ohy+deRY7m4/i\r\n+uQGyn6JXAyR6iFE4jDMxqihMcxypMkahHPoVQlOpseRuBqyJ5CkFioBhiZDmiYYzdbx4Mbn8MyJ\r\np5FjiEfGD+Oph56BW1TYkJt46oHPY39WQckKMt3AolchhYAcDPBbD//H2Mi3VurS9wsA4VAlNVJX\r\nYplKlEpjevUDTJ5/DuuPncJy/RiM0ehnA6CSUDoDIFHbGkoIaMESVR71GIax3Is1z21wui/tz7TH\r\nkp3A7TVeB3LVpf2b9GT6jBe6P+mesY5P+irXd4wxn/j9527KTzvWOlZgOYDAATsqqxgmq4A3Xoh5\r\nA7QxqEjZXiwWgdXA40aRoTsejzvPJiOYvldqNT2e3q8CynhdnatXKvC8favux8GdGCDj4EqWZQfu\r\n0X3+6hM5rrDH19PfqwCPw8A5fqJOfczb0GXNtUh8bIxxw4sMI16H2PjgcbBW9UN8//jEcj6fd1gZ\r\n1AbuXkWGKZ+7ZFzTCSyvM/+/XC4OAHvUfj6n4t/Re4rJxTNi0vPJ6DsMDPXxvurAzCKByN37iAK9\r\nWCywt7cHKX2GT4pJRqwxErrUJwQU8jlIxjsHraQ0IJCCzy3bxAIkNlIsI2gemI4hrVv2U1MHirnH\r\nXQOprnVdQzhKBNIKegMD4wyMNVBChZczDmVVwlTGJyrJLfJ+6xZJY8fjc9GzaAy40VjXdcgWRfUN\r\nWY+bvqc60zUxwAK0YE2aZg0Y0/YDB1Zcc/qHJkGGcw5l5bPO3rp1KySFGI1GWF9fR5Ik2NraCnHh\r\nlstlBxiTUkJIWg+q0+4WJCBKPW2YAnVdYTarm3EzDUNzwGLGeXDWM7UsiClLBx5A24dSqI5LoRAC\r\nkmRKM/ekEBBSdmQIXcfZoPFJ3qrDDL5+VslHWgM0l3nCA/qOH3aQ4UqAqlRAmkk4l0FriWPHNprx\r\nLrG372Pz9fuDELNP66SZX0nz8ixecgs+GLNWdkAYMrQpvi4BT/7eOoTHIICYAD2Su/3+EGlaB1de\r\nApam0zmAeXABHg496y7LMiiVwCe+STAe1w0LNMVisQjuwJPJfjMGNgCFWZYiy9IQQ7CqKgzyQVgT\r\nxCbkACV3YaF6832CHzZw2cqBfj4PYp2Ev1+lAPHfxfuVcw5SEHgvmwOKGlq3IHtdm85hkVLdmKzE\r\n5vFtO5hEo64NhJCoaxMyAs9mcywWSx/zsR424zMMrvgAwpwkAJKDXp0+0wd1El44c5LvsatY/T/r\r\nEq99knU8/mKsA9AhhZQ++2SiuuCm338Vzjz4AP7xf7SOP/ubN1Au9mHsLn7758/hO3/zMrK0xpNn\r\njmFZWVgIOJWiNBLTSuGty/uojMKVm3P8B48+BgiHD959C2MLmHmBPWtx/souKrvAo5vH8IvPPInf\r\n/8u/wVofOPPAA3jxvcsYFHtI+33cnVNe2569vT0kSYJvfetb2Nrawv7+Ps6dO4cf/OAHkFJiMBhA\r\nSokvfvGLeOGFF6CUwtraGqSUePPNN/Hqq69iNBrhm9/8JrIsw+c//3l87Wtfw7e//W0899xzsNbi\r\n6tWreOaZZ/Duu+9iMpkgz3Osra2FOKX7+/thbv408YY+boVkBMkcMmhJL/urv/qr8P7JJ5/Ee++9\r\nhzNnzuDixYuYz+dIkgTnz5/HZDLB5cuX8e677+Lhhx/GZDLBn/3Zn0EphW984xt49tln8Zu/+Zt4\r\n55138Prrr2N3dxe/+Iu/iDfeeAM3btwIv6E1v7e3FxI2TadTJEmC/f19/NZv/Ra++93v4sUXX8T1\r\n69dDmIqNjY2QnIh0vthmu18+mSWBwsiOsIF1uKnD9uY2vv74L+Oxjc/jhxd+gCfWn8RjJ3bww3f+\r\nGmd6JzB+4BhylaCc1fjw1od44/oF/MoXvoEr8/P47pt/jqoAkn6KXzv3a/izn/w5fv1Lv4Zb7gae\r\nPvE0nvvJj3BqeBK57uHM8CzKXo1fffTXcDZ9EW/e+AkeeuBJfO+dP4KQJbKlgrSDsP/cn2sHi3AC\r\ngzLBVM6gDCBKieFTT+Datfcx+xf/H7b+63+C6uwp7E12kegMWgoII6BlAisMDBzUXaVzvjeFM/yI\r\nqEPyBjgYmoKuJfuAx+elPZ48qfi+Tt4tXC4T0MdtcS7j7pePVjRweByJ+LuYZeGcg4QIWUQFO6QW\r\n8Ef7SkgIB5iqhpEKVmnY2qAuK8A6VLVXxmMjgaO8fPOSzIh0zjGuVwNyoWtEyBWn894Gp2sF6B+1\r\nyTkfSNU5F9gXsA62Nj7YKbESnPNx3VawAOjF3Rpj5TY2FA4D87qgTPc33FWRLzy6VxxzahXQBbRg\r\nLwEZBGqSwcbBN7qXtfbAwuPAX2y4cQOc/o+NcQ4mx+NOhhsHYPj9uYsXB37i+Rz3+YH5weqxCtzu\r\n1NVKSOHBKyH8nDfWwtQ2gCNwAtZ4tgucgJIaWSqQ6BTGFB1Dhgw8IUSICTafzwOAzhkkHFAk9hLV\r\nn8aHwAfOEKS6+7FumWP0DJoLdJqzqg/DCU0jyAmsIMCCwIHd3d2Q6ICANc7iXbh2jLj7PLWJwJsY\r\ngKW+QCfmV7vZkPG8WCw64DD1Nc0hzo6hZ9MBBQeFCNxtXYh9P81ms/AdrUViJBL4zVl/tJ4Ck8Uu\r\nQ3sI4CMAryxLbG1tBVfPJEmCezUfE742AHQANZpLNI7Ux/QqCu+OWBQFxuMxBoNBaHscC5GvCfq8\r\narLA8v5bZWzEazoYWhE7kY9/fKgSx0RbJUP5vbj8je9Pr+Go7+tkRQOYOiglkfdS5D0/pvP5HJOJ\r\nz+a6LAyEdNBJy2bzY56ExBk8e/OtWzc7MoXmNckbyoZW1zWm02lYd5SUZTweh2QdBAJzNmyvNwys\r\nPgK3CQQ2xgTAmOYtJRqiNUjgIMWdnM/nmM1mIbEIgfcU/5MUNYrDkqZJB2in+cUPMkgu8PlIn3HW\r\n46rC5xKfx1wPiQFAfl08H/gYSCkhhezM6RiQpBAIPEkHdwvm1/O1xecf1YPHhaT1XdVzZFmG2WyG\r\n0WjEQGUd5gbQsuL5wahzDolizHOv0HT6T6LL2CeFuxYtYP9xKdR3XL5QNkB+YAR0meFSSggAtbFB\r\nbyP5RWW+LPCjl1/How+exokHN7D/5iXs7i8gbQWZpjBWwmmBzCr8h+fO4fqixF/+3d/i8c8/DDe3\r\nyF2Cm7M9zwgeD/HUQw9jUhs89zcv42uffxyT5R6O50PMigpZ1sd0sUS9rFFUzSFiXQEqWdXsOy5C\r\nCBw/fhxf/epXoZTCcDjEL//yL+O73/0uXn31VQgh8IUvfAHXr1/Hzs4OtNYhG+L58+dRliVu3LiB\r\n8XiMz33ucwdk4Xw+x7Fjx7C/v4+trS088cQT+OEPf4izZ89iMBjgypUr+OY3v4kkSXDp0iVsbm4G\r\ng+yTzr7g9gbQAq30nRACTz/9NCaTCaT0oTmee+45/Mqv/ApefvllfO1rX8Of/umfhn46deoUvvrV\r\nr+IHP/gBptMpfu7nfi4kX7p8+TJeeeUV/MZv/EZgAdKzKat6lmV49tlnMRwO8e1vfxu//uu/jnfe\r\neQdPP/00pJSYz+cwxmAwGOCxxx7D5cuXAQBf/vKXO2wZAjLvFRPofvnZFAeHubiFOpujNFPkgx6K\r\nbB/Pv/oXKMoKz575CvrJEH/wF9/DN776CygXFX70+gv4uWPn8MryPL6wvoOfP3EMx5abGAuF6rRA\r\nnqR44fJLOFEfR24kxukG3rz8Fq6bmxgMhkgSjUW1wMn1k3jpg5fxxsU3cXV6BT//6FewtHOUy5uo\r\nxRLDTKLSRx9tcP3ns1gcgBk0hm4Ni+U+esZAqhEefPKXsJjkmP7hvwNOrKP/xFkUO6exrwQSmaBf\r\nSWRWozIlcHfbx10XYkQL4WMZnz9/HsPhEA8++GD4nO/fHPDj8oj03PX19UAYeeONN6CUwng8xtbW\r\nFt577z3s7Ox0wvZQTGoAHT0qDm11v9xZOfLIjpR0AB0Fl4M1YcMXAKSAs56eSt8PRsOgHCzLAhYu\r\nvLQ1sMbHbfNskjZGmXev8sYpB8FaRoBDmmpQnCiucBMQCHRp7zIC/+Cf2lBaDrYdQgDS/2/hGpem\r\nrtHp6lZhJWOZvic3i9j4jIGM+LncSCmK4sBvDgMa6bkcDKP6mMYdJi48HhD9hox/AAfAy/hkhxvi\r\n9ByuxK9qExcSZPzRXOJjTAufDBZOQaa5ycEJDm7Sd7HxH9ebG4u8LbzfYiCQj6VOGsAR3vXYOQcI\r\nB6n8vOFxeChmmhACSdq4c8txYNKQSxj1H80fOs2nDEcEOs3nc2xsbHSAGp48gGL4OedCFkvuRp9l\r\nGepiBucIVAe8ezT1SwuMxfOTAEM6/Y8ZmwReUjbMVUZ0kiSos9bV2BqfRQyyheONaxnIBHxWVQ3t\r\nNBIB7O/vd9ylSV5RH/I4iZwdRn1EY0qgCgEkxFyiazljiUAopRSWyyIAAcQi47HDCBDhBjvfCHnM\r\nRrqW5OxsNgtzgFieBK4G5qupmjq2SU+UqsO9er0+czE/GDPPWs9O29/fR1EUmM1mHRYgJVyidvO5\r\n75yDkBKmbpM1EahEjBwhZRhXkrtC+IOXWC5wIBtAAMWoziQf+PqIAX++N3FZEcup+GBBagkpMnYv\r\nFnYiVUgzjcU8D/N4sZhhuZwj0b2wlkjmkCLkgTKEeeVPSA2E6B60cPlFsQOLoghMYg7uUb+2QPks\r\nsA15pm26luYTsVbKsuwkBOn10iBLOVBHsoaeR7HACJTkhy20loUQnedRGwhspDXE1xIH3eI9sbvf\r\nd/egw4ArPtbUp/F+xNeANV3wOK4LMZ+pf+jkmvYtYmKSnOTsPOd8Mh+qB5dDNK+NXYaYgAS8jkaj\r\nwAIk+RAD59T3VXl4hkUhBFTiZVVtu/2QZCnSj5ExturAoANWNvs4P3gj+WCtBUTDOHYtE41Y93Vd\r\n49qH1/D+O++jnlfYSg3OnTqDH770Er70+cfQ1wMMswybMofIHF69/AaKmwv86jNP4KkvPIrKGrx2\r\n9Sr+8K9exDBL8Y+efRbPv/4Srl2/gV968vP48tMPoXIOFy/fwHMv/C16cg0nj59GP8txamMTU6Gw\r\nlvQAe3fcP6015vM5/viP/xiPP/44Tpw4ASF8LKVHHnkEL7/8MqSUePDBBzEej3H8+HG8+OKLmM/n\r\nOHHiBLa2trC1tYXXX38dm5ubGA6HUErhjTfewN7eHh555BGcPHkSr7zyCvr9PobDIb7+9a/j8uXL\r\nOHv2LNbX1/Gtb30LzzzzDLa3t4M7MdUtHr9PUuFyg/QUwMuDjY0NDIfDwEZJ0xRPPvkk9vf38eST\r\nT+L8+fP4/ve/j2effRbXrl3DiRMn8OKLL+J73/teuM4Yg5MnT2KxWOAP/uAPMBwO8aMf/QhnzpzB\r\n888/j+3tbezs7OCDDz4I7L1r167hhRdewNNPP40vfOELeOqpp1BVFR599FF873vfw87ODs6dO4fv\r\nfve70Frj7NmzyLIsHPhyvSxJko8d2H+/3HkREOi7deg6g7MStgJqbTEfzjHfXWKwGCMxM3z1576E\r\n2e5NpGkOmAU0DGw5g4DFjas3sbG9iZeuPI/nrz0PbRX2pYXUGX7piW9gfbQB+z6wtraBa5NdQCro\r\nRKG2DkIkUJsp3r5yGf/pxm/jX/74X0EYjV6iYYzEoMw+0ev/H6IIAZTCYJkBzkioskItKohzD8Kd\r\nzVD9m7/AjfeuYuc/+ceQO8dRFhaJ1LDOQKUJzIqEZv9wdReB/AAAk8kERVHgwQcfRF3XeP/992GM\r\nwUMPPYTJZIKbN29ic3MzJJIbjUb48MMPkSQJ1tbWQkgKOkxZLBZ4/PHH8dZbb4WDz/Pnz8Nai2PH\r\njuHKlSvo9/vY2NjABx98gMFggNlshlu3buEXfuEXQr3ulzsv4p/+b/+zI+MQ6DLByGWQjFP6rBN7\r\nKjkY8Bpoja5erxfcnwiAong6Wmv000EwVviLlHAetJif5gZWWtr1G+f158oyBxC79WWdERmJ1loM\r\nBoNOu+k6ql9ZmVA3MoDCqX5VIc/zjqHDgUHamGODhRs5BJ4cBVZxhZh/RkrMYTHbiI1AjARiaJHB\r\nQ2ALHx+6NxmWZJzEjJ8YJIrBNT4OcRw7DqBSn8XGetvWboyJVWwQ3q/xd04djKnI77NcLlfMmbat\r\ng8EoGPc8QD/VkbLn0nwgQIGuUUqE3xMAxdtJCjoBH0VRBCOxLEtsbm4G459n+OTsSPoNKYW9Xi8w\r\nTBaT/QDYEFhIp/g+XtKyA3bztgkhMOiPgnzgseJoTGlu0f8ENBAg4NCNKcfnMvU/Z/LxxEBKKdRl\r\n1Wk/zzoqhD9lovnausR25wyvs1IKWZZ1GFJ8/nNGEYGw3TAEKsg3Yo1x9zQuQ4QQULqVB5w+z2Xh\r\n2toatre3MRqNAtuF5On1G1cOMA+5Cya5K9P8AxDq6BmIrVynDX4wGGAwGCDLMgwGg86BADGdQnsT\r\nGcaWZDud0hEgwmVnXHpZHpiMNHfpd/GJIRW+BuOYgPH65ODlqvhwRbnw/ZHkYZ7RM7wMbFmIPrHN\r\nErPZDLPZDEVRIEtHwU2/lw+ak0kR5jPgXYu9u+esUYZaWba5uRZkLa1/ajsZbKPRKGQFpnlEa3G5\r\nLML856EzqD92d3c7jGIP+PUCiDccDjt9QzKA6nLjxo3A5CXZQeCwUgpCtmuJ7xk0l3u9XgDOeBZh\r\n6mtr2xAFfKzb/m+VOh4HkWRNPD9iuU/rhMsvvg9bczAjPC88fAKXqfT5dDoNc53H9KP+HgwG4f6c\r\nkUn1znutywvtv/1+P4B/w+Gwo2/E8tfWXfCPrwUCHwn0jeWv1hr/3f/w398TBNA5lwNY3MXvw95H\r\net+rr74a2K9cZtP8oDUznU7xlS9/Baau/cERA9OllJBKoqhq1EJBQ8I4i76WmFqDoRAoqgLGKZW2\r\nAAAgAElEQVSZTrGAwkAaLCGgoQBboZQ1Uquh4VAigZIW2hpUWmBSV1hTKaQ1WLoKKVIsdYKsFpDS\r\nAYs5Fr0+UiwgrYC9C+oGn5+cze+cC7E7ad71er2wN/34xz/Ga6+9hq9//et45plnwvp0zgXdpKqq\r\nsC5pLyc5T4Ajrd3FYtE54CE2Ko3NJ7XENgTXOdM07cTOpDnKf0uZK8mNjcIckV4V71WctcIPKanv\r\n+eEtZcTkdSzLEv1+H0K0B+h0WLlcLoPdxnWcTzIz834BalT43R/8Ln7vrf8biU4wViNUtoBTQGIz\r\n1MLh9NoJvDm9gI16gJvVFKNeH7YEskGG3f0reHD8OCAXuLp3BSgs5n2BB80p9I8rLPaXuFpdwYP5\r\naUyzJczuAmlviLKeYX8xx5n1h7Evlvgvz/4T/O+v/AtMiwUM9rGz/hj+j9/4VzjdP9PRb+8XVhyQ\r\nOIlKLqAqYAqFceow+aM/wv4f/S3cl59B+fVz0EmGjc0TSFXifRElYISBFQ6pvXPmbsx8v6MqrgBv\r\nSTcnXYx0h7fffhsffPABvvjFL2IymeDatWtNojlgb28v2BNlWeKpp57ChQsXcOLECVy6dCl4trz/\r\n/vuB0JDnOc6dO4cLFy7g1q1bkFJiOp3i4YcfxsWLF4PuYozB8ePHcfr0aVy6dAnT6RTPPPNMx8vv\r\ns1bIPv2oRcfAFtCNncOVb1I8W3aeg5UiKL/OWrjmOtVcu2jAEyEldLOpVnWNshms/ok+hASEBCAc\r\nrDOwTkBJCZ0oGFvDmBq1cUiQQGnaGAFbGVSmDpPWGzAIJ90EaFk4KCnhPCUQznrmoRNAmh8MOmmM\r\nQd0oUiM9hK0drDEwzveFkgpSK+8eptrfkxIEIBg48/m8A1xyI4UzXUK8MwYikHtBDH7F4Bk3DlbV\r\ng35Dz+KAGvUb3Qdos5I55zAej8P4kgGYJElgohGzLFaYeOH1jI00HtQ+BviAlnmxCmB0zqGsvDKa\r\nNLG3fNIJH1/tANORNiRWh9p0A5rS51S/+PkxuFBVFMsyQa+XBSOG4meRcQ1YWFs3/aeC4k19Sso1\r\nKecEJpKyTaAKCUr/zAzz+Two4KQ0kuLOGRI+1pcKc4Pu30v7wUD3oGKBoqjR76fI8yHyXhqMVuda\r\ndypqf1EuOnMSwsLn9BCQzoPjDv4F4RkaQjpIBR9frTkccEsHKyxc7SBZXDSd6Q5wmPW9oTOfz7E/\r\n28f6YC0o33Qqz5l7a2trnT4lI5gr4ateBHrTPOeAHl+3vX7WATedszC2Qlk5WFejP8jDvKL7Brfo\r\nuvaZvJr1S+At1YHGiMAdkgdkqAHAcOhdNafTKfb3pgAakERnyNKez7buJAQUpGiYP1Cwpon0GJZE\r\nazCT4ULx28JBi+pmzJVSwsAhyTNk0hs+y6KAK70xk/ZyP9+MhLDdQwCan4luwRy+xoEWeFlVOMhP\r\n9eOHMPQZdxvn85TWwXi0Hq7lsrdVnoogW/M8bUC2BFnmDbxbN6eoqiLIgSRV6OWDkGW6rg3yvIde\r\nr4/h0Lvwz2fLxn27xocffhjcbgeDQegLApO01iFpBLHoCLjxJ6bLMPeWy2VoP32/tbWF5dIDluQy\r\nTvOQ+omDxzFzcTAYYLFYYDKZYLFYdA4IpJTo9z0IqBtwOE0c0qRGmZQt6FwWWIoSaepdh9GTcFag\r\nFhZStaAcLyTDSIGND+8I/FgsFivDUtAYc1AzNvCllIDuehQ4190LBnmPAfPCZ3qu/csYCamGYe7E\r\nACBfS56d1spGekRVtoy8pSixmBeYTuZBFozH4wDCDwYD6CTt9ANky0bnulw4UNNNwhatkOq2L2tr\r\nUJcfPyYQHz8yHrgOyg+pqR+8LPRZfR1aRjCxNGtjfGI2IdAvFjBSobAZEqegMEcvz1EUQE9VwGIX\r\nMulDyREcBCA1aqMgAGjhUFc1oCVUqZA6iVJq5GUCpXJYWUGaGgIlirqH3jBHWhtUFkiQA+Lu+pvm\r\nc57nHeCI5jbJBpJteZ7j1KlTOHv2bHChInd8OkQi3YLHDObhLrgMJdZwVVWdg6BPQyF5QrKNM7Jp\r\n/vEDBJpjtPZonyRdFkA4rCHGIP2W75/kHQC0Hif8mRQ/lsA82pPpnjQP6NCP9Aj6G2h17PvlE1wc\r\nkNkc/9XP/zc4s/4QZos5+jpHhQKVqCCEQmIkhJX4pe05BkkOIxWELeDQhzULiGwBlD0IWcG6BJky\r\nWDqLpEpQa4t0K8dCFsicwkyVGD2QQrgeFmoXqehjWVX44oNPYWjW8Z8/9l9gLR9jJqY4t30Op/IH\r\nDhwCcB3ts16ccNgXCwwB7CcOxjrM/+RHuPGnP8Lov/3P4I4/BuwXQFUiRQIlJSwsLAyEdciF8l6K\r\nP6MihAhJn0gX3djYwGAwCAcf29vbOH/+POq6xrFjx5DneQAFCYvhh9Naaxw/fhx17ePYzudz3Lhx\r\nAxsbGyGmLJFfrLXY3t7GdDoN5ALSAfhh6v1y50WTMcBdKmPm1dHlcNfO+LNV4NBisehk5KO60HWc\r\nycTZJASEFKZ1Q+bPpY2ZwDdiGnRO/a1Fv9/r/N5PKB/PSUoBNJkJpfRB8/01bbynmhmnqwAk2rQJ\r\nOY9P8UmJoAkeuylxt7bYgAUQToFX9S9n6RDgQZ/z+lJfUt/w+nNDi7vlLhYe9OGLmReuFPL7xHOE\r\ns3KoLtztahWdl//eOQulJLIsDQoP9TN3G+Rt6tzDHWQWxmDqqudTe2I2Jc01UsC4IU4ugzQXyrIM\r\n4CJnZtLvvFvpMnxH99Fao9/vA0Bg9vDEAf1+vwPSU58SmGStd8sTQkAaDWcLpKmDgEa/N0Ka9AAA\r\nxbJGf6g6jLzYTVFrYkrR3BIQQgHwnyeJDgyNlhXjM1kKITB0FJ+mdeP37a0D68o5A590wjM9pQTy\r\nPIVS4oDbHvUrvae4WTxWGU+MQHObNhE+PqRMEyDH2bSkxPd6GYzRKEuJshRN+0qUpWfskhHfjp1E\r\nmmo4l0DKg26o/FCA6kHsouVyifF4HNwCPZNAIUkM0rSGcyKMdwte5007FaSsmZyUcGHuAwgxT4Gq\r\nquEcUJYVkmQ/AKqU1MKPNzGv2zicND+oz8hFOQYPaQ0R64RkCt2DX0f1XbU+aeyC6x9aUIADgqtk\r\nJ/UP3zfiQ5xYhvl55ADkkNID/lplzbw2WC7nHhAvCiQ6a+SaBuBja1ojkWeAQAKtPeN1sezGg+N7\r\nA2VaXgWM0jgfP74dEgL5NeZQ15zBbZGmCbQeYzDoB1afd/GewjkRDhTyPA/AYpJw0FQCkJCyBSKr\r\nygBo149zQJKQXPWJTaRU6PcHgYVaFCXINb2ufZvynjogk/l64PKmrc/BzL1cXnNQn4AS3o/8er8v\r\ngt2/XQu+jwWsBaT077VOkGVJkAe7u7tNHSQABefo5WWWEN0kUFLCH1w2Y2kNP7DyGdLr2qAsq6Z9\r\nEkXh3cXr2gRGYLxf8z7hhe9/q/SHj1PhwB+BXLu7u2EM42uNMSG7KgCYuoZQbR+QHpBQvCApsYBD\r\nDgWFCkIqzJ1EsqihshRlrZDna6ilBEqHVACq+Z0zJSx6UFJDlRWKpAZ0grQsYVUNqyVUnSJXFrUo\r\nINMBpvUCiTXI1AielPjTg3+0zvg+HOtG8QG+lBKPP/54B5Dih0v0nmQbB1Z5UHbOdiN2PMmqeOw+\r\nqYVkMF8/vI84w5H2Mvqb9x3taxQ2IUmScIhDfVdVVdCby7I8oGfSGuDgNunvWZaFMeMAONWD2zJ8\r\nrA/TZe+XT0ZxwqHSczyePIInnn4MTjm/x0gHUztolcJHBixgRQZgAYEeClMiVwksJBQaIoawMJCQ\r\nKKBtBicNKqegrIVUEg41lnDoQ8MVAkU2R2b7KMQcedEHZImv7nwF2mo4aVG6BMkcKJM2/vP90i0C\r\nAkOXAVag5yz2ij1MncX2b/82kjNP4so7V5FkwLHtLaikDriArQClEhgLCPmzla+EB5FHw9WrV3Hx\r\n4kVkWYbjx49Da40HHngAeZ7j0qVL4XOlFHZ2dnD58mVMp1Ps7OxgOBxiNBphb28P29vbKMsSFy5c\r\nwKlTp7CxsdGxsR577DFcvHgRSZLgzJkzuHTpEm7evImtra1wwHo/7t9HL5rcQmhgSaEmZZUM6cMW\r\ntFDtSRZ/cXYFLzFDbDaboKpSGFMFdpPfgC2MqRq3M69ce/CvgBAOSuVI0wymak/16ZncMODBbvnn\r\nAKHPFLCcDCwXlHmlNMompo4Q3nCn4hX2GocdfJIelOc5c/mj+HkU80wfMOxidgzf3Dv93vRx7PZG\r\n38XgHVfkfP1bICO+b9sG11EOgdadtI0p1gvX8npyI5vPA2pbWywAB6W6BpwxxJTrGjPxPPRZU/14\r\naO0NSyEI8DShfYeC0mb1APK59P+z92ZNlhxXmtjnHsvd82ZmZa0AqlAgUChi4QIM1CCpselpA1vb\r\nw/SD9DKSTP2ifyGT9ZgW00+QWnrSYiaZrKW20XCsSXWrW63mNHrhAu7YCRQKteZ694hwdz14fB4n\r\nPG8CIFEcFsl0s2s38964Hh7ux4/7+fw756wDrSUAJk9sJTDNz7kpk2PJ+cXrJGgtM5QS3CPDj4kz\r\naPwwxguZmSxxcH72rWTAGWPgClWfWpva3bUbxtgYA1MBCgnSJPcMPiFn/pnpjt6A1PI9z5NazjKk\r\naTupRVVVIWYfDVoaNQRK1/U/gc00TVHM2uARDwgIVvO5ZSw0KUMxE1a6yHIBpryT2SMTgvT6Wf2c\r\neUt+JRtLumUS1KHBQHBMuibKdk4mk9b4EuQZj8fo9/sYDAYBJJKgF/uCTBAaAtJl0Vpbu222Y6RJ\r\nvW9MVbsOboS+kgZSCLiv2iD6OpCfciH7X7pix/PoJGaJ1N/xqd86drCc0/Hnsc5kH0g32Rhw4rzy\r\nbpo6uB5OJ3McHu5iOk3Q73u3+s3xTv1cDlqnSFKHNNPodBOYyiHLbQDvOH/pRiwT+NA4JWBKeR4O\r\nh4HBx8MP55oYn6yHIHhZlgFM9gk9GHNlFtzd+fJzLIHWeQ18eeCaba2qCgcHsxDzUMYSzPMMSnFO\r\n+EM0z4ieo6rKBnC3zbxsAC2vzz043bDk+B2A+mDAhrGQB5ZSf0nZWzfvuT7FrO5YZuJDO+p0GfO0\r\nHc4haR0YUC9Jt2FrLRLdJGkxxsKYKrx820ztbjnHcrnAajVsJU/q9vLWvHOuHRrEg7R89nbSsIcR\r\nrCFAopTCmTNncO/ePfzd3/1dcIFnv1Mvb29v4/Lly7DOsyDXFed8YjhYh0TnqFSt8ZxFitRHvrYG\r\niQIqp5EZALpCBUC7BAYOUCmACg5AlSbQAPIKsAoAUng1alA5ABhBVRVypABSWFviQdjD8vBjHRga\r\nyy37Uxb5u3XX8zfxPiuuP/7+YZSlT1vknnndYTbLSWPB9SuuR+4DT7Sr1vT/unGXJa7zFIj59SrK\r\n5aicP3QLqcMNACiUIfyDhv/S66sEnuUNGEjJ8VHsNUpUgAEUKlg0spxCofRfQJcZKlTQyFDqCoAC\r\nSqCErX9boqyxl1N5W1+cc37ItIOpKmQuhX3xeRRaY7U/RX/cw8bGBgDUXjkZXH3oCFi5Rf/Y8osY\r\nA7kHrqoKo9EIL7zwQrA7uAfq9/vIsgyj0ailsyR779KlS1BKhXBGeZ5jPB639vyPPPKI74taXz75\r\n5JOhHU899VT4+8qVKw/8WX9TSio3tdJ1hqeKH+c3bt1xRkZ8Gr3O6KJgSHCRJ74SsCGqS8OAhjjj\r\n//A0Mq6b96bBLUE1aZRKw56CJlknFO4YNAxuNaphLa4rznkmlM+qKplYSf3dR1Ok6TZ00qk9jVMJ\r\nQslnlQYL7y0Nno8zjjl+0pCRQHF8+hxvAuPNZwwMeJYE4NkiSQCRjPGME7K/GsCuDeBJMJLtp6El\r\nTzxj8I9/O3d8k9QCB6P/qeTYd9Itcp3S5Uaasi3niNYah4eHLaZUDKRsbW1hf38fk8kkGOyj0Sic\r\ndDCoKmP6OeeCzJRlGViAdIONGSPWNEHrAYVerwEdrLWwrmrc1dBmZDFeXNy/skhQRxrqBB+ni+IY\r\n05ftZb+SwRHYMsJ4jQHV+Dd0aaaxLMcgzk5KeWEfyZNzGRtTyvh8Pm/NM96Hxj2DfUvmhQRkJTjA\r\n38j6h8NhiAm5WCxCO5bLJfr9Ps6fPw/nXHDfIiuXcR5l0hIJRrO/qlo+/as5dGA7FoslPKvTzxW6\r\nMXGcyJaQcRYJZkggjro1nmNJzahgH3BcY2NrXZG6M65fyl9cYsNNrgvSaJZgLH8nr/G/S5Ak/SBX\r\nR4cEkH2swcoUAazOMtTutU18R50Mgg6n3LL/ALQSPrCfCKDzM8ZQGY1GANACE1kndZVSKsShHQwG\r\nWK2KUC9Zxnx2uroT6OQ8YrgBH5R+3gLdrLUtt3sJiMXMY+ccyqrJjs2Xv94foCnVAFv+QKg9P+Kw\r\nFpQLqafa4Fh7fVsXK0WuxXJtkPLGlwT/qF84H6y14RBDroPcDCulkCZNUpc49iHHkocOHNd+vx/A\r\n2bEbtPZvlF3ZJt9WC+f8QVszTR4+Q02GINnZ2cGLL74Y4mvSjZKuq2Ss9vv9EwGr8DfaY6jCs6vQ\r\nDUqJb1T7d230rvk1Qn0Q3RnuhrU//xQl3qec9N0n/d3H/f1Jrv11KOue56Q9zSftm497/7j7nvTZ\r\nJx3nj7v2tPzqFPWJdbVqvX/07z5CjsQfStbVVnTNter4vU5lr124/5bJz+Q+pT3H179/VN0xtvIg\r\nwX/WI/cusT1GG4OEB+I3PKR++umnA3NZkrSm02mIayr33fG95bOelk9fUrnhpOELNEHwyUI6qaxM\r\n1RLiGJyKmRXxBjxm7EhB8oyEBZxzwYin0JHumXT7UFqHbJLWOXBva52DA2AiI1Se5o+Gw2OgFkvc\r\n3oaVJlxzRYDpuKybGPycxp0ElGQ/8T5xW+K/WTeBMD4fAQZexwkrDf94ksUGkhxDCZRQTrTWxxKS\r\nxCAmQRj5mXxGyXyL20EwJgbjZFEKsNagLAt4w0bDOQ9MGVPB2nYfHm9LEzdHAlV8xfelrHMMCPTI\r\nOHLr+lSOr/y9jF3AMZfMSirHg4ODAPwQ1NJah+D7NK7JEpNgk2TW0TilK4kq6t8tV3DGQjkPOCRa\r\nI0tTWFNAK4UkIcjcBNnP0wzLGryPx5fvEjyXhjGZHNPFQZAvaVBzgZzP50EG2S9Aw8JKU5lNuZ1R\r\n11qLyWRauz8C3S6zmubQOkGeG6xWyzB2BLLlwcJ8Pm8tcmQGBj1kEZhPBC54HQ1SyaZj7Au+5PUS\r\nYOQ95UEIPycIeHR0FOYiWYBkBbFN1Gny1dIX7ngCIa0VnCODsQpxkAhCDofDwDjkmMYMzZPAPr7Y\r\nJ/1uv7UGxPo/1skxyLNurlFeyKxliYEgAC0duW7OEvxqg96N3iT7ttfrBtBrOp2iKj1z/e7d2zVD\r\n0CdQSZMcWebZdMYkSBKFLMtrd9JucJH18lCFmI9xQH6C53t7eyHAP4Awz8n0o26az+dYrVZBBxDY\r\n6/XQcsuvKovZbIHVyh+wDYfDAPp5meohyzro94e1658KYLQMIcL+o4z3+310u91WNmPPBCxCTCqO\r\np9QVnEMSMJfrONcXCcCvcxunTMVAoBzbk4pcH/g/5UCCf3SFZJ2SjSvXMgBB55jKg5xa+wNCHn6x\r\nrFYrWOtZ7H4uFlguV+j1lp4RuJyg0+mEJCHyQJSgbTwvT1rnf5mFbZN9x7lFABxo7yNZ5B7jtJyW\r\n03JaTstpediKXLvkXuBBgHRcNz/pnubnKRIHYUgDSWAAEPYbgN+79Pv9JsRUfcBJm4V7EJlFmM8S\r\n25DOuY8lop2Wn62kAFqb6zgu3scVuSmjIMSb64/6HQE9GfMIaGJlyZh9FDbnXDAiBml+Yjw759za\r\nmD9slwTIpOEhDQxuSGV/yAl2EijFwmdi39KQCMZvfWot6+Tml8aTfJ6YucC/JUtFGhjSYJRFGuKx\r\nQSTZFbIfYlZCzPKU9cYlntCxQb+OhRgDBvI7fj+swVvZf1IBUamsB/4UKtfUG7ME1/V//DzScJXA\r\ngzQIeb2Ma8j2bm9vh/olQEQQ7+joCPP5vEWvlm5/s9ms5WZMV1MC6XT7o6EqY7IZY2Dm7Rh3BLvS\r\nrGEAk2Xh++B4XErZP7E8kGUkC4Ehay26/ebEp6hKGGd9Yh6tAK1gnIVKNPJuB9DeWYFu+sZZDLNu\r\nS1Ykaw1AAK4IMEpg0c+VJsGNlG/qgZhZy/6nbA2STjA+uajL/mCQXLYjjsFFHSKZc2TUkSHFzxgf\r\nkr+tqgq3b99Gp9PBeDwO1/CgpN/vY39//xgwSrnNsgxuWbTaG+s1Z/04FasKVdXElWQ8xc5GF4lO\r\nQ2IBaNUAjomGVoCFd3Ww1gC2ngdaQacJsqxT6yYfs9Bagug+1ppXayeBFA4+PEQTtiI+LOAzxe+x\r\nLpL9ynFn3DFeJwEKCVL4MBQK/X4PaZqg1+tisfBg2O1bd4NbtnMDdLtAor07bZo2sV4JciwWi5Cc\r\noyzLkGmTMsK5SPC8cb89wHQ6DUwoZo0lm4+JKDj21AW93qAVd1a6mFPWKVOMN8fDgyzL8Oijj2Kx\r\nWODo6AjT6bTFUKUM8tkkIw7wG8Xlyssk5wdZXRzH8XjcWpdkUUqFw0Gpd+RhihxjudbJuf5RIBgT\r\n7QDHD+Mks1yeZEvwyoN3beYfN8HWWkyL1Yl7KABBd7PdBFiZxTrLfYiH8XgMay2Gw2Er63O8/skY\r\nvQ8T+Eedy36S8cvkPo3XSqYf16jTclpOy2k5LaflYS1yDxPbkw+67gcJAHL/JQ/TuQ4DDehHLIZ7\r\njfl8HmwgufeQNjJtaLmHl2s/6/okeNRp+eQllaAfDR4JWsgN17oiP5d/x4y3mDERBLOWf+l2RwNF\r\nnv7TiJEbcWMMTOWPzjU3+ACcbdzoup0ObP25ApBExmEcLF4y48i8ip+JzyqNiZMK27uOGSaBVsmQ\r\niu8X1y8NVckck+3hb2nE8X6SMVGWZcutjHXGz8V2xcClHF/ZJx/VN7Ec8X/J/Il/u64e/p/lGawl\r\neGVErLcEWjfso9jYDwCm08f6TBr3sVEZt1uCfBJYoPzSbV0qRmmA8rcyEL9kWS6XnuHBBA8E71jf\r\nbDZrGdc0FmkMTafT8JlSqsVkcs4h6zeg2nK5xKpcobJVY+R3EqjEZ8p2vhOAGgR0Cq0TnHXgcQza\r\nsh/5HGOdB0ZZURSwlcFqsYQpq7aLbJIAqYNNDWDbAbElaMV7SqDLGBMynRZF0XJLlJnweKIlXYEZ\r\nE1WyMcmC01pDadMCQ6RbtXOulTlVuhHTdbPb7Yb5xT6X4CKNXDm/JRA/n89DLEBm/d3Y2AjywMMF\r\nCdpJme50uq05TaasZDA55+BgUFXNGJelP/kbYzOwyKjPlFLQiYaGQlX58dLwdSXKf47ajbgsV5FO\r\n8YldfJxXFWKWnVTWMYOlDK473JB6JWZGSfnk+hAXCXr36uzTZbWCVimyLMFw2A+B3glqFeUcq70F\r\n0tTH3+v1BrV7vUKa+vivnU6ObreDTifHbJZjuVzi4KCJ4UeQo0nK0WTtpO4gA4+6Xc4htr3NSm3m\r\nKOujDFJuKP+r1Sq4/VK/panXKRsbG3VsukVwO6frMWVQZmEOOiDpBx3IdjFAPsHIWOfKcVjHOJWg\r\neqwb5F7E2iazqfytHF8Zo09uqHlfGdtVnlCzHrIyJYOTfepB9eOHePLFumNGM9eqxXIVsofPZrOQ\r\nDIhjz3VAzhE5tx+mEq/x3NfIfU4MwAM4Bf5Oy2k5LafltDy0Re5N489P+u5nLdL+eRBgoiy0abkf\r\njvdy0ubjd0A7GRI9cZjoktfGdr/EFoDjYYBOy4MpKTfXkpJJlszP6k6xTrAlCCA3xbw+rV2TaLDQ\r\n+KAwdbvdOjPhLIAgZEI452DK5mRbKwVVx3BzxgLWYTlftFh/bEdgCqHtAiY3/TL710kT05jyxD5y\r\nzqHf79fPVwaGEdlp8Wn2OmCMv2F96wzVdQYOQU1OJGkIyfFlpjwJKkiWAo1EMhqke6IxPuFHbHyz\r\nxODZOlCtqopgXPo2NOxTrYE8b2dalf3gP2tASbaNYFdZlqF9vL98BwBn1zPWJIApn00CMLLfYsNK\r\ntpOnFjIIPNv7wQcfYLlcYjqdBoZfkiTBwM6yDMPhEJubm+j3+wHwmU6nWC6XgcHD+vk79v/du3fD\r\n/KIs8wQmuMllCZIsga58gHhTrVAazxIaJT3oRCFLamXvDAyfVyfBxV6OiQRcCGTJfqVRqpSCWpRI\r\nta7zifrsd1VZoqrjFw4GAySUvywDrA331FpjOSta/Z4knA8I7wQxyhKoKib3sbC2E0Ar6hQAAbxg\r\nzEQ512IWnU5sC/zzMd2aWGfM5he7xxJQABD6gvXIg4l195Qvgj+LxQLT6RRHR0fY3NzEeDxGt9vF\r\n9vZ2YHxxXsvn6Xb6nullljBVhcrQrboG65IUSjukKoWPGeb7cDarnyurs9IKd2MvZx7c087HgtFK\r\nQ0FBWQc4T+lT1qEoly397GUygdJ+7KDaCTzkvPSylrfmtLwuBob4zEA7FmUM+sgDsaOjo7X6jf8P\r\nh/0AvBqzCrI0HPah1CCwcw8ODjCZTFFNp+h0OgGc29zcFs+k4JCgYzNA9ZB32klayAqO4y5SZqRb\r\n+GKxgFIqZFuj6661NoDgfk5ULbfeJPEZt5PE1zedTuu6C5TlCkWxRFF0AgDZ6eShDRLUZ38uFosg\r\nvw1g2CTAqUxax8Vb1kBwBaUqaO33Ap1OrzW+MdgrT5PlOiH10DpgmGMexwyM14HZbLbWHV22hb+j\r\nzEkGIOedXB/ojm2MwXA4CH0lQXDJVuZ8ZEb19nxIUBQVynKK+XyJo6NpcMvvdDrY3t4W7SHo7t99\r\nhuKHq8g+lew+rl1SDrhn4Pr3oA2e03JaTstpOS2n5UGVdQeY8R7l5y2fFjz8uLppj2itcf/+fbz3\r\n3nvY2dnBxYsXwz5MehrKg1Gg8Y4AgP39fWxtbbWu498SJ1m3Lztd5x9MSaVbk3wx1hUPYgQAACAA\r\nSURBVN98Pl8LOoUNGtYDU7wudoeRQI21Fsb5jRzZOPztwcEBDg8PceXKlbAZ5kZaGnLVqjH+dZrW\r\nhqZCkmZAWiPVxsJVtXGZ+EzCUMrHB+w0KDUL6/u4TaVzDg4+UUJsYPjvHKyroLRDlidIUpmty8JY\r\nixR5K0aRBJmkIbWuj9kHDAhOo4oAHw1AaVBIA0Qphf39/cAo43hx4nEiSvBPyggNFOnSLBkVktnI\r\nOmO36vHmoMX6kCcIzjkkqarjNho4EGQD4BwUHIpVzcxxGnAaic6QZ16mtSpgKg8i+H4lE6i5x7Ks\r\nAujC/mY/WOtTmktZZrvlGBA44rPK2G2MA0fjhWwgZuPc399vxfIbDAYYjUYhm2ucRdY5h+FwGECp\r\no6OjFqgoZdg5F7IxUx4IjvJ5jTJQqUJ30EXWzWqDs8nIO5ktYJyCTnMkSQqdevDGOofKAZlq7kd5\r\n5P34v+yzGCDtdz0zppt3UHSaTMQEl5fzBTQUunkHaZYi1QlS3SSa0UlZj68L46sAqNrQNcbVc72O\r\np2gslis/L5erFKPhOIy/dG8k+Defz4Mss/8l8w6qCqCz1h4IGwwGIf4W+0ACNXQDtdZiMpm0WNac\r\nMzL5AdtCIEDOLTnmHGPnGsYowRYmhCALkjHgqgpI0wybm/16Tnsgcb6YBtYqAzw7HqyggnUO1gDT\r\nIx9zTDkgUQ2zr6qzaIds54Jh3cShzJB3mgMFKR9+fll0u01fyQMOPz8VVssmYZSMa0r5YmIJfk4m\r\nnARY1h3AcJzXrV1Slx0dHQJAzdzjoVICY8t6rvaR5ynyPMVgMMBySTf0CvP5FPO5B2sI1ua5RpoC\r\nSeJQVRpwW8GVnwkzOIYefBy25IUgIYHC3d3dINfMAE63YC8vy5ZsU0a5HuR5jqIogswo5eONDgaD\r\nenw7Yf7IdXwwGKAoChweHgbmPjOWE5gKzDSnYSqHRGdhfKkjb314J9THOJNy/AhSc54xwQbHTupN\r\nFsmUjwHC+PSc62kMLrOO2WwWrmedMqM4wyjEMsoyGPaCPvFz3LNsbb2+pRnlzkLBwRrj18J6/el1\r\nBw0zsyphKj8vy8LHyysLE8ZfZlRPkuRnCCL/iy8x+Bm7J8f7ixgklF4hp+W0nJbTclpOy8NUPi3I\r\n93HgHvcy0ivhQa2J8QE4PUw2NzexWq1w584djEYjHB4eYjKZhHBWe3t7OHv2LJIkwYcffojz58+j\r\nqiq88847+OIXv4jbt28HO3kymeDq1asYDoeh3afr+i+upCe5vUhgIz4tBwQDQ2xEY5RWKRViVsXs\r\nqRgoiws/n06ngU0hDeHgqpx3Qp3cQEqgiizC+OQdaIDJ+Nljo2Hdc4mWBkDKn6yjdULvk04cZ6+w\r\nfQR9ZPvjPpL3jvsIQDDWGCOOhp9zDpPJ5NjpAo1gPjtZH865YDxJNpM0kCRrUQKM0jjm73k6L+VG\r\n9rc3YufH5Ev2lTEVyrII4AANFw+4AlrTzTcFUEApDR8vzKIsaUR4IKgBUl0AAGPgTrKjnHMB/I5l\r\nn+NHNg2NcskwZf8x8+p0OsVkMsFkMsFi4RmpFy9ebPUNXSjplipZmBJgY/uGw2EATyVAQvll+2TG\r\nyKIoAvOm1xsAsGDcMm9YNy5zWqcoigpHR1NkWS0TaSfMH+C4W6QssQzHRrgS/UmwXfYHAQ+ZNbMN\r\nkqUt+bG2nZ0zTXUNDCbQmqBRhdXKoChU7arpQU8J1FLumUE5lgGOQVm1EwHQPVKpJl6iBI3iudTv\r\nNwkv+DsZgoHJXAjysx0cc9ZPl2IAASyqqgr3799Ht9sNgDHZoezDoqhqwNoDUnyWXndQx0ulfjdw\r\nDoCytf+3DSBjURSBvcrEA4w7yLAD8pnlK2Yb87PYLVMewhD09Mz09W6/cp7GepvjRCA8/r3XO222\r\nl3TZluBDDL56vVRBqZplmynkyGt90KldYVci861BZVZYFXMPqtbP3emm6CcdFKtZuI9kg1EWKR/U\r\nt5RhziWCSmT8EXymi7kxFYqiycLLtZb6x2f/ztDp5AGU96D1EY6OHMpyM4BLjI8nZTJN0xDHkDJJ\r\ngNqDgcza2guy65mqGp1ON/TpcrlCVZnQdj8/UiyXs3AfeWDGFzOfx6BdzOCTm2YpD8xcx/5kP607\r\nyIr3RlwDKFfygI2JotifHvDSSFONLEuCvphMJv6wC5w7QJpqoXP8y1rqwBLOAVVlsFgssVyu6sQu\r\nyxD/lWvMw+YuK+cZ0IDRksUpQUFZyPY/LafltJyW03JaHrYi95cSkwAeDGtPgn/ycOxBlHWHp9yH\r\n7e7uBmLC/v4+qqrC1tYWvve97+H69et46623cOHChbBv6vf72NraCiGPDg8PUZYlLl26hNFoBKDJ\r\nlcB9lvQCOC0PpqQxCCcNbG62YsGUm9sYJIuBstg1RtZFFta6wt8cHh5iMBgENJggBg10ugVZZ6Dg\r\ns+YpDThYOIeWAAFoQC+y/2w7ztu6Z4nbFLUUzvFZ5GcOgEJZtrPYxMbHqiqxbt7zMw9cyDYACLmN\r\nHdI0DyDFYrHC3t5eAOR8DKZV63kkAOqZGhnm87JlKFMxVVUKoBfuzd814GEamDUStGRfE7WnAUoj\r\nVoKvVdVkhmyPha7B46I2el3oY9nPcbBQKsB147dOwZJtehILSLqgy/6jHDEbrRxjKSdvvfVWkFnG\r\nkwOAft8zraRblowZJ9sbgxMS0JAZNGW8OgnUNrLg3QHbQVm9cRyzTwlmdjoevJxOG9YO2YQAWiCD\r\nBG1Y1gG6crzThAY4aqAug9ZAkjBWH9los6BL2P9pmkCpnmDNNLG05PhxoZJgCPsq0Z0WmCITotA9\r\nTwJU/FvKFJ9HjhkN/MFgcGzOS/nodrvh/hKAYb10W5fgEwFJGb9Pyj77gYcL/X4/3KPf70NrHYz/\r\nNC0FuOrBhSzrIEkVtFaYHM09E8lqOFfBWRcABucAnWhUlUVZLrFceh20XBYYDuuEIDVziuPA5zfG\r\nH4ykWXu94bPEgKucf/LaeBMlwQKgAQU4PvybYykTMrF91AdkIEnAVoJLAGDM8fXLt0+EowiMOA+K\r\nLhZLzGeeyTedHYakENStHkzr126b3QD4ydiOfh7b1uGYZK+yn3d3d4PMLxYLZFmGbrcbgKBer99i\r\nXPnn1PVzVcjzDtLUuwPneScAvWQG7+7utrLNEjRkTJfhcBjCE/DQo6qqGtTyY0SmswcNLZJEQ+sm\r\na60HyQoslwtoreuYib36YAPwbqwcOwWAY6LRqCLKiIZSjAmrsVzOW3IZrx/y9Fx+HstdrKP5N5mv\r\nMmA1565MFNQAgGlLjxEolTpftqNYWSgFpGkCY1DLSoGqKmvwcoE8z7FYdEO8RjI36fXxMBSuUUCz\r\nZ+Sck+XEzwAgSXESmdF6Pwxo51DBIbVAmaTIUKBCgtSmKLXPgKfhJUgDgA9DWqfGg9h6OSAxqJDC\r\n7/SAtP7OKaCq25HV+8BKNVU86EKjSv7NQ/CTro2vi/s1Pqj6TSyyX4H1shd/zv6M96PAcftBjtFv\r\ncj+flk9W6h0PAJ84TekUFpbUBjg4KAcYBSTOejWlEmhjgCQJy6LRFZJ5CnQdKq2QogKc0J3Oqz0o\r\nX4eGrvVaBYMSedH1tnNmoeEP1k/LxxcDiwQKBsqz+p2CUcAKQB9izanNVAfUY2JhYZH8jCvIg9Qn\r\nrEva79wnDwYDvPfee+GgFEAI0Xbr1i3keY7xeIz9/X188MEHuHr1KlarFW7cuIHd3d2w/6GtIw9g\r\nJbZwWh5sCdJ0EpjXxGJbz/xDcjzjqywxGCI/11rDuPXMIdbJbL/MUCgXYxoGMZuPm2V/33acv+D2\r\nZduG5i+qxDEDjwMFJ1Na5fftNqoAAirlUBQrTCYT7O/v4ejoMMQZk5mUyQaUrr9KqcAGkuAPwRLA\r\nYjKZtZ7Fu+vlyPMmU/NJpxeSkSSNHN7LB5ZftX4jAVIGfD8JOLLWopO71v3YTgl8xYaZHBcChzGA\r\nKZlJ0jCJ66HBxvpWKz8WR0dHWCwWuHv3rjDoeyF2X6/XCwFUY+BPGuPSTSzuQ8qzLDJzLdlsHDP+\r\nXhqds9msFYNLuoCzD+JYoNINNjYY5MmTZKtJ2WgzcSWTwy9/SiVI07wGsmRSFF+XdzH0Zlqv12Tb\r\nlWPCexKAjl0+2Q65YAFoxa1TSmE0GgVwjKxjKQN04ZXMz3gMeG+ZFIRtomxJoJkvGS+RgJ28Hmiy\r\neUqDOY4ZRhf05XLZSgjgmYVpACc8QFgBsCHmXpYnsBawVgEwNbjiY51aazEabrUYTIwvSOBiZ2en\r\nxWSM25hmx5k86wCVdXPYy087jmd8+CSBPglCSoA1vpesQ4JCvI7P4b+j3KN1XzZzNiXgppHnXaRp\r\nhjzrodup2XauSazhM7gm6HYNGI9tOBrDGi/TvV4Xg0Efi0U/JLC5c+dO+D2ZwgR28jzHdDoNfU1w\r\nmcCd1hpbW9vBLZwHfTJZh9RPHEcmk/AytQhuyGwHQV+6AlPWOp0O5vM5ZrMZ5vN5eGb2qQS6+Rnb\r\nI+eXnOdZrmCtgnNkjMbxfeX67nWMq5lyZIjL+RPLEU+neT/qj7B/idaMWJ7kGikBFepQznXus6hX\r\n+exk6UqAUALiWZas/Z7vBJZ5D+4D+P/DUmS/U3/EgJa8bk0F3k46YS+ioGCQIFFABgOrfLxagxwK\r\nFaAVcrgI9dNQ2hvVxjokysFAo1IOmXbQAFJn6ks1oAGrAEAjcwDgYJSvUEPjpKZ/kiL1mdyjU+6o\r\n3yiDsa6lXMk9HtAEZI+BQqnv+C77lOuqPDBeBzb+qhTZT1InyHKS7MX7SjlGsm/jPvSHD8uwrq+7\r\nRrYvbs9p+c0pDg5LzNF1fSjndU1lS6QqAxRgvHYDlIO2ClAJcSMg8bJVaIscGoCD6QOAgUZ9eK+B\r\nrPLhchyARDkfSgnwpxnOn4AkCWDzChYpKgVkTiFxFqV2yH9hxxu/+sXBIXEaMA5WlYBOgMoh0Rr9\r\nBEBpobXzY+XZSz4sh/Vrko+9/cs7HKDd2O/3sVwuMR6PUVUV5vM5RqMRHn30URhjgp2ptcbVq1cx\r\nmUwwGo3Q6XRw5swZZFmGra0tXL58OXgg0B7q9Xqtg1Wg2UedsvoffEnlBpAdLRdxfn+S8WUixos8\r\nlQaOb6pZAsNC1IU1fwNNxloGspYGt7OAsRbWNKBDkiS1svKb43Vt1yrxWU7FZnGdAfppS+xWzXs1\r\nG4yPdr05CZiUk2I+n2N/fx+Hh4chu6RzLhhwEgyQv1WqccsmWEYGhzRSYuYTrwXgE6wYC2PqGEus\r\nu1ZcGirEAnPw//tsrZ55qZP2pse3y7tQq5rR4EFO1P3l2aLeHbjESi+b2IzOxx1LdQ0EJ3UsIFUn\r\nHCB4JpkTAlxkP0gwdLFYtMALKkEaUUxjTqN2Op2G5B1FUeDy5cvBeG67rJGR1hVtqSIl55MfNIBn\r\nE++SwBnnp8wUK2PEEQDki2CwNAilbBBg54aU2XHpvszYY4HVlSZItUbiB6s1/51zUGRlKFUTJupn\r\nqb9PdKfV7zRk2B6y1oA2i5DPQOamNKblBnqxWLTYWhyLxsj08bSKogRZvNa6AHZ4N0rPFFLKj4d0\r\nf5R1c94BaBnfDUu5E55LJhogoEegXAIdjCnWgO55AGBImY9BCwIUbBNZjoy7NhqNMBqN0O120e8P\r\nwyLs+3WF1WqBolyiLCtkWQprNYwp/aakfilFd+YSnq3VHBxVVYHFwmC5VOh0shqUagAhP96o+1OF\r\nF8ESqTO90dOAfI3xWsd/XbMnkHNE6l5p+BKUof6T18WAIWVP3p+fxQavl59GTv33nh0JlLVRrmuw\r\nvYvNzU0sl6s6YcgyuI0757BcFKiGOgDyaaZhnUZu8gCCb2+fCTH5VqsCZemznleVqcd3EAxbmbm2\r\nqgysLbG/vxeYe4zza0wF1FmXF4t56C8C2B6o69Zym7ZCCszn88AsYzId6j7fnoYduFgsAPgDk/v3\r\n76PT6WA4HKLX6wUZ4Bzk3wTJyGLu9tKwH5BAmwz9Ees5ygK/+yiD+zjY3HYNlmDBOjA5LvGmlsxU\r\nyeyVay1jzhJgp9xR1xijWm2Thxu8hocAPCQhc5Pj/TAVjgXXgaOjI+zv7wdvD3mQSPeh4XDox1Rp\r\n0JMk7nsFILUOpbHI0gLa9KAAVKiQ6QowOaABZQyc8nO0QoXU+HUtURaABwxzWCgkgHFQzsClKQwq\r\nQKU+wZH1a55TQIIETlkYlEjw87tZy/2R/Iygv9RLlAHOl/iAEGiMuSZBU1NkOAkWuXfkXGzr6F99\r\nYCoGSAGEzJRyfT2JLSn1CPtr3SEpxwxAYN+GvalthyLi4eu6MTwtv0HFAb2qDwdgsihgewWqaoXM\r\nJUiyDAtXQVseoGdQ2sJZz8pLM4eqdNDaoXI54JZYIAXMCoO0D+csVlgAbhkICXmaoSwMlPOhf6AU\r\nprqH/moO13UoHaCrFIVzGHZ6yGz+UTyW00IANVHIKg2YAipN4GyFChl0Cmg4mKpEkqb1YZaGUwqV\r\n1jBQ+GXz9JmpV2vvujscDoMO3NjYCAfF3P/SS4yHyhcuXAg2yfa2P3Te2toC0OyZgeagQ2JIp+XB\r\nlxRoFiYJ1MnFShpFcsFTSqGq1mejZZEbi5g5qLWG07Hx5ALtFUAI7r80CyRKo5PlSHUSQKeylCfv\r\nzp9MWECperOiaQy2Y6HRCEqSvHX/mP3xaYt0i6SxIetOk4/eEMbuRbKNQHPSKAEJglo0xlgI2tHY\r\nlxsYMjOGw2EwwBo2UHvspVsvjRZ+zxNnPjNBCrYzjpOUpMdP6k963hjk4HNK5h7rloa+NO7j+gth\r\nqPM7eU3MiqQhRYDt7t27oZ8ZX6rT6WBnZwfdbhdbW1vBaJbMMxqj/X4vGKfrwNmTTjzY3rIs2kHc\r\nRd/T0GP/cAMpN5o0AuR9GDeMrnv83WKxwGQyCbKmlMLSNUbnSfrjJHBK9ntshPP6jY0NLJfL8BkN\r\nWwKwbCMNaWlEEySQzBop61mWoSqbdkn3W4J6W1tb4dnkqRYNUZ00webl/Gb7F4tFWPDi7yi/knnp\r\nx7QMfSxj5kmAlICMTEjAMZXMRt6bYDDrXa18LLCzZ4E0zYMBmSQZkqSCriooZer4YoBSKaCaZEVs\r\n/+HhYWiLnCfs/3v37oUkKGQdShCQMSPXyQ31xbqTwAasP/nQiO3gXJN9x/EiU/EYaB2BKZJByj41\r\nxiDvJK25JIEhAMg6g3pMPBAM18SiVUphe/tMYLfT0HNWoSwMCjdHlg5QaoMs8yB+t9NHJ3cBwBsM\r\nhpjP5yHQMmMv8tDizJkzQU7ogkrgjMBwURQt92G61Q6HQxweHrb6kjpeMsfJBibITKYegT8m7OAh\r\nAl3h6Z48n8+DnmLd1Ek0junWzDZT/x4ezsI9pOszAUYCXlI3yjkiwV2OnZQDGXtG6mkJMEp5lXXG\r\na5WUU9bJ55PtorxK3ci5S13Iz011ctgUyUyU9dN1/GEDFNhPnGv7+/t4//33MRgMWnFZOZePjo5w\r\n7949XL161RsRrq0D+OxJmtYJqhzyLIFyOWzqUCqFHJ4h4xJP4EsSjUoBVikolwEJUDmHVDmUdNeC\r\nQwUf8kAbiwoaDgq6TqGilN/CGqeQ1N+k6tMxFyToBDTr5UlxG3kdx5jrj/Rg4N+si2xgmehOAuWy\r\nLdRxXCvX6d5fpSLnKt8pb9L+kZ/J/Qj3AyyxwUqZBtAaA+qUdePB67mnedjm62n511sWeoL/470/\r\nxv/46v+EslqgkzhUboFKZUjRg0kKKOOgugnUysFYA5sBHeQo65Atle2gl1ZYwaIDjUonQKGh0hKr\r\npAKURVlU6OgOTOmQ1eQDlwKJsegkGappiXKcQpkEnVWFz13+Iv7gt/9LDLH5y+6ih7o4q+C0wyS1\r\n0JMZ3HKJg9USO/kI6PQwSy1cabDR76Gb57DOQqnEr1AGv7i4EZ+gxPpd6kSg2atz70LsoNvtBgIG\r\n6+HhB9eb2CaKbd8HhcWclnZJpQtBjL4COHYCyMIB0radICH+vQR65G/5rtP17gYsxhjo1BuAs8Uc\r\npalamQuLYtlyQ/SBryXgQDaShbJtt2ZrfQwYWeKN+qctMWspBrKc/eh7xUZDXGS8JSaUYFZXbval\r\nuy5j/tAQo4EDILilMvOk1jowCWVSCbbLOQdoBWd9TB3AQSU189IYGGdRmgqVqVDVcqLqZBsBHMzS\r\nlnx448uPY9NPGkxGQSMsTb2rndIaTnn2Z2UNlKlQVF6pVLYGZXQ7w6xk9lg0sbykq4x0VyXrgoYy\r\nWRQENzhGeZ5jOBxic3MzuPfOZrOWMqPRR6AnyxJYSybUcXYoP5OJUxpgQrcARf6O9dP4LooCR0dH\r\ngdlJdt9yuQwxA/lMZVmGuSXbyU3vaDQK8QUXiwVsKVhpSeLHwzUur3qNa7itKjhrYev5IQEZ3osv\r\nuqXzeTgeTDTBbMfS9TocLDgX2HYSEKW+yLIMadK4M1PGCWZIxpN02+U1VVVhuZq0NvqSXSRBaIIW\r\n7BuCwRKAJ7CSJElgVgJotUsC7IAHRykf7ViOabiWAAbbxrhrNPK8DhkG108PzDlkNkFVleF+ntlL\r\nMITxCdsu/ex/viaTSct1kWxZyu1w1K11tqtZvV5LAKhZr2jpA9QRbvh5bBDFupvjSD0s28n+ocyt\r\nOwDgeBGMkeuZN+hyMX5t2XXOIU2addBaW8ei1UHnJqmXax64UBbns2UA6Rp2mUKWoZ4PHeS5Z81R\r\nt6VpitlsFlyCmW2X4B/nPee31+sNKCzBPd6TzFq5P5Du6DxEor4gyEx30zzPw1xhwhG2lXOj1+sF\r\nAJBsdZmQKnYb59hkWYbJ1N9HAo6S0SY3qdIdOAY0JNgmZWDdmi3Bu/izuI51MiV1lAQXJCBJueY6\r\nLu8jN9laVa3xoWyzb8mYo/xRn5C5/rAUCW4xScz+/j42Nzdx9erV0AdkpVEW7969iw8//BBbm1se\r\nxBN1cm47a3H34BDfeO0N7OQ9fPmFZ/GdD27jx2++ji9du4Yzoz7+xd/8Jf7xP/g8HhkP8Y2/+Q6m\r\nkwWef/YKXrz6GVjlcPvOPXzt73+I3/r883jszAb+9Fuvoawq/O6Lz2B7mMFVCnvLBf7sb78Dp4B/\r\n9PJLeP3Nd3Hj/i5eefklXOgofAriHwAfAudrX/sasizDF77wBTzxxBPHrpFglCzL5RI3btzAZz/7\r\nWTjnE+m9+uqruHnzJnZ2dvClL30Jk8kE4/EYm5ubLTmlscYxunv3Ls6fPx/WR6DNZvtVLPG6wbn2\r\n/vvv4xvf+AYef/xxPPXUUyiKAk899VQwdtnPy+US3/rWt6C1xksvvYQ33ngDZVni+eefD/s+oJ1k\r\nkGU+n2N3dxdPPPFE2MvJdYmHTqflN7wUCX70wQ/wk8X30Um6uNy5iCzN8eHuh0DegV2V6FQ9zMsj\r\n5EUPOtEozALqKAOGBj2XwJRdHLopqi7QQ4qVskgXXbjuAnmxgVW5wnAwxMZogPFoC3mW42hxhHsH\r\nt7CPKSarBc65MZZ7M+hOil1XYfbBt3Bnch/DjVPw76NKmTjkpcVYAQuVYO+tD5Aah8PLChuDHH30\r\nkaZAWiVAnqCChbMGuUp/6Q7VUl9JMoIkJUg7BvBr0HK5DN4N0k6WB7G8lnaKPEQHmkPV0/JgSyoH\r\nSxotssM/itlw3O2pzaDgZywSfHPOwUV+7DEU5nTtA6+AsqpQLOYoTAWr/HeZTjy4ZJqEFGma1i4g\r\ngLWdtYLrnIJzxzf1cdt/3hNNCSLxf2l08LUsimO/le31m6vGKKYB7BxPDoFeb4DNzW1Mp3Pcu7eL\r\nw8NJDZClgVngnEJVWWhtkCQVkqSCcwpaWzAuonMmuP0p1YBI1nrwLUmaRBDWVjDGQaeZD6atPLPZ\r\nOOvBQOeBtaLyxgtqtz6n/HdFncG30x205GSdjLH/2Hc0ApMkQWVUoEhrJFCJB/1s5Q3afr8P45os\r\nsLoGC6F9PyaqzVqLT3kPDw+xXC4xmUwwnU6DGzV/c+7cucBs6vf7LcV2dHSE8XgcwBmCqNJ4LMpl\r\nDVACSaqgrKr716Ay3ph1MPXLgtQCBwfrLLK005q3lBkq4zzPcXR0hKOjozCnCaRJpS0TZnAMyKih\r\n4cV65W/mC6/cdZIgsRZKa1jnYAI4Usu7UOpQCjpJ/DsA5+jmJkFCW78MtEad1ZcsMIei8GDpfD5v\r\nxQMl6EVDJc/zAJzJk3nKUJ5n9dh4eY7DHKRpItwi8xowy1BVnoW0KqYtXSFfQDszs0wewoWO2X4p\r\nIwQY6Y5FAJ7MUh8XrmGgbW1tBWMeiIBtwSCQiS/I/uEY9no9lKUfdy/DaR1/rY/Do/1abpJaB2lo\r\nlSNNUiABRqPsGODVAHgKaZoD0CiKCoBPUpFlqwDudHs5jPHz0/ejDXoZ4Hz0+gvw+g5w9VhZdDtN\r\nTNV480HgKJ7TsX6V30nGcKyT5Gal0dXNy9rm5deXJmZtw4xst1dr7zqbJDo8M9mISjvs3t8P4Fqn\r\n00Enb4B51qO1wmDQR55n6HY7IfTAarXCwcE+8jxHv+/de3jo0+l4PXXr1u3ajbcfgMe9vf2gBx5/\r\n/PFa3toutJxPPNWV4Djj+RGYJPOUrqaSpUc2EpmnR0dHge3KtVzGxOQ75/BgMApy7+eBf1WVxWpV\r\n1q4pysutiA/ZzNFGJiQAKAFVOd9ikJ5sb34uQRMa8vJwQIKKQBOjVe6v5OGJzPjOucxTc2MMsrTt\r\n0i0ZxvI3BP/4dwx2PgyF7CmOL9dvgtMS4OZ1gfmP9ewB5xxW9UFVkub44d372HjjTXz3p/dx7fJF\r\n/D8/+DH+g3/4b0B1Brh1cISNboYfvvsBPvfc53Hp6mdQOQWrNbq9EVRvA+/dvI0rZ7ZQoYvd6T6+\r\n9cMf4d98+WXAFvjuOx/g9myFnYtn8b/+6Z9iVlqMNs7h1e/9EL/3pc9/6v4pigJ3797FV77yFZw7\r\ndw5f//rXMZlM8Oijj+K5557Dn//5n2M4HGI8HuOdd97Biy++iO9///tYLpd4kZjsywAAIABJREFU\r\n4okn4JzDjRs38Ld/+7e4cOEC7t+/j5deegkA8Cd/8id45plncPv2bbz33nt44YUX8P7772M+n+PF\r\nF1/E66+/jul0isceewxf+9rX8Pu///u4dOlSaNuvIyuNLGZjDD7/+c9jtVrh3r17+OlPf4rDw0Oc\r\nO3cOzz//PF599dUwv7rdbgBI9/f38e6776KqKjz55JOw1mJnZwcffPABtra28N3vfhcXL17EZz7z\r\nGUwmE/z4xz/GD37wA7zwwgsAgG9/+9u4fv06Pve5z/3cdshp+fUpLq1gKoPEptjojPDczgu4snUZ\r\nr2Wv4fV7P8al4SM4v/koXr/xPZzbfATD0RArN0Pv7CZuH76H+6sDPHnxs1iqfby2+yZgUnQz4Nr5\r\n6/jJ4ie42r+G8ZkRHn/iKr71r76F7d45XDr3CH74zvfxxPmn8Q8f+xL+5Vtfx+7uHI/uPI5b01tY\r\nYIGNpIPuqWfmRxcFZA4oM41sUSFRGpcuPYaf/tHXMZxM0f23z2J/WaGDFJWp0C0TH+ZFARUskDhk\r\nv8TEKnI/Q9uQ6zUPXbk/5J5bYh0AgkcHi9yb06aWB+7h8O4h26f8upQ0RlrlqZRkrsQ0dpbCmtZm\r\nOt7Isp64/sCcELFDuHGVG9gQUytJkAtmz2K5xKoocPHsTvjMvzto7RlVaZpiuZwHt7Y0S6Cg4TNN\r\nNhkx5bNJ4DMGoNYVeZIXn+6z3phpIPso77QD3st+4/MANAoAhSZ+HZSCNYBWKbqdPnrdAbK0AziN\r\nsihhDZBoUxt73WM++FVpkHctNjfHIbaQtRbGlrAuRaIzlJWPWdbpZuiqPGyIfND4Cmk+gK7dEpxz\r\nMDXIEWJmJQmUAIgdPEvPKQWVJCgLBo5OILs60cxG3Gv1F+XDGA8KmNryds7VQbe1z4flnI9+UbNA\r\npPEYmGNVFQxpjpV0iyuKArdu3Wox7jY2NgLTMs9zbG9vR/LXTg4wm82C8UgjVgIJy9VMZF71skng\r\nBPAxjJLEgyiSRebZNCUS3YAv8hn5GU/kh8MhiqIIzCCCEd1uNxhVZP9Y67OIAsC5c+eCwSnZIzRq\r\ny8o/U+UAW5RIrZ+zWbeHjtaYTCZIBYDvw5AopFltUNvGjY91pmmKJE2QqhRF6d0BLWM5aaDTzZB3\r\nxth0G5jPivD7qh5PsluVUoE5JQ1gtt8b1woO3v3cwcezI/jqrMN8MUVRLrEqFpgvOgG0SJIESvuE\r\nIDLmGceA/UW9JhPuMK6bZLIQvKRsEIwlAMJ5K+dWVVXY3d0NQATbJsGZ6XTakm95mubvswr/L5fL\r\n2t2zj/HYu+hujneCvBXFci0DmG1Zd+hDeWQfcP6yD+ezxo1RawejHZRqWKyj0QhpItl1tX52GgoN\r\nU1fq0EZ3Kszn87WsL74IrrD9sq84dkF3CYCoAYYIHho452OBZWmT1IWZ1xnT0Nr2GpdlGlVVCNev\r\nDjqdHFm2idHIswGPjo5weHiAydQn89jc3MSgP6r1eBrkDUCdmXuAo6MeFosFZrOZB8XKJZb7c2RT\r\n73Y7HA5rt++zADwINZ1Og5xSJm/duoVOp4PBYBDi7UoGLIAg+34Mvc4ejUZIkgT7+/stcEr2M9ch\r\nMof7/T7G43HIZsxswr1eD1VVBcaiZBq25rMBymqFqixhKodiVQGucY/P80aHkc3JsBNyjOW7XHfi\r\n9V2CbPH6z/WecQ25Lkig2RiDXq93TDattYG5yZiyMgOw1Ce9btoKQ8G+JttSApbtfcXDBybI/SZ1\r\nhjEmuIQrpcLhBxntYZ+hai8K3ay/XE+6nQ4unDuHp0wH08rg3PYW9Ju3cOXCWbx18yYGmcJGJ4dW\r\nKXqdLp767DM4nMzwjT/7c1wdnsEcBl/+wnUMB5tIVIlunuL69Sfwt9/+CZ5+5hr+7O+/C1suUGUb\r\n2N46h83BBqb9PQw6I9y+dYCZGqBQBp1Pyd+gDHEdv337Nl566SV8+9vfxs2bN/Hmm2+Gfdy1a9ew\r\nv7+PNE2xvb2Nt956C2ma4rXXXsN0OsWNGzewsbGB0WiEjY0NvPrqq/jJT34S1hhrLf7iL/4Cjz76\r\nKG7cuIHt7W383u/9HqbTKS5fvozBYBDGDPjVj8sk9+ZyLhpjcOfOHfzoRz/CeDzGG2+8Aa01Xn75\r\nZfz1X/81Ll26hOFwiO985ztYLBZ45ZVXACBkN7fW4stf/jK++c1v4rOf/Sz+8i//Ev1+Hzdv3sTV\r\nq1dx8+ZN7O3theRKX/3qV5EkCf7wD/8QZ86cwTe/+U08++yzv5bg6mn5GYoCKjh08gy5UdBzhdz0\r\n0ddjXL/wDM6Od3Bp+CgOlkd44tl/D4Xy68TVRx7Djd3buHb2Ku5O7uPlx34Le+oukjdy5HOFW/N7\r\n+PKlf4Ddd+/it574Am7cfR/ducJnz30G270zyJYJnn/sGt6/9x46iwGevfwsyq7ChfMb+ONv/59Q\r\nMHBaYfXxT/AbXhz2lMEZl8AlKapCobp8Fuf+3S/h4H/5Bvb2D7D573wZRZ4hHXoGpbIKiXOeXJP+\r\nctdrkhe63W44sNzf3wcAjEajFmaSJEmLbMEY8dLbQ9oKMf7Cek7LL7akMZMhZlvJTe+6wg1WPKjB\r\n7U+AiRIk5PeSOcjv2qyGhi4v28GN99FkP2RPBYDVaomyWqKv+sg7g7D55YYaNeNPax1cW1m3BHli\r\nBs9JRQpxLMiyf+TztcFRbsjbDBPWTcYOv29YfwSCyMrKsLm5hcuXr2A83gxMoNlsFu5XlhWSpIQP\r\ntO8BN2MKb7Qq1CBCHoCT1WpZuyWROeEzsQK5j41TVTBo2JbSqGW/00CURg8VRJqmgAO0ToMhSEPI\r\nWr+hLIom2zSNAclaUFkT4419HNif9eaN7mRkUvR6vRB8viiKkDDl4OAAs9ks9J1SCoPBoBW7ii8Z\r\nM1HK77q/OZbyPb5OPh9lkyyHdYYbAcWY7SDrlOCLBDqaPrbBOKURHhuoBArp/iuBD7apqiqslk1A\r\neV6fpimytBOARmMMSmNgrYNKFXSaoijmAcj0cuqzkZWlB4p8fLAESjXu4VKfONvEvJSMNzJu6fZL\r\ndhJBNRnLkrKa52nNblX14uXBMWsrOGfCy7PTGvBUxtGU7sPUB5JxE+tCMkmBhm0ENMxEaVw1yTIa\r\n5o5MWMPxi5NmSLCBukW6wzLr6WpVYjabYbnsh+v7/Q1orZCmXgcoVcK5AtaW9elcCsBAa++6qxST\r\n9TSGKnWc788Kq1UR9XkDXEqdS30QHxpxY8HTQfmMcn7IOSiBItn/ct7Jucp7U845FjzlZB/PZ0ux\r\nVuj6Gi83fv5JPWDrvrDhFbM0jSkBNEGTe/0UaTZCr5+GA4nJdA+r1dzLXL5RA82oWXIJOp0MvV6n\r\nllNTu9bThbTCYjFDVflYk2e2L9X944HMTqcXgHTfB67F2iRrL00zZFkHZbls9X8MsG5tbbWYqzLB\r\nFOVXZsHm2uN1fxHGmGPuZcavUR7Q64h9imf7ez2kYa3DZDKt533jbt7MQ+8o+lHrfewaG8tn7Pkg\r\nZY+MW/YFZYjyRr3A/2NgWupZqSOkHoFLg34DEPScBMqlHqBOkrrlYSkStGM/E8iUczcG68N3ullL\r\nZT8ZY/D+zVv4n//5/4svffElaDfAPNP489d+gp5JAZfiyCk8WpZInENVlLWsp/j8F5/HflUArkC1\r\nXKHoOdyZHuB/+9o3cWHrLOx0jt969nkUyxnevnOIV9/6EaZ79/HclUcwvnAR/9fNv8fZnTPIKW6f\r\nonA/yANHAnsExsfjMV544QXcvn0bo9EIvV4P9+7dw87OTtDFOzs76PV6eOqpp/CDH/wAb731Fowx\r\nOHv2bDjY3draCjFan376aWRZhrfffhvvv/8+8jwP+6nxePxrY6RJ0C8G969du4avfOUreOedd1BV\r\nVTikAIAf/ehHAVhlOA0AYV/F2KnWWjz11FP4+te/jldeeQVFUeDmzZuYTqd45JFHsFp5NvyNGzcw\r\nGo1w4cIFjEYjPPfcc7/ywOppeQDFAanNUNglXFYBSmGWzPG9/e9hNZviqXNPwqUWP/rwh/jtq1/B\r\nRO3hjbffQF4Br8/exHPnn8UjZy7i6HCJn+y/h27SwZnNDdy0BxgMx8jTFP3eGMuFxWJRwjgFlXRQ\r\nVgaq28HKVTio7uDHH3wf/9EX/xP8zdt/j9v2PrqDFKtVib7t/bJ76OEuDjhjfLJKAFh1M2w4wIz6\r\n2P6P/xH0/QMc/LP/FsunL+P8P/kq3KXLqJxCqgCtFMzHVP+LLtyLrFYr5HmOW7du4d1338XVq1eD\r\nLWyMQafTwWq1wu7uLqbTKQ4ODrCxsYGzZ89iPB4Hm0PGAATapKd4f/LrssY8bCX56iu//QfxphBo\r\nQBS5kZKFG9XKNjGf4k0m0D4RjDfOfI+BDQlu0AiON+b83XI+q+P8dOvNIjO8ZkiSDD6+XJPh0IE+\r\n6nWShCw59twnATfxZ+uMnXV9EfebfEmjybu+AdLN1xvXngkmQTtdM+O0ykM/+5hzA4zHG/VrXBvW\r\nzAbHzJmMZZZAJ04E+0/R6/XR6/XhnKuBHwIOSd1njFXm+w8qaT07x4wvuQGngStjUCnXnuwSoADa\r\nbuWxgtBao1Mbi7JIsIOFTBaebB8eHmJ3d7f1Ojw8DAkYhsNhyIo6Ho+xtbWFra0tjMfjEIB8nTzG\r\nbZFgNllbfC6lFDY2hkERkkHFk5V1jFTWEQxD21CxeT/ZBwRV6G7HdksmDtuzbp7LOHLrlDLjxEnA\r\nkN855wLAzmeI26iVC/JFEM3LnL9XAwj5GIdJkgY5TJIU1njgGiEjtI8p6d14K+R5VgPbOry8TvDs\r\nPrrSS3mVzxgYrcJgl2wgGvcy6YqUhxjsk/fRWgdWi6xf6hsp73EblVKtsAK8LsRgzBvdEM8tAtrO\r\neZBktSpCHEVjLJwDytKEmGS8/3FQrWHLST3AayhfUl9KQMIYC5951kFmVZYv6kLqRcYItNbV49nu\r\nY9kGzhX5PV+U62MHCqo5oInXLwns8LnYlwSwvHupCxs9OT7xuiDvFc915yzSJEO320Ov10eiU1Sl\r\nQSmygnt3bT8H+OJcSBKNPM+QZSmU8q70ZVmgKFZYLOaYz2cY9MfhGWSWXgKdfDFDLAG5Rp7bh378\r\nm2xRzo91BzJkGrI+6inqqn6/H8A/MrLpUiz7XmvVmt/+WX3/z+czlGURDhj8ONuWrFC+KG9SBvO8\r\nE3QOPwdUkFWO8UmHOpx/8v9YTuXv471TrG+lbGutkSZ5Syblfol9LWWec5S65O133vxneADlD/7g\r\nD1IA/9mDqItzcm9vLxgU1JGS+VyWZQBZLly4sHb+A3XMIOcwGvYwzBwGm1184coj2ECB3/rcdQwH\r\nHVzqpbi0uYF+v4s+CmzmFb7y/HMY9nKME4VMZzjX03js/A6yTg99ZXF+nCNNFC6f28ZGr4OdjS42\r\nc4fLOyM899knUEz38dhmhheefQrQyad22uK43blzB/1+H9euXcPW1hbOnz+P69evYzQaQSmFa9eu\r\n4eLFizh37hwODw/x+uuv4+rVq3j55Zfx5JNPwjmH4XCIK1euYG9vD2fPnsXLL7+Mzc1NXLp0CZcu\r\nXcK5c+ews+NZ38888wxGoxH29vZw+fJlXLx4EdZabG56hsq6fc+vWonbT72T5zkuXLiA8XiMPM9x\r\n8eJFXL58Gdvb29jZ2cHjjz+Ozc1NPPnkk3juuedw5coVdLtdbGxs4Pz583jsscfCtWfPnsWVK1fw\r\nxBNP4NKlS5hMJrh+/TquX7+OM2fO4Pr16/jwww/xyCOP4JlnnkFRFGHfua6Np+U3qCigsBP81dvf\r\nwmt3f4KkV6CbOehKY382wRQTHM2P8PRT1/DtN7+DylY4mByg6lnMJlNUaYXvvf8D6DPA4eoAP37v\r\nJ/juzddgXQnVS/Hcxc9jv7yPn958F1s7WzgsJjio9nHgDnG0muDO3bvIzud4/94HeHrz8/jTu/8C\r\n+/YWxofbyLIE/9Yzv4ftztYvu5ce3qKAUpWAczBZiuV8hUGusXz/PajvvYnDGx/g6NpT6Dx2GVsX\r\nHoHudaASB6t9xl8f2Opff5E2NNDsXSaTCSaTCc6dOwcAeP3113Hnzh045/DTn/4Uu7u7Hh+qD6bO\r\nnz+Pd955B3fu3EFVVdjc3Ax7E5LAYuxlHRZzUvlNBgrX2e2fpKj/5r/6z/3WNzKM1oFTMQBgrcXK\r\ntE/GTzJuYhBRAg/xb+X/MaNQtgcAyuUEm5ub2NraDvE2yPDK8xymks+TQKsEaZoHZpKuszVKw3vd\r\nZuYkkFKe2McGnmSuyI23LOuCbsv7MHj5SQZunm60GGPc8EvXKbp/kdHWYhbkVQAt8jzHxsYGhsMh\r\nqqrCdDpFt9ttMXMkuGGtxWzZdveL+4mZymQ8OQkOVssmYL0Et2KwQRrsLUOzTthAeeP17JM44cNi\r\nscDBwQHu37+Po6OjAJTQFW4wGASQTLIvaNgDTfbFmK0hDTVpwMWsC/nq9ho3G+dccOFSSqHT6bSy\r\nkcZZIJVSUMhawKp0++XzS6OQLqfebbv9DOvAWmb1jQEOFiYMIThA912Ox3A4DIZ/rE+cc0iVafUN\r\nmVwEQQlgyXnXAndqlp4EJvjszrlWPDIeZqxWq8CiWi6XLSaX7LuYJUl5bkDKNDA0pVs0mRFMpCJ1\r\ng5RF51wrGzdlkcxUOecksCiNYJn9U85tviSgTFZirNM5ztRFdMHsdDrY3NwMbp8yZACvXxWzY/0l\r\nx3c6nR7Tf3K+VHVyHgI//X6/lRlW6jW57vDV6RyPOSgLNy+xXqIs8TCAzy77jZuSuMQ6KX6mmGUp\r\n9UHcDspkrB94rTGmlcVaZuoFgMXctvSzjBVJeaObIOOWkoVXVRXObF8KwBv7XSkVdMRsNgs6ScoH\r\ns1OfOdMkB5AgOeUsPnioqgqz2QxHR0dYLBahHgKPlDvK++7ubqv9lPcQA7G+lu7AEiSy1uLg4CDo\r\nL+ow9pXWGqONdliJeI2nO/W6/Ues6+M9Ek+5WVcM8DnngoxLNxm56SXrkYcwvE+Yy0aHmJ9SV1H3\r\nTKfTVrvj+fmN//tfPpDdsnOuC2DxKesIbNvlcok33ngDADAej1v7JM7PNE0xmUywWq1CnLS4sN+N\r\ntUCSBPKdsg7GAFnaJA9yCSB9MXwOX0A7+NAiysE4wOkEFfxxRAogcQ5wFiUSaOV/r1UdB9QBNT7+\r\nqcE/jqNkdQMIbvpy38p17q/+6q8wnU7xO7/zO9jc3DxWh9Sv/C7WtfGeNW7Drwszbd3zcC8iE55w\r\nTWDfMHkWfyttCF4v+4yFv5e/k/eS161bh07Lb05xcFiZOf73d/45/od/9d9jiQMMkgxlYeEyhaVZ\r\nQJVNzEmgSaJAVtbKrTDIRnDGokiWcD2HYlWgX/aRFl243IeSSOpYvEr7UD1KKVjj0FuO8eTlK/ji\r\n9gv44x/9Ee5luxibbTxz6Wn8F7/7X2Mb537JvfQQF+fgjIFLUpSFw0otMZzs4fZ/90dwKoH6D19B\r\n3hmgNAYbW1vo9HoANFKngdLH3Eb+cTf5tE08TnIiZhDstXpf9u677+L27du4du0a5vM5fvjDH+Li\r\nxYtYLpfY3t7GmTNncOPGDRRFgevXr4dQB9///vfxyiuvtGxpxu79tDpunf3Nz3+dS/Ci/BlLChxH\r\nWOPT6HUAHEu8OeZLGqryHpKFEb+v23yzcOGN78N4QJPJEYyp0Ov1A1tlsVjA2QRJktUuiI0R7Y0U\r\nh06mjtUp7y+fdR0guG7jI+uSz8y+i/sirl8Ksfxu3eS01rvzekNLI8typKlDVRkURYl+fxDYfNLV\r\nkQbvYNBpGXc0xGiQSxBYgk+NLDTPvK6PgIZVJo1D3jOrA/lDAc5Y2MrAGgNoB+UA49oJGIKhXf+/\r\nP5kEthNj50kD0DmHg4MD3L17F4eHh8GY7na7OHv2bM0abWJadTqd1sa33++H55AssAZsaxiAZCPJ\r\nTbivC4BPbQFPQnChX/b392sQoxPuNZ/PQ0wnGT9OjkUAGkyb+bQOhGZfyHGi4czYfjQoKdMEtCgv\r\njOtF1zwa6QSvCIQppUL7adASXCWgZYwJ31snZEprgCBo/X0S6SXKEZSnOWVZLyg/tlEmv5jP5y0m\r\nnJQTYwwODg5ac0ICMAQuKK9S/rlocbNOV3CtZSbnLGR7Znv4zrGhW78ELNg/MtYfQRIClHwfDAat\r\n+SyBZI6zUio8u0zswucmCCYXX4JMjNexsbER4l2yL/M8R2UWSBKNNG0DL6y/1+u29AXN63r4wMRB\r\nZbmqYwoWsLaCd1llsiINpdKabdUG3aTru+zXk9autu6yISESr4lZWnJuxbqc81wCqrxnzCI9Cfxb\r\nxySMD9lYf57n2NrawsbGRhOXtM6qO5/PA1jFbO5cB2VMyG63G+J+lmWJg4ODsKlbLpcYj8dB/xO0\r\nI7hEcL8oihDPCmj0KWWCa74xphVHkCxgHjLJZDcE76fTaQCAGbtTApuz2SxkEmabOD8IMPJ5nXPY\r\n3t5uzV+uc5T3NGu8HGJ5cs4FsPEkgFAa9LHel/KzTjalXEnwRX4eyx7lhH+byjMRvct9s8YmiU+i\r\ns7ExDvNShjyIwemHoXAcpPG6WCxawK7sV/YFD/hiLwFZb6oTgGuvNVBaQyfK/10Dg3AKzsJ/Do8I\r\nmspApxpQDgoWidJw1r8DgIKFqfy6mDvB+jZAkvjEXKawSLPkU7v9sn8kKEcAGcAxHdLv9/HVr341\r\n/J4yKOsgaMX6JCjIeST7lJ9/1H7vV7nEBiT3QgRJ4/6S/S91PftWek+xDl4rx4H9SC8KoBlPgt2/\r\nLiDrafnZi3IK3aKPf/rkv49/eOkr6KYaaQGgAtK8D2sMyqwJD8GDNkmGSHLAroAUKSpVwWYlnHJI\r\nyxyZybCA3+tR57IuCyDRHoQaDbdQVRa/+9Q/QWeYIHMJNrCN3qILnHr+nlicUiiTFJkBjAI6yyUm\r\nX/v/4DZyXPxP/ylu7xeYuAWGGxvIekNYp+BXDwWV/fKB/0C2qPcNaZoGdvje3h7OnDmDfr+PnZ0d\r\n3L59G3t7exgOh1gul3j77bdx+fJlzGYzXLhwAXfu3MHFixdb+yEZRurnLb9JgN+DKGls7ADtTuSC\r\nxcGXgJbWGla32TxAmxkhFzYAxza0EjyMT9XlZnodGAZ4BkBZli0QIkl6gc2iVQKlfAZaX0/jZmVt\r\nCV2uz/ArDcqTDD957bo+5MZAGg6yvgBkAMf6lvVJphcLNwNKKVR2uXZTTEOLhj3bQWOSxla/r1qB\r\n+Gm4y1hxrFeyaPhe2TUTTQmjx1StthlnUdSZeKuqwijrhmdiP3ATStZW3NdSvjazzZZr2tHREebz\r\neXiX8d2yLMPm5mYwPMl2iQ0rOYaSmcNNGQ1prTXmyxXgRB9oT9EOSi3RsMbAAf4krX5Wpb3LfK/X\r\nrZNy+Iyfk8kCN29+gPv370MphfPnz2NjYwObm5vodjswpkmuorVGKZJFS1AoBpwJIPA56YLHbIqS\r\nBSh/y/klgSX+nosB5UsCVEmSBENbgnEEyFiYjZfxAtk/BJ5j/SHHAQA6uhOACimzfBaypMhg5Pjx\r\nxednW+UYy+dk/3IeS/BMtodywRikEiyX/ct6JLhI8JUgpGRdcn5y3KgvCB7KzySQKJ+X/Uq2Atkh\r\nbItsG9uzWq1CLEMmNiHwy/6T4KkcQxrkUreQhbha+Zh43W6TjZk6gfOdrMmYbSmZKpLhJkH7dQDL\r\nuu/X6X6pXzgGcR0SXI2ToFB/ERyOQUfZLo4P+53ywnGnfEpAhABJVVUYDrPQd5yn8hSV405gjIAa\r\nmanFaq/V90VRtJiXGxsboX+LOmvqZDKpY0Musbe3F5iiBPgJWvNZjTGYzWaYzWYBnGTCkel0GkA5\r\nPoNPWjJFlmU+4UsN7vGdzEUyX2UMSMYC5Bhyfsnx5D0AIMubAyUa65LFKXWPXK+lPpJyFMs/Adh4\r\njyQ309wHsX2sSzJKOZ7xGpXotDVv2SYC/ex/ziW29WEr1HuSod3r9XD79m0opYJeZX+laRrW+ccf\r\nf/wYayCep0qp+oxR4f9n782aJDmudLHP3SMiMyuz9uqlekN3o0ECFLcZYWZ4SV7alUY2l6b7MGaS\r\nxvSkH6BfMHqQjXH0JpPGTKYHPV2bOzLT9jCLTBqKMl0bbiI5AAmSAkAMgO4G0Y1udNe+ZeUaEe56\r\n8Pg8TnhlNUg2SCxsb0ur7MzIWNyPHz/n8++cA1NVhEcJp+Arz7uKyWdqHZokBqZyvKqzQDkAsCjz\r\nykYyDkma+gMUAOfZgsqo8D5JtKcBvg8OCfuJ61Jsk8rnpT6RrEC5pkpASoJeAMJ3EiAEEN5TPmOb\r\n9qPcpMzIdUXOv1o2aqZFTBCoWe1Fg4Udb8zG55bn4Hlpg37U+/ZJe7zm4GDbUziV4kL3ChQc0Mqh\r\nnIKFhVEpDJjColI1rYrR7AClHHI3RdpJoVCxU2G9njIKyik47WV/dWGleW3nYJ2F6zgYZ1AmU8yv\r\nXkYJi8JZdFyrpks/abNbte89UUAnAUajKUafuY7umWX0YeD6U6yuLGChtQBYD/uhYqOXzqFwJdrq\r\ngy/6w/WAuWadc+h2u3juueeQ53nIFcvjZETN5cuXQ85Y2kdsvw7gL17TnrRmM//yj/79rz1q4ZZG\r\nBhc2aURa1MUKYgMXmL0w8nMivrOaNGRmGTZsWtUOeFHUbC8yujxjRAOOocY+kT8d4dwWDacLaIbO\r\nhd2PGY6+fJ5ZRlgM/sXgpryW7FvJHJnFGJDPn09P5lqSTqgcP+mUklEGlTc+I4tD7jbG4K18lZbZ\r\nuJovrTw7z2hv+NqyRJHnKPICzlpopZCYxB+vPQ3IwcE6b4VrowGlkLVaUFpXxwClLZEXBab5FOPJ\r\nBOOpTybf7/dxdHRUVcY8xNHRUSiWQZbflStXcOXKFayuroZnjHPS0ekOYeOC6RWPvXM+3EdXRj+c\r\n9UCftXC2BJxFWeRw1iJNEhitxHe+T+a6nSpPpQdPtra28OabN/Hzn7+iUAFQAAAgAElEQVSN7e3t\r\nCpQqA6uGiew5xbRYECSodxrgziblUcoFv6MzHYf3sK8YTs6CKLwu31OOKJusXhmD391uJ7D4oBRM\r\nksAkCdIsQ5plPoTKmCoEgXICWOfgABRFHe7Mewfq8FyGTRPYkMnj4zkX6zYJ3MWyH883GU7H++F8\r\nkgAYv5dgg2wxwE1QRrLpZs1F2fcSBJVOIPteAhx04CQ4HH8PIPQf74fnzDKCcT4naKzftZYyxfvw\r\nDFkvs/W8Y7+WpU88T7BoFuOKzy+Bnxjc5toidWw8bpJ5KfUowUw5XvE5pGPGvo/DbuUzSR3C88n5\r\nMAukJ6BKOSFQR+MqSdqNOS+vJ3f+eW8Ef4O8mFbYCOH5JUNcOv5yXeIcZ2EeybrlmhnLkJxzsWEm\r\n1zj2gwxllX0rNxv4GxnSLnWY1F+xgai1xvHgKACJ8f3IqAX53HK9lPkH43kJoFEoiU32I4FayhGf\r\nX8oOx0LOc17DiJx/Ug/Peklgkse/8cZrf473oT1uzj8+m1yPWLmWKTrIWD08PMTh4SG01rh06RKu\r\nX78+Uzc0bdqKga84tg7KGDil4OBfOhzpq3N79nHlPXvenz9OGQ8Yquq80KjKmnkbBSWUruwZ5T+z\r\nykKrX525NQssmuXYSABLRlzwcykDPB5oFtSLbX0Jhkl9KI/9qINT8RrPNst2ivtM9ofcBJC6jq/Y\r\nlort6VmvWXb/k/Zb1pSCQgJTKpgcMEpBKw1X6RbrAO08Y1mpumiSl0VUjpnzOsipAPo55eATrwOo\r\n8hQrhSodCwtU+N8pp6GUg1EeQDTOIHEGFhUr9Yl4nt68+4rUORR2Ct3tIL1wEXZ+EUkJLCzPodPr\r\ngnkj/NyvhkYBieYg/mYbbaDwGJUO4uY/7R9u+tLnkdGD3LjlBifJBDEe9Dj67eOyDv0qLbaxf9GW\r\nxIuW3MmOWW+xYaq1Zy/NYjbMYvzJxY+fkVIvDW0eI3ct4/PUTDpuuSqUhcNoOAGchlYJjK4BHDo0\r\niUkr49lBqebzSmGU15PXlX01y/iK+0JW3pPGFw16Ogfxgs/P4sknz+OdkdoQLAqf1ByoDXzPQJLh\r\ndj45ulI+EfwknwSwi6GGbBKdlw6jBCyK8mTOwrjPSgCuLKGcg1GqEZp1dHQEZwEWxVRGVza1ArTC\r\nYDQMjhzBBwngPNzcDA4rgJAo/syZM4HpJxlQspKlcz4nWQy2TiaT4Eyura2FZyHjhhVanXNY6FVh\r\nwcrvzilVjT1qA9w5izL3oUHtLA3MKluW2NryDg3H4Ph4iPF4irL0snPnzjvI8xKdThdZ1g6MMi97\r\nDolpTv5ZRqqUhxioksxbHi/zw3EM5TxiXwPA0dFRA2yR84fgKsdOFjNh0ZRxNR6hkIkALADPlgzz\r\nCcLhqe4rn0ygtQ+x8nPCv6cI9XpzFbvNV5nNc4eimKIsW1W47lzDcZYsKo6TnJdxmB/DJ5XylXsZ\r\nvs3w2E6n03DWJYsLQOhjyaSknpWgnNSZvFelVAB4ZG5D/i3LEkdHRw1AyNo6D1uWZRgMRlDKgIxo\r\nnss5hyxzAWgqCouiGMNXsi0xmfh8jMsrl0Nf0ODkfJIAqtyIkHrTG5m1zvFAjj+/tRbt9ly1Bij4\r\nquAA8U+lEBhc0qmVIbenGRWxHpZjGuvrWQ4g22AwmHlN9jXDitkvcp7JNVaOOd8TBJWpKuK8ezYx\r\nKEuDJNFIEh10V55PMJn4isJ+08BVxpdnImVZAsDi7Nm1EG4L2Op3PvS6KKaYTEYByKfBl6YGzqUw\r\nRiFJlgIjkOy+druNXq8XKqOHjSbURY0ODg5QlmWDec2+4jFlWeLw8DDoG86leiNEVTrT57VjWLKX\r\n3WymQy71pHMOw/64Aph9VICfBzJVRROIo4xJx/402eGzxPZC/L3cZIsNOQm8xp9Rb/giXjK3sncc\r\ntFZVOLh/zwIwSvliMHIj4cPS2H9MF/HMM8/gxo0bjbnMeSRtN/lbftZwBki8swCcQqIUlEUF/PlN\r\niOqHQLXWeFqg5o0BAHR1PJzXQ35zSkFDQ8E25jebq5znx+0XaY/Rtmhcx83OScfvYhmS9ylB8lnH\r\n8x7i68067qPYpA6OQToJvAI1AzjuQ7nO0o6eJQ/xGgjUYyX/Sv/hSfttbw4TNUTbZICuwsytQmIN\r\nElVtRIhpaLSBKysSBar5rHzxSFcBUbAKgIHyGYmgAJ/OwAGpycJnUKraALGYqAkSdFC6HEkJaKSw\r\naYECFi2kv7nu+Kg156CcBYzzKSjyBAZel7RSg6meYArvBysTsFjAOs9Wf8z14/1qWtd5jKWfxgq+\r\nctNUblJJPEfWHojXrMdpse0lP3/STrZELlR01KTxMBwOA2OAnwEIn03HPsfzrN184OTuZAz+sdol\r\nF0k6tlKIeG8xAAcARU6A0sAkGlonsBY4Ph5iOBzjzJmkWtCrnVDj4fTSFrDTEioCF6UBIJ9LPl8M\r\noMj7kcY6wQH5fLFTEoMLcV9JpgH7xFpbswVQh2HEICkA5IV3hpQGjBYOTFUls7ewGkCEAJAK9gCZ\r\nMdJRkMww5U4yN1V1fYVqF8NVi4qpkyKHUAbtqxlJN8Q5B2ctUCmFwlqMxuNQYYjgG8GUNE0b1XmZ\r\nL4phd1Ku+WwcR4LPBKB4f3Nzc8EIo3KizBOkMcbA2TonYZok8BWm64IVc51WSLxeJgk67SUUzqGo\r\nwMCV5TW8/M7LuHPnDrrdLlZXV/HUlWtYXTmDoijwxhtvYDgY4+2f38XW5g4WFhawtraGlZUVzM3N\r\nnQgt4bhQFthPUi6k/DEvA4uMzM35Ss/D4TDkq4sdCCnjZK5w7kq2AWWe4yMZY0dHRyjLEqtry4BJ\r\nkJgEaQSKWGu9o+XpoZ41KUASOIc0M1DaobTVPNIOSVrfY7uTIUk10sxgMklFoYoRxpMhgJoZI5lF\r\nBOnG4/EJh1Lu2Hc6nfBM8b1bazEYDEIYZKfTaYCLYQ4Jp58yy3kmXwRfJ5NJuFcyL8O81s0Qxl6v\r\nFxxnWeiFfWh0ilamoFVSswtDBV6L8XjaOKeCQT4t0S8G0HqEe+/4EOf5+Xkf+jmXNAqw9Pt9GG2Q\r\nJjUwJsPMY70m14E0TdHv9z1DW/QXdxIlUCmbZAHG6wZQAzvyvDEDlvpCjk+89nCMpL6Va6AELOQY\r\n2UiO5TrH4/hbsmdj1iC/H1fgp4OfC0nagXN1nsWtrS3P0CsmIX9ekmqYpI25bhvHR2UI811YWAjs\r\naYb1cm3gvXFcmJsqy9IQpntwcIDBYBDy/DGXqiyywbGgbt3b22sUuiFTVoI70+kUR0dHGI/HjXMx\r\nLJrjNhqNwr1SVhgiSbAUqFmsRVFgaXElzK3RcILJOG/kB2XYM5scW/+aNj6XoB7HiMdL3Sn1CcFO\r\nKQNSd0pZkWuvf98EjR0coCxMoqCNQdvVYcctm57KIv6gm+xXoA4v5byUIJN0GN4LWAnnBeCsAHFU\r\nM3euc85jfVWmJWcttDE+Z1+VEtBA2IdaA9ohUfVaV420d7ydj2IwurJlrUXyPvhv0j5nP9B+Jxgc\r\nA8aU1Vm2uGRAx3pSyq506GaBjLPs149qk7o83viRfSgBPrnBLOcvG4+Rm4f8XAL+/L4hlx8TgPVJ\r\ne5ymoF3X28MamMAXIso8VocSDlrqUAXopElW0U7DKQenSlh41qBhnlhXg9ulLGBD/WYtoDXarg0U\r\nCibJ4BKgLByUS9ByBh9IOdqPSPP+sAamBVxi4DKPp7YsoMoCrWoz1hMcFHJXbXRVfjps6UHDD6hJ\r\nf5mRTHL9BGoAkHazZJ8CfsN6Op02onmAk6lMHuf+JFs9Xu+etGZL6PQDNcWTbDTpOHExk4ugZOvx\r\nrwSiYqCPTX7OuPDYgKBwnZYPo/5LR4GVy3xIhzF+wez3+4G1AKDKDTdt5JGK70ku5tKwmvVMsQEd\r\nA3nSMJffSVAJmJ0PhL+XrDT+rnag8hPX9ucgc6hsfB+PR543WSfS2aPRF1+z0V8zJpl8FnlfcQgK\r\ngODc0lEju48hX++8886JEIk0TUPeMTqBsYMZmGSquQDGMjQLOOXxQF0xi0Y2gT0Cs8tLyxiNRhgO\r\nhwGYkE7u0dFRyG81Ho+xs7ODw8NDGGNw7do1vPpPr+Pu3bvY3d2Fcw4LCwvodrtYW1tDr9fDwcFB\r\nACj39vYwnU6Doy5Dc+mMx5VLpdxJgJCyRXBLMlCdcyFHmGThAGjMIwKcEmykA8I+jHeBZEihtRb9\r\no4EYO8F+sw62bIbNWVWFYlpXhUqXaHUzWFuiKJogej3nPMslTRMwJAJwmE5LWFsX1pC5CqV8xAw2\r\nPguPizcAyGwkKNrr9cJv5JygTMtqWmwSoI51LMeD40pGJvszTtNA5iV367hwcxw67QUkSQpjkjD/\r\nPJvOh8l1OnON+ytLX0iA93R42MdkkqMsHYrCCnZWG2naAlAD6DUQ7zdrtFYoLZ9PB/aSv56/FqBQ\r\nlhPkeYHRaBzYZAwzWFjo4rTGOSrHJ57nsq9i/SuNm1mOYNxmnWeWUxw72NJxlMAedT/7TzqKHEOt\r\neS00xoUhIp1Ou5oPFtPpBNbWldS9/LTCfQAI8gp4GT06OmrMdVnsxxtznjne6XRObMi0Wq3AjGXl\r\nboYdk6kqUytwLkhd3m63G3kAjTEhb6GsPs48ruPxOFS6n06n4Vl5T5wfNYDpwvzwz1miLMeYTKbV\r\nLncR2IbxxpFzDkla20axDcG+mCWX/MvzSZa1XGMlKCjX/1o+XEVO80U/avFmoSkfxkX72hiyGz1L\r\n/cPS4nU67ovYoI9DX+UcmtWcAkpTAsaH5WpoQHs7qT5Iwzofnqt0Vfq3mqrWORhrq01UB6iKoV2W\r\n0ErDoKJsOOfZGnT2Sp/iRKvHc9wkCCT7R+bgi/UM149Z9hi/51omN7zjY3gc5VHOAx77UQf+5LPI\r\n+Sw3XOSxs+RR9jePk2uI3NiR15TjJ+1seU/vFzvmSftoNuWAzAKAgzN5FetmgBKAttC6BJRfy73a\r\nUhWUBPiQUw0yLEI4r1WA9scapf3vhP1OuwGODELnmdLGf6Y0YFLAOYMSj1/N/OPcHBxyBdg0Rds6\r\nH+Hka0zBpgngFJSr06Wk1QgryzX6g+1d6i+ph+QmbbxhG68JSqlgj3FjWFY2l7/9VRvBR9qY78c5\r\nP84tkcCONLjoYEhHhN/xs6IoAjItAR2gUhwA3AyHCEr5nVfnGgtdbHDEgBnPy7/+t9Jh5GCzWqTG\r\nwcEBFhcXA+OODm5gMlbsBhm6BdTsNrkDLR19CeLx/xKkYiOzLzZSeb64UpvsPzY6erJPwrihmetJ\r\n3iPQjNmfBcSylHvcgnMjwrLjeyrL8oRRO+tcVBzSsOJxDE+kc8nwMTpvBG/n5ubQ6XTQbvvQVyaX\r\nj42kWQyd+G/MZIxlTPaXLIQhDWk6kLIKJtlEZFmNRp4VOxgMsL+/Hxzpvb09AJ7RMhyOwv0cHx9j\r\nZ2cn5Klrt9u4fv16cF6HwyFarVZwdJnzSus6OTfQBP1k3jMph3yG8XjaYDT6cSegyIpfUzjHUGuy\r\nCXzovNZ135BVFhdnkI4K74EOPwtySLaa1AVSN3GOyo0Ca5tMOylvNZMLSJIUSZLC56DzjrHWZXC6\r\n/T0wb6IGYKA1kOd1gRXpdPO+ZuX0JIDmXDPnZ8zokYC+BG3lfJFhwJL1w+eXbCwCGpKByfwaZHcQ\r\nzKbcpkmnoUuzLIXWzQq28rpNnayxu7uLLMsC4LKwsIBerxeqFLNgzHg8DmMtd+hQNvO0zZJR6j/Z\r\n/3yeTqfdOJbvqQLTNDvhZMlXktQgq2T+Sqd3ls7gOSnTsXPIFjM7gWaFWBZikLpd9jF1gQSPJfjU\r\nanVO3Kt8vl6v1wCMuNkX2I+mHeYmN1J4bQLHLMjBPIzdbjeE9aapn+MEY7nJIYvWELyTDDweT+bx\r\ncDgMbFFuoPB87BNZlCfP8wAEEgwk45v6kGsK2bYE8Qhc1iEoGkAC5yzKssB0mou5PAlFSrghQnko\r\nyxImyaCUAVADJLUx6zCdnkyLQRn17WRBMWnPSJmS4y7B4dgukH+p/+Wc47WkbfBBN9lv0vaMdcEs\r\nkFDKPo+N3zsABimc36+EqnKNltY7wz7rH+o0ExAAm6muF6Z4FdGgNIL54zz/BiG6otpocg4IMce/\r\nOsNhlm0y633cZzHgdNo5T/s+PkYCAx/nJvtUgnny/0DdD9Tz0gmWOv+9riXXhvjc/Pw0kJfHxva9\r\nvI9ZxwFN0Hymf4BT/IYn7TfblIMzA1hkcMhgnIN1QGEA64AUCRMSVM1FGeIcPK9ZAaUH8qzRGAJo\r\nOcCUCiF9eMM/lGdRIaqrcWv1XuOTdkpTTiELawGAKtWND7mu5rVIf6NUteaEfq3Cfx/RHrUOPG6T\r\nmxyA1xvvvvsuDg8Psb6+jpWVFSRJgul0Gggb3CiaTCbB3mKaorIssbu7i62tLbRaLVy8eDFs6NJ2\r\nZOSP1jpEWEk/jMUGlVL4+c9/jsFggOeeew5FUeDtt9+G1hrnzp3D4uJiOI56mvdKf5Kt3+9jOp3i\r\n7NmzDZv/NL37UW5JbBDGxlW73Q6JvOmgE72dTCbI5nzCfm8woaEslFKADfsPdecpD/4pXVf15DX5\r\nl8b7rHAEef52BYBIp1A6gR5gGfp8a5XDwWtMJhOkuk6QL3fymkZ8E1yQIXqsXBODfpJ+Gjvr8eJM\r\nY32WUSFBR/nid4k5yWyLW/x5c/Gvw3BjtlF8XX4m+ypJk8b3EoDjc8lniseR4zEraT0AfOITnwgO\r\nm8wVSOYIQ9MkqMS+n7UDy7EBEMAWee9xP0tHU44zAZvD4TAoKoLLBDCHwyGyLMPBwQHeeecdTKdT\r\nLCwsYDAYYGdnB/fv38e1G89Cax3CN0ejEcbjMY6Pj7G/v4/19fUAprDvJbtQgmGxQxSDlexXCTql\r\nqQfxrC3EvHGBpdXtduHz5RUhRD+er+y7eJfFWtsYVynXvI/hcBjAKDkPCGIx9FgCgJQHpRTK6TBc\r\nSzrEsSzJOStDe6cTL+M+DFAWxEkDc00yUgmkcU7Pzc01nleGkJdliePj45AzTYYVExyljPE3cY4/\r\nht1zQYzTDVAGCLhykZWywuenLiXgaa0NOetk//B+lVI4PDw8oT8keDTNywD2cE0gUMdQZzn2xpjG\r\nMTLFQ6x3OJaUNVkJmCCrczb0J/uUTYJosY6q/9aLuwQm+RupQ6RBJR1BKdMxWME5GDtuco7G98Vr\r\nxutCvDbHGz1yfPi33W435JL9TEaaTYY1sy1NYJIM2jikmc/tkmY6sO6GwyHyYoyj/hSj8TGSJMGF\r\n9UsnZC9N08D4oyyWZRkKa1BPMB0A5wT7guHpzrkGiEwwkkAyN/GYY3Bubi6E2GutMT8/j36/3yge\r\nQlBe9iONQbl2Mdcl57nUT1zD/bhww4EyAhD4cQ6BzSjHRAlvSW5ezVor489Okw0pC1JWpb0jbRGu\r\nAR+WFtsF8jnlWgbUzyfn1Wm2D1sDuOFYoa7uG9thMbOruqugE/xvJEBUgTO2vg6PqYGVx2daxjqJ\r\nffS4jsl79d9vQ4ttKLl2xMdQTujgSmakJBHwN2zyt7/suMX3E9+bvAa/j8HIOIIn/n7WeU77/5P2\r\nm20KPRiqEaXgNJAD0DBQJerE6TOaUw6ldvDxLxbOFUigkXDNMAqYkcLpSXv/Wo1/iLnkTjKBeWys\r\nN95r/p0EZU/WGnice6fvkCQJDg4OsL29jWvXroWcz3fv3sWFCxewubmJwWCAS5cu4fDwEJPJBN1u\r\nF/v7+wCAixcvYn5+Hru7u+j1ekiSBLdv38YzzzyDW7duYWFhIfhCx8fHyPMca2trWFtbw9bWVijw\r\ndfPmTeR5jmeeeQYPHjzAlStXYIzB22+/DQCBXbi7u4uNjQ2srq4GfzNJEly4cAHvvPMOAGB9fR0P\r\nHz7E/fv3ce7cOQDA4eEhlpeXsbKy8qGyld6vltBol44IHzTP88CukjvIEmR7L6GKjzkNZIwNmRiR\r\nndVioGaW8etcnXdvfn4+OAlkA0yqsD/rHJLIsHLOgeUyrKsq0fovA6hJg5FOAQ0B9hWdCvaXZFb4\r\nU/mwHDoN1QXAsF3vRFjIeV+Hep3MORgrDHmtWQCMddMT/XeasymvQWcjZpvQsKBxQ+ajPEY6KjIs\r\nlIADw3rLssTS0lIjj4r8bcz2kuM+y+GfBSDI4wl+yPskq4XgHhUdncjFuSwUdxiNRtja3MTu7m5g\r\n2NBAhLUwSsGVJabjMUaDAYwxeO2115BlGRYWFrC0tBRALTq1DJ+jY8t+pUNrTCoAYgCoc1TyM6U0\r\nAM/UqmXAQikbmFmy8IQEqGXY2mAwwOHhIay1gf1DNhllopmPyo8tgdpZYbUScCZgIIEEhgUSFCOI\r\nxb7JVV3MR4LYfH6G9cbPRQr7UBVBF5TlVIQVevCPBnOWZYH9RBAwrswaA9hKKQwGgwB0xSHhSZIE\r\nOec9cM5QTvn80umQ8132NZlOZE2R+Ue9LkMt2RTq/i2KEsZYZJlCkqTVPOyiLOtiO7xeUZSVDPn7\r\nIjOZ9zIe+xDdtbW1BljPUFDOIZOQpaWCHnSudrwHg+MGKOOcRVHkGA4HAIB+Pw05B+fn56uwxjrn\r\nW5qeZMPFuo5y09CLMzY+pE5li/NvxU2OmdStPKcEquW143POuj8/rrOdf/7XWleNZRb0nwSyi7xf\r\nzYUssOONATqdFO12glbLg7WdToqjIxNAwNGo7wHedi/k6/Obaym6XYM0zVAUBTqduQY72ueSHIdw\r\nWrluSNYeWYCSLSvBaa49fJ6joyOMRqPA6qOOoH6jzMmcmwRH440Bzhlr67QIBKwl0ClZUHJ8mmG5\r\nJ8N1ZoHFlI1ZwCR/E9tIUm4kWy6+llx/TwM1PuhG/Q8gAChsMVgpdaEMe31Uk/NdbuLGzKd4rsvr\r\nU89JQDUeM7b43NxAfJwW2zQx8DuLZTbLLnzSTjb2aww6S1uSx8mNZbm5w+M43sDJcHXKhfycOu9R\r\n8sFjY4aenBO8H7kmSXYwrw+czFUrv4/nwGmy9aT9BpsD2lODcWZRuikS+PQEuQKUzqBzB5vMZpkD\r\n3mV1NoEzGlYDRmuoyRQJfP5xnZgn4N+HsM3S9486jrbIrAKM78e90E46PDzE4uJi8Il3d3cDUHf7\r\n9u0QDbS9vY3V1VVsbGyg3W5jZWUFt2/fxmc/+1kkSYLNzU3Mz89jdXU1FL68ffs2AODGjRsAmjmf\r\neR8PHjzA8fExer0e3n33XXS73YC1jEYjnDt3DufPn0dRFNjY2ECaprh58yaM8em27t+/j6WlJTjn\r\nsLOzg4cPH2JlZQVnzpwJoOF4PMatW7fwhS984WOZdiGR+TviRQ44GUbKFhufbLFzFANO0gCNzysN\r\n1diRj40YCqItmqF48pxKKSTaoMgLjAqfMLPTaqOVZtBQgK3ziLHFrCE6tfGzxACGNAYk+yxeXCX9\r\n1Dt2Jw1yCXJJR4QTm8ZC/LzyOmKAT/0O8FWh4rGRfR6zjKTjMcuZ5jPy+NMKmoTfpAYKConR0ImB\r\nSRNk7fqZ8zwHtM+Zo7T2AAHqvGtziRHgRVFV2bVwZQFlq/us/gHOFz3RFasn8ecEnxOAlYAqHHq9\r\nbg2wOItJPsXewT52dnYwmUzwiacuhdC93d1d3L17F1tbW7DWJ+u/evUqrly5guvXr2N/fx8bGxvY\r\n2dnBYDDA+fPnsTcYY67XxfLqCtbX17G0tNQAiAgCKqMxLfIAfqWtDMpoTCY5nAMKW7OWqqgkXzlZ\r\n9L2SwLby31P+CAyQlk1ZI3hVO/2joBj7/T6WlpYa1W0ZZhcXdJCLE9k57XY7hAozAX/MrqX8E0SV\r\nLKI8z2GqsDkZRiv1h6wGKzcWwqLoyopBVgNXzX5w4T4YGjkajYJsM9w7nu8EA1mchkwiApUSdKbe\r\nIfjCe5e79FLfSPaU1BcSfGV/9Pv9cH45t0MIo0sbBToIvHB3jNR6MroIgHJ8e/PtE/kfGaLOkGeC\r\nQwR3CD6maQqHaQCepf6I9Z00ZORzSnC1KArMzc01wlc5/uy7WBfKsLhYT8k+nsXKknoz3ohoAP/R\r\nuU4DImNwd5YTJu8dQACM4zU3Xnfk+JNJqrVGXuZQzqG0CnnhmuC8VlDaodVOoU0PrXaKuW4b/X4f\r\ng8EAk8kEe3t7YX4QgGVeQOdcqICdZZkAAIswXltbW2GzhwxnygZDhcuyxHA4DI5sq9VCr9dDmqbY\r\n399vhLEPh8NwfVltW/aFrLg9Ho8bOT9lagKCfuwva20IYSGQX1qZXqC5sUe5jcdarqkxM0/aRzxH\r\nLLexrTDrFTv3sb0iZfLD0ChDABo5ewhwxPJ8GhB2evN1fSVgUm+QeR1flC7kzpXAngRxCTzHYInc\r\nBIptUB73OI4Yr1FvgjwB9d7vFs8pthhMk31OfSE32KQTLs81y85ni/2m0+4PaK4l0pZxzjUKRMWA\r\nOZtkL58Gcs66zycA4AfXnAPGmQZSoKMyZOMSDsYnc1VAghIq6TzqDDAoMIaDRYLMaqjCAKlGuzUH\r\n2ALFk2K9v7bmgCbjDz4IGzjJ+Ju1fvxC1xDzNNYLv+y5Zp3bWhvSCC0tLeHevXtI0xQbGxu4dOkS\r\nVlZWwvHr6+tQSgUf0TlPwlpcXMT+/n7QLwsLC3juuecAAC+//DIAhFyAy8vL2Nvbw3g8xtLSEl55\r\n5RV8+ctfbugv+kiyUFy73cbBwUFYw+/fvx/uW2uNpaUlPHjwAFtbWyEVF8/JTciHDx+GPNb0pz5M\r\n9tL70RIZTgHUggP4ASd4EzOv6HDLFhtocZtlwElHlp/NctL4PhZg60nMPrmpVoE8F2jtSYLSeeP9\r\neDgAtMIk92wgDyr5+Jwiz2GrMDS+lFKw5cl8iEAVtBMZ2/F9S6GZxdiJ85nx586FKyBJfJ4aH55r\r\nkCRppSCYfP8kAzPus9PGgd/HzJTYuJFNygqfMTZwZoHJsaPMcW+1ahaSUxpGaSS6riZkKraacoAV\r\nYXlJapClnm3nSosyL1CKQgg0tpNWC9Y5lEUJaAedZlAOKIsqj/gP1TkAACAASURBVJsrasNcKVhn\r\nYWkMAZiOJwF8MsZgMhpje3ML9+/fR57nGBzsYnl5GYuLiz7EfDzG8XDoWU3Hx3jq2jW05+bQ7XYB\r\nrTEYjTDX60EZg/MXLuBKx7NRl5aWsLS0FGjQBFGyLEOn5RmRo7zAdDqBhmestNIMtigBWyK3JVxZ\r\nwpismldVwZe8fj4ldi44igy9BICDg4OQc7DT6aDX6wXgj7kQqGRHo1FQnMvLyw0GIMfZOYejo6PA\r\n+JJVOmVhCrLyCJDR6S6KIjiEBH/4PcGDTnYyV6YEMmWRFip46fzOzWVIEg/yGaMqxp0NYKRSZQX6\r\n1WHnvj+TCvyrq3nPmne8fwIHEuQkG0Tu1PH/MRgqn69merrAMOD1OR9lyDf7mqAHZTlJEpSFCs/F\r\nBZIvAiPU/6ygHYfuxoAE752bFO12GwsLCwEYkvIwzX3IHF/G1CHTzjl0u70TwIY/jrt8xyG8Wuak\r\nY+VYAovsixikJYNXGhASBI7Bm1k6UoKRUv/EaxUBJ7mOSqBfOltynZW6VsqWUs3iTDEoyfMRvJL6\r\nuM7Bkodzj8ejIC+cb55lrmBMC0liYIxGkhi0Wp4JO+h7GRwMBo3Q9ZpFWIO3rPY2Ho8DwDwaDQMT\r\ncTKZYG5uLrDxJKAvQXm5nrCvqTMBBCCbhh77jOCzrLYtGasyZI/jx80Hsgw5b2kXzXWzRth5DBQQ\r\nLJI6Qs7fWeBcDOLNWt9nAYl8H+sjee5ZcvJhadJmku8lq5E2I8dcMqxmMW9l8xG5Dsb4OZ0XXrcr\r\nIOhiqcsAhPkA1E6JtG0oMzHALMFDPsd73d97NRkaL0FHPv/jOHmn2ey/bW2WjpdzdRbTNAZl5byn\r\nwynlRdrHMm3Le92XHOu4SeeV8kHdKAFAymuSnCy0GNvtci2Ln/lJ+802B6DICrhyjLTUyF0Cm7ZQ\r\naEBhikz7Anmn/96hVCWMTpAoBSgL1VEY2xwqyzCyBXrFx4vZ9GFqnDlKVRiFIyFldjj/id//AnMv\r\n9r3e78a1lxF5LHR57do1dDo+9/TZs2eR5zn6/T6uXLkSyBILCwtYWFhAq9XCmTNn4JwLfxlZdfbs\r\nWQyHQywvL4c+4Xk7nU7wkafTKZaXl3F87KOCLl++jN3d3bDxceXKFdy9exeHh4e4fPkyLl68iOFw\r\n2IhUu3jxYjieNQUODg4AAOfPnw/pnJaXlz+2ei+RABTQDPmkk0/Wi2SuMPwlt1FBCddMNKowI/QX\r\nCMfEzLJwjKqTFcvPYkPWKQWljS9j7pqTSSmfqwdGQ6sEuS1xeNzHpMgDy8CVMpTEwqKEqxI5J8bA\r\nFpWznCRITLNggbUW0Kcb5rwHWS2VizIdGmkYxMbGLANenldrHZKAxs8ujVD5e/kdAJS2PHHPdLzi\r\nULPYSSWzJVY20nmKWU6x89OucpqVZVmDbs7BlSVsWaIlHIGycroAoJhOMamSiUrnjfelyR4oS2il\r\n0KqcbMdQ1MpZ0JSx6v4TreEEwHK4v18z0LRGPpnAKAUNYNDvY2vjPi5cuICsUmq9+Xl0ez3cu3cP\r\n+/v7uHP3LsZVzoNWq4Xe/DyerZKSnj17FvPzy41wzNQYT8l3Dk5rFNMpCrJRnQuhw6PK2e50WpiW\r\nOVyZQwNQroTRBg4W03wKOAetExiloFyzerd3qIFOp4s0ddjc3MadO+9gd3cXq6uruHjxYpXf4Qj9\r\nfh+tVgtLS0uw1qLfH2BraycYnQR2CHZL55p9yTGXDDc6cRLM4gJDJ10615xPDI2lcc2XDBGWRjmf\r\nmU47wQ2TAC2toU0LaaYwnRTVdacoChsKEHS7CkkyV214aDhHw7pmDc+ac2TOETCQedfIimLBAgm6\r\nUP8xp6XclInZ2Dyf1DGcBywSw7nI7+sCSHk1Bia8AIeiyGFtiaOjw8BK9Oy/BEli0K7YuTu7G421\r\ng7pAgioEA2UeST6vddMTjD6pa+oqrDXwI9MrZFm7CsWfYDAYodWaoCy9zLNgjT8Xc3m56kW5qNca\r\n9j3BntOYDlLfyRDPWTo71tux/iM4LM8rz0mW5KxdRxpj8nqSYVSDpXX/1uCe37jLsrQRZitlmHOV\r\nz0HQlveSpimUsxgOhxgOhxgMjlGWBfJ8Gsa31+sF+TJGwxhucjlMpwrTqQm5XQaDAdrtdpAPubnI\r\nucH+GwwGwfjj+NGRZoES9nHQrSKVAuWKaQxk38tx8zlPm+Cj1C/j8RRJYmEt4JxCksSFy/xGnf+r\r\nYC1Qli5szmTZSdthFhAYHxOP7Szdwzkvf/9hBP3YOI6UaVnJnCAG1wuOMe2U8Xh8YjNatnj+AXWx\r\nMToAXK+oC+LQTZ0YFLYMG2aeSe9QOgsFBVfWaV7kZhPl6nGZfwRuYlsNqAtO/KrtwywXv4kmQT85\r\n5/ieay/lg2NMkE+CegDCWiftEqCOLOK8pM1K3XZa41jP2gCiLMQ+hsxVLW0vzh0+B/VIDC7GuuPj\r\nFvb2kWrOYekYQNaGyzQmSqEEi0gYlGoKnbQeeYrStZBawFkHW3E6zLiAGeboZG0U+sNTAOrj2JwC\r\nQu0npaBRr0eO5CXMBvF+Uf0s7Qe290Ovc21mnmVjDM6fPx8KdNAHHI/HOHfuHM6dOwelFC5cuBDO\r\nQf20vr4O51yIzqCvd+nSpRPRjCQN/PznP8fTTz/d0L83btwI115bW4MsLnLjxo3w3OfOnTuxib+4\r\nuIhOp4PFxcVwLRb5KMsSy8vL4dxK+VDiR9kXH8WWALVTIMEnAGFRogMH1EwwLn4KNehH4K8hqIrh\r\ndfVx2sGDVkrB6pMhpNIYp/MzC5yUTn38Oz7DiA52lfg8z3OMJxNAKZTWYmV+JSzQwcifTOGKEiUB\r\nAmOgrL/vwKZRGk4rHAx8Ndp221edpIPabrcbVFMu8lyMgwGHZjU26Rxaa1HkFs4pwGk4q1AWPlQZ\r\nUNAqgVJ1pVdOUDmOscCGENbqb7tzEtCkgd1qtQKjgw5x/FKowTlpQPEljVRprPIex6LaLT/XVel5\r\nKOffJwl01kK3MxdCvPI8RzHN0e3MnZAB9gNZHgpAqwIZx+NxAD4O9w9CXihZDdoGgNBgrt3BgwcP\r\nsL+/H5hpWZbh7NoZwDqYzGA4meKtO3dx0D/G/Pw80nYHq2fPIW13MM4LDCdTLK+dwbnz57G4uIjJ\r\nZIJ+vw9rLc6fPRfGXTJlrLFItM+tMCxtnY+qyjVVFAUK65AmGlo5dNpZYAakaYJOO8Pxse/TZqEH\r\nIEm8Eh+PBtDpPLa3d3FwcIC9vT20Wh0sL6+iKCzeeec+rl69im53HlnWrijR3qleWFjC3FwPSnlm\r\nFxmCnJMMiyPwI0E9AglSLviZdPgAYH9/P2w+SJkiqDgYDUIIMeWbz5ymKYbDYQMQiXe6rZv6sIlE\r\nQWtf6VZpCyiLonAoR6VwCvNw3zVzsS5WIRlrQZar60q9SRYgCyBIwIvsOgJ0klVGOZHyTsYpCyDw\r\nPqSsEniUBRkIkmStmqEFACbxoZ4mUSiKDMfHx4C1yAsHh7IG3ZIEQIKlcqlxjzGjCfAOE3N2cGeP\r\n4eKddjeM22QygdEjTPSkZjCoZOb5Ab+GFIUPu2a+UKV8qO/29jZ2d3exvr5+gl0p16ckqVMoMKcI\r\nm1x7YoOMchwzn9mXHEPJLJQtXmvl9zHwGANAskkwIKxVQj7IOgLq4hM8tw+rTWFMgna7A6Vq0JgO\r\nIqAa502SFHNzGlnmwd/unM9reXSUVjlfJjjq5xiOjr2+ant5S5MW0jRD22Vod/wrz3PMzc2Fyuic\r\nD/1+P8xbgoCyIrkE4ghsyw0n6gLnHI6PjxssYG5azs3NQWtfaGk0GqHf74f8fhKEj8PGZbgJ13Nn\r\nHSbjHPm0bFQzluGrTlfrk2luhLRaSSPtAcdUFgSKbRopL5JdFjsK1DVSxmKb6cPS+AwyDH88HuPO\r\nnTvo9/sYjUbBFqX8pmkaNqnI0HxUUzqBFs/uoKC0grPWBwW7molLOQBqECRNPGhMAJzHl2UJOEAL\r\n24sgC+efzDX8qzau4/FGA+U/BolPPL/QYU9as8m5w/9Lu4EbC5LhKfUAx1va9pIlT8YoHWjqF/oH\r\n8px8P8vxl+sG9RR1myywxHvl+iDXFGm/81r8jdwklJstnBNP2gfTHICjuQzz/SlGb92GSiymkwIa\r\nLSQamOgc7j2qiWs4TGyJzDlkymDUnUPnqacwzhWSKeDSJ+P7a20VBlKUpU9XVpYeM/E70HC6XtNn\r\nAU2Pmn+x7pebAu/LrVfrc7vdDn4GNyOk/cEICaZ0kpFX0n/j+irt5/F43LBfqdeSJMHly5fDust1\r\nPmYvE6CTJKB4Y4TsfUahMJd77Q8kwb/kb+Umz8epJVTu0niWhoV8YLkAhQXJOi/U1gX2FJTPF6S1\r\nhhPVFKu0ax79rhhrZXT+eMGL7+NRBs6seydKDSA4vPJ5h2YYQtAANJxMACF3EZkCdCKZVJ9gBSsK\r\nS/bI8fExWlU14vg5KJhFTiZfeAqQJQBolCW/5w6yLwLiF+961zcGveTOogRY4h0EAhl0+GSVQ7mb\r\nPOsZ/GTXJ4wGOS5yt1AaEnKM+Z0ES+Lf8Hg6ojLMjr/ls7BZa9HpdELetclkgsPDQ7RaLUynU9y+\r\nfRsHBwd46qmncP36dXS7XQyHw5AnLcs8+PH666/j4OAgjDVz3BljMN9b9ODKtMTuzj6Gg7HfUVhY\r\nxtkz5zEcDj3leX4JRqcYDT1Y0esuhB0POX4EV/jcLAjBY2QOMQ/K+90OVrJmDjqCmdypoQzL3GnT\r\n6RQ/v/l6PT9KhzTJUKa1ITg4HgZZMsag02432AzdXhbYazJkEkAj1JBjyHHg+emox8A1zy9D9SRT\r\nloCPNf7cw+EwnIOAAOWPYIFkdxHcyFoiRMZopJmCtQbOGSiFACoRHPJzvA71M0aFEFkJoFMeZU42\r\n6iLOM44/+5cgo2TddjqdcDz7Ucq9vJ7UYQRSqAv4e/k7AIGZZa1kAQBpamCMQlnS0bXI8wnK0u+8\r\nyfBt+byS2Sj1BHUR5XYymQQmKYGdLGsH3cd+abUE81ewQdl/aSaBDBo9Xo8CDnt7+0jTNADEzjWL\r\nblirGueXup9gLN9LnRSDMVIPyTU13liLz8UiB6c1zo/T2nQ6CX3KTRtet55jWXVfZIZwLZxC6yZY\r\nSDnlGiZtAgmy0TgdDXMYo5AkGmnqc4T6sclRljn29nZCwSJW4fV9XIAVxpMkCaG+EkBnblHKDQ1G\r\nqSelXPNzuT6HdXaGXPK6QL1RRqBwOPThyNzBnmUf+flaNNa18XiCNB0jy0aB+RivuwxxB9BIG8DG\r\n+SqNTgkYyvOdxgaSG5py/Ki7P2yN90bjvCgKbG9voyxLfP7znw/rOvuda93du3fx4MEDXL169ZHn\r\nL8oSh4fHSBLPUBgMRxgMBiEs/N2H93BubQWdTifktOz1eo31aWtzB8YYLC8vY3DswWr/e250K+zt\r\nH6IsS6ysrGA4HOP4+BjLy8tI0wTqMav9FkWBd999F8PhEOfOncPy8nJjbZ4FYM16zxbb0h9GufhN\r\nNQmqyXXr+PgY29vbyPMcq6urOHfuXNAjWZZhf38fR0dHuHz5cmAUS/3S7/exu7uLS5cuBWf38PAQ\r\nc1UqGNpqBL4fBf7JEHPqhN3d3ZA39cqVK9jY2Aj5pDudDjY2NjAcDrG+vo6dnR0cHx/j4sWL6PV6\r\neOuttzCdTrGy4gkQlKfhcAjnHLrdbrDr34uZ+KT9uptDmu9j8D/+T9j8b/47LE+OMdIafRgYncCB\r\nleZP+7mDLizGHYOkAEzZws7vfBKf+u//HOqZ51A+Kfbxa21yLhulMRwPcHx0BFf64ondXhe5YN5y\r\nzktiwKNabF/yHO9X4/3IPMyxzSt1Bf1Q6jX6oNL/j9cr/qUPJP1W2kFy05ObKDyPBOi4GRIzr5Mk\r\nCdFcJINJUJL3y007mQ7k49bMH/0H/97XpLCdFpowE/iDB/mcR/PCX6V9/jSfMNwXGlDaO9f+vQ6f\r\nl+4k80G2mBVIAZK7qrPuVb4kICcraTrnkOikYVjHRnin0wnXk6FngaVVFZwgoCHDjyic0miPHQhr\r\na/ZHDNJJ4KzBeBHjJA2BGKiVY3oaqJtmsw0O9pWc2LOcWIXm9eNjpfM7a4zJ4IqdSwn+yueVjpB3\r\nVFsoS4uytNDaIMtaMCZBUZQYjyew1mEymcKYBFnWqpwuhePjATY2NrGx8TAUbjg+Psbh4SH29/ex\r\nv7+Pvb09DAYD3Lx5E/1+v6omasKORJZlKJ3FysoKer1eACxWVnzxDuYCXFlZCdWI+GwhtGgyPQGU\r\nSBCCrDeOswSvsyyDdUUA+Og0SeCJ4CEZLLJq8WQywetv3sZ0OhFzV4W4fKV8ZWnnLLTRaLVb6M33\r\nMD/fw/zCPObne1heXgwhzRJ0kPcpc9dxQSOAQ6dOhnLKceYCwPuVYbtpmqLTSoOzznFhn1Fu+Fvn\r\nXGDUsChFlpExoT0L13mg3RiC+wm0USjyEtNpjqKod8UZBks5l3qEz8rQsVm77ZzXBCfJjpSgEhlK\r\ncn5KEDzPfcVXY5LA4vJsYF/pOU0zAArW+lDDPPdVfX2+UAfnLGLAi3NQbmZIHSgXfK0TMAcf5xav\r\n5c/v94SsdeHz6TTHeDzB8fEAStX5iiQ7Qeo/yYjlddkfSp/cAJJ9JQuCyN9xrFppBq00tPJGdGJS\r\nJManeDDaIE1SKGjAKTjrqhfCS+mT4VHSkZTGTjzulKMYIJf64VEGHJ1+uV5wDkn9KZ9Z6hjJCrNV\r\nwSBjdMUwAsqyQFkWsFaCogSRdLUZ0A1zKkl00BdFkSPPp5hMCuR5EXS0c3VV7jRNoVUN1Mn5Lzev\r\nOEfkOsnfy+NkIY/YBpBjLnUU9SrlndenfUHjUq6jcv4ZU4ePO+efT57f6zuyvjgWNvSpl1Pum6rw\r\n4pzR2oS5w++U0hVoq6vrPjpcUMpUzAz99re//een/viXaF/72tcSAP/l45yDc4X98vDhQ6ytraHX\r\n652wz2j7Oeewt7eH9fPrsLYM8BrtRmMMirLErXv38Zff/RHeenCIhU4X/+er/4T/99YDbOzvYHGu\r\ni7/61o8x39PoZXP41//wQzwcD/DM+YtoZy1YNcILtzfxv73wMl55sAM1TfD1H/0MP7rzNubSRVxd\r\nXYLVwM/ubeHffOunuLWxC2UU3nxnF9998x28ufUQn3/qGpR6vITh/X4ff/u3f4s0TdHr9cJG1+Hh\r\nYai4mCQJtre3Q/7M3d1d7O/vwzmHb3zjGyGJ+fb2NrIs85EFVZGcJ803uQZNJhN873vfww9+8AN8\r\n8pOfxGjkwfrj42NsbW2h0+ng6OgIWmtsbm4GNvF4PMbf//3fh/VzYWEB9+7dQ1EU+M53voO5OR+x\r\n0m63cf/+fZRlibfffhsvvvgibty4gXv37gV9dHx8jL/7u7/DlStXUJYlHjx4gMXFRTjn8MMf/hAv\r\nvfQSrl69in6/j2984xs4ODjAzZs3oZTCt771LUwmE9y8eRPf//73kWUZXnzxRczNzeHrX/86FhcX\r\nkWUZ/uIv/gK9Xg9nz57FX/3VX+HmzZt4/vnnnwB/H5KmoJCMgYP/+V+jePHHKOYz5N0ltH73y8jv\r\nvYrEGig7gbIFytyhVRZIdI5+6dBOOshHu0iRwKkWdNEHzBjpxi7m/tV/BJxfR6n0e/AGn7THaQoK\r\naWHgTO5z03cMWj9/E+OXfoz5p5/CYGEebdVCohIfZZgaOKNRwiFBAuOqsOFf9HqPwHJ+mRaz6Wu7\r\n35+bvoLMrc1N2pgpzQ0TnlMClBIvILgo8YNZpCB5LzGpiJ/H+AWv+yhMQ57j/QRQf11NMtR/mXYC\r\n7o/BIdlmdQSNMukASdYDjWvpiPBc77UzGV8zPua0nU75ubw36Vzx/4PBIITX0YmRjiZBPel4yJ35\r\ndK4dHAGJ1EunS/ZnDGKWZRP0i8ci7q/4O6LUMbjHYzgJpfHMfiIKLpFvySzi+U+7Lzrfv4jMyLGL\r\nkX/ZYsZCfH0qgvq5ioplUkJrwDkm555iPB7i7bcfQmuNixcv4vz588gyPjNw/fpVtNsZtre38eMf\r\n/xhJkuDs2bMhySerU45GI/R6PVy8eBFpmuLw8DD0kVIKFy9exOrqKnZ3dzGZTHD27NkQjklGHpWg\r\nVHxaaxjXrBAtWTcysTzHQoK+WmtAeSd1MBg0djec89WVCJzR0Y3DaldWVsL9EYSS84TgEytndrvd\r\n8Ex+LGpGn1woYhAndtwokwRRJcDDPmAoDfuObDYps9Bo5CLjbo4EQGSSdumU+7D8aXVtBV88Lank\r\ni055C+PxBM6OUZZ15U+CeoANICWvReAg1jfx3JPAKMeaQKUMd+R4M5RQjlOsez0gYGBtCl+pmIWB\r\n6vspyyQw+IpiGsaAqQoIxki5o+zIyroMgfPXhe9DGAAJZDg0oBpGQFFMURRMI6GDju12uw0gCEBg\r\nIciwAikfk+mg0Qd8UZ8RkGcfj8fjEOpvjEG36xP7qoqL7pyDEvljrXNwVUEpp7wBZp2DrTatDNQJ\r\nfRbrtVl6jvfJUD45P2pgyYRQXcpR3CSTNwaneE65mSDvVcrtrHW2Zuk1QW253i3Me6CdTOgkyWBM\r\nGsLd+v1RxW4rkOcTFEUXvV4vVGW25STcPxmhZPFyLsh7kKwbCfQT0KdsUheRzcLPyKIlU1cWEJHh\r\ntkniK5IPBoMTbH8ZPi6Z8nJOSqZqHJotwUyT1OGFMkSmBh9PVo9leLYH2k9PFB4bvVLuPmyNz03d\r\nyE1BVoPnOAFozG2ujz4Fjd9glrKa5zmUVrhy4QL+5F+cwb998XUc7W9jOhjjP/n9z+FbL76K1c8k\r\n+OS1yxgUGd7dPMLdrSPMrSzjzvYx1s9mOB70sbFzhH929RpMqrC5u4H/9A+/gP/jxz/G9nQL26NF\r\n7A138e7mJp67tILl1bN468Ed/Idf/ALGL02w3d+DMjnwPhQL5Drf6XTwjW98A1/60pfw3e9+F1pr\r\nHB4e4vOf/zxeffVVtNttfOpTn8ILL7yAS5cu4XOf+xzu3buHa9euYXNzEzdv3sRwOMTh4SG++tWv\r\n4syZMyccvd+2JvUb9ePCwgI+//nPhzXjL//yL/HHf/zH2NjYwN27d6GUwvz8PI6OjtButzGZTPAn\r\nf/InsNbi1q1bOHv2LDY2NnDv3j3cu3cP169fx3Q6xQsvvIALFy5gYWEB3//+99HtdnH+/Hns7Ozg\r\nBz/4AV555RV88YtfxO/+7u/63NF37mBzcxMvvvgiyrLEs88+i+effx7j8Tj4MTs7O7h+/Tq++MUv\r\n4q//+q+xubmJsiyxurqK5eVl9Pt9/OEf/iFefvllvPTSS2F+zc/P4/z587h16xauX7+OjY0NfO5z\r\nnwvriSQ8PGkfTHMApgaYUylc1sZ4ZLHymRvo/sf/Clv330LvD57H9Mwcirc3kXR7UMrCvfgaVv/F\r\n7wOtNtTrryF9/lmU946A//sf4AYHUAsdHMFiIWvDFRPAPRnfX1dzChh2HNrTFqbtCcrRBMu/+2Xg\r\n9iEGf/l3OPef/2cYry1heHSMdmJgnYIrgFQrJM76zVh8cDk3aTcw1FbqSJ97vhPsGjbJEORG1dHR\r\nUUiLQtIKiSm0gQAEX4N+XbwJzJzSMqXLh9Gu+TC3JN7VBpphTacxtmLDMgZoZqGq8vsABpUnP4sZ\r\nC9JglSjwSaP4JFo7C5SUzysLEiilghPMc5G+KoEX6dgXFfjQrXani6LAtAqvbLXbPr7fWjhUgA1B\r\nwqJAUZYAmjn65LPE9y+fg8flZYHSWb8roBWU0ZWDWgGWthnSBeUZLKpyOPLpGJ6xUIFRVVL22nEs\r\nGtcuSx8qJwHD+CVlZNZYxeM5S24kOi9/H8urzHNGxwpAACfeeustaK0xGo1weHgIpRS63S7m5+dx\r\n4cIF9Ho9pKnPV3V0dIS9vT1kWYaFhYVQzpxU4E6nE3ILEeiZlL5wx/r6OlZWVtDv9wOYJnOmxPIT\r\nO/v8G+9yMJE5nU0Z/qu1hlYFhsfHFWjhQzXm2m3P0CpLPHz33eCgdrtduMpxdtailaZ49tlnQ7XO\r\no6OjQLkmIHT58uUGqEgjmHLIeyIjjHnlTtynoF5L+R6NRo1wUDIIJTjC/8u5x5x5C1W1zcXFhRDK\r\nO5mMGwCKL2TRaciQ1gppmqAoGTZYwloFKAulKiagApLEM+ec9aAW9cVoNKrGxgRAqi3yirJaMdlJ\r\nBHM5Jwi68DsCtHzPft3d3Q06ibkp5fEE8AmgAU2gkNeUAApfBB8J/Eq9T4Ct7sO6AnXIuVk0dYO8\r\nPmWYYa3y3FJXHB4ehirIvV7Py28VVk85k2HSnP+8r7xohjay8TMaJQRXyR5lVdn9/d3GM8YbRhK0\r\nJLPLm+LcDEpP6Gmpz/i51G3y/LMAq9PY3LOAGwlu0njiNbihwL98FsmETNM2lNLVM3nWZlGU1Vya\r\nYmFhIehSjnue10CM0fXmF0FArqOe2XsQ5GY0GjUA7izLkJh20H2S6U79KueINAAJqjF0TobD0SC0\r\n1qLf758A72TxHTKCAYQ5zI0OANjc3Az9KwsQyQ0TOVZy84znpX6Q1cL5jMbU+XE5bhxDRhDIMY/X\r\nRa5FpwF8s8JzTpPXD7JRZiRIS+BByitf7HvKPzdd4jWH4PjhcIyf/uw13Lh0Ec88tYLv33qIvJgA\r\nmMLYCdwk9w6XSbC6vIylpRX88KUf4+mrV1DYYxSujb3cIrEWrayLV+9toDQp/t1PPodXX30TR6ND\r\nJLqHYjqFnQJddDEZKjikcKUBcgOYxwPXrLU4e/Ysnn/+eRjjQ+zpAHU6HXzuc5+DtRY3btyAMQb7\r\n+/v4zGc+g52dHZRliQsXLqDT6eDdd99FmqbY2NjA008/jc985jO/9cAfUPsgs0K9mJP06aefxvXr\r\n13Hr1i10Oh387Gc/w7PPPoter4evfOUr+OY3v4l+v4/FxUVcvnwZvV4PR0dHmEwm+NKXvoRz587h\r\ntddew6uvvoo//dM/xTe/+U20Wi2sra1hfn4eSik888wzvKCKNgAAIABJREFU2NzcxNbWFoqiQK/X\r\nw7lz50JO2j/6oz/CN7/5TTz//PNIkgTr6+u4cuVKYHFyTjz11FO4cuUKbt26hRdffBFra2uw1mJ/\r\nfz+k+/jCF74Ahqm32238zd/8DT772c82dJu0x5+0D64pAEOVoZjkyM7OI998gMHdm7CDPobFMZa7\r\nV3HcnWLu9z6NwWu3UCwvYe6rfwDzvbeQ/Ds3UEyHQDFBYguMsilaRYmVPIWxAEYp8vYTHfDrasoB\r\nrTxBocfABEjSZWjtsPTVLwH/1wR7/+vfwH7qMtpPXYS6uA6kC0imBqpQyBODEUrMfYDzj/YF/YXt\r\n7W0URYHLly/j/v376PV62N3dDSkGOp1O2By5ePEiVlZWMBgMcO/ePVy+fBmvv/46rLW4cOECyrLE\r\nw4cPYYzBU089hU6ng9u3b6MoCqytrWFlZQV37twBAHQ6HUwmE1y9ejWQOp5sSvxqzXz1X/7h1+KQ\r\nyhiYmfV3Fqgnv3sU+Ced8PIUEDH+vXT65GBL0FKen78lKCHpo9J4Lyb1zj8NRgn2EZWO7yUYqIkJ\r\nQAkddhrwZBTOAnp4T1rVhQxk38j3cd9IZyFJ66TgsRNBo1ieLz5nmurGeZkMk31E4EuyMxrOrAj7\r\n5XlliOOssY37Q76P73/WOThWsYEiHSI6d5ubm9jb28POzg42NzdDzhwCc71eL+RyabfbAQQjSEiH\r\nZHl5OeRR6fV6uHDhAs6cOYO008bK6grSLMN4MoF1FlmrBaU1pnkO61wIdYfy1ZX5ss4XkYkdG7nD\r\nsbKy0nAC6cTyOUejY+zu7oaqsOwzwLMEbt++jf39/RCuUhRFcMK11jh77jLSNINSGgwzm+vMYWVl\r\nFWura1heXkGr1UYra6GV+aT9CgplUaLIC0D7SlXaaJjEwCQe4EYFNI/GI+RFgcl0iqIsAKU8AK41\r\ntNEh0s06i6IskBcFrLPQxiDNUljnYJIEaZYhzTJoo+EAlNbCOotU1047wSyZrJX9wR0lOpIEMvNi\r\nXMkcE80DPrSOj2CgVRLCauU88DnJRg3gRTKHZQimBOCkrPPYWAcQ8JK5DuX52DqdzgmQieek3DxK\r\nJ8esrlgOec742Xi8BGTiDZrTmGvxNcKmSfW87E+tdQCD5b3KezZJ/byz1hrJuoqBRw9e1uMS60fZ\r\nrxJA4fixX+SzyWfleiCb7Gdrbfi97DepB+Nw5RgAlBtelPN4faQM8Vj2sT+2lk9Z3ZSpAuiQxs8W\r\nnsc2i0oAPiQ1SVK0Wm30eh2kaQKffmGC8XiM0WiE0WiE4XAIa+siWfL+JRgrc/dRVigvfB8/P/vf\r\nX6Np0/A4ubEQywBfcuNFMg+pZ7jux0A5wT5ZcIRjKee+32xopruI5WXWnJwlB7PmlwT8YvC5LEt8\r\n5zvf+VCE/dbzEeFe9/b2gg0j+57Hl6XPwzoej7G+vg5b+jVVAsGAZ4zfefAQf//TN5ApIDMpis48\r\nfvDyq/jUs9dwcf0C3tnu42JX4dq5FWxsbWLv3Tv44qefxRef/ySeunAWyhi89ObrmBZTPHfpAv7t\r\nC/+IOWXRnWT4559/DlevXYHpdPGPr9/EYHiAz964hlduvYX7e5u4dH4F1y5fgHGPR/2bTqf4yU9+\r\ngo2NjZCL8Cc/+QnKssSZM2ewurqK8+fP4x//8R8xGAzw/PPPY2dnBw8ePMC5c+dCzuN79+4Fx2l1\r\ndRVPP/10A3j/bW60C2WqoIODAwyHQ1y8eBH7+/s4f/48vv3tbwcGC6teXrp0CVtbW7hy5QparRbu\r\n37+Pft8XBLx69SpeeOGFEI796U9/Gvfu3cNzzz2HnZ0dXLt2DZcuXcKbb76J1dVVbGxsoCgKfOpT\r\nn8J0OsWdO3ewuLiIwWCAl19+GV/4whewtraG7e1tLC0t4caNG+h0OnjllVdw+/ZtrK+vY319Hd/7\r\n3vcCg3FzcxP379/HaDTC7/3e7+GnP/0ptra2AoD87LPP4tatW/jKV76C4XCIT3ziE08Avw9JUwCy\r\nskT+9f8H07duYZIpJDpD74t/AJcA3S//M+R2gmxpDseTIYyxUO8+RLa6gP7Nu5j8f6/CtJaw9vvP\r\nY//Nf0KytQtkbUz/5I+hn7oMhfKXCit90n655hQw1goaU6BMoK1BoSbIt9+Fe/oMOucXMP5f/gF7\r\nG7voXbqIdGUN01IhgYGyQGqMzzPzCzbpTzxOi6O5qBv7/T42NjaQZRnu3bsH53yk3LPPPgulFDY3\r\nN9HtdnHp0iVY63PX37t3LxQC0Vrjxo0beOutt+CcJ61cu3YNb775ZkgH9YlPfCKAgAcHB7h27Vpg\r\nVxdFgW63G9Z6Vi//bWy/6lir//a//q9cbDhKZy7u0FkO5CzQUBrgPCZ2YgAgFwI9y6iNmSpkpEin\r\n8TQDGcAJZp8MWVJKeWS9AgSyLEOv1wtsMKCu8iV/L5lJKkuCI8FQMjoHko4qQTHeV57naGXdRn9J\r\nh5jXZN/IweYzSCNXOowMWV1aqqtxSmZOAChSBKcbQCPkjs8hQ5rpIAbAE+mJ80sHdhajNH6W+N6k\r\noyXZc7Oc88Fgdtgf/3///n288sorIckyAHS7XSwvLwMAlpaWsLa2hm63i93dXbz11lvY29vD/Pw8\r\nzpw5gwsXLmB7exvz8/M4d85X5m232+j1er46USsL/SIZNpRNFp9g/8U5IzNtgmPIsDPKd1mWWFtb\r\nw9HREY6OjmCtDaGZdNZH4z62traCo8o8f+12G4eHh3jw4EFgq3S7XTjnQvW5hYUFfOK53wmOPne3\r\nycLIsgzz8/PhWWaxx5IEYQ5SroqiwGAwwHA4DAUAyGYjq0Y66bJfZHEGmfSV48ljyeDKjAuANWWJ\r\nc4vAn5RLCcZZazHNB8355Zp6K8s6cNYXoSiKGqTyIYxFYHqmadoImeWzjUajwFAhWBGDavJ6kqVG\r\n/cE+IfNUAjzGmEa1UMmS4lyNAeUY6JCACPuSenZhYWGmfuL6IIEYgq5kOlEXyjGRYBaAsGgTWOSz\r\nzs/PN5Kis394LRoA1jULFDWBqFo2+bwxSJtlJowdWV8ShJ0FsMiNiFmgjDyeLKTTwBmGTZ/mZElA\r\nRB7D93KDaRaj1APU3tii/iMg5gug1CkUOBYscjUcDtHtdhv3HMtPPp1Vzb02RJQqMZnkQRcMh0OM\r\nx9MwLonxBYO63W7YbJHrK2WGY855L8eV4b+cf9JmYQhxvCnFecdqbzJnr5xfsmCXDBvmfTFKYBYA\r\n7ZzD0dFRY82SwGCSJEizejNrFvgnGYVSrnks9Zn8rZwLsvqnZFdSP/zZn/3Z++LyOefaAB5dvebR\r\nv2/YctZavPHGG8iyDCsrK2EelGVdPZev8XiMT3/603ClhUUNeJJ5rbXGaDJGYS1K40PNl9sJ+lOH\r\nhcTBGY08L6FVhiRVOMoVlHNYMCmAKawbI7ddFBZQBkgTYDoqMclH0FkLywqwCWALhTJpoZxOMdfS\r\nmBQaeTFFr5XAASge2QO/WOPGHdfH0WgUNmvZP+wjpVSw61hVmzYli4QBdWXiWZsnvy1N2tBS59L+\r\npG1nrY9OoN0Zb4bxeK11WJdZOEMWAJRhagzdnZ+fDxvTDMflvVGesywLORo5T6QOoA3X6/WQJAmG\r\nwyHyPEev1wuswIWFhUBsGI1GjXWP9gBtRr7/OFa7/Gg1B5MPsPVf/BlG/8O/QdpuAbBIn/0Mhv0t\r\ntNavAMM+YB3c1gDjHrC8vQe3ehb55TUkr7wOd+1p5MeAuncTZXmE0eIiLv/9/w7zO58D8imARxcX\r\ne9IeozmHrHBwpoWBG2KicqwkKfa++x3Yr/8Q4xvPIf/nz6G3vIS5xRXorAPAwcABKoctCxj9i4+P\r\nxBp+8Vs8Ob+5fkgbJssy3L17F++88w6uX7+O27dvY3V1FWma4pOf/CTyPMdrr72GCxcu4OzZs0Gf\r\nvvHGG1haWsJgMECn08Hly5fxox/9CO12G8vLy7h06RJeeuml4OtcvnwZr7zyCi5evAjnfA7gs2fP\r\nwlpflOi5555Dv98PG7C/rU2SW36ZlkhAbpbhGQuQFIL4bwzMyM9i4EcutvL/8jqx0yadKBk6E4NC\r\nEhyUu8ZyJ5yvTtpGaQvkRYlpPsF4YqCNQlp442lxcRHaKRRFlVS8sCF+PctaGI4nmBYlXGmhoZB2\r\nEmiToMwLFNMcWZICdD6UhkaVjBL+/zQC+KxssRMhP28wd4o6VMyoCpis7kU5wJUWcA7K+ZIGgKcg\r\nwzoAPsSLRkrMkmL/xawh2Y/A7BBeNunIzXpJ1Fqef5YjPUtGk6TOmUVnwDkbnPuzZ89jfX0XWdYO\r\nedS01uj3j/Hw4UMUxRRnzpzB+fPn0e12cebMGZw5cwadTgdzc3NotVqhst7CwkJgzI1GI2xvb+PG\r\nJ57B/v4+pmNf5ZfhbmWew2iNrHKsi6JAWRSwZH+kKfT/z96bPNtxXOljX2bWdOf7RoAAQYIiRVGD\r\nSU1uSh22FT93qCP6F257402HF945wv+DF3KEvfXeK0d45egOr9ThUEdrgrpFqt0amhJEAhwkgCAx\r\nPeANd6wpM73IOlmn8l1QUosSIfMl4uLeV7duVVYOJ/N85zvnNMAtB1x5uxljcHx8jHv37vn4LVtb\r\nW9jZ2fEupkJKTKZTr2jeuXsX1loP2u01wpfqMDs5wfHxMaSUWCyXeOqZTzUMqxhJEqGuewyMdS6w\r\nWlcoyzYug1LCK8GxSiGshdEatdao4RaM5XzeAf+o3UxdQwKQvR5UHGPQ76MsS6waJa7Mc+iqgrAW\r\nEkASRZAM5FZCgOCFNI4BW/kYXnEce5dROkbsMwI8yVpE37ebcJI1AFjmNG/5ss4NWCmBJImglIW1\r\nXWYPpY7Psu5YA9Bh4PLEHlyecflG8oArcSTHaHF08TIqCKGQJBni2HqgRGsLgFwCXYZXpWzDAKsZ\r\nEFj5uc6VbwKjCUAM60n1slbAia0axrgkBdYauOD2Ev3+sAExK0hZ+LFIhTYXJK9JedXaZVBfLBYe\r\nbCdXYDKylGWJqm4zF3MwkwoBXwS60LyiLLLCWg9IE2jO4x2S67EQAm1CHGI9C+82zg1OvC70mYO7\r\n/Lv5fP5IgxqBg/x8buGz1p7Kdhsq8bytOYhE16uqEs6d2TbjRMC5ALu/j4+POoCpm/9togkbERuv\r\nbPqBGHAE/jpZPBqNkKY99HprrJY5lssl8jz32dd5PYntyY0mmwBUGqPWOqszuQITsKaUy+xKc51c\r\n0Km/vaxuWJGkyBvTxvSluDRpmnqFmxiMZVl6WcrjAXIgbjqd+vvT73h7bu9MAbjYnO7VTW6jdQlr\r\nAevievh+09r1TxR1PSP4/gdojWn8Ozr3w2AGfJiFj3GSBSQrqd0IuAIc0ELyl9Z/0YQsoTZujUoJ\r\nEtm4CUUJUAv0EsBYF4svQg9CGNTFGlmSQZgYZVVBKCfHEiWRGEAIi3KdI1VA2p8iqitoa1FLDZtE\r\nAArIforVOkfWUyikRRVFQJ1jQ4jt37kMh0P/vFJKb9AL5QXFQiRgkCefI/CZAGEeV/jjWrhxieYw\r\njT0h2li+cRxjtVp50J+M4zSv6G8ySpDx0lrnZUIkA+5RRMfJxZfvi3l8YzL00BrFs13SfOFhiwBn\r\nqHZGHrcn5DKTjCUUX4v2omSwovW/1+thvV5vTK54Vv44xUKgjMY49z/+DziMUlSwQFYjfaihhho6\r\nd2suYJDIHvq6QB6tIeUAVWmRff4F2GUNm/Wh6hcQqxhbL70AfPYzqOsIESJ8KEFJz8rmIgSKVCJX\r\nFdKlQQpg/ZOfYvn3r2Dy3/1XEJ99EelsgfW6xAAxYumS9kklYXWNRMb4KJ2y+fpA+s7u7i729/dx\r\ndHSEXq+Hhw8f4s0330SSJNjZ2cGNGzdwdHSEwWCAixcvejk5HA5x584dH8YgjmPcv3/fx+Pe3d31\r\n4brIGH3r1i2MRiMcHh5iOBx6BiHt787K714iWtSIKcNdUjhLJlSs+AaSK7FAV1EM3Z44IAicdoMN\r\nQUACReh+nHlA9w2VIw4UhcpS+FqtFlBKIcvcAjifn2C1WvjYU+v1km3GHRCidQUKph+Jpv61RrnO\r\nYWtndU1UhGQ48jG66rqGqWrYRsnI4gQiSVE3AeOJGUOLPD3DBzEvhRBIVRv00jQbDyUl+lmGrLHm\r\n1XUNJQRUs1Hg98qGPSSxgBSnsxoCYEq+hZLGn+ceWvrA95z5wV0ZaaMaxnujfqTn4yBgyNLk44M+\r\n07WSuM0OCSthjQCsBixgNDAcjLG3ew4nx3McH82wvb2NcxfO4fy5C9jZ3sPb71zzm6EsyzCdTtHv\r\n9z0AQBsn2mQROJqmqYu7M18giWKoXqNwGYthfwCdZliv10hjN64gLaKkZWnpqnZgrFJ+s0bx74i9\r\nQsxBa61nzZC1luLqzdZzz8oTQmA4mXor/+HBAQbjCZJe32/kNARU4thjvV4Pu7vbPhFCWVYALLKs\r\njTHnEi7oBvRKPFtguZSwVmO1WLr6CgeIzmYzr2THcYwyL3xMN2st8tUaxTpH1YA5wjrX1f3dPZRl\r\nicVigbIssV6uAGNRFSVGo5FnIC2XS1jtsrSmaYqyzGH0Avl6garUsMbFeZMiQpr0mvkQI4mdkl8W\r\nNXRtEUUxxqMMRbliQLSLe0Zjy71TEg1HwbfWwlgBrQWM0Th//nwnHhoAD8Dx+cQZfpyhw10Wae4n\r\niXs2YjhyWceZT2maIo56kLK9rtYaUkQQUIij1CsZ1rrEFQ4FlBDQMMKBf6F8p7EEAIeHhx784KAM\r\nzcdeNkCauHcez62qKhT5Gka3cz6JM0TKdNabTcxOel56dg6QUx18RmeZ+lh+BMiQzAGA0Wjk60Xs\r\nU25sSBtwWVcV8tUKYOzaKIoAYl9b6+Kl0jvJnzTx9Q/7lsYBX/c4g4vL2k0AIACvlFEbCCE6BiOS\r\n4yQDeTZskmuk9BPjzxjjAVQhtF/3SRkkpRaAj+G3iflpjIGxFtpoVHXl+9rJcgeUR1HmlVaBAgIK\r\nWTpAvz/wrDwCevM8x2KxwHQ6xWQy8UonMaIpSDS5elIcwZD5SfOJrk3gI9Wfg8uc/URtQsxlOocA\r\nYKBlvNNcDZnp1PZ0LQ460zrPjWfz2bLDuJVCwmjAaBr3SWc8hPsjoGVA8nWYxhEH/2h88PZ6XAux\r\nKpdLx8zmoAgH+ynenYADaLTtek14VpYQKKoafb2CFECNESqjoaQBjIbUMSwErIxgtYaEQpTGsEKi\r\nrgUqa6EjCVFVSJI+isSg1hajFWAGCawEosKiUM4g1xc9mKJGlPZhSiBCCiN/v/Ym4Nklqqr8M1Kh\r\nsUtjnv+GhycgIJX2/pwd/3EuFOaGA3rcsAy49iR5BrRhJWjt521JzHfqJ1pXSWbTvCTDJQe2af0n\r\n+c37EEAnLiEx86h+BGCSwZMMZRx4pGsRO5D2mQQo0t6d6n3G/Pvoi4kUik98GqP/7X9FghQFgKwC\r\nLDRMHEFYC1vXKJMIFhaJ1dCIsAVAmAJrmWEICwiN2CrAAPlKQKZo9jdnMuAPVawFrJYYmTXmPQF1\r\nr0Z0b4X4v/1LJF/4Mh7efA9JZDHd2wEig8qUSKBgKwOjUhTSIjUf7XpNa01RFN4LzlqLJ598EnEc\r\nYzqdYrFYYG9vD0q5GPl5nnv2397eHm7cuIEvfelLPiTKzs6OJ2xYa3Hp0iVvnJrNZvjkJz+JKIqw\r\nu7uLsixx4cIFvPPOO3j66ae97ApDIZ2V365E3J2PMzs48wToxiqiEgKD/ByuTIagIf8tp8zTYsjv\r\nwRUlOs7ZCyH4x69D9wut4bxwgJN+C8C7k9BCT8oUsRS0dhlWs7R12wW6PvKhS25YN3qWEPSihZkA\r\nBP47/lzWWtS2dX+hwtuJnoUrRPS92yAQs0fBMT4AYwj0cK6O3faKO9ega/O6cVcl2kwRe4OzoTh7\r\ng487/h72TdjnWvOxJhHHCVym1lYhGo3GGA5HqGuNLOs1rwz9/gC9ftxxOyNwgStIPHYad+umTEU8\r\nBh+5SxDgw/uB9yt3aabf0saPMmECwHvvvedjbxET8O7du/6a423HSBRQODk5wWK+Qq+3dm0dpfjl\r\n1Tewvb3thezuzr7P2pumKY6OjnzfUX0oxoLWGoPBwLdFnucd95c4jnFw565vnzzPsVqtoLX24Mn2\r\n9raP8UXPTeODs0xpY8zdLgnU4bIoBMe1tlAqRq83aK4N5HnJQH8JawWkjEDMGWMsyrKGtRWStGs5\r\nD2WJi2HWzA/RJHto2IHUp1z5p3fauJNs4GykUCaG84UUdc685uOE2ABaa/SyNrmM60cXc02pCNYC\r\nSnUTeYiGBUgZQ40tO3OF5Bc3BIXsMe4W6Zh+8PeNohjGuLno5kmb3ZrmsJQKadrE4stbFiQVYl6R\r\n/CNAr6oqn22aAMmyWvk2o/bk7CYuL7myTDIJZSsbK1WhKirkq9w/497eHiwoWRJgm390zRrteOYy\r\njMei4yUEaugYXydCsI3GJQdI6Z0UVXomAhsJQCZljoABqiedb0zN+howpk2y0LJ/uwYhVw/3cvFC\r\nAWM0tK5QV7YJHeDGeZb1MRwOoYh1JRVcBluBPHdJXjhgvFgsGiPc3IcdIDAtZNUJ0TJyeHxMcgnn\r\noTHIlZ23KY0z6g/Kzk5AqFIuqQI/j5RpklVpmiLPWyajtdaHepBS+t9ba7384gD3ep03bMUaVVX7\r\nvmqfs8vaC/dRIZOT2oWDw3zchWP1cSoENACOsfTEE0/gZz/7Ga5everHKMlEmmPD4RDPPPOMi6db\r\naxi0hjpuXNS6Rl8CtVTQUiCrKqQC0EaiVhKZNYA2kLFFJAR0ZWCsQKVzJGmKuqoRSwkRC5SYQZQZ\r\n+kZDj3qQVY5KGwihkMoIdTGDlQlKISCqBRIjUKY9/J7Yn1+jCSyiwvdEQLsm0XFqL/qegBwO7jxu\r\nY+GPXQgkJWM9Jxbw/S3t20i+0LyiPRCdz40RXA+ge3FQsdfrdcBDWvNoD8n3oPQ3X5c5c5r6uyxL\r\nD+jRHpXkAbE+qU70e65/0TuxAj/u4+NxKFLXyIzFytbQeYooNlhLAWVLVFUNIy2GEBAFkMHCVCvY\r\nbAJTAQkMYlMgzyyMqGHyAapUY5gqLNUKWS1gPgRm8ll5RBGAVhYil5C2wHoggf/sz5CIGqvDh+gP\r\np9jq9ZHEEQwMaltAS+0IRnWJpJaoo4822y/JDJIrtCYTMSNNU2xtbfkkqePxGFtbWx6bmEwmuHjx\r\nogf99vf3vWwhfZD2WePxGOPxGAD8PlwIgdlshgsXLqDf73vZSnvbMxn1u5WIW6lC9hUpo0CXpeCB\r\nJ7YAcuCPK7Oh8kplE1AYAnCkBIdKHFeauHWXn8c3zCEQye8BSwqzgBAKSpGCZVEUFZbLtWdJ9XoJ\r\n0jT2wJ+Ll9GHsQbWuIAwwrbMD6cspKwuXXdm93zdzT2vLzE0eHuFAKYRpzMa837gwBS3mJNCtCqL\r\nje0fArFh29JYMMYFzUeTLdJaZ+Wg0ir21D8WQlgo5drbmBYE5HXfNC42jR1yT2vr1oIMgLNSDAZ9\r\nnDu3jyxLm3h/U+8+s7s36bAVqQ2pvfjY4v1GGzweV8gY4+cEMT+A1pWLg4jU16QMklDl7hZFUeDe\r\nvXse/JBSYjKZIE1TB/QtFhhtTSGl9FlNZ7MFiqLCZDLB1tYAi+UMWS/BYNjD9vYW+v1+k8BCNW5v\r\nta8bzWljgDhWSBLXR1K6PnNMm6LTJ8S4oudaLpeYz+cYDAY4d+4cdnd3obXGer3GfD73G1HuwkkK\r\nO80zYn0VRYHVauVdRQmw3OTqQkAHZeEN2XbUvzxWlNYaUdzz44UYUnzjbgyBMboj/5xSLptxHPkx\r\nTa5CVVWjLNvEP3HskqUYEzcgSw1rdTMHWjYYBw8J1ArZy8SkFEJgPGoTntD4iSIFa6NGpiF4JgFr\r\nWbbRqHX5bWMGknuwacBui7o2KMsaaVo3IQ8cGKNNC3A5d1B3X61dW87n8+a5WhCQAxxlpTrziYPD\r\nQOsiTSxIovpTfDhaD3jmL7oOX4O4wsPBs17a8+2qjYGtKtTNvJdSordcenCVywiaA7FMIUS7vri2\r\nsJ755vrVJZRxmYIlnFu0m1tad10WuPJIfcTHBz9GbrbG8PiLJEMruMzsBtYSEzBu6mEdmN0A4+6z\r\nALmKO/ar9CAfrV3tmtC6oaZpjDhWDXOtAeEKV4+6rrFYHMOYumE3K8SxSzICAOPxEOPxAEVRdJjN\r\nxGyltiYwjfqR2omDntxVj+YON8a063GbxZrLXwI8q6ryMobmFY0jnu2XZCbJeRqLNLaIhcpdkXn2\r\n6m49XaiKum4zCbcAextLlYBAGg/GGEA4Yx0gvNHOhTCAf7XrZxfwC4Hpj7rwvZ0QAuPxGC+//DLm\r\n8znW6/UpY0SWZRiNRj4EBqSAhPDfc8OyFLIZ2RKRAerG1ikBJBowQjuvXBvBWEAoAwsXVsRotueE\r\nQAQXO9NKCegaVirEUM5pzhgolaEG4EZnijoC5IfIsgzdLzcZGDYd5+A9//tMaWpBM5K7YZvwtiKl\r\nlxtsSG5T4Xu/cP8anhcaifheOzwWgpLA6dAOAPxehj5vqivXqcKxQPL1DBh+PIoAoGBRRUBcJ0BU\r\nARZQFgAixABggAqAFBYVACR9wFSAAkpEgAKUFlBwv081UMEg0THM47UU/P+uCACxNqjiCCkipD0A\r\nvdPnVbZJQIrY8wwakuZvf6/AQPhhrPNcXnAjR6iz076F5AYnEyilsLu7C6D1euL15LKNF06oorjV\r\nvF6cQHVWfvsShaAPX6xog8nZCEAXnAnZMnygbbJGbzon7Gx+fgg68euGCy7/bfj3pmuQUuMUm/Y7\r\nrU3zAhaLullIayglEMcKSgko5X7rrw8JXRsY0bqzOaWjeuQzbioh6BaCT6faTHzwZoEKKYu0geYB\r\nQX/Tb8PSBd+6YFtYlJIACNhzyqZTSNAomx8snH7Td3HcjRkZAobWWp+ddzweNy7ebTKJslr59uFg\r\nMrE7yAIbbrT4fULAlRRNDuQC8Ky1Xq/nN3y0SRPY6jnQAAAgAElEQVTCuasS8EfKo7UW9+/fx+Hh\r\nIba2tvDcc89hMpng8PDQJ/MgxShJEozHQ0gZYTgcYjwe41PPfxqDwcC70RljvOJZFAV2dnZgrQP2\r\nVqulD2Q9HA4xGAwbhVpC6wpF0br1Up3TJm4WAK/g1nWNk5MTSCl9FmWidpO7infbFG0iGb6J5d9p\r\nrTGfz6G19rHfqG0JGOCfKb7WcrlEv9/34A2NfW7AIMsTf/HxxV1gQ3ljrUUv6zdsALKQlw1b0Sn0\r\nZVnDxUGLGxBVIooSpKnxQIxnobFCY4kSQnAAj8631gK2zSoOwDMnSf4QuMqTiPjfwsWwkhKIItmA\r\nUS1gr7WBtW29qipCXZceuDQmhhRttlMuV+j6LaDYgvt8vqRp2gFq6HvOUOJgCsVuo+Qn062hZ2rR\r\n2OMJQYg5SnWjOnG2IJcV3HAlhPAJXej6nLns5E/sn5Hfgz8HPT+/PoBOP/B+p2vzecDXWv4Mcdwy\r\n0fk4IiDMWuvHBF2LA8x87HDjEwdk+Voczo+8aBNqRJGAlGmnTY6PZlivl36exXGKLO0jjiNE0cAz\r\naQggo1iM9BwUsJ7GB8kNckcmcJnqz8e3tRbHx8de5lH7cvCOkg9xVjLFogGA8Xjs25aeia8JxFAk\r\nIIp+T2Bm2I9h+5H8pxePu8kt4sSQDtcUMqa1fdYeB9qYnnz/037GY1W4MkHrI8XiBLohXfhawRn6\r\nZ+WsnJWzclbOyuNWfhud+t9bHvX7D9vAR/fhcUs3hY/gOBLfZ28C987KR1MiDnrwTgk3WL8JhNkE\r\nroUvOs7fQyZbaAELrZThPckSx//mG8TQSsYtx2Fd+HPQhjKO41OZKikbaRRFEORKaA2rM1CWNcqy\r\nPlUvXjdrLTRaNkkIToTKYQg20W9CgGmT1ZIDHrw9OTNzUzuEgG/Ydpz5GbYn0LI2OOuQno3HEuHs\r\nFg4mhNcN/45jF7OJK9lcwQYEsqyHNHVuvsQSceCuRpHnHcDP3ROEBkNCdJOnBM8nIZrkKc1nIQFj\r\nUZcOzEqSBEWjTCohnVsZhM+8pkXLViFlMIoipHGCXprhwvknsF6uMDs+Qb5aY34yQxLFLlZemuHk\r\n8IHvh/F4jNFo5IHAKJLY2zvXsFgSEMsnSdoYCZQUg1zu7t2752NhjUYjXLx40TPzKCYXxeUDgHNb\r\nO4hVhDhzbphJFMNqg+VyibqscOvmu3jiiSewtbWFNE58mwAuc2ESJzDKQAmXfa4uCSSI0UszmJq5\r\nrdYa+WrtYv41IACBR5zhlSQJFouF/x0p7dS/xBJz47KGMaIzb4QQUMox6NbruhlbLVhE1+GgIoEJ\r\nNH8JTCDWJrGa6DxKILBYLDrzm+YpXYfHbuJ1pDlECVVo/FPSCgKpaG5xphMBrdZaSNsFe8J5t16v\r\n/fd8Yfdz2mrfDhxgJfDcudu3bpmO9dSGKEgz6YEpimPJgZYwrABnXQshIOSub0vHfkwadplo2KM0\r\nvzSrV5vYgoAeel4uq6WUODk5QRRFPokLtS0932Ix64D9BPIQu8vJV0okA1ASnZYp3Q2JEcpnzmLj\r\nsqeVd1UH2A03Vm486cZQRS71XM47kMiNBw1rKdt63YC8ru6OVXba/TQvlk27UpIUFweW6qcilxSl\r\n1iWUjP190rTXgLWAlApJksJa95nYf07u5H78rNdr9Pv9xjAx8BtQvqZQW9DvR6ORH08UV5CYwjwz\r\nMDc2cPA5Z+tDCMQTEEggMAHudB4lFKHxwOchH+8c1Kd7U+zGLMv8ppp+z9fyLIn8PuFR4HMI/P0m\r\n495HWcL9Bgfpu0aLrjH5DPg7K2flrJyVs/K4lj8k6PWHBtVoPSY2MHlwkUGeuwJzDzfA7UPIyMnr\r\n+LjuQT4uJSKXGA6s0GaXNsTAaWYV0GzUjD21obTWuVDBuqy2pOqgebfWQjSB9TW7HvDBrLMQwAtB\r\nrk0AVHgtrmwBgBIuO6U1FkJKRMqx+KwRsMYijhr3J1OjyFdYLiQEXFD4LI1RFLpzbZeFr/VFz4t1\r\nRyGWQnWUS2NPJyShen+Q6wH/2wZtyI9xcJcHQedMwE0KI3+Ffc8n8aNA2bCvNoHLj7pvWEIAl/cj\r\nuTRwQRPWmQAfYoYYY9rEGVHbxiHYzds3dK2g61PAeFI2qa/ruvYJMAiI2t3dxc7ODgB4ZZQYIpTs\r\nQ0qXDWl/fx+7u7t48sknsb29jaeffhq3b9/GwcEB7ty5g+FwiNFo5IOr9vt9TCYTjEajDqMzSTJf\r\nZ2KscPCqKNYdd7rVaoV79+55d2be5zwGJSnaFNOq3+9jOp1id3cX0+kUt2/fxsOHD/Hee+95d14C\r\nzGkhICWcFhUOAnPXrlChp1cURZikUw+0UOxGAo0I2OGAPlHNSfmu9frUOOYg2KOUypCpQ4VcAGle\r\n0VzjSXYIoCRmCwEYPE4gzVU+Bjn4Qt8XeZtYggMDHGgI69VhSKF9vrD96W/ujkugr7VNbC1T+fHD\r\n4xqSjCOWK38eAkbdNZJHygJrLRaLhX9eDghQHY6OjpBlmT9G45jqRPXhz0NtmSQJZE3Zd9twBbIB\r\nB4UAyiKHrhWs0TC6hq6rDnBk4y4rjj8ngerhmvRBMp6+fxQoGMpibijibhTUb7SGczc0XlfuBs/H\r\nHY1tMs48SlYnKWPUNglxtKb5ZjEY9L1sgzDQpsB6XTWAZB9Spr6vKJEBubU7QLPym006Rn1IGXup\r\nEPuLy39KEsLZpfS8URQ5A0Qjh/j6SJ+Xjds3jW/+mY/TMNtwr9fDcDj08pGvudSefB33+4FA/lF/\r\ncYCdg+y8Dhzk4+9/CuWDxlg4H8J9QLg3OCtn5ayclbNyVj5OZZMuDnw47r/c6BtFkddnrLU+5BLp\r\nHIvFohNjWUrZ8aA6K49HiWjDyd2yOBONK+VUuNJi4ALNyCBmGmQTm4YCpItmEIoWAKRzHwX4POo9\r\nBAu5q1Lo1rcJMOpajwVqXTf1cAothIKQESAMLBqfYFiUlcZ8sYKxAhAKgyiBiqxz92VKJSBQ1xpV\r\nJSBVG19PQEJGbV2Mce1HG3lSVKlduKK7qe35c4V02/AYXZ9AIH/dqO3fUCklJTAs/P48XskmVkGY\r\nUIbOCxmH3KrPGZB0Dj+XF54Nk/cB/dYr6UxB5swLIevO83rwxBrAkks3IDkQYxy4bYxBSjHVrBvz\r\ncZogimOs5zmOZyeYz+d48OCBA4B0jazv3MzmywUePHyAo6MjzxDKsgx1XePh0SHmywXWRY7t7W0M\r\nxyP0hwP0Bn1EicuC1Ov1MB6PcX48QV27QPXb29v+GhYu6UZVkntrAWspqYNBWeaAMFAy9u0dujRK\r\nKfHuu++6YdIwWuidYusdVA8wnU5hYDFfLjAYDXHx0pOwAjg8PsIqX0MoiSiJnSwwBrFySQKKVYne\r\noO/qK4A4TSCjNiNyvph7JT1OE8gG5FquV8jLwh8n8JAWGcBlEKZn4YACAA/MR1GErBd1vidQyy1c\r\nsonT11XI+Rgl6jsfp5tcXwm4IJCPjhMgR2ADvz6BFSHwQwCAm77t/CEWICUuIICRnoeDYcTCE7Kb\r\nLIOzp2jOckCIziFGlJJZB1yjechBC5qTHDAhEJ7H8gplmzFtzFL6O9zIzOcLFEWJsqyQ5wX6/X4D\r\nziVI0wxRFHvWqnP9FFCqDe2QpNlG+ecBGe1ifxVlhVoblFWNtGwBwB6LGcljA1KfUPBj3jbcQMGf\r\nl87hcm6TtZSvb1x+htZWzkjkGWdDkJK3Lx2jvqZYiSEjjvq0P2wC11jO0m7BT5HE/trkgr5YLDGb\r\n5yirHFky9e7pSRL7F7ltW2s6YRAoGUhZlkiSBJPJ5NT4IaMFWakJkAtd3wkE7PV6/lnpGjRnyF2Y\r\nM/foJYTwoQy4fOHMQmL38f7lTE4OVlO/hOA7yQxK3kLXp37i5/L+p/rysROun49L4eBnd3/WBb4f\r\npUCcAYBn5ayclbNyVj6uJdwbh7rw71s4YcgYg7feegtpmmJ7exsHBwfY3d3FO++84xNM7u7u4jvf\r\n+Q5efPFFH/v9rDw+JeKKTriBpM0oj1cUDiYrBYSUgJIwaNhv1kF+kAK6Af4AALSZQ8sEJAZgCPKF\r\nAzk8Tp+7oJsrocJEv990LSsFrBTQxsLBdg1AKAVEpCAiBcnapjIaeVUiLguoJIa00j1fwyA0jQuo\r\naIJrV2UNGwFSaMgmvpari3M/M7qNF8UV8EexMfl5xM7gygT1G23+iRkRAgsezDBdRZK3IbEg+BgJ\r\n+78sW7coIdxLStG41QFat+7SrYJG1+jGAtjUv5sEFz9eVWXnmIsxCFjrnjFtwKGyLFBVZQOGuLaP\r\nIoW8yhtFTkKqNqC4bdonIkWegYEWFlYAVgAyUi4zICyEkpCRAqRApWusixwPjw5x7+A+qqpCb9DH\r\n/vlz6PV6WK5XODo5xrU3r2N7extPPPEE0l6G/OQED48O8eDwIW7fvYOnnnoKk8kE4/EYaS/DM89+\r\nwgMzxhgMx1OUZYk4Vj521XI190riOp93FgFtHPAklfu7KjWWSxfDbzZbYLlcQ2uL4XCM/f193Lp1\r\nCwAa4C9BkkQQwgX0Xy7XUIMhqtpgnZcwVkAbIOsNEMUpVusC/cEIcZI1YLpjU0EoSKUQxSlUHDl5\r\nUQMqjpD2HHiZP3yIo5NjWOviD/aTGFIAujDIC5fQI0kSLJfLjjJMYJmU0meEEkJ02D8cBMuyrpsm\r\nB9zJLZ2PUQJFSB4UedExevB4hu43FlXVulc68KFEVTnQcDA435nLIYC4Xq878yJ0q41U5MFSDrQT\r\nc5PGAf8tBxwiEwJTgBAGQhhIKZAkreswB4AosYSRJeqa3Kc1XAZYDiK3sjeKFKR071TX5Sr39+fs\r\nNHofDAanGFtcnlnAg0Pr9RrD4bCdLyxxg5TSZ5zm7Vzq1sgSgrw09lr2o0FtK9TW/S6KKoikdXFI\r\nEhfXNI5b5pyUUSPrXYYBF6PNS2IPDIaGN26M28R8ag1eLnEHxVO1lhmWjGMwak3ZrSlphnNpd3Eo\r\npa9f9x62GQcEElKbExDj5Pdq2YLf7bpGiYIEIpU058K7iSyXS1RVCa1rzGeFj5lHLtUAoCIBIZV3\r\ne6USAm3WWv97sjbT3OFxJKmNKR4kgYute3Hh1zpi1llrMZlMvGtLURRuTWCGkJbBGvm1g4A6ay32\r\n9/c7ayZnL7v1iZL0RJ2+p/mxWCxOjUkeW8dluwdcoivp25oSsrjx0S3Wwu9THpfiDFRtfMIQ+OPn\r\nbTJsbjr3rJyVs3JWzspZeRzKB4FwH/ba9YdYC8mAT/td8lh66623cOHCBezs7OCNN95AkiQYjUZ4\r\n8OABlFI4PDzE9vb2b6zrmfHuj1uicOMJPBo55swMryjJ1q2Xu4jR78ia/ijGgmCAIge1+GYuBIjo\r\nGLELOIshZEKEYGbIqJAqRiQUpGpZKQCgIgkhI9TaeGXNJauwWK0LFGWN45M5tkZDH3y+qgxWq3Wj\r\nNLpU1SfHM1grUBQV6togSZrYUWlDi9VFR7kmpoKUTXw4xmrkz0oABWUb5JOS9x+PgUeKA3eVqmxX\r\n6aTyQaAjb7/ReHDqN8YY1Lr295NwyoZUcC/ZuNgJAWtEJysrZ8fw56G6hEClkORCRXHaIl8/10Qu\r\nY6VUQK+f+u/zXAPCIG7iM2lroeuWBSgbFg+5LXpQiTG0rLWI0xS1MahpPNU1pDGQUYTheIzBaITe\r\nYIB79+7h8PgYv3zjDYxGIwBA1u/jmWefhbUWi9UKRVVhMBjg0mCAg4MD3Hr/fWzt7GAwGiFqFNtY\r\nt1lAAUCpuAmI3iiH0A2bzAGzSRLh4OAAdV05N7nUJQOJY4XVaoXJ5Lx3kZUyagCBCP3+ELu7+4ii\r\nBMfHxzg8PMRicd/HPtva2sFksoW9vT0PxPV6PURpivsPD6GSFH/21T/3TMvaAsPBAFVV4cHRMZRS\r\njrUTRYiFgIFTjI0bjLBCoGyUaKEU4iauW5QkiJYuMcm8iStIrMnRaITxeNxJciGE8MBAlmXeDY/k\r\nXlnUsEYgTXpImviRPkZdUUGKqAHZEkC1IF1VktusdsAmAGM1hLUQMoFUjYItDJI0QpJG6PVTDz4Q\r\nE+3g4MADdIPBwCv2BHSNx+NTc4LLv7KoG+Ap6WRBXq1cIhsCz2jOkDwmORKLNs6e0RWsERBQUNJl\r\njesNex5wKUwBbdw5BNwbWzdM2AoWumFLt+EEolhCCgkpFZSSUFBQRiCKHVASJ9NOTEDONiQXeH//\r\noujIAncP7VjWpXvVlYHRgK4t8p4DYHq9Hra3dlH0C8e0LTWUjBGlCZRqmW3cBdYxvSwgVINgAtYa\r\naAPYSkMbQFYaaa+VuwQC8XVsE6OTy0o6j66xifkYbuT4WpHnZccdltYCqg+1GVlsOfuL148DKK1s\r\nUR6Qob9p3LXMcNWR+8bS9d2xwSD1LFaqJ7FdhRBYr0oANbQuUFUWQujGBTiClDHiKPXg3Hq99oxj\r\nAvMp4QYx+Mh9l7PoOVjEgW/+/M5AVPr5TzKRwP80TX2IApItBAZSVmAKAUFznFiKBNYTE5DmNzFf\r\nuUsvGRho3aaYhQR+G2M8UFkUhd8jKKVcetnGQAUrIZt3vl60ffV4gWUkwzaBe3w+PcpNPjRKnpWz\r\nclbOylk5Kx+3wvdnH1bh5AMAKIrC74co/jYZM3d3d5EkCd5//30kSYL79+/j6aef9rr3WXk8SsSZ\r\nFBxcIXCHOoxv+mkDrLVTfEPAic6jmEIha+yDGG2hUsTvTYUs7FJKr+DzTTxnznHgkgYov5bWpHR1\r\nE1eQNV0p6RXDtr4OBKyqGlVVII4VkiRCkkQA+o3yUOLk5AhR1GueR/pNeV0ZlKJ2zIyk695Kz07v\r\n/L4hg6CuayRZq7xRmxHzibcrMV6A1r2Ju4Vtukb4XQjOtkwhLmRs5xVFLoMosf2IFeiYB/aUWxkH\r\nfGn88DYJLfx8jDhQkYKDtzHW6BwKvu8UYWAw6CGvW7bXJtCRXL+o7Wj80fNvStZB82Y4HEJrjcuX\r\nL2N3dxf379/Hw4cPvSVke3sbaZoiz3PMZjOfSXc0GmFnZwfj8RiTyQSDwcC3E413qsPJybwJfh91\r\nXNxms2Pcvn0bd+7chooEzp07h/kix42rNxDHCi+88ALOnTsHGAGjLeIowXg0wWg4xoODh3j44BBp\r\nkmFrawuRWsIaoMhLRCpGNu1hZ2cHg8Gg007E0tFawxrHfp2MszYTlLaoKw2jLazRKPISQmjP2CGl\r\nlhIsOJAy7jD7CMAajUaw1iJfLL0bKo2HXq93aowLIXyMMMrGOZvN/HU44BRFEnXt2G8uIzVXLoUH\r\nSK21KKsloohc9bUf98ZQbMLazx0hXPZrSiYCWMAG4RKasUxjiTPA+Hs7pttAuxzYoflCgBr9TWAF\r\nyWelIkipAbg5SS9KSlFVNawFoihu5GHUScihGpDTGI26BigLegs+tYlRjFGsLSjLcNTI4TaWY8h0\r\novFOLu0EhhC7iuSGYyNKSLmCtQJ5XjbAk5O/gESa9tDvG2+1JBnHARou7zmznMcdJHkwny+8TNDa\r\ngEI+UJ8S2ETrjGNHu7FCAAzJP85wI5nEE75sWkOlRKcPW/a1u3+S8BiWClIqAKJZu2oAZHDhoT1O\r\nM7G7f9vmWWkzSIAsJRNp13aKM0oAIMkKIUTjdu4MRWW1xnLVhhcgt1lTp/7+BMSRTNZa4+DgAEop\r\nLJdLn/iFkt5QVmCSm2TA4RmUOfBLc4ifH+5/6JnJgLZarTyjkMBEYpvS9/QbGmPEvhVCeNCWZ4wm\r\nYwBvMyp8nmutsV7nDFgElGr7xJ1HfRfGyWtjXD4OJQS++TOHY/CsnJWzclbOylk5K23he/9w/8aP\r\n/XsK33PwGPFKKbz00kt47733/J7o/fffx87ODqqqwuXLl3Hnzh0cHh7i3Llzj5XB8eNe1H/5H/7z\r\nbwDdOGtcueDxnKh0NmaiPcYBQtoEc1cOoMsOI7dKIRrnXw7uEHDHwUTprNmC3Y9vjjeBQyFoxs9z\r\nz90o4e4bOMWHfuvYHvw791vHJjNGQ6JNPBHHKdu0W5RlhTgBhHQx49oA/M5NrqpKyLh1deMB+qmO\r\nnLWzqR0dq86cUlLpWjQhObOE9zO5am8C/zZZ08M2FpKOAyDH6eaztcSwsN7NyDYuR6TEp2mvZVM1\r\nihCPucSVnbBvN9WHK3SklHFgp1WamzGaxB3m4aYxwsGAsA/oe5orVG/qgzRNMR6PMRwOAcCDfATG\r\nUmw6AhSiKMLOzg729/ext7fnQURy6aVzaF5qDUwmUwghcHJyDCGB6XSKuq5w+/ZtvPPOOw07cIDj\r\noxnefOtNrNdr7O7uYTqdoCiAsiwgBJCmCaQUKKsSde2C7Y8nY/e3rpEkMba2t3D+ifM4/8R57Oxs\r\nI0li9HoZ0ixtXAmd27eQAlJJDEdDSOVAAQLHokghy1IkadKAxxQfT/iXlAppmmE6nXgLk09S0Sjw\r\nWZahajLoAq1LIAdjiQXIE30A8K581H8AfP/xsbDJ/Z4WP3ftqgEmJepad+5RFKUfT60CTjLSAW9O\r\nmhFY6GKctSxWJ5uUko1McrKHXGy1rpEm/VPzgb8TqMDBdW4scfKqKyPpXkLwtiH51NaXgEQ+5wlE\r\ndDFPa//ZAV049RLMLZjaiTPbCLDhCTwAzpZTsNaBaxy8dHEtK1RV7UE5KRWiKG7AMuWBMgdadcde\r\nFMWI4wR1rU/Vue1HCW1acJVAI1qTwnhr/OVdUyvt2FoQkEICFjDaNgC5RZpkEM0/JRWUdEmjKO6A\r\nYfIOOJ3tncY0MUO5a2qb+bzLDg/rS4Wf89sCMs6o1jUeEghK9WoZehyQaoA2NCEalEQcuX6Joggx\r\nrQ+NLKexwl13CUjkhjCSndQuxIjkxkfOAqVrh/O/BbTbOJjcLZ3WF75GcGMb/56P+dB4Gq7bfI12\r\n96waedDuAboGuFYu0He0f7HW4nvf/87//IEd+FuWb3zjGxGA/+n3vQ71R2jE4GMx3Ae0n00zl9kx\r\n+g0ADUBaA4sCRmiUUIhsCYscVkhUxkKVc0BmACwsDAwEpKlghUAlAGUrWFvACIXKWihbQiOCAKBh\r\nIW0FWOdiXwsJDQtla8Bo5/bwexQ+58LP1EahYZSO07m/6bof5/IoI1o47vjfXP/g8mNTm29SfHm/\r\n8c+c5Rr2NdWRjKqhTOZGjNAlPiQ/8MLrwe8bXidsn0eVTdejYyRbNz3nB13vrJyVP8liHeGhkhLK\r\nArYCjAQqOMK+sBbQFlZYaCFQA5AWzaZIN8vYB4//TXu2Tcd+l8LDifFrSCmxtbWFnZ0d9Ho97O/v\r\nI4oi7O/vI0kS9Pt9PPHEExiPx9jb20Ov13sklvBhsxQ/biXc8/+2JeILS+vK093kd8Ey2RlQ4caM\r\nPodZH8MB6Dd4QnQSgFjrYgLSpk0FyjhnZxEIQGUTOER1ovdNoNamQUnHwg16qCSRq5BTCmIfcL6u\r\nyT3HsWhko+QaDVjRbg7yPH+k2w+h7DwZBq9zuLhuem5SUEiJOfV7XXeuFV6bs9zCQm53m9qQjlGb\r\ncYAF6MY14q5+VEhBpUEdgqJ8IxIyBmksh6ABKecEWiRJAiNblzhS6vj1+H34HOEbo03zhQoB4Fpr\r\nbG1t4dOf/jTu3r2L9957D2+//TaEEJhMJtjd3fVg33g8Rr/fh5QSy+US1loPgoTjNlIxDh8eYTY/\r\nwXK5RJYlyNfOJa7fH2J//zystTg4eICTkxNUpcZgEGE+X+LGjXehhIsZ2O/3sbe3h729PQDA4eGh\r\n7wPOpiEgkxhSWZYw1gwa8E/CGBdrrKoKBmqRW3bUtKVAWVaoa85qcp+zLEGvl3qmIwdzAXhQmxYV\r\n+q51YW6zzVKfEMAMOHfYfr/Psoq2TC+ah8Ti/KA5RkAvPRuNdQIi08atnPqLzvMbX9G6Eda1Rl27\r\neHpxbBoX/ayRcxpKVZCyhBDKjyme4ZXmCR//JDvofJ452SVZSPzcprrRXCQXQ6o7n09Uf2NLD765\r\ndwtrOYu2m2CHJx7hc56zoUix4c/H2YDUN/R7d57yMsZajbLMoXXVsMQK5PkKo9EIo9Go6bMMVaU8\r\n27SNo1l3ZF0UUUIsZ+zpKsrCjxdaJ/I893KL5ggHb/gzu3GrYY2BgADhihYApPDxQwnoo+MQzd+m\r\nKw9DxdVa20kow0NGUHuGRo3fZm3k8m7TpiNcm+gadC61gfu98CCkkwVtf1dVBajMyRTh5pgLHRFB\r\nyApSa1y4cAF5nmOxWGC1WqGua58QJI5jbG9vd4wy5EZNMiuKIu92zmMJ0rOS8YgzQ/l8SNPUuzRz\r\nVirJhMlk4uchj8dJco3c8jmblmSSEC1LkgOGfO0kedaOfdtZN8noxAGLcA17XEp3XLh5t16vcXx8\r\n3Fn/6HvqX+dubeHCsrSeDxBwibsAQEgYC0ALADGgBFIrYEUCbSWkbRK8xTG0BAwEYqtgYCFVBGsl\r\npAFqG6E5CgUDCEChhDAaSvZgBMVYBpS1qADUiBH97nvzje3D1yIOpIThAYiFSt/T2hTu9eg6H/ey\r\naY3n7csZwHzvx5nZND75viG8Pp971Ed0XcAZMGl95ft1+pvkCq3fm4BCvqbyuvNjNF74Hp/ODYFL\r\nGkecic7HYmhUp3rw8UbPRcf4eA2fYRNgejZGz8qfcrFCYKEUBtbCGmAVA5EFaglUVmNgJGrpCBAS\r\nDhBEgxlYKFjY3wD9/YHr38xvvo7w8GEAkGVOV+GEFm7sDD2QSJZxw/VZ+eOVKMuyDqgBtLF9eGBp\r\nvonnSkI4IENrEV/c+AY0FOqbwBOu5NE16Vza5BEriF+DDyLu1hyCOG4A8oW6fdGxFvyTkLIbe8sd\r\ntz5+l1N8rXcvdEp3DSnQsHzQMGeIKQNURYUosi5Wkg8AD2gDGCuQximEJBdrCUlB2o0BhAZ06466\r\nqbQMmVaB4Mf5BmRT+3wQ8AEAddW6dZ22VDowyLEMSAGkvnTfU9ZQ6ms+jmiT8qjxAcDHe+LPyMcU\r\nxYAKNxRe6Q2yHYfKOQkmzkh8FODIlUoCgWcHUsIAACAASURBVLIs8+BSmqYYDAbIssx/Ty6sZDEB\r\nWrYOsBkcJre3xWKBW+8+wHw+R1GsG8Fc462qaOLybWFne8+NTVPB2hmsdSSExXyF1TJHEjsG3HA4\r\nRL/f77gjW2sxn899vZ17ceKfU2sX400qAyGbudO4i6rIIhESQI0odqDQer3wc4X6cWu6g6pqQStt\r\nKg/GEjBFY4PAFGp32ozyuGXL5dIDMDS2QqYNXTuKIiwWiw5jkMZFCNJx5T1c1GhsEZOIy0dSxPnG\r\nn+riwNs2Y3Xo9qqUwmAw6PyWxhstmmVhOnM2LNy9lTOYCFwhGUcvDpTTdyE4wecq5Q3g4FzLSmpl\r\nL38uLlupfUiZp36m8UUJTzjwS3OENg+8bfg9OJOKgyWDwQC9Xs/FkGz6jCeCICDHGOPBM3qO8Bmy\r\nXuKvHwKWBKrzeG+nFRuDKDrNPONguIvnafzf7hLuGPUlb39+fXKV5aAtH2tUOLDKZRqPI8lBYiof\r\nBCJRe/GxyT9ba1E0iW9UHDl5IZyrcJnnTn7GztWc5B8H2lumrnO5duC5c4VdLJzRZL3OfQiB4XDY\r\nMAFb4JbGHQHhNAYIFOZjOGTZhExhAhLJJd0Yg+Fw2JFBNDdoDNH1OTBL4Lwz4PS9vOBrLNWHK96c\r\nrUjjibv4P84Wdt6uJNtmsxneeuutjjLBx6+UEnfv3sWzzz7bxEZ1bv9+P8Pc14V1YBysgRAVpFGw\r\nRkBKg0gYmLIGMgkrgML9GLF1Chqkm22Kms44Q4exEkKkzvtFakRmAYGhS3anSkjUSHXitpQx6L/f\r\nq43Cz9baTkZ0KlzZ4rE6N+29z8pmgwWBbZzBuwlw5Z9pXPJzw3lH1+L7bip0HZJNfH8upURZlliv\r\n1x2jZmiwIVnNw9DQPUgWrNdrH6OUK+NcEQ9BQroWfw6+FvA5zOukte4kHqT78WcK9TgONJ6Vs/Kn\r\nXoQFRqWAjS3WooR8OEMFi/XxDL3dLRxbACqDqGsM4xRRljpDsHJG39oKJB8xNsbnJ38P94BknNi0\r\np+XrN/8teWidlT9eiUKwhCuHXGmkxYgrmtZa2Caxw6aBwS0/m8A/vpkLgSY6P4yDxH/PrZscvOEv\r\nPsiocAUnVJjCegI4tcB1FdmWgSPEwi/YcZw2CQUqWGFhbd1sNm1nMxZuwML2DRHzsE4qAMUEBESD\r\nwQgLmFo7Dd1Yf0w2MZokumAZf24OQGxqJ77B2fQc4WaDzuVAjZQuGzIHQ/gGjDNTNgGRQogOkEb9\r\nz/uLK9zhMwBA2cT8C5lFQjiGTaRiCN1NuuLO19DWQArlsvw2oGZtNKxu2ViVrpH1exgoF/8vz3Oo\r\nOMIzz34Clz/xDOq6xmg08ps5Y4zPFlzXNXqDvt+U0YbIwF23qErcu3uAxWKB/iDDzs4eqqrArVu3\r\ncHQ4Q1lUeOYTT2E4HCLLEsRRioODA1grEccZsizBaqWxXK2hjcXJbI40c/VQkQMrJtOttu0hmgQ4\r\nomHfKKi4BrRzteQKbm0qaNsmUCnyHAcPXcxDCtZfVRW+/IWXHagjjAf7CLyLogij4aSj+IZgb1mt\r\nO+OG+pqSauR5jul0it3d3YaR27qXW+uyeRIAyGUSjaler3VLJ3nCx4tUXat7OHc58BzKNiEEkiTu\r\njFdqG6rner3ugJfcjdElHik2yjYqtKiGAB65DNE7gR8EwHGjC83BENiUUjqDRCND6Dwu++mZ+Vwm\r\nhYmAFw6qc4CU1hye8IDalYBZivtH4At/VieH41PMLvqOYsTR8xIIRAklOGOGM6v4mkTjgp6JmFiU\r\ngZjqywEmamPer5ylQ3KTu+TytZTakzPX+DoRFr6O0++5EShcZ/n1+ZjiQBO9+PoaAofAabcRPheo\r\nzzyoZYUH4kkGLGcr3xYU+9O1YdrIxcobUChpzmq18kaGxWJxatxxsIQr29xFOssyD0CF+yAy2iil\r\nPMuP+pfahObaycmJvyb9hoPR8/m8A7pzsI6uw4G7EODn7B/OLKTn5Ql+6DohkPg4lHBslGXp4wQ9\r\n9dRT/jy+5yvLEnfv3sXt27cxmYzRZjzmYUnc3w9nC3znZ1exP5riyy9+Er/89X388tav8dXnPot+\r\nWuMHv7iGr33mk9jb7eHHv3oLR/cO8LXPfQZb0wm01ri3XOL7P72OrfEQ/+nzT+Hnv/w5IGP8xZdf\r\nAIyFhcRsrfDtq6/DlDX+66/+J1hVwGu37yPWFn/+3JMNnePfX5bLJa5cuYL1eo3Pf/7zeO655zr7\r\npfV6jV/+8pew1uLNN9/Es88+iy996Ut+jFA78z3UWXHlUUDarVu38N3vfheTyQSf/OQn8ZnPfMbP\r\nf2MMZrMZhBAYj8cAuoAeZ92Fus1iscC1a9fw0ksvYblc4lvf+haKosDXvvY1XL58ubP+kQyt6xqv\r\nvfYa3nzzTfzN3/xNZ9/D9bVr167hjTfewCc+8Qns7u4iz3N86lOf8ucWRYEbN274YwA8e5rH5eJg\r\nH+19aA0gnWA2m+Gb3/wmsizD888/jxdffLGzDoTrJR3nbUzs6cPDQ2+oCa/BmYFn5az8KRbbRGuB\r\n0RDjDA9+9BrUqI9YSoj9KWIjIVQExA4k1NYZsGIrkXzEIpv2ELRf3PQ90Mo9+kzf0RyuqsrHdC6K\r\nwu97aB99Vv54Rf03f/0fv0EdRsoRB1J44RblFqhoWV9cKeYMCSpccQmtSaHViCuU/DpcWeJKU2hR\r\n50BhuJDw76SMOnWjQueQchl+5+sv22Mu1hQF6HfPkMQJKO4RBcZ3FmrH4LCC4u+Y7ndwLlFSUHB4\r\n3VitAeHjEtomYphzlTbW+s8WFsZa5EWBqq5hAZfBNo4AIVDrGlXtYtmE4B/vr5D5wfvHKT9F0z6i\r\n82qFAVDXGhQgnmLy0HeUCIVvXujeoctzaD01xnhwJhxrdE6SJB5E4UAHbUhUFDWxJNsXxd8SoFiU\r\n7qmkEJBCuOymdQ1d6+Zc0fyWonMJREohUhEiFSGOYkRKwWiNqiwhAAz6A0wnU8ACg34fSipUZYm6\r\nqprfR5BCYLlYYLVcYT6bo8hzSOFiXxptYI3F0eESg2EP58+fx6VLlzCdbgGwjYU4x+VnnsLOzg72\r\n9vZRlhUePniILOthb3cfkUoQRTHqqkIUKWxtTTEZjx2QaS2UdLHmpBDuM9qxKBpWZ1WtGrdFd57R\r\nGuvVCsvFAsvFAvl6DSkEijzHndu3cfv997FaLhEphTRJMBlvYTabYbVc+zhxs9kcxydHmM1mmE53\r\nQHE5O+CQApI0hm3YtgQOhexMztwhEIYWsbIsOxZpniGUFG+Sa3ROCL4YU3uFngM9IctnE1MUAKSM\r\n/G9oIQzd37lc43MvjmPo2nplPpRPnDUQKh8cJOUAEJ3PwSUO1ocGgijuxgLi5/H+CmU839Bvktf8\r\nt9SXvC1DQCy8zyZ5orX2rC4CX+g4gFPrSphBPayTEC7bMQ9dwAEc2uzwNYyvVQ4obEFiDhxRO2wy\r\nTPD+jKLTMV050MNBXN4u1N5UV/qez5VNa3o4jqjwNuHfccCRj2m6br/XQ6QiKNl4GzR1ThsALl9X\r\nrB4aFGuSYl/SvTiAnaYpsizzLrXUxxzUbZ+zBTZ533OQjADKcB6R3OHzk7eHUsrvHwiU5mApKfab\r\nrk2/54BfKAsA+ERIJOvC9bL1StCdelN/fu97j0fMv1A2aa1x/36bXX69Xvs5w7Nba61xdHSE8+ef\r\naPZODNxu2iUvcjw8PMGvj9b45b17iHSOH71xG/v7W/jXX72Lzz33JH725vuY9jPUSuHvvvMqnnn2\r\nBVzc20WaKCzKCj96/R28Ny+wKkqUVYWt6RivvnETf/bCkzAqwrqo8C9v38LPbx1AxhGODu4gno7x\r\nv3/zB5Aqwheeu4DfF7qYz+e4cuUKXn75ZVy+fNkDUwCwXq/xj//4j7h69ao//8tf/jLu3LmDGzdu\r\n+CDsHEgO99wf5xIaJQAnu+7evYv3338fX//61/Hd737XA15SSrz++uv44Q9/iKtXr/p1+9/+7d9w\r\n4cIFLJdL/OhHP8KtW7dwcnKCV155BW+//TaefPJJXLt2Dd///vdx7do1fPWrX4VSLmHRfD7Hyy+/\r\njFdeeQVXr15FURS4efMm7t275xno3/ve97C3t4fpdIpvfvObkFJiNpvhypUruHTpElarFb7zne/g\r\na1/7GtbrNd5//31cuXIFs9kM/X4fP/jBD3B0dARjXEiPH/7wh4iiCNeuXcO3v/1tTKdT/OAHP8Ab\r\nb7yBmzdvYrFYIMsyXLlyBbdv34aUEq+++irm8zkuXLiABw8e4Pr16/jrv/5rX58f//jH6Pf7uHr1\r\nKl5//XWMx2P80z/9Ex48eIBz587hlVdeweuvvw5rLf75n/8Z169fx/b2Nv7u7/4OdV3jqaee6uh1\r\nm4weZ+Ws/CkVKwDbxPgTRQFbVZgMenjwf/8A0bSH7LkLUDUghIawFpGQkEpCkb5MqvUfuWxi49Ea\r\nzWPPA20YBPJ440ZzvpfhBu6z9ef3L/9eQ25EApbYEVyJ4ZsEvrmnl1IKVV11NhIhS5ArTyGDzVrr\r\nECBrO2PbAS6Na18QQJszaYwxKKuWuRVunjdZ87jlyr1OW0Pd98Tyq2GthLWhW6t7ccXNZQB2QJO1\r\nzn1pZ2enUf4cU8wYQBsBZQSkbmLNAKhFGw+MuzgJxLBGw5q6aQ8Da5j7j0oAKWEbINZaB/5RmxYs\r\nG7KS0p9jANTGIIq6jDteCBTepOxxMIL3Ke93wFkU+bk8HhHgspWG7BYCQkK3Jt6/VEi5Dl0aqU6k\r\ncNH9eXwuAMgY447/ll+/o/gaA1PXsFoDxkAJ4YEvrvhSOygpoasKuqFBD/suG/R6vcZiNnOuZsy1\r\nMYljZE2cuLKucff2bT83AWBnZwcXL15EP8tg6ho7uxMfk08pizSNcenSRdR1iRs3bkAIZ2Umd5Hx\r\neOoBr8Vige3JNszQufMOshSxbDJENmzG5WLulWqnUDV93SQEsWgVUY3GVXPpwL+8cd0rVjlWqxVO\r\nDo+xXqwwHA6xu7WD3d1drNcVVquyUdJdfy+XaxwdzVDXNS4/7ca9c19s+kcYRMqBGlmWYb1ee6CL\r\nmC5lWXrgWmuNhw8f+kzK/X7fj3laiGi8EUDEQRu++aR50o4301kgQwMDgUDhAufni6CEAwpxrBoX\r\nUMBaDWs11uulZxW5TLokv9y9OfOH2EY8libF4aCxz+/NGY2c7RcCRnw9kFJ6QKGua/QHYzi2jYAQ\r\ntZ9vri9bV2j3IoauAHC6Pfm6QffnAAzJI+5em2V9Nu8shFD+ZYxjkWZZ1iTvqBtGWQ4hFACX1ZkC\r\nFLvz0gaQjZr+J8awRlc0tOAZtYVSyme8JgbbarXyDEtqhzRNfXtmSQIjLDS58NYWMI51DCFgNQAj\r\nIGyTDMQDOM3xSHTGPZfB1L50nIOK1K60SeP9zd95TNsO+C67bFcul8O5Ep7DZXldVkxGs/sIl3hl\r\ne2vk27IoKuTrAmWxRtHI8f5g1Nn8uL5qjWOTydj3w3rtXv1+vwGKen7943XmbHcOxvL683WFs01D\r\nkJwAZAKCqX1oHaKM8MRMpTlA/cPd7sI68BIqyNSOx8fHHSOatbaztj4uhQPdvF6u39aghFecray1\r\nxmq18rLBycYugCOlRC/r4fy5FC/YHuZ5jqd2tvHajWO8tHseN+8eIK0rXBiPsRYZHiwqFOjjxr0T\r\nLO8f4Im9HcwWJ1gYiWd2poDRKNYrTM5tAf0JFhr4ybW3MZvPgDjC5Z0dnN+d4Nc3f4EH1yU+uX8R\r\n0ziBxu9N/IO1jrV1/fp1FEWBK1euIMsy3Lx5E9PpFF/60pe8y/hqtUJRFNjd3cXf/u3f4sUXX8QX\r\nv/jFU8ass9IWLiv5fpZCROzt7eHatWvo9XqYTqe4fv06Ll++jNVqhddeew2vv/46Ll686PcfUkr8\r\n/Oc/x8nJCV566SUMh0P8/d//PbTW+OIXv4if/OQnvi9GoxEGgwEA188PHz7EfD5HnueYzWb48pe/\r\njPV6jYsXL2IwGOB73/seXnjhBfzLv/wLtra2mrUww2rlmNJPPvkkzp07h1/84he4dOkSkiTBlStX\r\nsFgs8OlPfxpXrlzB+fPncf/+fTz//PPY39/HhQsX8Pbbb2M8HuP27dtQSuG1117D9vY2er0efvrT\r\nn+L1119HkiS4dOmSZ0DevHkT3/72t/Hss8/i5MTFnn7w4AH+4R/+Advb27h3754fi2+88Qa+9a1v\r\n4cKFC7h+/TrOnTuHZ599Fq+88gqee+45DIdDv2cCWiblWTkrf9KlwQwiADLtY2UXEE/s4en/+Oc4\r\n/j//AfmDQ0R/+WcwcYQkG8BAIYJLDgIAEB8J9neq0L5oPp973SHPcz+/J5OJ3/8K0cYF5HoUvWiO\r\nn7H+PpoS0WYryzLvdsfBDorFwDebXLmsdH1q4wnAK6yr1WrjhtV/1gbCWlDIMDdHiLsGZHHSKs/G\r\ngmIeGWNgdDcL3yalhwr/TBsgTqnnm0X+Nw3M8Hr0DFWxcg0ZRY1C6eq2Wrnj0+kQQkgkaYwkYRuL\r\nRtlTYO66xgIaEFJAGMfpS3sZrJLQqpsBj6piGlqaUI6ZFbZ1b9Bv3YGMBkwDMiYxZKP40OaZWJ80\r\nMcuyxGAweCTrxxiDOO53+0A0YF2T5TNL+53xEzJnKE4iFw78e3K741aE8DwOCPO+o80yuYPRM3FF\r\nvWoysj5KqcqStOPGVWvtXamFBVTzvKZmWSPh3K2ttVCphA7ipSml0M96GPYHGI/HWC6XWK1WSJLY\r\nZ/adz+dYzObIV2ucnJz4mIFpnKDaLdHPeoCxePryBe/aWNc10ixDr7+No+MHwE2NO3fudBhWu7u7\r\nmE6nGI1G0LpCP0k9cJamKaxpgFRjYKzA9tbEKd75CkII9Pt9JKljUy6XS4xGA6zXa8+sJPCszCvU\r\npWu3Yj1DnudI4wxPnGvqW2rcv3uAZe5c/Xq9FNPJlnOBzobYmu56ILgdG03g6CT21vJB0kdRFB3g\r\nnLO6AMo4bbBcLn2sGw4CEpuExluv1/P9T5t4MjyQCx/JiaPjAz/mSKkmIGY4HHbahSulNCdJefUx\r\n4SSQZjGkAjKdoCjiZvyVKJcukYl3f0wTKNnKnJAZE8oufm8aLxT3hwC9OI6RZVkDhLUug5zNlmWZ\r\nP78qm0y+xpk2pRCQUYQkFr79jJtYjq1qLazRMBpQykLrub8HN3zwWGr0zDymmh9reet2qaSEkoAU\r\nEWQDRNrEJcYocge8JHHWGFUU1qsCdWVQpwZSRFAy9u8iVoiUQRylHjivK7fmAI59q5RCUZ34+pG8\r\noSKlS/hAdaV4lMRMS5IEvTj2xgHaDEkpEVO8Jib/NsmokhnruKGO5GOWZX6sUr/z+Cs0d/gz8PNo\r\n7FOfhCw1iqsZyna6Zggehsp13aw5WmsIECjmWNfWWgx6MaoIUEJDwqCqHOtP2ApW1yirds7FcYxE\r\nJRAi9XV0rv8xVCSgVo3bPjSKcg0L1ye9Xs/HPJVSepftqqowHo89Q5i7v/PYfqEBjK9DvN34+kP9\r\n6eR+4hPR0JxZr9edTPW87Xn/UHIjkiEcIDfGxRyk8UPgIgB//uNSOPDHDXFKKc/WJcODMc5ln2Qz\r\nyTljNKRs54Exxu2PANw5eIj/6//5Af7881+CtgPMdYX/99c3MSosEpVgVhfYLma4cP5J7PcHSIVF\r\nXS7xiWdeRFls4/q79/DGO++i1+vhxU884TI2rmYYKo3PXJiiNFP8+v4MP3z7V5jlOXb6uzg+XuD2\r\nwX2UiwRV9SKS36O5ab+6v7+Pv/iLv4AxBj/+8Y8xmUzw0ksv4fr1697AtbW1hUuXLmF7exv379/3\r\neygeQ43a9kzpagvNbc52N8bg+PgYd+/excHBAT772c/iZz/7GX71q195Bddai8uXL+Nb3/oWvv71\r\nr0NrjZs3b+KnP/2pX7NGoxG2t7dx584dHw5guVx6HYQMkUdHR3j11Vexvb2N5dIZ/gaDQUMoaAkW\r\nWZbh6OjIGxF2dnbaJHbGuf7ev38fxhhsb29jd3cX77//vk/aVtc1Pve5z2G1WuGVV17BV77yFW8o\r\nu3DhAsqyxGQywXw+x9WrV3H9+nVUVYUXXngBURThlVdewfPPPw9jDC5duoS/+qu/glIK//qv/4r9\r\n/X30+30Mh0N85Stfwc7ODt599128+uqr+OIXv4jJZIIvfOELODo6QlVVmEwmuHXrFgBnkAY2MzHP\r\nyln5Uy0CAAxgpYBduhy/AgrJ9gj9//6/gDk6wex/+T8QffpZjL/2MtTlJ2EsHCZgXCgoqI/OWMeN\r\nIYDTF27fvo3pdIrt7W0cHR3h4OAAWrv4ngcHB34/Bbg9y3g8xp07d3wSxPl8jkuXLnU8NM7KH6+o\r\nv/z6f/gGB3M4kEMoL/87RG+tED4OD2fSRFGELMs6m2Ne/LUMGvYfOm6WaACkJI5hjXNxFEDjfij8\r\nbzRzB9zEOAjjVIUsBSFcEgrR3hiAY9XQi74jl1xiFggB2M6g5UpAs2FTBkZT5s6oUfAdo1DrEkJE\r\nrC6nQcZNWbFI0ddaIy9bRkn4HXdb5Eoh0IIFIfjHN4ntptqcujcpH4BoGD0uCDbxk+lYHCf+mHN7\r\nprZxrzAGIGebcgZfyMjj/RsqXFy55OM4VKBDZS3sAwKGOGuHBCCBQJz5wRk01EbcrZ0D65wNQvHm\r\nSJGhJA1JkmB7exu3bt1ycfyOjnDv3j2/aTTGYDQZIU2TBhgrUdcV8nyN+/fv4e7dOzg6OvZZMJMk\r\nwXg8RJaliOMIg8EAVVGccp/nc4kUxNCtjRRfCrJflhWOj09w+/Yd3Lt3H2VZIY4TJEmKoiix+v/Y\r\ne7deS47sTOyLiMzcue/7XOt2WDeSTTbYnja77ZnxWAaEGWFgA7ZgWPDP8D/wgwy/GAYMGBBgj18E\r\nw4YBy5AhA9KDDUsadXNaMLpl2bKa3RDJIlksVtWpU+e675kZFz9ErsiVcXax2WSzWa0+QWyeOvvs\r\nnRkZsWLFWl98a62lD+sFBJRKkKYZ8ryLJO0jyzoYjSbY2tpCt9urWXAZ+v0BOnkanDznPJOrk3sg\r\n6OzsDI8+/gRPnjzB2dlZmKfVahUSzpJM8xc1znwjwIvkkdhg3CHlIXeB2cnYeCRXnC1LTnhMn2/y\r\necnwasATr5O8Y0AFfUg3NfJvrYUUnUtgeAy28+fmYY38wCbW/yTXcX7SWN6TJIUQtGYDYbv+fHxo\r\n0OiH8By4HFbA1wv9Ttfkn/FXS+CcrzbcpBcQSJIUaZqFfjRj0tyfnsXPD8lHw4xLkhRSKkjZDgdu\r\ndBQgpLmkc3h/ue6h+eAMdlcZGG3grIOSqk4RkPi9TRtIIcPUO+tCuD+9Z0WblReDqCR3XO+/SC/y\r\nfvPQZ3o+kmX+HPGhW3zAR7qMyxQHnzs1uE8HYDGLT0kR0g4kyoPLqEN+q6qEcYDWVb2feoY936fT\r\nNGmtMVGn0SjLAuv1CnCy1R/S8RxQpGchnc9TYfD9mj8nH1OaE76XUpgy/c7BRB4qw/UHBw05Gzbu\r\nA5e9TXPDAcx3/tX3Xoqw37ivWmucn5+jKAqMRqNL+yvZlfP5HNZaXL9+vbbT2OFvYBg4LBdLOKeA\r\nrsV41ME/unGAp+Uc/+y738K4n2HQSXB7b4zdQQe9/hgdV+Cf/sO3sD3IsNVLsbs1QoUK167v4x++\r\neQdSWPSGe7izNcAw72Hc62JvkCFLOxh0Mvyzf/Qt/INXX8E3793GNw+u4caw6x24LzE+dPi2v7+P\r\nPM9x69YtzOdz3Lp1C2+88QYODw9x584dHBwc4Pnz55hOp+h2u3jrrbewvb2NXq/XYnDHdtKvc+P7\r\nJddhSqnAwvvOd76D119/HYDPv/itb30Lt2/fRlVVGA6HmM/n+I3f+I1gTzjn8Oqrr+K1117DvXv3\r\nMJlMQg7Lx48f4/XXX8fBwUGwwcfjMfb39wPIe+PGDbz55pu4c+cOhBAYDofI8xzXrl3D3bt38fDh\r\nQ3znO9/B3bt3MRqNMJlMkKYpJpMJHjx4gHv37uHmzZvY2trC9vY2xuMx7ty5g2vXroUCSLPZDN/9\r\n7ndxcHCAoigCaLy/v4+dnR1sb28H5uDrr7+OGzduYL1e48033wz5Abe2tnDz5s2wb+zt7eHWrVvo\r\ndrsoyxIHBweYTqe4e/cuvvvd72I0GuH8/Bxvvvkm9vb2sL+/j8FggIODA2itcf369Y1z9Osuo1ft\r\nV7f5sF8LDQGjElTWQaYKq+PnSH7yCdZHh1CjHObmBJ17rwDdEawDpASsAioJJF8D948Tbmj9JUmC\r\n6XSK9957D4PBAPfu3QvAX1mWSNMUjx8/RlVVODw8xMXFBYwxmM/nODo6wmw2w3Q6DXtYHA141X6+\r\nFvtyn7eJ/+q//M/rKNE2q4B+8tN/fpPg3MIFw5bCcwhAyrLsM8E/fwFz6X36GxmEcU4lMqKNMcH5\r\noT7FDv4mw6YFBG1w3DjQEYNO/NkBwFWbk6xTI4YZ0frJ4OegDzfglWySz3tGZo+BYm0HyhiDJO9f\r\nAg03PU8cTsSdF2J30ukiIfNUaXZTqBd3IuPrCyFC/whA2QQuA015cH5N7vTz02nuZHMn6LNaXLmU\r\nA5vEdOItlhWaoxg8ovEmZis3HrmTNxwOW/LCx4HGieeho/sRoD6dTvGDH/wA5+fn2N/fD2wPYqrc\r\ne/019Pv9EBZFzLunT5/i0aNHKIoCg8EgVPGdTCahyIEQAsq15TcG+biDSeO2Wq1C3rSiqJow5vkc\r\ny+UyPBMxWubzOS4uLlBVFfI8x3g8DoZsmm+hqiokicRoNKpzODbspG63i+nsAr6yqUGlCwyHQwgh\r\n8PjxYxw9fob5fI6iKFoMusFgEO7N54Q790mShM+NRqMQwkkn+rwaMLHpODCglEKSNiBizO4kMJeH\r\nDtIY0/ogFmEMftN481xXdA/u4I8G+5eAubIsW7nNqP/Ud76maM1zmeQg13g8bhUsiIFQ0s80bnEO\r\nNP55HpZMf0/S5rl5rjV6JqpGTy3Wf7YyGgAAIABJREFUac4KBkTrFjOSwC8Km4+BFQ42AAisx3Zl\r\n2PZhRFmWoZCM1hpCFa1DkfhAgetkDtCF+2sb7tvtdi/l4ONh3bEeBYCs323JE7+PEAJFDe6TzucH\r\nGFx3xuAffb/X67XGl8aJQDBjdHs+IqCWg1DxwZNzDplomLqkb+ggguSVgxVFUWCxWGCxWPiKvKLZ\r\nm0hOeXENXtCDGH3L5RLL5dKzEl1TDTnLspBCodfrtb7LZZazT+lwgacJ4PtAt9tt7Tt8XRDLMD48\r\nIj1GOv1FoDK1WG/wz1J4LOkvflgmhMB/+y9+7xfiUTjncgCrL3mNMDbr9RrvvfcehBDo9/uh0jvZ\r\nljSOi8UCVVXh7bff/kU8xlW7ap/ZuIzS77PZDO+88w7eeOMN3Lt375JepTV55eBetav2a9qcz8Zf\r\nQsCsKpRqiVExx7N/8UdAISH+/X8H4ua1kCqMRx8Bvxzgm9ut1Chyg9sT1lo8ffoUz58/R5Zl2NnZ\r\nwenpKQAEn5/SmNAefevWLSil8PTpU1y/fh3r9Rrdbhd37txppaPhfgzZNfzQ72f1nV/j531mbrNy\r\nJiLvA+nxeB/4PH38qhq3L3+elsRgRmxY/qyH4hNHxi939n7Whhc7C9Q+EzDkD8CYA845f9obAVKX\r\n7lefCoOBGhx44g5bfBLIgRD/78t58nibzxcwpoKUPieVtXmdx8JCKYHVyoOjUihIKeBEOxeXc4uW\r\nM8CBOKUU1IbQHQ7gEmDBv0NACP88X3xc6InRGTvgcfgXHzsOMLzIwQzgsdatvnFQjBwt3m+aK3KY\r\nKGzxRS1JkjAG9Ez0/JuURAwW82qvdB0ObvCQWw5gcJCDAyv8Oa21Lcecwr0ITMnzHO+99x601rh5\r\n82ZQlCcnJ7i4uMDDhw8xXS5w7do17O3tBYc1TVNcu3atVWG01+sF0I/GEACGg2HoC913vV4FcGNr\r\nawtSSqSpBwvLco3z8ylms1kLaFosFnDOYTKZYDAYYLFY4OjoCFmWBbAwSRKMRiPs7e0FsC3Ld2Fs\r\nw3z0/SImXOPY+r8rCOnBstVqhdlshq2trZBegPpCY0iNHHuSNwIuCeQD0ALBaX7pu9S4XJKzD9FU\r\nsuZgAclMnucBNOGnaHzN8XsSiMFzshEDj/rL5Y+HDXO2Fsk69YU27ZgJRI409Y8+T/ei/lCFLgJW\r\nSC9Q3/k14/VOOoHrlwbwIUALMGZTwZDLLCZ/vbr6mGkz2ujfHCSlseDgJX2Owso5I43WAaUL4PqX\r\n6yAASDI0YatMPqjR4RcHEenzAICqzeiiMab553o6ZmqSfiSZIlnlOpkDq1z30rwSQErALc9vR2uC\r\n7s31FoFJSdK8twmc2hRaStcCAFdeZn5y+eE6M352pRTW2rF5B6rKwLkK1gJKWRjTjEGSZOh2FaRM\r\nkKYdXw14tg4HKpS7hsY0NsD5/kTPQeHAZOxyAJB0Ol97ND68xYd2JEu0v3wW+MuBsPa6kS2Z4Qx0\r\nznB82RofGyE8sN/r9UJ4Ockr6bnZbBb2h6/L+L5qf/9bbCPz94bDIX7rt34r2OexHozt56t21a7a\r\nr1dzACwsUpFAdFNUS4uLP/4hVJJh9z/5j3FYGthZgX6/X+ckfrnyslI/iNhBB+RSSiyXS4zHY4zH\r\nYxwdHcE5zwYm39znmh8FX5kO53t1/ntKtUB+FfctyPbhlcc/q3/0eXrvZ40fxwBif4H7WnSIyj/H\r\nv/uyzNPP0xLOvNq0aVHjTg9/adcUagAaFJJ+cuCFX4cPOA1ifN/PM6CbkN74Wfh7m56T9yG+Ruw0\r\nfZ7r889S6M58PofWOjALut2uD4suTMu499/z4UlKyVb1ZXI2yJkwxuBiub7kXPNrdTpNQQ0ICQgF\r\nqRSEdIAw0FWx0RHgYBl/L3YuyKmhxcKrldKi4fMaM8s4+Mc/x4s1xGNM4x6zVzYBENxx5OwqOlnY\r\nJONx4/fl1wF8zj8lJBLZgEBwgISAEhKrxTKAMhAITBl6pZnCbHqO6XSKoihaSlZrjdn0HEoCuirw\r\n6aOHQXnmnRTWVHj//fdDXsNutxvkgxQ0BxA4K5PkKk/S1twURYH5fI7ZbIaiKALzqtfrBXBsPp/j\r\n+fPnqKoqhL0I4VmQlIOKs//G43Fgb4zHY0wmE4xGI59z0eSQ0p8UrYslrEXNjtVYLtewzjvmgIWU\r\ngLGevTKdTnFycoIMMmwOo2EfZZliOp3i/OwEs+k5BoNBqPzZ6XQgBdDJEmSpCpsNrU3aeMmAp+ci\r\nEIQ2L6qKrrVGVTO3aNy9nPjQdiEACkGUUkCplAHPLG8nY0JxpjPNFwFBBNZwFhuFumptWmy2NM2Q\r\nplkATX1YawUKzw/yV4Nf8WZHf18sFgF45MxGYiwaYyGlgseUfYitECWo+AfPKedDMBMkiQksJG1W\r\nrXXHxwJAAKv52m2F3gqfY7AjJZIsC8BaUVVwNSsrjF2WIanXVsNQ9HMlJekpiarSmM8XkHIFY2zN\r\nBlTIsg6yrAOlEgghkaYljJvV8+jgC0M14+t1h63HxH+G1jbp6G7i9TOB17SOaS3TePNDH75vkVaK\r\n9yauvzmAzvc16ZHVyy80e2NVA2EQzYGZcw66NoQMAyebvaFh6xX1yXHcR2qDLA9jwT9H7/H9jBrl\r\nwep2u5ityhZ4S+PLf/K+kexSldw0WQY2YVEUWK8LuDqMfLlcod/vtZi+1B/Sq1RNnljypBfoGTmY\r\nzGWX9o+YochBaAqhIVuKPsOZmPzE90XGMQHf3CZrAdAvQeNgNT1Hnuc4OjoKLN7486vVCsvlEjdv\r\n3vw6unzVfo1aDPrFxAKyjbitFeu7X0UH8apdtav25ZsAIJ1PQSGdhbxYo3rrDtJ//CYWIsH85AJ7\r\nW94v2oQt8N+/jsb3Z/KVOh2fL54OyJ1zGAwGoa+kIyeTSfC379271yIyxIfpBLLR9wEE1v/PgwfR\r\nvz/PASf/PCeN8UPcF91/k77/VWlJ7FzwDSs+rd70cLFRxh20TchoDASKDcw8DsbxE/9N9+dhNvQ7\r\nZ0GQMbmJmSBEk6OQ3qdx4KFHL0KHnXNIFSHUPqeVdyYJAHBIEy9EVbmG0SWMLgFn6sT07ZNE3wcV\r\nmCtaa1hXecMCCawzgUnQ5CTazCTgJ//ccYobAQok4NyAIZZAPH6fFWYUj++LQFf6ydH0TSelLwKF\r\nX8SiiN/jzEcAl1hYvG2SL6IuA02oIP+8cG0wkIPgBIDFzinQsFdOTs5xfHwcwDQK/SOHlJ6B5JHA\r\nP3Lmuv0eVJr4nBICgBRwAhBKotP1rDHhqMKzz1splER/OPDO6mLVCpelMG3nXHAUKaSXClhQ4QJS\r\n/KPRKIRpffTRRxBCYH9/H5PJpAW85XkeQERyZDtdnxfUOF9gxDmDogZtjLOQSiHJVA24OCwWJYqy\r\nRFlVKCuDhx8/wHA4xM2bN7GzsxOA42fPnoW+DofDMCcUrkjydHY+DcxEAhH7/X5Lf23SaSQTxrar\r\nWfO1QcwyLsscAPBgQcOw44w0Ag0485a/6ABgMWuAOmLEkJNPuk8pX8yF6zQCGDgYQcAjBwCp2nW8\r\nTui0Tgh56dl4oRBivvF+U1NKASz1Adc78XoF2uwzek7OAiIjgcBZHgZLa5PPKa0nujY/2KB/k5zT\r\n92gcCSherKowlgTwxMxRro8uHSIoEXR9Ua5RVimsM4BwsM40YcBCQQoJIYXP+ScoL217X+UMdudc\r\ni0XI36cXT1vgQeO0NQaUb5MDiPSsxpjADIznl895DOjyNQDn6jy/9d5Qv6QQcPW/uWwAPu9vQiHZ\r\naR6YqjzsnPYtnjOX+sXX6Hg8Dqzk5XIZKvKS/FhrAlDIx4XWJa0DYlUTME/fp8M/nn+X2GschOXX\r\npnkEEMK2ORhO7FC+P8ch33TdmMFLuoEzFF+GFtsLeZ7j9u3bKIoCjx8/bukBGr8kSXBwcIC7d+9e\r\nAStX7SttXEdSI/+I6ydaa5s+f9Wu2lX79WwOAEQd3eQkujtbyHfH3t4pgTv37iJ1TRot4OWrdB3b\r\nzxTpQAegMZZBNklM5OF2R4zfxAfX9N7P28/YZvw8ejjGGsh/j68Vf/6L9PFlaAkPB+EGOj+55mAL\r\nEOXxqcENPol88+Ohbvy69HsaTXD8M14A8Ya6CcTZ5Ozx14uQ4XgCY4HhfQvOlvPuiq0ZH9YJ8KIW\r\nnU4GpzV0VXm2hKiQpBXSrAKEQtZJ4SzPBWdqENEDgSqRISzJaIs01QH4kTKBklQgoA3GBSfQVICz\r\nkMKFF5ypi6iYSwuWO4ccAY8BUL5Q6D1y8jigwAFFDpLQ9/I8b4GdJEPk3BP7ZVNOKx6y+KJG7AgC\r\nqck5jGX6RW0TeMydNefqQimmltfAoNKojEaWdyAE4KxBqX1OTA5IzudzXEz9yzkHlWRIsxxJ2kEn\r\ndzg/P8d6vUZ/MMLu3rUAUFlrMZ5s4/aOT+Q96PUhIaDLqrU+E9mAD9yJp/eyfj+sU57Xi/KdVVWF\r\ni4sLlGUZ8heWZRnya52dnYWNYLXyQCKx505PT0MOi52dHUwmkwDY0HiupjOkmfKFrJyBgEWnDtFd\r\nLjWUlIB1MNZX6Dw9PfVypR0kBPJuH9o4TGcLDIZLX8W3P8RoXCLNcpyennpQERIOHkSBkCEZfL/f\r\nD0BbWZaYTqdhQ+NyHB9C0AboAUtf2dpanqPSv8qyYdl4eWv+RgUxuEzzdSiEZ1MSuMXDTkm2R6N+\r\nYAn559A1WNDkXXUuhRCAMU3IN4VsviislDZpYoYDDSDCGUmj0Th8np6Dg6TdbrcFTHH9AjThiJzl\r\nxfci3icOkAYZh4LwWJiXawkgzSDrxMp0TWssyqrRL1mSQmadSznVOFBDQDIvukB5QukZ0zSDlL6Q\r\nDel8KRUD3y7nXm3pUQvA+bQP1llY47BeFTDaQqkler1e0IO8yjQVT7JodBk3Wuj6pFtp7AjMjQ9Q\r\nNh3oAIATAs5amOjwLEtToB6H9vPYprqzEEiUgpO+OjL/fnMvvxYF6dn6Gs45GGtR1fYHb8Q2FNYX\r\nnKHnoRfJqTG++A/XhxycBACpBDqdDEpJ5HknhO/6sOYS6/UqhOHwHJBx9WM+dvQi24mq1cbrgIPv\r\nzZ7eANzc+IxTS/B78+eheeDs0pDflT37y2ascp3Agfa33norVBjl9mT8+xXQctW+yhbbycBmOzh+\r\n/6pdtat21YQAHAS0s3DaAZ0cmbNABbi+gkMbl+AYyufxU7/qxm0aHs1HjGdue3I/YNMzvAjrAZoa\r\nE3QN8jcpbdNntRdd9/MCf0Db3yf8gr/P+7Xp/V+lFmh7sXMSg38xQ4QMSY0G9OEDwA1Pfj0gynmV\r\ntI1xDrTESOymDVjya0WOp7W2YREIH9LkwFgJuMxEBNpO8IuYaaGvFLon6rh+ATjpAUAIAQMX3nPO\r\nVycujca6KmEFMBlOvENr/OetrfvjBIRwkCKBsw7GWTirYS1gjEOSZJDSAap21KNxidF1VztjzrYr\r\nAKedbgvgo7+R88Rz93Eni95frVYBPOEOD32W55DiYxxfJ5Y7+ncMeHCgRAgRmBovatQfkgkC/wg8\r\n/FmJMjn4SCAAv6dMVGDaOUfz5Fl2QkmsyyIw51arVWCZUR963QGETNDtebp03u2j2xuEXFkqyfDh\r\nhx/i+OQMW9u7SNMUZWUwmUxw8Mod1NHGfk0KAVuDd5xRwh19ozVKlmA/T/3zF0WB2WyG5XLZYg/1\r\n+30sFzOcnZ1huZj5PFjOoNftoN/v4/DwEIeHhwHQvHPnDobDIY6Pj/Hw4cNADaciH+TIAjVr2JZw\r\nOgFsBSU8063f89+xWuHi9MTnHzQlzs9P8fz583ruMqyXS9x/9XWcnJxgvljik0eP0ev1AvjWH4zg\r\nINHr9ZB3+0jSDoRM4ABU2gKwocw8MS3n83movDcYDLC1tRUcdX7IQTnwykoEmSAHP03TEN5/fn5+\r\nSbY5YBDn9KJ/07pdr9ctNhbJbfh+knt5shUqbWCsAYSFcsIbG6YEhC+skWZeWIwxUIlfm6tlEWSZ\r\nryvqC4G1vHCJBw49+EAgaRPu7w8jPCvNIc87YfwoBJpXY1Uqrde0DS/AgIobxcw2wIXPGOOgBGCd\r\nhYAPq1dSQKb+UIRkvKoqFLqCrmU0SfzflVTY2pqEPJGU55KeW0qJ9XoFpRSKYo2iWId0DfTc/WEW\r\n5JnmOM4l2e5/Wwc6JyBEo2P99w20ppCHDpwTkNJCSp8n1s8Pwtjwtkmnkv7ickz36+Xdy3uaadJ6\r\nEJuSH86Q3vT3qWfS1SHIzsExljONCWdDchat7PZg4OBkfYgGNNeUwr/Qthn4c3Vy5fdJCSSJhLU+\r\nT6SUHiA9Pz8NBVV8NW+STw/WJ0kGqQQylSBJpS9AowAhHaoKePrwKQaDQQh1ISYmZ9/zf9O48wru\r\n9OJ7MskDZ4vySqzEZB0Oh1iv161iSpz9R2k9OGDOdcWL9Epsk70sjcuh1s1BJ2ejc+P8ZWNHXLW/\r\nn437GCSXXFZfZN++TA78VbtqV+1rak5AWIFUOB+d5YC5EJCpRM8BHQAOTd7e+CDs69YhvA/W2paN\r\nSY3ep7BebnPQc/DvET7Er9/pdFrRhkBDEPq8LQZPP0/joB/38Xg+bo5NxHb9rxrwBwAJhRSSMwM0\r\nlVCNMa2k17HhDQDatkOcyDiO0VMCh3jeMW6s8s2SCwddK25BWFTSmgDuvFrRhJEloh3DTZ9PBoOW\r\ng8RPzElYudBfRuW98ApZ/+7aIa4+Xxlqlp43VrVxmM2XkHINYV1g6HQ6HvDx7BqNSlNoVTeEjxZF\r\nhaKo0OsqdLsZ8o5sOecxC4IKVjRjDUgBn/dPCFTWBtCCnA6aM87cixcSHwtC5duMjppZVocnUYuB\r\nXHKUKYyKrs3lg/pFpwxcPvm94gXpnGcecTZqjNoTyBYbbdR4QQVaC3y85+uVz/nGGBrWWuR1nqKy\r\nLHFydoZnz58HFgqBTb5aaAdp3sVWJ8d6vcZivcayKEPFyazbw1v/4NsYDocYDAZBVoQQWK7X2N8e\r\nX3L4CIyharU+R2AenqcqfOh4t9uFgM9hd3FxhuPj49BHcmC9PAC3bx8gzz2T7uTkeR1KmmJnZyeE\r\nJY/HY2xvb4NOhJIkwWKxCEq0qqpWxWtrLbYmviKv1Rr9ng+vm8/OgpO7s72NTz75BA8++ACnp8fo\r\n9/vY37/uASyR4OjkFFWlkXV76A0GYeNJkgSdXg/j7Z1QwTXP88BSXC6XIb9hp9MJockEzlIONkpA\r\nm+d5YP4Q084XZfGsoERVgKuBXe0goJAmHfR7w/Ds1lrP8q3ZYUpJILkM0HD9Q0lzrbWtkP+wXpyA\r\nEAmE6EApF/q1XpdYrxFkJk2TsJ61rlCWVISl11ov3Mmh9zYdvFCfF8tZq7CMlBIODg4mhK1aC/h8\r\noxIQ1uePs94A6vdGIY+iHzvjP0/MyLqgCupbOwvoysJorzc6qmaGJQlkmkIFY8LCGM/glE4BRkHY\r\nGpQyGrqwsFWJUvuwyqyToJMPA7OxKAqU1RqjUd2/coV1scR8kQRgt9PpoD/YgZIpRKqgZIpEVVCy\r\nqaxKQDavEMsNDBPGnB6ynd9vtSqglEZVGVSVYYVXalm263hrDPtsbGgBTZqOcPgCj7QR247LoXMO\r\nkArSAYmQkMozjm2lsS48Y3Iw7IeDNMH26nB4U4e9VjV4KISATFOkdeqC5XrV2jt4mLQCkDJdAQcf\r\n+uz8XuyM33cFAJUopFDo5Cn6thv6f3JyEsZ/vpgGnU/h/9Y21ez8nubQ6ShkWQ8AkHd6Ye6m02nY\r\nU6kaNDFbeagxzylITO+GTdhU7ebgKn2GQvQpNQKlfqDf+fzQtWlPoL2esxfpO5zN+jI2bv9tci64\r\nTUmf53rqql21X0YTQlwqsrPJMeeyegX8XbWr9uvdHAALQBqgSBxyK9F3wFw5OAFY4aDQBqziA4Sv\r\nu1EBQ24fxodvnAgU+9wNhlEEX4oz6wC0wodjXOiz9Ci3BchuoH7GER/xWNL3yCbr9/vBHgN84bfV\r\nanXJJiH7jvy0l2GOfp6WAE2OKX4yDLRRZ27UA6yKnGycCw7e0DX7/X7jSKAx8kMonGhOxpuQpiY8\r\nlFNH6fu8OdOAXXD+d8v6zBHjwPSjvzkH62Trs/Hz8vtR39toNw8bpruwsOY0i67j2X3WGgAGFxdn\r\ntYPfR5JIKJXW17ewVkOqtJ6b+hpO1ifhQFFUgGgDPzRHm8Y8PvkHAJnmIUyKHMM2uJG3AF8+VvHY\r\n0L35QiTm3qYx5t+NAQcOOvA+xw5AHG7Fv+9cU82UV8Wk+/GQ9E0vAAG0IQeNA9d0ckGONgdeqZHT\r\nReF7WmusVt7hlVLi+Pg4ACecHUNJ3be2tlqVVklp0ikJHxMenkj/Xq/XgclGFZiqqgrFOfZ2xzg5\r\nOcZPf/pTPH36FJ1OB9euXatBU4GTk2MUha9Ctbu7iyRRyPMOlssljo6e4dv/+r8ZFDMVKqB56ff7\r\nWC6XobKTcy7kECMdsV4/R57nGI660FpjsZgF4M0Yg+WyRFm2AQ4CdQ8ODnB4fNICvomZRfkLKVyW\r\nh9RRjgqtNQSSlrzzHHfWWsxmswDAEXDA9VKSEDgBpKn/aa3FYrHCalXU4LJAkmSttRlCSLPNm3sM\r\nvtFnOIPL65cEDhZSOaSZD2tWCasGawpYV8HYJl+lVA55N0XWUTBVFq67Cegnpg2BnvH9VelgTAVr\r\nNazVrCI5oJRnYQH+387Ri/YRh/l8EZ7Zh9Cq6GBoU05YVvGV9AeMB4JkXS3cVrBOAyKBVECSSkAk\r\nMIafVnodC1g415y4SglkWQKlBKzV8Cwxyq3mUFUSReHzU56eqgC+JEmCPE9DJVkC+amyu2fwNUxj\r\nIQSq1WbwjjObiZlIBy15nofcoElXvVD/xfqO69Q4xJfkMnZY6Zr8d/q+v5cPefbv+3n31/DzS2Hv\r\nJB/+gMSvaSEEst7g0v7P55rWITco+YGgtab1vPFa6tZ5T43h4dsaq5WXX0pRoJSCShSEkHBOtPQ7\r\nHerQ9Sk/6GKxCNXQuX7hBibJRZqmLVAuDl+Nn5eYqLxaMv2d556lnJr8IIzYwVwe+P7Hc/+9bI3b\r\nKtyB4PLM55f+dgWwXLWvstFaomgYABvlMLaJY0D7ql21q/Zr2ASgpUMqgUQIaOmQQGBY4xFS2poU\r\n0D6gI73ydesOIUTwmyinelVVeOWVVwL5Q2sdfFKyS+hw8/Hjx8jzHNeuXQt5omnfJjxICIEPPvgA\r\nd+7cCRFRUko8efIk+MGfp9EB6Gq1CsBcr9drPUv8bADw5MkTAMC9e/cwnU7x8OFDSClx+/ZtPHv2\r\nDK+99lorzQ3Z50SS+5UE/7hTyTcrDrRwx4E7GlJ6Gjxl3qNh9TnlLHRVeeEmEMcYWONzzikpIUUb\r\nsKJ/Aw2Cy8HFuB+l9uyktAZ5KKSSTveJeRc7B/R77PDGRiYHJPn9G2d884TTdTqdLHLc28zCclkG\r\nUEmpFFnmnURf8VdBKgdjyxpESpCoDIAMbISKqr/WoWjkCPCKfoHlUQsuvz9EkwfLuSbBPy/BzZ1x\r\nDhwC2GgIcQR+k3PJ708ssE0Oawz+8fnjjkE85ryf1D/uRGxyFuM+x88S34NaDLhyBxpASAZPY3tx\r\ncYGLiwssl0sIIbBcrgOTJMvyUDmJwtT293fDs3qnT0ApCSlr504XIfRrsVgEUFBrjePjY8xmM1hr\r\nMRgMcOPGDUwmE6zXa5yenvrCHcUMZxfn0NZAKAkLH7qs0gRpJ8NitUJZhwpbAKPxGGmn49l61mJr\r\na3wp/5Xvwxjb2xOsVk21b+/UNUUcfDjlHKORZ6ednJzg8PAwrOH1eo3z83NMJhNsb2+j2+1iuVyG\r\ne2dZhslkEkBOpRSGw2FIvs9DUwm0o7nO89zLdrEM1TqFEK28XgAwm81aIDEByk3YYyPfdD9isq3X\r\n68CApD6QHITDD3P5cIHLJZe5TflNmzUjkaYZVM3O4uwgrQ2qqhlz3x9fuKJYNeGxMes5lnNO0Q/9\r\nV4CUFlpbVJUJz+nHQoHCWpPE5yiVUkOICkBVz/EqjGeSeDakMRJai0trftPLqqYIBfU9XvNkhFAI\r\nczuE30Ap1AcvMqwtpXgKDJ+CwVofjutcGQ5fVqsiMEuJDZYkGdK0U9+LwjEJCG0zs40sW8/I55Vk\r\nijMHL7FJ0nYRGb5/cwCFs1VI1gDAunr/g0NIngimiyUg6nyGgkCZSJfytRH3n06Kie0Wg8y++rmE\r\nBwtVa00J4e0LKUV9+OVfPvTb/5sK5vA1xA/ger1+2A/jYhy0Tmj/TJI0gHFCeIO0kwuoRHg5L4Cy\r\n8AcF3K6gsOJutxsOgqiRzPH9hd4jXcBBO5JlYhHyPS4+5AMaXUqf54du1A96zjj0e5M++bob6Rau\r\na4C2fHHbbNP+T5+JLgznNGwtaso6OCFgYKGEAhyghfKZYZ2AhoaVviBNav0aMMJCChmY2z7cvWZy\r\nC39NSAtAeZqHcLDCQjpAOOWprF9ybLj9yeXgZzkeHAh+0d/43+ODhE0ROPE1+T4f64b4PpuebdNn\r\nXvT+V91Ih/I9JP49HKax9zaNCd+TXjRPm56T7kfvx7YqfW+TzRDPV9wv/jsHNPl1uKMb9zO+5xX4\r\n/tU2B58ZysEhEQZwEs5JSBH+CofL7KbwbwfACZTSIXMOlZDInIOTzusvSPySl9ivWXOQsNCwSClX\r\nmJRw8KnBlEjqudy8j8XrfuMdPmO98/e+UO+ZTgiRFPN5uOa7774Lay3u3buHhw8fBl/q1q1b+MlP\r\nfoLlcok33ngD7777LtbrNV599dUArkkp8eabb8I5X4Du8ePHuLi4QJIkuHv3Lt577z1885vfDH7r\r\nzs4Ojo+PsbOzg4uLC2itsbu7i/F4jCdPnoAiKs7OznDjxg1IKfHo0SOsVivcvXsXh4eHKMsyFBV7\r\n9OhRsNEoAvajjz7CvXv3AjD59OlTlGWJ8XiMyWSC9957D8PhELu7u7i4uMCjR48wHo9x69at1v7M\r\niUovW0uIccSBIu5MlGXZ+kJDd/zFAAAgAElEQVT8ENa5+oyfGBjhg4AQ4e+kWehzEMJX+nUvNiJo\r\nw40dI97IUKRNlhwN2sz4prsJ/NHWtO4XK07+3JuMn8+aU240caZcy3mt2SHL5RJSNlXseB6hYl2i\r\n1J6hIlPZWoAQTU5GngicXpRTiF40v5x5EANy3EnkjtomGeAOZmz8kCNDv28CFuLP83mg56LvcRCG\r\nnMTFYtG6Px/7FznU/PdNi5L3I8/zS9cnY85ai8o1BQo4QEr97XQ6IeR0uVxisVgEcAgAOp0uut0+\r\nBoNRAA8I+CPGH93Tv3zONCk9o1AXFdK0qbhJ4V/kVFKuwbOzM1xcXIQcd+u1B73e//gD7O/v4/rB\r\nbUx29z3YBWBVGWSZwv7NWzg5OfEgEgRk1sH2aIy9Gzdr+ewEXUHjwBmQ3W6nxWj0RiKBMDoUVDg/\r\nP8dHH32Ek5OTOjeXwnK5DPJDTCdrLebzOeZzXyDl9v3Xsb+/H8BAAmFofrjcc9mm9aIyFeaExo9C\r\n1QlQpZ/EhOXsQg600fcpdJ7rzzhnahN+2c6NRp+N10a8Rvn6Ccwlxubha5kDL6STQh86yQsrhgrR\r\n5PDkIFJLf2piHkkYU8GYClqnAWyjUGD/fQ+yOedzs3lGZHJp7cYgaLx+YxCL71+08XNnJN7T+PhI\r\n6SCEQ+2ts/vZ+v0mn5yU9D2/fqjPRdEJ7Md+vx+A5SRJoTWFvAsAHmz0rO9Gj/Gx5zqJO3z8d2IP\r\nV1WFrszDPkGyQ9fdBBxd0nm2zeB+keP+or/7cbs8T/zffPzpb/HhYuw80u9cbvm40PU8c7OZZ/6i\r\n6/A0CCRvlHahXfAFrUI/Sik4IyBFUod0Z0hUgfW6CN+fzXzYOwH6dAjHGe/xXHMwgdIsxKAC6aDY\r\neCRZoWekeefv03oincD3Jw5+v8im+jqaB+KrMGZUVApo1jiAFijIdSvl4eU23CV7TSYwFnASUMbb\r\nXiZTEE4gKf1BhjMOrtYHDgZSSRgDJM7BSAvtfCh7VRaw1iBLEyjrweICEtaWcEICxueStFhBOgFh\r\nM6gvUVw5fh6y4WL9zIvCkDxw25PYGcTgIFsmDr+iNQf4nEu0TugzJKvE5OfX4jmbsixDURThO3wN\r\nkGzHDFT+N35g/VWyX7hzS+HypCeca3JNxjmsSZ+QvPJDF0r7wvP6fhYIR2PK5ZfbVbSmKRUJzRO/\r\nHo0RpQjhfyN7iNYTzbVSCuv1OtwrTdMWy5/b4PQsq9WqdaBKfb1qX03z4J9A4oDSGVTwh/VSSlht\r\nICSQbtAvYX7gsJbG50QurS+AZwCXAMsMyLSAxMsHUPy9ac7vKUIIaKngjAWs8YXQBFBq41OnvODw\r\nAxv+9qJGe0FsV/8iGukA2keklHj27BmEELh+/To+/vhjOOdw9+5dPHz4EO+//z4ODg4wnU5xcnIC\r\nALh9+zY+/vhjCCFwcHCABw8eYLn0xe2SJMFyuQzppE5OTrC7u4ssy/Duu+9iZ2cHh4eHAIDd3V08\r\nffoUb7/9Nv7mb/4G/X4f3W4XR0dH6Pf72N7eRlmWODw8hNYat2/fxuHhIVarFd5880389Kc/DWmx\r\njo6OsFwu8Y1vfKO134xGI5RliX6/j9u3b+PBgwc4PT3F/fv3cXh4iKOjI2itA6BJupLGCrh8EPOy\r\ntARoV+ilFiPOm14AUFUlc6QaB4sbIHQ97uTQtZXcHNbLjRDuXG86cYqBJ/o+sdao8fuG9+zlxJD0\r\nPDGYxJ2P0H/VAI/NNZp+EuPGf8YBoconXcOHrK3X62Bc9Hq9AHZIkUIrAykBKRII0QYzCRyhseJO\r\nTpqmmM1mwWig96jF8flkKPI5I+MnNk7oRfPJHRL6LhmHfP75/HBwjzcOknDweRPoGBLHM0XHjcd4\r\nzuOfmwxP3uKwK95XIQQSNv8k+9wI1FoHJh8ZwovFIrA0B8MtdLtdX6V2Q5hqqjxt2lhfCdTLvAhV\r\nMZfLZcjLx3MxrFarFoNivV6jKAo8ffq0ZgL2sLW1BVFWKAwwXRYo638DQDFfQesZDg4O0BttoS98\r\nriskHYg0R7ff97kRprNLMkThjkVRYDwehznlzDgC8KpyjfVq4YuhLOdIlEC/l3uAdL1Er9vBerXA\r\nifbGrK4K6KqAANDrdUMSfnK4yeHlTFaaH2N8PjeaK5oDAk8anVYFx4rA0qqqQnEbvg54wv0gE/Vz\r\nkv6hftB9Ka9XnudYri7Y+iD5a8CING3APA400jxX9UGHkBJS+AMVUf90ziGvgWC7WkEbA20MhNZQ\r\nWgNCIE268KGOnj1Iz07PU1VrNqY+LFIIGRiGEA1TmEKnSc/wgwj+bw5SDgaDFkAZjyPXb7GOB5r9\r\ngZzeeC+jkASeA6+138jkkt7gPymMgeSWAxHUJwKB6BCn3++HnIC9Xi88HzHRqbCI1jqQgbjTxw+8\r\n+HjQa71eY7VawVqLoRsG+acDA64/+F7myChh1yaHIeg951lOdIonqKiIY38TnoEA+MOzuPG+z2az\r\nls7lz+ScQyKJsegrYdPhRvPMXjbBqin77/r3BGPGcB1EcxoAR2OgnEPiHDoAVK2jV0sfds4BVUqv\r\nQABekqRI0wydTo5OJ0eW+TmkNAFaG8znC6zXngXK578oStY3hTT1ayc+KCJmIgEQJKuxvMfAN+Wa\r\n4bqf5JQ+Q/qNWPYUfvyzimX9MhuXfzpU4XstzSOxFuP9nn6SDROvG+ccnKkgrYORgLVAR6UotIGR\r\nDtLV3JmaTZp1uvB5Qx2UlCitA+Bpg1VlIODlwugKfmFIQGRIIeGsgzYllFBIKYwcZP99sRbbx6QX\r\naY1zYIzGgDPHqFFUAL8mAUXcnuSHPMSUJadPCBH0KuW25HYeZ/bT52hu4gMaskHpuy3bnNmcQLuI\r\n3VfROCjG5S9JEhad0xzM0bOSzHI7iL5DOsTn100u2cl8rPgeAzQAL3fmiaVHh/ockKX+c7CO9lH+\r\nPdIDvA+cYcgPa2lO6NlDTus8D2kJOMh81b6a5pyDMEskaQ+VBUQiAGlgiyU6sgNjgFLqS98TQvgc\r\nzNYhN11Y7VDAQXQUXOEPIoUGMu1QypcPoPh705xDYgCtHKzVHma1DsI5QEpoXW089N/0+4tv0dYF\r\nMYbxZRr39+keh4eHGI1GIZXUkydPsLOzg9PT06AXut0unj9/jvV6je3tbSwWCzx79gz9fh/T6TT4\r\nT2TzVFUVQEWe1mo+n2NrawtKKdy8eROnp6feP67vk6Ypjo+PcXp6irIsA2gHNAVDnj17FnxwsonO\r\nzs5wdnbWspecc4FF+OzZMwyHQyilQgRfv98PYOHe3h4uLi5CTQC+7/L544ctL0tLOEtnk5Btep8L\r\n1SYnhW9UtPlzo4wDeZy1F4Nulxw19j4NroSAcPC5/rQBbO1Q1O+nqjFiHDnV9bO96F4xyESf3cSM\r\nI0eFO53xZ3njBoR/Iw3GP226JNRkBCuVotNJaqq3axsMiYJzFkW5RqXLADRJJZAoBesMEpVAKgEI\r\nh0qXob9ZJ/UbiRBhfrjBw8cklglubMRywccvBgT5e9zYuzQuaLMZ4u9TI2Ycv0/sPMfOJ/2bX+tF\r\nn+Mnve15r0/F+4NLrCqgKQqitYaFgxNAp5tja2cbTiCEqfZ7EyQJr5aKAJ4ZY7C9vQMlBSAFBL9P\r\nHaI4Hg/hGUqidjYLXFzMMJ/PobVFr5cjzzMsl0tcXMyC4uv1BtjZ2cOt19/EyckJPv30U1xcXKDb\r\n7WJ7extKKZ+bUCiMJ0MMh8PAgnTOwTqB1bpEv67mS+NDrEYqnEHPRQwwYwym0ymePXuGk5MTGO3z\r\nGna7XYzH4+CkTqfTIIPT6RSLxQJJkmA4HGJ7ezv0J+vkATjlzqGxVGEWdaiWQ1FWmE5n4ZQ7yzLc\r\nvrEXmIYErpEjXhRF2ETKsrzkqBCzkzYSrsNoHVG1YwKpaCwC4Li+fKDAZS1msPFmrQ1ntTFoT40A\r\nTlqbJM/k/Pc6TSUtzpaOdSFfE1zXGbZ/cECDcpvFrES+5pVSSDvdANDGTscmfRHrDSmb9RgDgbR+\r\nORgZ6xxiWPE5o3HnexUH03jYMD03hYLywg4+bH+/BXqSfJO+r1brsG42gRbEYicmJT0TjRnNIy8k\r\nwasR87BSam2AUVwa68/jcIfrWYe6TgmanB8uvJxpM1WlEJCqCVG2G+SLfud9pbGmuaF5oAIv8d5A\r\nz9CqzF7vq1y+4WxLbjiIlqYpnM1rdmjDyPM/fTjzxcVZGHc6WOBgLz+Q4PJH98jzDsqyxHK5DOAj\r\nX4+cLblpT+PyvEl+VqtVsLHo2QnYfJmcdd7v1WoVQCoad1oH/FClOWBtqo/Hdig1GicFwMIizRKg\r\nNPAVog2gBKzQEEoh6WWorIETPi+0dgYyTSAr4Q97ZT12UsKBmIiAR8UFJByypJZDA1hICKkgcNk5\r\n/3kbjUUTnt6MDwE9XG/Rs8f2N8klZwBydh7Xoc65Vr4n2vcIGKT7kr7ibFQArWvzPgLt/JWxb/Ci\r\nffCranQ/ciipfzTuHPykcSW7gZ6NgFhKak/rmewA/hy0L9Az83vH6zs+JOfEhizLLh2y8/nlfcuy\r\nLMyRlPISiMhBS7oeB5rpvvwaXL6u2lfThAAS2UNlBSASpMbVbOQMNklQWIG8ibtrvgcP/kE6KDVF\r\nUkkkQqHUFjaRSJADicCqXCBRny+n2lX7Ik0Ayh8eSQCQAlZaaOezQXTSDOGc1bXnMbZ5v65Geqgo\r\nimDXaq0xmUxw586dEH47Go2Qpinu37+Pfr+P58+fA/BMvdlshtVqhRs3boTQ3tdffz3olfv37wdd\r\nS/ppPB5DCIHJZIL5fI7xeBwOul999VVkWYbXXnsNALCzswPAkwootRYdVKzXa+zv72O5XEIphfv3\r\n70MIEfxOAIEEcv/+fRwfH8M5h52dHfT7fQDAN77xDXS7XTx79gy3bt1Cp9PB9vb2Jf/rRdjJy9QS\r\nMqrikCgyguPcK/FP2ky4scGBAE5Xp2tzltSLDFraVEKVTOZ48s+nuVdYxpiQq0wpBZUkMM7COAbY\r\nsP/8jdDKOchDr2LgLu5n3B/+GXqfnjceN/7vVCRwMHBO16BPBSkXcE6gKCr0ewP4XFkSurKoqiIs\r\nwiRJoIuGqZMkCaRQsMbBaIvS+e8HRkDVCKcVDkJYrOuciWQA8lAS7nzQvHFHjJ4hBo/537hhxxuN\r\nAzmnm5h79BkOIHCnlBtd8fc/z8LbNKcvcq5ixlUwlsqqLedpnZNJODghkWR18v9KQ2UZenkXbjxB\r\n1asNLNdUGybatxMCUghYALpOmG/q8DZynoVHvKGUZwIR82exWODw8ElgrfV6W3DOYTzewv6+wfn5\r\nOU5OzrBYrHB6eo5r4y0olaDb7cFaVxf22EOv16uN/CwwWYjJS/KmtUaFJq8i5eijULY0Tetwds/g\r\nJIfh4uICx8fHODo6wo0bN5CkHYwn24Fld3FxgbIySDOv4KezBaRKsb2zixs3bmAwGKDX66Hf72NR\r\naPR7XQgBLOtCKnQSNZ95FpYUQKU1VssFphfnmM1mTZivMOFa5PQQOEjh01LKVpivc/4karFYoCzL\r\nMPa0gfBNgE62OEBMBrk3stON66vRr0m93qi4gVdcnn0nIcnBMj6Xqo5AsjRNkSgFZBlkrU9D7jWt\r\nMStnQZeQM0LgEnfy+Jrk14/XZKzfOABITisHQsqiCvqMVxqn/YO3WCf5mzbhTfR3GltivvL+c2dO\r\nCNE6CIr1BTk+XL/QK96H6BrEELXWhiIdlBOO9GySJAEkhG4OfPiz832Exo87go1xYWGNQWktjNbQ\r\nVQWjNUwdeux1EWPI+Y6G6r4Omxn/1PgeGP8N8MGRUogW+FeTBGGdQ97rXmbvMzCzMO1QNxpH7vRz\r\nmyGeI8n6tGk+4veFEFBsPKXgBa6aKrwE5ErYIK+c0SulhXMKVdUL4C/ZKgTI0mlxkiThkIo71UAD\r\nLtDf+HVInvj4c1CL1hc1HubHx8EYH1nAq4Xz/fJlarReOGuJwBNuo/Fx42GVwGUWrX9TwiQJ4AAl\r\nBUproaSCcYBIclhnoeoiQVKmcNbfQ8IASqLUa6RIYEyJNM1RWo2yBJI0hRMSznkdrZ2AM57R6wA4\r\nUR/cwfp0ml+w8cOATQcynGUOtA9wSK8Qk5qzLOiz3K6LgSja97kvwA8m4msRu4wA2ljOlFJBFvmB\r\nFP8sB/vp+X8ZjYNd9Nxxn6l/nC1HP0kWaT5oDLlNTbYT349ovXM/jIO88X5Ast3pdMIeywFecpzp\r\nmjQ/HACuqqqVWJ/3i+aaA4EcBKQ+xSz4q/bVNOcE1kZCJwJpKuGchnAGSZrAaIOhymA3Hi648P9K\r\nTmABdFMHBQsngGXpMCglsm4H9sufTVy1FzQngEICifPh1cYZOFWzMiuDXCVN3YTIpuE/P6vFhz2/\r\nyPVI651HLt2+fTv4Ent7ewCAxWKB8XgMY0wAzG7cuAHA656dnZ2A62xtbcEYg62trUCwoHBfjh2M\r\nx+Pgh43HYxRFgZ2dHTjnMBqNWvbMcDgMOm4ymQT7kYo2Oud9XOdc8GkHg0G4H/l/SZJgb28vfJ/8\r\n4dFoBK01Dg4OAHidSN/nh1wxfvCysf6AGvyjwSKHjBwvYhFQ2wSOZFkKAebwAnDWRkU9RHA66Gd4\r\nMfmMhf5FaDd/X6YEWmkftpEoJDXbRVsbwpI2OQLOOR8uF218QFMBmW++MSjlFwM/5aQXG+BEse8B\r\nxvhKiHSd0pTw4SQUvqygtXccy6JCN+8B0AAkXJ2HxjoL4Xyi1qKgsDafYN8Yh7L0xUGE8M4HsZms\r\nJeZS00dt2+we7uAD7Y2eo9kxW4h/huZICBGosFzOuBHPjb64H7ETHJ8Ix6wOLjv0XV5ZKFak3NDb\r\nJNu0Jj5L8WrGCJNS+sCgWolorf3z05qiRPNawxkD4xwgElDerCRJoFLJnBmN1XzaKDdZj72mPGXA\r\nsiown889m687wHw+xfHxEYxxIf+fz4U3qu+RYT7zIN1i/il++tHHuHfvHu68chvG+Nx2sA6DXp0z\r\nofJAntElinU7qby1FivdhJGcn5/i6dOnIfRxPB5jtRKB7aa1f86iqLBel1itCrxy+y56vV44fTk5\r\nOcH5xQyrdYlO7tl848k2bvb7uHXrFnZ2dmCtD12rtMXWaIiyLEPevm63C+ksYDSks+gktXENB6cr\r\nrOYznJ8chxw9H8Mr9N3d3UDvpv5a6/MLcvCZ5I5AtNVqhcFgEAx7/lnaTLh8EwhCOR97/WzjZh87\r\n/1xmaUPyH6xlNgLCpVJe7zpAQiBVCSREYETDOhhrsC5W4XkbZpJ3ZIUA8pxy1jWMJN5XY51X40LV\r\nLJo2AKi1z52ntUWSENPMF/ZQKkFRTINDw5kEXD9sAh2pVZVp/Y3rF5orAp/IgaW5kVKisrQVCaBO\r\neu1f/h6r1bwGJiWSREEI/1k/FBSi2jitQvhK7D63H3B4eIRut4vRqMnpqVSKNPWflbbRZVxGaPxI\r\n1tbrdQvcIMc5rfcXZy2MddAQqKSCEhKwjTMpVMTWs7XMJG0D0aGtw1tz7i47eE4K2DBm4WP+JQUq\r\na6BNExJOgE5m6xQVaac1r5d1P2fRA8YI+JyRdQ4q1QASm15pmsLUwCgd0CSJXwsqSaIcf7pVGERr\r\njW4ufSJ1kUDIDhwINPb/5TmFrXgwnn/X95GKZmkYowNzsGkeUIwZxLTmKG0HresAWtbySwAzl2m+\r\nPieTSZAfkiG6T5zy4utsJFekl0l3fvjhhyGvDj9EAPzB8/7+Pm7evHnJuI5tFCEFlKwgpYPTGpmU\r\nUFkKV1XQ5Roiz6BcikJrOCWRJgrCOFijIaxBr9anygnocoksS+ELr5WAc1CQUFbDZjlsopA6n58X\r\nWQZhLexqCZvl+KKN5JlAUALHONOOWFv0zNy+ooNdGlsC6EjOSO5oDijPH58bugYxzUiOOAjonAt/\r\n52xBchz5NUnXEaDOWWgxaeDzOL9fttH9SNYIACXwlI8RvUfjTn3mLFUaMw7M0fyQjUdzQmuaCgkR\r\nAyUGQXkYcbfbDZ/nnyXdCCDYMRzAI5CSxpXbFhSqF+xZ2aRvou9I6XMhEsDLQdKr9hU1ASBP0a8s\r\nikdPIVBBK4mVA6STSBpKy+av1+dzMEm9c03R6fVhd67DrjQSW8Gq9DOucNV+Ec05B20qaF15goh/\r\nEyuUMGjn1ub+8M8L5P2i9SU/FKL1DyBEzhDhg37nB5S0X3N/m+xx0pf8OqRPaC+hlGikj/jhiFIq\r\npB/gh8RAc3DNyUrxM3G/gA5s6To8soAOqwmYpANjInfEY0/73S9j3/qiLRmNRpdo5uQg0UDGzmkL\r\nANMGwjmoOlm6qPOaJEJCKYGs22sZ9SZthIOfVHG2If0bQIttwxkq9Pey3kyN9aF+EJ7NQQABD4+w\r\n1sK6dn4cMrq5sUTCQydqnwX+lWXV6hfQhGVxoaYx4AvIg0sKAAsXNg5lUdWMGIHxxCPbSiZQKoFS\r\nWZgLX4GyExx3MiaqysBX1VQAijqHURdClCjLRTDIsixDv+uvx09+eagSNX7KyQWa4uBjFh45I5xp\r\nxAESmteiKC459fx3Ml74SSkfS8o5E8tnDEKQIuBAAckXvc+vERbIBvCPf5+MRZ4LwTkf7mYhUK5r\r\npqb0la1VIqH6g9CPszPPEnIgUDCBDWxLDTgDKYAs9fnWKl1gtV6hLIt63fow2tXKh6gmSYo0U5id\r\nnOP4+Ai93gBbW0P0ugMcHR3h4nyOa9eu45VX7uLs7AzT1RT729vY394OzJMw7mWJ/Z0xlssllssS\r\nSSLQ6fjQ3/l8jtlihrzfQ971Du1iOYODwXI1h4NBkkqsFo4VwViEdTYcjOGswIcPPwn57wAEB3Wy\r\ns4udnZ0AJNImsSx8mHBfSsznc0zGQ5ycnEAKh+GgF8DmRAlsb42xs7ONZ8+eYXpxBiWBu3dewbX9\r\nXZydnWE2m2E2mwVgK01T7O/vh1yZVCCF6ydy1AlUXi6XYdMiI5sz27hTyh0e0rll0eSqS1SCRPHi\r\nLu2UAiRznEmVddqHNdZaOOvgnIEVFvVxiwcChYRQCUTi9bWRBikPe3UaSip08hRp6k/FZrOZB51h\r\nANGAT2G9w1fypXVJIes8fxq1Shro1MJoB51aJIlp6QrqB40hGQtxWD3/7GAwCIcbfA0SyEIsTg7K\r\nchZxmjQ50/i42jpcddD3J31VWWG1LIJOyLIM3bwfxpyHjFalgdEOoq6krisLa3yl2G63i07H6+xO\r\nrwuTqBZbkJwpkh0qJkEyyh1iAKhqw4jmBcYCxsJWuvWsvAoz7c1OOojkcs5bRGBcSydG+pOhpe1i\r\nX3VLswwQwucsra8ha2Z+Uj8bZ9XxZ4ydf35fkgEY2/Sr/hn+DRHsk1QqpLIZN1tpVNqgM+iyMWqA\r\nWGLKrVZeZxmbwNomlNdXr6YT5xRCdAMDkAo7lWWJdbGE0gralKh0B13bbeVmNNq12LW0/xJbj+Q3\r\nBkZJj45GoyA3xDAiWaDxTJIknE6T0eqfbYWXqZFupQIRh4eHWCwW+Pa3v92ybwh0mk6nePLkCZ48\r\neYJ79+4Fwxxo5JV0S1GWmJYrZGmKUZKjMhqH52fY643gnMDj4xNc725D5F08ny9RFhWGnQzbwy6q\r\n9RoyzfB4vkaaJOhlXRSLFfR6hb3tLVhTIRESBimOpgUgJa73c6xKjdPFGqNOgnGnG+T/izSS/fV6\r\njePjY3S73XAQRqAapYohZgUHfDgASHl/t7e3/WEZA9zoGtx25U4R6fMkSbBer/GjH/0It27dwsHB\r\nARaLBS4uLkKCdtLDZPs550L+JdpLSeZnsxn6/X7oKz/kBZoia19V4zqQ+yar1QqHh4fIsgy7u7ut\r\nHNCko8hxJLCTbANjDE5PT1FVFa5fvx7sAtqn6H5FUeD8/BxlWWI4HAZGDLH6yBkWQuDi4gKnp6fo\r\n9XrY3t4OY8yL31Aj1uynn36K7e1t9Hq9MKfr9TrkC+WHZUr5dC+np6fodDohh1dZltjb2wsF5Ej2\r\nyBaklDBX7atpAg7dxRHK/+EP8OS/+e/QX8yhXQK4BFmeYWUWUO5y7v5GpgEhFrBiCK0dilRj7/Vv\r\nY/Rf/xcwr34DZaXx8nGT/v404YDEWRgJlJXPuV2eXKBcLZHvTKB7GeoSDC3M4udZU7Gf+kVAw898\r\nBuZ/0N5CaaS43uGRiNxW4QcUMbZAeo7klw5HOB4jhGjpOc5ajv1v+jfvC40J6VL+IqIXZ6uTrRVH\r\na1CjvYyTDlq2eN1+0fPwi2rqt/+Df+93ueEZPzhwufP8QU2lQYnA/X/+hEHVzuxquUJZlCiLErqq\r\nvFNVsw6sMU0evg2DRr/zySRnmgwIJ9rFQQg1BxCMQb4o+Kk5fY8bSVxQNiHGl5FcByEAX8DDM0Ho\r\nJQTgnD/9pxf97hkjDsLVgmMBFxJCU5JzwEFDa59gmtgyvtu0Ybf7xZ02MpQ5GMbn2DmHtAbPYie8\r\nqqpghG8C0zjgx51m7qCQUx7nTOPMBk7Z3XTSwZVA/Hwc2IvBWfoZg7exDPDvb5pf/t342UjhcPCc\r\nvsP/zkM5SI7pGRLlncBEpUgThUQpSCEDgCOExXR2jrOzUxhTodv1OaiOjp7hwYMPcHp2jNVyjeVy\r\nAdR5/xaLBS6m55BKYLXUOD3xSU0/+eQRPv30U3Q6Xezv76Ob9zHo5djf3cNkOEIqFRQEOkmKTCVQ\r\nEFjMT1GsVnBGI5ESwjmsl0ucn57g7OQEJyfHyLIUg8EAWlc4PDzEkydPcHZ2ivl8hu2ta1DKOwon\r\nJ6c4P7+oFa3PfVboMoBnp6enmM/nSNMUW1tbGI1GGI1GLQeFA+1SSlhdhZMhkpX1et06zSFHJs/z\r\n4FSnaYrd3d0AKlIo8tnZGZbLZdi0KB8gB9+4nPD1QgDUJhnlwDeX97KsYK1PBu9YSK8vCqRARYLo\r\nZYxnlNBP1GzeTeGitKltknta71VgArd1lzEaWlc1c9k2+sojLLDWQOuqLpjE14t/Bl/cgJgSInr5\r\nz5AzSeAPH18OoPI1yiSde14AACAASURBVMfOOQcl2s8WgyT0t3htNvk4FYwh/UHjL8L4N3qh+Ztz\r\nqOeA2BD+8/xeNPf+hLTpb1VplGXDHO3m6SVgkj8Dd8xobyOd7E8+23PKdRoBWTGITP0UQkBDw8HC\r\nOgvrPKvcM8z9S0hRn1Bbb8EKF6axfuSNhg03rPjBHt+D/DhZJIlCmiaQUoR9UkoBKQWM0WEvJbnj\r\nzFRnNjPO6cXXHF979FOlSUtWaO4aefP98OC4Cf3xHElbzy1nPvp1JKXfr8kuoPWidRWewb9EAFSK\r\nogiHEPQ7hQxzmyZOhULrgssQjS/f//h3CLT44Y/+r//s0uR9gfa7v/u7CYD/9Mtcg9ZlnvuCT8+e\r\nPcPW1lYLaCBQqaqqEIoznU6xvb0drhPvtWVZ4uHTZ/gf//Sv8O4nzzEc38K//NGP8S//9u9wcl4B\r\n+Qj/059+D9udHKKX4X/53/8UHz19iv5wiN3dCaxw+PH7D/AHf/F/44NHz5CPd/DX/++P8ZO/ew9v\r\nvvFNn2IGAp+cXeB/++H/gx+9/zGmywp/9f6H+D//vx9joSvcuXEdCl8uJ1pZlvj+97+Pv/3bv8WT\r\nJ0+wt7eHNE1xcXGBPM/x/PnzAP6dn5+HcaLk6J1OB4eHh/iDP/gDlGWJd999F3fu3MF8PsdyuUS3\r\n2w374F/+5V9ia2urFbZKBxHHx8fI8xwPHjzAO++8g9/8zd9EURT44z/+Y3z44Yf49NNPcf/+fTx/\r\n/jyAkBcXF1iv1+h0OpjP55hOp+Fg94MPPsBf/MVf4LXXXsN0OgWAVsQG11tfVYvtT7KdHzx4gD/5\r\nkz/BcrnET37yE7z22msoyxJnZ2cYDodYLBZh3KWUOD09RVEUmE6n+PM//3PcuHEjhIYdHR0FRuXF\r\nhbeDhsMhiqLAX//1X+OP/uiPMJlMsLu7i+fPnwemCYCQPuWdd97BX/3VX+Ho6Ainp6e4d+9eACeT\r\nJMGTJ08CgHt8fAwAmM1m4Vrz+RxJkuD73/8+jDGYTCZ49uwZer1eGIMf//jH+MEPfoAPPvgASil8\r\n73vfw3vvvRd0xx/+4R/irbfeQpZlePToEX7v934Pb7/9ditK7Kr9opuAsA6P//v/GeJ776AnNJbC\r\noYsE5fkpXDmHXBYQRQGsVsB6DVf/9K8CdrGEWTpk1qFXrFA+PIP+j34L7tYB+pWF/YrX2K93c0gr\r\nB5dKVDDoGoH5R49w8smnGO5sId0ZIZFpyzbn2MfnAY9i2+cXoTP5QQW3v2NMhtsi/MCW94GTnuKD\r\nZTrgoFy/MW7Dv08HGNzXor7wftL3eUoMjnXQIRkdgtAY8p/UN36o2iI/RD4L9YO+y6/1VbUvuj8m\r\nHB2N2Xi8cYSTM1O0rdkbsu0ge4Nfw7g6nxFzjnhyZqKPxgBd7ETFv4c+usshX3QNuj43jGPnkefM\r\niQVu02ljvCA5osxBKJoQHpoaA0kAYE07HDkei9MTb9jZoWNCK9kCJ2CRV9EUrdwd1B9ysin3C49v\r\nJ1prHAb7s+j8RPflY8ufg1gNwVlnLEs+F3yBxI4cd1jj7xBTLZ7XTaAvb/S3+BQ2XvybGv8bD8ej\r\n+eHXi53t+G8+P11Rz1ddMMFpGOvBgcVigU8+eYzT02Ps7e/gjTfeQJalWK185d5ut4t+f1j/HGAw\r\nGGI0XGM+84a2kAaL5QWKcoWyLNHt5tjenmB/fxfGOKzXA4xGoyZEJ22K8KzXa1hnWs/h59KHs/t+\r\n6ADYVZXGeDzB7u4ezs/PURQl3n//Pezs7GBrawtbW1sBtDg/P8d0OsX+retBH5ATPBgMMBz6IiPO\r\nNaHXPC9lAHGMZzxQmXgCmclRJDbCbDYL36UK1pSrotPp4OTkBLPZLOT62t/fx2QyCZsR1208sT9n\r\nZlEVVioNz1nFnMnEmRgEXHJ2M9dVHGDmejfIt9OXdA+XT86kiIEQAChtA84QOM914ng8DqdsdJBA\r\nusPf34IqtPJ1maaUAL4JW3bOh/8ao1FVZb1Wey3GCq1lvnGTHqPNX4gmfNoxACo2NPjhDQf9uA7I\r\nRcPkiI0nL/cK1hIQ1VSnrKqylkmqyurXhLUCWhM460EirSsslwuUZRFYeMT+6+fb9XilgVFIlbJJ\r\nrjirnOSG+k+6lMtGbADSWNHzdzqdpvBFGA46ugPgAhyMNE3qUGBWTAECst6DLBpZiVus4+k96gsA\r\npEkSUoV4NM+FNCECPpcl4FMptOYm6OvPNnpiO+by3zmwi9Y693LYYTkBfWVfAts9I78x2P36Fuh2\r\nOyFXJx2iLZdLrNcF1mugLNcoS6+fO9mwZWfwCAQOitO6pnGjuebhl7S+N+kJbqxuAttflsZDCEle\r\nV6tVeAayT5VSWC6X4TNcV9IpPl1DSondyRb+3X/yb+PP/vZvcHr8EY4WK/z2v/U2/o93H+DfGAi8\r\nefsAc1Nhr3RYlgaT/VvI+xPMZxcoVxZ/d7TGv3b3DmTaw+NHj/FPvnkH/+sPKyincTpfwhjg1qSH\r\nf/72m/jjH36Ak/PHeFx28R/+03+M7/+rH0J/6x6y9MuBI6vVCk+ePMFv//ZvB2bq7//+7+P+/fsA\r\ngAcPHmAymWB7exsfffRRqDROuv93fud3IITPi/TWW2/hz/7sz/5/9t4kyLLjuhI87v6G//7/ET8i\r\nY8jIEQkgARIDQYpEkShKLVJS0SSSMuNCopVVtcx615ve9bL33WZduzbrVbdJi17I2sra2tpUKpKi\r\nRFGkioOM7AZASkASiYGJRGZkxvzjj29w9174u/7u8/iRAESAgMi4sEBk/OE9fz5cv/f4uffi9u3b\r\nePPNN3H37l1IKXF0dITf+q3fwosvvuhzKw2HQ3z84x/HxsYGvvnNb2J7exuXL1/G5uam3+Peeust\r\nlGWJP/mTP8FoNMLe3h7+4R/+AQcHBxDCMRZ7vR4+/vGPYz6f4+bNm97pOj4+xng8xp07d/Diiy9i\r\nNBrhS1/6Era2tjzQ/X6Df0BbV3DQ86GHHsLv//7v45vf/CZ++MMf4t69e5hOp3jyySfx0ksv+WIe\r\nv/u7v4sf/ehH2Nvbw8bGBl577TVsbm5iMpngxz/+sQfrjo6OsLe3hzRN8ZWvfAUrKyv4zGc+g52d\r\nHXz84x/Hyy+/jJs3byLPcywtLeHo6AhPPvkkPvGJT0AIgYceeghra2u4c+cOvvvd7+InP/kJVlZW\r\nsLW1hbt37+Lxxx9HWZZ44YUXsLKy4tnmr776qr/XK6+8gjRN8f3vfx9KKXzhC1/A1tYWtNZ49NFH\r\n8dhjj+Ev/uIvPDD43HPP4W//9m/xx3/8x1hfX/f68KWXXsLq6iqAZu2G/hrw/jvAvw6ibYTlJMI4\r\n66CwKZafeBj6v/5vIP6n/4Dzj30c47iC3bsPqzMUKdDd/jmKq9cgVzZhfvxD2H/1HOKJgHzhRcwg\r\nkfYUslwiMwJHUYWeff+Ytb/uYoVAkUgIXUKZCLmSOPeZJ2H+z38C/q+vw/53/x5VmsJWFqgs4iSF\r\nhIXWc8SqPpAX76wgy9vZPP8cIRuE9lMAPuyV7DnyuTjTm+dP5XYMvUYkDbJP9vf3MRgMWoxB0v9k\r\n24SkoUXYEdc7i/YPsqHDIk5hH9I9QxwovF6Ie9BrH2aJgDadkwt1PP8McJIpxdFUug45SWRkcgeA\r\nG6bh9fnnCNzh96L70fXjOGq9zjcd3uYQDFo0QOG96Zm4Ac3Ra44w06YXXpc7sjSR+Pd5XPgi0Io2\r\nWaoOC8AzAZzTnHpD0E3SGEpF0LpEWepWvDx9jy+QvA4rIgecHFACKcIwotCZo4WzaIz53CDDnX9/\r\nEbOSS+jI8O9Tm/g1+IIMweKwX/nnQsCXSxgWHF6LHGsSDvKEc3KRWFsBsDC2hKkrR7uxc+Df3t4e\r\ndnd3cf/+fcxmM3SzPlZXVyGExMrKGrrdrgO+VAJYiSKvYK1At9tFv99Hr9fzpxuUn/L8+fPo93sY\r\nDofodnuQUqEsKw9UCzilPZ8V6C8n3tltgGyXNLXT6SDPCxwfH+PmzVchhLvvo488hvF4jOFwiDde\r\nv+Pa3e3WFXr7KIrCF8yIogjLy8veSKXxDdkwxIChdUjrImW5zDgrk34nSYKjoyPcunULWmsfQkwg\r\nHVWaopyD9IyUS4ufiIfAMAc3+NyoqgrT6RR5nqPb7XpWAA8FprXFNz7O6OHrLZy3vC2K6dBFBwjh\r\n2gyfhYfVA/CHBqTPqE20zjgY4W7UrtbO9SY/pePX5MYCMUC4buJ9TNcKgTz6Kcuq1Vf8+VogKU7u\r\nATTOtF4XHRLxRO30vi+YwoAHzijjYQpUbZn6rKjzftJ6Gg5VqyAI1+10OMNZpTQ3GmOqavXXoufl\r\n/cBfi6IIiNp7JP/tBkAQEggf1ysEIFmY7ykSgpD8IMS3i13aHXzU+6pwVDoqVALR0Otarz1AuH1x\r\nmkTssyEwTn3KmcYEepN+lqIB7HnIP6XTi2OXf9cYwBjUTPgK1s6R5yWS2LTCgAkEp7XD5z39Joaz\r\nEMLlaEV7vZDQvs4BQ37A8MsAVN6N0Jrlhy1UGIfbifQ5WkPclqQxIJuMwPZZUeH29mt49NImrl2+\r\nhOdfvQ0lNOLJCF0LmHwOqVYxyDJ89mP/CruTHN/63g9w/coyRKFQ6RhClijLOSIF5JAoAQy1xvM3\r\nfo7xeI7f/+QzKHOJSAOdIsayjlHNFSKdIqpS4BdMqUVjNxwO8a1vfQsf+9jHsLa2hmeeeQZ//ud/\r\njvX1dURRhOeffx4XLlxAHMeYTCb48pe/jO9973vY399HkiTY39/HjRs38PnPfx7dbtcfNNy/fx+/\r\n/du/jevXr+Oll17CE088ga997Wu4cOECrl69isPDQxwdHeEP//AP8a1vfQtXrlzxSdH5WidATwiB\r\n6XSKw8NDfOELX0CWZXj99dexurqKTqeDF198EVevXsVXvvIV/NVf/ZXPr3twcIDDw0NcuHDBz1Hu\r\ndL5fQuw4ftDE8/wZY3B0dARjDH7nd34H3/rWtzAYDPDZz34W3/72t3Hnzh0IITzD7tKlS5DSha8b\r\nY/AHf/AH+MY3voF+v48vfvGL+PGPf+xDcvM8x2QygRACh4eHUEphf38f165dw/e+9z189atf9evh\r\n9ddfR7/fx9WrV/HCCy/4XLI3btzAV7/6VfT7ffzpn/4psixDHMc4ODjA5uYmPvWpT2F5eRlvvPEG\r\nrl27hnPnziGOY9y5cwfD4RCbm5sAXDjbt7/9bTz++ONYW1vzVS/Jsac+euONN/Dyyy97puO5c+cW\r\n2ipn8h6JKDDRR7B2ijJRsPMZVuYad/sZRpc2EH/iacQ3fw71yEOI9ka49/3voPff/jF6hxLlpx+H\r\n7a+j+t7PkNsbUNKitBXK2CA2cyypDkz13oNGZ+JEwCKxGlZHqCxQ2gpVFGPpS78L+39/F+Wf/UfI\r\nZ5+EvLgBbKyjEAJRpRCJFIUSmFmN3tvYMr+U56h1/Pb2Nm7cuIHPfe5zqKoK3/3ud/Hcc8/5aEtK\r\nv3R4eIjd3V08/fTTLV8iTVO8/PLLeOSRR7xOIf1LthVFbvX7fZ9KiAoz8oNAst3O5N1JdJqTSU4s\r\nz9lEr3OHImVho0BTKIPnQQPaRhsv/kDX52Ad/03G6yIghbMRF4F/AFoON92fvsuvEz4jSUh75ULX\r\nDVFmDm5yJhgZFBw8VaYBFxc573SCTWwces6GrZfCWoGqMijLCkbPPbOj101RVrm/LzdqSKj/CVDh\r\nyZuzLPOn7tyJ42NAjhH9DvtgNpt5Jzl0Ao0xPldI2L8hcMv7jr7L4/O5A87nwyJgJBzDRfMmNFpO\r\n+5tfk7cBaLMYwu9Te7SeotIVjKnYNdo5v5aXlzGfFyhLjTffvIujozEAYKnvKiOVhcCsmmE2KzGf\r\nVz5XJeWwy/McnU7CcvlIlNUE8/wY/d6aX6ukcJUiRkxzckOOr2MlzRkoLDGZTHBwcABjDFYG57Cy\r\nsuKV9MpgE0dHR9jd3cX29jbW1tawubmJq1evYnNzE0YB3W4XKysrWFpaAgDv8I1GI7/+OXhCxmeW\r\nZcgi18Z8PvV6Zzabebbf1atXEUcS5zfXAbj1PBqNUBZzWGPwyiuveACV1k14osQZc8SyoQ2K1guF\r\nFPu8bzVYQ4wUfi2aD8T8pLnMQ+LpmQl8Po3VEybu5qAUOb/0/qITrih11cCFjAChYFHAWAFjBawx\r\nmNfVeJ3OUYiiGFJZQCj3HdPkkiJgxIUqO0ZgFJ1sHw//z/OZ3w8odImzH+nZ+frlYFblKx2SnqfD\r\nBge2tBPMA01Yr+uHvHKhncY4Riu1nZhg1jbrmnS9Us3+RgmKm0IijpmtVAPq0r1c0Yc6XBsufHhn\r\nxxUEIaZrp67Sy6tlElOVfvih1HSat/aMEKTmepPGh9axlBJpP/X6Oww5du3XrXu7ay8uxHWaUHt5\r\nvivexkXA5SIgle9BJA9Oc/7OTsHD5+PgH+nEKIp8OCrpp6qqYIX2a5WekQ7RaA53Oh2vj/l3ne4G\r\n8twVWOh2u6CYajcH0tYpdxRpKBV5ABkA0rTJOUkseM7wp/4P1w///WEQPrejKPL5CEmf8eqwPJ8d\r\n6UD6Lj9YoLkznU5x685dfPMffoLHP/JRrPVmWDp/Bf/pu8/j+qNPQHYSxN1zSCSQ2wI/e/NnyGcG\r\nz37kETz35CPQkHj+rT381T/8F3R7A/ybf/0cJCZYVQbnIoUv/saTKITAK9v38bc/fQFFkmD1yiWM\r\n9kb4+g++jY89+TTQTwBdnvr870R6vR42Njbw93//9+j1elheXvaHts8++yy2t7dx/fp1bG5uYnt7\r\nGw8//DD29/d9OBXNx+vXr+NLX/oSjDG4ceMGXn75ZWxubvqDMa570zT16TE6nQ7W19fxl3/5l3jo\r\noYdajK+NjQ0kSeJByMFggNdeew29Xs9XZqR18fLLL6Pb7eLixYtYWlrC1772NZRlidu3b2NnZwfd\r\nbtfPWW5Hvxud826F74/80KeqKrz55pv42te+BmstPv/5z+Ob3/wmvv3tb+PJJ5/E7u6uPyQ8ODjw\r\nwNxgMMBwOMTh4SEuXbqE0WiEr3/967h+/Tqm06l3ZKm4Rhy71ClFUeC1117z4/X666/jM5/5DH76\r\n05/i2WefxcrKCj7/+c/j0qVL+Ju/+Rt8+tOfxs2bN/HYY4/hwoUL+PrXv44nn3wSn/zkJ/Hmm2/i\r\n2rVr2NnZgdYaP/zhD7G1tYXPfvazuHXrFnZ2drC0tISdnR289dZb2Nvbwyc/+Uk8//zz+M53voPP\r\nfe5zDjifzfCNb3zD597s9XowxuDixYv48pe/jO985zsnmDFn8t6LhULfdjGxHXTQRXmUwx4cY+X8\r\nJUQfvQZdjpEnFeSyQLU/QmVz9DsRhj/8/5Dvvg5sbuHcJx/G6OUY9t4hEC0hqgTKqAdbWiT4xfTT\r\nmZwuFsCxMkiEgbARhIyQmgjzYYni955EbzTE8f/ynzF6bAsXvvpFiEeXkUMjthGiucEgVqh+wbQR\r\nv6iQXUQ4AvlZlNqrLEvs7+/j+PgY1lqMRiNcuXIFVVXhpZdewuXLl/H666+jKApsbm5iZ2cHGxsb\r\nuHnzJtbX17G+vo579+5he3sbSikcHR152zhJEgyHQ2xsbOD8+fML8aIzeXci/ux//18td9xogMk4\r\n5eFYJNz5DEGhEPxzBq0Tcv5oohhjTrzPhdrDw5LJAKT2Jd0MQojWiRQxhDhbjtofOs/kaBGwwB1q\r\nMjipLfx79EMLIfzxHcwcG35CTc8a25PVCsP+4ECXq9za98yrbm+A+XyOyXjmT8zJ8QAAiwZ44PmD\r\nqF1pr3vCKed9HbIgwt+c7dNyysg5D4Bgfk1y+EPwk88nGn9u0NNrnCEQ3j/s09CxPA3M5OMWzvtw\r\nTIF2Xkmep4yDOeF9+BxIUuojCh1WgKXncwp2Mplhb28P9+/tYjh0irXXW0Kv18NsNqurvrk8daur\r\nK0jSqM5pdw7nz5/HaDR04x5LTKeTugpw6lhX0XrtSDXVrQl4mM/ngJx5o70oChwdHdX5/Mbe4aRE\r\n0nmeYzyewFpXiGF5eRmD5Q3cv7eLN998E6PRCGtra3j44YebfHvSsaOIIRWCr0tLS5hOpz7RNOXj\r\nGwwGLpy45wDN0WiEg4MDzGZuHVBeIcprs7m5iSRJsLu7izt37tSAaAf37u/6ysQEAGZZhn6/70OJ\r\nOfDDWVtaawyHwxOsBwr1o7xUtO46nU6r2ifXKaTP6PrUD2matpgV9B2aW71EtvQEf487xJx5x/tX\r\nZYNWW2i9kn4mYI6ASGIF++vppsgHAaJ8/fDDHd625nBg6q/LmVMUFstDrHkf+Iqq+bilF0JQnldD\r\nDNevEAKTog00caCP9pmGzRW1xsAYg+Fw2HKYaX/i+oH+JiOJADmlFIRx85BC3Xm4OI0dhZPzggbU\r\nl/PZcUufcL3GD0v4c/Nn7K70/Z7Bw4u5TqPrh7qR9/NpBhgBfj7Homkz/Wl+83kKwOucBx3MAYCo\r\nHsysfrsTYdVJWgz3kDlG4BuNK+lFYg4b3U5JQYcDHExtwF/tQ4Cn06kDpm3sGcr9ft8fhiVJ4lnH\r\ndH/6fp7nbJ920RGUroBsEjrI4IUyuN1Bbf6f/8P/+J5YztbaDoB/dgURbitQCgrKM0bgEZ+PZA+M\r\nRiPkeY5nnnmmdUjE14ExBvN8jnlVQsOiKxXiTgez+RT9pONy25YFpFToJSnmRmA0rzDoJ0hQwFgg\r\ntzHy6Rg6SjDoJCiKEeamj0Hm8l5rESGtLEbGVUA/l8UoigqjvMLKUheq1Cijf77zRuNGzLgkSbC0\r\ntNSy1yiUtN/vYzgcQinl7WvqkziOMZvNWsUeiHFGezCBr/fv38f3v/99fPnLX8bKygoAp3cODg5a\r\nf9P8rKrKvxdFkWd10325/cwLY4xGI89eo2IWtG/QvD/NFnuvhNvzZKtSepydnR1EUYS1tTVEUeTn\r\n3Pr6ut9fqB+m06m3oegQkHTr4eGhz19J852n26G/tdaYTCaeWNHpdDAej7G0tITxeNwq3iOlC9Wm\r\n+bC7u4t+v48sy7C/v484jpFlGX70ox/hrbfewh/90R/5g1w6uCI/76WXXsJnPvMZjEYjH1JP+9F4\r\nPMbGxobfw2i/BpoK3dQPwJlD/t6LBfIj7P/3/wNG/8d/RDfrwq4P0P/CF1HeehXRp34DZnQEKANx\r\n6xg6rqBffg39T3wM006GyfPPo/vUY4gHXYz/8j/D7hwh6a/hwp/9b6i+8NuIRgJl9kE/46+wWEBa\r\nhUpOEc0tjqsIq1mK0Q/+DqP/8v/Crq4Bv/UxxCvL6G9uQKZdwAoow/xWGb3NTRrhBzjvuIkLDlfC\r\ntGiA04t37tzB7u5uCwcgfTgejzEajXDx4kWsr6/j7/7u7/D444/j4sWL+NGPfoSLFy+i2+1iPB7j\r\nkUcewfb2NqqqwmAw8Ne8fv06bty4gYsXL+LevXs4f/48dnd3MRgMcO3atRamcFro7q+LkH/ybiXi\r\n4YkhQEUXBk7GUgPtE2RuWNJmz/PQ0PeNMa2ccw9idRAQxw26kKFI9wMWs7vIaeTPEDo4p4FEtKGH\r\nwBG/L4FyZGTThk+O8NslwdWs3/h9+EKDdfyGSmuYPIexFkVtVKzqOsdWoiCVczDKKkdZuj5PO6pm\r\nvEjPVImiCJ202wJcyMmgMSKHLcuyhX1FwsFi6hPuPBPYwZ2r8FQ3BE3pmlJKD0LwsA/++fBaIUhL\r\nBibv03Acwz7nwhXoovd5u6nveB/S39THJ/oS9F0LoJ0fUEpgeXkFnY4bqyTuoNs9wGg0gdYa08kc\r\nUioMBoPaGDdYWRkgil3/b2xsIIpka967/qkApFCRQJ7PEEW9ev66fGxFQUCNqzZsjMFoNMLh4SH2\r\n9vYwnU4cayhNURRzCNE4FsvLS/X8L7C/v4fxsTNor127Bmtdtb/BYAVCSFSVxurmmu9HOoBw7Jka\r\nwLYG1mhYo1HkcwyPDl1I8dEhxqNj5OuriKLIhRcdHWMycdU5hYyQdfvY39/HZDrH4dExpJQ4PDrG\r\nPC8hZYQ46WB1dRVZlmF5edmDLwTS8USxXI+EzDquG+nzpPeIvUjAHjf4Q5Cb097p8+PxuJUjjpgv\r\npF8mlW6BORASQrq8bNYYlFUTAs1ZV55FU8ybNSsE4khCCgUl3ZhMdemKPxiLqjSQwkLA6WQlgaJs\r\nM5z5YQ05eYvAeVozBKgR4Aig5SjyPYf6iPSyMQZJt9ccXhgqtMSY42nnhF4wmh3+xN2WPuCf47qI\r\n9HqoN6jaefg9Pif4+HIwzVqLRDVhYlT1l4eBEnicZZl32OlzWmskaZs5aq0LnTV11V8OXlF+QmMt\r\nqtKtNT2yntVG48H7gZ5hkd4P+2KR8cWfn4N5HDAP77EIqOV6kwOCsYhPtQfejdC1ebQCgSpA244g\r\nm6TT6WA+a1jT/PCMhLPv+HPS3pjPG9ZemEuU7B/6Nwd46XpKtXMU0j5Lew9VCw6B6UW20gcp1B56\r\nBgI3eJg99UGSJP49fshBIBFdj/oijmNkaYZe2sUMFWJEiLSG6A2ghECeF8iyLiJjAFMhhYTMFKBL\r\nGFNBW4tESXS6KSoZQZQFUiGQSkDPJkhFChsLlGmFTiWQxAqVnkImFoM4A2yJKtIAfnF2lBACKysr\r\nrRQVNK8obFMI4dNYhAc+ZVkiy7JWuoLl5eVW/9OhfZqm+PSnP+0ZfnStjY2Nln1O7wHAxYsXfb+v\r\nrq62rkvC5ymx5mjM19bWoJTy0Qvhd98vCQ/XiKWrlMLly5f9uizLEr1ez4dL0/om3TYYDFq2LhER\r\nAJduhVKgUEoQsm8p5QPZtAQSkg28urqKPM+xvLzsdT3d8/z58153bG1teUd4c3PTj9lHPvIRPPLI\r\nI0jT1AOSy8vLXpfkeY7nnnvOj+mFCxdaOnFjY8Pfl0L6aMwJrD/tIP1M3gOxArEZYPCbv4XZ915E\r\nJQvE82OM/+o/IY5nmP/kBWgdYSXOcIQKsbLoCYP9734XSnWwXE2hd3cxtBaRVOhvPALz9OOYPH0N\r\nUgjY1EUjnMn7wFzX6wAAIABJREFUI1YApZSIbIy5KiG6CtOfvoTd/+dbWP23X0D8zLMYF3PMjidY\r\nqjqI4wil1YAUkJVGpOIPDS+T9tyVlRUcHx8jyzLv8+7u7vqDR2I0P/zww96/o1QOq6ur2Nvbw2Ti\r\nfMnDw0MfLUY6ix+4x3GMoigwm8181ArtC9yvOpN3LlHI+ANOhoWEp24cTJhOp/61kAFBzi+dJpLj\r\ncxoLgIOQJByo48LBDG4Q02dPc0a4oXya00BtWLSZLXKEeHt4m4HGKArBKd/GIMmqRQCyWQkrACgJ\r\naww0LOZlgbwqfb9mWYYsy6BUhNmsRFE0ef6y7sA/Q1W5vrdGQEnnFI6PJi1wgQwc7sDz5+ZtX9Qn\r\nnKnQ3LfyjjNntJAhwR1X3t+h80+GCCmakMkQAonhe4uEs2kWzaGQefJO5wMPo+WfC79jDYXRUb9W\r\n0BUxwCyUcgxApZQHqkajMY6OjjCdztHtZuh2O8iyDEkSYzAYAMLULFaN3d1DGFPVrJLEK0+tx5jP\r\nZ4hUBG1iKDiWaKVLVLrJp6RNXlfq3cfdu3ext7cHKQW2trawsrKCqtI4PDzE3Tu7WFpawtbWFpb6\r\nPezt7WF7exuXLnbQ6TgmXSMSUZSg04mQTyd+rtK8yKe52yjrQwIKc0uUhLQGR/t7uHt7ik6ng/vn\r\nz/uT8L29PYxGIx9q1F8aYGV1Ddvb23j5xisA4CoID1YdgycvMRgM0Ol0fGVhAkEojyaxb/i4cqYN\r\nB/1D1h29xk+lOCjN8wnx+cdBEb5uaO3weTSu2c08Z6dUEYS1UADmo5EPNdWGQo9dhV4lJXTpNlLL\r\nAHspLIQSMB4MrB1pq6GrArBNOHHl88Q4FpK17sdV0HWpCAj4cdd3ldGb4hgNaEp7Qp7nftwpFJz3\r\nCe0z1lokcep0R1lClyUqXx1WAKhDAmFhrEFlDLR2xThI3/Q7lIbBwNqTIKAD9wyq6mQKCwBI0yYn\r\nZrin8cMP127XJqANEhOgR2uOEikTI1JK6atOa6192JgxBnEnAYyBlRpGVDC6XfnZCgnU1YiNqMNo\r\nrYU2JbQxwLyEjQGJEsJK92+vAwHTJPoDLGeju/FWcVtfLtKRfG5zJrmba8yuCH5gLVTAXOX63T1/\r\n/ECHkxzx00TaJn8eCX8ODgbydhMAqKsZ3COZmr1tYa12oJG2iCLX/3RNKYE4VgASxLGCkrY+cCkw\r\nn888oGVMijiOcHzsCn5lWcaARFdNG2hyzFL/8oMD2j+5zuCHDh8m4bqP2t7pdDwDigutS2Ibu6JZ\r\npX8PaFchNMbURaqVs6+UhYVAVVYQsYKMY2htUKoYBSooCCQqgig0JCJoYWCsgDQxbAkIqWBkBEgF\r\nKTLMqjpfr5bIZIJimgOJq/QcI0JVaVSRgfoFsFbqH5rPFOLNQcDwAJZHspCOoj2HH2pyUJmzJy9e\r\nvOjzLvH5w20rbg8SCETzjliGZFfSWNC4ULQAtZHuS84dRRvQ/hfaYu+HUPvoWamv+VqiZwnZ2aTL\r\npZTeWQ0PE6jaL+nyZh9tEuOHh09CCN8nxLIj4I/bCLSPkB4AmsP29fX11n2oPcYYv98Qy4fAYQJg\r\nKfSXMzwJsATgAc2307Vn8s8XK4B5L4X6d/8OD//ev8EkjtCxgLUC89ggzTsouwIY5ziXplA2B4TF\r\nVhlBxwlikwOVwjmhYNISZRVDpgJiZRmdsUHZkYD9sMBLv5piUEGKFFNopOMh7M9ew9pXfgfdf/0c\r\nXrm7h0QYXL50AXGdiTgWEpUBbJQgNxqJ+OAO67j+t9b6yK0LFy609D4dQAHwe9MTTzzhv9ftdlEU\r\nBfr9Pj7xiU84G7zfx9bWFrIs87ZLp9PB448/DgC4fv06kiTBRz/6UZ9WhXQo6ckz4O/dSzSbzVp5\r\nrgB41gttbNzxAhrmCNDO50OvUWiMMQb9ft87v7RhkYER5hNcBMxRNWB6n/9EUeQThdNmzA12uk7Y\r\nfuBkTkAyVng7qI3knHKQit+TNl0OgBEaTm3hwFnbeDoJJrUALAFAOHeIKi4699EC1uLgcBedWQdL\r\nSwP0ej30+h2knciDE2Q8uWs3jjYlkpep8oAGP82jcAF6Lm788BPSEKylfm+YCU3YNP3Nv0PVVMlY\r\noflEwpmXi8AzXu03ZNe4/m0zUvnv8N9kcBK4yI2zcO7Ra3RSHjKFOKOLjy3vKyFcZVBrLQQiGmaI\r\nyEDKCFFkff9UlUGWGSzbPs6trWBzuuFBkjiOIRUc89OUdR9bzGYzzOdzH04WRzHSJEORV3WhhAid\r\nTgRjCsznhQflK114JspkMvFgF+Wl0bphZqyfuwyrO5hNtnGwPwHsITY3N7G6soVe9xyEUOh2+1hd\r\nXWvyO5o6LLrSULHxlV+zLAOEhTUVpIrR6zoG1HA4dPMzjTEZZ4iUQJHPoKsCe0kKDYFer4f+YAVQ\r\njq03ms5QaAckHR4NMc2dIdu1QKfXVDjuROJEqB4ZtuRscb3GGQCTyQRra2t+wyIGFTH2KK8PCQFb\r\nfD7xsHdad5QnDADG47Hv6zBvZpZl6Ha7Xi+VlUZZNc6SlBJRnEKqWufKhgVi4fL6SesYYrAS1rSL\r\nOEgAaaSgBaAIsNJ1Veo63LLbW/YAp9YaEAJSKcRoO06VLmCrJp1AkjZhkXxP4OB+URTI8/wEKE9/\r\nu3mvYCGhKE8hGufMWgsVuf4VxuU1VMyxstairJoQylA/aaNRVs0e4vWTVJAEoihASAkhLaQ6GaZa\r\n6QLCNHozThQiVvVT5/PWvkB6kHQPAR39ft/vs7SOer2eC2Wsx1/IEqKqIFU7J6RnpRUVlKqBdhVD\r\nyAhWz1FojaookNesQzpMov2ZAyk8zFBKiQrNmuD6meY3172L9G4kGEBjLFRddVhQ7kULWK1hjUEk\r\nJeJO2jo88uWeAx1LP28Hci2yFfh40zoM9zh6v7/U9fci8DbPc+SFSz+Q5MkJcD6KE3Sy2vaxCbKu\r\nS8Ewn89RlHO3H5dzTGdjd/ggLaJYQkV1REXS7G+6avLk0XO4faXyABoB0zwXLDFLP0xC85gOI1dW\r\nVnD79m0cHR0BaOxOOnQxxiUOv3jxop/nQHNISN+p/wELg0gqwFQQNoaMNGxhoZSFlQrCAF0RIyor\r\n5CKHSWJMKw0ZR+iUJSpRQkYSpQWEAbSwQKUQJQlMaZFIA10aqCSFEAVKo4CqhJESkZSweuFjvyMh\r\nG5N0AOkJGlN6VlobpIc4WMe/R58Dmsq2tF64HUtOFh1k8oTuTZG5xgamda6U8ixmmn9KKc88420n\r\nJ5Hb5KQL6do8tPT9EP7MBJ7xfYfASZ5Xk7Pp6RCQ+o/2rVDn5Xnu01lQvxtjWofENGYcxOPAImfG\r\n0Fwnf42uRyAv3ZPYw1yP0TVpfGkcaFzSNPU6jViJAFrXJ1uFz8MzeR/EWph8jjQF5le2IGwEWwIm\r\nsohtfaQoJsjOLaGwBlJLqChCaVMoGFQiRmxT2GqOGIAWPaTSwlQWw3SMQZWgfJdhomfyzkVYi6ww\r\nKGJgEKeYlzOMPvs0zkUZRuMZBoixfm4AXVWwsYAxAAwgIwUtBIRy+9YH1n5xkrwANPsS6R/Sb9y/\r\nJ3tEKdWKYAEaf9kVj8w9uEcMdboeAYJ0Ld6uX8ah0K+iRDznHQ+74uFVoUHNf2hTBNoJpMn5pFA2\r\nfqIYxmpz4Q4DN8IX3ZuEGzr8bz4xwk2YOyf8xJR/n2+03InhDmLIxAlBqtABCp+JA0nhd6kNi9hn\r\n9FOWMyglkOcTRJGEMQRgOtYBnea5sajDDaG8w55EqV+4HOikfuFhOPze5HyFz0AOPI0xMae4gUrP\r\nx0FIHvLJx3EReMbHPmRKhRKOP//covHh73FnPLwGCQdfwrEEmjlJ7eZjaa2F0W2QsDFA2yCxK0Lg\r\nmCWAgYosYiuwtLzUAoWKOoyTTqMp7OT+/V2fa4oMvV6vB9G3mM2a16uq9Hkb3O+Jd8SuXbuGoihw\r\ncLCP2WyGw8NDVHkfcdTD5sZlzOdzJEmKSPXQSbvopMDqub4H/IyGq84trQeLOt3YHxQIITCbzbC/\r\nvw8AGAwGuHLlSgsQolxbq6uruHTpEu7tuWpSOzs7Pm+alK4IydHREZaWlhDHMZaWlpCmKdbW1hwr\r\nsN93uks34Dg5KWTcx3GM6XTaYpDQmGjt8m8Nh8MT84d+iLVG4+qT/Nc/lOeLwAHOvCVglwxw6q+Q\r\nEcABdprvXKeFTNbw8CIO9Gs41zmDl4MKJNVs4ueeUu6AgodAujZaSOmYZC683cCFnpvW89EY82eg\r\nMO6moEa7Ii/vDwJs+SEN6RUOCLb0ha4ANAU/pHRnLVrTejMOlGewqLXEfJPQmu8N9JxN/xKwzQ9D\r\nCDiTUmJetNc+gBbQS/3IwSnSi2mawirZYseG7HPKjciZJTz0uJ86B9IaC11q5DaH1e7fxCqPoghQ\r\nTZ5Bur+UEiprV38+0b/BfApFwoUhw1jQwbYUwv27HhOrDYzWEAqAcq/BuFxrURy1rh2O9dtJyNQM\r\n99+3u4Zjc9L3LIyRNavVpdswRgNwbaZ5xA/HjKkQRRJJEkFr5fdttyYK5LlAVRUoy7wVDu7BU9Xx\r\n84qDjLROmzXYjAfpmA+T0UzzhtjexFb6zd/8Tdy9e7cBO2v2GunG9fV1zyYI7boWGAaDSjn2nxAG\r\nVSRghUEqEthijjIBBDRyaxHFgDQF4kojQ4KynEMZgzxSiIVj6StjYewMiQCqCkjhCgwhSlBZi8RW\r\ngFCwkYGBhNA5BNIH9sGDhMaYgDAOQHEbjIN41K9AY0dykIlAY85gX7QPkONGBxJSSs904/Yvvycf\r\nJwAnfAyug/heRa/xwwbS7e9kPf8i/cuBU06GAHAiJUUILtN3yGfitmvoL/HPUL+HKZBIz1O7+P1o\r\nLnAGYmhb0r85cEfrgoO1/PCRh+6G4eLcf6NxJXCS+0On6fkz+QVFAOgIoNJAWSBVEVRlYTHDRFlE\r\nNka36GIcK6TGwhoNWUbQQiESCikizKUFZAJUFTJEmNocgEUnTpEbSjp0Ju+HWCEwTSP0qgkKBdju\r\nKtazNRgxRWo1ljdXAWsR1aQeSBfNIVAhKgwkAB0lb3uf91tId5FdTTY36U060ADahcbCdDfcx6dD\r\nJb6X0KEFvcd1DOEEtIdxm/hM3rlE3IniLKeQRcWdMr7RcIYTN7za7LZ2zjYAraS4QNvYDp208PWW\r\nI8dO/kNjNrwGf93/5vdFkPujZhywL0LAOSeS2EABmANg4T15e7gR085R1f4hh4L/kAPh3hPekHe5\r\nfaJ6QaaIogRRlPgCCagUkkQiUgmkjGrHokSUOfCFkHViffLEviEo2QbBjG8PPVb7+VI4B5rGogl/\r\nUqrNIKXfpAR4/D9JuMC5Y7zoh4/HacqBz1m6X5hH4DTD07PlmHNNBvaiubsIQOT9yo1QPhf590nh\r\nOkdPQdV5w7RucpK59hgsL694oMoYoCx1HcIoMZ3OAVH5ikquKu8eDg8PYa0Ly5lOp/6+KysrSBJX\r\nNfjOnTsYjUaAOcS5c+ewsrre5LnMFJaWOz6cllio81zDogabFSDrpUOnSORoUJ4qrTXu3bvngTFi\r\nIAoh0O120e/3cTHJMBwOMRwO/SkROchpmvoKqoALZ1ldXcVgMPD586RR/nR70RjR32RsE8hC43N0\r\ndOx1JDFtkyTB6uoqVlZWMB6Pa93o5rzWZT0GM8znLiyLTsfCcB56jwNYfI5yZ46DgDytAi/YRBso\r\nBxLjpAGn+VwkofnPAQcOrk3GY6/LaV6GjhOfw/QM1KZOmvi2cZYatZ9X66U5TwVieF/xdBM0nvz7\r\nISjlmXgyhZQNqNqMOWrwpr3ew30ojps1zp+Xt5n3BX/+sF10TZ52gcA7OiihfqYDuixuwBLuKIY6\r\nk+YGd9iNMVCRbABda2HKEkVZYjafOyCmduJDI4+erxPVBpsRkHVYpTufcB0YOoRcJwNAJWqnVjl0\r\n2FoLU+9zUkmUuoK2jgFvBVAZjbJmHkOK1lxaNA6LXm+PJ9kfC99e+Drfw0OQhd4nfTGbzVrONAEo\r\nHsiWElEkkWUp4rgp6uEKvGiUZY6yBIpijvl86ll7NP9F0uRV5uwgDhjwv7mjzw+2PmgJQTv63el0\r\ncP369RM21Wn6hCQ8TBMQ9X5jAUSArRDbCKWsgCSC4zxLpAAqCwiR1dC/Y+VrBUS1uajgUrEoOFa0\r\ngJvudcsQCQ2DBKq+ZgQD/ALA36J+AnACgArfD22M0PakeRnaK+Ga4QcPQOMA8s+E9wn/HR7Chuvn\r\nQfc+7T7vtTwIvFpELODC7ddFdn74XGG/cN9r0XdC23WRb7Oo7WG4NHeww4JKvK8fZCtzR3tRu8/k\r\nvRcBgVgLVEJCKcCghIkAIEZaM4orpdEx9R9SoYQFZYrTAGJb/0NkKFEittK9UMoz5O99FgEgsRql\r\n6kAA6ELDCg2BGImIYVGilXLRok5TASByw/a292A69L1ej6HeAtA6BABO4jwtnIW1cdE+Hd6LXzPc\r\na0LC1WnXOZMHSwTAO558UwjBOPocd5448nqa8c1/840z/N5pwgc6vD6/ZnhP+vcio6EFpgTGB1Bz\r\nPKjN4ffDyYt2xduwrxYxwtptXLzhP8hxCfuDKncZ4wzCLDNIU8fY6PV6yOcO6CvLElJEiCLhAVQK\r\n3eD5cwjZp9CEsG1tMIoKxvDXeT8LSBlBCFWDBjSfJOI4PeEEk6PCQQ7eH5w1A8CDU+QIhGAZvzYf\r\nJ+6Uc9CH/k0ABy94Qn3GgW3O5gKa8BCuvHj/heBSaMCHbad28jZygHE+n6OqXL4pay2UkjVrLa3b\r\nWkEpiV4vQ5JE6HQSTCYTzOfOmby/s48rV674arjz+RzHx8fo9/tYXV31bczz3L8uhPDgg7Uacaww\r\nGCz5uejCg12RkslkBMABvVprzGYTD8z1+11MZ0PPEiAQieZglmW4e/euZyBRvxIQuLOzg6uPPOaL\r\nddy5cwdvvPEGkiTB1atX8fjjj7eMVH5tml9dBn5xFgVnzfC+p/cIHB+NRj4vG1Ujds64A/voRN9t\r\nYBbEDhM1GEhV9agN1LZQx/LCOTTn8jz3/cL1Af/hrFD6vSiUPvw+/Zsn16UxD3NMEXuDMzbo85xJ\r\nQZ+lNQQApWwXBOHPz9vED59IwvXMQRUaJ/pceHhF45mkEgBfo87Bd/dxDMVwTzOG9+eDT2OpIAjN\r\nJw68WmvRTdKWvgh1EK+2RsByp9PxVTxVmvhxoZA6nveN9x1dP9yPeH/S39RWY4yvgM1Z/tTnVe1s\r\n2Po/MmBdVjXApQpkc4y9DwBpzV6ie3N9R/entocsJ7d/L97fF/37F5Gwn0jIVgptI25D0fqgPYUD\r\n1YhiABJpmiFN3X06nRJxnCJNc/8dtx+79A8ub6VFHBtIUZ5gOtJ3CNjhwBrt61Qx+MMki2xBvt+G\r\nDkiow84AiDM5kzM5kzP5dRNuU4cHae+FcDwDaEB/nm6EkxOIwU8+AO3T3m5kedDP9u8PRiICeNI0\r\nbZ1eEYslPNkJgZPQIaPXeXgBSWgkP0j45CVHjk8SP7GD64TGPiHRPHyNg0X8df59ei0M+1x0qsoX\r\n26LPLXqd5OSJnoEQEvRoUipY2zg+HBRSSsEIA2MNbGVh7bT1nlIC3awHKRSsVSgLjaJwicg9gBNH\r\nKOdzTKczTOczdMuurzCZdFIYV+sT2hpobWDqsCULCyuAKAhrDX84sBE6ooBLFsxD2+g3gRzh/OPz\r\nh/dlyJSj+XLaZzmQxhUntZWUGGcOhT9AM89DoIHfa9F84fcJlSC/BnfiQzYu9S9/nnB9TiaTE/0C\r\nwDPsDg72AViMxw6k63RSrK2dq0GeAmmaYDgc4v79e8jzua/gZ4yGlAKdTookiZEkDTuIxqwocpRl\r\nUTOHIihFbBT3fWO0Z2rxYg9URIjyOw2HQw9CKKXQ7/dddd/DQ6g7d9DpdPwc8oUQ4hjnzp1rrT2e\r\n049yGiayYQkSqMaBIpojxrgwagL49vf3ce/ePQghsLa2htXVVayvr2M0GuH4+BjHx8cYj8fodDoe\r\nrCGAk7eJmIQEsBKzi4BQyqXDw17p8+2Q/qbIDs/XSmHL9H16Hv/btlmFIVhN65GPK08TkBuXsL2s\r\nDKxtKp9HkZsL8/ncHbBYCyksIAjUd/07m83ZdyJIqRDHrqABjQGfH8ZYlKUL1dXaheTysGea+7yt\r\ntJb52m/0aNNXpxlLpx0iuTneDjfkh1qLQFn+7/A16mcCbCisivQAzVvamzudDrLBkg9Rj9MEiUld\r\nXsnZDLYoYAqnuytTh+uaph+qqoLKGtYtByCp7fP5vAWI87kURRFKU7LvhAbc4jBCel7Xf+1csmFf\r\nhUAwtYHbH6fZFO/EmHw7bNCYk4Zp2wbgbQZQ5+ZVyvVltyv9WiVmdFXpeg4D3SzyfcrD1umwgg4Z\r\n3GHNvAUiRlGEsmiqijYhwRJRFEOpyOdtbPYaWbf5ZDGTD1IW7cH8N3By7tBri14/kzM5kzM5kzP5\r\ndZEQS3ivwTS+Pw+HQ9y9exdPPvkkjDH4x3/8Rzz00ENYWlpCkiQt4G8ymeCtt97C5uYmVlZcJBpP\r\nRcDTSpzJL0+iRYwK7gyGOZ9C8IuDOiQchAhf49cPw5MWOUShoRfS6stTaPjcIaAT79Mcu9O+/6Df\r\np8nbOSDh39YuBhLph0L++LNz4MeHcGk3hvO5A07IUcw6fQhBeaZOhu6SE8fD7KR01SXJceb3p/lA\r\noJMRbYM9HC8ekkbtCvOXkLO+aM6cFlYQGv00ziHIyNkqdH8+vyiZaAgu8/nK7x+2Y9Ha4WGRPEn1\r\norkU9g9vu7W2BWzwe9BvKsrCq+xxdlUcxxiPxzg+Pm4l2KawsdViFcfHx9jf38dgMMDW1hYuXbqE\r\n0WiEg4MD/11KYE0gE4FWy4MuklTC2ALGWigZ+1DCvJjWIb4GQmrAahjrwmuF1hCV9jkTOYtsPp9j\r\nMplgPB5jZWXFA4LT6RRZlvlw3qqqsLd/4Puyk3Xx1NMfw/LysvteUTYhTYCrditcuHwUJ5AqQlHM\r\nWgwZHnpaliX6/T6GwyEODg58OHJRFDg+PsZoNEKn04ExrijD2toaNjc3cf/+fdy+fRv7+/tYX1/3\r\nGxs593y+EJDLqwdT0QXaRGmNhuw2rg84c4qEA0nUt3wOCSGgWRVbzpijH9KbPKSQrw1qI63rMNSQ\r\nX5sDOn6u66ZgBAcaOeBIYbx0H9Ln7vOidT3+vKTH6Dl4LkLOJuN/hzogBP5CUII/bwi+c53Ex7sV\r\ntqCb+9KY8LynHHSlfiAgaT6fI7fOkOp2ux4cJ+CY2hDHcYvpRf1njIHRzb4ofb81Oq4sckgBREpC\r\noNZH1kBJASMFSlOeOHAIn+c0UMbaJtUG/w4/tOHJpEO7RCl3oLXo0ONB9w3b8CA5eTi32F4J94EQ\r\nBF7EPgXQmns8bx+N23A49Ox7AoPp4MZaizSxfv+m/YAqRdMhLvUH6QOSD6uxvWjdvd3n+e8zOZMz\r\nOZMzOZNfJ3m/D7/INgVcIcKbN2/ioYceQp7nuHnzJq5evYpbt25hPp9jc3MTh4eHPuUS2eA7Ozs4\r\nPj6GtRaPPPIIbt++DSklLl269KErQParLhEx/sipAOBDzDgbcJHRCzR0TzJwF32GnEee3JZAj9MY\r\nEfR3eP/QMCyrByf3XuSwhuFf4fOF91v0TOH7IfNgkSEaOkOngZH8mpxOu8i5SOOeC+WxRe0cagBz\r\nWCtQlho7dqcOKUqhpMtBRNW/kiRBMc8BaxFJBW0BXVYokCOSCkpIKBXBWgOjHetG2Nohqv9NzJTT\r\nQFJillIoMeUXJAeVM6E4q436gSuERfOEA5n0Hne06PqnOV88cXJ4n3CMFo0XzXnO1qG1sChsORxf\r\natsiB5gUZshuIYCRTld4mBm9R+yg5eVlz1Sjyt69Xs87lFnWhTEWk8kEeV7g6GgIrQ2UirC6eg5a\r\nG0ynM2htYC1QllUNWEt0OhmkBOJYIUncPMnzGfJ85tvQ7/dxfHzkE4T3er26yEOF8XiGsiyxv7+P\r\nPHcJ7anKnrVNAuq1tTUMBgMcHR1hOBz68ONer4f1rO8/t7y8jI2NDSwvL3v2KAGeSkrYOl8YjXuk\r\nJKxp8uTxOSKEQJqmODw8xOHhIe7evYvxeIzl5WWsra3h/PnzLVDs/v37KIoCS0tLrl3r6xDC5Sbs\r\n9Xo+96C1TW5AqqDImW3k3BMQuLy8DKBx1AkgI5YPD+3k64bmIYFfmoFsfD6rAFQJ1wjPdUT9wsG5\r\nJFZQEpDCQsmaiQUDXRWwpgJsDc4ICSEFrJRQMoLW9RoJAEyu94gFRc/F29K8Dg8Q8vBxrkv489Ie\r\nQNcqy3YOR/7D1xXvE75WeTXiJrwbrb2Gg5Ghfixnc78nhs/OD1u4PuB6qjh0zzyfzjwAGMcxkihG\r\nGidAt+eZY7yie1VV0HGCYjpi86UucmWaPkvSDiAE8qJEXpQelMoqBzrKdHHC/9P25PA1rlO57iSQ\r\nll+bz1PqH2PadsS7BY7e7nMhQLZonwvXD58/NIa0Xkkn0eEJHaTRYQN9jp6H8iJT3kXO/GwzYo0H\r\nh6miHk/ZEdpsBKh+mOQ0W2wRiL5IzsC/MzmTMzmTM/l1lEW27nu9J9I+LKXEysoKdnZ2UJYlLly4\r\ngHGd/3s+n+PVV18FAJw/fx7dbhfGGO+DbmxsYDKZ4Pbt2zg6OsJgMHhP23gm70winseJV+LiSb45\r\nqLAIQAlPvkNQj4xhns+JDPzQ4FsEBi4SbmCH9zrtu/xv397AUQm/36oyw69r3308/aIT6tD+du2g\r\nwh6AC50yMEYH7a+r+EUKgIQQqv6sqPO/zVHkJeazHCsrKxgMYsSJQlk5585CA8JgNpk3CTV1DRJU\r\nGjAWptKIVeSBPgH4Koz0WlHmJ5zmNlCloTVgrQv1qyMAYa1LZs6BCc56IAeJqtWG4BzNw06n45Uc\r\nf32RI8jnIIEFHLzkDiQ5SMfHxyecOT6O5ETx17iDTfOHX4NLCMaEz8dZkhzQIOdYKVd9kKqSCuH6\r\nV9Y55w5f1aUCAAAgAElEQVQOjnB4OMRwOPLgX1FUTbiynXsg7ejoCK+++iqstbh27RoeffRRD1rd\r\nv3/f95cQwgO3USwRxRJSwYWzVUXTflthNB5ib28Pw+EQ3W4XFy9eRNZNoY1BXsxw8+Zr/iRoMBi0\r\n6ODUh2tra1haWsLu7i4mkwl2dnZ8CNxHn3iq3X+6wmw88u3rddJmjrHwaSkFFAR0ADa4NdmALrPZ\r\nDHt7e7hz545nAq6urqLb7WJzcxM7O3vY29vDrVu3cffuPWxtbWFzcxPnzq37YitZlqHX63mWqSvM\r\nI2AMfGgfH29i4ALAuXPnfNgg6UsCE5RSmEwmJ75Lc5nARwIZqKgJB1Wy+GSxHN6fHBxfOFdNBSmA\r\nJFaIVFNMpKrXNuUk5HMT1sIKx8KUcRtcI51HVVKrqvTfd4w0CRcy3IBAnLnLgUKaQxxU5AAdAMzm\r\nBax11wUErHVhm+6zstZVgBCK6eRGwj2Qr2Hq/0XgKrU3YWHJXG/x8GW+f3IQUGsNpWNURYmqKFHm\r\nhQebKcy8qipEUiGSCkYqlNq46rmVWw9G1CBa3W4C/qgvCTwuGauzNBZGSJTGYinqQkjhQrtNredc\r\nb8PCMdK5fg5BOl2H/nNdTWtUiCYkhB8y8hB3F8Vq/Y+t8zf6/IMP2KKFEG4ve4CETF2gba9UVXli\r\nTK2lQ1Hr92l3PzeHo0gBiKG1Ay+1bqo7a+0qcNLzxbGClI0dVhSFTz1QFAWsier5UELrCkWRI8/n\r\nHgTu9XoLn0upJjT5wyB8b1xk84WHZqG8U7D3TM7kTM7kTM7kV034/vh+HOyR70C22NbWFo6OjiCl\r\nxGAwwHw+x+7urveLz58/j+3tbQwGAx+FQHYpMQIvXLiAt956C4PBAGtra+95m8/kdPG0Kh6mxScO\r\nDxuh97jzRA4pfSdkLlCoHDfYiCVlrfXOEbCYMcBz3YWOKTkRHHTkYVVauwq2PAE2tZWATVQaxhpf\r\n2INaaYwLSUuSdlEK7qQKIYDoZDVkbqjO5/NW/1E7FwGT4fMBTZgYgbTkEBFDiHL4Of9WQkDCGqCo\r\nShhTYnnQw6wOBc6yHpIkQhxTQY8pYhW3wswIcLFaYzaZIK4BubSusMkZVVprJGlTKS5kHQGAqBx4\r\naWGhIok4cc6kKzBSIE2z1jNz4I0AwXB83fg0AB4H/jhTiNoagtAE0HHnlgMofKz4qQQH9cj5prxy\r\n9MOZHy0nNegXahNnPvI1yJlMnqlTMyY96ypJ0MmiGiitfNtVJNGNOsi6KQ73Z+ikXXSzPiyVJLQS\r\nsHSNLqaTObSewFqLlcE5dw0ZYzKeYW1tDUVeQVfWs9EIeAKAjY0NdDqdFlhXVRWm0ynG47HPAbG2\r\ntgalFGazmXNa2UZCYYnHx8d+3InRcuvWLQ829no9nD9/3rO7+v0+et1Oa90Ro5XWy9HRkc+nlSap\r\nv29Z5sjnTX7JPM9bQAOFHhtjMB6Pfa7Bsizx6quvYnNzE5cvX4bREkYDVVnPPSNgNBB1EiRxx7dD\r\nSvc5owEpInTSLuIoxTwft8JlKfcdzZM7d+74sM5ut+vXP7F/6FSNs4i4zux2u37d8EMcD3ZWzT2p\r\n6jCBvA8K46X1kjDGK83boihQCLc3zMYjv559rkEhIKWAFRJaCAcIaqdzHXDYMBSTJAH89QWklYCQ\r\nEFJBa7iKaPVz8bVOfckLgPDP+QMHGTumotawxjosqGa2CpzM6cd1tbXWV6qm1xexK8PfXI+lqs38\r\nDPuXF2ygH573LY5jwBhURYHcWghrXf8CsBT+GceIlUJVFwQh9lhVVTBoUhMQM9DpR4uiKGHRsOaj\r\nuGlLWRlUOkes0Bpf3t/usMiCssy5cyNb538ULsxYNGw/ArillD5XJq09+gytcTJAZV08x1WRd+xk\r\nrl+FOLnXNn2JtxU6fDoNvF3EVuU/NM84g5uKpyilMB5P/H7q5q9BWeXQxvXLysqK/35VaQhpkXZi\r\nxMkSAGA8Klr7kTYlitId7lXaVVUnlj2Binx+fViExpXLgwC9RQDgmZzJmZzJmZzJr6Mswg/eSyEb\r\nTCmFpaUlLC0t+SJ0PHWSUq5YY57n2NrawsrKCiaTiT+M7na7nhSQ5zk2Njawurr6nrf3TB4s0SJg\r\nhZ/A8sIdHOCg10IWIP8svcfDeTibjjuq4T3ob8484awBAB4U4E4q0AaGiO0SOlZ0nUzF0BZAnZyc\r\n8h5Zy1huol5M9Fr9qALArM69E/YDdxa58La756N+dCCZqzxp6ptYSKmgNRnqxOpxyfUBA6VSWFvB\r\nGkB64JOSeeuaWeCYnUrNEUVJ7SjZOlzOetYnD48m5yDP89YY8nGUUqLUeeuZ3PvNs7cZPY6d6F5z\r\nbMaQTUrzjzNE+Xyj63qQ0rYZfnyOcOeLWEIcuObOPGd+EVgURZFnuvGx5M87m81aa+G0eRA+E28n\r\nPR850dRvxjRhoPSsBFDR9+ME9byxkLJxaum519bW0e320Ov1MRo59h+FAFZVBRUZDxItLbmKvWVZ\r\nYnl5GaurazAGSNMMKyvnUJalLw4EOHCHADJyLOM4xnw+x97eHra3t2Gtxfnz57G1tYUsyzCZTLC3\r\nt+fn1eVL17C2tuZBo+l0iuFw6MN7l5eXMR6PMZvN0Ol0sLq66u/V6XQ8kMj1CgcKaLxnsxkmk4kv\r\nJtLr9dDr9Vo5DA8PD3F0dOTnQp7nHkAkoLjT6SDPc9y+fRt7e3u4sHUVadrB+voGpJT1xtZFFMV1\r\nWxr2mJsPEpR031p4h5fPUZrfnOFFoB0Pg6cwQpJF62Y8Hp8A3/g8lqJZWzT/Q6YcX1fh4QYBuCR8\r\n3vNDFv6d1vyPSM/R92md0x7ShHUSY1MIV8zIGInZtGwx56SUHtyiOULr2TOcrWWfV34sXD87EJLW\r\nkpTqhO5zesvUhx9tph/vA6ANHnJQiIN5i8B/Xggm1K88Bx7tbyEoSEB9r9fz4A8/QPJgeRX7cHTS\r\nYXTgQHOM67dwT5tPrZ9fFC3AQVdrLYR1Yd+21v20f0opYdCAaHyPJn1Az01rgfej29Mafb4ILOK2\r\nBO/DZj4+GADTumTXcHqWKna7uVL5de5+CIS0rT2KvuvmWsOGd8xAII4jr7fd2DiW4Hw+8/OFiibx\r\nw78okgAkjKkPLI2rBkyVqoWwdXqAFFqXrfX4YZd/CW08kzM5kzM5kzP5oCXcL1skpffwHlVVYXl5\r\neaHfvbq66n1Ubs9RjnaKdOIEqIsXL3pb70x+eRJx43gRY4EqtvCwpBPsN7SZazz8jL7PjXvuxHDQ\r\nLgT/wkkbhvgCdbVZ24TvCrqOMTBaYz6bnXC4LPu8lsZVsrU1sOaBPvejramZIHVbBOApA0Iglu3n\r\nW+QccwcvROcXvRcCp+TQkfPDnUklI1gJQDXhoe4a7qcsDIwuYLStQZqqxUaqKqpm68IQ2wyVphpp\r\nWZatSqSUwzGfz+Ecoia0j/4G4HP9uWcwDKBx+QTJSScGHDmzBMrwuUYOFXesOEtqkfIjx5H6MATg\r\nuJNN/c3HhjP5+LiFjCJ6LSzQQe8tYo9Y2+R04mPOHfksy1rX5AAB9ZdbV41T7NaI6+/lfgdKScRx\r\nhF6vi+l0iqOjIxwcHGI6nWKp0/EFNJaWlnyfE7tvNpvBWpdIfmVlxbPDqOiAq8za9BmBAATu7+7u\r\n+r6lDWAymWAymaAsS3TSPtI09aGxnU7Hz7N+v+83BdpQlpaW/KkR6ZZwfEKgwhhX9XZ7exv379+H\r\nlBKXL19GlmV+TZVliePjY+zt7UEp5av3DodDX1SF2DNFUeDg4ADb29tYX7uANE19WC8HZmie8v4J\r\n9VsSJ76dBBTw+UqFGuha/B4EgHAdEuqW2Wzm2ZS0VgjQUUpB6KK1nvg64uylRWGp9B4HBflaCNvC\r\nn9/P/0i2xorHaroDkfbBCq05D0qZplo0bwsxrcjgoEIIYThEHEc1COj0XdPXri/aOUdN60cIpzdd\r\n37fHln7z+SkloBT1g6hB4Lbe4nqTnoO/x4tCSCkxHo/9fTh7mfRqnufIssznouQhpVJKGCl8zkQO\r\nJnPAmO/L4QHHRLMiQlrDWAtjLWIAkvrDmCZlBuB/tDFI0qbADoG3pDsW7Z3h/h8an+H8DA9jOND6\r\nToxiXigstF9CHcPfo/vkeb4Q7KXPc0Ca567kLOoQvG2B0dq0rtmwBIu6H219uFEhTav6OuodP/8v\r\nS/gYcf1J/bzoc6TX3OcNpAAsFuWgJNgVEMbCooIVsdMy0kDYAsZ0UEmDBHNYEcOYCKI0ELGAlpSv\r\nQCCCy3mrEaMSQKotrCwhdAwoAUgL2AqiVLCRgIFBJYEUlFrgvekrl/JDtQ6MuP1CfwOL7SJ+WLFI\r\n+Bxe9H3KN/x+OJgfhPD9hf4GTvbDogMG/h6NBzFk+LX4Zxe9DpysZr6ojaQrwmtQ+/lr4YHhmZzJ\r\nmfzyxdL/rQWshBEuNYlCBSB2b6HOXlK/Z7SGiBWcdydwsvTjg+X90MmkX0j/cyCP/Cjar+kzFM0B\r\nwOdg57YdETj49Wl/A/C2e9WZ/PMkClkFQNs44A4fL8ZAhiYH9ziLj64TOn1AOzyXGEBc+CbLN7MQ\r\nnJRSemfD0OYthHcuIIQPMxJoDP7QAV20CYcAJU1WcqA9EyFuEmcvMpg4uHkaMh/eMzRAuGHPAR7q\r\nE+5MhM4tdwgohx5VE3Uhkk01TNdWYqc04Y8cxefAF/1e9Gz88yGrg75DoZDkaPI5xOfbIlA1BHxO\r\nkyRJ/DhQGzgzJWTmUHspXPvt7hWOd9g+rtgWCV9zoVHIjTl6jTNqToLOJ+f3ZDLxf7u+cOCKEBJZ\r\nlqG/lPqQWmIAUR5EngM0BNBpbLLMMW+n06kHp+I4xvLyMs6dO+cBiFu3biHLMiwvL3uwTwiBO3fu\r\neMbc2toaNjY2cPnyZWxtbSHPcxweHnrAkYAccjqstR5opOfmLEmgMabzPMfBwQHeeOMN71jHceyL\r\nJPBE+ktLS9jc3MTFixcxGo2QZRn29vb8PbMsw/r6upurqJB2Us+wcuuoAgTq3F4AYGBZSKKQBlJZ\r\nWLhr8fVM85/WJBnutKlSuwnECedfyLKm93nYIa3dKIpQTAn8t60+o+txZmL4OdqkQ8eJr6VF85yv\r\nHaViCGEghIED0hwTStSHMARuUps5AAigVc2X2FAcPOEgJBkUXLfT/sVZefzAYdF6bbPnXG5C93n3\r\nE36f62xjbF2UyUmUdRfeKwT5+Zrm/czDvjlIHIaB0/VoLfnQ/cI9C+3DtF9xAyzcL/l4lmXh+4za\r\nQae7xLx8kP4k1i3pGtLNfL/ia4Keif4O94jT5hr9zdvxIL1MQv3BwTsO0PJ9jq4ZgoLU/xRezw1o\r\n0tncXqADMBoDAmQ5MODHEs04ka6lkH2n/0ceLK6qAlWVtg4QPiwSAqO09l999VUMh8MWWMrn5ubm\r\nJh5++GEoKUEsTn4tWgdCSWi4okQuakJiLiRSUwHSUFACLCQKG0MIiyR2rG1RGSByVa5zUyEREays\r\noBEBkYBFAiPd6jcQSEUExBpABCsUIlgAFX4R8C8EjAkoJv0WgtBcdxhj/OEV3yf4tUN7O5zDPP+y\r\nEMLvwQ34+i/bQQvnDN9bSRb9ze0yWpchCLcIQOS6i6IwqNgPXXsRgBj6B7zf+djRv8N5ciZnciYf\r\nkFgA2sIIjWrsCmtqFBiYGLnsoOy4FGtRFKMjYyghAVPvGs2Z+AcmRDYgu5n2FCogyjES+hwH+fi+\r\nwv1kfqDB97jGxv6Xu698mCXiHRueGgENUsuNBdr8aXAeBH4tAm64cOeChP/NQRsOhNB1NQsdpXb4\r\n3FK1MczbzZFlah8H1sLNlTsX1B4AHmSQaJg6nK3HgZLTJARGF32eDL0wdxy1Peyv0GkgUI2cDWof\r\nGQNLS6ve4SjLErqysMZCWwsN3VqEnJVATL1w/PhzkKNG/RuCwEIIQLofoSQA6/4Ge612qq2xRMZ0\r\noK62MLBvexrCx4SDEjSm9CzEqiDwi3Ji8ZyUIbAnpcR0Oj3hFPKxD0PVODuQ+m/RfOAMHs765OCf\r\n1hpS6VafSknhZe765NSTkxlFkQfesixD1o28w83XGtCELPL1QK9R++bzmU9CT8CYO9lxINi5c6st\r\nYG00OkZZdtDr9XDu3CrGoxzj8RgHBwfQWvvQWuqnCxcu+L6hseHri8BpOk0i8IecbTJ8KSQRAEaj\r\nEe7cuQMA2Fhbx2AwcH0rJCQEZpMp7t3dxmwyxeXLl5HGCSKpICDQSVL0+/0mb6kwSFOFOBYQwsA5\r\neboG11zOT653+FqgoedgargphjnHODBAmyU9Hz+YoLGkkzcaA6AJa6c5H+qv0JkI94QQ6Ob6OAT8\r\nwrQR/PPGGFR1ISNbr30BCSkAoeqwVl249Q5ia0tYKyFQr0FL4ZcOWHPhuA0gHscJjLGYzeaYz3PP\r\nonIM05g5SQ14xYE0Ho7gno2ASPdclZ61+ob3gbXWA+r094kDss7JvY//5sx7rtsBp9s48xlog8eA\r\n26foIKOqKs+ApPFPZA3uRwqlriBUU2jDlnCv0Xgr6e1PaotEo8t4ig3OTuV5LDnwSkYi0GbAcT0U\r\nPnu4h4RgB+/7cE/kfbwI+Av1PF0/3NOpHaFdxNvD1wgHq0MdSwcxzQGLBuByLloiCliLsqxQlpUH\r\n7Wm9g/U3jSmvBlyWOQALrUvM5xpal6iqpAU0fBgkBDvyPMfOzg6klPiN3/gNZFnm5xjgdNhkMsH2\r\n9jZu3bqFRx55GICoyRXNXHF2CjCczvH3L7+CtTjDx596FDd3D/HCjZ/h955+GtJW+M4//QT/1VNP\r\nYGOlg5+8tYf97bfw2acexmB5GcIK7E/n+NFPX0Wnp/CpRx7Ciz/7J5RyDb/zzFXYqoSMUhyNh/i7\r\nf3oN1y9cwseunscs13hh5wjpbIZPXT+Pd03dYCKEO0h85ZVX8JGPfASTyQT379/HxsYGfvCDH+D8\r\n+fN45pln8Oabb+LGjRt49NFH8dRTT6EsS9y4cQPWupCsF154AZcuXcJHPvIR/PVf/zWiKMKVK1fw\r\nzDPP4O7du3j++eexsbGBZ599Frdu3cKNGzewubmJoihw5coVXL161Y8X7Vu/CsL1AV8X8/kcr732\r\nGl5//XU88cQTOD4+RpIkeOqppyCEY9b//Oc/xxNPPOH3XuAk+Eqf/dnPfoZnnnnG7/f/f3vf0mPH\r\ncaX5RUQ+7rOqbrHIKj4lkjJlUbTblqWWDBjuGTe6N7Mc73rXy/kNs/CsZ9+Y5WAwsxhgHsAAHhjo\r\nhST0+CFYUsuyZIl62OJDFKtYxVu37vtmRsQsIk/kybhZJAXLEq2+B7i8rLyZkfGOOF9855zhcIif\r\n/vSn+Na3voVnn33W30v6SOhWg9KkfQ0Bh5988gmefPJJ7+YiXMdXspKVfLViARilYSAwy2fQn+0h\r\ny4bYO7MF2wS6Qw1IBREboBPBkI8x6wjl+ApBMMIP0jT1ViUAKj7/aD9EOnVo9cQPbkMJ94J0AEzP\r\nrkDAL16iMtKhhWNeAC6iorvuIlNa5DkprFFlYXOMjeVNNjU2KQT8WhXkcu8Wgi/A5d8uwiM3Gybz\r\nUrepzvJ57Xvpw5lBPI8e1LDLzK46ZYGzZkKgh7NSwo4dKi1hB+aKDeWfAzwlqFM1HSqZPQbWmAIk\r\nI6tkASUlrJRQ0ilsXpnSGtliASkEjNZotdZc2aCgJCCiqlkXV1z45tuzaOJ6Z/ic8cCZfqQU0u88\r\nonS5WS9BsRAc+7ynzHXAXMi04vfxduMsmBCgDfsBb6ew7R+Ut7BsPH3ORAqBR/5MmE9e18207Z3F\r\nU/4pcEuaptBm5oE/AgopgjJN9lRP3GyalNDRyAXU4IF1ptMphsMhRqMR0jTFzs4ONjc3MRgM8Ic/\r\n/AF3797F2toaTp06hfX19Qr4TP4IKY9kckvBCDhrMyw7gbZUBgpiQUy506dPYzgc+jINBgMcHQ6w\r\nvb2NXq+HNE2xtraG+XyOw8ND7+vv6OgIZILdbre930FjDDIzc31aAdYaH/2YlPHpbAxAwFiKQmpc\r\nhFJU5wTeL2k+If+KVD/E3uPAB58POMBOQsxXblJc6XuFuZyMFCIVMEp1jvnMndxJIZCwyLzGGOg8\r\nA5m7UhvUAYNcQkYEN2sN53DKPwcX+UGPm9+rvgX5YQflh0BhDp7yeS0c0+F8zsscjl+ar/jvnO3N\r\nyxayMYUQ0FleKRMKUJMC2CpR+Dm0zH+qsdAmhxFVhmeYV15+GluNRsM7XE6SBIiVZ+hxsJJAfu53\r\nr9JvijLFMqmAx9yNAu/HnI3C+3q4vvHDJvp/WIec4cgPxerqnL7r1uVHlRDkpmt8X1BXN7xP8bLw\r\ndUTr6qEY738AKgGfeFCYcl0tTcEJUHVzT1oAv1XQmebRkBX7VQvVEW+r4XCIdruNNE09g53m3dls\r\n5qMZ7+3tubbQOaSKK2uwu3eOe7sHuPvpEL/J9mBthDd+/ym2N9bwP3/9Fn784nPY35/jzl4fBmv4\r\nX6/8Cn957SnYZgszAeh5hl+/exPv3LyHtV4HEvcQp038vzc/wL/+iyeAWDnX0ELi3iTD8KNPcPXC\r\nadwbDPDf/u/LeP7yE/jeN3b+6DqaTqd4/fXXcfbsWezu7uKNN95Au93G2bNnIYTARx99hNdffx0/\r\n/OEPcXBwgPl8jvl8jt/97nd46aWX8Morr+D555/HO++8g/39fRwdHeGv//qv8U//9E+YTqe4efMm\r\nrly5gps3b+Lll1/GJ598gueff97PC2+88QbOnj1be6Dz5w4w1c0zALC/v4+f//zn+Nu//Vvs7e3h\r\n/v376HQ6ePfdd3H37l088cQTMMbgrbfewt27dz2r9sknnwQAXL9+HdeuXcPOzg5GoxHefPNNWGtx\r\ncHCANE3x1FNP4fe//z3+5m/+Bq+99hqOjo7w/e9/H2+++aZXqo+Ojvye5dq1axiPx/jwww9x9uxZ\r\nvP3225BS4i//8i+RZRneeOMN5HmOF198Ea+99hrm8zmeeeYZXLhw4bEa7ytZyb8kEbCAMMitQLbI\r\nIBoJFpMx5m+9h60XrsL8xUksZjHiHBBWABqAEjACLiAdDBS++sM68iWttUaapksWRaRnENGCH+qR\r\nNQjfv/P9FOkqHDPiRKcV+PfFSkQBJsogEoALLCFBJlhKlYoSbRy5cMUDqAIuxNQJHc6XSgtXlJZ9\r\n+pATa3eNb+YBa0Vl88/TJgWEM/e4OaAHWmzJ/qPFkW9kiDmxWCz8yTp1bM4Mq/OJJYTwAQZ4XXEF\r\nPVQUQ/Yl3R+aFRAIJ5UiixVX9/S8EBBSIiqUB0OmQNb6qItZnqPFzFtdAhZCWsAH7cjhFFJVKed8\r\n5t7f7jUqfYD+H36ToszZScYYxFLA5Bq5Kc37pJCw2iDLnImj0doBnEJAF/0hzzLoPEesHjwhkrIT\r\nmrGQMkVmaVxBEsKZxREAFSrYXNmjCctXX6CIUjtx8IK3L4EVHCwlkCLLMnS73Uqa3GxMKQVtZj59\r\nAse5wknpAy6SJJkelcpnCcDSdcrDZDLxEzUHS8jEEgDG40nFFIvyslhksBaYzeYuSqWQaDZbaLXa\r\nODoaYjyeYG/vHp64sIZOp+MZSRQCntqAxk8IhlJb8EilFCgky7IlP4KkKJ47dw6NRsOXTWuN8XSC\r\n6Xzm01vvbfjFapFnSBopkoZLr9VpI0piQJLiDrh5i8zvtf/O8wzcjxxQNdu2tgw0QwcVRKfn/Ycz\r\n0fiYosWWFGLqH3ycch+aBCQQCJBlGRpRlZlkjIEFRb511CO+BgiB4jDSwmI5IEgd84mPDQ58CCGQ\r\nzRfLIBz7u9PqVsarB+AM3HxQ1B31dcoHlZMC0lCfoTqhPkNjnK9PfMNB4CutHeFhQZzIpTLxwxkO\r\nGPJ29/N/4W9WGw0Jx26WUjpGu9GALupCuuAjfC4x1kIzs2gORlL6xPak+qMPmWo0ux0IW0SEjWLE\r\nys3PWcF2JUZvyMAD4PzQBIy9UI6OjjyITXMXZwXqIqALzaOUPrXnbDarsGZDJX2xWHg2J+WFl5P7\r\nJatbV7nUbS7rDoX4d3jYE/6/0+lU8kN9ldorz0smYLguUL1UmPnM8kBrDYES9HZMXveRcl6sb1EB\r\n/C4Yi5z2fI8fGBDWd57nfg0QQvj+XFfXUkVLv9EB0vlz5/BC2sOr77yD0ye6sB9qfPvpJ/DxL++i\r\nIRROnNjA1AKf9Q8xFRK37x/ildfexNbmJvLJCIOpwOXL5yElsH9/H9+7ehnNE3MMZzne/vj3mI5z\r\nvHjtEi70zmAwGaE/neLXH36Ena2zQKONuYxQxgX//ELjazAY4Kc//Skmk4mf069evYpWq4WbN28i\r\nSRI8+eSTuHjxIgDg4ODArxHWWly+fBnj8RjXr19Ht9vFyZMncenSJbz//vtoNBq4du0alFL46KOP\r\n8IMf/ABvvPEGzp8/j+985zu4fv26N+fi/T/cF/25Cq3HtKeYzWaYTCZYX1/Hk08+ie3tbfziF7+A\r\nlM6NyO7uLn75y1/i8uXLmM1m+OY3v4lf/OIXePrpp/Hzn/8c6+vr2Nvbw9WrV/3crJTC7373O+zs\r\n7OAPf/gD2u02Tp48ib29Pbz//vs4f/48/vEf/xF37tzBj370I7z88st47rnn8Oqrr+Jb3/oWXn31\r\nVbz44otYLBb42c9+hosXL2JzcxO//OUv0W63YYwLvvbKK6/g9u3beOGFF/Dyyy/j7//+77/i2l3J\r\nSv4FixUQViIVFnEUY5pl2P7ONzH69A7u/+9XsSEk1NMXYRLARE1AKkgDSAhYKbG8s/pyheav+dwF\r\n+Oz3+/jkk0/w0ksv4b333sOpU6ewtuaIRM1mEzdu3MCpU6c8eQMoGX1chwPcvEuWX1tbWxUMJGRS\r\nr+SLk8jVaRk91m2+nPcSwCwhuOTsHCCfTCXzhq7xhqLNHN8gUFpOociWNtRcwXBgkQVFy6u+R3hw\r\nyysepPzR5j+KnE9A4wKA+HeYksn4IJlOpxUkmt5N9UJMozpWR8jCCdkwobLMGSh0jZxl8t9oIyiE\r\nAMnZQQoAACAASURBVJR0yrlkzELrGJNWut8BC2EVRMGm1LBY6By5NRiNDv0mUvlTcwEjSsDM5dvA\r\nmAK006X5UmezWVH8jwOCic3AzRuFEICxMHkJ1AohIYVArjXyLIMSEtY4dqMt0jPGwGoDmKqJXbgB\r\npc1c3SkCKVTkM4t885FyRsokMWB4mpQGgWdhn+Xl5soxN2Wjv2kirPuN+hcHf3y7F2mqiJxBlAAm\r\nrCzqUWIyHbn0PfBHbaWhde7Nx4hVR2nMZjOMx+MK6M3Be8rT4eGhr7/5fO7TiaII6+vrmE6n2N/f\r\nx3A4RKPRQKfTwc7ODvb29vDpp5/i4pPfQK/XQ6vVqryfTpgowjBnG4Tm51mWYTAYYHd3F7u7uxiP\r\nx57N1G630Wq1PMAohEC73fYMxScvXcRkMsHe3h729/cRxzFOnz6Nzc1NNFouyAm9VwgBFUfQ1vnv\r\nswLIs7wSJIGPT+rTYb/j1ykQD7VrOF44eM37CAfQKU1+KEO/TVnAozRNK8BylmWIo9SBeLJoW+HK\r\npqGhLbyyl0bloYeVGrldQBuLaOkwpwqO8zmkbm1YLDJ/cCGldBHLRckWTpOmA8WRQVgJDWY2aYHp\r\ndFJJuzpXEkvcRU61luZgizzPoLUDxN1ppK4AgPRMFMVFvVp/PzfdbDTX2HjlB2gAsem5CGLyFXlc\r\nsEAlwlpYISDhDme0tbDEng7qjuZDycoe1i8Az5ii+qW+QqBZpjXyVuZ9wEYFs19YwCYG8+kMKOpS\r\nomBR6pKtGKWq0u5hXmazWcUEnfoQzYtZnhUsXQdOOIDLeEBvsSBfaRZCECtQoLRYqIKrtOaGwWv4\r\n3Myvc+FrFr8vvF63xofp033c3JmDqGU9odhTuYNO6ntKSSglEUUKFIwmisqAII4JrIHgHVKqwhxY\r\nIlIaKhJFG4yRZRpGuzkntwI6/6pViqpwgJf2PVRWfoBH6yatE+TLrq79XLoGd/b28N9/9gq+/53v\r\nQyuFibJ4/Q/XcSJKYSKLkZlD6xzbJ0/iRDPCRruDweFnuPbMVZjFBIPbe7h56w4SZfDs5cvQC435\r\n8D6aUYTT2yehZxYKEfLJEGY2hMhz7N79DMODBW7N9qF/cBV/jM8m2kusr6/jxz/+MT799FO89tpr\r\naDQa+OCDDzxYvlgscPv2bezu7uK5557z+ws6pL5586ZX1nZ3d3Hv3j3cvXsXly9fxq1bt/Dee+/h\r\n9u3b6PV6AIAXX3wRL7/8Mrrd7lIAIL5P/ToIKbjUv+gAcTwe48aNG7h37x6m0ymOjo5w7949b2JP\r\n9Xvp0iV8/PHHOH/+PH7729/i2WefRb/fx+uvv45z587BWovpdIper4eLFy9iNBpBa412u+3nq0aj\r\ngYODA2xtbWFjYwPNZhNXrlzBe++9h9OnT+Odd97Br371K0ynU783oL0SsWpISe92uzh//jz++Z//\r\n+WsBzq5kJX/OYgFYY4FpjigzsO0I0fevYL2jkL37MZLX34S+eBryu9egeycRIQIyAJEqrIW+wrwX\r\neyo6RJrP57hz5w52d3e9LnHjxg1Mp1O02218+OGH/iBlMBig1+t5XWJ3dxcbGxuw1mI0GuGb3/wm\r\nPv74Y3Q6HWxtbS3tq1Zz159G1N/93b/9iZAAhIVUAnESIY4jSOU2nK1WE4tsjsl0DG1ypGmCtJEA\r\nwmKRzZHEjSXACijBEKKr85NrrhAmqdvcCuk2vHEcIYoVlJL+/UICxmjHqoGBUhJpmqDRSDEeTpBn\r\nGaw2UEIiVhHiKEIkFSLlPmRCFUmFOIoQq8gpTRYVh+SctUEn9WQeRcwFGgQEKs0zZxZFpoU80ilX\r\nQPiJNgfLyDyR02ApfWJNhswfDp5CSOcvSwgIKfy3VE6RNtYCwjEChZSQShZu6Qt/ifkcWhOLUBTt\r\nDghhISSwWJTgmVJkUpT4Opkuxp6xRtfI9IHYUyHoy00YU5VASenaJYoQKeWYP9YFb4kj11ZKOhNm\r\nKYT/O1IKgpkyhMADtQvAmXFlwBmiL1N9h/6YrLWeGcR9L3ITKwAV0ICep/7AgxDQ5pKAxTp/f/Qu\r\n8ktWB55yFpwogD8plPtIVSjJLmiL1jmkFMXYiqEi6ZVJqUTF7xnVGYF5eZ7j6OgISilvPgs4QPLe\r\nvXu4ffs27nx6B8ZYdDpdrK9tAFZgeDTCZDKFMRbz+QJJkiJJUhjtfK9ZC2ydOIlLly4jimLHqGu1\r\nKg7JqY7J5x0x1YjlQnXNzS55xFdqP+qD3BH+YrHAZDLBaDTC5smTaHc6iOIYo/EY09kMaaOBjV4P\r\n7U4HmydOoNFsIklTxEnimLZRhCiOkaQpdMZ9wklEUYwooqicrh1cOwtkWY7JZIrxeIzJZIrJZAop\r\nyojn1Kbc5JdYizSnhB/us4/GFAGfzWbT98Uw0AD1S+smB0gVQakIQkgYC5DvvDRtQEiFXDs2Z5Zr\r\nWAjEcYI0bSBfVA8/qBw0PiaTSeU6Hz9KKSjpwC5hLQQslBDO7ac1sEZDIqFzKAgrnEmEhf+20h0M\r\nGVusD9ZAKoEoVoiTyDGZC3amEG6Oo/XOWoMsW0CbghVb3EvjRSmJRTZ3v8N4UCaKFZIkRpLEWMxz\r\naG1gtEODpVCIlOsDcZRgMc9gtPX3WAtIoaBUBCUjTGdjGFscbEjJ5nA3f/N5vXBpVgSzcp9IVs1J\r\n+fpBiiX1odAnZFawp60xLiBWMa/CWn/gksQx0iRBI03RSFMkceznaCVdtHje9nzu5OYgPI8cwHJz\r\nlIHONawFlFSIVATAgVNRFDtguvCN5w45AJ27aObNVmNpTeYHL3WAXYVFXLEmWD68IfCE5iQ+x5Nf\r\nGr5uhMxG8glLzLxlYKq6P6gDykOLgirbSoJQJWuLvFm2Pgj3UTJGEqdIkiaiKIY1Ejq3eOs3v/4P\r\n+ALkJz/5SQTg338RaVGdU5ClZrNZOZwjBqW1zmdalmXY3t4BrIGQ1SBI1DeOxhMcTjIkMGh1Ujx9\r\n7gLu3TvA9797DZ1OE02R4PRGE6fXm0ijGPlkgn/1/Hdx5kQHG90OtnsbuD+cYnu9gZeufQOwFifa\r\nTZzvdbHZaeBEtwMBQDUldjY7uHDiJK5eeQrnLpzBha01XNrs/VHgH0mSJNja2kIURdjY2MClS5dw\r\n/fp1pGmKa9euod1u4ze/+Q3Onj2LU6dOwRiD27dv4/Tp0zhz5gzefPNNRFGEzc1NRFGEW7du4fz5\r\n83jhhRewsbGBt99+G6dOncJLL72Eg4MDvPfee7h69apn4T711FNL4/nrpJzxfbqULhCZlBLXr1/H\r\n+fPncebMGWxtbcFaixMnTuDSpUt44okn/IFhu93G9vY2Op0O2u22V243NzcBOH3jzJkz6PV6aDbd\r\n4WK328UzzzyD2WyG/f19/OhHP/JuShqNBra3t6GUws7ODrrdLnq9HuI4xsWLF3HlyhXM53OcOXMG\r\n165dw71796CUwksvvYRms4kTJ06g1Wp538krWclKvnyxsMiMhSl06FmuAZHBDvtY2AxRZnH/7Q8x\r\nUQLtc+cQr2/AIIJUEhCAEV9UrPjPJ6GlCx3ijkYjtFot9Pt9zOdzT6IZjx0e0Ol0cOLECdy4cQPD\r\n4RCLxQJra2u4deuWT5vW52az6fdHW1tbFRdP3JLl67LGfNFSuoD5fCL+63/5B0sOooFqlBUA2NjY\r\n8GavADxwQUp0ErcqZlV1p698Y843r8YYpA1VMYkhBYWUAzJ74e/gm+DZuGTlkVIJwCvDPJABB1wI\r\nTGh12l4Z4YoKZxY9SEazaUWZ5cAfZ/hQ49Qxl+j6cQxCqh9qaK7AxXFjCRCsY+Hw3/l7YqE9IJWm\r\nzUokQCEE8owPuGLTZ5nPx9SdkhKrgz8LlBEKuSJTAQp0Cahx1hTlPzQrpPeSWLUcpMb/Vlzn9ceV\r\n4JAZWMde4VHtwnYRQng/BlJKD3ADQJqmFX9tBFzR+CEAhsAtzvbjymloYh+KMXnZLsfUQV39u3dJ\r\nSFmallI+iMWX5zn6/T663S5arZZPM89zHBwcYG9vD4PBAEopbG5u4tSpU5BS4t69e+j3+8jzHO12\r\n24N71NfJFIvALWp/Ai6ozyilvClLeJ3qldJzLLIFhsMhBoMBRqORZ03yOqXT96OjI4zHY3zn+e/5\r\nzfynn36KyWSCU6dOefr5+vo6q+uSfeJP2rPpEquHgx4EPpIJ0Wg08p/5fI5zZ59Ep9PxUZDzPMd4\r\nPMZ4PMZ8Psfa2prvbyHISfNHCK7RIQRnHdLzof+wEDAP+1HIeg7viwUDkrSutBExv7hZbQhoQJRg\r\nJPXVit830an0ZV7Hxhgs7Nxfo+c5wE79mTYUlE7IwKQ5nOaH0M1COAdQnUzG2VLd8P9TvkKAzM+P\r\ndl4BekioT1MZjktfmqr5Y/ih9a4OfKO24gxZDjYbY3ygBT6P0cGAMQaz2cinW/fNmZh1n2azWemz\r\ntH7w8nB2PF8fhBBIC7NWWuvpkI7yG87ffFxKKbEwZfuE8y/dSwFTyCUB/zusS27WQh8O/NG94WY2\r\nPCCkaxxc5PnyAcdECmNobir6jijHmhASWeb2anlGriesr7N/+E//8QvZUVtrGwCmD73x4en4sl2/\r\nfh1SSvR6vcp6zQ98JpMJFosFvvOdvwBn2vI9rPOa5EDzSANQFtbmyKEQ2xkgJaxuAEpD6CmMaiGz\r\nkpnpGliRQYsEMDlUbqHjBMrCnSoDsHBBiQQ0ZJ7DRAmklTACUP7lf3zdhGXj/YXGC81ZgFurb926\r\nhdFohGvXrlV+489X9lS29BWqlDP9f++993DhwgWcPHmyNl/03q+T1JUrrKewzA/bi4aH0/Qbje+6\r\n9gTqI/nWEQp4+1I/+Tq2zUpW8mclxbRgrcVstsA0UWjbDOP//D+Qv38Ds3/zPZjvfg/ZZIGzp86i\r\noQSsAVRkYYvVS/yJff7VzV084B2JlBI3b97EYrHA9va2d0lw584djwNYa3H+/Hm8++67uHTpEj74\r\n4AP84Ac/wPvvv480dUETkyTBjRs3sL6+jjRNMRwOcfXq1aU9dp1espJSOO71eSQi4KZuQSGWFgcQ\r\n6CW0sQ2BnlCRDAE/fn+4iak7peeKNFfE6H0qLtlbRpc+kyCdiZ611kWRFBJWAIb8Cjqqw0MriDPB\r\n6qTT6VTyDFQbgyt9PO9AecJNEtY/XSOlgl/jQARPm5sBWlsyL8O0Q2UwyzKQWZUQJSCHwszO6EJx\r\n0QD3G2fFwrMTyccSBx84M6lOAeagBs8jb2Nev2EdPqx9uAP6UJGmtuIKJn8vV9ZCQJX3eQAV0If+\r\nns/nFbYT/UZKNA+owYXXx8PK55Sd4wOLkD+40F8XB7l5uQnwpPe2220AQL/f9ywWYiR2Oh2kaYrZ\r\nbIYsyzAajdBut9FutzGfuyi+pJC3220PyBA4E0WRZ6eVfVB45hv5vyOAluqQK8QE1FBa7XYbnU4H\r\n/X4fo9GoUt/UD+I4RqfTQRzHHsig0/EsyzxbivoHbZw56EB/N4v7CJSjOuTg7WKxwGg0wmAwwGQy\r\n8SxEOtygPkgg4Wg0wuHhIabTKWazGVqtlnd8T4DzZDLxz4egGB3MEHjK25fmE/KxVmGB6dL3IIEo\r\nVIckNBaoLlQkPBjKQQ8OqtNzNK75HCQZeG9N9YTRGAsh8wqLCYgqgItm0Wi5aTxFqad80YaEA6AE\r\nnvIy0RzG5y9qz9CnoOt/VbN+a6uHG3z+5e+m97faydLYJZDD2tJxMtUXP5wIn+FCdTKbzSqgJv1G\r\neSTzd/Jt22g0/MGFUgpra2t+juBgVlmmtAJ0hfN8aK4fbuxofuRzbOXwKQgIEyrfnO0HoAJq83eG\r\n4hVpIaCNC5glqI7hiZWOmkdzI/VZUqqN8UxJWrEdadWxJg2B88ZgUawFUkr/Tu5fzLchBwGtc19i\r\nKW+AN/8WBSM+jpLCh2PJ/JVSQyB190cSQhgoRelGsEYgjpV32fK4CYG3fFzzdZbalXyYAs5k2vWZ\r\nMh2+j/K7pwgABISI4UaWO9QSUXFX1IEEkFa2hhICqXtUxkDik6F/XF1DuBfEkXufKN77BblWDIHh\r\nut/D/V0cx7h06dKx6TwobeqbrVYL3/ve9x6Yr6+jclZXrkdpg+PSetB7+P7+uPfz++ryVQcsfl3b\r\nZiUr+XMTC+cqSEUKvfkQ4//zCvbuHeDMT/4dkKeYHu3j5Po6GqoIdCoBZ+5R7PW+wmHMDxG01jh1\r\n6pT3Sf9Xf/VXSJLEYyGNRsPvwV544QWkaYputwulFK5evYq9vT10u11IKXHhwgVsbm4iz3O/1wyZ\r\n5RwP4OQBygvth4/TgVdSLxE/KQeqfnNoM0/XQwDqOCAnFK60cHbccQspX8RIaeSLGFcwoiitnHhx\r\nRYDySd8hMPkoUqdk8TISuMIVHq781zmoDstYd1JH8iBElys/HDCqS7/ubyEEIlFVzpzyq72yK4SA\r\nzouIwj4gC3uPqip9QAl+hkomB0+oXkOWR10d8TZcbgtUfnvQySlnTVJ9cYW4DmAMfTYdt7EKFXLe\r\nV8P+G46tB5XxYfKo/bgOYOWTJt9U0j0Ewo1GI/T7fezt7QGA90fT6/XQaCRFZNwjDIdDH0hgbW0N\r\nGxsbHlijDyn2zjG9wnw+rZSbwDwCKwaDgc8f5TEEvompSPekaYrNzU10Oh1v8juZTLz/sU6n40GO\r\n/vAIUsoKY4izMwFUDkCov3g2cwFQctN3x4iaYT6f4/79+z7q4mw2w2zmAot0Oh1sb29jZ2fHMxGJ\r\n/SyE8GAp+RwNGYwcNAkPA/iY48w2XocchAn7JwcyOfjEFXACrxJZ/h4yJMLxwudyD441muU1hnOX\r\nIHzZz4WgOUMV415AmGpf5nMxvwaUrHZ+CEAsUs4+58AygVEcPOPsSwrCUXdYwcvL7+G/1c05ZXlF\r\npU/Useiszitpc+FzEuWZ3snZlVpr3zen06kH0ZMkwXA4rKxnxGCjeuJ+OvlBQl0ZKR98LqJxGx6C\r\ncTA5XLerdVr17VdXFw+qfyOFN6XmT1n2LAXR0pR3Sr/4Dcb4++nbFPfHUiIrDqCI4SilhLEWiyyD\r\nZO1Q2fCy9Hy+KC8AtDFF+gAkICMBZSSg3RO5yWCgISMBCDJZJzaggorqAYevUriCQYzU+/fvexY2\r\nd3OglPL9tdPprJhNK1nJSlayksdSrHA+nKUVgBXYG43RePo8zjz7JEwzwfj2IXob62g2m0vs3ccB\r\nvA91XbLcAhwBylqLzc3NCqmEW66tr6/7Pc65c+f8XpF80TabTTSbzYpOzPdDXPfj+zhO3nkc6unP\r\nSSLOjOLKAilE3FSPg4LUkKHyGXbacOMeAjBAFfAKlSFu/sQHRbhR5BLew5WRkD34MKk7YeMbdR6Q\r\ngZsNcUW7DhSl+uBmSRxEo/oJN+h1yhT/jTMkw3eFyigACEkMCcBaB1SWeTeIVAorizJJW5jMlIw0\r\nlZTMmdzkEFpAaQWpJSAZeOl8toMihaJwVWTNo7VD2EfK/y8rubwuOPONfud1zcE/blrB+1fIsAzb\r\ng1/n4AoxkMh3AeWR+nNdGXn5QkDxuHoJ+yi/VlcvfByGfqjqAHKttTffJTDt6OgIAHDy5Anf34kB\r\nuL6+js3NTXS7XfT7/YovSKpPAlum02ml/gmUIFNNAmcovxTVl5zHktkxsQtbrZZnMpNDbprL6F10\r\nErW2tgaVJp4FyEE1fkhB7EBqNxpLxhjoRGA2m/rIsY1GA4vFAvv797xfxM3NTayvr6PRSLFYzDGf\r\nL7BYyMKBf4b79/exu7sLKaUHVtvtJqbTKVqtjvd9GEVJ0S4GUZSg0ZAwJl+a5/jcOxqNPJOPn6hx\r\nFiSVl5hDxhhv3snBnrpPGFiB+hzvd3z+5W3N65HWghDEcRGTnV+4ELAyxjG/hTEQyoEDYOwyYw0W\r\neebHbyQFIuX8ycYoGOG2ZEPS4QSViUxJeZk4CKaUgtGcOayL+cid3DqTy5z1awmlRFFOAiqrZhXh\r\n+OPAM69D385svQ3TAKrMu+PWCtqkcdYojTWttXd832g0vBsO6i9xXLqgIPNtDlqGmzlupg7AMzSp\r\nP5JTaW62TmUN+7YQAhDLfv34gU94+BL2rxLHq984hmzfunQeZdPJ159wDeflC4Xqm5uPUzrGGCwW\r\ns6JeBaIogdZFQJ/FAlmmkTRiQFoIRb4s3WGWNAIqfjCr/MsUvt7S98mTJ/Hpp5/6gAUU3AlwhxJ5\r\nnqPX62F7e/srzv1KVrKSlaxkJceLACCNQBxLtDdOIlrrAjEwA3B6extJWu6bH0cgi/Z1tA+hPSAd\r\nyJEVDb9GZApuNUIWcbTn4SAhvYf2Axzc4/oNETXo+urw7/NLFPp+4hVfx7rjDBNuBhUqnxwM4UAG\r\n9+Hm0kFlgx9+eHrh5h5wphYU6GOJ0WBcEBCHOgkXRRICEAIGLnohBQMRtjDr4d+WTDmCwVj8VwiB\r\nBUqzZJ8nWe+7gyslYb2GdUASAlHcDM0xp6qDpg4Iom+uwJB4hV+Xf3PQaq3bg0PqSuYcV0TCcnDz\r\nTd52dawVKSUwF0v1w/NZB+TycklZTjIcVCMlnvzuhXVCz1Be+aTL3xtOOnRPHXjBAV+qR34/By0A\r\nHAsA8np42KRWp9CG7cHT4+UCqszGECCkyb3dbuP06dNotVqeQTcYDHB4eIj79+8XYFXbT/KtVgNJ\r\nEkFKoNtdLxhzVZCb+h05iqU+EvrsbLfbPmgEKfODwcCDfp988gl6vR5Onz7t/ZPxOS1NU+9bcTab\r\nLfXZrVMn/ZgSSkLowtdXpJBE7mQrNxpW5xBSIGlUA//EsfLlpsVxMplgMBjg/v373tdjt9tFkiRo\r\nt9sYDAYYj8c4PDzE9evXMRgMMJvN0Ov10G63sba25s2dNzbWl/oCDz40Hg8rTL2wn06n00o/5Ao2\r\nH8PEbCPzTzJNpqhc/MPBL+Qz6oms3zHXDJrNT75vAQLOnLKygAtZmQddnqvjxgM9xhnaSWkr45H6\r\nCKUZmh/TvOlBMV32B84S9OBisV4RAB2ODymiJXYapcPrLGS6ezA7Ww6KQenw//O24vWjAvAq/A7d\r\nLtC10BUBzysHHGkcUpsTC5J+m89yWCmK9pSAVRCwiJRcYjeXZVpm6XHWID1HTDle3xy0FELA2NIX\r\nHoHWfL2hduPrT2WvoqJKPnhd1K1XfP4MmbYhQMiBLGLQ8n5MJvuhhOseP1QM85Dl87JNhEIUOdNX\r\nYzSMNT4gizEGEHFx5ubm5irX8asVvl4B8AEtXnrpJR9Rng5vqe/RPeQ6YiUrWclKVrKSx02EBVSe\r\nwYoUWgo00hQKCYzN0dAAmn9af35fhNABnJTSW2zQXokO5sIDWzqk4yAf7eVob0MkM+6Gh/ZA9Bu3\r\nRBJCeF+E3MJwJZ9PIlJcObgUsguAMFBAyV6KVNlYXDHhSgXdXw+ILZugcZCAFA3+DFcEcqNdxD7p\r\nwD1BzMVcIzdu429gi6h+FmRbRtcKFq7zARh8WwFoskULzEtJRFz6J+JgDpWXA2UhCCql9J04ZMXw\r\n8tJ1ni69K0lkpf7qgLQ6AJD+VjKGg0JJWRUF06nYaIsYUZQgjlNEihQxC2sLho12dSNsyQCZ5TNk\r\n8xL04AwTUYSsNNbAwCCRaYXtCFSZk6HyHtaLZmZxAJZOELiyxScm3seovjmAwPs7B/h4XsI2pjSA\r\nEgTlAVS4bzUO5D4I4HzYpMafD+uI9xuuOPL+yE9gOEBBbWmti3jsmGsNb0JLbXN0NEKvdwJraxsA\r\n3ETuGEINWCvQbKZLeQIMpCz/JsYQMTXJ7BaA95FHi8twOMT+/j7G4zHa7TaUcpFtyQ/haDSqAAft\r\ndhvdbhdxHKPVamE6nVbMOBuNpgc4jNYwxPSxLJKqsTC5hrY5lJBQTQdSxmmEo6P7RV0ZTKfODG00\r\nctGOkyTF5uYJRFGMLMvRbLbQ6XRhrYucnec5soVBs9lGt7uOtbU1JEkDxgBSRmi1OojjZYDGMcsc\r\n67XZbBYMoEUlinbJpoMHJAnQ59G4Q5931AfCwAt8/iKzbCEEsiljLAcuIqSUkLZkwYZpCCEA5rbA\r\nMjCCrsXcp6ufH3iAILg5RQgXFb440DEQBXhXsspMrqFFTj763cFQJCvrFweOjTH+lJL8YC4FNWLz\r\nCp83OIuQ1x+fN6iew3EbzjN8XQxBpkhWfUDxtAEs+VApGWOLon5j32bkB5LPjcT0XSwWmM1m3tyD\r\n6iBtuP4nVQ4hM0BIQBSMO2OQ5ezg5QFAFz8UID+ZUkp0Op0KqMvnTSEELPKlAwMCbev8JYbzXxQv\r\nb7pDkJbXWwjyhv06XJ8pL8RgJnCLfOOSW5A64cAi5ZmvVVEUFSa9xeZX5hBwAGCr1YAxCbR2DsOF\r\nBazO3b5GPtra8mVLWG9aa9/fuKIRAuB837CSlaxkJStZyWMnKgKsxTS36BRBGpWIi0jAGrF4fFl/\r\nQFUPKN03lRZSfL8FwFtncQtI2v/Q/pjAQaD09RsSNOh9pEcA5f6HLAHo2koeXSKulIRKSggYPOhE\r\nnDcUgMrGLGQj0P9dp1hmBoTpc3CCAxaAC4FtBBz7QEqgUMA0LHJroCAcoKckrBDuXmv9M/S8cXoc\r\nROEDiK5p1Jebri0mk6X8c8WNTvdD0IibW/FnOZDIlcfwnjKdqn9GqiP68E1zXR4d+FtutkkfsNZC\r\n5853WZKUkQytBbTJYWwOYzVixDDWOvNdQ+Z2FvkiK8DBUhHjEwHlWTWiSt644sr7Yl0fARxAWzdZ\r\n1rUFVxh4xEDeRzmzgsAArnyFwlk+nB1E6ZK5JW8jArrCvIX55ZPlcRK2bwgc17FMeXmIoUhKMwcN\r\ntNY+Gi9nq5AZ78bGBm7d/Ay9jRPotNcAwQH70mzS1Ztj+QqBAnbXENLi4ODAB7aQUnqwjoJb9Pt9\r\nLBYLHxU5PBU6c+aMZ3/M53MMh0Pkee7ToDppNBqQUqLVavlyCCGwKPwAcmaUEAJWa2QF++3oyPkz\r\nJDAbhUJvjMHHH33owRDy3TebzbwpsjFuDN28eRNxHKPX66HX66HT6Tiz2qjt25JASUAiTRO05YBL\r\nbQAAEMdJREFUWh0MBgfHzoMAPLM1BG35IkkgDoF/tOjyuYkDhgRK8d+4+SMHu1CAp2axgMkKE1tj\r\noUFzr4SFdYBD4eIBQsCIgrlVLN5ClL7V+HuiGICw0MaBd+5eOkQRDmzyY9G9T0JAQ8MQa9vCzU3G\r\nQme5Z/sBgCoOb2gzoZTywVj4gQSZoJMJNQHUcRSz8ec+UgpISYwyAgNdMBAqmxuXVbcEHHSk//MN\r\nFbU5P5yL42U/o1xoTuIRzsmcl5/Ihv4g68A47g/QB/BJlFt7I8fAt1LBygw2zwFjIHUVvAoPN2K5\r\nPNfzuZRMkKmNuM83IShgjCjWMPfRhd87IVxEc2uF/7g6IgDJ9RBrHQsVwXwJa2G0duY60gXqAOCf\r\noaAesGVADrA1RhVjjxivtvhQGv4Z/lyw3s2LyMJKKYgiD0opl3YBKLo+LmA1IKSFkhKRUhBQODoa\r\nukMNAg6tKg76DKx58NryZUodsEdzV92hat1ecyUrWclKVrKSx02sEJhDIhIWcWFPaGGxAJAoASXU\r\nVxnP45GE66xJkqDf7wOAJ15wdzmk7xtjcHh4iM3NTa9/EHOQ/iY9l6zwyFc7mQzTXpwT05Ik8XvD\r\ncD+wkkeTiJuEcQCEFEN+Mh865g4rnG/C6DopkeEGjTpSrmeV93On7KSgcGWfK0Raa6gkdcqk8dy+\r\nggUi/UcykJLyJqSEVAoekeCfIg36EKBFG2/O8KCooGH5qPxcUQ/rE6hGg+RKIIExvV7PK/Mc2CNl\r\nqd1eq7BNeCRUusbzwweK+x1eebJWwBrOPJGYL2YQEoh1DGvjAtSI0WgkEMKFLYcGrLYQEIij2DMR\r\ntNaweQFKRRKxjBFHpS8nAJhOWRTEY5hGYf/iCH+j2cB0OvXssGaz6f0KOJ9prUq90oRBfTMEmUOZ\r\nzcr+SfdzBZFM4sI+QJPcbDar1Dn3/8eBdd5GVEZ654MkNMGmfISAPU+bgwuUDwLDuKN9MrElH1yN\r\nRsOPwzzP0Ww2cebMeXQ6HTSbrWJ+cH1wkc0wny+QJO40R0WiMP01WEznyLI5hBA4OjrCZDLBdDqF\r\nlNKz14hZRlGGpZTORx9j0fT7fbRaLeR5jtFo5ME/AhFD/3zEeuOUc5M55hC5DaB7iPV1NJ5g7+4u\r\n+v0+Njc3sbV5As3U9bnhcIjpZA5rBBoNiThK0Wp2IKAcU2q6QLPZxNbOKWitcefOHXzyh5sYDSfY\r\n2dlBo9FEq7nm+1RojunADWfCJ6UqfARqZIzdROObgCkORFtrfeQtWlxpDEwmE7+40rih+Z3YXtQO\r\nBC7S/MuBQCklpIqRNiLEifFA0XyxgNZzdDod52NPlmaYi8UCsyL9biteGlN8LSCzXlGYNPq+LHJo\r\nk0OJuHy2GE9FDASYou2FlJDFRsQdSOgyMAOsZ0ByxiKVl5wQ07y67NZg4ceuhfVYJI3FRjMpni+j\r\nVFtrHPNZA1Gc+Ps5q4uD0eH8x8d0eHhUB/TzeY/e02w2K+s3PwQhpqOUEpPJpMIW5HOT1hpSxyUo\r\nGqdoFNc9U1McVQBpYti6/GPJzIOXgc+fBGBySwAHyEnAFsFirICSEQSI/U9MOQGjbQGwFelDuEi9\r\n2iGGoljfZeEehOpOa424YJoKFBtc7QJg5abom3AgnrQofuPXHRMV1kJBgALECAvYXLtnqP2oU/q5\r\n2j1DLGaaE/M8x6LYPDeb7vBAENBtWNtDY3N9wzOrXZ25eS7TDpB+XIT3V97+4cEa9Tuaq1cA4EpW\r\nspKVrOTPQYSxSJUBhf5VUsCAAnw9vmsYrcG0T+73+/j444/RarW8y6LpdIpnnnkG7777Lr7xjW8g\r\nTVO89dZb6Ha7ODw8BOD2bGfPnoW1tiAWORCv2+3i1q1bfk1P0xTTqfOlTn7UsyxDo1Hq+zdu3MCV\r\nK1eglPJA4koeXSLuEByomp+GwjdknpkQxUv3H8doCoFCKSVMdrw5JVeKASxt+uhvUip4PrjyxNPg\r\neQqVzToFioNpBNZwcITAv7p06yQE73g0R1J4SUJzIo68c/PSkC3C6zPMBy+je57MoQVE4UPLsSRI\r\nuVwgyxQWalGU3fkLIhBLqRha2wKgkJAyYtGjyeQNhRmxBjExlKoyKMO81v0WthHVEQetOLBKiiXV\r\nF2fycGWbM2nCugr7BL/vOECVrtWB5fydPKBOXf/nzNDjhICs8Dm6RgFl6B3W2gr4Wte/OVjUbrcr\r\nfZbGWhRFDowTBlJRPyqBZiVjtFsJLBYwNoe0EYQAsizHcOh83glpcXQ098w/wDGsRqORr5/19XWv\r\n8PX7fQ9MpWmKtbU1b+Ybx7E3TeRO8vmH6oj6AW93YjZFUeTLPBwOMR6PMRwOMRqNkCQJRqORz48Q\r\nAuPxFFpbRFGCzc1N7OycKQJ+7KPf72N//z7abRdc5MSJk4jjFK1WB0nSQJo2fVtw/2vkt4z6MDG1\r\njDEYj8fY39/3gOgTFy77NPhBC80LZKIdzqOz2cz3LUqb90UORvKxx5moNPfyseHNEVGavnNQje4h\r\nEIfAGJ4eF23c/BjFCiqyMNoWzDwKRtFeSj+cfznQzlmM1loPiFJdc8Cdm0Tz+dXnrRgLBB5yM/4q\r\nmIbCF5uClFXwnZszhz5DeQANfjgSznN1c9SDJLyPrxnHreMAPDA8nU49OK5SB0px80zeliETednV\r\nwTIAxQ/JCHDkACBt9JRS6HQ6lXJRHVIdh+s+X0+FcCb9MAUwKB17UZKfSWOwmLm5BkJCGw2d55Bw\r\nBxlLzH1j4bxaWH+I6EA9AgPLw0UHQhvvUzh0v+fHv1QOjCxYq/SbEhJpnEDY6vPGVtcyJRN/sMfH\r\nAbeeeByE2obyF4J9VT+rpf/YlanPSlaykpWs5HEWYeF8+1kBKzW0tVCIoIyAEc5nssUySQpYduH0\r\nVUh4GDccDtFsNnHlyhX89re/9YSbzz77zFtI7e3tIUkSXL16FfP5HB988AFGoxH6/T52dnYwGo1w\r\n584dAPDBEg8PDzEcDnHu3Dns7+/j4OAAZ8+e9VZVUkpMp1M88cQT2N/fx+XLlys6x0oeXSJuNshB\r\nKfqETqmP64ghgFcndc9wZaGO2cAVIsprhSHB8sPTeBBoE5blQRKanNBzdcpgXbqUJ9rIcsYGfZPy\r\nyCPPcgWep0FSslOWmV3H5Z+XgTbOClW2nfu/gTONAhYLA9gFjC7bgqKPGmOQJK0lE0EOyM3n86Xf\r\nOIDJWXAhoMn7R127AvCMBg44cDYUr/O69n/YJ4yGG7Zr2ObhteOUE97vQ+CPt8fDzH450Bd+h/mp\r\nE84S5WWgvxuNhmdzcX9aHmw1Jfic5wQiCh8QYp7NYK3FfD7HaDTE4eGhd+BOEUSpL+V5Xtw38r7+\r\nWq2WHxvE8KOFZ21tzf8mhPAmme122wch4VFMwzFljAs4AsCD8Lxem82mj+KrtcbBwYFn43a7XR+e\r\nnkyD0zRFp9NBp9PBdDrFeDzG0dER8jxHp9NBkiQ+GnGr1UKj0UAclc7qyUTUGANtsiJ/TQgoaJMx\r\nwGqB4fDIAUMoy0x5olMzim5MbcoPRgiYs7ZkOxJVn89XHJQk4YA2B//ow4F4zhzj7L44jt37UPYf\r\nbfJKXv1HlociuS0ByyzLELOIpXUMMm7azFnQvgy2BLWob3Mm7GQyqeSljolErFg+h9F7wmjj4Rjl\r\nASp4/XC3D3WHHtRHYatgGd3jwZ+HzJ9hnsK9QHigQICcb/fYrQV0iEDm+lQGGtuc/cdNnKXJKu1G\r\neaFr/ACMp8P9txLzsASUq+5I6spIkqQKgGO8c9/AxhpoW0SRtsb5y7PWu5lQsZt3Ml1YJlC913y7\r\nbhasz2RgcMz64FunYPIZWA+UWmtdpGohvWXCcZ9IZ7DW+ViljzEW1moY8+CDpS9bwvWOzzPctw//\r\n/8PWx5WsZCUrWclKHhvJAUDAQIMIE18EB5/v/0LC0xchfF8FlG6diCRydHSEDz74AFeuXPH7NaAk\r\nugghcPnyZfT7fa8DCiHw9NNP4/3334cQAh9++CF++MMfep/yALC/v49OpwNrnZuoixcvYmdnB599\r\n9hkajYYnGKzk80l0HPgQ/v9PJVypCAEu4PhNO/2fs3w42MJZB3XPk3LyMOHpU37r8nechAMGqAZP\r\nqbAQUFXS69LhLBCHxGe+7uqU1FD5ISWLUHxiOdBvVEbOKglNvpIk8e/nChe1AVdYOegXKn6cLcPv\r\nD8sS1gHPq85LJ/AcVKVr9C4OavO2C5kpIUhJZtl1bf4o4PHDxlDIRAzz9yjveJT0eVrhdwhOk3A2\r\nWWiW6c3wEo3FIvNglVJFOZBjkRkYHWEynnu/eYeH9zGdTp0vQdnAyZMliGaMwWAwwN27dzGfz6G1\r\n9gEXGo1Ghf2R5zkGgwHOnj3r25rAv0aj4c1YQ0YwCZVjsSijYRIARn0ySRJsbW1hNBrh8PAQR0dH\r\nuHfvnmfNSSlx8uRJHB4eYjAY4Pbt2xiNRt4UGQA6nY4HwzqdjmdH0RiqE94GBKqIAlAlf2sE7H30\r\n0UfodDrY2tqCtRbr6+sV1wkExvA+wMfYdDr19UT+HMNxGeaTAzUhQMTnVZoT+PgHSoablBKSA3Go\r\n+n4jIDF8L7/Ox3Y4Z9D8xFmeYf+PVcmiI6CY5jTq47yMYXk425DmNKoHfkjF+xz1DT438Q0SzQME\r\nLPL+y/NuTMkcC+f6OpCvdv5kjNiQHQmgAgjz9H2ede79SVJAkEaj4Z8j8JWb/fLANMhNJY+8/Qk8\r\n5XNXmAfyr8nHDO9/dWlX58Lq/iMEzzij1Nd5DQOfC8//wzalD1sfwoA89E6/uWf552OBhDbG5X6h\r\nPAihAC+Pg1Af+WPXu5WsZCUrWclK/iUJ39PwfecXjeHQ/rfX6+Hg4ABvvfUWms0m1tfXMZ1Osbu7\r\ni52dHcznc3S7XXz22Wd455130G63K5Y1BBweHh7igw8+8ISIb3/727hz5w42NzdxdHTkTXr7/T6k\r\nlJ6sQWn0+31sbW15n/EreXSJQqeJx52Yf1XCgRiOJNPfnwfbDhWIx0E4kEbKB7FaQrPi457nG39i\r\nRRwHdi2BIKbKFOEKDrDMEOFKHGdfSCmXmIr0DFcWgarPKO4zkbcvB0fpd67gU35DhkjIFHmYhIE/\r\nqOzHsTq/TCEw4Y8RAhrqQHRrj2c20rVJEdCGQF+eBin9VGduci+jpM7ncwwGY8yLwBkc9CAzW6Jy\r\ndzodv0BQ3SdJ4iPVEpW82+3CGONNgwlkoCAMBL5Q0AYaX3xh5OAKLx/50CPW4WKx8CZmLhJv4sfl\r\n4eEh8jzH9va2ZxjOZjMMBgNvltxoNHDu3Dl0u11fny4Sshuz8/kcSnJmHVu8rRt/BDSqqPQ3yoN1\r\ntNuuTgeDAbIsw2g08iAj1Q2wzIgl9uZ4PPbtSfeEEZf/GKGAJDRn8HncWgsV+MjjQvniQXdofSKf\r\ndfO5rn2G/03p8znNM89k6Z+Us/qAcm7hZtNUDs6CpbZ0TMS4AqLWvZ/+ttai1Wp5/6SUBgec6iLw\r\ncp965DPwOOGHC3Xz58MkBI/CdqJ5gNjBxAokn5s0fmizxoFRrTUgSjCKB7fibV0HbFHbUEQ5Xh6+\r\nfj1s/uQMbF4mfiAQgoKU3y9DeHuFdeM+1foJD7N4OuG1x0nqDvtWspKVrGQlK1nJowvtWb/ItZT2\r\nDbRfStMUV69e9Qe+1lqcOnUKJ06c8DhAmqa4du0axuOxd6UEAOvr68jzHGma4u2338aZM2f8c3yf\r\nurm56f08E0kBKF0hPffcc37vvdo3fH75/11CsPMOUxbDAAAAAElFTkSuQmCC\r\n--Apple-Mail=_4D0B5162-526C-4D33-95B0-7037924B5757--\r\n\r\n--Apple-Mail=_E0BA9ABB-7689-4507-B940-34AA2DDB3DCC--\r\n"
  },
  {
    "path": "src/documents/tests/samples/mail.txt",
    "content": "Return-Path: <sender@example.com>\nX-Original-To: sender@mailbox4.mailhost.com\nDelivered-To: sender@mailbox4.mailhost.com\nReceived: from mx8.mailhost.com (mail8.mailhost.com [75.126.24.68])\n\tby mailbox4.mailhost.com (Postfix) with ESMTP id B62BD5498001\n\tfor <sender@mailbox4.mailhost.com>; Thu,  4 Feb 2016 22:01:17 +0000 (UTC)\nReceived: from localhost (localhost.localdomain [127.0.0.1])\n\tby mx8.mailhost.com (Postfix) with ESMTP id B41796F190D\n\tfor <sender@mailbox4.mailhost.com>; Thu,  4 Feb 2016 22:01:17 +0000 (UTC)\nX-Spam-Flag: NO\nX-Spam-Score: 0\nX-Spam-Level: \nX-Spam-Status: No, score=0 tagged_above=-999 required=3\n\ttests=[RCVD_IN_DNSWL_NONE=-0.0001]\nReceived: from mx8.mailhost.com ([127.0.0.1])\n\tby localhost (mail8.mailhost.com [127.0.0.1]) (amavisd-new, port 10024)\n\twith ESMTP id 3cj6d28FXsS3 for <sender@mailbox4.mailhost.com>;\n\tThu,  4 Feb 2016 22:01:17 +0000 (UTC)\nReceived: from smtp.mailhost.com (smtp.mailhost.com [74.55.86.74])\n\tby mx8.mailhost.com (Postfix) with ESMTP id 527D76F1529\n\tfor <paperless@example.com>; Thu,  4 Feb 2016 22:01:17 +0000 (UTC)\nReceived: from [10.114.0.19] (nl3x.mullvad.net [46.166.136.162])\n\tby smtp.mailhost.com (Postfix) with ESMTP id 9C52420C6FDA\n\tfor <paperless@example.com>; Thu,  4 Feb 2016 22:01:16 +0000 (UTC)\nTo: paperless@example.com\nFrom: Daniel Quinn <sender@example.com>\nSubject: Test 0\nMessage-ID: <56B3CA2A.6030806@example.com>\nDate: Thu, 4 Feb 2016 22:01:14 +0000\nUser-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:38.0) Gecko/20100101\n Thunderbird/38.5.0\nMIME-Version: 1.0\nContent-Type: multipart/mixed;\n boundary=\"------------090701020702030809070008\"\n\nThis is a multi-part message in MIME format.\n--------------090701020702030809070008\nContent-Type: text/plain; charset=utf-8\nContent-Transfer-Encoding: 7bit\n\nThe secret word is \"paperless\" :-)\n\n--------------090701020702030809070008\nContent-Type: application/pdf;\n name=\"test0.pdf\"\nContent-Transfer-Encoding: base64\nContent-Disposition: attachment;\n filename=\"test0.pdf\"\n\nJVBERi0xLjQKJcOkw7zDtsOfCjIgMCBvYmoKPDwvTGVuZ3RoIDMgMCBSL0ZpbHRlci9GbGF0\nZURlY29kZT4+CnN0cmVhbQp4nFWLQQvCMAyF7/kVOQutSdeuHZSA0+3gbVDwIN6c3gR38e/b\nbF4kkPfyvReyjB94IyFVF7pgG0ze4TLDZYevLamzPKEvEFqbMEZfq+WO+5GRHZbHNROLy+So\nUfFi6g7/RyusEpUl9VsQxQTlHR2oV3wUEzOdhOnXG1aw/o1yK2cYCkww4RdbUCevCmVuZHN0\ncmVhbQplbmRvYmoKCjMgMCBvYmoKMTM5CmVuZG9iagoKNSAwIG9iago8PC9MZW5ndGggNiAw\nIFIvRmlsdGVyL0ZsYXRlRGVjb2RlL0xlbmd0aDEgMTA4MjQ+PgpzdHJlYW0KeJzlOWt0G9WZ\n95uRbNmWLckPWY4SaRTFedmybI8T4rw8sS3ZiZ1YfqWSCbFkS7YEtiQkJSE8GlNeOQ5pUmh5\nZkt2l+XQNl3GhLaBpcWw0D19UGALLRRS0gM9nD0lxVBK9wCx97tXI0UJAc727L8d+c587/u9\n7p0rOZXYEyJaMkV4Io1OBuLOqmqBEPJLQqB0dG9K2NRTsQHhM4Rw/zkWH5+870e7PiRE9Rgh\n+Y+NT+wf+/b3e4YI0YYJKX41HAoEfxj6vUjIIgltrA0jYef8/nzEr0F8WXgydY2bP7QO8WOI\nSxOx0cDxxbUmxN9AfOlk4Jr4apWLI8SMKBGigcmQpYXrRBx9KtobjyVTQbJsgZDl91B+PBGK\nd9838hzipwjhjyIN8EMvLYJ5FOd4lTovX1NQWKQtLtGR/3eX+jCpIJ3qTURH4ux+wcWfIFXk\nXkIW3qXY+ft898LH/5deaNKPe8hD5DFymLxGrlAYbuIhEbIHKbnX0+QlpNLLQ4bId8n055g9\nQU4hPy3nJ0doJJe8PORucpL8xwWzeMgkuQ59+QF5DRrIz7BVYuQD0JAbyXNo9QOkbb+UKa4E\nb2MMHMuhvk7u5w6RbdzbiNxLOZyT05NnyTHYjZZTGOfhbMQbP2P0NnID3vtJmOxFmF3qTZ/+\njhQs/AWjuoFsI18jW8hEjsaT8ABfiPUbIA9gTp9mNGeGmd/JX8n9kOPO3YnIN8g4jgBg7Nxh\nfsvnZOh/ffGDpBhW8dWk4FJcrono5j/mGhc+5JeRQjK4MJehLXQt/IUPzEdVw6rF6k2qX3zR\n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\nFpt7cad50ChWDBpAN6gXdYMcYKFFMujULeg4nW5Yd0DH60gL4aaMoIZTcHRmoL+mputU/kJf\nl6zxXC7DQbm6n96l3iE576BMBocu984AfN13y+HDpHVJl9zY75X9S3xdchABiQJTCOiXzBhJ\nqy+ZTNWwC2pqEN6Dd1KzpwaJu5NpKsnySU0SkrhHJZkS1FCBNA54r6E8JFA9QO3dSUJvlFmT\nVqLaScUcU07fGGDa/T/LhW2oCmVuZHN0cmVhbQplbmRvYmoKCjYgMCBvYmoKNjI5MQplbmRv\nYmoKCjcgMCBvYmoKPDwvVHlwZS9Gb250RGVzY3JpcHRvci9Gb250TmFtZS9CQUFBQUErTGli\nZXJhdGlvblNlcmlmCi9GbGFncyA0Ci9Gb250QkJveFstNTQzIC0zMDMgMTI3NyA5ODFdL0l0\nYWxpY0FuZ2xlIDAKL0FzY2VudCA4OTEKL0Rlc2NlbnQgLTIxNgovQ2FwSGVpZ2h0IDk4MQov\nU3RlbVYgODAKL0ZvbnRGaWxlMiA1IDAgUgo+PgplbmRvYmoKCjggMCBvYmoKPDwvTGVuZ3Ro\nIDI5Mi9GaWx0ZXIvRmxhdGVEZWNvZGU+PgpzdHJlYW0KeJxdkctuwyAQRfd8Bct0EfmROA/J\nspQmseRFH6rbD3BgnCLVGGGy8N+XmUlbqQvQmZl7BxiSY3NqrAnJqx9VC0H2xmoP03jzCuQF\nrsaKLJfaqHCPaFdD50QSve08BRga249lKZK3WJuCn+XioMcLPIjkxWvwxl7l4uPYxri9OfcF\nA9ggU1FVUkMf+zx17rkbICHXstGxbMK8jJY/wfvsQOYUZ3wVNWqYXKfAd/YKokzTSpZ1XQmw\n+l8tK9hy6dVn56M0i9I0LdZV5Jx4s0NeMe+R18TbFXJBnKfIG9ZkyFvWUJ8d5wvkPTPlD8w1\n8iMz9Tyyl/Qnzp+Qz8xn5JrPPdOj7rfH5+H8f8Ym1c37ODL6JJoVTslY+P1HNzp00foG7l+O\ngwplbmRzdHJlYW0KZW5kb2JqCgo5IDAgb2JqCjw8L1R5cGUvRm9udC9TdWJ0eXBlL1RydWVU\neXBlL0Jhc2VGb250L0JBQUFBQStMaWJlcmF0aW9uU2VyaWYKL0ZpcnN0Q2hhciAwCi9MYXN0\nQ2hhciAxNQovV2lkdGhzWzc3NyA2MTAgNTAwIDI3NyAzODkgMjUwIDQ0MyAyNzcgNDQzIDUw\nMCA1MDAgNDQzIDUwMCA3NzcgNTAwIDI1MApdCi9Gb250RGVzY3JpcHRvciA3IDAgUgovVG9V\nbmljb2RlIDggMCBSCj4+CmVuZG9iagoKMTAgMCBvYmoKPDwvRjEgOSAwIFIKPj4KZW5kb2Jq\nCgoxMSAwIG9iago8PC9Gb250IDEwIDAgUgovUHJvY1NldFsvUERGL1RleHRdCj4+CmVuZG9i\nagoKMSAwIG9iago8PC9UeXBlL1BhZ2UvUGFyZW50IDQgMCBSL1Jlc291cmNlcyAxMSAwIFIv\nTWVkaWFCb3hbMCAwIDU5NSA4NDJdL0dyb3VwPDwvUy9UcmFuc3BhcmVuY3kvQ1MvRGV2aWNl\nUkdCL0kgdHJ1ZT4+L0NvbnRlbnRzIDIgMCBSPj4KZW5kb2JqCgo0IDAgb2JqCjw8L1R5cGUv\nUGFnZXMKL1Jlc291cmNlcyAxMSAwIFIKL01lZGlhQm94WyAwIDAgNTk1IDg0MiBdCi9LaWRz\nWyAxIDAgUiBdCi9Db3VudCAxPj4KZW5kb2JqCgoxMiAwIG9iago8PC9UeXBlL0NhdGFsb2cv\nUGFnZXMgNCAwIFIKL09wZW5BY3Rpb25bMSAwIFIgL1hZWiBudWxsIG51bGwgMF0KL0xhbmco\nZW4tR0IpCj4+CmVuZG9iagoKMTMgMCBvYmoKPDwvQ3JlYXRvcjxGRUZGMDA1NzAwNzIwMDY5\nMDA3NDAwNjUwMDcyPgovUHJvZHVjZXI8RkVGRjAwNEMwMDY5MDA2MjAwNzIwMDY1MDA0RjAw\nNjYwMDY2MDA2OTAwNjMwMDY1MDAyMDAwMzUwMDJFMDAzMD4KL0NyZWF0aW9uRGF0ZShEOjIw\nMTYwMjA0MjIwMDAyWicpPj4KZW5kb2JqCgp4cmVmCjAgMTQKMDAwMDAwMDAwMCA2NTUzNSBm\nIAowMDAwMDA3NTA5IDAwMDAwIG4gCjAwMDAwMDAwMTkgMDAwMDAgbiAKMDAwMDAwMDIyOSAw\nMDAwMCBuIAowMDAwMDA3NjUyIDAwMDAwIG4gCjAwMDAwMDAyNDkgMDAwMDAgbiAKMDAwMDAw\nNjYyNSAwMDAwMCBuIAowMDAwMDA2NjQ2IDAwMDAwIG4gCjAwMDAwMDY4NDEgMDAwMDAgbiAK\nMDAwMDAwNzIwMiAwMDAwMCBuIAowMDAwMDA3NDIyIDAwMDAwIG4gCjAwMDAwMDc0NTQgMDAw\nMDAgbiAKMDAwMDAwNzc1MSAwMDAwMCBuIAowMDAwMDA3ODQ4IDAwMDAwIG4gCnRyYWlsZXIK\nPDwvU2l6ZSAxNC9Sb290IDEyIDAgUgovSW5mbyAxMyAwIFIKL0lEIFsgPDRFN0ZCMEZCMjA4\nODBCNURBQkIzQTNEOTQxNDlBRTQ3Pgo8NEU3RkIwRkIyMDg4MEI1REFCQjNBM0Q5NDE0OUFF\nNDc+IF0KL0RvY0NoZWNrc3VtIC8yQTY0RDMzNzRFQTVEODMwNTRDNEI2RDFEMUY4QzU1RQo+\nPgpzdGFydHhyZWYKODAxOAolJUVPRgo=\n--------------090701020702030809070008--\n"
  },
  {
    "path": "src/documents/tests/test_checks.py",
    "content": "import unittest\n\nfrom django.test import TestCase\n\nfrom ..checks import changed_password_check\nfrom ..models import Document\nfrom .factories import DocumentFactory\n\n\nclass ChecksTestCase(TestCase):\n\n    def test_changed_password_check_empty_db(self):\n        self.assertEqual(changed_password_check(None), [])\n\n    def test_changed_password_check_no_encryption(self):\n        DocumentFactory.create(storage_type=Document.STORAGE_TYPE_UNENCRYPTED)\n        self.assertEqual(changed_password_check(None), [])\n\n    @unittest.skip(\"I don't know how to test this\")\n    def test_changed_password_check_gpg_encryption_with_good_password(self):\n        pass\n\n    @unittest.skip(\"I don't know how to test this\")\n    def test_changed_password_check_fail(self):\n        pass\n"
  },
  {
    "path": "src/documents/tests/test_consumer.py",
    "content": "import re\nimport os\nimport shutil\n\nfrom django.conf import settings\nfrom django.test import TestCase, override_settings\nfrom tempfile import TemporaryDirectory\nfrom unittest import mock\n\nfrom ..consumer import Consumer\nfrom ..models import FileInfo, Tag\n\n\nclass TestConsumer(TestCase):\n    SAMPLE_FILES = os.path.join(os.path.dirname(__file__), \"samples\")\n\n    def setUp(self):\n        self.storage = TemporaryDirectory()\n        os.makedirs(os.path.join(self.storage.name, \"documents\", \"originals\"),\n                    exist_ok=True)\n        os.makedirs(os.path.join(self.storage.name, \"documents\", \"thumbnails\"),\n                    exist_ok=True)\n        self.storage_override = override_settings(MEDIA_ROOT=self.storage.name)\n        self.storage_override.enable()\n\n        self.tmpdir = TemporaryDirectory()\n        self.tmpdir_override = override_settings(\n                CONVERT_TMPDIR=self.tmpdir.name)\n        self.tmpdir_override.enable()\n\n        self.scratchdir = TemporaryDirectory()\n        self.scratchdir_override = override_settings(\n                SCRATCH_DIR=self.scratchdir.name)\n        self.scratchdir_override.enable()\n\n        self.consumptiondir = TemporaryDirectory()\n        self.consumptiondir_override = override_settings(\n                CONSUMPTION_DIR=self.consumptiondir.name)\n        self.consumptiondir_override.enable()\n\n    def tearDown(self):\n        self.storage.cleanup()\n        self.storage_override.disable()\n        self.tmpdir.cleanup()\n        self.tmpdir_override.disable()\n        self.scratchdir.cleanup()\n        self.scratchdir_override.disable()\n        self.consumptiondir.cleanup()\n        self.consumptiondir_override.disable()\n\n    @override_settings(PAPERLESS_FILENAME_FORMAT=\"{correspondent}/{title}\")\n    def test_file_consumption(self):\n        myConsumer = Consumer(consume=settings.CONSUMPTION_DIR,\n                              scratch=settings.SCRATCH_DIR)\n\n        # Put sample document into consumption folder\n        shutil.copyfile(os.path.join(self.SAMPLE_FILES, \"letter.pdf\"),\n                        os.path.join(settings.CONSUMPTION_DIR, \"letter.pdf\"))\n\n        myConsumer.consume_new_files()\n\n        # Check if consumed file has been stored correctly\n        self.assertEqual(os.path.isfile(os.path.join(\n            settings.MEDIA_ROOT, \"documents\", \"originals\", \"none\",\n            \"letter-0000001.pdf.gpg\")), True)\n\n    @override_settings(PAPERLESS_FILENAME_FORMAT=\"{correspondent}/dummy\")\n    def test_duplicate_file_consumption(self):\n        myConsumer = Consumer(consume=settings.CONSUMPTION_DIR,\n                              scratch=settings.SCRATCH_DIR)\n\n        # Put sample document into consumption folder\n        shutil.copyfile(os.path.join(self.SAMPLE_FILES, \"letter.pdf\"),\n                        os.path.join(settings.CONSUMPTION_DIR, \"letter.pdf\"))\n        shutil.copyfile(os.path.join(self.SAMPLE_FILES, \"letter.pdf\"),\n                        os.path.join(settings.CONSUMPTION_DIR, \"letter2.pdf\"))\n\n        myConsumer.consume_new_files()\n\n        # Check if consumed file has been stored correctly\n        self.assertEqual(os.path.isfile(os.path.join(\n            settings.MEDIA_ROOT, \"documents\", \"originals\", \"none\",\n            \"dummy-0000001.pdf.gpg\")), True)\n        self.assertEqual(os.path.isfile(os.path.join(\n            settings.MEDIA_ROOT, \"documents\", \"originals\", \"none\",\n            \"dummy-0000002.pdf.gpg\")), False)\n\n    class DummyParser(object):\n        pass\n\n    def test__get_parser_class_1_parser(self):\n        self.assertEqual(\n            self._get_consumer()._get_parser_class(\"doc.pdf\"),\n            self.DummyParser\n        )\n\n    @mock.patch(\"documents.consumer.os.makedirs\")\n    @mock.patch(\"documents.consumer.os.path.exists\", return_value=True)\n    @mock.patch(\"documents.consumer.document_consumer_declaration.send\")\n    def test__get_parser_class_n_parsers(self, m, *args):\n\n        class DummyParser1(object):\n            pass\n\n        class DummyParser2(object):\n            pass\n\n        m.return_value = (\n            (None, lambda _: {\"weight\": 0, \"parser\": DummyParser1}),\n            (None, lambda _: {\"weight\": 1, \"parser\": DummyParser2}),\n        )\n        with TemporaryDirectory() as tmpdir:\n            self.assertEqual(\n                Consumer(consume=tmpdir)._get_parser_class(\"doc.pdf\"),\n                DummyParser2\n            )\n\n    @mock.patch(\"documents.consumer.os.makedirs\")\n    @mock.patch(\"documents.consumer.os.path.exists\", return_value=True)\n    @mock.patch(\"documents.consumer.document_consumer_declaration.send\")\n    def test__get_parser_class_0_parsers(self, m, *args):\n        m.return_value = ((None, lambda _: None),)\n        with TemporaryDirectory() as tmpdir:\n            self.assertIsNone(\n                Consumer(consume=tmpdir)._get_parser_class(\"doc.pdf\")\n            )\n\n    @mock.patch(\"documents.consumer.os.makedirs\")\n    @mock.patch(\"documents.consumer.os.path.exists\", return_value=True)\n    @mock.patch(\"documents.consumer.document_consumer_declaration.send\")\n    def _get_consumer(self, m, *args):\n        m.return_value = (\n            (None, lambda _: {\"weight\": 0, \"parser\": self.DummyParser}),\n        )\n        with TemporaryDirectory() as tmpdir:\n            return Consumer(consume=tmpdir)\n\n\nclass TestAttributes(TestCase):\n\n    TAGS = (\"tag1\", \"tag2\", \"tag3\")\n    EXTENSIONS = (\n        \"pdf\", \"png\", \"jpg\", \"jpeg\", \"gif\", \"tiff\", \"tif\",\n        \"PDF\", \"PNG\", \"JPG\", \"JPEG\", \"GIF\", \"TIFF\", \"TIF\",\n        \"PdF\", \"PnG\", \"JpG\", \"JPeG\", \"GiF\", \"TiFf\", \"TiF\",\n    )\n\n    def _test_guess_attributes_from_name(self, path, sender, title, tags):\n\n        for extension in self.EXTENSIONS:\n\n            f = path.format(extension)\n            file_info = FileInfo.from_path(f)\n\n            if sender:\n                self.assertEqual(file_info.correspondent.name, sender, f)\n            else:\n                self.assertIsNone(file_info.correspondent, f)\n\n            self.assertEqual(file_info.title, title, f)\n\n            self.assertEqual(tuple([t.slug for t in file_info.tags]), tags, f)\n            if extension.lower() == \"jpeg\":\n                self.assertEqual(file_info.extension, \"jpg\", f)\n            elif extension.lower() == \"tif\":\n                self.assertEqual(file_info.extension, \"tiff\", f)\n            else:\n                self.assertEqual(file_info.extension, extension.lower(), f)\n\n    def test_guess_attributes_from_name0(self):\n        self._test_guess_attributes_from_name(\n            \"/path/to/Sender - Title.{}\", \"Sender\", \"Title\", ())\n\n    def test_guess_attributes_from_name1(self):\n        self._test_guess_attributes_from_name(\n            \"/path/to/Spaced Sender - Title.{}\", \"Spaced Sender\", \"Title\", ())\n\n    def test_guess_attributes_from_name2(self):\n        self._test_guess_attributes_from_name(\n            \"/path/to/Sender - Spaced Title.{}\", \"Sender\", \"Spaced Title\", ())\n\n    def test_guess_attributes_from_name3(self):\n        self._test_guess_attributes_from_name(\n            \"/path/to/Dashed-Sender - Title.{}\", \"Dashed-Sender\", \"Title\", ())\n\n    def test_guess_attributes_from_name4(self):\n        self._test_guess_attributes_from_name(\n            \"/path/to/Sender - Dashed-Title.{}\", \"Sender\", \"Dashed-Title\", ())\n\n    def test_guess_attributes_from_name5(self):\n        self._test_guess_attributes_from_name(\n            \"/path/to/Sender - Title - tag1,tag2,tag3.{}\",\n            \"Sender\",\n            \"Title\",\n            self.TAGS\n        )\n\n    def test_guess_attributes_from_name6(self):\n        self._test_guess_attributes_from_name(\n            \"/path/to/Spaced Sender - Title - tag1,tag2,tag3.{}\",\n            \"Spaced Sender\",\n            \"Title\",\n            self.TAGS\n        )\n\n    def test_guess_attributes_from_name7(self):\n        self._test_guess_attributes_from_name(\n            \"/path/to/Sender - Spaced Title - tag1,tag2,tag3.{}\",\n            \"Sender\",\n            \"Spaced Title\",\n            self.TAGS\n        )\n\n    def test_guess_attributes_from_name8(self):\n        self._test_guess_attributes_from_name(\n            \"/path/to/Dashed-Sender - Title - tag1,tag2,tag3.{}\",\n            \"Dashed-Sender\",\n            \"Title\",\n            self.TAGS\n        )\n\n    def test_guess_attributes_from_name9(self):\n        self._test_guess_attributes_from_name(\n            \"/path/to/Sender - Dashed-Title - tag1,tag2,tag3.{}\",\n            \"Sender\",\n            \"Dashed-Title\",\n            self.TAGS\n        )\n\n    def test_guess_attributes_from_name10(self):\n        self._test_guess_attributes_from_name(\n            \"/path/to/Σενδερ - Τιτλε - tag1,tag2,tag3.{}\",\n            \"Σενδερ\",\n            \"Τιτλε\",\n            self.TAGS\n        )\n\n    def test_guess_attributes_from_name_when_correspondent_empty(self):\n        self._test_guess_attributes_from_name(\n            '/path/to/ - weird empty correspondent but should not break.{}',\n            None,\n            'weird empty correspondent but should not break',\n            ()\n        )\n\n    def test_guess_attributes_from_name_when_title_starts_with_dash(self):\n        self._test_guess_attributes_from_name(\n            '/path/to/- weird but should not break.{}',\n            None,\n            '- weird but should not break',\n            ()\n        )\n\n    def test_guess_attributes_from_name_when_title_ends_with_dash(self):\n        self._test_guess_attributes_from_name(\n            '/path/to/weird but should not break -.{}',\n            None,\n            'weird but should not break -',\n            ()\n        )\n\n    def test_guess_attributes_from_name_when_title_is_empty(self):\n        self._test_guess_attributes_from_name(\n            '/path/to/weird correspondent but should not break - .{}',\n            'weird correspondent but should not break',\n            '',\n            ()\n        )\n\n    def test_case_insensitive_tag_creation(self):\n        \"\"\"\n        Tags should be detected and created as lower case.\n        :return:\n        \"\"\"\n\n        path = \"Title - Correspondent - tAg1,TAG2.pdf\"\n        self.assertEqual(len(FileInfo.from_path(path).tags), 2)\n\n        path = \"Title - Correspondent - tag1,tag2.pdf\"\n        self.assertEqual(len(FileInfo.from_path(path).tags), 2)\n\n        self.assertEqual(Tag.objects.all().count(), 2)\n\n\nclass TestFieldPermutations(TestCase):\n\n    valid_dates = (\n        \"20150102030405Z\",\n        \"20150102Z\",\n    )\n    valid_correspondents = [\n        \"timmy\",\n        \"Dr. McWheelie\",\n        \"Dash Gor-don\",\n        \"ο Θερμαστής\",\n        \"\"\n    ]\n    valid_titles = [\"title\", \"Title w Spaces\", \"Title a-dash\", \"Τίτλος\", \"\"]\n    valid_tags = [\"tag\", \"tig,tag\", \"tag1,tag2,tag-3\"]\n    valid_extensions = [\"pdf\", \"png\", \"jpg\", \"jpeg\", \"gif\"]\n\n    def _test_guessed_attributes(self, filename, created=None,\n                                 correspondent=None, title=None,\n                                 extension=None, tags=None):\n\n        info = FileInfo.from_path(filename)\n\n        # Created\n        if created is None:\n            self.assertIsNone(info.created, filename)\n        else:\n            self.assertEqual(info.created.year, int(created[:4]), filename)\n            self.assertEqual(info.created.month, int(created[4:6]), filename)\n            self.assertEqual(info.created.day, int(created[6:8]), filename)\n\n        # Correspondent\n        if correspondent:\n            self.assertEqual(info.correspondent.name, correspondent, filename)\n        else:\n            self.assertEqual(info.correspondent, None, filename)\n\n        # Title\n        self.assertEqual(info.title, title, filename)\n\n        # Tags\n        if tags is None:\n            self.assertEqual(info.tags, (), filename)\n        else:\n            self.assertEqual(\n                [t.slug for t in info.tags], tags.split(','),\n                filename\n            )\n\n        # Extension\n        if extension == 'jpeg':\n            extension = 'jpg'\n        self.assertEqual(info.extension, extension, filename)\n\n    def test_just_title(self):\n        template = '/path/to/{title}.{extension}'\n        for title in self.valid_titles:\n            for extension in self.valid_extensions:\n                spec = dict(title=title, extension=extension)\n                filename = template.format(**spec)\n                self._test_guessed_attributes(filename, **spec)\n\n    def test_title_and_correspondent(self):\n        template = '/path/to/{correspondent} - {title}.{extension}'\n        for correspondent in self.valid_correspondents:\n            for title in self.valid_titles:\n                for extension in self.valid_extensions:\n                    spec = dict(correspondent=correspondent, title=title,\n                                extension=extension)\n                    filename = template.format(**spec)\n                    self._test_guessed_attributes(filename, **spec)\n\n    def test_title_and_correspondent_and_tags(self):\n        template = '/path/to/{correspondent} - {title} - {tags}.{extension}'\n        for correspondent in self.valid_correspondents:\n            for title in self.valid_titles:\n                for tags in self.valid_tags:\n                    for extension in self.valid_extensions:\n                        spec = dict(correspondent=correspondent, title=title,\n                                    tags=tags, extension=extension)\n                        filename = template.format(**spec)\n                        self._test_guessed_attributes(filename, **spec)\n\n    def test_created_and_correspondent_and_title_and_tags(self):\n\n        template = (\n            \"/path/to/{created} - \"\n            \"{correspondent} - \"\n            \"{title} - \"\n            \"{tags}\"\n            \".{extension}\"\n        )\n\n        for created in self.valid_dates:\n            for correspondent in self.valid_correspondents:\n                for title in self.valid_titles:\n                    for tags in self.valid_tags:\n                        for extension in self.valid_extensions:\n                            spec = {\n                                \"created\": created,\n                                \"correspondent\": correspondent,\n                                \"title\": title,\n                                \"tags\": tags,\n                                \"extension\": extension\n                            }\n                            self._test_guessed_attributes(\n                                template.format(**spec), **spec)\n\n    def test_created_and_correspondent_and_title(self):\n\n        template = \"/path/to/{created} - {correspondent} - {title}.{extension}\"\n\n        for created in self.valid_dates:\n            for correspondent in self.valid_correspondents:\n                for title in self.valid_titles:\n\n                    # Skip cases where title looks like a tag as we can't\n                    # accommodate such cases.\n                    if title.lower() == title:\n                        continue\n\n                    for extension in self.valid_extensions:\n                        spec = {\n                            \"created\": created,\n                            \"correspondent\": correspondent,\n                            \"title\": title,\n                            \"extension\": extension\n                        }\n                        self._test_guessed_attributes(\n                            template.format(**spec), **spec)\n\n    def test_created_and_title(self):\n\n        template = \"/path/to/{created} - {title}.{extension}\"\n\n        for created in self.valid_dates:\n            for title in self.valid_titles:\n                for extension in self.valid_extensions:\n                    spec = {\n                        \"created\": created,\n                        \"title\": title,\n                        \"extension\": extension\n                    }\n                    self._test_guessed_attributes(\n                        template.format(**spec), **spec)\n\n    def test_created_and_title_and_tags(self):\n\n        template = \"/path/to/{created} - {title} - {tags}.{extension}\"\n\n        for created in self.valid_dates:\n            for title in self.valid_titles:\n                for tags in self.valid_tags:\n                    for extension in self.valid_extensions:\n                        spec = {\n                            \"created\": created,\n                            \"title\": title,\n                            \"tags\": tags,\n                            \"extension\": extension\n                        }\n                        self._test_guessed_attributes(\n                            template.format(**spec), **spec)\n\n    def test_invalid_date_format(self):\n        info = FileInfo.from_path(\"/path/to/06112017Z - title.pdf\")\n        self.assertEqual(info.title, \"title\")\n        self.assertIsNone(info.created)\n\n    def test_filename_parse_transforms(self):\n\n        path = \"/some/path/to/tag1,tag2_20190908_180610_0001.pdf\"\n        all_patt = re.compile(\"^.*$\")\n        none_patt = re.compile(\"$a\")\n        exact_patt = re.compile(\"^([a-z0-9,]+)_(\\\\d{8})_(\\\\d{6})_([0-9]+)\\\\.\")\n        repl1 = \" - \\\\4 - \\\\1.\"    # (empty) corrspondent, title and tags\n        repl2 = \"\\\\2Z - \" + repl1  # creation date + repl1\n\n        # No transformations configured (= default)\n        info = FileInfo.from_path(path)\n        self.assertEqual(info.title, \"tag1,tag2_20190908_180610_0001\")\n        self.assertEqual(info.extension, \"pdf\")\n        self.assertEqual(info.tags, ())\n        self.assertIsNone(info.created)\n\n        # Pattern doesn't match (filename unaltered)\n        with self.settings(\n                FILENAME_PARSE_TRANSFORMS=[(none_patt, \"none.gif\")]):\n            info = FileInfo.from_path(path)\n            self.assertEqual(info.title, \"tag1,tag2_20190908_180610_0001\")\n            self.assertEqual(info.extension, \"pdf\")\n\n        # Simple transformation (match all)\n        with self.settings(\n                FILENAME_PARSE_TRANSFORMS=[(all_patt, \"all.gif\")]):\n            info = FileInfo.from_path(path)\n            self.assertEqual(info.title, \"all\")\n            self.assertEqual(info.extension, \"gif\")\n\n        # Multiple transformations configured (first pattern matches)\n        with self.settings(\n                FILENAME_PARSE_TRANSFORMS=[\n                    (all_patt, \"all.gif\"),\n                    (all_patt, \"anotherall.gif\")]):\n            info = FileInfo.from_path(path)\n            self.assertEqual(info.title, \"all\")\n            self.assertEqual(info.extension, \"gif\")\n\n        # Multiple transformations configured (second pattern matches)\n        with self.settings(\n                FILENAME_PARSE_TRANSFORMS=[\n                    (none_patt, \"none.gif\"),\n                    (all_patt, \"anotherall.gif\")]):\n            info = FileInfo.from_path(path)\n            self.assertEqual(info.title, \"anotherall\")\n            self.assertEqual(info.extension, \"gif\")\n\n        # Complex transformation without date in replacement string\n        with self.settings(\n                FILENAME_PARSE_TRANSFORMS=[(exact_patt, repl1)]):\n            info = FileInfo.from_path(path)\n            self.assertEqual(info.title, \"0001\")\n            self.assertEqual(info.extension, \"pdf\")\n            self.assertEqual(len(info.tags), 2)\n            self.assertEqual(info.tags[0].slug, \"tag1\")\n            self.assertEqual(info.tags[1].slug, \"tag2\")\n            self.assertIsNone(info.created)\n\n        # Complex transformation with date in replacement string\n        with self.settings(\n            FILENAME_PARSE_TRANSFORMS=[\n                (none_patt, \"none.gif\"),\n                (exact_patt, repl2),    # <-- matches\n                (exact_patt, repl1),\n                (all_patt, \"all.gif\")]):\n            info = FileInfo.from_path(path)\n            self.assertEqual(info.title, \"0001\")\n            self.assertEqual(info.extension, \"pdf\")\n            self.assertEqual(len(info.tags), 2)\n            self.assertEqual(info.tags[0].slug, \"tag1\")\n            self.assertEqual(info.tags[1].slug, \"tag2\")\n            self.assertEqual(info.created.year, 2019)\n            self.assertEqual(info.created.month, 9)\n            self.assertEqual(info.created.day, 8)\n"
  },
  {
    "path": "src/documents/tests/test_document_model.py",
    "content": "from unittest import mock\n\nfrom django.test import TestCase\n\nfrom ..models import Document, Correspondent\n\n\nclass TestDocument(TestCase):\n\n    def test_file_deletion(self):\n        document = Document.objects.create(\n            correspondent=Correspondent.objects.create(name=\"Test0\"),\n            title=\"Title\",\n            content=\"content\",\n            checksum=\"checksum\",\n        )\n        file_path = document.source_path\n        thumb_path = document.thumbnail_path\n        with mock.patch(\"documents.signals.handlers.os.unlink\") as mock_unlink:\n            document.delete()\n            mock_unlink.assert_any_call(file_path)\n            mock_unlink.assert_any_call(thumb_path)\n            self.assertEqual(mock_unlink.call_count, 2)\n"
  },
  {
    "path": "src/documents/tests/test_file_handling.py",
    "content": "import datetime\nimport os\n\nfrom dateutil import tz\nfrom django.conf import settings\nfrom django.test import TestCase, override_settings\nfrom django.utils.text import slugify\nfrom pathlib import Path\nfrom tempfile import TemporaryDirectory\nfrom unittest import mock\n\nfrom ..models import Tag, Document, Correspondent\n\n\nclass TestDate(TestCase):\n    def setUp(self):\n        self.storage = TemporaryDirectory()\n        os.makedirs(os.path.join(self.storage.name, \"documents\", \"originals\"),\n                    exist_ok=True)\n        os.makedirs(os.path.join(self.storage.name, \"documents\", \"thumbnails\"),\n                    exist_ok=True)\n        self.storage_override = override_settings(MEDIA_ROOT=self.storage.name)\n        self.storage_override.enable()\n\n    def tearDown(self):\n        self.storage.cleanup()\n        self.storage_override.disable()\n\n    @override_settings(PAPERLESS_FILENAME_FORMAT=\"\")\n    def test_source_filename(self):\n        document = Document()\n        document.file_type = \"pdf\"\n        document.storage_type = Document.STORAGE_TYPE_UNENCRYPTED\n        document.save()\n\n        self.assertEqual(document.source_filename, \"0000001.pdf\")\n\n        document.filename = \"test.pdf\"\n        self.assertEqual(document.source_filename, \"test.pdf\")\n\n    @override_settings(PAPERLESS_FILENAME_FORMAT=\"\")\n    def test_generate_source_filename(self):\n        document = Document()\n        document.file_type = \"pdf\"\n        document.storage_type = Document.STORAGE_TYPE_UNENCRYPTED\n        document.save()\n\n        self.assertEqual(document.generate_source_filename(), \"0000001.pdf\")\n\n        document.storage_type = Document.STORAGE_TYPE_GPG\n        self.assertEqual(document.generate_source_filename(),\n                         \"0000001.pdf.gpg\")\n\n    @override_settings(PAPERLESS_FILENAME_FORMAT=\"{correspondent}/\" +\n                       \"{correspondent}\")\n    def test_file_renaming(self):\n        document = Document()\n        document.file_type = \"pdf\"\n        document.storage_type = Document.STORAGE_TYPE_UNENCRYPTED\n        document.save()\n\n        # Ensure that filename is properly generated\n        self.assertEqual(document.generate_source_filename(),\n                         \"none/none-0000001.pdf\")\n        document.create_source_directory()\n        Path(document.source_path).touch()\n\n        # Test source_path\n        self.assertEqual(document.source_path, settings.MEDIA_ROOT +\n                         \"/documents/originals/none/none-0000001.pdf\")\n\n        # Enable encryption and check again\n        document.storage_type = Document.STORAGE_TYPE_GPG\n        self.assertEqual(document.generate_source_filename(),\n                         \"none/none-0000001.pdf.gpg\")\n        document.save()\n\n        self.assertEqual(os.path.isdir(settings.MEDIA_ROOT +\n                         \"/documents/originals/none\"), True)\n\n        # Set a correspondent and save the document\n        document.correspondent = Correspondent.objects.get_or_create(\n                name=\"test\")[0]\n        document.save()\n\n        # Check proper handling of files\n        self.assertEqual(os.path.isdir(settings.MEDIA_ROOT +\n                         \"/documents/originals/test\"), True)\n        self.assertEqual(os.path.isdir(settings.MEDIA_ROOT +\n                         \"/documents/originals/none\"), False)\n        self.assertEqual(os.path.isfile(settings.MEDIA_ROOT + \"/documents/\" +\n                         \"originals/test/test-0000001.pdf.gpg\"), True)\n        self.assertEqual(document.generate_source_filename(),\n                         \"test/test-0000001.pdf.gpg\")\n\n    @override_settings(PAPERLESS_FILENAME_FORMAT=\"{correspondent}/\" +\n                       \"{correspondent}\")\n    def test_file_renaming_missing_permissions(self):\n        document = Document()\n        document.file_type = \"pdf\"\n        document.storage_type = Document.STORAGE_TYPE_UNENCRYPTED\n        document.save()\n\n        # Ensure that filename is properly generated\n        self.assertEqual(document.generate_source_filename(),\n                         \"none/none-0000001.pdf\")\n        document.create_source_directory()\n        Path(document.source_path).touch()\n\n        # Test source_path\n        self.assertEqual(document.source_path, settings.MEDIA_ROOT +\n                         \"/documents/originals/none/none-0000001.pdf\")\n\n        # Make the folder read- and execute-only (no writing and no renaming)\n        os.chmod(settings.MEDIA_ROOT + \"/documents/originals/none\", 0o555)\n\n        # Set a correspondent and save the document\n        document.correspondent = Correspondent.objects.get_or_create(\n                name=\"test\")[0]\n        document.save()\n\n        # Check proper handling of files\n        self.assertEqual(os.path.isfile(settings.MEDIA_ROOT + \"/documents/\" +\n                         \"originals/none/none-0000001.pdf\"), True)\n        self.assertEqual(document.source_filename,\n                         \"none/none-0000001.pdf\")\n\n        os.chmod(settings.MEDIA_ROOT + \"/documents/originals/none\", 0o777)\n\n    @override_settings(PAPERLESS_FILENAME_FORMAT=\"{correspondent}/\" +\n                       \"{correspondent}\")\n    def test_document_delete(self):\n        document = Document()\n        document.file_type = \"pdf\"\n        document.storage_type = Document.STORAGE_TYPE_UNENCRYPTED\n        document.save()\n\n        # Ensure that filename is properly generated\n        self.assertEqual(document.generate_source_filename(),\n                         \"none/none-0000001.pdf\")\n        document.create_source_directory()\n        Path(document.source_path).touch()\n\n        # Ensure file deletion after delete\n        document.delete()\n        self.assertEqual(os.path.isfile(settings.MEDIA_ROOT +\n                         \"/documents/originals/none/none-0000001.pdf\"), False)\n        self.assertEqual(os.path.isdir(settings.MEDIA_ROOT +\n                         \"/documents/originals/none\"), False)\n\n    @override_settings(PAPERLESS_FILENAME_FORMAT=\"{correspondent}/\" +\n                       \"{correspondent}\")\n    def test_document_delete_nofile(self):\n        document = Document()\n        document.file_type = \"pdf\"\n        document.storage_type = Document.STORAGE_TYPE_UNENCRYPTED\n        document.save()\n\n        document.delete()\n\n    @override_settings(PAPERLESS_FILENAME_FORMAT=\"{correspondent}/\" +\n                       \"{correspondent}\")\n    def test_directory_not_empty(self):\n        document = Document()\n        document.file_type = \"pdf\"\n        document.storage_type = Document.STORAGE_TYPE_UNENCRYPTED\n        document.save()\n\n        # Ensure that filename is properly generated\n        self.assertEqual(document.generate_source_filename(),\n                         \"none/none-0000001.pdf\")\n        document.create_source_directory()\n        Path(document.source_path).touch()\n        Path(document.source_path + \"test\").touch()\n\n        # Set a correspondent and save the document\n        document.correspondent = Correspondent.objects.get_or_create(\n                name=\"test\")[0]\n        document.save()\n\n        # Check proper handling of files\n        self.assertEqual(os.path.isdir(settings.MEDIA_ROOT +\n                         \"/documents/originals/test\"), True)\n        self.assertEqual(os.path.isdir(settings.MEDIA_ROOT +\n                         \"/documents/originals/none\"), True)\n\n        # Cleanup\n        os.remove(settings.MEDIA_ROOT +\n                  \"/documents/originals/none/none-0000001.pdftest\")\n        os.rmdir(settings.MEDIA_ROOT + \"/documents/originals/none\")\n\n    @override_settings(PAPERLESS_FILENAME_FORMAT=\"{tags[type]}\")\n    def test_tags_with_underscore(self):\n        document = Document()\n        document.file_type = \"pdf\"\n        document.storage_type = Document.STORAGE_TYPE_UNENCRYPTED\n        document.save()\n\n        # Add tag to document\n        document.tags.create(name=\"type_demo\")\n        document.tags.create(name=\"foo_bar\")\n        document.save()\n\n        # Ensure that filename is properly generated\n        self.assertEqual(document.generate_source_filename(),\n                         \"demo-0000001.pdf\")\n        document.create_source_directory()\n        Path(document.source_path).touch()\n\n        document.delete()\n\n    @override_settings(PAPERLESS_FILENAME_FORMAT=\"{tags[type]}\")\n    def test_tags_with_dash(self):\n        document = Document()\n        document.file_type = \"pdf\"\n        document.storage_type = Document.STORAGE_TYPE_UNENCRYPTED\n        document.save()\n\n        # Add tag to document\n        document.tags.create(name=\"type-demo\")\n        document.tags.create(name=\"foo-bar\")\n        document.save()\n\n        # Ensure that filename is properly generated\n        self.assertEqual(document.generate_source_filename(),\n                         \"demo-0000001.pdf\")\n        document.create_source_directory()\n        Path(document.source_path).touch()\n\n        document.delete()\n\n    @override_settings(PAPERLESS_FILENAME_FORMAT=\"{tags[type]}\")\n    def test_tags_malformed(self):\n        document = Document()\n        document.file_type = \"pdf\"\n        document.storage_type = Document.STORAGE_TYPE_UNENCRYPTED\n        document.save()\n\n        # Add tag to document\n        document.tags.create(name=\"type:demo\")\n        document.tags.create(name=\"foo:bar\")\n        document.save()\n\n        # Ensure that filename is properly generated\n        self.assertEqual(document.generate_source_filename(),\n                         \"none-0000001.pdf\")\n        document.create_source_directory()\n        Path(document.source_path).touch()\n\n        document.delete()\n\n    @override_settings(PAPERLESS_FILENAME_FORMAT=\"{tags[0]}\")\n    def test_tags_all(self):\n        document = Document()\n        document.file_type = \"pdf\"\n        document.storage_type = Document.STORAGE_TYPE_UNENCRYPTED\n        document.save()\n\n        # Add tag to document\n        document.tags.create(name=\"demo\")\n        document.save()\n\n        # Ensure that filename is properly generated\n        self.assertEqual(document.generate_source_filename(),\n                         \"demo-0000001.pdf\")\n        document.create_source_directory()\n        Path(document.source_path).touch()\n\n        document.delete()\n\n    @override_settings(PAPERLESS_FILENAME_FORMAT=\"{tags[0]}\")\n    def test_tags_out_of_bounds_0(self):\n        document = Document()\n        document.file_type = \"pdf\"\n        document.storage_type = Document.STORAGE_TYPE_UNENCRYPTED\n        document.save()\n\n        # Ensure that filename is properly generated\n        self.assertEqual(document.generate_source_filename(),\n                         \"none-0000001.pdf\")\n        document.create_source_directory()\n        Path(document.source_path).touch()\n\n        document.delete()\n\n    @override_settings(PAPERLESS_FILENAME_FORMAT=\"{tags[10000000]}\")\n    def test_tags_out_of_bounds_10000000(self):\n        document = Document()\n        document.file_type = \"pdf\"\n        document.storage_type = Document.STORAGE_TYPE_UNENCRYPTED\n        document.save()\n\n        # Ensure that filename is properly generated\n        self.assertEqual(document.generate_source_filename(),\n                         \"none-0000001.pdf\")\n        document.create_source_directory()\n        Path(document.source_path).touch()\n\n        document.delete()\n\n    @override_settings(PAPERLESS_FILENAME_FORMAT=\"{tags[99]}\")\n    def test_tags_out_of_bounds_99(self):\n        document = Document()\n        document.file_type = \"pdf\"\n        document.storage_type = Document.STORAGE_TYPE_UNENCRYPTED\n        document.save()\n\n        # Ensure that filename is properly generated\n        self.assertEqual(document.generate_source_filename(),\n                         \"none-0000001.pdf\")\n        document.create_source_directory()\n        Path(document.source_path).touch()\n\n        document.delete()\n\n    @override_settings(PAPERLESS_FILENAME_FORMAT=\"{correspondent}/\" +\n                       \"{correspondent}/{correspondent}\")\n    def test_nested_directory_cleanup(self):\n        document = Document()\n        document.file_type = \"pdf\"\n        document.storage_type = Document.STORAGE_TYPE_UNENCRYPTED\n        document.save()\n\n        # Ensure that filename is properly generated\n        self.assertEqual(document.generate_source_filename(),\n                         \"none/none/none-0000001.pdf\")\n        document.create_source_directory()\n        Path(document.source_path).touch()\n\n        # Check proper handling of files\n        self.assertEqual(os.path.isdir(settings.MEDIA_ROOT +\n                         \"/documents/originals/none/none\"), True)\n\n        document.delete()\n\n        self.assertEqual(os.path.isfile(settings.MEDIA_ROOT +\n                         \"/documents/originals/none/none/none-0000001.pdf\"),\n                         False)\n        self.assertEqual(os.path.isdir(settings.MEDIA_ROOT +\n                         \"/documents/originals/none/none\"), False)\n        self.assertEqual(os.path.isdir(settings.MEDIA_ROOT +\n                         \"/documents/originals/none\"), False)\n        self.assertEqual(os.path.isdir(settings.MEDIA_ROOT +\n                         \"/documents/originals\"), True)\n\n    @override_settings(PAPERLESS_FILENAME_FORMAT=None)\n    def test_format_none(self):\n        document = Document()\n        document.file_type = \"pdf\"\n        document.storage_type = Document.STORAGE_TYPE_UNENCRYPTED\n        document.save()\n\n        self.assertEqual(document.generate_source_filename(), \"0000001.pdf\")\n\n    @override_settings(PAPERLESS_FILENAME_FORMAT=\"{correspondent}/\" +\n                       \"{correspondent}\")\n    def test_document_renamed(self):\n        document = Document()\n        document.file_type = \"pdf\"\n        document.storage_type = Document.STORAGE_TYPE_UNENCRYPTED\n        document.save()\n\n        # Ensure that filename is properly generated\n        self.assertEqual(document.generate_source_filename(),\n                         \"none/none-0000001.pdf\")\n        document.create_source_directory()\n        Path(document.source_path).touch()\n\n        # Test source_path\n        self.assertEqual(document.source_path, settings.MEDIA_ROOT +\n                         \"/documents/originals/none/none-0000001.pdf\")\n\n        # Rename the document \"illegaly\"\n        os.makedirs(settings.MEDIA_ROOT + \"/documents/originals/test\")\n        os.rename(settings.MEDIA_ROOT + \"/documents/originals/\" +\n                                        \"none/none-0000001.pdf\",\n                  settings.MEDIA_ROOT + \"/documents/originals/\" +\n                                        \"test/test-0000001.pdf\")\n        self.assertEqual(os.path.isfile(settings.MEDIA_ROOT + \"/documents/\" +\n                         \"originals/test/test-0000001.pdf\"), True)\n        self.assertEqual(os.path.isfile(settings.MEDIA_ROOT + \"/documents/\" +\n                         \"originals/none/none-0000001.pdf\"), False)\n\n        # Set new correspondent and expect document to be saved properly\n        document.correspondent = Correspondent.objects.get_or_create(\n                name=\"foo\")[0]\n        document.save()\n        self.assertEqual(os.path.isfile(settings.MEDIA_ROOT + \"/documents/\" +\n                         \"originals/foo/foo-0000001.pdf\"), True)\n\n        # Check proper handling of files\n        self.assertEqual(os.path.isdir(settings.MEDIA_ROOT +\n                         \"/documents/originals/foo\"), True)\n        self.assertEqual(os.path.isdir(settings.MEDIA_ROOT +\n                         \"/documents/originals/none\"), False)\n        self.assertEqual(os.path.isdir(settings.MEDIA_ROOT +\n                         \"/documents/originals/test\"), False)\n        self.assertEqual(document.generate_source_filename(),\n                         \"foo/foo-0000001.pdf\")\n\n    @override_settings(PAPERLESS_FILENAME_FORMAT=\"{correspondent}/\" +\n                       \"{correspondent}\")\n    def test_document_renamed_encrypted(self):\n        document = Document()\n        document.file_type = \"pdf\"\n        document.storage_type = Document.STORAGE_TYPE_GPG\n        document.save()\n\n        # Ensure that filename is properly generated\n        self.assertEqual(document.generate_source_filename(),\n                         \"none/none-0000001.pdf.gpg\")\n        document.create_source_directory()\n        Path(document.source_path).touch()\n\n        # Test source_path\n        self.assertEqual(document.source_path, settings.MEDIA_ROOT +\n                         \"/documents/originals/none/none-0000001.pdf.gpg\")\n\n        # Rename the document \"illegaly\"\n        os.makedirs(settings.MEDIA_ROOT + \"/documents/originals/test\")\n        os.rename(settings.MEDIA_ROOT + \"/documents/originals/\" +\n                                        \"none/none-0000001.pdf.gpg\",\n                  settings.MEDIA_ROOT + \"/documents/originals/\" +\n                                        \"test/test-0000001.pdf.gpg\")\n        self.assertEqual(os.path.isfile(settings.MEDIA_ROOT + \"/documents/\" +\n                         \"originals/test/test-0000001.pdf.gpg\"), True)\n        self.assertEqual(os.path.isfile(settings.MEDIA_ROOT + \"/documents/\" +\n                         \"originals/none/none-0000001.pdf\"), False)\n\n        # Set new correspondent and expect document to be saved properly\n        document.correspondent = Correspondent.objects.get_or_create(\n                name=\"foo\")[0]\n        document.save()\n        self.assertEqual(os.path.isfile(settings.MEDIA_ROOT + \"/documents/\" +\n                         \"originals/foo/foo-0000001.pdf.gpg\"), True)\n\n        # Check proper handling of files\n        self.assertEqual(os.path.isdir(settings.MEDIA_ROOT +\n                         \"/documents/originals/foo\"), True)\n        self.assertEqual(os.path.isdir(settings.MEDIA_ROOT +\n                         \"/documents/originals/none\"), False)\n        self.assertEqual(os.path.isdir(settings.MEDIA_ROOT +\n                         \"/documents/originals/test\"), False)\n        self.assertEqual(document.generate_source_filename(),\n                         \"foo/foo-0000001.pdf.gpg\")\n\n    def test_delete_all_empty_subdirectories(self):\n        # Create our working directory\n        tmp = TemporaryDirectory()\n\n        os.makedirs(os.path.join(tmp.name, \"empty\"))\n        os.makedirs(os.path.join(tmp.name, \"empty\", \"subdirectory\"))\n\n        os.makedirs(os.path.join(tmp.name, \"notempty\"))\n        Path(os.path.join(tmp.name, \"notempty\", \"file\")).touch()\n\n        Document.delete_all_empty_subdirectories(tmp.name)\n\n        self.assertEqual(os.path.isdir(\n            os.path.join(tmp.name, \"notempty\")), True)\n        self.assertEqual(os.path.isdir(os.path.join(tmp.name, \"empty\")), False)\n        self.assertEqual(os.path.isfile(\n            os.path.join(tmp.name, \"notempty\", \"file\")), True)\n\n        tmp.cleanup()\n\n    def test_try_delete_empty_directories(self):\n        # Create our working directory\n        tmp = TemporaryDirectory()\n\n        os.makedirs(os.path.join(tmp.name, \"notempty\"))\n        Path(os.path.join(tmp.name, \"notempty\", \"file\")).touch()\n        os.makedirs(os.path.join(tmp.name, \"notempty\", \"empty\"))\n\n        Document.try_delete_empty_directories(\n                os.path.join(tmp.name, \"notempty\", \"empty\"))\n        self.assertEqual(os.path.isdir(\n                os.path.join(tmp.name, \"notempty\")), True)\n        self.assertEqual(os.path.isfile(\n            os.path.join(tmp.name, \"notempty\", \"file\")), True)\n        self.assertEqual(os.path.isdir(\n            os.path.join(tmp.name, \"notempty\", \"empty\")), False)\n\n        tmp.cleanup()\n\n    @override_settings(PAPERLESS_FILENAME_FORMAT=\"{correspondent}/\" +\n                       \"{correspondent}\")\n    def test_document_accidentally_deleted(self):\n        document = Document()\n        document.file_type = \"pdf\"\n        document.storage_type = Document.STORAGE_TYPE_UNENCRYPTED\n        document.save()\n\n        # Ensure that filename is properly generated\n        self.assertEqual(document.generate_source_filename(),\n                         \"none/none-0000001.pdf\")\n        document.create_source_directory()\n        Path(document.source_path).touch()\n\n        # Test source_path\n        self.assertEqual(document.source_path, settings.MEDIA_ROOT +\n                         \"/documents/originals/none/none-0000001.pdf\")\n\n        # Delete the document \"illegaly\"\n        os.remove(settings.MEDIA_ROOT + \"/documents/originals/\" +\n                                        \"none/none-0000001.pdf\")\n\n        # Set new correspondent and expect document to be saved properly\n        document.correspondent = Correspondent.objects.get_or_create(\n                name=\"foo\")[0]\n        document.save()\n\n        # Check proper handling of files\n        self.assertEqual(os.path.isdir(settings.MEDIA_ROOT +\n                         \"/documents/originals/none\"), True)\n        self.assertEqual(document.source_filename,\n                         \"none/none-0000001.pdf\")\n\n    @override_settings(PAPERLESS_FILENAME_FORMAT=\"{correspondent}/\" +\n                       \"{correspondent}\")\n    def test_set_filename(self):\n        document = Document()\n        document.file_type = \"pdf\"\n        document.storage_type = Document.STORAGE_TYPE_UNENCRYPTED\n        document.save()\n\n        # Ensure that filename is properly generated\n        tmp = document.source_filename\n        self.assertEqual(document.generate_source_filename(),\n                         \"none/none-0000001.pdf\")\n        document.create_source_directory()\n        Path(document.source_path).touch()\n\n        # Set existing filename\n        document.set_filename(tmp)\n        self.assertEqual(document.source_filename, \"none/none-0000001.pdf\")\n\n        # Set non-existing filename\n        document.set_filename(\"doesnotexist\")\n        self.assertEqual(document.source_filename, \"none/none-0000001.pdf\")\n"
  },
  {
    "path": "src/documents/tests/test_importer.py",
    "content": "from django.core.management.base import CommandError\nfrom django.test import TestCase\n\nfrom ..management.commands.document_importer import Command\n\nfrom documents.settings import EXPORTER_FILE_NAME\n\n\nclass TestImporter(TestCase):\n\n    def __init__(self, *args, **kwargs):\n        TestCase.__init__(self, *args, **kwargs)\n\n    def test_check_manifest_exists(self):\n        cmd = Command()\n        self.assertRaises(\n            CommandError, cmd._check_manifest_exists, \"/tmp/manifest.json\")\n\n    def test_check_manifest(self):\n\n        cmd = Command()\n        cmd.source = \"/tmp\"\n\n        cmd.manifest = [{\"model\": \"documents.document\"}]\n        with self.assertRaises(CommandError) as cm:\n            cmd._check_manifest()\n        self.assertTrue(\n            'The manifest file contains a record' in str(cm.exception))\n\n        cmd.manifest = [{\n            \"model\": \"documents.document\",\n            EXPORTER_FILE_NAME: \"noexist.pdf\"\n        }]\n        # self.assertRaises(CommandError, cmd._check_manifest)\n        with self.assertRaises(CommandError) as cm:\n            cmd._check_manifest()\n        self.assertTrue(\n            'The manifest file refers to \"noexist.pdf\"' in str(cm.exception))\n"
  },
  {
    "path": "src/documents/tests/test_logger.py",
    "content": "import logging\nimport uuid\n\nfrom unittest import mock\n\nfrom django.test import TestCase\n\nfrom ..models import Log\n\n\nclass TestPaperlessLog(TestCase):\n\n    def __init__(self, *args, **kwargs):\n        TestCase.__init__(self, *args, **kwargs)\n        self.logger = logging.getLogger(\n            \"documents.management.commands.document_consumer\")\n\n    def test_that_it_saves_at_all(self):\n\n        kw = {\"group\": uuid.uuid4()}\n\n        self.assertEqual(Log.objects.all().count(), 0)\n\n        with mock.patch(\"logging.StreamHandler.emit\") as __:\n\n            # Debug messages are ignored by default\n            self.logger.debug(\"This is a debugging message\", extra=kw)\n            self.assertEqual(Log.objects.all().count(), 0)\n\n            self.logger.info(\"This is an informational message\", extra=kw)\n            self.assertEqual(Log.objects.all().count(), 1)\n\n            self.logger.warning(\"This is an warning message\", extra=kw)\n            self.assertEqual(Log.objects.all().count(), 2)\n\n            self.logger.error(\"This is an error message\", extra=kw)\n            self.assertEqual(Log.objects.all().count(), 3)\n\n            self.logger.critical(\"This is a critical message\", extra=kw)\n            self.assertEqual(Log.objects.all().count(), 4)\n\n    def test_groups(self):\n\n        kw1 = {\"group\": uuid.uuid4()}\n        kw2 = {\"group\": uuid.uuid4()}\n\n        self.assertEqual(Log.objects.all().count(), 0)\n\n        with mock.patch(\"logging.StreamHandler.emit\") as __:\n\n            # Debug messages are ignored by default\n            self.logger.debug(\"This is a debugging message\", extra=kw1)\n            self.assertEqual(Log.objects.all().count(), 0)\n\n            self.logger.info(\"This is an informational message\", extra=kw2)\n            self.assertEqual(Log.objects.all().count(), 1)\n            self.assertEqual(Log.objects.filter(group=kw2[\"group\"]).count(), 1)\n\n            self.logger.warning(\"This is an warning message\", extra=kw1)\n            self.assertEqual(Log.objects.all().count(), 2)\n            self.assertEqual(Log.objects.filter(group=kw1[\"group\"]).count(), 1)\n\n            self.logger.error(\"This is an error message\", extra=kw2)\n            self.assertEqual(Log.objects.all().count(), 3)\n            self.assertEqual(Log.objects.filter(group=kw2[\"group\"]).count(), 2)\n\n            self.logger.critical(\"This is a critical message\", extra=kw1)\n            self.assertEqual(Log.objects.all().count(), 4)\n            self.assertEqual(Log.objects.filter(group=kw1[\"group\"]).count(), 2)\n\n    def test_groupped_query(self):\n\n        kw = {\"group\": uuid.uuid4()}\n        with mock.patch(\"logging.StreamHandler.emit\") as __:\n            self.logger.info(\"Message 0\", extra=kw)\n            self.logger.info(\"Message 1\", extra=kw)\n            self.logger.info(\"Message 2\", extra=kw)\n            self.logger.info(\"Message 3\", extra=kw)\n\n        self.assertEqual(Log.objects.all().by_group().count(), 1)\n        self.assertEqual(\n            Log.objects.all().by_group()[0][\"messages\"],\n            \"Message 0\\nMessage 1\\nMessage 2\\nMessage 3\"\n        )\n"
  },
  {
    "path": "src/documents/tests/test_mail.py",
    "content": "import base64\nimport os\nimport magic\n\nfrom hashlib import md5\nfrom unittest import mock\n\nfrom django.conf import settings\nfrom django.test import TestCase\n\nfrom ..mail import Message, Attachment\n\n\nclass TestMessage(TestCase):\n\n    def __init__(self, *args, **kwargs):\n\n        TestCase.__init__(self, *args, **kwargs)\n        self.sample = os.path.join(\n            settings.BASE_DIR,\n            \"documents\",\n            \"tests\",\n            \"samples\",\n            \"mail.txt\"\n        )\n\n    def test_init(self):\n\n        with open(self.sample, \"rb\") as f:\n\n            with mock.patch(\"logging.StreamHandler.emit\") as __:\n                message = Message(f.read())\n\n            self.assertTrue(message)\n            self.assertEqual(message.subject, \"Test 0\")\n\n            data = message.attachment.read()\n\n            self.assertEqual(\n                md5(data).hexdigest(), \"7c89655f9e9eb7dd8cde8568e8115d59\")\n\n            self.assertEqual(\n                message.attachment.content_type, \"application/pdf\")\n            with magic.Magic(flags=magic.MAGIC_MIME_TYPE) as m:\n                self.assertEqual(m.id_buffer(data), \"application/pdf\")\n\n\nclass TestInlineMessage(TestCase):\n\n    def __init__(self, *args, **kwargs):\n\n        TestCase.__init__(self, *args, **kwargs)\n        self.sample = os.path.join(\n            settings.BASE_DIR,\n            \"documents\",\n            \"tests\",\n            \"samples\",\n            \"inline_mail.txt\"\n        )\n\n    def test_init(self):\n\n        with open(self.sample, \"rb\") as f:\n\n            with mock.patch(\"logging.StreamHandler.emit\") as __:\n                message = Message(f.read())\n\n            self.assertTrue(message)\n            self.assertEqual(message.subject, \"Paperless Inline Image\")\n\n            data = message.attachment.read()\n\n            self.assertEqual(\n                md5(data).hexdigest(), \"30c00a7b42913e65f7fdb0be40b9eef3\")\n\n            self.assertEqual(\n                message.attachment.content_type, \"image/png\")\n            with magic.Magic(flags=magic.MAGIC_MIME_TYPE) as m:\n                self.assertEqual(m.id_buffer(data), \"image/png\")\n\n\nclass TestAttachment(TestCase):\n\n    def test_init(self):\n        data = base64.encodebytes(b\"0\")\n        self.assertEqual(Attachment(data, \"application/pdf\").suffix, \"pdf\")\n        self.assertEqual(Attachment(data, \"image/png\").suffix, \"png\")\n        self.assertEqual(Attachment(data, \"image/jpeg\").suffix, \"jpeg\")\n        self.assertEqual(Attachment(data, \"image/gif\").suffix, \"gif\")\n        self.assertEqual(Attachment(data, \"image/tiff\").suffix, \"tiff\")\n        self.assertEqual(Attachment(data, \"image/png\").read(), data)\n"
  },
  {
    "path": "src/documents/tests/test_matchables.py",
    "content": "from random import randint\n\nfrom django.contrib.admin.models import LogEntry\nfrom django.contrib.auth.models import User\nfrom django.test import TestCase, override_settings\n\nfrom ..models import Correspondent, Document, Tag\nfrom ..signals import document_consumption_finished\n\n\nclass TestMatching(TestCase):\n\n    def _test_matching(self, text, algorithm, true, false):\n        for klass in (Tag, Correspondent):\n            instance = klass.objects.create(\n                name=str(randint(10000, 99999)),\n                match=text,\n                matching_algorithm=getattr(klass, algorithm)\n            )\n            for string in true:\n                self.assertTrue(\n                    instance.matches(string),\n                    '\"%s\" should match \"%s\" but it does not' % (text, string)\n                )\n            for string in false:\n                self.assertFalse(\n                    instance.matches(string),\n                    '\"%s\" should not match \"%s\" but it does' % (text, string)\n                )\n\n    def test_match_all(self):\n\n        self._test_matching(\n            \"alpha charlie gamma\",\n            \"MATCH_ALL\",\n            (\"I have alpha, charlie, and gamma in me\",),\n            (\n                \"I have alpha in me\",\n                \"I have charlie in me\",\n                \"I have gamma in me\",\n                \"I have alpha and charlie in me\",\n                \"I have alphas, charlie, and gamma in me\",\n                \"I have alphas in me\",\n                \"I have bravo in me\",\n            )\n        )\n\n        self._test_matching(\n            \"12 34 56\",\n            \"MATCH_ALL\",\n            (\n                \"I have 12 34, and 56 in me\",\n            ),\n            (\n                \"I have 12 in me\",\n                \"I have 34 in me\",\n                \"I have 56 in me\",\n                \"I have 12 and 34 in me\",\n                \"I have 120, 34, and 56 in me\",\n                \"I have 123456 in me\",\n                \"I have 01234567 in me\",\n            )\n        )\n\n        self._test_matching(\n            'brown fox \"lazy dogs\"',\n            \"MATCH_ALL\",\n            (\n                \"the quick brown fox jumped over the lazy dogs\",\n                \"the quick brown fox jumped over the lazy  dogs\",\n            ),\n            (\n                \"the quick fox jumped over the lazy dogs\",\n                \"the quick brown wolf jumped over the lazy dogs\",\n                \"the quick brown fox jumped over the fat dogs\",\n                \"the quick brown fox jumped over the lazy... dogs\",\n            )\n        )\n\n    def test_match_any(self):\n\n        self._test_matching(\n            \"alpha charlie gamma\",\n            \"MATCH_ANY\",\n            (\n                \"I have alpha in me\",\n                \"I have charlie in me\",\n                \"I have gamma in me\",\n                \"I have alpha, charlie, and gamma in me\",\n                \"I have alpha and charlie in me\",\n            ),\n            (\n                \"I have alphas in me\",\n                \"I have bravo in me\",\n            )\n        )\n\n        self._test_matching(\n            \"12 34 56\",\n            \"MATCH_ANY\",\n            (\n                \"I have 12 in me\",\n                \"I have 34 in me\",\n                \"I have 56 in me\",\n                \"I have 12 and 34 in me\",\n                \"I have 12, 34, and 56 in me\",\n                \"I have 120, 34, and 56 in me\",\n            ),\n            (\n                \"I have 123456 in me\",\n                \"I have 01234567 in me\",\n            )\n        )\n\n        self._test_matching(\n            '\"brown fox\" \" lazy  dogs \"',\n            \"MATCH_ANY\",\n            (\n                \"the quick brown fox\",\n                \"jumped over the lazy  dogs.\",\n            ),\n            (\n                \"the lazy fox jumped over the brown dogs\",\n            )\n        )\n\n    def test_match_literal(self):\n\n        self._test_matching(\n            \"alpha charlie gamma\",\n            \"MATCH_LITERAL\",\n            (\n                \"I have 'alpha charlie gamma' in me\",\n            ),\n            (\n                \"I have alpha in me\",\n                \"I have charlie in me\",\n                \"I have gamma in me\",\n                \"I have alpha and charlie in me\",\n                \"I have alpha, charlie, and gamma in me\",\n                \"I have alphas, charlie, and gamma in me\",\n                \"I have alphas in me\",\n                \"I have bravo in me\",\n            )\n        )\n\n        self._test_matching(\n            \"12 34 56\",\n            \"MATCH_LITERAL\",\n            (\n                \"I have 12 34 56 in me\",\n            ),\n            (\n                \"I have 12 in me\",\n                \"I have 34 in me\",\n                \"I have 56 in me\",\n                \"I have 12 and 34 in me\",\n                \"I have 12 34, and 56 in me\",\n                \"I have 120, 34, and 560 in me\",\n                \"I have 120, 340, and 560 in me\",\n                \"I have 123456 in me\",\n                \"I have 01234567 in me\",\n            )\n        )\n\n    def test_match_regex(self):\n\n        self._test_matching(\n            r\"alpha\\w+gamma\",\n            \"MATCH_REGEX\",\n            (\n                \"I have alpha_and_gamma in me\",\n                \"I have alphas_and_gamma in me\",\n            ),\n            (\n                \"I have alpha in me\",\n                \"I have gamma in me\",\n                \"I have alpha and charlie in me\",\n                \"I have alpha,and,gamma in me\",\n                \"I have alpha and gamma in me\",\n                \"I have alpha, charlie, and gamma in me\",\n                \"I have alphas, charlie, and gamma in me\",\n                \"I have alphas in me\",\n            )\n        )\n\n    def test_match_fuzzy(self):\n\n        self._test_matching(\n            \"Springfield, Miss.\",\n            \"MATCH_FUZZY\",\n            (\n                \"1220 Main Street, Springf eld, Miss.\",\n                \"1220 Main Street, Spring field, Miss.\",\n                \"1220 Main Street, Springfeld, Miss.\",\n                \"1220 Main Street Springfield Miss\",\n            ),\n            (\n                \"1220 Main Street, Springfield, Mich.\",\n            )\n        )\n\n\n@override_settings(POST_CONSUME_SCRIPT=None)\nclass TestDocumentConsumptionFinishedSignal(TestCase):\n    \"\"\"\n    We make use of document_consumption_finished, so we should test that it's\n    doing what we expect wrt to tag & correspondent matching.\n    \"\"\"\n\n    def setUp(self):\n        TestCase.setUp(self)\n        User.objects.create_user(username='test_consumer', password='12345')\n        self.doc_contains = Document.objects.create(\n            content=\"I contain the keyword.\", file_type=\"pdf\")\n\n    def test_tag_applied_any(self):\n        t1 = Tag.objects.create(\n            name=\"test\", match=\"keyword\", matching_algorithm=Tag.MATCH_ANY)\n        document_consumption_finished.send(\n            sender=self.__class__, document=self.doc_contains)\n        self.assertTrue(list(self.doc_contains.tags.all()) == [t1])\n\n    def test_tag_not_applied(self):\n        Tag.objects.create(\n            name=\"test\", match=\"no-match\", matching_algorithm=Tag.MATCH_ANY)\n        document_consumption_finished.send(\n            sender=self.__class__, document=self.doc_contains)\n        self.assertTrue(list(self.doc_contains.tags.all()) == [])\n\n    def test_correspondent_applied(self):\n        correspondent = Correspondent.objects.create(\n            name=\"test\",\n            match=\"keyword\",\n            matching_algorithm=Correspondent.MATCH_ANY\n        )\n        document_consumption_finished.send(\n            sender=self.__class__, document=self.doc_contains)\n        self.assertTrue(self.doc_contains.correspondent == correspondent)\n\n    def test_correspondent_not_applied(self):\n        Tag.objects.create(\n            name=\"test\",\n            match=\"no-match\",\n            matching_algorithm=Correspondent.MATCH_ANY\n        )\n        document_consumption_finished.send(\n            sender=self.__class__, document=self.doc_contains)\n        self.assertEqual(self.doc_contains.correspondent, None)\n\n    def test_logentry_created(self):\n        document_consumption_finished.send(\n            sender=self.__class__, document=self.doc_contains)\n\n        self.assertEqual(LogEntry.objects.count(), 1)\n"
  },
  {
    "path": "src/documents/tests/test_models.py",
    "content": "from django.test import TestCase\n\nfrom ..models import Document, Correspondent\nfrom .factories import DocumentFactory, CorrespondentFactory\n\n\nclass CorrespondentTestCase(TestCase):\n\n    def test___str__(self):\n        for s in (\"test\", \"οχι\", \"test with fun_charÅc'\\\"terß\"):\n            correspondent = CorrespondentFactory.create(name=s)\n            self.assertEqual(str(correspondent), s)\n\n\nclass DocumentTestCase(TestCase):\n\n    def test_correspondent_deletion_does_not_cascade(self):\n\n        self.assertEqual(Correspondent.objects.all().count(), 0)\n        correspondent = CorrespondentFactory.create()\n        self.assertEqual(Correspondent.objects.all().count(), 1)\n\n        self.assertEqual(Document.objects.all().count(), 0)\n        DocumentFactory.create(correspondent=correspondent)\n        self.assertEqual(Document.objects.all().count(), 1)\n        self.assertIsNotNone(Document.objects.all().first().correspondent)\n\n        correspondent.delete()\n        self.assertEqual(Correspondent.objects.all().count(), 0)\n        self.assertEqual(Document.objects.all().count(), 1)\n        self.assertIsNone(Document.objects.all().first().correspondent)\n"
  },
  {
    "path": "src/documents/views.py",
    "content": "from django.http import HttpResponse, HttpResponseBadRequest\nfrom django.views.generic import DetailView, FormView, TemplateView\nfrom django_filters.rest_framework import DjangoFilterBackend\nfrom django.conf import settings\nfrom django.utils import cache\n\nfrom paperless.db import GnuPG\nfrom paperless.mixins import SessionOrBasicAuthMixin\nfrom paperless.views import StandardPagination\nfrom rest_framework.filters import OrderingFilter, SearchFilter\nfrom rest_framework.mixins import (\n    DestroyModelMixin,\n    ListModelMixin,\n    RetrieveModelMixin,\n    UpdateModelMixin\n)\nfrom rest_framework.permissions import IsAuthenticated\nfrom rest_framework.viewsets import (\n    GenericViewSet,\n    ModelViewSet,\n    ReadOnlyModelViewSet\n)\n\nfrom .filters import CorrespondentFilterSet, DocumentFilterSet, TagFilterSet\nfrom .forms import UploadForm\nfrom .models import Correspondent, Document, Log, Tag\nfrom .serialisers import (\n    CorrespondentSerializer,\n    DocumentSerializer,\n    LogSerializer,\n    TagSerializer\n)\n\n\nclass IndexView(TemplateView):\n    template_name = \"documents/index.html\"\n\n\nclass FetchView(SessionOrBasicAuthMixin, DetailView):\n\n    model = Document\n\n    def render_to_response(self, context, **response_kwargs):\n        \"\"\"\n        Override the default to return the unencrypted image/PDF as raw data.\n        \"\"\"\n\n        content_types = {\n            Document.TYPE_PDF: \"application/pdf\",\n            Document.TYPE_PNG: \"image/png\",\n            Document.TYPE_JPG: \"image/jpeg\",\n            Document.TYPE_GIF: \"image/gif\",\n            Document.TYPE_TIF: \"image/tiff\",\n            Document.TYPE_CSV: \"text/csv\",\n            Document.TYPE_MD:  \"text/markdown\",\n            Document.TYPE_TXT: \"text/plain\"\n        }\n\n        if self.kwargs[\"kind\"] == \"thumb\":\n            response = HttpResponse(\n                self._get_raw_data(self.object.thumbnail_file),\n                content_type=content_types[Document.TYPE_PNG]\n            )\n            cache.patch_cache_control(response, max_age=31536000, private=True)\n            return response\n\n        response = HttpResponse(\n            self._get_raw_data(self.object.source_file),\n            content_type=content_types[self.object.file_type]\n        )\n\n        DISPOSITION = (\n            'inline' if settings.INLINE_DOC or self.kwargs[\"kind\"] == 'preview'\n            else 'attachment'\n        )\n\n        response[\"Content-Disposition\"] = '{}; filename=\"{}\"'.format(\n            DISPOSITION, self.object.file_name)\n\n        return response\n\n    def _get_raw_data(self, file_handle):\n        if self.object.storage_type == Document.STORAGE_TYPE_UNENCRYPTED:\n            return file_handle\n        return GnuPG.decrypted(file_handle)\n\n\nclass PushView(SessionOrBasicAuthMixin, FormView):\n    \"\"\"\n    A crude REST-ish API for creating documents.\n    \"\"\"\n\n    form_class = UploadForm\n\n    def form_valid(self, form):\n        form.save()\n        return HttpResponse(\"1\", status=202)\n\n    def form_invalid(self, form):\n        return HttpResponseBadRequest(str(form.errors))\n\n\nclass CorrespondentViewSet(ModelViewSet):\n    model = Correspondent\n    queryset = Correspondent.objects.all()\n    serializer_class = CorrespondentSerializer\n    pagination_class = StandardPagination\n    permission_classes = (IsAuthenticated,)\n    filter_backends = (DjangoFilterBackend, OrderingFilter)\n    filter_class = CorrespondentFilterSet\n    ordering_fields = (\"name\", \"slug\")\n\n\nclass TagViewSet(ModelViewSet):\n    model = Tag\n    queryset = Tag.objects.all()\n    serializer_class = TagSerializer\n    pagination_class = StandardPagination\n    permission_classes = (IsAuthenticated,)\n    filter_backends = (DjangoFilterBackend, OrderingFilter)\n    filter_class = TagFilterSet\n    ordering_fields = (\"name\", \"slug\")\n\n\nclass DocumentViewSet(RetrieveModelMixin,\n                      UpdateModelMixin,\n                      DestroyModelMixin,\n                      ListModelMixin,\n                      GenericViewSet):\n    model = Document\n    queryset = Document.objects.all()\n    serializer_class = DocumentSerializer\n    pagination_class = StandardPagination\n    permission_classes = (IsAuthenticated,)\n    filter_backends = (DjangoFilterBackend, SearchFilter, OrderingFilter)\n    filter_class = DocumentFilterSet\n    search_fields = (\"title\", \"correspondent__name\", \"content\")\n    ordering_fields = (\n        \"id\", \"title\", \"correspondent__name\", \"created\", \"modified\", \"added\")\n\n\nclass LogViewSet(ReadOnlyModelViewSet):\n    model = Log\n    queryset = Log.objects.all().by_group()\n    serializer_class = LogSerializer\n    pagination_class = StandardPagination\n    permission_classes = (IsAuthenticated,)\n    filter_backends = (DjangoFilterBackend, OrderingFilter)\n    ordering_fields = (\"time\",)\n"
  },
  {
    "path": "src/manage.py",
    "content": "#!/usr/bin/env python3\nimport os\nimport sys\n\nif __name__ == \"__main__\":\n\n    os.environ.setdefault(\"DJANGO_SETTINGS_MODULE\", \"paperless.settings\")\n\n    from django.core.management import execute_from_command_line\n\n    execute_from_command_line(sys.argv)\n"
  },
  {
    "path": "src/paperless/__init__.py",
    "content": "from .checks import paths_check, binaries_check\n"
  },
  {
    "path": "src/paperless/checks.py",
    "content": "import os\nimport shutil\n\nfrom django.conf import settings\nfrom django.core.checks import Error, Warning, register\n\n\n@register()\ndef paths_check(app_configs, **kwargs):\n    \"\"\"\n    Check the various paths for existence, readability and writeability\n    \"\"\"\n\n    check_messages = []\n\n    exists_message = \"{} is set but doesn't exist.\"\n    exists_hint = \"Create a directory at {}\"\n    writeable_message = \"{} is not writeable\"\n    writeable_hint = (\n        \"Set the permissions of {} to be writeable by the user running the \"\n        \"Paperless services\"\n    )\n\n    directory = os.getenv(\"PAPERLESS_DBDIR\")\n    if directory:\n        if not os.path.exists(directory):\n            check_messages.append(Error(\n                exists_message.format(\"PAPERLESS_DBDIR\"),\n                exists_hint.format(directory)\n            ))\n        if not check_messages:\n            if not os.access(directory, os.W_OK | os.X_OK):\n                check_messages.append(Error(\n                    writeable_message.format(\"PAPERLESS_DBDIR\"),\n                    writeable_hint.format(directory)\n                ))\n\n    directory = os.getenv(\"PAPERLESS_MEDIADIR\")\n    if directory:\n        if not os.path.exists(directory):\n            check_messages.append(Error(\n                exists_message.format(\"PAPERLESS_MEDIADIR\"),\n                exists_hint.format(directory)\n            ))\n        if not check_messages:\n            if not os.access(directory, os.W_OK | os.X_OK):\n                check_messages.append(Error(\n                    writeable_message.format(\"PAPERLESS_MEDIADIR\"),\n                    writeable_hint.format(directory)\n                ))\n\n    directory = os.getenv(\"PAPERLESS_STATICDIR\")\n    if directory:\n        if not os.path.exists(directory):\n            check_messages.append(Error(\n                exists_message.format(\"PAPERLESS_STATICDIR\"),\n                exists_hint.format(directory)\n            ))\n        if not check_messages:\n            if not os.access(directory, os.W_OK | os.X_OK):\n                check_messages.append(Error(\n                    writeable_message.format(\"PAPERLESS_STATICDIR\"),\n                    writeable_hint.format(directory)\n                ))\n\n    return check_messages\n\n\n@register()\ndef binaries_check(app_configs, **kwargs):\n    \"\"\"\n    Paperless requires the existence of a few binaries, so we do some checks\n    for those here.\n    \"\"\"\n\n    error = \"Paperless can't find {}. Without it, consumption is impossible.\"\n    hint = \"Either it's not in your ${PATH} or it's not installed.\"\n\n    binaries = (\n        settings.CONVERT_BINARY,\n        settings.OPTIPNG_BINARY,\n        settings.UNPAPER_BINARY,\n        \"tesseract\"\n    )\n\n    check_messages = []\n    for binary in binaries:\n        if shutil.which(binary) is None:\n            check_messages.append(Warning(error.format(binary), hint))\n\n    return check_messages\n"
  },
  {
    "path": "src/paperless/db.py",
    "content": "import gnupg\n\nfrom django.conf import settings\n\n\nclass GnuPG:\n    \"\"\"\n    A handy singleton to use when handling encrypted files.\n    \"\"\"\n\n    gpg = gnupg.GPG(gnupghome=settings.GNUPG_HOME)\n\n    @classmethod\n    def decrypted(cls, file_handle, passphrase=None):\n\n        if not passphrase:\n            passphrase = settings.PASSPHRASE\n\n        return cls.gpg.decrypt_file(file_handle, passphrase=passphrase).data\n\n    @classmethod\n    def encrypted(cls, file_handle, passphrase=None):\n\n        if not passphrase:\n            passphrase = settings.PASSPHRASE\n\n        return cls.gpg.encrypt_file(\n            file_handle,\n            recipients=None,\n            passphrase=passphrase,\n            symmetric=True\n        ).data\n"
  },
  {
    "path": "src/paperless/middleware.py",
    "content": "from django.utils.deprecation import MiddlewareMixin\nfrom .models import User\n\n\nclass Middleware(MiddlewareMixin):\n    \"\"\"\n      This is a dummy authentication middleware class that creates what\n      is roughly an Anonymous authenticated user so we can disable login\n      and not interfere with existing user ID's. It's only used if\n      login is disabled in paperless.conf (default is to require login)\n    \"\"\"\n\n    def process_request(self, request):\n        request.user = User()\n"
  },
  {
    "path": "src/paperless/mixins.py",
    "content": "from django.contrib.auth.mixins import AccessMixin\nfrom django.contrib.auth import authenticate, login\nimport base64\n\n\nclass SessionOrBasicAuthMixin(AccessMixin):\n    \"\"\"\n    Session or Basic Authentication mixin for Django.\n    It determines if the requester is already logged in or if they have\n    provided proper http-authorization and returning the view if all goes\n    well, otherwise responding with a 401.\n\n    Base for mixin found here: https://djangosnippets.org/snippets/3073/\n    \"\"\"\n\n    def dispatch(self, request, *args, **kwargs):\n\n        # check if user is authenticated via the session\n        if request.user.is_authenticated:\n\n            # Already logged in, just return the view.\n            return super(SessionOrBasicAuthMixin, self).dispatch(\n                request, *args, **kwargs\n            )\n\n        # apparently not authenticated via session, maybe via HTTP Basic?\n        if 'HTTP_AUTHORIZATION' in request.META:\n            auth = request.META['HTTP_AUTHORIZATION'].split()\n            if len(auth) == 2:\n                # NOTE: Support for only basic authentication\n                if auth[0].lower() == \"basic\":\n                    authString = base64.b64decode(auth[1]).decode('utf-8')\n                    uname, passwd = authString.split(':')\n                    user = authenticate(username=uname, password=passwd)\n                    if user is not None:\n                        if user.is_active:\n                            login(request, user)\n                            request.user = user\n                            return super(\n                                SessionOrBasicAuthMixin, self\n                            ).dispatch(\n                                request, *args, **kwargs\n                            )\n\n        # nope, really not authenticated\n        return self.handle_no_permission()\n"
  },
  {
    "path": "src/paperless/models.py",
    "content": "from django.contrib.auth.models import User as DjangoUser\n\n\nclass User:\n    \"\"\"\n    This is a dummy django User used with our middleware to disable\n    login authentication if that is configured in paperless.conf\n    \"\"\"\n\n    is_superuser = True\n    is_active = True\n    is_staff = True\n    is_authenticated = True\n\n    @property\n    def id(self):\n        return DjangoUser.objects.order_by(\"pk\").first().pk\n\n    @property\n    def pk(self):\n        return self.id\n\n\n\"\"\"\nNOTE: These are here as a hack instead of being in the User definition\nNOTE: above due to the way pycodestyle handles lamdbdas.\nNOTE: See https://github.com/PyCQA/pycodestyle/issues/379 for more.\n\"\"\"\n\nUser.has_module_perms = lambda *_: True\nUser.has_perm = lambda *_: True\n"
  },
  {
    "path": "src/paperless/settings.py",
    "content": "\"\"\"\nDjango settings for paperless project.\n\nGenerated by 'django-admin startproject' using Django 1.9.\n\nFor more information on this file, see\nhttps://docs.djangoproject.com/en/1.10/topics/settings/\n\nFor the full list of settings and their values, see\nhttps://docs.djangoproject.com/en/1.10/ref/settings/\n\"\"\"\n\nimport json\nimport os\nimport re\n\nfrom dotenv import load_dotenv\n\n\n# Tap paperless.conf if it's available\nif os.path.exists(\"/etc/paperless.conf\"):\n    load_dotenv(\"/etc/paperless.conf\")\nelif os.path.exists(\"/usr/local/etc/paperless.conf\"):\n    load_dotenv(\"/usr/local/etc/paperless.conf\")\n\n\ndef __get_boolean(key, default=\"NO\"):\n    \"\"\"\n    Return a boolean value based on whatever the user has supplied in the\n    environment based on whether the value \"looks like\" it's True or not.\n    \"\"\"\n    return bool(os.getenv(key, default).lower() in (\"yes\", \"y\", \"1\", \"t\", \"true\"))\n\n\n# Build paths inside the project like this: os.path.join(BASE_DIR, ...)\nBASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))\n\n\n# Quick-start development settings - unsuitable for production\n# See https://docs.djangoproject.com/en/1.10/howto/deployment/checklist/\n\n# The secret key has a default that should be fine so long as you're hosting\n# Paperless on a closed network.  However, if you're putting this anywhere\n# public, you should change the key to something unique and verbose.\nSECRET_KEY = os.getenv(\n    \"PAPERLESS_SECRET_KEY\",\n    \"e11fl1oa-*ytql8p)(06fbj4ukrlo+n7k&q5+$1md7i+mge=ee\"\n)\n\n\n# SECURITY WARNING: don't run with debug turned on in production!\nDEBUG = __get_boolean(\"PAPERLESS_DEBUG\", \"YES\")\n\nLOGIN_URL = \"admin:login\"\n\nALLOWED_HOSTS = [\"*\"]\n\n_allowed_hosts = os.getenv(\"PAPERLESS_ALLOWED_HOSTS\")\nif _allowed_hosts:\n    ALLOWED_HOSTS = _allowed_hosts.split(\",\")\n\nFORCE_SCRIPT_NAME = os.getenv(\"PAPERLESS_FORCE_SCRIPT_NAME\")\n\n# Application definition\n\nINSTALLED_APPS = [\n    \"whitenoise.runserver_nostatic\",\n\n    \"django.contrib.auth\",\n    \"django.contrib.contenttypes\",\n    \"django.contrib.sessions\",\n    \"django.contrib.messages\",\n    \"django.contrib.staticfiles\",\n\n    \"corsheaders\",\n    \"django_extensions\",\n\n    \"paperless\",\n    \"documents.apps.DocumentsConfig\",\n    \"reminders.apps.RemindersConfig\",\n    \"paperless_tesseract.apps.PaperlessTesseractConfig\",\n    \"paperless_text.apps.PaperlessTextConfig\",\n\n    \"django.contrib.admin\",\n\n    \"rest_framework\",\n    \"crispy_forms\",\n    \"django_filters\",\n    \"djangoql\",\n\n]\n\nif os.getenv(\"PAPERLESS_INSTALLED_APPS\"):\n    INSTALLED_APPS += os.getenv(\"PAPERLESS_INSTALLED_APPS\").split(\",\")\n\nMIDDLEWARE = [\n    'django.middleware.security.SecurityMiddleware',\n    'whitenoise.middleware.WhiteNoiseMiddleware',\n    'django.contrib.sessions.middleware.SessionMiddleware',\n    'corsheaders.middleware.CorsMiddleware',\n    'django.middleware.common.CommonMiddleware',\n    'django.middleware.csrf.CsrfViewMiddleware',\n    'django.contrib.auth.middleware.AuthenticationMiddleware',\n    'django.contrib.messages.middleware.MessageMiddleware',\n    'django.middleware.clickjacking.XFrameOptionsMiddleware',\n]\n\n# Enable whitenoise compression and caching\nSTATICFILES_STORAGE = 'whitenoise.storage.CompressedManifestStaticFilesStorage'\n\n# We allow CORS from localhost:8080\nCORS_ORIGIN_WHITELIST = tuple(os.getenv(\"PAPERLESS_CORS_ALLOWED_HOSTS\", \"http://localhost:8080,https://localhost:8080\").split(\",\"))\n\n# If auth is disabled, we just use our \"bypass\" authentication middleware\nif bool(os.getenv(\"PAPERLESS_DISABLE_LOGIN\", \"false\").lower() in (\"yes\", \"y\", \"1\", \"t\", \"true\")):\n    _index = MIDDLEWARE.index(\"django.contrib.auth.middleware.AuthenticationMiddleware\")\n    MIDDLEWARE[_index] = \"paperless.middleware.Middleware\"\n\nROOT_URLCONF = 'paperless.urls'\n\nTEMPLATES = [\n    {\n        'BACKEND': 'django.template.backends.django.DjangoTemplates',\n        'DIRS': [],\n        'APP_DIRS': True,\n        'OPTIONS': {\n            'context_processors': [\n                'django.template.context_processors.debug',\n                'django.template.context_processors.request',\n                'django.contrib.auth.context_processors.auth',\n                'django.contrib.messages.context_processors.messages',\n            ],\n        },\n    },\n]\n\nWSGI_APPLICATION = 'paperless.wsgi.application'\n\n\n# Database\n# https://docs.djangoproject.com/en/1.10/ref/settings/#databases\n\nDATABASES = {\n    \"default\": {\n        \"ENGINE\": \"django.db.backends.sqlite3\",\n        \"NAME\": os.path.join(\n            os.getenv(\n                \"PAPERLESS_DBDIR\",\n                os.path.join(BASE_DIR, \"..\", \"data\")\n            ),\n            \"db.sqlite3\"\n        )\n    }\n}\n\nif os.getenv(\"PAPERLESS_DBUSER\"):\n    DATABASES[\"default\"] = {\n        \"ENGINE\": \"django.db.backends.postgresql_psycopg2\",\n        \"NAME\": os.getenv(\"PAPERLESS_DBNAME\", \"paperless\"),\n        \"USER\": os.getenv(\"PAPERLESS_DBUSER\"),\n    }\n    if os.getenv(\"PAPERLESS_DBPASS\"):\n        DATABASES[\"default\"][\"PASSWORD\"] = os.getenv(\"PAPERLESS_DBPASS\")\n    if os.getenv(\"PAPERLESS_DBHOST\"):\n        DATABASES[\"default\"][\"HOST\"] = os.getenv(\"PAPERLESS_DBHOST\")\n    if os.getenv(\"PAPERLESS_DBPORT\"):\n        DATABASES[\"default\"][\"PORT\"] = os.getenv(\"PAPERLESS_DBPORT\")\n\n\n# Password validation\n# https://docs.djangoproject.com/en/1.10/ref/settings/#auth-password-validators\n\nAUTH_PASSWORD_VALIDATORS = [\n    {\n        'NAME': 'django.contrib.auth.password_validation.UserAttributeSimilarityValidator',\n    },\n    {\n        'NAME': 'django.contrib.auth.password_validation.MinimumLengthValidator',\n    },\n    {\n        'NAME': 'django.contrib.auth.password_validation.CommonPasswordValidator',\n    },\n    {\n        'NAME': 'django.contrib.auth.password_validation.NumericPasswordValidator',\n    },\n]\n\n\n# Internationalization\n# https://docs.djangoproject.com/en/1.10/topics/i18n/\n\nLANGUAGE_CODE = 'en-us'\n\nTIME_ZONE = os.getenv(\"PAPERLESS_TIME_ZONE\", \"UTC\")\n\nUSE_I18N = True\n\nUSE_L10N = True\n\nUSE_TZ = True\n\n\n# Static files (CSS, JavaScript, Images)\n# https://docs.djangoproject.com/en/1.10/howto/static-files/\n\nSTATIC_ROOT = os.getenv(\n    \"PAPERLESS_STATICDIR\", os.path.join(BASE_DIR, \"..\", \"static\"))\nMEDIA_ROOT = os.getenv(\n    \"PAPERLESS_MEDIADIR\", os.path.join(BASE_DIR, \"..\", \"media\"))\n\nSTATIC_URL = os.getenv(\"PAPERLESS_STATIC_URL\", \"/static/\")\nMEDIA_URL = os.getenv(\"PAPERLESS_MEDIA_URL\", \"/media/\")\n\n\n# Other\n\n# Disable Django's artificial limit on the number of form fields to submit at\n# once.  This is a protection against overloading the server, but since this is\n# a self-hosted sort of gig, the benefits of being able to mass-delete a tonne\n# of log entries outweight the benefits of such a safeguard.\n\nDATA_UPLOAD_MAX_NUMBER_FIELDS = None\n\n\n# Paperless-specific stuff\n# You shouldn't have to edit any of these values.  Rather, you can set these\n# values in /etc/paperless.conf instead.\n# ----------------------------------------------------------------------------\n\n# Logging\n\nLOGGING = {\n    \"version\": 1,\n    \"disable_existing_loggers\": False,\n    \"handlers\": {\n        \"consumer\": {\n            \"class\": \"documents.loggers.PaperlessLogger\",\n        }\n    },\n    \"loggers\": {\n        \"documents\": {\n            \"handlers\": [\"consumer\"],\n            \"level\": os.getenv(\"PAPERLESS_CONSUMER_LOG_LEVEL\", \"INFO\"),\n        },\n    },\n}\n\n\n# The default language that tesseract will attempt to use when parsing\n# documents.  It should be a 3-letter language code consistent with ISO 639.\nOCR_LANGUAGE = os.getenv(\"PAPERLESS_OCR_LANGUAGE\", \"eng\")\n\n# The amount of threads to use for OCR\nOCR_THREADS = os.getenv(\"PAPERLESS_OCR_THREADS\")\n\n# OCR all documents?\nOCR_ALWAYS = __get_boolean(\"PAPERLESS_OCR_ALWAYS\")\n\n# If this is true, any failed attempts to OCR a PDF will result in the PDF\n# being indexed anyway, with whatever we could get.  If it's False, the file\n# will simply be left in the CONSUMPTION_DIR.\nFORGIVING_OCR = __get_boolean(\"PAPERLESS_FORGIVING_OCR\")\n\n# GNUPG needs a home directory for some reason\nGNUPG_HOME = os.getenv(\"HOME\", \"/tmp\")\n\n# Convert is part of the ImageMagick package\nCONVERT_BINARY = os.getenv(\"PAPERLESS_CONVERT_BINARY\", \"convert\")\nCONVERT_TMPDIR = os.getenv(\"PAPERLESS_CONVERT_TMPDIR\")\nCONVERT_MEMORY_LIMIT = os.getenv(\"PAPERLESS_CONVERT_MEMORY_LIMIT\")\nCONVERT_DENSITY = os.getenv(\"PAPERLESS_CONVERT_DENSITY\")\n\n# Ghostscript\nGS_BINARY = os.getenv(\"PAPERLESS_GS_BINARY\", \"gs\")\n\n# OptiPNG\nOPTIPNG_BINARY = os.getenv(\"PAPERLESS_OPTIPNG_BINARY\", \"optipng\")\n\n# Unpaper\nUNPAPER_BINARY = os.getenv(\"PAPERLESS_UNPAPER_BINARY\", \"unpaper\")\n\n# This will be created if it doesn't exist\nSCRATCH_DIR = os.getenv(\"PAPERLESS_SCRATCH_DIR\", \"/tmp/paperless\")\n\n# This is where Paperless will look for PDFs to index\nCONSUMPTION_DIR = os.getenv(\"PAPERLESS_CONSUMPTION_DIR\")\n\n# (This setting is ignored on Linux where inotify is used instead of a\n# polling loop.)\n# The number of seconds that Paperless will wait between checking\n# CONSUMPTION_DIR.  If you tend to write documents to this directory very\n# slowly, you may want to use a higher value than the default.\nCONSUMER_LOOP_TIME = int(os.getenv(\"PAPERLESS_CONSUMER_LOOP_TIME\", 10))\n\n# Pre-2.x versions of Paperless stored your documents locally with GPG\n# encryption, but that is no longer the default.  This behaviour is still\n# available, but it must be explicitly enabled by setting\n# `PAPERLESS_PASSPHRASE` in your environment or config file.  The default is to\n# store these files unencrypted.\n#\n# Translation:\n# * If you're a new user, you can safely ignore this setting.\n# * If you're upgrading from 1.x, this must be set, OR you can run\n#   `./manage.py change_storage_type gpg unencrypted` to decrypt your files,\n#   after which you can unset this value.\nPASSPHRASE = os.getenv(\"PAPERLESS_PASSPHRASE\")\n\n# Trigger a script after every successful document consumption?\nPRE_CONSUME_SCRIPT = os.getenv(\"PAPERLESS_PRE_CONSUME_SCRIPT\")\nPOST_CONSUME_SCRIPT = os.getenv(\"PAPERLESS_POST_CONSUME_SCRIPT\")\n\n# Whether to display a selected document inline, or download it as attachment:\nINLINE_DOC = __get_boolean(\"PAPERLESS_INLINE_DOC\")\n\n# The number of items on each page in the web UI.  This value must be a\n# positive integer, but if you don't define one in paperless.conf, a default of\n# 100 will be used.\nPAPERLESS_LIST_PER_PAGE = int(os.getenv(\"PAPERLESS_LIST_PER_PAGE\", 100))\n\nFY_START = os.getenv(\"PAPERLESS_FINANCIAL_YEAR_START\")\nFY_END = os.getenv(\"PAPERLESS_FINANCIAL_YEAR_END\")\n\n# Specify the default date order (for autodetected dates)\nDATE_ORDER = os.getenv(\"PAPERLESS_DATE_ORDER\", \"DMY\")\nFILENAME_DATE_ORDER = os.getenv(\"PAPERLESS_FILENAME_DATE_ORDER\")\n\n# Transformations applied before filename parsing\nFILENAME_PARSE_TRANSFORMS = []\nfor t in json.loads(os.getenv(\"PAPERLESS_FILENAME_PARSE_TRANSFORMS\", \"[]\")):\n    FILENAME_PARSE_TRANSFORMS.append((re.compile(t[\"pattern\"]), t[\"repl\"]))\n\n# Specify for how many years a correspondent is considered recent. Recent\n# correspondents will be shown in a separate \"Recent correspondents\" filter as\n# well. Set to 0 to disable this filter.\nPAPERLESS_RECENT_CORRESPONDENT_YEARS = int(os.getenv(\n    \"PAPERLESS_RECENT_CORRESPONDENT_YEARS\", 0))\n\n# Specify the filename format for out files\nPAPERLESS_FILENAME_FORMAT = os.getenv(\"PAPERLESS_FILENAME_FORMAT\")\n"
  },
  {
    "path": "src/paperless/urls.py",
    "content": "from django.conf import settings\nfrom django.conf.urls import include, static, url\nfrom django.contrib import admin\nfrom django.urls import reverse_lazy\nfrom django.views.decorators.csrf import csrf_exempt\nfrom django.views.generic import RedirectView\nfrom rest_framework.routers import DefaultRouter\n\nfrom paperless.views import FaviconView\nfrom documents.views import (\n    CorrespondentViewSet,\n    DocumentViewSet,\n    FetchView,\n    LogViewSet,\n    PushView,\n    TagViewSet\n)\nfrom reminders.views import ReminderViewSet\n\nrouter = DefaultRouter()\nrouter.register(r\"correspondents\", CorrespondentViewSet)\nrouter.register(r\"documents\", DocumentViewSet)\nrouter.register(r\"logs\", LogViewSet)\nrouter.register(r\"reminders\", ReminderViewSet)\nrouter.register(r\"tags\", TagViewSet)\n\nurlpatterns = [\n\n    # API\n    url(\n        r\"^api/auth/\",\n        include(\n            ('rest_framework.urls', 'rest_framework'),\n            namespace=\"rest_framework\")\n    ),\n    url(r\"^api/\", include((router.urls, 'drf'), namespace=\"drf\")),\n\n    # File downloads\n    url(\n        r\"^fetch/(?P<kind>doc|thumb|preview)/(?P<pk>\\d+)$\",\n        FetchView.as_view(),\n        name=\"fetch\"\n    ),\n\n    # File uploads\n    url(r\"^push$\", csrf_exempt(PushView.as_view()), name=\"push\"),\n\n    # Favicon\n    url(r\"^favicon.ico$\", FaviconView.as_view(), name=\"favicon\"),\n\n    # The Django admin\n    url(r\"admin/\", admin.site.urls),\n\n    # Redirect / to /admin\n    url(r\"^$\", RedirectView.as_view(\n        permanent=True, url=reverse_lazy(\"admin:index\"))),\n\n] + static.static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)\n\n# Text in each page's <h1> (and above login form).\nadmin.site.site_header = 'Paperless'\n# Text at the end of each page's <title>.\nadmin.site.site_title = 'Paperless'\n# Text at the top of the admin index page.\nadmin.site.index_title = 'Paperless administration'\n"
  },
  {
    "path": "src/paperless/version.py",
    "content": "__version__ = (2, 6, 1)\n"
  },
  {
    "path": "src/paperless/views.py",
    "content": "import os\n\nfrom django.http import HttpResponse\nfrom django.views.generic import View\nfrom rest_framework.pagination import PageNumberPagination\n\n\nclass StandardPagination(PageNumberPagination):\n    page_size = 25\n    page_size_query_param = \"page-size\"\n    max_page_size = 100000\n\n\nclass FaviconView(View):\n\n    def get(self, request, *args, **kwargs):\n        favicon = os.path.join(\n            os.path.dirname(__file__),\n            \"static\",\n            \"paperless\",\n            \"img\",\n            \"favicon.ico\"\n        )\n        with open(favicon, \"rb\") as f:\n            return HttpResponse(f, content_type=\"image/x-icon\")\n"
  },
  {
    "path": "src/paperless/wsgi.py",
    "content": "\"\"\"\nWSGI config for paperless project.\n\nIt exposes the WSGI callable as a module-level variable named ``application``.\n\nFor more information on this file, see\nhttps://docs.djangoproject.com/en/1.10/howto/deployment/wsgi/\n\"\"\"\n\nimport os\n\nfrom django.core.wsgi import get_wsgi_application\n\nos.environ.setdefault(\"DJANGO_SETTINGS_MODULE\", \"paperless.settings\")\n\napplication = get_wsgi_application()\n"
  },
  {
    "path": "src/paperless_tesseract/__init__.py",
    "content": ""
  },
  {
    "path": "src/paperless_tesseract/apps.py",
    "content": "from django.apps import AppConfig\n\n\nclass PaperlessTesseractConfig(AppConfig):\n\n    name = \"paperless_tesseract\"\n\n    def ready(self):\n\n        from documents.signals import document_consumer_declaration\n\n        from .signals import ConsumerDeclaration\n\n        document_consumer_declaration.connect(ConsumerDeclaration.handle)\n\n        AppConfig.ready(self)\n"
  },
  {
    "path": "src/paperless_tesseract/languages.py",
    "content": "# Thanks to the Library of Congress and some creative use of sed and awk:\n# http://www.loc.gov/standards/iso639-2/php/English_list.php\n\nISO639 = {\n\n    \"aa\": \"aar\",\n    \"ab\": \"abk\",\n    \"ae\": \"ave\",\n    \"af\": \"afr\",\n    \"ak\": \"aka\",\n    \"am\": \"amh\",\n    \"an\": \"arg\",\n    \"ar\": \"ara\",\n    \"as\": \"asm\",\n    \"av\": \"ava\",\n    \"ay\": \"aym\",\n    \"az\": \"aze\",\n    \"ba\": \"bak\",\n    \"be\": \"bel\",\n    \"bg\": \"bul\",\n    \"bh\": \"bih\",\n    \"bi\": \"bis\",\n    \"bm\": \"bam\",\n    \"bn\": \"ben\",\n    \"bo\": \"bod\",\n    \"br\": \"bre\",\n    \"bs\": \"bos\",\n    \"ca\": \"cat\",\n    \"ce\": \"che\",\n    \"ch\": \"cha\",\n    \"co\": \"cos\",\n    \"cr\": \"cre\",\n    \"cs\": \"ces\",\n    \"cu\": \"chu\",\n    \"cv\": \"chv\",\n    \"cy\": \"cym\",\n    \"da\": \"dan\",\n    \"de\": \"deu\",\n    \"dv\": \"div\",\n    \"dz\": \"dzo\",\n    \"ee\": \"ewe\",\n    \"el\": \"ell\",\n    \"en\": \"eng\",\n    \"eo\": \"epo\",\n    \"es\": \"spa\",\n    \"et\": \"est\",\n    \"eu\": \"eus\",\n    \"fa\": \"fas\",\n    \"ff\": \"ful\",\n    \"fi\": \"fin\",\n    \"fj\": \"fij\",\n    \"fo\": \"fao\",\n    \"fr\": \"fra\",\n    \"fy\": \"fry\",\n    \"ga\": \"gle\",\n    \"gd\": \"gla\",\n    \"gl\": \"glg\",\n    \"gn\": \"grn\",\n    \"gu\": \"guj\",\n    \"gv\": \"glv\",\n    \"ha\": \"hau\",\n    \"he\": \"heb\",\n    \"hi\": \"hin\",\n    \"ho\": \"hmo\",\n    \"hr\": \"hrv\",\n    \"ht\": \"hat\",\n    \"hu\": \"hun\",\n    \"hy\": \"hye\",\n    \"hz\": \"her\",\n    \"ia\": \"ina\",\n    \"id\": \"ind\",\n    \"ie\": \"ile\",\n    \"ig\": \"ibo\",\n    \"ii\": \"iii\",\n    \"ik\": \"ipk\",\n    \"io\": \"ido\",\n    \"is\": \"isl\",\n    \"it\": \"ita\",\n    \"iu\": \"iku\",\n    \"ja\": \"jpn\",\n    \"jv\": \"jav\",\n    \"ka\": \"kat\",\n    \"kg\": \"kon\",\n    \"ki\": \"kik\",\n    \"kj\": \"kua\",\n    \"kk\": \"kaz\",\n    \"kl\": \"kal\",\n    \"km\": \"khm\",\n    \"kn\": \"kan\",\n    \"ko\": \"kor\",\n    \"kr\": \"kau\",\n    \"ks\": \"kas\",\n    \"ku\": \"kur\",\n    \"kv\": \"kom\",\n    \"kw\": \"cor\",\n    \"ky\": \"kir\",\n    \"la\": \"lat\",\n    \"lb\": \"ltz\",\n    \"lg\": \"lug\",\n    \"li\": \"lim\",\n    \"ln\": \"lin\",\n    \"lo\": \"lao\",\n    \"lt\": \"lit\",\n    \"lu\": \"lub\",\n    \"lv\": \"lav\",\n    \"mg\": \"mlg\",\n    \"mh\": \"mah\",\n    \"mi\": \"mri\",\n    \"mk\": \"mkd\",\n    \"ml\": \"mal\",\n    \"mn\": \"mon\",\n    \"mr\": \"mar\",\n    \"ms\": \"msa\",\n    \"mt\": \"mlt\",\n    \"my\": \"mya\",\n    \"na\": \"nau\",\n    \"nb\": \"nob\",\n    \"nd\": \"nde\",\n    \"ne\": \"nep\",\n    \"ng\": \"ndo\",\n    \"nl\": \"nld\",\n    \"no\": \"nor\",\n    \"nr\": \"nbl\",\n    \"nv\": \"nav\",\n    \"ny\": \"nya\",\n    \"oc\": \"oci\",\n    \"oj\": \"oji\",\n    \"om\": \"orm\",\n    \"or\": \"ori\",\n    \"os\": \"oss\",\n    \"pa\": \"pan\",\n    \"pi\": \"pli\",\n    \"pl\": \"pol\",\n    \"ps\": \"pus\",\n    \"pt\": \"por\",\n    \"qu\": \"que\",\n    \"rm\": \"roh\",\n    \"rn\": \"run\",\n    \"ro\": \"ron\",\n    \"ru\": \"rus\",\n    \"rw\": \"kin\",\n    \"sa\": \"san\",\n    \"sc\": \"srd\",\n    \"sd\": \"snd\",\n    \"se\": \"sme\",\n    \"sg\": \"sag\",\n    \"si\": \"sin\",\n    \"sk\": \"slk\",\n    \"sl\": \"slv\",\n    \"sm\": \"smo\",\n    \"sn\": \"sna\",\n    \"so\": \"som\",\n    \"sq\": \"sqi\",\n    \"sr\": \"srp\",\n    \"ss\": \"ssw\",\n    \"st\": \"sot\",\n    \"su\": \"sun\",\n    \"sv\": \"swe\",\n    \"sw\": \"swa\",\n    \"ta\": \"tam\",\n    \"te\": \"tel\",\n    \"tg\": \"tgk\",\n    \"th\": \"tha\",\n    \"ti\": \"tir\",\n    \"tk\": \"tuk\",\n    \"tl\": \"tgl\",\n    \"tn\": \"tsn\",\n    \"to\": \"ton\",\n    \"tr\": \"tur\",\n    \"ts\": \"tso\",\n    \"tt\": \"tat\",\n    \"tw\": \"twi\",\n    \"ty\": \"tah\",\n    \"ug\": \"uig\",\n    \"uk\": \"ukr\",\n    \"ur\": \"urd\",\n    \"uz\": \"uzb\",\n    \"ve\": \"ven\",\n    \"vi\": \"vie\",\n    \"vo\": \"vol\",\n    \"wa\": \"wln\",\n    \"wo\": \"wol\",\n    \"xh\": \"xho\",\n    \"yi\": \"yid\",\n    \"yo\": \"yor\",\n    \"za\": \"zha\",\n\n    # Tessdata contains two values for Chinese, \"chi_sim\" and \"chi_tra\".  I\n    # have no idea which one is better, so I just picked the bigger file.\n    \"zh\": \"chi_tra\",\n\n    \"zu\": \"zul\"\n\n}\n"
  },
  {
    "path": "src/paperless_tesseract/parsers.py",
    "content": "import itertools\nimport os\nimport re\nimport subprocess\nfrom multiprocessing.pool import Pool\n\nimport langdetect\nimport pyocr\nfrom django.conf import settings\nfrom PIL import Image\nfrom pyocr.libtesseract.tesseract_raw import \\\n    TesseractError as OtherTesseractError\nfrom pyocr.tesseract import TesseractError\n\nimport pdftotext\nfrom documents.parsers import DocumentParser, ParseError\n\nfrom .languages import ISO639\n\n\nclass OCRError(Exception):\n    pass\n\n\nclass RasterisedDocumentParser(DocumentParser):\n    \"\"\"\n    This parser uses Tesseract to try and get some text out of a rasterised\n    image, whether it's a PDF, or other graphical format (JPEG, TIFF, etc.)\n    \"\"\"\n\n    CONVERT = settings.CONVERT_BINARY\n    GHOSTSCRIPT = settings.GS_BINARY\n    DENSITY = settings.CONVERT_DENSITY if settings.CONVERT_DENSITY else 300\n    THREADS = int(settings.OCR_THREADS) if settings.OCR_THREADS else None\n    UNPAPER = settings.UNPAPER_BINARY\n    DEFAULT_OCR_LANGUAGE = settings.OCR_LANGUAGE\n    OCR_ALWAYS = settings.OCR_ALWAYS\n\n    def __init__(self, path):\n        super().__init__(path)\n        self._text = None\n\n    def get_thumbnail(self):\n        \"\"\"\n        The thumbnail of a PDF is just a 500px wide image of the first page.\n        \"\"\"\n\n        out_path = os.path.join(self.tempdir, \"convert.png\")\n\n        # Run convert to get a decent thumbnail\n        try:\n            run_convert(\n                self.CONVERT,\n                \"-scale\", \"500x5000\",\n                \"-alpha\", \"remove\",\n                \"-strip\", \"-trim\",\n                \"{}[0]\".format(self.document_path),\n                out_path\n            )\n        except ParseError:\n            # if convert fails, fall back to extracting\n            # the first PDF page as a PNG using Ghostscript\n            self.log(\n                \"warning\",\n                \"Thumbnail generation with ImageMagick failed, \"\n                \"falling back to Ghostscript.\"\n            )\n            gs_out_path = os.path.join(self.tempdir, \"gs_out.png\")\n            cmd = [self.GHOSTSCRIPT,\n                   \"-q\",\n                   \"-sDEVICE=pngalpha\",\n                   \"-o\", gs_out_path,\n                   self.document_path]\n            if not subprocess.Popen(cmd).wait() == 0:\n                raise ParseError(\"Thumbnail (gs) failed at {}\".format(cmd))\n            # then run convert on the output from gs\n            run_convert(\n                self.CONVERT,\n                \"-scale\", \"500x5000\",\n                \"-alpha\", \"remove\",\n                \"-strip\", \"-trim\",\n                gs_out_path,\n                out_path\n            )\n\n        return out_path\n\n    def _is_ocred(self):\n\n        # Extract text from PDF using pdftotext\n        text = get_text_from_pdf(self.document_path)\n\n        # We assume, that a PDF with at least 50 characters contains text\n        # (so no OCR required)\n        return len(text) > 50\n\n    def get_text(self):\n\n        if self._text is not None:\n            return self._text\n\n        if not self.OCR_ALWAYS and self._is_ocred():\n            self.log(\"info\", \"Skipping OCR, using Text from PDF\")\n            self._text = get_text_from_pdf(self.document_path)\n            return self._text\n\n        images = self._get_greyscale()\n\n        try:\n            self._text = self._get_ocr(images)\n            return self._text\n        except OCRError as e:\n            raise ParseError(e)\n\n    def _get_greyscale(self):\n        \"\"\"\n        Greyscale images are easier for Tesseract to OCR\n        \"\"\"\n\n        # Convert PDF to multiple PNMs\n        pnm = os.path.join(self.tempdir, \"convert-%04d.pnm\")\n        run_convert(\n            self.CONVERT,\n            \"-density\", str(self.DENSITY),\n            \"-depth\", \"8\",\n            \"-type\", \"grayscale\",\n            self.document_path, pnm,\n        )\n\n        # Get a list of converted images\n        pnms = []\n        for f in os.listdir(self.tempdir):\n            if f.endswith(\".pnm\"):\n                pnms.append(os.path.join(self.tempdir, f))\n\n        # Run unpaper in parallel on converted images\n        with Pool(processes=self.THREADS) as pool:\n            pool.map(run_unpaper, itertools.product([self.UNPAPER], pnms))\n\n        # Return list of converted images, processed with unpaper\n        pnms = []\n        for f in os.listdir(self.tempdir):\n            if f.endswith(\".unpaper.pnm\"):\n                pnms.append(os.path.join(self.tempdir, f))\n\n        return sorted(filter(lambda __: os.path.isfile(__), pnms))\n\n    def _guess_language(self, text):\n        try:\n            guess = langdetect.detect(text)\n            self.log(\"debug\", \"Language detected: {}\".format(guess))\n            return guess\n        except Exception as e:\n            self.log(\"warning\", \"Language detection error: {}\".format(e))\n\n    def _get_ocr(self, imgs):\n        \"\"\"\n        Attempts to do the best job possible OCR'ing the document based on\n        simple language detection trial & error.\n        \"\"\"\n\n        if not imgs:\n            raise OCRError(\"No images found\")\n\n        self.log(\"info\", \"OCRing the document\")\n\n        # Since the division gets rounded down by int, this calculation works\n        # for every edge-case, i.e. 1\n        middle = int(len(imgs) / 2)\n        raw_text = self._ocr([imgs[middle]], self.DEFAULT_OCR_LANGUAGE)\n\n        guessed_language = self._guess_language(raw_text)\n\n        if not guessed_language or guessed_language not in ISO639:\n            self.log(\"warning\", \"Language detection failed!\")\n            if settings.FORGIVING_OCR:\n                self.log(\n                    \"warning\",\n                    \"As FORGIVING_OCR is enabled, we're going to make the \"\n                    \"best with what we have.\"\n                )\n                raw_text = self._assemble_ocr_sections(imgs, middle, raw_text)\n                return raw_text\n            error_msg = (\"Language detection failed. Set \"\n                         \"PAPERLESS_FORGIVING_OCR in config file to continue \"\n                         \"anyway.\")\n            raise OCRError(error_msg)\n\n        if ISO639[guessed_language] == self.DEFAULT_OCR_LANGUAGE:\n            raw_text = self._assemble_ocr_sections(imgs, middle, raw_text)\n            return raw_text\n\n        try:\n            return self._ocr(imgs, ISO639[guessed_language])\n        except pyocr.pyocr.tesseract.TesseractError:\n            if settings.FORGIVING_OCR:\n                self.log(\n                    \"warning\",\n                    \"OCR for {} failed, but we're going to stick with what \"\n                    \"we've got since FORGIVING_OCR is enabled.\".format(\n                        guessed_language\n                    )\n                )\n                raw_text = self._assemble_ocr_sections(imgs, middle, raw_text)\n                return raw_text\n            raise OCRError(\n                \"The guessed language ({}) is not available in this instance \"\n                \"of Tesseract.\".format(guessed_language)\n            )\n\n    def _ocr(self, imgs, lang):\n        \"\"\"\n        Performs a single OCR attempt.\n        \"\"\"\n\n        if not imgs:\n            return \"\"\n\n        self.log(\"info\", \"Parsing for {}\".format(lang))\n\n        with Pool(processes=self.THREADS) as pool:\n            r = pool.map(image_to_string, itertools.product(imgs, [lang]))\n            r = \" \".join(r)\n\n        # Strip out excess white space to allow matching to go smoother\n        return strip_excess_whitespace(r)\n\n    def _assemble_ocr_sections(self, imgs, middle, text):\n        \"\"\"\n        Given a `middle` value and the text that middle page represents, we OCR\n        the remainder of the document and return the whole thing.\n        \"\"\"\n        text = self._ocr(imgs[:middle], self.DEFAULT_OCR_LANGUAGE) + text\n        text += self._ocr(imgs[middle + 1:], self.DEFAULT_OCR_LANGUAGE)\n        return text\n\n\ndef run_convert(*args):\n\n    environment = os.environ.copy()\n    if settings.CONVERT_MEMORY_LIMIT:\n        environment[\"MAGICK_MEMORY_LIMIT\"] = settings.CONVERT_MEMORY_LIMIT\n    if settings.CONVERT_TMPDIR:\n        environment[\"MAGICK_TMPDIR\"] = settings.CONVERT_TMPDIR\n\n    if not subprocess.Popen(args, env=environment).wait() == 0:\n        raise ParseError(\"Convert failed at {}\".format(args))\n\n\ndef run_unpaper(args):\n    unpaper, pnm = args\n    command_args = (unpaper, \"--overwrite\", pnm,\n                    pnm.replace(\".pnm\", \".unpaper.pnm\"))\n    if not subprocess.Popen(command_args).wait() == 0:\n        raise ParseError(\"Unpaper failed at {}\".format(command_args))\n\n\ndef strip_excess_whitespace(text):\n    collapsed_spaces = re.sub(r\"([^\\S\\r\\n]+)\", \" \", text)\n    no_leading_whitespace = re.sub(\n        r\"([\\n\\r]+)([^\\S\\n\\r]+)\", '\\\\1', collapsed_spaces)\n    no_trailing_whitespace = re.sub(\n        r\"([^\\S\\n\\r]+)$\", '', no_leading_whitespace)\n    return no_trailing_whitespace\n\n\ndef image_to_string(args):\n    img, lang = args\n    ocr = pyocr.get_available_tools()[0]\n    with Image.open(os.path.join(settings.SCRATCH_DIR, img)) as f:\n        if ocr.can_detect_orientation():\n            try:\n                orientation = ocr.detect_orientation(f, lang=lang)\n                f = f.rotate(orientation[\"angle\"], expand=1)\n            except (TesseractError, OtherTesseractError, AttributeError):\n                pass\n        return ocr.image_to_string(f, lang=lang)\n\n\ndef get_text_from_pdf(pdf_file):\n\n    with open(pdf_file, \"rb\") as f:\n        try:\n            pdf = pdftotext.PDF(f)\n        except pdftotext.Error:\n            return \"\"\n\n    return \"\\n\".join(pdf).strip()\n"
  },
  {
    "path": "src/paperless_tesseract/signals.py",
    "content": "import re\n\nfrom .parsers import RasterisedDocumentParser\n\n\nclass ConsumerDeclaration:\n\n    MATCHING_FILES = re.compile(r\"^.*\\.(pdf|jpe?g|gif|png|tiff?|pnm|bmp)$\")\n\n    @classmethod\n    def handle(cls, sender, **kwargs):\n        return cls.test\n\n    @classmethod\n    def test(cls, doc):\n\n        if cls.MATCHING_FILES.match(doc.lower()):\n            return {\n                \"parser\": RasterisedDocumentParser,\n                \"weight\": 0\n            }\n\n        return None\n"
  },
  {
    "path": "src/paperless_tesseract/tests/__init__.py",
    "content": ""
  },
  {
    "path": "src/paperless_tesseract/tests/test_date.py",
    "content": "import datetime\nimport os\nimport shutil\n\nfrom dateutil import tz\nfrom django.conf import settings\nfrom django.test import TestCase, override_settings\nfrom tempfile import TemporaryDirectory\nfrom unittest import mock\n\nfrom ..parsers import RasterisedDocumentParser\n\n\nclass TestDate(TestCase):\n    SAMPLE_FILES = os.path.join(os.path.dirname(__file__), \"samples\")\n\n    def setUp(self):\n        self.scratchdir = TemporaryDirectory()\n        scratchdir_override = override_settings(\n                SCRATCH_DIR=self.scratchdir.name)\n        scratchdir_override.enable()\n\n    def tearDown(self):\n        self.scratchdir.cleanup()\n\n    def test_date_format_1(self):\n        input_file = os.path.join(self.SAMPLE_FILES, \"\")\n        document = RasterisedDocumentParser(input_file)\n        document._text = \"lorem ipsum 130218 lorem ipsum\"\n        self.assertEqual(document.get_date(), None)\n\n    def test_date_format_2(self):\n        input_file = os.path.join(self.SAMPLE_FILES, \"\")\n        document = RasterisedDocumentParser(input_file)\n        document._text = \"lorem ipsum 2018 lorem ipsum\"\n        self.assertEqual(document.get_date(), None)\n\n    def test_date_format_3(self):\n        input_file = os.path.join(self.SAMPLE_FILES, \"\")\n        document = RasterisedDocumentParser(input_file)\n        document._text = \"lorem ipsum 20180213 lorem ipsum\"\n        self.assertEqual(document.get_date(), None)\n\n    def test_date_format_4(self):\n        input_file = os.path.join(self.SAMPLE_FILES, \"\")\n        document = RasterisedDocumentParser(input_file)\n        document._text = \"lorem ipsum 13.02.2018 lorem ipsum\"\n        date = document.get_date()\n        self.assertEqual(\n            date,\n            datetime.datetime(\n                2018, 2, 13, 0, 0,\n                tzinfo=tz.gettz(settings.TIME_ZONE)\n            )\n        )\n\n    def test_date_format_5(self):\n        input_file = os.path.join(self.SAMPLE_FILES, \"\")\n        document = RasterisedDocumentParser(input_file)\n        document._text = (\n            \"lorem ipsum 130218, 2018, 20180213 and lorem 13.02.2018 lorem \"\n            \"ipsum\"\n        )\n        date = document.get_date()\n        self.assertEqual(\n            date,\n            datetime.datetime(\n                2018, 2, 13, 0, 0,\n                tzinfo=tz.gettz(settings.TIME_ZONE)\n            )\n        )\n\n    def test_date_format_6(self):\n        input_file = os.path.join(self.SAMPLE_FILES, \"\")\n        document = RasterisedDocumentParser(input_file)\n        document._text = (\n            \"lorem ipsum\\n\"\n            \"Wohnort\\n\"\n            \"3100\\n\"\n            \"IBAN\\n\"\n            \"AT87 4534\\n\"\n            \"1234\\n\"\n            \"1234 5678\\n\"\n            \"BIC\\n\"\n            \"lorem ipsum\"\n        )\n        self.assertEqual(document.get_date(), None)\n\n    def test_date_format_7(self):\n        input_file = os.path.join(self.SAMPLE_FILES, \"\")\n        document = RasterisedDocumentParser(input_file)\n        document._text = (\n            \"lorem ipsum\\n\"\n            \"März 2019\\n\"\n            \"lorem ipsum\"\n        )\n        date = document.get_date()\n        self.assertEqual(\n            date,\n            datetime.datetime(\n                2019, 3, 1, 0, 0,\n                tzinfo=tz.gettz(settings.TIME_ZONE)\n            )\n        )\n\n    def test_date_format_8(self):\n        input_file = os.path.join(self.SAMPLE_FILES, \"\")\n        document = RasterisedDocumentParser(input_file)\n        document._text = (\n            \"lorem ipsum\\n\"\n            \"Wohnort\\n\"\n            \"3100\\n\"\n            \"IBAN\\n\"\n            \"AT87 4534\\n\"\n            \"1234\\n\"\n            \"1234 5678\\n\"\n            \"BIC\\n\"\n            \"lorem ipsum\\n\"\n            \"März 2020\"\n        )\n        self.assertEqual(\n            document.get_date(),\n            datetime.datetime(\n                2020, 3, 1, 0, 0,\n                tzinfo=tz.gettz(settings.TIME_ZONE)\n            )\n        )\n\n    def test_date_format_9(self):\n        input_file = os.path.join(self.SAMPLE_FILES, \"\")\n        document = RasterisedDocumentParser(input_file)\n        document._text = (\n            \"lorem ipsum\\n\"\n            \"27. Nullmonth 2020\\n\"\n            \"März 2020\\n\"\n            \"lorem ipsum\"\n        )\n        self.assertEqual(\n            document.get_date(),\n            datetime.datetime(\n                2020, 3, 1, 0, 0,\n                tzinfo=tz.gettz(settings.TIME_ZONE)\n            )\n        )\n\n    @mock.patch(\n        \"paperless_tesseract.parsers.RasterisedDocumentParser.get_text\",\n        return_value=\"01-07-0590 00:00:00\"\n    )\n    def test_crazy_date_past(self, *args):\n        document = RasterisedDocumentParser(\"/dev/null\")\n        document.get_text()\n        self.assertIsNone(document.get_date())\n\n    @mock.patch(\n        \"paperless_tesseract.parsers.RasterisedDocumentParser.get_text\",\n        return_value=\"01-07-2350 00:00:00\"\n    )\n    def test_crazy_date_future(self, *args):\n        document = RasterisedDocumentParser(\"/dev/null\")\n        document.get_text()\n        self.assertIsNone(document.get_date())\n\n    @mock.patch(\n        \"paperless_tesseract.parsers.RasterisedDocumentParser.get_text\",\n        return_value=\"20 408000l 2475\"\n    )\n    def test_crazy_date_with_spaces(self, *args):\n        document = RasterisedDocumentParser(\"/dev/null\")\n        document.get_text()\n        self.assertIsNone(document.get_date())\n\n    @mock.patch(\n        \"paperless_tesseract.parsers.RasterisedDocumentParser.get_text\",\n        return_value=\"No date in here\"\n    )\n    @override_settings(FILENAME_DATE_ORDER=\"YMD\")\n    def test_filename_date_parse_invalid(self, *args):\n        document = RasterisedDocumentParser(\"/tmp/20 408000l 2475 - test.pdf\")\n        document.get_text()\n        self.assertIsNone(document.get_date())\n"
  },
  {
    "path": "src/paperless_tesseract/tests/test_ocr.py",
    "content": "import os\nimport pyocr\n\nfrom django.test import TestCase, override_settings\nfrom pyocr.libtesseract.tesseract_raw import \\\n    TesseractError as OtherTesseractError\nfrom tempfile import TemporaryDirectory\nfrom unittest import mock, skipIf\n\nfrom ..parsers import image_to_string, strip_excess_whitespace\n\n\nclass FakeTesseract(object):\n\n    @staticmethod\n    def can_detect_orientation():\n        return True\n\n    @staticmethod\n    def detect_orientation(file_handle, lang):\n        raise OtherTesseractError(\"arbitrary status\", \"message\")\n\n    @staticmethod\n    def image_to_string(file_handle, lang):\n        return \"This is test text\"\n\n\nclass FakePyOcr(object):\n\n    @staticmethod\n    def get_available_tools():\n        return [FakeTesseract]\n\n\n@override_settings(SCRATCH_DIR=os.path.join(\n                               os.path.dirname(__file__), \"samples\"))\nclass TestOCR(TestCase):\n\n    text_cases = [\n        (\"simple     string\", \"simple string\"),\n        (\n            \"simple    newline\\n   testing string\",\n            \"simple newline\\ntesting string\"\n        ),\n        (\n            \"utf-8   строка с пробелами в конце  \",\n            \"utf-8 строка с пробелами в конце\"\n        )\n    ]\n\n    TESSERACT_INSTALLED = bool(pyocr.get_available_tools())\n\n    def test_strip_excess_whitespace(self):\n        for source, result in self.text_cases:\n            actual_result = strip_excess_whitespace(source)\n            self.assertEqual(\n                result,\n                actual_result,\n                \"strip_exceess_whitespace({}) != '{}', but '{}'\".format(\n                    source,\n                    result,\n                    actual_result\n                )\n            )\n\n    @skipIf(not TESSERACT_INSTALLED, \"Tesseract not installed. Skipping\")\n    @mock.patch(\"paperless_tesseract.parsers.pyocr\", FakePyOcr)\n    def test_image_to_string_with_text_free_page(self):\n        \"\"\"\n        This test is sort of silly, since it's really just reproducing an odd\n        exception thrown by pyocr when it encounters a page with no text.\n        Actually running this test against an installation of Tesseract results\n        in a segmentation fault rooted somewhere deep inside pyocr where I\n        don't care to dig.  Regardless, if you run the consumer normally,\n        text-free pages are now handled correctly so long as we work around\n        this weird exception.\n        \"\"\"\n        image_to_string([\"no-text.png\", \"en\"])\n"
  },
  {
    "path": "src/paperless_tesseract/tests/test_signals.py",
    "content": "from django.test import TestCase\n\nfrom ..signals import ConsumerDeclaration\n\n\nclass SignalsTestCase(TestCase):\n\n    def test_test_handles_various_file_names_true(self):\n\n        prefixes = (\n            \"doc\", \"My Document\", \"Μυ Γρεεκ Δοψθμεντ\", \"Doc -with - tags\",\n            \"A document with a . in it\", \"Doc with -- in it\"\n        )\n        suffixes = (\n            \"pdf\", \"jpg\", \"jpeg\", \"gif\", \"png\", \"tiff\", \"tif\", \"pnm\", \"bmp\",\n            \"PDF\", \"JPG\", \"JPEG\", \"GIF\", \"PNG\", \"TIFF\", \"TIF\", \"PNM\", \"BMP\",\n            \"pDf\", \"jPg\", \"jpEg\", \"gIf\", \"pNg\", \"tIff\", \"tIf\", \"pNm\", \"bMp\",\n        )\n\n        for prefix in prefixes:\n            for suffix in suffixes:\n                name = \"{}.{}\".format(prefix, suffix)\n                self.assertTrue(ConsumerDeclaration.test(name))\n\n    def test_test_handles_various_file_names_false(self):\n\n        prefixes = (\"doc\",)\n        suffixes = (\"txt\", \"markdown\", \"\",)\n\n        for prefix in prefixes:\n            for suffix in suffixes:\n                name = \"{}.{}\".format(prefix, suffix)\n                self.assertFalse(ConsumerDeclaration.test(name))\n\n        self.assertFalse(ConsumerDeclaration.test(\"\"))\n        self.assertFalse(ConsumerDeclaration.test(\"doc\"))\n"
  },
  {
    "path": "src/paperless_text/__init__.py",
    "content": ""
  },
  {
    "path": "src/paperless_text/apps.py",
    "content": "from django.apps import AppConfig\n\n\nclass PaperlessTextConfig(AppConfig):\n\n    name = \"paperless_text\"\n\n    def ready(self):\n\n        from documents.signals import document_consumer_declaration\n\n        from .signals import ConsumerDeclaration\n\n        document_consumer_declaration.connect(ConsumerDeclaration.handle)\n\n        AppConfig.ready(self)\n"
  },
  {
    "path": "src/paperless_text/parsers.py",
    "content": "import os\nimport subprocess\n\nfrom django.conf import settings\n\nfrom documents.parsers import DocumentParser, ParseError\n\n\nclass TextDocumentParser(DocumentParser):\n    \"\"\"\n    This parser directly parses a text document (.txt, .md, or .csv)\n    \"\"\"\n\n    CONVERT = settings.CONVERT_BINARY\n    THREADS = int(settings.OCR_THREADS) if settings.OCR_THREADS else None\n    UNPAPER = settings.UNPAPER_BINARY\n    DEFAULT_OCR_LANGUAGE = settings.OCR_LANGUAGE\n    OCR_ALWAYS = settings.OCR_ALWAYS\n\n    def __init__(self, path):\n        super().__init__(path)\n        self._text = None\n\n    def get_thumbnail(self):\n        \"\"\"\n        The thumbnail of a text file is just a 500px wide image of the text\n        rendered onto a letter-sized page.\n        \"\"\"\n        # The below is heavily cribbed from https://askubuntu.com/a/590951\n\n        bg_color = \"white\"  # bg color\n        text_color = \"black\"  # text color\n        psize = [500, 647]  # icon size\n        n_lines = 50  # number of lines to show\n        out_path = os.path.join(self.tempdir, \"convert.png\")\n\n        temp_bg = os.path.join(self.tempdir, \"bg.png\")\n        temp_txlayer = os.path.join(self.tempdir, \"tx.png\")\n        picsize = \"x\".join([str(n) for n in psize])\n        txsize = \"x\".join([str(n - 8) for n in psize])\n\n        def create_bg():\n            work_size = \",\".join([str(n - 1) for n in psize])\n            r = str(round(psize[0] / 10))\n            rounded = \",\".join([r, r])\n            run_command(\n                self.CONVERT,\n                \"-size \", picsize,\n                ' xc:none -draw ',\n                '\"fill ', bg_color, ' roundrectangle 0,0,', work_size, \",\", rounded, '\" ',  # NOQA: E501\n                temp_bg\n            )\n\n        def read_text():\n            with open(self.document_path, 'r') as src:\n                lines = [l.strip() for l in src.readlines()]\n                text = \"\\n\".join([l for l in lines[:n_lines]])\n                return text.replace('\"', \"'\")\n\n        def create_txlayer():\n            run_command(\n                self.CONVERT,\n                \"-background none\",\n                \"-fill\",\n                text_color,\n                \"-pointsize\", \"12\",\n                \"-border 4 -bordercolor none\",\n                \"-size \", txsize,\n                ' caption:\"', read_text(), '\" ',\n                temp_txlayer\n            )\n\n        create_txlayer()\n        create_bg()\n        run_command(\n            self.CONVERT,\n            temp_bg,\n            temp_txlayer,\n            \"-background None -layers merge \",\n            out_path\n        )\n\n        return out_path\n\n    def get_text(self):\n\n        if self._text is not None:\n            return self._text\n\n        with open(self.document_path, 'r') as f:\n            self._text = f.read()\n\n        return self._text\n\n\ndef run_command(*args):\n    environment = os.environ.copy()\n    if settings.CONVERT_MEMORY_LIMIT:\n        environment[\"MAGICK_MEMORY_LIMIT\"] = settings.CONVERT_MEMORY_LIMIT\n    if settings.CONVERT_TMPDIR:\n        environment[\"MAGICK_TMPDIR\"] = settings.CONVERT_TMPDIR\n\n    if not subprocess.Popen(' '.join(args), env=environment,\n                            shell=True).wait() == 0:\n        raise ParseError(\"Convert failed at {}\".format(args))\n"
  },
  {
    "path": "src/paperless_text/signals.py",
    "content": "import re\n\nfrom .parsers import TextDocumentParser\n\n\nclass ConsumerDeclaration:\n\n    MATCHING_FILES = re.compile(r\"^.*\\.(te?xt|md|csv)$\")\n\n    @classmethod\n    def handle(cls, sender, **kwargs):\n        return cls.test\n\n    @classmethod\n    def test(cls, doc):\n\n        if cls.MATCHING_FILES.match(doc.lower()):\n            return {\n                \"parser\": TextDocumentParser,\n                \"weight\": 10\n            }\n\n        return None\n"
  },
  {
    "path": "src/reminders/__init__.py",
    "content": ""
  },
  {
    "path": "src/reminders/admin.py",
    "content": "from django.conf import settings\nfrom django.contrib import admin\n\nfrom .models import Reminder\n\n\nclass ReminderAdmin(admin.ModelAdmin):\n\n    class Media:\n        css = {\n            \"all\": (\"paperless.css\",)\n        }\n\n    list_per_page = settings.PAPERLESS_LIST_PER_PAGE\n    list_display = (\"date\", \"document\", \"note\")\n    list_filter = (\"date\",)\n    list_editable = (\"note\",)\n\n\nadmin.site.register(Reminder, ReminderAdmin)\n"
  },
  {
    "path": "src/reminders/apps.py",
    "content": "from django.apps import AppConfig\n\n\nclass RemindersConfig(AppConfig):\n    name = \"reminders\"\n"
  },
  {
    "path": "src/reminders/filters.py",
    "content": "from django_filters.rest_framework import CharFilter, FilterSet\n\nfrom .models import Reminder\n\n\nclass ReminderFilterSet(FilterSet):\n\n    class Meta(object):\n        model = Reminder\n        fields = {\n            \"document\": [\"exact\"],\n            \"date\": [\"gt\", \"lt\", \"gte\", \"lte\", \"exact\"],\n            \"note\": [\"istartswith\", \"iendswith\", \"icontains\"]\n        }\n"
  },
  {
    "path": "src/reminders/migrations/0001_initial.py",
    "content": "# -*- coding: utf-8 -*-\n# Generated by Django 1.10.5 on 2017-03-25 15:58\nfrom __future__ import unicode_literals\n\nfrom django.db import migrations, models\nimport django.db.models.deletion\n\n\nclass Migration(migrations.Migration):\n\n    initial = True\n\n    dependencies = [\n        ('documents', '0016_auto_20170325_1558'),\n    ]\n\n    operations = [\n        migrations.CreateModel(\n            name='Reminder',\n            fields=[\n                ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),\n                ('date', models.DateTimeField()),\n                ('note', models.TextField(blank=True)),\n                ('document', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='documents.Document')),\n            ],\n        ),\n    ]\n"
  },
  {
    "path": "src/reminders/migrations/0002_auto_20181007_1420.py",
    "content": "# Generated by Django 2.0.8 on 2018-10-07 14:20\n\nfrom django.db import migrations, models\nimport django.db.models.deletion\n\n\nclass Migration(migrations.Migration):\n\n    dependencies = [\n        ('reminders', '0001_initial'),\n    ]\n\n    operations = [\n        migrations.AlterField(\n            model_name='reminder',\n            name='document',\n            field=models.ForeignKey(on_delete=django.db.models.deletion.PROTECT, to='documents.Document'),\n        ),\n    ]\n"
  },
  {
    "path": "src/reminders/migrations/__init__.py",
    "content": ""
  },
  {
    "path": "src/reminders/models.py",
    "content": "from django.db import models\n\n\nclass Reminder(models.Model):\n\n    document = models.ForeignKey(\n        \"documents.Document\", on_delete=models.PROTECT)\n    date = models.DateTimeField()\n    note = models.TextField(blank=True)\n"
  },
  {
    "path": "src/reminders/serialisers.py",
    "content": "from documents.models import Document\nfrom rest_framework import serializers\n\nfrom .models import Reminder\n\n\nclass ReminderSerializer(serializers.HyperlinkedModelSerializer):\n\n    document = serializers.HyperlinkedRelatedField(\n        view_name=\"drf:document-detail\", queryset=Document.objects)\n\n    class Meta(object):\n        model = Reminder\n        fields = (\"id\", \"document\", \"date\", \"note\")\n"
  },
  {
    "path": "src/reminders/tests.py",
    "content": "from django.test import TestCase\n\n# Create your tests here.\n"
  },
  {
    "path": "src/reminders/views.py",
    "content": "from django_filters.rest_framework import DjangoFilterBackend\nfrom rest_framework.filters import OrderingFilter\nfrom rest_framework.permissions import IsAuthenticated\nfrom rest_framework.viewsets import (\n    ModelViewSet,\n)\n\nfrom .filters import ReminderFilterSet\nfrom .models import Reminder\nfrom .serialisers import ReminderSerializer\nfrom paperless.views import StandardPagination\n\n\nclass ReminderViewSet(ModelViewSet):\n    model = Reminder\n    queryset = Reminder.objects\n    serializer_class = ReminderSerializer\n    pagination_class = StandardPagination\n    permission_classes = (IsAuthenticated,)\n    filter_backends = (DjangoFilterBackend, OrderingFilter)\n    filter_class = ReminderFilterSet\n    ordering_fields = (\"date\", \"document\")\n"
  },
  {
    "path": "src/setup.cfg",
    "content": "[pycodestyle]\nexclude = migrations, paperless/settings.py, .tox\n\n\n[tool:pytest]\nDJANGO_SETTINGS_MODULE=paperless.settings\naddopts = --pythonwarnings=all -n auto\nenv =\n  PAPERLESS_PASSPHRASE=THISISNOTASECRET\n  PAPERLESS_SECRET=paperless\n  PAPERLESS_EMAIL_SECRET=paperless\n\n\n[coverage:run]\nsource =\n  ./\nomit =\n  */tests\n"
  },
  {
    "path": "src/tox.ini",
    "content": "# Tox (http://tox.testrun.org/) is a tool for running tests\n# in multiple virtualenvs. This configuration file will run the\n# test suite on all supported python versions. To use it, \"pip install tox\"\n# and then run \"tox\" from this directory.\n\n[tox]\nskipsdist = True\nenvlist = py34, py35, py36, py37, pycodestyle, doc\n\n[testenv]\ncommands = pytest\ndeps = -r{toxinidir}/../requirements.txt\n\n[testenv:pycodestyle]\ncommands=pycodestyle\ndeps=pycodestyle\n\n[testenv:doc]\ndeps =\n  -r {toxinidir}/../requirements.txt\ncommands=sphinx-build -b html ../docs ../docs/_build -W\n"
  }
]