Compare commits

...

79 Commits
2.1.1 ... 2.2.0

Author SHA1 Message Date
Chris
eb69ea05fa Update package-lock.json 2019-06-11 12:35:48 +01:00
Chris
244b0998f9 update bootstrap-sass 2019-06-11 12:34:28 +01:00
Chris
1f608b1c21 Update composer dependencies 2019-06-11 12:29:32 +01:00
Chris
7d6df3843b update node deps 2019-06-11 12:20:04 +01:00
Chris
edb9397a47 Add startpage back in 2019-06-11 12:02:18 +01:00
KodeStar
66815a8487 readd startpage 2019-06-11 11:45:13 +01:00
KodeStar
5ee19bceb6 Merge pull request #357 from Agurato/master
Add Qwant as search engine
2019-06-11 11:32:31 +01:00
KodeStar
deba7d0279 Merge branch 'master' into master 2019-06-11 11:32:11 +01:00
KodeStar
38e93d33f1 remove startpage 2019-06-11 11:30:33 +01:00
KodeStar
f182f305fc remove startpage 2019-06-11 11:30:17 +01:00
KodeStar
03c675ed57 remove startpage 2019-06-11 11:29:54 +01:00
KodeStar
3916b2d4dc remove startpage 2019-06-11 11:29:38 +01:00
KodeStar
698a7a9bbc remove startpage 2019-06-11 11:28:07 +01:00
KodeStar
9954d1b6bf Merge pull request #342 from dmbekker/master
Dutch Translation update
2019-06-11 11:04:52 +01:00
KodeStar
a98b981efe Merge pull request #348 from Aerion/toggle-livestats-refresh-active-tab
turn off livestats update when the tab isn't active
2019-06-11 11:03:14 +01:00
KodeStar
dd2ca62eaf Add private subnets to trusted proxies for reverse proxy use 2019-06-11 11:00:44 +01:00
Agurato
dc2a42ad6d Add Qwant as search engine 2019-06-08 13:02:12 +02:00
Guillaume Taquet Gasperini
b5b25458db turn off livestats update when the tab isn't active
Fixes #330: Turning off the updating when the tab isn't active

When the tab is not visible from the user, the livestats refresh are
stopped. As soon as its visibility changes (from visibilitychange
API), the livestats are refreshed as usual.

This will prevent unnecessary calls to the different services when the
tab is hidden from the user.
2019-05-20 21:58:03 +02:00
David
ac4bbceb2f New Translations, Fixes for current translation
Added new translations

Minor language-issues fixed
- Changed 'Toepassing' to 'Applicatie' (Both Acronyms were used)
- Changed 'Reeks' to 'Tekenreeks'
2019-04-22 16:38:07 +02:00
Kode
4980bfab12 fix not protocol breaking adding for some reason 2019-03-30 23:10:00 +00:00
Chris
63e0d07d50 remove unused storeSearchProvider 2019-02-04 08:51:49 +00:00
Kode
2b76520e3a change version number and update lang value 2019-01-18 18:42:17 +00:00
Kode
6631b8a23b update dev npm deps 2019-01-18 18:37:51 +00:00
Kode
04d34017c1 Composer deps update 2019-01-18 18:33:28 +00:00
KodeStar
6dcbcb452e Merge pull request #316 from linuxserver/search-enhancements
Search enhancements
2019-01-18 18:27:19 +00:00
Kode
7c74b3bb13 update manifest 2019-01-18 18:26:07 +00:00
Kode
b76a9ee118 Merge branch 'master' into search-enhancements 2019-01-18 18:25:00 +00:00
Kode
40da649b10 Changes to search 2019-01-18 18:21:44 +00:00
Chris
cd64d762e7 additions to search 2019-01-18 15:21:50 +00:00
Chris
b91c52820a replace fontawesome with js version 2019-01-18 14:07:17 +00:00
KodeStar
1204ffd306 Update app.php 2019-01-16 17:24:31 +00:00
Chris
978267dd14 Update Search.php 2019-01-16 15:00:42 +00:00
Chris
f935fd94c6 initial work on seach changes 2019-01-16 14:47:32 +00:00
Chris
fb2428e21b fixes #109 2019-01-16 14:20:33 +00:00
Chris
e36a126c01 fixes #286 2019-01-16 12:02:38 +00:00
Chris
b186978624 fixes #299 2019-01-16 11:39:39 +00:00
Chris
49773d7654 Fixes #302 2019-01-16 10:37:25 +00:00
Chris
53c03751a1 ignore supported apps folder 2019-01-16 10:35:55 +00:00
Chris
9d2908449a Merge branch 'master' of https://github.com/linuxserver/Heimdall 2019-01-15 15:27:29 +00:00
KodeStar
caf92bcf6d check for gitignore in public storage and symlink if missing 2019-01-15 15:25:53 +00:00
KodeStar
cbef469e02 Update AppServiceProvider.php 2019-01-15 15:23:10 +00:00
Chris
a6bfc1d76c ignore .env 2019-01-15 14:27:19 +00:00
KodeStar
0446a74de9 Merge pull request #308 from openseabrus/master
Portuguese (PT-PT) translation.
2019-01-07 08:27:46 +00:00
KodeStar
1a14079b39 add APP_KEY 2019-01-04 14:00:15 +00:00
KodeStar
d9c1919ddc Merge pull request #313 from linuxserver/Fix-default-appkey
Update .env.example
2019-01-04 11:52:07 +00:00
KodeStar
f42ac0c5ba if .env is missing copy example and generate key 2019-01-04 10:38:07 +00:00
KodeStar
c073929895 Delete .env 2019-01-04 10:36:04 +00:00
KodeStar
02df7844a4 Update .env.example 2019-01-04 10:34:12 +00:00
l1904l
e43aba0111 Portuguese (PT-PT) translation. 2018-12-26 15:56:34 +00:00
Kode
ac7446ffe6 update version 2018-11-14 18:14:23 +00:00
Kode
e45d3ca6ec remove apps 2018-11-14 18:10:55 +00:00
Chris
603550a453 autofocus password 2018-11-13 12:38:19 +00:00
Kode
4463ef4a9a add right to livestats 2018-11-10 21:37:21 +00:00
Kode
49b8dc0079 Update version number 2018-11-10 18:05:19 +00:00
Kode
ab83c3a551 Small changes
Copy icon if missing on new app add.
Change order of create symlink and load apps
2018-11-09 23:07:01 +00:00
Chris
98c6093674 Check url isn't missing when testing 2018-11-07 11:24:26 +00:00
Chris
e1f51521bf Update version 2018-11-07 08:57:18 +00:00
Chris
e85bc98dcc Fix ProcessJobs not working if folder is empty but table isn't 2018-11-07 08:54:00 +00:00
Chris
4ba52baa5c Remove old code from tags form 2018-11-06 15:44:09 +00:00
Chris
a82077b4de Update version 2018-11-06 15:15:55 +00:00
Chris
b8f04f3d11 Fix preview and config not retaining values 2018-11-06 14:52:45 +00:00
Chris
e91f65f833 Ignore copy errors 2018-11-06 11:53:25 +00:00
Chris
575ab9be2d update version 2018-11-06 11:29:33 +00:00
Chris
64071bb60f Add migration and change path 2018-11-06 11:28:22 +00:00
Chris
44621a1a61 Change version + replace supported with icons 2018-11-06 09:48:03 +00:00
Chris
c56043e1f9 Add default value to null rather than not set 2018-11-06 09:20:53 +00:00
Kode
e8e4cbfd41 Change sort order for applist 2018-11-05 21:03:42 +00:00
Kode
4b2bbe0614 update version 2018-11-05 19:03:26 +00:00
Kode
9adfa14e62 fix light colour livestats 2018-11-05 19:02:19 +00:00
Kode
067f82b632 fix copy failing 2018-11-05 18:47:56 +00:00
Chris
e24e7979be update version number 2018-11-05 15:28:17 +00:00
Chris
c7c2b6e6f2 change location of icons so it's persistant 2018-11-05 15:27:29 +00:00
Chris
96798963d6 Update register app to allow all 2018-11-05 12:31:43 +00:00
Chris
75508a81ef Update version 2018-11-05 09:44:11 +00:00
Chris
f7f4efadb7 Change html comment to php comment 2018-11-05 09:40:44 +00:00
Kode
4cc80b98db inconsequential update to try and fix broken build 2018-11-04 22:33:44 +00:00
Kode
b07efaa7d0 Merge branch 'master' of https://github.com/linuxserver/ifai 2018-11-04 21:43:16 +00:00
Kode
7ba8ea6dd4 die if missing php-zip 2018-11-04 21:43:12 +00:00
KodeStar
479461821f Update readme to use shields for apps 2018-11-04 18:30:27 +00:00
2440 changed files with 116331 additions and 38731 deletions

31
.env
View File

@@ -1,31 +0,0 @@
APP_NAME=Heimdall
APP_ENV=local
APP_KEY=base64:I206O8ibx+GQyRE7BeOxDobn04Mfmyyc5Ptzns/C0mY=
APP_DEBUG=true
APP_LOG_LEVEL=debug
APP_URL=http://localhost
DB_CONNECTION=sqlite
DB_DATABASE=app.sqlite
BROADCAST_DRIVER=log
CACHE_DRIVER=file
SESSION_DRIVER=file
SESSION_LIFETIME=120
QUEUE_DRIVER=sync
REDIS_HOST=127.0.0.1
REDIS_PASSWORD=null
REDIS_PORT=6379
MAIL_DRIVER=smtp
MAIL_HOST=smtp.mailtrap.io
MAIL_PORT=2525
MAIL_USERNAME=null
MAIL_PASSWORD=null
MAIL_ENCRYPTION=null
PUSHER_APP_ID=
PUSHER_APP_KEY=
PUSHER_APP_SECRET=
PUSHER_APP_CLUSTER=mt1

View File

@@ -1,16 +1,12 @@
APP_NAME=Laravel
APP_NAME=Heimdall
APP_ENV=local
APP_KEY=
APP_DEBUG=true
APP_LOG_LEVEL=debug
APP_URL=http://localhost
DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=homestead
DB_USERNAME=homestead
DB_PASSWORD=secret
DB_CONNECTION=sqlite
DB_DATABASE=app.sqlite
BROADCAST_DRIVER=log
CACHE_DRIVER=file

2
.gitignore vendored
View File

@@ -1,3 +1,4 @@
/app/SupportedApps
/node_modules
/public/hot
/public/storage
@@ -25,3 +26,4 @@ yarn-error.log
.Trashes
.VolumeIcon.icns
storage/app/public/avatars/*
.env

View File

@@ -13,6 +13,14 @@ class Application extends Model
//
public function icon()
{
if(!file_exists(storage_path('app/public/'.$this->icon))) {
$img_src = app_path('SupportedApps/'.$this->name.'/'.str_replace('icons/', '', $this->icon));
$img_dest = storage_path('app/public/'.$this->icon);
//die("i: ".$img_src);
@copy($img_src, $img_dest);
}
return $this->icon;
}
@@ -40,7 +48,7 @@ class Application extends Model
public static function applist()
{
$list = [];
$all = self::orderBy('name')->get();
$all = self::orderBy('name')->get()->sortBy('name', SORT_NATURAL|SORT_FLAG_CASE);
$list['null'] = 'None';
foreach($all as $app) {
$name = $app->name;

View File

@@ -40,22 +40,40 @@ class RegisterApp extends Command
public function handle()
{
$folder = $this->argument('folder');
if($folder == 'all') {
$apps = scandir(app_path('SupportedApps'));
foreach($apps as $folder) {
if($folder == '.' || $folder == '..') continue;
$this->addApp($folder);
}
} else {
$this->addApp($folder);
}
}
public function addApp($folder)
{
$json = app_path('SupportedApps/'.$folder.'/app.json');
if(file_exists($json)) {
$app = json_decode(file_get_contents($json));
$exists = Application::find($app->appid);
if($exists) {
$this->error('This app is already registered');
exit;
if(isset($app->appid)) {
$exists = Application::find($app->appid);
if($exists) {
$this->error('Application already registered - '.$exists->name." - ".$exists->appid);
} else {
// Doesn't exist so add it
SupportedApps::saveApp($app, new Application);
$this->info("Application Added - ".$app->name." - ".$app->appid);
}
} else {
$this->error('No App ID for - '.$folder);
}
// Doesn't exist so add it
SupportedApps::saveApp($app, new Application);
$this->info("Application Added - ".$app->name." - ".$app->appid);
} else {
$this->error('Could not find '.$json);
}
}
}

View File

@@ -12,6 +12,7 @@ use Illuminate\Http\Request;
use Illuminate\Support\Facades\Storage;
use App\SupportedApps;
use App\Jobs\ProcessApps;
use App\Search;
class ItemController extends Controller
{
@@ -168,6 +169,8 @@ class ItemController extends Controller
$item = Item::create($request->all());
//Search::storeSearchProvider($request->input('class'), $item);
$item->parents()->sync($request->tags);
$route = route('dash', [], false);
@@ -241,6 +244,8 @@ class ItemController extends Controller
$item = Item::find($id);
$item->update($request->all());
//Search::storeSearchProvider($request->input('class'), $item);
$item->parents()->sync($request->tags);
$route = route('dash', [], false);

View File

@@ -0,0 +1,28 @@
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use App\Http\Controllers\Controller;
use App\Search;
class SearchController extends Controller
{
public function index(Request $request)
{
$requestprovider = $request->input('provider');
$query = $request->input('q');
$provider = Search::providerDetails($requestprovider);
if($provider->type == 'standard') {
return redirect($provider->url.'?'.$provider->var.'='.urlencode($query));
} elseif($provider->type == 'external') {
$class = new $provider->class;
//print_r($provider);
return $class->getResults($query, $provider);
}
//print_r($provider);
}
}

View File

@@ -68,6 +68,8 @@ class SettingsController extends Controller
if (!is_null($setting)) {
$data = Setting::getInput();
$setting_value = null;
if ($setting->type == 'image') {
@@ -116,4 +118,10 @@ class SettingsController extends Controller
]);
}
public function search(Request $request)
{
}
}

View File

@@ -12,7 +12,7 @@ class TrustProxies extends Middleware
*
* @var array
*/
protected $proxies;
protected $proxies = ['192.168.0.0/16', '172.16.0.0/12','10.0.0.0/8'];
/**
* The current proxy header mappings.

View File

@@ -7,6 +7,7 @@ use Symfony\Component\ClassLoader\ClassMapGenerator;
use Illuminate\Database\Eloquent\SoftDeletes;
use Illuminate\Database\Eloquent\Builder;
use App\User;
use App\Application;
class Item extends Model
{
@@ -124,6 +125,14 @@ class Item extends Model
}
}
public static function nameFromClass($class)
{
$explode = explode('\\', $class);
$name = end($explode);
return $name;
}
public function scopeOfType($query, $type)
{
switch($type) {
@@ -148,6 +157,19 @@ class Item extends Model
return (bool)($app instanceof \App\EnhancedApps);
}
public static function isEnhanced($class)
{
if($class === null || $class === 'null') return false;
$app = new $class;
return (bool)($app instanceof \App\EnhancedApps);
}
public static function isSearchProvider($class)
{
$app = new $class;
return ((bool)($app instanceof \App\SearchInterface)) ? $app : false;
}
public function enabled()
{
if($this->enhanced()) {
@@ -186,7 +208,26 @@ class Item extends Model
return $config;
}
public static function applicationDetails($class)
{
if(!empty($class)) {
$name = self::nameFromClass($class);
$application = Application::where('name', $name)->first();
if($application) return $application;
}
return false;
}
public static function getApplicationDescription($class)
{
$details = self::applicationDetails($class);
if($details !== false) {
return $details->description.' - '.$details->license;
}
return '';
}
/**
* Get the user that owns the item.

View File

@@ -34,11 +34,15 @@ class ProcessApps implements ShouldQueue
$localapps = Application::all();
$list = json_decode(SupportedApps::getList()->getBody());
$validapps = [];
foreach($list->apps as $app) {
$validapps[] = $app->appid;
$localapp = $localapps->where('appid', $app->appid)->first();
$application = ($localapp) ? $localapp : new Application;
if(!file_exists(app_path('SupportedApps/'.className($app->name)))) {
SupportedApps::getFiles($app);
$application = new Application;
SupportedApps::saveApp($app, $application);
} else {
// check if there has been an update for this app
@@ -46,11 +50,10 @@ class ProcessApps implements ShouldQueue
if($localapp) {
if($localapp->sha !== $app->sha) {
SupportedApps::getFiles($app);
SupportedApps::saveApp($app, $localapp);
SupportedApps::saveApp($app, $application);
}
} else {
SupportedApps::getFiles($app);
$application = new Application;
SupportedApps::saveApp($app, $application);
}

View File

@@ -21,9 +21,9 @@ class AppServiceProvider extends ServiceProvider
{
if(!is_file(base_path('.env'))) {
touch(base_path('.env'));
Artisan::call('key:generate');
copy(base_path('.env.example'), base_path('.env'));
}
$this->genKey();
if(!is_file(database_path('app.sqlite'))) {
// first time setup
touch(database_path('app.sqlite'));
@@ -47,15 +47,20 @@ class AppServiceProvider extends ServiceProvider
}
}
if(!is_file(public_path('storage/.gitignore'))) {
Artisan::call('storage:link');
\Session::put('current_user', null);
}
$applications = Application::all();
if($applications->count() <= 0) {
ProcessApps::dispatch();
}
if(!is_file(public_path('storage'))) {
Artisan::call('storage:link');
\Session::put('current_user', null);
if (class_exists('ZipArchive')) {
ProcessApps::dispatch();
} else {
die("You are missing php-zip");
}
}
// User specific settings need to go here as session isn't available at this point in the app
@@ -112,6 +117,21 @@ class AppServiceProvider extends ServiceProvider
}
/**
* Generate app key if missing and .env exists
*
* @return void
*/
public function genKey()
{
if(is_file(base_path('.env'))) {
if(empty(env('APP_KEY'))) {
Artisan::call('key:generate', array('--force' => true, '--no-interaction' => true));
}
}
}
/**
* Register any application services.
*

147
app/Search.php Normal file
View File

@@ -0,0 +1,147 @@
<?php namespace App;
use GuzzleHttp\Exception\GuzzleException;
use GuzzleHttp\Client;
use App\Item;
use App\Setting;
use Form;
use Cache;
abstract class Search
{
/**
* List of all search providers
*
* @return Array
*/
public static function providers()
{
$providers = self::standardProviders();
$providers = $providers + self::appProviders();
return $providers;
}
/**
* Gets details for a single provider
*
* @return Object
*/
public static function providerDetails($provider)
{
$providers = self::providers();
if(!isset($providers[$provider])) return false;
return (object)$providers[$provider] ?? false;
}
/**
* Array of the standard providers
*
* @return Array
*/
public static function standardProviders()
{
return [
'google' => [
'url' => 'https://www.google.com/search',
'var' => 'q',
'method' => 'get',
'type' => 'standard',
],
'ddg' => [
'url' => 'https://duckduckgo.com/',
'var' => 'q',
'method' => 'get',
'type' => 'standard',
],
'bing' => [
'url' => 'https://www.bing.com/search',
'var' => 'q',
'method' => 'get',
'type' => 'standard',
],
'qwant' => [
'url' => 'https://www.qwant.com/',
'var' => 'q',
'method' => 'get',
'type' => 'standard',
],
'startpage' => [
'url' => 'https://www.startpage.com/do/dsearch',
'var' => 'query',
'method' => 'get',
'type' => 'standard',
],
];
}
/**
* Loops through users apps to see if app is a search provider, might be worth
* looking into caching this at some point
*
* @return Array
*/
public static function appProviders()
{
$providers = [];
$userapps = Item::all();
foreach($userapps as $app) {
if(empty($app->class)) continue;
if(($provider = Item::isSearchProvider($app->class)) !== false) {
$name = Item::nameFromClass($app->class);
$providers[strtolower($name)] = [
'type' => $provider->type,
'class' => $app->class,
'url' => $app->url,
];
}
}
return $providers;
}
/**
* Outputs the search form
*
* @return html
*/
public static function form()
{
$output = '';
$homepage_search = Setting::fetch('homepage_search');
$search_provider = Setting::where('key', '=', 'search_provider')->first();
$user_search_provider = Setting::fetch('search_provider');
//die(print_r($search_provider));
//die(var_dump($user_search_provider));
// return early if search isn't applicable
if((bool)$homepage_search !== true) return $output;
$user_search_provider = $user_search_provider ?? 'none';
if((bool)$homepage_search && (bool)$search_provider) {
if((bool)$user_search_provider) {
$name = 'app.options.'.$user_search_provider;
$provider = self::providerDetails($user_search_provider);
$output .= '<div class="searchform">';
$output .= Form::open(['url' => 'search', 'method' => 'get']);
$output .= '<div id="search-container" class="input-container">';
$output .= '<select name="provider">';
foreach(self::providers() as $key => $searchprovider) {
$selected = ($key === $user_search_provider) ? ' selected="selected"' : '';
$output .= '<option value="'.$key.'"'.$selected.'>'.__('app.options.'.$key).'</option>';
}
$output .= '</select>';
$output .= Form::text('q', null, ['class' => 'homesearch', 'autofocus' => 'autofocus', 'placeholder' => __('app.settings.search').'...']);
$output .= '<button type="submit">'.ucwords(__('app.settings.search')).'</button>';
$output .= '</div>';
$output .= Form::close();
$output .= '</div>';
}
}
return $output;
}
}

10
app/SearchInterface.php Normal file
View File

@@ -0,0 +1,10 @@
<?php namespace App;
use GuzzleHttp\Exception\GuzzleException;
use GuzzleHttp\Client;
interface SearchInterface
{
public function getResults($query, $providerdetails);
}

View File

