From 137dc29da531f49f27226b475e33fa96ac98a521 Mon Sep 17 00:00:00 2001 From: m52go <735155+m52go@users.noreply.github.com> Date: Tue, 26 Oct 2021 13:49:26 -0400 Subject: [PATCH 01/21] Rename stats to dashboard and make english-only Since DAO report pages will only be in English anyway. Main reason for this is that open-ended narratives covering proposals and other notable cycle events are not feasible to translate (much like blog posts). --- _data/de.yml | 15 --------- _data/en.yml | 17 +--------- _data/es.yml | 15 --------- _data/fr.yml | 15 --------- _data/ja.yml | 15 --------- _data/pt-BR.yml | 15 --------- _data/pt-PT.yml | 15 --------- _data/ru.yml | 15 --------- _data/zh-CN.yml | 15 --------- _includes/main_nav.html | 4 +-- _layouts/page_stats.html | 70 ---------------------------------------- dashboard.html | 27 ++++++++++++++++ de/stats.md | 8 ----- es/stats.md | 8 ----- fr/stats.md | 8 ----- ja/stats.md | 8 ----- pt-BR/stats.md | 8 ----- pt-PT/stats.md | 8 ----- ru/stats.md | 8 ----- stats.md | 7 ---- zh-CN/stats.md | 8 ----- 21 files changed, 30 insertions(+), 279 deletions(-) delete mode 100644 _layouts/page_stats.html create mode 100644 dashboard.html delete mode 100644 de/stats.md delete mode 100644 es/stats.md delete mode 100644 fr/stats.md delete mode 100644 ja/stats.md delete mode 100644 pt-BR/stats.md delete mode 100644 pt-PT/stats.md delete mode 100644 ru/stats.md delete mode 100644 stats.md delete mode 100644 zh-CN/stats.md diff --git a/_data/de.yml b/_data/de.yml index 7dd6bd52..95b2ffc6 100644 --- a/_data/de.yml +++ b/_data/de.yml @@ -142,18 +142,3 @@ downloads: pSeeInstructions: "
Lesen Sie Erste Schritte mit Bisq für Anweisungen, wie Sie Ihren ersten Handel abschließen können." hMobileNotifications: Bisq Handy-Benachrichtigungen pMobileNotifications: Halten Sie sich über Ihre Trades auf dem Laufenden und erhalten Sie Benachrichtigungen auf Ihrem Handy. - -stats: - hNetworkStats: Netzwerk-Statistiken - pSeeMarkets: "
Auf der Märkte Seite finden Sie das Volumen je nach Währung.
" - pBSQDistribution: Die Mainnet BSQ-Ausgabe ist für April 2019 geplant. - pTotalTrades: Trades insgesamt - pTotalDate: Während des letzten Monats - pDailyAverageTrade: Täglich durchschnittliche Trades - pSoftwareDownloads: Software Downloads - pSoftwareDownloadsVersion: Für v1.6.5 (voraussichtlich) - pGithubContributors: GitHub Mitarbeiter - pToDate: Bis Ende letzten Monats - pTwitterFollowers: Twitter Follower - pKeybaseUsers: Keybase-Benutzer - pNetworkLoad: "Für die P2P-Netzwerklast, Tor-Metriken und andere Netzwerkdaten besuchen Sie bitte den Bisq Network Monitor.
" diff --git a/_data/en.yml b/_data/en.yml index 65aa9956..be63f8a0 100644 --- a/_data/en.yml +++ b/_data/en.yml @@ -6,7 +6,7 @@ main_nav: community: Community # 14 characters max gettingStarted: Getting Started # main nav link: please be as short as possible bisqDAO: Bisq DAO # main nav link: please be as short as possible - statistics: Statistics # main nav link: please be as short as possible + statistics: Dashboard # main nav link: please be as short as possible faq: FAQ # main nav link: please be as short as possible markets: Markets # main nav link: please be as short as possible @@ -179,18 +179,3 @@ getting_started: nextStep1: Browse the wiki to learn more. nextStep2: Say hi on Keybase. nextStep3: Or simply make another trade! - -stats: - hNetworkStats: Network Stats - pSeeMarkets: "See Markets page for volume by currency.
" - pBSQDistribution: The mainnet BSQ genesis distribution took place in April 2019. - pTotalTrades: Total Trades - pTotalDate: Through last month - pDailyAverageTrade: Daily Average Trades - pSoftwareDownloads: Software Downloads - pSoftwareDownloadsVersion: For v1.6.5 (approximate) - pGithubContributors: GitHub Contributors - pToDate: As of last month - pTwitterFollowers: Twitter Followers - pKeybaseUsers: Keybase Users - pNetworkLoad: "For P2P network load, Tor metrics, and other network data, please visit the Bisq Network Monitor.
" diff --git a/_data/es.yml b/_data/es.yml index f4941bc6..827e2325 100644 --- a/_data/es.yml +++ b/_data/es.yml @@ -142,18 +142,3 @@ downloads: pSeeInstructions: "Vea Iniciándose con Bisq para instrucciones sobre cómo completar su primer intercambio.
" hMobileNotifications: Notificaciones móviles Bisq pMobileNotifications: Manténgase al día en sus intercambios y reciba notificaciones en su celular. - -stats: - hNetworkStats: Estado de red - pSeeMarkets: "Ver la página de Mercados para el volumen por moneda.
" - pBSQDistribution: La distribución de BSQ en la red principal fue el 15 de Abril de 2019. - pTotalTrades: Intercambios totales - pTotalDate: Durante el mes pasado - pDailyAverageTrade: Promedio diario de operaciones - pSoftwareDownloads: Las descargas de software fueron - pSoftwareDownloadsVersion: "Para la versión v1.6.5 (aproximado)" - pGithubContributors: Contribuyentes de GitHub - pToDate: Hasta el mes pasado - pTwitterFollowers: Seguidores de Twitter - pKeybaseUsers: Usuarios Keybase - pNetworkLoad: "Para carga de la red P2P, métricas de Tor y otros datos de red, por favor visite el Monitor de Red Bisq.
" diff --git a/_data/fr.yml b/_data/fr.yml index e4bae747..e94f25cc 100644 --- a/_data/fr.yml +++ b/_data/fr.yml @@ -142,18 +142,3 @@ downloads: pSeeInstructions: "Voir Pour commencer avec Bisq pour obtenir des instructions sur la façon d'effectuer votre premier échange.
" hMobileNotifications: Notifications Bisq sur téléphone portable pMobileNotifications: Restez au fait de l'évolution de vos transactions et recevez des notifications sur votre téléphone portable. - -stats: - hNetworkStats: Stats du réseau - pSeeMarkets: "Voir la page des marchés pour le volume par devise.
" - pBSQDistribution: La distribution des BSQ sur le Mainnet est prévue pour avril 2019. - pTotalTrades: Total des transactions - pTotalDate: Au cours du mois dernier - pDailyAverageTrade: Moyenne journalière des transactions - pSoftwareDownloads: Téléchargements du logiciel - pSoftwareDownloadsVersion: For v1.6.5 (approximation) - pGithubContributors: Contributeurs GitHub - pToDate: Depuis le mois dernier - pTwitterFollowers: Followers sur Twitter - pKeybaseUsers: Utilisateurs Keybase - pNetworkLoad: "Pour connaître la sollicitation du réseau P2P, les métriques Tor et d'autres données réseau, veuillez visiter le site Web du contrôleur de réseau Bisq.
" diff --git a/_data/ja.yml b/_data/ja.yml index 681f545b..ce3eaeff 100644 --- a/_data/ja.yml +++ b/_data/ja.yml @@ -142,18 +142,3 @@ downloads: pSeeInstructions: "最初のトレードを完了する方法についてはBisqの概要をご覧ください。
" hMobileNotifications: Bisqモバイル通知 pMobileNotifications: トレードを最新の状態に保ち、携帯電話で通知を受け取りましょう。 - -stats: - hNetworkStats: ネットワーク統計 - pSeeMarkets: "通貨別の取引高についてはマーケットのページをご覧ください。
" - pBSQDistribution: "メインネットのBSQジェネシス配布は2019年4月に行われました。" - pTotalTrades: 全トレード - pTotalDate: 先月まで - pDailyAverageTrade: 日々の平均トレード - pSoftwareDownloads: ソフトウェアダウンロード - pSoftwareDownloadsVersion: v1.6.5(概算)の場合 - pGithubContributors: GitHub 貢献者 - pToDate: 先月より - pTwitterFollowers: Twitterフォロワー - pKeybaseUsers: Keybaseユーザー - pNetworkLoad: "P2Pネットワーク負荷、Torメトリック、およびその他のネットワークデータについては、Bisq Network Monitorをご覧ください。
" diff --git a/_data/pt-BR.yml b/_data/pt-BR.yml index c22826f9..5c9cfc27 100644 --- a/_data/pt-BR.yml +++ b/_data/pt-BR.yml @@ -142,18 +142,3 @@ downloads: pSeeInstructions: "Veja Introdução ao Bisq para instruções sobre como fazer sua primeira negociação.
" hMobileNotifications: Notificações da Bisq Móvel pMobileNotifications: Mantenha-se atualizado sobre suas negociações e receba notificações no seu celular. - -stats: - hNetworkStats: Estatísticas da rede - pSeeMarkets: "Veja Página de Mercados para o volume por moeda.
" - pBSQDistribution: "A distribuição gênese de BSQ na mainnet aconteceu em Abril de 2019." - pTotalTrades: Todas as Negociações - pTotalDate: Até o fim do mês passado - pDailyAverageTrade: Média diária de negociações - pSoftwareDownloads: Downloads do software - pSoftwareDownloadsVersion: "Para v1.6.5 (aproximadamente)" - pGithubContributors: Contribuidores no GitHub - pToDate: No mês passado - pTwitterFollowers: Seguidores no Twitter - pKeybaseUsers: "Usuários no Keybase" - pNetworkLoad: "Para dados sobre a rede P2P, métricas do Tor e outros dados da rede, por favor visite o Monitor da Rede Bisq.
" diff --git a/_data/pt-PT.yml b/_data/pt-PT.yml index cdc2ba7a..25f96e95 100644 --- a/_data/pt-PT.yml +++ b/_data/pt-PT.yml @@ -142,18 +142,3 @@ downloads: pSeeInstructions: "Confira Getting Started with Bisq para instruções de como completar a sua primeira troca.
" hMobileNotifications: Notificações móvies do Bisq pMobileNotifications: Mantenha-se atualizado sobre suas trocas e receba notificações no seu telemóvel. - -stats: - hNetworkStats: Estatisticas da Rede - pSeeMarkets: "Confira a página de Mercados para ver volume por moeda.
" - pBSQDistribution: A distribuição de BSQ na Mainnet está prevista para Abril 2019 - pTotalTrades: Todos os Negócios - pTotalDate: Durante o mês passado - pDailyAverageTrade: Média de negócios por dia - pSoftwareDownloads: Downloads do Software - pSoftwareDownloadsVersion: Para v1.6.5 (aproximativa) - pGithubContributors: Contribuintes no GitHub - pToDate: Até o mês passado - pTwitterFollowers: Seguidores no Twitter - pKeybaseUsers: Utilizadores do Keybase - pNetworkLoad: "Para a carga da rede P2P, métricas do Tor, e outros dados da rede, por favor visite o Monitor da Rede do Bisq.
" diff --git a/_data/ru.yml b/_data/ru.yml index 62e6ec2d..c2323b99 100644 --- a/_data/ru.yml +++ b/_data/ru.yml @@ -142,18 +142,3 @@ downloads: pSeeInstructions: "Прочитайте статью «Начало работы с Bisq», чтобы узнать, как совершить свою первую сделку.
" hMobileNotifications: Мобильные уведомления Bisq pMobileNotifications: Получайте оперативные уведомления о сделках на мобильный телефон. - -stats: - hNetworkStats: Статистика сети - pSeeMarkets: "Для просмотра объёмов торгов для каждой валюты см. страницу рынков.
" - pBSQDistribution: "Первичное распределение BSQ состоялось в апреле 2019 г." - pTotalTrades: Всего сделок - pTotalDate: с прошлого месяца - pDailyAverageTrade: Среднее кол-во сделок в день - pSoftwareDownloads: Загрузок программы - pSoftwareDownloadsVersion: версии v1.6.5 (приблизительно) - pGithubContributors: Участников проекта на GitHub - pToDate: в прошлом месяце - pTwitterFollowers: Читателей в Twitter - pKeybaseUsers: Пользователей в Keybase - pNetworkLoad: "Информацию о нагрузке на сеть P2P, данных Tor и других сетевых данных можно посмотреть в мониторе сети Bisq.
" diff --git a/_data/zh-CN.yml b/_data/zh-CN.yml index 502f8817..8fe5defa 100644 --- a/_data/zh-CN.yml +++ b/_data/zh-CN.yml @@ -142,18 +142,3 @@ downloads: pSeeInstructions: "有关如何完成第一笔交易的说明,请参阅如何开始使用 Bisq。
" hMobileNotifications: Bisq 通知应用程序 pMobileNotifications: 保持最新的交易和接收通知在您的手机上。 - -stats: - hNetworkStats: 网络状况 - pSeeMarkets: "按货币计算的成交量见市场页面。
" - pBSQDistribution: 核心网络 BSQ 计划于2019年4月发布。 - pTotalTrades: 总交易数 - pTotalDate: 上月数据 - pDailyAverageTrade: 每日交易数 - pSoftwareDownloads: 软件下载数 - pSoftwareDownloadsVersion: 在 v1.6.5(近似数) - pGithubContributors: GitHub 贡献者 - pToDate: 截止上月 - pTwitterFollowers: Twitter 粉丝数 - pKeybaseUsers: Keybase 用户 - pNetworkLoad: "有关 P2P 网络负载情况、Tor 指标和其他网络数据,请访问Bisq 网络状况监控。
" diff --git a/_includes/main_nav.html b/_includes/main_nav.html index 2e70b1c6..9f941191 100644 --- a/_includes/main_nav.html +++ b/_includes/main_nav.html @@ -40,8 +40,8 @@{{ item.pBSQDistribution }}
-{{item.pTotalTrades}}
-106,743
-{{item.pTotalDate}}
-{{item.pDailyAverageTrade}}
-97
-{{item.pTotalDate}}
-{{item.pSoftwareDownloads}}
-16,851
-{{item.pSoftwareDownloadsVersion}}
-{{item.pGithubContributors}}
-236
-{{item.pToDate}}
-{{item.pTwitterFollowers}}
-30,924
-{{item.pToDate}}
-{{item.pKeybaseUsers}}
-2,223
-{{item.pToDate}}
-This page covers health and performance of the Bisq DAO. For trading data, see https://bisq.markets.
This page covers health and performance of the Bisq DAO. For trading data, see https://bisq.markets.
-Total BSQ issued net of BSQ burned for fees.
+This page covers health and performance of the Bisq DAO. For trading data, see https://bisq.markets.
diff --git a/js/stats.js b/js/dashboard.js similarity index 100% rename from js/stats.js rename to js/dashboard.js From b73a0d2d1a46239dc2182a6d0a5159f2e2769da6 Mon Sep 17 00:00:00 2001 From: m52go <735155+m52go@users.noreply.github.com> Date: Tue, 26 Oct 2021 23:57:22 -0400 Subject: [PATCH 07/21] Add bsq supply generated automatically Scripts are in new directory `./dao`. --- .dao/README.md | 26 ++ .dao/generate_dashboard.sh | 24 ++ .dao/settings.json | 4 + .dao/utilities/cycle-overview-data/fetch.py | 58 +++++ .dao/utilities/dao-burn/README.md | 9 + .dao/utilities/dao-burn/parse-txs.py | 223 ++++++++++++++++++ .../utilities/supply-graph-series/generate.py | 48 ++++ .gitignore | 1 + js/dashboard.js | 6 +- 9 files changed, 396 insertions(+), 3 deletions(-) create mode 100644 .dao/README.md create mode 100755 .dao/generate_dashboard.sh create mode 100644 .dao/settings.json create mode 100644 .dao/utilities/cycle-overview-data/fetch.py create mode 100644 .dao/utilities/dao-burn/README.md create mode 100644 .dao/utilities/dao-burn/parse-txs.py create mode 100644 .dao/utilities/supply-graph-series/generate.py diff --git a/.dao/README.md b/.dao/README.md new file mode 100644 index 00000000..61a8fd3e --- /dev/null +++ b/.dao/README.md @@ -0,0 +1,26 @@ +# Bisq DAO Dashboard Generator + +`generate_dashboard.sh` runs a set of utilities to generate a rudimentary dashboard to display the health and performance of the Bisq DAO. + +## Requirements + +The scripts called by `generate_dashboard.sh` were written over a period of many months using different tools to address different near-term goals. They're recycled here for expedience. + +- Python 3.6 or later +- NodeJS (tested on `v14.17.5`) +- `jq` + +## General Information + +This script uses a handful of scripts to parse data files outputted from the Bisq desktop program via the `--dumpStatistics=true` and `--dumpBlockchainData=true` flags. + +Therefore you must run Bisq with these flags, ensure the relevant data files are updated, and set the locations of these data files in `settings.json`. + +The DAO vote results file needs to be manually exported from Bisq using the `Export to JSON` button in `DAO` > `Governance` > `Vote Results`. There is an open issue to automate this at https://github.com/bisq-network/bisq/issues/5290. + +Generated data is saved in `data/`. Scripts read that folder for data generated by other scripts, but you can also use it to store data too (e.g., the `voteResultsHistory.json`). + +## Known Issues / Weak Points / Rough Edges + +- BSQ supply numbers are currently written into `js/dashboard.js` once the relevant numbers are calculated. The method for doing this is rather hacky and fragile. There is probably a better way to do this. +- The x-axis of the BSQ supply chart can appear jumbled. diff --git a/.dao/generate_dashboard.sh b/.dao/generate_dashboard.sh new file mode 100755 index 00000000..ccb78a1c --- /dev/null +++ b/.dao/generate_dashboard.sh @@ -0,0 +1,24 @@ +#!/bin/bash + +echo -e "" +mkdir -p data + +# generate cycle burn data + +echo -e "Parsing DAO transactions to get burn figures...\n" +python3 utilities/dao-burn/parse-txs.py + +# generate cycle overview data + +echo -e "Generating overview for dashboard...\n" +python3 utilities/cycle-overview-data/fetch.py + +# generate series for bsq supply chart + +echo -e "Generating data series for BSQ supply chart...\n" +python3 utilities/supply-graph-series/generate.py + +head -n 4 ../js/dashboard.js > ../js/dashboard-2.js +less data/highcharts-vars.txt >> ../js/dashboard-2.js +tail -n +7 ../js/dashboard.js >> ../js/dashboard-2.js +mv ../js/dashboard-2.js ../js/dashboard.js diff --git a/.dao/settings.json b/.dao/settings.json new file mode 100644 index 00000000..c40956c3 --- /dev/null +++ b/.dao/settings.json @@ -0,0 +1,4 @@ +{ + "daoTxDirectory": "/location/to/your/btc_mainnet/db/json/tx/", + "daoVoteResultsFile": "/location/to/voteResultsHistory.json" +} diff --git a/.dao/utilities/cycle-overview-data/fetch.py b/.dao/utilities/cycle-overview-data/fetch.py new file mode 100644 index 00000000..5ab515de --- /dev/null +++ b/.dao/utilities/cycle-overview-data/fetch.py @@ -0,0 +1,58 @@ +import sys +import os +import json +import copy +import datetime +import time +import math + +cycleOverviewData = {} + +timeNow = math.floor( time.time() ) + +daoCycleBurnDataFilePath = 'data/dao-burn-cycle.json' + +settingsFilePath = 'settings.json' +pathError = 'Error finding DAO voting results file...did you put the right path in ' + settingsFilePath + '? You must specify the full path.' + +### get settings + +try: + with open( settingsFilePath, 'r' ) as settingsFile: + settings = settingsFile.read() +except: + print( pathError ) + sys.exit() + +settingsObj = json.loads(settings) +daoResultsPath = settingsObj['daoVoteResultsFile'] + +### get dao burn data + +try: + with open( daoCycleBurnDataFilePath, 'r' ) as daoBurnFile: + daoBurnData = daoBurnFile.read() +except: + print( 'Error reading file with DAO burn data.') + sys.exit() + +daoBurnDataObj = json.loads(daoBurnData) + +### put all data together + +with open( daoResultsPath, 'r' ) as daoResults: + + daoResultsDict = json.loads( daoResults.read() ) + + # assume cycle that started more than 40 days ago has completed + for cycle in daoResultsDict: + if( ( timeNow - ( cycle['startTime'] / 1000 ) > 3456000 ) ): + cycleOverviewData[ str(cycle['cycleIndex']) ] = {} + cycleOverviewData[ str(cycle['cycleIndex']) ]['startTime'] = math.floor( cycle['startTime'] / 1000 ) + cycleOverviewData[ str(cycle['cycleIndex']) ]['issuance'] = float( cycle['issuance'].split(" ")[0] ) + cycleOverviewData[ str(cycle['cycleIndex']) ]['burn'] = daoBurnDataObj[ str(cycle['cycleIndex']) ]['TOTAL']['feeSum'] + cycleOverviewData[ str(cycle['cycleIndex']) ]['numberProposals'] = cycle['numberOfProposals'] + + +with open( 'data/cycle-overview-data.json', 'w' ) as f: + f.write( json.dumps( cycleOverviewData, indent=4 ) ) diff --git a/.dao/utilities/dao-burn/README.md b/.dao/utilities/dao-burn/README.md new file mode 100644 index 00000000..53ebaf1b --- /dev/null +++ b/.dao/utilities/dao-burn/README.md @@ -0,0 +1,9 @@ +# dao-figures + +This script parses all DAO transactions to produce quantitative reports of the Bisq DAO: per cycle, per month, per day, and all-time. + +## Requirements + +Python 3 (tested on 3.6.9) + +_IMPORTANT: Python 2 will appear to work, but the resulting numbers will be INCORRECT._ diff --git a/.dao/utilities/dao-burn/parse-txs.py b/.dao/utilities/dao-burn/parse-txs.py new file mode 100644 index 00000000..d4c59955 --- /dev/null +++ b/.dao/utilities/dao-burn/parse-txs.py @@ -0,0 +1,223 @@ +import sys +import os +import json +import copy +import datetime + +cycleResults = {} +monthlyResults = {} +dailyResults = {} + +settingsFilePath = 'settings.json' +pathError = 'Error finding DAO tx files...did you put the right path in ' + settingsFilePath + '? You must specify the full path.' + +resultTemplate = { + 'IRREGULAR': { + 'count': 0, + 'feeSum': 0 + }, + 'UNVERIFIED': { + 'count': 0, + 'feeSum': 0 + }, + 'INVALID': { + 'count': 0, + 'feeSum': 0 + }, + 'GENESIS': { + 'count': 0, + 'feeSum': 0 + }, + 'TRANSFER_BSQ': { + 'count': 0, + 'feeSum': 0 + }, + 'PAY_TRADE_FEE': { + 'count': 0, + 'feeSum': 0 + }, + 'PROPOSAL': { + 'count': 0, + 'feeSum': 0 + }, + 'COMPENSATION_REQUEST': { + 'count': 0, + 'feeSum': 0 + }, + 'REIMBURSEMENT_REQUEST': { + 'count': 0, + 'feeSum': 0 + }, + 'BLIND_VOTE': { + 'count': 0, + 'feeSum': 0 + }, + 'VOTE_REVEAL': { + 'count': 0, + 'feeSum': 0 + }, + 'LOCKUP': { + 'count': 0, + 'feeSum': 0 + }, + 'UNLOCK': { + 'count': 0, + 'feeSum': 0 + }, + 'ASSET_LISTING_FEE': { + 'count': 0, + 'feeSum': 0 + }, + 'PROOF_OF_BURN': { + 'count': 0, + 'feeSum': 0 + }, + 'TOTAL': { + 'count': 0, + 'feeSum': 0 + } +} + +### helper functions + +def findCycle( height ): + + daoGenesisBlock = 571747 - 1 # first block was 571747, but first cycle was 1 block shorter + cycleLength = 4680 + + cycleEnd = daoGenesisBlock + cycleLength + cycle = 1 + + while( cycleEnd < height ): + cycle += 1 + cycleEnd = daoGenesisBlock + ( cycleLength * cycle ) + + return cycle + +def getCalendarLabel( timestamp, needDay ): + + calendarLabel = '' + + month = datetime.datetime.fromtimestamp( timestamp ).month + year = datetime.datetime.fromtimestamp( timestamp ).year + day = datetime.datetime.fromtimestamp( timestamp ).day + + calendarLabel = str(year) + calendarLabel += str(month) if month > 9 else '0' + str(month) + + if( needDay == True ): + calendarLabel += str(day) if day > 9 else '0' + str(day) + + return calendarLabel + +def writeJsonToCsv( timeType, destinationFile, dict ): + + timeKeys = list( dict.keys() ) + timeKeys.sort( reverse=True ) + + with open( destinationFile, 'w' ) as f: + + txLabels = '' + txKeys = list( dict[ timeKeys[0] ] ) + for txKey in txKeys: + txLabels += ( txKey.lower() + '-count,' ) + ( txKey.lower() + '-fees,' ) + + if timeType == 'alltime': + pass + elif timeType == 'cycle': + f.write( 'cycle,' + txLabels[:-1] + '\n' ) + elif timeType == 'monthly': + f.write( 'yearmonth,' + txLabels[:-1] + '\n' ) + elif timeType == 'daily': + f.write( 'yearmonthday,' + txLabels[:-1] + '\n' ) + + for date in timeKeys: + csvData = '' + for txType in txKeys: + csvData += str( dict[ date ][ txType ][ 'count' ] ) + ',' + \ + str( dict[ date ][ txType ][ 'feeSum' ] ) + ',' + f.write( str(date) + ',' + csvData[:-1] + '\n' ) + +### get settings + +try: + with open( settingsFilePath, 'r' ) as settingsFile: + settings = settingsFile.read() +except: + print( pathError ) + sys.exit() + +settingsObj = json.loads(settings) +daoTxPath = settingsObj['daoTxDirectory'] + +### iterate through dao transactions directory + +allTimeResults = copy.deepcopy( resultTemplate ) + +for filename in os.listdir( daoTxPath ): + + with open( daoTxPath + filename, 'r' ) as daoTx: + daoTxDict = json.loads( daoTx.read() ) + + burntFee = daoTxDict[ 'burntFee' ] / 100 + + # cycle results + + txCycle = findCycle( daoTxDict[ 'blockHeight' ] ) + + if( txCycle not in cycleResults ): + cycleResults[ txCycle ] = copy.deepcopy( resultTemplate ) + + cycleResults[ txCycle ][ daoTxDict[ 'txType' ] ][ 'count' ] += 1 + cycleResults[ txCycle ][ daoTxDict[ 'txType' ] ][ 'feeSum' ] += burntFee + + cycleResults[ txCycle ][ 'TOTAL' ][ 'count' ] += 1 + cycleResults[ txCycle ][ 'TOTAL' ][ 'feeSum' ] += burntFee + + # monthly results + + calendarLabel = getCalendarLabel( daoTxDict[ 'time' ] / 1000, False ) + + if( calendarLabel not in monthlyResults ): + monthlyResults[ calendarLabel ] = copy.deepcopy( resultTemplate ) + + monthlyResults[ calendarLabel ][ daoTxDict[ 'txType' ] ][ 'count' ] += 1 + monthlyResults[ calendarLabel ][ daoTxDict[ 'txType' ] ][ 'feeSum' ] += burntFee + + monthlyResults[ calendarLabel ][ 'TOTAL' ][ 'count' ] += 1 + monthlyResults[ calendarLabel ][ 'TOTAL' ][ 'feeSum' ] += burntFee + + # daily results + + calendarLabel = getCalendarLabel( daoTxDict[ 'time' ] / 1000, True ) + + if( calendarLabel not in dailyResults ): + dailyResults[ calendarLabel ] = copy.deepcopy( resultTemplate ) + + dailyResults[ calendarLabel ][ daoTxDict[ 'txType' ] ][ 'count' ] += 1 + dailyResults[ calendarLabel ][ daoTxDict[ 'txType' ] ][ 'feeSum' ] += burntFee + + dailyResults[ calendarLabel ][ 'TOTAL' ][ 'count' ] += 1 + dailyResults[ calendarLabel ][ 'TOTAL' ][ 'feeSum' ] += burntFee + + # all-time results + + allTimeResults[ daoTxDict[ 'txType' ] ][ 'count' ] += 1 + allTimeResults[ daoTxDict[ 'txType' ] ][ 'feeSum' ] += burntFee + + allTimeResults[ 'TOTAL' ][ 'count' ] += 1 + allTimeResults[ 'TOTAL' ][ 'feeSum' ] += burntFee + +### write results to files + +with open( 'data/dao-burn-alltime.json', 'w' ) as f: + f.write( json.dumps( allTimeResults, indent=4 ) ) + +with open( 'data/dao-burn-cycle.json', 'w' ) as f: + f.write( json.dumps( cycleResults, indent=4 ) ) + +with open( 'data/dao-burn-monthly.json', 'w' ) as f: + f.write( json.dumps( monthlyResults, indent=4 ) ) + +with open( 'data/dao-burn-daily.json', 'w' ) as f: + f.write( json.dumps( dailyResults, indent=4 ) ) diff --git a/.dao/utilities/supply-graph-series/generate.py b/.dao/utilities/supply-graph-series/generate.py new file mode 100644 index 00000000..e4167872 --- /dev/null +++ b/.dao/utilities/supply-graph-series/generate.py @@ -0,0 +1,48 @@ +import sys +import os +import json +import math + +### the 2 axes for the bsq supply graph, with pre-dao data hardcoded + +timePeriods = ["Oct '17", "Nov '17", "Dec '17", "Jan '18", "Feb '18", "Mar '18", "Apr '18", "May '18", "Jun '18", "Jul '18", "Aug '18", "Sep '18", "Oct '18", "Nov '18", "Dec '18", "Jan '19", "Feb '19", "Mar '19"] + +bsqSupply = [2548500, 2620250, 2671850, 2722950, 2769150, 2806330, 2830832, 2868164, 2889799, 2934231, 2971823, 3018665, 3052400, 3272927, 3344765, 3406635, 3520705, 3657480] + +overviewFilePath = 'data/cycle-overview-data.json' +pathError = 'Error: could not find cycle overview file.' + +### get cycle data from overview file + +try: + with open( overviewFilePath, 'r' ) as overview: + overviewData = overview.read() +except: + print( pathError ) + sys.exit() + +overViewDataObj = json.loads(overviewData) + +## time periods + +i = 0 +for cycle in overViewDataObj: + i = i + 1 + timePeriods.append( "Cycle " + str(i) ) + +## bsq supply + +i = 0 +for cycle in overViewDataObj: + i = i + 1 + bsqSupply.append( math.floor( bsqSupply[-1] + overViewDataObj[str(i)]['issuance'] - overViewDataObj[str(i)]['burn'] ) ) + +## create javascript variables for highcharts.js + +with open( 'data/highcharts-vars.txt', 'w' ) as f: + f.write( 'var timeframeSeries = ' ) + json.dump( timePeriods, f ) + f.write( ';\n' ) + f.write( 'var supplySeries = ' ) + json.dump( bsqSupply, f ) + f.write( ';\n' ) diff --git a/.gitignore b/.gitignore index 4abb9ca2..db909514 100644 --- a/.gitignore +++ b/.gitignore @@ -3,3 +3,4 @@ _site *.swp .idea .DS_Store +.dao/data diff --git a/js/dashboard.js b/js/dashboard.js index 0172f71b..adf26a9d 100644 --- a/js/dashboard.js +++ b/js/dashboard.js @@ -1,9 +1,9 @@ /***************************************** -DO NOT change anything in this section unless you know what you are doing. The DAO dashboard generation script in .dao/ looks for specific variables in specific lines, and moving anything in this section could break it. +DO NOT change anything in this section unless you know what you are doing. The DAO dashboard generation script in .dao/ relies on the variables in this section being on specific lines. Moving anything in this section may break the script. *****************************************/ -var timeframeSeries = []; -var supplySeries = []; +var timeframeSeries = ["Oct '17", "Nov '17", "Dec '17", "Jan '18", "Feb '18", "Mar '18", "Apr '18", "May '18", "Jun '18", "Jul '18", "Aug '18", "Sep '18", "Oct '18", "Nov '18", "Dec '18", "Jan '19", "Feb '19", "Mar '19", "Cycle 1", "Cycle 2", "Cycle 3", "Cycle 4", "Cycle 5", "Cycle 6", "Cycle 7", "Cycle 8", "Cycle 9", "Cycle 10", "Cycle 11", "Cycle 12", "Cycle 13", "Cycle 14", "Cycle 15", "Cycle 16", "Cycle 17", "Cycle 18", "Cycle 19", "Cycle 20", "Cycle 21", "Cycle 22", "Cycle 23", "Cycle 24", "Cycle 25", "Cycle 26", "Cycle 27", "Cycle 28"]; +var supplySeries = [2548500, 2620250, 2671850, 2722950, 2769150, 2806330, 2830832, 2868164, 2889799, 2934231, 2971823, 3018665, 3052400, 3272927, 3344765, 3406635, 3520705, 3657480, 3725401, 3745416, 3754644, 3741533, 3787332, 3853479, 3911674, 3983249, 3947199, 3976439, 4011891, 4031419, 3999914, 4111364, 4209085, 4212558, 4307371, 4293056, 4314461, 4226632, 4499355, 4465470, 4411268, 4426299, 4349993, 4372374, 4318977, 4332826]; /****************************************/ From a42ddc18dd9d29a2c22912a0202db2ce75422466 Mon Sep 17 00:00:00 2001 From: m52go <735155+m52go@users.noreply.github.com> Date: Wed, 27 Oct 2021 08:19:28 -0400 Subject: [PATCH 08/21] Add forkawesome for dashboard icons --- css/fork-awesome.min.css | 12 + dashboard.html | 1 + fonts/forkawesome-webfont.eot | Bin 0 -> 188946 bytes fonts/forkawesome-webfont.svg | 2849 +++++++++++++++++++++++++++++++ fonts/forkawesome-webfont.ttf | Bin 0 -> 188756 bytes fonts/forkawesome-webfont.woff | Bin 0 -> 115148 bytes fonts/forkawesome-webfont.woff2 | Bin 0 -> 91624 bytes 7 files changed, 2862 insertions(+) create mode 100644 css/fork-awesome.min.css create mode 100644 fonts/forkawesome-webfont.eot create mode 100644 fonts/forkawesome-webfont.svg create mode 100644 fonts/forkawesome-webfont.ttf create mode 100644 fonts/forkawesome-webfont.woff create mode 100644 fonts/forkawesome-webfont.woff2 diff --git a/css/fork-awesome.min.css b/css/fork-awesome.min.css new file mode 100644 index 00000000..ea68005b --- /dev/null +++ b/css/fork-awesome.min.css @@ -0,0 +1,12 @@ +/*! +Fork Awesome 1.2.0 +License - https://forkaweso.me/Fork-Awesome/license + +Copyright 2018 Dave Gandy & Fork Awesome + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + */@font-face{font-family:ForkAwesome;src:url(../fonts/forkawesome-webfont.eot?v=1.2.0);src:url(../fonts/forkawesome-webfont.eot?#iefix&v=1.2.0) format('embedded-opentype'),url(../fonts/forkawesome-webfont.woff2?v=1.2.0) format('woff2'),url(../fonts/forkawesome-webfont.woff?v=1.2.0) format('woff'),url(../fonts/forkawesome-webfont.ttf?v=1.2.0) format('truetype'),url(../fonts/forkawesome-webfont.svg?v=1.2.0#forkawesomeregular) format('svg');font-weight:400;font-style:normal;font-display:block}.fa{display:inline-block;font:normal normal normal 14px/1 ForkAwesome;font-size:inherit;text-rendering:auto;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.fa-lg{font-size:1.33333333em;line-height:.75em;vertical-align:-15%}.fa-2x{font-size:2em}.fa-3x{font-size:3em}.fa-4x{font-size:4em}.fa-5x{font-size:5em}.fa-fw{width:1.28571429em;text-align:center}.fa-ul{padding-left:0;margin-left:2.14285714em;list-style-type:none}.fa-ul>li{position:relative}.fa-li{position:absolute;left:-2.14285714em;width:2.14285714em;top:.14285714em;text-align:center}.fa-li.fa-lg{left:-1.85714286em}.fa-border{padding:.2em .25em .15em;border:solid .08em #eee;border-radius:.1em}.fa-pull-left{float:left}.fa-pull-right{float:right}.fa.fa-pull-left{margin-right:.3em}.fa.fa-pull-right{margin-left:.3em}.pull-right{float:right}.pull-left{float:left}.fa.pull-left{margin-right:.3em}.fa.pull-right{margin-left:.3em}.fa-spin{-webkit-animation:fa-spin 2s infinite linear;animation:fa-spin 2s infinite linear}.fa-pulse{-webkit-animation:fa-spin 1s infinite steps(8);animation:fa-spin 1s infinite steps(8)}@-webkit-keyframes fa-spin{0%{-webkit-transform:rotate(0);transform:rotate(0)}100%{-webkit-transform:rotate(359deg);transform:rotate(359deg)}}@keyframes fa-spin{0%{-webkit-transform:rotate(0);transform:rotate(0)}100%{-webkit-transform:rotate(359deg);transform:rotate(359deg)}}.fa-rotate-90{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=1)";-webkit-transform:rotate(90deg);-ms-transform:rotate(90deg);transform:rotate(90deg)}.fa-rotate-180{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=2)";-webkit-transform:rotate(180deg);-ms-transform:rotate(180deg);transform:rotate(180deg)}.fa-rotate-270{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=3)";-webkit-transform:rotate(270deg);-ms-transform:rotate(270deg);transform:rotate(270deg)}.fa-flip-horizontal{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=0, mirror=1)";-webkit-transform:scale(-1,1);-ms-transform:scale(-1,1);transform:scale(-1,1)}.fa-flip-vertical{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=2, mirror=1)";-webkit-transform:scale(1,-1);-ms-transform:scale(1,-1);transform:scale(1,-1)}:root .fa-flip-horizontal,:root .fa-flip-vertical,:root .fa-rotate-180,:root .fa-rotate-270,:root .fa-rotate-90{filter:none}.fa-stack{position:relative;display:inline-block;width:2em;height:2em;line-height:2em;vertical-align:middle}.fa-stack-1x,.fa-stack-2x{position:absolute;left:0;width:100%;text-align:center}.fa-stack-1x{line-height:inherit}.fa-stack-2x{font-size:2em}.fa-inverse{color:#fff}.fa-glass:before{content:"\f000"}.fa-music:before{content:"\f001"}.fa-search:before{content:"\f002"}.fa-envelope-o:before{content:"\f003"}.fa-heart:before{content:"\f004"}.fa-star:before{content:"\f005"}.fa-star-o:before{content:"\f006"}.fa-user:before{content:"\f007"}.fa-film:before{content:"\f008"}.fa-th-large:before{content:"\f009"}.fa-th:before{content:"\f00a"}.fa-th-list:before{content:"\f00b"}.fa-check:before{content:"\f00c"}.fa-close:before,.fa-remove:before,.fa-times:before{content:"\f00d"}.fa-search-plus:before{content:"\f00e"}.fa-search-minus:before{content:"\f010"}.fa-power-off:before{content:"\f011"}.fa-signal:before{content:"\f012"}.fa-cog:before,.fa-gear:before{content:"\f013"}.fa-trash-o:before{content:"\f014"}.fa-home:before{content:"\f015"}.fa-file-o:before{content:"\f016"}.fa-clock-o:before{content:"\f017"}.fa-road:before{content:"\f018"}.fa-download:before{content:"\f019"}.fa-arrow-circle-o-down:before{content:"\f01a"}.fa-arrow-circle-o-up:before{content:"\f01b"}.fa-inbox:before{content:"\f01c"}.fa-play-circle-o:before{content:"\f01d"}.fa-repeat:before,.fa-rotate-right:before{content:"\f01e"}.fa-refresh:before,.fa-sync:before{content:"\f021"}.fa-list-alt:before{content:"\f022"}.fa-lock:before{content:"\f023"}.fa-flag:before{content:"\f024"}.fa-headphones:before{content:"\f025"}.fa-volume-off:before{content:"\f026"}.fa-volume-down:before{content:"\f027"}.fa-volume-up:before{content:"\f028"}.fa-qrcode:before{content:"\f029"}.fa-barcode:before{content:"\f02a"}.fa-tag:before{content:"\f02b"}.fa-tags:before{content:"\f02c"}.fa-book:before{content:"\f02d"}.fa-bookmark:before{content:"\f02e"}.fa-print:before{content:"\f02f"}.fa-camera:before{content:"\f030"}.fa-font:before{content:"\f031"}.fa-bold:before{content:"\f032"}.fa-italic:before{content:"\f033"}.fa-text-height:before{content:"\f034"}.fa-text-width:before{content:"\f035"}.fa-align-left:before{content:"\f036"}.fa-align-center:before{content:"\f037"}.fa-align-right:before{content:"\f038"}.fa-align-justify:before{content:"\f039"}.fa-list:before{content:"\f03a"}.fa-dedent:before,.fa-outdent:before{content:"\f03b"}.fa-indent:before{content:"\f03c"}.fa-video-camera:before,.fa-video:before{content:"\f03d"}.fa-image:before,.fa-photo:before,.fa-picture-o:before{content:"\f03e"}.fa-pencil:before{content:"\f040"}.fa-map-marker:before{content:"\f041"}.fa-adjust:before{content:"\f042"}.fa-tint:before{content:"\f043"}.fa-edit:before,.fa-pencil-square-o:before{content:"\f044"}.fa-share-square-o:before{content:"\f045"}.fa-check-square-o:before{content:"\f046"}.fa-arrows:before{content:"\f047"}.fa-step-backward:before{content:"\f048"}.fa-fast-backward:before{content:"\f049"}.fa-backward:before{content:"\f04a"}.fa-play:before{content:"\f04b"}.fa-pause:before{content:"\f04c"}.fa-stop:before{content:"\f04d"}.fa-forward:before{content:"\f04e"}.fa-fast-forward:before{content:"\f050"}.fa-step-forward:before{content:"\f051"}.fa-eject:before{content:"\f052"}.fa-chevron-left:before{content:"\f053"}.fa-chevron-right:before{content:"\f054"}.fa-plus-circle:before{content:"\f055"}.fa-minus-circle:before{content:"\f056"}.fa-times-circle:before{content:"\f057"}.fa-check-circle:before{content:"\f058"}.fa-question-circle:before{content:"\f059"}.fa-info-circle:before{content:"\f05a"}.fa-crosshairs:before{content:"\f05b"}.fa-times-circle-o:before{content:"\f05c"}.fa-check-circle-o:before{content:"\f05d"}.fa-ban:before{content:"\f05e"}.fa-arrow-left:before{content:"\f060"}.fa-arrow-right:before{content:"\f061"}.fa-arrow-up:before{content:"\f062"}.fa-arrow-down:before{content:"\f063"}.fa-mail-forward:before,.fa-share:before{content:"\f064"}.fa-expand:before{content:"\f065"}.fa-compress:before{content:"\f066"}.fa-plus:before{content:"\f067"}.fa-minus:before{content:"\f068"}.fa-asterisk:before{content:"\f069"}.fa-exclamation-circle:before{content:"\f06a"}.fa-gift:before{content:"\f06b"}.fa-leaf:before{content:"\f06c"}.fa-fire:before{content:"\f06d"}.fa-eye:before{content:"\f06e"}.fa-eye-slash:before{content:"\f070"}.fa-exclamation-triangle:before,.fa-warning:before{content:"\f071"}.fa-plane:before{content:"\f072"}.fa-calendar:before{content:"\f073"}.fa-random:before{content:"\f074"}.fa-comment:before{content:"\f075"}.fa-magnet:before{content:"\f076"}.fa-chevron-up:before{content:"\f077"}.fa-chevron-down:before{content:"\f078"}.fa-retweet:before{content:"\f079"}.fa-shopping-cart:before{content:"\f07a"}.fa-folder:before{content:"\f07b"}.fa-folder-open:before{content:"\f07c"}.fa-arrows-v:before{content:"\f07d"}.fa-arrows-h:before{content:"\f07e"}.fa-bar-chart-o:before,.fa-bar-chart:before{content:"\f080"}.fa-twitter-square:before{content:"\f081"}.fa-facebook-square:before{content:"\f082"}.fa-camera-retro:before{content:"\f083"}.fa-key:before{content:"\f084"}.fa-cogs:before,.fa-gears:before{content:"\f085"}.fa-comments:before{content:"\f086"}.fa-thumbs-o-up:before{content:"\f087"}.fa-thumbs-o-down:before{content:"\f088"}.fa-star-half:before{content:"\f089"}.fa-heart-o:before{content:"\f08a"}.fa-sign-out:before{content:"\f08b"}.fa-linkedin-square:before{content:"\f08c"}.fa-thumb-tack:before{content:"\f08d"}.fa-external-link:before{content:"\f08e"}.fa-sign-in:before{content:"\f090"}.fa-trophy:before{content:"\f091"}.fa-github-square:before{content:"\f092"}.fa-upload:before{content:"\f093"}.fa-lemon-o:before{content:"\f094"}.fa-phone:before{content:"\f095"}.fa-square-o:before{content:"\f096"}.fa-bookmark-o:before{content:"\f097"}.fa-phone-square:before{content:"\f098"}.fa-twitter:before{content:"\f099"}.fa-facebook-f:before,.fa-facebook:before{content:"\f09a"}.fa-github:before{content:"\f09b"}.fa-unlock:before{content:"\f09c"}.fa-credit-card:before{content:"\f09d"}.fa-feed:before,.fa-rss:before{content:"\f09e"}.fa-hdd-o:before{content:"\f0a0"}.fa-bullhorn:before{content:"\f0a1"}.fa-bell-o:before{content:"\f0f3"}.fa-certificate:before{content:"\f0a3"}.fa-hand-o-right:before{content:"\f0a4"}.fa-hand-o-left:before{content:"\f0a5"}.fa-hand-o-up:before{content:"\f0a6"}.fa-hand-o-down:before{content:"\f0a7"}.fa-arrow-circle-left:before{content:"\f0a8"}.fa-arrow-circle-right:before{content:"\f0a9"}.fa-arrow-circle-up:before{content:"\f0aa"}.fa-arrow-circle-down:before{content:"\f0ab"}.fa-globe:before{content:"\f0ac"}.fa-globe-e:before{content:"\f304"}.fa-globe-w:before{content:"\f305"}.fa-wrench:before{content:"\f0ad"}.fa-tasks:before{content:"\f0ae"}.fa-filter:before{content:"\f0b0"}.fa-briefcase:before{content:"\f0b1"}.fa-arrows-alt:before{content:"\f0b2"}.fa-community:before,.fa-group:before,.fa-users:before{content:"\f0c0"}.fa-chain:before,.fa-link:before{content:"\f0c1"}.fa-cloud:before{content:"\f0c2"}.fa-flask:before{content:"\f0c3"}.fa-cut:before,.fa-scissors:before{content:"\f0c4"}.fa-copy:before,.fa-files-o:before{content:"\f0c5"}.fa-paperclip:before{content:"\f0c6"}.fa-floppy-o:before,.fa-save:before{content:"\f0c7"}.fa-square:before{content:"\f0c8"}.fa-bars:before,.fa-navicon:before,.fa-reorder:before{content:"\f0c9"}.fa-list-ul:before{content:"\f0ca"}.fa-list-ol:before{content:"\f0cb"}.fa-strikethrough:before{content:"\f0cc"}.fa-underline:before{content:"\f0cd"}.fa-table:before{content:"\f0ce"}.fa-magic:before{content:"\f0d0"}.fa-truck:before{content:"\f0d1"}.fa-pinterest:before{content:"\f0d2"}.fa-pinterest-square:before{content:"\f0d3"}.fa-google-plus-square:before{content:"\f0d4"}.fa-google-plus-g:before,.fa-google-plus:before{content:"\f0d5"}.fa-money:before{content:"\f0d6"}.fa-caret-down:before{content:"\f0d7"}.fa-caret-up:before{content:"\f0d8"}.fa-caret-left:before{content:"\f0d9"}.fa-caret-right:before{content:"\f0da"}.fa-columns:before{content:"\f0db"}.fa-sort:before,.fa-unsorted:before{content:"\f0dc"}.fa-sort-desc:before,.fa-sort-down:before{content:"\f0dd"}.fa-sort-asc:before,.fa-sort-up:before{content:"\f0de"}.fa-envelope:before{content:"\f0e0"}.fa-linkedin:before{content:"\f0e1"}.fa-rotate-left:before,.fa-undo:before{content:"\f0e2"}.fa-gavel:before,.fa-legal:before{content:"\f0e3"}.fa-dashboard:before,.fa-tachometer:before{content:"\f0e4"}.fa-comment-o:before{content:"\f0e5"}.fa-comments-o:before{content:"\f0e6"}.fa-bolt:before,.fa-flash:before{content:"\f0e7"}.fa-sitemap:before{content:"\f0e8"}.fa-umbrella:before{content:"\f0e9"}.fa-clipboard:before,.fa-paste:before{content:"\f0ea"}.fa-lightbulb-o:before{content:"\f0eb"}.fa-exchange:before{content:"\f0ec"}.fa-cloud-download:before{content:"\f0ed"}.fa-cloud-upload:before{content:"\f0ee"}.fa-user-md:before{content:"\f0f0"}.fa-stethoscope:before{content:"\f0f1"}.fa-suitcase:before{content:"\f0f2"}.fa-bell:before{content:"\f0a2"}.fa-coffee:before{content:"\f0f4"}.fa-cutlery:before,.fa-utensils:before{content:"\f0f5"}.fa-file-text-o:before{content:"\f0f6"}.fa-building-o:before{content:"\f0f7"}.fa-hospital-o:before{content:"\f0f8"}.fa-ambulance:before{content:"\f0f9"}.fa-medkit:before{content:"\f0fa"}.fa-fighter-jet:before{content:"\f0fb"}.fa-beer:before{content:"\f0fc"}.fa-h-square:before{content:"\f0fd"}.fa-plus-square:before{content:"\f0fe"}.fa-angle-double-left:before{content:"\f100"}.fa-angle-double-right:before{content:"\f101"}.fa-angle-double-up:before{content:"\f102"}.fa-angle-double-down:before{content:"\f103"}.fa-angle-left:before{content:"\f104"}.fa-angle-right:before{content:"\f105"}.fa-angle-up:before{content:"\f106"}.fa-angle-down:before{content:"\f107"}.fa-desktop:before{content:"\f108"}.fa-laptop:before{content:"\f109"}.fa-tablet:before{content:"\f10a"}.fa-mobile-phone:before,.fa-mobile:before{content:"\f10b"}.fa-circle-o:before{content:"\f10c"}.fa-quote-left:before{content:"\f10d"}.fa-quote-right:before{content:"\f10e"}.fa-spinner:before{content:"\f110"}.fa-circle:before{content:"\f111"}.fa-mail-reply:before,.fa-reply:before{content:"\f112"}.fa-github-alt:before{content:"\f113"}.fa-folder-o:before{content:"\f114"}.fa-folder-open-o:before{content:"\f115"}.fa-smile-o:before{content:"\f118"}.fa-frown-o:before{content:"\f119"}.fa-meh-o:before{content:"\f11a"}.fa-gamepad:before{content:"\f11b"}.fa-keyboard-o:before{content:"\f11c"}.fa-flag-o:before{content:"\f11d"}.fa-flag-checkered:before{content:"\f11e"}.fa-terminal:before{content:"\f120"}.fa-code:before{content:"\f121"}.fa-mail-reply-all:before,.fa-reply-all:before{content:"\f122"}.fa-star-half-empty:before,.fa-star-half-full:before,.fa-star-half-o:before{content:"\f123"}.fa-location-arrow:before{content:"\f124"}.fa-crop:before{content:"\f125"}.fa-code-fork:before{content:"\f126"}.fa-chain-broken:before,.fa-unlink:before{content:"\f127"}.fa-question:before{content:"\f128"}.fa-info:before{content:"\f129"}.fa-exclamation:before{content:"\f12a"}.fa-superscript:before{content:"\f12b"}.fa-subscript:before{content:"\f12c"}.fa-eraser:before{content:"\f12d"}.fa-puzzle-piece:before{content:"\f12e"}.fa-microphone:before{content:"\f130"}.fa-microphone-slash:before{content:"\f131"}.fa-shield:before{content:"\f132"}.fa-calendar-o:before{content:"\f133"}.fa-fire-extinguisher:before{content:"\f134"}.fa-rocket:before{content:"\f135"}.fa-maxcdn:before{content:"\f136"}.fa-chevron-circle-left:before{content:"\f137"}.fa-chevron-circle-right:before{content:"\f138"}.fa-chevron-circle-up:before{content:"\f139"}.fa-chevron-circle-down:before{content:"\f13a"}.fa-html5:before{content:"\f13b"}.fa-css3:before{content:"\f13c"}.fa-anchor:before{content:"\f13d"}.fa-unlock-alt:before{content:"\f13e"}.fa-bullseye:before{content:"\f140"}.fa-ellipsis-h:before{content:"\f141"}.fa-ellipsis-v:before{content:"\f142"}.fa-rss-square:before{content:"\f143"}.fa-play-circle:before{content:"\f144"}.fa-ticket:before{content:"\f145"}.fa-minus-square:before{content:"\f146"}.fa-minus-square-o:before{content:"\f147"}.fa-level-up:before{content:"\f148"}.fa-level-down:before{content:"\f149"}.fa-check-square:before{content:"\f14a"}.fa-pencil-square:before{content:"\f14b"}.fa-external-link-square:before{content:"\f14c"}.fa-share-square:before{content:"\f14d"}.fa-compass:before{content:"\f14e"}.fa-caret-square-o-down:before,.fa-toggle-down:before{content:"\f150"}.fa-caret-square-o-up:before,.fa-toggle-up:before{content:"\f151"}.fa-caret-square-o-right:before,.fa-toggle-right:before{content:"\f152"}.fa-eur:before,.fa-euro:before{content:"\f153"}.fa-gbp:before,.fa-pound:before{content:"\f154"}.fa-dollar:before,.fa-usd:before{content:"\f155"}.fa-inr:before,.fa-rupee:before{content:"\f156"}.fa-cny:before,.fa-jpy:before,.fa-rmb:before,.fa-yen:before{content:"\f157"}.fa-rouble:before,.fa-rub:before,.fa-ruble:before{content:"\f158"}.fa-krw:before,.fa-won:before{content:"\f159"}.fa-bitcoin:before,.fa-btc:before{content:"\f15a"}.fa-file:before{content:"\f15b"}.fa-file-text:before{content:"\f15c"}.fa-sort-alpha-asc:before,.fa-sort-alpha-down:before{content:"\f15d"}.fa-sort-alpha-desc:before,.fa-sort-alpha-up:before{content:"\f15e"}.fa-sort-amount-asc:before,.fa-sort-amount-down:before{content:"\f160"}.fa-sort-amount-desc:before,.fa-sort-amount-up:before{content:"\f161"}.fa-sort-numeric-asc:before,.fa-sort-numeric-down:before{content:"\f162"}.fa-sort-numeric-desc:before,.fa-sort-numeric-up:before{content:"\f163"}.fa-thumbs-up:before{content:"\f164"}.fa-thumbs-down:before{content:"\f165"}.fa-youtube-square:before{content:"\f166"}.fa-youtube:before{content:"\f167"}.fa-xing:before{content:"\f168"}.fa-xing-square:before{content:"\f169"}.fa-youtube-play:before{content:"\f16a"}.fa-dropbox:before{content:"\f16b"}.fa-stack-overflow:before{content:"\f16c"}.fa-instagram:before{content:"\f16d"}.fa-flickr:before{content:"\f16e"}.fa-adn:before{content:"\f170"}.fa-bitbucket:before{content:"\f171"}.fa-bitbucket-square:before{content:"\f172"}.fa-tumblr:before{content:"\f173"}.fa-tumblr-square:before{content:"\f174"}.fa-long-arrow-down:before{content:"\f175"}.fa-long-arrow-up:before{content:"\f176"}.fa-long-arrow-left:before{content:"\f177"}.fa-long-arrow-right:before{content:"\f178"}.fa-apple:before{content:"\f179"}.fa-windows:before{content:"\f17a"}.fa-android:before{content:"\f17b"}.fa-linux:before{content:"\f17c"}.fa-dribbble:before{content:"\f17d"}.fa-skype:before{content:"\f17e"}.fa-foursquare:before{content:"\f180"}.fa-trello:before{content:"\f181"}.fa-female:before{content:"\f182"}.fa-male:before{content:"\f183"}.fa-gittip:before,.fa-gratipay:before{content:"\f184"}.fa-sun-o:before{content:"\f185"}.fa-moon-o:before{content:"\f186"}.fa-archive:before{content:"\f187"}.fa-bug:before{content:"\f188"}.fa-vk:before{content:"\f189"}.fa-weibo:before{content:"\f18a"}.fa-renren:before{content:"\f18b"}.fa-pagelines:before{content:"\f18c"}.fa-stack-exchange:before{content:"\f18d"}.fa-arrow-circle-o-right:before{content:"\f18e"}.fa-arrow-circle-o-left:before{content:"\f190"}.fa-caret-square-o-left:before,.fa-toggle-left:before{content:"\f191"}.fa-dot-circle-o:before{content:"\f192"}.fa-wheelchair:before{content:"\f193"}.fa-vimeo-square:before{content:"\f194"}.fa-try:before,.fa-turkish-lira:before{content:"\f195"}.fa-plus-square-o:before{content:"\f196"}.fa-space-shuttle:before{content:"\f197"}.fa-slack:before{content:"\f198"}.fa-envelope-square:before{content:"\f199"}.fa-wordpress:before{content:"\f19a"}.fa-openid:before{content:"\f19b"}.fa-bank:before,.fa-institution:before,.fa-university:before{content:"\f19c"}.fa-graduation-cap:before,.fa-mortar-board:before{content:"\f19d"}.fa-yahoo:before{content:"\f19e"}.fa-google:before{content:"\f1a0"}.fa-reddit:before{content:"\f1a1"}.fa-reddit-square:before{content:"\f1a2"}.fa-stumbleupon-circle:before{content:"\f1a3"}.fa-stumbleupon:before{content:"\f1a4"}.fa-delicious:before{content:"\f1a5"}.fa-digg:before{content:"\f1a6"}.fa-drupal:before{content:"\f1a9"}.fa-joomla:before{content:"\f1aa"}.fa-language:before{content:"\f1ab"}.fa-fax:before{content:"\f1ac"}.fa-building:before{content:"\f1ad"}.fa-child:before{content:"\f1ae"}.fa-paw:before{content:"\f1b0"}.fa-spoon:before,.fa-utensil-spoon:before{content:"\f1b1"}.fa-cube:before{content:"\f1b2"}.fa-cubes:before{content:"\f1b3"}.fa-behance:before{content:"\f1b4"}.fa-behance-square:before{content:"\f1b5"}.fa-steam:before{content:"\f1b6"}.fa-steam-square:before{content:"\f1b7"}.fa-recycle:before{content:"\f1b8"}.fa-automobile:before,.fa-car:before{content:"\f1b9"}.fa-cab:before,.fa-taxi:before{content:"\f1ba"}.fa-tree:before{content:"\f1bb"}.fa-spotify:before{content:"\f1bc"}.fa-deviantart:before{content:"\f1bd"}.fa-soundcloud:before{content:"\f1be"}.fa-database:before{content:"\f1c0"}.fa-file-pdf-o:before{content:"\f1c1"}.fa-file-word-o:before{content:"\f1c2"}.fa-file-excel-o:before{content:"\f1c3"}.fa-file-powerpoint-o:before{content:"\f1c4"}.fa-file-image-o:before,.fa-file-photo-o:before,.fa-file-picture-o:before{content:"\f1c5"}.fa-file-archive-o:before,.fa-file-zip-o:before{content:"\f1c6"}.fa-file-audio-o:before,.fa-file-sound-o:before{content:"\f1c7"}.fa-file-movie-o:before,.fa-file-video-o:before{content:"\f1c8"}.fa-file-code-o:before{content:"\f1c9"}.fa-vine:before{content:"\f1ca"}.fa-codepen:before{content:"\f1cb"}.fa-jsfiddle:before{content:"\f1cc"}.fa-life-bouy:before,.fa-life-buoy:before,.fa-life-ring:before,.fa-life-saver:before,.fa-support:before{content:"\f1cd"}.fa-circle-o-notch:before{content:"\f1ce"}.fa-ra:before,.fa-rebel:before,.fa-resistance:before{content:"\f1d0"}.fa-empire:before,.fa-ge:before{content:"\f1d1"}.fa-git-square:before{content:"\f1d2"}.fa-git:before{content:"\f1d3"}.fa-hacker-news:before,.fa-y-combinator-square:before,.fa-yc-square:before{content:"\f1d4"}.fa-tencent-weibo:before{content:"\f1d5"}.fa-qq:before{content:"\f1d6"}.fa-wechat:before,.fa-weixin:before{content:"\f1d7"}.fa-paper-plane:before,.fa-send:before{content:"\f1d8"}.fa-paper-plane-o:before,.fa-send-o:before{content:"\f1d9"}.fa-history:before{content:"\f1da"}.fa-circle-thin:before{content:"\f1db"}.fa-header:before,.fa-heading:before{content:"\f1dc"}.fa-paragraph:before{content:"\f1dd"}.fa-sliders:before{content:"\f1de"}.fa-share-alt:before{content:"\f1e0"}.fa-share-alt-square:before{content:"\f1e1"}.fa-bomb:before{content:"\f1e2"}.fa-futbol-o:before,.fa-soccer-ball-o:before{content:"\f1e3"}.fa-tty:before{content:"\f1e4"}.fa-binoculars:before{content:"\f1e5"}.fa-plug:before{content:"\f1e6"}.fa-slideshare:before{content:"\f1e7"}.fa-twitch:before{content:"\f1e8"}.fa-yelp:before{content:"\f1e9"}.fa-newspaper-o:before{content:"\f1ea"}.fa-wifi:before{content:"\f1eb"}.fa-calculator:before{content:"\f1ec"}.fa-paypal:before{content:"\f1ed"}.fa-google-wallet:before{content:"\f1ee"}.fa-cc-visa:before{content:"\f1f0"}.fa-cc-mastercard:before{content:"\f1f1"}.fa-cc-discover:before{content:"\f1f2"}.fa-cc-amex:before{content:"\f1f3"}.fa-cc-paypal:before{content:"\f1f4"}.fa-cc-stripe:before{content:"\f1f5"}.fa-bell-slash:before{content:"\f1f6"}.fa-bell-slash-o:before{content:"\f1f7"}.fa-trash:before{content:"\f1f8"}.fa-copyright:before{content:"\f1f9"}.fa-at:before{content:"\f1fa"}.fa-eyedropper:before{content:"\f1fb"}.fa-paint-brush:before{content:"\f1fc"}.fa-birthday-cake:before{content:"\f1fd"}.fa-area-chart:before{content:"\f1fe"}.fa-pie-chart:before{content:"\f200"}.fa-line-chart:before{content:"\f201"}.fa-lastfm:before{content:"\f202"}.fa-lastfm-square:before{content:"\f203"}.fa-toggle-off:before{content:"\f204"}.fa-toggle-on:before{content:"\f205"}.fa-bicycle:before{content:"\f206"}.fa-bus:before{content:"\f207"}.fa-ioxhost:before{content:"\f208"}.fa-angellist:before{content:"\f209"}.fa-cc:before,.fa-closed-captioning:before{content:"\f20a"}.fa-ils:before,.fa-shekel:before,.fa-sheqel:before{content:"\f20b"}.fa-meanpath:before{content:"\f20c"}.fa-buysellads:before{content:"\f20d"}.fa-connectdevelop:before{content:"\f20e"}.fa-dashcube:before{content:"\f210"}.fa-forumbee:before{content:"\f211"}.fa-leanpub:before{content:"\f212"}.fa-sellsy:before{content:"\f213"}.fa-shirtsinbulk:before{content:"\f214"}.fa-simplybuilt:before{content:"\f215"}.fa-skyatlas:before{content:"\f216"}.fa-cart-plus:before{content:"\f217"}.fa-cart-arrow-down:before{content:"\f218"}.fa-diamond:before,.fa-gem:before{content:"\f219"}.fa-ship:before{content:"\f21a"}.fa-user-secret:before{content:"\f21b"}.fa-motorcycle:before{content:"\f21c"}.fa-street-view:before{content:"\f21d"}.fa-heartbeat:before{content:"\f21e"}.fa-venus:before{content:"\f221"}.fa-mars:before{content:"\f222"}.fa-mercury:before{content:"\f223"}.fa-intersex:before,.fa-transgender:before{content:"\f224"}.fa-transgender-alt:before{content:"\f225"}.fa-venus-double:before{content:"\f226"}.fa-mars-double:before{content:"\f227"}.fa-venus-mars:before{content:"\f228"}.fa-mars-stroke:before{content:"\f229"}.fa-mars-stroke-v:before{content:"\f22a"}.fa-mars-stroke-h:before{content:"\f22b"}.fa-neuter:before{content:"\f22c"}.fa-genderless:before{content:"\f22d"}.fa-facebook-official:before{content:"\f230"}.fa-pinterest-p:before{content:"\f231"}.fa-whatsapp:before{content:"\f232"}.fa-server:before{content:"\f233"}.fa-user-plus:before{content:"\f234"}.fa-user-times:before{content:"\f235"}.fa-bed:before,.fa-hotel:before{content:"\f236"}.fa-viacoin:before{content:"\f237"}.fa-train:before{content:"\f238"}.fa-subway:before{content:"\f239"}.fa-medium:before{content:"\f23a"}.fa-medium-square:before{content:"\f2f8"}.fa-y-combinator:before,.fa-yc:before{content:"\f23b"}.fa-optin-monster:before{content:"\f23c"}.fa-opencart:before{content:"\f23d"}.fa-expeditedssl:before{content:"\f23e"}.fa-battery-4:before,.fa-battery-full:before,.fa-battery:before{content:"\f240"}.fa-battery-3:before,.fa-battery-three-quarters:before{content:"\f241"}.fa-battery-2:before,.fa-battery-half:before{content:"\f242"}.fa-battery-1:before,.fa-battery-quarter:before{content:"\f243"}.fa-battery-0:before,.fa-battery-empty:before{content:"\f244"}.fa-mouse-pointer:before{content:"\f245"}.fa-i-cursor:before{content:"\f246"}.fa-object-group:before{content:"\f247"}.fa-object-ungroup:before{content:"\f248"}.fa-sticky-note:before{content:"\f249"}.fa-sticky-note-o:before{content:"\f24a"}.fa-cc-jcb:before{content:"\f24b"}.fa-cc-diners-club:before{content:"\f24c"}.fa-clone:before{content:"\f24d"}.fa-balance-scale:before{content:"\f24e"}.fa-hourglass-o:before{content:"\f250"}.fa-hourglass-1:before,.fa-hourglass-start:before{content:"\f251"}.fa-hourglass-2:before,.fa-hourglass-half:before{content:"\f252"}.fa-hourglass-3:before,.fa-hourglass-end:before{content:"\f253"}.fa-hourglass:before{content:"\f254"}.fa-hand-grab-o:before,.fa-hand-rock-o:before{content:"\f255"}.fa-hand-paper-o:before,.fa-hand-stop-o:before{content:"\f256"}.fa-hand-scissors-o:before{content:"\f257"}.fa-hand-lizard-o:before{content:"\f258"}.fa-hand-spock-o:before{content:"\f259"}.fa-hand-pointer-o:before{content:"\f25a"}.fa-hand-peace-o:before{content:"\f25b"}.fa-trademark:before{content:"\f25c"}.fa-registered:before{content:"\f25d"}.fa-creative-commons:before{content:"\f25e"}.fa-gg:before{content:"\f260"}.fa-gg-circle:before{content:"\f261"}.fa-tripadvisor:before{content:"\f262"}.fa-odnoklassniki:before{content:"\f263"}.fa-odnoklassniki-square:before{content:"\f264"}.fa-get-pocket:before{content:"\f265"}.fa-wikipedia-w:before{content:"\f266"}.fa-safari:before{content:"\f267"}.fa-chrome:before{content:"\f268"}.fa-firefox:before{content:"\f269"}.fa-opera:before{content:"\f26a"}.fa-internet-explorer:before{content:"\f26b"}.fa-television:before,.fa-tv:before{content:"\f26c"}.fa-contao:before{content:"\f26d"}.fa-500px:before{content:"\f26e"}.fa-amazon:before{content:"\f270"}.fa-calendar-plus-o:before{content:"\f271"}.fa-calendar-minus-o:before{content:"\f272"}.fa-calendar-times-o:before{content:"\f273"}.fa-calendar-check-o:before{content:"\f274"}.fa-industry:before{content:"\f275"}.fa-map-pin:before{content:"\f276"}.fa-map-signs:before{content:"\f277"}.fa-map-o:before{content:"\f278"}.fa-map:before{content:"\f279"}.fa-commenting:before{content:"\f27a"}.fa-commenting-o:before{content:"\f27b"}.fa-houzz:before{content:"\f27c"}.fa-vimeo-v:before,.fa-vimeo:before{content:"\f27d"}.fa-black-tie:before{content:"\f27e"}.fa-fonticons:before{content:"\f280"}.fa-reddit-alien:before{content:"\f281"}.fa-edge:before{content:"\f282"}.fa-credit-card-alt:before{content:"\f283"}.fa-codiepie:before{content:"\f284"}.fa-modx:before{content:"\f285"}.fa-fort-awesome:before{content:"\f286"}.fa-usb:before{content:"\f287"}.fa-product-hunt:before{content:"\f288"}.fa-mixcloud:before{content:"\f289"}.fa-scribd:before{content:"\f28a"}.fa-pause-circle:before{content:"\f28b"}.fa-pause-circle-o:before{content:"\f28c"}.fa-stop-circle:before{content:"\f28d"}.fa-stop-circle-o:before{content:"\f28e"}.fa-shopping-bag:before{content:"\f290"}.fa-shopping-basket:before{content:"\f291"}.fa-hashtag:before{content:"\f292"}.fa-bluetooth:before{content:"\f293"}.fa-bluetooth-b:before{content:"\f294"}.fa-percent:before{content:"\f295"}.fa-gitlab:before{content:"\f296"}.fa-wpbeginner:before{content:"\f297"}.fa-wpforms:before{content:"\f298"}.fa-envira:before{content:"\f299"}.fa-universal-access:before{content:"\f29a"}.fa-wheelchair-alt:before{content:"\f29b"}.fa-question-circle-o:before{content:"\f29c"}.fa-blind:before{content:"\f29d"}.fa-audio-description:before{content:"\f29e"}.fa-phone-volume:before,.fa-volume-control-phone:before{content:"\f2a0"}.fa-braille:before{content:"\f2a1"}.fa-assistive-listening-systems:before{content:"\f2a2"}.fa-american-sign-language-interpreting:before,.fa-asl-interpreting:before{content:"\f2a3"}.fa-deaf:before,.fa-deafness:before,.fa-hard-of-hearing:before{content:"\f2a4"}.fa-glide:before{content:"\f2a5"}.fa-glide-g:before{content:"\f2a6"}.fa-sign-language:before,.fa-signing:before{content:"\f2a7"}.fa-low-vision:before{content:"\f2a8"}.fa-viadeo:before{content:"\f2a9"}.fa-viadeo-square:before{content:"\f2aa"}.fa-snapchat:before{content:"\f2ab"}.fa-snapchat-ghost:before{content:"\f2ac"}.fa-snapchat-square:before{content:"\f2ad"}.fa-first-order:before{content:"\f2b0"}.fa-yoast:before{content:"\f2b1"}.fa-themeisle:before{content:"\f2b2"}.fa-google-plus-circle:before,.fa-google-plus-official:before{content:"\f2b3"}.fa-fa:before,.fa-font-awesome:before{content:"\f2b4"}.fa-handshake-o:before{content:"\f2b5"}.fa-envelope-open:before{content:"\f2b6"}.fa-envelope-open-o:before{content:"\f2b7"}.fa-linode:before{content:"\f2b8"}.fa-address-book:before{content:"\f2b9"}.fa-address-book-o:before{content:"\f2ba"}.fa-address-card:before,.fa-vcard:before{content:"\f2bb"}.fa-address-card-o:before,.fa-vcard-o:before{content:"\f2bc"}.fa-user-circle:before{content:"\f2bd"}.fa-user-circle-o:before{content:"\f2be"}.fa-user-o:before{content:"\f2c0"}.fa-id-badge:before{content:"\f2c1"}.fa-drivers-license:before,.fa-id-card:before{content:"\f2c2"}.fa-drivers-license-o:before,.fa-id-card-o:before{content:"\f2c3"}.fa-quora:before{content:"\f2c4"}.fa-free-code-camp:before{content:"\f2c5"}.fa-telegram:before{content:"\f2c6"}.fa-thermometer-4:before,.fa-thermometer-full:before,.fa-thermometer:before{content:"\f2c7"}.fa-thermometer-3:before,.fa-thermometer-three-quarters:before{content:"\f2c8"}.fa-thermometer-2:before,.fa-thermometer-half:before{content:"\f2c9"}.fa-thermometer-1:before,.fa-thermometer-quarter:before{content:"\f2ca"}.fa-thermometer-0:before,.fa-thermometer-empty:before{content:"\f2cb"}.fa-shower:before{content:"\f2cc"}.fa-bath:before,.fa-bathtub:before,.fa-s15:before{content:"\f2cd"}.fa-podcast:before{content:"\f2ce"}.fa-window-maximize:before{content:"\f2d0"}.fa-window-minimize:before{content:"\f2d1"}.fa-window-restore:before{content:"\f2d2"}.fa-times-rectangle:before,.fa-window-close:before{content:"\f2d3"}.fa-times-rectangle-o:before,.fa-window-close-o:before{content:"\f2d4"}.fa-bandcamp:before{content:"\f2d5"}.fa-grav:before{content:"\f2d6"}.fa-etsy:before{content:"\f2d7"}.fa-imdb:before{content:"\f2d8"}.fa-ravelry:before{content:"\f2d9"}.fa-eercast:before{content:"\f2da"}.fa-microchip:before{content:"\f2db"}.fa-snowflake-o:before{content:"\f2dc"}.fa-superpowers:before{content:"\f2dd"}.fa-wpexplorer:before{content:"\f2de"}.fa-meetup:before{content:"\f2e0"}.fa-mastodon:before{content:"\f2e1"}.fa-mastodon-alt:before{content:"\f2e2"}.fa-fork-awesome:before,.fa-fork-circle:before{content:"\f2e3"}.fa-peertube:before{content:"\f2e4"}.fa-diaspora:before{content:"\f2e5"}.fa-friendica:before{content:"\f2e6"}.fa-gnu-social:before{content:"\f2e7"}.fa-liberapay-square:before{content:"\f2e8"}.fa-liberapay:before{content:"\f2e9"}.fa-scuttlebutt:before,.fa-ssb:before{content:"\f2ea"}.fa-hubzilla:before{content:"\f2eb"}.fa-social-home:before{content:"\f2ec"}.fa-artstation:before{content:"\f2ed"}.fa-discord:before{content:"\f2ee"}.fa-discord-alt:before{content:"\f2ef"}.fa-patreon:before{content:"\f2f0"}.fa-snowdrift:before{content:"\f2f1"}.fa-activitypub:before{content:"\f2f2"}.fa-ethereum:before{content:"\f2f3"}.fa-keybase:before{content:"\f2f4"}.fa-shaarli:before{content:"\f2f5"}.fa-shaarli-o:before{content:"\f2f6"}.fa-cut-key:before,.fa-key-modern:before{content:"\f2f7"}.fa-xmpp:before{content:"\f2f9"}.fa-archive-org:before{content:"\f2fc"}.fa-freedombox:before{content:"\f2fd"}.fa-facebook-messenger:before{content:"\f2fe"}.fa-debian:before{content:"\f2ff"}.fa-mastodon-square:before{content:"\f300"}.fa-tipeee:before{content:"\f301"}.fa-react:before{content:"\f302"}.fa-dogmazic:before{content:"\f303"}.fa-zotero:before{content:"\f309"}.fa-nodejs:before{content:"\f308"}.fa-nextcloud:before{content:"\f306"}.fa-nextcloud-square:before{content:"\f307"}.fa-hackaday:before{content:"\f30a"}.fa-laravel:before{content:"\f30b"}.fa-signalapp:before{content:"\f30c"}.fa-gnupg:before{content:"\f30d"}.fa-php:before{content:"\f30e"}.fa-ffmpeg:before{content:"\f30f"}.fa-joplin:before{content:"\f310"}.fa-syncthing:before{content:"\f311"}.fa-inkscape:before{content:"\f312"}.fa-matrix-org:before{content:"\f313"}.fa-pixelfed:before{content:"\f314"}.fa-bootstrap:before{content:"\f315"}.fa-dev-to:before{content:"\f316"}.fa-hashnode:before{content:"\f317"}.fa-jirafeau:before{content:"\f318"}.fa-emby:before{content:"\f319"}.fa-wikidata:before{content:"\f31a"}.fa-gimp:before{content:"\f31b"}.fa-c:before{content:"\f31c"}.fa-digitalocean:before{content:"\f31d"}.fa-att:before{content:"\f31e"}.fa-gitea:before{content:"\f31f"}.fa-file-epub:before{content:"\f321"}.fa-python:before{content:"\f322"}.fa-archlinux:before{content:"\f323"}.fa-pleroma:before{content:"\f324"}.fa-unsplash:before{content:"\f325"}.fa-hackster:before{content:"\f326"}.fa-spell-check:before{content:"\f327"}.fa-moon:before{content:"\f328"}.fa-sun:before{content:"\f329"}.fa-f-droid:before{content:"\f32a"}.fa-biometric:before{content:"\f32b"}.fa-wire:before{content:"\f32c"}.fa-tor-onion:before{content:"\f32e"}.fa-volume-mute:before{content:"\f32f"}.fa-bell-ringing:before{content:"\f32d"}.fa-bell-ringing-o:before{content:"\f330"}.fa-hal:before{content:"\f333"}.fa-jupyter:before{content:"\f335"}.fa-julia:before{content:"\f334"}.fa-classicpress:before{content:"\f331"}.fa-classicpress-circle:before{content:"\f332"}.fa-open-collective:before{content:"\f336"}.fa-orcid:before{content:"\f337"}.fa-researchgate:before{content:"\f338"}.fa-funkwhale:before{content:"\f339"}.fa-askfm:before{content:"\f33a"}.fa-blockstack:before{content:"\f33b"}.fa-boardgamegeek:before{content:"\f33c"}.fa-bunny:before{content:"\f35f"}.fa-buymeacoffee:before{content:"\f33d"}.fa-cc-by:before{content:"\f33e"}.fa-cc-cc:before,.fa-creative-commons-alt:before{content:"\f33f"}.fa-cc-nc-eu:before{content:"\f341"}.fa-cc-nc-jp:before{content:"\f342"}.fa-cc-nc:before{content:"\f340"}.fa-cc-nd:before{content:"\f343"}.fa-cc-pd:before{content:"\f344"}.fa-cc-remix:before{content:"\f345"}.fa-cc-sa:before{content:"\f346"}.fa-cc-share:before{content:"\f347"}.fa-cc-zero:before{content:"\f348"}.fa-conway-glider:before,.fa-conway-hacker:before{content:"\f349"}.fa-csharp:before{content:"\f34a"}.fa-email-bulk:before{content:"\f34b"}.fa-email-bulk-o:before{content:"\f34c"}.fa-gnu:before{content:"\f34d"}.fa-google-play:before{content:"\f34e"}.fa-heroku:before{content:"\f34f"}.fa-hassio:before,.fa-home-assistant:before{content:"\f350"}.fa-java:before{content:"\f351"}.fa-mariadb:before{content:"\f352"}.fa-markdown:before{content:"\f353"}.fa-mysql:before{content:"\f354"}.fa-nordcast:before{content:"\f355"}.fa-plume:before{content:"\f356"}.fa-postgresql:before{content:"\f357"}.fa-sass-alt:before{content:"\f359"}.fa-sass:before{content:"\f358"}.fa-skate:before{content:"\f35a"}.fa-sketchfab:before{content:"\f35b"}.fa-tex:before{content:"\f35c"}.fa-textpattern:before{content:"\f35d"}.fa-unity:before{content:"\f35e"}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);border:0}.sr-only-focusable:active,.sr-only-focusable:focus{position:static;width:auto;height:auto;margin:0;overflow:visible;clip:auto}/*# sourceMappingURL=fork-awesome.min.css.map */ diff --git a/dashboard.html b/dashboard.html index 57b27438..b83f17e4 100644 --- a/dashboard.html +++ b/dashboard.html @@ -7,6 +7,7 @@ --- + diff --git a/fonts/forkawesome-webfont.eot b/fonts/forkawesome-webfont.eot new file mode 100644 index 0000000000000000000000000000000000000000..b96d208facbd9143496537edf9d50a6d5984fed8 GIT binary patch literal 188946 zcmdqKd3=?{^*=r{&vKXCeNAq*dz0LoKp;SNAcV`l1w=(bKny5~0*VTP)a9yFK~Ygr zaj6Z~jn=l*rFFy4ZEMxGO0}idT0i|ntJc<~0jX8Uee!#sdG1Xv0kr+RKCkZ|za;ZK z^UQMQ%*>fHXU?3N_}&$4-aCSECK&w)rYX{ckZqiN9dqT2F^?I}5W`aBzh~S%3vyut z?+`niUBE74E7?-Eo-Jn=<7+kEjJeoJc%Q@8u~mq>2q95+Dnc$onsbrre0-0@?zGJf(4jL)0S_$gIzU5uaF#`ydlP=O)ige4? zFn%WBoz=+r3b=E77+<}O@e9(7Ux<7cB^kfCmGQNJyAJ6t!TXX|7+(+Am#T1xzqE_- zjez})62>n>+RNT%{PGUQuK?^T7cicJ|7yft1Nhf;GrkG#o51 t+1EUSmAHo$;SO!T8UR|Ak?U|6(%ZFW$@eOUU!fR>ptj zVf@!th~1muzF_>-F2;X@bg$Jg{yNHg9WcQ|_`b!A|6XPM4RX&h{s*Lc6ZzjnIe!|- z_}h;#{@*V%{%6Gf&&P~+1J*kW;Px^8E@1zq1nw2a--G{s;Pn1`jDN5K?g7UCdN1Q2 z0>{72g#(^{-vEcS9|86!g>Xp!=~ImV<4wkURx!T63T`Xo2LST`!Vcp5pTPB>Nb@=B z^EuxCYJ_{6aqtiR sls8&tqat7ZYuZnSeYb#^ZZJ3EXZbCIY`H801H*FOY z(*b|_BTUTbgnOBZSv5>_c;H@R0^?lFgF9sb9B`TMU}6EvUa*ac(}3e?JK$bn;&kL$ z5@6yC
W?u?je>1} I+*D)qGZ(w3eC){&PT#x)WApKV0a^rTm z_n5c|@!JA$PceaUEN+W3vHfi(Zhw@CJK*jFK6fJRoyd0=;_e3C_cX#C#2#E5?Zbf{ z#-gC0`dy|l3# `~*<4#y6V_7UnksE-C89Gd(U`y=HWWA1R)&kM*5X_l z3}w{f!y9mkiaOEQE*k2?UhT-w#^x5@+)y9V+2j@HEIen$WW0u-J3n*eXQE6=Iy^P4 zTJ&&N{hZohuy)Q_cvXv{Pcmck1C*D_8|<8^t!O{0X9_r2SPb>{uqZi>s#a8UJgO4H z<7=*psv%zx%@9&k#+SxT#+Tf}FH$TWjm=fYuE*cL**LuCf(!O=jhAt4&jpw9`Eh{+ z++rp+QjHx6e(GfdDK6M!9KQMO$BkWaxxDO4S)edrMd;00ShIL_i)wL+T3%7ds}u1= zwKot#TQ_^#M4f^@(1U?+C|stF<@N1KOLI#*Z}FO))8wV@K|`gYapT~94awCb#mLpk zhWm_z@u=UarJa7R=??3mq|<-fPhZo=RJ7CuM4+yvVvPRUPn%CqEtz;IIdRF7iCTK% zlBmL}%Jy!m9XV>$$l6VN%c?TW>G!KO!e{eZ?V8{D$l4tbYNH}?pD!L6r9HT#_Lk1W z$hTyoN-)rzl8&fuDOQ5@BAT>LZ32e%Wg^_JphKxmmAe~#nQivUj XJV2Lt|~G2R%D4h@P^jqOFP{PTDGZT@%o=dH@6 zp@?yx;jlP^rH+q3c9aHn7eC0C6$j(C8T_RoLyXZgNKYl{#w^=L)NAAM0(8C-*K&9q z9}V?FUT-Yiv&UG->u2zd{8Ijs#B0d$(GmeZq@7=3T-|Q`!C3UtONu>*X8l)SNwl5P zsO^I^isM-dX+*<^qAm4h3iIgEgr_;GvC9|qes{s;-nwb)I (6L_110j%Wv-fMhxwkPPDLhN^d{FwMzP~2@*OfPT;P6x;BDvUc9x6*j zGK|=qf@d$jatXD(oCf>@slE;-2Hlr(*ytEG$sD`{zx!C;OhlmIM8u${I*{b>fLF;+ zVhn^I8{jjCWZ9Y=vRKtXr<32G#F-`E{&wVvd*xa^GJUudt3rgEe+^Gz$3~@GGg~ z#Rx_$v!jvIQ@oP*(VPEqM2u9fgN+}P7O@yIu^z`w2I(F2JvjdV`g?GBg0 6+Ho z8lI%*fM2BYzcNRB9T|7z*H@*?hsdL{SbFd``@NX~uQK4x3(fN$J3$^WkPy+)QGM}$ z-V6VJt7>TPUfI$L>U{W!);}^XKi&Vbt&V64#?cfm-K9PT^DQVkE!?74jNm-cIG$r- zvf)wAbyrDd*yfVCC7X>qN=nGX6Ji^ED+lJvsFKb6Jo+vvG5#oSK^lVF_o@1TdMm4h zt~21~dPTJjj}ZXfVmlIkC}6R1^#KXlc*}Upgv1l@WlQ6UEcCY!D$6-uteJzLn6it> zFDfw)PR2ZpaaC(RDiY&3=3yFfW5KrZs1KEL%>CFtkWv=IkUXZ8r82*>+wX*o(hY%Q zz PV2uf7famb3{kdJt_$-zmc z-niFz&v@B*Z|}yPx7MCp9(500w(`X5_q?{}`V&_!8|sdhpEvZ@otad}iVpmV)V-8) z<6d5J?~nP!)lpaN&~u|R-?(%Ik|WoOOW&9oJ$GoWE4tcvUd+r$J}&4 lNtsKhImiMNPR1G&6?!04PXhwu(}Erephqe(Ms*8*sTLTn z)fO5EiE5HoA =So*98dcLmDBCE;%y;^>-u3MJWfmLpIt#-GHS?;cDJkGifW71J>6IA`iaxyDR{ r1@O zr#!)xwt|bA?M_EQa8XhHsA3Ux%CvQLqfc}=?9Qs2?JM&W+t)W(U1s8uB_b&24#=(e z&B~Nx*(BOZ7~IQPA|62ngTMV)-3H2NjoQw646Pf}Et;e>WHbesEO%;%q19>CRL=1b zpdQ($c<|%+Q@tsdTTzmV+m-3$>5&$@@pHRHxxnY@Tr#m2@>C~L2ydF|o ZX#;n!_oQqx2+_mP|G_mpb@p$047J znVxr%7G9POUJ1GiVE!3qQdEwwkHx}64lU-X<53s)l<{aY^9XQLC;+hjSHMV2j?gVT zfp^_{$awS6t+yWHHHY{`dyQ`!ON?*t-OHEq`}tC(+vukuqJ@lsR7fjxh%@q&?%hlM zNC;X=z#hGzcBsvjI!? oN+ Zd;5>*_Hd|vJdHjcvXC6Z6JT$#tTH1A<&$P=kT_|P5{(am9MI9|+Sjie zbMKhVQ2n+V&w9&^q_5d$B+I?tp&Uyyjx`czLm!g5CsPB(qXUxm=GNBDt-?E`)JXdM zJY71Zny2N`Dw#(sg{(@-0Fc|Vc=eM?& Y0p z*&6C;z6Y-^!-_%eS4B3|tC;&C+JV50 aRa8M>8BhRV<$-BdA}cv)ZeU}5gR1n)IpesG#U$?aA?>d`X{<0lz18@~%B%bs zo)H>({w>p r1PX7dcH}~Jl11qmaHr}lX 5%Vvt1Vb3k zB(f^W+@d?mt$Yo)Mr&FXmOk%}JI*t@GihS<0_;Bh6t@~*Je6+E(PbLtcv*|2%YKFj zA-Wk9hHsLp>qKRRsSc)bPBJq@<_0W>sC1T;jhmcx-YhL$RQ!j#$6dboh8bz2$LonC z%7bG*etP9IS0w72uRQ%^XC$Gq>50QGYESh*VtUi8S?e-dQL$_7u*PAx+7c1*K{V_t z-7sdXe`w=SA}~($C3R`g>GObFK=9Af5%sgV90ocq%}tF05{3u{%4s_97tKr-K91H1 z0=3F+L+Gitz|)~E3kIarX_r(?F5L~)@MFdwc9%}BxMbQu+=4Bkrvq)*cJoHw!5h1; z71uwseN^n^l~Ll|ay{dUPHS_Vv1~in@4eSJw0+qbj<#ts))Y{qD^HG%+Wyd;yzteH z8(%d(H0u>rnA#1QQ}QiL*I9Y9A%=-2q+qW08;=`@Bp=rKYz$Sk>oARQJ{#jSg;{yF zIR=SdqH0RQ8h&hO&=OEbq5;~K#ySP9L+hSnmBCY|OtrfsiNcDCLUM_S+dlOe1slE{ z*OX}S;$Ug8sBUsy5#Ggd4bmyLD8Q4SMxRYX-G;LnIJkGr8Xg-bO#fL-<(>@I+j8+H z@y(0F3J-+n^9V%K{?30|BYw(vw>llgiR#wC%#%-^8ECCeM4Zm8{JX~QoFLO`OSz@4 z>KoTz|Bb3TcxB}8{{2>HG4>jnv05Th9Vm4-f9I+1G`mX!)u8^dKQ
0?g0Uiw zR}-9 HFlr7}s8G?)oVh9N6JnO=^BoFcO@1ZAWZQwpI3 z13sc37uDYiXpHt_3ox_zp+hPLFRX;rQHvdt2I5!V1~2NDbyQzjXY*S_UE{}bsgxCE zeMvY29Xg;%PpTR)lMd)0?r5i7c1YFPA*Qp#OdI4 $_e12z9W~zEQspBP%gs zg^`=4AU5$dnCGnX)Jx(#IF)fCfZ8hLC9@41Lt|{EVdRL0&5oVcJRRJL<_d6n-eYVf)qLAA&uLS z9z^M33zj$axqKEKa}t(!SejRdG+Nr#lkO)0klCeP-nV{EP00AffANIg<+E=tDGccx zbEa?v_3$vOq6wu$2@X}cMOCX*{|J>^g>Z#*tJmod#HyiHc8V`&&J7u#R!uv-_nzW{ z0(;>G<(|@JD<5VNiNl|$4wvY37O6paGF|YjI4VS~7(KoBlH~lAb0)Q^buMeMUJxj@ zCsroxHP(U(y=qN`txj`RYLRsbYo*N^h*%x*Sanf|>xym7%-&1ZPjP#Sr - y)vDG=jKt *Kg-Vnn2 z&4-R7O9eb2`2;Jl9#Ab<7u2_7Ul?;=T!+w8hW%(LF)327)Wz?=8~e>@e`0>`uS9s_ z$cBXD6JD6IDzC 44+_?P?ou@*wR9-dqKyg>4We7;q^T5D#7;Dm0C#ojH+j7*afC;u$l> z%qZc4TlJxnPTIJvVa!=;C)Urk^2~d}y|v0xpleX@R5jH#XzDWl-ZkMxp{d`zY;kLB z_`LR}yI-BU?%R(n9=3bfdB*wfC_mw%iNo4rUe(^TuhF`G=IP=MOJw}oc~j3FTjH$$ zRYUQ4k-FYBOVmQQqby!BB3Q2}Z`4|yHcjOx3qOyHnRofD#`&YiL<=ily#1_ipFO1n zC#Gq9rc|b-*l5OrlEt+&M|gEpov3c1r7M^o?LAmfLtWrW8f)Ex4n{?(qrLi_RV7Zo z@jPBQZjRp{`@!X7MlQdxM01th9Je}jn<&22D?(5&aPK3Ev!J%1bZyD?lN+A8;uKNs ztDI;NjiR8k$XTE%=Lnmo*+g}{J?{38h>dY>&%86ww(O)++&;B qOCZfNQx8CDi*WUMPShFP=>-s^r>4Qu8Hb8h3Y`d+He3S zL3)n50k4V(7`sGZ{>|P-K^lA_a;h$@d635D+s!*L)CyPwCd8LQpMxsy2EcN72Y%J=R~oUr)l<@N2)ZXqQiJ^0(w#Lp0=vc zuXCX)1$V|a1pH;O$WT`*9=Sh)zqrbBzFwyG6{BxC*PI2Muj!s!>QaZzv(1^ptu{q) zuBs=tEXh2v({sV}Sg_VpV|Tf^2>2SftvDKS4dtgS=i8UB6UE_@fa)l8IoF>fB0hel z*~W_0XDns6Gv?2>W0e{X4Qj+DOqAJ1geDqF`s21^yJ&=bOtL>F`}~&VWI{xnDHu9+ zXy~R`AQZqPj0Imcwm-?Zs0@Y*!B}Ggc~3Okb}E#!Y<(=8->@#bR~uJ$#oSdxZ5#vc znC)t@DX{KAi>U>74ms#C+g2-cw6!GFNJLGxv^kt^4Tqi;4cjGyLRAXYu0)#)=*gpb zO+I@ncj`i@+KDYY8e3kxfBLbT+_UzF*FCCOO0AZe(@$*H9K{8W^($nXAL^?f)~p0u zgG%$T>R?rQr4W_nRl#Eh%C!xtV=)GD`VP7CX3lD+>V2>t 7oK;B;FD!4NqywBfkWm|JQgA zwqN+V?<3ngzqRw*8sQS-|G1_9t+xI;90$h_#(98V@@XgE{~xvTSL*Qw?<^B;q!u@A z66!;PzmG-l`RND853cLrZ_cnWLSpT49y;O=$v7?P^dHJgePm32s(gQUKU{wCvAn&X z^@pkh3GzaZolWl358@Rh;gOI@do$Q}q6zXpZH=Q^C*^m#Y(_UWJfb!z)--&7iFWWi zb&2+2`BY^{zJDN%(oJR-l)Z!={;#cBUVX6)#?KM_5OpN`9Gc+e5|^xVKr#6oa&R5K z?wfZ~1*O)|1r)Vi|7jJ)-V%afnv%e0*kr5FBd;>Y_M*$Ob;Kb_*?)2cm8(;38DGk& zJHsIhtA<|5XRO|}K9gL(Yu9>_UcZaq<|}qMt4V=0)T{aVZ4c#QcCCMq-|E+}OJM5F zur|TmVu22%Ox~O%*Cx&NSW-1{G$hutSf$9dEecMA^HwY*X^GUDt~G1A)HR1vJlQ26 zv3)5kswYv?+wv_WRSzXxlSv!Nv`osQe&=CI=2Vd-dYCL3C#q!CDD` a=7va|^Cm5V-FloFSO?3T>C7Cc3nrI~m2 zrj1VRqxeHc=R;M^O^J` mxR=*>>7}R<;k?rtVae=7ycvfAqd0>1NS@S{nAlq?^S` zN2yL!NRd7Wqn744?W2>)ih>0I^e|;g7}gU3UK%Q~s95Ngz}zbU^$)B$_ZbU}eJAP{ zo_2nTt-i6rT5|qr7wRYSR8@@E##+K2Pq-yk%VSm0sz15UK)v?ea<%O{H~jJRvWkkb z)BkwGcWhUh<5m9xG^T^bMzeM{9ax#Y$r9+xPz(2GhijI!$vy^xIRwW%>I3tKxF1qv zms`-`)ZYPR!`dBdI|Yk+jr+Y(FJE%vuJyg3|6S{q 3%qw-#l+ZS--2u;_(8EuA4?8OD1071Qd^W z6}ub&B}x|a=;9JUnM+MC+h0#%y+4$lCP#1o5}yW)T$0di)<3LJG14rDLw<8>6XthO zi|!A}K~IMF?G`e`BMOJkETE-wHDrBGe`I#6U0;){oUbI}@drOKQgZNj8G9~XKU@i0 zRgc{s8a=eq6096M=Ys2>Jg*BJBjV>Nzo;}axoY~I#ag67%~kRZzuj5rvD*0CMhfg= zX!@Eh#_n)|aJnka>D<&hYF_8ulP8R+4oUukBy|47toxPd>k-nb@JMEn?N-{pJ-TCw zlc53RJVnd8tc7KMefxXV?o^<9%kNXWQ`ZB3?fq@x#6shw!ou_M<`!`sUgsBzCC1Nk zbu_!uF8aIDKv&uoE8mB_h5QFHL!t2{vJw#LPYxac_K5zRgfE(BNDzsU5rO=miItY4 zG0<>smL-cxsgI&5SN0k$QL(E=9~ka^40|ikJ!5Nyy!3!YI)ql~^+W!^E~$(rFMT5# z_UPmlcmHSU{YRE2>$4I3;abuXV?dD(3U$C?6)9uU5Tre>ptre2`JF!!@n^=^)B$^W z)uvtScSH^)BM!fK(Pqyqlq&}*xn>p?SWWntpRa|sWf1)16eE#nZqfToJGxBqqCav} z$zzU#0unnSnK3zBbRD=99RnBY99d88k7hls8kOuvz5Ef)I;fszY3Pjs@UpHKX;*4D z(TNIZIHmj{2kDAKuZ3f=ur@L*mS)PFfryrl1f1|y5lvy7WNip&O=n7ISv4T>2-*cD z=_NPQOPc{k?M#OVda+(J`oFX!nN?uzCZBnJDu-wnoCxF5eRL@Vbs+r_aB_J!=GrdY zU$rpkgKCIz0Q_{zaB4d7A~hWvhMEseM-+kzJMd{O5HCs(S`Lwph xZAClcV5M zF(w)2$WlLMiB@cE$(rM#S&v^j(0GWN$*iz=$ZpF=hT5rrOdN^JU?lqMn_upc^&M0Y zDvNs#v8Qa&bkGSlEd3@^kbTVa`k98J3$2)?F&bmqivwMh5W{m#9Laou9a%;->ccbF zo_DJb+=CbZEsBt7S#C=G=2ZD*<`d!f`yZm7h=9sJfaf8<`n$|0nNOtG3_>`iIU1&^ zddo9Xr}_6wfFdw{;Rh56900^^R05SG@M|WZgwz)OG+BvR0ycAWatM;8IVEDkr!z+| zA~O#j!H}^22!lQ~O;whSPc^4jkRQ|-JUK{E63G;42FzwUG7qmEBsvY?MYcv+ymHta zjYHl!p<|Y6lE+b{ g-$!%)i*>sLI2V%tO=C1d^ rV4A3!z& z^7zIU5*ppKnSnjGOoRCTw8)25yQ$Z~-a~&{ Sc_u8!_pC5O|hozcMo{NhC9 z=J-cDW&F;M;x|) @<#5XZ>f4~`E5qc~3XEIi_e1N}w3Yb;to9tx5VIv4~Uwz(yd zU7ffwas$oBvr(LJt36`hvIUP@?exa$i0@bPtTK->I_1AScBXzHMPFsactl;YcGYwU ziG*3R2IkI6;J5~sw;2m*c)#WMpN%){6!ARUzwxV37QaIt9PX7VWfsayhS* 2Ob{~bU_x;N?T5@tB#b|a zbmIh(N;S RIPpiFx$2$lxhiEm33$-^6*5qCe(hj;v$W>wbY)Z Ybm>pcYt$Tq=bRW zHscBM+wHuAQjmcz|0E*Q_Z#d|dL*AA?Q|&v(nn+lBmp{7M!Qk_K)V=PFOt!YgU9jk z7M~p(k>lVE1Fj?*W-ub+wqv4A_@N)6>`sAph ?hX#5z _5B!DV_NJtVcY+ZTZzi=MvTfmV{ z_?6*sh6|Px{b*{sd8}tRc1XuVbP8+z_{N)YqzPvLHEmv9aU>Zzr_T7iqY-EEjL+-N z!FO>Tx5H~jal4G-_H2~#IsX7T&PViJ#;fu)cEerBaz5hkzB?Dg8z{zjwLd0*Zlg5{ zG>5S8gteo2l7^)8d|6BJHsWK_Q?sEZMFfM##McqAV4Vf!Qyz{4kecDw6sm)(x* zL7sN`wZU@8;eR~u@&}yHI|F`xwpi`ZtybNUxy|mzsuikC{9p~6l>EO~N`5f*F-zqQ za(6ip!toRmpBw6F?JUnxm<#CKo&czVEKtiKYm?#zLk$M6T}Ha9BwbQvwEp~xNG*C% zyxCe)8@c>vHGDUOsn(jq=+sUrNj-J?HP@WJa$G7kZYBBnQ!d{V;+0HeQE{=dd}n#< z+*bUR?*v3hQk^D+!3-kl@?G=HHM1Xla5i2(Q$Hs6E`nrx15+iKkH97YdRd69WN`)~ z6Iko(%vAnCz;eMP1yT}O(3*!qX;&S#Xe$2bLJpj;i9Bk&{g;gx?1jPNC4nv6^5cj| z1nP{B{`5xo_UqlZhCL%{+e^!a2E4+mDD5-bON4FyozJgsdE)WMZm+gi2P&!ytH(z@ z3hbHA+;v^B5QDLBiT|<{Tt8!3xAC*pt43%ulO4%Wq*Qh3PD|zN<}rSCvb~|{;@^II zeU;Cx*sA09YH!%Kc+* I!q#!tPT*GTZ8~)NE?t+~MjnmG+PZ zcGUXVs1rInPZ%{x v1Zv2m1Me^fy zD=vMSE}nV%(iQ7Ie)Y4@#ORum$1e|*lmt%QX#93^ =sXHY z42M%&AYhByIrEpHE)R<>1GV7S@pFyE=Z&)a92-5uZr;Bj5V(uK$epJxYPS2dNL5)( z@x<@DnipDmI#50J4rAS)XYS+YUV8Dv
kqx>W8@h luf*Uyt-Y#%vxsg+0m2vObibJeotT$e% zFmKz`ww+)|eiuFXCjM)OrJ%s#GFt3Tr?UG{YW(=pii* SO@>*8lzF;tf#3Q{hQxT~upt#vl0J9cKK`(2$nSDd`p$o$Of>a>Z1 z-aQtN)3MaXn{fInY{g08lvDe5S4WbxfOKyX+VW^SXR>e}D{q3i827lso)Q}D7~M0K z|0aL`cfZmm%Zu~Uw+xD-c`v8Y%)3>9G~(vs5KK9RLw?=76Gx2FM%Q4!=$7Frdcu4f zDGlj2x&{u~AWeTbOf=!g4r7j4;L5(nLv)_K5l3pU55&zELS#xFO%iCHO!6r1f{XIB z`9`RS@+j?68r^vIeqSa5qEV#i51xIP5oit1PTGv=G@o>M9=wOfv(}B(OAG8l8P1T` zspe8y)?Uh?autjnz&gFUxur~Ppq3#i*k=m=wBvxO07KY?*)6wX#u|u@Ea?5I#ocYQ zLuCyOvxarktkr!;({a9!_OYYqwJvPzsGrz4rg&^N37wM89RZ{yeQe~MwxNa5y3!$& z#?3!{!( N(J+&bwGanIRCP%w*#ti(I0 !1&|$ ztUsLOvcgi4s~**@xP-MS+*&ui<}|L~arGyUF8`j{Zx|^W$(RlDbZ;;qrJ>wR1`S7< zf}6Z@-y|jHX#Ch({9hP5jp@eDUqCE}x?x1yNp(Z(PHG!re$u5xbd=ltq6>=#zC=3p zOXK+`pX3vNDN}%I6CqU%B|y!{A nbb?Y6 PZ^_bAE i?B?Z!u(Dp zoy&m{uG(Ss8sH)c`O3>vp^%aCLP9c91?d8QN1@k9g~MD1@suNNE9lRWNz3-9@t=ad zItd_d((zSgEiBaRn@$m0G};)3OqwMj67k5o*sP5jMvO3T@=#up7ka!BD?I$MvrySV z1k=kR36G~({OA=)KFm|(a;O%r{wR`Yl(&DFcYr8qgB8Y=jcs<%NHSfI6bvaJr711& zJALKB1pWIOlU|s#uLr#hrfF 58UuJ{LYUS P;`%JI?r_# |L8zu~LGA?~6X3v3Z(i{b^RvjIED#mWEfJ5R`P>QVHb{MDp36e(;=oew zi;g~#)7Tdb#Atqq6i#8`7uLn>a0=~nD5c;$5+>Nx;gp)9KFsReN3tX!>lSR&TCiw= zpd5y%Nv{Mnzc3O9cZN(!FDzx+v0ABa9!xyAuxY~Nq6t&REuQ}k?W%WAC|xw7>8u&0 zA!j7Ga`M_+B8A(3u;zuW%ST~7JQOw#(w0eqEr)Vnk*#KS!a4C9^Gp4fwM*+;FB->- z#H@8Lt2+K9zED{*ZT&sF=J{;HxfsZ`3++Swj#{C8u bvbt!g)!3Ox5x+500VZybN|=I^}xa^_ r8(Y_{-}^B0eb|`* zLllMfM_F=hNB0jEW7ep~DjGK^43^lNv*VuQ;2iTLqPiy(B|lEe#Vq+J>g9+~x_qvQ zOME51)*9CV9J;+@U+*1sB1}zX@A>O}hYrG_mc1_|GneV9Sxtu+>~WfOJjG)rz9kb$ z6sT#n${S#Mf0p7nuKEsTR?+=w&QhtvGJ{4>Id1!=>$joJf^>Eq*vsCgrZN{t)WPzm zO(@DN@`MOFodjMmUmqQk04L)uxg(!ts*;4+mw(96xn%xDZ{_F9yte9!TBY;tk~u?b zN-|4#@A=NF&-41O@4R{qKeJP*tB5Z1I_>)0d8dt5cEfCJ?$9BAWR`D(d6z{i>L_!~ z&^aaI+t B%TnV0^c z3_v9K)N<8e4pff3O9-n2$P|$5Xx5WQp2Of3I9di18KehRFkk%NXI4^@jFdYtE5OXl zd>Sd2?Vf^QMXSXUUhglkUmUL~a9G066yTp9Rt&ks;w-Rlv)J1`VaE=;t3PRI10}7f z%};7|P*O*mJ6wRIB6YjN*Pw0`)(%%75O8%^#YVNk=eYfLr?){>+gq~{4MTKwgWBMA z-u|Da&t7fRCk1d&Fbt+3iNj-Td)n^jg_T1_PO{q_ma_Ghg?`7X5ruC1UH0H<7V9^Q zZFbk3(6B@y_ZIXgEwDMPWtUhM`dq8(j!5e12#u@=3vZ@-tH)hjbYYRIOj{BZBDiFl zqT;jI?LkCom?Cg4{B%T38zQDsT)5P&^!#sf5&aSmzEaA;aj7%%(4`X9M27FDx)-Ft3az@%D6Tt^_=nSf1SGUvb(G5l>$GGjwnJ? zbgor-N`v;xZhDSS;aBh}qV1;3?7>n`m4*X=IG>1Q0Y`n+-Ipyq)!6^bF=ab>&DzVa z4PSMKa)a^rkGFUh)Y!1<#IYe=wJ4bM62W*);q>3Gzv1I8TQXZVygt3KCLT=a9FeN7 zTNIavTWmE8Je$;o^A`79JA2l&H~M963|R}#^{pDXeFmenGKS+Kc=fM>FomP0A*>%! zuXfluQZzg*7$P)G$jK2a&CRkR2DXLilqc3!bbN(2Dq%kWS*THcXimM+)tT&!6vl^y zTGT|*u&N=|xIe@hFC7scsr~MnOVe6erLQUAj@G6|*%FXUAHDIa&S$@|He_@Y!{xrJ z (f;PDjk*I(zREIf+5FTszk{LEh|;(-8ue5UsTx+4P+LMn z;)M~kC-1DEliIOj_sGi1Yv(moSJV^~`bUmkUS)hL8!Z}In|l7-HCw;W+mwWDlqx$T zVX(@@+&ivlN_}+Z3{P3)l#^x%uhnhQGbvwHWmB|Xn;fqF<|UCO%f|kC% Q1%_?Ze``s6EB-l=V_QdsU#FCnKZk>Q#a$X z6CZgt^O_j(+#__svhP?|FK6+^WEh3WSi_REz6wFLJkZnVU^5_VmpVq^reTRaMoxb+ zb4N_1aN^31o25uFqFbi2pQQQVQLrGdZda8qf2Nzv9FuZUl7@^dqMd3q7;%~=>ahE! zk0lc`P{#<>QXuNF3hky%tEjmM=23{ ydj z#m 5@_8SLGj)g>kI?S}DHt$qRp>KC*)|&f{V(V^nAsH%)PLo0u zh|Mx#&a{}eMSRLh2GYoUa{H0;(e|Un9eoWYBukZto(`=`n&q-4(B_#mn+=1MkL}!Jks@!PBNqLXE7B(AT1~Q+JUJ!T z&N^0O&|*L#ft6n ON?G*@T8!_AmO5FR$a%jn2P zpoK!3c_WLmU;qaBn18BWf_5uVVL2P)xVgNHiu$hw_sC%n6jE F@ij) a+T^%I zCHMO7eu1-me!=JJ7L;wV)L9hOYE{%xs)|#h3Ql8NgvDynr&(0R0;hUBZeVOx`4o8+ zWZ%QaKN}T~qp=qHdRuv9tea~ER*PC3Dk-t(BSLyn)0tCG7}GveFZOu6UQ4J a< zgwgYxsyu3WvSyiZc$7w7Ag;^jN!T})dZ#oPf!pK*xjX!F?<4Q8DkGgta|>t=i@8|8 zGLvpM%UZD??>4{h1 P+J&mxa0#V&ao7#TWhKKSIPD+zaofmnVW@f3jKBTks+z7L;rYW#L*-S& z|G)z`JZL<7xMf&r=>; dw)D(?6^52?aSwd7l!R#uRWyKe2dzI(?i-n zU>BK0epy9Rdc&3_?km6;qJJrNRabaT@%*Ct)&`5OpiHS8c>?#QW-qhNEl)NSFJ7`dSP;MoDF4*aMe5K} zSD>xF)n_YqRfsJwbnu|X4%n_z#T`u)RQjM#G3NqVPt#5w>cX!&jHY%DoC#U-=iD(F zntn8vn|tUCP*?7R5abt0U*?@9y0j*N@~kDy{a<-`NeWv;51)1#f7o%{TTIyD1i#~y zQ;hSpg woS<33Pq`;$lx9SfKw@kHAFC$9z}N8S#NwGRuIY4Qrc z!5mRzLYdaoq?Ls1zA>#Hi{BAa&b+xrICaaAQA6wjMJbFFhwTL;o9ZTOn$zMFZG7|t z`bgi9qAJhm+k#jX9l_e>7iiYnl2RpLpD@v)J4MUQXDT7wY~UPHRqM8gN;G|V-6;IG zmEdioJyk_Rd?WP-jF;Mk&*Idy$#qT2=zPwUrC+@Ub3E Iy9XZN`emB&hIhpxG8@|=lthF!`R zy=dKY?bgoKo$+%|S63{X;wrh?$b9;f)wihEi_4d41>qm9QxnRtn@(OZ>-NX(iK=V& zoE;o}@p!vAw)#>^CuAq7|CSoUm_j#S!O^5#uXKLv)HWWkHjKS}tnan&-=-ZjzL-9J zkMU;4CjP~1-g@R$z_FrV@0T*`Jhm8|YbCpwZDd!o&4`0#4Xh8am1Xj=b_`dVJ)v}h zS#=#mgfM10up=^F#v-2xqCzi&;!ZkcJS^nFv8od|#^>|nO{d4g{qI4a)d`9XRO(HQ z4e;rR7N)U|@uv@qBfN3+qNNjtoDd&ga$a@f^cPR}G+k6OJbuEE tL?#&6DNfI zV*`PpM|W5(p<27$**<*|u5XGIe`x$^? a*FbwwTr7v{@aF zQK}p3Hcy+!>+y~eQA~Z(`sek-#s#yrLZ5QmxTVAO!sZjMIc5F)MHkv?3JW8Vg6MGD zg^T8|KjrGV&4qduv^TXwqBW{wbGdNOLu)vk7~#Zy7m4MnuTY!KZ#n!rU)p=6Ro5(< zq7AXw3$W{1P_IWci_ dCQZ*0GuN4TzZY{*WSjy2M$?b7`V9Fx}9|@AA z7A8$*|13ztm^|yLV|O4KNkD}rt$fUXP5{YV-m#;kb7vChuAX#jP2MetPtz4VC=*1F zbt9GOhJA;5zgSK;-M=0S5&|eNf%O3-Tg=8GsH zs$34ZOC}B+rA2Uex6^+Z+hC#-7eo0|^h0tg5V;yS(Em>&9d%A8jZ=rz1|Tg^ozy~( zh3yFLp4a+g1gjc|bHKvE$IU~)VvX?oO0O%b5+UQ+_lsgdZ$#_jRTo}#op9nRl9HPv zaqf5wM!1*%p{O$8izr;@|MSeVZ*Y%18EpKbB!Ii+-se+7qN?b+QlHm(-9;A~Z{J@W z2vipRfnUQ*A9M0}(al&aIp28p86!q*NeW)PNX9A0?Mhhf t#1SJVaya~bJO7aK;d=GnZ>fc@-UF^eRsE6K(w<*<7q=*`mc`y* zc=%Gvll|+-UBC=80saYp*Xi{-GglaCxlB$L)r%!f6DKxh?yr|~&?R#3ppM~;3^XpZ zGK6Ds7kHqHW14nB?_8%gw?N=Acbub07F4`U^Qt;jM6+;#n{kG*Zp=hA5zu|3MkGof ze6$Ydvx*hFccUz`n?KHB5|}bBF|OyADk-|-4O_{4QOv(&Wp!*q!`LBZW9o~ChOcV7 zWZs3%OC|zUvYY6wQl2q>JH$AEeLRUPlQtv;WR0Ujx(6GppcRc=>k=j5@I<1CxSEf2 z*tlDgba7yLWr{M_Gxn6|IWv?buuWnV8A+HWoU~wE_1~Yj!i3KH{Qt+>n*c^tp8Lb| zo@MrZ&rFt?OlBrzg(Q;+*%%<~Ti8JmB0B*UPy_{ZR1`(4hy|$|acR|BTWf2z_hLJ( zw)NJ!Uj4dh8*jZ{>($owf7MDdhwt~iXC|41px*o4@2}*{+0VN^@3Z`#=XpQgv0~BV zp`~qh`>f4ueA8T-N^_g4R^R^3zu$C%$;B==F^-5{tqh#F>F?jXeKi{F%s zm$@J@fRfU-p7=tri1bTg)M-m7eRZ3JN}XsYfdbX74?+jgQhFNC%RPrnjpoWz33FM= zxPKaN9B0;*xepyGt{P_?|4-ve%FKyVm1bk<;Zb*uD>-ziWZcMmg!HJ#1TQ^i8aMp% zs^XEa9%nR{-E>o_$vEO3RmS9FMF%~|meD#=4iY3c81;Wu>jzqf6=q0BN^CySI@SK* zMFSP8ND<|Wct@ZMsoO{#P&K47G^E)~X+`PE8E})eRL-1HI&DTMH1kJ4Tlh>)Gs@;* zbltJ_5h={Iqt`w2U|UW%8Z!ETPPF=k$q`FsdHtl=fd{ xs^Zs# *rcNlufRlaILgfT+kMmy){*F#%z| z1<(Kkr4#@hK!JNgp~&R+$`S$U@|l%ZKXW;~9{r4!Xt8XjVLrku&QUd{(gn+x{QO63 z3zvkxF(;w)w>|iyt8RImu?{gTJ+k$V6I &;DPTRD*ZkFe6@_HtA zp4htiM0?j2*GE#Fi#*BMA{x=*GQjqi( 7H zQ%%O`_RYhC<2 L3yt zY0aj^8`~rlfk`?-Tr5>b?*?t6d8Z{`C>m1^zD2NHntNK($kCueGm> 6naCZ|4!Dh?(G7R&W@^JMDl=Gm7Y8r9d_s?at~NMR(-%ne+ lj7>P%oO2`8Y2oe2D3bu40dXqyb0mDTVtmF0 zA422^I1W$3Rje1g*m;J1Lf)N2kaL6y0|cG>d_Ds}6Yik s`exql>l?x1#j9!UWQR zSgxSBTN&kSH!K(C$`!|Ag>vzNQDfyG@CgS`!Z4y-(%Cg1`WUm0F4ZPzXL_k&(N1UA zCHqC?g02|F0!;wph &H>|2FW zJtt?K_BuUOO%Y-v>L_w;Cxw7bHbYO@M4@7NkU)~rX~tsO)-ym6V=^d#6^jY!p*mrR zh1UnyOqD{agJcJGj=qpn!}v%?gNI>@gZ>nRk`$tt92AWf%L>-uI+l~whB{4f87iF> zL8n2hwHb{ztz_^9%bk@$qYQ}hX|35Dvu=98(qJ^r23XiDhz^6~EH- qG%T@&f+SkjrA4GJU$uZG?E{GU$Vq z#)U#a5Ll!lkq`q~U1f JxH0I|I>TnS6aSliE+9LR&}N$Q(Y}DuRART3L`1E6&F(B7-)WjYzAR|( zaZeuaH=v#dv%_b0I}jGq>~mTTI;t`gL_u yu2#W;0L8o_m%}%F37 S8LJmuaa<0lnR)eL~ zXETI?0Vs1@r0aq+CQmf^D-1I&mRYUkPOG-aFPqd>G+5E_4B;dNt5tFa%q8%pDKnS4 z)_us=B9C?}m*G6*rIqJec%)rSO0X-?7XWuhV-)FevF=jnMcD(TI`-K%zElX`%q}DU zxn96XABo=~yy>g|$Ns3$0hxAaTs^e ^%;l7?6r zB`pE4CP3Cz(&XCv#gXX{SDXJEOy$LMP!#s=xeiF4K&)tB`ZXL+hj`Bp4%2~mYyvry zp*Kcmn|;Vz +h9c6yBmR#Ev9}=ft4asnG+?a=0*aVS8VM3UW&0&_A%iNS2c}2OXHal5cq~!E z1=cfVjjREVPYJ1FUmp?BJ~Tl;K=WznKS_Y KUZ_6$|4iUd6 zjdpiH+c*)?>=$cRq3RqzlduyI1PmHje=fZeci#z}D$l)#A33j0$Y }{JmMV8V>FCRR9`B9xG)I5D-hjB{x^*3DKJ;m6uae8ye zqZ?FXhKb8^Fg`K7W6|}S?_VfSncB8@j&{Ea(h}10zJ>GI1y$9)Xvs}k>)xAg+MC$8 zd&AnPmDP!A{DUTR!|si80|)mhWw{i;*^~1Z?vr=lR1)=7SFv7xk%k}fuSc{!z`})r zXy1xfAQlX)eJQwBbS>lwGz1Tz0A?(A5v)+|Trv-15Pi)W)k|2VGjTkNJ#roAe$bE` ziN7yna$oT)fa#TrA(KnjQfVs+n9Ia)@k_yRmBqIgXD1iGR9qP^xxKjfmEgG1cZpXm zy?ycC%NM`2c*TlkSL|K#%92sXNYRG3hr}{-pvYF)qH~$B4?N+^!NAdC;XUjW2aguV zaZ|8t pfEOhD3g!S*tsIaCGAdEsNH#`> zpY+=&2Qna+w_GY9`q{mVwN3BoJwER0hgtgM+i?0i`1|H!8?1bf-_m)!ch02JR}l;5 zebAQY@ouuGA{sTHVM!H%%;!3dFo(>-EDn{ke57Ss??AeDS_}IWvq!b8Lj|dPpnN1e zuYBZAuUL82RV&3JcB@LEm7QJ6V)j@W`@TZ%CmP+EPoQrUxsGf;G||19y_)MaH{%Lv znSew Nm)W>Us60^m4S}D z6Sv~X3K{~qD55~%CG=+e!&7lsd%$FoI-4cwtKv7fY{9m(fnrfEO91QJ8x2g6?WhD{ruBEU(x;$J&)Nc|Z%AO7S=9u7ne+ zt1}Db;^E_AyhC}q@(tw;;Zfxc Ld5pY?^5*dj|g@rPU*hHq5Cr2j#us&7q^E ztmYVQsuD%@>fpz!I)TDF5P>Dq1lm(@om4O61tRagclV(UgP-nv^W?pk2 =tA8 z{so(QkIohKlNP0xOv?Uqpu8kj#O?%W)ofHYP1*$|qcCm59lP({AnGr<`{W;XX74we z?Hxv8?Y!f?TjvgbI%!F2(IjD-KUNY7Dw}Yv)5z|GGIAGQwvN{CoSjYt^_-xYrsf^s zxFep^Vu+cE0Ct}f--pE_)kki0WG^3aXlYRc%zZlTHY)#N9B)&t25B_6h;Bk;y`eC) zlsP(=Pq7c_2$;XPl9(VdZJl6bMMiht@pwQ(J&I1!6lkDbgXou*N*V90ELPqt?#cBD zRz}bwcm@_|!#Nq!jxYhjwhB9{3U_}5kJ4I_)4h}C9o!5>?ImVG)lREXdOz=YWc;yw zXf8QTMD8@-(td{T(T2S{)-FwsGa2xiDUE6ah{MYc+)Uof#+kQlj4EAzU5D=Pb4#7G zZ4h>SN1yyrp*7&NYW5g;vhapixLt!C;Xm0vfR5C@6#q2(3>%L4t2Qg Ee(_697PXkYC4xwaDcmr6jpt5aETkmoHKfM;jBPD+$+- zL}L?inp#~PNV?J2M~BB{7hSlpcgn;G6HBVM2J{muT=vQKUN&!SW4oXn*Va#&QeRS3 z7g_3G+d6AQ*P?0cD*64wb~v3@zPpVH`l=Z>^vWL;UMbvP(!F}hirSLml)l9{b)1t4 zi4!X>G0zrKCo7zdOPZ={d_}?5w#JEzXEZFXOBS^&KT#Xh>U4>htzSRx{z|hWI`=AN zyK-RY!l-s7{wK|45*u{q8#yhdKt)5tG>SEhpc8PP#xh25dmC)8xrGgsh@bR{VOsrj z8g|b4aKt|G%!wpqdwv&~N-UM2Vliz$;jBL6Xe;(?v2XnK*D ZbO438%M0L7ib|H zAJvPNV0+WS@@0!IEo~`fLVKzm`Bj)zTN~+Ev2x4umg@123WrAr6^QIAuiju4mb^H3 zuTv}4#%F15qTZ_YAgkEyIomEg`q1t@?Hyjbqex!nv<|0!mcxRuf&s4%dEc5c7>cZy zS>oD%SKiw{zb#x}> d%?Qfm$gkrYAZopW)v+#%%by~nMrF4=qgPv< Pxn1+-l?LB)7Nlt9c?rk!WC#ZE>NYFlYr!3tGO7yD7R`(f^u?w zXkOO{Pn1!|0CUGMM02`GU`qd&k4JxRBrXhcCp?AKB)S~AS+GCyiZbH9k=I5Zecqjg z-y%^rLqe>ag4mj&)}#%)WoTC!-W7*Jxj75Y7VM6FL&3|~{KBk=s_b}|b|aVBU62JL z&|$#l389x&a9k=0Jp_&`V^JSb3Mf3!@hjcLqT3Mtsmgi!G<2XphayNzzo%bVx307l ze{BDA&$YMXPy9pfO!nT~j`+{~**BW$Sv=ZI&pLm88-K2JoifOuYkw}gCU-_C&Fx^= zseDU@^Z#~@Uo&r5Q^Y7nEs1wSt^)|rBE=%A372odfT= jqJ7i0{wW&Z#CWB3}bkj?Mx@^f{H|W+v2K^>NHrFZCH} zJX_nJ{P*eme$cz+$phzAFPLZXNJd%fXn6UdV-FqbZKuk46B9a?`q%j#PZjz>Ua_M5 zJMk74|FQFqR#OpsY~owZB-)Ev3x`CHmHZXnIeYkTOn zi-hY&aJRJnJz&tt=VQi`o(_)x!-;%DKC*&Z;r&k|OiV(V>5Za*C?>KSHhScHzODS| zm1D|B&s}=ybIg8>mA?3k-QU^w>J?YKx^MAK=S?lsLazG0SzQ0>Yp=fgnsD(e%0E9v zH?k^bf9}%Ek9Y2WWAKgrb< v*QTF4oq z0sv1KWMQR%MvKA40GM;`UVvme&7&zgdHAMxeRW=yg>;Hl^R7I8<-98ON2uyOK9Ht) zC#8?S5A`bMX)K__mZf`G=Em-*Tj_uI<|F&(&) PI6&uY>_O5)$8kwfw(e;AYt4hw4baC}Hg6~2cjI7OL ZKReV;yu8E39Mx>U zD`<(a+VBj%gX!>vea8x4MD2h!6w!CQj40vAGL0+*`dw|$eBW{Y6MVV`2s!v649|P7 z4< ?E%tBsSZJDPohueqaovT>F2&GOER7SBWA# QPu5q}Pnb|&weJsc zwrs(XMr9zSt1qc=Ix9-*b*T^iRku%?zXfV^-sg{lo^8jT4Lkx$3>dNMeTV|V*g{$u zqG@279bu;(W^PY}vR!%E`N|L2TDEzKuxP{PZ)}imRi0Y7Y|>JXNqGuvKbs}Et7dGT z^yn+%t%G6lkE~(Vx^=T=UvR =mYLQ6APXWjzuU2!#OUgTUe@pr0g*v9c(P*>l zX1%^ApRIh|_ov@jpv}K#8*|-$H`0%b#R#wY&P!L^cFe}y_g%;bz0m =&7djZ3|OE9*-~sUcmY!{ zjT!9@Bcgo3%EnfYbt^PoXWx1y(^Qj|YFjiB-5!lHvWitRd<%KtwRoT17{j|wUW0+u zY?T)fB|{k&i+02>1-Xb@r_&)fl&4c}7!>y2P;r5PjiugY+GgQIf100Pp0Pxco13 zHP^w)0pBwnu)|;uVtET;{*FAlhuQfUh{qiHY}JggfpdD9N&WeBqc+%3r`y=R#_sOE z^RU}qBdp_BvM=x-A$Q+RUvWiFUmtOOg`(|1mpk{PTNuA#j$l$#%ARCb25POrfO3sI zuYKO(%I 4Jib6a{Xb7zJ$*cRNklcPu3m{A8q`DZP^3 zX>rQ`BKhrXCQ=eS%5K(6F7cOc|G>T?K`yq7l^dDK<`*Ygokb44QJJs~gNtYq&8;-| z#28ZOQh*o&Ul%Ig&v}kGn?#<~<|=uz=XkKkA>}#^H0Bx7#P%o}u8|${2wtD+RT#PG zUIF0^aCf2GR3?*u6WufFsA(>)s?XB wYBgur(jVQ-Ed5^(v#h47rV4Ko zp39!va^l1m;w>BI&u Gw48q%uR<6LBk{by?`q3?%cZH!GJ`hM9s}Z@4 z1D17w?6WD-@e0sCG7Ye1ZwTn^ys-r_V$n|?8?6OtQsuKg7UK8QCVL_7Uz$Z9!!)m| z>B+QWv0**v0g+Jq4*XOaP>xDygvl;Rtsg@lkj#YU$C3^gbf_t*D}0R{TtqJD&;ipt z$^B^~+^K~39Q7Xk!OaLiBsvH}zboL{-bD3iSU;z4+Qo+sAG&y2mvNjiZF$F%#&1`8 zb8TC@R9{q7YnfE%?q1XFuA5}3Eh?&)+S_V3ue|N4A3b&3N)e6VveY%;ZK1hMGxsm3 ztzEEx=Eeo48q?QqyX|ZES+Mc0ofGC>(oozS4F;o4B|d*$LrqgtO+%gESJFi1nu{AQ znLA +lP u zJIi2y9$iK>otjb&p)`gtg^;{ejqKQVZ&^d1K`Y#6EGX>fl(7$u*JHr_W-|ih_EBkB zk4yRR9EC&~Ij!Qpe>%+yP0z4JM{PSAu3{1@Q9^GM<$_-*Mu0bz!~h^wDRBneipa^) zh~rqisTm`_R2l+xsHR>irb0GM(bg?p-qz```OKJDbdXIySk!ww1n-0p6juCqS{rm( zMtv9b^(G~ggK!`)7|7It%MTyEyz9#2m#nfib-m!;(1Ex|-5nd;FLah|*;3Y-I^Mgo zq>5&FRmn>7?jJtt+EZ?vT-H?OvaP!0_?57`{`Bp)5vmDoL3~d-*A~#<<@q;&_;n69 zg4cEcpvdVG9Hz 8s7H7 zH<1_C=xC3SPf57!6w{w73)6n2-C@)QVsAc3rzXxo>rljC{7ZGN^C-JdzWw&egYMrP z;jaIs72x}v%0*mzchrf4ic$f9AkC5AxDWD^H+j}|qG>oSR@YpSOS4hT8>m!dipZwY zTF6d~G (LGOVs~!y;`!D$!_J7@#lT*pT2h9cnOQ{ zmvV7oHG;cw`?^V!)@^UhexSVmrCeUr`Jqd3y{?U7=wnoHZx0q$g>4LO@Ez)YZqd@F zcXX#x-JgA=gQjLc(|cT(di!MR;A)EAM+%#h;`qKDN;;cC4@m}$zYxXq6Z$E`5RE~s zK3FqrHB-<>SQ9b$@CoWBb@*}qh;tE~p}+tnj)L~pUZXpQdX+kG#zY>xeBums91U$n z4L=Y1cj_Po&6hLTG^Wtt$24I?6DAd<^~G@Np)Knhz5iK;$IZZkEQSuAiqS$(v2yU^ z(gdK>qj;W+Q3u2TDq!+xfcbQea10a?0y~u!Qha{k 9R+U+E{CMm9y;;j>PwbP%|Vfiw+SEyi?ZahGyKiJ46_ zpLR;%DOlfWjR?A*vjFxDTLRDE_55wvkOyn7&&IMleMj?S&C8lUYW@mt%LXJ)ErTcE z=-j&rj3DY`T0JPEi#5Rc5aMLQI;@&zUn%X@0Ny`2YSa`Jar^9O(xK zJUm{DI7>?GQ3MPV<|#R9Q3y3)K^nmp&|YDzZs@L6`UkBgbd?wZXLs_*kurS8ml>^J zcJ!SA%~L=J&uH?akbkG3JnAmt!PT+JQlOF &(zDyg>t*ylt1S!U5OMU8z8yYVqNZ&LNYopnKMA%s$5Td15GIb&h-wy;7(nQxUO) z^oQjiOL+=! I z&N76PjF1Rp)aEar%W#52WBAkP(o$N}j03HO=^{CH9e6BQ@*;7vASU98BpE#ufY0D8 z!t{ZmuV$>#C&Lq8muAY_N?(6U`TaD`_heFinVwK6oynv_p`J`%iiUhFFpWi1{j7({ z0VbqE_#XnB)evHR{h>@q?@#;n`0ZzXA)Eyh9co4D1MqkNJ*3dyT8uz$#eh!&p~cAU zJmH8Z!^tpMBq4Q1GbaK26j K`6KO|;CDe}oUqd{h?R3?*o`y?Xer_-6xU_a*_ z)7;)myccp^=V=dFMGC19aa`&Mroo%DOK{Gg`~Wdl6!nMi(`3h~k)cX5up<&@h`C3< zWZEM)2_=JH@t;Omd2@2raJf{~&rp$u5I4CZp>XP?8eJ|Wqn3@nfp4j$!skbpOh} (WljNeMNj%T0Ek?M#i~!s_ixMr13DrF}v%W;*i?!!yPL;lKA0r#b zi-3fHMsVH=LS@e854=c@C4=e;_5>oRDszR5;Fixgd!S8m3_!L&6e49wAQlQ``^g-w zg)LhMiMWh}26U@9kDzMNg&h_mI@b2?*qSL4ZX$EE2KsHThol@#W$=Wh%rwKF<1#Pk ztCz}#GVrnz`^O1x2a_8RiLTt;$olBZ{H0R{`VjPxe|-R7mwWou2sDW2WAC%u8LaIB zilfHz6nlo%;I6^NJ;dSkV1?p3JrpjD^+gBo7Z@}17D-wW&Tg^cBIkTD*f(;uw@^y} zEHNDKYZKQ*^{ZOvK`N>E;s`JwZxfMN3i>ujte@-a0 L{L4Jco+rqWSgz{)KAuF?&vJjH! zasy_l0 Q%&Nd89AgGr<{{~TWR*83XGZairpW}j*$)-k^m>$^C zeU9@~ZasMT6xS&l;B83Jod_@5mh(p-77EI+yyrpwm-LIIqHXZz&y4<6?;xE6#^6hH z5a4`Huh79c?d(nbN6PY$=e=_V+t(aiv*w`mk$Uw7C~0@}3D+E4OId4H! |ci5}2&`aJ4eLe9rph~U{2msT^hrG%GfC4%V}_%(hT4~-_gH##$nNCnaD22FBc z1(=3G)kNRMI_z=Nf&}Xre8hQy3JM0`v5d7EuIvTtCNCGasw1r3$BBVV<*I=4J7)rR z*40HU<{Y?5q(bu|krkY2YL3Vg>y+PCADudo8A@OSi7wN8p4TRvAE_==j`{78nliS{ z`~5zurdpLpSzBV-1D&nPvBWf36!^2DgRA={)P<-zTu$Y3gd5mQ zuLa2K_{ZjKdh|nO@WV$p;g?AtKKkyc7zymf%fI^7%kcudrhEPR?tmZ2vzPhw<}a9& zRp>E#Jog%q>ov;BmkQ?X*mXms42nz0F#&|ipsDlUsGHv3Fg{nS`l5hePjyw2|Gm03 z7S-GH)za(hi%?a;@IS4a36=qhPyi$VszHN{vu0nuO6gc23;7QIx#@rs`|s66H5{@h z|67I6@p$-AR~cI0zl3HakNL_gk}B*P*a{;c#S|hU+#sf)5OG@5Rwr~E1-m&d5zCJ} z<@MJyN8db}d0l~Z`E@b-ED}|?W2e}`n zUb6ES*p)u2#YcAXQ5{UvAALxqEp;F0Io8t*=(!h?#xnF3nVdlruyi`Wv6Koto&b25 z5$3|2RggTv$b*g|iE$Js7F7z~Pte$$zgaVgd+L!J7fssm@S4Zo{rFV!g7wK{am~cN z0~bb+eK2KpmP9b$ y``aMq5W?ua#Bams5b zD=TCFDQsC4nvlFI`^ZjPv?yrxiaR5%jsYu;cj@nrRx*6=&dPD8EL|G0hD(cAv>NoT zsPJyY?WyjFbtYXq%(C4H@saF`YTacXai~EvU9*ekp;qT mw@2zv?UnlGlx?n3GRcp;>6>8j{ia7^#*r{*l~8qM$I2 z^dF-YM#g|ri(#W0O7mm*R$WZ`8*~B{l+A Y)gbHH2)g9q0V^-iss*$R0%4uJ?zC{Y3{umECB%eh#sXN&%V^=OG zTY}gA72?;laq7uod}@U#P9K7Z`H+bj;fpW|V@W5bE6C)Cn>_dwO!Pd$jmmB#q>FNi z%cZrHS0{?KdSFb8gz96dH|`sG54-EsBkbqXDf$Yr=-3cge44V0JU!;M-f`eSi`l{S z0e0l;GZt6|M%|~JF8;}5)F;B3&(1uiJtX(Td$JOBs72e04xcO{f2E7Ztc(&86hKf0 z9xLhssqwkwQYPKcm~!`&(vxkhv)#--R*o%`y*`IenWRj@k5^u%d^O~(WuLt5E-CiB zjkLo~Ve087V>_EN*irT{TR(**lzSC(IBNdj19LRY{)?>(C3UmdFUE~iCeG3khrrHc zfycQPtdW {3}X=K=PMo(~e5n=nZBw-iXoZmNgc8(22 gv;yBQ-=P(YeH!7NqV<@o9!5k0aiNtpB!Aa;7 z3H?ra4TV}^F-#bXvyVyXyy0fBZ-m7{T>J?}slo7RKd@sO-1 H7-AK93tV*eS|#E>rtG!=!SV7gYZd^@&Fqx!E`}IxVV=jv 0GO>r?Z_^cQ%{%7PjsM|r~I`73h- z7X=YqNBN60;$huOvUmJd`D-rV4s+t1@^~($4x8^0ZYg+8_V4Pe*&SyzCjZa}nc<9v zj|DhvVn{R=I0g6f6gGW(DXtD%;E6buzXX{YeuugK>cOX$32U6pnG4CI{N*DLinQ!9 z{($mb&sH@Bj;7$1Umx)?l_n^dD0gGt*|`53pBuy26i(3y4~Q9~o`qaOq9la)9Gk(C zPNatwgdRUQ8b9B#_Okeln)tXRj%=Q5=C?JR-!Zv5GSlKTTOPE?dg%7L@4sdd^XDJ% z3p1P7w6zDlz9mJDvZ$+e@$HddYkgI!r06`m{(!O6!i=3;?jRb*3r%{gQpyWNSQi>8 z>f|LT6zzds1uPHq7Ji&Vm+2%WA|)L#v}|10MoELQgR{et%Q85p+M95i?<4K3v?)Vp zX+w1M3~0$SCCN;9CnOA(P|$d z_ci7N2m?HN8WZCFf1LCqUkZbNzR`A A_G6o=XfPdX&1zzk?ARBvFJeDUVQ8d8`JCcG zP0hG+{7U%6U_-mT$?5499AMz_h{3=p=sXAw1(qKqaM%Hxl9X^3gy%bmmnR$)OM_xg zkfXDz{#4VL;AC^sLqm&Va*#J0MvXSTa>2M+wO!GRLd +4Mkb)Zno*DDN-{A4QZwRfoF<$}OR$DR z`vqG#=A%YO-XZF=Byy05X^1Xx^}HsO+ox3_#8-uo7g3dd`&+_A=5-EC^IPS&1fSqp z2(WWTb4vNgDZ=TBsq|aQ5Bm68{eR*^IZ+^k7 eN91XHT6{ (J;0g*>YQacE74V pb1e`dlJ_jyBJYC}=q~Re}c#%=LB76I(gPXoCEZDgDVzmMZp;Wmeeejg4rxAhH z)N_SZwR9;)JQ<)@&@bLVHN1?*J;`md1~gHtDMt+ dCQ!XQc`=? z{AXtB`Wr93GGR9to9&4!FTHX7R2A$Zq=fXqt&?UyEk2&rEPLeI{flM=bjUyzn6+sC zwT~=Q2_wEoJd=jc1AwBS=a_-yW zQ8DcH(j9AxSb&ZH$xhJ{E5QosT_tp)q@2e_F^# Z~S~5hXk&tHZlTK?Zjn z>k*u$O}@u38SJN#E{1v^DZRM9ZFX26(U}|k#?YL})0|Z`RJU-M$tm<86Dig0A7?_^ z9*hYc5Y9t&gYQ3>2a&Rh@kl=qH-`48{K@7DOkO$7nN{Y$ T3Pxt<=FSSdz9<#Mw$ z+(UOQ{O4O-C=X~U6b|pIG6#c46@on=VOZD|#-E5XK<3cC`k?Z}6PDs&%Ok&1p7@pW zZ?yfIG`R7*ZS7UUKvou0Eurw>4DpBb$7U>?HS5RpT0S3g`s)zZ0fgp;l$DRqO|qi5 zq0rnTeq|F}wO?e7F4rcK>ROTD;^(d=;rdbfXWRxi`9|E=gd6ETezWlFQA*~~-^ZuH z9#d!%%A!e;xJQ0pcoCmdUx(MSM&(6b5OMnG?^CI$XlgNE#C=qdFZw=w%lY@Q5b{q0 z$TIT#60d)*HvHXcCE4f(U}_7DE-V|}0Aut)zWD*7Q5#}Z8N}MN>ZNwVXd}Rfyb;h& zBRWjjGe#ezxQ~g0q*|85$fA%o5trPUh`PdY E%>YxC3zoC?yEz zdNQ1-h@0Gc$znWzkFrx~Qg-e+A2FHrZcxk~uU>E4F!keO8KN?o*69F6PH$BYj(t3J zgH5mZvL35bdY3P~gMCV$S1%aOzxAPqZav>1s2ANX`-W8q+`=Kwy+2UCdpaQ@r|&L* zfS<@-?mn<;gWctJs`H=o4H2{-i3}>oKox}JmYP|S3qIhc340=i$bQAGaFwAPXAns7 z)J4N)F&-~C#d8z=kg7pnS2Ac)4G2xn)~m|-oLkA;L-Kj+VKWG+f9En|sbOxJH|Hb8 zE>IIMaudL}hV4#cny-ZS)v&e~ r|jjNsFrNLy=qxWJA)N zj7Im5K4$5bN*E6LhI~24+6T5ZcgOJcf<0 ~jVZinU0H%-iGNn6~A1GwqCe^%bU(`qm}Ex%%` zU)AvoMiVP5jLY)^w-J@U$7WiX8xJ~}>CHPW4!7k_R`%!bZju>tj?r1&tIC7FvN(+f z@x`<7lDV;J;_* hhfu9!V_8+e zEP-gpK(DGQhLLDhKDPO~q52q|tzq~AY!@jhDT%GqDuVkN0qRO)lw^3+QN$h<`f*w1 zZ55a)iGAbnFY%h;dmh0wJ2Qa6ZkDftB_0@S4l6;WDL5m@Iu-!XcS2t>uXx&7nIY#Z zk6v%?GuT-wQ|WX-%YmHSEEN>L9wn_QaHAQ-0**$@Sla6aD4eG9nbVNr%pj47zT*P# z#q~E}7fA7!Byt=k@h90FA_!QfvLdKt@KS(~9rz?vT&6yY0Rhuo*1`K`hZMY*rORSb zA#KW7-C*_#`61XtqIq5bF_njSfzjqh;V}VgJZHyh|CO^jE`}p An_}-J>Gqm`_K5bVQ0~THbyJ5ot122GMplPVTEGnp%3;YgUKymcwFo zu!ut$5JF0SwqH!IE-pS%++Dm{=qoH3`__r3o)-2`7J9^Lp+~YQA;d5@m42aTHJ&(8 zT)eucu%w0UR75ywtb#PYby`G~&T(#VgeL{U=*A*6xf0@m=d7Kx{Uo4 m>wCB#bfAY!D}C`vYkRKP*#6`n z&7#52*6nGk?}JrE$P^Y))!TFWFMx4!LL*5w6$Z04FeniJIQnoz>K$_8Acq@8BZdlK zhG&5gVfjz91=)W)qk%;J76&Sx=AcDkZ6PTI2n@6$N2e(=7NjgbpwvkNmdiDYQjBgT z>2jw}$+)Jtl#I{ms1(wbCkl;yBYRFfKT@Wof =Tr2QHq5?@>< zM`bo$>2Uh6N=$LFlyCRB%fudtL?XzC91JR{GUaz)zDyjateVD~k(~C6+9^fv$EWC9 zzXx^Ygj39rt*3Al3HKE=C2F8#vLDc0xhKSz3fqZ+?rFqNz{B)_BEcqaV^+l1(Zq9V z>^9K5q1|SL$tPVe?je(@Ou<4ZrY;#r!djoYON!@GibW-XH2b{bD-qFbk|m1^=~K$% zuJ@JuC#@wz?i4|sN`+cCm0i%kX|>6q6{|(BMUrgpqF|Zz%I6!{>vm)z^~*uUFN*91 z8#n|%bO6eM@h@EEtSBq?*d^IwG5`BXvxic jruWx3Ys{Ntm4IG`^wUS(o}K`yRXGxyg{>$Mh_a@~`7 z5M^a&K1Dp82O%@9!vRchLo6pD8PNmC{xP2VjK^ND6XSJyXljx}x+X*%qVA(=0R2dC zNQ7e3iVyzcq| K8-9p;64o7E!vlAX(|*6wvwMd#GjCt7-v(_m&;`?a?M-=Ws{j-jTu(T{H( zG71RDzdoQ}wxGD7e4Ni?cSeFW<0iJv9(VYa((hYbPV3{^@^F=1>vSKrG0`YGBPG6N zU4fc-FyeB$ef6=<$t!Ywb`AQh6K%j701 +JVq6=gc%n^q1$$NhVaK zM8sA>pIzg$KJ0t_n-8%Ht5NTH)^1Q<${;+*j)V7km8H}-?4F7LdK(pu_!_76&-IQ+ zAq`e-vO14^-~EJgr`_o^vx|Rauv}$vEnDQY;=)ds S@{NmSq%>99ttG}oUo9(o2wz!r$ty_Sum;(5} zQ&}Ec?qA_x54!ADNA?+)WsB9h)MeR>I3GW-xQLe_VG?yf=p*dX5)DTxL? ^4wsSr>$J)&ybf!Hq5T!fL~inw6nMc7PuyM-I$5jp`ONIjv- zh$0^`A~H+S_=t-`r5&b+V!mIXtD`=Ft|Qksgl cx6sdpD`lh6eq%sBk8Qp{ z=fBdgTgNUuUk==8HyY(t7t<}bm46R3V<|!mz0N@0WcDq1?qwlLBin-v`vrR}oep7? zW>5J2!WL|;Mqvx*wefMBXDe(LvtK#Ew)oYp8G(r&&fUP}TO=VO8)KtpCXY?zrQ|5E z;&~#8^0+60aHQ2N2~Nz>h?K_IPxu;=h?Uyhhz+vBHq}XpWbbJ3Hgsy~080Z7IG5v$N#m8@&v3+{IS2{Dm1`+w-sYZ5` zv9hiQ85{gm_;^rP)^ %2t z3?dApoWCU5`F%2Z))Z)G8pDzXc-a$HYxZF{l7@!DLxf;A`i<49Y_WPnl`RAPq(-1< z511}wFUY^Q67yyzMx_@v122Nlk9alQc*qyHP^=pr&U^H+d RyO|EGSA z^7iz1?|)a?^1FJw |gXw6HI-3 z#H)LIj~wak6^>_nN7uQL>Kq-eGXdI%CB}j}lf!Lct;El5gD zs ?AvoR2(F%hGWh0K`U zEQJbn3h4c8n)*$^76(d-4p@dCoYC+DY BE3_IEtM$B}dF-NL%thU-4Misx(# zZd)yA3)iT&8GS7EIbkTvmtF~t*%AV78d2X7EitTj2@O?l*I3QKb`4!WN9FnamcN~w z-&0609|c{abhqFr&pFnkKp~P&CJu}g-I$Dk_7g6knRqOk2+(gMQ3;_)C{>AEzM`$E zb5>Ww^z6N3SNJc1mhRotI_vz-xXm7oE!k)nJPT`juRn6(z6VQ{>W7$sERCIuGW-5G zsdx6Sxy{SQs&BG$&xMO7*!8-dI?1woxv%)vja!dCBh>HO#U9uBWxLtpY+d%lEWo}a z>)p&FM-JEfbLrZss<}R|DZaSguN2np+0SVNDOd4 Ne8^>%5Vx3gkIfZqf z^seXSdmI1{^yKJB*BAmw|AG8slw*uSvr;xO08dGe49y6_*LOlgf+U0#=odH-%9{$I zk l_YS+|Zi3?&>LbFQ2zB5{Ok4`L|5y3OfS^ zgU(d!b_MEY)rW0>jJlknRWC8m{9PG(1>PtGhdefLV%emc(A vo}z0@C@TT`y}yR8@kyd5-%n?RTe-VWqYMKTg^ z2bIF*)#V=M^>E1-IbZ>J;USI@j1K>(G4ky}jnRe`AMHhdI`_F+VQZ4@oUi<+q_>Jt zRWgGuTtBNW;Bpt6bOuAf8Sa{}#a~nr3q cU+noHDz1Oss#9}3_{3qDXb}9c}W*7VnX=9^K zfY0=W8YG$>groZ<)`;Qpu?lf+4rp%F+@<*rm&vghklTn1POqr}*&h&h*U=arqg(Qw zha3ov2^vq$(L{s~7{oF a-y~MBu?mq$k8j2x}D4>6DYG(Ul*2 z#F-FD@*#l#*&|eZJnr*)eQ~zvyz>TIw<*tW-M~UCSC$5yB3r39*Ntyxj~N`z6KYnj ztR3GBJolnif<9FDy 3+K5Zt15+U2SY?<(Kz`COK>1^QX)|Hk3_S>Ek-sSs) zflZfhu+~S5duOm86vw){qQ%A0uC7=yTd*q8P-oGvV#u9b$}0YKs+ZMzyXxw?j;~ph z{RR7ra($IY46*IX {+$_S*F9^7k)o>(+Wa+U~X;f1!Py+pWXCWQ7s@Z_GCP@a84TXVbs45KqUtztc@G zS)^E!ol$=yJFMIm7QEH$0QB=5FLb^92~baQ^sZKwmXodqz)gvPCo_zWfh4L57}m__ zq_EWZX)yLzkK34K>^|U~eSfVCh`%(MvLCT-lhNq?Yn5Ml%qg&<_}{$ZMyE2nuAEXp zU{c#`wQPgkGk6}$e$DN$)e0Ad#9Ii?lUu7u)~B)n#SbC@L6lnyJV^cG#fOuOp8-~z zA2r7rWDkOR6N{Rk{=#Edddi-5>UH`9&lwDQ`wz=pVp8Y$=Teul5u&v_^t4l_Hz _8PEhd2ZL8Y%i||hR75BH&%VPNVgu~N=`7o9 zkf9&d8tp!twrF)Sb=$bg8*aNTxe}|f&t}w$q6^}cB+155(OK8+bRCWas+}n Bfijn2ng>0GPRK6|Ou| X-W#vz7lJd@W<@dM|YxwpaRt$`$pu8jfM){NS3bQJISN^8_gq4U_ zDnC*F&c>6V4Z8F`esrKwwp@8MG7>o=_Nc>^ly#J*l>S73#R%mlDSfBc^*tUIZQ<;S zslppmv;Vb8*tF@l?5(sC$vz>5dRRZ4Fw#m$FyHg_yM@3}<+0m@AMDGX*(dJHUezO9 zefqwWCowM7c2M CYQQdF_p=McqsmMD!uPWC z`WVtZo$YJAK)zaj9y${8rkqM+0f=mLDAe k*t6}6atsm>vt#OCB?CdS;>p7KVLU#jws!} zdes&0xM$W(P~K8LtgcHrOIIh`-+6OVV)Zh;%~Dgb?B$dH%h{#v-Ap~WQI?o+nh zZ >D(yp6-Ss^#M%T3+x;#C%R%mb`l!|*J41XE1IKp(FZPk}y`gM;^h z{%Gq&Fvy68jFCui2M@H8rD#EMd$;fLm0KR$F+cq9%w1jM-7?cj|HbAhPgp`z$IpNH z!$>C+T2}Af+bV>99aw(;#mj4Dow8yud%CnKfh3QGHhnd#Y#d7)(EqTN5qJZH4{o&l zTb(dok6f9h9i2686-`A(#sGlVGr1_SvFn=Z<#(;0c8J|y*nV@K@-koLI3K&^r);{h zX4#fyMPFCeOuV#rvcSem^@Y_3p5#nQlu>thNN5NE0S;9)xp3qi2Y(13+bzodMvK*` z++)!j-2JNe9E3Kzl7>HL+U{~m{iLcH2vK|Dof=V=GxW|JMup4>+_g`2AY@)4JM ?d$sG$9 zHl8?k`_3KTnz?mLdF{GQGxn@$YFZGPd{}wAq;yhqb9AaWXZGU^2?g2Y0|%Z9g~H`H zkpKS9(Icg$<>iwrQd1k(?A-rz>57gyb0#%AP1 2zO4Oldv#Sin_ZU@ zzP&9yxIVpohR$r!&0PEX+L=0wS;vmk_4cajcB#Zi?@|A~++L+Ds%~$uX5X%AcV#!# zrT#=me^R%pI^j-sEcvtDyMLCv)}qsz4^~wjG;4L1?6Le))opDW! +vLeMPSv_vYN{Z_`81Q1vK1>h1f|x5Tv7qw!3M~n+ zd8;3e$J7-8%O^RCSV?0OqtR& @s$cx7%DYi z`w41ch4r2{1ihb{fOtce;046nN=2Al@J1>lsodzTR1=iF6UV4^630}uX1a-gANOL> z HR&v3@q%Wrr^+j`(h`f)w*Z-zwR%rTLc%mzs;HAICHKPyyI5ALud>#~ zC5x7cZe!iv>uP)^vw%-(J)%z#9D>(Y!KTj7-Y1&01_9s$(Im151cO5>8)U5@TC1D} z)Ax;L(W(;!pvPNei)aJ>PZXF@kf6HLGrLtty1jzV?~4Xv`q ~GS zu9;EMSX}a8%9X09_RGd{21G0~T9-LW{hmaqvD{#B3T7Zv%0;o @U!PoQ1FK;&27}Gz&Y;s^6}&O0 z-R&~AoLAY_F)K0N6c2^NqLo=~0eeu|$XrZ|s{FsSy$5_$W!gSG&neS;pG@zQ-ZSZ$ zR7glDq4&_MQl$$+u?s2+SWseFTm)SOEGW8JU0v6TuWj|U;4ZrA+I1BnbNpY=nFJ!% z_xJriG-u9vPJhl*?sDDNO?0eEBNaM{9MoKLB}4Q|WH!U+W`rA!cAdkicPj(3Y`)-p zv$^iJ Z%I!>`ijL zoZ%I+61{G4L@v#9G(yuhE%#aGjn6QKeJVD~kih_ELv-fH n_-Rx8lWM$Xjc)XR(tw-wD8AIar&5K^r{ zvsN2awy`RGK{%vPb4p_%(CRnytVWk5wX3ZvU6a JEl6h6f#ug5WF-#zgN|&3|Za%CX6>qt)eh}|3 z3_9>y4wb5HklI`9ajFoaLAmVGGPG9WgT*8dERwb0cbN_eFv13@b3Y2J8yksoemX RQl3 KkzY9CbxZy?DUcNRG=8SVzt-HL(NAlRW{^xIFGZ$Ug`z0oHX4sLF?ZY-N zYhE*`T6cooP88 ksuDYbNr-PWPn$y{4lJ6Wb( z_ulyNH%)2MY6$<@tAD8fYS-u0-p@Z6@;-YWA=lhty6csU=CW#w5cu#QQ9BY9t*+86 zsSV8wqM?juo*sC4N_Ur*b3`4aRx$;%SxFuXBpgDW;oboLgT}PN(M8iWi3~Y3OFE|P zJUGMBeuG*jornvCA)1z044i{R1gVI#8es>wayz1x<2nlGdR$pX-PPGmu~1G%e#PPg zT}{bFjghu7)!QdneZ%XEM-*lixr>Uw+1GmUq6V_yy*-=ecC=n4oPKnXet6#o;pql> zqiAGVj$LJ!$@KaRLx >Hiug-xO&ff z!}W_ECHz&b9dkFOH-yu419d?CLl<)QL*xkpCD(*nKo&v@Re)$iSyW(h!z`07>vsW{ z#idHjGaL?+Ng)HA3E{EI*s=`59u4y@ORC)Fm6D*% XPBH?BOI-*6*cDvW@z$`+V7~_Uu6s`b<==hB1jh zF6M)z2tVj4Y|vt&4NFA9pV2VTm`tTWE>Q`Q5?TP+206Yzwg==Rv10eXa=%j`s;MEb zJFfu_GsSng|8f_{%0czoI)^0Zw1S69=-T}7=FJZi;6Jj-=q 1xU*t73 A)SZ4vfom&e?8l3cJrNZQ#hdcx-Pvw}n9IO6Fk3b;?ug~LS@c+dTXFBo;!|9r@Q zGQ2#|FbM&z_`^C#L_y3c92cL4P0%ze;QsIGT`WGyF` -)lPPfg T!-rwW)sql*lF(sAKyesgMxBO)`gSs^vzNiuN_Bjf@B&a} z(kUl3nv+wcfSr+|E?#F)pFFA2V=pO6?^UbQdxaOUSFbsFQZ0V-B>xwFBe3U%sB1c| z(P2$0j)2JA85XnDiW%6;LZX;VsXQn^7#raA`K+w`0pXd$bN~JW!p1gTjR`X{MY!nr zZklp-*^|V0Lyp1dA2V_Lsq0pppXt@gKEm6SJ<#)qYT=&OH-Y4E?Gw*_z2*ht+I<7D zJ$Ip$$;|W)eR0`!r?wXxz1mn`pHA{=Uv@VA8sbm|AFlr=c>QyI+cX>X8Bz{r_P`#T zz=ni&XDOD fLPn-QZR=-F-YmXh|g>A<9P>q-fs1@+HI^m`qRd z`b;14b@wKn(WplIBEYz%=6@~iMz|!2q)$v=MtGBvT=d8z=-_y#UfB+=RdO*lpgE-V zI9suofi%EC(c`5N%#N^NayB!N9)JhH=tE1OWQi;}kXjH0jCKI#Ew%`O fEd6?C)&iJ#Zc7*-VeqWE<;kM^|rh1nM2hEuOUHYhOI?VO5|CfNw6o(X3y}7 zdONGMn{=>MamL`XK|7aBcG#7{g>$!7OF34TMT}}I&+Fx82!!sk?3hc#NR0|5&uC$5 ztJW9|mePkiOU+Km_mJtO2Cdu}$f^xj=W}X~XQXB&@kNWI?8(FjzS5cA%$TJH53zXy zuZwsb9B)>uEn}MVVXv|Wo3nKeDQ{xA%=$*VT^ZZfO{81(R$gj?yveaDOVI+CyLw!q zizo6><=oa-gGL=tFjkW)gCT0(;PqFQjE|^l1NmMB!)0Votev}Bse|hY|1-Q!K|LIj zAMTRr`B|_r(@`%Uh?RNp&`ZK+bYeOqi|R2HP-wQOX;dbv9`XGl=yJ3(BJ3T=9ZCR9 z<7kc8qzWO@3 Zlt)iQd?eCH>iL_n)7a=8l zAbj)crYn;B$oRJUTu!RhNu^i3mY18$@LHw1Vp7xcQ4W(l+lB`-kE^q1aeRionv5P> z990yRWyoEj+S&tST?J~dYwcIPffk)M!yjn&Id9T9d62DnwY+M|?5 5*J|WzcdhUKe(z(+6pGzGgp*sUpri?v#_0=c& z8o}8sOq=mKu|GnZUrS{PAHF_=?CB-%dtMXJMa4cU;nzS`TYwEMOT|^G1f~(pz8H_S z46G+$utmyry3W&e9tNk A*vR0kd}63DP85)_{L3{J7dbQYQ15Ju;-X5 zBg1qz$(|h=JZ0SUF(ds;pT1;iouf2EW*yWtwR21&SK6{+`k0zxzm*56gL6=Mi8fN) zdR}#imzv>kg^r}nFB>;?V-pjt89I7YdzHapE0WrW3}3l?8@X@z@){qj^*EHu6T ^* zK4IL*mNMWRCT7TNb)}VF#x`_AXN|{*{=;5-smxZD7hww1HbL$+xb7%w+$_dYiBcA< zg49F@lbnJ6g@Ip73oqPj%SKcPy{XSfEaP4~oz?%hYy>-W#4_S+7`;;XnrK#zZXhi` z0F*o!iz^!&N3C2rK-P3XTEfgJ#sXo)|FIz!ngOx?LLe8H>`QLipLjE!+;rcs1$8mo zekRB1{$C638qjWO{!{T;>4*%NzbK2Q*#|}BJES?|FFq^HV@e LzK~uRm^8w3)(SE{epkn*LUl73O@iAsu37Fw=P1 zUk?0YdnnXQ-4`OJj`TkDJ7T|(7J~XS`{iEaFJuVl^XF#$TAqNuNP03bj_;@G0@8B1 zbTZ^}i T`(u{G;17Ipbuoem1#L *Tw z9@#B?chgIE8P;qEJJ0%8FJPRNKY#%-X82r)*~4rXBiD{8YnU>(DNODZ=IP1bVullB z@^gpYxrr!t-%qk?Ht#l zJe#WKITt!h+Eo=rx@uih*UkTY>(oI15xeOhQn~Q8sjK3xePw@tR4toq@3J?R9E$&M z{16P&PO_o*j2{^uG{`@2Bv9Fs>cD1(ORHj{nnCqmz}p9|r=j3(i1jo|M8;eCR}5t| z9WS(IE0=s!IQr*qt?_lhFcccwNBzG>Eegp>U4{+$Thc#A2`82^J%1LCJ_;1{j0OVi zM$#r9H2KWhDXLlCznnMI^3{|3R|E$_@*l%KIu2nTqVJH-pV=4ZjjBw)j5zSo!S0M# z488o^NX2t&o=ZXxMsH8hq`>qENSC-lx_&bf{3pkYSNgTc@U$-{DNkbDjzaFK1=d3J zzESxZng}ug!0;_ra4A{~ViO_3h&WUti(_)L(WqX(R2G1MN}YDF;;=yzT0ioDbH%(r z!Yn-hmSjR>l2vweR3b7dk-X)6ZhY28{rEMxxogJjH)csoOGh*{ogU48_r~WHi=8gv z__VsN$?ltPc2Dlg8wXq~r_C>F4UwmN70XF?B9ZU6I~arAz&Pyw{6s=#Wp%|lp`2nJ zYnAne7Kc0q*A)n_MY0MImUBEoj*;W!7zN348o$FbJV8Gh3m( Y0Ul% 9zshu*J>D4srP~{*PzGKIDm~snxiV;s8tqao zk=nE5*fq03=QUasS{8 <)-GX2c1s*%DE}nqfrcc0a<_54O9vPtS z%K`JTP7(p%vjn~IM|czPUt{nQdBmvXOY<;8gDmTxO<*ad4NF>7%g4jDWFQ)a1rJ5w z$ bp%*yHG {)Py0m?SYGI}`MS)1LECj2hO*CD4;924kiby3^K%F72nqcdc z_+Yfu!>{6lF;j0WllVeq*p9&PE5){TLnB%A*Uxx4uai5ucH!f^ER)t`dVa_TwLyvu zAj4PvQTVX0Oy*P0BO{->mZ;__<82(LmKxD7>I5k`WY%w7Jda&F_1K^OQ`LJLSxDNy z*tYEp;jnO>aG0(k0&W7SdH>Q&-xr<`_6kqXH70rc&R)}0vK&V7XtisC2A=s!mS_BK zqJ)=9Z8T|#TzE*3vp@l)OS>PL-!&qxwws(fk2=IJcsaFN%IEmF&U>DCN!T-+*}HE+ z7E|)08@G!O^ZkRDzE5h-c?Q%!wcRDf`ZrQW31Z+QAvzF+;ua}qF>^KpF@@oiE9Gol zt? i zt+m9;4Y!`|h7z7yo?R}jtE^;{3SEy*p=2s6>s4cgLsl!-h22~ib5!_i^NMEtPpa>i z$ryc}T!4=GLg1!Zq1NVzFifk$KP|a0(%c$(aqV1ro*cOqiO`Mrr+9`4`i>u8&J=;O z!vr=|>KlQ&W`tWLPFJ G AXndH3w(%J_%{% {K^SpE0EuiW&maPr+v1%oGbhUw@48?)F>X{>BOGF0?z;Dh+6 z9R_+owbd1gU`4c%ba)b2xTH&)=Jz~411*=yTN{zzHC2ggpZRF3TZ6#Pc-7+(@>HfN>X<@i5<870) z`S8YINl{A}J_7rbPZ7J!6C$&JrazJ;dR=X;PA`=f7D`{i#n6@}gy}U)ItyDu6QsnM z8!jnrD=jMIEyB~X3E`H)V5QFK-uBEh+k6gP#Up1%mUIWl7=zCv)>FT3L9;;7@l>>X z(Pm5QiB?lsG k#54PT2W3@zhjL#>eL1*Gb{20GzL9qLs ;ub);VIC(`<5*%XZSA3DwJQTSi8lW0z-+IBSP3UNlU2-|TdnSFPz>x@0)PWa=`N zy}M?;+37N^&2X(9ju5E3&o$Q5G5U5{lAjE1AEPF$UVRTug+~mT{mJgdhnDdukcxY3 z@$@b(Qa!4=_r8Ot$zZIc{&a8e6XYr~`1Ha1dN)6T61IE=h1sNb|LNrEgG4Eu0zf94 zS-AhJZw_2qd8_d4!PDR0OVl-$!dF>URapb|9?GSHTuz9pr;auJ{7mdsPbwk!CU0hX z$nnXW69d0*H#yGqY@RImQi;u+d*GK6eZZ0oxrF-wEn0!GndUTeL$lAs`_pN{??9Y3 z)@XcA5U&i3UMW~jQ8sXW@N=n8$l$f)hUf8*co|FTKV-1*5G}fqF=O8#0bG=8xet0X znIqV@M7Rpa3}Rn@uCurE_Rc%f1!q>#zbGcl2%YaUNVH|(Xy1%37wOaZ(0@dTEDXS~ z0#gkTB``RPupxxoQ{fAuF8s0JAEpo^YITOVCiXbki#10G6STMaPb8NOuontcFO7rdR!VIm#U}JUQ{nTqsDrZn7SMo|5 znV_`gdi=>vA!qBbaf{>2?qHa9cVkP%&J}BX8AIy_nS=R0m%DV`G2uVLG2w$(lhLZq zA)WaqZCkL$6UvcqtjIZ#Z3&HT92t)mnY7kGA*3I((&u7X&hM0|x8!SeN_CFiESH%X z4W|V5fzfGo1}Uc|`PSTA*T_*MR#_P% RBtMy`A=|0l$s3VI2MdjY}`wsDY- z$VypeppKxc>DXu;Q%h{3xq-{;-sP#kd$fLW>*!VEo2_~E>RqaEI6OD(*>&q<>g(0v zxou(h_1(K}-Q{V@akflYHM)J7denY)&Z^OEOSNMjX;SSHkMUgJjsM( J$SKx%sut$>s8^okuW`wG15D> z&7*h3f1bu8V|942)zjO|`KNb`UOi=yE2l|3Bz;|ask=w3mT|U@<*LySHugPl`dK`U zxfw%duTJAHBq9euGa{%bA}7)uXm6KEZbx0y>Js5?XxC`G(LNkj9DRU6rPJn48$PB8 z>Ky^V41IyxzG*v`p`qh{D3CZRNRNucY>(rLc*HS<4Lq^2QSh?Z2yehAjN&M&;KTb! zznOS0<{#R*0Dq+Rp=b#Lw&;E02EHf<)0V}+Yy(2moRckU;u;%A*f}pNZMSUH8k!jS zY^No zfqAU%iqj{V2U2a^8?*19`H$JTFAI50jd1Fgve>5WmHtt~zO0ig<($jUwcb5w>eZul z-msGF=sl%P<;gT4@kUI;{A>itKnSlwaQ`zbVqnZ}zLc3WbgB+q-rP9*15VFn3KC#c za*8ifg6oGfNDYjX)$4;y5Kte0i!4l01z$A6B`slqRy?lL*mP>vrprJ# F_meVODD!H4U&vSOIRtnM6yeAr{qCN586Xo15Mju@Rg7S z BEO4G5zR_>#0eo4CEkAp~ces6cf6i{V! z$GSlK7EAd=4wqkC5Xmp@5_kO8{w^Q`Qb`WfgJ(0w-X2)doRZAniPXE2Sa}SO(G^3w zb84fa3nDJhT@`+|bilE{c>vi)0Ke!KVD+W4Hjhyj*Z_)zuY y7byrFDAXf6v zk{2cKN <>^|XX8Nl%*2 f-FAa8eT4R zr(r~I32*g2Edq#=LQ(_}m6H%yC|#}-CtT&j-%kUGaDS>3C&l;x9c1HT#B7Z~PsCIU zFdrHyl~>@krD9H>*n`wiMH~QpV*U##z`+1bf)O5YH1?4&b*l7 #DKr zSX(XJHL9b1bBnkjm#-kkhXQpC*-f9