From 712398ed791a2f09d3cc8aa7e5e8a5d3915b4a23 Mon Sep 17 00:00:00 2001 From: Andrea Pollastri <18210420+andreapollastri@users.noreply.github.com> Date: Mon, 13 Dec 2021 12:51:47 +0100 Subject: [PATCH] Fixes --- CHANGELOG.md | 17 +++ README.md | 25 ++-- app/Console/Commands/ActiveSetupCount.php | 3 - app/Console/Commands/CipiUpdate.php | 29 ++-- app/Console/Commands/LogRotate.php | 59 +++++++++ app/Console/Kernel.php | 9 +- app/Http/Controllers/AuthController.php | 26 ++++ app/Http/Controllers/ShellController.php | 1 - app/Http/Middleware/VerifyCsrfToken.php | 2 +- app/Jobs/DeleteAliasSSH.php | 1 - app/Jobs/DeleteSiteSSH.php | 1 - app/Jobs/EditSiteBasepathSSH.php | 1 - app/Jobs/EditSiteDeploySSH.php | 1 - app/Jobs/EditSiteDomainSSH.php | 1 - app/Jobs/EditSitePhpSSH.php | 3 +- app/Jobs/EditSiteSupervisorSSH.php | 1 - app/Models/Server.php | 3 +- composer.lock | 154 +++++++++++----------- public/.DS_Store | Bin 0 -> 6148 bytes public/favicon.ico | 0 public/favicon.png | Bin 34293 -> 6073 bytes resources/lang/en/cipi.php | 36 ++--- routes/web.php | 4 + storage/app/cipi/version.md | 2 +- utility/cipi-update/run.sh | 1 - utility/zero-page/index.php | 8 +- 26 files changed, 245 insertions(+), 143 deletions(-) create mode 100644 app/Console/Commands/LogRotate.php create mode 100644 public/.DS_Store delete mode 100644 public/favicon.ico diff --git a/CHANGELOG.md b/CHANGELOG.md index 78b29442..c7e4ce9b 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -10,6 +10,23 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 (no unreleased versions) +## [3.1.11] - 2021-12-13 + +### Added +- Sites Log Rotation Logic + +### Fixed +- Solved APP login issue +- Solved PHP switch error +- Cipi commands +- Composer Update +- Favicon +- Readme file +- Minor Fix + +### Removed +- Unused namespaces + ## [3.1.10] - 2021-12-11 ### Fixed diff --git a/README.md b/README.md index 4375bf9f..3e162b47 100644 --- a/README.md +++ b/README.md @@ -35,7 +35,7 @@ Visit website: https://cipi.sh Cipi Documentation is available at: https://cipi.sh/docs.html. ## Installation -``` +```bash wget -O - https://cipi.sh/go.sh | bash ``` #### Installation on AWS @@ -46,19 +46,20 @@ $ ssh ubuntu@ $ ubuntu@aws:~$ sudo -s $ root@aws:~# wget -O - https://cipi.sh/go.sh | bash ``` -Remember to open ports: 22, 80 and 443. +Remember to open ports: 22, 80 and 443! #### Installation Note Before you can use Cipi, please make sure your server fulfils these requirements: - Ubuntu 20.04 x86_64 LTS (Fresh installation) -- If the server is virtual (VPS), OpenVZ may not be supported (Kernel 2.6) +- If the server is virtual (VPS), OpenVZ may not be supported +- We are checking Cipi compatibility within Oracle / ARM (not full supported yet) -Hardware Requirement: More than 1GB of HDD / At least 1 core processor / 512MB minimum RAM / At least 1 public IP Address (NAT VPS is not supported) / External firewall / For VPS providers such as AWS, those providers already include an external firewall for your VPS. Please open port 22, 80 and 443 to install Cipi. +Hardware Requirement: More than 1GB of HD / At least 1 core processor / 512MB minimum RAM / At least 1 public IP Address (IPv6 and NAT VPS are not supported) / For VPS providers such as AWS, those providers already include an external firewall for your VPS. Please open port 22, 80 and 443 to install Cipi. Installation may take up to about 30 minutes which may also depend on your server's internet speed. After the installation is completed, you are ready to use Cipi to manage your servers. -To correctly manage remote servers Cipi has to be on a public IP address. Do not use it in localhost! +To correctly manage remote servers Cipi has to be on a public IP address (IPv4). Do not use it in localhost! ## Cipi LEMP environment - nginx: 1.18 @@ -66,7 +67,7 @@ To correctly manage remote servers Cipi has to be on a public IP address. Do not - MySql: 8 - node: 16 - npm: 8 -- Composer: 2.x +- Composer: 2 ## Screenshots @@ -80,16 +81,16 @@ To correctly manage remote servers Cipi has to be on a public IP address. Do not Cipi is easy, stable, powerful and free for any personal and commercial use and it's a perfect alternative to Runcloud, Ploi.io, Serverpilot, Forge, Moss.sh and similar software... ## Mobile App -Christian Giupponi (co-founder of ZeroUno Agency - https://zerouno.io/) developed Cipi Mobile Application.
-ANDROID VERSION: https://play.google.com/store/apps/details?id=it.christiangiupponi.cipi
-IOS VERSION: Coming soon!