@@ -7,6 +7,7 @@ use Illuminate\Support\Facades\Input;
use Form;
use Illuminate\Support\Facades\Auth;
use App\User;
use App\Search;
class Setting extends Model
{
@@ -216,59 +217,6 @@ class Setting extends Model
return array_key_exists($key, Setting::$cache);
}
/**
* @return html
*/
public static function search()
{
$output = '';
$homepage_search = self::fetch('homepage_search');
$search_provider = self::where('key', '=', 'search_provider')->first();
$user_search_provider = self::fetch('search_provider');
//die(print_r($search_provider));
//die(var_dump($user_search_provider));
// return early if search isn't applicable
if((bool)$homepage_search !== true) return $output;
if($user_search_provider === 'none') return $output;
if(empty($user_search_provider)) return $output;
if(is_null($user_search_provider)) return $output;
if((bool)$homepage_search && (bool)$search_provider) {
$options = (array)json_decode($search_provider->options);
$name = $options[$user_search_provider];
if((bool)$user_search_provider) {
switch($user_search_provider) {
case 'google':
$url = 'https://www.google.com/search';
$var = 'q';
break;
case 'ddg':
$url = 'https://duckduckgo.com/';
$var = 'q';
break;
case 'bing':
$url = 'https://www.bing.com/search';
$var = 'q';
break;
case 'startpage':
$url = 'https://www.startpage.com/';
$var = 'q';
}
$output .= '<div class="searchform">';
$output .= Form::open(['url' => $url, 'method' => 'get']);
$output .= '<div class="input-container">';
$output .= Form::text($var, null, ['class' => 'homesearch', 'autofocus' => 'autofocus', 'placeholder' => __($name).' '.__('app.settings.search').'...']);
$output .= '<button type="submit">'.ucwords(__('app.settings.search')).'</button>';
$output .= '</div>';
$output .= Form::close();
$output .= '</div>';
}
}
return $output;
}
/**
* The users that belong to the setting.

View File

@@ -13,6 +13,13 @@ abstract class SupportedApps
public function appTest($url, $attrs = [], $overridevars=false)
{
if(empty($this->config->url)) {
return (object)[
'code' => 404,
'status' => 'No URL has been specified',
'response' => 'No URL has been specified',
];
}
$res = $this->execute($url, $attrs);
if($res == null) {
return (object)[
@@ -105,6 +112,13 @@ abstract class SupportedApps
return $client->request('GET', $list_url);
}
public static function configValue($item=null, $key=null)
{
if(isset($item) && !empty($item)) {
return $item->getconfig()->$key;
} else return null;
}
public static function getFiles($app)
{
$zipurl = $app->files;
@@ -129,15 +143,19 @@ abstract class SupportedApps
public static function saveApp($details, $app)
{
if(!file_exists(storage_path('app/public/icons'))) {
mkdir(storage_path('app/public/icons'), 0777, true);
}
$img_src = app_path('SupportedApps/'.className($details->name).'/'.$details->icon);
$img_dest = public_path('storage/supportedapps/'.$details->icon);
$img_dest = storage_path('app/public/icons/'.$details->icon);
//die("i: ".$img_src);
copy($img_src, $img_dest);
@copy($img_src, $img_dest);
$app->appid = $details->appid;
$app->name = $details->name;
$app->sha = $details->sha ?? null;
$app->icon = 'supportedapps/'.$details->icon;
$app->icon = 'icons/'.$details->icon;
$app->website = $details->website;
$app->license = $details->license;
$app->description = $details->description;

1560
composer.lock generated

File diff suppressed because it is too large Load Diff

View File

@@ -14,7 +14,7 @@ return [
*/
'name' => env('APP_NAME', 'Heimdall'),
'version' => '2.1.0',
'version' => '2.2.0',
/*
|--------------------------------------------------------------------------

View File

@@ -0,0 +1,35 @@
<?php
use Illuminate\Support\Facades\Schema;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Database\Migrations\Migration;
class CreateFailedJobsTable extends Migration
{
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
Schema::create('failed_jobs', function (Blueprint $table) {
$table->bigIncrements('id');
$table->text('connection');
$table->text('queue');
$table->longText('payload');
$table->longText('exception');
$table->timestamp('failed_at')->useCurrent();
});
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
Schema::dropIfExists('failed_jobs');
}
}

View File

@@ -90,6 +90,7 @@ class SettingsSeeder extends Seeder
'none' => 'app.options.none',
'google' => 'app.options.google',
'ddg' => 'app.options.ddg',
'qwant' => 'app.options.qwant',
'bing' => 'app.options.bing',
'startpage' => 'app.options.startpage',
]);

9837
package-lock.json generated

File diff suppressed because it is too large Load Diff

View File

@@ -10,12 +10,12 @@
"production": "cross-env NODE_ENV=production node_modules/webpack/bin/webpack.js --no-progress --hide-modules --config=node_modules/laravel-mix/setup/webpack.config.js"
},
"devDependencies": {
"bootstrap-sass": "^3.3.7",
"bootstrap-sass": "^3.4.1",
"cross-env": "^5.2.0",
"jquery": "^3.2",
"laravel-mix": "^2.1.14"
"jquery": "^3.4.1",
"laravel-mix": "^4.0.16"
},
"dependencies": {
"select2": "^4.0.6-rc.1"
"select2": "^4.0.7"
}
}

6185
public/css/app.css vendored

File diff suppressed because one or more lines are too long

160
public/js/app.js vendored

File diff suppressed because one or more lines are too long

2480
public/js/fontawesome.js vendored Normal file

File diff suppressed because one or more lines are too long

View File

@@ -1,4 +1,4 @@
{
"/css/app.css": "/css/app.css?id=fb2cfb67b5f04db8beee",
"/css/app.css": "/css/app.css?id=c067b0b68e4516e903e1",
"/js/app.js": "/js/app.js?id=8dc4a6ea723d0df7469d"
}
}

View File

@@ -29,73 +29,12 @@ You can use the app to link to any site or application, but Foundation apps will
Supported applications are recognized by the title of the application as entered in the title field when adding an application. For example, to add a link to pfSense, begin by typing "p" in the title field and then select "pfSense" from the list of supported applications.
**Enhanced**
- CouchPotato
- Deluge
- NZBGet
- Pihole
- PlexPy
- Proxmox
- Runeaudio
- Sabnzbd
- Tautulli
- Traefik
- Transmission
[![enhancedapps](https://img.shields.io/badge/dynamic/json.svg?label=Enhanced%20Apps&url=https%3A%2F%2Fapps.heimdall.site%2Fstats&query=enhanced_apps&colorB=3f8483&style=for-the-badge&logo=data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABwAAAAjCAMAAACw/5reAAAAnFBMVEUAAADu7u7u7u7u7u7u7u7x8fHu7u7u7u7u7u7u7u7u7u7u7u7r6+vu7u7v7+/u7u7t7e3v7+/v7+/u7u7u7u7u7u7u7u7u7u7u7u7u7u7v7+/u7u7p6ent7e3v7+/v7+/v7+/u7u7u7u7u7u7u7u7t7e3////u7u7u7u7u7u7u7u7w8PDw8PDt7e3u7u7t7e3s7Ozu7u7t7e3u7u4TnCP6AAAAM3RSTlMA+9n3phHw3czC088M5Y5zG6mflWdJFumyfj4sB2NeTi7hiWlDOQPGt5lsMiG9hFQntpFqxQJtAAABnElEQVQoz2WRh3KrQAxFtYWO6ZhucItrynv6/3/LFnA24c6wurpnYBkJZvXduNix6+GXTo8qWnxUPU4m2w0O1ktTozPsftiZpejGlm7C2MWUnRcWOohIo36+PaKyDZdLUOgDXvqQfaT9kwkfvP3AN18E7Kl8hkJHMHSXSSadxaTtTNjJhMkfjFHKMqGlolg4T7mtCbcq8gBCotxkwklFLIQSlQoTHnVWQqzNxYQuzpfmqGVMc5ijHK5yAuIhxbZ5p/S92RZkjv5BKs6aosSIr0JrcXBo1FtICVINKRKK6u0GnraoN84O5KbhjRwYzxCJnQCMtotkdNxjq2F7dJ2RoGuXIBTvc3ROthdmat6hZ7cOyfcxKGV+wTxBkxQxTQTzWOFny/7qS2nzx37T7nbtZj9xu7zUr/323nVy0sQnhwMJktSZrl5v7CjgSQmWi+haUCY8sH4tyc/FGSKGouS+WqBJm8U2NIE/+nLu2tzpF/xVNGy02QzRClafC/ysVpDzQJuA8xXsKl8bv+pgpXz57H9Yy3J1lQNY62wUrW+mdzrylWS0QwAAAABJRU5ErkJggg==)](https://apps.heimdall.site/applications/enhanced)
**Foundation**
- AirSonic
- Bazarr
- Bitwarden
- Booksonic
- BookStack
- Cardigann
- DokuWiki
- Duplicati
- Emby
- FreshRSS
- Gitea
- Grafana
- Graylog
- Headphones
- Jdownloader
- Krusader
- LibreNMS
- Lidarr
- Mailcow
- McMyAdmin
- Medusa
- Monica
- MusicBrainz
- Mylar
- NZBhydra & NZBhydra2
- Netdata
- Nextcloud
- Ombi
- OpenHAB
- OpenMediaVault
- Plex
- Plexrequests
- Portainer
- Radarr
- Rancher
- SickRage
- Sonarr
- TT-RSS
- TVheadend
- UniFI
- unRAID
- pfSense
- pyLoad
- rTorrent/Flood
- rTorrent/ruTorrent
- Syncthing
- Virtualmin
- Watcher3
- Webmin
- WebTools
[![foundationapps](https://img.shields.io/badge/dynamic/json.svg?label=Foundation%20Apps&url=https%3A%2F%2Fapps.heimdall.site%2Fstats&query=foundation_apps&colorB=3f8483&style=for-the-badge&logo=data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABwAAAAjCAMAAACw/5reAAAAnFBMVEUAAADu7u7u7u7u7u7u7u7x8fHu7u7u7u7u7u7u7u7u7u7u7u7r6+vu7u7v7+/u7u7t7e3v7+/v7+/u7u7u7u7u7u7u7u7u7u7u7u7u7u7v7+/u7u7p6ent7e3v7+/v7+/v7+/u7u7u7u7u7u7u7u7t7e3////u7u7u7u7u7u7u7u7w8PDw8PDt7e3u7u7t7e3s7Ozu7u7t7e3u7u4TnCP6AAAAM3RSTlMA+9n3phHw3czC088M5Y5zG6mflWdJFumyfj4sB2NeTi7hiWlDOQPGt5lsMiG9hFQntpFqxQJtAAABnElEQVQoz2WRh3KrQAxFtYWO6ZhucItrynv6/3/LFnA24c6wurpnYBkJZvXduNix6+GXTo8qWnxUPU4m2w0O1ktTozPsftiZpejGlm7C2MWUnRcWOohIo36+PaKyDZdLUOgDXvqQfaT9kwkfvP3AN18E7Kl8hkJHMHSXSSadxaTtTNjJhMkfjFHKMqGlolg4T7mtCbcq8gBCotxkwklFLIQSlQoTHnVWQqzNxYQuzpfmqGVMc5ijHK5yAuIhxbZ5p/S92RZkjv5BKs6aosSIr0JrcXBo1FtICVINKRKK6u0GnraoN84O5KbhjRwYzxCJnQCMtotkdNxjq2F7dJ2RoGuXIBTvc3ROthdmat6hZ7cOyfcxKGV+wTxBkxQxTQTzWOFny/7qS2nzx37T7nbtZj9xu7zUr/323nVy0sQnhwMJktSZrl5v7CjgSQmWi+haUCY8sH4tyc/FGSKGouS+WqBJm8U2NIE/+nLu2tzpF/xVNGy02QzRClafC/ysVpDzQJuA8xXsKl8bv+pgpXz57H9Yy3J1lQNY62wUrW+mdzrylWS0QwAAAABJRU5ErkJggg==)](https://apps.heimdall.site/applications/foundation)
## Installing
Apart from the Laravel dependencies, namely PHP >= 7.1.3, OpenSSL PHP Extension, PDO PHP Extension, Mbstring PHP Extension, Tokenizer PHP Extension, XML PHP Extension, Ctype PHP Extension and JSON PHP Extension, the only other thing Heimdall needs is sqlite support.
Apart from the Laravel dependencies, namely PHP >= 7.1.3, OpenSSL PHP Extension, PDO PHP Extension, Mbstring PHP Extension, Tokenizer PHP Extension, XML PHP Extension, Ctype PHP Extension and JSON PHP Extension, the only other thing Heimdall needs is sqlite support and zip support (php-zip).
If you find you can't change the background make sure `php_fileinfo` is enabled in your php.ini. I believe it should be by default, but one user came across the issue on a windows system.

View File

@@ -8,15 +8,55 @@ $.when( $.ready ).then(function() {
}, 3500);
}
if($('.livestats-container').length) {
$('.livestats-container').each(function(index){
// from https://developer.mozilla.org/en-US/docs/Web/API/Page_Visibility_API
// Set the name of the hidden property and the change event for visibility
var hidden, visibilityChange;
if (typeof document.hidden !== "undefined") { // Opera 12.10 and Firefox 18 and later support
hidden = "hidden";
visibilityChange = "visibilitychange";
} else if (typeof document.msHidden !== "undefined") {
hidden = "msHidden";
visibilityChange = "msvisibilitychange";
} else if (typeof document.webkitHidden !== "undefined") {
hidden = "webkitHidden";
visibilityChange = "webkitvisibilitychange";
}
var livestatsRefreshTimeouts = [];
var livestatsFuncs = [];
var livestatsContainers = $('.livestats-container');
function stopLivestatsRefresh() {
for (var timeoutId of livestatsRefreshTimeouts) {
window.clearTimeout(timeoutId);
}
}
function startLivestatsRefresh() {
for (var fun of livestatsFuncs) {
fun();
}
}
if (livestatsContainers.length > 0) {
if (typeof document.addEventListener === "undefined" || hidden === undefined) {
console.log("This browser does not support visibilityChange");
} else {
document.addEventListener(visibilityChange, function() {
if (document[hidden]) {
stopLivestatsRefresh();
} else {
startLivestatsRefresh();
}
}, false);
}
livestatsContainers.each(function(index){
var id = $(this).data('id');
var dataonly = $(this).data('dataonly');
var increaseby = (dataonly == 1) ? 20000 : 1000;
var container = $(this);
var max_timer = 30000;
var timer = 5000;
(function worker() {
var fun = function worker() {
$.ajax({
url: '/get_stats/'+id,
dataType: 'json',
@@ -29,10 +69,12 @@ $.when( $.ready ).then(function() {
},
complete: function() {
// Schedule the next request when the current one's complete
setTimeout(worker, timer);
livestatsRefreshTimeouts[index] = window.setTimeout(worker, timer);
}
});
})();
};
livestatsFuncs[index] = fun;
fun();
});
}

View File

@@ -434,6 +434,8 @@ body {
padding: 20px 25px;
font-size: 13px;
color: $app-text;
max-width: 500px;
word-break: break-word;
&.form-error {
background: #e69191;
color: white;
@@ -691,7 +693,7 @@ div.create {
border-bottom: 1px solid rgba(255,255,255,0.35);
position: relative;
width: 100%;
max-width: 500px;
max-width: 620px;
form {
width: 100%;
}
@@ -701,6 +703,8 @@ div.create {
box-shadow: 0px 0px 5px 0 rgba(0,0,0,0.4);
overflow: hidden;
position: relative;
display: flex;
}
input {
padding: 17px 15px;
@@ -724,6 +728,12 @@ div.create {
text-transform: uppercase;
background: $app-red;
}
select {
padding: 0 10px;
background: #f5f5f5;
border: none;
border-right: 1px solid #ddd;
}
}
.ui-autocomplete {
@@ -866,11 +876,6 @@ hr {
justify-content: space-between;
width: 100%;
li {
text-align: center;
margin: 0;
line-height: 1;
}
span {
display: block;
text-transform: uppercase;
@@ -893,11 +898,30 @@ hr {
margin-left: 4px;
}
}
li {
text-align: center;
margin: 0;
line-height: 1;
&.right {
text-align: right;
span {
justify-content: flex-end;
}
}
}
&.flexcolumn {
flex-direction: column;
}
}
&.black {
.livestats {
strong {
color: #000;
}
}
}
}
input:-webkit-autofill,

View File

@@ -15,9 +15,5 @@
// Huebee
@import "huebee";
// fontawesome
@import "fontawesome/fontawesome";
@import "fontawesome/fa-solid";
@import "select2";

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@@ -1,20 +0,0 @@
// Animated Icons
// --------------------------
.#{$fa-css-prefix}-spin {
animation: fa-spin 2s infinite linear;
}
.#{$fa-css-prefix}-pulse {
animation: fa-spin 1s infinite steps(8);
}
@keyframes fa-spin {
0% {
transform: rotate(0deg);
}
100% {
transform: rotate(360deg);
}
}

View File

@@ -1,20 +0,0 @@
// Bordered & Pulled
// -------------------------
.#{$fa-css-prefix}-border {
border: solid .08em $fa-border-color;
border-radius: .1em;
padding: .2em .25em .15em;
}
.#{$fa-css-prefix}-pull-left { float: left; }
.#{$fa-css-prefix}-pull-right { float: right; }
.#{$fa-css-prefix},
.fas,
.far,
.fal,
.fab {
&.#{$fa-css-prefix}-pull-left { margin-right: .3em; }
&.#{$fa-css-prefix}-pull-right { margin-left: .3em; }
}

View File

@@ -1,16 +0,0 @@
// Base Class Definition
// -------------------------
.#{$fa-css-prefix},
.fas,
.far,
.fal,
.fab {
-moz-osx-font-smoothing: grayscale;
-webkit-font-smoothing: antialiased;
display: inline-block;
font-style: normal;
font-variant: normal;
text-rendering: auto;
line-height: 1;
}

View File

@@ -1,6 +0,0 @@
// Fixed Width Icons
// -------------------------
.#{$fa-css-prefix}-fw {
text-align: center;
width: (20em / 16);
}

View File

@@ -1,946 +0,0 @@
/* Font Awesome uses the Unicode Private Use Area (PUA) to ensure screen
readers do not read off random characters that represent icons */
.#{$fa-css-prefix}-500px:before { content: fa-content($fa-var-500px); }
.#{$fa-css-prefix}-accessible-icon:before { content: fa-content($fa-var-accessible-icon); }
.#{$fa-css-prefix}-accusoft:before { content: fa-content($fa-var-accusoft); }
.#{$fa-css-prefix}-address-book:before { content: fa-content($fa-var-address-book); }
.#{$fa-css-prefix}-address-card:before { content: fa-content($fa-var-address-card); }
.#{$fa-css-prefix}-adjust:before { content: fa-content($fa-var-adjust); }
.#{$fa-css-prefix}-adn:before { content: fa-content($fa-var-adn); }
.#{$fa-css-prefix}-adversal:before { content: fa-content($fa-var-adversal); }
.#{$fa-css-prefix}-affiliatetheme:before { content: fa-content($fa-var-affiliatetheme); }
.#{$fa-css-prefix}-alarm-clock:before { content: fa-content($fa-var-alarm-clock); }
.#{$fa-css-prefix}-algolia:before { content: fa-content($fa-var-algolia); }
.#{$fa-css-prefix}-align-center:before { content: fa-content($fa-var-align-center); }
.#{$fa-css-prefix}-align-justify:before { content: fa-content($fa-var-align-justify); }
.#{$fa-css-prefix}-align-left:before { content: fa-content($fa-var-align-left); }
.#{$fa-css-prefix}-align-right:before { content: fa-content($fa-var-align-right); }
.#{$fa-css-prefix}-amazon:before { content: fa-content($fa-var-amazon); }
.#{$fa-css-prefix}-amazon-pay:before { content: fa-content($fa-var-amazon-pay); }
.#{$fa-css-prefix}-ambulance:before { content: fa-content($fa-var-ambulance); }
.#{$fa-css-prefix}-american-sign-language-interpreting:before { content: fa-content($fa-var-american-sign-language-interpreting); }
.#{$fa-css-prefix}-amilia:before { content: fa-content($fa-var-amilia); }
.#{$fa-css-prefix}-anchor:before { content: fa-content($fa-var-anchor); }
.#{$fa-css-prefix}-android:before { content: fa-content($fa-var-android); }
.#{$fa-css-prefix}-angellist:before { content: fa-content($fa-var-angellist); }
.#{$fa-css-prefix}-angle-double-down:before { content: fa-content($fa-var-angle-double-down); }
.#{$fa-css-prefix}-angle-double-left:before { content: fa-content($fa-var-angle-double-left); }
.#{$fa-css-prefix}-angle-double-right:before { content: fa-content($fa-var-angle-double-right); }
.#{$fa-css-prefix}-angle-double-up:before { content: fa-content($fa-var-angle-double-up); }
.#{$fa-css-prefix}-angle-down:before { content: fa-content($fa-var-angle-down); }
.#{$fa-css-prefix}-angle-left:before { content: fa-content($fa-var-angle-left); }
.#{$fa-css-prefix}-angle-right:before { content: fa-content($fa-var-angle-right); }
.#{$fa-css-prefix}-angle-up:before { content: fa-content($fa-var-angle-up); }
.#{$fa-css-prefix}-angrycreative:before { content: fa-content($fa-var-angrycreative); }
.#{$fa-css-prefix}-angular:before { content: fa-content($fa-var-angular); }
.#{$fa-css-prefix}-app-store:before { content: fa-content($fa-var-app-store); }
.#{$fa-css-prefix}-app-store-ios:before { content: fa-content($fa-var-app-store-ios); }
.#{$fa-css-prefix}-apper:before { content: fa-content($fa-var-apper); }
.#{$fa-css-prefix}-apple:before { content: fa-content($fa-var-apple); }
.#{$fa-css-prefix}-apple-pay:before { content: fa-content($fa-var-apple-pay); }
.#{$fa-css-prefix}-archive:before { content: fa-content($fa-var-archive); }
.#{$fa-css-prefix}-arrow-alt-circle-down:before { content: fa-content($fa-var-arrow-alt-circle-down); }
.#{$fa-css-prefix}-arrow-alt-circle-left:before { content: fa-content($fa-var-arrow-alt-circle-left); }
.#{$fa-css-prefix}-arrow-alt-circle-right:before { content: fa-content($fa-var-arrow-alt-circle-right); }
.#{$fa-css-prefix}-arrow-alt-circle-up:before { content: fa-content($fa-var-arrow-alt-circle-up); }
.#{$fa-css-prefix}-arrow-alt-down:before { content: fa-content($fa-var-arrow-alt-down); }
.#{$fa-css-prefix}-arrow-alt-from-bottom:before { content: fa-content($fa-var-arrow-alt-from-bottom); }
.#{$fa-css-prefix}-arrow-alt-from-left:before { content: fa-content($fa-var-arrow-alt-from-left); }
.#{$fa-css-prefix}-arrow-alt-from-right:before { content: fa-content($fa-var-arrow-alt-from-right); }
.#{$fa-css-prefix}-arrow-alt-from-top:before { content: fa-content($fa-var-arrow-alt-from-top); }
.#{$fa-css-prefix}-arrow-alt-left:before { content: fa-content($fa-var-arrow-alt-left); }
.#{$fa-css-prefix}-arrow-alt-right:before { content: fa-content($fa-var-arrow-alt-right); }
.#{$fa-css-prefix}-arrow-alt-square-down:before { content: fa-content($fa-var-arrow-alt-square-down); }
.#{$fa-css-prefix}-arrow-alt-square-left:before { content: fa-content($fa-var-arrow-alt-square-left); }
.#{$fa-css-prefix}-arrow-alt-square-right:before { content: fa-content($fa-var-arrow-alt-square-right); }
.#{$fa-css-prefix}-arrow-alt-square-up:before { content: fa-content($fa-var-arrow-alt-square-up); }
.#{$fa-css-prefix}-arrow-alt-to-bottom:before { content: fa-content($fa-var-arrow-alt-to-bottom); }
.#{$fa-css-prefix}-arrow-alt-to-left:before { content: fa-content($fa-var-arrow-alt-to-left); }
.#{$fa-css-prefix}-arrow-alt-to-right:before { content: fa-content($fa-var-arrow-alt-to-right); }
.#{$fa-css-prefix}-arrow-alt-to-top:before { content: fa-content($fa-var-arrow-alt-to-top); }
.#{$fa-css-prefix}-arrow-alt-up:before { content: fa-content($fa-var-arrow-alt-up); }
.#{$fa-css-prefix}-arrow-circle-down:before { content: fa-content($fa-var-arrow-circle-down); }
.#{$fa-css-prefix}-arrow-circle-left:before { content: fa-content($fa-var-arrow-circle-left); }
.#{$fa-css-prefix}-arrow-circle-right:before { content: fa-content($fa-var-arrow-circle-right); }
.#{$fa-css-prefix}-arrow-circle-up:before { content: fa-content($fa-var-arrow-circle-up); }
.#{$fa-css-prefix}-arrow-down:before { content: fa-content($fa-var-arrow-down); }
.#{$fa-css-prefix}-arrow-from-bottom:before { content: fa-content($fa-var-arrow-from-bottom); }
.#{$fa-css-prefix}-arrow-from-left:before { content: fa-content($fa-var-arrow-from-left); }
.#{$fa-css-prefix}-arrow-from-right:before { content: fa-content($fa-var-arrow-from-right); }
.#{$fa-css-prefix}-arrow-from-top:before { content: fa-content($fa-var-arrow-from-top); }
.#{$fa-css-prefix}-arrow-left:before { content: fa-content($fa-var-arrow-left); }
.#{$fa-css-prefix}-arrow-right:before { content: fa-content($fa-var-arrow-right); }
.#{$fa-css-prefix}-arrow-square-down:before { content: fa-content($fa-var-arrow-square-down); }
.#{$fa-css-prefix}-arrow-square-left:before { content: fa-content($fa-var-arrow-square-left); }
.#{$fa-css-prefix}-arrow-square-right:before { content: fa-content($fa-var-arrow-square-right); }
.#{$fa-css-prefix}-arrow-square-up:before { content: fa-content($fa-var-arrow-square-up); }
.#{$fa-css-prefix}-arrow-to-bottom:before { content: fa-content($fa-var-arrow-to-bottom); }
.#{$fa-css-prefix}-arrow-to-left:before { content: fa-content($fa-var-arrow-to-left); }
.#{$fa-css-prefix}-arrow-to-right:before { content: fa-content($fa-var-arrow-to-right); }
.#{$fa-css-prefix}-arrow-to-top:before { content: fa-content($fa-var-arrow-to-top); }
.#{$fa-css-prefix}-arrow-up:before { content: fa-content($fa-var-arrow-up); }
.#{$fa-css-prefix}-arrows:before { content: fa-content($fa-var-arrows); }
.#{$fa-css-prefix}-arrows-alt:before { content: fa-content($fa-var-arrows-alt); }
.#{$fa-css-prefix}-arrows-alt-h:before { content: fa-content($fa-var-arrows-alt-h); }
.#{$fa-css-prefix}-arrows-alt-v:before { content: fa-content($fa-var-arrows-alt-v); }
.#{$fa-css-prefix}-arrows-h:before { content: fa-content($fa-var-arrows-h); }
.#{$fa-css-prefix}-arrows-v:before { content: fa-content($fa-var-arrows-v); }
.#{$fa-css-prefix}-assistive-listening-systems:before { content: fa-content($fa-var-assistive-listening-systems); }
.#{$fa-css-prefix}-asterisk:before { content: fa-content($fa-var-asterisk); }
.#{$fa-css-prefix}-asymmetrik:before { content: fa-content($fa-var-asymmetrik); }
.#{$fa-css-prefix}-at:before { content: fa-content($fa-var-at); }
.#{$fa-css-prefix}-audible:before { content: fa-content($fa-var-audible); }
.#{$fa-css-prefix}-audio-description:before { content: fa-content($fa-var-audio-description); }
.#{$fa-css-prefix}-autoprefixer:before { content: fa-content($fa-var-autoprefixer); }
.#{$fa-css-prefix}-avianex:before { content: fa-content($fa-var-avianex); }
.#{$fa-css-prefix}-aviato:before { content: fa-content($fa-var-aviato); }
.#{$fa-css-prefix}-aws:before { content: fa-content($fa-var-aws); }
.#{$fa-css-prefix}-backward:before { content: fa-content($fa-var-backward); }
.#{$fa-css-prefix}-badge:before { content: fa-content($fa-var-badge); }
.#{$fa-css-prefix}-badge-check:before { content: fa-content($fa-var-badge-check); }
.#{$fa-css-prefix}-balance-scale:before { content: fa-content($fa-var-balance-scale); }
.#{$fa-css-prefix}-ban:before { content: fa-content($fa-var-ban); }
.#{$fa-css-prefix}-bandcamp:before { content: fa-content($fa-var-bandcamp); }
.#{$fa-css-prefix}-barcode:before { content: fa-content($fa-var-barcode); }
.#{$fa-css-prefix}-bars:before { content: fa-content($fa-var-bars); }
.#{$fa-css-prefix}-bath:before { content: fa-content($fa-var-bath); }
.#{$fa-css-prefix}-battery-bolt:before { content: fa-content($fa-var-battery-bolt); }
.#{$fa-css-prefix}-battery-empty:before { content: fa-content($fa-var-battery-empty); }
.#{$fa-css-prefix}-battery-full:before { content: fa-content($fa-var-battery-full); }
.#{$fa-css-prefix}-battery-half:before { content: fa-content($fa-var-battery-half); }
.#{$fa-css-prefix}-battery-quarter:before { content: fa-content($fa-var-battery-quarter); }
.#{$fa-css-prefix}-battery-slash:before { content: fa-content($fa-var-battery-slash); }
.#{$fa-css-prefix}-battery-three-quarters:before { content: fa-content($fa-var-battery-three-quarters); }
.#{$fa-css-prefix}-bed:before { content: fa-content($fa-var-bed); }
.#{$fa-css-prefix}-beer:before { content: fa-content($fa-var-beer); }
.#{$fa-css-prefix}-behance:before { content: fa-content($fa-var-behance); }
.#{$fa-css-prefix}-behance-square:before { content: fa-content($fa-var-behance-square); }
.#{$fa-css-prefix}-bell:before { content: fa-content($fa-var-bell); }
.#{$fa-css-prefix}-bell-slash:before { content: fa-content($fa-var-bell-slash); }
.#{$fa-css-prefix}-bicycle:before { content: fa-content($fa-var-bicycle); }
.#{$fa-css-prefix}-bimobject:before { content: fa-content($fa-var-bimobject); }
.#{$fa-css-prefix}-binoculars:before { content: fa-content($fa-var-binoculars); }
.#{$fa-css-prefix}-birthday-cake:before { content: fa-content($fa-var-birthday-cake); }
.#{$fa-css-prefix}-bitbucket:before { content: fa-content($fa-var-bitbucket); }
.#{$fa-css-prefix}-bitcoin:before { content: fa-content($fa-var-bitcoin); }
.#{$fa-css-prefix}-bity:before { content: fa-content($fa-var-bity); }
.#{$fa-css-prefix}-black-tie:before { content: fa-content($fa-var-black-tie); }
.#{$fa-css-prefix}-blackberry:before { content: fa-content($fa-var-blackberry); }
.#{$fa-css-prefix}-blind:before { content: fa-content($fa-var-blind); }
.#{$fa-css-prefix}-blogger:before { content: fa-content($fa-var-blogger); }
.#{$fa-css-prefix}-blogger-b:before { content: fa-content($fa-var-blogger-b); }
.#{$fa-css-prefix}-bluetooth:before { content: fa-content($fa-var-bluetooth); }
.#{$fa-css-prefix}-bluetooth-b:before { content: fa-content($fa-var-bluetooth-b); }
.#{$fa-css-prefix}-bold:before { content: fa-content($fa-var-bold); }
.#{$fa-css-prefix}-bolt:before { content: fa-content($fa-var-bolt); }
.#{$fa-css-prefix}-bomb:before { content: fa-content($fa-var-bomb); }
.#{$fa-css-prefix}-book:before { content: fa-content($fa-var-book); }
.#{$fa-css-prefix}-bookmark:before { content: fa-content($fa-var-bookmark); }
.#{$fa-css-prefix}-braille:before { content: fa-content($fa-var-braille); }
.#{$fa-css-prefix}-briefcase:before { content: fa-content($fa-var-briefcase); }
.#{$fa-css-prefix}-browser:before { content: fa-content($fa-var-browser); }
.#{$fa-css-prefix}-btc:before { content: fa-content($fa-var-btc); }
.#{$fa-css-prefix}-bug:before { content: fa-content($fa-var-bug); }
.#{$fa-css-prefix}-building:before { content: fa-content($fa-var-building); }
.#{$fa-css-prefix}-bullhorn:before { content: fa-content($fa-var-bullhorn); }
.#{$fa-css-prefix}-bullseye:before { content: fa-content($fa-var-bullseye); }
.#{$fa-css-prefix}-buromobelexperte:before { content: fa-content($fa-var-buromobelexperte); }
.#{$fa-css-prefix}-bus:before { content: fa-content($fa-var-bus); }
.#{$fa-css-prefix}-buysellads:before { content: fa-content($fa-var-buysellads); }
.#{$fa-css-prefix}-calculator:before { content: fa-content($fa-var-calculator); }
.#{$fa-css-prefix}-calendar:before { content: fa-content($fa-var-calendar); }
.#{$fa-css-prefix}-calendar-alt:before { content: fa-content($fa-var-calendar-alt); }
.#{$fa-css-prefix}-calendar-check:before { content: fa-content($fa-var-calendar-check); }
.#{$fa-css-prefix}-calendar-edit:before { content: fa-content($fa-var-calendar-edit); }
.#{$fa-css-prefix}-calendar-exclamation:before { content: fa-content($fa-var-calendar-exclamation); }
.#{$fa-css-prefix}-calendar-minus:before { content: fa-content($fa-var-calendar-minus); }
.#{$fa-css-prefix}-calendar-plus:before { content: fa-content($fa-var-calendar-plus); }
.#{$fa-css-prefix}-calendar-times:before { content: fa-content($fa-var-calendar-times); }
.#{$fa-css-prefix}-camera:before { content: fa-content($fa-var-camera); }
.#{$fa-css-prefix}-camera-alt:before { content: fa-content($fa-var-camera-alt); }
.#{$fa-css-prefix}-camera-retro:before { content: fa-content($fa-var-camera-retro); }
.#{$fa-css-prefix}-car:before { content: fa-content($fa-var-car); }
.#{$fa-css-prefix}-caret-circle-down:before { content: fa-content($fa-var-caret-circle-down); }
.#{$fa-css-prefix}-caret-circle-left:before { content: fa-content($fa-var-caret-circle-left); }
.#{$fa-css-prefix}-caret-circle-right:before { content: fa-content($fa-var-caret-circle-right); }
.#{$fa-css-prefix}-caret-circle-up:before { content: fa-content($fa-var-caret-circle-up); }
.#{$fa-css-prefix}-caret-down:before { content: fa-content($fa-var-caret-down); }
.#{$fa-css-prefix}-caret-left:before { content: fa-content($fa-var-caret-left); }
.#{$fa-css-prefix}-caret-right:before { content: fa-content($fa-var-caret-right); }
.#{$fa-css-prefix}-caret-square-down:before { content: fa-content($fa-var-caret-square-down); }
.#{$fa-css-prefix}-caret-square-left:before { content: fa-content($fa-var-caret-square-left); }
.#{$fa-css-prefix}-caret-square-right:before { content: fa-content($fa-var-caret-square-right); }
.#{$fa-css-prefix}-caret-square-up:before { content: fa-content($fa-var-caret-square-up); }
.#{$fa-css-prefix}-caret-up:before { content: fa-content($fa-var-caret-up); }
.#{$fa-css-prefix}-cart-arrow-down:before { content: fa-content($fa-var-cart-arrow-down); }
.#{$fa-css-prefix}-cart-plus:before { content: fa-content($fa-var-cart-plus); }
.#{$fa-css-prefix}-cc-amazon-pay:before { content: fa-content($fa-var-cc-amazon-pay); }
.#{$fa-css-prefix}-cc-amex:before { content: fa-content($fa-var-cc-amex); }
.#{$fa-css-prefix}-cc-apple-pay:before { content: fa-content($fa-var-cc-apple-pay); }
.#{$fa-css-prefix}-cc-diners-club:before { content: fa-content($fa-var-cc-diners-club); }
.#{$fa-css-prefix}-cc-discover:before { content: fa-content($fa-var-cc-discover); }
.#{$fa-css-prefix}-cc-jcb:before { content: fa-content($fa-var-cc-jcb); }
.#{$fa-css-prefix}-cc-mastercard:before { content: fa-content($fa-var-cc-mastercard); }
.#{$fa-css-prefix}-cc-paypal:before { content: fa-content($fa-var-cc-paypal); }
.#{$fa-css-prefix}-cc-stripe:before { content: fa-content($fa-var-cc-stripe); }
.#{$fa-css-prefix}-cc-visa:before { content: fa-content($fa-var-cc-visa); }
.#{$fa-css-prefix}-centercode:before { content: fa-content($fa-var-centercode); }
.#{$fa-css-prefix}-certificate:before { content: fa-content($fa-var-certificate); }
.#{$fa-css-prefix}-chart-area:before { content: fa-content($fa-var-chart-area); }
.#{$fa-css-prefix}-chart-bar:before { content: fa-content($fa-var-chart-bar); }
.#{$fa-css-prefix}-chart-line:before { content: fa-content($fa-var-chart-line); }
.#{$fa-css-prefix}-chart-pie:before { content: fa-content($fa-var-chart-pie); }
.#{$fa-css-prefix}-check:before { content: fa-content($fa-var-check); }
.#{$fa-css-prefix}-check-circle:before { content: fa-content($fa-var-check-circle); }
.#{$fa-css-prefix}-check-square:before { content: fa-content($fa-var-check-square); }
.#{$fa-css-prefix}-chevron-circle-down:before { content: fa-content($fa-var-chevron-circle-down); }
.#{$fa-css-prefix}-chevron-circle-left:before { content: fa-content($fa-var-chevron-circle-left); }
.#{$fa-css-prefix}-chevron-circle-right:before { content: fa-content($fa-var-chevron-circle-right); }
.#{$fa-css-prefix}-chevron-circle-up:before { content: fa-content($fa-var-chevron-circle-up); }
.#{$fa-css-prefix}-chevron-double-down:before { content: fa-content($fa-var-chevron-double-down); }
.#{$fa-css-prefix}-chevron-double-left:before { content: fa-content($fa-var-chevron-double-left); }
.#{$fa-css-prefix}-chevron-double-right:before { content: fa-content($fa-var-chevron-double-right); }
.#{$fa-css-prefix}-chevron-double-up:before { content: fa-content($fa-var-chevron-double-up); }
.#{$fa-css-prefix}-chevron-down:before { content: fa-content($fa-var-chevron-down); }
.#{$fa-css-prefix}-chevron-left:before { content: fa-content($fa-var-chevron-left); }
.#{$fa-css-prefix}-chevron-right:before { content: fa-content($fa-var-chevron-right); }
.#{$fa-css-prefix}-chevron-square-down:before { content: fa-content($fa-var-chevron-square-down); }
.#{$fa-css-prefix}-chevron-square-left:before { content: fa-content($fa-var-chevron-square-left); }
.#{$fa-css-prefix}-chevron-square-right:before { content: fa-content($fa-var-chevron-square-right); }
.#{$fa-css-prefix}-chevron-square-up:before { content: fa-content($fa-var-chevron-square-up); }
.#{$fa-css-prefix}-chevron-up:before { content: fa-content($fa-var-chevron-up); }
.#{$fa-css-prefix}-child:before { content: fa-content($fa-var-child); }
.#{$fa-css-prefix}-chrome:before { content: fa-content($fa-var-chrome); }
.#{$fa-css-prefix}-circle:before { content: fa-content($fa-var-circle); }
.#{$fa-css-prefix}-circle-notch:before { content: fa-content($fa-var-circle-notch); }
.#{$fa-css-prefix}-clipboard:before { content: fa-content($fa-var-clipboard); }
.#{$fa-css-prefix}-clock:before { content: fa-content($fa-var-clock); }
.#{$fa-css-prefix}-clone:before { content: fa-content($fa-var-clone); }
.#{$fa-css-prefix}-closed-captioning:before { content: fa-content($fa-var-closed-captioning); }
.#{$fa-css-prefix}-cloud:before { content: fa-content($fa-var-cloud); }
.#{$fa-css-prefix}-cloud-download:before { content: fa-content($fa-var-cloud-download); }
.#{$fa-css-prefix}-cloud-download-alt:before { content: fa-content($fa-var-cloud-download-alt); }
.#{$fa-css-prefix}-cloud-upload:before { content: fa-content($fa-var-cloud-upload); }
.#{$fa-css-prefix}-cloud-upload-alt:before { content: fa-content($fa-var-cloud-upload-alt); }
.#{$fa-css-prefix}-cloudscale:before { content: fa-content($fa-var-cloudscale); }
.#{$fa-css-prefix}-cloudsmith:before { content: fa-content($fa-var-cloudsmith); }
.#{$fa-css-prefix}-cloudversify:before { content: fa-content($fa-var-cloudversify); }
.#{$fa-css-prefix}-club:before { content: fa-content($fa-var-club); }
.#{$fa-css-prefix}-code:before { content: fa-content($fa-var-code); }
.#{$fa-css-prefix}-code-branch:before { content: fa-content($fa-var-code-branch); }
.#{$fa-css-prefix}-code-commit:before { content: fa-content($fa-var-code-commit); }
.#{$fa-css-prefix}-code-merge:before { content: fa-content($fa-var-code-merge); }
.#{$fa-css-prefix}-codepen:before { content: fa-content($fa-var-codepen); }
.#{$fa-css-prefix}-codiepie:before { content: fa-content($fa-var-codiepie); }
.#{$fa-css-prefix}-coffee:before { content: fa-content($fa-var-coffee); }
.#{$fa-css-prefix}-cog:before { content: fa-content($fa-var-cog); }
.#{$fa-css-prefix}-cogs:before { content: fa-content($fa-var-cogs); }
.#{$fa-css-prefix}-columns:before { content: fa-content($fa-var-columns); }
.#{$fa-css-prefix}-comment:before { content: fa-content($fa-var-comment); }
.#{$fa-css-prefix}-comment-alt:before { content: fa-content($fa-var-comment-alt); }
.#{$fa-css-prefix}-comments:before { content: fa-content($fa-var-comments); }
.#{$fa-css-prefix}-compass:before { content: fa-content($fa-var-compass); }
.#{$fa-css-prefix}-compress:before { content: fa-content($fa-var-compress); }
.#{$fa-css-prefix}-compress-alt:before { content: fa-content($fa-var-compress-alt); }
.#{$fa-css-prefix}-compress-wide:before { content: fa-content($fa-var-compress-wide); }
.#{$fa-css-prefix}-connectdevelop:before { content: fa-content($fa-var-connectdevelop); }
.#{$fa-css-prefix}-contao:before { content: fa-content($fa-var-contao); }
.#{$fa-css-prefix}-copy:before { content: fa-content($fa-var-copy); }
.#{$fa-css-prefix}-copyright:before { content: fa-content($fa-var-copyright); }
.#{$fa-css-prefix}-cpanel:before { content: fa-content($fa-var-cpanel); }
.#{$fa-css-prefix}-creative-commons:before { content: fa-content($fa-var-creative-commons); }
.#{$fa-css-prefix}-credit-card:before { content: fa-content($fa-var-credit-card); }
.#{$fa-css-prefix}-credit-card-blank:before { content: fa-content($fa-var-credit-card-blank); }
.#{$fa-css-prefix}-credit-card-front:before { content: fa-content($fa-var-credit-card-front); }
.#{$fa-css-prefix}-crop:before { content: fa-content($fa-var-crop); }
.#{$fa-css-prefix}-crosshairs:before { content: fa-content($fa-var-crosshairs); }
.#{$fa-css-prefix}-css3:before { content: fa-content($fa-var-css3); }
.#{$fa-css-prefix}-css3-alt:before { content: fa-content($fa-var-css3-alt); }
.#{$fa-css-prefix}-cube:before { content: fa-content($fa-var-cube); }
.#{$fa-css-prefix}-cubes:before { content: fa-content($fa-var-cubes); }
.#{$fa-css-prefix}-cut:before { content: fa-content($fa-var-cut); }
.#{$fa-css-prefix}-cuttlefish:before { content: fa-content($fa-var-cuttlefish); }
.#{$fa-css-prefix}-d-and-d:before { content: fa-content($fa-var-d-and-d); }
.#{$fa-css-prefix}-dashcube:before { content: fa-content($fa-var-dashcube); }
.#{$fa-css-prefix}-database:before { content: fa-content($fa-var-database); }
.#{$fa-css-prefix}-deaf:before { content: fa-content($fa-var-deaf); }
.#{$fa-css-prefix}-delicious:before { content: fa-content($fa-var-delicious); }
.#{$fa-css-prefix}-deploydog:before { content: fa-content($fa-var-deploydog); }
.#{$fa-css-prefix}-deskpro:before { content: fa-content($fa-var-deskpro); }
.#{$fa-css-prefix}-desktop:before { content: fa-content($fa-var-desktop); }
.#{$fa-css-prefix}-desktop-alt:before { content: fa-content($fa-var-desktop-alt); }
.#{$fa-css-prefix}-deviantart:before { content: fa-content($fa-var-deviantart); }
.#{$fa-css-prefix}-diamond:before { content: fa-content($fa-var-diamond); }
.#{$fa-css-prefix}-digg:before { content: fa-content($fa-var-digg); }
.#{$fa-css-prefix}-digital-ocean:before { content: fa-content($fa-var-digital-ocean); }
.#{$fa-css-prefix}-discord:before { content: fa-content($fa-var-discord); }
.#{$fa-css-prefix}-discourse:before { content: fa-content($fa-var-discourse); }
.#{$fa-css-prefix}-dochub:before { content: fa-content($fa-var-dochub); }
.#{$fa-css-prefix}-docker:before { content: fa-content($fa-var-docker); }
.#{$fa-css-prefix}-dollar-sign:before { content: fa-content($fa-var-dollar-sign); }
.#{$fa-css-prefix}-dot-circle:before { content: fa-content($fa-var-dot-circle); }
.#{$fa-css-prefix}-download:before { content: fa-content($fa-var-download); }
.#{$fa-css-prefix}-draft2digital:before { content: fa-content($fa-var-draft2digital); }
.#{$fa-css-prefix}-dribbble:before { content: fa-content($fa-var-dribbble); }
.#{$fa-css-prefix}-dribbble-square:before { content: fa-content($fa-var-dribbble-square); }
.#{$fa-css-prefix}-dropbox:before { content: fa-content($fa-var-dropbox); }
.#{$fa-css-prefix}-drupal:before { content: fa-content($fa-var-drupal); }
.#{$fa-css-prefix}-dyalog:before { content: fa-content($fa-var-dyalog); }
.#{$fa-css-prefix}-earlybirds:before { content: fa-content($fa-var-earlybirds); }
.#{$fa-css-prefix}-edge:before { content: fa-content($fa-var-edge); }
.#{$fa-css-prefix}-edit:before { content: fa-content($fa-var-edit); }
.#{$fa-css-prefix}-eject:before { content: fa-content($fa-var-eject); }
.#{$fa-css-prefix}-ellipsis-h:before { content: fa-content($fa-var-ellipsis-h); }
.#{$fa-css-prefix}-ellipsis-h-alt:before { content: fa-content($fa-var-ellipsis-h-alt); }
.#{$fa-css-prefix}-ellipsis-v:before { content: fa-content($fa-var-ellipsis-v); }
.#{$fa-css-prefix}-ellipsis-v-alt:before { content: fa-content($fa-var-ellipsis-v-alt); }
.#{$fa-css-prefix}-ember:before { content: fa-content($fa-var-ember); }
.#{$fa-css-prefix}-empire:before { content: fa-content($fa-var-empire); }
.#{$fa-css-prefix}-envelope:before { content: fa-content($fa-var-envelope); }
.#{$fa-css-prefix}-envelope-open:before { content: fa-content($fa-var-envelope-open); }
.#{$fa-css-prefix}-envelope-square:before { content: fa-content($fa-var-envelope-square); }
.#{$fa-css-prefix}-envira:before { content: fa-content($fa-var-envira); }
.#{$fa-css-prefix}-eraser:before { content: fa-content($fa-var-eraser); }
.#{$fa-css-prefix}-erlang:before { content: fa-content($fa-var-erlang); }
.#{$fa-css-prefix}-ethereum:before { content: fa-content($fa-var-ethereum); }
.#{$fa-css-prefix}-etsy:before { content: fa-content($fa-var-etsy); }
.#{$fa-css-prefix}-euro-sign:before { content: fa-content($fa-var-euro-sign); }
.#{$fa-css-prefix}-exchange:before { content: fa-content($fa-var-exchange); }
.#{$fa-css-prefix}-exchange-alt:before { content: fa-content($fa-var-exchange-alt); }
.#{$fa-css-prefix}-exclamation:before { content: fa-content($fa-var-exclamation); }
.#{$fa-css-prefix}-exclamation-circle:before { content: fa-content($fa-var-exclamation-circle); }
.#{$fa-css-prefix}-exclamation-square:before { content: fa-content($fa-var-exclamation-square); }
.#{$fa-css-prefix}-exclamation-triangle:before { content: fa-content($fa-var-exclamation-triangle); }
.#{$fa-css-prefix}-expand:before { content: fa-content($fa-var-expand); }
.#{$fa-css-prefix}-expand-alt:before { content: fa-content($fa-var-expand-alt); }
.#{$fa-css-prefix}-expand-arrows:before { content: fa-content($fa-var-expand-arrows); }
.#{$fa-css-prefix}-expand-arrows-alt:before { content: fa-content($fa-var-expand-arrows-alt); }
.#{$fa-css-prefix}-expand-wide:before { content: fa-content($fa-var-expand-wide); }
.#{$fa-css-prefix}-expeditedssl:before { content: fa-content($fa-var-expeditedssl); }
.#{$fa-css-prefix}-external-link:before { content: fa-content($fa-var-external-link); }
.#{$fa-css-prefix}-external-link-alt:before { content: fa-content($fa-var-external-link-alt); }
.#{$fa-css-prefix}-external-link-square:before { content: fa-content($fa-var-external-link-square); }
.#{$fa-css-prefix}-external-link-square-alt:before { content: fa-content($fa-var-external-link-square-alt); }
.#{$fa-css-prefix}-eye:before { content: fa-content($fa-var-eye); }
.#{$fa-css-prefix}-eye-dropper:before { content: fa-content($fa-var-eye-dropper); }
.#{$fa-css-prefix}-eye-slash:before { content: fa-content($fa-var-eye-slash); }
.#{$fa-css-prefix}-facebook:before { content: fa-content($fa-var-facebook); }
.#{$fa-css-prefix}-facebook-f:before { content: fa-content($fa-var-facebook-f); }
.#{$fa-css-prefix}-facebook-messenger:before { content: fa-content($fa-var-facebook-messenger); }
.#{$fa-css-prefix}-facebook-square:before { content: fa-content($fa-var-facebook-square); }
.#{$fa-css-prefix}-fast-backward:before { content: fa-content($fa-var-fast-backward); }
.#{$fa-css-prefix}-fast-forward:before { content: fa-content($fa-var-fast-forward); }
.#{$fa-css-prefix}-fax:before { content: fa-content($fa-var-fax); }
.#{$fa-css-prefix}-female:before { content: fa-content($fa-var-female); }
.#{$fa-css-prefix}-fighter-jet:before { content: fa-content($fa-var-fighter-jet); }
.#{$fa-css-prefix}-file:before { content: fa-content($fa-var-file); }
.#{$fa-css-prefix}-file-alt:before { content: fa-content($fa-var-file-alt); }
.#{$fa-css-prefix}-file-archive:before { content: fa-content($fa-var-file-archive); }
.#{$fa-css-prefix}-file-audio:before { content: fa-content($fa-var-file-audio); }
.#{$fa-css-prefix}-file-check:before { content: fa-content($fa-var-file-check); }
.#{$fa-css-prefix}-file-code:before { content: fa-content($fa-var-file-code); }
.#{$fa-css-prefix}-file-edit:before { content: fa-content($fa-var-file-edit); }
.#{$fa-css-prefix}-file-excel:before { content: fa-content($fa-var-file-excel); }
.#{$fa-css-prefix}-file-exclamation:before { content: fa-content($fa-var-file-exclamation); }
.#{$fa-css-prefix}-file-image:before { content: fa-content($fa-var-file-image); }
.#{$fa-css-prefix}-file-minus:before { content: fa-content($fa-var-file-minus); }
.#{$fa-css-prefix}-file-pdf:before { content: fa-content($fa-var-file-pdf); }
.#{$fa-css-prefix}-file-plus:before { content: fa-content($fa-var-file-plus); }
.#{$fa-css-prefix}-file-powerpoint:before { content: fa-content($fa-var-file-powerpoint); }
.#{$fa-css-prefix}-file-times:before { content: fa-content($fa-var-file-times); }
.#{$fa-css-prefix}-file-video:before { content: fa-content($fa-var-file-video); }
.#{$fa-css-prefix}-file-word:before { content: fa-content($fa-var-file-word); }
.#{$fa-css-prefix}-film:before { content: fa-content($fa-var-film); }
.#{$fa-css-prefix}-film-alt:before { content: fa-content($fa-var-film-alt); }
.#{$fa-css-prefix}-filter:before { content: fa-content($fa-var-filter); }
.#{$fa-css-prefix}-fire:before { content: fa-content($fa-var-fire); }
.#{$fa-css-prefix}-fire-extinguisher:before { content: fa-content($fa-var-fire-extinguisher); }
.#{$fa-css-prefix}-firefox:before { content: fa-content($fa-var-firefox); }
.#{$fa-css-prefix}-first-order:before { content: fa-content($fa-var-first-order); }
.#{$fa-css-prefix}-firstdraft:before { content: fa-content($fa-var-firstdraft); }
.#{$fa-css-prefix}-flag:before { content: fa-content($fa-var-flag); }
.#{$fa-css-prefix}-flag-checkered:before { content: fa-content($fa-var-flag-checkered); }
.#{$fa-css-prefix}-flask:before { content: fa-content($fa-var-flask); }
.#{$fa-css-prefix}-flickr:before { content: fa-content($fa-var-flickr); }
.#{$fa-css-prefix}-fly:before { content: fa-content($fa-var-fly); }
.#{$fa-css-prefix}-folder:before { content: fa-content($fa-var-folder); }
.#{$fa-css-prefix}-folder-open:before { content: fa-content($fa-var-folder-open); }
.#{$fa-css-prefix}-font:before { content: fa-content($fa-var-font); }
.#{$fa-css-prefix}-font-awesome:before { content: fa-content($fa-var-font-awesome); }
.#{$fa-css-prefix}-font-awesome-alt:before { content: fa-content($fa-var-font-awesome-alt); }
.#{$fa-css-prefix}-font-awesome-flag:before { content: fa-content($fa-var-font-awesome-flag); }
.#{$fa-css-prefix}-fonticons:before { content: fa-content($fa-var-fonticons); }
.#{$fa-css-prefix}-fonticons-fi:before { content: fa-content($fa-var-fonticons-fi); }
.#{$fa-css-prefix}-fort-awesome:before { content: fa-content($fa-var-fort-awesome); }
.#{$fa-css-prefix}-fort-awesome-alt:before { content: fa-content($fa-var-fort-awesome-alt); }
.#{$fa-css-prefix}-forumbee:before { content: fa-content($fa-var-forumbee); }
.#{$fa-css-prefix}-forward:before { content: fa-content($fa-var-forward); }
.#{$fa-css-prefix}-foursquare:before { content: fa-content($fa-var-foursquare); }
.#{$fa-css-prefix}-free-code-camp:before { content: fa-content($fa-var-free-code-camp); }
.#{$fa-css-prefix}-freebsd:before { content: fa-content($fa-var-freebsd); }
.#{$fa-css-prefix}-frown:before { content: fa-content($fa-var-frown); }
.#{$fa-css-prefix}-futbol:before { content: fa-content($fa-var-futbol); }
.#{$fa-css-prefix}-gamepad:before { content: fa-content($fa-var-gamepad); }
.#{$fa-css-prefix}-gavel:before { content: fa-content($fa-var-gavel); }
.#{$fa-css-prefix}-gem:before { content: fa-content($fa-var-gem); }
.#{$fa-css-prefix}-genderless:before { content: fa-content($fa-var-genderless); }
.#{$fa-css-prefix}-get-pocket:before { content: fa-content($fa-var-get-pocket); }
.#{$fa-css-prefix}-gg:before { content: fa-content($fa-var-gg); }
.#{$fa-css-prefix}-gg-circle:before { content: fa-content($fa-var-gg-circle); }
.#{$fa-css-prefix}-gift:before { content: fa-content($fa-var-gift); }
.#{$fa-css-prefix}-git:before { content: fa-content($fa-var-git); }
.#{$fa-css-prefix}-git-square:before { content: fa-content($fa-var-git-square); }
.#{$fa-css-prefix}-github:before { content: fa-content($fa-var-github); }
.#{$fa-css-prefix}-github-alt:before { content: fa-content($fa-var-github-alt); }
.#{$fa-css-prefix}-github-square:before { content: fa-content($fa-var-github-square); }
.#{$fa-css-prefix}-gitkraken:before { content: fa-content($fa-var-gitkraken); }
.#{$fa-css-prefix}-gitlab:before { content: fa-content($fa-var-gitlab); }
.#{$fa-css-prefix}-gitter:before { content: fa-content($fa-var-gitter); }
.#{$fa-css-prefix}-glass-martini:before { content: fa-content($fa-var-glass-martini); }
.#{$fa-css-prefix}-glide:before { content: fa-content($fa-var-glide); }
.#{$fa-css-prefix}-glide-g:before { content: fa-content($fa-var-glide-g); }
.#{$fa-css-prefix}-globe:before { content: fa-content($fa-var-globe); }
.#{$fa-css-prefix}-gofore:before { content: fa-content($fa-var-gofore); }
.#{$fa-css-prefix}-goodreads:before { content: fa-content($fa-var-goodreads); }
.#{$fa-css-prefix}-goodreads-g:before { content: fa-content($fa-var-goodreads-g); }
.#{$fa-css-prefix}-google:before { content: fa-content($fa-var-google); }
.#{$fa-css-prefix}-google-drive:before { content: fa-content($fa-var-google-drive); }
.#{$fa-css-prefix}-google-play:before { content: fa-content($fa-var-google-play); }
.#{$fa-css-prefix}-google-plus:before { content: fa-content($fa-var-google-plus); }
.#{$fa-css-prefix}-google-plus-g:before { content: fa-content($fa-var-google-plus-g); }
.#{$fa-css-prefix}-google-plus-square:before { content: fa-content($fa-var-google-plus-square); }
.#{$fa-css-prefix}-google-wallet:before { content: fa-content($fa-var-google-wallet); }
.#{$fa-css-prefix}-graduation-cap:before { content: fa-content($fa-var-graduation-cap); }
.#{$fa-css-prefix}-gratipay:before { content: fa-content($fa-var-gratipay); }
.#{$fa-css-prefix}-grav:before { content: fa-content($fa-var-grav); }
.#{$fa-css-prefix}-gripfire:before { content: fa-content($fa-var-gripfire); }
.#{$fa-css-prefix}-grunt:before { content: fa-content($fa-var-grunt); }
.#{$fa-css-prefix}-gulp:before { content: fa-content($fa-var-gulp); }
.#{$fa-css-prefix}-h-square:before { content: fa-content($fa-var-h-square); }
.#{$fa-css-prefix}-h1:before { content: fa-content($fa-var-h1); }
.#{$fa-css-prefix}-h2:before { content: fa-content($fa-var-h2); }
.#{$fa-css-prefix}-h3:before { content: fa-content($fa-var-h3); }
.#{$fa-css-prefix}-hacker-news:before { content: fa-content($fa-var-hacker-news); }
.#{$fa-css-prefix}-hacker-news-square:before { content: fa-content($fa-var-hacker-news-square); }
.#{$fa-css-prefix}-hand-lizard:before { content: fa-content($fa-var-hand-lizard); }
.#{$fa-css-prefix}-hand-paper:before { content: fa-content($fa-var-hand-paper); }
.#{$fa-css-prefix}-hand-peace:before { content: fa-content($fa-var-hand-peace); }
.#{$fa-css-prefix}-hand-point-down:before { content: fa-content($fa-var-hand-point-down); }
.#{$fa-css-prefix}-hand-point-left:before { content: fa-content($fa-var-hand-point-left); }
.#{$fa-css-prefix}-hand-point-right:before { content: fa-content($fa-var-hand-point-right); }
.#{$fa-css-prefix}-hand-point-up:before { content: fa-content($fa-var-hand-point-up); }
.#{$fa-css-prefix}-hand-pointer:before { content: fa-content($fa-var-hand-pointer); }
.#{$fa-css-prefix}-hand-rock:before { content: fa-content($fa-var-hand-rock); }
.#{$fa-css-prefix}-hand-scissors:before { content: fa-content($fa-var-hand-scissors); }
.#{$fa-css-prefix}-hand-spock:before { content: fa-content($fa-var-hand-spock); }
.#{$fa-css-prefix}-handshake:before { content: fa-content($fa-var-handshake); }
.#{$fa-css-prefix}-hashtag:before { content: fa-content($fa-var-hashtag); }
.#{$fa-css-prefix}-hdd:before { content: fa-content($fa-var-hdd); }
.#{$fa-css-prefix}-heading:before { content: fa-content($fa-var-heading); }
.#{$fa-css-prefix}-headphones:before { content: fa-content($fa-var-headphones); }
.#{$fa-css-prefix}-heart:before { content: fa-content($fa-var-heart); }
.#{$fa-css-prefix}-heartbeat:before { content: fa-content($fa-var-heartbeat); }
.#{$fa-css-prefix}-hexagon:before { content: fa-content($fa-var-hexagon); }
.#{$fa-css-prefix}-hire-a-helper:before { content: fa-content($fa-var-hire-a-helper); }
.#{$fa-css-prefix}-history:before { content: fa-content($fa-var-history); }
.#{$fa-css-prefix}-home:before { content: fa-content($fa-var-home); }
.#{$fa-css-prefix}-hooli:before { content: fa-content($fa-var-hooli); }
.#{$fa-css-prefix}-hospital:before { content: fa-content($fa-var-hospital); }
.#{$fa-css-prefix}-hotjar:before { content: fa-content($fa-var-hotjar); }
.#{$fa-css-prefix}-hourglass:before { content: fa-content($fa-var-hourglass); }
.#{$fa-css-prefix}-hourglass-end:before { content: fa-content($fa-var-hourglass-end); }
.#{$fa-css-prefix}-hourglass-half:before { content: fa-content($fa-var-hourglass-half); }
.#{$fa-css-prefix}-hourglass-start:before { content: fa-content($fa-var-hourglass-start); }
.#{$fa-css-prefix}-houzz:before { content: fa-content($fa-var-houzz); }
.#{$fa-css-prefix}-html5:before { content: fa-content($fa-var-html5); }
.#{$fa-css-prefix}-hubspot:before { content: fa-content($fa-var-hubspot); }
.#{$fa-css-prefix}-i-cursor:before { content: fa-content($fa-var-i-cursor); }
.#{$fa-css-prefix}-id-badge:before { content: fa-content($fa-var-id-badge); }
.#{$fa-css-prefix}-id-card:before { content: fa-content($fa-var-id-card); }
.#{$fa-css-prefix}-image:before { content: fa-content($fa-var-image); }
.#{$fa-css-prefix}-images:before { content: fa-content($fa-var-images); }
.#{$fa-css-prefix}-imdb:before { content: fa-content($fa-var-imdb); }
.#{$fa-css-prefix}-inbox:before { content: fa-content($fa-var-inbox); }
.#{$fa-css-prefix}-inbox-in:before { content: fa-content($fa-var-inbox-in); }
.#{$fa-css-prefix}-inbox-out:before { content: fa-content($fa-var-inbox-out); }
.#{$fa-css-prefix}-indent:before { content: fa-content($fa-var-indent); }
.#{$fa-css-prefix}-industry:before { content: fa-content($fa-var-industry); }
.#{$fa-css-prefix}-industry-alt:before { content: fa-content($fa-var-industry-alt); }
.#{$fa-css-prefix}-info:before { content: fa-content($fa-var-info); }
.#{$fa-css-prefix}-info-circle:before { content: fa-content($fa-var-info-circle); }
.#{$fa-css-prefix}-info-square:before { content: fa-content($fa-var-info-square); }
.#{$fa-css-prefix}-instagram:before { content: fa-content($fa-var-instagram); }
.#{$fa-css-prefix}-internet-explorer:before { content: fa-content($fa-var-internet-explorer); }
.#{$fa-css-prefix}-ioxhost:before { content: fa-content($fa-var-ioxhost); }
.#{$fa-css-prefix}-italic:before { content: fa-content($fa-var-italic); }
.#{$fa-css-prefix}-itunes:before { content: fa-content($fa-var-itunes); }
.#{$fa-css-prefix}-itunes-note:before { content: fa-content($fa-var-itunes-note); }
.#{$fa-css-prefix}-jack-o-lantern:before { content: fa-content($fa-var-jack-o-lantern); }
.#{$fa-css-prefix}-jenkins:before { content: fa-content($fa-var-jenkins); }
.#{$fa-css-prefix}-joget:before { content: fa-content($fa-var-joget); }
.#{$fa-css-prefix}-joomla:before { content: fa-content($fa-var-joomla); }
.#{$fa-css-prefix}-js:before { content: fa-content($fa-var-js); }
.#{$fa-css-prefix}-js-square:before { content: fa-content($fa-var-js-square); }
.#{$fa-css-prefix}-jsfiddle:before { content: fa-content($fa-var-jsfiddle); }
.#{$fa-css-prefix}-key:before { content: fa-content($fa-var-key); }
.#{$fa-css-prefix}-keyboard:before { content: fa-content($fa-var-keyboard); }
.#{$fa-css-prefix}-keycdn:before { content: fa-content($fa-var-keycdn); }
.#{$fa-css-prefix}-kickstarter:before { content: fa-content($fa-var-kickstarter); }
.#{$fa-css-prefix}-kickstarter-k:before { content: fa-content($fa-var-kickstarter-k); }
.#{$fa-css-prefix}-korvue:before { content: fa-content($fa-var-korvue); }
.#{$fa-css-prefix}-language:before { content: fa-content($fa-var-language); }
.#{$fa-css-prefix}-laptop:before { content: fa-content($fa-var-laptop); }
.#{$fa-css-prefix}-laravel:before { content: fa-content($fa-var-laravel); }
.#{$fa-css-prefix}-lastfm:before { content: fa-content($fa-var-lastfm); }
.#{$fa-css-prefix}-lastfm-square:before { content: fa-content($fa-var-lastfm-square); }
.#{$fa-css-prefix}-leaf:before { content: fa-content($fa-var-leaf); }
.#{$fa-css-prefix}-leanpub:before { content: fa-content($fa-var-leanpub); }
.#{$fa-css-prefix}-lemon:before { content: fa-content($fa-var-lemon); }
.#{$fa-css-prefix}-less:before { content: fa-content($fa-var-less); }
.#{$fa-css-prefix}-level-down:before { content: fa-content($fa-var-level-down); }
.#{$fa-css-prefix}-level-down-alt:before { content: fa-content($fa-var-level-down-alt); }
.#{$fa-css-prefix}-level-up:before { content: fa-content($fa-var-level-up); }
.#{$fa-css-prefix}-level-up-alt:before { content: fa-content($fa-var-level-up-alt); }
.#{$fa-css-prefix}-life-ring:before { content: fa-content($fa-var-life-ring); }
.#{$fa-css-prefix}-lightbulb:before { content: fa-content($fa-var-lightbulb); }
.#{$fa-css-prefix}-line:before { content: fa-content($fa-var-line); }
.#{$fa-css-prefix}-link:before { content: fa-content($fa-var-link); }
.#{$fa-css-prefix}-linkedin:before { content: fa-content($fa-var-linkedin); }
.#{$fa-css-prefix}-linkedin-in:before { content: fa-content($fa-var-linkedin-in); }
.#{$fa-css-prefix}-linode:before { content: fa-content($fa-var-linode); }
.#{$fa-css-prefix}-linux:before { content: fa-content($fa-var-linux); }
.#{$fa-css-prefix}-lira-sign:before { content: fa-content($fa-var-lira-sign); }
.#{$fa-css-prefix}-list:before { content: fa-content($fa-var-list); }
.#{$fa-css-prefix}-list-alt:before { content: fa-content($fa-var-list-alt); }
.#{$fa-css-prefix}-list-ol:before { content: fa-content($fa-var-list-ol); }
.#{$fa-css-prefix}-list-ul:before { content: fa-content($fa-var-list-ul); }
.#{$fa-css-prefix}-location-arrow:before { content: fa-content($fa-var-location-arrow); }
.#{$fa-css-prefix}-lock:before { content: fa-content($fa-var-lock); }
.#{$fa-css-prefix}-lock-alt:before { content: fa-content($fa-var-lock-alt); }
.#{$fa-css-prefix}-lock-open:before { content: fa-content($fa-var-lock-open); }
.#{$fa-css-prefix}-lock-open-alt:before { content: fa-content($fa-var-lock-open-alt); }
.#{$fa-css-prefix}-long-arrow-alt-down:before { content: fa-content($fa-var-long-arrow-alt-down); }
.#{$fa-css-prefix}-long-arrow-alt-left:before { content: fa-content($fa-var-long-arrow-alt-left); }
.#{$fa-css-prefix}-long-arrow-alt-right:before { content: fa-content($fa-var-long-arrow-alt-right); }
.#{$fa-css-prefix}-long-arrow-alt-up:before { content: fa-content($fa-var-long-arrow-alt-up); }
.#{$fa-css-prefix}-long-arrow-down:before { content: fa-content($fa-var-long-arrow-down); }
.#{$fa-css-prefix}-long-arrow-left:before { content: fa-content($fa-var-long-arrow-left); }
.#{$fa-css-prefix}-long-arrow-right:before { content: fa-content($fa-var-long-arrow-right); }
.#{$fa-css-prefix}-long-arrow-up:before { content: fa-content($fa-var-long-arrow-up); }
.#{$fa-css-prefix}-low-vision:before { content: fa-content($fa-var-low-vision); }
.#{$fa-css-prefix}-lyft:before { content: fa-content($fa-var-lyft); }
.#{$fa-css-prefix}-magento:before { content: fa-content($fa-var-magento); }
.#{$fa-css-prefix}-magic:before { content: fa-content($fa-var-magic); }
.#{$fa-css-prefix}-magnet:before { content: fa-content($fa-var-magnet); }
.#{$fa-css-prefix}-male:before { content: fa-content($fa-var-male); }
.#{$fa-css-prefix}-map:before { content: fa-content($fa-var-map); }
.#{$fa-css-prefix}-map-marker:before { content: fa-content($fa-var-map-marker); }
.#{$fa-css-prefix}-map-marker-alt:before { content: fa-content($fa-var-map-marker-alt); }
.#{$fa-css-prefix}-map-pin:before { content: fa-content($fa-var-map-pin); }
.#{$fa-css-prefix}-map-signs:before { content: fa-content($fa-var-map-signs); }
.#{$fa-css-prefix}-mars:before { content: fa-content($fa-var-mars); }
.#{$fa-css-prefix}-mars-double:before { content: fa-content($fa-var-mars-double); }
.#{$fa-css-prefix}-mars-stroke:before { content: fa-content($fa-var-mars-stroke); }
.#{$fa-css-prefix}-mars-stroke-h:before { content: fa-content($fa-var-mars-stroke-h); }
.#{$fa-css-prefix}-mars-stroke-v:before { content: fa-content($fa-var-mars-stroke-v); }
.#{$fa-css-prefix}-maxcdn:before { content: fa-content($fa-var-maxcdn); }
.#{$fa-css-prefix}-medapps:before { content: fa-content($fa-var-medapps); }
.#{$fa-css-prefix}-medium:before { content: fa-content($fa-var-medium); }
.#{$fa-css-prefix}-medium-m:before { content: fa-content($fa-var-medium-m); }
.#{$fa-css-prefix}-medkit:before { content: fa-content($fa-var-medkit); }
.#{$fa-css-prefix}-medrt:before { content: fa-content($fa-var-medrt); }
.#{$fa-css-prefix}-meetup:before { content: fa-content($fa-var-meetup); }
.#{$fa-css-prefix}-meh:before { content: fa-content($fa-var-meh); }
.#{$fa-css-prefix}-mercury:before { content: fa-content($fa-var-mercury); }
.#{$fa-css-prefix}-microchip:before { content: fa-content($fa-var-microchip); }
.#{$fa-css-prefix}-microphone:before { content: fa-content($fa-var-microphone); }
.#{$fa-css-prefix}-microphone-alt:before { content: fa-content($fa-var-microphone-alt); }
.#{$fa-css-prefix}-microphone-slash:before { content: fa-content($fa-var-microphone-slash); }
.#{$fa-css-prefix}-microsoft:before { content: fa-content($fa-var-microsoft); }
.#{$fa-css-prefix}-minus:before { content: fa-content($fa-var-minus); }
.#{$fa-css-prefix}-minus-circle:before { content: fa-content($fa-var-minus-circle); }
.#{$fa-css-prefix}-minus-hexagon:before { content: fa-content($fa-var-minus-hexagon); }
.#{$fa-css-prefix}-minus-octagon:before { content: fa-content($fa-var-minus-octagon); }
.#{$fa-css-prefix}-minus-square:before { content: fa-content($fa-var-minus-square); }
.#{$fa-css-prefix}-mix:before { content: fa-content($fa-var-mix); }
.#{$fa-css-prefix}-mixcloud:before { content: fa-content($fa-var-mixcloud); }
.#{$fa-css-prefix}-mizuni:before { content: fa-content($fa-var-mizuni); }
.#{$fa-css-prefix}-mobile:before { content: fa-content($fa-var-mobile); }
.#{$fa-css-prefix}-mobile-alt:before { content: fa-content($fa-var-mobile-alt); }
.#{$fa-css-prefix}-mobile-android:before { content: fa-content($fa-var-mobile-android); }
.#{$fa-css-prefix}-mobile-android-alt:before { content: fa-content($fa-var-mobile-android-alt); }
.#{$fa-css-prefix}-modx:before { content: fa-content($fa-var-modx); }
.#{$fa-css-prefix}-monero:before { content: fa-content($fa-var-monero); }
.#{$fa-css-prefix}-money-bill:before { content: fa-content($fa-var-money-bill); }
.#{$fa-css-prefix}-money-bill-alt:before { content: fa-content($fa-var-money-bill-alt); }
.#{$fa-css-prefix}-moon:before { content: fa-content($fa-var-moon); }
.#{$fa-css-prefix}-motorcycle:before { content: fa-content($fa-var-motorcycle); }
.#{$fa-css-prefix}-mouse-pointer:before { content: fa-content($fa-var-mouse-pointer); }
.#{$fa-css-prefix}-music:before { content: fa-content($fa-var-music); }
.#{$fa-css-prefix}-napster:before { content: fa-content($fa-var-napster); }
.#{$fa-css-prefix}-neuter:before { content: fa-content($fa-var-neuter); }
.#{$fa-css-prefix}-newspaper:before { content: fa-content($fa-var-newspaper); }
.#{$fa-css-prefix}-nintendo-switch:before { content: fa-content($fa-var-nintendo-switch); }
.#{$fa-css-prefix}-node:before { content: fa-content($fa-var-node); }
.#{$fa-css-prefix}-node-js:before { content: fa-content($fa-var-node-js); }
.#{$fa-css-prefix}-npm:before { content: fa-content($fa-var-npm); }
.#{$fa-css-prefix}-ns8:before { content: fa-content($fa-var-ns8); }
.#{$fa-css-prefix}-nutritionix:before { content: fa-content($fa-var-nutritionix); }
.#{$fa-css-prefix}-object-group:before { content: fa-content($fa-var-object-group); }
.#{$fa-css-prefix}-object-ungroup:before { content: fa-content($fa-var-object-ungroup); }
.#{$fa-css-prefix}-octagon:before { content: fa-content($fa-var-octagon); }
.#{$fa-css-prefix}-odnoklassniki:before { content: fa-content($fa-var-odnoklassniki); }
.#{$fa-css-prefix}-odnoklassniki-square:before { content: fa-content($fa-var-odnoklassniki-square); }
.#{$fa-css-prefix}-opencart:before { content: fa-content($fa-var-opencart); }
.#{$fa-css-prefix}-openid:before { content: fa-content($fa-var-openid); }
.#{$fa-css-prefix}-opera:before { content: fa-content($fa-var-opera); }
.#{$fa-css-prefix}-optin-monster:before { content: fa-content($fa-var-optin-monster); }
.#{$fa-css-prefix}-osi:before { content: fa-content($fa-var-osi); }
.#{$fa-css-prefix}-outdent:before { content: fa-content($fa-var-outdent); }
.#{$fa-css-prefix}-page4:before { content: fa-content($fa-var-page4); }
.#{$fa-css-prefix}-pagelines:before { content: fa-content($fa-var-pagelines); }
.#{$fa-css-prefix}-paint-brush:before { content: fa-content($fa-var-paint-brush); }
.#{$fa-css-prefix}-palfed:before { content: fa-content($fa-var-palfed); }
.#{$fa-css-prefix}-paper-plane:before { content: fa-content($fa-var-paper-plane); }
.#{$fa-css-prefix}-paperclip:before { content: fa-content($fa-var-paperclip); }
.#{$fa-css-prefix}-paragraph:before { content: fa-content($fa-var-paragraph); }
.#{$fa-css-prefix}-paste:before { content: fa-content($fa-var-paste); }
.#{$fa-css-prefix}-patreon:before { content: fa-content($fa-var-patreon); }
.#{$fa-css-prefix}-pause:before { content: fa-content($fa-var-pause); }
.#{$fa-css-prefix}-pause-circle:before { content: fa-content($fa-var-pause-circle); }
.#{$fa-css-prefix}-paw:before { content: fa-content($fa-var-paw); }
.#{$fa-css-prefix}-paypal:before { content: fa-content($fa-var-paypal); }
.#{$fa-css-prefix}-pen:before { content: fa-content($fa-var-pen); }
.#{$fa-css-prefix}-pen-alt:before { content: fa-content($fa-var-pen-alt); }
.#{$fa-css-prefix}-pen-square:before { content: fa-content($fa-var-pen-square); }
.#{$fa-css-prefix}-pencil:before { content: fa-content($fa-var-pencil); }
.#{$fa-css-prefix}-pencil-alt:before { content: fa-content($fa-var-pencil-alt); }
.#{$fa-css-prefix}-percent:before { content: fa-content($fa-var-percent); }
.#{$fa-css-prefix}-periscope:before { content: fa-content($fa-var-periscope); }
.#{$fa-css-prefix}-phabricator:before { content: fa-content($fa-var-phabricator); }
.#{$fa-css-prefix}-phoenix-framework:before { content: fa-content($fa-var-phoenix-framework); }
.#{$fa-css-prefix}-phone:before { content: fa-content($fa-var-phone); }
.#{$fa-css-prefix}-phone-slash:before { content: fa-content($fa-var-phone-slash); }
.#{$fa-css-prefix}-phone-square:before { content: fa-content($fa-var-phone-square); }
.#{$fa-css-prefix}-phone-volume:before { content: fa-content($fa-var-phone-volume); }
.#{$fa-css-prefix}-pied-piper:before { content: fa-content($fa-var-pied-piper); }
.#{$fa-css-prefix}-pied-piper-alt:before { content: fa-content($fa-var-pied-piper-alt); }
.#{$fa-css-prefix}-pied-piper-pp:before { content: fa-content($fa-var-pied-piper-pp); }
.#{$fa-css-prefix}-pinterest:before { content: fa-content($fa-var-pinterest); }
.#{$fa-css-prefix}-pinterest-p:before { content: fa-content($fa-var-pinterest-p); }
.#{$fa-css-prefix}-pinterest-square:before { content: fa-content($fa-var-pinterest-square); }
.#{$fa-css-prefix}-plane:before { content: fa-content($fa-var-plane); }
.#{$fa-css-prefix}-plane-alt:before { content: fa-content($fa-var-plane-alt); }
.#{$fa-css-prefix}-play:before { content: fa-content($fa-var-play); }
.#{$fa-css-prefix}-play-circle:before { content: fa-content($fa-var-play-circle); }
.#{$fa-css-prefix}-playstation:before { content: fa-content($fa-var-playstation); }
.#{$fa-css-prefix}-plug:before { content: fa-content($fa-var-plug); }
.#{$fa-css-prefix}-plus:before { content: fa-content($fa-var-plus); }
.#{$fa-css-prefix}-plus-circle:before { content: fa-content($fa-var-plus-circle); }
.#{$fa-css-prefix}-plus-hexagon:before { content: fa-content($fa-var-plus-hexagon); }
.#{$fa-css-prefix}-plus-octagon:before { content: fa-content($fa-var-plus-octagon); }
.#{$fa-css-prefix}-plus-square:before { content: fa-content($fa-var-plus-square); }
.#{$fa-css-prefix}-podcast:before { content: fa-content($fa-var-podcast); }
.#{$fa-css-prefix}-poo:before { content: fa-content($fa-var-poo); }
.#{$fa-css-prefix}-portrait:before { content: fa-content($fa-var-portrait); }
.#{$fa-css-prefix}-pound-sign:before { content: fa-content($fa-var-pound-sign); }
.#{$fa-css-prefix}-power-off:before { content: fa-content($fa-var-power-off); }
.#{$fa-css-prefix}-print:before { content: fa-content($fa-var-print); }
.#{$fa-css-prefix}-product-hunt:before { content: fa-content($fa-var-product-hunt); }
.#{$fa-css-prefix}-pushed:before { content: fa-content($fa-var-pushed); }
.#{$fa-css-prefix}-puzzle-piece:before { content: fa-content($fa-var-puzzle-piece); }
.#{$fa-css-prefix}-python:before { content: fa-content($fa-var-python); }
.#{$fa-css-prefix}-qq:before { content: fa-content($fa-var-qq); }
.#{$fa-css-prefix}-qrcode:before { content: fa-content($fa-var-qrcode); }
.#{$fa-css-prefix}-question:before { content: fa-content($fa-var-question); }
.#{$fa-css-prefix}-question-circle:before { content: fa-content($fa-var-question-circle); }
.#{$fa-css-prefix}-question-square:before { content: fa-content($fa-var-question-square); }
.#{$fa-css-prefix}-quora:before { content: fa-content($fa-var-quora); }
.#{$fa-css-prefix}-quote-left:before { content: fa-content($fa-var-quote-left); }
.#{$fa-css-prefix}-quote-right:before { content: fa-content($fa-var-quote-right); }
.#{$fa-css-prefix}-random:before { content: fa-content($fa-var-random); }
.#{$fa-css-prefix}-ravelry:before { content: fa-content($fa-var-ravelry); }
.#{$fa-css-prefix}-react:before { content: fa-content($fa-var-react); }
.#{$fa-css-prefix}-rebel:before { content: fa-content($fa-var-rebel); }
.#{$fa-css-prefix}-rectangle-landscape:before { content: fa-content($fa-var-rectangle-landscape); }
.#{$fa-css-prefix}-rectangle-portrait:before { content: fa-content($fa-var-rectangle-portrait); }
.#{$fa-css-prefix}-rectangle-wide:before { content: fa-content($fa-var-rectangle-wide); }
.#{$fa-css-prefix}-recycle:before { content: fa-content($fa-var-recycle); }
.#{$fa-css-prefix}-red-river:before { content: fa-content($fa-var-red-river); }
.#{$fa-css-prefix}-reddit:before { content: fa-content($fa-var-reddit); }
.#{$fa-css-prefix}-reddit-alien:before { content: fa-content($fa-var-reddit-alien); }
.#{$fa-css-prefix}-reddit-square:before { content: fa-content($fa-var-reddit-square); }
.#{$fa-css-prefix}-redo:before { content: fa-content($fa-var-redo); }
.#{$fa-css-prefix}-redo-alt:before { content: fa-content($fa-var-redo-alt); }
.#{$fa-css-prefix}-registered:before { content: fa-content($fa-var-registered); }
.#{$fa-css-prefix}-rendact:before { content: fa-content($fa-var-rendact); }
.#{$fa-css-prefix}-renren:before { content: fa-content($fa-var-renren); }
.#{$fa-css-prefix}-repeat:before { content: fa-content($fa-var-repeat); }
.#{$fa-css-prefix}-repeat-1:before { content: fa-content($fa-var-repeat-1); }
.#{$fa-css-prefix}-repeat-1-alt:before { content: fa-content($fa-var-repeat-1-alt); }
.#{$fa-css-prefix}-repeat-alt:before { content: fa-content($fa-var-repeat-alt); }
.#{$fa-css-prefix}-reply:before { content: fa-content($fa-var-reply); }
.#{$fa-css-prefix}-reply-all:before { content: fa-content($fa-var-reply-all); }
.#{$fa-css-prefix}-replyd:before { content: fa-content($fa-var-replyd); }
.#{$fa-css-prefix}-resolving:before { content: fa-content($fa-var-resolving); }
.#{$fa-css-prefix}-retweet:before { content: fa-content($fa-var-retweet); }
.#{$fa-css-prefix}-retweet-alt:before { content: fa-content($fa-var-retweet-alt); }
.#{$fa-css-prefix}-road:before { content: fa-content($fa-var-road); }
.#{$fa-css-prefix}-rocket:before { content: fa-content($fa-var-rocket); }
.#{$fa-css-prefix}-rocketchat:before { content: fa-content($fa-var-rocketchat); }
.#{$fa-css-prefix}-rockrms:before { content: fa-content($fa-var-rockrms); }
.#{$fa-css-prefix}-rss:before { content: fa-content($fa-var-rss); }
.#{$fa-css-prefix}-rss-square:before { content: fa-content($fa-var-rss-square); }
.#{$fa-css-prefix}-ruble-sign:before { content: fa-content($fa-var-ruble-sign); }
.#{$fa-css-prefix}-rupee-sign:before { content: fa-content($fa-var-rupee-sign); }
.#{$fa-css-prefix}-safari:before { content: fa-content($fa-var-safari); }
.#{$fa-css-prefix}-sass:before { content: fa-content($fa-var-sass); }
.#{$fa-css-prefix}-save:before { content: fa-content($fa-var-save); }
.#{$fa-css-prefix}-schlix:before { content: fa-content($fa-var-schlix); }
.#{$fa-css-prefix}-scribd:before { content: fa-content($fa-var-scribd); }
.#{$fa-css-prefix}-scrubber:before { content: fa-content($fa-var-scrubber); }
.#{$fa-css-prefix}-search:before { content: fa-content($fa-var-search); }
.#{$fa-css-prefix}-search-minus:before { content: fa-content($fa-var-search-minus); }
.#{$fa-css-prefix}-search-plus:before { content: fa-content($fa-var-search-plus); }
.#{$fa-css-prefix}-searchengin:before { content: fa-content($fa-var-searchengin); }
.#{$fa-css-prefix}-sellcast:before { content: fa-content($fa-var-sellcast); }
.#{$fa-css-prefix}-sellsy:before { content: fa-content($fa-var-sellsy); }
.#{$fa-css-prefix}-server:before { content: fa-content($fa-var-server); }
.#{$fa-css-prefix}-servicestack:before { content: fa-content($fa-var-servicestack); }
.#{$fa-css-prefix}-share:before { content: fa-content($fa-var-share); }
.#{$fa-css-prefix}-share-all:before { content: fa-content($fa-var-share-all); }
.#{$fa-css-prefix}-share-alt:before { content: fa-content($fa-var-share-alt); }
.#{$fa-css-prefix}-share-alt-square:before { content: fa-content($fa-var-share-alt-square); }
.#{$fa-css-prefix}-share-square:before { content: fa-content($fa-var-share-square); }
.#{$fa-css-prefix}-shekel-sign:before { content: fa-content($fa-var-shekel-sign); }
.#{$fa-css-prefix}-shield:before { content: fa-content($fa-var-shield); }
.#{$fa-css-prefix}-shield-alt:before { content: fa-content($fa-var-shield-alt); }
.#{$fa-css-prefix}-shield-check:before { content: fa-content($fa-var-shield-check); }
.#{$fa-css-prefix}-ship:before { content: fa-content($fa-var-ship); }
.#{$fa-css-prefix}-shirtsinbulk:before { content: fa-content($fa-var-shirtsinbulk); }
.#{$fa-css-prefix}-shopping-bag:before { content: fa-content($fa-var-shopping-bag); }
.#{$fa-css-prefix}-shopping-basket:before { content: fa-content($fa-var-shopping-basket); }
.#{$fa-css-prefix}-shopping-cart:before { content: fa-content($fa-var-shopping-cart); }
.#{$fa-css-prefix}-shower:before { content: fa-content($fa-var-shower); }
.#{$fa-css-prefix}-sign-in:before { content: fa-content($fa-var-sign-in); }
.#{$fa-css-prefix}-sign-in-alt:before { content: fa-content($fa-var-sign-in-alt); }
.#{$fa-css-prefix}-sign-language:before { content: fa-content($fa-var-sign-language); }
.#{$fa-css-prefix}-sign-out:before { content: fa-content($fa-var-sign-out); }
.#{$fa-css-prefix}-sign-out-alt:before { content: fa-content($fa-var-sign-out-alt); }
.#{$fa-css-prefix}-signal:before { content: fa-content($fa-var-signal); }
.#{$fa-css-prefix}-simplybuilt:before { content: fa-content($fa-var-simplybuilt); }
.#{$fa-css-prefix}-sistrix:before { content: fa-content($fa-var-sistrix); }
.#{$fa-css-prefix}-sitemap:before { content: fa-content($fa-var-sitemap); }
.#{$fa-css-prefix}-skyatlas:before { content: fa-content($fa-var-skyatlas); }
.#{$fa-css-prefix}-skype:before { content: fa-content($fa-var-skype); }
.#{$fa-css-prefix}-slack:before { content: fa-content($fa-var-slack); }
.#{$fa-css-prefix}-slack-hash:before { content: fa-content($fa-var-slack-hash); }
.#{$fa-css-prefix}-sliders-h:before { content: fa-content($fa-var-sliders-h); }
.#{$fa-css-prefix}-sliders-h-square:before { content: fa-content($fa-var-sliders-h-square); }
.#{$fa-css-prefix}-sliders-v:before { content: fa-content($fa-var-sliders-v); }
.#{$fa-css-prefix}-sliders-v-square:before { content: fa-content($fa-var-sliders-v-square); }
.#{$fa-css-prefix}-slideshare:before { content: fa-content($fa-var-slideshare); }
.#{$fa-css-prefix}-smile:before { content: fa-content($fa-var-smile); }
.#{$fa-css-prefix}-snapchat:before { content: fa-content($fa-var-snapchat); }
.#{$fa-css-prefix}-snapchat-ghost:before { content: fa-content($fa-var-snapchat-ghost); }
.#{$fa-css-prefix}-snapchat-square:before { content: fa-content($fa-var-snapchat-square); }
.#{$fa-css-prefix}-snowflake:before { content: fa-content($fa-var-snowflake); }
.#{$fa-css-prefix}-sort:before { content: fa-content($fa-var-sort); }
.#{$fa-css-prefix}-sort-alpha-down:before { content: fa-content($fa-var-sort-alpha-down); }
.#{$fa-css-prefix}-sort-alpha-up:before { content: fa-content($fa-var-sort-alpha-up); }
.#{$fa-css-prefix}-sort-amount-down:before { content: fa-content($fa-var-sort-amount-down); }
.#{$fa-css-prefix}-sort-amount-up:before { content: fa-content($fa-var-sort-amount-up); }
.#{$fa-css-prefix}-sort-down:before { content: fa-content($fa-var-sort-down); }
.#{$fa-css-prefix}-sort-numeric-down:before { content: fa-content($fa-var-sort-numeric-down); }
.#{$fa-css-prefix}-sort-numeric-up:before { content: fa-content($fa-var-sort-numeric-up); }
.#{$fa-css-prefix}-sort-up:before { content: fa-content($fa-var-sort-up); }
.#{$fa-css-prefix}-soundcloud:before { content: fa-content($fa-var-soundcloud); }
.#{$fa-css-prefix}-space-shuttle:before { content: fa-content($fa-var-space-shuttle); }
.#{$fa-css-prefix}-spade:before { content: fa-content($fa-var-spade); }
.#{$fa-css-prefix}-speakap:before { content: fa-content($fa-var-speakap); }
.#{$fa-css-prefix}-spinner:before { content: fa-content($fa-var-spinner); }
.#{$fa-css-prefix}-spinner-third:before { content: fa-content($fa-var-spinner-third); }
.#{$fa-css-prefix}-spotify:before { content: fa-content($fa-var-spotify); }
.#{$fa-css-prefix}-square:before { content: fa-content($fa-var-square); }
.#{$fa-css-prefix}-stack-exchange:before { content: fa-content($fa-var-stack-exchange); }
.#{$fa-css-prefix}-stack-overflow:before { content: fa-content($fa-var-stack-overflow); }
.#{$fa-css-prefix}-star:before { content: fa-content($fa-var-star); }
.#{$fa-css-prefix}-star-exclamation:before { content: fa-content($fa-var-star-exclamation); }
.#{$fa-css-prefix}-star-half:before { content: fa-content($fa-var-star-half); }
.#{$fa-css-prefix}-staylinked:before { content: fa-content($fa-var-staylinked); }
.#{$fa-css-prefix}-steam:before { content: fa-content($fa-var-steam); }
.#{$fa-css-prefix}-steam-square:before { content: fa-content($fa-var-steam-square); }
.#{$fa-css-prefix}-steam-symbol:before { content: fa-content($fa-var-steam-symbol); }
.#{$fa-css-prefix}-step-backward:before { content: fa-content($fa-var-step-backward); }
.#{$fa-css-prefix}-step-forward:before { content: fa-content($fa-var-step-forward); }
.#{$fa-css-prefix}-stethoscope:before { content: fa-content($fa-var-stethoscope); }
.#{$fa-css-prefix}-sticker-mule:before { content: fa-content($fa-var-sticker-mule); }
.#{$fa-css-prefix}-sticky-note:before { content: fa-content($fa-var-sticky-note); }
.#{$fa-css-prefix}-stop:before { content: fa-content($fa-var-stop); }
.#{$fa-css-prefix}-stop-circle:before { content: fa-content($fa-var-stop-circle); }
.#{$fa-css-prefix}-stopwatch:before { content: fa-content($fa-var-stopwatch); }
.#{$fa-css-prefix}-strava:before { content: fa-content($fa-var-strava); }
.#{$fa-css-prefix}-street-view:before { content: fa-content($fa-var-street-view); }
.#{$fa-css-prefix}-strikethrough:before { content: fa-content($fa-var-strikethrough); }
.#{$fa-css-prefix}-stripe:before { content: fa-content($fa-var-stripe); }
.#{$fa-css-prefix}-stripe-s:before { content: fa-content($fa-var-stripe-s); }
.#{$fa-css-prefix}-studiovinari:before { content: fa-content($fa-var-studiovinari); }
.#{$fa-css-prefix}-stumbleupon:before { content: fa-content($fa-var-stumbleupon); }
.#{$fa-css-prefix}-stumbleupon-circle:before { content: fa-content($fa-var-stumbleupon-circle); }
.#{$fa-css-prefix}-subscript:before { content: fa-content($fa-var-subscript); }
.#{$fa-css-prefix}-subway:before { content: fa-content($fa-var-subway); }
.#{$fa-css-prefix}-suitcase:before { content: fa-content($fa-var-suitcase); }
.#{$fa-css-prefix}-sun:before { content: fa-content($fa-var-sun); }
.#{$fa-css-prefix}-superpowers:before { content: fa-content($fa-var-superpowers); }
.#{$fa-css-prefix}-superscript:before { content: fa-content($fa-var-superscript); }
.#{$fa-css-prefix}-supple:before { content: fa-content($fa-var-supple); }
.#{$fa-css-prefix}-sync:before { content: fa-content($fa-var-sync); }
.#{$fa-css-prefix}-sync-alt:before { content: fa-content($fa-var-sync-alt); }
.#{$fa-css-prefix}-table:before { content: fa-content($fa-var-table); }
.#{$fa-css-prefix}-tablet:before { content: fa-content($fa-var-tablet); }
.#{$fa-css-prefix}-tablet-alt:before { content: fa-content($fa-var-tablet-alt); }
.#{$fa-css-prefix}-tablet-android:before { content: fa-content($fa-var-tablet-android); }
.#{$fa-css-prefix}-tablet-android-alt:before { content: fa-content($fa-var-tablet-android-alt); }
.#{$fa-css-prefix}-tachometer:before { content: fa-content($fa-var-tachometer); }
.#{$fa-css-prefix}-tachometer-alt:before { content: fa-content($fa-var-tachometer-alt); }
.#{$fa-css-prefix}-tag:before { content: fa-content($fa-var-tag); }
.#{$fa-css-prefix}-tags:before { content: fa-content($fa-var-tags); }
.#{$fa-css-prefix}-tasks:before { content: fa-content($fa-var-tasks); }
.#{$fa-css-prefix}-taxi:before { content: fa-content($fa-var-taxi); }
.#{$fa-css-prefix}-telegram:before { content: fa-content($fa-var-telegram); }
.#{$fa-css-prefix}-telegram-plane:before { content: fa-content($fa-var-telegram-plane); }
.#{$fa-css-prefix}-tencent-weibo:before { content: fa-content($fa-var-tencent-weibo); }
.#{$fa-css-prefix}-terminal:before { content: fa-content($fa-var-terminal); }
.#{$fa-css-prefix}-text-height:before { content: fa-content($fa-var-text-height); }
.#{$fa-css-prefix}-text-width:before { content: fa-content($fa-var-text-width); }
.#{$fa-css-prefix}-th:before { content: fa-content($fa-var-th); }
.#{$fa-css-prefix}-th-large:before { content: fa-content($fa-var-th-large); }
.#{$fa-css-prefix}-th-list:before { content: fa-content($fa-var-th-list); }
.#{$fa-css-prefix}-themeisle:before { content: fa-content($fa-var-themeisle); }
.#{$fa-css-prefix}-thermometer-empty:before { content: fa-content($fa-var-thermometer-empty); }
.#{$fa-css-prefix}-thermometer-full:before { content: fa-content($fa-var-thermometer-full); }
.#{$fa-css-prefix}-thermometer-half:before { content: fa-content($fa-var-thermometer-half); }
.#{$fa-css-prefix}-thermometer-quarter:before { content: fa-content($fa-var-thermometer-quarter); }
.#{$fa-css-prefix}-thermometer-three-quarters:before { content: fa-content($fa-var-thermometer-three-quarters); }
.#{$fa-css-prefix}-thumbs-down:before { content: fa-content($fa-var-thumbs-down); }
.#{$fa-css-prefix}-thumbs-up:before { content: fa-content($fa-var-thumbs-up); }
.#{$fa-css-prefix}-thumbtack:before { content: fa-content($fa-var-thumbtack); }
.#{$fa-css-prefix}-ticket:before { content: fa-content($fa-var-ticket); }
.#{$fa-css-prefix}-ticket-alt:before { content: fa-content($fa-var-ticket-alt); }
.#{$fa-css-prefix}-times:before { content: fa-content($fa-var-times); }
.#{$fa-css-prefix}-times-circle:before { content: fa-content($fa-var-times-circle); }
.#{$fa-css-prefix}-times-hexagon:before { content: fa-content($fa-var-times-hexagon); }
.#{$fa-css-prefix}-times-octagon:before { content: fa-content($fa-var-times-octagon); }
.#{$fa-css-prefix}-times-square:before { content: fa-content($fa-var-times-square); }
.#{$fa-css-prefix}-tint:before { content: fa-content($fa-var-tint); }
.#{$fa-css-prefix}-toggle-off:before { content: fa-content($fa-var-toggle-off); }
.#{$fa-css-prefix}-toggle-on:before { content: fa-content($fa-var-toggle-on); }
.#{$fa-css-prefix}-trademark:before { content: fa-content($fa-var-trademark); }
.#{$fa-css-prefix}-train:before { content: fa-content($fa-var-train); }
.#{$fa-css-prefix}-transgender:before { content: fa-content($fa-var-transgender); }
.#{$fa-css-prefix}-transgender-alt:before { content: fa-content($fa-var-transgender-alt); }
.#{$fa-css-prefix}-trash:before { content: fa-content($fa-var-trash); }
.#{$fa-css-prefix}-trash-alt:before { content: fa-content($fa-var-trash-alt); }
.#{$fa-css-prefix}-tree:before { content: fa-content($fa-var-tree); }
.#{$fa-css-prefix}-tree-alt:before { content: fa-content($fa-var-tree-alt); }
.#{$fa-css-prefix}-trello:before { content: fa-content($fa-var-trello); }
.#{$fa-css-prefix}-triangle:before { content: fa-content($fa-var-triangle); }
.#{$fa-css-prefix}-tripadvisor:before { content: fa-content($fa-var-tripadvisor); }
.#{$fa-css-prefix}-trophy:before { content: fa-content($fa-var-trophy); }
.#{$fa-css-prefix}-trophy-alt:before { content: fa-content($fa-var-trophy-alt); }
.#{$fa-css-prefix}-truck:before { content: fa-content($fa-var-truck); }
.#{$fa-css-prefix}-tty:before { content: fa-content($fa-var-tty); }
.#{$fa-css-prefix}-tumblr:before { content: fa-content($fa-var-tumblr); }
.#{$fa-css-prefix}-tumblr-square:before { content: fa-content($fa-var-tumblr-square); }
.#{$fa-css-prefix}-tv:before { content: fa-content($fa-var-tv); }
.#{$fa-css-prefix}-tv-retro:before { content: fa-content($fa-var-tv-retro); }
.#{$fa-css-prefix}-twitch:before { content: fa-content($fa-var-twitch); }
.#{$fa-css-prefix}-twitter:before { content: fa-content($fa-var-twitter); }
.#{$fa-css-prefix}-twitter-square:before { content: fa-content($fa-var-twitter-square); }
.#{$fa-css-prefix}-typo3:before { content: fa-content($fa-var-typo3); }
.#{$fa-css-prefix}-uber:before { content: fa-content($fa-var-uber); }
.#{$fa-css-prefix}-uikit:before { content: fa-content($fa-var-uikit); }
.#{$fa-css-prefix}-umbrella:before { content: fa-content($fa-var-umbrella); }
.#{$fa-css-prefix}-underline:before { content: fa-content($fa-var-underline); }
.#{$fa-css-prefix}-undo:before { content: fa-content($fa-var-undo); }
.#{$fa-css-prefix}-undo-alt:before { content: fa-content($fa-var-undo-alt); }
.#{$fa-css-prefix}-uniregistry:before { content: fa-content($fa-var-uniregistry); }
.#{$fa-css-prefix}-universal-access:before { content: fa-content($fa-var-universal-access); }
.#{$fa-css-prefix}-university:before { content: fa-content($fa-var-university); }
.#{$fa-css-prefix}-unlink:before { content: fa-content($fa-var-unlink); }
.#{$fa-css-prefix}-unlock:before { content: fa-content($fa-var-unlock); }
.#{$fa-css-prefix}-unlock-alt:before { content: fa-content($fa-var-unlock-alt); }
.#{$fa-css-prefix}-untappd:before { content: fa-content($fa-var-untappd); }
.#{$fa-css-prefix}-upload:before { content: fa-content($fa-var-upload); }
.#{$fa-css-prefix}-usb:before { content: fa-content($fa-var-usb); }
.#{$fa-css-prefix}-usd-circle:before { content: fa-content($fa-var-usd-circle); }
.#{$fa-css-prefix}-usd-square:before { content: fa-content($fa-var-usd-square); }
.#{$fa-css-prefix}-user:before { content: fa-content($fa-var-user); }
.#{$fa-css-prefix}-user-alt:before { content: fa-content($fa-var-user-alt); }
.#{$fa-css-prefix}-user-circle:before { content: fa-content($fa-var-user-circle); }
.#{$fa-css-prefix}-user-md:before { content: fa-content($fa-var-user-md); }
.#{$fa-css-prefix}-user-plus:before { content: fa-content($fa-var-user-plus); }
.#{$fa-css-prefix}-user-secret:before { content: fa-content($fa-var-user-secret); }
.#{$fa-css-prefix}-user-times:before { content: fa-content($fa-var-user-times); }
.#{$fa-css-prefix}-users:before { content: fa-content($fa-var-users); }
.#{$fa-css-prefix}-ussunnah:before { content: fa-content($fa-var-ussunnah); }
.#{$fa-css-prefix}-utensil-fork:before { content: fa-content($fa-var-utensil-fork); }
.#{$fa-css-prefix}-utensil-knife:before { content: fa-content($fa-var-utensil-knife); }
.#{$fa-css-prefix}-utensil-spoon:before { content: fa-content($fa-var-utensil-spoon); }
.#{$fa-css-prefix}-utensils:before { content: fa-content($fa-var-utensils); }
.#{$fa-css-prefix}-utensils-alt:before { content: fa-content($fa-var-utensils-alt); }
.#{$fa-css-prefix}-vaadin:before { content: fa-content($fa-var-vaadin); }
.#{$fa-css-prefix}-venus:before { content: fa-content($fa-var-venus); }
.#{$fa-css-prefix}-venus-double:before { content: fa-content($fa-var-venus-double); }
.#{$fa-css-prefix}-venus-mars:before { content: fa-content($fa-var-venus-mars); }
.#{$fa-css-prefix}-viacoin:before { content: fa-content($fa-var-viacoin); }
.#{$fa-css-prefix}-viadeo:before { content: fa-content($fa-var-viadeo); }
.#{$fa-css-prefix}-viadeo-square:before { content: fa-content($fa-var-viadeo-square); }
.#{$fa-css-prefix}-viber:before { content: fa-content($fa-var-viber); }
.#{$fa-css-prefix}-video:before { content: fa-content($fa-var-video); }
.#{$fa-css-prefix}-vimeo:before { content: fa-content($fa-var-vimeo); }
.#{$fa-css-prefix}-vimeo-square:before { content: fa-content($fa-var-vimeo-square); }
.#{$fa-css-prefix}-vimeo-v:before { content: fa-content($fa-var-vimeo-v); }
.#{$fa-css-prefix}-vine:before { content: fa-content($fa-var-vine); }
.#{$fa-css-prefix}-vk:before { content: fa-content($fa-var-vk); }
.#{$fa-css-prefix}-vnv:before { content: fa-content($fa-var-vnv); }
.#{$fa-css-prefix}-volume-down:before { content: fa-content($fa-var-volume-down); }
.#{$fa-css-prefix}-volume-mute:before { content: fa-content($fa-var-volume-mute); }
.#{$fa-css-prefix}-volume-off:before { content: fa-content($fa-var-volume-off); }
.#{$fa-css-prefix}-volume-up:before { content: fa-content($fa-var-volume-up); }
.#{$fa-css-prefix}-vuejs:before { content: fa-content($fa-var-vuejs); }
.#{$fa-css-prefix}-watch:before { content: fa-content($fa-var-watch); }
.#{$fa-css-prefix}-weibo:before { content: fa-content($fa-var-weibo); }
.#{$fa-css-prefix}-weixin:before { content: fa-content($fa-var-weixin); }
.#{$fa-css-prefix}-whatsapp:before { content: fa-content($fa-var-whatsapp); }
.#{$fa-css-prefix}-whatsapp-square:before { content: fa-content($fa-var-whatsapp-square); }
.#{$fa-css-prefix}-wheelchair:before { content: fa-content($fa-var-wheelchair); }
.#{$fa-css-prefix}-whmcs:before { content: fa-content($fa-var-whmcs); }
.#{$fa-css-prefix}-wifi:before { content: fa-content($fa-var-wifi); }
.#{$fa-css-prefix}-wikipedia-w:before { content: fa-content($fa-var-wikipedia-w); }
.#{$fa-css-prefix}-window:before { content: fa-content($fa-var-window); }
.#{$fa-css-prefix}-window-alt:before { content: fa-content($fa-var-window-alt); }
.#{$fa-css-prefix}-window-close:before { content: fa-content($fa-var-window-close); }
.#{$fa-css-prefix}-window-maximize:before { content: fa-content($fa-var-window-maximize); }
.#{$fa-css-prefix}-window-minimize:before { content: fa-content($fa-var-window-minimize); }
.#{$fa-css-prefix}-window-restore:before { content: fa-content($fa-var-window-restore); }
.#{$fa-css-prefix}-windows:before { content: fa-content($fa-var-windows); }
.#{$fa-css-prefix}-won-sign:before { content: fa-content($fa-var-won-sign); }
.#{$fa-css-prefix}-wordpress:before { content: fa-content($fa-var-wordpress); }
.#{$fa-css-prefix}-wordpress-simple:before { content: fa-content($fa-var-wordpress-simple); }
.#{$fa-css-prefix}-wpbeginner:before { content: fa-content($fa-var-wpbeginner); }
.#{$fa-css-prefix}-wpexplorer:before { content: fa-content($fa-var-wpexplorer); }
.#{$fa-css-prefix}-wpforms:before { content: fa-content($fa-var-wpforms); }
.#{$fa-css-prefix}-wrench:before { content: fa-content($fa-var-wrench); }
.#{$fa-css-prefix}-xbox:before { content: fa-content($fa-var-xbox); }
.#{$fa-css-prefix}-xing:before { content: fa-content($fa-var-xing); }
.#{$fa-css-prefix}-xing-square:before { content: fa-content($fa-var-xing-square); }
.#{$fa-css-prefix}-y-combinator:before { content: fa-content($fa-var-y-combinator); }
.#{$fa-css-prefix}-yahoo:before { content: fa-content($fa-var-yahoo); }
.#{$fa-css-prefix}-yandex:before { content: fa-content($fa-var-yandex); }
.#{$fa-css-prefix}-yandex-international:before { content: fa-content($fa-var-yandex-international); }
.#{$fa-css-prefix}-yelp:before { content: fa-content($fa-var-yelp); }
.#{$fa-css-prefix}-yen-sign:before { content: fa-content($fa-var-yen-sign); }
.#{$fa-css-prefix}-yoast:before { content: fa-content($fa-var-yoast); }
.#{$fa-css-prefix}-youtube:before { content: fa-content($fa-var-youtube); }

