From 161cc300d05d4add1a49f47768aa02b583124be5 Mon Sep 17 00:00:00 2001 From: Brian Luft Date: Thu, 5 Jun 2014 15:33:45 -0700 Subject: [PATCH 01/18] Restoring .env.example #31 --- .env.example | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) create mode 100644 .env.example diff --git a/.env.example b/.env.example new file mode 100644 index 0000000..790bdf1 --- /dev/null +++ b/.env.example @@ -0,0 +1,23 @@ +# Required +SECRET_KEY=supersecretkeyhere +WEB_PORT=8000 +EMAIL_BACKEND='django.core.mail.backends.console.EmailBackend' +GOPATH=$VIRTUAL_ENV +WEB_SECRET_KEY=somerandomstring +STORAGE_URL=postgres://user:pass@localhost:5432/botbot +REDIS_PLUGIN_STORAGE_URL=redis://localhost:6379/0 +REDIS_PLUGIN_QUEUE_URL=redis://localhost:6379/1 +REDIS_SSEQUEUE_URL=redis://localhost:6379/2 +SSE_ENDPOINT_URL=http://localhost:3000/ +SSE_HOST=localhost:3000 + +# Optional +# MEMCACHE_URL=127.0.0.1:11211 +# STATIC_ROOT=/var/www/botbot/static +# MEDIA_ROOT=/var/www/botbot/uploads +# DEBUG=True +# SMTP_URL=smtp://user:pass@host:port +# SMTP_TLS=True +# ALLOWED_HOSTS=host1,host2 +# INCLUDE_DJANGO_ADMIN=False +# EXCLUDE_NICKS=nick1,nick2 From 3bfd391e79f5a5dcd5cd481ca9f193fb7a6a6c6a Mon Sep 17 00:00:00 2001 From: Brian Luft Date: Wed, 9 Jul 2014 15:51:58 -0700 Subject: [PATCH 02/18] Restoring use of dotenv #31 --- manage.py | 5 +++++ requirements.txt | 1 + 2 files changed, 6 insertions(+) diff --git a/manage.py b/manage.py index c9ee98a..fcf90ff 100755 --- a/manage.py +++ b/manage.py @@ -1,5 +1,10 @@ #!/usr/bin/env python import sys +import dotenv + + +dotenv.read_dotenv() + if __name__ == "__main__": if (len(sys.argv) > 1 and diff --git a/requirements.txt b/requirements.txt index 3a1260c..7fca4be 100644 --- a/requirements.txt +++ b/requirements.txt @@ -12,6 +12,7 @@ webassets==0.9.0 django-assets==0.8.0 yuicompressor==2.4.8 honcho==0.5.0 +django-dotenv==1.2 djorm-ext-pgfulltext==0.9.0 djorm-ext-pgarray==0.9.0 From af6afc335cd5b9ec041f34eb349de86db69a9291 Mon Sep 17 00:00:00 2001 From: Brian Luft Date: Wed, 9 Jul 2014 16:14:25 -0700 Subject: [PATCH 03/18] Removes unused connecntion field from chatbot admin detail view --- botbot/apps/bots/admin.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/botbot/apps/bots/admin.py b/botbot/apps/bots/admin.py index 72b55a5..1929a6a 100644 --- a/botbot/apps/bots/admin.py +++ b/botbot/apps/bots/admin.py @@ -35,10 +35,11 @@ class MembershipInline(admin.TabularInline): class ChatBotAdmin(admin.ModelAdmin): + exclude = ('connection', ) list_display = ('__unicode__', 'is_active') list_editable = ('is_active',) list_filter = ('is_active',) - readonly_fields = ('connection', 'server_identifier') + readonly_fields = ('server_identifier', ) # Disable bulk delete, because it doesn't call delete, so skips REFRESH actions = None From f3762f28a7975a4965aa02790e71e39ae3136ec4 Mon Sep 17 00:00:00 2001 From: Brian Luft Date: Wed, 9 Jul 2014 16:15:14 -0700 Subject: [PATCH 04/18] Removes unused server_identifier field from chatbot admin detail view --- botbot/apps/bots/admin.py | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/botbot/apps/bots/admin.py b/botbot/apps/bots/admin.py index 1929a6a..4a9bbd1 100644 --- a/botbot/apps/bots/admin.py +++ b/botbot/apps/bots/admin.py @@ -35,11 +35,10 @@ class MembershipInline(admin.TabularInline): class ChatBotAdmin(admin.ModelAdmin): - exclude = ('connection', ) + exclude = ('connection', 'server_identifier') list_display = ('__unicode__', 'is_active') list_editable = ('is_active',) list_filter = ('is_active',) - readonly_fields = ('server_identifier', ) # Disable bulk delete, because it doesn't call delete, so skips REFRESH actions = None From 9f301ba780efdd506573bb943e450a2c2efdac6c Mon Sep 17 00:00:00 2001 From: Brian Luft Date: Wed, 9 Jul 2014 16:46:41 -0700 Subject: [PATCH 05/18] Updates docs to match current state of the site; use #botbot-warmup for now #31 --- docs/getting_started.rst | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/docs/getting_started.rst b/docs/getting_started.rst index 4e0c74b..9c53181 100644 --- a/docs/getting_started.rst +++ b/docs/getting_started.rst @@ -42,21 +42,21 @@ Now that your bot is connected to a network or server, you can start having it j 1. Go to ``http://localhost:8000/admin/bots/channel/add/`` 2. Select your bot from the dropdown -3. **Channel**: ``#botbot-test`` +3. **Channel**: ``#botbot-warmup`` 4. Select **'Is public'** -5. In the **Active Plugins** section click *Add another Active Plugin* and select **Ping**. +5. Several useful plugins will already be configured. At a minimum, ``ping`` and ``logger`` will be helpful for testing the bot. 6. Save. In the ``honcho`` console output you should see messages similar to:: 12:14:42 bot.1 | 2013/09/19 12:14:42 Command: REFRESH 12:14:42 bot.1 | 2013/09/19 12:14:42 Reloading configuration from database - 12:14:42 bot.1 | 2013/09/19 12:14:42 config.Channel: [#botbot-test ] - 12:14:42 bot.1 | 2013/09/19 12:14:42 [RAW1] -->JOIN #botbot-test + 12:14:42 bot.1 | 2013/09/19 12:14:42 config.Channel: [#botbot-warmup ] + 12:14:42 bot.1 | 2013/09/19 12:14:42 [RAW1] -->JOIN #botbot-warmup -7. In your IRC client, join `#botbot-test `_. Try issuing a `ping` command (using your bot's nick in place of "mybot"). The bot should respond with a friendly message. +7. In your IRC client, join `#botbot-warmup `_. Try issuing a `ping` command (using your bot's nick in place of "mybot"). The bot should respond with a friendly message. 8. Go back to the home page ``http://localhost:8000``, you should see the channel listed as a public channel. 9. **Add another Active Plugin** and this time select **Logger**. 10. **Save**. Your ``honcho`` console should once again show a refresh -11. In your IRC client, go to `#botbot-test `_ and post a message. You should now have a log available at ``http://localhost:8000/freenode/botbot-test``. Each message you post in the channel shows up in the ``honcho`` console. +11. In your IRC client, go to `#botbot-warmup `_ and post a message. You should now have a log available at ``http://localhost:8000/freenode/botbot-warmup``. Each message you post in the channel shows up in the ``honcho`` console. .. warning: From f39719a77c4429e120cb6178e822791044c13690 Mon Sep 17 00:00:00 2001 From: Brian Luft Date: Wed, 9 Jul 2014 16:47:22 -0700 Subject: [PATCH 06/18] Remove section about env vars since those are in the .env file now #31 --- docs/install.rst | 31 ++----------------------------- 1 file changed, 2 insertions(+), 29 deletions(-) diff --git a/docs/install.rst b/docs/install.rst index d1b25aa..2c6802c 100644 --- a/docs/install.rst +++ b/docs/install.rst @@ -25,6 +25,8 @@ Postgresql with hStore extension Go ~~ +Version 1.3 or higher required + * **OS X**: ``brew install go`` * **Ubuntu**: ``apt-get install golang-go`` @@ -78,35 +80,6 @@ You should now be able to access the site at ``http://localhost:8000``. Log in w See :doc:`getting_started` for instructions on configuring a bot. -Environment Variables to override ----------------------------------:: - - # Django (required) - WEB_SECRET_KEY=supersecretkeyhere - - # DB Storage where channel/bot information is stored - STORAGE_URL=postgres://user:pass@localhost:5432/botbot - - # Pipes - REDIS_PLUGIN_STORAGE_URL=redis://localhost:6379/1 - REDIS_PLUGIN_QUEUE_URL=redis://localhost:6379/2 - REDIS_SSEQUEUE_URL=redis://localhost:6379/3 - - # The host and port eventsource is delivering and the browser is listening - # for live changes. - SSE_ENDPOINT_URL=http://localhost:3000/ - - # Specific Django settings to override - # MEMCACHE_URL=127.0.0.1:11211 - # STATIC_ROOT=/var/www/botbot/static - # MEDIA_ROOT=/var/www/botbot/uploads - # DEBUG=True - # SMTP_URL=smtp://user:pass@host:port - # SMTP_TLS=True - # ALLOWED_HOSTS=host1,host2 - # INCLUDE_DJANGO_ADMIN=False - # EXCLUDE_NICKS=nick1,nick2 - Serving In Production --------------------- From 48f82131962dc895698c5c1b777c901652e47aea Mon Sep 17 00:00:00 2001 From: Brian Luft Date: Wed, 9 Jul 2014 17:22:27 -0700 Subject: [PATCH 07/18] Remove the temporary quickstart instructions #31 --- README.md | 59 ------------------------------------------------------- 1 file changed, 59 deletions(-) diff --git a/README.md b/README.md index 4a42d58..a0ad9f8 100644 --- a/README.md +++ b/README.md @@ -13,62 +13,3 @@ Botbot is collection of tools for running IRC bots. It has primarily been used with Freenode channels but works with other IRC networks or servers. [Documentation](http://botbot.readthedocs.org/en/latest/) - - -Quickstart Guide: -================= - -``` -mkvirtualenv botbotenv -cdvirtualenv - -# Set necessary environment variables e.g. in: -vi bin/postactivate - -export GOPATH=$VIRTUAL_ENV -export WEB_SECRET_KEY=somerandomstring -export STORAGE_URL=postgres://user:pass@localhost:5432/botbot -export REDIS_PLUGIN_STORAGE_URL=redis://localhost:6379/0 -export REDIS_PLUGIN_QUEUE_URL=redis://localhost:6379/1 -export REDIS_SSEQUEUE_URL=redis://localhost:6379/2 -export SSE_ENDPOINT_URL=http://localhost:3000/ -export SSE_HOST=localhost:3000 - -source bin/postactivate - -# Clone and install the Django part -mkdir src -cd src -git clone git@github.com:BotBotMe/botbot-web.git -pip install -e botbot-web -pip install -r botbot-web/requirements.txt - -# Install the Go related part -cd .. -go get github.com/BotBotMe/botbot-bot -go get github.com/BotBotMe/botbot-eventsource - -# Setup the database -manage.py dbshell -CREATE EXTENSION hstore; -CREATE EXTENSION unaccent; -ALTER FUNCTION unaccent(text) IMMUTABLE; - -manage.py syncdb -manage.py migrate -manage.py collectstatic -manage.py createsuperuser - -# Run all of the services at once with Foreman -ln -s src/botbot-web/Procfile -foreman start - -# Or each one manually -botbot-bot -botbot-eventsource -manage.py runserver -manage.py run_plugins -``` - -Go to http://127.0.0.1:8000/admin/ and setup a bot and a channel. -Finally ppen http://127.0.0.1:8000/. From f76a8de0b6b08db48a6a533ba94481cf8b80251a Mon Sep 17 00:00:00 2001 From: Brian Luft Date: Fri, 11 Jul 2014 12:20:26 -0700 Subject: [PATCH 08/18] Update to use STORAGE_URL for consistency --- docs/install.rst | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/install.rst b/docs/install.rst index 2c6802c..198a069 100644 --- a/docs/install.rst +++ b/docs/install.rst @@ -51,7 +51,7 @@ Run in a terminal: make dependencies # Adjust ``.env`` file if necessary. Defaults are chosen for local debug environments. - # If your Postgres server requires a password, you'll need to override DATABASE_URL + # If your Postgres server requires a password, you'll need to override STORAGE_URL # The default database name is 'botbot' $EDITOR .env @@ -121,7 +121,7 @@ Example upstart scripts respawn env LANG=en_US.UTF-8 - env DATABASE_URL=postgres://yourdburl + env STORAGE_URL=postgres://yourdburl env REDIS_PLUGIN_QUEUE_URL=redis://localhost:6379/0 exec /srv/botbot/bin/botbot-bot From 822ce9aa52e2f487efd81e8b5bbf7e6fde81caad Mon Sep 17 00:00:00 2001 From: Brian Luft Date: Fri, 11 Jul 2014 13:59:00 -0700 Subject: [PATCH 09/18] Use config value for REDIS_PLUGIN_QUEUE_URL; fixes #78 --- botbot/apps/bots/admin.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/botbot/apps/bots/admin.py b/botbot/apps/bots/admin.py index 6356248..8ef4fc9 100644 --- a/botbot/apps/bots/admin.py +++ b/botbot/apps/bots/admin.py @@ -1,5 +1,6 @@ """Django admin configuration for the bot objects. """ +from django.conf import settings from django.contrib import admin from django.forms.models import BaseInlineFormSet import redis @@ -47,7 +48,7 @@ def botbot_refresh(modeladmin, request, queryset): """ Ask daemon to reload configuration """ - queue = redis.Redis(db=0) + queue = redis.from_url(settings.REDIS_PLUGIN_QUEUE_URL) queue.lpush('bot', 'REFRESH') botbot_refresh.short_description = "Reload botbot-bot configuration" From a6e202f341a3ffc55204a9456d9360fc23fcb5e9 Mon Sep 17 00:00:00 2001 From: Brian Luft Date: Fri, 11 Jul 2014 14:04:42 -0700 Subject: [PATCH 10/18] Remove django-dotenv --- manage.py | 5 ----- requirements.txt | 1 - 2 files changed, 6 deletions(-) diff --git a/manage.py b/manage.py index fcf90ff..c9ee98a 100755 --- a/manage.py +++ b/manage.py @@ -1,10 +1,5 @@ #!/usr/bin/env python import sys -import dotenv - - -dotenv.read_dotenv() - if __name__ == "__main__": if (len(sys.argv) > 1 and diff --git a/requirements.txt b/requirements.txt index 7fca4be..3a1260c 100644 --- a/requirements.txt +++ b/requirements.txt @@ -12,7 +12,6 @@ webassets==0.9.0 django-assets==0.8.0 yuicompressor==2.4.8 honcho==0.5.0 -django-dotenv==1.2 djorm-ext-pgfulltext==0.9.0 djorm-ext-pgarray==0.9.0 From baad5baa6d8f28787d27cfff5f2c30f5473ffcaa Mon Sep 17 00:00:00 2001 From: Brian Luft Date: Fri, 11 Jul 2014 14:06:28 -0700 Subject: [PATCH 11/18] Updates DATABASE_URL to STORAGE_URL --- .travis.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.travis.yml b/.travis.yml index 54fea8f..3553877 100644 --- a/.travis.yml +++ b/.travis.yml @@ -18,6 +18,6 @@ before_script: - "psql -c 'create database botbot;' -U postgres" - "psql -c 'create extension hstore;' -U postgres botbot" - "psql -c 'create extension hstore;' -U postgres template1" - - "echo 'DATABASE_URL=postgres://postgres@localhost:5432/botbot' >> .env" + - "echo 'STORAGE_URL=postgres://postgres@localhost:5432/botbot' >> .env" - "manage.py collectstatic --noinput" script: "manage.py test" From 9f918c3e8b3a979f1dd28e3ccc40d728ecac253f Mon Sep 17 00:00:00 2001 From: Brian Luft Date: Fri, 11 Jul 2014 14:28:19 -0700 Subject: [PATCH 12/18] Update getting started docs to cover manual refresh action --- docs/getting_started.rst | 35 ++++++++++++++++++++++------------- 1 file changed, 22 insertions(+), 13 deletions(-) diff --git a/docs/getting_started.rst b/docs/getting_started.rst index 9c53181..8253387 100644 --- a/docs/getting_started.rst +++ b/docs/getting_started.rst @@ -42,21 +42,30 @@ Now that your bot is connected to a network or server, you can start having it j 1. Go to ``http://localhost:8000/admin/bots/channel/add/`` 2. Select your bot from the dropdown -3. **Channel**: ``#botbot-warmup`` -4. Select **'Is public'** +3. **Channel**: ``#botbot-warmup``. This is a channel commonly used for testing IRC bots. +4. If you'd like the channel to be listed on the site home page, Select **'Is public'** 5. Several useful plugins will already be configured. At a minimum, ``ping`` and ``logger`` will be helpful for testing the bot. 6. Save. In the ``honcho`` console output you should see messages similar to:: - - 12:14:42 bot.1 | 2013/09/19 12:14:42 Command: REFRESH - 12:14:42 bot.1 | 2013/09/19 12:14:42 Reloading configuration from database - 12:14:42 bot.1 | 2013/09/19 12:14:42 config.Channel: [#botbot-warmup ] - 12:14:42 bot.1 | 2013/09/19 12:14:42 [RAW1] -->JOIN #botbot-warmup - -7. In your IRC client, join `#botbot-warmup `_. Try issuing a `ping` command (using your bot's nick in place of "mybot"). The bot should respond with a friendly message. -8. Go back to the home page ``http://localhost:8000``, you should see the channel listed as a public channel. -9. **Add another Active Plugin** and this time select **Logger**. -10. **Save**. Your ``honcho`` console should once again show a refresh -11. In your IRC client, go to `#botbot-warmup `_ and post a message. You should now have a log available at ``http://localhost:8000/freenode/botbot-warmup``. Each message you post in the channel shows up in the ``honcho`` console. +7. On the Channel list view, select your channel. From the ``Actions`` dropdown select "Reload botbot-bot configuration" and press "Go". You should see something similar in the ``honcho`` console output (edited for brevity):: + + 14:15:07 bot.1 | I0711 14:15:07.557470 61493 botbot.go:67] Command: REFRESH + 14:15:07 bot.1 | I0711 14:15:07.557546 61493 botbot.go:124] HandleCommand: REFRESH + 14:15:07 bot.1 | I0711 14:15:07.557557 61493 botbot.go:153] Reloading configuration from database + 14:15:07 bot.1 | I0711 14:15:07.557564 61493 network.go:49] Entering in NetworkManager.RefreshChatbots + 14:15:07 bot.1 | I0711 14:15:07.558013 61493 storage.go:121] config.Id: 1 + 14:15:07 bot.1 | I0711 14:15:07.558753 61493 storage.go:145] config.Channel: [#botbot-warmup] + ... + 14:15:07 bot.1 | I0711 14:15:07.559072 61493 irc.go:460] [Info] The channels the bot is connected to need to be updated + 14:15:07 bot.1 | I0711 14:15:07.559083 61493 irc.go:473] [Info] Joining new channel: #botbot-warmup + 14:15:07 bot.1 | I0711 14:15:07.559096 61493 network.go:98] Exiting NetworkManager.RefreshChatbots + 14:15:07 bot.1 | I0711 14:15:07.559111 61493 irc.go:228] [RAW thahslkd334558 on chat.freenode.net:6667 (0xc208028750) ] --> JOIN #botbot-warmup + + +8. In your IRC client, join `#botbot-warmup `_. Try issuing a `ping` command (using your bot's nick in place of "mybot"). The bot should respond with a friendly message. +9. Go back to the home page ``http://localhost:8000``, you should see the channel listed as a public channel. +10. **Add another Active Plugin** and this time select **Logger**. +11. **Save**. Your ``honcho`` console should once again show a refresh +12. In your IRC client, go to `#botbot-warmup `_ and post a message. You should now have a log available at ``http://localhost:8000/freenode/botbot-warmup``. Each message you post in the channel shows up in the ``honcho`` console. .. warning: From 1764e10623be40058abf741f2f73808ecb26db48 Mon Sep 17 00:00:00 2001 From: Brian Luft Date: Fri, 11 Jul 2014 16:11:45 -0700 Subject: [PATCH 13/18] [WIP] start updating docs to explain managing environment and services --- docs/developers.rst | 60 +++++++++++++++++++++++++++++++++++++++++++-- docs/install.rst | 57 ++---------------------------------------- docs/production.rst | 58 +++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 118 insertions(+), 57 deletions(-) create mode 100644 docs/production.rst diff --git a/docs/developers.rst b/docs/developers.rst index 9132477..44b6672 100644 --- a/docs/developers.rst +++ b/docs/developers.rst @@ -1,5 +1,59 @@ -Developing with Botbot -======================== +********************** +Developing with BotBot +********************** + +Architecture +============ + +Several loosely coupled pieces make up the whole of BotBot: + +1. **botbot-bot:** An IRC client capable of connecting to multiple IRC networks, and connecting multiple channels and nicks per network. (Go) +2. **botbot-plugins:** A plugin framework - plugins receive messages from IRC channels and can respond within the channel. (Python) +3. **botbot-web:** A web site for managing bots/channels as well as a beautiful public interface for channel logs. (Python/Django) +4. **botbot-eventsource:** A basic SSE provider that the web site can connect to for real-time logs. (Go) + +Configuration / Environment Variables +------------------------------------- + +At Lincoln Loop we've found the 12-factor style to be helpful and use those guidelines. As recommended, we rely on environment variables whenever possible for determining site-specific configuration values. + +The .env file +^^^^^^^^^^^^^ + +We've adopted a convention used by Heroku and others of creating a ``.env`` file in the project root that can be used as a base for managing environment variables. Tools like Honcho and Foreman will use the ``.env`` file to bootstrap the environment for each process it starts up. If you prefer to use these tools, all you have to worry about is editing the ``.env`` file as needed. The ``.env`` file can also be used as a template for other methods of populating environment variables. + +We don't want make assumptions about how developers prefer to configure their environments. There are some handy open source libs out there that we could use to easily make each service utilize the ``.env`` file, but this won't work well for everyone or every environment. If you need to run a service individually, you'll need to make sure the proper environment variables are configured. The next section describes some easy ways to handle this. + + +Running Services +---------------- + +Run All Services +^^^^^^^^^^^^^^^^ + +Honcho is great for getting everything started quickly. Running this command will load all services defined in the ``Procfile``:: + + honcho start + +Run Services Individually +^^^^^^^^^^^^^^^^^^^^^^^^^ + +When working on code changes or debugging, it is often desirable to manage one or more of the services (bot, plugin runner, runserver, eventsource) independently. + +If you'd like to make use of the ``.env`` file, you can still start services individually using Honcho:: + + honcho start web # Starts Django site + honcho start bot # Starts IRC client + honcho start plugins # Starts plugin runner + honcho start realtime # Starts event source (SSE) + +If you'd prefer not to have Honcho in the mix and would like to work with the services directly:: + + source set_env.sh && manage.py runserver + source set_env.sh && botbot-bot + source set_env.sh && botbot-eventsource + source set_env.sh && manage.py run_plugins + Go IRC Client (bot) ------------------- @@ -31,6 +85,8 @@ And now, in ASCII art:: Django Site ------------ +TODO running Django management commands + Working with LESS ~~~~~~~~~~~~~~~~~~ diff --git a/docs/install.rst b/docs/install.rst index e6ad8a0..9e8a8d5 100644 --- a/docs/install.rst +++ b/docs/install.rst @@ -80,62 +80,9 @@ You should now be able to access the site at ``http://localhost:8000``. Log in w See :doc:`getting_started` for instructions on configuring a bot. -Serving In Production ---------------------- +If you plan make code changes, please read through the :doc:`developers` doc. -When you deploy botbot to production, we recommend that you do not use the Procfile. Instead, serve three pieces individually: - -* **botbot-web**: should be served as a wsgi application, from the ``wsgi.py`` file located at ``src/botbot/botbot/wsgi.py`` from `uwsgi `_, `gunicorn `_, `mod_wsgi `_, or any other wsgi server. -* **botbot-plugins**: should be run as an application from botbot's manage.py file. Use `upstart `_, `systemd `_, `init `_, or whatever your system uses for managing long-running tasks. An example upstart script is provided below. -* **botbot-bot**: should also be run as an application from your system's task management system. An example upstart script is provided below. - -Example upstart scripts ------------------------ - -``botbot-plugins.conf``: - -.. code-block:: bash - - # BotBot Plugins - # logs to /var/log/upstart/botbot_plugins.log - - description "BotBot Plugins" - start on startup - stop on shutdown - - respawn - env LANG=en_US.UTF-8 - exec /srv/botbot/bin/manage.py run_plugins - setuid www-data - -``botbot-bot.conf``: - -.. code-block:: bash - - # BotBot-bot - # logs to /var/log/upstart/botbot.log - - description "BotBot" - start on startup - stop on shutdown - - respawn - env LANG=en_US.UTF-8 - env STORAGE_URL=postgres://yourdburl - env REDIS_PLUGIN_QUEUE_URL=redis://localhost:6379/0 - - exec /srv/botbot/bin/botbot-bot - setuid www-data - -Running In A Subdirectory -------------------------- - -If you intend to run botbot in a subdirectory of your website, for example at ``http://example.com/botbot`` you'll need to add two options to your ``settings.py``: - -.. code-block:: python - - FORCE_SCRIPT_NAME = '/botbot' - USE_X_FORWARDED_HOST = True +If you plan to run BotBot in a production environment please read the :doc:`production` doc. Running Tests diff --git a/docs/production.rst b/docs/production.rst new file mode 100644 index 0000000..6015dc1 --- /dev/null +++ b/docs/production.rst @@ -0,0 +1,58 @@ +****************************************** +Serving BotBot In a Production Environment +****************************************** + +When you deploy botbot to production, we recommend that you do not use the Procfile. Instead, serve three pieces individually: + +* **botbot-web**: should be served as a wsgi application, from the ``wsgi.py`` file located at ``src/botbot/botbot/wsgi.py`` from `uwsgi `_, `gunicorn `_, `mod_wsgi `_, or any other wsgi server. +* **botbot-plugins**: should be run as an application from botbot's manage.py file. Use `upstart `_, `systemd `_, `init `_, or whatever your system uses for managing long-running tasks. An example upstart script is provided below. +* **botbot-bot**: should also be run as an application from your system's task management system. An example upstart script is provided below. + +Example upstart scripts +----------------------- + +``botbot-plugins.conf``: + +.. code-block:: bash + + # BotBot Plugins + # logs to /var/log/upstart/botbot_plugins.log + + description "BotBot Plugins" + start on startup + stop on shutdown + + respawn + env LANG=en_US.UTF-8 + exec /srv/botbot/bin/manage.py run_plugins + setuid www-data + +``botbot-bot.conf``: + +.. code-block:: bash + + # BotBot-bot + # logs to /var/log/upstart/botbot.log + + description "BotBot" + start on startup + stop on shutdown + + respawn + env LANG=en_US.UTF-8 + env STORAGE_URL=postgres://yourdburl + env REDIS_PLUGIN_QUEUE_URL=redis://localhost:6379/0 + + exec /srv/botbot/bin/botbot-bot + setuid www-data + +Running In A Subdirectory +------------------------- + +If you intend to run botbot in a subdirectory of your website, for example at ``http://example.com/botbot`` you'll need to add two options to your ``settings.py``: + +.. code-block:: python + + FORCE_SCRIPT_NAME = '/botbot' + USE_X_FORWARDED_HOST = True + From 2b7feb84111bcd9fb7541e53a20f7f9759408f65 Mon Sep 17 00:00:00 2001 From: Brian Luft Date: Wed, 3 Sep 2014 14:36:17 -0700 Subject: [PATCH 14/18] Update instruction to be clear about reloading config --- docs/getting_started.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/getting_started.rst b/docs/getting_started.rst index 8253387..5260cfa 100644 --- a/docs/getting_started.rst +++ b/docs/getting_started.rst @@ -64,7 +64,7 @@ Now that your bot is connected to a network or server, you can start having it j 8. In your IRC client, join `#botbot-warmup `_. Try issuing a `ping` command (using your bot's nick in place of "mybot"). The bot should respond with a friendly message. 9. Go back to the home page ``http://localhost:8000``, you should see the channel listed as a public channel. 10. **Add another Active Plugin** and this time select **Logger**. -11. **Save**. Your ``honcho`` console should once again show a refresh +11. **Save** and "Reload botbot-bot configuration" as before. Your ``honcho`` console should once again show a refresh 12. In your IRC client, go to `#botbot-warmup `_ and post a message. You should now have a log available at ``http://localhost:8000/freenode/botbot-warmup``. Each message you post in the channel shows up in the ``honcho`` console. From 43f19a768b92b716812e203a7300db52d9316898 Mon Sep 17 00:00:00 2001 From: Brian Luft Date: Wed, 3 Sep 2014 15:34:22 -0700 Subject: [PATCH 15/18] Finish up docs about running services and django commands --- docs/developers.rst | 38 +++++++++++++++++++++++++++++++++----- 1 file changed, 33 insertions(+), 5 deletions(-) diff --git a/docs/developers.rst b/docs/developers.rst index 44b6672..db37c4e 100644 --- a/docs/developers.rst +++ b/docs/developers.rst @@ -47,16 +47,27 @@ If you'd like to make use of the ``.env`` file, you can still start services ind honcho start plugins # Starts plugin runner honcho start realtime # Starts event source (SSE) -If you'd prefer not to have Honcho in the mix and would like to work with the services directly:: +If you would prefer not to use Honcho, you'll need to manage the environment variables. Many developers use the virtualenv ``postactivate`` feature to set required environment variables whenever a virtualenv is activated. An alternative approach could be to attempt to set variables directly from the ``.env`` file. As an example, you could put the following into a ``set_env.sh`` file:: + + export $(cat .env | grep -v ^# | xargs) + +Then you could invoke commands and individual services like:: source set_env.sh && manage.py runserver source set_env.sh && botbot-bot source set_env.sh && botbot-eventsource source set_env.sh && manage.py run_plugins +If you've explicitly set the environment through your own methods, services can be invoked like usual:: + + manage.py runserver + botbot-bot + botbot-eventsource + manage.py run_plugins + Go IRC Client (bot) -------------------- +~~~~~~~~~~~~~~~~~~~ Execution starts in main.go, in function "main". That starts the chatbots (via NetworkManager), the goroutine which listens for commands from Redis, and the mainLoop goroutine, then waits for a Ctrl-C or kill to quit. @@ -83,12 +94,27 @@ And now, in ASCII art:: Django Site ------------- +~~~~~~~~~~~~ + +You can run commands within the Honcho environment using the ``run`` command:: + + honcho run manage.py dbshell + honcho run manage.py syncdb + +If you're using the ``set_env`` method:: + + source set_env.sh && manage.py dbshell + source set_env.sh && manage.py syncdb + +If you've explicitly set the environment variables, run commands like usual:: + + manage.py dbshell + manage.py syncdb + -TODO running Django management commands Working with LESS -~~~~~~~~~~~~~~~~~~ +~~~~~~~~~~~~~~~~~ LESS requires Node.js. There are shortcuts in the Makefile for installing everything necessary: @@ -105,8 +131,10 @@ From this point forward, if you need to compile LESS run: To automatically compile whenever you save a change: .. code-block:: bash + make less-watch + Plugins -------- From 78ef7804192e17bd0a91b14279a8bfc357c53987 Mon Sep 17 00:00:00 2001 From: Brian Luft Date: Fri, 5 Sep 2014 15:02:12 -0700 Subject: [PATCH 16/18] Minor update to description of botbot-war --- docs/getting_started.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/getting_started.rst b/docs/getting_started.rst index 5260cfa..e1813f6 100644 --- a/docs/getting_started.rst +++ b/docs/getting_started.rst @@ -42,7 +42,7 @@ Now that your bot is connected to a network or server, you can start having it j 1. Go to ``http://localhost:8000/admin/bots/channel/add/`` 2. Select your bot from the dropdown -3. **Channel**: ``#botbot-warmup``. This is a channel commonly used for testing IRC bots. +3. **Channel**: ``#botbot-warmup``. This is a channel where we test channel bots. 4. If you'd like the channel to be listed on the site home page, Select **'Is public'** 5. Several useful plugins will already be configured. At a minimum, ``ping`` and ``logger`` will be helpful for testing the bot. 6. Save. In the ``honcho`` console output you should see messages similar to:: From eb50737cfda4db051037cbb005e54d594e5785cb Mon Sep 17 00:00:00 2001 From: Brian Luft Date: Fri, 5 Sep 2014 15:25:39 -0700 Subject: [PATCH 17/18] Adds architecture diagram to developer docs --- docs/developers.rst | 2 ++ docs/images/botbot-architecture.png | Bin 0 -> 89711 bytes 2 files changed, 2 insertions(+) create mode 100644 docs/images/botbot-architecture.png diff --git a/docs/developers.rst b/docs/developers.rst index db37c4e..8c22990 100644 --- a/docs/developers.rst +++ b/docs/developers.rst @@ -12,6 +12,8 @@ Several loosely coupled pieces make up the whole of BotBot: 3. **botbot-web:** A web site for managing bots/channels as well as a beautiful public interface for channel logs. (Python/Django) 4. **botbot-eventsource:** A basic SSE provider that the web site can connect to for real-time logs. (Go) +.. image:: /images/botbot-architecture.png + Configuration / Environment Variables ------------------------------------- diff --git a/docs/images/botbot-architecture.png b/docs/images/botbot-architecture.png new file mode 100644 index 0000000000000000000000000000000000000000..1c1f1861462d780c1dbd4282ce1e7ed56cc4b8be GIT binary patch literal 89711 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 z±d#iEQzSqNwW(RdF+3v^jUe0NdwS@jL!+{SKf;-N{RP0uGpMjI_V$|O?P_l1+ds{{_ zlGN)7#$1=TO%DZIPva$u+9dmI&II}x)GVsk3BUI;rmOba_Fj~*Ni`%IE}C(B!?JsH zq*v`)#Mf6pVu>lq0M+PP4fnk;O5Yq^eF8LG8Gst%z;_3@1aFnP0*bWR`g zjfZqrMwL}DA3Uxd=yHU-(u}@WNZHf1dil%LJ{TfoDzKh?`&f!i&bbko+;5-80Lg;{ zN>@)n*9H|7v>FwGX~g=?NB1=kUsi7>7Pogyq%9W7Sgb~E`P2J6Iw6_%W%XdP^xniR zYxV2W8H!6SyF0&8+l<(GTDlTC&+?kO0L-;VdOkY9#pLvtVdXOrprGXeZFjvzSEv{x zzu?$`nwRVVt}XODrW06sa9^yx%|i$h60-7{W0MdA2t`ei8pkOi2b@AJX0S{~G=jw- zcIaBkeOQRV0{#CnbrxJvwSn5ErMq*6lJ1o5Zb3l0JBF5!Zs~3T6GWP!!=Xz;x+Gtu zMFgbI!}->?*7*f2X7=p;>^rX8@g+9qq^0Yn{tX7%Co5IV{&mgwwHvZ7PaFN8G}n+h zl)b|xNyE6~c~L_PAOIu8DEB2#(5w<;?M~y1hRdaZ$uIDAkhWqhtB};RGE38B7nH zBq#*ZR}gM9xGoRG`aYe;8kS2ldqoY3-$Xsk^qE0SSRoRi=B>d06yLy*Xn0yhQs)N~ z8G_sVYGs(s{h?k=(vztVMad-^#g~iK$mRTAirM<{PUSjMsMMeldwC-xYN2S%?r+)GM63o=>+owb_iP@2s_#FtYccr z{x$L0TS-Smw}7Ot5D3=pk&nIGp+eReUmc%mnGOf_DtBX$I)1nF?PmH7jw2frSBB@I5m36XlRGT`9WXMngk z6h0$!UK@zY;wX1oBDS<-c;TB1EgnXS1Ius=1K?NMLxiGIKQV$z5Jy1hK*Q~eX&+dj@#?0ZOt;sopOSItb7_1=MN5_4 zAZ7Iz4|n#Xyxaf{qL1JaGOaW9i|;`Q=`r%wikd$8Cf)=qi3t-d7ih)q(g~|apEW_f zFnFGSOnbvrvl#PN$aOCH(a;*FH8a4;9l^Yf>j9s^j>b;6)WG#z)eBx~QGZ;#doS8A zE8ayJ2Kx3cXig_<2dn80cLM2Qc~?@Me@8|c^{x$kQ!&#}`b53&9o~+Qg5$=$;5g}t zrQEOE|90X`rw@O$_xrp>(JGRT(-#!@BscEjySbrFB($aU3N$i&ONrlt*F&`F$;}Wn zFa#+651{@(0oKd}Z;^&CC9-C7ZNv(TdF#6`_`LKinhg&(%K>m*RC6oh$zF4V!Rfjk zLHn=zoWdW{Ox-bq4rVd*9jV073$V#=h`@Vh@Iri2_1_AsLqWM?P&{K44xsc@F^B*y z&C`3N{7C8$&}PTC*e{rwqF?yr!)7+WG5T%|ur|)}#%S~a%0>wo5(Os;${JTm?EF4*aGlvfWF9Q||-zk`~54%5lX30!3@?8aR@|C_p0 zk|R;idQ<+2`F-w6HsN+kjKHJbBsEjPM7`S-om$1#$fEW}>+x%Jv7G*h*!SH>eiZnrDV z8fIth;p1Ee0Dhpv7b~aGvg>ricCe)Yu)BT*1avgMpb=Ye%1N;?1WAG+Hyv;tWMifM z@V=jwMxoTnq9DN1iKPB1v!5!kO>;g0!n|$Uz6w%1OCg4 z=7T?Q)Jjy&VXg@kBx$vw1Tm1U-J_Ubd6o=LVHyciPrnj4!c>OO>KcD<-M7RSTN1t# z4Tc(|li9S^3~kz3~$C2(ixHlZ8c8 zVjk*gWpV9rN%CUxPKrK~{@vnK%Gj(>@njKEB7>j(@9-w`S=!6)u+CYez9JaNkWM$k zK%n`N6}ear91Y^z8;js0;ry}Fgr_BGL3JSDFZ*b8?8!#urKQPg6$rfr!xyPug5h=% zr+$YE>Cz9kK59$!ul|DuN#BDbT0u1q;@82~hsm{|o)>z)?zho|@+X~~@#=bsDEeqb zH?AiOwG^aEXke z%dzqgM5>m@mq-OuiAKB4|1Xb*6LLup#g*3gKL_aH|fd%C$k{XRs9aw{;p;LC5i&hLF0nJsh&7hiOO3u-tWsj}$AyPkk-K@!Y8G#`$PI>w*YNGSzEH|zwAC> zijg0(|1NiIMK$XUpc9P~iqcc-FW9C>$!_jO>83tZ0d^ z&r7b>solv^PaA?oZ6gMc9#A8jpCzyv)u8=ZFq+FN+MS=3+ucgvb%{y9=b-`y2l)v; zEPi~5;YJD3&2ti2irGU+dX|{gr<63jP`94%2t(Ai?0oM<-3?0($Y4VNIh~uQV}O%( zUt2y$U0ZT(PK%S4alYU96V-xZ6<;8epP(z*17o=3lPHEP>p=65(fG(+emN`e=%k%E z^x@B2(+uPJql2sEl&-pn8={DXzt@K@n&nHw+bij%nVnfUHO$Uk-}%OHyvLu7I*DnT zV_{~d6#cU@K!Dzcmu@6&%h%O!Ka!Qu`1!`na-eT6t#5(qB<5*p$TTI}DSe;BQPaFd z=0Q#SMAooixLyUIQNloc{wAc@OX_<@dk3M!Qsp)eg%nP@wUI9DQs@+-XZjfZtyhafM z1Fg)az2&hQECPY2R_8XMS3l#%*Z<1=vh#%0=)7`#`CbYGhslmuZdAUo_7=E`T3?;2LFPox#sp8oC7|n~)VV95_kKP+OXoFt$r#OX^CEq#7 zBAzbj-!Q#H*&cJhq}))WNu96vb?_Q1co?YHpqA^f@r{XkS$e(xh=zeo>eHcR5-yD|NkaXHl!lZ>dc%#19U|g6n=Xsl$Tt#AGo%Pzv1eP_h9o;!OWEVz+`aP2Z-FN*-{q8#b?aBT~+gj6zrV)QZXxJWroDta}c+1b!z>B*E!x zK^M3LEu_NT&3;*@R2F|X#3_Hs)#+I62h~Az0-1r~=5C*5dX|7zS=_#Uq|^oYVKjv? zc!?1hrX%M!7R%v8Yf<5{%PWwIX>BH~LFZSPvA3TpSK4(1_2sbwTlhYWkdxKDvTN^X z5lyL2t2q1`n&}kySS7dZ`a4@KXsomxq07o^eVJ5zT@|?hvTu;TqpXh76ckvJoww|B z%^gJZ{l*J~$Cn%^b`%hs>kvz=GmzT)2-N^$ZdamGPn|QK0Y8AeaTNx#qn0I2cVBP#IY39q8a-Y^r#Q;jh^(dLz&DKdW}+FQ@GBEZJ&OBF^NDuy9e}&2p!KAA)cE(RM$Zex`}oiZ4D7 z&CIf`+sA^|ucUL(feq-^_JZA;H+^%jh8BtoMLqq^#s&-QJb^$W0wwypd~-f2Q|OIt zA(M<%)4EHo06A>+FHXAg-ofjZYol5|*AiS^sUaa`TW{u9umH>#E|A~z{e zUS@Os)SM`MWsJ>2?oY}vrE@$B3#dLpy_Vte=}0w{2hvm!m9^~g)!OnYW)gOOtJ=_j z=)wpvTiiNgq;F3ZtUKg}o><6&NDO|#wb-qojf;c?`u92pA_?kI z62f-6tnzJa@JWDyD!q{`=GJ2v6z-)jvY7Im5f%9#-`uLes+7`nHupny`tFBk2`NR6 z{M^C{83x6}ZwxYaMnvA&FGiZc{LdRwlN9_)8ML~=jkik_3uoin7MnWzJEW(Dk{^xt zB5#LB`pi-%*J=)XlnyPCJ^Psi6)ILXggjxvs*j)Y1;nn|L1u>I4&d|U>#+wQxJ6VI z5X+FW7%JIJ(v+(p&ux!?WykgI!)|IiY>X;}=A8Z7&%Uvx=`l7~Y4zP;+QjwqEOnCM zdO`mY@bX*=89+ZP_wbAw=Lg5f)NzV4xWS~es8(kFnlxrZ6gu`u?ffk(zwn=08BTJx za#A|u;Twi>|6~lCC_L5oam+(-XYQi~zFnde52hD|7*M1gXVc{6GV()p1!kZ)(@*I$aqgf9cQ4z~YR>*4!@;=uqlPa=} z5wZFgdw3?xuZ2pG)X8(4?UZ!5{AY`!eNo8v02ACw}w`_uS!0NB^!L^TUnXXluLtQ z6xzrOjHuaE&F+xNsrz#}kHz{OZxghH>$rH6$R1KIl}o z!VKuQu)EG4=xGY16L+g3xiQd^@%{vHr8(83za$VE$fP99`HK)D;O7eovvv z+rixbG9=p`TbmM_Qxy*C|l6ErB`AD~*oH&2H zaT-ynVuB!mJN}gKiH`%R^YP#u1)_yZ%3fPXa^15){AW{0@@<$)Ee6jd!An}R%dWzv z34#A_WVs~O_Q2j?ZJ5>#UxTg4Q+sZESN(8JW2W7>jP|W|Z1fS~l)mzSNe@_51&im@ zt=(dsU#8~0U6I>z-HdUKx8ua<==Bw6%!8#%D~>jU-0?Ht|E%g62m8u+#6Iqxahz%Q z3C69w6HhRV)H*(`?aholX>jC0k{8HR#&V_2k&LIAd)BgX5rtB4hT3;oC|BR2NcOj5 zE)_3JCidCcO;Qo=N`taSfnWm|RY^*Imr{qeS5cc1b6MQayx>}EZ><@F9DW_+Dlri5 zL}3<2wQjTBVEAJ4+QW9$64Bzr5)lzI4aq$8oP#b=ua zGZ>F3QuKtwLswoO|@O9UNQ54;8uO|QY07b$9I%%;NKdJ(ikYIbNpB0WH zrJ~+xz26+4cId7n8^QIC?MjJKcT`UT(RBPnp4Jc@Re0ZkT( zvXqQv+dQ}uESjGybJ{oj(4zd!PE@tu5r?1&H0`6OE*^M|;x@|;)Na5S7SLOSHm`@1 z)v9@+#Bh5?wqi`wi0zBx)n#L;p(1B=972z5yQaTN+R`Vc;w^(OGjtoH4_`{F?BWHP z{dHTkGE-{h&EB|05Pf{3p(v(bDi6#v-Lcq>IK# zkIWK4v>t=(8lKS}E*C7{>r~}!KOM1(^&KrFs)>*?GS`bMVPpz57&XlN61{dHT|Dh7 z$mYN}KKp4e8mjzz3L6@fR;IV=5BGOkzezT;hfKAa<#vagA}^8i+n?amI*IPUYm6V< z_7^;}vOby_WHi@g2Sw4Rf8ivjjC_)gNZjLAmKlt^2zMi@-A-W^2c@&o#tDbujN@cV zG_QQtnrB~)B&a`c^Vqb#ZFwd)0V{1d>TQoD+NE0{;H=!bZIpsx%2>c|}FGd67ecy9_NbR`HXW z4>~nV`W^aO;@u}~pNt>4)WqR0$h+<;t8cbc1W&#YcbLiTpZES@PjFTJEbjo@^fW9- zMJ}-~nc=K~_x-6eJua`XY$8jPHD)UFHnd)qf_^DtUB=?MHFg;aAEN!h(JR-J@eIR^ z3tfY5R4B;nW?%?%y=Nr#vo0O@1qxnc!sTCbxL&-H(Y`!r}VOnHP4~ z@XPU8?3L1-_}ykRsWl0dKc%e?MP21OP*jeo2qZO|A!(fs^Du$Q&pSNNj-R;4FoHtg z>;(@SpUSqlNWa1 zDs}98pG*$Fy}Qvg(th*p+>?OsG%nr}lzAM&L?@%g?>h@}$hpvT7tH+^?XOFW6o<`g zUuk}=z*Iy=Q3p5!64Y5VmH=cFkwTltjnzyxra}eZTn3_AauU~84K~B6tT3lwuT_D& z1?FxF!;|utm0twS<$L>-?B~m!1sqjH7u(%4i6v#2#yc^4nLgpqyd+ZjM7)T}Ck)=p zZFdS>YxuWQE;TJ!P8@eH5?_@tmSHM#p@64eojJv6V%1BB9;ozBlot{{9AOW4mjg#f z(Zy|02&Qr5U{9OwzU{U)cfg>6`E~LfEUc8E(m3Wb%xPv_VDF8J-OYNE@YKi|-_8N= zL5>;+Gp^W(>imm*}R7l997#q^*08tUojPNQCwP+@@lYODgA&^_zu09D-kcr zJJ)16#e|y+Km)Lpk~GZHGcsN=tKqwuP+VavekW5ms@h^Uz1AI>cjaQg2^cO_C{4R) zc&!(?Hz+N1S*CD2A@dNj*a|{+8NUWMn?6DqW#yUQ3j_f~K_&3?uM=A;mcaAKW^ex; zX@shZEO$WqT2w?;cSd`Ub)oq%g+<`oTVRAQ(v{!b#)mJ%;{2t$bymFNA4949bL9=23Xu6`!LPJ6<@)rFrw`OQSYyv1o`L3AmyF~#8=@#pFiQJ@>ZZIt`BC! zT7Qpl-fd>69b~Pe4GpLO@*%MIbDGI)2G;D#M6EIo1~_{$+P>;KRAB=0$?u2g2pVj$%S5h zD1s#}Zfi&^wRn1tU>PO4u>>5iO|MTSB2CsV!(LR{Xr)IhLO+e9he}j5ErvP2XmZ$7 zi+kwejTwEO7Ilz2ydv5*lF~FPjL*yPpXt127lG)iZ>FA*KzgUT9i%q+(nDdW6u2RE zMiT#ox-)JTInINXq%0qwAmkCUrpHD#X6*mVWAK|Z`TZEvzQ4QCqU{Cx6eo~&GeBh4 zvi83-8Z8Pt0+g8NHD)GZ*Eq5$xM*=6x)h# zBwZuy`=9P7lZN+y4i^Q_^FSeQ2TY@f_)jS%O!?wV`^@n1RlB=T)C)P%L$6L7m{XWCdP8fIpTzcT9F zo7^k~R9u?dn5he>YDKbYfIN)!IwXv}ZYV4Y8#U1X;!Pt6XNgVjlLGiZWfQfGY_J#m&nTRpOaM(+S};Y9%6+(4<~Wok0D7R`S<6Tmgo&21 z!foF6e27x%RRB4f{v%@(bBTM1PQY=3R^j+@d^^5y@xR+ASc-XQjbO25SJWGmu>Ilw zvU@OHf)%S1sC{GnV?>BJLQ!o_@S>jcSo;!-1q2eDB$fc+;1O~;0(6m(U&CG&n_iz; zp}&_Fr;gM`Ru+%>(*6FtpZ3w|K|hR5lRH2hsj|HS1G!}jt7*G#EyP>D`Dq(lC_Bhwy~c%we$+-V*n9~H;l1YZ z`|rCPK(F%xOoJ(+g}Z=;FZi!pCN56D5MqKuS9o=ZhhsO!Yj0G1>u0uOZ z^eu9}0ze%zriru0->pB~J6d!BfT$oUp@!^u#Kh|~B@N0WkvV`&6g4$$KdKv~7d&5B z=ss_l_(XTjF43|_FBzyS+~10>m71!G2B8yqi@jarRLlzVT?<^ScZ#iKrV}z?Rj@S@tI~M=u|X8L^$no>*pjeOD-5& zkJ}D#7jaD9{pmAdtaY8|5ww6P6HhX|Ha&tn-P1`lRJR@LqLD^8DTGrBViNHL-sfcM zNH1z4Ou?G$HMkojyQ)39`Cwps{7m2Y4dfZ2IA;0F_!tFK;%%(ZA0 zFMC-ULau)gps0$-bHxD-QJ`JaZNX{|fyQW-o7-S+5pt%~uzG(9EX=}d*Sv4B=q>uM z)xZ@n?+4?EyNQt26)h`Do4%V04{us|>m0X2#%`#+IWnJ--1vM^=rv48h~LTG$!i>S z`gboyrK~)3QRGG?|MKrl{p)#rt;UQ|dasu!@yKyPD?xk31&5ruVi;Rq)iYy`0sUkz zhR`X@tR%B;otrA~)Q@jxGnvg!HQP2ml>2bSMu6|Ps$P=k!<|XVe;?>@9lX75Gsdf# zWfqAVI1E~zU?8h%meniRy!*xiTdcPSz!@w>>Fe#xE#mAzSF+=BW@!@;mcpVEa4!h7 z`Bm-vYgP?dR5sPoZcmXyfuQOjIzOO9^7}84PDTKCbKKu`yn!bdJQW0&gV+Vo~aHWeGhu|1i3jQC_l)Y{f9Bdm+?6*#D?@5Y1MroqG{);NlN;qAVLx4{XqC zX<+rOAMf)UT!VLSQe5Aw9}|9@`pqbQvTvPXTwi@?*{QpW`%2N@-Pj$I{-js;%@^2w z;&%pj@Dm{b5U-~#E3l*l+ZVU;>!Qchgj=b7d4VDS5>MJb=r4taScDBSw|;v{g`?OC z+ev;;g(vOcc7p`Mk9PpDWf>j{EUI?^@Y+TDtHqWw*~0IK;d?rOOCaH505{E1E}0K^ zLF2oFJte6$^Zqy_d`oU&Zcn4EK~^1I5{zEBW&RgQ2^Hms_+yDa!x#%1PWi8^>mDB; zC5=rZ@HR+kh{W3$Fkkt|;VKNF&n;ffq<=)K+5}i@0Rr0s6fSo#F33OG zu_~9m%9JX}h$fgx8-t7haK$l?Le&@q8@O;Y0h}`b2=QAl>`~KRpQV^qBD{%X2y^=7 zF&gmodZUfvQrffIJ9MWQZTMY?9T2N`?*OItZcBT(hHj9Kazh5r0O##9_gdZgrp|>; z^14C}@4c7K9Z<`zyO?>Tfbblgvje{bi>YfJNu6{>tJ0o>d;T<&NumC$-99h1#ppeU z=}-lS%+oWA71g}a?G85cGeW#P#f-$O51uz`E9_q##_6{?NQu|`G>p;QesnYa6X!5J zru3DcM`6+FSS3!#_h{+I?a{tgMiS$Nt_+jx5Y{?G4AuJ|d}`Y9PqEBS-~-F+9NJy` zpY-;to!|c|@bRTu_)aMafI{Gw4cV?%8sLo<20~b65CwgxV^(D4amwKPX%3AT+Euy5 z+a{=51%m=yxn{70VV?N*Rl0x`D5xrAZi`Bkf9bA?N|G%bqPyhAMi#IDXNOK@J=s@Q z+eJPT!*%JjNeA2REvpVfHXTAiB5B|N2pv85Mpbgtq_4ztr|zAY(^tl*PnG^Rw9*3C zPlHht$J4Nxh(Ym+_KwiUpUmZa^9wX$=arD767WAX&LsNtXp4evic#8$ztxBay1!!e zLBG#xBX8K5mr9ATfak}=VEB)hon6f$XooEGEv|he4a4irO%w7tn}4Nk+bZ|B=Q@I3 zTV3a@$9HTjkVxBs*KU&(7N3m!eybD7)Xsaf&|H)8qdSb{gQa(Xn4u`+Fa1V0d-1QAnE4mlo{N&N6S?TmEY;dJksn`; z3Y_`}>9@PKgKaydAVi`oUQt0Oa6#o8<0AT96|_KJl3ehs+Apa7fxq*$o5f+cm_}8W zwQB%>j53*j@W)$)xNU&==R<{qv&#HfzS1o&If}Fq0J;b`&r)sts4Mo7V+}&1WW;R)2`P7>U0e~b7pQR^4l2Gaa<88dAY**cB-rrm zWfXClWy{3M?0xEyoJM%ekWsbG3|A76LcT0&DnI9XJek{dj{OQ*ijw6rQ7wzKiF6#r zw!?=#iHM>-mEMTC1%U@@#)PLxlSBrrf!KSkJ76GmJbi`Vl40^mB5Rfo+^wwI+M}}? zv5J4mZ%nod13b-};uUY1g@g95WIWxU7@}PO58viXX&|B1)E$uWlW+9lvp?1^Anb%^ zbeJO|$KIUBq5d!7U-p32su~FYk#r(*g5=8n)7;?dj|gl58c@ZWl4HQzX^u^L`{EO^ z#|6RsKT=ID#xLz%tVvyzjGSRtsz$E`pJz0Crv01uPsdf+$5`9IPtZF{LAsJXg%AWP z@lPoJB=BdOH;hb0qNkyJ#@AO??Jy0?lK*1}VRk6R*Q|IvX-5g&W_Z&zW@0Fed_R;w zegq*cb_6webAK|d%J~B{l0T?>8FB=pNKsPs^qlbEpSuaW48J3r7Yv3v;x4dX)BNrX-<0@vRxxY2cX;r;&(Tj&LbxEu5rozInNM{@5Ca1)@^dSZ z7uY*7e!0FUTi^O+OM>(E;_aRSvcB&ww3sdu(Ry5+gXpQlE03k&@0NNR5o1{YfFSrT$h}d!bf$zkOVu z*y~bU`W<-+e7t@MXK>>x?;icD5`>VO4m)i`q3WM@U3K#g?UzT>8#Kp|pA62uY`ha$ z@Hz9ZJ@MNt7AHWbXKT8d&%r0>cBGAf_Vl8p>q(yraz@pZIWRhzxqM{ z+CMm!hB}ZE8gqCr?{&$(RpV-2RS{=K$kipFQ&I$Fc_U&VxSF*^XRA!ZL{L0hSC;m+ zW!n|k-G;`iy5cTpU=*e$%yCN=BE}*`*Pli^E^p#B8?%bZEZ7XwO;*yWQdI50wQ@f* zt6ZMsTnL6?`e&E#y_&e%O{QVUZaCRz@}AfT82xi%wqc`a1c`^A4t- z&f(C6K4juv!O_c%v+b+1tUD(kGu2v@cH>n~B z7eIsGt zvhQWT-!?`5Na1?z=1927ZH*nJAsuFXTI*XBeB8QAyPQ(=ciB}>rEr*6bn%u_Q829z zCx@I%U%EWavsh7PIh|A8==SvTZMh3G-Ja3?eyr-6GyJ@ zwdeqLJK_UI#5z6#Vs-mQAD7_CNCe;JTWgjNcZ5Q}ly@b$0@+l&2DcY$Z`g272vwQ+ zt3nu{%|=AB9klf9Ks*yg5MREk9%WN&sA~UGu~%S6VBGyhcHh^s6k=!P=7+aR#Y7>7IYmck-^;&hE(=QdA+Yrtqw=cFH~=yuBXfQ zs}HYbpWCI7#I?9?nT}WPD?G7XMCdw)ZQx5fH_ zU%L~p98(>UdY_D713*}Yk?KdQ{!sJwH^NJl@nlP{&5~5pBA1E0>ADU@pNK!~h!mDe z5sZ1!G~uAaIQ`2U1<96gkHrNMYGlfA1QZ=Trp8XpMy@vZIu&5*yqoMRq+!gRHc})uMiGCwIJtO5K7i5lcx}b#UBj2Xu<1ptHT2;l(P${f9!CL#E zHJ-AbYOpR_oA3Z(YkGni{P+{<~D-s>)=C z-_P84iNo@7&nm91Y=^Z;Voq}@F@|&+mwYx#j^qMAM%QxSi9g|Z*%w8r!GKIJ8*qC{7m^OxE&fVN` z!lL=X-Y266o{fs}<5>fqW{$PSki$6Ry{8i8?5Ynq&ro`6SI|54UiF4R36FCmR!pJl z#y=rmY{h{O^5x&{m~g*)D{a5*DF|pKyKmmckF?J8{>c&%{47zVU3NNtFRFtu^@!Y+ z#n*F7G#cHN$}T3LVtGgG0}MPlg19|j&%Ev^z2-52-tem{uNV?l4;g>{5>B^9z4&95 z{-D(%Jc@U)=O@)#> zrE5*}@qoO_*!SrrgN0{glk6jTy6|0$&z<*Nxi^`?nT{!E zP$Oni@#x=W(fS~W5JFK+OfiXH`+?v;oPW&Ui5s@@MM)a7;X#C!Tdva>%TP_Xu_!qz zIOUQUjtxhALXROv05O+=h(~Y9Xu5OsK5JsvE7 zCM>}G`=(coxtrPBo4l2KWt=2eT3(_Rohh4&Rn{;}JPgXZbq5tilBAa$YA%GLQ{zWX z7gs%uJsn=S$-=wPS}_&%{go$dZPmikvd`S3L z#IKFYkZwUvIhlsl-dfA1^uoeQD+vC=#vR6aDzEKlD~uJ~;S9!oXHsrSV6 zQZEJ4Y&|dUZDmwaA6dKLv^$!ud;8h+xw+_DRd45+(D>P-z^Ht#u$})R>i-l52x8GE zVz30RwXbAu{A>z;`fZ~(>Wxac=!w7y%f68%Vb1|FI-~?Y`65c|@S`obElG3bsUjCg zvk+Dt3QPt0vu($0cs4cx$#6Wm^;@Dcj8Lc~SN> zR`xx$;B)=d+d?<4=NHMb2Ls~gm?EuTJ_vPgu{)~w1}+K(C66(zy}&eQC)*)06>pBi%q;$g zsnnIU!Tf>BIG$1Qx7}w}y=LxDi+wY&(tKaI6_Z5uSs`!cWb=9TgpveM+~`gIS~zSr zz^@S`)bd>VQS>*MlV+63NXb)PQrQD-logfMixGdS&`XLw`F3OD%Zk^6$Zm=)>cF#9 zd_kT@TqjB-v~#&jQGC0qhWyf7^X4216U>d+c=>@gvpCnIgqCj_5tl?Kd~0fi)Q#05 z60Gjl^eUTA>Q>TgQ3ZN~vHIc$3JF>y)W{e2bU*V4Zr+X3zJYI^uf@Q1rFl{U4XpN~ zW&E=~4KA(C-x|LsT(O~coy!$bMJ}eAv4zw+!9RGaGZ2lGxSCDP}em4ZIpCOt` z)F|uAT68eZbi!{ECDuzSV@QZ-{Cbok$q6~f+t4(d0p$(sF2whfJL`{#qs48_B(K8Z zd&+b|u)|UQ#Wl3#vJfBce`6l|?5!g$9#1(eJUgO|#^R!(URk~($1M%YQ-SOJU=30c< zrg+9nWY1riMn56`-;=Y6c0@0h&n_)9elKI%+P7W3<9!Dwk$Ar;g9eNjQQslGS2I+ zdA6%>7M&pc2Ren@t}{y&Z#0Yk+QHjj+FhY`im^RJ-&DzMG!73X{jF%Qr&=`Gbmv_; zP>52Hcw9|P{FyqOP4CPYWl_=(S0;T-iss}vPH{544%c=QTCJ9EjLWuJYx{x&n$?)s8}GARpaLv8I4 zzm+QEJYB_&0`0>;V0eyE6K7`8d&=P-c?Z_>6cr?my;0t7x0UJPV7U-FTShOtpVum% zC^&3X+_P8c)*b)l0?YC$9En#z;vt(L?f|NnjC6^78I{Pm!HL4`1Ifozb1YX|nQI@D z^I60uUjKtV{bnS?Gj_P<$7>~n%x~q~-e>4(ud$;3KMP=|y8YE?zNn0Y*Baj$iOFfN z5A465u;Nq6LV9^k%^BK8X%}}F`k)}q< zDk3F7j*X@91%dtO#ZqE8W11tH*9(Q2LFNIDx+J9Y4(qq4{YQNMdeb?B*eG+a;^x-y z^TvBlDq}OkGPc@^(s>%zj=wAlqWUV#wqF@J&m7?;=x{N%lWS#)E70e5E{k&Zj$(Lf zoO;cSJy#W5_cxnY^H==q`@Z_IodFd=pbVDFZVyFkl3zg;V)K}_n~D)HlcS8U@FSsi zRGJFh>c{e{sINkmAo4`A!NLI^hxWs7z8_<&HtoNb2$hxPNsE)$6HBXPB9w2vH*&fK zo|ywjtnBRkyub(TViycA6S~RpV_>n2xdha-+_X!2l0k+EqV%UbGoix9o6eo1w70^o zs?!?JvlJvmhC9-EF{+;N2NZKSHm9E#V@)RIRB^?L)MT}KN-{3L;MI%F{Z?#cp16vZ z8l1~@$UNGIN91Y&Bv!n-x|z&vT{p#(U8#QBPj;xW-_yNf#S0UZ6rH2q&6pm@XN$3L zhG(zX$0U2a0OG$JkuEHkTav#nv+~(n{5D4v*!0cI7U(7eN_J}|f#eM8HnXPIDR4GK zKYSYtd+!*&5u;Ao{;Qqd4m@_RNQ}*{JRG-|OomHD0p0VhU?? z%z1L+e?WmZ?*gd*j@7<%p=6B7O(~92wAFqdhgmDFQ{UIYHMJp#g8NI@_Wh)n(oV!r zt5zoW2athdtgOVRu(k=PR!)a#=1rLSnT*S+(|AoWVkLGX)_3e*d+<` z|1>ueqXjwGr_W7FMOW>((EDR^lgpdSMMLw;9n=U#N0;coI^CQ*2f{gx6>;`IL>~+e zic4_%F|WJ-pACQ#}GRXH42RRjF=UV z)j5}1&;4}y;$!=Dd*V&(y%8EIaw!p5%gg67gY#8m{E&WOK`!ZE4&2i#|4SbU`4)?pzsG-NBX7QG+Z!o<+ku7J1k{MZv7mmm z1IZbqyqXQr;t=&|KI?c1Jx07NJ`8JTwTSz(F?;uDvSDE^4AOcX{|3x(UOCQ*4!`Pr z!AI1jNWa$|Aj6n~7M4ARF*qsZzM&B<2(|hSM$iP=rRJRgTK5*b<~x+$rABaMP6+Dx z@b%9~fiktmoIB(G#iXcVzQm^ZVsoGaUlp0b{8E>%wgXC`fY!6TYnmUhy=Ct3NE95Q zNiyciHmGS8*`zSJ_ZkrhS+*zBNz8S42F?XuS``xn{IuvGN1mY&~jT9z$9-r@w*t&Ypmg zz;qBYRV|ec#of(Pxf9QAjuJ!xai7=7wl)~~Vnvk%aDyQ1qXKZ=+uIF)a9>R|>&`N+R-2Jt!Ya6S$R7M)LUr1PSVH%&F@?;;frN-7l4WIjg_sj8LN9(JsBnbNGMpplhdQb z_~f`r{xObS3xRIndErAI4z>oxadMhK%^OaFOjkim(mA2V|Nx214xomKt0=Tuc16rlhU^3F{>k5FzuxIq*9I+PCpi--HB@jWJjK5d& zsX%!$vXW%G=wIJ@3#Rk$Ma(xk&m8`A7~f#6dN$?3Njn%Ge^UuE95CSF(Hwksbi-Dp zWg#+V!X>Q}f`xJ-SjzQOfa{RujEpFV<0KQ?5^=fdDRG?NkaZ)px6#ANF+Pa%^R6He z%zdA$I{ovG@#Tx5*%u5VK26!5y$>z$jqb`Xp52I4XE>uW`0aN32uRGiaP?2Njs0ow zygYnny37#oA3-%KgpD&tNS7r9??2bJ84r#QAYUU5Bqh|qty4gbvcVvZL5W2$vq_?` zOFFV01@6^ZO?}|$sDPAoIR5*4w z-xR%uL>+A#`U}&5a*Tl20;e_`v3%i(k-@SzM}!uhC=oFWKWh%YeC;gW`s(g+smY~0 z%apm%1XoVEzyCzL+GG(H`jg&yIkYxQ=3QMk4_)St6?*YMbqY195Y=gpVn&t%OMBIB zx>}V@S*fCD(=@|dbgl{Xi!6H4{5+5x3Qz3gfXy?nZe=|MhSQpn)H2m?w#YgtYQsA9l1gC=V85MrI&0cxHp>m1R9%%1()Q@CSp9(s>S`!hl`cu=O0gKu4s^e ztL1Z>y>}mpX)wR913$FAE>KB7DZ#|HHezQO8x_TKjutcG%~Ac}Z&6eXRTOfW74om} zzWlN!qUwk>M6T^>9V{zilx>b@WDq;>rfwk~R$s5JH>#kLMZ zezsaRr`EI$y?mF|L-HHEdNV`4)4S?V*5R*h>6~8LV=d4}7Bvlxr#B64ygbIOqTM z?7RW#bLN)WBaV&rAAUWfz$EOBFLeEt&aB4$(jc+1LpxD|$Ip1Gj?_Dq&*^e!ZKU7c z_O~uyBXj&E#u{3Or`PM)!*u72y*HldI7WVEB6_n{!lS9DDc>?uiQ_MY)<`7R5focm zy}?BCDy8R#bqj6v@4L7pGpmn8g1HV%7{jG|zWx7>c`LC_1q);xj?*p z(qz!=Dt9Bvn=Y+bh2h#?dRM-60rx#VIjH+q|(b)yeutewlfHH+72yG9LNB z2=!yJ)!1=HK_3$&qQe2oZehYc0|YELKOd5fM|OaLvBv#ke6=xH&j%E~uHn)pXBg51 z;B)X*2DX68_*KL3`%5o9&SX}7D`?C#`X+jKHiwkpL;kL~(BG8#P$G#3MA%XrGLMHh zS5lU%5?&sWQ3s1YAmoZ`SW}SLz0#6O5XR66{UdZ}b7Zup?Dkyj20~XOhFYyWW+K+cJS4cCS1CEb0jC zkp=y#Hi_62cKbQj6<6t#IqdcO34eokUb@e9d(!Oi=6N3)l--K03t=;M^3XQ5Q z>z{*?inO*CL>o4hNlVR<7}?^g%khd?BFnhk*(UL+zFl%Uh1B7L-@Pc2y8Q>8SE=#k zWIVjP@fT1@@&`DNo%*ytPCJv5nEh$JUdxs|C$^Ae*Y0l`TF8vErO|TajieZabKA{B^DPC94Zshd)Qp^o(*kUtnp9 z(zx6nOW|{9jk!N4^ZNlh^6Z$cU7lI5=+c9MI`lgMetB7c5~XTYQpMGAtL>Mg#6&=Llq&e@7Ko=9VIOazr@gJcOa;TbYYfw_JBKR z@LAQS*4VK&j^L{((-^VR^g?!WXFK!LZlhr2QkrC!5BjQR3gtBooa4z2pNw+OB^`_7 zn;&xj%&hV`x%t!k3oG^uB=R@Y6Yk|7$L^%xZl6g$i6nS%VN21&pEPby?lKjLOnb9I zc(ulLGK}e1X>vdO&N{&6<`C<;(Up$Ba41scB!O$Wu=~$9{gS&lZM&-^kQKwFyaMtw z9f}h8u7~A}%voHXS`#(s26xkB28Hit?9Q>!b1O+B_?W$E-&S@H?N$`sm|?{3Sz6Z2 zV{v7HzxmJVmMmVJq*yWO=oTKUfaEuu9Jch(a#B5)40(gNT80$&rYyRRkQ3T#wL7Zt zWLQH?E_}Wd($VqW{rKmHeVjiOS{L>t7<8|(2eT9W*}L%%art276q^MH&y&t)T&1lB z1|8kTT&~}Acvm}i^{r0@#Z1#sQRyc|k+8N4yVg^y#|!Pcig;q(K(1L{Y80 zZ_JAf)$YkV?P~DZYB56Y^$8ahkFH5kAg+ z135NERfNq)gAs||eI?P3<5oj4P7V>I#n5hU$oQY(H8X!Ebr9?uH$@xge3v^vcruBP zaU8YtoYN4!z);4BD+7H`YagSw1aP<@ zbFO{{y?%0%Vj;SEYy)uvt%rpDB&jw(it$aF@T3LcYUFXxed2Z{djuhUSAJK<3Uh;j zMz17X3g0tT`yT25B5%~o4y(l6@8aSS#eS@Dt&e?9{d`svd5wKhA zHC?1@!!@fuHCsn>s6mY^O_AQC@K*wGmofupyx&W-g>PF#pX&Yg1Jx%&*VJ~Mpu73* z85R;jF^${vB9r_A8J(QmxP>)J291(7cuK&OBOr3P#o+%vNJtSBDq+t^?K0DnyvYj*)Ui2o5Sg(FR$<3kr`=i0IY466-BzO|DT*dIZxEWn_ z;QHh!G1t$9+-Y@Xl&(j}dJm+3i9UF4_hb>G{7QJV0n7fylBD!!SY`V(v(zF+M9Pz$ zhuQ=nA0NdumjCIro%jKB*_w(?i z{+%J>)OUH01#^!48cIx}Vc`8`$jm%@FxX;2?$Yx1=LZEf$K)4lO}yODQ=|2~ftw+W zfX7%nk(7^98nf*qzt=w=`m73cUY;9f65;#4Jj93yPY`^&N3P%W_B(I7jzJiXA>yu>=fJPuMc0IT zx9-~SZrJ(~mM`^Q&3IWXp+rZ=JVG(^P2u<=C-H7Z{#94o5>2ebLo!QzO2lx# z)M#c-E0V>!KS23b?t$(MV{9+k`Y>(!2>ASQ+f<1~-8)ZUmskV6 z2fR*A+9}Q%jM;=>T9^cHsNi%wv0E3uaEj0^ zn&Sn=NMSPONGYsXnTrpyWi!b#bu|Lgo!!2Z)1C%w_`ZdpNG1P+Zb*vG#U4;h6><}d zL;RZC7@SeZvtuAMZgpaIb5qi0D^8FfqVXBxWT^FQ zmHx%ih5w3PxtQk-TjJ9UDgs3j*~*h(v8ba(hQ;LJ*hiQ-i-0vh;AMG$qX~DF& zfGt=H><@{jIXwM$Dw?>~9~~NKhjm4(8K)j%rnnD_E(V4$#Dozsrw+GyO+2fDX=6nK zmoBki%FhmUmDaj*lb4Xmy3-ixh}IR3`9wga#-EtK_7&%ImiT~0jj*Ft#=GG^1I*dV zrD8mwInYM@d~o^=bjRc@9H z>sr*7Sk$BPdzESv2K84MZl6FO9SSBlgu~1msQX zz7;Dc2GH!PAspcf)U5%>-8$;!Pf!Uc zpBnM+A}rQV>vqM-3hbh%ZwgvvKN(_n8$M_{m)QNzFr!)t40&cUK&-z28*< z%;ZOT1fYt*j>frvAjFT$^_vG1H4PZpTF>LmQisfUb$KGjd$G6#)bRVyfe{UwKPOjBOrzS&(`t4Io zGAP3*WHl4taZcyMieyyw?pW-xpC9yk1Ld-;r?Yml=cS357&Q01x}H={F%)4)^P1|? zKha6u2&NY!bH-s#KtfX=qYWgartMW>n3shhP-dQ!sy) z)8EAeeY%ZbWTT@TQBoG}`PyytO5b3Ps}4Man7kDq>ccQFt~(2PO+U8r#0}{3+#g|F zP)qC=TWk3-%EhV-@a)La2Oi~I! zhcuHhvu_L+;RoyoDyZ(pIk!MPop*%<%s&hN%ZcQ3&Bdp27GA~l5sA6&ycc>c{{-ur zQtKFjDjJ=8)0@HcNyr#{r76%?+y%OMEI0hW$54tlzOM*6by}VK%~W`}e_M*E`SCn&qU*(hEryT%1j_ryJ68Tj z`?7Rby!UNWTe?&4MPH++cRlkj)2)AM+6!hNGd-;!Sn*C&KYrZ6HO>|O{IN|*H|W{m z1S~XW%fLBpTyx*Wx@Ftwdg}3Koi)-PR4&+@4|bQFY#n#6pXD0X=fL#qZ8I1M19*Xi zdn1tSIW~PuLW$z@a~(Ba)N7^1U8S+wZeD$0B|_!YAC;7yb^W9`p1Z*J?$&JM2N=TM zFVDN2kjmF*Cc51=&XM%2uH{a{G1>L#eE6}bA&^LSyjphskZl__2#(xSDweBPTn>|l z=;%fypd0hBJ)n-dof5VtM7C?5=`Pje`t4-4x~_7K!tXLYJOqwgfcpVzDEZm}?}h9F z^SYDn!BYD%f6~%?^^!Cvv_7(~w(4_|;8-1vw@dSjUC`y4434Q8;Rr12YnYF)iT1D% z-1jGeKfpg1sg(c?H;F~}m)i3y^!TVeVv}?e_*17%9MypY=AcH{(O?pb^~OQv+giTLXP<_aJ z|5P>o3Vyx2Ddu@tR{!*vvC0MEIs>`Xb0uu=uJd+mH}3NX>NO5ze&{g0Sd0^xS?M+i ztfR5kE-O>-#oRbV}P{Co>&a+ql3HlA>)_C_lQ)NVJ(0;i%!HB^C z32Goe$CK6qya1f{DQLG~9=EW*o-39Rh6ou8u)W^8GS1d9 zM4c*K*1(hfC^S3u#kR(|+Vr&k=D6{5pILpma$ZQ)mSK_cS~QJ0kS?TMVQT*IHtP<@ z5EQY%kOM$#-*H-}M@bPwhlEN--I~~{alSfxpCdxyC zea=3}z^0w`z{NhqLn#wsM$GrlB_!7#L*hwR9cewyRL%i?!a_>Al>;AC%}k)|{gkbI zPA;6;Dj;hlK^Ed?ZCHcEn29K5}PTjw98K>`E+bGkF6hm=i;2d`XGG^~07eO>l7F;$(%K*>-YI2yAj^3NZ zIY}`)OA=9}Wc!UH?CNt?AgD|$pJsA9a|ek;vQ6n8%t;w#sme2pdCu(AV6qVb4?~ZX zPwVo8#+mE8+*^FgvJB)gMk#ZwCCSO4*i3%C-+@pg4{I8B8)$&t&Xahd4&VuV|0OEF zY4Oct$LJ54IHXYQ50YZ!oR>}Ur9m%`b4v(8pJ*%wTZ(G+&JBqF`8{r(#80Ft3j<=B%QL6HKX|YJ)zedRpbc{#bp6c~q zSoui(Etzw;rX5d@bu>j#DMSe&8_Jg&``jN&*FV!u%FOab;of1rdu)Xk;iriL=G zCJimW4oV8ZOgUQXx+b|0Q{L?o6|2S}A}^0>$`~F9kM&FfNajQ{eSTTykrqc96=i>TTn+~P97k&jH?Mjg<-8?w| zYM<4g6@bg-h#GEmhdYi-5(V#Uc&JNuj6q`@zJu8WafpfQE=P0gyA#G0e7$6#{N%69 z9zU)^;{i4~QLA?e3x+rf0#(p%ajOE=j4%02WIR@Ck7ra$^1+2;LplJ7!URM&W@3BN zCCxLMIQ{7Uzz;mV8V37Rq(uB}GZyq6nTUbM#Q}}h6_a}L)|V$9($rMhXzG-WSG6ZN z?~$CYmz-zyRe;$1ljk-msdQ|)&+-!y9Gw^n1h1waTy6`DZ$sB6IqyO&n_<8as86K* zywJ66q`^)OJK!vo|3Euy;92GcoFPP8Bisjw(-7Twm$E!mMHvLuPB^R#OVi9H8MgxY2gD(hM#^$Avt}Ed-4OERb``H zK^q+3{J7?@Z(?s?)Ku7HWNgtQw++J?f|`gndM^DgAZkz52-k51TMo(z0Y51&5EV9V4A$gzg3b1QFTk9Oo9ltOE@ThB`SQne2~bYukHM zZ|g*Hx*09<6o_<{15R`Ki(g!X*k4ncwf0Qk7)wwf+M)Mn%09?t2uycxSX%uEI}k1_ zrNmZ4QG%$0F&~7?TI9oJMY&K3E(l146U|1_QthZH9x>8Uo`UH+PfW3l!+-#IrkkH_ zxCctYlB740^*t&A~(j?F2w5CNs{|P5v7iRB+^HKLWzw59Zuts zz5S7Om%@LVa-_HY3I!nv2a;z`6VSG*QfD>o>$+EwA_iOLG%jwgtBMWk03FQah;oBv zBp`H&UP zqivz{?9$LHQ_` zN(taB4kvRdOT0Sm2v`!7y^(*Ot4gP@r^nP?kNIeCwY^;#NimHZzFcFR^To*`Pv^uD zN!pbOvhIiE^k?`3uVM`wOoYQ1VqV+y;S>(>aD6D~SYa*OVomoDKg@-i1R_n+vd4UQ z;rUrEgNLZHK|YO!;k)&LzZBy+n7| zuc8%nJxRbM5rD$yXcaR{9j>cf?wL#)(74X~wkDTjMw5x4Qxah> zKH`#MXGGBeiNbHX9OwlEOuUrD2~$TYRx2_J8;PM1H`)7|!*TBmkji*Zq}c3oymeU7 zo@CS$(IdB5m%~p5beGKEorC%nGfu;1l%QN!BG{K`XqqV~`jWt_fEq-CASlAmHXi4; zm(&FdlPdu)OmTY-PAZ2g^-p^l2{JJkJ!Y4NJfK(ngM-ZO@p#6Q>_Ka>L?q;r9!5x~ zgkLhEH<=AkfHD!Fj0({8HZ(A(Kv+IeF>)#@@vu%BrWIggi1JGgO!56sUmAj@=Kz|> zfl)G#y`0kudsb^{FOsnvkiOb3DWi=jDWkMdWG4yQecF32N#2Fs0AeJBp+?BE@ZX$I z2E*ml5tjcKwi^%vC;+TLnWNka>pID63BQl)AM{;}Ek{$7;qt|xk2Z^Qr#DcIi-Bui)7xtZnQ#@GEifGB@3{DXt&7Xn?x zLMccXuC{qY#t#8e2E?j|-S;SMhQOht1OL}oExfp#Gse;IEVHEt@^$+E5Oa|w)=Fze zak)L;EPh5DWwfWm=jZ202Fj6uR_AX>?kB4OSeglQ_wU)XN_A5z6{|5^gO|4jOi2tX zsT;Xb;UmgtJD}T{7GdqMJwU#1WH*ql34nYs936uZ;{VbQf4rMyIGta$H;RObMW;3f z0ABZRyFBhA3?URE=gkhFKzATxc~7N{uoxoA4LScG?~7nxfMp zR|7A-!xd#?W8hi6c0-?APIL?HI_(T|1aV6z&kjjE zLC7{j!!%u>wRV?@OI0NMhgfq?CDkomnJ_eu@gCM>lM<~s#sf(AcfjpNXNaGVd#9b0Lpl=X6`2*h{ zD!EoY#LBgw;Gn%u_3~?D1aKHZWRQpFDn3Yx|jtEl}n5-6$29n1>_+YT%ILMjY(%@K8 zLyqqte*sKV$IjVTh#lH>54rXy?}}UA-%|*7*6F8&88MtN2+HV-D?RZ~{Sxk99`W`g zBxyjKE~d;-N->nkTAJiFE;U@tJ#WlSX)QW6a!<&WV{&>yNwPx_(ood$=WNJqFbIgu zrlA>P;48I8yVkxfLHJXIZu#rBazOZ`<|CQ{2^2>dl5OmlP^{#;n{U2xv9T1O3ICIx zLl1#ZUG_Srj1f`T5^!C^yh)W|oTh`_bUu;WUjv_%&KmP-pRQ9O0RT{^;d=#q6|uO-V1S zS*rEgXxIMw4^X~9C`g5{(1PV5W1?#xcCCEDEZWo$e z?cj29@2WMdoPd3jG@QtXo8>xAd@c!~@%jz7CTxY~fBc9pVF##=oOUZh*C1mlkb3`A zrPafkg5!y7ET!ZYm=u(XA)~w#*E3!1a=b9{Ntucts2pvJ++9b9zlk=etushT)=Wf{CFdD zkX!bsxmp_&__t7f1yu}05tQ37P z|NG3^h~0}}__hYD04U|@>7}P)L^pa9vg%pr@qkGUS4WByt>DsB2(pXicy6$s=W(4` z*Vf}u@edVX%@8lv9A%1Sa?H=lAp%xPc?uN0WM|9uw-H=r?K_zy<|ide7R?066;OnU zFK;=M`Qh~zFf9%_nw0-}1{h917QhpRusl4<5w}4JJNgPFn5e0!zI3l~;M5@O53x8x z)6DF)2{16jaRpnMz_TNk021t{a{>u2O)5dW*9P-A`vTFx2MC@vJdsh|=<%aB9;H;L z2=Ok!rriShL^AMUJp#lFKL4zsKN4kjQZrIOi6j%GDgp*%uH=YGw*b^2#c4CgZaf~T zE>yc*6%MnqDhA2~x(H1b(RJX%o`1Xdrta^q>68Gwrc*)}#0uTy5HR~CvH7G)78e)S z1c;6~9uyV!lA|wdX^9&GW9c|4&x=-7h$!l*eNv*BA^&>G_|NVOLIQgy80l?mJ|(s+ z6oDt-{@ldk`uYYaxCsHF{J6L{Tv==jUE_!TKr!ntKwex@9*2fUOJ5aPbvwKB_d3`z zh^$5C9JGOe-B9VUDdi66OC}&P=#6j%nR54I$ik9^)Y{&7-bCI@tZUGT`PWf{fbXS~ zQ{9_?H^u8Pu&7;?sejx9{QK}z?euI^@QDW~y<(`V}2< zSR}K7unwowj$FJ=@Z*mlV&AJpBP7;GCGZDxD!`N~{fDueU7lAbi6C_9khA*==H(!| z`f!`GFT)Jv{yp+UAZfY|h$GDdD=jLX4fBUg)LCn$iukt40g`h=>qzDcL5ta035ix-yC~3%gd9{RB7(4#8DSs^pIWc0j|FP(Z!*>cwHA4VFrTy!LLH4ZD z;`V*m`Dt^^OZo8ld=RarE}n<}ees9~jzX+Hv8UuABD)7A zEE?_4HmRvt6^L{B1xv)_WRfhxPXwn!2N5Yh;tt)3EbfErlCweC>mN_j>H*;( z+7dH^!LLsE$k=mD&L!cy5|&EME^lg1o593-^qBuHk1~i#BR`!)v<${wvr|z~oiUd4 zAUagQO`ihrrh!kn%ZO{9YeTKQK&z6> zJ>>U|7|}job^hzg{(kS@KgFA2U@}r$*&cE`z$+_pXP+4Yfe&T1KVX-I`(Xa~}SS#&Uf6gvb6Y zlZ=4!`H%bj_qS_t7+&!fmdFc1RFtrue!F4)ka!;<({HTvyw*)enF7jjNo;XoNo4f~ zCgMEyvb*W<fi`UwAeVp-&9@}jj zG^g4MGai?sx z@7{!EV}nxyqbS+ldE!5nFYah~Ycqd+h~;R1@-SSM|3GVdgC-a)h-;!iX@CN-Ve-U?LE}n|Ax4XD z>|z4%-(ce3mkSbVDd1n$mjsoSc(Zt#FdYP|-_#tXaw@yX-@>EHU$KPK$jW@5A>#Y~ zwv4)y;;rS&xUH|n1l8sX68vG-X2D>BiHbV^hSqtUE07%SV{!78Njs7jVE%wf3%{le zcT_3bP|2y>?AmAUIpB#KoLy$@d6q?UpZG8f;da6PfZgJpUcbn?leGj8>EAE$BVq~N=H zm(g}_hN5b`NPV3UVuvOEyOriwDkNQ6HEtZ1T5Y8X^32qd7`;O|R(0F&h*sky`qWhs zF*H~U@;m6yUzuZfiM1$yH$A?8I^u<-V^7>5zw`@Y3dKB0ZlA4)uZ~(YjSUJ=A%8If z&*oI0X}zvauyQY_PGIyNcC0r_J#t*)i9VS-nA<0|O^zY|9xj<*Dh`blsB-zOs$w#> z&c|OS$55nG8kXS7>~bHyd!TcRd*1CdMtYxWf_(XPAmjhu>;N*M0E;mw!0q?}kIpmd z<6wDyph}BUKmtoTeZjCrc{1-8D7H_fWScV>2rY2kE0Q=u1L&M|XP$u> z$*NBt%3IC_SY$g6TP}1bwzIKRj{V`CvRo#t3g|>Elyzh6-4tPxR0OnT_5ZP7fA<9F zV4#6KbxNk;Zu&w7{rNO9HZ6hr&Wl%vu#HRFMF20p@TMK;XS0ku)HBELVYhZmz~6r4 z4s+6b-a`>+I%>(b(O`V?+v#JzQBGoLnQK6T_pTQ^Hh{$`tYotHcRMLDa= zdR$4q->Cm?^vN{m-xI+eQTJ!myqNvpu<0i%$SH3-m1PGY$glb{!W(sKWHipfY>A^) zCe)0EMiK?bgw`k~(`xY*Y-xkepAZ%FWcko70xH%qhh_;C&W-dS#sS)#!Pk8%$+vg5 z$@fWShbO|(R7UwpHOB%JDB$YW@S5b+q^@nI6sHT3f4ANrinSq6VPDO!HUAz~FG+wm zdP~YgW6(oFGa4EQ7G3$!)F&QNl<2oK5HqBi>2bS~3Nyls6dsJ!zU^alRl6jHJM`*QKMsWpa^F!{A{vC=kx1R8_WKhmx91@WM?)=1uCq{y{ zoMn>}nnv@tw$rJZzDGHahB=AhnBO)rN@B>is?g+ngd4?SYr>xMakvd-G@d*s<)aR* zI^d7W2qw82elWX49ZX!3En`AeY1DI9=Sth5tiDfrCx(j~7ZVc`#DeCJjjKE_iX)}; zG6>m(LHjKVvSg-kEpwS;i6(2okJ2=iA#djUCS>#IrqFx8P#~Z9n7^=kLO5cAf?#4A zVkf_ELzgm7ViZuNJ23BzdAyUI#`v#X7eC&4Es8Q|Mjj`AR*|oE0%5!kTk}HIv8ZB( z01bc{lL7X+5c*RALJj-(V>TG6XW6-P7%qeZokC%#r+ypP@YPUt7t`n{ph>Sw$MvU8 z4j~Pjnyh|mc*Y_2Q_2Cxb0hHpYJ=b6=XH-TInmTO$B2d~2%P7806}pLo_KZ_;Xx$wPB_bk%)s#-%;gLg>riI0)B@lOFe&_bR_3Gnq##;GM#6x%t zcqh*M(VK`FcOVJmH;WDrj|GrL+6|}oEtlDF%-oz7TtOj8T0Vx$c8PCbaM1DGwY~~S z13%%hN~pD&R}pYMVI~oDNdV#Bm+|Gvxy+OM_l{TFUm>uqniWtnm34D#KtRWiPEI32 zg^F3vuROpn&RiG{m0rWb5uJS6 zR>Q}S@0&{Pz*wH-_sc-9?}uIo_8XuY{ZaAt>(}y=r;pKMkp6za?%`(Zn%(Q#{_0F+ zh+Dj6BHP>hjatTcF9fyYQH|cH#f&UIP3SY)CC*s1npCsVplwX=1vRv$jYy&?70p}@ z=k2G-=0(}6@Ip#TEfx>yHVCi0NZn4N#rtL|)Js`il2EcgO)s7)wvx*L$lj>wc&Skp zF`5ifWU*Opns(R+kVpaOIF0fa@eUb12Fk8U;F0t}UTp$!@ria{-)m6*(JL3d1If%P zvk)p%6@O4atw%G)}XfMx&=xPuISfXNJu#K za0yX0ZZWLGvctKPlLD>f@RwkSA)P{c3>afN2%=omlcmOL0IBg;Xlw!OQ~&eF1R3bhHMH-`f={`zY+=F?YnsV%mgQ+;p{Fw$L z=el7AhFEMCJ3neBnuE{bKLxn?tSRHon93}PX4FJh7!O8EQUu?`RjWyBy_HmFJ2z|A zfS{qF0m1Exl-GHs+@8F+K6N`H%x=LSecV}{lF-Z(A32B1qYQ7o0S%AkUU%IejMU={n7CDtnvpyCS)<3U2VgjgA_ki zz`6K|2cQ$|2wwp>2V2!a4woGH?}tAVIn2TJe&t-}Q4`Q*o5J%#$3F9a!E#;nRIy$oPU!-6z1k#N5IY)C>xzW4C{ccP0v&&{X2<<60i_>HgIOUBFyWXqK;1tY#gBDn@bNc ziRl4@2M?OXgyVX$<3PGNd5OS&<#{?|mO`x4!(hFuHE1P^KM#l*th_>GO#9Ju|K^gD#&G3^X=C-@TGt67sOn^c;LnTJtE8H3=1Q^!QVH5 zRHs{rojHB!FuVhx>%<%mk2x6`2OB5_u&}I24Ms;Y8muQjzVCQ5Ie%vU3c=$6g|M`$ zJ#T;+1Q2a3tfir8_AfkLdI78us}@@jKz&+GnceMog9s|ijhma3hll03yd@-phB!eH z)b?`S(Sv4WSxA%fL23BtqnU9goRra7jnxqQ?jhSSZ!dt=9O<{k|M&UHA>6N*$WPN} z5@9uj>l023T%1NTM*Gi?!35l6a(Xe$--<2{sl;MC!(Bf<>WSqy=~3p$7`ZvYBN`G! zx%yW%F|v~TbN)d14V3b2(~^E3UgVT5N}mM{aGuAzbFL-UQ*+ZQ+$R&cEI+UC`Ie+> z%fXre#MH~H<|r6Ymq;=eK`n{Ze!ljVH2Ow4h1sJU&;k)P)C4>C1{xW(qG;V%OQ2I3 zFI<9EgP^(nD7W|?V0XkJNCt-55_;ruQ5_2pt`uwkZV7~>d~fHk<4Z(g_mJ>%b90kK zgS)$E{t=;K>GFJ6h||eV)o=dj*LGAKkxt^2L?8H9Vvjz4)|i|-nF-~StOT&%EJ~FN z&?f&hzM!+{CG_$??oa6s#iFsq_apIlMl|m6(xlf8-zUT+4U!$AWqvh%+p-@-ADFKZ z_fjj}F45i5_P$>dBOZHJiPXKM9aoUbv0klREE4BEErWVILn*9`8xj>0)cJ)bUtX|t z&gMc9DHrIqW`fe7I<5wLcQQY3clY&7tVlISZs$d{hxig{sqNux1#fwV{Wpn^at&6L zA2C^zdFonPgyPpsfJdRF#Uy0zuBBMq0VIQAn#|tMea^0IpMx>yS=TqvFesK(WB2ir zEKQIfsUC7%Mw7mv`MVJC7Xgw>bw^ zs?-@H$38r6`f-1^N6~nXdFW-0rH<6p_3vMBCxXz7(D!j$p`@{XJFiL2Huir}BVl0b z`1rI9RU*{UzuS(Y#uiQ3^0k`|5%Sxw`3?A?A#($D{ol2lB-*Uzqv@7G3nn8z;miq@ zU84E(1t`QB8PAn&k-SB&xA1D7QyYn1$`IFVb_>04MaY`xHhYSuBAYA)nc`Ggq};o5 zINO4YE|D;&TX_FE$4Ow_0}^I%%0Qm^z7eTuvXdQuzu@3U1=!eE4@56}h+d`Sb3UGI z?3|wZ+`GO0v>(zpk98rwCK{|e~#A_74rKx zuc`bWP-T-%dp!9qW?7Wj>KR(M&vs|bLOd~+HqF%eOXXFK2c1^UZ(408+NkPF)=cw^ zv4LtwN2fCH-@bL{ea!`|c1aNrtlLkln|^s{W1v<&)D>C;JgSDZuPIy@6`<;-&8WmJ zA2n0(X}thVm6_l<>#o`-t+W`4tZARV6dm!A2|l5kiUD2b_dlw+Ckq-C4mY$93@qO) zHH?q1E{Ev+VJ_o0w|tk`s1cl8z~PqE#5!YXqj(h{3dYT9mb_~BiSnHA&9CH+jhvsI z6XuHUUD4J#=z96dW1n_% zo=2v>M|m2ARBC^5jZ-o;mlH7j5dOOzpFi_gVAW~Q>XlzDnSBMf^%I6qyh+u+vS`KE zedT>s$^^za%}YB_*Vb!*yA^hk_qGyzps7r)_g?o# zPf9AJh-)@S9JT&R<>o2Da=^nvo;r;(9e&K&zF)+F4te8vpT2#&mcn|+D~+%skEH!J z%8}O{_heJq4^@}=x$3x|-0yXXDrBOkPw@RTwA}mt!`Anrcp6$-jkYu{&C#8#*go|o z8cT03SCNB^zMapmI7-%8pG-gXN{XC+6?X*m&KWl_8WJjHsIKY>1RJachK;G$Vv%|> zUP>JOjoN45BSLm@ZzqMft#=b_%*+XPn&ojLAD$0vF~k?Vyt1Vgr#zYj9Ns1?rh$>` zbGKPUw7-_xadDe@)k1lRh!OlhBqQM!FSU%_hOF?%X(tpj>F3in!O>C>oh%VjQwVMuxOuesm+Et)Bfz%3#*))Gv zQBg74;~t0XVEg>oVT%zXh{wD8W4=FE6*$AYNLO;#s4+1)DMwP-pM*0}v6>NZe&X^l znP_u+0{)+15`>htDu_^FKd?Qv{(bI{_Pn-=ni{k3tMj_5Pn{~eg%^i0_{P)4`0&Y~ zCza)r6!3_My4K&9LvVQx5sxYQ{pIH5bpCiY*<_aFz%=1ks#s4C$s{(%jV;xAx@%W5 z6!GFuNZ}f1j$fD-C@DUfaIT-4mz_oVG>f31GMr%aXv!g3q|*B|1?wuELf&x z>d%xZPU~3enzRyzMny&@ehH24?+gs3*3)PGwzv3Fz*Rx5Glfdz?z{#kL_STAQRifH z(|X5$hz4E2Zna8$P+jk{#^D-hdY~?qOtHC{)c`cQ(4W>fl_4^>jw2m>|A{aDNpajj zjJb=9t;kD^Y|>~`vGJz&-QDw(n0dz0&u>=CtDNND-)Etq5RGYC!LK9b)M8XiC?Hcz zW@-N;>sV_iZC|;>Ws%)vjmbIF4w&B3Zjpr5j5Ly*b#CVc8rl~=MdySYm*nSzLqpTQ zT%~ezDNUz7#d4l2iqpV)NKnY1{l{zly(c#+GR){C5ghSD6%IRxvSFp z0jbmi6m55C*D&3yifuDY)r;o>dmdH2Rk^6HeJ7d?lv!kYbl<6|X@q6z%>S7#11@M} zlDMXrLGUC7et=2Z8=EB?qw}YQVmJZ2MO?rkLpbCJDch0 zqR5h0IXQb?V#K+&9&0?|w$H|S)t`M`NFkoDFDF>0=&Fnk?zKo~IW06uy0Xnnz4W@s z)7*~`7HZE`IKi9Xn4@D&TPf3t{ z#(0}v4nCtq#yvHHl$&9*wc)U4{0jj5cjMWbAuRWgNic`;f7>PQr;y>Kc?;6*Z$G5g z$^(i1SqIoAb;q}#z1Mo~n&8l`!2LK}SFV>Dtp4BEhWOl`0#+|aM7%`tPbU38zkZ_z z<}PFGeF^RVeC?laCIUCY%GV(NzdYYRKV)N6FzcD7{QvzMR`B3@|32@39|&=h;(?!c z73M8Z`@c`C2US{XTwBBZUuF;3VK+Kp`M!DC>hb*FziGhEZgA@CB>BG&c&Y%o!xAq; VekG{2LWKnWgG(w%l#3Y#{D08L>N@}c literal 0 HcmV?d00001 From 07c87e8b5d903d50d7227f4f832d8e9965048f7f Mon Sep 17 00:00:00 2001 From: Brian Luft Date: Fri, 5 Sep 2014 15:46:38 -0700 Subject: [PATCH 18/18] Minor adjustment to add channel step --- docs/getting_started.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/getting_started.rst b/docs/getting_started.rst index e1813f6..9b344df 100644 --- a/docs/getting_started.rst +++ b/docs/getting_started.rst @@ -45,7 +45,7 @@ Now that your bot is connected to a network or server, you can start having it j 3. **Channel**: ``#botbot-warmup``. This is a channel where we test channel bots. 4. If you'd like the channel to be listed on the site home page, Select **'Is public'** 5. Several useful plugins will already be configured. At a minimum, ``ping`` and ``logger`` will be helpful for testing the bot. -6. Save. In the ``honcho`` console output you should see messages similar to:: +6. Save your channel. You should be directed back to the Channel list view. 7. On the Channel list view, select your channel. From the ``Actions`` dropdown select "Reload botbot-bot configuration" and press "Go". You should see something similar in the ``honcho`` console output (edited for brevity):: 14:15:07 bot.1 | I0711 14:15:07.557470 61493 botbot.go:67] Command: REFRESH