+Christian Giupponi (https://zerouno.io) has developed the Cipi Mobile App.
+Android: https://play.google.com/store/apps/details?id=it.christiangiupponi.cipi
+iOS: Coming soon!

## Cipi Roadmap... what's next? - -

Version 4 on May 2022

+- Cipi Version 4 (half 2022) - Laravel 9 support - Backup on s3 -- Minor Improvements! +- Apps installer +- ... ## Contributing Thank you for considering contributing to the Cipi Project (code, issues, feedbacks, stars, promo, beers) :) diff --git a/app/Console/Commands/ActiveSetupCount.php b/app/Console/Commands/ActiveSetupCount.php index 0846ae65..6bf4feb3 100644 --- a/app/Console/Commands/ActiveSetupCount.php +++ b/app/Console/Commands/ActiveSetupCount.php @@ -2,10 +2,7 @@ namespace App\Console\Commands; -use App\Models\Server; -use phpseclib3\Net\SSH2; use Illuminate\Console\Command; -use Illuminate\Support\Facades\Http; class ActiveSetupCount extends Command { diff --git a/app/Console/Commands/CipiUpdate.php b/app/Console/Commands/CipiUpdate.php index 4b0a0bdb..9793a141 100644 --- a/app/Console/Commands/CipiUpdate.php +++ b/app/Console/Commands/CipiUpdate.php @@ -5,7 +5,6 @@ use App\Models\Server; use phpseclib3\Net\SSH2; use Illuminate\Console\Command; -use Illuminate\Support\Facades\Http; class CipiUpdate extends Command { @@ -58,22 +57,22 @@ public function handle() $server->save(); } - // 2021-12-10 and 2021-12-09 patches - $servers = Server::where('build', '<', '202112101')->get(); + // 2021-12-10 and 2021-12-09 patches + $servers = Server::where('build', '<', '202112101')->get(); - foreach ($servers as $server) { - $ssh = new SSH2($server->ip, 22); - $ssh->login('cipi', $server->password); - $ssh->setTimeout(360); - $ssh->exec('echo '.$server->password.' | sudo -S sudo wget '.config('app.url').'/sh/client-patch/202112101'); - $ssh->exec('echo '.$server->password.' | sudo -S sudo dos2unix 202112101'); - $ssh->exec('echo '.$server->password.' | sudo -S sudo bash 202112101'); - $ssh->exec('echo '.$server->password.' | sudo -S sudo unlink 202112101'); - $ssh->exec('exit'); + foreach ($servers as $server) { + $ssh = new SSH2($server->ip, 22); + $ssh->login('cipi', $server->password); + $ssh->setTimeout(360); + $ssh->exec('echo '.$server->password.' | sudo -S sudo wget '.config('app.url').'/sh/client-patch/202112101'); + $ssh->exec('echo '.$server->password.' | sudo -S sudo dos2unix 202112101'); + $ssh->exec('echo '.$server->password.' | sudo -S sudo bash 202112101'); + $ssh->exec('echo '.$server->password.' | sudo -S sudo unlink 202112101'); + $ssh->exec('exit'); - $server->build = '202112101'; - $server->save(); - } + $server->build = '202112101'; + $server->save(); + } $server = Server::where('default', 1)->first(); diff --git a/app/Console/Commands/LogRotate.php b/app/Console/Commands/LogRotate.php new file mode 100644 index 00000000..2c811ab0 --- /dev/null +++ b/app/Console/Commands/LogRotate.php @@ -0,0 +1,59 @@ +sites as $site) { + $ssh = new SSH2($server->ip, 22); + $ssh->login('cipi', $server->password); + $ssh->setTimeout(360); + $ssh->exec('echo '.$server->password.' | sudo -S sudo unlink /home/'.$site->username.'/log/access_bk_'.date('N').'.log'); + $ssh->exec('echo '.$server->password.' | sudo -S sudo mv /home/'.$site->username.'/log/access.log /home/'.$site->username.'/log/access_bk_'.date('N').'.log'); + $ssh->exec('echo '.$server->password.' | sudo -S sudo unlink /home/'.$site->username.'/log/error_bk_'.date('N').'.log'); + $ssh->exec('echo '.$server->password.' | sudo -S sudo mv /home/'.$site->username.'/log/error.log /home/'.$site->username.'/log/error_bk_'.date('N').'.log'); + $ssh->exec('exit'); + } + } + + return 0; + } +} diff --git a/app/Console/Kernel.php b/app/Console/Kernel.php index 4ab0fdeb..f5cab50c 100644 --- a/app/Console/Kernel.php +++ b/app/Console/Kernel.php @@ -13,7 +13,10 @@ class Kernel extends ConsoleKernel * @var array */ protected $commands = [ - // + \App\Console\Commands\ActiveSetupCount::class, + \App\Console\Commands\LogRotate::class, + \App\Console\Commands\ServerSetupCheck::class, + \App\Console\Commands\CipiUpdate::class, ]; /** @@ -25,9 +28,8 @@ class Kernel extends ConsoleKernel protected function schedule(Schedule $schedule) { $schedule->command('servers:setupcheck')->everyMinute(); - $schedule->command('cipi:update')->dailyAt('12:05'); - + $schedule->command('cipi:logrotate')->dailyAt('00:00'); $schedule->command('cipi:activesetupcount')->dailyAt('03:03'); } @@ -39,7 +41,6 @@ protected function schedule(Schedule $schedule) protected function commands() { $this->load(__DIR__.'/Commands'); - require base_path('routes/console.php'); } } diff --git a/app/Http/Controllers/AuthController.php b/app/Http/Controllers/AuthController.php index f2354e0f..fba472cd 100644 --- a/app/Http/Controllers/AuthController.php +++ b/app/Http/Controllers/AuthController.php @@ -11,6 +11,32 @@ class AuthController extends Controller { + /** + * Auth login via username and password for mobile app + * + */ + public function appLogin(Request $request) + { + $request->validate([ + 'username' => 'required', + 'password' => 'required', + ]); + + $user = Auth::attempt($request->username, $request->password); + + if (!$user) { + return response()->json([ + 'message' => __('cipi.invalid_login_message'), + 'errors' => __('cipi.invalid_login') + ], 401); + } + + return response()->json([ + 'username' => $user->username, + 'apikey' => $user->apikey + ]); + } + /** * JWT Auth login via username and password * diff --git a/app/Http/Controllers/ShellController.php b/app/Http/Controllers/ShellController.php index 6e6c6400..81a73c7e 100644 --- a/app/Http/Controllers/ShellController.php +++ b/app/Http/Controllers/ShellController.php @@ -3,7 +3,6 @@ namespace App\Http\Controllers; use App\Models\Site; -use App\Models\Alias; use App\Models\Server; use Illuminate\Support\Str; use Illuminate\Support\Facades\Storage; diff --git a/app/Http/Middleware/VerifyCsrfToken.php b/app/Http/Middleware/VerifyCsrfToken.php index 0c13b854..2032faf5 100644 --- a/app/Http/Middleware/VerifyCsrfToken.php +++ b/app/Http/Middleware/VerifyCsrfToken.php @@ -12,6 +12,6 @@ class VerifyCsrfToken extends Middleware * @var array */ protected $except = [ - // + 'app/login', ]; } diff --git a/app/Jobs/DeleteAliasSSH.php b/app/Jobs/DeleteAliasSSH.php index 71bf59fd..1e969087 100644 --- a/app/Jobs/DeleteAliasSSH.php +++ b/app/Jobs/DeleteAliasSSH.php @@ -2,7 +2,6 @@ namespace App\Jobs; -use App\Models\Alias; use phpseclib3\Net\SSH2; use Illuminate\Bus\Queueable; use Illuminate\Queue\SerializesModels; diff --git a/app/Jobs/DeleteSiteSSH.php b/app/Jobs/DeleteSiteSSH.php index d3eca336..16cb2509 100644 --- a/app/Jobs/DeleteSiteSSH.php +++ b/app/Jobs/DeleteSiteSSH.php @@ -2,7 +2,6 @@ namespace App\Jobs; -use App\Models\Site; use phpseclib3\Net\SSH2; use Illuminate\Bus\Queueable; use Illuminate\Queue\SerializesModels; diff --git a/app/Jobs/EditSiteBasepathSSH.php b/app/Jobs/EditSiteBasepathSSH.php index df7baa2b..ad074ddf 100644 --- a/app/Jobs/EditSiteBasepathSSH.php +++ b/app/Jobs/EditSiteBasepathSSH.php @@ -2,7 +2,6 @@ namespace App\Jobs; -use App\Models\Site; use phpseclib3\Net\SSH2; use Illuminate\Bus\Queueable; use Illuminate\Queue\SerializesModels; diff --git a/app/Jobs/EditSiteDeploySSH.php b/app/Jobs/EditSiteDeploySSH.php index 56ea957b..85e1bbcf 100644 --- a/app/Jobs/EditSiteDeploySSH.php +++ b/app/Jobs/EditSiteDeploySSH.php @@ -2,7 +2,6 @@ namespace App\Jobs; -use App\Models\Site; use phpseclib3\Net\SSH2; use Illuminate\Bus\Queueable; use Illuminate\Queue\SerializesModels; diff --git a/app/Jobs/EditSiteDomainSSH.php b/app/Jobs/EditSiteDomainSSH.php index 3d43bd4d..ea727ee2 100644 --- a/app/Jobs/EditSiteDomainSSH.php +++ b/app/Jobs/EditSiteDomainSSH.php @@ -2,7 +2,6 @@ namespace App\Jobs; -use App\Models\Site; use phpseclib3\Net\SSH2; use Illuminate\Bus\Queueable; use Illuminate\Queue\SerializesModels; diff --git a/app/Jobs/EditSitePhpSSH.php b/app/Jobs/EditSitePhpSSH.php index 0730e71f..060536f7 100644 --- a/app/Jobs/EditSitePhpSSH.php +++ b/app/Jobs/EditSitePhpSSH.php @@ -2,7 +2,6 @@ namespace App\Jobs; -use App\Models\Site; use phpseclib3\Net\SSH2; use Illuminate\Bus\Queueable; use Illuminate\Queue\SerializesModels; @@ -41,8 +40,10 @@ public function handle() $ssh->login('cipi', $this->site->server->password); $ssh->setTimeout(360); $ssh->exec('echo '.$this->site->server->password.' | sudo -S sudo rpl -i "php'.$this->oldphp.'-fpm" "php'.$this->site->php.'-fpm" /etc/nginx/sites-available/'.$this->site->username.'.conf'); + $ssh->exec('echo '.$this->site->server->password.' | sudo -S sudo rpl -i "php'.$this->oldphp.'-fpm" "php'.$this->site->php.'-fpm" /etc/nginx/sites-enabled/'.$this->site->username.'.conf'); foreach ($this->site->aliases as $alias) { $ssh->exec('echo '.$this->site->server->password.' | sudo -S sudo rpl -i "php'.$this->oldphp.'-fpm" "php'.$this->site->php.'-fpm" /etc/nginx/sites-available/'.$alias->domain.'.conf'); + $ssh->exec('echo '.$this->site->server->password.' | sudo -S sudo rpl -i "php'.$this->oldphp.'-fpm" "php'.$this->site->php.'-fpm" /etc/nginx/sites-enabled/'.$alias->domain.'.conf'); } $ssh->exec('echo '.$this->site->server->password.' | sudo -S sudo mv /etc/php/'.$this->oldphp.'/fpm/pool.d/'.$this->site->username.'.conf /etc/php/'.$this->site->php.'/fpm/pool.d/'.$this->site->username.'.conf'); $ssh->exec('echo '.$this->site->server->password.' | sudo -S sudo rpl "listen = /run/php/php'.$this->oldphp.'-fpm-'.$this->site->username.'.sock" "listen = /run/php/php'.$this->site->php.'-fpm-'.$this->site->username.'.sock" /etc/php/'.$this->site->php.'/fpm/pool.d/'.$this->site->username.'.conf'); diff --git a/app/Jobs/EditSiteSupervisorSSH.php b/app/Jobs/EditSiteSupervisorSSH.php index 93a21504..7a754b2d 100644 --- a/app/Jobs/EditSiteSupervisorSSH.php +++ b/app/Jobs/EditSiteSupervisorSSH.php @@ -2,7 +2,6 @@ namespace App\Jobs; -use App\Models\Site; use phpseclib3\Net\SSH2; use Illuminate\Bus\Queueable; use Illuminate\Queue\SerializesModels; diff --git a/app/Models/Server.php b/app/Models/Server.php index 5b506124..b54c0c87 100644 --- a/app/Models/Server.php +++ b/app/Models/Server.php @@ -2,7 +2,6 @@ namespace App\Models; -use App\Models\Cron; use App\Models\Site; use Illuminate\Database\Eloquent\Model; use Illuminate\Database\Eloquent\Factories\HasFactory; @@ -18,7 +17,7 @@ class Server extends Model 'created_at', 'updated_at' ]; - + public function sites() { return $this->hasMany(Site::class)->where('panel', false); diff --git a/composer.lock b/composer.lock index 30b8bb16..8155808d 100644 --- a/composer.lock +++ b/composer.lock @@ -2030,16 +2030,16 @@ }, { "name": "league/flysystem", - "version": "1.1.8", + "version": "1.1.9", "source": { "type": "git", "url": "https://github.com/thephpleague/flysystem.git", - "reference": "c995bb0c23c58c9813d081f9523c9b7bb496698e" + "reference": "094defdb4a7001845300334e7c1ee2335925ef99" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/thephpleague/flysystem/zipball/c995bb0c23c58c9813d081f9523c9b7bb496698e", - "reference": "c995bb0c23c58c9813d081f9523c9b7bb496698e", + "url": "https://api.github.com/repos/thephpleague/flysystem/zipball/094defdb4a7001845300334e7c1ee2335925ef99", + "reference": "094defdb4a7001845300334e7c1ee2335925ef99", "shasum": "" }, "require": { @@ -2112,7 +2112,7 @@ ], "support": { "issues": "https://github.com/thephpleague/flysystem/issues", - "source": "https://github.com/thephpleague/flysystem/tree/1.1.8" + "source": "https://github.com/thephpleague/flysystem/tree/1.1.9" }, "funding": [ { @@ -2120,7 +2120,7 @@ "type": "other" } ], - "time": "2021-11-28T21:50:23+00:00" + "time": "2021-12-09T09:40:50+00:00" }, { "name": "league/mime-type-detection", @@ -4621,29 +4621,33 @@ }, { "name": "sabberworm/php-css-parser", - "version": "8.3.1", + "version": "8.4.0", "source": { "type": "git", "url": "https://github.com/sabberworm/PHP-CSS-Parser.git", - "reference": "d217848e1396ef962fb1997cf3e2421acba7f796" + "reference": "e41d2140031d533348b2192a83f02d8dd8a71d30" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sabberworm/PHP-CSS-Parser/zipball/d217848e1396ef962fb1997cf3e2421acba7f796", - "reference": "d217848e1396ef962fb1997cf3e2421acba7f796", + "url": "https://api.github.com/repos/sabberworm/PHP-CSS-Parser/zipball/e41d2140031d533348b2192a83f02d8dd8a71d30", + "reference": "e41d2140031d533348b2192a83f02d8dd8a71d30", "shasum": "" }, "require": { - "php": ">=5.3.2" + "ext-iconv": "*", + "php": ">=5.6.20" }, "require-dev": { "codacy/coverage": "^1.4", - "phpunit/phpunit": "~4.8" + "phpunit/phpunit": "^4.8.36" + }, + "suggest": { + "ext-mbstring": "for parsing UTF-8 CSS" }, "type": "library", "autoload": { - "psr-0": { - "Sabberworm\\CSS": "lib/" + "psr-4": { + "Sabberworm\\CSS\\": "src/" } }, "notification-url": "https://packagist.org/downloads/", @@ -4656,7 +4660,7 @@ } ], "description": "Parser for CSS Files written in PHP", - "homepage": "http://www.sabberworm.com/blog/2010/6/10/php-css-parser", + "homepage": "https://www.sabberworm.com/blog/2010/6/10/php-css-parser", "keywords": [ "css", "parser", @@ -4664,9 +4668,9 @@ ], "support": { "issues": "https://github.com/sabberworm/PHP-CSS-Parser/issues", - "source": "https://github.com/sabberworm/PHP-CSS-Parser/tree/8.3.1" + "source": "https://github.com/sabberworm/PHP-CSS-Parser/tree/8.4.0" }, - "time": "2020-06-01T09:10:00+00:00" + "time": "2021-12-11T13:40:54+00:00" }, { "name": "sebastian/cli-parser", @@ -5771,23 +5775,23 @@ }, { "name": "symfony/console", - "version": "v5.4.0", + "version": "v5.4.1", "source": { "type": "git", "url": "https://github.com/symfony/console.git", - "reference": "ec3661faca1d110d6c307e124b44f99ac54179e3" + "reference": "9130e1a0fc93cb0faadca4ee917171bd2ca9e5f4" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/console/zipball/ec3661faca1d110d6c307e124b44f99ac54179e3", - "reference": "ec3661faca1d110d6c307e124b44f99ac54179e3", + "url": "https://api.github.com/repos/symfony/console/zipball/9130e1a0fc93cb0faadca4ee917171bd2ca9e5f4", + "reference": "9130e1a0fc93cb0faadca4ee917171bd2ca9e5f4", "shasum": "" }, "require": { "php": ">=7.2.5", "symfony/deprecation-contracts": "^2.1|^3", "symfony/polyfill-mbstring": "~1.0", - "symfony/polyfill-php73": "^1.8", + "symfony/polyfill-php73": "^1.9", "symfony/polyfill-php80": "^1.16", "symfony/service-contracts": "^1.1|^2|^3", "symfony/string": "^5.1|^6.0" @@ -5850,7 +5854,7 @@ "terminal" ], "support": { - "source": "https://github.com/symfony/console/tree/v5.4.0" + "source": "https://github.com/symfony/console/tree/v5.4.1" }, "funding": [ { @@ -5866,7 +5870,7 @@ "type": "tidelift" } ], - "time": "2021-11-29T15:30:56+00:00" + "time": "2021-12-09T11:22:43+00:00" }, { "name": "symfony/css-selector", @@ -6078,16 +6082,16 @@ }, { "name": "symfony/error-handler", - "version": "v5.4.0", + "version": "v5.4.1", "source": { "type": "git", "url": "https://github.com/symfony/error-handler.git", - "reference": "8433fa3145ac78df88b87a4a539118e950828126" + "reference": "1e3cb3565af49cd5f93e5787500134500a29f0d9" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/error-handler/zipball/8433fa3145ac78df88b87a4a539118e950828126", - "reference": "8433fa3145ac78df88b87a4a539118e950828126", + "url": "https://api.github.com/repos/symfony/error-handler/zipball/1e3cb3565af49cd5f93e5787500134500a29f0d9", + "reference": "1e3cb3565af49cd5f93e5787500134500a29f0d9", "shasum": "" }, "require": { @@ -6129,7 +6133,7 @@ "description": "Provides tools to manage errors and ease debugging PHP code", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/error-handler/tree/v5.4.0" + "source": "https://github.com/symfony/error-handler/tree/v5.4.1" }, "funding": [ { @@ -6145,20 +6149,20 @@ "type": "tidelift" } ], - "time": "2021-11-29T15:30:56+00:00" + "time": "2021-12-01T15:04:08+00:00" }, { "name": "symfony/event-dispatcher", - "version": "v6.0.0", + "version": "v6.0.1", "source": { "type": "git", "url": "https://github.com/symfony/event-dispatcher.git", - "reference": "2774908d5ae32fd94e363e7cbbd87462712c4576" + "reference": "4f06d19a5f78087061f9de6df3269c139c3d289d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/2774908d5ae32fd94e363e7cbbd87462712c4576", - "reference": "2774908d5ae32fd94e363e7cbbd87462712c4576", + "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/4f06d19a5f78087061f9de6df3269c139c3d289d", + "reference": "4f06d19a5f78087061f9de6df3269c139c3d289d", "shasum": "" }, "require": { @@ -6212,7 +6216,7 @@ "description": "Provides tools that allow your application components to communicate with each other by dispatching events and listening to them", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/event-dispatcher/tree/v6.0.0" + "source": "https://github.com/symfony/event-dispatcher/tree/v6.0.1" }, "funding": [ { @@ -6228,7 +6232,7 @@ "type": "tidelift" } ], - "time": "2021-11-23T19:05:29+00:00" + "time": "2021-12-08T15:13:44+00:00" }, { "name": "symfony/event-dispatcher-contracts", @@ -6374,16 +6378,16 @@ }, { "name": "symfony/http-foundation", - "version": "v5.4.0", + "version": "v5.4.1", "source": { "type": "git", "url": "https://github.com/symfony/http-foundation.git", - "reference": "5ef86ac7927d2de08dc1e26eb91325f9ccbe6309" + "reference": "5dad3780023a707f4c24beac7d57aead85c1ce3c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/http-foundation/zipball/5ef86ac7927d2de08dc1e26eb91325f9ccbe6309", - "reference": "5ef86ac7927d2de08dc1e26eb91325f9ccbe6309", + "url": "https://api.github.com/repos/symfony/http-foundation/zipball/5dad3780023a707f4c24beac7d57aead85c1ce3c", + "reference": "5dad3780023a707f4c24beac7d57aead85c1ce3c", "shasum": "" }, "require": { @@ -6427,7 +6431,7 @@ "description": "Defines an object-oriented layer for the HTTP specification", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/http-foundation/tree/v5.4.0" + "source": "https://github.com/symfony/http-foundation/tree/v5.4.1" }, "funding": [ { @@ -6443,20 +6447,20 @@ "type": "tidelift" } ], - "time": "2021-11-28T15:25:38+00:00" + "time": "2021-12-09T12:46:57+00:00" }, { "name": "symfony/http-kernel", - "version": "v5.4.0", + "version": "v5.4.1", "source": { "type": "git", "url": "https://github.com/symfony/http-kernel.git", - "reference": "e012f16688bcb151e965473a70d8ebaa8b1d15ea" + "reference": "2bdace75c9d6a6eec7e318801b7dc87a72375052" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/http-kernel/zipball/e012f16688bcb151e965473a70d8ebaa8b1d15ea", - "reference": "e012f16688bcb151e965473a70d8ebaa8b1d15ea", + "url": "https://api.github.com/repos/symfony/http-kernel/zipball/2bdace75c9d6a6eec7e318801b7dc87a72375052", + "reference": "2bdace75c9d6a6eec7e318801b7dc87a72375052", "shasum": "" }, "require": { @@ -6539,7 +6543,7 @@ "description": "Provides a structured process for converting a Request into a Response", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/http-kernel/tree/v5.4.0" + "source": "https://github.com/symfony/http-kernel/tree/v5.4.1" }, "funding": [ { @@ -6555,7 +6559,7 @@ "type": "tidelift" } ], - "time": "2021-11-29T16:56:53+00:00" + "time": "2021-12-09T13:36:09+00:00" }, { "name": "symfony/mime", @@ -7684,16 +7688,16 @@ }, { "name": "symfony/string", - "version": "v6.0.0", + "version": "v6.0.1", "source": { "type": "git", "url": "https://github.com/symfony/string.git", - "reference": "ba727797426af0f587f4800566300bdc0cda0777" + "reference": "0cfed595758ec6e0a25591bdc8ca733c1896af32" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/string/zipball/ba727797426af0f587f4800566300bdc0cda0777", - "reference": "ba727797426af0f587f4800566300bdc0cda0777", + "url": "https://api.github.com/repos/symfony/string/zipball/0cfed595758ec6e0a25591bdc8ca733c1896af32", + "reference": "0cfed595758ec6e0a25591bdc8ca733c1896af32", "shasum": "" }, "require": { @@ -7749,7 +7753,7 @@ "utf8" ], "support": { - "source": "https://github.com/symfony/string/tree/v6.0.0" + "source": "https://github.com/symfony/string/tree/v6.0.1" }, "funding": [ { @@ -7765,20 +7769,20 @@ "type": "tidelift" } ], - "time": "2021-10-29T07:35:21+00:00" + "time": "2021-12-08T15:13:44+00:00" }, { "name": "symfony/translation", - "version": "v6.0.0", + "version": "v6.0.1", "source": { "type": "git", "url": "https://github.com/symfony/translation.git", - "reference": "5e3848083ef1abc4814be154095946b8193f41d6" + "reference": "b7956e00c6e03546f2ba489fc50f7c47933e76b8" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/translation/zipball/5e3848083ef1abc4814be154095946b8193f41d6", - "reference": "5e3848083ef1abc4814be154095946b8193f41d6", + "url": "https://api.github.com/repos/symfony/translation/zipball/b7956e00c6e03546f2ba489fc50f7c47933e76b8", + "reference": "b7956e00c6e03546f2ba489fc50f7c47933e76b8", "shasum": "" }, "require": { @@ -7844,7 +7848,7 @@ "description": "Provides tools to internationalize your application", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/translation/tree/v6.0.0" + "source": "https://github.com/symfony/translation/tree/v6.0.1" }, "funding": [ { @@ -7860,7 +7864,7 @@ "type": "tidelift" } ], - "time": "2021-11-29T15:32:57+00:00" + "time": "2021-12-08T15:13:44+00:00" }, { "name": "symfony/translation-contracts", @@ -7942,16 +7946,16 @@ }, { "name": "symfony/var-dumper", - "version": "v5.4.0", + "version": "v5.4.1", "source": { "type": "git", "url": "https://github.com/symfony/var-dumper.git", - "reference": "89ab66eaef230c9cd1992de2e9a1b26652b127b9" + "reference": "2366ac8d8abe0c077844613c1a4f0c0a9f522dcc" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/var-dumper/zipball/89ab66eaef230c9cd1992de2e9a1b26652b127b9", - "reference": "89ab66eaef230c9cd1992de2e9a1b26652b127b9", + "url": "https://api.github.com/repos/symfony/var-dumper/zipball/2366ac8d8abe0c077844613c1a4f0c0a9f522dcc", + "reference": "2366ac8d8abe0c077844613c1a4f0c0a9f522dcc", "shasum": "" }, "require": { @@ -8011,7 +8015,7 @@ "dump" ], "support": { - "source": "https://github.com/symfony/var-dumper/tree/v5.4.0" + "source": "https://github.com/symfony/var-dumper/tree/v5.4.1" }, "funding": [ { @@ -8027,7 +8031,7 @@ "type": "tidelift" } ], - "time": "2021-11-29T15:30:56+00:00" + "time": "2021-12-01T15:04:08+00:00" }, { "name": "symfony/yaml", @@ -8209,16 +8213,16 @@ }, { "name": "vlucas/phpdotenv", - "version": "v5.4.0", + "version": "v5.4.1", "source": { "type": "git", "url": "https://github.com/vlucas/phpdotenv.git", - "reference": "d4394d044ed69a8f244f3445bcedf8a0d7fe2403" + "reference": "264dce589e7ce37a7ba99cb901eed8249fbec92f" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/vlucas/phpdotenv/zipball/d4394d044ed69a8f244f3445bcedf8a0d7fe2403", - "reference": "d4394d044ed69a8f244f3445bcedf8a0d7fe2403", + "url": "https://api.github.com/repos/vlucas/phpdotenv/zipball/264dce589e7ce37a7ba99cb901eed8249fbec92f", + "reference": "264dce589e7ce37a7ba99cb901eed8249fbec92f", "shasum": "" }, "require": { @@ -8256,11 +8260,13 @@ "authors": [ { "name": "Graham Campbell", - "email": "hello@gjcampbell.co.uk" + "email": "hello@gjcampbell.co.uk", + "homepage": "https://github.com/GrahamCampbell" }, { "name": "Vance Lucas", - "email": "vance@vancelucas.com" + "email": "vance@vancelucas.com", + "homepage": "https://github.com/vlucas" } ], "description": "Loads environment variables from `.env` to `getenv()`, `$_ENV` and `$_SERVER` automagically.", @@ -8271,7 +8277,7 @@ ], "support": { "issues": "https://github.com/vlucas/phpdotenv/issues", - "source": "https://github.com/vlucas/phpdotenv/tree/v5.4.0" + "source": "https://github.com/vlucas/phpdotenv/tree/v5.4.1" }, "funding": [ { @@ -8283,7 +8289,7 @@ "type": "tidelift" } ], - "time": "2021-11-10T01:08:39+00:00" + "time": "2021-12-12T23:22:04+00:00" }, { "name": "voku/portable-ascii", diff --git a/public/.DS_Store b/public/.DS_Store new file mode 100644 index 0000000000000000000000000000000000000000..e9924ffecd82fd09588f06b27174fe7a42b276b5 GIT binary patch literal 6148 zcmeHKOHRWu5PdEcH0`EKHb^-^C2kO^vS7^xASo?KRTI(hS!T~2xB^FnHy$g>r-)ru zp&4oX9A};<^Bl!705^YGUIJ49Bf8)qVzbBOzIe|DVdRYH{2UoFJYa|2&88P^1IMU< ztX+f|9#P_+t5>gIo~4^S;tHX*o_ZCY&*E{nRtg2`;2I~%EjAuSoN@peHlw_7|j<5c+QT-Ti z%#bo#D_Sw@z9(yPnAXe`Fa=D3qfvl+w%BN*Xssz=3YY@50`h%`>4HhXO3{Bh*!Uv= zamZnB?8^_MaN>YTz)F#KXilj_rMhs$a7yQR9O9CIm7>z&!r{Y(%r2ZzoX^hrV;>He zC|YX@m;!ADPV{mr`~UUt=l?dzu1o<_;9n`=hKt+9oF#?5wO5?%wK4sUE+%o6VohPk hZ^ew2t@xbojpMO&h)KXoks~zw5%4ltV+tHpfgeDkZ5#jq literal 0 HcmV?d00001 diff --git a/public/favicon.ico b/public/favicon.ico deleted file mode 100644 index e69de29b..00000000 diff --git a/public/favicon.png b/public/favicon.png index 92c8318a3e7a55b3ceaefcc7229e5359cf5110ba..020d6ef1a40e8a4a33a530c174fe7dc1637381f0 100644 GIT binary patch literal 6073 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 literal 34293 zcmXtf1yohd_x8DTcL`j&q>=9KmhP19mKKn1P(Zp-x&-M)B`+b}3Ks+v>HZGy@BgtD z>%v`gX7=oO_OoZtiPO?h#Ks`U00016SxN3C03d*WA^>P8;Ky0O+zt4FRh5$)42gm1}Y8T|5@kG!Fej=P-~E>74;)m*JPfzCSvTSTV4z{URaiKX=K}9B9N3+uxR8X**p^)xhIWq z!&ih1>vvYth5n2@8%TK+9f5t~*7qIw-KQ#?9m8YZFYJz(aR8L#$Ik(A3n~P8=3MT; z^j9+Hf1evaD{;2Dtp`tsjB&Jmg!-J!ccv%57ZDnKQ56{p4t@D@12BNNLvi6p>%+^erj1|0%dWZ;ak%c;9Cy6o0 z6xsR=Je61F!9Gv%E!XAAW~n2iAd@iPrrWc8Lv@GCl2M#GDQv8op26irnxB9tUWyQ&y5liv^y>68r)$%#n9;7mi-r~83@<<7 zs!Z+8zoc)rMs+Q%M`Vj3P8>Fg2{`hx=HNmyEgmsQGz18YKcg1T3h{`p;U$w;U; zyYJhZOd+a>gUgRy_cp?{GBm}B7yyCS1=Y9`_fl5|!?!b4KoBui&YtegXn!|B*=zHq zQ@wU|70vjZL!$h+RH+h#aHQ^;8FedHE0;_LWkG~1Vxbh`{5UwSjR(S2U-j1wqukX_ z2OJ2xpDvJEq`Tbke7!cilC9~E&&DMkE;baq$TWE!#3ZVJk&>tDd%Qqs&Hgm7PuL#0 zHRn0^Np9Z>Lv1&+leJXqz|}@}+!Qrl{s+wrbY<=$gmAJSdBWahqSPIH&+Pmvhsrl# zKg9{qD90z-|HXZ?y(zLdyvk4H`JkkP6^8*>v*da2OPxojrGNX!#{IyCVn>o67gaYn z+=r^RO&#*Ajm{pYR1bMbs0yHoPW`R)2b<+`CPM;NO)rj!@pmdSO8M3yI~)!r2ISf> zKFxG`^17i8o)(8X;P8+|8*>Yg+WmP%Q83fu5W%6Xltl($?Qv{LN1IdTPZrPw7mGsDLf#7)S+5w^RQa&VB!Y#m4k|5t%(v{)E>Rq1 zvJgN2Egp<)(4c9+0y@X&TMuVvXaOAofsTV?g72c~X97|Eoq!D)od_6gc-# z5pU`HsENSUO1CNhEVrM(lZe~PN|=<1zy;N$_eGBal{;a-aI;;-heRdgIy(hPhyZa zaqc$#dmhdJdyR$;?II)Sw3j*@YSl%l01W%^v^=HP(=aS$1 zADO@jxQ1ZpoG)BXSflw zgJt+I$q)U9Ri;$HF= zDvLARQrRb{@#hO2d)BD{hAi3%Dylw>#MUy=`)z{!w|TJ`K>oLnlZS4+&vStECl%nm z)Ag{FQ5h(UEQw6DaX^z&yfAR@nX!BMT?$m9lE;33`1W1LIE6ea?Wh){2+@0YJk85l zu-EQIV|h^+Avhwvy<~i>XSglTE3f2$|3)+zmX805i|kZeXBJVeDsdx|_Hv#L`!-%7_OwSC z!W01>NB08W9ch@d3^6ePc@MIl@7^vCi9Eqi(Gi6PM z^~+{j_uuv|k1yi(F0*dU11|iubT26FGSIiS{N&_g=tV>*wYBkMlar-fTo^k1QWV?V zPT)T{a0EIz!VCG)`4dactjKcHxgAsB?ET3YK+>-tt_71spA~#?tg$90Tv?vi$r%}8 zvwnBd(%zDKZN$OK>NLGtmQn!AUPSXb`Vj86ww=1jfn(M=Txu{Sccyy$hBL0QWG9WL zpJBh^e-Vj4UIk2R_3)n3PQLS(-=n!16jlW1#Q67JE7c-;y99%XB(t=mL&Jx!S8i0! zx-YzdjJrWF{q|Dk5h9+JIftDdx9guaX=AC0t(1NB9!}X0@-}Rc(e%*o{ILu$^&u(2 zRadWF>}?~vy(G5T=%G8@FsR984y;|OAvse&ep4)aYc&LaLnhoLSz<#cKS~$fFL8Bn z^a^(>hgT6lpJ5U7v8KaA7gd+AKQbPsj3Su$mE99b-9ZTrAuFLSD_+3$Yt(*WQmCq6 z$0a<1XAgHE`xMn`4*o_LFV)+!8f7TA&eml$hq)zHqZC0({#~%5Tt+EJE)N!%Qjy-% zu`PCsQZMBMHHMgQVw~d2=)(xE25K}=~Sc-bhtJ)Z7*XNWj%rDhY!Y$HY<=a_ep8H8#g||7=^5!A0;L9+@S;9 zYAVoV&z+clDm!9m92{9u&pE*!Ue%+MByOa@Tm@)JOM3?j4o_UX@&14S{h2q3QuFv4 zRiI`iIV1>U|G9;YUoNrD2+jzyj-u5+J58>^csx5*1c8_HS;`4v^vw5&)REloc(DMb z?MyG2aw13-C4c^Kmni(kj_Fe&Gwm7Fwb&BM9BP~sceH{tt!`mY&@r@G@@$8DC*2di zQXc~sk^@Fy7~e#Fr0y~aU`C0c@u`pM*ZBH}%CKO?R z4e>nk)!})yOlDZa1oKn^Jh|I!`@ce9gt)Pj)^fVQ70p7U6+z_dW;mrB6m)XK))$0h zS>>fw4KhBI+og+(N~WHAtaTq=LynZljES0U$rrfX?gU`ciP0G08YQ(Mk&2$$$nV+L z!}Zvjx19Xrl4W)2au~|YxiJ$y zqKs&ma)?CZgG)ose!8225porJ63BkzCQeTAL4K4r;{14x*niy@xk8;#;FV$FECD z@oHJf1i3wDNMJl?i5TI{U+ce-jWQN6ilFWbDY_y)+@52wKk^`&rx^H9mUz=EVE5(w zTO@1K>r^SyT(P_`h{ipB@wyOB6DYrNVy~r}#XnO0)da)|=~8-}?Ak!NYU$ ziuqWL66P~#NZ$6%xhK`Iu~g;FepU&KVK*yom$ zJs)edG0JHlRSfmI}yN(%ynpYrbp+b`k(gJ5Q@Waa$S$4t#3t-nhJ(?)}MIK=cXT}}?g zY9q=i(&i6)7D@DrSyNJw{%d|K+XHOoHG@p$Ww;rb(S*~+j`{^HI7iz~^=Cc19IJ^1Km)=$s&H~2`c4&@{^rmka({lp9xQ@o)7LfJ%6g<;2L*8#V+kHsx5#y&(c zli%H%w=aycb}DkYB5X^pA<_NUD~O$C5}YE@O0;IcPhnmvq`f~0lhVnKj*f!{g&c$F z!xTj9>dK8&f;=;Y#k(F+DeMbhbM152{%ZfvYDwI0NjK6eyQDxc|9mdB2VK( znQEePI)f>{_lx78P4dM<0Wj84J>o1f39>r$eQ@w)nt&%)9AfOT@WJtlUD+9~q~;tc zc`FIl5wWZtzA2-;Q|oVw2XEq%WhT`dKa5A-3?+||LK&uI>HwCS6%sbKqjDetWZgh{ z`Fz09uPH4(+E3{W(JRMYME>I)5f?bq!Xq%JRu*Mto($Q8n!l;6fR}gHvSILQ zX!tou8-Z$lyDf{yJCZuTEI3P)gWcj+2C>`K5GA)~ls%2k= z!-?MD5g%c@G70lNR7_!E;CUg3%flLX&MLfUYsyL)2=E@*!WS>fB6UjAk{ zqacV`=aGd8?uunIB)|=SqKzDwte$r(`uBFp`w-P;%b`wV?B(eRC+I_z@bejUJtt54 zJ2C&BXN~p0R&xKM{`Gkm6>?BBIUW@UZH);%>xWB3%Gf5xh{mE&0bYzw`6jbGyn?g+ z#K3X(y5kqtcn4m;ZIdy40;OAe; z>WL*?;E5^}D`^vTUEeGip6YxCH$wJf`lPY_W_>+XZS*nFPAL%{^Ki0*XICLS5uxi* z$t%qG>r>HE2cJVhy71oku8S#B$2I2Z32Fj-S2MQo!fxKCUv&6yK(Yn@p!V#`*zw3y z&muqiRj=HJVA`4(B2qzIu>h*P$X&v3V5NXIxj~vwughWDfJ5DLnGYw6LP{!=#=jc2 zxwmZ0zsY0b!3-S5k}u4LajWV>_GPk^t(!A;m_j*4V#p&(fUi$y5>g-Gl*Ozz-Z(XEX>??;rHuo zdj>`VUFV(XTniBjr|DPgkPL-ou>5`7izSYfy0;n(5h@+tMF?1Z5qdjh@^uXJlO9hL z{0H3eq&--FbXRC}v9maAHDGA5(=m^=<$0ba`5Ys^tPhUGv(Eqv*A$L>>+4Sd$#W4^ zmYW61nTE4l^%5IAf|nI*)6k4MwZp%^JEJb8AFt5S+J+pmS$%ktf5b*L)U7Q!$QF=V zF4BhU=h{oG-3?#8J`w=y8oIulx9=8PKh_P_*SmsQVyU=1lJkq+plxv+Z zzEx;d34b$+s?jFs#lCr?Oz6 z4WU&W{#N(ftcB~pg}Z#XcQ)I=NRapHY)bZas|xy5Jdj-b`xFbTw)fEFkzc>Ma_bj? z@u1PhysE8{{|4FEEBJ!L1s!KKky1sS@8f2f%DL`>ljU1w(}oAz`%zDJ4}%7$lh^($E*wKsuApS9h_Q{s`28Ol>yU?DUO+Ww45Yv5{4fQhivBY z;#{MGJJwr%)c;RZrz&5Y2{GU3U*u-YYe!85p37tD^*k9v_-qvz|*9xbVArYDV zgSbckBrYnh{!Xt22PrfX&kIE~)Q>LApw#JTzV#h_=b`9N-Fk)2HltQQS!C3g7zZyx znMD*8;h|`j_9r*(f0a}@uwK?6<=Pj9l8Sz&#(SEAB(2eI^|DgB;q6D!>caOpH_3>~ z&(Sk{)_gzR<~jvLy^_F66k_6^7e(d1oSIfL)#F`g`$uWNEF^W!`DME&f+M@5Zu zCl`)KDs0#2U zoDsbB6-%qhS6Fd5pe}x*h+gW0R_zjCX^;*lt1RtApvkp2=@Y`1z?_+zi$w z{Jx|8cZc*9+E4BfGZW#@nH*v*KGU;A?U)ouHoJ_@SL9$#!8~gQ!TYThiaKcn%B`0` z`k=;qk8kb4c$?cOSSnGp@N=`u@wwc{)=tctN|022y)&g*dY+YLY_jJIGY;*=mFzUj zlfO^ErPn!@wB$c2Z-eOiARP;nm&@^dWQ(+HP7pqsVlYZ25+?|;R)l?wjQPgty}enm z6x0iUo+_A;yFL%boZ4Ml3 zbXFab`unRA@***)CDtW2o2|Q65MpF>Gh0hguv@KT&Q`tHIG|#?2VEb|8cSp;ixUuN zk}7k^_BKFce%G)4uHefL1!R=CPXdKQAL>+muz*o6sAU-i+yGrSB}rKV-cFwK zWq5He=rS(f1`6dBX`&n~E&RlBc3Z)1>y}odtgyYOG8Tb*#U|6s)Qc&OKucr+5f(s2 zRq*Y%z93MxCd6CS)ItL$5foZE#5~06M-xaLy!v-{T`i@_cT%Xi2$}V5GWW%wfdPI$ z7*7-_P=_{4iBi#do>u&Gv^@8}C99gsu!DFh)+U`F7np>F! z=E=t#XjC-)2WdDlETKyR@}qW51q>z`DV=;&lLfdP`i&zvTIk-AT;;$&0`>Z2kg58T zK5c)IFR9bSF}fIJg5jglLejsiLfTaEp*wkEUZNNWO{sbpW*%Hn+jfb1 zt63@SEby^xvRmD`)^D^RnhG`a%K2c)D22DQ1~k5U*AoOuUN~?R>hNi(>o)bFbPZ51 zOz3DyMX(Gz8abiNX4zi;nO(TxMhXSFpQRC-)AahMNAvI<{tl;xQtPEH9n?tIeVRg3 ztt=knp?8SpfX8G`T#f|hneVrc0yULjBS~v^{gdU&2XYus@XH1L7$j&jFG7t)vW+fWr`e&l zSh66FaiX31A{qnZ;AzZu)4x|V^~xIVgHxh%pp&3&J7uJGFAI4?G-AAwf2rT5nv38f z`x>PZr@)m$wz5x81h{c|lAv zwZQg_G_nOs6Df@)NS9?t%8M$)%#=3TReg|TVsTu|bev;DAR?t}D~X7$6lrFk@mg!6 zO?Fq=>Lu<6q|Df9kb%9t=Px8Mhg!dWab0V&`0ufnHrB;f*mIF+CgW9&!#d+Q=)1A$ zp8^`1s5*rlptEusp5!dXZ4tzZKy$hq_N4;Xt21$LdxkS={KJ~IkSzvZyJty zj}wUPd0_ccJLE@;l&R7wLb&&2`{BLe@87A(OWpL;ZeY=kB@?T`H`kHYJBTN!AW3O1 z65t_$Gv^ki>P8HO*K}b#5}Do(-tch&@#MTr2sQOT7HFZ(zP}}&{86O&7xRu!+U?HQ znf}BXcWtdKV`5e#a z;IJ@g^!)JHR57qczt&kF;QmY6;*@)3x3O;h-}XP>+cS$5Y%Y_1CB;6PU(`Pl_cN%K ztFDxGAc@Z=e=6vMLRBZ9~2D@oe2Qa{%kLa20`SWFg<9g^2R z&0eGYxslGioBlb1)P>CH1g6s7(S{~6KwDk!FDV#^@cK^+8Ewt@t{lZ*c#9-)ppsp9!t>RzV^{q)&k-s%@Mzwk zT6i7KM?p4Mxsr+ zM>)*sgFr)DcKRLD7^YRdKI>fdkL7q!6?N}pqYwA=&Ok=TLZN8kbfQ`>Sq{t_tsuqsIChl6p@xo<3lt;ATvNx}Q~dX= zKzqX4*3@m>1?zX`Cp0HBmA7L1a3EG<6NNPSOLi1D>+U}=f5#iPHsSZnF0AgCHw5hB zTi&HSnC3aCY7^<|y?oNUWF8{2kARdER5bL8y%NXk6^>AL{lecb0E_G5OriJC?M-Nj zcuXn84cGOTGTMp7g9bSYUOz`$fzQEaqf9uW8RmiD#YwAcAtsQr-95E%nci1b;}M%I zg@#Tr9Av!d`5Y9fW=9iR<1YERyOYi&bl*8wf*8n~N-NqF>@m+oQegB2p-p%DgoS0j z^52#~*(|vk|Dt*0+4PKb79!Snu-#V}4H@t0`q=RBJuT03UW0*d*+ax(ABR>>{8}`Z z+ry^?PKE>q*=G)!tk}>keh$Vx#KoBFo~{%meOC_fS_s}b(Q$EHc%T=U zf;7%Q^#g5hT?cv|BMYQSqg*cEvl*tw)Lht-Vb?>Vls38&(W3d!emeVEV5Ln z*#$Ss?(8%KogEb$?8)ltXUld2BDPHdna-lO6_dCSkJo;c8?sSg(;lzn^LDo`04FeT zJ2*5E(F0TBvz>slW>VTWl`I$s2XNGPcqMh)AsngVq51ZjEq#lL{{9j~3ps5*p8%Gs zZ)9JeIb8HY`1tr_(;O!_Y30nQvLgNs=)-uveq`6r^0%{JpZ-Dx@b;E_zm8?WK|NZQ zM}sNszafF)e|6-J)|fzquTlbU#eaNUAhaU??Kp@d6Dy$N{Sla^$1y#bS{-$PhJ?gm zhR0Xb##zF5P1p$>l9J}+6~RefhqBpnO(0GefBkxM@evy02@WGk35s@q9gC)}u3Jnf z)3W8sR>kT@2#w5(#`5!3v{*Tz1vJ(k6=vq-#6c||WloC$W(VV9;W)&=+u$VVW=2Sg z971glcqu40+JP$E{N#b!_R&d6(R`^Gp>L-l<$? z%)Nyg;RH+~Si0LNAne5&FcYF@?%Lh-g9EC&!UM^DS?OweIL=MEMC>7!Uf=dyqTre) z6uuMqGA;7R;RVWjlqf>>kiKl6EDx%&jtwXVI^)9 znKKZuxE{GZ0i|@ZcTrb%Aml98JMrFU<#4gNd$$Hz%Jb;`G1hpE8+!?V{V3*=s-7^d zTo5rIzE(Yh(PwjyAEbFlkyOq85go6UXj0*5`fmL!5lo>)m=xkXiBtV2>D08+u3^-o20A9gAC=N7}<+XWBQ zsKsm`T1#EEn22po8F3CDyZ<*%$4KTB@cCY|Sf*@$v-u1&TwqCDAy-V!`N(w+5e(kE z50Nd0hV=~5AMNiJb0lcSx@2R}@$OFooGR=k~aH2*nY6I!(b3iDPe(i`( zL(35E^xa`mdz5K%%UdI;Uh;_iQKn~vQxvAUq9(`I4?;5oI^qqp%}|3Ce1;Li1B1mT z#l2zR;o}o1=_$t7h#?HRI2!F)H4W%ChozyTE35lbffO8{M0#ZeuBBG!N-PT;3ST2u z-Ynl5&_OX}C&KV#Fc zRq)2lk5*Emna}((ZI4F`1eSgM&fwDmG<;Aad}X}gXlR~tQVJnJ`-QpGCn- zfKPbk289V17Qaxsfl%cC$NcK&eVgYP_5$kNvJO+_b~EnA;HLC*NUs2G|K!oj=^rj# z*NVjv-oG*@?lqtYT0%#FgGW=zlpb(@dp_7176b)93Evk7Ey#7i-qZ*R&`yFqkd~Rv5g%Y74eh$D% z_Q-tyC5JQL(K0hnd>7tEq)4br`dx)sq;_XFPtlRXmuyvVTqp@@$ZWE2@4U%UYaZP{MqMG@y*{QiWG8t#kmmb< zSmd5Qpkas+AOqn^eWmf<0Hb+)94EiMs0FdAWIh;6Oki46(7_hgc@Q2M8X) zCC5V^j23GIVA>+;=?r3zot5~+#LvM_O!P0O@`>=XcyFvDN(4p_OaM?$YEm_f9`{0NL{!U}fStovQn6Ir{bQ-$mOS(9 zZ~#DroI@#l;tdp`eQ$Cz=tgq8pz|0HO8ZkTDu$kw^&k8(vArx44=O5xWQh_k9Gr~A z45tjIq0K>9K%B0&$2BDz8a+rR6Co;9Odd)$>y%SO$Iwp0C(BHa_}LROT^i(ncCdsf z-r=uk>VkFXCrU?8r*SKhweq&2!fx(|h?eflh=CFU%CA#{$@!hIV=v^ZW}2btlJ&J~ zt<}NO^=e+kzVY}RzeR^#y9RF6H*7#%_l=4Yq^kgJ!7K!s7?9vrCV2T0W%~|R$`cI7 z!_s&bTOb~6;$qvpY^mB%tSW;LjYZ{i_D9?e*Y9X45<7Rc(d%49C=aJ~n~-{cpYNqt zAV~@{dS5X}%8ldRe~iT;uK=(i*=kItulE@tU*0Q`nh6oRcb`&y`0znq5!PKG9%%W! zERIaj4{MTw|6ii!nNy=7htOje?CCe)XFqCc_bZA}!yZcK1^1{0Rb2k4Je-}E1mXF1 zfJZBf*@RtxT&xoUKN7d^KL#IVCA6=ta!p3A?ZG3%SAJX8Fm0b0p6D&vXv^=&AG6a% zwBekoOv(d8CpJ8ucZRwPbJh<7!-i*rFZl%c(Z`75<&I=!M3NCh!Uw$pveOHRyFvyu zLxed*?$hsM{I0!+o6}L)O8gps03?rmy?* zPlXjoo)vtKo@M66!&&IrIJI_TeDGlr8CTqc>-fuWjo`Kb^q!jyvAOyAgk)lZ!>u

_E`O_!$6UOixtR*3uh38OaTuXc^9%0rrfnp*ZdV4 z1vO4V=Jljp5|5}ghCN-ge|*0zpB(qDD=6I9bzNjF;8T!RI(??EP*)yaa4gmV5}%1< z_;0)xWlEf{s8mGiTuU}_Yo}T;e~rA$WgPKXHX$1l5(zhy9;PB$t&WI5$moD53LtE| z#7=X|=^0-F*%NkZl#&{)7ew;?2~&@-%G}43&$jk97iP^``uY_wn+TJ@cs%j!53v@o z!OCFP7(#sv#{6@4bY9ePO+Dq-wlitsK5|#z)3@foO434M6laN9d2Jgw+SiGohyjc^ z;z;2&F0~v%$b^H*O6cZI*3bKc{#XzHqt8GZ2kO#_r>3(%EGE2RDiC&{&w6bm2?KmST6{Nb%D7hjEv_ag^yd6FjGVj zy>0BRfyL|n7T)`NJyYE%`>;zsTO<8evsMXz@diVVfX#x=zlAB1eQ$Ll{6+VY$tC@; zBm!boNb@7BRL5S0Gi9LDM`P=i*G@@3V!c9bHPO#X zD@X>tKy6;&mWh#8KtN$$KpxD!fJEReb-VqKeC}CJOGU=ZqlA==Yy0WRkZEHEVj#Ld z`?+>gp!nP#v8@_Ga?1xT4bDCsk~mgNIoiNXI^+}r>E1d zpXev5(Dj(@i>xBTQLj9 z?v$zyt@`NUw{QL1Z!z_pxxTnt%r9ePu6GB5L~DJx1#@n#mv(W@Yw$eaWND+HAbg@V zLRyUuybg<+@~+F=?hc~vg^_EP>$&!`=l;%(o?aaK?%lhGnEj~BjUdvaqoYqP^O8%3 z$WoVXW+y4VJ<;akL9xl!N?GP&(6Eqw%?4xmt{-Qk8Qj^HhQ}_BwqVj7N5c3Bd0KMm zkt&=zi$jlAc~6M4HT&^MY*qMoR%qLNr@f|O4N1T%6>+*_bx>O!=+9xYmvwO^rFnX) z&TRiMFtm(}knPRHZR@eB*W%${mE;r^X?bYz#RGi^KdZTKw>M^=#%ye*cw4}1=T*2< z$?)Ve0PILl68l{Y0;%5uk;x>T5CwU8I@F%BNa&$x+-(R7NHNqZeM=s8{Sb; z@#Lt%S2_j3#q?Avurt0zeVLN19Lwz;-RYlP6JE?rdwVv{PL%cD4?aRp2u;d-bI)V@ zmj;VMjBKw^kQ}D14N<~UD-=P-T^FSI6H<2EL)=gI;s-)TjvJFgF*lVniXpp{8PGrC zWY7!1VYRs%u0MYsDui@r&n{9X8`l^%QW{L1h57kk9+Z(S9G<;Ge=9Y`4xm30W)%@=G5C-$x3ycB6>r@qs`@3W+QbXLiR0`2ATf z2iH7W=_LK~<%^Q?$sa(CKc1H3e*4CmU!45f^!s=s|h`CD5dUn)vil%~Eb z1nLXiT>g%U3G?M*(#)&6@eTC(<9Eg!p8JH>)P z@>jozKedI;o-ce_uYk!9>)?j>N2yXy`&%%b#F2;tW*t`sK+EUPB^@0q<$OIRU#x}O z3so%$2+o4o8|JO$r>NEt{kq@(&>z2b!w1z7dbfKyWu>DK?PmAgeWj7GnL3!PdZE^! zbuBame6NN2(O?KEBi3R0<+A0#1Oc8bBG9jxAPi`yJ-Ct^y)>6OMmZ|VcWsV?D7_d!t)H=OO4k3yYM!u*VkGQ+fxRa>BRr@wwhI!30cicyi%H zav=iPyTD@2LrC@9ys)0icJJAldT6&rb<+E}Cb!6rAda~O!A;3W^}$;IjRfX`YjFV= z4Z*pI$5`U(h0P^lu8%JwEq*eniesdJ=fE~wcD#sf3CYrPq*TQZlGXE5uaPxkWXl;I zR=(IUi&5dSlWa&Zce`WW7CuglChpI|_!|?ZT-(>&T)uxD`p)m%Xr&_pHVF(bK3mP& z-8~F{2{_W^x@sNmRsF@7q%gvO;w(fgH!`3`K<02@hZjFx2K@a~u`oAR1}gl^8t2cw zU)Oh`ohah$PF_ERPljfD6|I=}%=p?`Ebm9uvu~Gwx8GEloUG<$HQ24)6n(j-ZWQJv z49mW4vM4n8)*s2r^g^Kd-J9ri>`@mKd;MipnyaXoY73AEJhNzt>M#z1p#Jmq+mFJ)FQe27MCXIx8LDfFLe{7^CG0t z%3I{&YNk5i`g$+;0Dak?#voF6#8v=i=cO1njTOEdmgh?$u>Cg6;_brkqrX9+caHC(;}S=0E2sd(lF(es@?pI2v8mjGiHdq; zW_kG@Qs9U)D_%L)0VME4e+mj`i<>b_-ALbaR3dB!_+S+AC?^gEq`dfDEnGORhM8>_9azx;h~Mi6X~QAZpz*f!{NaBz2PjCapkU)3k8 z`9M+_dd_cpY$Gd9)rQK|eIatcQW(7ezWD*;mJ*1Rwa{sfbD|p<)cWJ5U)yb5876w| zdt#$QUdvZd+Igww1ie|BPpz8zeZF0)DLLBphs63{6nbo8qFkUpiHeHj(c^x=nl3<= zx-j0q{Okx3FLPk0pk@^FCbc zrkJhNIQf!vLdZnJDM95Mu`qLav`|0$XQ?pPe`F0&oj@_TED^0U5iK_{yFvERJzYr1 z#=(idznZ(HouR#(fKuH~C^y6;S}AtDMPM2)JWXly+^#-LP$_ZJ3rAs#yaoXXhj!kv z0cuQyoIL?3yJ4c5!@Bu`4u4ZMdhJK+%(!`y`^8td+wDcuJ3CTWTcL;@t)=dyq~jHn zuF=~UDpgM0r5&({co7QL-yC17Tj<+nlJ8hWmsfozS$U#Sn8Caphw!l%8&%p309@N z#^SPmN#)GOcd?3sLR%_o3;7W#7WL?@=}@6-%gWYLm~L4Th-;BUcDg3nd31QCoIgZr z+h*R#0${DkMLo~o3O^X#4=q(l8rh_kZLru3xcRDGI(fx2vSR6IitIdi*&t8{=-@y< z@qJP(nt>!jx(Qd|`I{qWR-*@JB~BE6nNc>*+6*(^rCPeR4^Fr;BC2V^ z90UQT+vj$g6z;7K-i0&~^70B!Gn{*r6tlCQgZ#YrPJ6p1Zo^~Vk7X}EO)6^~ryQ?! z7XI~D^X#8#LHHa!+`w0dq+|TnRx~Tr%nZIT|MvF?ba|+`WIf_+mBmE@FG(G>L~B;* z6eE_*SC5kwz>46}i4;yBtL2;)vf*wrRBu>v^=PdQ+uWI=5WF@6Oke-fyV~r&)Y8$Z zefcT5)AC@h^wHIectHP>*k#h4=5L#+@( ziz6*Mk$o%0w-VXZ8Cxs}|zRb186K&07;M_V%+v3CCXH@IQ%Qq;Zuck2B~wzjvh8?qxWy_vR! zs@FiENlqiY5TzslxF<2>DruKvfB)4oW^*?@Yr)8_Dz5{1Emq0Jdz0O7 zc7WyPt?(iZEH3tjj{g9>{txZ+FKuWi`xbJ0Ge0@ZYiIe=iFHQMUH|zK&xp${$N#?z z0B(w_qGjtN1w|U3dgPYkQ1n>)>vTjxO|PP+^$13j?Gsl!gjyDwP{$fy*$c1iab3Lw zQ{r&h=0~Dvu|}g<{gToaHUQYXeKn@%xR=5;F0HGZ$?6J;@%z`ZmTBxzV~IM!Jm(cmqN>X9lRq9ZJX~*R2v>NJ5RQ` zRCwC$bKy!umY-BLd-VihxG1`SVjw^S!fXv4KPLc|E{#_)<)2!7mwp*+P8#)|UEhav z2A=%c5IWf+)HwSieQJD<|0>IK6uH&#?o5I`z)8|gz1$o!!=qQO%XdJ{1;HT&?06+v z1h8Q7KfoaW`%Cb2)318==yH)z(|Y;stmt_GH^nI7f}quPHGjJUpLj@>Yrspk-F2@j z1IuF$#yK{r$xqRNz?o*6%9}xCsm=vcdI4-${QC?b#X|^sWp%BhxBMbUE#QbNY#3Rm zqTqHIs7P@d{cccwGIXxqFf${dF2D3@^}|8mcID-kWD2zJ-QIjZ18gBLuj-R-p{PT; zjZmfyvXoCro3smM$vX$^EC|(~G53dRW3KRFr{Ul3U2)ZQ5~muGjcFL>Ic6!E1zsig z2uY`?%k2*wSGQ~OhL_uJVt)URrmGCA@_E{a4(U8}Bhnp*6iF%hNq2X5a|me;AkrOD zQqq!#M!HKHC8WFIef(e7`-M-O-FbFrXJ=+-?pv10tapDMN;$pESo9+|V&gK7N)maJ zqI}kxu()9vea|9AbMDq}EnsfBUZ?7IMu}@%sOw2mr|LDQN*iY*@i(JyJx4S9itifw zY`Ca9+7a!ISK>v4(h7sM?=_{%NTp6JtRVA9aPYPX_Zsuw@9c&ZV9dPWD{R(pv#Sd) zFj4ExF58Plh%awpFLC>o3DufkEwyXX>{aD!Q!SKcwd(#l>zl2tLEH`C#5Ht(Krc!G zwa(vewBS;JD7`TgL$Q0d@WznqKrTNFeRg{jG@OOX)o9vpcC!-is?ip{qFN!6?@9#{ z%G*B_G>#Q-kE=O#``?gmJXl|E?I_|bjyCww&T0USu;zz*buUG`5xf{=+1q|RAyHcF zT7-v!Y|DlrOWEdg%XzMUEYnQR`=bBy4~a*WrN8n&ibS8yeUc@H2M2#n()K&_<4M92 zCxCuoj5vG8bg7J`@P%-Qcf(=J#?jn_0MB+eD&8v5s6hG&o>@9Z*_Ld|ts zLy`I)zZht}nq={5B|D&nvG zic8~2?Na&1OhFL}d}`f9uuUcl0i|3@1zD`HvlD^q=?}Kc@dII716 zYb7G~`@2~n-W5g*S}cPnsMUOwFs?8$o+=j#2D$h{d)zkK8ZmQy;5AvGU~)TXKRENI+HCmG6})3mb=q;3ObWVp1c@OV*3w z?)s2rxONAutVh>m4RRHh(;X^+DR^>xt8=B9{1vL=*7n>3GgL?o`IM)LqmCk8Ik%V2Unu!K0XWb z==W1UelL^)U+W42g|FgW6S=WZ>@8ju_K+QS$n^+(L=-Yeg-A>Pje;3FYo@BUfm9iO z*o!{9^uDe1H5JNjZADx)7cXSMPx%5Uo7(wzIw&DE$9c{^&iLj!oMS4d`6V~PQqtp5 zu9CTJETVb+ku3t3%58oj`)yKOYYE>vzoXX1GzP&yvBKUO zO06y;_>@}~K|;U6WM&*j%o^wq(pKR$J^b)Ah9OL$Yr3dQ0Hcz{U(_QCag@a`bHY1C zc^&jBmVbLnD015EL!fP^^P&7y995>eqr~RBY!0;BBWW}IF`Gd8jirV*gWIQ9?q|=E zYce&t;;IkiN;9l7#4ni2wwN}8pO9$S#U93jM@=F`Ig{~7nXa4D84+&Azi=1haytvi ze>_;qJC9|9-jEKrsHJk36Lz2#W-!8dp7gj&j9*#NJhx@a@p+}mnJAeeH<8GgY1@KV zjJ5+*3o3vrx_dj)t=6USCo=*Tf7r@nNb)Ptzw!KfX6qFPc=1W zCNIAUB}lZM1bf(w-_o`{Cfu49g=UA&tSgWqRcE-BeKS^5<4%@W1oMG)k_t?&NKiPe zbshUfPOmUgicsI93!N4}05*)1d<_~KK|}u4!Ch(bKX6Fg3X8>#tSKOsg{=IG!tb)W zP(fDErRBs~uy6rrgHjYR>l3mxttzq@sdWxvg4k8C&-PpzkK5u0=tva1Ke^zpb`NjP zekvW0$+a>@vi#qRH+-Y020|)5#L0}6ze+X+JzxW=Go-v#M^Zb~C^HiaySrPl+}}dq zgk^DCo)%CSk)&ZPq2LdV#>)6P5nWSbg^iZePKKR_lEf**6H|pz4uB=y5lpm-rE6sB zUBlwb6rr!}?d%4UCmw+Z%A=x|>X(ID!ADyD2_`~Di^I*bGI6hqFN_<{_R8tp1}{Q* zS;Q?4h2gg5&^vpg$|bk^ywy-Qllwd13Y5YZBqPOf?ECbN0s*9Q#9X{9XS$keQ~8TR z#T^})b)*z1ROc6nf)ryx$TQZgN$0-CAL6 z`shUPOEFtmNHu$F&2cLt-oIbtBcl{Se^Ahn2T{eqhQj|h?#AF znyy>4v_L+}>fzv2q-Jnh^j=kGC&qfqeVQ~MJEdV5T9R*c+&wD+%6UkiiZ>RGN1qF1}=L`q>=;Tb}=*HpZAzV?h=bPof5;mH2 zXYU9vVw%`mT;HQeyl7%jw?DU(Q>%XpJ!eqyC~m^whK<}`k6=Qrj8`$tx9}MHA@Mor z>ABOP3&)V~m2S_7CMAXZN)nj;fcAF1@o_KGh$=1Jz-!2V3NFnoWe^oKr07yF2}EvQ zPa}ry{6-2oX2JOue5fyjq0UqCe^?3y#(o3=?7V|Q%vzht#)pGjJadKH;o*d6{WbR( z?zzm?vzk)VBH|fm)mjm zKKYs5AEGdtd_<|*K*{0z(uZl9CS6b&<;i|tB>0W$?pG)b9Yt-$4=g#t7D)uj8pjXy zEi%w~nn4;;{)%5El_NZfu2~QbDs-Xks>*A=)8tsv3F&l=nz~%UDpM;&t69~I*?+h1 zD~X|Edq&-U-}?@nr|4Z5a@wMqEw1_vK_&^jd^q!q6I79DLvIolJy#9_=Pf~jP6Tgx z#>;-WyVJ{~NS;FHqCJ+k`-?%WxiV+2^H=!L%S$p2km}#eDDe9PdC9GClxHKCsq}0^ zNDXdRuy%OIE5 zKSa6?#cdZjQ}ts1NFisWXKZ=0P#4K@+jl@LDMiih;laNMb6FW~_MpjPEE{lRQA$b?vS9BtF6uQk-b5aefZ}+9%6Nl`kx~zm zW5GYo8fkf_VI|Bj)(1)ir>E!JI@~dkU^9snPMD{tNK=Z-tdNn>#{8`N>@3nlf@^zy z()KY0V==RxyKsM~dLw{Ou=#k#+`#`PDylH70;~IOoI<{H#c6KtjGttDeO3$)pLv{Y zQ4H!&l2qZzzyo}NN*mbTE73DF{Va_Qv~7I>;S>)P6o`uc1KhJPGFtUD9?cnaL(Z|Omn ztz26dFcyO~P)O|enP~nAF<)(^_;2sr-CTCqd@J&gY8YrGQD1R4kB}|~$F055sQ<^` zq;c=!*+- zi{hV!MRs_~4AUrC>3ZTzzXq|ez7mQQE%23qLrX}UgZqMH$PRM2Iu?KLU~xl$zqz#q zk;H`xKGMmZzJbf@YX;P*e3CB`k<$$XJLxeN$cMTnpR*oRolY~tp_JT2T+ zK)EgZH-FMpLAdB8+T=3%Dg4Yj_LhM*I`?q09pr}!*JnD^b z4$SKnv@_b{My)|}bIZp*Cng82VgJ^WEL}pcXKsdR(J|AYPJetpomK|VzT%?b(T2~@ z5@^*YVEwyAZztq^)gN?pHbM3xx_zkjY)x-9HT52vdzOo{uD?FydZ~O6ZC8ZG(4<7WR{P8Y-UcP*RGX%rK>K% z4*b1!x>zE;qc^&uDh!}iud)`BnHoi6Dh7V;=T1qkn{S|@s2rbL7tbIh_@k&6EL~2X z0hDxo?L6l&KQAyr%FplKe#s-h`4&bT%hV^Ab(oa_K3*gHjo!U;{>06jgqhoaGns#Gfj4s_F z!GGwnIU-diJ^iu=iqcW+J0-VVy9C|N?2$nr_@WZXMjK8$H{}J7KZbRUo--@e4#Bey zI-kq(tCO~qw22J_40}SO8_MNdY#dM}erliH;SlSwhOz_=S=nA;b8dQ@c*i+CW3fLn0rvI#zq(`; zw-;hTDb3Yq5{3u?)&4&=rvqBXp0Kf+%7&0vh6rnhGAMB+cPp)CsC{saKQ~yTlZCi){8kxKg#RYne7q zo67{d4yBAdqIzRapn^Fk_$3!!<5agXfb!o5?`IV!GI_Q=d}!(l2PW*WoRo?I z?CT)Wwm$I^0(u2~SPW#fzEz?RW@8Q={|e^GGHdkiWq=-+7roY^rZZ> zOaRQ|q;~MTGf#4P`ON-%uH-b%3b$GhFj0Om`XN*6g$-6)mNh0OZ&Y(S`FJl2EmteSXHyPZ=dG~ zC>xBSwv9f}u{O66D9_jI<&wecw#EV5?HiBg) z*=O2FfzEJTebj5PcR0c>QlKP$Y0+0G#SMxV@4_R-Q35ap;3nX97H?_DN~OJq*xBs( z_!q^rz3lhe+iQ$LURrD-M618JE(l3GOWV|JjsQnQF(z%>gy#rjBT}xd|LJYM^YO7m zELz)L5WSQGni7K0QG%>xpb64D-()5O(fX$Z4O#3#8sp1?4@F_73OBPtZtXXpVvNN~ zHhMXh+4qt3Uf-#-OZPlAD}jah8z4cT4~P4El0FE2jIU#11fQ>o0q`SBtZ&YgcW&nS z&L>(3aL4!Xcepayz>z0P*<8)RKrn8rPXaZg`D{6&I9JXcCxW-~{w~iK`JVV{bo(3I zESw<$>C27WKfGG(7{`i1RIZ{mNak2GZvUG=mD*0muu?B>0;UWG_I!*eGF z_x9K&@AILG2h2d1(Cgk(Q4!Of;+p{NyHIFi8hvY07W^5Ms`g z+SU87qf8~in|GR=*0bhB`9+_#u&8$hKv3I{0Du~jwuo2o<^rr~^RLFr)UxO552JFApW zA48Im^b-QHOE^r&{?7UWn}+E{y|FgvxrJ?s9%lcWcq0(^9%iVe%qp97o zO#8*NJR;$z64W$YOaH$~0<5))KTV+zv>l79u^tch*WU-V-bl9IH1UI$Ry#;|1~Seu z9aig_dlzPfMiQA|*`pCojRLh?VT=f9Fz*#4fwmAnO?dTxutx&eo6jN%sbD zYy2t2GjazL%Zo-k<%EJvvyRC1B|G!abeJZiyzbGx(VArh;8;~%8nHm)3nU5kt3^1%DZexrD;g#-3IlecrK4q#od z;J>KikPRxQ`_B&jDG$8e*o|q6)DoNoXawJ@xdb$5_NU2Tl0m4J^Gwe)-t^_2HHYa= zEgmGKJ^37#CAkdrcWWx~Ei`&L7$e!SiAO0Fy6>XK9U@VH{T`Fa6jwE!aSTuhT&G_0~H)0CvhF}<-t$sph8`1Ju#`b(J>1PWj;^t#Aq|~QJ)f03VpR$YnI{OXm$wT0! zvp&CQV~+MhdoKZj4X+7aRBY_|!IfH-QvcqioHC8x!cmjE{QD?xZn3kbt%duG5|WMh zM%H;^w^6c*MDcJs&bTJx9ZDAQpWiKo|kKuoOW^ep4 zvKwF0T>BI0_I{NDSt&6~le*JMon6_bV?Qj)cgYA`A2h|P<{J5*P{lPeURca;J5v`J z?^_@z)D11-hCzW1hTZnwR6X$ADrgKZ@SXf@X{EuCkR~e=zS6nUh5hY^n2}h`WIIz ziJ)}s$Qtl{&wA%A?N&{bLN+t7wj&h489z;M&qdxj;eIfvFgu`zJq-qRT8_MtHkEPCjUBLE2D*HI zEm|8b{PoLx8K9{cU7rAR=5f4J{xhHT3_SPJi&GQ6jcpC{5*M*4sgGnPu zw}UJK$7Ja5*kmbM*cc;9$O2ln*n(fAv0Hf2A(7DU0N(*7np%odoPFOm5#0|_b`t))(!Z5;Zx z>}w)_74=4@nT%iAg2frsJ+RbQ>gQ; zFx+2rGY(8s1^;5?FJ1XmLhX&jep=I)zGtJHD@=VL7*t>?=+=ELkOCGF$KPzBPjtPG zna`2TpZVO8Ns>|0o0(qd)*_%IujM6(xFF7p&h+|8Uu!V~@HmK-7$5&Kzly*{?_Kx8 zW)vZ-&fwgf@E&dns+P$K7S+%@~zPk;ZduIo)2JsQKO zi{L$1!_`h=8^wIzx!Kvx2+OXiLqD(B7_=J6=ysm_!)4D?XPz}!`)(Zo^mX?@C*OY3rksFl6M`%iBJ$xyFST>pxl zE_o4)-jqj-e#RxiaK-v4&-)u@;Q}dJIEmx3BO;%9MmC-Wy5$_d>u_5ScvSj57>?Db zKxZPeT<*#1`h@?#7Qltj&(cQpuZ>l9dBUEj<7$bpeap47vHt9kRZO5DDs}7=F zxUuA6w7>B_TC-YSg60X)MyePF?z&}n{Hq>+k~W4+(*ZEXO@RKuyY;lBG&c3!b&R>s zQ4wpwvW`2iTRomhNApw?5H1_GFWyh#$2Gjnrc2QL^>hu~mHbtl*F8ddu#9@9uaXip zF}1do1P%Lx@AG@Wd@rwX!eLKAl-si*yu2uca2G0o!isra9x+})O2>)_&Ui!TkKRj+ z1h#NgJxBM=mWAhd@MZoNgvdF#4IR&E#|B0#yRGC2aFh)4q9>%p~c3x^R-nQ7jzcJZjZqml>Y(py{wYrtZai%ZxoB3XZt624~`6DOtOOPld=Yo1O}j7L^Zj zvRnhTaDyf8;5Cs> zR-X*-{ISiT4RBM@|BjBc?L1!2a{Q=pqQbH zm&l=*L6Fm^p}HPHuO}Z_bq)fh*!cG&C0JqD{UNUpPc#C)7wzuoTav#5}Jv&txr&-dqK5#%C}>hJ)ENg@DFvD&p!Ysq4zV#1-oFF!A#+(*#>d z{Re`GxI7DCcR|YPaY>xoAh`zlW$$MP0dn#Nk?CeW*Y7WZJHubm`M*As8x2y*$*JO zqSyIe8>kJ8oRP4H4~--A&Eq8t2Q+^lJqIdX1`R(g$K9y&6{D+&2ip&i(|{_q*sLb@ zmR)-oxl!`8dbV+X{E-aq@V$J+$w1EQaA+a5(&7mcI&Mm6*pCW9k#e9w0m{|hkjHmW z%NgFYZKV42o+obfb70u0cD@n_^DZn{Pd=61m6Ac&uaUjjjfUY(XHo<#HWmP|P8@T? zb=ql;!N1IO5P)Ki&!bL!72?xPy_Tiew(_ZrGV-!sx8ybEBz9<(sLhPv&(X*S1KaVfh1n_c&=O;i7$4mFuV8bE0N_oFg}&}UXlYBj zgBT7aS3G}O9YV$C0D;X7Qj00#9FiXwzB5>VFkY}x(1$Hn2b;28hm=vAqG~8D=3c3E z_Iw2cn@lMX78}~R-DUEety{ZX`A<5$j8~_@a%)dWsH8xt!7*hQMqHq+M;r2Ded%az z)0Wxe!7tDQhG zf&0!EK91~p#T!fggmWmjPMvyTTpt28fiA+2UG5(bb<0L{Q0BGPa;bz#ykx32wIi;RUwE?-$$J6G&Y5by{W z$qr%yx&NZJznc48;Yx2N7!yeQciLD!uxmGe@tuFsWVFb35}sPJ;T2I|5oj>eoFNZ? zstV$OC>uvL4tOrzg@^cHY^i2g!`(Dsb3)PCRcE?D7zEpuZw#8?~4>?3FBd!hC z>xJZ`t>+1OYl5X?9YxBoN)Hw{Y=7ULBIP5&c#5 zBvgdY8tzmd3kdnXX+FQsV95Nc+V1<%c}L+pbS_X`eSJsFR)-OQdieF0sPZMCbo0ng z0MRAH?jXK34tI}p`VuTQ&g6o<9Jlj@262=bl33m+BX14_(15z-4u@bn=i*ZpF$Dkc zy(AoziNrGkQW5aqKWX?P3;`^)LaJXk-G8Q^boNJVME;Gc_;wZAyb;?jePN$`d?5>y zaoj;GJ9)s;u+Q8RE=dsz?%YE+-5g505^h?*J?R{G*=P`*zE1?&gcX5qLU81#z;}SC zmrJF;J~dE$J41(~R4|n{qDPSzja)^)XxQ_T`@K*#>gM&33aENe&QOT@G5VEE!_wpy zTkhF~NprRc;$9xnda3zjEzM$pR0gk^`+Ed{&4RMv_eut<0~ZTEU}z?)pikXE1ct4H zU1MJ2Z8OaUn;&$@)rDf z+h9) z;S&-Zc+*}M;cx4+GqA4$^Q4ugz2j{Yq`u=y2d-OxNP8wH@-NvFe#^!rg0Vd?ZO+ax ztL68hp&L01iKh}k+L^VQ;^DNa0G2_Ok^d!@MWJMz>`MntCLVotT(n6}pA+QTE-cwo#&8~L1ZvVQS#}I)# zZ0xjrrCGrPX0mg|;`2h~`pHVhB7DT5WSoD%()z&f`R%U_SQifS<1o73 zM`pl>Bzp~!(*YjW7jIKr#zMf`UC-lXuT@{Yn#B3|ENIQNv%?pWQs|ESZ9-y9-qW+H z_L||yOc3Jw+8|*$ZqBrAuCgQ@n6|&c{&rpdq&XI*I{{(c zWgDNiIMc{&mm^7R=ayH>x*!m=O1&e;l^*~abRbIEJ`!4ZHHK%q#{jLlkd2pj92mR| zfS8a9o-c(0hVoq_V+;<_GznMnAV_YLQs>4`M8mvv1(x0f+MBWduU_rS z5Wvl>y)%2qGd$9->J!avM_?jKmvz{8+q1z}dKON7iQc*~zNd_9v1KioZBBq@ew?B12Y}Z+nzh zrDc>gm4MP>fuIhlh#PFwg9fu!RRyXzAnPP!mE#A*t9`c3SaK%Fe~YoOn4UP>k1~Vk zY;9d-154&(t%i9>YHNbm8J?{I`S`%Npv08K3q&xc>@IixmA&`IZw&YB5DujsR^V3u ze)Z0AN8aY}io2zFLIlOCL@#*?(A`{|t195G@Lp*#a3gMf0Sr%W95vT+47Lk5BsN>;Zt>^dH(S}=?T*{4jgXuBzrV8$P~5uh8i61x){EW|mz z%H)5u&i;0dx!>S|w6Zik!a2_deiu5yfBm!M0}bnd6Nwrlj?}G#2i!SR*^dl>UyQtv z|Ieo&s%T8x)9J%~wL2cco^^7j%VO_zY5J69E%1W`Y5bc+P$@GhU(^rhInHkI#{@x# zypk5pvyZDPTPZ1d`JHP94@^u0gR!s;(*9hO{@km)mx(WsA&v*SwuFY~ZE?(>fkdBg zC>f1WOhS9xHSE=H>E*i*(h&eJUxNah2Cc0xTn6Y!$H{8`1Ekiq-k;lZI}{Q=MS9pf z;q5ASTs2`#WSY}!k)miKfI#~^+Y{6kqsHT4Ba$512EKo-0#6);<_64*H$uB^>;Y3E zfRov97Ac|do{4cn7xzz*_S-n(a zv2IZ9~k4?Xq; z1mjhsPX$LPOe{lOz}2gw7)@sY!YgC|lBmH>!j&I*@&JdoaI0bc;kreWc)gY3;f=d^ z=Js;K7X?d6}D zji79jKB)1U#Phx(WMEoz@?R}1wGbT*ytmLDd{iYgzoq;`BodwB@Om-`St@G${&GKF zogo77HByHY_)QlEIB7^4c787!CG2I$I|G31ASv~pX#egd(b?f4btVR8Bowi1gy}<+aG{f{&=bZhY~**2>`VtH17cp`9R|fz&sGPC2ZQNPNI+ zXTa@3Z7!X`E#>a;`x*_CQkcw=U?TmF0~DN@{#-3I8DlFI^(AiGPCc8*<7Z5S0Rw=b zoj=WoMRbN}z?aYdS?cG1@Bs{&FB!T2z@*+zSk;?8J7i+9yay7jUw$`tsBmu|mh0E& z=~=ok8ivdK+ffXW37+vVCn_uL97*jk(!2*Lk2qCJtb73DjKkoEMH1k>I3C&mNfXE1 zfE#@S(1%0mZ8D=?*gC*!^58gAIt#o z10W=*N@XU_dwQ@>Ks1Oe*IpMs|0AcK(Le%00YOcBQ+-!r_^G8nsExMFW~yO+(D3;u z!BVB*rD~A~DBQ-9M+KGW?`f{zA)5;V$QrA81#-Q_JC)Hu^dAtBVJVRXYkkJ&?Gga0 z2z++-y=4dYKEKr^^GL^_BhTb>hfwlN0TMJ$7>mb4(oVd)J%)|7KN$dDj+9L(fpqFW zCDL%ZC#h9X(5dSY$4LgUsQo8AQQH`7iO(tuhCi=IJ}2-i*8z|UM?BmD_#qjFNS7&` zc}k>p`$FK?cgF*xDV|n`q5P0S20Q|{)SXXPNv{j3B7Z;4S7?4CntFSQSBC?&!ft^LmfuOr+6 zm@n{N*-oqdTzE?45%6fmE;nLr?9LxdFii=z2q)R9N&$@c@M1R7DHiCI@a+vQ5iwEB zctL3*Ctv|g5?tk5hPyZ*k&;G!XAEDc#efu=ah-fZF$WZ5>gS3sA3ibJ8;G3n-9kZO z=&o$!r2f$VE+nzDbu1rM4_NhL+XJ^&*LPJ9tS-w0G7dni=-7C95$mm#38@$i92#2> zf>|Nq_&tSyDk5NrG$S|w7bKN!ne#wzun|Uo!Zyp8+2Nl0zonT@Wyi{x8{6r3nYI6; zo%ZERdhmh(cDM=<5`XmdoKwc}((p*Ve!SwU*?7Eby2%r)H?kF<;%fxdKRmp_^c^Y# zn>!S!EvnSAn*Lmbg0d@v#`As=xFix&8Yfq21>zBOa`xEM?oXdMhHwj+f=P=ugQeq= z{^x-g48Iz$Ug~l`NGl8jzo`UxMZr{(y-bRo_}o)o-SWe#+ZnId@TnL~%;l#}CF$hS zCH+Yb1>1nxBEstRm13K#h^hK)Otpbn0DAj#kj}Jej}kOFIT`ARWgO zM^vad50%f8L{{54Qw1GvkbKK5P>wi45RM_{~+brR%{KE@<#nXcE6QzFh zA^u!DGjlv{YhWrmh8;sBuDoAYP@y@pII4q&J)sjSUcg8-Kfye3LM)h++tDZ^B%xfK zto>cak3)M_0zv}bb^p{nryb=&MjqYk!NF)m)6$ZrO%@FwVCw_ok_iQePMkP0!H4?7 zLe${r?bx?J)?UnhDk^$_@aPcPvxU(9UBYoDo?1K8Jsti+XzQ8w@t*>LFN_;Im2Dgn z0ZJoRQ@1{zPSO}jSAA1IDe(~E@FsA4QHlb&e*c~>=nG(lzl~~ZVdYpfZog{TW3-Y& zfoo4s*JTA%ID>^fR*?aWll6g4f|+C4-)ZH^wzqkB>Z$C-NTHA2P-ZBXNQ3-ET++Lgf#VbGzt^ybqOSnof>tjH#Rzt4F-?SwnEk=!v3<(P)Xv| zqPJ0P*A2$}6I&@NVemJG2rvLKTCcZK>?e)w-Aw>rYo!75pl2|hHi~6L(?G8D3*->2 zWSfS3c6ntrK>#3IpQmIWepfh3qK8D3bHj|kkdTNmLn4>d5hhWdwg-v%bk7e?^9ys( zPR}oB{t_#uw=C-XjvFBX@bb@z6+hS7NE~7LBt77g>`F31WB|s{{8--X?FF}6X0Jbu zg9$m^VO{=od*1i?JJwx7 zh@Xm~BNFxP5uc6Sv;{)QK6^T!Jb+0&#Pr|if%qxxcSs-P={^lwNC|zss|)K# zagMu2vGLe{q(p8YcvzX@ero{O3YT$ftzlx3ZK#!&6~KL z4WdvBP^uwCdO55jYi6Rr>;R4?JYurwjG0nEv(WcL`(M5DwU#>mtRdLkApGJEu=N3b z;pA^t8$BcYZVg8h`xwr2UR%Vi?Hpi^%}Q29KHS6QCQX2V?=1>6 z0tdKscx7|YO}h5j^;+G|{s*sYXwj(m&bc4QoQXG$`ODFY7CYoUO97&kIogebq}`1k zGZK1qeW^SaMMT`C$3Jp{pcYyJ1XTAa)b6Lu6Bfx~ky5>T#ig_A`3iQlyg@+4Nc6K1DZC;k2J`FR(S2_K zaS|133kt2KOo)x|=L))(OtidD$0Km4BzYwm@Lkp;PRbR8`-SAsOL1YLG(Hux#uPfV z)5li*Inbnq3@Yyd4(7;|#1+g^0c^Vh$Vxc_(b^z;4;*p|y*LT*EK}RdDYK#n+WhkY zJ(NZDM1Y4`fn#|hzP{@9a(0yt&7HIA2X0!~!Bg#cMpGkO*Y1(Ruy7=xQ`oK6<^hso z&I>g!toP_&oMM>zU(kh4w_3~36?KhlB0L=O6U}P}Aj4rY0A9KB>$XAzwRAJkX^lNn z#|`Q|q5&hG==A<%0hb{Xt=|G(6{DT$QpO@#ocbY)iWr2-w)B15LC>L&h+B*iqT~-~ z3BC6;kmo|DBX6-glb*tdbm!K!9#~VZ)nB#mF>Xd+f)E597B|>9MqfmbjK?SaGV?Ro z+jdxoHeK`4>FAsXX5Y9#R7A*XKe;v)HrV{4Vq#)?E2Ib^nrv>DLW{-Js;J;6!;+V^ z{y__2#f;q<`=`%^N%J`fV^^YMP{I#i%h6(+#a}~|gaPHOeb?4>{Mo{j675C9gCyVc z*ZN)=%m1WnwL7Edqau9#-ajsvcD&sB&Lh#qI#W$XShP0Ke-7|fP~x_CK^p2J7P1Awc78&oU&LWk3&F&l)ySE};X z?tNWU2?iac%`IutvEu;brDAK^IhjRy?x_JvA1x?!q#0rzaNkfW`eo#Gr70(*h|V)K zyP~M@UYTg>5&=h)&B?7xbnpQ9cpaQ-=seN0)NjCfIaS_# z_5}*sUr0#XOT6C|`|o8h(0))iTKnL+Gs~uE+hGS1M1snW9IW51{^Dj~`#7RRAg#;_ zVI{Dicb?pyHUf2VaSV4g{#_}Dh?CPU7ve)Vx^YQJ9t~5A9YFq#tu_h2Ek<)h-hCUv zmsWP#3a2c-R+zf4d(e#j6W|%nHFl0m02H-mJc%|3Em>HL#BI||Zd4vpbpF87`lcCX z5uRv5s{~}%Yh{6%^e_^Tauo6NAe-edh^CJ&(yv)U3PenbJ4hqOydtVPe&v?I5T zRXcJ^N0n=8YHwB?IEPQ{9*kSEYM99Csy{#I{h=QKWTf@VxA|4ddjZ>o`-il@WGxt} z25kM%8wi5W{r( z6*#~~UR0v9=o1kTO#Z8;Q=&RHwe9(=ofwZPlotI#`&z ze9WA(UI{4-l~&J);<2HDa`U=vjT$+3TyN3jeE&WI5b1`eBkfWOt+P+T!*xQJ_l%0Z3>w`4K%cDaI?gdy-Ad!K z5d`9ANK8EaI8N3j`G)hDYyf<;P7?uK#O}M~NZM}o{+$LnJ?y66{jq(8qy=%%nepvBwK79&H zAo|A_onb~io$zsssv$S;5g^b0&71Acv{4}n0-;DN%DmP1v8)-)fcC-x4FZV7r4f5W zim+O^rpVep=UyZ$0R-5~{UXhp^Yd$c@MARG!y!}Ys59XYKfy0bfhsHOGc&redt!ar z00(vs#Q)l%fr)-g)#ch9)DVkDx1)(WPHn#OU}9!wmb1s*w*vf^p_aP(ris?UO*tNI zpU2z#2_E$|szoN7g%$2?t?Byam36pbk9l277H;{TL4k znl{t`;f=YBe;v-emyJ8iLrP}^Xv67>;}Bjdyapta`qTA2zy#!ggso-O)gzi2_aC7g z2vnjf3eZKr@w4V)pFy-Z9!>~01_v;ZVUGI`)S>KElnpJA`oF1=#X$a~1i`{@IIE?A zaaw_KB7{F0=Q&)IuW!R~LB&zy@1ihrw&8>onnCUI%A+DvrV4vS02h6XyVJMoD#Kxs zHYzy#q;+DV^!V*Zjw@HLoBiHQ;M+FCIs>A)i9J2T(s6~t&h!x&V}PMT?8vNZ_!M5= zD?}}^0YvU8s*?6SQsjw|3D;X3JPe+lwuZ*(66XifH<%SZ%qKq|tF*YXj3S^|! zaXk0t%^U1OB>ZW7R*=Gn@^9aiJih&Hj8hr`Nnk_SA%qzA5+DlUZRbU>KN}}!wVns9 zbSuE`O3+|uZ%^3HdJZx`GvTzcfP&v`N_8Svp6mWuuo;uU&;s;45kMZ<)}ZA;UHlI^ zfwF;@6CM5q0u96*Ur)|&S3^7d$Egg$5XpA`QBo3Ai23{NmJ*yt#)Fw40PKRC9axP> z!`Lq>VHxKO2rQ%YZ$NEbU7_@!0TSRH7np56F-ox`Hr67#Njz(PLbAEJk}Mj%46x9N zwLQRzXf;R%C+~({h=An6m4H3IF{MiNY?K(2O@b)kZsgLrG6k#qUvCvt-t0m zLX=%gOT??syPkht47d=qGVQ+O3MM}X6-I)f)ccV7S`=|T)Rwc9K7{MbG`@RSA8Dt2`H(tvD1CkV9`pr0Vd zZuO_Hh-Dxj6!SH zS}yv5%79wV-~mS?1DZJC26#QdngF=K;NoB|38(>77YAx2)l%W}p&~gs`aBKO6Jl=v Y4;Gi!PX-#qJpcdz07*qoM6N<$g31k@dH?_b diff --git a/resources/lang/en/cipi.php b/resources/lang/en/cipi.php index dec25d88..b62a65a5 100644 --- a/resources/lang/en/cipi.php +++ b/resources/lang/en/cipi.php @@ -8,7 +8,7 @@ |-------------------------------------------------------------------------- */ - //Errors + // Errors 'error' => 'Error', 'forbidden' => 'Forbidden', 'return_to_dashboard' => 'Return to Dashboard', @@ -16,14 +16,14 @@ 'internal_server_error' => 'Internal Server Error', 'system_error' => 'System Error', 'unknown_error' => 'Ops! Something went wrong... try later!', - //AuthController errors + // AuthController errors 'invalid_login' => 'Username and password don\'t match', 'invalid_login_message' => 'Given credentials are invalid', 'invalid_token' => 'Invalid token', 'invalid_token_message' => 'Given token is invalid', 'username_conflict' => 'Username Conflict', 'username_conflict_message' => 'Required username is used into database', - //ServerController errors + // ServerController errors 'server_not_found_native_message' => 'Panel is not associated to a native server', 'server_conflict_ip_current_message' => 'You cannot add a server with the same current server IP', 'server_conflict_ip_duplicate_message' => 'There is another server with same IP into database', @@ -37,7 +37,7 @@ 'server_error_ssh_error_message' => 'SSH error with server: ', 'something_error_message' => 'Something went wrong.', 'invalid_service_error_message' => 'Required service is not valid', - //SiteController errors + // SiteController errors 'bad_request' => 'Bad Request.', 'bad_request_default_site_delete' => 'Cannot delete default site from panel', 'invalid_php_version' => 'Invalid PHP version.', @@ -55,7 +55,7 @@ 'domain_conflict' => 'Domain conflict', 'domain_conflict_message' => 'Required domain is used by another site/alias on this server', - //Sidebar Menu + // Sidebar Menu 'menu' => 'MENU', 'sidebar_menu' => [ 'dashboard' => 'Dashboard', @@ -65,11 +65,11 @@ 'app' => 'Mobile App', 'logout' => 'Logout', ], - //Sidebar info + // Sidebar info 'panel_version' => 'Panel version', 'logged_in_as' => 'Logged in as', - //Titles + // Titles 'titles' => [ 'dashboard' => 'Dashboard', 'servers' => 'Manage Servers', @@ -79,7 +79,7 @@ 'settings' => 'Manage Settings', ], - //General + // General 'loading_data' => 'Loading data', 'no_results_found' => 'There\'s nothing here, yet!', 'loading_please_wait' => 'Loading, please wait', @@ -105,15 +105,15 @@ 'unknown' => 'Unknown', 'submit' => 'Submit', - //Dashboard + // Dashboard 'dashboard' => 'Dashboard', 'add_new_server' => 'ADD A SERVER NOW', - //PDF - 'pdf_site_php_version' => 'Your site :domain is PHP :php based!', - 'pdf_take_care' => 'Take care about this data :)', + // PDF + 'pdf_site_php_version' => 'Your site :domain is PHP :php based.', + 'pdf_take_care' => 'Take care about this data!', - //Servers + // Servers 'server' => 'Server', 'servers' => 'Servers', 'install' => 'Install', @@ -139,7 +139,7 @@ 'server_provider' => 'Server Provider', 'server_location' => 'Server Location', - //Server + // Server 'server_cpu_realtime_load' => 'CPU Realtime Load', 'server_ram_realtime_load' => 'RAM Realtime Load', 'server_information' => 'Server Information', @@ -161,7 +161,7 @@ 'require_password_reset_modal_text' => 'Are you sure to reset Cipi user password?', 'new_password_success' => 'New Cipi user password', - //Sites + // Sites 'site' => 'Site', 'sites' => 'Sites', 'domain' => 'Domain', @@ -176,7 +176,7 @@ 'delete_site_modal_title' => 'Delete Site', 'delete_site_modal_text' => 'Are you sure to delete site and its database and aliases?', - //Site + // Site 'basic_information' => 'Basic information', 'manage_aliases' => 'Manage Aliases', 'add_alias' => 'Add Alias', @@ -195,14 +195,14 @@ 'repository_project' => 'Project', 'repository_branch' => 'Branch', 'repository_deploy_key' => 'Deploy Key', - 'repository_deploy_key_info' => '(Copy and add it here)', + 'repository_deploy_key_info' => '(Copy and add it here)', 'deploy_scripts' => 'Site Deploy Scripts', 'require_ssh_password_reset_modal_text' => 'Are you sure to reset site SSH password?', 'require_mysql_password_reset_modal_text' => 'Are you sure to reset site MySql password?', 'new_ssh_password_success' => 'Your SSH password has been reset', 'new_mysql_password_success' => 'Your Mysql password has been reset', - //Settings + // Settings 'change_username' => 'Change Username', 'change_username_placeholder' => 'New username (at least 6 chars)', 'current_username' => 'Current Username', diff --git a/routes/web.php b/routes/web.php index ecb0d76c..94cc36e0 100644 --- a/routes/web.php +++ b/routes/web.php @@ -1,6 +1,7 @@ /dev/null \ No newline at end of file diff --git a/utility/zero-page/index.php b/utility/zero-page/index.php index 3d00e7dd..8aad683e 100644 --- a/utility/zero-page/index.php +++ b/utility/zero-page/index.php @@ -17,9 +17,9 @@ ['quote' => 'Work hard, be kind, and amazing things will happen.', 'author' => 'Conan O’Brien'], ['quote' => 'In the middle of every difficulty lies opportunity.', 'author' => 'Albert Einstein'] ]; - + $randquote = array_rand($quotes); - + ?> @@ -28,7 +28,7 @@ - <?php echo substr($quotes[$randquote]['quote'], 0, 21); ?>... + <?php echo substr($quotes[$randquote]['quote'], 0, 27); ?>...