View File

@@ -1,23 +0,0 @@
// Icon Sizes
// -------------------------
// makes the font 33% larger relative to the icon container
.#{$fa-css-prefix}-lg {
font-size: (4em / 3);
line-height: (3em / 4);
vertical-align: -.0667em;
}
.#{$fa-css-prefix}-xs {
font-size: .75em;
}
.#{$fa-css-prefix}-sm {
font-size: .875em;
}
@for $i from 1 through 10 {
.#{$fa-css-prefix}-#{$i}x {
font-size: $i * 1em;
}
}

View File

@@ -1,18 +0,0 @@
// List Icons
// -------------------------
.#{$fa-css-prefix}-ul {
list-style-type: none;
margin-left: $fa-li-width * 5/4;
padding-left: 0;
> li { position: relative; }
}
.#{$fa-css-prefix}-li {
left: -$fa-li-width;
position: absolute;
text-align: center;
width: $fa-li-width;
line-height: inherit;
}

View File

@@ -1,57 +0,0 @@
// Mixins
// --------------------------
@mixin fa-icon {
-webkit-font-smoothing: antialiased;
-moz-osx-font-smoothing: grayscale;
display: inline-block;
font-style: normal;
font-variant: normal;
font-weight: normal;
line-height: 1;
vertical-align: -15%;
}
@mixin fa-icon-rotate($degrees, $rotation) {
-ms-filter: "progid:DXImageTransform.Microsoft.BasicImage(rotation=#{$rotation})";
transform: rotate($degrees);
}
@mixin fa-icon-flip($horiz, $vert, $rotation) {
-ms-filter: "progid:DXImageTransform.Microsoft.BasicImage(rotation=#{$rotation}, mirror=1)";
transform: scale($horiz, $vert);
}
// Only display content to screen readers. A la Bootstrap 4.
//
// See: http://a11yproject.com/posts/how-to-hide-content/
@mixin sr-only {
border: 0;
clip: rect(0, 0, 0, 0);
height: 1px;
margin: -1px;
overflow: hidden;
padding: 0;
position: absolute;
width: 1px;
}
// Use in conjunction with .sr-only to only display content when it's focused.
//
// Useful for "Skip to main content" links; see http://www.w3.org/TR/2013/NOTE-WCAG20-TECHS-20130905/G1
//
// Credit: HTML5 Boilerplate
@mixin sr-only-focusable {
&:active,
&:focus {
clip: auto;
height: auto;
margin: 0;
overflow: visible;
position: static;
width: auto;
}
}

View File

@@ -1,23 +0,0 @@
// Rotated & Flipped Icons
// -------------------------
.#{$fa-css-prefix}-rotate-90 { @include fa-icon-rotate(90deg, 1); }
.#{$fa-css-prefix}-rotate-180 { @include fa-icon-rotate(180deg, 2); }
.#{$fa-css-prefix}-rotate-270 { @include fa-icon-rotate(270deg, 3); }
.#{$fa-css-prefix}-flip-horizontal { @include fa-icon-flip(-1, 1, 0); }
.#{$fa-css-prefix}-flip-vertical { @include fa-icon-flip(1, -1, 2); }
.#{$fa-css-prefix}-flip-horizontal.#{$fa-css-prefix}-flip-vertical { @include fa-icon-flip(-1, -1, 2); }
// Hook for IE8-9
// -------------------------
:root {
.#{$fa-css-prefix}-rotate-90,
.#{$fa-css-prefix}-rotate-180,
.#{$fa-css-prefix}-rotate-270,
.#{$fa-css-prefix}-flip-horizontal,
.#{$fa-css-prefix}-flip-vertical {
filter: none;
}
}

View File

@@ -1,5 +0,0 @@
// Screen Readers
// -------------------------
.sr-only { @include sr-only; }
.sr-only-focusable { @include sr-only-focusable; }

View File

@@ -1,31 +0,0 @@
// Stacked Icons
// -------------------------
.#{$fa-css-prefix}-stack {
display: inline-block;
height: 2em;
line-height: 2em;
position: relative;
vertical-align: middle;
width: 2em;
}
.#{$fa-css-prefix}-stack-1x,
.#{$fa-css-prefix}-stack-2x {
left: 0;
position: absolute;
text-align: center;
width: 100%;
}
.#{$fa-css-prefix}-stack-1x {
line-height: inherit;
}
.#{$fa-css-prefix}-stack-2x {
font-size: 2em;
}
.#{$fa-css-prefix}-inverse {
color: $fa-inverse;
}

View File

@@ -1,959 +0,0 @@
// Variables
// --------------------------
$fa-font-path: "../webfonts" !default;
$fa-font-size-base: 16px !default;
$fa-css-prefix: fa !default;
$fa-version: "5.0.2" !default;
$fa-border-color: #eee !default;
$fa-inverse: #fff !default;
$fa-li-width: 2em !default;
// Convenience function used to set content property
@function fa-content($fa-var) {
@return unquote("\"#{ $fa-var }\"");
}
$fa-var-500px: \f26e;
$fa-var-accessible-icon: \f368;
$fa-var-accusoft: \f369;
$fa-var-address-book: \f2b9;
$fa-var-address-card: \f2bb;
$fa-var-adjust: \f042;
$fa-var-adn: \f170;
$fa-var-adversal: \f36a;
$fa-var-affiliatetheme: \f36b;
$fa-var-alarm-clock: \f34e;
$fa-var-algolia: \f36c;
$fa-var-align-center: \f037;
$fa-var-align-justify: \f039;
$fa-var-align-left: \f036;
$fa-var-align-right: \f038;
$fa-var-amazon: \f270;
$fa-var-amazon-pay: \f42c;
$fa-var-ambulance: \f0f9;
$fa-var-american-sign-language-interpreting: \f2a3;
$fa-var-amilia: \f36d;
$fa-var-anchor: \f13d;
$fa-var-android: \f17b;
$fa-var-angellist: \f209;
$fa-var-angle-double-down: \f103;
$fa-var-angle-double-left: \f100;
$fa-var-angle-double-right: \f101;
$fa-var-angle-double-up: \f102;
$fa-var-angle-down: \f107;
$fa-var-angle-left: \f104;
$fa-var-angle-right: \f105;
$fa-var-angle-up: \f106;
$fa-var-angrycreative: \f36e;
$fa-var-angular: \f420;
$fa-var-app-store: \f36f;
$fa-var-app-store-ios: \f370;
$fa-var-apper: \f371;
$fa-var-apple: \f179;
$fa-var-apple-pay: \f415;
$fa-var-archive: \f187;
$fa-var-arrow-alt-circle-down: \f358;
$fa-var-arrow-alt-circle-left: \f359;
$fa-var-arrow-alt-circle-right: \f35a;
$fa-var-arrow-alt-circle-up: \f35b;
$fa-var-arrow-alt-down: \f354;
$fa-var-arrow-alt-from-bottom: \f346;
$fa-var-arrow-alt-from-left: \f347;
$fa-var-arrow-alt-from-right: \f348;
$fa-var-arrow-alt-from-top: \f349;
$fa-var-arrow-alt-left: \f355;
$fa-var-arrow-alt-right: \f356;
$fa-var-arrow-alt-square-down: \f350;
$fa-var-arrow-alt-square-left: \f351;
$fa-var-arrow-alt-square-right: \f352;
$fa-var-arrow-alt-square-up: \f353;
$fa-var-arrow-alt-to-bottom: \f34a;
$fa-var-arrow-alt-to-left: \f34b;
$fa-var-arrow-alt-to-right: \f34c;
$fa-var-arrow-alt-to-top: \f34d;
$fa-var-arrow-alt-up: \f357;
$fa-var-arrow-circle-down: \f0ab;
$fa-var-arrow-circle-left: \f0a8;
$fa-var-arrow-circle-right: \f0a9;
$fa-var-arrow-circle-up: \f0aa;
$fa-var-arrow-down: \f063;
$fa-var-arrow-from-bottom: \f342;
$fa-var-arrow-from-left: \f343;
$fa-var-arrow-from-right: \f344;
$fa-var-arrow-from-top: \f345;
$fa-var-arrow-left: \f060;
$fa-var-arrow-right: \f061;
$fa-var-arrow-square-down: \f339;
$fa-var-arrow-square-left: \f33a;
$fa-var-arrow-square-right: \f33b;
$fa-var-arrow-square-up: \f33c;
$fa-var-arrow-to-bottom: \f33d;
$fa-var-arrow-to-left: \f33e;
$fa-var-arrow-to-right: \f340;
$fa-var-arrow-to-top: \f341;
$fa-var-arrow-up: \f062;
$fa-var-arrows: \f047;
$fa-var-arrows-alt: \f0b2;
$fa-var-arrows-alt-h: \f337;
$fa-var-arrows-alt-v: \f338;
$fa-var-arrows-h: \f07e;
$fa-var-arrows-v: \f07d;
$fa-var-assistive-listening-systems: \f2a2;
$fa-var-asterisk: \f069;
$fa-var-asymmetrik: \f372;
$fa-var-at: \f1fa;
$fa-var-audible: \f373;
$fa-var-audio-description: \f29e;
$fa-var-autoprefixer: \f41c;
$fa-var-avianex: \f374;
$fa-var-aviato: \f421;
$fa-var-aws: \f375;
$fa-var-backward: \f04a;
$fa-var-badge: \f335;
$fa-var-badge-check: \f336;
$fa-var-balance-scale: \f24e;
$fa-var-ban: \f05e;
$fa-var-bandcamp: \f2d5;
$fa-var-barcode: \f02a;
$fa-var-bars: \f0c9;
$fa-var-bath: \f2cd;
$fa-var-battery-bolt: \f376;
$fa-var-battery-empty: \f244;
$fa-var-battery-full: \f240;
$fa-var-battery-half: \f242;
$fa-var-battery-quarter: \f243;
$fa-var-battery-slash: \f377;
$fa-var-battery-three-quarters: \f241;
$fa-var-bed: \f236;
$fa-var-beer: \f0fc;
$fa-var-behance: \f1b4;
$fa-var-behance-square: \f1b5;
$fa-var-bell: \f0f3;
$fa-var-bell-slash: \f1f6;
$fa-var-bicycle: \f206;
$fa-var-bimobject: \f378;
$fa-var-binoculars: \f1e5;
$fa-var-birthday-cake: \f1fd;
$fa-var-bitbucket: \f171;
$fa-var-bitcoin: \f379;
$fa-var-bity: \f37a;
$fa-var-black-tie: \f27e;
$fa-var-blackberry: \f37b;
$fa-var-blind: \f29d;
$fa-var-blogger: \f37c;
$fa-var-blogger-b: \f37d;
$fa-var-bluetooth: \f293;
$fa-var-bluetooth-b: \f294;
$fa-var-bold: \f032;
$fa-var-bolt: \f0e7;
$fa-var-bomb: \f1e2;
$fa-var-book: \f02d;
$fa-var-bookmark: \f02e;
$fa-var-braille: \f2a1;
$fa-var-briefcase: \f0b1;
$fa-var-browser: \f37e;
$fa-var-btc: \f15a;
$fa-var-bug: \f188;
$fa-var-building: \f1ad;
$fa-var-bullhorn: \f0a1;
$fa-var-bullseye: \f140;
$fa-var-buromobelexperte: \f37f;
$fa-var-bus: \f207;
$fa-var-buysellads: \f20d;
$fa-var-calculator: \f1ec;
$fa-var-calendar: \f133;
$fa-var-calendar-alt: \f073;
$fa-var-calendar-check: \f274;
$fa-var-calendar-edit: \f333;
$fa-var-calendar-exclamation: \f334;
$fa-var-calendar-minus: \f272;
$fa-var-calendar-plus: \f271;
$fa-var-calendar-times: \f273;
$fa-var-camera: \f030;
$fa-var-camera-alt: \f332;
$fa-var-camera-retro: \f083;
$fa-var-car: \f1b9;
$fa-var-caret-circle-down: \f32d;
$fa-var-caret-circle-left: \f32e;
$fa-var-caret-circle-right: \f330;
$fa-var-caret-circle-up: \f331;
$fa-var-caret-down: \f0d7;
$fa-var-caret-left: \f0d9;
$fa-var-caret-right: \f0da;
$fa-var-caret-square-down: \f150;
$fa-var-caret-square-left: \f191;
$fa-var-caret-square-right: \f152;
$fa-var-caret-square-up: \f151;
$fa-var-caret-up: \f0d8;
$fa-var-cart-arrow-down: \f218;
$fa-var-cart-plus: \f217;
$fa-var-cc-amazon-pay: \f42d;
$fa-var-cc-amex: \f1f3;
$fa-var-cc-apple-pay: \f416;
$fa-var-cc-diners-club: \f24c;
$fa-var-cc-discover: \f1f2;
$fa-var-cc-jcb: \f24b;
$fa-var-cc-mastercard: \f1f1;
$fa-var-cc-paypal: \f1f4;
$fa-var-cc-stripe: \f1f5;
$fa-var-cc-visa: \f1f0;
$fa-var-centercode: \f380;
$fa-var-certificate: \f0a3;
$fa-var-chart-area: \f1fe;
$fa-var-chart-bar: \f080;
$fa-var-chart-line: \f201;
$fa-var-chart-pie: \f200;
$fa-var-check: \f00c;
$fa-var-check-circle: \f058;
$fa-var-check-square: \f14a;
$fa-var-chevron-circle-down: \f13a;
$fa-var-chevron-circle-left: \f137;
$fa-var-chevron-circle-right: \f138;
$fa-var-chevron-circle-up: \f139;
$fa-var-chevron-double-down: \f322;
$fa-var-chevron-double-left: \f323;
$fa-var-chevron-double-right: \f324;
$fa-var-chevron-double-up: \f325;
$fa-var-chevron-down: \f078;
$fa-var-chevron-left: \f053;
$fa-var-chevron-right: \f054;
$fa-var-chevron-square-down: \f329;
$fa-var-chevron-square-left: \f32a;
$fa-var-chevron-square-right: \f32b;
$fa-var-chevron-square-up: \f32c;
$fa-var-chevron-up: \f077;
$fa-var-child: \f1ae;
$fa-var-chrome: \f268;
$fa-var-circle: \f111;
$fa-var-circle-notch: \f1ce;
$fa-var-clipboard: \f328;
$fa-var-clock: \f017;
$fa-var-clone: \f24d;
$fa-var-closed-captioning: \f20a;
$fa-var-cloud: \f0c2;
$fa-var-cloud-download: \f0ed;
$fa-var-cloud-download-alt: \f381;
$fa-var-cloud-upload: \f0ee;
$fa-var-cloud-upload-alt: \f382;
$fa-var-cloudscale: \f383;
$fa-var-cloudsmith: \f384;
$fa-var-cloudversify: \f385;
$fa-var-club: \f327;
$fa-var-code: \f121;
$fa-var-code-branch: \f126;
$fa-var-code-commit: \f386;
$fa-var-code-merge: \f387;
$fa-var-codepen: \f1cb;
$fa-var-codiepie: \f284;
$fa-var-coffee: \f0f4;
$fa-var-cog: \f013;
$fa-var-cogs: \f085;
$fa-var-columns: \f0db;
$fa-var-comment: \f075;
$fa-var-comment-alt: \f27a;
$fa-var-comments: \f086;
$fa-var-compass: \f14e;
$fa-var-compress: \f066;
$fa-var-compress-alt: \f422;
$fa-var-compress-wide: \f326;
$fa-var-connectdevelop: \f20e;
$fa-var-contao: \f26d;
$fa-var-copy: \f0c5;
$fa-var-copyright: \f1f9;
$fa-var-cpanel: \f388;
$fa-var-creative-commons: \f25e;
$fa-var-credit-card: \f09d;
$fa-var-credit-card-blank: \f389;
$fa-var-credit-card-front: \f38a;
$fa-var-crop: \f125;
$fa-var-crosshairs: \f05b;
$fa-var-css3: \f13c;
$fa-var-css3-alt: \f38b;
$fa-var-cube: \f1b2;
$fa-var-cubes: \f1b3;
$fa-var-cut: \f0c4;
$fa-var-cuttlefish: \f38c;
$fa-var-d-and-d: \f38d;
$fa-var-dashcube: \f210;
$fa-var-database: \f1c0;
$fa-var-deaf: \f2a4;
$fa-var-delicious: \f1a5;
$fa-var-deploydog: \f38e;
$fa-var-deskpro: \f38f;
$fa-var-desktop: \f108;
$fa-var-desktop-alt: \f390;
$fa-var-deviantart: \f1bd;
$fa-var-diamond: \f219;
$fa-var-digg: \f1a6;
$fa-var-digital-ocean: \f391;
$fa-var-discord: \f392;
$fa-var-discourse: \f393;
$fa-var-dochub: \f394;
$fa-var-docker: \f395;
$fa-var-dollar-sign: \f155;
$fa-var-dot-circle: \f192;
$fa-var-download: \f019;
$fa-var-draft2digital: \f396;
$fa-var-dribbble: \f17d;
$fa-var-dribbble-square: \f397;
$fa-var-dropbox: \f16b;
$fa-var-drupal: \f1a9;
$fa-var-dyalog: \f399;
$fa-var-earlybirds: \f39a;
$fa-var-edge: \f282;
$fa-var-edit: \f044;
$fa-var-eject: \f052;
$fa-var-ellipsis-h: \f141;
$fa-var-ellipsis-h-alt: \f39b;
$fa-var-ellipsis-v: \f142;
$fa-var-ellipsis-v-alt: \f39c;
$fa-var-ember: \f423;
$fa-var-empire: \f1d1;
$fa-var-envelope: \f0e0;
$fa-var-envelope-open: \f2b6;
$fa-var-envelope-square: \f199;
$fa-var-envira: \f299;
$fa-var-eraser: \f12d;
$fa-var-erlang: \f39d;
$fa-var-ethereum: \f42e;
$fa-var-etsy: \f2d7;
$fa-var-euro-sign: \f153;
$fa-var-exchange: \f0ec;
$fa-var-exchange-alt: \f362;
$fa-var-exclamation: \f12a;
$fa-var-exclamation-circle: \f06a;
$fa-var-exclamation-square: \f321;
$fa-var-exclamation-triangle: \f071;
$fa-var-expand: \f065;
$fa-var-expand-alt: \f424;
$fa-var-expand-arrows: \f31d;
$fa-var-expand-arrows-alt: \f31e;
$fa-var-expand-wide: \f320;
$fa-var-expeditedssl: \f23e;
$fa-var-external-link: \f08e;
$fa-var-external-link-alt: \f35d;
$fa-var-external-link-square: \f14c;
$fa-var-external-link-square-alt: \f360;
$fa-var-eye: \f06e;
$fa-var-eye-dropper: \f1fb;
$fa-var-eye-slash: \f070;
$fa-var-facebook: \f09a;
$fa-var-facebook-f: \f39e;
$fa-var-facebook-messenger: \f39f;
$fa-var-facebook-square: \f082;
$fa-var-fast-backward: \f049;
$fa-var-fast-forward: \f050;
$fa-var-fax: \f1ac;
$fa-var-female: \f182;
$fa-var-fighter-jet: \f0fb;
$fa-var-file: \f15b;
$fa-var-file-alt: \f15c;
$fa-var-file-archive: \f1c6;
$fa-var-file-audio: \f1c7;
$fa-var-file-check: \f316;
$fa-var-file-code: \f1c9;
$fa-var-file-edit: \f31c;
$fa-var-file-excel: \f1c3;
$fa-var-file-exclamation: \f31a;
$fa-var-file-image: \f1c5;
$fa-var-file-minus: \f318;
$fa-var-file-pdf: \f1c1;
$fa-var-file-plus: \f319;
$fa-var-file-powerpoint: \f1c4;
$fa-var-file-times: \f317;
$fa-var-file-video: \f1c8;
$fa-var-file-word: \f1c2;
$fa-var-film: \f008;
$fa-var-film-alt: \f3a0;
$fa-var-filter: \f0b0;
$fa-var-fire: \f06d;
$fa-var-fire-extinguisher: \f134;
$fa-var-firefox: \f269;
$fa-var-first-order: \f2b0;
$fa-var-firstdraft: \f3a1;
$fa-var-flag: \f024;
$fa-var-flag-checkered: \f11e;
$fa-var-flask: \f0c3;
$fa-var-flickr: \f16e;
$fa-var-fly: \f417;
$fa-var-folder: \f07b;
$fa-var-folder-open: \f07c;
$fa-var-font: \f031;
$fa-var-font-awesome: \f2b4;
$fa-var-font-awesome-alt: \f35c;
$fa-var-font-awesome-flag: \f425;
$fa-var-fonticons: \f280;
$fa-var-fonticons-fi: \f3a2;
$fa-var-fort-awesome: \f286;
$fa-var-fort-awesome-alt: \f3a3;
$fa-var-forumbee: \f211;
$fa-var-forward: \f04e;
$fa-var-foursquare: \f180;
$fa-var-free-code-camp: \f2c5;
$fa-var-freebsd: \f3a4;
$fa-var-frown: \f119;
$fa-var-futbol: \f1e3;
$fa-var-gamepad: \f11b;
$fa-var-gavel: \f0e3;
$fa-var-gem: \f3a5;
$fa-var-genderless: \f22d;
$fa-var-get-pocket: \f265;
$fa-var-gg: \f260;
$fa-var-gg-circle: \f261;
$fa-var-gift: \f06b;
$fa-var-git: \f1d3;
$fa-var-git-square: \f1d2;
$fa-var-github: \f09b;
$fa-var-github-alt: \f113;
$fa-var-github-square: \f092;
$fa-var-gitkraken: \f3a6;
$fa-var-gitlab: \f296;
$fa-var-gitter: \f426;
$fa-var-glass-martini: \f000;
$fa-var-glide: \f2a5;
$fa-var-glide-g: \f2a6;
$fa-var-globe: \f0ac;
$fa-var-gofore: \f3a7;
$fa-var-goodreads: \f3a8;
$fa-var-goodreads-g: \f3a9;
$fa-var-google: \f1a0;
$fa-var-google-drive: \f3aa;
$fa-var-google-play: \f3ab;
$fa-var-google-plus: \f2b3;
$fa-var-google-plus-g: \f0d5;
$fa-var-google-plus-square: \f0d4;
$fa-var-google-wallet: \f1ee;
$fa-var-graduation-cap: \f19d;
$fa-var-gratipay: \f184;
$fa-var-grav: \f2d6;
$fa-var-gripfire: \f3ac;
$fa-var-grunt: \f3ad;
$fa-var-gulp: \f3ae;
$fa-var-h-square: \f0fd;
$fa-var-h1: \f313;
$fa-var-h2: \f314;
$fa-var-h3: \f315;
$fa-var-hacker-news: \f1d4;
$fa-var-hacker-news-square: \f3af;
$fa-var-hand-lizard: \f258;
$fa-var-hand-paper: \f256;
$fa-var-hand-peace: \f25b;
$fa-var-hand-point-down: \f0a7;
$fa-var-hand-point-left: \f0a5;
$fa-var-hand-point-right: \f0a4;
$fa-var-hand-point-up: \f0a6;
$fa-var-hand-pointer: \f25a;
$fa-var-hand-rock: \f255;
$fa-var-hand-scissors: \f257;
$fa-var-hand-spock: \f259;
$fa-var-handshake: \f2b5;
$fa-var-hashtag: \f292;
$fa-var-hdd: \f0a0;
$fa-var-heading: \f1dc;
$fa-var-headphones: \f025;
$fa-var-heart: \f004;
$fa-var-heartbeat: \f21e;
$fa-var-hexagon: \f312;
$fa-var-hire-a-helper: \f3b0;
$fa-var-history: \f1da;
$fa-var-home: \f015;
$fa-var-hooli: \f427;
$fa-var-hospital: \f0f8;
$fa-var-hotjar: \f3b1;
$fa-var-hourglass: \f254;
$fa-var-hourglass-end: \f253;
$fa-var-hourglass-half: \f252;
$fa-var-hourglass-start: \f251;
$fa-var-houzz: \f27c;
$fa-var-html5: \f13b;
$fa-var-hubspot: \f3b2;
$fa-var-i-cursor: \f246;
$fa-var-id-badge: \f2c1;
$fa-var-id-card: \f2c2;
$fa-var-image: \f03e;
$fa-var-images: \f302;
$fa-var-imdb: \f2d8;
$fa-var-inbox: \f01c;
$fa-var-inbox-in: \f310;
$fa-var-inbox-out: \f311;
$fa-var-indent: \f03c;
$fa-var-industry: \f275;
$fa-var-industry-alt: \f3b3;
$fa-var-info: \f129;
$fa-var-info-circle: \f05a;
$fa-var-info-square: \f30f;
$fa-var-instagram: \f16d;
$fa-var-internet-explorer: \f26b;
$fa-var-ioxhost: \f208;
$fa-var-italic: \f033;
$fa-var-itunes: \f3b4;
$fa-var-itunes-note: \f3b5;
$fa-var-jack-o-lantern: \f30e;
$fa-var-jenkins: \f3b6;
$fa-var-joget: \f3b7;
$fa-var-joomla: \f1aa;
$fa-var-js: \f3b8;
$fa-var-js-square: \f3b9;
$fa-var-jsfiddle: \f1cc;
$fa-var-key: \f084;
$fa-var-keyboard: \f11c;
$fa-var-keycdn: \f3ba;
$fa-var-kickstarter: \f3bb;
$fa-var-kickstarter-k: \f3bc;
$fa-var-korvue: \f42f;
$fa-var-language: \f1ab;
$fa-var-laptop: \f109;
$fa-var-laravel: \f3bd;
$fa-var-lastfm: \f202;
$fa-var-lastfm-square: \f203;
$fa-var-leaf: \f06c;
$fa-var-leanpub: \f212;
$fa-var-lemon: \f094;
$fa-var-less: \f41d;
$fa-var-level-down: \f149;
$fa-var-level-down-alt: \f3be;
$fa-var-level-up: \f148;
$fa-var-level-up-alt: \f3bf;
$fa-var-life-ring: \f1cd;
$fa-var-lightbulb: \f0eb;
$fa-var-line: \f3c0;
$fa-var-link: \f0c1;
$fa-var-linkedin: \f08c;
$fa-var-linkedin-in: \f0e1;
$fa-var-linode: \f2b8;
$fa-var-linux: \f17c;
$fa-var-lira-sign: \f195;
$fa-var-list: \f03a;
$fa-var-list-alt: \f022;
$fa-var-list-ol: \f0cb;
$fa-var-list-ul: \f0ca;
$fa-var-location-arrow: \f124;
$fa-var-lock: \f023;
$fa-var-lock-alt: \f30d;
$fa-var-lock-open: \f3c1;
$fa-var-lock-open-alt: \f3c2;
$fa-var-long-arrow-alt-down: \f309;
$fa-var-long-arrow-alt-left: \f30a;
$fa-var-long-arrow-alt-right: \f30b;
$fa-var-long-arrow-alt-up: \f30c;
$fa-var-long-arrow-down: \f175;
$fa-var-long-arrow-left: \f177;
$fa-var-long-arrow-right: \f178;
$fa-var-long-arrow-up: \f176;
$fa-var-low-vision: \f2a8;
$fa-var-lyft: \f3c3;
$fa-var-magento: \f3c4;
$fa-var-magic: \f0d0;
$fa-var-magnet: \f076;
$fa-var-male: \f183;
$fa-var-map: \f279;
$fa-var-map-marker: \f041;
$fa-var-map-marker-alt: \f3c5;
$fa-var-map-pin: \f276;
$fa-var-map-signs: \f277;
$fa-var-mars: \f222;
$fa-var-mars-double: \f227;
$fa-var-mars-stroke: \f229;
$fa-var-mars-stroke-h: \f22b;
$fa-var-mars-stroke-v: \f22a;
$fa-var-maxcdn: \f136;
$fa-var-medapps: \f3c6;
$fa-var-medium: \f23a;
$fa-var-medium-m: \f3c7;
$fa-var-medkit: \f0fa;
$fa-var-medrt: \f3c8;
$fa-var-meetup: \f2e0;
$fa-var-meh: \f11a;
$fa-var-mercury: \f223;
$fa-var-microchip: \f2db;
$fa-var-microphone: \f130;
$fa-var-microphone-alt: \f3c9;
$fa-var-microphone-slash: \f131;
$fa-var-microsoft: \f3ca;
$fa-var-minus: \f068;
$fa-var-minus-circle: \f056;
$fa-var-minus-hexagon: \f307;
$fa-var-minus-octagon: \f308;
$fa-var-minus-square: \f146;
$fa-var-mix: \f3cb;
$fa-var-mixcloud: \f289;
$fa-var-mizuni: \f3cc;
$fa-var-mobile: \f10b;
$fa-var-mobile-alt: \f3cd;
$fa-var-mobile-android: \f3ce;
$fa-var-mobile-android-alt: \f3cf;
$fa-var-modx: \f285;
$fa-var-monero: \f3d0;
$fa-var-money-bill: \f0d6;
$fa-var-money-bill-alt: \f3d1;
$fa-var-moon: \f186;
$fa-var-motorcycle: \f21c;
$fa-var-mouse-pointer: \f245;
$fa-var-music: \f001;
$fa-var-napster: \f3d2;
$fa-var-neuter: \f22c;
$fa-var-newspaper: \f1ea;
$fa-var-nintendo-switch: \f418;
$fa-var-node: \f419;
$fa-var-node-js: \f3d3;
$fa-var-npm: \f3d4;
$fa-var-ns8: \f3d5;
$fa-var-nutritionix: \f3d6;
$fa-var-object-group: \f247;
$fa-var-object-ungroup: \f248;
$fa-var-octagon: \f306;
$fa-var-odnoklassniki: \f263;
$fa-var-odnoklassniki-square: \f264;
$fa-var-opencart: \f23d;
$fa-var-openid: \f19b;
$fa-var-opera: \f26a;
$fa-var-optin-monster: \f23c;
$fa-var-osi: \f41a;
$fa-var-outdent: \f03b;
$fa-var-page4: \f3d7;
$fa-var-pagelines: \f18c;
$fa-var-paint-brush: \f1fc;
$fa-var-palfed: \f3d8;
$fa-var-paper-plane: \f1d8;
$fa-var-paperclip: \f0c6;
$fa-var-paragraph: \f1dd;
$fa-var-paste: \f0ea;
$fa-var-patreon: \f3d9;
$fa-var-pause: \f04c;
$fa-var-pause-circle: \f28b;
$fa-var-paw: \f1b0;
$fa-var-paypal: \f1ed;
$fa-var-pen: \f304;
$fa-var-pen-alt: \f305;
$fa-var-pen-square: \f14b;
$fa-var-pencil: \f040;
$fa-var-pencil-alt: \f303;
$fa-var-percent: \f295;
$fa-var-periscope: \f3da;
$fa-var-phabricator: \f3db;
$fa-var-phoenix-framework: \f3dc;
$fa-var-phone: \f095;
$fa-var-phone-slash: \f3dd;
$fa-var-phone-square: \f098;
$fa-var-phone-volume: \f2a0;
$fa-var-pied-piper: \f2ae;
$fa-var-pied-piper-alt: \f1a8;
$fa-var-pied-piper-pp: \f1a7;
$fa-var-pinterest: \f0d2;
$fa-var-pinterest-p: \f231;
$fa-var-pinterest-square: \f0d3;
$fa-var-plane: \f072;
$fa-var-plane-alt: \f3de;
$fa-var-play: \f04b;
$fa-var-play-circle: \f144;
$fa-var-playstation: \f3df;
$fa-var-plug: \f1e6;
$fa-var-plus: \f067;
$fa-var-plus-circle: \f055;
$fa-var-plus-hexagon: \f300;
$fa-var-plus-octagon: \f301;
$fa-var-plus-square: \f0fe;
$fa-var-podcast: \f2ce;
$fa-var-poo: \f2fe;
$fa-var-portrait: \f3e0;
$fa-var-pound-sign: \f154;
$fa-var-power-off: \f011;
$fa-var-print: \f02f;
$fa-var-product-hunt: \f288;
$fa-var-pushed: \f3e1;
$fa-var-puzzle-piece: \f12e;
$fa-var-python: \f3e2;
$fa-var-qq: \f1d6;
$fa-var-qrcode: \f029;
$fa-var-question: \f128;
$fa-var-question-circle: \f059;
$fa-var-question-square: \f2fd;
$fa-var-quora: \f2c4;
$fa-var-quote-left: \f10d;
$fa-var-quote-right: \f10e;
$fa-var-random: \f074;
$fa-var-ravelry: \f2d9;
$fa-var-react: \f41b;
$fa-var-rebel: \f1d0;
$fa-var-rectangle-landscape: \f2fa;
$fa-var-rectangle-portrait: \f2fb;
$fa-var-rectangle-wide: \f2fc;
$fa-var-recycle: \f1b8;
$fa-var-red-river: \f3e3;
$fa-var-reddit: \f1a1;
$fa-var-reddit-alien: \f281;
$fa-var-reddit-square: \f1a2;
$fa-var-redo: \f01e;
$fa-var-redo-alt: \f2f9;
$fa-var-registered: \f25d;
$fa-var-rendact: \f3e4;
$fa-var-renren: \f18b;
$fa-var-repeat: \f363;
$fa-var-repeat-1: \f365;
$fa-var-repeat-1-alt: \f366;
$fa-var-repeat-alt: \f364;
$fa-var-reply: \f3e5;
$fa-var-reply-all: \f122;
$fa-var-replyd: \f3e6;
$fa-var-resolving: \f3e7;
$fa-var-retweet: \f079;
$fa-var-retweet-alt: \f361;
$fa-var-road: \f018;
$fa-var-rocket: \f135;
$fa-var-rocketchat: \f3e8;
$fa-var-rockrms: \f3e9;
$fa-var-rss: \f09e;
$fa-var-rss-square: \f143;
$fa-var-ruble-sign: \f158;
$fa-var-rupee-sign: \f156;
$fa-var-safari: \f267;
$fa-var-sass: \f41e;
$fa-var-save: \f0c7;
$fa-var-schlix: \f3ea;
$fa-var-scribd: \f28a;
$fa-var-scrubber: \f2f8;
$fa-var-search: \f002;
$fa-var-search-minus: \f010;
$fa-var-search-plus: \f00e;
$fa-var-searchengin: \f3eb;
$fa-var-sellcast: \f2da;
$fa-var-sellsy: \f213;
$fa-var-server: \f233;
$fa-var-servicestack: \f3ec;
$fa-var-share: \f064;
$fa-var-share-all: \f367;
$fa-var-share-alt: \f1e0;
$fa-var-share-alt-square: \f1e1;
$fa-var-share-square: \f14d;
$fa-var-shekel-sign: \f20b;
$fa-var-shield: \f132;
$fa-var-shield-alt: \f3ed;
$fa-var-shield-check: \f2f7;
$fa-var-ship: \f21a;
$fa-var-shirtsinbulk: \f214;
$fa-var-shopping-bag: \f290;
$fa-var-shopping-basket: \f291;
$fa-var-shopping-cart: \f07a;
$fa-var-shower: \f2cc;
$fa-var-sign-in: \f090;
$fa-var-sign-in-alt: \f2f6;
$fa-var-sign-language: \f2a7;
$fa-var-sign-out: \f08b;
$fa-var-sign-out-alt: \f2f5;
$fa-var-signal: \f012;
$fa-var-simplybuilt: \f215;
$fa-var-sistrix: \f3ee;
$fa-var-sitemap: \f0e8;
$fa-var-skyatlas: \f216;
$fa-var-skype: \f17e;
$fa-var-slack: \f198;
$fa-var-slack-hash: \f3ef;
$fa-var-sliders-h: \f1de;
$fa-var-sliders-h-square: \f3f0;
$fa-var-sliders-v: \f3f1;
$fa-var-sliders-v-square: \f3f2;
$fa-var-slideshare: \f1e7;
$fa-var-smile: \f118;
$fa-var-snapchat: \f2ab;
$fa-var-snapchat-ghost: \f2ac;
$fa-var-snapchat-square: \f2ad;
$fa-var-snowflake: \f2dc;
$fa-var-sort: \f0dc;
$fa-var-sort-alpha-down: \f15d;
$fa-var-sort-alpha-up: \f15e;
$fa-var-sort-amount-down: \f160;
$fa-var-sort-amount-up: \f161;
$fa-var-sort-down: \f0dd;
$fa-var-sort-numeric-down: \f162;
$fa-var-sort-numeric-up: \f163;
$fa-var-sort-up: \f0de;
$fa-var-soundcloud: \f1be;
$fa-var-space-shuttle: \f197;
$fa-var-spade: \f2f4;
$fa-var-speakap: \f3f3;
$fa-var-spinner: \f110;
$fa-var-spinner-third: \f3f4;
$fa-var-spotify: \f1bc;
$fa-var-square: \f0c8;
$fa-var-stack-exchange: \f18d;
$fa-var-stack-overflow: \f16c;
$fa-var-star: \f005;
$fa-var-star-exclamation: \f2f3;
$fa-var-star-half: \f089;
$fa-var-staylinked: \f3f5;
$fa-var-steam: \f1b6;
$fa-var-steam-square: \f1b7;
$fa-var-steam-symbol: \f3f6;
$fa-var-step-backward: \f048;
$fa-var-step-forward: \f051;
$fa-var-stethoscope: \f0f1;
$fa-var-sticker-mule: \f3f7;
$fa-var-sticky-note: \f249;
$fa-var-stop: \f04d;
$fa-var-stop-circle: \f28d;
$fa-var-stopwatch: \f2f2;
$fa-var-strava: \f428;
$fa-var-street-view: \f21d;
$fa-var-strikethrough: \f0cc;
$fa-var-stripe: \f429;
$fa-var-stripe-s: \f42a;
$fa-var-studiovinari: \f3f8;
$fa-var-stumbleupon: \f1a4;
$fa-var-stumbleupon-circle: \f1a3;
$fa-var-subscript: \f12c;
$fa-var-subway: \f239;
$fa-var-suitcase: \f0f2;
$fa-var-sun: \f185;
$fa-var-superpowers: \f2dd;
$fa-var-superscript: \f12b;
$fa-var-supple: \f3f9;
$fa-var-sync: \f021;
$fa-var-sync-alt: \f2f1;
$fa-var-table: \f0ce;
$fa-var-tablet: \f10a;
$fa-var-tablet-alt: \f3fa;
$fa-var-tablet-android: \f3fb;
$fa-var-tablet-android-alt: \f3fc;
$fa-var-tachometer: \f0e4;
$fa-var-tachometer-alt: \f3fd;
$fa-var-tag: \f02b;
$fa-var-tags: \f02c;
$fa-var-tasks: \f0ae;
$fa-var-taxi: \f1ba;
$fa-var-telegram: \f2c6;
$fa-var-telegram-plane: \f3fe;
$fa-var-tencent-weibo: \f1d5;
$fa-var-terminal: \f120;
$fa-var-text-height: \f034;
$fa-var-text-width: \f035;
$fa-var-th: \f00a;
$fa-var-th-large: \f009;
$fa-var-th-list: \f00b;
$fa-var-themeisle: \f2b2;
$fa-var-thermometer-empty: \f2cb;
$fa-var-thermometer-full: \f2c7;
$fa-var-thermometer-half: \f2c9;
$fa-var-thermometer-quarter: \f2ca;
$fa-var-thermometer-three-quarters: \f2c8;
$fa-var-thumbs-down: \f165;
$fa-var-thumbs-up: \f164;
$fa-var-thumbtack: \f08d;
$fa-var-ticket: \f145;
$fa-var-ticket-alt: \f3ff;
$fa-var-times: \f00d;
$fa-var-times-circle: \f057;
$fa-var-times-hexagon: \f2ee;
$fa-var-times-octagon: \f2f0;
$fa-var-times-square: \f2d3;
$fa-var-tint: \f043;
$fa-var-toggle-off: \f204;
$fa-var-toggle-on: \f205;
$fa-var-trademark: \f25c;
$fa-var-train: \f238;
$fa-var-transgender: \f224;
$fa-var-transgender-alt: \f225;
$fa-var-trash: \f1f8;
$fa-var-trash-alt: \f2ed;
$fa-var-tree: \f1bb;
$fa-var-tree-alt: \f400;
$fa-var-trello: \f181;
$fa-var-triangle: \f2ec;
$fa-var-tripadvisor: \f262;
$fa-var-trophy: \f091;
$fa-var-trophy-alt: \f2eb;
$fa-var-truck: \f0d1;
$fa-var-tty: \f1e4;
$fa-var-tumblr: \f173;
$fa-var-tumblr-square: \f174;
$fa-var-tv: \f26c;
$fa-var-tv-retro: \f401;
$fa-var-twitch: \f1e8;
$fa-var-twitter: \f099;
$fa-var-twitter-square: \f081;
$fa-var-typo3: \f42b;
$fa-var-uber: \f402;
$fa-var-uikit: \f403;
$fa-var-umbrella: \f0e9;
$fa-var-underline: \f0cd;
$fa-var-undo: \f0e2;
$fa-var-undo-alt: \f2ea;
$fa-var-uniregistry: \f404;
$fa-var-universal-access: \f29a;
$fa-var-university: \f19c;
$fa-var-unlink: \f127;
$fa-var-unlock: \f09c;
$fa-var-unlock-alt: \f13e;
$fa-var-untappd: \f405;
$fa-var-upload: \f093;
$fa-var-usb: \f287;
$fa-var-usd-circle: \f2e8;
$fa-var-usd-square: \f2e9;
$fa-var-user: \f007;
$fa-var-user-alt: \f406;
$fa-var-user-circle: \f2bd;
$fa-var-user-md: \f0f0;
$fa-var-user-plus: \f234;
$fa-var-user-secret: \f21b;
$fa-var-user-times: \f235;
$fa-var-users: \f0c0;
$fa-var-ussunnah: \f407;
$fa-var-utensil-fork: \f2e3;
$fa-var-utensil-knife: \f2e4;
$fa-var-utensil-spoon: \f2e5;
$fa-var-utensils: \f2e7;
$fa-var-utensils-alt: \f2e6;
$fa-var-vaadin: \f408;
$fa-var-venus: \f221;
$fa-var-venus-double: \f226;
$fa-var-venus-mars: \f228;
$fa-var-viacoin: \f237;
$fa-var-viadeo: \f2a9;
$fa-var-viadeo-square: \f2aa;
$fa-var-viber: \f409;
$fa-var-video: \f03d;
$fa-var-vimeo: \f40a;
$fa-var-vimeo-square: \f194;
$fa-var-vimeo-v: \f27d;
$fa-var-vine: \f1ca;
$fa-var-vk: \f189;
$fa-var-vnv: \f40b;
$fa-var-volume-down: \f027;
$fa-var-volume-mute: \f2e2;
$fa-var-volume-off: \f026;
$fa-var-volume-up: \f028;
$fa-var-vuejs: \f41f;
$fa-var-watch: \f2e1;
$fa-var-weibo: \f18a;
$fa-var-weixin: \f1d7;
$fa-var-whatsapp: \f232;
$fa-var-whatsapp-square: \f40c;
$fa-var-wheelchair: \f193;
$fa-var-whmcs: \f40d;
$fa-var-wifi: \f1eb;
$fa-var-wikipedia-w: \f266;
$fa-var-window: \f40e;
$fa-var-window-alt: \f40f;
$fa-var-window-close: \f410;
$fa-var-window-maximize: \f2d0;
$fa-var-window-minimize: \f2d1;
$fa-var-window-restore: \f2d2;
$fa-var-windows: \f17a;
$fa-var-won-sign: \f159;
$fa-var-wordpress: \f19a;
$fa-var-wordpress-simple: \f411;
$fa-var-wpbeginner: \f297;
$fa-var-wpexplorer: \f2de;
$fa-var-wpforms: \f298;
$fa-var-wrench: \f0ad;
$fa-var-xbox: \f412;
$fa-var-xing: \f168;
$fa-var-xing-square: \f169;
$fa-var-y-combinator: \f23b;
$fa-var-yahoo: \f19e;
$fa-var-yandex: \f413;
$fa-var-yandex-international: \f414;
$fa-var-yelp: \f1e9;
$fa-var-yen-sign: \f157;
$fa-var-yoast: \f2b1;
$fa-var-youtube: \f167;

View File

@@ -1,21 +0,0 @@
/*!
* Font Awesome Pro 5.0.2 by @fontawesome - http://fontawesome.com
* License - http://fontawesome.com/license (Commercial License)
*/
@import 'variables';
@font-face {
font-family: 'Font Awesome 5 Brands';
font-style: normal;
font-weight: normal;
src: url('#{$fa-font-path}/fa-brands-400.eot');
src: url('#{$fa-font-path}/fa-brands-400.eot?#iefix') format('embedded-opentype'),
url('#{$fa-font-path}/fa-brands-400.woff2') format('woff2'),
url('#{$fa-font-path}/fa-brands-400.woff') format('woff'),
url('#{$fa-font-path}/fa-brands-400.ttf') format('truetype'),
url('#{$fa-font-path}/fa-brands-400.svg#fontawesome') format('svg');
}
.fab {
font-family: 'Font Awesome 5 Brands';
}

View File

@@ -1,22 +0,0 @@
/*!
* Font Awesome Pro 5.0.2 by @fontawesome - http://fontawesome.com
* License - http://fontawesome.com/license (Commercial License)
*/
@import 'variables';
@font-face {
font-family: 'Font Awesome 5 Pro';
font-style: normal;
font-weight: 300;
src: url('#{$fa-font-path}/fa-light-300.eot');
src: url('#{$fa-font-path}/fa-light-300.eot?#iefix') format('embedded-opentype'),
url('#{$fa-font-path}/fa-light-300.woff2') format('woff2'),
url('#{$fa-font-path}/fa-light-300.woff') format('woff'),
url('#{$fa-font-path}/fa-light-300.ttf') format('truetype'),
url('#{$fa-font-path}/fa-light-300.svg#fontawesome') format('svg');
}
.fal {
font-family: 'Font Awesome 5 Pro';
font-weight: 300;
}

View File

@@ -1,22 +0,0 @@
/*!
* Font Awesome Pro 5.0.2 by @fontawesome - http://fontawesome.com
* License - http://fontawesome.com/license (Commercial License)
*/
@import 'variables';
@font-face {
font-family: 'Font Awesome 5 Pro';
font-style: normal;
font-weight: 400;
src: url('#{$fa-font-path}/fa-regular-400.eot');
src: url('#{$fa-font-path}/fa-regular-400.eot?#iefix') format('embedded-opentype'),
url('#{$fa-font-path}/fa-regular-400.woff2') format('woff2'),
url('#{$fa-font-path}/fa-regular-400.woff') format('woff'),
url('#{$fa-font-path}/fa-regular-400.ttf') format('truetype'),
url('#{$fa-font-path}/fa-regular-400.svg#fontawesome') format('svg');
}
.far {
font-family: 'Font Awesome 5 Pro';
font-weight: 400;
}

View File

@@ -1,23 +0,0 @@
/*!
* Font Awesome Pro 5.0.2 by @fontawesome - http://fontawesome.com
* License - http://fontawesome.com/license (Commercial License)
*/
@import 'variables';
@font-face {
font-family: 'Font Awesome 5 Pro';
font-style: normal;
font-weight: 900;
src: url('#{$fa-font-path}/fa-solid-900.eot');
src: url('#{$fa-font-path}/fa-solid-900.eot?#iefix') format('embedded-opentype'),
url('#{$fa-font-path}/fa-solid-900.woff2') format('woff2'),
url('#{$fa-font-path}/fa-solid-900.woff') format('woff'),
url('#{$fa-font-path}/fa-solid-900.ttf') format('truetype'),
url('#{$fa-font-path}/fa-solid-900.svg#fontawesome') format('svg');
}
.fa,
.fas {
font-family: 'Font Awesome 5 Pro';
font-weight: 900;
}

View File

@@ -1,16 +0,0 @@
/*!
* Font Awesome Pro 5.0.2 by @fontawesome - http://fontawesome.com
* License - http://fontawesome.com/license (Commercial License)
*/
@import 'variables';
@import 'mixins';
@import 'core';
@import 'larger';
@import 'fixed-width';
@import 'list';
@import 'bordered-pulled';
@import 'animated';
@import 'rotated-flipped';
@import 'stacked';
@import 'icons';
@import 'screen-reader';

View File

@@ -39,6 +39,7 @@ return [
'options.google' => 'Google',
'options.ddg' => 'DuckDuckGo',
'options.bing' => 'Bing',
'options.qwant' => 'Qwant',
'options.startpage' => 'Página inicial',
'options.yes' => 'Sim',
'options.no' => 'Não',

View File

@@ -21,6 +21,7 @@ return array (
'options.google' => 'Google',
'options.ddg' => 'DuckDuckGo',
'options.bing' => 'Bing',
'options.qwant' => 'Qwant',
'options.yes' => 'Ja',
'options.no' => 'Nein',
'buttons.save' => 'Speichern',

View File

@@ -22,7 +22,7 @@ return [
'settings.window_target.one' => 'Open in the same tab',
'settings.window_target.new' => 'Open in a new tab',
'settings.homepage_search' => 'Homepage Search',
'settings.search_provider' => 'Search Provider',
'settings.search_provider' => 'Default Search Provider',
'settings.language' => 'Language',
'settings.reset' => 'Reset back to default',
'settings.remove' => 'Remove',
@@ -39,9 +39,11 @@ return [
'options.google' => 'Google',
'options.ddg' => 'DuckDuckGo',
'options.bing' => 'Bing',
'options.qwant' => 'Qwant',
'options.startpage' => 'StartPage',
'options.yes' => 'Yes',
'options.no' => 'No',
'options.nzbhydra' => 'NZBHydra',
'buttons.save' => 'Save',
'buttons.cancel' => 'Cancel',

View File

@@ -21,6 +21,7 @@ return array (
'options.google' => 'Google',
'options.ddg' => 'DuckDuckGo',
'options.bing' => 'Bing',
'options.qwant' => 'Qwant',
'options.yes' => 'Sí',
'options.no' => 'No',
'buttons.save' => 'Guardar',

View File

@@ -32,6 +32,7 @@ return array (
'options.google' => 'Google',
'options.ddg' => 'DuckDuckGo',
'options.bing' => 'Bing',
'options.qwant' => 'Qwant',
'options.startpage' => 'Etusivu',
'options.yes' => 'Kyllä',
'options.no' => 'Ei',
@@ -111,4 +112,4 @@ return array (
'alert.success.user_updated' => 'Käyttäjä päivitetty onnistuneesti',
'alert.success.user_deleted' => 'Käyttäjä poistettu onnistuneesti',
'alert.success.user_restored' => 'Käyttäjä palautettu onnistuneesti',
);
);

View File

@@ -30,6 +30,7 @@ return array (
'options.google' => 'Google',
'options.ddg' => 'DuckDuckGo',
'options.bing' => 'Bing',
'options.qwant' => 'Qwant',
'options.startpage' => 'Page d\'accueil',
'options.yes' => 'Oui',
'options.no' => 'Non',

View File

@@ -33,6 +33,7 @@ return [
'options.google' => 'Google',
'options.ddg' => 'DuckDuckGo',
'options.bing' => 'Bing',
'options.qwant' => 'Qwant',
'options.yes' => 'Si',
'options.no' => 'No',

View File

@@ -12,38 +12,48 @@ return [
'settings.system' => 'Systeem',
'settings.appearance' => 'Uiterlijk',
'settings.miscellaneous' => 'Overige',
'settings.support' => 'Ondersteuning',
'settings.donate' => 'Doneren',
'settings.version' => 'Versie',
'settings.background_image' => 'Achtergrondafbeelding',
'settings.window_target' => 'Link opent in',
'settings.window_target.current' => 'In de huidige tab openen',
'settings.window_target.one' => 'In dezelfde tab openen',
'settings.window_target.new' => 'In een nieuwe tab openen',
'settings.homepage_search' => 'Zoeken op thuispagina',
'settings.search_provider' => 'Zoekaanbieder',
'settings.language' => 'Taal',
'settings.reset' => 'Standaard instellingen herstellen',
'settings.reset' => 'Standaardinstellingen herstellen',
'settings.remove' => 'Verwijderen',
'settings.search' => 'zoeken',
'settings.no_items' => 'Geen items gevonden',
'settings.label' => 'Label',
'settings.value' => 'Waarde',
'settings.edit' => 'Bewerken',
'settings.view' => 'Weergeven',
'settings.label' => 'Label',
'settings.value' => 'Waarde',
'settings.edit' => 'Bewerken',
'settings.view' => 'Weergeven',
'options.none' => '- niet ingesteld -',
'options.google' => 'Google',
'options.ddg' => 'DuckDuckGo',
'options.bing' => 'Bing',
'options.qwant' => 'Qwant',
'options.yes' => 'Ja',
'options.no' => 'Nee',
'options.nzbhydra' => 'NZBHydra',
'buttons.save' => 'Opslaan',
'buttons.cancel' => 'Annuleren',
'buttons.add' => 'Toevoegen',
'buttons.upload' => 'Een bestand uploaden',
'buttons.downloadapps' => 'Applicatielijst bijwerken',
'dash.pin_item' => 'Item aan dashboard vastpinnen',
'dash.no_apps' => 'Er zijn momenteel geen vastgepinde toepassingen, :link1 of :link2',
'dash.link1' => 'Voeg hier een toepassing toe',
'dash.no_apps' => 'Er zijn momenteel geen vastgepinde applicaties, :link1 of :link2',
'dash.link1' => 'Voeg hier een applicatie toe',
'dash.link2' => 'Een item aan het dashboard vastpinnen',
'dash.pinned_items' => 'Vastgepinde Items',
@@ -66,26 +76,29 @@ return [
'apps.tag_name' => 'Tag naam',
'apps.tags' => 'Tags',
'apps.override' => 'Indien anders dan hoofd-url',
'apps.preview' => 'Voorbeeld',
'apps.apptype' => 'Applicatietype',
'user.user_list' => 'Gebruikers',
'user.add_user' => 'Gebruiker toevoegen',
'user.username' => 'Gebruikersnaam',
'user.avatar' => 'Avatar',
'user.email' => 'Email',
'user.email' => 'E-mail',
'user.password_confirm' => 'Bevestig wachtwoord',
'user.secure_front' => 'Sta publieke toegang toe tot voorkant - Alleen geforceerd indien een wachtwoord is ingesteld.',
'user.autologin' => 'Sta inloggen vanaf een specifieke URL toe. Iedereen met de link kan inloggen.',
'url' => 'URL',
'title' => 'Titel',
'delete' => 'Verwijderen',
'delete' => 'Verwijderen',
'optional' => 'Optioneel',
'restore' => 'Herstellen',
'restore' => 'Herstellen',
'alert.success.item_created' => 'Item met succes aangemaakt',
'alert.success.item_updated' => 'Item met succes bewerkt',
'alert.success.item_deleted' => 'Item met succes verwijderd',
'alert.success.item_restored' => 'Item met succes hersteld',
'alert.success.updating' => 'Applicatielijst wordt bijgewerkt',
'alert.success.tag_created' => 'Tag met succes aangemaakt',
'alert.success.tag_updated' => 'Tag met succes bewerkt',
@@ -94,7 +107,7 @@ return [
'alert.success.setting_updated' => 'Deze instelling is met succes gewijzigd',
'alert.error.not_exist' => 'Deze instelling bestaat niet.',
'alert.success.user_created' => 'Gebruiker met succes aangemaakt',
'alert.success.user_updated' => 'Gebruiker met succes bewerkt',
'alert.success.user_deleted' => 'Gebruiker met succes verwijderd',

View File

@@ -49,7 +49,7 @@ return [
'ip' => ':attribute moet een geldig IP-adres zijn.',
'ipv4' => ':attribute moet een geldig IPv4-adres zijn.',
'ipv6' => ':attribute moet een geldig IPv6-adres zijn.',
'json' => ':attribute moet een geldige JSON-reeks zijn.',
'json' => ':attribute moet een geldige JSON-tekenreekswaarde zijn.',
'max' => [
'numeric' => ':attribute mag niet groter dan :max zijn.',
'file' => ':attribute mag niet groter dan :max kilobyte in omvang zijn.',
@@ -82,7 +82,7 @@ return [
'string' => ':attribute moet :size karakters bevatten.',
'array' => ':attribute moet :size items bevatten.',
],
'string' => ':attribute moet een reekswaarde zijn.',
'string' => ':attribute moet een tekenreekswaarde zijn.',
'timezone' => ':attribute moet een geldige zone bevatten.',
'unique' => ':attribute is reeds in gebruik.',
'uploaded' => 'Het uploaden van :attribute is niet gelukt.',

View File

@@ -33,6 +33,7 @@ return [
'options.google' => 'Google',
'options.ddg' => 'DuckDuckGo',
'options.bing' => 'Bing',
'options.qwant' => 'Qwant',
'options.yes' => 'Ja',
'options.no' => 'Nei',

View File

@@ -33,6 +33,7 @@ return [
'options.google' => 'Google',
'options.ddg' => 'DuckDuckGo',
'options.bing' => 'Bing',
'options.qwant' => 'Qwant',
'options.yes' => 'Tak',
'options.no' => 'Nie',

116
resources/lang/pt/app.php Normal file
View File

@@ -0,0 +1,116 @@
<?php
return [
/*
|--------------------------------------------------------------------------
| App Language Lines
|--------------------------------------------------------------------------
|
*/
'settings.system' => 'Sistema',
'settings.appearance' => 'Aparência',
'settings.miscellaneous' => 'Diversos',
'settings.support' => 'Ajuda',
'settings.donate' => 'Doar',
'settings.version' => 'Versão',
'settings.background_image' => 'Imagem de fundo',
'settings.window_target' => 'O link abre em',
'settings.window_target.current' => 'Abrir neste separador',
'settings.window_target.one' => 'Abrir no mesmo separador',
'settings.window_target.new' => 'Abrir num novo separador',
'settings.homepage_search' => 'Pesquisa na página inicial',
'settings.search_provider' => 'Provedor de pesquisa',
'settings.language' => 'Linguagem',
'settings.reset' => 'Restabelecer de volta ao inicial',
'settings.remove' => 'Remover',
'settings.search' => 'procura',
'settings.no_items' => 'Nenhum item encontrado',
'settings.label' => 'Etiqueta',
'settings.value' => 'Valor',
'settings.edit' => 'Editar',
'settings.view' => 'Ver',
'options.none' => '- não definido -',
'options.google' => 'Google',
'options.ddg' => 'DuckDuckGo',
'options.bing' => 'Bing',
'options.qwant' => 'Qwant',
'options.startpage' => 'StartPage',
'options.yes' => 'Sim',
'options.no' => 'Não',
'buttons.save' => 'Guardar',
'buttons.cancel' => 'Cancelar',
'buttons.add' => 'Adicionar',
'buttons.upload' => 'Carregar um ficheiro',
'buttons.downloadapps' => 'Atualizar lista de aplicações',
'dash.pin_item' => 'Afixar item na dashboard',
'dash.no_apps' => 'Atualmente não existem aplicações afixadas, :link1 or :link2',
'dash.link1' => 'Adicionar uma aplicação aqui',
'dash.link2' => 'Afixar um item na dashboard',
'dash.pinned_items' => 'Items Afixados',
'apps.app_list' => 'Lista de aplicações',
'apps.view_trash' => 'Ver lixo',
'apps.add_application' => 'Adicionar aplicação',
'apps.application_name' => 'Nome da aplicação',
'apps.colour' => 'Cor',
'apps.icon' => 'Ícone',
'apps.pinned' => 'Afixado',
'apps.title' => 'Título',
'apps.hex' => 'Cor hexadecimal',
'apps.username' => 'Username',
'apps.password' => 'Palavra-passe',
'apps.config' => 'Configuração',
'apps.apikey' => 'API Key',
'apps.enable' => 'Ativar',
'apps.tag_list' => 'Lista de tags',
'apps.add_tag' => 'Adicionar tag',
'apps.tag_name' => 'Nome da tag',
'apps.tags' => 'Tags',
'apps.override' => 'Se diferente do URL principal',
'apps.preview' => 'Pré-visualizar',
'apps.apptype' => 'Tipo de Aplicação',
'user.user_list' => 'Utilizadores',
'user.add_user' => 'Adicionar utilizador',
'user.username' => 'Username',
'user.avatar' => 'Avatar',
'user.email' => 'Email',
'user.password_confirm' => 'Confirmar Palavra-passe',
'user.secure_front' => 'Permitir acesso público à frente - Só é forçado se existir uma palavra-passe definida.',
'user.autologin' => 'Permitir o início de sessão a partir de um URL específico. Qualquer pessoa com o link pode iniciar a sessão.',
'url' => 'URL',
'title' => 'Título',
'delete' => 'Apagar',
'optional' => 'Opcional',
'restore' => 'Restaurar',
'alert.success.item_created' => 'Item criado com sucesso',
'alert.success.item_updated' => 'Item atualizado com sucesso',
'alert.success.item_deleted' => 'Item apagado com sucesso',
'alert.success.item_restored' => 'Item restaurado com sucesso',
'alert.success.updating' => 'A atualizar a lista de aplicações',
'alert.success.tag_created' => 'Tag criada com sucesso',
'alert.success.tag_updated' => 'Tag atualizada com sucesso',
'alert.success.tag_deleted' => 'Tag apagada com sucesso',
'alert.success.tag_restored' => 'Tag restaurada com sucesso',
'alert.success.setting_updated' => 'Definição editada com sucesso',
'alert.error.not_exist' => 'Esta definição não existe.',
'alert.success.user_created' => 'Utilizador criada com sucesso',
'alert.success.user_updated' => 'Utilizador atualizada com sucesso',
'alert.success.user_deleted' => 'Utilizador apagada com sucesso',
'alert.success.user_restored' => 'Utilizador restaurada com sucesso',
];

View File

@@ -0,0 +1,19 @@
<?php
return [
/*
|--------------------------------------------------------------------------
| Authentication Language Lines
|--------------------------------------------------------------------------
|
| The following language lines are used during authentication for various
| messages that we need to display to the user. You are free to modify
| these language lines according to your application's requirements.
|
*/
'failed' => 'Estas credenciais não se encontram nos nossos registos.',
'throttle' => 'Demasiadas tentativas de início de sessão. Por favor tente de novo dentro de :seconds segundos',
];

View File

@@ -0,0 +1,19 @@
<?php
return [
/*
|--------------------------------------------------------------------------
| Pagination Language Lines
|--------------------------------------------------------------------------
|
| The following language lines are used by the paginator library to build
| the simple pagination links. You are free to change them to anything
| you want to customize your views to better match your application.
|
*/
'previous' => '&laquo; Anterior',
'next' => 'Próximo &raquo;',
];

View File

@@ -0,0 +1,22 @@
<?php
return [
/*
|--------------------------------------------------------------------------
| Password Reset Language Lines
|--------------------------------------------------------------------------
|
| The following language lines are the default lines which match reasons
| that are given by the password broker for a password update attempt
| has failed, such as for an invalid token or invalid new password.
|
*/
'password' => 'As palavras-passe necessitam de conter no mínimo seis caracteres e igualar a confirmação.',
'reset' => 'A sua palavra-passe foi restabelecida!',
'sent' => 'Enviámos-lhe por email o seu link de restauro de palavra-passe!',
'token' => 'Este token de restabelecimento de palavra-passe é inválido.',
'user' => "Não conseguimos encontrar nenhum utilizador com este endereço de email.",
];

View File

@@ -0,0 +1,121 @@
<?php
return [
/*
|--------------------------------------------------------------------------
| Validation Language Lines
|--------------------------------------------------------------------------
|
| The following language lines contain the default error messages used by
| the validator class. Some of these rules have multiple versions such
| as the size rules. Feel free to tweak each of these messages here.
|
*/
'accepted' => 'The :attribute must be accepted.',
'active_url' => 'The :attribute is not a valid URL.',
'after' => 'The :attribute must be a date after :date.',
'after_or_equal' => 'The :attribute must be a date after or equal to :date.',
'alpha' => 'The :attribute may only contain letters.',
'alpha_dash' => 'The :attribute may only contain letters, numbers, and dashes.',
'alpha_num' => 'The :attribute may only contain letters and numbers.',
'array' => 'The :attribute must be an array.',
'before' => 'The :attribute must be a date before :date.',
'before_or_equal' => 'The :attribute must be a date before or equal to :date.',
'between' => [
'numeric' => 'The :attribute must be between :min and :max.',
'file' => 'The :attribute must be between :min and :max kilobytes.',
'string' => 'The :attribute must be between :min and :max characters.',
'array' => 'The :attribute must have between :min and :max items.',
],
'boolean' => 'The :attribute field must be true or false.',
'confirmed' => 'The :attribute confirmation does not match.',
'date' => 'The :attribute is not a valid date.',
'date_format' => 'The :attribute does not match the format :format.',
'different' => 'The :attribute and :other must be different.',
'digits' => 'The :attribute must be :digits digits.',
'digits_between' => 'The :attribute must be between :min and :max digits.',
'dimensions' => 'The :attribute has invalid image dimensions.',
'distinct' => 'The :attribute field has a duplicate value.',
'email' => 'The :attribute must be a valid email address.',
'exists' => 'The selected :attribute is invalid.',
'file' => 'The :attribute must be a file.',
'filled' => 'The :attribute field must have a value.',
'image' => 'The :attribute must be an image.',
'in' => 'The selected :attribute is invalid.',
'in_array' => 'The :attribute field does not exist in :other.',
'integer' => 'The :attribute must be an integer.',
'ip' => 'The :attribute must be a valid IP address.',
'ipv4' => 'The :attribute must be a valid IPv4 address.',
'ipv6' => 'The :attribute must be a valid IPv6 address.',
'json' => 'The :attribute must be a valid JSON string.',
'max' => [
'numeric' => 'The :attribute may not be greater than :max.',
'file' => 'The :attribute may not be greater than :max kilobytes.',
'string' => 'The :attribute may not be greater than :max characters.',
'array' => 'The :attribute may not have more than :max items.',
],
'mimes' => 'The :attribute must be a file of type: :values.',
'mimetypes' => 'The :attribute must be a file of type: :values.',
'min' => [
'numeric' => 'The :attribute must be at least :min.',
'file' => 'The :attribute must be at least :min kilobytes.',
'string' => 'The :attribute must be at least :min characters.',
'array' => 'The :attribute must have at least :min items.',
],
'not_in' => 'The selected :attribute is invalid.',
'numeric' => 'The :attribute must be a number.',
'present' => 'The :attribute field must be present.',
'regex' => 'The :attribute format is invalid.',
'required' => 'The :attribute field is required.',
'required_if' => 'The :attribute field is required when :other is :value.',
'required_unless' => 'The :attribute field is required unless :other is in :values.',
'required_with' => 'The :attribute field is required when :values is present.',
'required_with_all' => 'The :attribute field is required when :values is present.',
'required_without' => 'The :attribute field is required when :values is not present.',
'required_without_all' => 'The :attribute field is required when none of :values are present.',
'same' => 'The :attribute and :other must match.',
'size' => [
'numeric' => 'The :attribute must be :size.',
'file' => 'The :attribute must be :size kilobytes.',
'string' => 'The :attribute must be :size characters.',
'array' => 'The :attribute must contain :size items.',
],
'string' => 'The :attribute must be a string.',
'timezone' => 'The :attribute must be a valid zone.',
'unique' => 'The :attribute has already been taken.',
'uploaded' => 'The :attribute failed to upload.',
'url' => 'The :attribute format is invalid.',
/*
|--------------------------------------------------------------------------
| Custom Validation Language Lines
|--------------------------------------------------------------------------
|
| Here you may specify custom validation messages for attributes using the
| convention "attribute.rule" to name the lines. This makes it quick to
| specify a specific custom language line for a given attribute rule.
|
*/
'custom' => [
'attribute-name' => [
'rule-name' => 'custom-message',
],
],
/*
|--------------------------------------------------------------------------
| Custom Validation Attributes
|--------------------------------------------------------------------------
|
| The following language lines are used to swap attribute place-holders
| with something more reader friendly such as E-Mail Address instead
| of "email". This simply helps us make messages a little cleaner.
|
*/
'attributes' => [],
];

View File

@@ -31,6 +31,7 @@ return array (
'options.google' => 'Google',
'options.ddg' => 'DuckDuckGo',
'options.bing' => 'Bing',
'options.qwant' => 'Qwant',
'options.startpage' => 'Startsida',
'options.yes' => 'Ja',
'options.no' => 'Nej',
@@ -110,4 +111,4 @@ return array (
'alert.success.user_updated' => 'Anvädare uppdaterad',
'alert.success.user_deleted' => 'Användare borttagen',
'alert.success.user_restored' => 'Användare återställd',
);
);

View File

@@ -33,6 +33,7 @@ return [
'options.google' => 'Google',
'options.ddg' => 'DuckDuckGo',
'options.bing' => 'Bing',
'options.qwant' => 'Qwant',
'options.yes' => 'Evet',
'options.no' => 'Hayır',

View File

@@ -15,7 +15,7 @@ $user = \App\User::currentUser();
<img class="user-img" src="{{ asset('/img/heimdall-icon-small.png') }}" />
@endif
{{ $user->username }}
<input id="password" type="password" class="form-control" name="password" required>
<input id="password" type="password" class="form-control" name="password" autofocus required>
<button type="submit" class="btn btn-primary">Login</button>
</div>
</div>

View File

@@ -1,17 +1,17 @@
<section class="item-container{{ $app->droppable }}" data-id="{{ $app->id }}">
<div class="item" style="background-color: {{ $app->colour }}">
@if($app->icon)
<img class="app-icon" src="{{ asset('/storage/'.$app->icon) }}" />
<img class="app-icon" src="{{ asset('/storage/'.str_replace('supportedapps', 'icons', $app->icon)) }}" />
@else
<img class="app-icon" src="{{ asset('/img/heimdall-icon-small.png') }}" />
@endif
<div class="details">
<div class="title{{ title_color($app->colour) }}">{{ $app->title }}</div>
@if($app->enabled())
<div data-id="{{ $app->id }}" data-dataonly="{{ $app->getconfig()->dataonly ?? '0' }}" class="livestats-container"></div>
<div data-id="{{ $app->id }}" data-dataonly="{{ $app->getconfig()->dataonly ?? '0' }}" class="livestats-container{{ title_color($app->colour) }}"></div>
@endif
</div>
<a class="link{{ title_color($app->colour) }}"{!! $app->link_target !!} href="{{ $app->link }}"><i class="fas {{ $app->link_icon }}"></i></a>
<a title="{{ App\Item::getApplicationDescription($app->class) }}" class="link{{ title_color($app->colour) }}"{!! $app->link_target !!} href="{{ $app->link }}"><i class="fas {{ $app->link_icon }}"></i></a>
</div>
<a class="item-edit" href="{{ route($app->link_type.'.edit', [ $app->id ], false) }}"><i class="fas fa-pencil"></i></a>

View File

@@ -81,13 +81,23 @@
@if(isset($item) && $item->enhanced())
<div id="sapconfig" style="display: block;">
@if(isset($item))
@include('SupportedApps::'.$item->getconfig()->name.'.config')
@endif
</div>
@elseif(old('class') && App\Item::isEnhanced(old('class')))
<div id="sapconfig" style="display: block;">
@include('SupportedApps::'.App\Item::nameFromClass(old('class')).'.config')
</div>
@else
<div id="sapconfig"></div>
@endif
</div>

View File

@@ -26,6 +26,12 @@
appload(appvalue);
}
});
// initial load
$('#tile-preview .title').html($('#appname').val());
$('#tile-preview .item').css('backgroundColor', $('#appcolour').val());
$('#tile-preview .app-icon').attr('src', $('#appimage img').attr('src'));
// Updates
$('#appname').on('keyup change', function(e) {
$('#tile-preview .title').html($(this).val());
})
@@ -39,7 +45,10 @@
$('.tags').select2();
function appload(appvalue) {
$.post('{{ route('appload') }}', { app: appvalue }, function(data) {
if(appvalue == 'None') {
$('#sapconfig').html('').hide();
} else {
$.post('{{ route('appload') }}', { app: appvalue }, function(data) {
// Main details
$('#appimage').html("<img src='"+data.iconview+"' /><input type='hidden' name='icon' value='"+data.icon+"' />");
$('input[name=colour]').val(data.colour);
@@ -53,8 +62,11 @@
$.get('/view/'+data.config, function(getdata) {
$('#sapconfig').html(getdata).show();
});
} else {
$('#sapconfig').html('').hide();
}
}, "json");
}
}

View File

@@ -27,7 +27,7 @@
<meta name="mobile-web-app-capable" content="yes">
<meta name="apple-mobile-web-app-capable" content="yes">
<link rel="stylesheet" href="{{ asset('css/app.css') }}" type="text/css" />
<script src="{{ asset('js/fontawesome.js') }}"></script>
</head>
<body>
<div id="app"{!! $alt_bg !!}>

View File

@@ -1 +1 @@
{!! App\Setting::search() !!}
{!! App\Search::form() !!}

View File

@@ -8,10 +8,10 @@
</header>
<div class="create">
{!! csrf_field() !!}
<!--<div class="input">
<?php /*<div class="input">
<label>Application name</label>
{!! Form::select('supported', \App\Item::supportedOptions(), array('placeholder' => 'Title','class' => 'form-control')) !!}
</div>-->
</div>*/ ?>
<div class="input">
{!! $setting->edit_value !!}

View File

@@ -52,15 +52,7 @@
</div>
</div>
@if(isset($item) && isset($item->config->view))
<div id="sapconfig" style="display: block;">
@if(isset($item))
@include('supportedapps.'.$item->config->view)
@endif
</div>
@else
<div id="sapconfig"></div>
@endif
</div>
<footer>

View File

@@ -30,7 +30,7 @@
@foreach($apps as $app)
<tr>
<td>{{ $app->title }}</td>
<td><a{{ $app->target }} href="{{ $app->url }}">{{ $app->link }}</a></td>
<td><a{{ $app->target }} href="/tag/{{ $app->url }}">{{ $app->link }}</a></td>
<td class="text-center"><a href="{!! route('tags.edit', [$app->id], false) !!}" title="{{ __('app.settings.edit') }} {!! $app->title !!}"><i class="fas fa-edit"></i></a></td>
<td class="text-center">
{!! Form::open(['method' => 'DELETE','route' => ['tags.destroy', $app->id],'style'=>'display:inline']) !!}

View File

@@ -29,6 +29,7 @@ Route::resources([
Route::get('tag/{slug}', 'TagController@show')->name('tags.show');
Route::get('tag/add/{tag}/{item}', 'TagController@add')->name('tags.add');
Route::get('tag/restore/{id}', 'TagController@restore')->name('tags.restore');
Route::get('items/pin/{id}', 'ItemController@pin')->name('items.pin');
@@ -41,6 +42,8 @@ Route::post('appload', 'ItemController@appload')->name('appload');
Route::post('test_config', 'ItemController@testConfig')->name('test_config');
Route::get('/get_stats/{id}', 'ItemController@getStats')->name('get_stats');
Route::get('/search', 'SearchController@index')->name('search');
Route::get('view/{name_view}', function ($name_view) {
return view('SupportedApps::'.$name_view)->render();
});

View File

@@ -7,6 +7,7 @@ php:
- 5.6
- 7.0
- 7.1
- 7.2
- hhvm # ignore errors, see below
# lock distro so new future defaults will not break the build

View File

@@ -1,5 +1,14 @@
# Changelog
## 1.4.1 (2019-04-09)
* Fix: Check if the function is declared before declaring it.
(#23 by @Niko9911)
* Improve test suite to also test against PHP 7.2 and
add test for base64 encoding and decoding filters.
(#22 by @arubacao and #25 by @Nyholm and @clue)
## 1.4.0 (2017-08-18)
* Feature / Fix: The `fun()` function does not pass filter parameter `null`

View File

@@ -27,13 +27,13 @@ These filters can be used to easily and efficiently perform various transformati
* and much more.
But let's face it:
Its API is [*difficult to work with*](http://php.net/manual/en/php-user-filter.filter.php)
and its documentation is [*subpar*](http://stackoverflow.com/questions/27103269/what-is-a-bucket-brigade).
Its API is [*difficult to work with*](https://www.php.net/manual/en/php-user-filter.filter.php)
and its documentation is [*subpar*](https://stackoverflow.com/questions/27103269/what-is-a-bucket-brigade).
This combined means its powerful features are often neglected.
This project aims to make these features more accessible to a broader audience.
* **Lightweight, SOLID design** -
Provides a thin abstraction that is [*just good enough*](http://en.wikipedia.org/wiki/Principle_of_good_enough)
Provides a thin abstraction that is [*just good enough*](https://en.wikipedia.org/wiki/Principle_of_good_enough)
and does not get in your way.
Custom filters require trivial effort.
* **Good test coverage** -
@@ -141,7 +141,7 @@ Filter\append($stream, function ($chunk) {
```
> Note that once a filter has been added to stream, the stream can no longer be passed to
> [`stream_select()`](http://php.net/manual/en/function.stream-select.php)
> [`stream_select()`](https://www.php.net/manual/en/function.stream-select.php)
> (and family).
>
> > Warning: stream_select(): cannot cast a filtered stream on this system in {file} on line {line}
@@ -178,7 +178,7 @@ For more details about its behavior, see also the [`append()`](#append) function
The `fun($filter, $parameters = null)` function can be used to
create a filter function which uses the given built-in `$filter`.
PHP comes with a useful set of [built-in filters](http://php.net/manual/en/filters.php).
PHP comes with a useful set of [built-in filters](https://www.php.net/manual/en/filters.php).
Using `fun()` makes accessing these as easy as passing an input string to filter
and getting the filtered output string.
@@ -191,7 +191,7 @@ assert('test' === $fun($fun('test'));
Please note that not all filter functions may be available depending on installed
PHP extensions and the PHP version in use.
In particular, [HHVM](http://hhvm.com/) may not offer the same filter functions
In particular, [HHVM](https://hhvm.com/) may not offer the same filter functions
or parameters as Zend PHP.
Accessing an unknown filter function will result in a `RuntimeException`:
@@ -218,7 +218,7 @@ assert('<b>hi</b>' === $ret);
Under the hood, this function allocates a temporary memory stream, so it's
recommended to clean up the filter function after use.
Also, some filter functions (in particular the
[zlib compression filters](http://php.net/manual/en/filters.compression.php))
[zlib compression filters](https://www.php.net/manual/en/filters.compression.php))
may use internal buffers and may emit a final data chunk on close.
The filter function can be closed by invoking without any arguments:
@@ -263,10 +263,11 @@ Filter\remove($filter);
The recommended way to install this library is [through Composer](https://getcomposer.org).
[New to Composer?](https://getcomposer.org/doc/00-intro.md)
This project follows [SemVer](https://semver.org/).
This will install the latest supported version:
```bash
$ composer require clue/stream-filter:^1.4
$ composer require clue/stream-filter:^1.4.1
```
See also the [CHANGELOG](CHANGELOG.md) for details about version upgrades.
@@ -280,7 +281,7 @@ Older PHP versions may suffer from a number of inconsistencies documented above.
## Tests
To run the test suite, you first need to clone this repo and then install all
dependencies [through Composer](http://getcomposer.org):
dependencies [through Composer](https://getcomposer.org):
```bash
$ composer install
@@ -294,4 +295,7 @@ $ php vendor/bin/phpunit
## License
MIT
This project is released under the permissive [MIT license](LICENSE).
> Did you know that I offer custom development services and issuing invoices for
sponsorships of releases and for contributions? Contact me (@clue) for details.

View File

@@ -18,6 +18,6 @@
},
"autoload": {
"psr-4": { "Clue\\StreamFilter\\": "src/" },
"files": [ "src/functions.php" ]
"files": [ "src/functions_include.php" ]
}
}

View File

@@ -0,0 +1,5 @@
<?php
if (!function_exists('Clue\\StreamFilter\\append')) {
require __DIR__ . '/functions.php';
}

View File

@@ -41,4 +41,21 @@ class FunTest extends PHPUnit_Framework_TestCase
{
Filter\fun('unknown');
}
public function testFunInBase64()
{
$encode = Filter\fun('convert.base64-encode');
$decode = Filter\fun('convert.base64-decode');
$string = 'test';
$this->assertEquals(base64_encode($string), $encode($string) . $encode());
$this->assertEquals($string, $decode(base64_encode($string)));
$encode = Filter\fun('convert.base64-encode');
$decode = Filter\fun('convert.base64-decode');
$this->assertEquals($string, $decode($encode($string) . $encode()));
$encode = Filter\fun('convert.base64-encode');
$this->assertEquals(null, $encode());
}
}

View File

@@ -379,9 +379,9 @@ class ClassLoader
$subPath = substr($subPath, 0, $lastPos);
$search = $subPath.'\\';
if (isset($this->prefixDirsPsr4[$search])) {
$pathEnd = DIRECTORY_SEPARATOR . substr($logicalPathPsr4, $lastPos + 1);
foreach ($this->prefixDirsPsr4[$search] as $dir) {
$length = $this->prefixLengthsPsr4[$first][$search];
if (file_exists($file = $dir . DIRECTORY_SEPARATOR . substr($logicalPathPsr4, $length))) {
if (file_exists($file = $dir . $pathEnd)) {
return $file;
}
}

View File

@@ -1,21 +1,56 @@
Format: http://www.debian.org/doc/packaging-manuals/copyright-format/1.0/
Upstream-Name: Composer
Upstream-Contact: Jordi Boggiano <j.boggiano@seld.be>
Source: https://github.com/composer/composer
Copyright (c) Nils Adermann, Jordi Boggiano
Files: *
Copyright: 2016, Nils Adermann <naderman@naderman.de>
2016, Jordi Boggiano <j.boggiano@seld.be>
License: Expat
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:
Files: src/Composer/Util/TlsHelper.php
Copyright: 2016, Nils Adermann <naderman@naderman.de>
2016, Jordi Boggiano <j.boggiano@seld.be>
2013, Evan Coury <me@evancoury.com>
License: Expat and BSD-2-Clause
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.
License: BSD-2-Clause
Redistribution and use in source and binary forms, with or without modification,
are permitted provided that the following conditions are met:
.
* Redistributions of source code must retain the above copyright notice,
this list of conditions and the following disclaimer.
.
* Redistributions in binary form must reproduce the above copyright notice,
this list of conditions and the following disclaimer in the documentation
and/or other materials provided with the distribution.
.
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
License: Expat
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.

Some files were not shown because too many files have changed in this diff Show More